Blob


1 #include "common.h"
3 /* format of REMOTE FROM lines */
4 char *REMFROMRE =
5 "^>?From[ \t]+((\".*\")?[^\" \t]+?(\".*\")?[^\" \t]+?)[ \t]+(.+)[ \t]+remote[ \t]+from[ \t]+(.*)\n$";
6 int REMSENDERMATCH = 1;
7 int REMDATEMATCH = 4;
8 int REMSYSMATCH = 5;
10 /* format of LOCAL FROM lines */
11 char *FROMRE =
12 "^>?From[ \t]+((\".*\")?[^\" \t]+?(\".*\")?[^\" \t]+?)[ \t]+(.+)\n$";
13 int SENDERMATCH = 1;
14 int DATEMATCH = 4;
16 /* output a unix style local header */
17 int
18 print_header(Biobuf *fp, char *sender, char *date)
19 {
20 return Bprint(fp, "From %s %s\n", sender, date);
21 }
23 /* output a unix style remote header */
24 int
25 print_remote_header(Biobuf *fp, char *sender, char *date, char *system)
26 {
27 return Bprint(fp, "From %s %s remote from %s\n", sender, date, system);
28 }
30 /* parse a mailbox style header */
31 int
32 parse_header(char *line, String *sender, String *date)
33 {
34 if (!IS_HEADER(line))
35 return -1;
36 line += sizeof("From ") - 1;
37 s_restart(sender);
38 while(*line==' '||*line=='\t')
39 line++;
40 if(*line == '"'){
41 s_putc(sender, *line++);
42 while(*line && *line != '"')
43 s_putc(sender, *line++);
44 s_putc(sender, *line++);
45 } else {
46 while(*line && *line != ' ' && *line != '\t')
47 s_putc(sender, *line++);
48 }
49 s_terminate(sender);
50 s_restart(date);
51 while(*line==' '||*line=='\t')
52 line++;
53 while(*line)
54 s_putc(date, *line++);
55 s_terminate(date);
56 return 0;
57 }