Mercurial > hg > xemacs-beta
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:376386a54a3c |
---|---|
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 (argc, argv) | |
57 int argc; | |
58 char *argv[]; | |
59 { | |
60 char *hd; | |
61 char *md; | |
62 char *mdd; | |
63 char *mfile; | |
64 char *cf; | |
65 int cflen; | |
66 FILE *mddf; | |
67 FILE *mfilef; | |
68 FILE *cff; | |
69 char pre[10]; | |
70 char name[14]; | |
71 int c; | |
72 | |
73 hd = (char *) getenv ("HOME"); | |
74 | |
75 md = (char *) xmalloc (strlen (hd) + 10); | |
76 strcpy (md, hd); | |
77 strcat (md, "/Messages"); | |
78 | |
79 mdd = (char *) xmalloc (strlen (md) + 11); | |
80 strcpy (mdd, md); | |
81 strcat (mdd, "/Directory"); | |
82 | |
83 cflen = 100; | |
84 cf = (char *) xmalloc (cflen); | |
85 | |
86 mddf = fopen (mdd, "r"); | |
87 if (argc > 1) | |
88 mfilef = fopen (argv[1], "w"); | |
89 else | |
90 { | |
91 mfile = (char *) xmalloc (strlen (hd) + 7); | |
92 strcpy (mfile, hd); | |
93 strcat (mfile, "/OMAIL"); | |
94 mfilef = fopen (mfile, "w"); | |
95 } | |
96 skip_to_lf (mddf); | |
97 while (fscanf (mddf, "%4c%14[0123456789]", pre, name) != EOF) | |
98 { | |
99 int comp_len = strlen (md) + strlen (name) + 2; | |
100 if (cflen < comp_len) | |
101 { | |
102 cflen = strlen (md) + strlen (name) + 2; | |
103 cf = (char *) xrealloc (cf, cflen); | |
104 } | |
105 strcpy (cf, md); | |
106 strcat (cf,"/"); | |
107 strcat (cf, name); | |
108 cff = fopen (cf, "r"); | |
109 while ((c = getc(cff)) != EOF) | |
110 putc (c, mfilef); | |
111 putc ('\n', mfilef); | |
112 skip_to_lf (mddf); | |
113 fclose (cff); | |
114 } | |
115 fclose (mddf); | |
116 fclose (mfilef); | |
117 return 0; | |
118 } | |
119 | |
120 static void | |
121 skip_to_lf (stream) | |
122 FILE *stream; | |
123 { | |
124 register int c; | |
125 while ((c = getc(stream)) != '\n') | |
126 ; | |
127 } | |
128 | |
129 static void * | |
130 xmalloc (size) | |
131 unsigned size; | |
132 { | |
133 char *result = (char *) malloc (size); | |
134 if (!result) | |
135 fatal ("virtual memory exhausted", 0); | |
136 return result; | |
137 } | |
138 | |
139 static void * | |
140 xrealloc (ptr, size) | |
141 char *ptr; | |
142 unsigned size; | |
143 { | |
144 char *result = (char *) realloc (ptr, size); | |
145 if (!result) | |
146 fatal ("virtual memory exhausted", 0); | |
147 return result; | |
148 } | |
149 | |
150 /* Print error message and exit. */ | |
151 | |
152 static void | |
153 fatal (CONST char *s1, CONST char *s2) | |
154 { | |
155 error (s1, s2); | |
156 exit (1); | |
157 } | |
158 | |
159 static void | |
160 error (CONST char *s1, CONST char *s2) | |
161 { | |
162 fprintf (stderr, "cvtmail: "); | |
163 fprintf (stderr, s1, s2); | |
164 fprintf (stderr, "\n"); | |
165 } |