|
|
1.1 ! root 1: /* Copyright (C) 1985 Free Software Foundation ! 2: ! 3: This file is part of GNU Emacs. ! 4: ! 5: GNU Emacs is free software; you can redistribute it and/or modify ! 6: it under the terms of the GNU General Public License as published by ! 7: the Free Software Foundation; either version 1, or (at your option) ! 8: any later version. ! 9: ! 10: GNU Emacs is distributed in the hope that it will be useful, ! 11: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 13: GNU General Public License for more details. ! 14: ! 15: You should have received a copy of the GNU General Public License ! 16: along with GNU Emacs; see the file COPYING. If not, write to ! 17: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 18: ! 19: /* cvtmail: ! 20: * Program to convert oldstyle goslings emacs mail directories into ! 21: * gnu-rmail format. Program expects a directory called Messages to ! 22: * exist in your home directory, containing individual mail messages in ! 23: * separate files in the standard gosling emacs mail reader format. ! 24: * ! 25: * Program takes one argument: an output file. THis file will contain ! 26: * all the messages in Messages directory, in berkeley mail format. ! 27: * If no output file is mentioned, messages are put in ~/OMAIL. ! 28: * ! 29: * In order to get rmail to read the messages, the resulting file must ! 30: * be mv'ed to ~/mbox, and then have rmail invoked on them. ! 31: * ! 32: * Author: Larry Kolodney, 1985 ! 33: ! 34: * RMS, 2 Sept 85: Removed fix maximums on file name sizes. ! 35: */ ! 36: ! 37: ! 38: #include <stdio.h> ! 39: ! 40: ! 41: main (argc, argv) ! 42: int argc; ! 43: char *argv[]; ! 44: { ! 45: char *hd; ! 46: char *md; ! 47: char *mdd; ! 48: char *mfile; ! 49: char *cf; ! 50: int cflen; ! 51: FILE *mddf; ! 52: FILE *mfilef; ! 53: FILE *cff; ! 54: char pre[10], post[100]; ! 55: char name[14]; ! 56: int c; ! 57: ! 58: hd = (char *) getenv ("HOME"); ! 59: ! 60: md = (char *) xmalloc (strlen (hd) + 10); ! 61: strcpy (md, hd); ! 62: strcat (md, "/Messages"); ! 63: ! 64: mdd = (char *) xmalloc (strlen (md) + 11); ! 65: strcpy (mdd, md); ! 66: strcat (mdd, "/Directory"); ! 67: ! 68: cflen = 100; ! 69: cf = (char *) xmalloc (cflen); ! 70: ! 71: mddf = fopen (mdd, "r"); ! 72: if (argc > 1) ! 73: mfilef = fopen (argv[1], "w"); ! 74: else ! 75: { ! 76: mfile = (char *) xmalloc (strlen (hd) + 7); ! 77: strcpy (mfile, hd); ! 78: strcat (mfile, "/OMAIL"); ! 79: mfilef = fopen (mfile, "w"); ! 80: } ! 81: skip_to_lf (mddf); ! 82: while (fscanf (mddf, "%4c%14[0123456789]", pre, name) != EOF) ! 83: { ! 84: if (cflen < strlen (md) + strlen (name) + 2) ! 85: { ! 86: cflen = strlen (md) + strlen (name) + 2; ! 87: cf = (char *) xrealloc (cf, cflen); ! 88: } ! 89: strcpy (cf, md); ! 90: strcat (cf,"/"); ! 91: strcat (cf, name); ! 92: cff = fopen (cf, "r"); ! 93: while ((c = getc(cff)) != EOF) ! 94: putc (c, mfilef); ! 95: putc ('\n', mfilef); ! 96: skip_to_lf (mddf); ! 97: fclose (cff); ! 98: } ! 99: fclose (mddf); ! 100: fclose (mfilef); ! 101: return 0; ! 102: } ! 103: ! 104: skip_to_lf (stream) ! 105: FILE *stream; ! 106: { ! 107: register int c; ! 108: while ((c = getc(stream)) != '\n') ! 109: ; ! 110: } ! 111: ! 112: int ! 113: xmalloc (size) ! 114: int size; ! 115: { ! 116: int result = malloc (size); ! 117: if (!result) ! 118: fatal ("virtual memory exhausted", 0); ! 119: return result; ! 120: } ! 121: ! 122: int ! 123: xrealloc (ptr, size) ! 124: char *ptr; ! 125: int size; ! 126: { ! 127: int result = realloc (ptr, size); ! 128: if (!result) ! 129: fatal ("virtual memory exhausted"); ! 130: return result; ! 131: } ! 132: ! 133: /* Print error message and exit. */ ! 134: ! 135: fatal (s1, s2) ! 136: char *s1, *s2; ! 137: { ! 138: error (s1, s2); ! 139: exit (1); ! 140: } ! 141: ! 142: error (s1, s2) ! 143: char *s1, *s2; ! 144: { ! 145: printf ("cvtmail: "); ! 146: printf (s1, s2); ! 147: printf ("\n"); ! 148: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.