diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib-src/b2m.c	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,138 @@
+/*
+ * b2m - a filter for Babyl -> Unix mail files
+ *
+ * usage:	b2m < babyl > mailbox
+ *
+ * I find this useful whenever I have to use a
+ * system which - shock horror! - doesn't run
+ * Gnu emacs. At least now I can read all my
+ * Gnumacs Babyl format mail files!
+ *
+ * it's not much but it's free!
+ *
+ *   Ed Wilkinson
+ *   E.Wilkinson@massey.ac.nz
+ *   Mon Nov 7 15:54:06 PDT 1988
+ *
+ */
+
+/* Synched up with: FSF 19.28. */
+
+/* Serious bug: This program uses `gets', which is intrinsically
+   unreliable--long lines will cause crashes.
+   Someone should fix this program not to use `gets'.  */
+#include <stdio.h>
+#include <time.h>
+#include <sys/types.h>
+#ifdef MSDOS
+#include <fcntl.h>
+#endif
+
+#include <../src/config.h>
+
+#if __STDC__ || defined(STDC_HEADERS)
+# include <stdlib.h>
+# include <string.h>
+#else /* ! (__STDC__ || defined(STDC_HEADERS)) */
+# ifdef USG
+#  include <string.h>
+# else
+#  include <strings.h>
+#  endif
+
+/* BSD's strings.h does not declare the type of strtok.  */
+extern char *strtok ();
+#endif /* ! (__STDC__ || defined(STDC_HEADERS)) */
+
+
+#ifndef TRUE
+#define TRUE  (1)
+#endif
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+int header = FALSE, printing;
+time_t ltoday;
+char from[256], labels[256], data[256], *p, *today;
+
+void
+main (int argc, char **argv)
+{
+#ifdef MSDOS
+  _fmode = O_BINARY;		/* all of files are treated as binary files */
+  (stdout)->_flag &= ~_IOTEXT;
+  (stdin)->_flag &= ~_IOTEXT;
+#endif
+  if ((argc >= 2) && strcmp (argv[1], "--help") == 0)
+    {
+      fprintf (stderr, "%s - a filter for Babyl -> Unix mail files\n", argv[0]);
+      fprintf (stderr, "Usage: %s < babylmailbox > unixmailbox\n", argv[0]);
+      exit (0);
+    }
+
+  ltoday = time (0);
+  today = ctime (&ltoday);
+
+  /* BUG!  Must not use gets in a reliable program!  */
+  if (gets (data))
+    {
+      if (strncmp (data, "BABYL OPTIONS:", 14))
+	{
+	  fprintf (stderr, "%s: not a Babyl mailfile!\n", argv[0]);
+	  exit (-1);
+	}
+      else
+	printing = FALSE;
+    }
+  else
+    exit (-1);
+  if (printing)
+    puts (data);
+
+  while (gets (data))
+    {
+
+#if 0
+      /* What was this for?  Does somebody have something against blank
+	 lines?  */
+      if (!strcmp (data, ""))
+	exit (0);
+#endif
+
+      if (!strcmp (data, "*** EOOH ***") && !printing)
+	{
+	  printing = header = TRUE;
+	  printf ("From %s %s", argv[0], today);
+	  continue;
+	}
+
+      if (!strcmp (data, "\037\f"))
+	{
+	  /* save labels */
+	  gets (data);
+	  p = strtok (data, " ,\r\n\t");
+	  strcpy (labels, "X-Babyl-Labels: ");
+
+	  while ((p = strtok (NULL, " ,\r\n\t")))
+	    {
+	      strcat (labels, p);
+	      strcat (labels, ", ");
+	    }
+
+	  labels[strlen (labels) - 2] = '\0';
+	  printing = header = FALSE;
+	  continue;
+	}
+
+      if (!strlen (data) && header)
+	{
+	  header = FALSE;
+	  if (strcmp (labels, "X-Babyl-Labels"))
+	    puts (labels);
+	}
+    
+      if (printing)
+	puts (data);
+    }
+}