17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 57c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 67c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 77c478bd9Sstevel@tonic-gate * with the License. 87c478bd9Sstevel@tonic-gate * 97c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 107c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 117c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 127c478bd9Sstevel@tonic-gate * and limitations under the License. 137c478bd9Sstevel@tonic-gate * 147c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 157c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 167c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 177c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 187c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 197c478bd9Sstevel@tonic-gate * 207c478bd9Sstevel@tonic-gate * CDDL HEADER END 217c478bd9Sstevel@tonic-gate */ 22*1ee2e5faSnakanon 23*1ee2e5faSnakanon /* 24*1ee2e5faSnakanon * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 25*1ee2e5faSnakanon * Use is subject to license terms. 26*1ee2e5faSnakanon */ 27*1ee2e5faSnakanon 287c478bd9Sstevel@tonic-gate /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 297c478bd9Sstevel@tonic-gate /* All Rights Reserved */ 307c478bd9Sstevel@tonic-gate 31*1ee2e5faSnakanon #ifndef AWK_H 32*1ee2e5faSnakanon #define AWK_H 337c478bd9Sstevel@tonic-gate 34*1ee2e5faSnakanon #pragma ident "%Z%%M% %I% %E% SMI" 357c478bd9Sstevel@tonic-gate 367c478bd9Sstevel@tonic-gate #include <sys/types.h> 37*1ee2e5faSnakanon #include <ctype.h> 38*1ee2e5faSnakanon #include <stdio.h> 39*1ee2e5faSnakanon #include <stdlib.h> 40*1ee2e5faSnakanon #include <string.h> 41*1ee2e5faSnakanon #include <libintl.h> 427c478bd9Sstevel@tonic-gate #include <limits.h> 437c478bd9Sstevel@tonic-gate 447c478bd9Sstevel@tonic-gate typedef double Awkfloat; 457c478bd9Sstevel@tonic-gate typedef unsigned char uchar; 467c478bd9Sstevel@tonic-gate 477c478bd9Sstevel@tonic-gate #define xfree(a) { if ((a) != NULL) { free(a); a = NULL; } } 487c478bd9Sstevel@tonic-gate 497c478bd9Sstevel@tonic-gate #define DEBUG 507c478bd9Sstevel@tonic-gate #ifdef DEBUG 517c478bd9Sstevel@tonic-gate /* uses have to be doubly parenthesized */ 52*1ee2e5faSnakanon #define dprintf(x) if (dbg) (void) printf x 537c478bd9Sstevel@tonic-gate #else 547c478bd9Sstevel@tonic-gate #define dprintf(x) 557c478bd9Sstevel@tonic-gate #endif 567c478bd9Sstevel@tonic-gate 577c478bd9Sstevel@tonic-gate extern char errbuf[200]; 58*1ee2e5faSnakanon extern void error(int, char *); 59*1ee2e5faSnakanon #define ERROR (void) snprintf(errbuf, sizeof (errbuf), 60*1ee2e5faSnakanon /*CSTYLED*/ 617c478bd9Sstevel@tonic-gate #define FATAL ), error(1, errbuf) 62*1ee2e5faSnakanon /*CSTYLED*/ 637c478bd9Sstevel@tonic-gate #define WARNING ), error(0, errbuf) 64*1ee2e5faSnakanon /*CSTYLED*/ 657c478bd9Sstevel@tonic-gate #define SYNTAX ), yyerror(errbuf) 66*1ee2e5faSnakanon /*CSTYLED*/ 67*1ee2e5faSnakanon #define CONT ) 687c478bd9Sstevel@tonic-gate 697c478bd9Sstevel@tonic-gate extern int compile_time; /* 1 if compiling, 0 if running */ 707c478bd9Sstevel@tonic-gate 71*1ee2e5faSnakanon #define FLD_INCR 64 72*1ee2e5faSnakanon #define LINE_INCR 256 737c478bd9Sstevel@tonic-gate 74*1ee2e5faSnakanon /* ensure that there is extra 1 byte in the buffer */ 75*1ee2e5faSnakanon #define expand_buf(p, n, r) \ 76*1ee2e5faSnakanon if (*(n) == 0 || (r) >= (*(n) - 1)) r_expand_buf(p, n, r) 777c478bd9Sstevel@tonic-gate 787c478bd9Sstevel@tonic-gate extern uchar **FS; 797c478bd9Sstevel@tonic-gate extern uchar **RS; 807c478bd9Sstevel@tonic-gate extern uchar **ORS; 817c478bd9Sstevel@tonic-gate extern uchar **OFS; 827c478bd9Sstevel@tonic-gate extern uchar **OFMT; 837c478bd9Sstevel@tonic-gate extern Awkfloat *NR; 847c478bd9Sstevel@tonic-gate extern Awkfloat *FNR; 857c478bd9Sstevel@tonic-gate extern Awkfloat *NF; 867c478bd9Sstevel@tonic-gate extern uchar **FILENAME; 877c478bd9Sstevel@tonic-gate extern uchar **SUBSEP; 887c478bd9Sstevel@tonic-gate extern Awkfloat *RSTART; 897c478bd9Sstevel@tonic-gate extern Awkfloat *RLENGTH; 907c478bd9Sstevel@tonic-gate 917c478bd9Sstevel@tonic-gate extern uchar *record; 92*1ee2e5faSnakanon extern size_t record_size; 937c478bd9Sstevel@tonic-gate extern int errorflag; 947c478bd9Sstevel@tonic-gate extern int donefld; /* 1 if record broken into fields */ 957c478bd9Sstevel@tonic-gate extern int donerec; /* 1 if record is valid (no fld has changed */ 967c478bd9Sstevel@tonic-gate 977c478bd9Sstevel@tonic-gate extern uchar *patbeg; /* beginning of pattern matched */ 987c478bd9Sstevel@tonic-gate extern int patlen; /* length. set in b.c */ 997c478bd9Sstevel@tonic-gate 1007c478bd9Sstevel@tonic-gate /* Cell: all information about a variable or constant */ 1017c478bd9Sstevel@tonic-gate 1027c478bd9Sstevel@tonic-gate typedef struct Cell { 1037c478bd9Sstevel@tonic-gate uchar ctype; /* OCELL, OBOOL, OJUMP, etc. */ 1047c478bd9Sstevel@tonic-gate uchar csub; /* CCON, CTEMP, CFLD, etc. */ 1057c478bd9Sstevel@tonic-gate uchar *nval; /* name, for variables only */ 1067c478bd9Sstevel@tonic-gate uchar *sval; /* string value */ 1077c478bd9Sstevel@tonic-gate Awkfloat fval; /* value as number */ 108*1ee2e5faSnakanon unsigned tval; 109*1ee2e5faSnakanon /* type info: STR|NUM|ARR|FCN|FLD|CON|DONTFREE */ 1107c478bd9Sstevel@tonic-gate struct Cell *cnext; /* ptr to next if chained */ 1117c478bd9Sstevel@tonic-gate } Cell; 1127c478bd9Sstevel@tonic-gate 1137c478bd9Sstevel@tonic-gate typedef struct { /* symbol table array */ 1147c478bd9Sstevel@tonic-gate int nelem; /* elements in table right now */ 1157c478bd9Sstevel@tonic-gate int size; /* size of tab */ 1167c478bd9Sstevel@tonic-gate Cell **tab; /* hash table pointers */ 1177c478bd9Sstevel@tonic-gate } Array; 1187c478bd9Sstevel@tonic-gate 1197c478bd9Sstevel@tonic-gate #define NSYMTAB 50 /* initial size of a symbol table */ 120*1ee2e5faSnakanon extern Array *symtab, *makesymtab(int); 121*1ee2e5faSnakanon extern Cell *setsymtab(uchar *, uchar *, Awkfloat, unsigned int, Array *); 122*1ee2e5faSnakanon extern Cell *lookup(uchar *, Array *); 1237c478bd9Sstevel@tonic-gate 1247c478bd9Sstevel@tonic-gate extern Cell *recloc; /* location of input record */ 1257c478bd9Sstevel@tonic-gate extern Cell *nrloc; /* NR */ 1267c478bd9Sstevel@tonic-gate extern Cell *fnrloc; /* FNR */ 1277c478bd9Sstevel@tonic-gate extern Cell *nfloc; /* NF */ 1287c478bd9Sstevel@tonic-gate extern Cell *rstartloc; /* RSTART */ 1297c478bd9Sstevel@tonic-gate extern Cell *rlengthloc; /* RLENGTH */ 1307c478bd9Sstevel@tonic-gate 1317c478bd9Sstevel@tonic-gate /* Cell.tval values: */ 1327c478bd9Sstevel@tonic-gate #define NUM 01 /* number value is valid */ 1337c478bd9Sstevel@tonic-gate #define STR 02 /* string value is valid */ 1347c478bd9Sstevel@tonic-gate #define DONTFREE 04 /* string space is not freeable */ 1357c478bd9Sstevel@tonic-gate #define CON 010 /* this is a constant */ 1367c478bd9Sstevel@tonic-gate #define ARR 020 /* this is an array */ 1377c478bd9Sstevel@tonic-gate #define FCN 040 /* this is a function name */ 1387c478bd9Sstevel@tonic-gate #define FLD 0100 /* this is a field $1, $2, ... */ 1397c478bd9Sstevel@tonic-gate #define REC 0200 /* this is $0 */ 1407c478bd9Sstevel@tonic-gate 1417c478bd9Sstevel@tonic-gate #define freeable(p) (!((p)->tval & DONTFREE)) 1427c478bd9Sstevel@tonic-gate 143*1ee2e5faSnakanon extern Awkfloat setfval(Cell *, Awkfloat), getfval(Cell *), r_getfval(Cell *); 144*1ee2e5faSnakanon extern uchar *setsval(Cell *, uchar *), *getsval(Cell *), *r_getsval(Cell *); 145*1ee2e5faSnakanon extern uchar *tostring(uchar *), *tokname(int), *qstring(uchar *, int); 1467c478bd9Sstevel@tonic-gate 147*1ee2e5faSnakanon #define getfval(p) \ 148*1ee2e5faSnakanon (((p)->tval & (ARR|FLD|REC|NUM)) == NUM ? (p)->fval : r_getfval(p)) 149*1ee2e5faSnakanon #define getsval(p) \ 150*1ee2e5faSnakanon (((p)->tval & (ARR|FLD|REC|STR)) == STR ? (p)->sval : r_getsval(p)) 1517c478bd9Sstevel@tonic-gate 1527c478bd9Sstevel@tonic-gate /* function types */ 1537c478bd9Sstevel@tonic-gate #define FLENGTH 1 1547c478bd9Sstevel@tonic-gate #define FSQRT 2 1557c478bd9Sstevel@tonic-gate #define FEXP 3 1567c478bd9Sstevel@tonic-gate #define FLOG 4 1577c478bd9Sstevel@tonic-gate #define FINT 5 1587c478bd9Sstevel@tonic-gate #define FSYSTEM 6 1597c478bd9Sstevel@tonic-gate #define FRAND 7 1607c478bd9Sstevel@tonic-gate #define FSRAND 8 1617c478bd9Sstevel@tonic-gate #define FSIN 9 1627c478bd9Sstevel@tonic-gate #define FCOS 10 1637c478bd9Sstevel@tonic-gate #define FATAN 11 1647c478bd9Sstevel@tonic-gate #define FTOUPPER 12 1657c478bd9Sstevel@tonic-gate #define FTOLOWER 13 1667c478bd9Sstevel@tonic-gate 1677c478bd9Sstevel@tonic-gate /* Node: parse tree is made of nodes, with Cell's at bottom */ 1687c478bd9Sstevel@tonic-gate 1697c478bd9Sstevel@tonic-gate typedef struct Node { 1707c478bd9Sstevel@tonic-gate int ntype; 1717c478bd9Sstevel@tonic-gate struct Node *nnext; 1727c478bd9Sstevel@tonic-gate off_t lineno; 1737c478bd9Sstevel@tonic-gate int nobj; 174*1ee2e5faSnakanon struct Node *narg[1]; 175*1ee2e5faSnakanon /* variable: actual size set by calling malloc */ 1767c478bd9Sstevel@tonic-gate } Node; 1777c478bd9Sstevel@tonic-gate 1787c478bd9Sstevel@tonic-gate #define NIL ((Node *)0) 1797c478bd9Sstevel@tonic-gate 1807c478bd9Sstevel@tonic-gate extern Node *winner; 1817c478bd9Sstevel@tonic-gate extern Node *nullstat; 1827c478bd9Sstevel@tonic-gate extern Node *nullnode; 1837c478bd9Sstevel@tonic-gate 1847c478bd9Sstevel@tonic-gate /* ctypes */ 1857c478bd9Sstevel@tonic-gate #define OCELL 1 1867c478bd9Sstevel@tonic-gate #define OBOOL 2 1877c478bd9Sstevel@tonic-gate #define OJUMP 3 1887c478bd9Sstevel@tonic-gate 1897c478bd9Sstevel@tonic-gate /* Cell subtypes: csub */ 1907c478bd9Sstevel@tonic-gate #define CFREE 7 1917c478bd9Sstevel@tonic-gate #define CCOPY 6 1927c478bd9Sstevel@tonic-gate #define CCON 5 1937c478bd9Sstevel@tonic-gate #define CTEMP 4 1947c478bd9Sstevel@tonic-gate #define CNAME 3 1957c478bd9Sstevel@tonic-gate #define CVAR 2 1967c478bd9Sstevel@tonic-gate #define CFLD 1 1977c478bd9Sstevel@tonic-gate 1987c478bd9Sstevel@tonic-gate /* bool subtypes */ 1997c478bd9Sstevel@tonic-gate #define BTRUE 11 2007c478bd9Sstevel@tonic-gate #define BFALSE 12 2017c478bd9Sstevel@tonic-gate 2027c478bd9Sstevel@tonic-gate /* jump subtypes */ 2037c478bd9Sstevel@tonic-gate #define JEXIT 21 2047c478bd9Sstevel@tonic-gate #define JNEXT 22 2057c478bd9Sstevel@tonic-gate #define JBREAK 23 2067c478bd9Sstevel@tonic-gate #define JCONT 24 2077c478bd9Sstevel@tonic-gate #define JRET 25 2087c478bd9Sstevel@tonic-gate 2097c478bd9Sstevel@tonic-gate /* node types */ 2107c478bd9Sstevel@tonic-gate #define NVALUE 1 2117c478bd9Sstevel@tonic-gate #define NSTAT 2 2127c478bd9Sstevel@tonic-gate #define NEXPR 3 2137c478bd9Sstevel@tonic-gate #define NFIELD 4 2147c478bd9Sstevel@tonic-gate 215*1ee2e5faSnakanon extern Cell *(*proctab[])(Node **, int); 216*1ee2e5faSnakanon extern Cell *nullproc(Node **, int); 2177c478bd9Sstevel@tonic-gate extern int pairstack[], paircnt; 2187c478bd9Sstevel@tonic-gate 219*1ee2e5faSnakanon extern Node *stat1(int, Node *), *stat2(int, Node *, Node *); 220*1ee2e5faSnakanon extern Node *stat3(int, Node *, Node *, Node *); 221*1ee2e5faSnakanon extern Node *stat4(int, Node *, Node *, Node *, Node *); 222*1ee2e5faSnakanon extern Node *pa2stat(Node *, Node *, Node *); 223*1ee2e5faSnakanon extern Node *op1(int, Node *), *op2(int, Node *, Node *); 224*1ee2e5faSnakanon extern Node *op3(int, Node *, Node *, Node *); 225*1ee2e5faSnakanon extern Node *op4(int, Node *, Node *, Node *, Node *); 226*1ee2e5faSnakanon extern Node *linkum(Node *, Node *), *valtonode(Cell *, int); 227*1ee2e5faSnakanon extern Node *rectonode(void), *exptostat(Node *); 228*1ee2e5faSnakanon extern Node *makearr(Node *); 2297c478bd9Sstevel@tonic-gate 230*1ee2e5faSnakanon #define notlegal(n) \ 231*1ee2e5faSnakanon (n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN] == nullproc) 2327c478bd9Sstevel@tonic-gate #define isvalue(n) ((n)->ntype == NVALUE) 2337c478bd9Sstevel@tonic-gate #define isexpr(n) ((n)->ntype == NEXPR) 2347c478bd9Sstevel@tonic-gate #define isjump(n) ((n)->ctype == OJUMP) 2357c478bd9Sstevel@tonic-gate #define isexit(n) ((n)->csub == JEXIT) 2367c478bd9Sstevel@tonic-gate #define isbreak(n) ((n)->csub == JBREAK) 2377c478bd9Sstevel@tonic-gate #define iscont(n) ((n)->csub == JCONT) 2387c478bd9Sstevel@tonic-gate #define isnext(n) ((n)->csub == JNEXT) 2397c478bd9Sstevel@tonic-gate #define isret(n) ((n)->csub == JRET) 2407c478bd9Sstevel@tonic-gate #define isstr(n) ((n)->tval & STR) 2417c478bd9Sstevel@tonic-gate #define isnum(n) ((n)->tval & NUM) 2427c478bd9Sstevel@tonic-gate #define isarr(n) ((n)->tval & ARR) 2437c478bd9Sstevel@tonic-gate #define isfunc(n) ((n)->tval & FCN) 2447c478bd9Sstevel@tonic-gate #define istrue(n) ((n)->csub == BTRUE) 2457c478bd9Sstevel@tonic-gate #define istemp(n) ((n)->csub == CTEMP) 2467c478bd9Sstevel@tonic-gate 2477c478bd9Sstevel@tonic-gate #define NCHARS (256+1) 2487c478bd9Sstevel@tonic-gate #define NSTATES 32 2497c478bd9Sstevel@tonic-gate 2507c478bd9Sstevel@tonic-gate typedef struct rrow { 2517c478bd9Sstevel@tonic-gate int ltype; 2527c478bd9Sstevel@tonic-gate int lval; 2537c478bd9Sstevel@tonic-gate int *lfollow; 2547c478bd9Sstevel@tonic-gate } rrow; 2557c478bd9Sstevel@tonic-gate 2567c478bd9Sstevel@tonic-gate typedef struct fa { 2577c478bd9Sstevel@tonic-gate uchar *restr; 2587c478bd9Sstevel@tonic-gate int anchor; 2597c478bd9Sstevel@tonic-gate int use; 2607c478bd9Sstevel@tonic-gate uchar gototab[NSTATES][NCHARS]; 2617c478bd9Sstevel@tonic-gate int *posns[NSTATES]; 2627c478bd9Sstevel@tonic-gate uchar out[NSTATES]; 2637c478bd9Sstevel@tonic-gate int initstat; 2647c478bd9Sstevel@tonic-gate int curstat; 2657c478bd9Sstevel@tonic-gate int accept; 2667c478bd9Sstevel@tonic-gate int reset; 2677c478bd9Sstevel@tonic-gate struct rrow re[1]; 2687c478bd9Sstevel@tonic-gate } fa; 2697c478bd9Sstevel@tonic-gate 270*1ee2e5faSnakanon /* b.c */ 271*1ee2e5faSnakanon extern fa *makedfa(uchar *, int); 272*1ee2e5faSnakanon extern int nematch(fa *, uchar *); 273*1ee2e5faSnakanon extern int match(fa *, uchar *); 274*1ee2e5faSnakanon extern int pmatch(fa *, uchar *); 275*1ee2e5faSnakanon 276*1ee2e5faSnakanon /* lib.c */ 277*1ee2e5faSnakanon extern int isclvar(uchar *); 278*1ee2e5faSnakanon extern int is_number(uchar *); 279*1ee2e5faSnakanon extern void setclvar(uchar *); 280*1ee2e5faSnakanon extern int readrec(uchar **, size_t *, FILE *); 281*1ee2e5faSnakanon extern void bracecheck(void); 282*1ee2e5faSnakanon extern void syminit(void); 283*1ee2e5faSnakanon extern void yyerror(char *); 284*1ee2e5faSnakanon extern void fldbld(void); 285*1ee2e5faSnakanon extern void recbld(void); 286*1ee2e5faSnakanon extern int getrec(uchar **, size_t *); 287*1ee2e5faSnakanon extern Cell *fieldadr(int); 288*1ee2e5faSnakanon extern void newfld(int); 289*1ee2e5faSnakanon extern Cell *getfld(int); 290*1ee2e5faSnakanon extern int fldidx(Cell *); 291*1ee2e5faSnakanon extern double errcheck(double, char *); 292*1ee2e5faSnakanon extern void fpecatch(int); 293*1ee2e5faSnakanon extern void init_buf(uchar **, size_t *, size_t); 294*1ee2e5faSnakanon extern void adjust_buf(uchar **, size_t); 295*1ee2e5faSnakanon extern void r_expand_buf(uchar **, size_t *, size_t); 296*1ee2e5faSnakanon 297*1ee2e5faSnakanon extern int donefld; 298*1ee2e5faSnakanon extern int donerec; 299*1ee2e5faSnakanon extern uchar *recdata; 300*1ee2e5faSnakanon extern uchar *record; 301*1ee2e5faSnakanon extern size_t record_size; 302*1ee2e5faSnakanon 303*1ee2e5faSnakanon /* main.c */ 304*1ee2e5faSnakanon extern int dbg; 305*1ee2e5faSnakanon extern uchar *cmdname; 306*1ee2e5faSnakanon extern uchar *lexprog; 307*1ee2e5faSnakanon extern int compile_time; 308*1ee2e5faSnakanon extern char radixpoint; 309*1ee2e5faSnakanon 310*1ee2e5faSnakanon /* tran.c */ 311*1ee2e5faSnakanon extern void syminit(void); 312*1ee2e5faSnakanon extern void arginit(int, uchar **); 313*1ee2e5faSnakanon extern void envinit(uchar **); 314*1ee2e5faSnakanon extern void freesymtab(Cell *); 315*1ee2e5faSnakanon extern void freeelem(Cell *, uchar *); 316*1ee2e5faSnakanon extern void funnyvar(Cell *, char *); 317*1ee2e5faSnakanon extern int hash(uchar *, int); 318*1ee2e5faSnakanon extern Awkfloat *ARGC; 319*1ee2e5faSnakanon 320*1ee2e5faSnakanon /* run.c */ 321*1ee2e5faSnakanon extern void run(Node *); 322*1ee2e5faSnakanon 323*1ee2e5faSnakanon extern int paircnt; 324*1ee2e5faSnakanon extern Node *winner; 325*1ee2e5faSnakanon 326*1ee2e5faSnakanon #ifndef input 327*1ee2e5faSnakanon extern int input(void); 328*1ee2e5faSnakanon #endif 329*1ee2e5faSnakanon extern int yyparse(void); 330*1ee2e5faSnakanon extern FILE *yyin; 331*1ee2e5faSnakanon extern off_t lineno; 332*1ee2e5faSnakanon 333*1ee2e5faSnakanon /* proc */ 334*1ee2e5faSnakanon extern Cell *nullproc(Node **, int); 335*1ee2e5faSnakanon extern Cell *program(Node **, int); 336*1ee2e5faSnakanon extern Cell *boolop(Node **, int); 337*1ee2e5faSnakanon extern Cell *relop(Node **, int); 338*1ee2e5faSnakanon extern Cell *array(Node **, int); 339*1ee2e5faSnakanon extern Cell *indirect(Node **, int); 340*1ee2e5faSnakanon extern Cell *substr(Node **, int); 341*1ee2e5faSnakanon extern Cell *sub(Node **, int); 342*1ee2e5faSnakanon extern Cell *gsub(Node **, int); 343*1ee2e5faSnakanon extern Cell *sindex(Node **, int); 344*1ee2e5faSnakanon extern Cell *asprintf(Node **, int); 345*1ee2e5faSnakanon extern Cell *arith(Node **, int); 346*1ee2e5faSnakanon extern Cell *incrdecr(Node **, int); 347*1ee2e5faSnakanon extern Cell *cat(Node **, int); 348*1ee2e5faSnakanon extern Cell *pastat(Node **, int); 349*1ee2e5faSnakanon extern Cell *dopa2(Node **, int); 350*1ee2e5faSnakanon extern Cell *matchop(Node **, int); 351*1ee2e5faSnakanon extern Cell *intest(Node **, int); 352*1ee2e5faSnakanon extern Cell *aprintf(Node **, int); 353*1ee2e5faSnakanon extern Cell *print(Node **, int); 354*1ee2e5faSnakanon extern Cell *closefile(Node **, int); 355*1ee2e5faSnakanon extern Cell *delete(Node **, int); 356*1ee2e5faSnakanon extern Cell *split(Node **, int); 357*1ee2e5faSnakanon extern Cell *assign(Node **, int); 358*1ee2e5faSnakanon extern Cell *condexpr(Node **, int); 359*1ee2e5faSnakanon extern Cell *ifstat(Node **, int); 360*1ee2e5faSnakanon extern Cell *whilestat(Node **, int); 361*1ee2e5faSnakanon extern Cell *forstat(Node **, int); 362*1ee2e5faSnakanon extern Cell *dostat(Node **, int); 363*1ee2e5faSnakanon extern Cell *instat(Node **, int); 364*1ee2e5faSnakanon extern Cell *jump(Node **, int); 365*1ee2e5faSnakanon extern Cell *bltin(Node **, int); 366*1ee2e5faSnakanon extern Cell *call(Node **, int); 367*1ee2e5faSnakanon extern Cell *arg(Node **, int); 368*1ee2e5faSnakanon extern Cell *getnf(Node **, int); 369*1ee2e5faSnakanon extern Cell *getline(Node **, int); 370*1ee2e5faSnakanon 371*1ee2e5faSnakanon #endif /* AWK_H */ 372