xref: /original-bsd/old/awk/awk.def (revision 264c46cb)
1/*	awk.def	4.2	83/02/09	*/
2
3#define hack	int
4#define	AWKFLOAT	float
5#define	xfree(a)	{ if(a!=NULL) { yfree(a); a=NULL;} }
6#define	strfree(a)	{ if(a!=NULL && a!=EMPTY) { yfree(a);} a=EMPTY; }
7#define yfree free
8#ifdef	DEBUG
9#	define	dprintf	if(dbg)printf
10#else
11#	define	dprintf(x1, x2, x3, x4)
12#endif
13typedef	AWKFLOAT	awkfloat;
14
15extern char	**FS;
16extern char	**RS;
17extern char	**ORS;
18extern char	**OFS;
19extern char	**OFMT;
20extern awkfloat *NR;
21extern awkfloat *NF;
22extern char	**FILENAME;
23
24extern char	record[];
25extern char	EMPTY[];
26extern int	dbg;
27extern int	lineno;
28extern int	errorflag;
29extern int	donefld;	/* 1 if record broken into fields */
30extern int	donerec;	/* 1 if record is valid (no fld has changed */
31
32typedef struct val {	/* general value during processing */
33	char	*nval;	/* name, for variables only */
34	char	*sval;	/* string value */
35	awkfloat	fval;	/* value as number */
36	unsigned	tval;	/* type info */
37	struct val	*nextval;	/* ptr to next if chained */
38} cell;
39extern cell *symtab[];
40cell	*setsymtab(), *lookup(), **makesymtab();
41
42extern cell	*recloc;	/* location of input record */
43extern cell	*nrloc;		/* NR */
44extern cell	*nfloc;		/* NF */
45
46#define	STR	01	/* string value is valid */
47#define	NUM	02	/* number value is valid */
48#define FLD	04	/* FLD means don't free string space */
49#define	CON	010	/* this is a constant */
50#define	ARR	020	/* this is an array */
51
52awkfloat setfval(), getfval();
53char	*setsval(), *getsval();
54char	*tostring(), *tokname(), *malloc();
55double	log(), sqrt(), exp(), atof();
56
57/* function types */
58#define	FLENGTH	1
59#define	FSQRT	2
60#define	FEXP	3
61#define	FLOG	4
62#define	FINT	5
63
64typedef struct {
65	char otype;
66	char osub;
67	cell *optr;
68} obj;
69
70#define BOTCH	1
71struct nd {
72	char ntype;
73	char subtype;
74	struct nd *nnext;
75	int nobj;
76	struct nd *narg[BOTCH];	/* C won't take a zero length array */
77};
78typedef struct nd node;
79extern node	*winner;
80extern node	*nullstat;
81
82/* otypes */
83#define OCELL	0
84#define OEXPR	1
85#define OBOOL	2
86#define OJUMP	3
87
88/* cell subtypes */
89#define CTEMP	4
90#define CNAME	3
91#define CVAR	2
92#define CFLD	1
93#define CCON	0
94
95/* bool subtypes */
96#define BTRUE	1
97#define BFALSE	2
98
99/* jump subtypes */
100#define JEXIT	1
101#define JNEXT	2
102#define	JBREAK	3
103#define	JCONT	4
104
105/* node types */
106#define NVALUE	1
107#define NSTAT	2
108#define NEXPR	3
109#define NPA2	4
110
111extern obj	(*proctab[])();
112extern obj	true, false;
113extern int	pairstack[], paircnt;
114
115#define cantexec(n)	(n->ntype == NVALUE)
116#define notlegal(n)	(n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN]== nullproc)
117#define isexpr(n)	(n->ntype == NEXPR)
118#define isjump(n)	(n.otype == OJUMP)
119#define isexit(n)	(n.otype == OJUMP && n.osub == JEXIT)
120#define	isbreak(n)	(n.otype == OJUMP && n.osub == JBREAK)
121#define	iscont(n)	(n.otype == OJUMP && n.osub == JCONT)
122#define	isnext(n)	(n.otype == OJUMP && n.osub == JNEXT)
123#define isstr(n)	(n.optr->tval & STR)
124#define istrue(n)	(n.otype == OBOOL && n.osub == BTRUE)
125#define istemp(n)	(n.otype == OCELL && n.osub == CTEMP)
126#define isfld(n)	(!donefld && n.osub==CFLD && n.otype==OCELL && n.optr->nval==EMPTY)
127#define isrec(n)	(donefld && n.osub==CFLD && n.otype==OCELL && n.optr->nval!=EMPTY)
128obj	nullproc();
129obj	relop();
130
131#define MAXSYM	50
132#define	HAT	0177	/* matches ^ in regular expr */
133			/* watch out for mach dep */
134