Commit Diff


commit - 3f4e0dc707b92e7c5bce9555253852d4070c0b02
commit + e0e75ef7f4bafe7d02576973c912eac99874e141
blob - cacf86729622ee4c4a171cfb6f4ddd7a12ad6012 (mode 644)
blob + /dev/null
--- 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 */
-}
blob - a31a0e67b20868f78bf3afa07852d35e9a22ae77 (mode 644)
blob + /dev/null
--- 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