1/* Copyright (C) 1985, 1994, 2001, 2002, 2003, 2004, 2 2005, 2006, 2007 Free Software Foundation, Inc. 3 4This file is part of GNU Emacs. 5 6GNU Emacs is free software; you can redistribute it and/or modify 7it under the terms of the GNU General Public License as published by 8the Free Software Foundation; either version 2, or (at your option) 9any later version. 10 11GNU Emacs is distributed in the hope that it will be useful, 12but WITHOUT ANY WARRANTY; without even the implied warranty of 13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14GNU General Public License for more details. 15 16You should have received a copy of the GNU General Public License 17along with GNU Emacs; see the file COPYING. If not, write to 18the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19Boston, MA 02110-1301, USA. */ 20 21/* cvtmail: 22 * Program to convert oldstyle goslings emacs mail directories into 23 * gnu-rmail format. Program expects a directory called Messages to 24 * exist in your home directory, containing individual mail messages in 25 * separate files in the standard gosling emacs mail reader format. 26 * 27 * Program takes one argument: an output file. This file will contain 28 * all the messages in Messages directory, in berkeley mail format. 29 * If no output file is mentioned, messages are put in ~/OMAIL. 30 * 31 * In order to get rmail to read the messages, the resulting file must 32 * be mv'ed to ~/mbox, and then have rmail invoked on them. 33 * 34 * Author: Larry Kolodney, 1985 35 */ 36 37#ifdef HAVE_CONFIG_H 38#include <config.h> 39#endif 40 41#include <stdio.h> 42 43#ifndef HAVE_STDLIB_H 44char *getenv (); 45#endif 46 47char *xmalloc __P ((unsigned)); 48char *xrealloc __P ((char *, unsigned)); 49void skip_to_lf __P ((FILE *)); 50void sysfail __P ((char *)); 51 52int 53main (argc, argv) 54 int argc; 55 char *argv[]; 56{ 57 char *hd; 58 char *md; 59 char *mdd; 60 char *mfile; 61 char *cf; 62 int cflen; 63 FILE *mddf; 64 FILE *mfilef; 65 FILE *cff; 66 char pre[10]; 67 char name[14]; 68 int c; 69 70 hd = (char *) getenv ("HOME"); 71 72 md = (char *) xmalloc (strlen (hd) + 10); 73 strcpy (md, hd); 74 strcat (md, "/Messages"); 75 76 mdd = (char *) xmalloc (strlen (md) + 11); 77 strcpy (mdd, md); 78 strcat (mdd, "/Directory"); 79 80 cflen = 100; 81 cf = (char *) xmalloc (cflen); 82 83 mddf = fopen (mdd, "r"); 84 if (!mddf) 85 sysfail (mdd); 86 if (argc > 1) 87 mfile = argv[1]; 88 else 89 { 90 mfile = (char *) xmalloc (strlen (hd) + 7); 91 strcpy (mfile, hd); 92 strcat (mfile, "/OMAIL"); 93 } 94 mfilef = fopen (mfile, "w"); 95 if (!mfilef) 96 sysfail (mfile); 97 98 skip_to_lf (mddf); 99 while (fscanf (mddf, "%4c%14[0123456789]", pre, name) != EOF) 100 { 101 if (cflen < strlen (md) + strlen (name) + 2) 102 { 103 cflen = strlen (md) + strlen (name) + 2; 104 cf = (char *) xrealloc (cf, cflen); 105 } 106 strcpy (cf, md); 107 strcat (cf,"/"); 108 strcat (cf, name); 109 cff = fopen (cf, "r"); 110 if (!cff) 111 perror (cf); 112 else 113 { 114 while ((c = getc(cff)) != EOF) 115 putc (c, mfilef); 116 putc ('\n', mfilef); 117 skip_to_lf (mddf); 118 fclose (cff); 119 } 120 } 121 fclose (mddf); 122 fclose (mfilef); 123 return EXIT_SUCCESS; 124} 125 126void 127skip_to_lf (stream) 128 FILE *stream; 129{ 130 register int c; 131 while ((c = getc(stream)) != EOF && c != '\n') 132 ; 133} 134 135 136void 137error (s1, s2) 138 char *s1, *s2; 139{ 140 fprintf (stderr, "cvtmail: "); 141 fprintf (stderr, s1, s2); 142 fprintf (stderr, "\n"); 143} 144 145/* Print error message and exit. */ 146 147void 148fatal (s1, s2) 149 char *s1, *s2; 150{ 151 error (s1, s2); 152 exit (EXIT_FAILURE); 153} 154 155void 156sysfail (s) 157 char *s; 158{ 159 fprintf (stderr, "cvtmail: "); 160 perror (s); 161 exit (EXIT_FAILURE); 162} 163 164char * 165xmalloc (size) 166 unsigned size; 167{ 168 char *result = (char *) malloc (size); 169 if (!result) 170 fatal ("virtual memory exhausted", 0); 171 return result; 172} 173 174char * 175xrealloc (ptr, size) 176 char *ptr; 177 unsigned size; 178{ 179 char *result = (char *) realloc (ptr, size); 180 if (!result) 181 fatal ("virtual memory exhausted", 0); 182 return result; 183} 184 185/* arch-tag: b93c25a9-9012-44f1-b78b-9cc7aed44a7a 186 (do not change this comment) */ 187 188/* cvtmail.c ends here */ 189