Blame


1 5cdb1798 2005-10-29 devnull
2 5cdb1798 2005-10-29 devnull #line 2 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
3 5cdb1798 2005-10-29 devnull #include "common.h"
4 5cdb1798 2005-10-29 devnull #include "smtp.h"
5 5cdb1798 2005-10-29 devnull #include <ctype.h>
6 5cdb1798 2005-10-29 devnull
7 5cdb1798 2005-10-29 devnull char *yylp; /* next character to be lex'd */
8 5cdb1798 2005-10-29 devnull int yydone; /* tell yylex to give up */
9 5cdb1798 2005-10-29 devnull char *yybuffer; /* first parsed character */
10 5cdb1798 2005-10-29 devnull char *yyend; /* end of buffer to be parsed */
11 5cdb1798 2005-10-29 devnull Node *root;
12 5cdb1798 2005-10-29 devnull Field *firstfield;
13 5cdb1798 2005-10-29 devnull Field *lastfield;
14 5cdb1798 2005-10-29 devnull Node *usender;
15 5cdb1798 2005-10-29 devnull Node *usys;
16 5cdb1798 2005-10-29 devnull Node *udate;
17 5cdb1798 2005-10-29 devnull char *startfield, *endfield;
18 5cdb1798 2005-10-29 devnull int originator;
19 5cdb1798 2005-10-29 devnull int destination;
20 5cdb1798 2005-10-29 devnull int date;
21 5cdb1798 2005-10-29 devnull int received;
22 5cdb1798 2005-10-29 devnull int messageid;
23 5cdb1798 2005-10-29 devnull extern int yyerrflag;
24 5cdb1798 2005-10-29 devnull #ifndef YYMAXDEPTH
25 5cdb1798 2005-10-29 devnull #define YYMAXDEPTH 150
26 5cdb1798 2005-10-29 devnull #endif
27 5cdb1798 2005-10-29 devnull #ifndef YYSTYPE
28 5cdb1798 2005-10-29 devnull #define YYSTYPE int
29 5cdb1798 2005-10-29 devnull #endif
30 5cdb1798 2005-10-29 devnull YYSTYPE yylval;
31 5cdb1798 2005-10-29 devnull YYSTYPE yyval;
32 5cdb1798 2005-10-29 devnull #define WORD 57346
33 5cdb1798 2005-10-29 devnull #define DATE 57347
34 5cdb1798 2005-10-29 devnull #define RESENT_DATE 57348
35 5cdb1798 2005-10-29 devnull #define RETURN_PATH 57349
36 5cdb1798 2005-10-29 devnull #define FROM 57350
37 5cdb1798 2005-10-29 devnull #define SENDER 57351
38 5cdb1798 2005-10-29 devnull #define REPLY_TO 57352
39 5cdb1798 2005-10-29 devnull #define RESENT_FROM 57353
40 5cdb1798 2005-10-29 devnull #define RESENT_SENDER 57354
41 5cdb1798 2005-10-29 devnull #define RESENT_REPLY_TO 57355
42 5cdb1798 2005-10-29 devnull #define SUBJECT 57356
43 5cdb1798 2005-10-29 devnull #define TO 57357
44 5cdb1798 2005-10-29 devnull #define CC 57358
45 5cdb1798 2005-10-29 devnull #define BCC 57359
46 5cdb1798 2005-10-29 devnull #define RESENT_TO 57360
47 5cdb1798 2005-10-29 devnull #define RESENT_CC 57361
48 5cdb1798 2005-10-29 devnull #define RESENT_BCC 57362
49 5cdb1798 2005-10-29 devnull #define REMOTE 57363
50 5cdb1798 2005-10-29 devnull #define PRECEDENCE 57364
51 5cdb1798 2005-10-29 devnull #define MIMEVERSION 57365
52 5cdb1798 2005-10-29 devnull #define CONTENTTYPE 57366
53 5cdb1798 2005-10-29 devnull #define MESSAGEID 57367
54 5cdb1798 2005-10-29 devnull #define RECEIVED 57368
55 5cdb1798 2005-10-29 devnull #define MAILER 57369
56 5cdb1798 2005-10-29 devnull #define BADTOKEN 57370
57 5cdb1798 2005-10-29 devnull #define YYEOFCODE 1
58 5cdb1798 2005-10-29 devnull #define YYERRCODE 2
59 5cdb1798 2005-10-29 devnull
60 5cdb1798 2005-10-29 devnull #line 246 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
61 5cdb1798 2005-10-29 devnull
62 5cdb1798 2005-10-29 devnull
63 5cdb1798 2005-10-29 devnull /*
64 5cdb1798 2005-10-29 devnull * Initialize the parsing. Done once for each header field.
65 5cdb1798 2005-10-29 devnull */
66 5cdb1798 2005-10-29 devnull void
67 5cdb1798 2005-10-29 devnull yyinit(char *p, int len)
68 5cdb1798 2005-10-29 devnull {
69 5cdb1798 2005-10-29 devnull yybuffer = p;
70 5cdb1798 2005-10-29 devnull yylp = p;
71 5cdb1798 2005-10-29 devnull yyend = p + len;
72 5cdb1798 2005-10-29 devnull firstfield = lastfield = 0;
73 5cdb1798 2005-10-29 devnull received = 0;
74 5cdb1798 2005-10-29 devnull }
75 5cdb1798 2005-10-29 devnull
76 5cdb1798 2005-10-29 devnull /*
77 5cdb1798 2005-10-29 devnull * keywords identifying header fields we care about
78 5cdb1798 2005-10-29 devnull */
79 5cdb1798 2005-10-29 devnull typedef struct Keyword Keyword;
80 5cdb1798 2005-10-29 devnull struct Keyword {
81 5cdb1798 2005-10-29 devnull char *rep;
82 5cdb1798 2005-10-29 devnull int val;
83 5cdb1798 2005-10-29 devnull };
84 5cdb1798 2005-10-29 devnull
85 5cdb1798 2005-10-29 devnull /* field names that we need to recognize */
86 5cdb1798 2005-10-29 devnull Keyword key[] = {
87 5cdb1798 2005-10-29 devnull { "date", DATE },
88 5cdb1798 2005-10-29 devnull { "resent-date", RESENT_DATE },
89 5cdb1798 2005-10-29 devnull { "return_path", RETURN_PATH },
90 5cdb1798 2005-10-29 devnull { "from", FROM },
91 5cdb1798 2005-10-29 devnull { "sender", SENDER },
92 5cdb1798 2005-10-29 devnull { "reply-to", REPLY_TO },
93 5cdb1798 2005-10-29 devnull { "resent-from", RESENT_FROM },
94 5cdb1798 2005-10-29 devnull { "resent-sender", RESENT_SENDER },
95 5cdb1798 2005-10-29 devnull { "resent-reply-to", RESENT_REPLY_TO },
96 5cdb1798 2005-10-29 devnull { "to", TO },
97 5cdb1798 2005-10-29 devnull { "cc", CC },
98 5cdb1798 2005-10-29 devnull { "bcc", BCC },
99 5cdb1798 2005-10-29 devnull { "resent-to", RESENT_TO },
100 5cdb1798 2005-10-29 devnull { "resent-cc", RESENT_CC },
101 5cdb1798 2005-10-29 devnull { "resent-bcc", RESENT_BCC },
102 5cdb1798 2005-10-29 devnull { "remote", REMOTE },
103 5cdb1798 2005-10-29 devnull { "subject", SUBJECT },
104 5cdb1798 2005-10-29 devnull { "precedence", PRECEDENCE },
105 5cdb1798 2005-10-29 devnull { "mime-version", MIMEVERSION },
106 5cdb1798 2005-10-29 devnull { "content-type", CONTENTTYPE },
107 5cdb1798 2005-10-29 devnull { "message-id", MESSAGEID },
108 5cdb1798 2005-10-29 devnull { "received", RECEIVED },
109 5cdb1798 2005-10-29 devnull { "mailer", MAILER },
110 5cdb1798 2005-10-29 devnull { "who-the-hell-cares", WORD }
111 5cdb1798 2005-10-29 devnull };
112 5cdb1798 2005-10-29 devnull
113 5cdb1798 2005-10-29 devnull /*
114 5cdb1798 2005-10-29 devnull * Lexical analysis for an rfc822 header field. Continuation lines
115 5cdb1798 2005-10-29 devnull * are handled in yywhite() when skipping over white space.
116 5cdb1798 2005-10-29 devnull *
117 5cdb1798 2005-10-29 devnull */
118 5cdb1798 2005-10-29 devnull int
119 5cdb1798 2005-10-29 devnull yylex(void)
120 5cdb1798 2005-10-29 devnull {
121 5cdb1798 2005-10-29 devnull String *t;
122 5cdb1798 2005-10-29 devnull int quoting;
123 5cdb1798 2005-10-29 devnull int escaping;
124 5cdb1798 2005-10-29 devnull char *start;
125 5cdb1798 2005-10-29 devnull Keyword *kp;
126 5cdb1798 2005-10-29 devnull int c, d;
127 5cdb1798 2005-10-29 devnull
128 5cdb1798 2005-10-29 devnull /* print("lexing\n"); /**/
129 5cdb1798 2005-10-29 devnull if(yylp >= yyend)
130 5cdb1798 2005-10-29 devnull return 0;
131 5cdb1798 2005-10-29 devnull if(yydone)
132 5cdb1798 2005-10-29 devnull return 0;
133 5cdb1798 2005-10-29 devnull
134 5cdb1798 2005-10-29 devnull quoting = escaping = 0;
135 5cdb1798 2005-10-29 devnull start = yylp;
136 5cdb1798 2005-10-29 devnull yylval = malloc(sizeof(Node));
137 5cdb1798 2005-10-29 devnull yylval->white = yylval->s = 0;
138 5cdb1798 2005-10-29 devnull yylval->next = 0;
139 5cdb1798 2005-10-29 devnull yylval->addr = 0;
140 5cdb1798 2005-10-29 devnull yylval->start = yylp;
141 5cdb1798 2005-10-29 devnull for(t = 0; yylp < yyend; yylp++){
142 5cdb1798 2005-10-29 devnull c = *yylp & 0xff;
143 5cdb1798 2005-10-29 devnull
144 5cdb1798 2005-10-29 devnull /* dump nulls, they can't be in header */
145 5cdb1798 2005-10-29 devnull if(c == 0)
146 5cdb1798 2005-10-29 devnull continue;
147 5cdb1798 2005-10-29 devnull
148 5cdb1798 2005-10-29 devnull if(escaping) {
149 5cdb1798 2005-10-29 devnull escaping = 0;
150 5cdb1798 2005-10-29 devnull } else if(quoting) {
151 5cdb1798 2005-10-29 devnull switch(c){
152 5cdb1798 2005-10-29 devnull case '\\':
153 5cdb1798 2005-10-29 devnull escaping = 1;
154 5cdb1798 2005-10-29 devnull break;
155 5cdb1798 2005-10-29 devnull case '\n':
156 5cdb1798 2005-10-29 devnull d = (*(yylp+1))&0xff;
157 5cdb1798 2005-10-29 devnull if(d != ' ' && d != '\t'){
158 5cdb1798 2005-10-29 devnull quoting = 0;
159 5cdb1798 2005-10-29 devnull yylp--;
160 5cdb1798 2005-10-29 devnull continue;
161 5cdb1798 2005-10-29 devnull }
162 5cdb1798 2005-10-29 devnull break;
163 5cdb1798 2005-10-29 devnull case '"':
164 5cdb1798 2005-10-29 devnull quoting = 0;
165 5cdb1798 2005-10-29 devnull break;
166 5cdb1798 2005-10-29 devnull }
167 5cdb1798 2005-10-29 devnull } else {
168 5cdb1798 2005-10-29 devnull switch(c){
169 5cdb1798 2005-10-29 devnull case '\\':
170 5cdb1798 2005-10-29 devnull escaping = 1;
171 5cdb1798 2005-10-29 devnull break;
172 5cdb1798 2005-10-29 devnull case '(':
173 5cdb1798 2005-10-29 devnull case ' ':
174 5cdb1798 2005-10-29 devnull case '\t':
175 5cdb1798 2005-10-29 devnull case '\r':
176 5cdb1798 2005-10-29 devnull goto out;
177 5cdb1798 2005-10-29 devnull case '\n':
178 5cdb1798 2005-10-29 devnull if(yylp == start){
179 5cdb1798 2005-10-29 devnull yylp++;
180 5cdb1798 2005-10-29 devnull /* print("lex(c %c)\n", c); /**/
181 5cdb1798 2005-10-29 devnull yylval->end = yylp;
182 5cdb1798 2005-10-29 devnull return yylval->c = c;
183 5cdb1798 2005-10-29 devnull }
184 5cdb1798 2005-10-29 devnull goto out;
185 5cdb1798 2005-10-29 devnull case '@':
186 5cdb1798 2005-10-29 devnull case '>':
187 5cdb1798 2005-10-29 devnull case '<':
188 5cdb1798 2005-10-29 devnull case ':':
189 5cdb1798 2005-10-29 devnull case ',':
190 5cdb1798 2005-10-29 devnull case ';':
191 5cdb1798 2005-10-29 devnull if(yylp == start){
192 5cdb1798 2005-10-29 devnull yylp++;
193 5cdb1798 2005-10-29 devnull yylval->white = yywhite();
194 5cdb1798 2005-10-29 devnull /* print("lex(c %c)\n", c); /**/
195 5cdb1798 2005-10-29 devnull yylval->end = yylp;
196 5cdb1798 2005-10-29 devnull return yylval->c = c;
197 5cdb1798 2005-10-29 devnull }
198 5cdb1798 2005-10-29 devnull goto out;
199 5cdb1798 2005-10-29 devnull case '"':
200 5cdb1798 2005-10-29 devnull quoting = 1;
201 5cdb1798 2005-10-29 devnull break;
202 5cdb1798 2005-10-29 devnull default:
203 5cdb1798 2005-10-29 devnull break;
204 5cdb1798 2005-10-29 devnull }
205 5cdb1798 2005-10-29 devnull }
206 5cdb1798 2005-10-29 devnull if(t == 0)
207 5cdb1798 2005-10-29 devnull t = s_new();
208 5cdb1798 2005-10-29 devnull s_putc(t, c);
209 5cdb1798 2005-10-29 devnull }
210 5cdb1798 2005-10-29 devnull out:
211 5cdb1798 2005-10-29 devnull yylval->white = yywhite();
212 5cdb1798 2005-10-29 devnull if(t) {
213 5cdb1798 2005-10-29 devnull s_terminate(t);
214 5cdb1798 2005-10-29 devnull } else /* message begins with white-space! */
215 5cdb1798 2005-10-29 devnull return yylval->c = '\n';
216 5cdb1798 2005-10-29 devnull yylval->s = t;
217 5cdb1798 2005-10-29 devnull for(kp = key; kp->val != WORD; kp++)
218 5cdb1798 2005-10-29 devnull if(cistrcmp(s_to_c(t), kp->rep)==0)
219 5cdb1798 2005-10-29 devnull break;
220 5cdb1798 2005-10-29 devnull /* print("lex(%d) %s\n", kp->val-WORD, s_to_c(t)); /**/
221 5cdb1798 2005-10-29 devnull yylval->end = yylp;
222 5cdb1798 2005-10-29 devnull return yylval->c = kp->val;
223 5cdb1798 2005-10-29 devnull }
224 5cdb1798 2005-10-29 devnull
225 5cdb1798 2005-10-29 devnull void
226 5cdb1798 2005-10-29 devnull yyerror(char *x)
227 5cdb1798 2005-10-29 devnull {
228 5cdb1798 2005-10-29 devnull USED(x);
229 5cdb1798 2005-10-29 devnull
230 5cdb1798 2005-10-29 devnull /*fprint(2, "parse err: %s\n", x);/**/
231 5cdb1798 2005-10-29 devnull }
232 5cdb1798 2005-10-29 devnull
233 5cdb1798 2005-10-29 devnull /*
234 5cdb1798 2005-10-29 devnull * parse white space and comments
235 5cdb1798 2005-10-29 devnull */
236 5cdb1798 2005-10-29 devnull String *
237 5cdb1798 2005-10-29 devnull yywhite(void)
238 5cdb1798 2005-10-29 devnull {
239 5cdb1798 2005-10-29 devnull String *w;
240 5cdb1798 2005-10-29 devnull int clevel;
241 5cdb1798 2005-10-29 devnull int c;
242 5cdb1798 2005-10-29 devnull int escaping;
243 5cdb1798 2005-10-29 devnull
244 5cdb1798 2005-10-29 devnull escaping = clevel = 0;
245 5cdb1798 2005-10-29 devnull for(w = 0; yylp < yyend; yylp++){
246 5cdb1798 2005-10-29 devnull c = *yylp & 0xff;
247 5cdb1798 2005-10-29 devnull
248 5cdb1798 2005-10-29 devnull /* dump nulls, they can't be in header */
249 5cdb1798 2005-10-29 devnull if(c == 0)
250 5cdb1798 2005-10-29 devnull continue;
251 5cdb1798 2005-10-29 devnull
252 5cdb1798 2005-10-29 devnull if(escaping){
253 5cdb1798 2005-10-29 devnull escaping = 0;
254 5cdb1798 2005-10-29 devnull } else if(clevel) {
255 5cdb1798 2005-10-29 devnull switch(c){
256 5cdb1798 2005-10-29 devnull case '\n':
257 5cdb1798 2005-10-29 devnull /*
258 5cdb1798 2005-10-29 devnull * look for multiline fields
259 5cdb1798 2005-10-29 devnull */
260 5cdb1798 2005-10-29 devnull if(*(yylp+1)==' ' || *(yylp+1)=='\t')
261 5cdb1798 2005-10-29 devnull break;
262 5cdb1798 2005-10-29 devnull else
263 5cdb1798 2005-10-29 devnull goto out;
264 5cdb1798 2005-10-29 devnull case '\\':
265 5cdb1798 2005-10-29 devnull escaping = 1;
266 5cdb1798 2005-10-29 devnull break;
267 5cdb1798 2005-10-29 devnull case '(':
268 5cdb1798 2005-10-29 devnull clevel++;
269 5cdb1798 2005-10-29 devnull break;
270 5cdb1798 2005-10-29 devnull case ')':
271 5cdb1798 2005-10-29 devnull clevel--;
272 5cdb1798 2005-10-29 devnull break;
273 5cdb1798 2005-10-29 devnull }
274 5cdb1798 2005-10-29 devnull } else {
275 5cdb1798 2005-10-29 devnull switch(c){
276 5cdb1798 2005-10-29 devnull case '\\':
277 5cdb1798 2005-10-29 devnull escaping = 1;
278 5cdb1798 2005-10-29 devnull break;
279 5cdb1798 2005-10-29 devnull case '(':
280 5cdb1798 2005-10-29 devnull clevel++;
281 5cdb1798 2005-10-29 devnull break;
282 5cdb1798 2005-10-29 devnull case ' ':
283 5cdb1798 2005-10-29 devnull case '\t':
284 5cdb1798 2005-10-29 devnull case '\r':
285 5cdb1798 2005-10-29 devnull break;
286 5cdb1798 2005-10-29 devnull case '\n':
287 5cdb1798 2005-10-29 devnull /*
288 5cdb1798 2005-10-29 devnull * look for multiline fields
289 5cdb1798 2005-10-29 devnull */
290 5cdb1798 2005-10-29 devnull if(*(yylp+1)==' ' || *(yylp+1)=='\t')
291 5cdb1798 2005-10-29 devnull break;
292 5cdb1798 2005-10-29 devnull else
293 5cdb1798 2005-10-29 devnull goto out;
294 5cdb1798 2005-10-29 devnull default:
295 5cdb1798 2005-10-29 devnull goto out;
296 5cdb1798 2005-10-29 devnull }
297 5cdb1798 2005-10-29 devnull }
298 5cdb1798 2005-10-29 devnull if(w == 0)
299 5cdb1798 2005-10-29 devnull w = s_new();
300 5cdb1798 2005-10-29 devnull s_putc(w, c);
301 5cdb1798 2005-10-29 devnull }
302 5cdb1798 2005-10-29 devnull out:
303 5cdb1798 2005-10-29 devnull if(w)
304 5cdb1798 2005-10-29 devnull s_terminate(w);
305 5cdb1798 2005-10-29 devnull return w;
306 5cdb1798 2005-10-29 devnull }
307 5cdb1798 2005-10-29 devnull
308 5cdb1798 2005-10-29 devnull /*
309 5cdb1798 2005-10-29 devnull * link two parsed entries together
310 5cdb1798 2005-10-29 devnull */
311 5cdb1798 2005-10-29 devnull Node*
312 5cdb1798 2005-10-29 devnull link2(Node *p1, Node *p2)
313 5cdb1798 2005-10-29 devnull {
314 5cdb1798 2005-10-29 devnull Node *p;
315 5cdb1798 2005-10-29 devnull
316 5cdb1798 2005-10-29 devnull for(p = p1; p->next; p = p->next)
317 5cdb1798 2005-10-29 devnull ;
318 5cdb1798 2005-10-29 devnull p->next = p2;
319 5cdb1798 2005-10-29 devnull return p1;
320 5cdb1798 2005-10-29 devnull }
321 5cdb1798 2005-10-29 devnull
322 5cdb1798 2005-10-29 devnull /*
323 5cdb1798 2005-10-29 devnull * link three parsed entries together
324 5cdb1798 2005-10-29 devnull */
325 5cdb1798 2005-10-29 devnull Node*
326 5cdb1798 2005-10-29 devnull link3(Node *p1, Node *p2, Node *p3)
327 5cdb1798 2005-10-29 devnull {
328 5cdb1798 2005-10-29 devnull Node *p;
329 5cdb1798 2005-10-29 devnull
330 5cdb1798 2005-10-29 devnull for(p = p2; p->next; p = p->next)
331 5cdb1798 2005-10-29 devnull ;
332 5cdb1798 2005-10-29 devnull p->next = p3;
333 5cdb1798 2005-10-29 devnull
334 5cdb1798 2005-10-29 devnull for(p = p1; p->next; p = p->next)
335 5cdb1798 2005-10-29 devnull ;
336 5cdb1798 2005-10-29 devnull p->next = p2;
337 5cdb1798 2005-10-29 devnull
338 5cdb1798 2005-10-29 devnull return p1;
339 5cdb1798 2005-10-29 devnull }
340 5cdb1798 2005-10-29 devnull
341 5cdb1798 2005-10-29 devnull /*
342 5cdb1798 2005-10-29 devnull * make a:b, move all white space after both
343 5cdb1798 2005-10-29 devnull */
344 5cdb1798 2005-10-29 devnull Node*
345 5cdb1798 2005-10-29 devnull colon(Node *p1, Node *p2)
346 5cdb1798 2005-10-29 devnull {
347 5cdb1798 2005-10-29 devnull if(p1->white){
348 5cdb1798 2005-10-29 devnull if(p2->white)
349 5cdb1798 2005-10-29 devnull s_append(p1->white, s_to_c(p2->white));
350 5cdb1798 2005-10-29 devnull } else {
351 5cdb1798 2005-10-29 devnull p1->white = p2->white;
352 5cdb1798 2005-10-29 devnull p2->white = 0;
353 5cdb1798 2005-10-29 devnull }
354 5cdb1798 2005-10-29 devnull
355 5cdb1798 2005-10-29 devnull s_append(p1->s, ":");
356 5cdb1798 2005-10-29 devnull if(p2->s)
357 5cdb1798 2005-10-29 devnull s_append(p1->s, s_to_c(p2->s));
358 5cdb1798 2005-10-29 devnull
359 5cdb1798 2005-10-29 devnull if(p1->end < p2->end)
360 5cdb1798 2005-10-29 devnull p1->end = p2->end;
361 5cdb1798 2005-10-29 devnull freenode(p2);
362 5cdb1798 2005-10-29 devnull return p1;
363 5cdb1798 2005-10-29 devnull }
364 5cdb1798 2005-10-29 devnull
365 5cdb1798 2005-10-29 devnull /*
366 5cdb1798 2005-10-29 devnull * concatenate two fields, move all white space after both
367 5cdb1798 2005-10-29 devnull */
368 5cdb1798 2005-10-29 devnull Node*
369 5cdb1798 2005-10-29 devnull concat(Node *p1, Node *p2)
370 5cdb1798 2005-10-29 devnull {
371 5cdb1798 2005-10-29 devnull char buf[2];
372 5cdb1798 2005-10-29 devnull
373 5cdb1798 2005-10-29 devnull if(p1->white){
374 5cdb1798 2005-10-29 devnull if(p2->white)
375 5cdb1798 2005-10-29 devnull s_append(p1->white, s_to_c(p2->white));
376 5cdb1798 2005-10-29 devnull } else {
377 5cdb1798 2005-10-29 devnull p1->white = p2->white;
378 5cdb1798 2005-10-29 devnull p2->white = 0;
379 5cdb1798 2005-10-29 devnull }
380 5cdb1798 2005-10-29 devnull
381 5cdb1798 2005-10-29 devnull if(p1->s == nil){
382 5cdb1798 2005-10-29 devnull buf[0] = p1->c;
383 5cdb1798 2005-10-29 devnull buf[1] = 0;
384 5cdb1798 2005-10-29 devnull p1->s = s_new();
385 5cdb1798 2005-10-29 devnull s_append(p1->s, buf);
386 5cdb1798 2005-10-29 devnull }
387 5cdb1798 2005-10-29 devnull
388 5cdb1798 2005-10-29 devnull if(p2->s)
389 5cdb1798 2005-10-29 devnull s_append(p1->s, s_to_c(p2->s));
390 5cdb1798 2005-10-29 devnull else {
391 5cdb1798 2005-10-29 devnull buf[0] = p2->c;
392 5cdb1798 2005-10-29 devnull buf[1] = 0;
393 5cdb1798 2005-10-29 devnull s_append(p1->s, buf);
394 5cdb1798 2005-10-29 devnull }
395 5cdb1798 2005-10-29 devnull
396 5cdb1798 2005-10-29 devnull if(p1->end < p2->end)
397 5cdb1798 2005-10-29 devnull p1->end = p2->end;
398 5cdb1798 2005-10-29 devnull freenode(p2);
399 5cdb1798 2005-10-29 devnull return p1;
400 5cdb1798 2005-10-29 devnull }
401 5cdb1798 2005-10-29 devnull
402 5cdb1798 2005-10-29 devnull /*
403 5cdb1798 2005-10-29 devnull * look for disallowed chars in the field name
404 5cdb1798 2005-10-29 devnull */
405 5cdb1798 2005-10-29 devnull int
406 5cdb1798 2005-10-29 devnull badfieldname(Node *p)
407 5cdb1798 2005-10-29 devnull {
408 5cdb1798 2005-10-29 devnull for(; p; p = p->next){
409 5cdb1798 2005-10-29 devnull /* field name can't contain white space */
410 5cdb1798 2005-10-29 devnull if(p->white && p->next)
411 5cdb1798 2005-10-29 devnull return 1;
412 5cdb1798 2005-10-29 devnull }
413 5cdb1798 2005-10-29 devnull return 0;
414 5cdb1798 2005-10-29 devnull }
415 5cdb1798 2005-10-29 devnull
416 5cdb1798 2005-10-29 devnull /*
417 5cdb1798 2005-10-29 devnull * mark as an address
418 5cdb1798 2005-10-29 devnull */
419 5cdb1798 2005-10-29 devnull Node *
420 5cdb1798 2005-10-29 devnull address(Node *p)
421 5cdb1798 2005-10-29 devnull {
422 5cdb1798 2005-10-29 devnull p->addr = 1;
423 5cdb1798 2005-10-29 devnull return p;
424 5cdb1798 2005-10-29 devnull }
425 5cdb1798 2005-10-29 devnull
426 5cdb1798 2005-10-29 devnull /*
427 5cdb1798 2005-10-29 devnull * case independent string compare
428 5cdb1798 2005-10-29 devnull */
429 5cdb1798 2005-10-29 devnull int
430 5cdb1798 2005-10-29 devnull cistrcmp(char *s1, char *s2)
431 5cdb1798 2005-10-29 devnull {
432 5cdb1798 2005-10-29 devnull int c1, c2;
433 5cdb1798 2005-10-29 devnull
434 5cdb1798 2005-10-29 devnull for(; *s1; s1++, s2++){
435 5cdb1798 2005-10-29 devnull c1 = isupper(*s1) ? tolower(*s1) : *s1;
436 5cdb1798 2005-10-29 devnull c2 = isupper(*s2) ? tolower(*s2) : *s2;
437 5cdb1798 2005-10-29 devnull if (c1 != c2)
438 5cdb1798 2005-10-29 devnull return -1;
439 5cdb1798 2005-10-29 devnull }
440 5cdb1798 2005-10-29 devnull return *s2;
441 5cdb1798 2005-10-29 devnull }
442 5cdb1798 2005-10-29 devnull
443 5cdb1798 2005-10-29 devnull /*
444 5cdb1798 2005-10-29 devnull * free a node
445 5cdb1798 2005-10-29 devnull */
446 5cdb1798 2005-10-29 devnull void
447 5cdb1798 2005-10-29 devnull freenode(Node *p)
448 5cdb1798 2005-10-29 devnull {
449 5cdb1798 2005-10-29 devnull Node *tp;
450 5cdb1798 2005-10-29 devnull
451 5cdb1798 2005-10-29 devnull while(p){
452 5cdb1798 2005-10-29 devnull tp = p->next;
453 5cdb1798 2005-10-29 devnull if(p->s)
454 5cdb1798 2005-10-29 devnull s_free(p->s);
455 5cdb1798 2005-10-29 devnull if(p->white)
456 5cdb1798 2005-10-29 devnull s_free(p->white);
457 5cdb1798 2005-10-29 devnull free(p);
458 5cdb1798 2005-10-29 devnull p = tp;
459 5cdb1798 2005-10-29 devnull }
460 5cdb1798 2005-10-29 devnull }
461 5cdb1798 2005-10-29 devnull
462 5cdb1798 2005-10-29 devnull
463 5cdb1798 2005-10-29 devnull /*
464 5cdb1798 2005-10-29 devnull * an anonymous user
465 5cdb1798 2005-10-29 devnull */
466 5cdb1798 2005-10-29 devnull Node*
467 5cdb1798 2005-10-29 devnull nobody(Node *p)
468 5cdb1798 2005-10-29 devnull {
469 5cdb1798 2005-10-29 devnull if(p->s)
470 5cdb1798 2005-10-29 devnull s_free(p->s);
471 5cdb1798 2005-10-29 devnull p->s = s_copy("pOsTmAsTeR");
472 5cdb1798 2005-10-29 devnull p->addr = 1;
473 5cdb1798 2005-10-29 devnull return p;
474 5cdb1798 2005-10-29 devnull }
475 5cdb1798 2005-10-29 devnull
476 5cdb1798 2005-10-29 devnull /*
477 5cdb1798 2005-10-29 devnull * add anything that was dropped because of a parse error
478 5cdb1798 2005-10-29 devnull */
479 5cdb1798 2005-10-29 devnull void
480 5cdb1798 2005-10-29 devnull missing(Node *p)
481 5cdb1798 2005-10-29 devnull {
482 5cdb1798 2005-10-29 devnull Node *np;
483 5cdb1798 2005-10-29 devnull char *start, *end;
484 5cdb1798 2005-10-29 devnull Field *f;
485 5cdb1798 2005-10-29 devnull String *s;
486 5cdb1798 2005-10-29 devnull
487 5cdb1798 2005-10-29 devnull start = yybuffer;
488 5cdb1798 2005-10-29 devnull if(lastfield != nil){
489 5cdb1798 2005-10-29 devnull for(np = lastfield->node; np; np = np->next)
490 5cdb1798 2005-10-29 devnull start = np->end+1;
491 5cdb1798 2005-10-29 devnull }
492 5cdb1798 2005-10-29 devnull
493 5cdb1798 2005-10-29 devnull end = p->start-1;
494 5cdb1798 2005-10-29 devnull
495 5cdb1798 2005-10-29 devnull if(end <= start)
496 5cdb1798 2005-10-29 devnull return;
497 5cdb1798 2005-10-29 devnull
498 5cdb1798 2005-10-29 devnull if(strncmp(start, "From ", 5) == 0)
499 5cdb1798 2005-10-29 devnull return;
500 5cdb1798 2005-10-29 devnull
501 5cdb1798 2005-10-29 devnull np = malloc(sizeof(Node));
502 5cdb1798 2005-10-29 devnull np->start = start;
503 5cdb1798 2005-10-29 devnull np->end = end;
504 5cdb1798 2005-10-29 devnull np->white = nil;
505 5cdb1798 2005-10-29 devnull s = s_copy("BadHeader: ");
506 5cdb1798 2005-10-29 devnull np->s = s_nappend(s, start, end-start);
507 5cdb1798 2005-10-29 devnull np->next = nil;
508 5cdb1798 2005-10-29 devnull
509 5cdb1798 2005-10-29 devnull f = malloc(sizeof(Field));
510 5cdb1798 2005-10-29 devnull f->next = 0;
511 5cdb1798 2005-10-29 devnull f->node = np;
512 5cdb1798 2005-10-29 devnull f->source = 0;
513 5cdb1798 2005-10-29 devnull if(firstfield)
514 5cdb1798 2005-10-29 devnull lastfield->next = f;
515 5cdb1798 2005-10-29 devnull else
516 5cdb1798 2005-10-29 devnull firstfield = f;
517 5cdb1798 2005-10-29 devnull lastfield = f;
518 5cdb1798 2005-10-29 devnull }
519 5cdb1798 2005-10-29 devnull
520 5cdb1798 2005-10-29 devnull /*
521 5cdb1798 2005-10-29 devnull * create a new field
522 5cdb1798 2005-10-29 devnull */
523 5cdb1798 2005-10-29 devnull void
524 5cdb1798 2005-10-29 devnull newfield(Node *p, int source)
525 5cdb1798 2005-10-29 devnull {
526 5cdb1798 2005-10-29 devnull Field *f;
527 5cdb1798 2005-10-29 devnull
528 5cdb1798 2005-10-29 devnull missing(p);
529 5cdb1798 2005-10-29 devnull
530 5cdb1798 2005-10-29 devnull f = malloc(sizeof(Field));
531 5cdb1798 2005-10-29 devnull f->next = 0;
532 5cdb1798 2005-10-29 devnull f->node = p;
533 5cdb1798 2005-10-29 devnull f->source = source;
534 5cdb1798 2005-10-29 devnull if(firstfield)
535 5cdb1798 2005-10-29 devnull lastfield->next = f;
536 5cdb1798 2005-10-29 devnull else
537 5cdb1798 2005-10-29 devnull firstfield = f;
538 5cdb1798 2005-10-29 devnull lastfield = f;
539 5cdb1798 2005-10-29 devnull endfield = startfield;
540 5cdb1798 2005-10-29 devnull startfield = yylp;
541 5cdb1798 2005-10-29 devnull }
542 5cdb1798 2005-10-29 devnull
543 5cdb1798 2005-10-29 devnull /*
544 5cdb1798 2005-10-29 devnull * fee a list of fields
545 5cdb1798 2005-10-29 devnull */
546 5cdb1798 2005-10-29 devnull void
547 5cdb1798 2005-10-29 devnull freefield(Field *f)
548 5cdb1798 2005-10-29 devnull {
549 5cdb1798 2005-10-29 devnull Field *tf;
550 5cdb1798 2005-10-29 devnull
551 5cdb1798 2005-10-29 devnull while(f){
552 5cdb1798 2005-10-29 devnull tf = f->next;
553 5cdb1798 2005-10-29 devnull freenode(f->node);
554 5cdb1798 2005-10-29 devnull free(f);
555 5cdb1798 2005-10-29 devnull f = tf;
556 5cdb1798 2005-10-29 devnull }
557 5cdb1798 2005-10-29 devnull }
558 5cdb1798 2005-10-29 devnull
559 5cdb1798 2005-10-29 devnull /*
560 5cdb1798 2005-10-29 devnull * add some white space to a node
561 5cdb1798 2005-10-29 devnull */
562 5cdb1798 2005-10-29 devnull Node*
563 5cdb1798 2005-10-29 devnull whiten(Node *p)
564 5cdb1798 2005-10-29 devnull {
565 5cdb1798 2005-10-29 devnull Node *tp;
566 5cdb1798 2005-10-29 devnull
567 5cdb1798 2005-10-29 devnull for(tp = p; tp->next; tp = tp->next)
568 5cdb1798 2005-10-29 devnull ;
569 5cdb1798 2005-10-29 devnull if(tp->white == 0)
570 5cdb1798 2005-10-29 devnull tp->white = s_copy(" ");
571 5cdb1798 2005-10-29 devnull return p;
572 5cdb1798 2005-10-29 devnull }
573 5cdb1798 2005-10-29 devnull
574 5cdb1798 2005-10-29 devnull void
575 5cdb1798 2005-10-29 devnull yycleanup(void)
576 5cdb1798 2005-10-29 devnull {
577 5cdb1798 2005-10-29 devnull Field *f, *fnext;
578 5cdb1798 2005-10-29 devnull Node *np, *next;
579 5cdb1798 2005-10-29 devnull
580 5cdb1798 2005-10-29 devnull for(f = firstfield; f; f = fnext){
581 5cdb1798 2005-10-29 devnull for(np = f->node; np; np = next){
582 5cdb1798 2005-10-29 devnull if(np->s)
583 5cdb1798 2005-10-29 devnull s_free(np->s);
584 5cdb1798 2005-10-29 devnull if(np->white)
585 5cdb1798 2005-10-29 devnull s_free(np->white);
586 5cdb1798 2005-10-29 devnull next = np->next;
587 5cdb1798 2005-10-29 devnull free(np);
588 5cdb1798 2005-10-29 devnull }
589 5cdb1798 2005-10-29 devnull fnext = f->next;
590 5cdb1798 2005-10-29 devnull free(f);
591 5cdb1798 2005-10-29 devnull }
592 5cdb1798 2005-10-29 devnull firstfield = lastfield = 0;
593 5cdb1798 2005-10-29 devnull }
594 5cdb1798 2005-10-29 devnull static const short yyexca[] =
595 5cdb1798 2005-10-29 devnull {-1, 1,
596 5cdb1798 2005-10-29 devnull 1, -1,
597 5cdb1798 2005-10-29 devnull -2, 0,
598 5cdb1798 2005-10-29 devnull -1, 47,
599 5cdb1798 2005-10-29 devnull 1, 4,
600 5cdb1798 2005-10-29 devnull -2, 0,
601 5cdb1798 2005-10-29 devnull -1, 112,
602 5cdb1798 2005-10-29 devnull 29, 72,
603 5cdb1798 2005-10-29 devnull 31, 72,
604 5cdb1798 2005-10-29 devnull 32, 72,
605 5cdb1798 2005-10-29 devnull 35, 72,
606 cbeb0b26 2006-04-01 devnull -2, 74
607 5cdb1798 2005-10-29 devnull };
608 5cdb1798 2005-10-29 devnull #define YYNPROD 122
609 5cdb1798 2005-10-29 devnull #define YYPRIVATE 57344
610 5cdb1798 2005-10-29 devnull #define YYLAST 608
611 5cdb1798 2005-10-29 devnull static const short yyact[] =
612 5cdb1798 2005-10-29 devnull {
613 5cdb1798 2005-10-29 devnull 112, 133, 136, 53, 121, 111, 134, 55, 109, 118,
614 5cdb1798 2005-10-29 devnull 119, 116, 162, 171, 35, 48, 166, 54, 5, 166,
615 5cdb1798 2005-10-29 devnull 179, 114, 115, 155, 49, 101, 100, 99, 95, 94,
616 5cdb1798 2005-10-29 devnull 93, 92, 98, 91, 132, 90, 123, 89, 122, 88,
617 5cdb1798 2005-10-29 devnull 87, 86, 85, 84, 83, 82, 97, 81, 80, 106,
618 5cdb1798 2005-10-29 devnull 47, 46, 110, 117, 153, 168, 108, 2, 56, 57,
619 5cdb1798 2005-10-29 devnull 58, 59, 60, 61, 62, 63, 64, 65, 73, 66,
620 5cdb1798 2005-10-29 devnull 67, 68, 69, 70, 71, 72, 74, 75, 76, 77,
621 5cdb1798 2005-10-29 devnull 78, 79, 124, 124, 49, 55, 177, 131, 110, 52,
622 5cdb1798 2005-10-29 devnull 110, 110, 138, 137, 140, 141, 124, 124, 51, 120,
623 5cdb1798 2005-10-29 devnull 124, 124, 124, 50, 102, 104, 135, 154, 31, 32,
624 5cdb1798 2005-10-29 devnull 107, 157, 105, 14, 55, 55, 156, 13, 161, 117,
625 5cdb1798 2005-10-29 devnull 117, 139, 158, 124, 142, 143, 144, 145, 146, 147,
626 5cdb1798 2005-10-29 devnull 163, 164, 160, 12, 148, 149, 11, 157, 150, 151,
627 5cdb1798 2005-10-29 devnull 152, 10, 156, 9, 8, 7, 3, 1, 0, 124,
628 5cdb1798 2005-10-29 devnull 124, 124, 124, 124, 0, 169, 0, 0, 110, 165,
629 5cdb1798 2005-10-29 devnull 0, 0, 170, 117, 0, 0, 0, 0, 173, 176,
630 5cdb1798 2005-10-29 devnull 178, 0, 0, 0, 172, 0, 0, 0, 180, 0,
631 5cdb1798 2005-10-29 devnull 0, 182, 183, 0, 0, 165, 165, 165, 165, 165,
632 5cdb1798 2005-10-29 devnull 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
633 5cdb1798 2005-10-29 devnull 0, 0, 174, 56, 57, 58, 59, 60, 61, 62,
634 5cdb1798 2005-10-29 devnull 63, 64, 65, 73, 66, 67, 68, 69, 70, 71,
635 5cdb1798 2005-10-29 devnull 72, 74, 75, 76, 77, 78, 79, 0, 0, 128,
636 5cdb1798 2005-10-29 devnull 130, 129, 125, 126, 127, 15, 0, 36, 16, 17,
637 5cdb1798 2005-10-29 devnull 19, 103, 20, 18, 23, 22, 21, 30, 24, 26,
638 5cdb1798 2005-10-29 devnull 28, 25, 27, 29, 0, 34, 37, 38, 39, 33,
639 5cdb1798 2005-10-29 devnull 40, 0, 4, 0, 45, 44, 41, 42, 43, 56,
640 5cdb1798 2005-10-29 devnull 57, 58, 59, 60, 61, 62, 63, 64, 65, 73,
641 5cdb1798 2005-10-29 devnull 66, 67, 68, 69, 70, 71, 72, 74, 75, 76,
642 5cdb1798 2005-10-29 devnull 77, 78, 79, 0, 0, 96, 45, 44, 41, 42,
643 5cdb1798 2005-10-29 devnull 43, 15, 0, 36, 16, 17, 19, 6, 20, 18,
644 5cdb1798 2005-10-29 devnull 23, 22, 21, 30, 24, 26, 28, 25, 27, 29,
645 5cdb1798 2005-10-29 devnull 0, 34, 37, 38, 39, 33, 40, 0, 4, 0,
646 5cdb1798 2005-10-29 devnull 45, 44, 41, 42, 43, 15, 0, 36, 16, 17,
647 5cdb1798 2005-10-29 devnull 19, 103, 20, 18, 23, 22, 21, 30, 24, 26,
648 5cdb1798 2005-10-29 devnull 28, 25, 27, 29, 0, 34, 37, 38, 39, 33,
649 5cdb1798 2005-10-29 devnull 40, 0, 0, 0, 45, 44, 41, 42, 43, 56,
650 5cdb1798 2005-10-29 devnull 57, 58, 59, 60, 61, 62, 63, 64, 65, 73,
651 5cdb1798 2005-10-29 devnull 66, 67, 68, 69, 70, 71, 72, 74, 75, 76,
652 5cdb1798 2005-10-29 devnull 77, 78, 79, 0, 0, 0, 0, 175, 113, 0,
653 5cdb1798 2005-10-29 devnull 52, 56, 57, 58, 59, 60, 61, 62, 63, 64,
654 5cdb1798 2005-10-29 devnull 65, 73, 66, 67, 68, 69, 70, 71, 72, 74,
655 5cdb1798 2005-10-29 devnull 75, 76, 77, 78, 79, 0, 0, 0, 0, 0,
656 5cdb1798 2005-10-29 devnull 113, 0, 52, 56, 57, 58, 59, 60, 61, 62,
657 5cdb1798 2005-10-29 devnull 63, 64, 65, 73, 66, 67, 68, 69, 70, 71,
658 5cdb1798 2005-10-29 devnull 72, 74, 75, 76, 77, 78, 79, 0, 0, 0,
659 5cdb1798 2005-10-29 devnull 0, 0, 0, 159, 52, 56, 57, 58, 59, 60,
660 5cdb1798 2005-10-29 devnull 61, 62, 63, 64, 65, 73, 66, 67, 68, 69,
661 5cdb1798 2005-10-29 devnull 70, 71, 72, 74, 75, 76, 77, 78, 79, 0,
662 5cdb1798 2005-10-29 devnull 0, 0, 0, 0, 0, 0, 52, 56, 57, 58,
663 5cdb1798 2005-10-29 devnull 59, 60, 61, 62, 63, 64, 65, 73, 66, 67,
664 5cdb1798 2005-10-29 devnull 68, 69, 70, 71, 72, 74, 75, 76, 77, 78,
665 5cdb1798 2005-10-29 devnull 79, 0, 0, 167, 0, 0, 113, 56, 57, 58,
666 5cdb1798 2005-10-29 devnull 59, 60, 61, 62, 63, 64, 65, 73, 66, 67,
667 5cdb1798 2005-10-29 devnull 68, 69, 70, 71, 72, 74, 75, 76, 77, 78,
668 5cdb1798 2005-10-29 devnull 79, 0, 0, 0, 0, 0, 113, 56, 57, 58,
669 5cdb1798 2005-10-29 devnull 59, 60, 61, 62, 63, 64, 65, 73, 66, 67,
670 5cdb1798 2005-10-29 devnull 68, 69, 70, 71, 72, 74, 75, 76, 77, 78,
671 5cdb1798 2005-10-29 devnull 79, 0, 0, 181, 56, 57, 58, 59, 60, 61,
672 5cdb1798 2005-10-29 devnull 62, 63, 64, 65, 73, 66, 67, 68, 69, 70,
673 5cdb1798 2005-10-29 devnull 71, 72, 74, 75, 76, 77, 78, 79
674 5cdb1798 2005-10-29 devnull };
675 5cdb1798 2005-10-29 devnull static const short yypact[] =
676 5cdb1798 2005-10-29 devnull {
677 5cdb1798 2005-10-29 devnull 299,-1000,-1000, 22,-1000, 21, 54,-1000,-1000,-1000,
678 5cdb1798 2005-10-29 devnull -1000,-1000,-1000,-1000,-1000, 19, 17, 15, 14, 13,
679 5cdb1798 2005-10-29 devnull 12, 11, 10, 9, 7, 5, 3, 1, 0, -1,
680 5cdb1798 2005-10-29 devnull -2, 265, -3, -4, -5,-1000,-1000,-1000,-1000,-1000,
681 5cdb1798 2005-10-29 devnull -1000,-1000,-1000,-1000,-1000,-1000, 233, 233, 580, 397,
682 5cdb1798 2005-10-29 devnull -9,-1000, 580, -26, -25,-1000,-1000,-1000,-1000,-1000,
683 5cdb1798 2005-10-29 devnull -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
684 5cdb1798 2005-10-29 devnull -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
685 5cdb1798 2005-10-29 devnull 333, 199, 199, 397, 461, 397, 397, 397, 397, 397,
686 5cdb1798 2005-10-29 devnull 397, 397, 397, 397, 397, 199, 199,-1000,-1000, 199,
687 5cdb1798 2005-10-29 devnull 199, 199,-1000, -6,-1000, 33, 580, -8,-1000,-1000,
688 5cdb1798 2005-10-29 devnull 523,-1000,-1000, 429, 580, -23,-1000,-1000, 580, 580,
689 5cdb1798 2005-10-29 devnull -1000,-1000, 199,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
690 5cdb1798 2005-10-29 devnull -1000,-1000, -15,-1000,-1000,-1000, 493,-1000,-1000, -15,
691 5cdb1798 2005-10-29 devnull -1000,-1000, -15, -15, -15, -15, -15, -15, 199, 199,
692 5cdb1798 2005-10-29 devnull 199, 199, 199, 47, 580, 397,-1000,-1000, -21,-1000,
693 5cdb1798 2005-10-29 devnull -25, -26, 580,-1000,-1000,-1000, 397, 365, 580, 580,
694 5cdb1798 2005-10-29 devnull -1000,-1000,-1000,-1000, -12,-1000,-1000, 553,-1000,-1000,
695 5cdb1798 2005-10-29 devnull 580, 580,-1000,-1000
696 5cdb1798 2005-10-29 devnull };
697 5cdb1798 2005-10-29 devnull static const short yypgo[] =
698 5cdb1798 2005-10-29 devnull {
699 5cdb1798 2005-10-29 devnull 0, 147, 57, 146, 18, 145, 144, 143, 141, 136,
700 5cdb1798 2005-10-29 devnull 133, 117, 113, 8, 112, 0, 34, 110, 6, 4,
701 5cdb1798 2005-10-29 devnull 38, 109, 108, 1, 106, 2, 5, 103, 17, 98,
702 5cdb1798 2005-10-29 devnull 11, 3, 36, 86, 14
703 5cdb1798 2005-10-29 devnull };
704 5cdb1798 2005-10-29 devnull static const short yyr1[] =
705 5cdb1798 2005-10-29 devnull {
706 5cdb1798 2005-10-29 devnull 0, 1, 1, 2, 2, 2, 4, 4, 4, 4,
707 5cdb1798 2005-10-29 devnull 4, 4, 4, 4, 4, 3, 6, 6, 6, 6,
708 5cdb1798 2005-10-29 devnull 6, 6, 6, 5, 5, 7, 7, 7, 7, 7,
709 5cdb1798 2005-10-29 devnull 7, 7, 7, 7, 7, 7, 7, 8, 8, 11,
710 5cdb1798 2005-10-29 devnull 11, 12, 12, 10, 10, 21, 21, 21, 21, 9,
711 5cdb1798 2005-10-29 devnull 9, 16, 16, 23, 23, 24, 24, 17, 17, 18,
712 5cdb1798 2005-10-29 devnull 18, 18, 26, 26, 13, 13, 27, 27, 29, 29,
713 5cdb1798 2005-10-29 devnull 28, 28, 31, 30, 25, 25, 20, 20, 32, 32,
714 5cdb1798 2005-10-29 devnull 32, 32, 32, 32, 32, 19, 14, 33, 33, 15,
715 5cdb1798 2005-10-29 devnull 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
716 5cdb1798 2005-10-29 devnull 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
717 5cdb1798 2005-10-29 devnull 15, 15, 15, 22, 22, 22, 22, 34, 34, 34,
718 5cdb1798 2005-10-29 devnull 34, 34
719 5cdb1798 2005-10-29 devnull };
720 5cdb1798 2005-10-29 devnull static const short yyr2[] =
721 5cdb1798 2005-10-29 devnull {
722 5cdb1798 2005-10-29 devnull 0, 1, 3, 1, 2, 3, 1, 1, 1, 1,
723 5cdb1798 2005-10-29 devnull 1, 1, 1, 1, 3, 6, 3, 3, 3, 3,
724 5cdb1798 2005-10-29 devnull 3, 3, 3, 3, 3, 2, 3, 2, 3, 2,
725 5cdb1798 2005-10-29 devnull 3, 2, 3, 2, 3, 2, 3, 3, 2, 3,
726 5cdb1798 2005-10-29 devnull 2, 3, 2, 3, 2, 1, 1, 1, 1, 3,
727 5cdb1798 2005-10-29 devnull 2, 1, 3, 1, 1, 4, 3, 1, 3, 1,
728 5cdb1798 2005-10-29 devnull 2, 1, 3, 2, 3, 1, 2, 4, 1, 1,
729 5cdb1798 2005-10-29 devnull 3, 3, 1, 1, 1, 2, 1, 2, 1, 1,
730 5cdb1798 2005-10-29 devnull 1, 1, 1, 1, 1, 1, 6, 1, 3, 1,
731 5cdb1798 2005-10-29 devnull 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
732 5cdb1798 2005-10-29 devnull 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
733 5cdb1798 2005-10-29 devnull 1, 1, 1, 1, 1, 2, 2, 1, 1, 1,
734 5cdb1798 2005-10-29 devnull 1, 1
735 5cdb1798 2005-10-29 devnull };
736 5cdb1798 2005-10-29 devnull static const short yychk[] =
737 5cdb1798 2005-10-29 devnull {
738 5cdb1798 2005-10-29 devnull -1000, -1, -2, -3, 29, -4, 8, -5, -6, -7,
739 5cdb1798 2005-10-29 devnull -8, -9, -10, -11, -12, 2, 5, 6, 10, 7,
740 5cdb1798 2005-10-29 devnull 9, 13, 12, 11, 15, 18, 16, 19, 17, 20,
741 5cdb1798 2005-10-29 devnull 14, -22, -21, 26, 22, -34, 4, 23, 24, 25,
742 5cdb1798 2005-10-29 devnull 27, 33, 34, 35, 32, 31, 29, 29, -13, 30,
743 5cdb1798 2005-10-29 devnull -27, -29, 35, -31, -28, -15, 4, 5, 6, 7,
744 5cdb1798 2005-10-29 devnull 8, 9, 10, 11, 12, 13, 15, 16, 17, 18,
745 5cdb1798 2005-10-29 devnull 19, 20, 21, 14, 22, 23, 24, 25, 26, 27,
746 5cdb1798 2005-10-29 devnull 29, 30, 30, 30, 30, 30, 30, 30, 30, 30,
747 5cdb1798 2005-10-29 devnull 30, 30, 30, 30, 30, 30, 30, -34, -15, 30,
748 5cdb1798 2005-10-29 devnull 30, 30, -2, 8, -2, -14, -15, -17, -18, -13,
749 5cdb1798 2005-10-29 devnull -25, -26, -15, 33, 30, 31, -30, -15, 35, 35,
750 5cdb1798 2005-10-29 devnull -4, -19, -20, -32, -15, 33, 34, 35, 30, 32,
751 5cdb1798 2005-10-29 devnull 31, -19, -16, -23, -18, -24, -25, -13, -18, -16,
752 5cdb1798 2005-10-29 devnull -18, -18, -16, -16, -16, -16, -16, -16, -20, -20,
753 5cdb1798 2005-10-29 devnull -20, -20, -20, 21, -15, 31, -26, -15, -13, 34,
754 5cdb1798 2005-10-29 devnull -28, -31, 35, -30, -30, -32, 31, 30, 8, -15,
755 5cdb1798 2005-10-29 devnull -18, 34, -30, -23, -16, 32, -15, -33, -15, 32,
756 5cdb1798 2005-10-29 devnull -15, 30, -15, -15
757 5cdb1798 2005-10-29 devnull };
758 5cdb1798 2005-10-29 devnull static const short yydef[] =
759 5cdb1798 2005-10-29 devnull {
760 5cdb1798 2005-10-29 devnull 0, -2, 1, 0, 3, 0, 0, 6, 7, 8,
761 5cdb1798 2005-10-29 devnull 9, 10, 11, 12, 13, 0, 0, 0, 0, 0,
762 5cdb1798 2005-10-29 devnull 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
763 5cdb1798 2005-10-29 devnull 0, 0, 0, 0, 0, 113, 114, 45, 46, 47,
764 5cdb1798 2005-10-29 devnull 48, 117, 118, 119, 120, 121, 0, -2, 0, 0,
765 5cdb1798 2005-10-29 devnull 0, 65, 0, 68, 69, 72, 89, 90, 91, 92,
766 5cdb1798 2005-10-29 devnull 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
767 5cdb1798 2005-10-29 devnull 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
768 5cdb1798 2005-10-29 devnull 0, 0, 0, 0, 0, 0, 0, 0, 0, 25,
769 5cdb1798 2005-10-29 devnull 27, 29, 31, 33, 35, 38, 50, 115, 116, 44,
770 5cdb1798 2005-10-29 devnull 40, 42, 2, 0, 5, 0, 0, 18, 57, 59,
771 5cdb1798 2005-10-29 devnull 0, 61, -2, 0, 0, 0, 66, 73, 0, 0,
772 5cdb1798 2005-10-29 devnull 14, 23, 85, 76, 78, 79, 80, 81, 82, 83,
773 5cdb1798 2005-10-29 devnull 84, 24, 16, 51, 53, 54, 0, 17, 19, 20,
774 5cdb1798 2005-10-29 devnull 21, 22, 26, 28, 30, 32, 34, 36, 37, 49,
775 5cdb1798 2005-10-29 devnull 43, 39, 41, 0, 0, 0, 60, 75, 0, 63,
776 5cdb1798 2005-10-29 devnull 64, 0, 0, 70, 71, 77, 0, 0, 0, 0,
777 5cdb1798 2005-10-29 devnull 58, 62, 67, 52, 0, 56, 15, 0, 87, 55,
778 5cdb1798 2005-10-29 devnull 0, 0, 86, 88
779 5cdb1798 2005-10-29 devnull };
780 5cdb1798 2005-10-29 devnull static const short yytok1[] =
781 5cdb1798 2005-10-29 devnull {
782 5cdb1798 2005-10-29 devnull 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
783 5cdb1798 2005-10-29 devnull 29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
784 5cdb1798 2005-10-29 devnull 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
785 5cdb1798 2005-10-29 devnull 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
786 5cdb1798 2005-10-29 devnull 0, 0, 0, 0, 31, 0, 0, 0, 0, 0,
787 5cdb1798 2005-10-29 devnull 0, 0, 0, 0, 0, 0, 0, 0, 30, 32,
788 5cdb1798 2005-10-29 devnull 33, 0, 34, 0, 35
789 5cdb1798 2005-10-29 devnull };
790 5cdb1798 2005-10-29 devnull static const short yytok2[] =
791 5cdb1798 2005-10-29 devnull {
792 5cdb1798 2005-10-29 devnull 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
793 5cdb1798 2005-10-29 devnull 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
794 5cdb1798 2005-10-29 devnull 22, 23, 24, 25, 26, 27, 28
795 5cdb1798 2005-10-29 devnull };
796 5cdb1798 2005-10-29 devnull static const long yytok3[] =
797 5cdb1798 2005-10-29 devnull {
798 5cdb1798 2005-10-29 devnull 0
799 5cdb1798 2005-10-29 devnull };
800 5cdb1798 2005-10-29 devnull #define YYFLAG -1000
801 5cdb1798 2005-10-29 devnull #define YYERROR goto yyerrlab
802 5cdb1798 2005-10-29 devnull #define YYACCEPT return(0)
803 5cdb1798 2005-10-29 devnull #define YYABORT return(1)
804 5cdb1798 2005-10-29 devnull #define yyclearin yychar = -1
805 5cdb1798 2005-10-29 devnull #define yyerrok yyerrflag = 0
806 5cdb1798 2005-10-29 devnull
807 5cdb1798 2005-10-29 devnull #ifdef yydebug
808 5cdb1798 2005-10-29 devnull #include "y.debug"
809 5cdb1798 2005-10-29 devnull #else
810 5cdb1798 2005-10-29 devnull #define yydebug 0
811 5cdb1798 2005-10-29 devnull static const char* yytoknames[1]; /* for debugging */
812 5cdb1798 2005-10-29 devnull static const char* yystates[1]; /* for debugging */
813 5cdb1798 2005-10-29 devnull #endif
814 5cdb1798 2005-10-29 devnull
815 5cdb1798 2005-10-29 devnull /* parser for yacc output */
816 5cdb1798 2005-10-29 devnull #ifdef YYARG
817 5cdb1798 2005-10-29 devnull #define yynerrs yyarg->yynerrs
818 5cdb1798 2005-10-29 devnull #define yyerrflag yyarg->yyerrflag
819 5cdb1798 2005-10-29 devnull #define yyval yyarg->yyval
820 5cdb1798 2005-10-29 devnull #define yylval yyarg->yylval
821 5cdb1798 2005-10-29 devnull #else
822 5cdb1798 2005-10-29 devnull int yynerrs = 0; /* number of errors */
823 5cdb1798 2005-10-29 devnull int yyerrflag = 0; /* error recovery flag */
824 5cdb1798 2005-10-29 devnull #endif
825 5cdb1798 2005-10-29 devnull
826 5cdb1798 2005-10-29 devnull extern int fprint(int, char*, ...);
827 5cdb1798 2005-10-29 devnull extern int sprint(char*, char*, ...);
828 5cdb1798 2005-10-29 devnull
829 5cdb1798 2005-10-29 devnull static const char*
830 5cdb1798 2005-10-29 devnull yytokname(int yyc)
831 5cdb1798 2005-10-29 devnull {
832 5cdb1798 2005-10-29 devnull static char x[10];
833 5cdb1798 2005-10-29 devnull
834 5cdb1798 2005-10-29 devnull if(yyc > 0 && yyc <= sizeof(yytoknames)/sizeof(yytoknames[0]))
835 5cdb1798 2005-10-29 devnull if(yytoknames[yyc-1])
836 5cdb1798 2005-10-29 devnull return yytoknames[yyc-1];
837 5cdb1798 2005-10-29 devnull sprint(x, "<%d>", yyc);
838 5cdb1798 2005-10-29 devnull return x;
839 5cdb1798 2005-10-29 devnull }
840 5cdb1798 2005-10-29 devnull
841 5cdb1798 2005-10-29 devnull static const char*
842 5cdb1798 2005-10-29 devnull yystatname(int yys)
843 5cdb1798 2005-10-29 devnull {
844 5cdb1798 2005-10-29 devnull static char x[10];
845 5cdb1798 2005-10-29 devnull
846 5cdb1798 2005-10-29 devnull if(yys >= 0 && yys < sizeof(yystates)/sizeof(yystates[0]))
847 5cdb1798 2005-10-29 devnull if(yystates[yys])
848 5cdb1798 2005-10-29 devnull return yystates[yys];
849 5cdb1798 2005-10-29 devnull sprint(x, "<%d>\n", yys);
850 5cdb1798 2005-10-29 devnull return x;
851 5cdb1798 2005-10-29 devnull }
852 5cdb1798 2005-10-29 devnull
853 5cdb1798 2005-10-29 devnull static long
854 5cdb1798 2005-10-29 devnull #ifdef YYARG
855 5cdb1798 2005-10-29 devnull yylex1(struct Yyarg *yyarg)
856 5cdb1798 2005-10-29 devnull #else
857 5cdb1798 2005-10-29 devnull yylex1(void)
858 5cdb1798 2005-10-29 devnull #endif
859 5cdb1798 2005-10-29 devnull {
860 5cdb1798 2005-10-29 devnull long yychar;
861 5cdb1798 2005-10-29 devnull const long *t3p;
862 5cdb1798 2005-10-29 devnull int c;
863 5cdb1798 2005-10-29 devnull
864 5cdb1798 2005-10-29 devnull #ifdef YYARG
865 5cdb1798 2005-10-29 devnull yychar = yylex(yyarg);
866 5cdb1798 2005-10-29 devnull #else
867 5cdb1798 2005-10-29 devnull yychar = yylex();
868 5cdb1798 2005-10-29 devnull #endif
869 5cdb1798 2005-10-29 devnull if(yychar <= 0) {
870 5cdb1798 2005-10-29 devnull c = yytok1[0];
871 5cdb1798 2005-10-29 devnull goto out;
872 5cdb1798 2005-10-29 devnull }
873 5cdb1798 2005-10-29 devnull if(yychar < sizeof(yytok1)/sizeof(yytok1[0])) {
874 5cdb1798 2005-10-29 devnull c = yytok1[yychar];
875 5cdb1798 2005-10-29 devnull goto out;
876 5cdb1798 2005-10-29 devnull }
877 5cdb1798 2005-10-29 devnull if(yychar >= YYPRIVATE)
878 5cdb1798 2005-10-29 devnull if(yychar < YYPRIVATE+sizeof(yytok2)/sizeof(yytok2[0])) {
879 5cdb1798 2005-10-29 devnull c = yytok2[yychar-YYPRIVATE];
880 5cdb1798 2005-10-29 devnull goto out;
881 5cdb1798 2005-10-29 devnull }
882 5cdb1798 2005-10-29 devnull for(t3p=yytok3;; t3p+=2) {
883 5cdb1798 2005-10-29 devnull c = t3p[0];
884 5cdb1798 2005-10-29 devnull if(c == yychar) {
885 5cdb1798 2005-10-29 devnull c = t3p[1];
886 5cdb1798 2005-10-29 devnull goto out;
887 5cdb1798 2005-10-29 devnull }
888 5cdb1798 2005-10-29 devnull if(c == 0)
889 5cdb1798 2005-10-29 devnull break;
890 5cdb1798 2005-10-29 devnull }
891 5cdb1798 2005-10-29 devnull c = 0;
892 5cdb1798 2005-10-29 devnull
893 5cdb1798 2005-10-29 devnull out:
894 5cdb1798 2005-10-29 devnull if(c == 0)
895 5cdb1798 2005-10-29 devnull c = yytok2[1]; /* unknown char */
896 5cdb1798 2005-10-29 devnull if(yydebug >= 3)
897 5cdb1798 2005-10-29 devnull fprint(2, "lex %.4lux %s\n", yychar, yytokname(c));
898 5cdb1798 2005-10-29 devnull return c;
899 5cdb1798 2005-10-29 devnull }
900 5cdb1798 2005-10-29 devnull
901 5cdb1798 2005-10-29 devnull int
902 5cdb1798 2005-10-29 devnull #ifdef YYARG
903 5cdb1798 2005-10-29 devnull yyparse(struct Yyarg *yyarg)
904 5cdb1798 2005-10-29 devnull #else
905 5cdb1798 2005-10-29 devnull yyparse(void)
906 5cdb1798 2005-10-29 devnull #endif
907 5cdb1798 2005-10-29 devnull {
908 5cdb1798 2005-10-29 devnull struct
909 5cdb1798 2005-10-29 devnull {
910 5cdb1798 2005-10-29 devnull YYSTYPE yyv;
911 5cdb1798 2005-10-29 devnull int yys;
912 5cdb1798 2005-10-29 devnull } yys[YYMAXDEPTH], *yyp, *yypt;
913 5cdb1798 2005-10-29 devnull const short *yyxi;
914 5cdb1798 2005-10-29 devnull int yyj, yym, yystate, yyn, yyg;
915 5cdb1798 2005-10-29 devnull long yychar;
916 5cdb1798 2005-10-29 devnull #ifndef YYARG
917 5cdb1798 2005-10-29 devnull YYSTYPE save1, save2;
918 5cdb1798 2005-10-29 devnull int save3, save4;
919 5cdb1798 2005-10-29 devnull
920 5cdb1798 2005-10-29 devnull save1 = yylval;
921 5cdb1798 2005-10-29 devnull save2 = yyval;
922 5cdb1798 2005-10-29 devnull save3 = yynerrs;
923 5cdb1798 2005-10-29 devnull save4 = yyerrflag;
924 5cdb1798 2005-10-29 devnull #endif
925 5cdb1798 2005-10-29 devnull
926 5cdb1798 2005-10-29 devnull yystate = 0;
927 5cdb1798 2005-10-29 devnull yychar = -1;
928 5cdb1798 2005-10-29 devnull yynerrs = 0;
929 5cdb1798 2005-10-29 devnull yyerrflag = 0;
930 5cdb1798 2005-10-29 devnull yyp = &yys[-1];
931 5cdb1798 2005-10-29 devnull goto yystack;
932 5cdb1798 2005-10-29 devnull
933 5cdb1798 2005-10-29 devnull ret0:
934 5cdb1798 2005-10-29 devnull yyn = 0;
935 5cdb1798 2005-10-29 devnull goto ret;
936 5cdb1798 2005-10-29 devnull
937 5cdb1798 2005-10-29 devnull ret1:
938 5cdb1798 2005-10-29 devnull yyn = 1;
939 5cdb1798 2005-10-29 devnull goto ret;
940 5cdb1798 2005-10-29 devnull
941 5cdb1798 2005-10-29 devnull ret:
942 5cdb1798 2005-10-29 devnull #ifndef YYARG
943 5cdb1798 2005-10-29 devnull yylval = save1;
944 5cdb1798 2005-10-29 devnull yyval = save2;
945 5cdb1798 2005-10-29 devnull yynerrs = save3;
946 5cdb1798 2005-10-29 devnull yyerrflag = save4;
947 5cdb1798 2005-10-29 devnull #endif
948 5cdb1798 2005-10-29 devnull return yyn;
949 5cdb1798 2005-10-29 devnull
950 5cdb1798 2005-10-29 devnull yystack:
951 5cdb1798 2005-10-29 devnull /* put a state and value onto the stack */
952 5cdb1798 2005-10-29 devnull if(yydebug >= 4)
953 5cdb1798 2005-10-29 devnull fprint(2, "char %s in %s", yytokname(yychar), yystatname(yystate));
954 5cdb1798 2005-10-29 devnull
955 5cdb1798 2005-10-29 devnull yyp++;
956 5cdb1798 2005-10-29 devnull if(yyp >= &yys[YYMAXDEPTH]) {
957 5cdb1798 2005-10-29 devnull yyerror("yacc stack overflow");
958 5cdb1798 2005-10-29 devnull goto ret1;
959 5cdb1798 2005-10-29 devnull }
960 5cdb1798 2005-10-29 devnull yyp->yys = yystate;
961 5cdb1798 2005-10-29 devnull yyp->yyv = yyval;
962 5cdb1798 2005-10-29 devnull
963 5cdb1798 2005-10-29 devnull yynewstate:
964 5cdb1798 2005-10-29 devnull yyn = yypact[yystate];
965 5cdb1798 2005-10-29 devnull if(yyn <= YYFLAG)
966 5cdb1798 2005-10-29 devnull goto yydefault; /* simple state */
967 5cdb1798 2005-10-29 devnull if(yychar < 0)
968 5cdb1798 2005-10-29 devnull #ifdef YYARG
969 5cdb1798 2005-10-29 devnull yychar = yylex1(yyarg);
970 5cdb1798 2005-10-29 devnull #else
971 5cdb1798 2005-10-29 devnull yychar = yylex1();
972 5cdb1798 2005-10-29 devnull #endif
973 5cdb1798 2005-10-29 devnull yyn += yychar;
974 5cdb1798 2005-10-29 devnull if(yyn < 0 || yyn >= YYLAST)
975 5cdb1798 2005-10-29 devnull goto yydefault;
976 5cdb1798 2005-10-29 devnull yyn = yyact[yyn];
977 5cdb1798 2005-10-29 devnull if(yychk[yyn] == yychar) { /* valid shift */
978 5cdb1798 2005-10-29 devnull yychar = -1;
979 5cdb1798 2005-10-29 devnull yyval = yylval;
980 5cdb1798 2005-10-29 devnull yystate = yyn;
981 5cdb1798 2005-10-29 devnull if(yyerrflag > 0)
982 5cdb1798 2005-10-29 devnull yyerrflag--;
983 5cdb1798 2005-10-29 devnull goto yystack;
984 5cdb1798 2005-10-29 devnull }
985 5cdb1798 2005-10-29 devnull
986 5cdb1798 2005-10-29 devnull yydefault:
987 5cdb1798 2005-10-29 devnull /* default state action */
988 5cdb1798 2005-10-29 devnull yyn = yydef[yystate];
989 5cdb1798 2005-10-29 devnull if(yyn == -2) {
990 5cdb1798 2005-10-29 devnull if(yychar < 0)
991 5cdb1798 2005-10-29 devnull #ifdef YYARG
992 5cdb1798 2005-10-29 devnull yychar = yylex1(yyarg);
993 5cdb1798 2005-10-29 devnull #else
994 5cdb1798 2005-10-29 devnull yychar = yylex1();
995 5cdb1798 2005-10-29 devnull #endif
996 5cdb1798 2005-10-29 devnull
997 5cdb1798 2005-10-29 devnull /* look through exception table */
998 5cdb1798 2005-10-29 devnull for(yyxi=yyexca;; yyxi+=2)
999 5cdb1798 2005-10-29 devnull if(yyxi[0] == -1 && yyxi[1] == yystate)
1000 5cdb1798 2005-10-29 devnull break;
1001 5cdb1798 2005-10-29 devnull for(yyxi += 2;; yyxi += 2) {
1002 5cdb1798 2005-10-29 devnull yyn = yyxi[0];
1003 5cdb1798 2005-10-29 devnull if(yyn < 0 || yyn == yychar)
1004 5cdb1798 2005-10-29 devnull break;
1005 5cdb1798 2005-10-29 devnull }
1006 5cdb1798 2005-10-29 devnull yyn = yyxi[1];
1007 5cdb1798 2005-10-29 devnull if(yyn < 0)
1008 5cdb1798 2005-10-29 devnull goto ret0;
1009 5cdb1798 2005-10-29 devnull }
1010 5cdb1798 2005-10-29 devnull if(yyn == 0) {
1011 5cdb1798 2005-10-29 devnull /* error ... attempt to resume parsing */
1012 5cdb1798 2005-10-29 devnull switch(yyerrflag) {
1013 5cdb1798 2005-10-29 devnull case 0: /* brand new error */
1014 5cdb1798 2005-10-29 devnull yyerror("syntax error");
1015 5cdb1798 2005-10-29 devnull if(yydebug >= 1) {
1016 5cdb1798 2005-10-29 devnull fprint(2, "%s", yystatname(yystate));
1017 5cdb1798 2005-10-29 devnull fprint(2, "saw %s\n", yytokname(yychar));
1018 5cdb1798 2005-10-29 devnull }
1019 5cdb1798 2005-10-29 devnull goto yyerrlab;
1020 5cdb1798 2005-10-29 devnull yyerrlab:
1021 5cdb1798 2005-10-29 devnull yynerrs++;
1022 5cdb1798 2005-10-29 devnull
1023 5cdb1798 2005-10-29 devnull case 1:
1024 5cdb1798 2005-10-29 devnull case 2: /* incompletely recovered error ... try again */
1025 5cdb1798 2005-10-29 devnull yyerrflag = 3;
1026 5cdb1798 2005-10-29 devnull
1027 5cdb1798 2005-10-29 devnull /* find a state where "error" is a legal shift action */
1028 5cdb1798 2005-10-29 devnull while(yyp >= yys) {
1029 5cdb1798 2005-10-29 devnull yyn = yypact[yyp->yys] + YYERRCODE;
1030 5cdb1798 2005-10-29 devnull if(yyn >= 0 && yyn < YYLAST) {
1031 5cdb1798 2005-10-29 devnull yystate = yyact[yyn]; /* simulate a shift of "error" */
1032 5cdb1798 2005-10-29 devnull if(yychk[yystate] == YYERRCODE)
1033 5cdb1798 2005-10-29 devnull goto yystack;
1034 5cdb1798 2005-10-29 devnull }
1035 5cdb1798 2005-10-29 devnull
1036 5cdb1798 2005-10-29 devnull /* the current yyp has no shift onn "error", pop stack */
1037 5cdb1798 2005-10-29 devnull if(yydebug >= 2)
1038 5cdb1798 2005-10-29 devnull fprint(2, "error recovery pops state %d, uncovers %d\n",
1039 5cdb1798 2005-10-29 devnull yyp->yys, (yyp-1)->yys );
1040 5cdb1798 2005-10-29 devnull yyp--;
1041 5cdb1798 2005-10-29 devnull }
1042 5cdb1798 2005-10-29 devnull /* there is no state on the stack with an error shift ... abort */
1043 5cdb1798 2005-10-29 devnull goto ret1;
1044 5cdb1798 2005-10-29 devnull
1045 5cdb1798 2005-10-29 devnull case 3: /* no shift yet; clobber input char */
1046 5cdb1798 2005-10-29 devnull if(yydebug >= 2)
1047 5cdb1798 2005-10-29 devnull fprint(2, "error recovery discards %s\n", yytokname(yychar));
1048 5cdb1798 2005-10-29 devnull if(yychar == YYEOFCODE)
1049 5cdb1798 2005-10-29 devnull goto ret1;
1050 5cdb1798 2005-10-29 devnull yychar = -1;
1051 5cdb1798 2005-10-29 devnull goto yynewstate; /* try again in the same state */
1052 5cdb1798 2005-10-29 devnull }
1053 5cdb1798 2005-10-29 devnull }
1054 5cdb1798 2005-10-29 devnull
1055 5cdb1798 2005-10-29 devnull /* reduction by production yyn */
1056 5cdb1798 2005-10-29 devnull if(yydebug >= 2)
1057 5cdb1798 2005-10-29 devnull fprint(2, "reduce %d in:\n\t%s", yyn, yystatname(yystate));
1058 5cdb1798 2005-10-29 devnull
1059 5cdb1798 2005-10-29 devnull yypt = yyp;
1060 5cdb1798 2005-10-29 devnull yyp -= yyr2[yyn];
1061 5cdb1798 2005-10-29 devnull yyval = (yyp+1)->yyv;
1062 5cdb1798 2005-10-29 devnull yym = yyn;
1063 5cdb1798 2005-10-29 devnull
1064 5cdb1798 2005-10-29 devnull /* consult goto table to find next state */
1065 5cdb1798 2005-10-29 devnull yyn = yyr1[yyn];
1066 5cdb1798 2005-10-29 devnull yyg = yypgo[yyn];
1067 5cdb1798 2005-10-29 devnull yyj = yyg + yyp->yys + 1;
1068 5cdb1798 2005-10-29 devnull
1069 5cdb1798 2005-10-29 devnull if(yyj >= YYLAST || yychk[yystate=yyact[yyj]] != -yyn)
1070 5cdb1798 2005-10-29 devnull yystate = yyact[yyg];
1071 5cdb1798 2005-10-29 devnull switch(yym) {
1072 5cdb1798 2005-10-29 devnull
1073 5cdb1798 2005-10-29 devnull case 3:
1074 5cdb1798 2005-10-29 devnull #line 56 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1075 5cdb1798 2005-10-29 devnull { yydone = 1; } break;
1076 5cdb1798 2005-10-29 devnull case 6:
1077 5cdb1798 2005-10-29 devnull #line 61 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1078 5cdb1798 2005-10-29 devnull { date = 1; } break;
1079 5cdb1798 2005-10-29 devnull case 7:
1080 5cdb1798 2005-10-29 devnull #line 63 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1081 5cdb1798 2005-10-29 devnull { originator = 1; } break;
1082 5cdb1798 2005-10-29 devnull case 8:
1083 5cdb1798 2005-10-29 devnull #line 65 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1084 5cdb1798 2005-10-29 devnull { destination = 1; } break;
1085 5cdb1798 2005-10-29 devnull case 15:
1086 5cdb1798 2005-10-29 devnull #line 74 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1087 5cdb1798 2005-10-29 devnull { freenode(yypt[-5].yyv); freenode(yypt[-2].yyv); freenode(yypt[-1].yyv);
1088 5cdb1798 2005-10-29 devnull usender = yypt[-4].yyv; udate = yypt[-3].yyv; usys = yypt[-0].yyv;
1089 5cdb1798 2005-10-29 devnull } break;
1090 5cdb1798 2005-10-29 devnull case 16:
1091 5cdb1798 2005-10-29 devnull #line 79 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1092 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
1093 5cdb1798 2005-10-29 devnull case 17:
1094 5cdb1798 2005-10-29 devnull #line 81 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1095 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
1096 5cdb1798 2005-10-29 devnull case 18:
1097 5cdb1798 2005-10-29 devnull #line 83 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1098 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
1099 5cdb1798 2005-10-29 devnull case 19:
1100 5cdb1798 2005-10-29 devnull #line 85 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1101 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
1102 5cdb1798 2005-10-29 devnull case 20:
1103 5cdb1798 2005-10-29 devnull #line 87 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1104 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
1105 5cdb1798 2005-10-29 devnull case 21:
1106 5cdb1798 2005-10-29 devnull #line 89 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1107 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
1108 5cdb1798 2005-10-29 devnull case 22:
1109 5cdb1798 2005-10-29 devnull #line 91 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1110 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
1111 5cdb1798 2005-10-29 devnull case 23:
1112 5cdb1798 2005-10-29 devnull #line 94 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1113 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1114 5cdb1798 2005-10-29 devnull case 24:
1115 5cdb1798 2005-10-29 devnull #line 96 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1116 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1117 5cdb1798 2005-10-29 devnull case 25:
1118 5cdb1798 2005-10-29 devnull #line 99 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1119 5cdb1798 2005-10-29 devnull { newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1120 5cdb1798 2005-10-29 devnull case 26:
1121 5cdb1798 2005-10-29 devnull #line 101 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1122 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1123 5cdb1798 2005-10-29 devnull case 27:
1124 5cdb1798 2005-10-29 devnull #line 103 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1125 5cdb1798 2005-10-29 devnull { newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1126 5cdb1798 2005-10-29 devnull case 28:
1127 5cdb1798 2005-10-29 devnull #line 105 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1128 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1129 5cdb1798 2005-10-29 devnull case 29:
1130 5cdb1798 2005-10-29 devnull #line 107 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1131 5cdb1798 2005-10-29 devnull { newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1132 5cdb1798 2005-10-29 devnull case 30:
1133 5cdb1798 2005-10-29 devnull #line 109 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1134 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1135 5cdb1798 2005-10-29 devnull case 31:
1136 5cdb1798 2005-10-29 devnull #line 111 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1137 5cdb1798 2005-10-29 devnull { newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1138 5cdb1798 2005-10-29 devnull case 32:
1139 5cdb1798 2005-10-29 devnull #line 113 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1140 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1141 5cdb1798 2005-10-29 devnull case 33:
1142 5cdb1798 2005-10-29 devnull #line 115 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1143 5cdb1798 2005-10-29 devnull { newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1144 5cdb1798 2005-10-29 devnull case 34:
1145 5cdb1798 2005-10-29 devnull #line 117 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1146 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1147 5cdb1798 2005-10-29 devnull case 35:
1148 5cdb1798 2005-10-29 devnull #line 119 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1149 5cdb1798 2005-10-29 devnull { newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1150 5cdb1798 2005-10-29 devnull case 36:
1151 5cdb1798 2005-10-29 devnull #line 121 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1152 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1153 5cdb1798 2005-10-29 devnull case 37:
1154 5cdb1798 2005-10-29 devnull #line 124 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1155 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1156 5cdb1798 2005-10-29 devnull case 38:
1157 5cdb1798 2005-10-29 devnull #line 126 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1158 5cdb1798 2005-10-29 devnull { newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1159 5cdb1798 2005-10-29 devnull case 39:
1160 5cdb1798 2005-10-29 devnull #line 129 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1161 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); received++; } break;
1162 5cdb1798 2005-10-29 devnull case 40:
1163 5cdb1798 2005-10-29 devnull #line 131 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1164 5cdb1798 2005-10-29 devnull { newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); received++; } break;
1165 5cdb1798 2005-10-29 devnull case 41:
1166 5cdb1798 2005-10-29 devnull #line 134 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1167 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1168 5cdb1798 2005-10-29 devnull case 42:
1169 5cdb1798 2005-10-29 devnull #line 136 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1170 5cdb1798 2005-10-29 devnull { newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1171 5cdb1798 2005-10-29 devnull case 43:
1172 5cdb1798 2005-10-29 devnull #line 139 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1173 5cdb1798 2005-10-29 devnull { newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1174 5cdb1798 2005-10-29 devnull case 44:
1175 5cdb1798 2005-10-29 devnull #line 141 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1176 5cdb1798 2005-10-29 devnull { newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
1177 5cdb1798 2005-10-29 devnull case 47:
1178 5cdb1798 2005-10-29 devnull #line 143 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1179 5cdb1798 2005-10-29 devnull { messageid = 1; } break;
1180 5cdb1798 2005-10-29 devnull case 49:
1181 5cdb1798 2005-10-29 devnull #line 146 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1182 5cdb1798 2005-10-29 devnull { /* hack to allow same lex for field names and the rest */
1183 5cdb1798 2005-10-29 devnull if(badfieldname(yypt[-2].yyv)){
1184 5cdb1798 2005-10-29 devnull freenode(yypt[-2].yyv);
1185 5cdb1798 2005-10-29 devnull freenode(yypt[-1].yyv);
1186 5cdb1798 2005-10-29 devnull freenode(yypt[-0].yyv);
1187 5cdb1798 2005-10-29 devnull return 1;
1188 5cdb1798 2005-10-29 devnull }
1189 5cdb1798 2005-10-29 devnull newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0);
1190 5cdb1798 2005-10-29 devnull } break;
1191 5cdb1798 2005-10-29 devnull case 50:
1192 5cdb1798 2005-10-29 devnull #line 156 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1193 5cdb1798 2005-10-29 devnull { /* hack to allow same lex for field names and the rest */
1194 5cdb1798 2005-10-29 devnull if(badfieldname(yypt[-1].yyv)){
1195 5cdb1798 2005-10-29 devnull freenode(yypt[-1].yyv);
1196 5cdb1798 2005-10-29 devnull freenode(yypt[-0].yyv);
1197 5cdb1798 2005-10-29 devnull return 1;
1198 5cdb1798 2005-10-29 devnull }
1199 5cdb1798 2005-10-29 devnull newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0);
1200 5cdb1798 2005-10-29 devnull } break;
1201 5cdb1798 2005-10-29 devnull case 52:
1202 5cdb1798 2005-10-29 devnull #line 167 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1203 5cdb1798 2005-10-29 devnull { yyval = link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
1204 5cdb1798 2005-10-29 devnull case 55:
1205 5cdb1798 2005-10-29 devnull #line 173 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1206 5cdb1798 2005-10-29 devnull { yyval = link2(yypt[-3].yyv, link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv)); } break;
1207 5cdb1798 2005-10-29 devnull case 56:
1208 5cdb1798 2005-10-29 devnull #line 175 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1209 5cdb1798 2005-10-29 devnull { yyval = link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
1210 5cdb1798 2005-10-29 devnull case 58:
1211 5cdb1798 2005-10-29 devnull #line 179 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1212 5cdb1798 2005-10-29 devnull { yyval = link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
1213 5cdb1798 2005-10-29 devnull case 60:
1214 5cdb1798 2005-10-29 devnull #line 183 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1215 5cdb1798 2005-10-29 devnull { yyval = link2(yypt[-1].yyv, yypt[-0].yyv); } break;
1216 5cdb1798 2005-10-29 devnull case 62:
1217 5cdb1798 2005-10-29 devnull #line 187 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1218 5cdb1798 2005-10-29 devnull { yyval = link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
1219 5cdb1798 2005-10-29 devnull case 63:
1220 5cdb1798 2005-10-29 devnull #line 189 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1221 5cdb1798 2005-10-29 devnull { yyval = nobody(yypt[-0].yyv); freenode(yypt[-1].yyv); } break;
1222 5cdb1798 2005-10-29 devnull case 64:
1223 5cdb1798 2005-10-29 devnull #line 192 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1224 5cdb1798 2005-10-29 devnull { yyval = address(concat(yypt[-2].yyv, concat(yypt[-1].yyv, yypt[-0].yyv))); } break;
1225 5cdb1798 2005-10-29 devnull case 66:
1226 5cdb1798 2005-10-29 devnull #line 196 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1227 5cdb1798 2005-10-29 devnull { yyval = concat(yypt[-1].yyv, yypt[-0].yyv); } break;
1228 5cdb1798 2005-10-29 devnull case 67:
1229 5cdb1798 2005-10-29 devnull #line 198 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1230 5cdb1798 2005-10-29 devnull { yyval = concat(yypt[-3].yyv, concat(yypt[-2].yyv, concat(yypt[-1].yyv, yypt[-0].yyv))); } break;
1231 5cdb1798 2005-10-29 devnull case 68:
1232 5cdb1798 2005-10-29 devnull #line 201 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1233 5cdb1798 2005-10-29 devnull { yyval = address(yypt[-0].yyv); } break;
1234 5cdb1798 2005-10-29 devnull case 70:
1235 5cdb1798 2005-10-29 devnull #line 205 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1236 5cdb1798 2005-10-29 devnull { yyval = address(concat(yypt[-2].yyv, concat(yypt[-1].yyv, yypt[-0].yyv)));} break;
1237 5cdb1798 2005-10-29 devnull case 71:
1238 5cdb1798 2005-10-29 devnull #line 207 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1239 5cdb1798 2005-10-29 devnull { yyval = address(concat(yypt[-2].yyv, concat(yypt[-1].yyv, yypt[-0].yyv)));} break;
1240 5cdb1798 2005-10-29 devnull case 75:
1241 5cdb1798 2005-10-29 devnull #line 215 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1242 5cdb1798 2005-10-29 devnull { yyval = link2(yypt[-1].yyv, yypt[-0].yyv); } break;
1243 5cdb1798 2005-10-29 devnull case 77:
1244 5cdb1798 2005-10-29 devnull #line 219 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1245 5cdb1798 2005-10-29 devnull { yyval = link2(yypt[-1].yyv, yypt[-0].yyv); } break;
1246 5cdb1798 2005-10-29 devnull case 86:
1247 5cdb1798 2005-10-29 devnull #line 226 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1248 5cdb1798 2005-10-29 devnull { yyval = link3(yypt[-5].yyv, yypt[-3].yyv, link3(yypt[-4].yyv, yypt[-0].yyv, link2(yypt[-2].yyv, yypt[-1].yyv))); } break;
1249 5cdb1798 2005-10-29 devnull case 88:
1250 5cdb1798 2005-10-29 devnull #line 230 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1251 5cdb1798 2005-10-29 devnull { yyval = link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
1252 5cdb1798 2005-10-29 devnull case 115:
1253 5cdb1798 2005-10-29 devnull #line 240 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1254 5cdb1798 2005-10-29 devnull { yyval = link2(yypt[-1].yyv, yypt[-0].yyv); } break;
1255 5cdb1798 2005-10-29 devnull case 116:
1256 5cdb1798 2005-10-29 devnull #line 242 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
1257 5cdb1798 2005-10-29 devnull { yyval = link2(yypt[-1].yyv, yypt[-0].yyv); } break;
1258 5cdb1798 2005-10-29 devnull }
1259 5cdb1798 2005-10-29 devnull goto yystack; /* stack new state and value */
1260 5cdb1798 2005-10-29 devnull }