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 58ef4c21aSnakanon * Common Development and Distribution License (the "License"). 68ef4c21aSnakanon * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 211ee2e5faSnakanon 221ee2e5faSnakanon /* 23*23a1cceaSRoger A. Faulkner * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. 241ee2e5faSnakanon */ 251ee2e5faSnakanon 267c478bd9Sstevel@tonic-gate /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 277c478bd9Sstevel@tonic-gate /* All Rights Reserved */ 287c478bd9Sstevel@tonic-gate 291ee2e5faSnakanon #ifndef AWK_H 301ee2e5faSnakanon #define AWK_H 317c478bd9Sstevel@tonic-gate 327c478bd9Sstevel@tonic-gate #include <sys/types.h> 331ee2e5faSnakanon #include <ctype.h> 341ee2e5faSnakanon #include <stdio.h> 351ee2e5faSnakanon #include <stdlib.h> 361ee2e5faSnakanon #include <string.h> 371ee2e5faSnakanon #include <libintl.h> 387c478bd9Sstevel@tonic-gate #include <limits.h> 397c478bd9Sstevel@tonic-gate 407c478bd9Sstevel@tonic-gate typedef double Awkfloat; 417c478bd9Sstevel@tonic-gate typedef unsigned char uchar; 427c478bd9Sstevel@tonic-gate 437c478bd9Sstevel@tonic-gate #define xfree(a) { if ((a) != NULL) { free(a); a = NULL; } } 447c478bd9Sstevel@tonic-gate 457c478bd9Sstevel@tonic-gate #define DEBUG 467c478bd9Sstevel@tonic-gate #ifdef DEBUG 477c478bd9Sstevel@tonic-gate /* uses have to be doubly parenthesized */ 481ee2e5faSnakanon #define dprintf(x) if (dbg) (void) printf x 497c478bd9Sstevel@tonic-gate #else 507c478bd9Sstevel@tonic-gate #define dprintf(x) 517c478bd9Sstevel@tonic-gate #endif 527c478bd9Sstevel@tonic-gate 537c478bd9Sstevel@tonic-gate extern char errbuf[200]; 541ee2e5faSnakanon extern void error(int, char *); 551ee2e5faSnakanon #define ERROR (void) snprintf(errbuf, sizeof (errbuf), 561ee2e5faSnakanon /*CSTYLED*/ 577c478bd9Sstevel@tonic-gate #define FATAL ), error(1, errbuf) 581ee2e5faSnakanon /*CSTYLED*/ 597c478bd9Sstevel@tonic-gate #define WARNING ), error(0, errbuf) 601ee2e5faSnakanon /*CSTYLED*/ 617c478bd9Sstevel@tonic-gate #define SYNTAX ), yyerror(errbuf) 621ee2e5faSnakanon /*CSTYLED*/ 631ee2e5faSnakanon #define CONT ) 647c478bd9Sstevel@tonic-gate 657c478bd9Sstevel@tonic-gate extern int compile_time; /* 1 if compiling, 0 if running */ 667c478bd9Sstevel@tonic-gate 671ee2e5faSnakanon #define FLD_INCR 64 681ee2e5faSnakanon #define LINE_INCR 256 697c478bd9Sstevel@tonic-gate 701ee2e5faSnakanon /* ensure that there is extra 1 byte in the buffer */ 711ee2e5faSnakanon #define expand_buf(p, n, r) \ 721ee2e5faSnakanon if (*(n) == 0 || (r) >= (*(n) - 1)) r_expand_buf(p, n, r) 737c478bd9Sstevel@tonic-gate 747c478bd9Sstevel@tonic-gate extern uchar **FS; 757c478bd9Sstevel@tonic-gate extern uchar **RS; 767c478bd9Sstevel@tonic-gate extern uchar **ORS; 777c478bd9Sstevel@tonic-gate extern uchar **OFS; 787c478bd9Sstevel@tonic-gate extern uchar **OFMT; 797c478bd9Sstevel@tonic-gate extern Awkfloat *NR; 807c478bd9Sstevel@tonic-gate extern Awkfloat *FNR; 817c478bd9Sstevel@tonic-gate extern Awkfloat *NF; 827c478bd9Sstevel@tonic-gate extern uchar **FILENAME; 837c478bd9Sstevel@tonic-gate extern uchar **SUBSEP; 847c478bd9Sstevel@tonic-gate extern Awkfloat *RSTART; 857c478bd9Sstevel@tonic-gate extern Awkfloat *RLENGTH; 867c478bd9Sstevel@tonic-gate 877c478bd9Sstevel@tonic-gate extern uchar *record; 881ee2e5faSnakanon extern size_t record_size; 897c478bd9Sstevel@tonic-gate extern int errorflag; 907c478bd9Sstevel@tonic-gate extern int donefld; /* 1 if record broken into fields */ 917c478bd9Sstevel@tonic-gate extern int donerec; /* 1 if record is valid (no fld has changed */ 927c478bd9Sstevel@tonic-gate 937c478bd9Sstevel@tonic-gate extern uchar *patbeg; /* beginning of pattern matched */ 947c478bd9Sstevel@tonic-gate extern int patlen; /* length. set in b.c */ 957c478bd9Sstevel@tonic-gate 967c478bd9Sstevel@tonic-gate /* Cell: all information about a variable or constant */ 977c478bd9Sstevel@tonic-gate 987c478bd9Sstevel@tonic-gate typedef struct Cell { 997c478bd9Sstevel@tonic-gate uchar ctype; /* OCELL, OBOOL, OJUMP, etc. */ 1007c478bd9Sstevel@tonic-gate uchar csub; /* CCON, CTEMP, CFLD, etc. */ 1017c478bd9Sstevel@tonic-gate uchar *nval; /* name, for variables only */ 1027c478bd9Sstevel@tonic-gate uchar *sval; /* string value */ 1037c478bd9Sstevel@tonic-gate Awkfloat fval; /* value as number */ 1041ee2e5faSnakanon unsigned tval; 1051ee2e5faSnakanon /* type info: STR|NUM|ARR|FCN|FLD|CON|DONTFREE */ 1067c478bd9Sstevel@tonic-gate struct Cell *cnext; /* ptr to next if chained */ 1077c478bd9Sstevel@tonic-gate } Cell; 1087c478bd9Sstevel@tonic-gate 1097c478bd9Sstevel@tonic-gate typedef struct { /* symbol table array */ 1107c478bd9Sstevel@tonic-gate int nelem; /* elements in table right now */ 1117c478bd9Sstevel@tonic-gate int size; /* size of tab */ 1127c478bd9Sstevel@tonic-gate Cell **tab; /* hash table pointers */ 1137c478bd9Sstevel@tonic-gate } Array; 1147c478bd9Sstevel@tonic-gate 1157c478bd9Sstevel@tonic-gate #define NSYMTAB 50 /* initial size of a symbol table */ 1161ee2e5faSnakanon extern Array *symtab, *makesymtab(int); 1171ee2e5faSnakanon extern Cell *setsymtab(uchar *, uchar *, Awkfloat, unsigned int, Array *); 1181ee2e5faSnakanon extern Cell *lookup(uchar *, Array *); 1197c478bd9Sstevel@tonic-gate 1207c478bd9Sstevel@tonic-gate extern Cell *recloc; /* location of input record */ 1217c478bd9Sstevel@tonic-gate extern Cell *nrloc; /* NR */ 1227c478bd9Sstevel@tonic-gate extern Cell *fnrloc; /* FNR */ 1237c478bd9Sstevel@tonic-gate extern Cell *nfloc; /* NF */ 1247c478bd9Sstevel@tonic-gate extern Cell *rstartloc; /* RSTART */ 1257c478bd9Sstevel@tonic-gate extern Cell *rlengthloc; /* RLENGTH */ 1267c478bd9Sstevel@tonic-gate 1277c478bd9Sstevel@tonic-gate /* Cell.tval values: */ 1287c478bd9Sstevel@tonic-gate #define NUM 01 /* number value is valid */ 1297c478bd9Sstevel@tonic-gate #define STR 02 /* string value is valid */ 1307c478bd9Sstevel@tonic-gate #define DONTFREE 04 /* string space is not freeable */ 1317c478bd9Sstevel@tonic-gate #define CON 010 /* this is a constant */ 1327c478bd9Sstevel@tonic-gate #define ARR 020 /* this is an array */ 1337c478bd9Sstevel@tonic-gate #define FCN 040 /* this is a function name */ 1347c478bd9Sstevel@tonic-gate #define FLD 0100 /* this is a field $1, $2, ... */ 1357c478bd9Sstevel@tonic-gate #define REC 0200 /* this is $0 */ 1367c478bd9Sstevel@tonic-gate 1377c478bd9Sstevel@tonic-gate #define freeable(p) (!((p)->tval & DONTFREE)) 1387c478bd9Sstevel@tonic-gate 1391ee2e5faSnakanon extern Awkfloat setfval(Cell *, Awkfloat), getfval(Cell *), r_getfval(Cell *); 1401ee2e5faSnakanon extern uchar *setsval(Cell *, uchar *), *getsval(Cell *), *r_getsval(Cell *); 1411ee2e5faSnakanon extern uchar *tostring(uchar *), *tokname(int), *qstring(uchar *, int); 1427c478bd9Sstevel@tonic-gate 1431ee2e5faSnakanon #define getfval(p) \ 1441ee2e5faSnakanon (((p)->tval & (ARR|FLD|REC|NUM)) == NUM ? (p)->fval : r_getfval(p)) 1451ee2e5faSnakanon #define getsval(p) \ 1461ee2e5faSnakanon (((p)->tval & (ARR|FLD|REC|STR)) == STR ? (p)->sval : r_getsval(p)) 1477c478bd9Sstevel@tonic-gate 1487c478bd9Sstevel@tonic-gate /* function types */ 1497c478bd9Sstevel@tonic-gate #define FLENGTH 1 1507c478bd9Sstevel@tonic-gate #define FSQRT 2 1517c478bd9Sstevel@tonic-gate #define FEXP 3 1527c478bd9Sstevel@tonic-gate #define FLOG 4 1537c478bd9Sstevel@tonic-gate #define FINT 5 1547c478bd9Sstevel@tonic-gate #define FSYSTEM 6 1557c478bd9Sstevel@tonic-gate #define FRAND 7 1567c478bd9Sstevel@tonic-gate #define FSRAND 8 1577c478bd9Sstevel@tonic-gate #define FSIN 9 1587c478bd9Sstevel@tonic-gate #define FCOS 10 1597c478bd9Sstevel@tonic-gate #define FATAN 11 1607c478bd9Sstevel@tonic-gate #define FTOUPPER 12 1617c478bd9Sstevel@tonic-gate #define FTOLOWER 13 1627c478bd9Sstevel@tonic-gate 1637c478bd9Sstevel@tonic-gate /* Node: parse tree is made of nodes, with Cell's at bottom */ 1647c478bd9Sstevel@tonic-gate 1657c478bd9Sstevel@tonic-gate typedef struct Node { 1667c478bd9Sstevel@tonic-gate int ntype; 1677c478bd9Sstevel@tonic-gate struct Node *nnext; 1687c478bd9Sstevel@tonic-gate off_t lineno; 1697c478bd9Sstevel@tonic-gate int nobj; 1701ee2e5faSnakanon struct Node *narg[1]; 1711ee2e5faSnakanon /* variable: actual size set by calling malloc */ 1727c478bd9Sstevel@tonic-gate } Node; 1737c478bd9Sstevel@tonic-gate 1747c478bd9Sstevel@tonic-gate #define NIL ((Node *)0) 1757c478bd9Sstevel@tonic-gate 1767c478bd9Sstevel@tonic-gate extern Node *winner; 1777c478bd9Sstevel@tonic-gate extern Node *nullstat; 1787c478bd9Sstevel@tonic-gate extern Node *nullnode; 1797c478bd9Sstevel@tonic-gate 1807c478bd9Sstevel@tonic-gate /* ctypes */ 1817c478bd9Sstevel@tonic-gate #define OCELL 1 1827c478bd9Sstevel@tonic-gate #define OBOOL 2 1837c478bd9Sstevel@tonic-gate #define OJUMP 3 1847c478bd9Sstevel@tonic-gate 1857c478bd9Sstevel@tonic-gate /* Cell subtypes: csub */ 1867c478bd9Sstevel@tonic-gate #define CFREE 7 1877c478bd9Sstevel@tonic-gate #define CCOPY 6 1887c478bd9Sstevel@tonic-gate #define CCON 5 1897c478bd9Sstevel@tonic-gate #define CTEMP 4 1907c478bd9Sstevel@tonic-gate #define CNAME 3 1917c478bd9Sstevel@tonic-gate #define CVAR 2 1927c478bd9Sstevel@tonic-gate #define CFLD 1 1937c478bd9Sstevel@tonic-gate 1947c478bd9Sstevel@tonic-gate /* bool subtypes */ 1957c478bd9Sstevel@tonic-gate #define BTRUE 11 1967c478bd9Sstevel@tonic-gate #define BFALSE 12 1977c478bd9Sstevel@tonic-gate 1987c478bd9Sstevel@tonic-gate /* jump subtypes */ 1997c478bd9Sstevel@tonic-gate #define JEXIT 21 2007c478bd9Sstevel@tonic-gate #define JNEXT 22 2017c478bd9Sstevel@tonic-gate #define JBREAK 23 2027c478bd9Sstevel@tonic-gate #define JCONT 24 2037c478bd9Sstevel@tonic-gate #define JRET 25 2047c478bd9Sstevel@tonic-gate 2057c478bd9Sstevel@tonic-gate /* node types */ 2067c478bd9Sstevel@tonic-gate #define NVALUE 1 2077c478bd9Sstevel@tonic-gate #define NSTAT 2 2087c478bd9Sstevel@tonic-gate #define NEXPR 3 2097c478bd9Sstevel@tonic-gate #define NFIELD 4 2107c478bd9Sstevel@tonic-gate 2111ee2e5faSnakanon extern Cell *(*proctab[])(Node **, int); 2121ee2e5faSnakanon extern Cell *nullproc(Node **, int); 2137c478bd9Sstevel@tonic-gate extern int pairstack[], paircnt; 2147c478bd9Sstevel@tonic-gate 2151ee2e5faSnakanon extern Node *stat1(int, Node *), *stat2(int, Node *, Node *); 2161ee2e5faSnakanon extern Node *stat3(int, Node *, Node *, Node *); 2171ee2e5faSnakanon extern Node *stat4(int, Node *, Node *, Node *, Node *); 2181ee2e5faSnakanon extern Node *pa2stat(Node *, Node *, Node *); 2191ee2e5faSnakanon extern Node *op1(int, Node *), *op2(int, Node *, Node *); 2201ee2e5faSnakanon extern Node *op3(int, Node *, Node *, Node *); 2211ee2e5faSnakanon extern Node *op4(int, Node *, Node *, Node *, Node *); 2221ee2e5faSnakanon extern Node *linkum(Node *, Node *), *valtonode(Cell *, int); 2231ee2e5faSnakanon extern Node *rectonode(void), *exptostat(Node *); 2241ee2e5faSnakanon extern Node *makearr(Node *); 2257c478bd9Sstevel@tonic-gate 2261ee2e5faSnakanon #define notlegal(n) \ 2271ee2e5faSnakanon (n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN] == nullproc) 2287c478bd9Sstevel@tonic-gate #define isvalue(n) ((n)->ntype == NVALUE) 2297c478bd9Sstevel@tonic-gate #define isexpr(n) ((n)->ntype == NEXPR) 2307c478bd9Sstevel@tonic-gate #define isjump(n) ((n)->ctype == OJUMP) 2317c478bd9Sstevel@tonic-gate #define isexit(n) ((n)->csub == JEXIT) 2327c478bd9Sstevel@tonic-gate #define isbreak(n) ((n)->csub == JBREAK) 2337c478bd9Sstevel@tonic-gate #define iscont(n) ((n)->csub == JCONT) 2347c478bd9Sstevel@tonic-gate #define isnext(n) ((n)->csub == JNEXT) 2357c478bd9Sstevel@tonic-gate #define isret(n) ((n)->csub == JRET) 2367c478bd9Sstevel@tonic-gate #define isstr(n) ((n)->tval & STR) 2377c478bd9Sstevel@tonic-gate #define isnum(n) ((n)->tval & NUM) 2387c478bd9Sstevel@tonic-gate #define isarr(n) ((n)->tval & ARR) 2397c478bd9Sstevel@tonic-gate #define isfunc(n) ((n)->tval & FCN) 2407c478bd9Sstevel@tonic-gate #define istrue(n) ((n)->csub == BTRUE) 2417c478bd9Sstevel@tonic-gate #define istemp(n) ((n)->csub == CTEMP) 2427c478bd9Sstevel@tonic-gate 2437c478bd9Sstevel@tonic-gate #define NCHARS (256+1) 2447c478bd9Sstevel@tonic-gate #define NSTATES 32 2457c478bd9Sstevel@tonic-gate 2467c478bd9Sstevel@tonic-gate typedef struct rrow { 2477c478bd9Sstevel@tonic-gate int ltype; 2487c478bd9Sstevel@tonic-gate int lval; 2497c478bd9Sstevel@tonic-gate int *lfollow; 2507c478bd9Sstevel@tonic-gate } rrow; 2517c478bd9Sstevel@tonic-gate 2527c478bd9Sstevel@tonic-gate typedef struct fa { 2537c478bd9Sstevel@tonic-gate uchar *restr; 2547c478bd9Sstevel@tonic-gate int anchor; 2557c478bd9Sstevel@tonic-gate int use; 2567c478bd9Sstevel@tonic-gate uchar gototab[NSTATES][NCHARS]; 2577c478bd9Sstevel@tonic-gate int *posns[NSTATES]; 2587c478bd9Sstevel@tonic-gate uchar out[NSTATES]; 2597c478bd9Sstevel@tonic-gate int initstat; 2607c478bd9Sstevel@tonic-gate int curstat; 2617c478bd9Sstevel@tonic-gate int accept; 2627c478bd9Sstevel@tonic-gate int reset; 2637c478bd9Sstevel@tonic-gate struct rrow re[1]; 2647c478bd9Sstevel@tonic-gate } fa; 2657c478bd9Sstevel@tonic-gate 2661ee2e5faSnakanon /* b.c */ 2671ee2e5faSnakanon extern fa *makedfa(uchar *, int); 2681ee2e5faSnakanon extern int nematch(fa *, uchar *); 2691ee2e5faSnakanon extern int match(fa *, uchar *); 2701ee2e5faSnakanon extern int pmatch(fa *, uchar *); 2711ee2e5faSnakanon 2721ee2e5faSnakanon /* lib.c */ 2731ee2e5faSnakanon extern int isclvar(uchar *); 2741ee2e5faSnakanon extern int is_number(uchar *); 2751ee2e5faSnakanon extern void setclvar(uchar *); 2761ee2e5faSnakanon extern int readrec(uchar **, size_t *, FILE *); 2771ee2e5faSnakanon extern void bracecheck(void); 2781ee2e5faSnakanon extern void syminit(void); 2791ee2e5faSnakanon extern void yyerror(char *); 2801ee2e5faSnakanon extern void fldbld(void); 2811ee2e5faSnakanon extern void recbld(void); 2821ee2e5faSnakanon extern int getrec(uchar **, size_t *); 2831ee2e5faSnakanon extern Cell *fieldadr(int); 2841ee2e5faSnakanon extern void newfld(int); 2851ee2e5faSnakanon extern Cell *getfld(int); 2861ee2e5faSnakanon extern int fldidx(Cell *); 2871ee2e5faSnakanon extern double errcheck(double, char *); 2881ee2e5faSnakanon extern void fpecatch(int); 2891ee2e5faSnakanon extern void init_buf(uchar **, size_t *, size_t); 2901ee2e5faSnakanon extern void adjust_buf(uchar **, size_t); 2911ee2e5faSnakanon extern void r_expand_buf(uchar **, size_t *, size_t); 2921ee2e5faSnakanon 2931ee2e5faSnakanon extern int donefld; 2941ee2e5faSnakanon extern int donerec; 2951ee2e5faSnakanon extern uchar *record; 2961ee2e5faSnakanon extern size_t record_size; 2971ee2e5faSnakanon 2981ee2e5faSnakanon /* main.c */ 2991ee2e5faSnakanon extern int dbg; 3001ee2e5faSnakanon extern uchar *cmdname; 3011ee2e5faSnakanon extern uchar *lexprog; 3021ee2e5faSnakanon extern int compile_time; 3031ee2e5faSnakanon extern char radixpoint; 3041ee2e5faSnakanon 3051ee2e5faSnakanon /* tran.c */ 3061ee2e5faSnakanon extern void syminit(void); 3071ee2e5faSnakanon extern void arginit(int, uchar **); 3081ee2e5faSnakanon extern void envinit(uchar **); 3091ee2e5faSnakanon extern void freesymtab(Cell *); 3101ee2e5faSnakanon extern void freeelem(Cell *, uchar *); 3111ee2e5faSnakanon extern void funnyvar(Cell *, char *); 3121ee2e5faSnakanon extern int hash(uchar *, int); 3131ee2e5faSnakanon extern Awkfloat *ARGC; 3141ee2e5faSnakanon 3151ee2e5faSnakanon /* run.c */ 3161ee2e5faSnakanon extern void run(Node *); 3171ee2e5faSnakanon 3181ee2e5faSnakanon extern int paircnt; 3191ee2e5faSnakanon extern Node *winner; 3201ee2e5faSnakanon 3211ee2e5faSnakanon #ifndef input 3221ee2e5faSnakanon extern int input(void); 3231ee2e5faSnakanon #endif 3241ee2e5faSnakanon extern int yyparse(void); 3251ee2e5faSnakanon extern FILE *yyin; 3261ee2e5faSnakanon extern off_t lineno; 3271ee2e5faSnakanon 3281ee2e5faSnakanon /* proc */ 3291ee2e5faSnakanon extern Cell *nullproc(Node **, int); 3301ee2e5faSnakanon extern Cell *program(Node **, int); 3311ee2e5faSnakanon extern Cell *boolop(Node **, int); 3321ee2e5faSnakanon extern Cell *relop(Node **, int); 3331ee2e5faSnakanon extern Cell *array(Node **, int); 3341ee2e5faSnakanon extern Cell *indirect(Node **, int); 3351ee2e5faSnakanon extern Cell *substr(Node **, int); 3361ee2e5faSnakanon extern Cell *sub(Node **, int); 3371ee2e5faSnakanon extern Cell *gsub(Node **, int); 3381ee2e5faSnakanon extern Cell *sindex(Node **, int); 339d0983205SRoger A. Faulkner extern Cell *a_sprintf(Node **, int); 3401ee2e5faSnakanon extern Cell *arith(Node **, int); 3411ee2e5faSnakanon extern Cell *incrdecr(Node **, int); 3421ee2e5faSnakanon extern Cell *cat(Node **, int); 3431ee2e5faSnakanon extern Cell *pastat(Node **, int); 3441ee2e5faSnakanon extern Cell *dopa2(Node **, int); 3451ee2e5faSnakanon extern Cell *matchop(Node **, int); 3461ee2e5faSnakanon extern Cell *intest(Node **, int); 3471ee2e5faSnakanon extern Cell *aprintf(Node **, int); 3481ee2e5faSnakanon extern Cell *print(Node **, int); 3491ee2e5faSnakanon extern Cell *closefile(Node **, int); 3501ee2e5faSnakanon extern Cell *delete(Node **, int); 3511ee2e5faSnakanon extern Cell *split(Node **, int); 3521ee2e5faSnakanon extern Cell *assign(Node **, int); 3531ee2e5faSnakanon extern Cell *condexpr(Node **, int); 3541ee2e5faSnakanon extern Cell *ifstat(Node **, int); 3551ee2e5faSnakanon extern Cell *whilestat(Node **, int); 3561ee2e5faSnakanon extern Cell *forstat(Node **, int); 3571ee2e5faSnakanon extern Cell *dostat(Node **, int); 3581ee2e5faSnakanon extern Cell *instat(Node **, int); 3591ee2e5faSnakanon extern Cell *jump(Node **, int); 3601ee2e5faSnakanon extern Cell *bltin(Node **, int); 3611ee2e5faSnakanon extern Cell *call(Node **, int); 3621ee2e5faSnakanon extern Cell *arg(Node **, int); 3631ee2e5faSnakanon extern Cell *getnf(Node **, int); 364*23a1cceaSRoger A. Faulkner extern Cell *getaline(Node **, int); 3651ee2e5faSnakanon 3661ee2e5faSnakanon #endif /* AWK_H */ 367