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); | ||
|  | } |