diff options
author | Cody Peter Mello <cody.mello@joyent.com> | 2018-10-15 20:43:39 +0000 |
---|---|---|
committer | Cody Peter Mello <cody.mello@joyent.com> | 2019-06-13 18:47:50 +0000 |
commit | dc71967bb00f2ca084cee5c8efb7ff3751401206 (patch) | |
tree | 892455f601094148368dca4cdd8be5947ec8ff4c /usr/src/cmd/awk/awk.h | |
parent | d0ca0fd545f68d9afab9400f4b46c79e6fedbce9 (diff) | |
download | illumos-joyent-dc71967bb00f2ca084cee5c8efb7ff3751401206.tar.gz |
OS-7261 Want a more modern nawk(1)
Reviewed by: Robert Mustacchi <rm@joyent.com>
Approved by: Jason King <jbk@joyent.com>
Diffstat (limited to 'usr/src/cmd/awk/awk.h')
-rw-r--r-- | usr/src/cmd/awk/awk.h | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/usr/src/cmd/awk/awk.h b/usr/src/cmd/awk/awk.h index 80e894ea6d..b1db39fadb 100644 --- a/usr/src/cmd/awk/awk.h +++ b/usr/src/cmd/awk/awk.h @@ -53,6 +53,7 @@ #ifndef AWK_H #define AWK_H +#include <assert.h> #include <sys/types.h> #include <ctype.h> #include <stdio.h> @@ -80,9 +81,12 @@ typedef unsigned char uschar; #endif extern int compile_time; /* 1 if compiling, 0 if running */ +extern int safe; /* 0 => unsafe, 1 => safe */ #define FLD_INCR 64 #define LINE_INCR 256 +#define RECSIZE (8 * 1024) /* sets limit on records, fields, etc., etc. */ +extern size_t recsize; /* size of current record, orig RECSIZE */ /* ensure that there is extra 1 byte in the buffer */ #define expand_buf(p, n, r) \ @@ -118,8 +122,10 @@ typedef struct Cell { char *nval; /* name, for variables only */ char *sval; /* string value */ Awkfloat fval; /* value as number */ - unsigned tval; - /* type info: STR|NUM|ARR|FCN|FLD|CON|DONTFREE */ + int tval; + /* type info: STR|NUM|ARR|FCN|FLD|CON|DONTFREE|CONVC|CONVO */ + char *fmt; + /* CONVFMT/OFMT value used to convert from number */ struct Cell *cnext; /* ptr to next if chained */ } Cell; @@ -138,9 +144,15 @@ extern Cell *lookup(const char *, Array *); extern Cell *recloc; /* location of input record */ extern Cell *nrloc; /* NR */ extern Cell *fnrloc; /* FNR */ +extern Cell *fsloc; /* FS */ extern Cell *nfloc; /* NF */ +extern Cell *ofsloc; /* OFS */ +extern Cell *orsloc; /* ORS */ +extern Cell *rsloc; /* RS */ extern Cell *rstartloc; /* RSTART */ extern Cell *rlengthloc; /* RLENGTH */ +extern Cell *subseploc; /* SUBSEP */ +extern Cell *symtabloc; /* SYMTAB */ /* Cell.tval values: */ #define NUM 01 /* number value is valid */ @@ -151,24 +163,19 @@ extern Cell *rlengthloc; /* RLENGTH */ #define FCN 040 /* this is a function name */ #define FLD 0100 /* this is a field $1, $2, ... */ #define REC 0200 /* this is $0 */ +#define CONVC 0400 /* string was converted from number via CONVFMT */ +#define CONVO 01000 /* string was converted from number via OFMT */ -#define freeable(p) (!((p)->tval & DONTFREE)) extern Awkfloat setfval(Cell *, Awkfloat); extern Awkfloat getfval(Cell *); -extern Awkfloat r_getfval(Cell *); extern char *setsval(Cell *, const char *); extern char *getsval(Cell *); -extern char *r_getsval(Cell *); +extern char *getpssval(Cell *); /* for print */ extern char *tostring(const char *); extern char *tokname(int); extern char *qstring(const char *, int); -#define getfval(p) \ - (((p)->tval & (ARR|FLD|REC|NUM)) == NUM ? (p)->fval : r_getfval(p)) -#define getsval(p) \ - (((p)->tval & (ARR|FLD|REC|STR)) == STR ? (p)->sval : r_getsval(p)) - /* function types */ #define FLENGTH 1 #define FSQRT 2 @@ -183,6 +190,7 @@ extern char *qstring(const char *, int); #define FATAN 11 #define FTOUPPER 12 #define FTOLOWER 13 +#define FFLUSH 14 /* Node: parse tree is made of nodes, with Cell's at bottom */ @@ -226,6 +234,7 @@ extern Node *nullnode; #define JBREAK 23 #define JCONT 24 #define JRET 25 +#define JNEXTFILE 26 /* node types */ #define NVALUE 1 @@ -256,7 +265,7 @@ extern Node *makearr(Node *); #define isexit(n) ((n)->csub == JEXIT) #define isbreak(n) ((n)->csub == JBREAK) #define iscont(n) ((n)->csub == JCONT) -#define isnext(n) ((n)->csub == JNEXT) +#define isnext(n) ((n)->csub == JNEXT || (n)->csub == JNEXTFILE) #define isret(n) ((n)->csub == JRET) #define isrec(n) ((n)->tval & REC) #define isfld(n) ((n)->tval & FLD) @@ -266,13 +275,22 @@ extern Node *makearr(Node *); #define isfcn(n) ((n)->tval & FCN) #define istrue(n) ((n)->csub == BTRUE) #define istemp(n) ((n)->csub == CTEMP) +#define freeable(p) (((p)->tval & (STR|DONTFREE)) == STR) + +/* structures used by regular expression matching machinery, mostly b.c: */ -#define NCHARS (256+1) +/* 256 handles 8-bit chars; 128 does 7-bit */ +/* watch out in match(), etc. */ +#define NCHARS (256+3) #define NSTATES 32 typedef struct rrow { - int ltype; - int lval; + long ltype; /* long avoids pointer warnings on 64-bit */ + union { + int i; + Node *np; + uschar *up; + } lval; /* because Al stores a pointer in it! */ int *lfollow; } rrow; @@ -319,6 +337,7 @@ extern void SYNTAX(const char *, ...); extern void FATAL(const char *, ...) __attribute__((__noreturn__)); extern void WARNING(const char *, ...); extern void error(void); +extern void nextfile(void); extern int isclvar(const char *); extern int is_number(const char *); @@ -330,22 +349,21 @@ extern void syminit(void); extern void yyerror(const char *); extern void fldbld(void); extern void recbld(void); -extern int getrec(char **, size_t *); +extern int getrec(char **, size_t *, int); extern Cell *fieldadr(int); extern void newfld(int); -extern Cell *getfld(int); extern int fldidx(Cell *); extern double errcheck(double, const char *); extern void fpecatch(int); -extern void init_buf(char **, size_t *, size_t); -extern void adjust_buf(char **, size_t); extern void r_expand_buf(char **, size_t *, size_t); +extern void makefields(int, int); +extern void growfldtab(int n); +extern void setlastfld(int n); /* main.c */ extern int dbg; extern char *lexprog; extern int compile_time; -extern char radixpoint; extern char *cursource(void); extern int pgetc(void); @@ -361,6 +379,7 @@ extern Awkfloat *ARGC; /* run.c */ extern void run(Node *); +extern const char *filename(FILE *); extern int adjbuf(char **pb, size_t *sz, size_t min, size_t q, char **pbp, const char *what); |