diff options
Diffstat (limited to 'contrib/one-true-awk/awk.h')
| -rw-r--r-- | contrib/one-true-awk/awk.h | 231 | 
1 files changed, 231 insertions, 0 deletions
diff --git a/contrib/one-true-awk/awk.h b/contrib/one-true-awk/awk.h new file mode 100644 index 0000000000000..25fed1448f714 --- /dev/null +++ b/contrib/one-true-awk/awk.h @@ -0,0 +1,231 @@ +/**************************************************************** +Copyright (C) Lucent Technologies 1997 +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name Lucent Technologies or any of +its entities not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +****************************************************************/ + +typedef double	Awkfloat; + +/* unsigned char is more trouble than it's worth */ + +typedef	unsigned char uschar; + +#define	xfree(a)	{ if ((a) != NULL) { free((char *) a); a = NULL; } } + +#define	DEBUG +#ifdef	DEBUG +			/* uses have to be doubly parenthesized */ +#	define	dprintf(x)	if (dbg) printf x +#else +#	define	dprintf(x) +#endif + +extern	char	errbuf[]; + +extern int	compile_time;	/* 1 if compiling, 0 if running */ +extern int	safe;		/* 0 => unsafe, 1 => safe */ + +#define	RECSIZE	(8 * 1024)	/* sets limit on records, fields, etc., etc. */ +extern int	recsize;	/* size of current record, orig RECSIZE */ + +extern char	**FS; +extern char	**RS; +extern char	**ORS; +extern char	**OFS; +extern char	**OFMT; +extern Awkfloat *NR; +extern Awkfloat *FNR; +extern Awkfloat *NF; +extern char	**FILENAME; +extern char	**SUBSEP; +extern Awkfloat *RSTART; +extern Awkfloat *RLENGTH; + +extern char	*record;	/* points to $0 */ +extern int	lineno;		/* line number in awk program */ +extern int	errorflag;	/* 1 if error has occurred */ +extern int	donefld;	/* 1 if record broken into fields */ +extern int	donerec;	/* 1 if record is valid (no fld has changed */ +extern char	inputFS[];	/* FS at time of input, for field splitting */ + +extern int	dbg; + +extern	char	*patbeg;	/* beginning of pattern matched */ +extern	int	patlen;		/* length of pattern matched.  set in b.c */ + +/* Cell:  all information about a variable or constant */ + +typedef struct Cell { +	uschar	ctype;		/* OCELL, OBOOL, OJUMP, etc. */ +	uschar	csub;		/* CCON, CTEMP, CFLD, etc. */ +	char	*nval;		/* name, for variables only */ +	char	*sval;		/* string value */ +	Awkfloat fval;		/* value as number */ +	int	 tval;		/* type info: STR|NUM|ARR|FCN|FLD|CON|DONTFREE */ +	struct Cell *cnext;	/* ptr to next if chained */ +} Cell; + +typedef struct Array {		/* symbol table array */ +	int	nelem;		/* elements in table right now */ +	int	size;		/* size of tab */ +	Cell	**tab;		/* hash table pointers */ +} Array; + +#define	NSYMTAB	50	/* initial size of a symbol table */ +extern Array	*symtab; + +extern Cell	*nrloc;		/* NR */ +extern Cell	*fnrloc;	/* FNR */ +extern Cell	*nfloc;		/* NF */ +extern Cell	*rstartloc;	/* RSTART */ +extern Cell	*rlengthloc;	/* RLENGTH */ + +/* Cell.tval values: */ +#define	NUM	01	/* number value is valid */ +#define	STR	02	/* string value is valid */ +#define DONTFREE 04	/* string space is not freeable */ +#define	CON	010	/* this is a constant */ +#define	ARR	020	/* this is an array */ +#define	FCN	040	/* this is a function name */ +#define FLD	0100	/* this is a field $1, $2, ... */ +#define	REC	0200	/* this is $0 */ + + +/* function types */ +#define	FLENGTH	1 +#define	FSQRT	2 +#define	FEXP	3 +#define	FLOG	4 +#define	FINT	5 +#define	FSYSTEM	6 +#define	FRAND	7 +#define	FSRAND	8 +#define	FSIN	9 +#define	FCOS	10 +#define	FATAN	11 +#define	FTOUPPER 12 +#define	FTOLOWER 13 +#define	FFLUSH	14 + +/* Node:  parse tree is made of nodes, with Cell's at bottom */ + +typedef struct Node { +	int	ntype; +	struct	Node *nnext; +	int	lineno; +	int	nobj; +	struct	Node *narg[1];	/* variable: actual size set by calling malloc */ +} Node; + +#define	NIL	((Node *) 0) + +extern Node	*winner; +extern Node	*nullstat; +extern Node	*nullnode; + +/* ctypes */ +#define OCELL	1 +#define OBOOL	2 +#define OJUMP	3 + +/* Cell subtypes: csub */ +#define	CFREE	7 +#define CCOPY	6 +#define CCON	5 +#define CTEMP	4 +#define CNAME	3  +#define CVAR	2 +#define CFLD	1 +#define	CUNK	0 + +/* bool subtypes */ +#define BTRUE	11 +#define BFALSE	12 + +/* jump subtypes */ +#define JEXIT	21 +#define JNEXT	22 +#define	JBREAK	23 +#define	JCONT	24 +#define	JRET	25 +#define	JNEXTFILE	26 + +/* node types */ +#define NVALUE	1 +#define NSTAT	2 +#define NEXPR	3 + + +extern	int	pairstack[], paircnt; + +#define notlegal(n)	(n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN] == nullproc) +#define isvalue(n)	((n)->ntype == NVALUE) +#define isexpr(n)	((n)->ntype == NEXPR) +#define isjump(n)	((n)->ctype == OJUMP) +#define isexit(n)	((n)->csub == JEXIT) +#define	isbreak(n)	((n)->csub == JBREAK) +#define	iscont(n)	((n)->csub == JCONT) +#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) +#define isstr(n)	((n)->tval & STR) +#define isnum(n)	((n)->tval & NUM) +#define isarr(n)	((n)->tval & ARR) +#define isfcn(n)	((n)->tval & FCN) +#define istrue(n)	((n)->csub == BTRUE) +#define istemp(n)	((n)->csub == CTEMP) +#define	isargument(n)	((n)->nobj == ARG) +/* #define freeable(p)	(!((p)->tval & DONTFREE)) */ +#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 NSTATES	32 + +typedef struct rrow { +	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; + +typedef struct fa { +	uschar	gototab[NSTATES][NCHARS]; +	uschar	out[NSTATES]; +	uschar	*restr; +	int	*posns[NSTATES]; +	int	anchor; +	int	use; +	int	initstat; +	int	curstat; +	int	accept; +	int	reset; +	struct	rrow re[1];	/* variable: actual size set by calling malloc */ +} fa; + + +#include "proto.h"  | 
