87 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
** Copyright 1998 - 2000 Double Precision, Inc.
 | 
						|
** See COPYING for distribution information.
 | 
						|
*/
 | 
						|
 | 
						|
#include	"rfc822.h"
 | 
						|
#include	<stdio.h>
 | 
						|
#include	<stdlib.h>
 | 
						|
 | 
						|
static const char rcsid[]="$Id$";
 | 
						|
 | 
						|
static void print_func(char c, void *p)
 | 
						|
{
 | 
						|
	p=p;
 | 
						|
	putchar(c);
 | 
						|
}
 | 
						|
 | 
						|
static void print_separator(const char *s, void *p)
 | 
						|
{
 | 
						|
	p=p;
 | 
						|
	printf("%s", s);
 | 
						|
}
 | 
						|
 | 
						|
static struct rfc822t *tokenize(const char *p)
 | 
						|
{
 | 
						|
struct	rfc822t	*tp;
 | 
						|
int	i;
 | 
						|
char	buf[2];
 | 
						|
 | 
						|
	printf("Tokenize: %s\n", p);
 | 
						|
	tp=rfc822t_alloc(p, NULL);
 | 
						|
	if (!tp)	exit(0);
 | 
						|
	buf[1]=0;
 | 
						|
	for (i=0; i<tp->ntokens; i++)
 | 
						|
	{
 | 
						|
		buf[0]=tp->tokens[i].token;
 | 
						|
		if (buf[0] == '\0' || buf[0] == '"' || buf[0] == '(')
 | 
						|
		{
 | 
						|
			printf("%s: ", buf[0] == '"' ? "Quote":
 | 
						|
				buf[0] == '(' ? "Comment":"Atom");
 | 
						|
			fwrite(tp->tokens[i].ptr, tp->tokens[i].len, 1, stdout);
 | 
						|
			printf("\n");
 | 
						|
		}
 | 
						|
		else	printf("Token: %s\n", buf[0] ? buf:"atom");
 | 
						|
	}
 | 
						|
	return (tp);
 | 
						|
}
 | 
						|
 | 
						|
static struct rfc822a *doaddr(struct rfc822t *t)
 | 
						|
{
 | 
						|
struct rfc822a *a=rfc822a_alloc(t);
 | 
						|
 | 
						|
	if (!a)	exit(0);
 | 
						|
	printf("----\n");
 | 
						|
	rfc822_print(a, print_func, print_separator, NULL);
 | 
						|
	printf("\n");
 | 
						|
	rfc822_addrlist(a, print_func, NULL);
 | 
						|
	rfc822_namelist(a, print_func, NULL);
 | 
						|
	return (a);
 | 
						|
}
 | 
						|
 | 
						|
int main()
 | 
						|
{
 | 
						|
struct	rfc822t *t1, *t2, *t3, *t4;
 | 
						|
struct	rfc822a *a1, *a2, *a3, *a4;
 | 
						|
 | 
						|
	t1=tokenize("nobody@example.com (Nobody (is) here\\) right)");
 | 
						|
	t2=tokenize("Distribution  list: nobody@example.com daemon@example.com");
 | 
						|
	t3=tokenize("Mr Nobody <nobody@example.com>, Mr. Nobody <nobody@example.com>");
 | 
						|
	t4=tokenize("nobody@example.com, <nobody@example.com>, Mr. Nobody <nobody@example.com>");
 | 
						|
 | 
						|
	a1=doaddr(t1);
 | 
						|
	a2=doaddr(t2);
 | 
						|
	a3=doaddr(t3);
 | 
						|
	a4=doaddr(t4);
 | 
						|
 | 
						|
	rfc822a_free(a4);
 | 
						|
	rfc822a_free(a3);
 | 
						|
	rfc822a_free(a2);
 | 
						|
	rfc822a_free(a1);
 | 
						|
	rfc822t_free(t4);
 | 
						|
	rfc822t_free(t3);
 | 
						|
	rfc822t_free(t2);
 | 
						|
	rfc822t_free(t1);
 | 
						|
	return (0);
 | 
						|
}
 |