awk.h - 9base - revived minimalist port of Plan 9 userland to Unix | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
awk.h (4625B) | |
--- | |
1 /* | |
2 Copyright (c) Lucent Technologies 1997 | |
3 All Rights Reserved | |
4 | |
5 */ | |
6 | |
7 typedef double Awkfloat; | |
8 | |
9 /* unsigned char is more trouble than it's worth */ | |
10 | |
11 typedef unsigned char uschar; | |
12 | |
13 #define xfree(a) { if ((a) != NULL) { free((char *) a); a … | |
14 | |
15 #define DEBUG | |
16 #ifdef DEBUG | |
17 /* uses have to be doubly parenthesized */ | |
18 # define dprintf(x) if (dbg) printf x | |
19 #else | |
20 # define dprintf(x) | |
21 #endif | |
22 | |
23 extern char errbuf[]; | |
24 | |
25 extern int compile_time; /* 1 if compiling, 0 if running */ | |
26 extern int safe; /* 0 => unsafe, 1 => safe */ | |
27 | |
28 #define RECSIZE (8 * 1024) /* sets limit on records… | |
29 extern int recsize; /* size of current record, orig RECSIZ… | |
30 | |
31 extern char **FS; | |
32 extern char **RS; | |
33 extern char **ORS; | |
34 extern char **OFS; | |
35 extern char **OFMT; | |
36 extern Awkfloat *NR; | |
37 extern Awkfloat *FNR; | |
38 extern Awkfloat *NF; | |
39 extern char **FILENAME; | |
40 extern char **SUBSEP; | |
41 extern Awkfloat *RSTART; | |
42 extern Awkfloat *RLENGTH; | |
43 | |
44 extern char *record; /* points to $0 */ | |
45 extern int lineno; /* line number in awk program */ | |
46 extern int errorflag; /* 1 if error has occurred */ | |
47 extern int donefld; /* 1 if record broken into fields */ | |
48 extern int donerec; /* 1 if record is valid (no fld has ch… | |
49 extern char inputFS[]; /* FS at time of input, for field s… | |
50 | |
51 extern int dbg; | |
52 | |
53 extern char *patbeg; /* beginning of pattern matche… | |
54 extern int patlen; /* length of pattern mat… | |
55 | |
56 /* Cell: all information about a variable or constant */ | |
57 | |
58 typedef struct Cell { | |
59 uschar ctype; /* OCELL, OBOOL, OJUMP, etc.… | |
60 uschar csub; /* CCON, CTEMP, CFLD, etc. */ | |
61 char *nval; /* name, for variables only */ | |
62 char *sval; /* string value */ | |
63 Awkfloat fval; /* value as number */ | |
64 int tval; /* type info: STR|NUM|ARR|FCN|F… | |
65 struct Cell *cnext; /* ptr to next if chained */ | |
66 } Cell; | |
67 | |
68 typedef struct Array { /* symbol table array */ | |
69 int nelem; /* elements in table right now … | |
70 int size; /* size of tab */ | |
71 Cell **tab; /* hash table pointers */ | |
72 } Array; | |
73 | |
74 #define NSYMTAB 50 /* initial size of a symbol tabl… | |
75 extern Array *symtab; | |
76 | |
77 extern Cell *nrloc; /* NR */ | |
78 extern Cell *fnrloc; /* FNR */ | |
79 extern Cell *nfloc; /* NF */ | |
80 extern Cell *rstartloc; /* RSTART */ | |
81 extern Cell *rlengthloc; /* RLENGTH */ | |
82 | |
83 /* Cell.tval values: */ | |
84 #define NUM 01 /* number value is valid */ | |
85 #define STR 02 /* string value is valid */ | |
86 #define DONTFREE 04 /* string space is not freeable */ | |
87 #define CON 010 /* this is a constant */ | |
88 #define ARR 020 /* this is an array */ | |
89 #define FCN 040 /* this is a function name */ | |
90 #define FLD 0100 /* this is a field $1, $2, ... */ | |
91 #define REC 0200 /* this is $0 */ | |
92 | |
93 | |
94 /* function types */ | |
95 #define FLENGTH 1 | |
96 #define FSQRT 2 | |
97 #define FEXP 3 | |
98 #define FLOG 4 | |
99 #define FINT 5 | |
100 #define FSYSTEM 6 | |
101 #define FRAND 7 | |
102 #define FSRAND 8 | |
103 #define FSIN 9 | |
104 #define FCOS 10 | |
105 #define FATAN 11 | |
106 #define FTOUPPER 12 | |
107 #define FTOLOWER 13 | |
108 #define FFLUSH 14 | |
109 #define FUTF 15 | |
110 | |
111 /* Node: parse tree is made of nodes, with Cell's at bottom */ | |
112 | |
113 typedef struct Node { | |
114 int ntype; | |
115 struct Node *nnext; | |
116 int lineno; | |
117 int nobj; | |
118 struct Node *narg[1]; /* variable: actual size set… | |
119 } Node; | |
120 | |
121 #define NIL ((Node *) 0) | |
122 | |
123 extern Node *winner; | |
124 extern Node *nullstat; | |
125 extern Node *nullnode; | |
126 | |
127 /* ctypes */ | |
128 #define OCELL 1 | |
129 #define OBOOL 2 | |
130 #define OJUMP 3 | |
131 | |
132 /* Cell subtypes: csub */ | |
133 #define CFREE 7 | |
134 #define CCOPY 6 | |
135 #define CCON 5 | |
136 #define CTEMP 4 | |
137 #define CNAME 3 | |
138 #define CVAR 2 | |
139 #define CFLD 1 | |
140 #define CUNK 0 | |
141 | |
142 /* bool subtypes */ | |
143 #define BTRUE 11 | |
144 #define BFALSE 12 | |
145 | |
146 /* jump subtypes */ | |
147 #define JEXIT 21 | |
148 #define JNEXT 22 | |
149 #define JBREAK 23 | |
150 #define JCONT 24 | |
151 #define JRET 25 | |
152 #define JNEXTFILE 26 | |
153 | |
154 /* node types */ | |
155 #define NVALUE 1 | |
156 #define NSTAT 2 | |
157 #define NEXPR 3 | |
158 | |
159 | |
160 extern int pairstack[], paircnt; | |
161 | |
162 #define notlegal(n) (n <= FIRSTTOKEN || n >= LASTTOKEN || proctab… | |
163 #define isvalue(n) ((n)->ntype == NVALUE) | |
164 #define isexpr(n) ((n)->ntype == NEXPR) | |
165 #define isjump(n) ((n)->ctype == OJUMP) | |
166 #define isexit(n) ((n)->csub == JEXIT) | |
167 #define isbreak(n) ((n)->csub == JBREAK) | |
168 #define iscont(n) ((n)->csub == JCONT) | |
169 #define isnext(n) ((n)->csub == JNEXT) | |
170 #define isnextfile(n) ((n)->csub == JNEXTFILE) | |
171 #define isret(n) ((n)->csub == JRET) | |
172 #define isrec(n) ((n)->tval & REC) | |
173 #define isfld(n) ((n)->tval & FLD) | |
174 #define isstr(n) ((n)->tval & STR) | |
175 #define isnum(n) ((n)->tval & NUM) | |
176 #define isarr(n) ((n)->tval & ARR) | |
177 #define isfcn(n) ((n)->tval & FCN) | |
178 #define istrue(n) ((n)->csub == BTRUE) | |
179 #define istemp(n) ((n)->csub == CTEMP) | |
180 #define isargument(n) ((n)->nobj == ARG) | |
181 /* #define freeable(p) (!((p)->tval & DONTFREE)) */ | |
182 #define freeable(p) ( ((p)->tval & (STR|DONTFREE)) == STR ) | |
183 | |
184 #include "proto.h" | |
185 |