xref: /plan9/sys/src/cmd/upas/common/mail.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include "common.h"
23e12c5d1SDavid du Colombier 
33e12c5d1SDavid du Colombier /* format of REMOTE FROM lines */
43e12c5d1SDavid du Colombier char *REMFROMRE =
5*7dd7cddfSDavid du Colombier 	"^>?From[ \t]+((\".*\")?[^\" \t]+?(\".*\")?[^\" \t]+?)[ \t]+(.+)[ \t]+remote[ \t]+from[ \t]+(.*)\n$";
63e12c5d1SDavid du Colombier int REMSENDERMATCH = 1;
7*7dd7cddfSDavid du Colombier int REMDATEMATCH = 4;
8*7dd7cddfSDavid du Colombier int REMSYSMATCH = 5;
93e12c5d1SDavid du Colombier 
103e12c5d1SDavid du Colombier /* format of LOCAL FROM lines */
113e12c5d1SDavid du Colombier char *FROMRE =
12*7dd7cddfSDavid du Colombier 	"^>?From[ \t]+((\".*\")?[^\" \t]+?(\".*\")?[^\" \t]+?)[ \t]+(.+)\n$";
133e12c5d1SDavid du Colombier int SENDERMATCH = 1;
14*7dd7cddfSDavid du Colombier int DATEMATCH = 4;
153e12c5d1SDavid du Colombier 
163e12c5d1SDavid du Colombier /* output a unix style local header */
173e12c5d1SDavid du Colombier int
print_header(Biobuf * fp,char * sender,char * date)183e12c5d1SDavid du Colombier print_header(Biobuf *fp, char *sender, char *date)
193e12c5d1SDavid du Colombier {
203e12c5d1SDavid du Colombier 	return Bprint(fp, "From %s %s\n", sender, date);
213e12c5d1SDavid du Colombier }
223e12c5d1SDavid du Colombier 
233e12c5d1SDavid du Colombier /* output a unix style remote header */
243e12c5d1SDavid du Colombier int
print_remote_header(Biobuf * fp,char * sender,char * date,char * system)253e12c5d1SDavid du Colombier print_remote_header(Biobuf *fp, char *sender, char *date, char *system)
263e12c5d1SDavid du Colombier {
273e12c5d1SDavid du Colombier 	return Bprint(fp, "From %s %s remote from %s\n", sender, date, system);
283e12c5d1SDavid du Colombier }
293e12c5d1SDavid du Colombier 
303e12c5d1SDavid du Colombier /* parse a mailbox style header */
313e12c5d1SDavid du Colombier int
parse_header(char * line,String * sender,String * date)323e12c5d1SDavid du Colombier parse_header(char *line, String *sender, String *date)
333e12c5d1SDavid du Colombier {
343e12c5d1SDavid du Colombier 	if (!IS_HEADER(line))
353e12c5d1SDavid du Colombier 		return -1;
363e12c5d1SDavid du Colombier 	line += sizeof("From ") - 1;
373e12c5d1SDavid du Colombier 	s_restart(sender);
383e12c5d1SDavid du Colombier 	while(*line==' '||*line=='\t')
393e12c5d1SDavid du Colombier 		line++;
403e12c5d1SDavid du Colombier 	if(*line == '"'){
413e12c5d1SDavid du Colombier 		s_putc(sender, *line++);
423e12c5d1SDavid du Colombier 		while(*line && *line != '"')
433e12c5d1SDavid du Colombier 			s_putc(sender, *line++);
443e12c5d1SDavid du Colombier 		s_putc(sender, *line++);
453e12c5d1SDavid du Colombier 	} else {
463e12c5d1SDavid du Colombier 		while(*line && *line != ' ' && *line != '\t')
473e12c5d1SDavid du Colombier 			s_putc(sender, *line++);
483e12c5d1SDavid du Colombier 	}
493e12c5d1SDavid du Colombier 	s_terminate(sender);
503e12c5d1SDavid du Colombier 	s_restart(date);
513e12c5d1SDavid du Colombier 	while(*line==' '||*line=='\t')
523e12c5d1SDavid du Colombier 		line++;
533e12c5d1SDavid du Colombier 	while(*line)
543e12c5d1SDavid du Colombier 		s_putc(date, *line++);
553e12c5d1SDavid du Colombier 	s_terminate(date);
563e12c5d1SDavid du Colombier 	return 0;
573e12c5d1SDavid du Colombier }
58