comparison lib-src/b2m.c @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children 2af401a6ecca
comparison
equal deleted inserted replaced
-1:000000000000 0:376386a54a3c
1 /*
2 * b2m - a filter for Babyl -> Unix mail files
3 *
4 * usage: b2m < babyl > mailbox
5 *
6 * I find this useful whenever I have to use a
7 * system which - shock horror! - doesn't run
8 * Gnu emacs. At least now I can read all my
9 * Gnumacs Babyl format mail files!
10 *
11 * it's not much but it's free!
12 *
13 * Ed Wilkinson
14 * E.Wilkinson@massey.ac.nz
15 * Mon Nov 7 15:54:06 PDT 1988
16 *
17 */
18
19 /* Synched up with: FSF 19.28. */
20
21 /* Serious bug: This program uses `gets', which is intrinsically
22 unreliable--long lines will cause crashes.
23 Someone should fix this program not to use `gets'. */
24 #include <stdio.h>
25 #include <time.h>
26 #include <sys/types.h>
27 #ifdef MSDOS
28 #include <fcntl.h>
29 #endif
30
31 #include <../src/config.h>
32
33 #if __STDC__ || defined(STDC_HEADERS)
34 # include <stdlib.h>
35 # include <string.h>
36 #else /* ! (__STDC__ || defined(STDC_HEADERS)) */
37 # ifdef USG
38 # include <string.h>
39 # else
40 # include <strings.h>
41 # endif
42
43 /* BSD's strings.h does not declare the type of strtok. */
44 extern char *strtok ();
45 #endif /* ! (__STDC__ || defined(STDC_HEADERS)) */
46
47
48 #ifndef TRUE
49 #define TRUE (1)
50 #endif
51 #ifndef FALSE
52 #define FALSE (0)
53 #endif
54
55 int header = FALSE, printing;
56 time_t ltoday;
57 char from[256], labels[256], data[256], *p, *today;
58
59 void
60 main (int argc, char **argv)
61 {
62 #ifdef MSDOS
63 _fmode = O_BINARY; /* all of files are treated as binary files */
64 (stdout)->_flag &= ~_IOTEXT;
65 (stdin)->_flag &= ~_IOTEXT;
66 #endif
67 if ((argc >= 2) && strcmp (argv[1], "--help") == 0)
68 {
69 fprintf (stderr, "%s - a filter for Babyl -> Unix mail files\n", argv[0]);
70 fprintf (stderr, "Usage: %s < babylmailbox > unixmailbox\n", argv[0]);
71 exit (0);
72 }
73
74 ltoday = time (0);
75 today = ctime (&ltoday);
76
77 /* BUG! Must not use gets in a reliable program! */
78 if (gets (data))
79 {
80 if (strncmp (data, "BABYL OPTIONS:", 14))
81 {
82 fprintf (stderr, "%s: not a Babyl mailfile!\n", argv[0]);
83 exit (-1);
84 }
85 else
86 printing = FALSE;
87 }
88 else
89 exit (-1);
90 if (printing)
91 puts (data);
92
93 while (gets (data))
94 {
95
96 #if 0
97 /* What was this for? Does somebody have something against blank
98 lines? */
99 if (!strcmp (data, ""))
100 exit (0);
101 #endif
102
103 if (!strcmp (data, "*** EOOH ***") && !printing)
104 {
105 printing = header = TRUE;
106 printf ("From %s %s", argv[0], today);
107 continue;
108 }
109
110 if (!strcmp (data, "\037\f"))
111 {
112 /* save labels */
113 gets (data);
114 p = strtok (data, " ,\r\n\t");
115 strcpy (labels, "X-Babyl-Labels: ");
116
117 while ((p = strtok (NULL, " ,\r\n\t")))
118 {
119 strcat (labels, p);
120 strcat (labels, ", ");
121 }
122
123 labels[strlen (labels) - 2] = '\0';
124 printing = header = FALSE;
125 continue;
126 }
127
128 if (!strlen (data) && header)
129 {
130 header = FALSE;
131 if (strcmp (labels, "X-Babyl-Labels"))
132 puts (labels);
133 }
134
135 if (printing)
136 puts (data);
137 }
138 }