Mercurial > hg > xemacs-beta
comparison lib-src/cvtmail.c @ 428:3ecd8885ac67 r21-2-22
Import from CVS: tag r21-2-22
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:28:15 +0200 |
parents | |
children | 84b14dcb0985 |
comparison
equal
deleted
inserted
replaced
427:0a0253eac470 | 428:3ecd8885ac67 |
---|---|
1 /* Copyright (C) 1985, 1993, 1994 Free Software Foundation | |
2 This file is part of GNU Emacs. | |
3 | |
4 GNU Emacs is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 2, or (at your option) | |
7 any later version. | |
8 | |
9 GNU Emacs is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
15 along with GNU Emacs; see the file COPYING. If not, write to | |
16 the Free the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
17 Boston, MA 02111-1307, USA. */ | |
18 | |
19 /* Synched up with: FSF 19.28. */ | |
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 | |
38 #include <../src/config.h> | |
39 | |
40 #include <stdio.h> | |
41 #include <string.h> | |
42 | |
43 #if __STDC__ || defined(STDC_HEADERS) | |
44 # include <stdlib.h> | |
45 #else | |
46 char *malloc (); | |
47 char *getenv (); | |
48 #endif | |
49 static void *xmalloc (unsigned int); | |
50 static void *xrealloc (char *ptr, unsigned int); | |
51 static void skip_to_lf (FILE *stream); | |
52 static void fatal (CONST char *s1, CONST char *s2); | |
53 static void error (CONST char *s1, CONST char *s2); | |
54 | |
55 int | |
56 main (int argc, char *argv[]) | |
57 { | |
58 char *hd; | |
59 char *md; | |
60 char *mdd; | |
61 char *mfile; | |
62 char *cf; | |
63 int cflen; | |
64 FILE *mddf; | |
65 FILE *mfilef; | |
66 FILE *cff; | |
67 char pre[10]; | |
68 char name[14]; | |
69 int c; | |
70 | |
71 hd = (char *) getenv ("HOME"); | |
72 | |
73 md = (char *) xmalloc (strlen (hd) + 10); | |
74 strcpy (md, hd); | |
75 strcat (md, "/Messages"); | |
76 | |
77 mdd = (char *) xmalloc (strlen (md) + 11); | |
78 strcpy (mdd, md); | |
79 strcat (mdd, "/Directory"); | |
80 | |
81 cflen = 100; | |
82 cf = (char *) xmalloc (cflen); | |
83 | |
84 mddf = fopen (mdd, "r"); | |
85 if (argc > 1) | |
86 mfilef = fopen (argv[1], "w"); | |
87 else | |
88 { | |
89 mfile = (char *) xmalloc (strlen (hd) + 7); | |
90 strcpy (mfile, hd); | |
91 strcat (mfile, "/OMAIL"); | |
92 mfilef = fopen (mfile, "w"); | |
93 } | |
94 skip_to_lf (mddf); | |
95 while (fscanf (mddf, "%4c%14[0123456789]", pre, name) != EOF) | |
96 { | |
97 int comp_len = strlen (md) + strlen (name) + 2; | |
98 if (cflen < comp_len) | |
99 { | |
100 cflen = strlen (md) + strlen (name) + 2; | |
101 cf = (char *) xrealloc (cf, cflen); | |
102 } | |
103 strcpy (cf, md); | |
104 strcat (cf,"/"); | |
105 strcat (cf, name); | |
106 cff = fopen (cf, "r"); | |
107 while ((c = getc(cff)) != EOF) | |
108 putc (c, mfilef); | |
109 putc ('\n', mfilef); | |
110 skip_to_lf (mddf); | |
111 fclose (cff); | |
112 } | |
113 fclose (mddf); | |
114 fclose (mfilef); | |
115 return 0; | |
116 } | |
117 | |
118 static void | |
119 skip_to_lf (stream) | |
120 FILE *stream; | |
121 { | |
122 register int c; | |
123 while ((c = getc(stream)) != '\n') | |
124 ; | |
125 } | |
126 | |
127 static void * | |
128 xmalloc (size) | |
129 unsigned size; | |
130 { | |
131 char *result = (char *) malloc (size); | |
132 if (!result) | |
133 fatal ("virtual memory exhausted", 0); | |
134 return result; | |
135 } | |
136 | |
137 static void * | |
138 xrealloc (ptr, size) | |
139 char *ptr; | |
140 unsigned size; | |
141 { | |
142 char *result = (char *) realloc (ptr, size); | |
143 if (!result) | |
144 fatal ("virtual memory exhausted", 0); | |
145 return result; | |
146 } | |
147 | |
148 /* Print error message and exit. */ | |
149 | |
150 static void | |
151 fatal (CONST char *s1, CONST char *s2) | |
152 { | |
153 error (s1, s2); | |
154 exit (1); | |
155 } | |
156 | |
157 static void | |
158 error (CONST char *s1, CONST char *s2) | |
159 { | |
160 fprintf (stderr, "cvtmail: "); | |
161 fprintf (stderr, s1, s2); | |
162 fprintf (stderr, "\n"); | |
163 } |