annotate uip/burst.c @ 16:07f8972434be

fix for Yosemita Clang
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 12 Nov 2014 02:46:27 +0900
parents 441a2190cfae
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 /* burst.c - explode digests into individual messages */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #ifndef lint
12
441a2190cfae Lion fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
3 static char ident[] = "@(#)$Id: burst.c,v 1.1.1.1 2005/04/18 14:46:07 kono Exp $";
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4 #endif /* lint */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 #include "../h/mh.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 #include <stdio.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 #include <sys/types.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 #include <sys/stat.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 #ifdef LOCALE
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 #include <locale.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 #endif
16
07f8972434be fix for Yosemita Clang
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
13 #include <unistd.h>
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14
16
07f8972434be fix for Yosemita Clang
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
15
07f8972434be fix for Yosemita Clang
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
16 static void cpybrst(), burst();
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 static struct swit switches[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 #define INPLSW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 "inplace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 #define NINPLSW 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 "noinplace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 #define QIETSW 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26 "quiet", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 #define NQIETSW 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 "noquiet", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 #define VERBSW 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 "verbose", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 #define NVERBSW 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 "noverbose", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 #define HELPSW 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 static char delim3[] = "-------";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 static struct msgs *mp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 struct smsg {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 long s_start;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50 long s_stop;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55 /* ARGSUSED */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56
16
07f8972434be fix for Yosemita Clang
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
57 int
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 main (argc, argv)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59 int argc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 char **argv;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62 int inplace = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 quietsw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 verbosw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 hi,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 *maildir,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 *folder = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 buf[100],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72 **ap,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73 **argp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74 *arguments[MAXARGS],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75 *msgs[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76 struct smsg *smsgs;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 #ifdef LOCALE
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79 setlocale(LC_ALL, "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 #ifdef JAPAN
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82 ml_init();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83 #endif /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 invo_name = r1bindex (argv[0], '/');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85 if ((cp = m_find (invo_name)) != NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 ap = brkstring (cp = getcpy (cp), " ", "\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87 ap = copyip (ap, arguments);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90 ap = arguments;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 (void) copyip (argv + 1, ap);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92 argp = arguments;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95
16
07f8972434be fix for Yosemita Clang
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
96 while ((cp = *argp++)) {
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98 switch (smatch (++cp, switches)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100 ambigsw (cp, switches);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101 done (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103 adios (NULLCP, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104 case HELPSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105 (void) sprintf (buf, "%s [+folder] [msgs] [switches]",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106 invo_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107 help (buf, switches);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108 done (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110 case INPLSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111 inplace++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113 case NINPLSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114 inplace = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117 case QIETSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118 quietsw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
119 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
120 case NQIETSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
121 quietsw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
122 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
123
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 case VERBSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
125 verbosw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
126 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
127 case NVERBSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
128 verbosw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132 if (folder)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133 adios (NULLCP, "only one folder at a time!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135 folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143 if (!m_find ("path"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144 free (path ("./", TFOLDER));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 msgs[msgp++] = "cur";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 if (!folder)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148 folder = m_getfolder ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149 maildir = m_maildir (folder);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151 if (chdir (maildir) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 adios (maildir, "unable to change directory to");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153 if (!(mp = m_gmsg (folder)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
154 adios (NULLCP, "unable to read folder %s", folder);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
155 if (mp -> hghmsg == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
156 adios (NULLCP, "no messages in %s", folder);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
157
bce86c4163a3 Initial revision
kono
parents:
diff changeset
158 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
159 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
160 done (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
161 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
162
bce86c4163a3 Initial revision
kono
parents:
diff changeset
163 smsgs = (struct smsg *)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
164 calloc ((unsigned) (MAXFOLDER + 2), sizeof *smsgs);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
165 if (smsgs == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
166 adios (NULLCP, "unable to allocate burst storage");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
167
bce86c4163a3 Initial revision
kono
parents:
diff changeset
168 hi = mp -> hghmsg + 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
169 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
170 if (mp -> msgstats[msgnum] & SELECTED)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
171 burst (smsgs, msgnum, inplace, quietsw, verbosw);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
172
bce86c4163a3 Initial revision
kono
parents:
diff changeset
173 free ((char *) smsgs);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
174
bce86c4163a3 Initial revision
kono
parents:
diff changeset
175 m_replace (pfolder, folder);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
176 if (inplace) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
177 if (mp -> lowsel != mp -> curmsg)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
178 m_setcur (mp, mp -> lowsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
179 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
180 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
181 if (hi <= mp -> hghmsg)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
182 m_setcur (mp, hi);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
183 m_sync (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
184 m_update ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
185
bce86c4163a3 Initial revision
kono
parents:
diff changeset
186 done (0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
187 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
188
bce86c4163a3 Initial revision
kono
parents:
diff changeset
189 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
190
16
07f8972434be fix for Yosemita Clang
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
191 static void burst (smsgs, msgnum, inplace, quietsw, verbosw)
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
192 register struct smsg *smsgs;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
193 int msgnum,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
194 inplace,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
195 quietsw,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
196 verbosw;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
197 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
198 int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
199 j,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
200 cc,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
201 ld3,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
202 wasdlm,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
203 mode,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
204 msgp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
205 register long pos;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
206 register char c,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
207 *msgnam;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
208 char buffer[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
209 f1[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
210 f2[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
211 f3[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
212 struct stat st;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
213 register FILE *in,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
214 *out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
215
bce86c4163a3 Initial revision
kono
parents:
diff changeset
216 ld3 = strlen (delim3);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
217
bce86c4163a3 Initial revision
kono
parents:
diff changeset
218 if ((in = fopen (msgnam = m_name (msgnum), "r")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
219 adios (msgnam, "unable to read message");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
220
bce86c4163a3 Initial revision
kono
parents:
diff changeset
221 mode = fstat (fileno (in), &st) != NOTOK ? (st.st_mode & 0777)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
222 : m_gmprot ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
223 for (msgp = 0, pos = 0L; msgp <= MAXFOLDER;) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
224 while (fgets (buffer, sizeof buffer, in) != NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
225 && buffer[0] == '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
226 pos += (long) strlen (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
227 if (feof (in))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
228 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
229 (void) fseek (in, pos, 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
230 smsgs[msgp].s_start = pos;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
231
bce86c4163a3 Initial revision
kono
parents:
diff changeset
232 for (c = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
233 fgets (buffer, sizeof buffer, in) != NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
234 c = buffer[0])
bce86c4163a3 Initial revision
kono
parents:
diff changeset
235 if (strncmp (buffer, delim3, ld3) == 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
236 && (msgp == 1 || c == '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
237 && ((cc = peekc (in)) == '\n' || cc == EOF))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
238 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
239 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
240 pos += (long) strlen (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
241
bce86c4163a3 Initial revision
kono
parents:
diff changeset
242 wasdlm = strncmp (buffer, delim3, ld3) == 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
243 if (smsgs[msgp].s_start != pos)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
244 smsgs[msgp++].s_stop = (c == '\n' && wasdlm) ? pos - 1 : pos;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
245 if (feof (in)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
246 #ifdef notdef
bce86c4163a3 Initial revision
kono
parents:
diff changeset
247 if (wasdlm) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
248 smsgs[msgp - 1].s_stop -= ((long) strlen (buffer) + 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
249 msgp++; /* fake "End of XXX Digest" */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
250 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
251 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
252 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
253 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
254 pos += (long) strlen (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
255 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
256
bce86c4163a3 Initial revision
kono
parents:
diff changeset
257 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
258
bce86c4163a3 Initial revision
kono
parents:
diff changeset
259 switch (msgp--) { /* toss "End of XXX Digest" */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
260 case 0:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
261 adios (NULLCP, "burst() botch -- you lose big");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
262
bce86c4163a3 Initial revision
kono
parents:
diff changeset
263 case 1:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
264 if (!quietsw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
265 admonish (NULLCP, "message %d not in digest format", msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
266 (void) fclose (in);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
267 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
268
bce86c4163a3 Initial revision
kono
parents:
diff changeset
269 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
270 if (verbosw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
271 printf ("%d message%s exploded from digest %d\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
272 msgp, msgp != 1 ? "s" : "", msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
273 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
274 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
275 /* msgp now contains the number of new msgs to be created */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
276
bce86c4163a3 Initial revision
kono
parents:
diff changeset
277 if ((mp = m_remsg (mp, 0, mp -> hghmsg + msgp)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
278 adios (NULLCP, "unable to allocate folder storage");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
279
bce86c4163a3 Initial revision
kono
parents:
diff changeset
280 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
281
bce86c4163a3 Initial revision
kono
parents:
diff changeset
282 j = mp -> hghmsg; /* old value */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
283 mp -> hghmsg += msgp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
284 mp -> nummsg += msgp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
285 if (mp -> hghsel > msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
286 mp -> hghsel += msgp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
287
bce86c4163a3 Initial revision
kono
parents:
diff changeset
288 if (inplace)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
289 for (i = mp -> hghmsg; j > msgnum; i--, j--) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
290 (void) strcpy (f1, m_name (i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
291 (void) strcpy (f2, m_name (j));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
292 if (mp -> msgstats[j] & EXISTS) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
293 if (verbosw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
294 printf ("message %d becomes message %d\n", j, i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
295
bce86c4163a3 Initial revision
kono
parents:
diff changeset
296 if (rename (f2, f1) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
297 admonish (f1, "unable to rename %s to", f2);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
298 mp -> msgstats[i] = mp -> msgstats[j];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
299 mp -> msgstats[j] = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
300 mp -> msgflags |= SEQMOD;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
301 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
302 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
303
bce86c4163a3 Initial revision
kono
parents:
diff changeset
304 mp -> msgstats[msgnum] &= ~SELECTED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
305 i = inplace ? msgnum + msgp : mp -> hghmsg; /* new hghmsg is hghmsg+msgp */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
306 for (j = msgp; j >= (inplace ? 0 : 1); i--, j--) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
307 (void) strcpy (f1, m_name (i));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
308 (void) strcpy (f2, m_scratch ("", invo_name));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
309 if (verbosw && i != msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
310 printf ("message %d of digest %d becomes message %d\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
311 j, msgnum, i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
312
bce86c4163a3 Initial revision
kono
parents:
diff changeset
313 if ((out = fopen (f2, "w")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
314 adios (f2, "unable to write message");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
315 (void) chmod (f2, mode);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
316 (void) fseek (in, pos = smsgs[j].s_start, 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
317 cpybrst (in, out, msgnam, f2,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
318 (int) (smsgs[j].s_stop - smsgs[j].s_start));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
319 (void) fclose (out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
320
bce86c4163a3 Initial revision
kono
parents:
diff changeset
321 if (i == msgnum) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
322 (void) strcpy (f3, m_backup (f1));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
323 if (rename (f1, f3) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
324 admonish (f3, "unable to rename %s to", f1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
325 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
326 if (rename (f2, f1) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
327 admonish (f1, "unable to rename %s to", f2);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
328 mp -> msgstats[i] = mp -> msgstats[msgnum];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
329 mp -> msgflags |= SEQMOD;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
330 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
331
bce86c4163a3 Initial revision
kono
parents:
diff changeset
332 (void) fclose (in);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
333 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
334
bce86c4163a3 Initial revision
kono
parents:
diff changeset
335
bce86c4163a3 Initial revision
kono
parents:
diff changeset
336 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
337
bce86c4163a3 Initial revision
kono
parents:
diff changeset
338 #define S1 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
339 #define S2 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
340 #define S3 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
341
16
07f8972434be fix for Yosemita Clang
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
342 static void cpybrst (in, out, ifile, ofile, len)
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
343 register FILE *in,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
344 *out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
345 register char *ifile,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
346 *ofile;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
347 register int len;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
348 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
349 register int c,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
350 state;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
351
bce86c4163a3 Initial revision
kono
parents:
diff changeset
352 for (state = S1; (c = fgetc (in)) != EOF && len > 0; len--) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
353 if (c == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
354 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
355 switch (state) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
356 case S1:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
357 switch (c) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
358 case '-':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
359 state = S3;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
360 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
361
bce86c4163a3 Initial revision
kono
parents:
diff changeset
362 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
363 state = S2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
364 case '\n':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
365 (void) fputc (c, out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
366 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
367 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
368 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
369
bce86c4163a3 Initial revision
kono
parents:
diff changeset
370 case S2:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
371 switch (c) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
372 case '\n':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
373 state = S1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
374 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
375 (void) fputc (c, out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
376 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
377 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
378 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
379
bce86c4163a3 Initial revision
kono
parents:
diff changeset
380 case S3:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
381 switch (c) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
382 case ' ':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
383 state = S2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
384 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
385
bce86c4163a3 Initial revision
kono
parents:
diff changeset
386 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
387 state = c == '\n' ? S1 : S2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
388 (void) fputc ('-', out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
389 (void) fputc (c, out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
390 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
391 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
392 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
393 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
394 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
395
bce86c4163a3 Initial revision
kono
parents:
diff changeset
396 if (ferror (in) && !feof (in))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
397 adios (ifile, "error reading");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
398 if (ferror (out))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
399 adios (ofile, "error writing");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
400 }