diff lib-src/cvtmail.c @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children 972bbb6d6ca2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib-src/cvtmail.c	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,165 @@
+/* Copyright (C) 1985, 1993, 1994 Free Software Foundation
+This file is part of GNU Emacs.
+
+GNU Emacs is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs; see the file COPYING.  If not, write to
+the Free the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* Synched up with: FSF 19.28. */
+
+/* cvtmail:
+ * Program to convert oldstyle goslings emacs mail directories into
+ * gnu-rmail format.  Program expects a directory called Messages to
+ * exist in your home directory, containing individual mail messages in
+ * separate files in the standard gosling emacs mail reader format.
+ *
+ * Program takes one argument: an output file.  THis file will contain
+ * all the messages in Messages directory, in berkeley mail format.
+ * If no output file is mentioned, messages are put in ~/OMAIL.
+ *
+ * In order to get rmail to read the messages, the resulting file must
+ * be mv'ed to ~/mbox, and then have rmail invoked on them.
+ * 
+ * Author: Larry Kolodney, 1985
+ */
+
+
+#include <../src/config.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#if __STDC__ || defined(STDC_HEADERS)
+# include <stdlib.h>
+#else
+char *malloc ();
+char *getenv ();
+#endif
+static void *xmalloc (unsigned int);
+static void *xrealloc (char *ptr, unsigned int);
+static void skip_to_lf (FILE *stream);
+static void fatal (CONST char *s1, CONST char *s2);
+static void error (CONST char *s1, CONST char *s2);
+
+int
+main (argc, argv)
+     int argc;
+     char *argv[];
+{
+  char *hd;
+  char *md;
+  char *mdd;
+  char *mfile;
+  char *cf;
+  int cflen;
+  FILE *mddf;
+  FILE *mfilef;
+  FILE *cff;
+  char pre[10];
+  char name[14];
+  int c;
+
+  hd = (char *) getenv ("HOME");
+
+  md = (char *) xmalloc (strlen (hd) + 10);
+  strcpy (md, hd);
+  strcat (md, "/Messages");
+
+  mdd = (char *) xmalloc (strlen (md) + 11);
+  strcpy (mdd, md);
+  strcat (mdd, "/Directory");
+
+  cflen = 100;
+  cf = (char *) xmalloc (cflen);
+
+  mddf = fopen (mdd, "r");
+  if (argc > 1)
+    mfilef = fopen (argv[1], "w");
+  else
+    {
+      mfile = (char *) xmalloc (strlen (hd) + 7);
+      strcpy (mfile, hd);
+      strcat (mfile, "/OMAIL");
+      mfilef = fopen (mfile, "w");
+    }
+  skip_to_lf (mddf);
+  while (fscanf (mddf, "%4c%14[0123456789]", pre, name) != EOF)
+    {
+      int comp_len = strlen (md) + strlen (name) + 2;
+      if (cflen < comp_len)
+	{
+	  cflen = strlen (md) + strlen (name) + 2;
+	  cf = (char *) xrealloc (cf, cflen);
+	}
+      strcpy (cf, md);
+      strcat (cf,"/");
+      strcat (cf, name);
+      cff = fopen (cf, "r");
+      while ((c = getc(cff)) != EOF)
+	putc (c, mfilef);
+      putc ('\n', mfilef);
+      skip_to_lf (mddf);
+     fclose (cff);
+    }
+  fclose (mddf);
+  fclose (mfilef);    
+  return 0;
+}
+
+static void
+skip_to_lf (stream)
+     FILE *stream;
+{
+  register int c;
+  while ((c = getc(stream)) != '\n')
+    ;
+}
+
+static void *
+xmalloc (size)
+     unsigned size;
+{
+  char *result = (char *) malloc (size);
+  if (!result)
+    fatal ("virtual memory exhausted", 0);
+  return result;
+}
+
+static void *
+xrealloc (ptr, size)
+     char *ptr;
+     unsigned size;
+{
+  char *result = (char *) realloc (ptr, size);
+  if (!result)
+    fatal ("virtual memory exhausted", 0);
+  return result;
+}
+
+/* Print error message and exit.  */
+
+static void
+fatal (CONST char *s1, CONST char *s2)
+{
+  error (s1, s2);
+  exit (1);
+}
+
+static void
+error (CONST char *s1, CONST char *s2)
+{
+  fprintf (stderr, "cvtmail: ");
+  fprintf (stderr, s1, s2);
+  fprintf (stderr, "\n");
+}