summaryrefslogtreecommitdiff
path: root/usr/src/cmd/awk/awk.h
diff options
context:
space:
mode:
authorCody Peter Mello <cody.mello@joyent.com>2018-10-15 20:43:39 +0000
committerCody Peter Mello <cody.mello@joyent.com>2019-06-13 18:47:50 +0000
commitdc71967bb00f2ca084cee5c8efb7ff3751401206 (patch)
tree892455f601094148368dca4cdd8be5947ec8ff4c /usr/src/cmd/awk/awk.h
parentd0ca0fd545f68d9afab9400f4b46c79e6fedbce9 (diff)
downloadillumos-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.h57
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);