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