aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/upas
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2007-11-27 15:38:29 -0500
committerRuss Cox <rsc@swtch.com>2007-11-27 15:38:29 -0500
commite0e75ef7f4bafe7d02576973c912eac99874e141 (patch)
tree25846e5d0f3c61e0b60aa76afcc54858d0f2c074 /src/cmd/upas
parent3f4e0dc707b92e7c5bce9555253852d4070c0b02 (diff)
downloadplan9port-e0e75ef7f4bafe7d02576973c912eac99874e141.tar.gz
plan9port-e0e75ef7f4bafe7d02576973c912eac99874e141.tar.bz2
plan9port-e0e75ef7f4bafe7d02576973c912eac99874e141.zip
upas/smtp: remove intermediate files
Diffstat (limited to 'src/cmd/upas')
-rw-r--r--src/cmd/upas/smtp/rfc822.tab.c1260
-rw-r--r--src/cmd/upas/smtp/y.tab.h25
2 files changed, 0 insertions, 1285 deletions
diff --git a/src/cmd/upas/smtp/rfc822.tab.c b/src/cmd/upas/smtp/rfc822.tab.c
deleted file mode 100644
index cacf8672..00000000
--- a/src/cmd/upas/smtp/rfc822.tab.c
+++ /dev/null
@@ -1,1260 +0,0 @@
-
-#line 2 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-#include "common.h"
-#include "smtp.h"
-#include <ctype.h>
-
-char *yylp; /* next character to be lex'd */
-int yydone; /* tell yylex to give up */
-char *yybuffer; /* first parsed character */
-char *yyend; /* end of buffer to be parsed */
-Node *root;
-Field *firstfield;
-Field *lastfield;
-Node *usender;
-Node *usys;
-Node *udate;
-char *startfield, *endfield;
-int originator;
-int destination;
-int date;
-int received;
-int messageid;
-extern int yyerrflag;
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 150
-#endif
-#ifndef YYSTYPE
-#define YYSTYPE int
-#endif
-YYSTYPE yylval;
-YYSTYPE yyval;
-#define WORD 57346
-#define DATE 57347
-#define RESENT_DATE 57348
-#define RETURN_PATH 57349
-#define FROM 57350
-#define SENDER 57351
-#define REPLY_TO 57352
-#define RESENT_FROM 57353
-#define RESENT_SENDER 57354
-#define RESENT_REPLY_TO 57355
-#define SUBJECT 57356
-#define TO 57357
-#define CC 57358
-#define BCC 57359
-#define RESENT_TO 57360
-#define RESENT_CC 57361
-#define RESENT_BCC 57362
-#define REMOTE 57363
-#define PRECEDENCE 57364
-#define MIMEVERSION 57365
-#define CONTENTTYPE 57366
-#define MESSAGEID 57367
-#define RECEIVED 57368
-#define MAILER 57369
-#define BADTOKEN 57370
-#define YYEOFCODE 1
-#define YYERRCODE 2
-
-#line 246 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-
-
-/*
- * Initialize the parsing. Done once for each header field.
- */
-void
-yyinit(char *p, int len)
-{
- yybuffer = p;
- yylp = p;
- yyend = p + len;
- firstfield = lastfield = 0;
- received = 0;
-}
-
-/*
- * keywords identifying header fields we care about
- */
-typedef struct Keyword Keyword;
-struct Keyword {
- char *rep;
- int val;
-};
-
-/* field names that we need to recognize */
-Keyword key[] = {
- { "date", DATE },
- { "resent-date", RESENT_DATE },
- { "return_path", RETURN_PATH },
- { "from", FROM },
- { "sender", SENDER },
- { "reply-to", REPLY_TO },
- { "resent-from", RESENT_FROM },
- { "resent-sender", RESENT_SENDER },
- { "resent-reply-to", RESENT_REPLY_TO },
- { "to", TO },
- { "cc", CC },
- { "bcc", BCC },
- { "resent-to", RESENT_TO },
- { "resent-cc", RESENT_CC },
- { "resent-bcc", RESENT_BCC },
- { "remote", REMOTE },
- { "subject", SUBJECT },
- { "precedence", PRECEDENCE },
- { "mime-version", MIMEVERSION },
- { "content-type", CONTENTTYPE },
- { "message-id", MESSAGEID },
- { "received", RECEIVED },
- { "mailer", MAILER },
- { "who-the-hell-cares", WORD }
-};
-
-/*
- * Lexical analysis for an rfc822 header field. Continuation lines
- * are handled in yywhite() when skipping over white space.
- *
- */
-int
-yylex(void)
-{
- String *t;
- int quoting;
- int escaping;
- char *start;
- Keyword *kp;
- int c, d;
-
-/* print("lexing\n"); /**/
- if(yylp >= yyend)
- return 0;
- if(yydone)
- return 0;
-
- quoting = escaping = 0;
- start = yylp;
- yylval = malloc(sizeof(Node));
- yylval->white = yylval->s = 0;
- yylval->next = 0;
- yylval->addr = 0;
- yylval->start = yylp;
- for(t = 0; yylp < yyend; yylp++){
- c = *yylp & 0xff;
-
- /* dump nulls, they can't be in header */
- if(c == 0)
- continue;
-
- if(escaping) {
- escaping = 0;
- } else if(quoting) {
- switch(c){
- case '\\':
- escaping = 1;
- break;
- case '\n':
- d = (*(yylp+1))&0xff;
- if(d != ' ' && d != '\t'){
- quoting = 0;
- yylp--;
- continue;
- }
- break;
- case '"':
- quoting = 0;
- break;
- }
- } else {
- switch(c){
- case '\\':
- escaping = 1;
- break;
- case '(':
- case ' ':
- case '\t':
- case '\r':
- goto out;
- case '\n':
- if(yylp == start){
- yylp++;
-/* print("lex(c %c)\n", c); /**/
- yylval->end = yylp;
- return yylval->c = c;
- }
- goto out;
- case '@':
- case '>':
- case '<':
- case ':':
- case ',':
- case ';':
- if(yylp == start){
- yylp++;
- yylval->white = yywhite();
-/* print("lex(c %c)\n", c); /**/
- yylval->end = yylp;
- return yylval->c = c;
- }
- goto out;
- case '"':
- quoting = 1;
- break;
- default:
- break;
- }
- }
- if(t == 0)
- t = s_new();
- s_putc(t, c);
- }
-out:
- yylval->white = yywhite();
- if(t) {
- s_terminate(t);
- } else /* message begins with white-space! */
- return yylval->c = '\n';
- yylval->s = t;
- for(kp = key; kp->val != WORD; kp++)
- if(cistrcmp(s_to_c(t), kp->rep)==0)
- break;
-/* print("lex(%d) %s\n", kp->val-WORD, s_to_c(t)); /**/
- yylval->end = yylp;
- return yylval->c = kp->val;
-}
-
-void
-yyerror(char *x)
-{
- USED(x);
-
- /*fprint(2, "parse err: %s\n", x);/**/
-}
-
-/*
- * parse white space and comments
- */
-String *
-yywhite(void)
-{
- String *w;
- int clevel;
- int c;
- int escaping;
-
- escaping = clevel = 0;
- for(w = 0; yylp < yyend; yylp++){
- c = *yylp & 0xff;
-
- /* dump nulls, they can't be in header */
- if(c == 0)
- continue;
-
- if(escaping){
- escaping = 0;
- } else if(clevel) {
- switch(c){
- case '\n':
- /*
- * look for multiline fields
- */
- if(*(yylp+1)==' ' || *(yylp+1)=='\t')
- break;
- else
- goto out;
- case '\\':
- escaping = 1;
- break;
- case '(':
- clevel++;
- break;
- case ')':
- clevel--;
- break;
- }
- } else {
- switch(c){
- case '\\':
- escaping = 1;
- break;
- case '(':
- clevel++;
- break;
- case ' ':
- case '\t':
- case '\r':
- break;
- case '\n':
- /*
- * look for multiline fields
- */
- if(*(yylp+1)==' ' || *(yylp+1)=='\t')
- break;
- else
- goto out;
- default:
- goto out;
- }
- }
- if(w == 0)
- w = s_new();
- s_putc(w, c);
- }
-out:
- if(w)
- s_terminate(w);
- return w;
-}
-
-/*
- * link two parsed entries together
- */
-Node*
-link2(Node *p1, Node *p2)
-{
- Node *p;
-
- for(p = p1; p->next; p = p->next)
- ;
- p->next = p2;
- return p1;
-}
-
-/*
- * link three parsed entries together
- */
-Node*
-link3(Node *p1, Node *p2, Node *p3)
-{
- Node *p;
-
- for(p = p2; p->next; p = p->next)
- ;
- p->next = p3;
-
- for(p = p1; p->next; p = p->next)
- ;
- p->next = p2;
-
- return p1;
-}
-
-/*
- * make a:b, move all white space after both
- */
-Node*
-colon(Node *p1, Node *p2)
-{
- if(p1->white){
- if(p2->white)
- s_append(p1->white, s_to_c(p2->white));
- } else {
- p1->white = p2->white;
- p2->white = 0;
- }
-
- s_append(p1->s, ":");
- if(p2->s)
- s_append(p1->s, s_to_c(p2->s));
-
- if(p1->end < p2->end)
- p1->end = p2->end;
- freenode(p2);
- return p1;
-}
-
-/*
- * concatenate two fields, move all white space after both
- */
-Node*
-concat(Node *p1, Node *p2)
-{
- char buf[2];
-
- if(p1->white){
- if(p2->white)
- s_append(p1->white, s_to_c(p2->white));
- } else {
- p1->white = p2->white;
- p2->white = 0;
- }
-
- if(p1->s == nil){
- buf[0] = p1->c;
- buf[1] = 0;
- p1->s = s_new();
- s_append(p1->s, buf);
- }
-
- if(p2->s)
- s_append(p1->s, s_to_c(p2->s));
- else {
- buf[0] = p2->c;
- buf[1] = 0;
- s_append(p1->s, buf);
- }
-
- if(p1->end < p2->end)
- p1->end = p2->end;
- freenode(p2);
- return p1;
-}
-
-/*
- * look for disallowed chars in the field name
- */
-int
-badfieldname(Node *p)
-{
- for(; p; p = p->next){
- /* field name can't contain white space */
- if(p->white && p->next)
- return 1;
- }
- return 0;
-}
-
-/*
- * mark as an address
- */
-Node *
-address(Node *p)
-{
- p->addr = 1;
- return p;
-}
-
-/*
- * case independent string compare
- */
-int
-cistrcmp(char *s1, char *s2)
-{
- int c1, c2;
-
- for(; *s1; s1++, s2++){
- c1 = isupper(*s1) ? tolower(*s1) : *s1;
- c2 = isupper(*s2) ? tolower(*s2) : *s2;
- if (c1 != c2)
- return -1;
- }
- return *s2;
-}
-
-/*
- * free a node
- */
-void
-freenode(Node *p)
-{
- Node *tp;
-
- while(p){
- tp = p->next;
- if(p->s)
- s_free(p->s);
- if(p->white)
- s_free(p->white);
- free(p);
- p = tp;
- }
-}
-
-
-/*
- * an anonymous user
- */
-Node*
-nobody(Node *p)
-{
- if(p->s)
- s_free(p->s);
- p->s = s_copy("pOsTmAsTeR");
- p->addr = 1;
- return p;
-}
-
-/*
- * add anything that was dropped because of a parse error
- */
-void
-missing(Node *p)
-{
- Node *np;
- char *start, *end;
- Field *f;
- String *s;
-
- start = yybuffer;
- if(lastfield != nil){
- for(np = lastfield->node; np; np = np->next)
- start = np->end+1;
- }
-
- end = p->start-1;
-
- if(end <= start)
- return;
-
- if(strncmp(start, "From ", 5) == 0)
- return;
-
- np = malloc(sizeof(Node));
- np->start = start;
- np->end = end;
- np->white = nil;
- s = s_copy("BadHeader: ");
- np->s = s_nappend(s, start, end-start);
- np->next = nil;
-
- f = malloc(sizeof(Field));
- f->next = 0;
- f->node = np;
- f->source = 0;
- if(firstfield)
- lastfield->next = f;
- else
- firstfield = f;
- lastfield = f;
-}
-
-/*
- * create a new field
- */
-void
-newfield(Node *p, int source)
-{
- Field *f;
-
- missing(p);
-
- f = malloc(sizeof(Field));
- f->next = 0;
- f->node = p;
- f->source = source;
- if(firstfield)
- lastfield->next = f;
- else
- firstfield = f;
- lastfield = f;
- endfield = startfield;
- startfield = yylp;
-}
-
-/*
- * fee a list of fields
- */
-void
-freefield(Field *f)
-{
- Field *tf;
-
- while(f){
- tf = f->next;
- freenode(f->node);
- free(f);
- f = tf;
- }
-}
-
-/*
- * add some white space to a node
- */
-Node*
-whiten(Node *p)
-{
- Node *tp;
-
- for(tp = p; tp->next; tp = tp->next)
- ;
- if(tp->white == 0)
- tp->white = s_copy(" ");
- return p;
-}
-
-void
-yycleanup(void)
-{
- Field *f, *fnext;
- Node *np, *next;
-
- for(f = firstfield; f; f = fnext){
- for(np = f->node; np; np = next){
- if(np->s)
- s_free(np->s);
- if(np->white)
- s_free(np->white);
- next = np->next;
- free(np);
- }
- fnext = f->next;
- free(f);
- }
- firstfield = lastfield = 0;
-}
-static const short yyexca[] =
-{-1, 1,
- 1, -1,
- -2, 0,
--1, 47,
- 1, 4,
- -2, 0,
--1, 112,
- 29, 72,
- 31, 72,
- 32, 72,
- 35, 72,
- -2, 74
-};
-#define YYNPROD 122
-#define YYPRIVATE 57344
-#define YYLAST 608
-static const short yyact[] =
-{
- 112, 133, 136, 53, 121, 111, 134, 55, 109, 118,
- 119, 116, 162, 171, 35, 48, 166, 54, 5, 166,
- 179, 114, 115, 155, 49, 101, 100, 99, 95, 94,
- 93, 92, 98, 91, 132, 90, 123, 89, 122, 88,
- 87, 86, 85, 84, 83, 82, 97, 81, 80, 106,
- 47, 46, 110, 117, 153, 168, 108, 2, 56, 57,
- 58, 59, 60, 61, 62, 63, 64, 65, 73, 66,
- 67, 68, 69, 70, 71, 72, 74, 75, 76, 77,
- 78, 79, 124, 124, 49, 55, 177, 131, 110, 52,
- 110, 110, 138, 137, 140, 141, 124, 124, 51, 120,
- 124, 124, 124, 50, 102, 104, 135, 154, 31, 32,
- 107, 157, 105, 14, 55, 55, 156, 13, 161, 117,
- 117, 139, 158, 124, 142, 143, 144, 145, 146, 147,
- 163, 164, 160, 12, 148, 149, 11, 157, 150, 151,
- 152, 10, 156, 9, 8, 7, 3, 1, 0, 124,
- 124, 124, 124, 124, 0, 169, 0, 0, 110, 165,
- 0, 0, 170, 117, 0, 0, 0, 0, 173, 176,
- 178, 0, 0, 0, 172, 0, 0, 0, 180, 0,
- 0, 182, 183, 0, 0, 165, 165, 165, 165, 165,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 174, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 73, 66, 67, 68, 69, 70, 71,
- 72, 74, 75, 76, 77, 78, 79, 0, 0, 128,
- 130, 129, 125, 126, 127, 15, 0, 36, 16, 17,
- 19, 103, 20, 18, 23, 22, 21, 30, 24, 26,
- 28, 25, 27, 29, 0, 34, 37, 38, 39, 33,
- 40, 0, 4, 0, 45, 44, 41, 42, 43, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 73,
- 66, 67, 68, 69, 70, 71, 72, 74, 75, 76,
- 77, 78, 79, 0, 0, 96, 45, 44, 41, 42,
- 43, 15, 0, 36, 16, 17, 19, 6, 20, 18,
- 23, 22, 21, 30, 24, 26, 28, 25, 27, 29,
- 0, 34, 37, 38, 39, 33, 40, 0, 4, 0,
- 45, 44, 41, 42, 43, 15, 0, 36, 16, 17,
- 19, 103, 20, 18, 23, 22, 21, 30, 24, 26,
- 28, 25, 27, 29, 0, 34, 37, 38, 39, 33,
- 40, 0, 0, 0, 45, 44, 41, 42, 43, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 73,
- 66, 67, 68, 69, 70, 71, 72, 74, 75, 76,
- 77, 78, 79, 0, 0, 0, 0, 175, 113, 0,
- 52, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 73, 66, 67, 68, 69, 70, 71, 72, 74,
- 75, 76, 77, 78, 79, 0, 0, 0, 0, 0,
- 113, 0, 52, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 73, 66, 67, 68, 69, 70, 71,
- 72, 74, 75, 76, 77, 78, 79, 0, 0, 0,
- 0, 0, 0, 159, 52, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 73, 66, 67, 68, 69,
- 70, 71, 72, 74, 75, 76, 77, 78, 79, 0,
- 0, 0, 0, 0, 0, 0, 52, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 73, 66, 67,
- 68, 69, 70, 71, 72, 74, 75, 76, 77, 78,
- 79, 0, 0, 167, 0, 0, 113, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 73, 66, 67,
- 68, 69, 70, 71, 72, 74, 75, 76, 77, 78,
- 79, 0, 0, 0, 0, 0, 113, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 73, 66, 67,
- 68, 69, 70, 71, 72, 74, 75, 76, 77, 78,
- 79, 0, 0, 181, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 73, 66, 67, 68, 69, 70,
- 71, 72, 74, 75, 76, 77, 78, 79
-};
-static const short yypact[] =
-{
- 299,-1000,-1000, 22,-1000, 21, 54,-1000,-1000,-1000,
--1000,-1000,-1000,-1000,-1000, 19, 17, 15, 14, 13,
- 12, 11, 10, 9, 7, 5, 3, 1, 0, -1,
- -2, 265, -3, -4, -5,-1000,-1000,-1000,-1000,-1000,
--1000,-1000,-1000,-1000,-1000,-1000, 233, 233, 580, 397,
- -9,-1000, 580, -26, -25,-1000,-1000,-1000,-1000,-1000,
--1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
--1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
- 333, 199, 199, 397, 461, 397, 397, 397, 397, 397,
- 397, 397, 397, 397, 397, 199, 199,-1000,-1000, 199,
- 199, 199,-1000, -6,-1000, 33, 580, -8,-1000,-1000,
- 523,-1000,-1000, 429, 580, -23,-1000,-1000, 580, 580,
--1000,-1000, 199,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
--1000,-1000, -15,-1000,-1000,-1000, 493,-1000,-1000, -15,
--1000,-1000, -15, -15, -15, -15, -15, -15, 199, 199,
- 199, 199, 199, 47, 580, 397,-1000,-1000, -21,-1000,
- -25, -26, 580,-1000,-1000,-1000, 397, 365, 580, 580,
--1000,-1000,-1000,-1000, -12,-1000,-1000, 553,-1000,-1000,
- 580, 580,-1000,-1000
-};
-static const short yypgo[] =
-{
- 0, 147, 57, 146, 18, 145, 144, 143, 141, 136,
- 133, 117, 113, 8, 112, 0, 34, 110, 6, 4,
- 38, 109, 108, 1, 106, 2, 5, 103, 17, 98,
- 11, 3, 36, 86, 14
-};
-static const short yyr1[] =
-{
- 0, 1, 1, 2, 2, 2, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 3, 6, 6, 6, 6,
- 6, 6, 6, 5, 5, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 8, 8, 11,
- 11, 12, 12, 10, 10, 21, 21, 21, 21, 9,
- 9, 16, 16, 23, 23, 24, 24, 17, 17, 18,
- 18, 18, 26, 26, 13, 13, 27, 27, 29, 29,
- 28, 28, 31, 30, 25, 25, 20, 20, 32, 32,
- 32, 32, 32, 32, 32, 19, 14, 33, 33, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 22, 22, 22, 22, 34, 34, 34,
- 34, 34
-};
-static const short yyr2[] =
-{
- 0, 1, 3, 1, 2, 3, 1, 1, 1, 1,
- 1, 1, 1, 1, 3, 6, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 2, 3, 2, 3, 2,
- 3, 2, 3, 2, 3, 2, 3, 3, 2, 3,
- 2, 3, 2, 3, 2, 1, 1, 1, 1, 3,
- 2, 1, 3, 1, 1, 4, 3, 1, 3, 1,
- 2, 1, 3, 2, 3, 1, 2, 4, 1, 1,
- 3, 3, 1, 1, 1, 2, 1, 2, 1, 1,
- 1, 1, 1, 1, 1, 1, 6, 1, 3, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 2, 1, 1, 1,
- 1, 1
-};
-static const short yychk[] =
-{
--1000, -1, -2, -3, 29, -4, 8, -5, -6, -7,
- -8, -9, -10, -11, -12, 2, 5, 6, 10, 7,
- 9, 13, 12, 11, 15, 18, 16, 19, 17, 20,
- 14, -22, -21, 26, 22, -34, 4, 23, 24, 25,
- 27, 33, 34, 35, 32, 31, 29, 29, -13, 30,
- -27, -29, 35, -31, -28, -15, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 15, 16, 17, 18,
- 19, 20, 21, 14, 22, 23, 24, 25, 26, 27,
- 29, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, -34, -15, 30,
- 30, 30, -2, 8, -2, -14, -15, -17, -18, -13,
- -25, -26, -15, 33, 30, 31, -30, -15, 35, 35,
- -4, -19, -20, -32, -15, 33, 34, 35, 30, 32,
- 31, -19, -16, -23, -18, -24, -25, -13, -18, -16,
- -18, -18, -16, -16, -16, -16, -16, -16, -20, -20,
- -20, -20, -20, 21, -15, 31, -26, -15, -13, 34,
- -28, -31, 35, -30, -30, -32, 31, 30, 8, -15,
- -18, 34, -30, -23, -16, 32, -15, -33, -15, 32,
- -15, 30, -15, -15
-};
-static const short yydef[] =
-{
- 0, -2, 1, 0, 3, 0, 0, 6, 7, 8,
- 9, 10, 11, 12, 13, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 113, 114, 45, 46, 47,
- 48, 117, 118, 119, 120, 121, 0, -2, 0, 0,
- 0, 65, 0, 68, 69, 72, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 25,
- 27, 29, 31, 33, 35, 38, 50, 115, 116, 44,
- 40, 42, 2, 0, 5, 0, 0, 18, 57, 59,
- 0, 61, -2, 0, 0, 0, 66, 73, 0, 0,
- 14, 23, 85, 76, 78, 79, 80, 81, 82, 83,
- 84, 24, 16, 51, 53, 54, 0, 17, 19, 20,
- 21, 22, 26, 28, 30, 32, 34, 36, 37, 49,
- 43, 39, 41, 0, 0, 0, 60, 75, 0, 63,
- 64, 0, 0, 70, 71, 77, 0, 0, 0, 0,
- 58, 62, 67, 52, 0, 56, 15, 0, 87, 55,
- 0, 0, 86, 88
-};
-static const short yytok1[] =
-{
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 31, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 30, 32,
- 33, 0, 34, 0, 35
-};
-static const short yytok2[] =
-{
- 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28
-};
-static const long yytok3[] =
-{
- 0
-};
-#define YYFLAG -1000
-#define YYERROR goto yyerrlab
-#define YYACCEPT return(0)
-#define YYABORT return(1)
-#define yyclearin yychar = -1
-#define yyerrok yyerrflag = 0
-
-#ifdef yydebug
-#include "y.debug"
-#else
-#define yydebug 0
-static const char* yytoknames[1]; /* for debugging */
-static const char* yystates[1]; /* for debugging */
-#endif
-
-/* parser for yacc output */
-#ifdef YYARG
-#define yynerrs yyarg->yynerrs
-#define yyerrflag yyarg->yyerrflag
-#define yyval yyarg->yyval
-#define yylval yyarg->yylval
-#else
-int yynerrs = 0; /* number of errors */
-int yyerrflag = 0; /* error recovery flag */
-#endif
-
-extern int fprint(int, char*, ...);
-extern int sprint(char*, char*, ...);
-
-static const char*
-yytokname(int yyc)
-{
- static char x[10];
-
- if(yyc > 0 && yyc <= sizeof(yytoknames)/sizeof(yytoknames[0]))
- if(yytoknames[yyc-1])
- return yytoknames[yyc-1];
- sprint(x, "<%d>", yyc);
- return x;
-}
-
-static const char*
-yystatname(int yys)
-{
- static char x[10];
-
- if(yys >= 0 && yys < sizeof(yystates)/sizeof(yystates[0]))
- if(yystates[yys])
- return yystates[yys];
- sprint(x, "<%d>\n", yys);
- return x;
-}
-
-static long
-#ifdef YYARG
-yylex1(struct Yyarg *yyarg)
-#else
-yylex1(void)
-#endif
-{
- long yychar;
- const long *t3p;
- int c;
-
-#ifdef YYARG
- yychar = yylex(yyarg);
-#else
- yychar = yylex();
-#endif
- if(yychar <= 0) {
- c = yytok1[0];
- goto out;
- }
- if(yychar < sizeof(yytok1)/sizeof(yytok1[0])) {
- c = yytok1[yychar];
- goto out;
- }
- if(yychar >= YYPRIVATE)
- if(yychar < YYPRIVATE+sizeof(yytok2)/sizeof(yytok2[0])) {
- c = yytok2[yychar-YYPRIVATE];
- goto out;
- }
- for(t3p=yytok3;; t3p+=2) {
- c = t3p[0];
- if(c == yychar) {
- c = t3p[1];
- goto out;
- }
- if(c == 0)
- break;
- }
- c = 0;
-
-out:
- if(c == 0)
- c = yytok2[1]; /* unknown char */
- if(yydebug >= 3)
- fprint(2, "lex %.4lux %s\n", yychar, yytokname(c));
- return c;
-}
-
-int
-#ifdef YYARG
-yyparse(struct Yyarg *yyarg)
-#else
-yyparse(void)
-#endif
-{
- struct
- {
- YYSTYPE yyv;
- int yys;
- } yys[YYMAXDEPTH], *yyp, *yypt;
- const short *yyxi;
- int yyj, yym, yystate, yyn, yyg;
- long yychar;
-#ifndef YYARG
- YYSTYPE save1, save2;
- int save3, save4;
-
- save1 = yylval;
- save2 = yyval;
- save3 = yynerrs;
- save4 = yyerrflag;
-#endif
-
- yystate = 0;
- yychar = -1;
- yynerrs = 0;
- yyerrflag = 0;
- yyp = &yys[-1];
- goto yystack;
-
-ret0:
- yyn = 0;
- goto ret;
-
-ret1:
- yyn = 1;
- goto ret;
-
-ret:
-#ifndef YYARG
- yylval = save1;
- yyval = save2;
- yynerrs = save3;
- yyerrflag = save4;
-#endif
- return yyn;
-
-yystack:
- /* put a state and value onto the stack */
- if(yydebug >= 4)
- fprint(2, "char %s in %s", yytokname(yychar), yystatname(yystate));
-
- yyp++;
- if(yyp >= &yys[YYMAXDEPTH]) {
- yyerror("yacc stack overflow");
- goto ret1;
- }
- yyp->yys = yystate;
- yyp->yyv = yyval;
-
-yynewstate:
- yyn = yypact[yystate];
- if(yyn <= YYFLAG)
- goto yydefault; /* simple state */
- if(yychar < 0)
-#ifdef YYARG
- yychar = yylex1(yyarg);
-#else
- yychar = yylex1();
-#endif
- yyn += yychar;
- if(yyn < 0 || yyn >= YYLAST)
- goto yydefault;
- yyn = yyact[yyn];
- if(yychk[yyn] == yychar) { /* valid shift */
- yychar = -1;
- yyval = yylval;
- yystate = yyn;
- if(yyerrflag > 0)
- yyerrflag--;
- goto yystack;
- }
-
-yydefault:
- /* default state action */
- yyn = yydef[yystate];
- if(yyn == -2) {
- if(yychar < 0)
-#ifdef YYARG
- yychar = yylex1(yyarg);
-#else
- yychar = yylex1();
-#endif
-
- /* look through exception table */
- for(yyxi=yyexca;; yyxi+=2)
- if(yyxi[0] == -1 && yyxi[1] == yystate)
- break;
- for(yyxi += 2;; yyxi += 2) {
- yyn = yyxi[0];
- if(yyn < 0 || yyn == yychar)
- break;
- }
- yyn = yyxi[1];
- if(yyn < 0)
- goto ret0;
- }
- if(yyn == 0) {
- /* error ... attempt to resume parsing */
- switch(yyerrflag) {
- case 0: /* brand new error */
- yyerror("syntax error");
- if(yydebug >= 1) {
- fprint(2, "%s", yystatname(yystate));
- fprint(2, "saw %s\n", yytokname(yychar));
- }
- goto yyerrlab;
- yyerrlab:
- yynerrs++;
-
- case 1:
- case 2: /* incompletely recovered error ... try again */
- yyerrflag = 3;
-
- /* find a state where "error" is a legal shift action */
- while(yyp >= yys) {
- yyn = yypact[yyp->yys] + YYERRCODE;
- if(yyn >= 0 && yyn < YYLAST) {
- yystate = yyact[yyn]; /* simulate a shift of "error" */
- if(yychk[yystate] == YYERRCODE)
- goto yystack;
- }
-
- /* the current yyp has no shift onn "error", pop stack */
- if(yydebug >= 2)
- fprint(2, "error recovery pops state %d, uncovers %d\n",
- yyp->yys, (yyp-1)->yys );
- yyp--;
- }
- /* there is no state on the stack with an error shift ... abort */
- goto ret1;
-
- case 3: /* no shift yet; clobber input char */
- if(yydebug >= 2)
- fprint(2, "error recovery discards %s\n", yytokname(yychar));
- if(yychar == YYEOFCODE)
- goto ret1;
- yychar = -1;
- goto yynewstate; /* try again in the same state */
- }
- }
-
- /* reduction by production yyn */
- if(yydebug >= 2)
- fprint(2, "reduce %d in:\n\t%s", yyn, yystatname(yystate));
-
- yypt = yyp;
- yyp -= yyr2[yyn];
- yyval = (yyp+1)->yyv;
- yym = yyn;
-
- /* consult goto table to find next state */
- yyn = yyr1[yyn];
- yyg = yypgo[yyn];
- yyj = yyg + yyp->yys + 1;
-
- if(yyj >= YYLAST || yychk[yystate=yyact[yyj]] != -yyn)
- yystate = yyact[yyg];
- switch(yym) {
-
-case 3:
-#line 56 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yydone = 1; } break;
-case 6:
-#line 61 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ date = 1; } break;
-case 7:
-#line 63 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ originator = 1; } break;
-case 8:
-#line 65 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ destination = 1; } break;
-case 15:
-#line 74 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ freenode(yypt[-5].yyv); freenode(yypt[-2].yyv); freenode(yypt[-1].yyv);
- usender = yypt[-4].yyv; udate = yypt[-3].yyv; usys = yypt[-0].yyv;
- } break;
-case 16:
-#line 79 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
-case 17:
-#line 81 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
-case 18:
-#line 83 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
-case 19:
-#line 85 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
-case 20:
-#line 87 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
-case 21:
-#line 89 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
-case 22:
-#line 91 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 1); } break;
-case 23:
-#line 94 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 24:
-#line 96 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 25:
-#line 99 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 26:
-#line 101 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 27:
-#line 103 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 28:
-#line 105 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 29:
-#line 107 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 30:
-#line 109 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 31:
-#line 111 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 32:
-#line 113 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 33:
-#line 115 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 34:
-#line 117 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 35:
-#line 119 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 36:
-#line 121 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 37:
-#line 124 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 38:
-#line 126 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 39:
-#line 129 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); received++; } break;
-case 40:
-#line 131 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); received++; } break;
-case 41:
-#line 134 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 42:
-#line 136 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 43:
-#line 139 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 44:
-#line 141 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0); } break;
-case 47:
-#line 143 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ messageid = 1; } break;
-case 49:
-#line 146 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ /* hack to allow same lex for field names and the rest */
- if(badfieldname(yypt[-2].yyv)){
- freenode(yypt[-2].yyv);
- freenode(yypt[-1].yyv);
- freenode(yypt[-0].yyv);
- return 1;
- }
- newfield(link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv), 0);
- } break;
-case 50:
-#line 156 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ /* hack to allow same lex for field names and the rest */
- if(badfieldname(yypt[-1].yyv)){
- freenode(yypt[-1].yyv);
- freenode(yypt[-0].yyv);
- return 1;
- }
- newfield(link2(yypt[-1].yyv, yypt[-0].yyv), 0);
- } break;
-case 52:
-#line 167 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
-case 55:
-#line 173 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link2(yypt[-3].yyv, link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv)); } break;
-case 56:
-#line 175 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
-case 58:
-#line 179 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
-case 60:
-#line 183 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link2(yypt[-1].yyv, yypt[-0].yyv); } break;
-case 62:
-#line 187 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
-case 63:
-#line 189 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = nobody(yypt[-0].yyv); freenode(yypt[-1].yyv); } break;
-case 64:
-#line 192 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = address(concat(yypt[-2].yyv, concat(yypt[-1].yyv, yypt[-0].yyv))); } break;
-case 66:
-#line 196 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = concat(yypt[-1].yyv, yypt[-0].yyv); } break;
-case 67:
-#line 198 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = concat(yypt[-3].yyv, concat(yypt[-2].yyv, concat(yypt[-1].yyv, yypt[-0].yyv))); } break;
-case 68:
-#line 201 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = address(yypt[-0].yyv); } break;
-case 70:
-#line 205 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = address(concat(yypt[-2].yyv, concat(yypt[-1].yyv, yypt[-0].yyv)));} break;
-case 71:
-#line 207 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = address(concat(yypt[-2].yyv, concat(yypt[-1].yyv, yypt[-0].yyv)));} break;
-case 75:
-#line 215 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link2(yypt[-1].yyv, yypt[-0].yyv); } break;
-case 77:
-#line 219 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link2(yypt[-1].yyv, yypt[-0].yyv); } break;
-case 86:
-#line 226 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link3(yypt[-5].yyv, yypt[-3].yyv, link3(yypt[-4].yyv, yypt[-0].yyv, link2(yypt[-2].yyv, yypt[-1].yyv))); } break;
-case 88:
-#line 230 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link3(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;
-case 115:
-#line 240 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link2(yypt[-1].yyv, yypt[-0].yyv); } break;
-case 116:
-#line 242 "/usr/local/plan9/src/cmd/upas/smtp/rfc822.y"
-{ yyval = link2(yypt[-1].yyv, yypt[-0].yyv); } break;
- }
- goto yystack; /* stack new state and value */
-}
diff --git a/src/cmd/upas/smtp/y.tab.h b/src/cmd/upas/smtp/y.tab.h
deleted file mode 100644
index a31a0e67..00000000
--- a/src/cmd/upas/smtp/y.tab.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#define WORD 57346
-#define DATE 57347
-#define RESENT_DATE 57348
-#define RETURN_PATH 57349
-#define FROM 57350
-#define SENDER 57351
-#define REPLY_TO 57352
-#define RESENT_FROM 57353
-#define RESENT_SENDER 57354
-#define RESENT_REPLY_TO 57355
-#define SUBJECT 57356
-#define TO 57357
-#define CC 57358
-#define BCC 57359
-#define RESENT_TO 57360
-#define RESENT_CC 57361
-#define RESENT_BCC 57362
-#define REMOTE 57363
-#define PRECEDENCE 57364
-#define MIMEVERSION 57365
-#define CONTENTTYPE 57366
-#define MESSAGEID 57367
-#define RECEIVED 57368
-#define MAILER 57369
-#define BADTOKEN 57370