annotate uip/mshcmds.c @ 12:441a2190cfae

Lion fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 21 Apr 2012 13:10:49 +0900
parents a6481689f99c
children 07f8972434be
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 /* mshcmds.c - command handlers in msh */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #ifndef lint
12
441a2190cfae Lion fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
3 static char ident[] = "@(#)$Id: mshcmds.c,v 1.2 2006/12/05 18:18:13 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 "../h/dropsbr.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 #include "../h/formatsbr.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 #include "../h/scansbr.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 #include "../zotnet/tws.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 #ifdef _AIX /* AIX 1.2.1 <stdio.h> declares getws() */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 #define getws _getws
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 #include <stdio.h>
12
441a2190cfae Lion fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
15 #include <unistd.h>
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 #ifdef _AIX
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 #undef getws
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 #include "../zotnet/mts.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 #include <ctype.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 #include <errno.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 #include <setjmp.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 #include <signal.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 #include <sys/types.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 #include <sys/stat.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26 #include "../h/mshsbr.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 #ifdef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 #include "../h/mhn.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 #endif /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 /* BURST */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 static char delim3[] = "-------";/* from burst.c */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 /* SHOW */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 static int mhlnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 static FILE *mhlfp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 void clear_screen ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 static int eom_action ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 static FP mhl_action ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45 #ifdef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 static int nontext();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50 static burst(), forw(), rmm(), show(), ask(), copy_message(), copy_digest();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 static int process();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52 /* SORTM */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 static int msgsort (), subsort();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54 static int getws ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55 static char *sosmash ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57 #if defined(NNTP) && defined(MPOP)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 #undef MPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 #ifdef MPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61 #ifdef BPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62 extern int pmsh;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 extern char response[];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 #endif /* MPOP */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 forkcmd (args, pgm)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 char **args,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 *pgm;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73 int child_id;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74 char *vec[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76 vec[0] = r1bindex (pgm, '/');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77 (void) copyip (args, vec + 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80 (void) m_delete (pfolder);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 m_replace (pfolder, fmsh);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82 m_sync (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83 m_update ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85 (void) fflush (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 switch (child_id = fork ()) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87 case NOTOK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88 advise ("fork", "unable to");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92 closefds (3);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93 (void) signal (SIGINT, istat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 (void) signal (SIGQUIT, qstat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95
bce86c4163a3 Initial revision
kono
parents:
diff changeset
96 execvp (pgm, vec);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97 fprintf (stderr, "unable to exec ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98 perror (cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 _exit (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102 (void) pidXwait (child_id, NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105 if (fmsh) { /* assume the worst case */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106 mp -> msgflags |= MODIFIED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107 modified++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113 static struct swit distswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114 #define DIANSW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115 "annotate", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116 #define DINANSW 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117 "noannotate", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118 #define DIDFSW 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
119 "draftfolder +folder", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
120 #define DIDMSW 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
121 "draftmessage msg", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
122 #define DINDFSW 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
123 "nodraftfolder", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 #define DIEDTSW 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
125 "editor editor", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
126 #define DINEDSW 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
127 "noedit", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
128 #define DIFRMSW 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129 "form formfile", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 #define DIINSW 8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131 "inplace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132 #define DININSW 9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133 "noinplace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134 #define DIWHTSW 10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135 "whatnowproc program", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136 #define DINWTSW 11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137 "nowhatnowproc", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138 #define DIHELP 12
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 distcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149 int vecp = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151 *msg = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153 *vec[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
154
bce86c4163a3 Initial revision
kono
parents:
diff changeset
155 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
156 forkcmd (args, cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
157 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
158 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
159
bce86c4163a3 Initial revision
kono
parents:
diff changeset
160 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
161 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
162 switch (smatch (++cp, distswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
163 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
164 ambigsw (cp, distswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
165 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
166 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
167 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
168 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
169 case DIHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
170 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
171 help (buf, distswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
172 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
173
bce86c4163a3 Initial revision
kono
parents:
diff changeset
174 case DIANSW: /* not implemented */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
175 case DINANSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
176 case DIINSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
177 case DININSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
178 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
179
bce86c4163a3 Initial revision
kono
parents:
diff changeset
180 case DINDFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
181 case DINEDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
182 case DINWTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
183 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
184 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
185
bce86c4163a3 Initial revision
kono
parents:
diff changeset
186 case DIEDTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
187 case DIFRMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
188 case DIDFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
189 case DIDMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
190 case DIWHTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
191 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
192 if (!(cp = *args++) || *cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
193 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
194 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
195 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
196 vec[vecp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
197 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
198 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
199 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
200 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
201 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
202 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
203 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
204 if (msg) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
205 advise (NULLCP, "only one message at a time!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
206 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
207 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
208 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
209 msg = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
210 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
211
bce86c4163a3 Initial revision
kono
parents:
diff changeset
212 vec[0] = cmd_name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
213 vec[vecp++] = "-file";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
214 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
215 if (!msg)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
216 msg = "cur";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
217 if (!m_convert (mp, msg))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
218 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
219 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
220
bce86c4163a3 Initial revision
kono
parents:
diff changeset
221 if (mp -> numsel > 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
222 advise (NULLCP, "only one message at a time!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
223 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
224 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
225 (void) process (mp -> hghsel, cmd_name, vecp, vec);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
226 m_setcur (mp, mp -> hghsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
227 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
228
bce86c4163a3 Initial revision
kono
parents:
diff changeset
229 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
230
bce86c4163a3 Initial revision
kono
parents:
diff changeset
231 static struct swit explswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
232 #define EXINSW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
233 "inplace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
234 #define EXNINSW 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
235 "noinplace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
236 #define EXQISW 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
237 "quiet", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
238 #define EXNQISW 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
239 "noquiet", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
240 #define EXVBSW 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
241 "verbose", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
242 #define EXNVBSW 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
243 "noverbose", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
244 #define EXHELP 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
245 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
246
bce86c4163a3 Initial revision
kono
parents:
diff changeset
247 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
248 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
249
bce86c4163a3 Initial revision
kono
parents:
diff changeset
250 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
251
bce86c4163a3 Initial revision
kono
parents:
diff changeset
252 explcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
253 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
254 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
255 int inplace = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
256 quietsw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
257 verbosw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
258 msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
259 hi,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
260 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
261 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
262 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
263 *msgs[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
264 struct Msg *smsgs;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
265
bce86c4163a3 Initial revision
kono
parents:
diff changeset
266 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
267 forkcmd (args, cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
268 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
269 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
270
bce86c4163a3 Initial revision
kono
parents:
diff changeset
271 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
272 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
273 switch (smatch (++cp, explswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
274 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
275 ambigsw (cp, explswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
276 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
277 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
278 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
279 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
280 case EXHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
281 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
282 help (buf, explswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
283 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
284
bce86c4163a3 Initial revision
kono
parents:
diff changeset
285 case EXINSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
286 inplace++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
287 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
288 case EXNINSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
289 inplace = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
290 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
291 case EXQISW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
292 quietsw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
293 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
294 case EXNQISW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
295 quietsw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
296 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
297 case EXVBSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
298 verbosw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
299 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
300 case EXNVBSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
301 verbosw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
302 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
303 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
304 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
305 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
306 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
307 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
308 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
309 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
310 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
311
bce86c4163a3 Initial revision
kono
parents:
diff changeset
312 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
313 msgs[msgp++] = "cur";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
314 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
315 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
316 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
317 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
318
bce86c4163a3 Initial revision
kono
parents:
diff changeset
319 smsgs = (struct Msg *)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
320 calloc ((unsigned) (MAXFOLDER + 2), sizeof *smsgs);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
321 if (smsgs == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
322 adios (NULLCP, "unable to allocate folder storage");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
323
bce86c4163a3 Initial revision
kono
parents:
diff changeset
324 hi = mp -> hghmsg + 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
325 interrupted = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
326 for (msgnum = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
327 msgnum <= mp -> hghsel && !interrupted;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
328 msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
329 if (mp -> msgstats[msgnum] & SELECTED)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
330 if (burst (smsgs, msgnum, inplace, quietsw, verbosw) != OK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
331 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
332
bce86c4163a3 Initial revision
kono
parents:
diff changeset
333 free ((char *) smsgs);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
334
bce86c4163a3 Initial revision
kono
parents:
diff changeset
335 if (inplace)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
336 m_setcur (mp, mp -> lowsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
337 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
338 if (hi <= mp -> hghmsg)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
339 m_setcur (mp, hi);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
340
bce86c4163a3 Initial revision
kono
parents:
diff changeset
341 mp -> msgflags |= MODIFIED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
342 modified++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
343 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
344
bce86c4163a3 Initial revision
kono
parents:
diff changeset
345 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
346
bce86c4163a3 Initial revision
kono
parents:
diff changeset
347 static burst (smsgs, msgnum, inplace, quietsw, verbosw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
348 struct Msg *smsgs;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
349 int msgnum,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
350 inplace,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
351 quietsw,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
352 verbosw;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
353 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
354 int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
355 j,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
356 ld3,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
357 wasdlm,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
358 msgp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
359 long pos;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
360 char c,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
361 cc,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
362 buffer[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
363 register FILE *zp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
364
bce86c4163a3 Initial revision
kono
parents:
diff changeset
365 ld3 = strlen (delim3);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
366
bce86c4163a3 Initial revision
kono
parents:
diff changeset
367 if (Msgs[msgnum].m_scanl) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
368 free (Msgs[msgnum].m_scanl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
369 Msgs[msgnum].m_scanl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
370 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
371
bce86c4163a3 Initial revision
kono
parents:
diff changeset
372 pos = ftell (zp = msh_ready (msgnum, 1));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
373 for (msgp = 0; msgp <= MAXFOLDER;) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
374 while (fgets (buffer, sizeof buffer, zp) != NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
375 && buffer[0] == '\n'
bce86c4163a3 Initial revision
kono
parents:
diff changeset
376 && pos < Msgs[msgnum].m_stop)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
377 pos += (long) strlen (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
378 if (feof (zp) || pos >= Msgs[msgnum].m_stop)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
379 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
380 (void) fseek (zp, pos, 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
381 smsgs[msgp].m_start = pos;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
382
bce86c4163a3 Initial revision
kono
parents:
diff changeset
383 for (c = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
384 pos < Msgs[msgnum].m_stop
bce86c4163a3 Initial revision
kono
parents:
diff changeset
385 && fgets (buffer, sizeof buffer, zp) != NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
386 c = buffer[0])
bce86c4163a3 Initial revision
kono
parents:
diff changeset
387 if (strncmp (buffer, delim3, ld3) == 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
388 && (msgp == 1 || c == '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
389 && peekc (zp) == '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
390 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
391 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
392 pos += (long) strlen (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
393
bce86c4163a3 Initial revision
kono
parents:
diff changeset
394 wasdlm = strncmp (buffer, delim3, ld3) == 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
395 if (smsgs[msgp].m_start != pos)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
396 smsgs[msgp++].m_stop = (c == '\n' && wasdlm) ? pos - 1 : pos;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
397 if (feof (zp) || pos >= Msgs[msgnum].m_stop) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
398 if (wasdlm)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
399 smsgs[msgp - 1].m_stop -= ((long) strlen (buffer) + 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
400 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
401 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
402 pos += (long) strlen (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
403 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
404
bce86c4163a3 Initial revision
kono
parents:
diff changeset
405 switch (msgp--) { /* toss "End of XXX Digest" */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
406 case 0:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
407 adios (NULLCP, "burst() botch -- you lose big");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
408
bce86c4163a3 Initial revision
kono
parents:
diff changeset
409 case 1:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
410 if (!quietsw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
411 printf ("message %d not in digest format\n", msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
412 return OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
413
bce86c4163a3 Initial revision
kono
parents:
diff changeset
414 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
415 if (verbosw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
416 printf ("%d message%s exploded from digest %d\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
417 msgp, msgp != 1 ? "s" : "", msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
418 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
419 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
420
bce86c4163a3 Initial revision
kono
parents:
diff changeset
421 if ((i = msgp + mp -> hghmsg) > MAXFOLDER) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
422 advise (NULLCP, "more than %d messages", MAXFOLDER);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
423 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
424 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
425 if ((mp = m_remsg (mp, 0, i)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
426 adios (NULLCP, "unable to allocate folder storage");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
427
bce86c4163a3 Initial revision
kono
parents:
diff changeset
428 j = mp -> hghmsg;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
429 mp -> hghmsg += msgp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
430 mp -> nummsg += msgp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
431 if (mp -> hghsel > msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
432 mp -> hghsel += msgp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
433
bce86c4163a3 Initial revision
kono
parents:
diff changeset
434 if (inplace)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
435 for (i = mp -> hghmsg; j > msgnum; i--, j--) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
436 if (verbosw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
437 printf ("message %d becomes message %d\n", j, i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
438
bce86c4163a3 Initial revision
kono
parents:
diff changeset
439 Msgs[i].m_bboard_id = Msgs[j].m_bboard_id;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
440 Msgs[i].m_top = Msgs[j].m_top;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
441 Msgs[i].m_start = Msgs[j].m_start;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
442 Msgs[i].m_stop = Msgs[j].m_stop;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
443 Msgs[i].m_scanl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
444 if (Msgs[j].m_scanl) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
445 free (Msgs[j].m_scanl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
446 Msgs[j].m_scanl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
447 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
448 mp -> msgstats[i] = mp -> msgstats[j];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
449 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
450
bce86c4163a3 Initial revision
kono
parents:
diff changeset
451 if (Msgs[msgnum].m_bboard_id == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
452 (void) readid (msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
453
bce86c4163a3 Initial revision
kono
parents:
diff changeset
454 mp -> msgstats[msgnum] &= ~SELECTED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
455 i = inplace ? msgnum + msgp : mp -> hghmsg;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
456 for (j = msgp; j >= (inplace ? 0 : 1); i--, j--) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
457 if (verbosw && i != msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
458 printf ("message %d of digest %d becomes message %d\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
459 j, msgnum, i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
460
bce86c4163a3 Initial revision
kono
parents:
diff changeset
461 Msgs[i].m_bboard_id = Msgs[msgnum].m_bboard_id;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
462 Msgs[i].m_top = Msgs[j].m_top;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
463 Msgs[i].m_start = smsgs[j].m_start;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
464 Msgs[i].m_stop = smsgs[j].m_stop;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
465 Msgs[i].m_scanl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
466 mp -> msgstats[i] = mp -> msgstats[msgnum];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
467 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
468
bce86c4163a3 Initial revision
kono
parents:
diff changeset
469 return OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
470 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
471
bce86c4163a3 Initial revision
kono
parents:
diff changeset
472 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
473
bce86c4163a3 Initial revision
kono
parents:
diff changeset
474 static struct swit fileswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
475 #define FIDRFT 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
476 "draft", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
477 #define FILINK 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
478 "link", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
479 #define FINLINK 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
480 "nolink", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
481 #define FIPRES 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
482 "preserve", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
483 #define FINPRES 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
484 "nopreserve", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
485 #define FISRC 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
486 "src +folder", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
487 #define FIFILE 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
488 "file file", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
489 #define FIPROC 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
490 "rmmproc program", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
491 #define FINPRC 8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
492 "normmproc", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
493 #define FIHELP 9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
494 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
495
bce86c4163a3 Initial revision
kono
parents:
diff changeset
496 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
497 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
498
bce86c4163a3 Initial revision
kono
parents:
diff changeset
499 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
500
bce86c4163a3 Initial revision
kono
parents:
diff changeset
501 filecmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
502 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
503 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
504 int linksw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
505 msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
506 vecp = 1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
507 i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
508 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
509 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
510 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
511 *msgs[MAXARGS],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
512 *vec[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
513
bce86c4163a3 Initial revision
kono
parents:
diff changeset
514 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
515 forkcmd (args, cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
516 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
517 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
518
bce86c4163a3 Initial revision
kono
parents:
diff changeset
519 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
520 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
521 switch (i = smatch (++cp, fileswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
522 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
523 ambigsw (cp, fileswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
524 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
525 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
526 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
527 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
528 case FIHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
529 (void) sprintf (buf, "%s +folder... [msgs] [switches]",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
530 cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
531 help (buf, fileswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
532 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
533
bce86c4163a3 Initial revision
kono
parents:
diff changeset
534 case FILINK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
535 linksw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
536 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
537 case FINLINK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
538 linksw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
539 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
540
bce86c4163a3 Initial revision
kono
parents:
diff changeset
541 case FIPRES:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
542 case FINPRES:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
543 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
544
bce86c4163a3 Initial revision
kono
parents:
diff changeset
545 case FISRC:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
546 case FIDRFT:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
547 case FIFILE:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
548 case FIPROC:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
549 case FINPRC:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
550 advise (NULLCP, "sorry, -%s not allowed!", fileswit[i].sw);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
551 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
552 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
553 if (*cp == '+' || *cp == '@')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
554 vec[vecp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
555 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
556 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
557 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
558
bce86c4163a3 Initial revision
kono
parents:
diff changeset
559 vec[0] = cmd_name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
560 vec[vecp++] = "-file";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
561 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
562 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
563 msgs[msgp++] = "cur";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
564 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
565 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
566 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
567 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
568
bce86c4163a3 Initial revision
kono
parents:
diff changeset
569 interrupted = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
570 for (msgnum = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
571 msgnum <= mp -> hghsel && !interrupted;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
572 msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
573 if (mp -> msgstats[msgnum] & SELECTED)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
574 if (process (msgnum, fileproc, vecp, vec)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
575 mp -> msgstats[msgnum] &= ~SELECTED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
576 mp -> numsel--;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
577 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
578
bce86c4163a3 Initial revision
kono
parents:
diff changeset
579 if (mp -> numsel != mp -> nummsg || linksw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
580 m_setcur (mp, mp -> hghsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
581 if (!linksw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
582 rmm ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
583 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
584
bce86c4163a3 Initial revision
kono
parents:
diff changeset
585 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
586
bce86c4163a3 Initial revision
kono
parents:
diff changeset
587 int filehak (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
588 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
589 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
590 int result,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
591 vecp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
592 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
593 *cwd,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
594 *vec[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
595
bce86c4163a3 Initial revision
kono
parents:
diff changeset
596 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
597 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
598 switch (smatch (++cp, fileswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
599 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
600 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
601 case FIHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
602 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
603
bce86c4163a3 Initial revision
kono
parents:
diff changeset
604 case FILINK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
605 case FINLINK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
606 case FIPRES:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
607 case FINPRES:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
608 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
609
bce86c4163a3 Initial revision
kono
parents:
diff changeset
610 case FISRC:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
611 case FIDRFT:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
612 case FIFILE:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
613 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
614 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
615 if (*cp == '+' || *cp == '@')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
616 vec[vecp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
617 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
618 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
619
bce86c4163a3 Initial revision
kono
parents:
diff changeset
620 result = NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
621 cwd = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
622 for (vecp = 0; (cp = vec[vecp]) && result == NOTOK; vecp++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
623 if (cwd == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
624 cwd = getcpy (pwd ());
bce86c4163a3 Initial revision
kono
parents:
diff changeset
625 (void) chdir (m_maildir (""));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
626 cp = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
627 if (access (m_maildir (cp), 0) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
628 result = OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
629 free (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
630 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
631 if (cwd)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
632 (void) chdir (cwd);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
633
bce86c4163a3 Initial revision
kono
parents:
diff changeset
634 return result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
635 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
636
bce86c4163a3 Initial revision
kono
parents:
diff changeset
637 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
638
bce86c4163a3 Initial revision
kono
parents:
diff changeset
639 static struct swit foldswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
640 #define FLALSW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
641 "all", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
642 #define FLFASW 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
643 "fast", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
644 #define FLNFASW 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
645 "nofast", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
646 #define FLHDSW 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
647 "header", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
648 #define FLNHDSW 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
649 "noheader", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
650 #define FLPKSW 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
651 "pack", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
652 #define FLNPKSW 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
653 "nopack", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
654 #define FLRCSW 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
655 "recurse", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
656 #define FLNRCSW 8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
657 "norecurse", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
658 #define FLTLSW 9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
659 "total", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
660 #define FLNTLSW 10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
661 "nototal", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
662 #define FLPRSW 11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
663 "print", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
664 #define FLPUSW 12
bce86c4163a3 Initial revision
kono
parents:
diff changeset
665 "push", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
666 #define FLPOSW 13
bce86c4163a3 Initial revision
kono
parents:
diff changeset
667 "pop", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
668 #define FLLISW 14
bce86c4163a3 Initial revision
kono
parents:
diff changeset
669 "list", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
670 #define FLHELP 15
bce86c4163a3 Initial revision
kono
parents:
diff changeset
671 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
672
bce86c4163a3 Initial revision
kono
parents:
diff changeset
673 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
674 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
675
bce86c4163a3 Initial revision
kono
parents:
diff changeset
676 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
677
bce86c4163a3 Initial revision
kono
parents:
diff changeset
678 foldcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
679 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
680 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
681 int fastsw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
682 headersw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
683 packsw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
684 hole,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
685 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
686 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
687 *folder = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
688 *msg = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
689 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
690 **vec = args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
691
bce86c4163a3 Initial revision
kono
parents:
diff changeset
692 if (args == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
693 goto fast;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
694
bce86c4163a3 Initial revision
kono
parents:
diff changeset
695 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
696 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
697 switch (smatch (++cp, foldswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
698 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
699 ambigsw (cp, foldswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
700 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
701 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
702 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
703 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
704 case FLHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
705 (void) sprintf (buf, "%s [+folder] [msg] [switches]",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
706 cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
707 help (buf, foldswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
708 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
709
bce86c4163a3 Initial revision
kono
parents:
diff changeset
710 case FLALSW: /* not implemented */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
711 case FLRCSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
712 case FLNRCSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
713 case FLTLSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
714 case FLNTLSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
715 case FLPRSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
716 case FLPUSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
717 case FLPOSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
718 case FLLISW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
719 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
720
bce86c4163a3 Initial revision
kono
parents:
diff changeset
721 case FLFASW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
722 fastsw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
723 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
724 case FLNFASW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
725 fastsw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
726 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
727 case FLHDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
728 headersw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
729 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
730 case FLNHDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
731 headersw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
732 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
733 case FLPKSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
734 packsw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
735 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
736 case FLNPKSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
737 packsw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
738 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
739 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
740 if (*cp == '+' || *cp == '@')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
741 if (folder) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
742 advise (NULLCP, "only one folder at a time!\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
743 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
744 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
745 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
746 folder = fmsh ? path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
747 : cp + 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
748 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
749 if (msg) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
750 advise (NULLCP, "only one message at a time!\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
751 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
752 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
753 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
754 msg = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
755 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
756
bce86c4163a3 Initial revision
kono
parents:
diff changeset
757 if (folder) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
758 if (*folder == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
759 advise (NULLCP, "null folder names are not permitted");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
760 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
761 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
762 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
763 if (access (m_maildir (folder), 04) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
764 advise (folder, "unable to read");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
765 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
766 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
767 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
768 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
769 (void) strcpy (buf, folder);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
770 if (expand (buf) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
771 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
772 folder = buf;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
773 if (access (folder, 04) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
774 advise (folder, "unable to read");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
775 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
776 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
777 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
778 m_reset ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
779
bce86c4163a3 Initial revision
kono
parents:
diff changeset
780 if (fmsh)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
781 fsetup (folder);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
782 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
783 setup (folder);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
784 readids (0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
785 display_info (0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
786 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
787
bce86c4163a3 Initial revision
kono
parents:
diff changeset
788 if (msg) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
789 if (!m_convert (mp, msg))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
790 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
791 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
792
bce86c4163a3 Initial revision
kono
parents:
diff changeset
793 if (mp -> numsel > 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
794 advise (NULLCP, "only one message at a time!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
795 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
796 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
797 m_setcur (mp, mp -> hghsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
798 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
799
bce86c4163a3 Initial revision
kono
parents:
diff changeset
800 if (packsw) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
801 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
802 forkcmd (vec, cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
803 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
804 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
805
bce86c4163a3 Initial revision
kono
parents:
diff changeset
806 if (mp -> lowmsg > 1 && (mp = m_remsg (mp, 1, mp -> hghmsg)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
807 adios (NULLCP, "unable to allocate folder storage");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
808 for (msgnum = mp -> lowmsg, hole = 1; msgnum <= mp -> hghmsg; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
809 if (mp -> msgstats[msgnum] & EXISTS) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
810 if (msgnum != hole) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
811 Msgs[hole].m_bboard_id = Msgs[msgnum].m_bboard_id;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
812 Msgs[hole].m_top = Msgs[msgnum].m_top;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
813 Msgs[hole].m_start = Msgs[msgnum].m_start;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
814 Msgs[hole].m_stop = Msgs[msgnum].m_stop;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
815 Msgs[hole].m_scanl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
816 if (Msgs[msgnum].m_scanl) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
817 free (Msgs[msgnum].m_scanl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
818 Msgs[msgnum].m_scanl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
819 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
820 mp -> msgstats[hole] = mp -> msgstats[msgnum];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
821 if (mp -> curmsg == msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
822 m_setcur (mp, hole);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
823 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
824 hole++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
825 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
826 if (mp -> nummsg > 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
827 mp -> lowmsg = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
828 mp -> hghmsg = hole - 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
829 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
830 mp -> msgflags |= MODIFIED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
831 modified++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
832 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
833
bce86c4163a3 Initial revision
kono
parents:
diff changeset
834 fast: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
835 if (fastsw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
836 printf ("%s\n", fmsh ? fmsh : mp -> foldpath);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
837 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
838 if (headersw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
839 printf ("\t\tFolder %*s# of messages (%*srange%*s); cur%*smsg\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
840 DMAXFOLDER, "", DMAXFOLDER - 2, "", DMAXFOLDER - 2, "",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
841 DMAXFOLDER - 2, "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
842 printf (args ? "%22s " : "%s ", fmsh ? fmsh : mp -> foldpath);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
843 if (mp -> hghmsg == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
844 printf ("has no messages%*s",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
845 mp -> msgflags & OTHERS ? DMAXFOLDER * 2 + 4 : 0, "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
846 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
847 printf ("has %*d message%s (%*d-%*d)",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
848 DMAXFOLDER, mp -> nummsg, mp -> nummsg != 1 ? "s" : "",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
849 DMAXFOLDER, mp -> lowmsg, DMAXFOLDER, mp -> hghmsg);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
850 if (mp -> curmsg >= mp -> lowmsg
bce86c4163a3 Initial revision
kono
parents:
diff changeset
851 && mp -> curmsg <= mp -> hghmsg)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
852 printf ("; cur=%*d", DMAXFOLDER, mp -> curmsg);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
853 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
854 printf (".\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
855 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
856 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
857
bce86c4163a3 Initial revision
kono
parents:
diff changeset
858 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
859
bce86c4163a3 Initial revision
kono
parents:
diff changeset
860 #ifndef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
861 #define MIMEminc(a) (a)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
862 #else /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
863 #define MIMEminc(a) 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
864 #endif /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
865
bce86c4163a3 Initial revision
kono
parents:
diff changeset
866 static struct swit forwswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
867 #define FOANSW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
868 "annotate", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
869 #define FONANSW 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
870 "noannotate", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
871 #define FODFSW 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
872 "draftfolder +folder", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
873 #define FODMSW 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
874 "draftmessage msg", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
875 #define FONDFSW 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
876 "nodraftfolder", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
877 #define FOEDTSW 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
878 "editor editor", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
879 #define FONEDSW 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
880 "noedit", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
881 #define FOFTRSW 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
882 "filter filterfile", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
883 #define FOFRMSW 8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
884 "form formfile", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
885 #define FOFTSW 9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
886 "format", 5,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
887 #define FONFTSW 10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
888 "noformat", 7,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
889 #define FOINSW 11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
890 "inplace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
891 #define FONINSW 12
bce86c4163a3 Initial revision
kono
parents:
diff changeset
892 "noinplace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
893 #define FOMISW 13
bce86c4163a3 Initial revision
kono
parents:
diff changeset
894 "mime", MIMEminc(-4),
bce86c4163a3 Initial revision
kono
parents:
diff changeset
895 #define FONMISW 14
bce86c4163a3 Initial revision
kono
parents:
diff changeset
896 "nomime", MIMEminc(-6),
bce86c4163a3 Initial revision
kono
parents:
diff changeset
897 #define FOWHTSW 15
bce86c4163a3 Initial revision
kono
parents:
diff changeset
898 "whatnowproc program", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
899 #define FONWTSW 16
bce86c4163a3 Initial revision
kono
parents:
diff changeset
900 "nowhatnow", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
901 #define FOHELP 17
bce86c4163a3 Initial revision
kono
parents:
diff changeset
902 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
903
bce86c4163a3 Initial revision
kono
parents:
diff changeset
904 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
905 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
906
bce86c4163a3 Initial revision
kono
parents:
diff changeset
907 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
908
bce86c4163a3 Initial revision
kono
parents:
diff changeset
909 forwcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
910 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
911 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
912 int msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
913 vecp = 1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
914 mime = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
915 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
916 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
917 *filter = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
918 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
919 *msgs[MAXARGS],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
920 *vec[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
921 char *mktemp ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
922
bce86c4163a3 Initial revision
kono
parents:
diff changeset
923 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
924 forkcmd (args, cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
925 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
926 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
927
bce86c4163a3 Initial revision
kono
parents:
diff changeset
928 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
929 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
930 switch (smatch (++cp, forwswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
931 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
932 ambigsw (cp, forwswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
933 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
934 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
935 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
936 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
937 case FOHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
938 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
939 help (buf, forwswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
940 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
941
bce86c4163a3 Initial revision
kono
parents:
diff changeset
942 case FOANSW: /* not implemented */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
943 case FONANSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
944 case FOINSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
945 case FONINSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
946 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
947
bce86c4163a3 Initial revision
kono
parents:
diff changeset
948 case FOMISW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
949 #ifdef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
950 mime = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
951 filter = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
952 #endif /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
953 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
954 case FONMISW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
955 mime = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
956 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
957
bce86c4163a3 Initial revision
kono
parents:
diff changeset
958 case FONDFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
959 case FONEDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
960 case FONWTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
961 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
962 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
963
bce86c4163a3 Initial revision
kono
parents:
diff changeset
964 case FOEDTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
965 case FOFRMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
966 case FODFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
967 case FODMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
968 case FOWHTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
969 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
970 if (!(cp = *args++) || *cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
971 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
972 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
973 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
974 vec[vecp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
975 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
976 case FOFTRSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
977 if (!(filter = *args++) || *filter == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
978 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
979 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
980 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
981 mime = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
982 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
983 case FOFTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
984 if (access (filter = myfilter, 04) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
985 advise (filter, "unable to read default filter file");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
986 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
987 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
988 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
989 case FONFTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
990 filter = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
991 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
992 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
993 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
994 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
995 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
996 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
997 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
998 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
999 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1000
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1001 /* foil search of .mh_profile */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1002 (void) sprintf (buf, "%sXXXXXX", invo_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1003 vec[0] = (char *)mktemp (buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1004 vec[vecp++] = "-file";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1005 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1006 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1007 msgs[msgp++] = "cur";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1008 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1009 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1010 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1011 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1012
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1013 if (filter) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1014 (void) strcpy (buf, filter);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1015 if (expand (buf) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1016 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1017 if (access (filter = getcpy (libpath (buf)), 04) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1018 advise (filter, "unable to read");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1019 free (filter);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1020 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1021 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1022 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1023 forw (cmd_name, filter, vecp, vec, mime);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1024 m_setcur (mp, mp -> hghsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1025 if (filter)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1026 free (filter);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1027 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1028
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1029 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1030
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1031 static forw (proc, filter, vecp, vec, mime)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1032 int vecp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1033 mime;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1034 char *proc,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1035 *filter,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1036 **vec;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1037 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1038 int i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1039 child_id,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1040 msgnum,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1041 msgcnt;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1042 char tmpfil[80],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1043 *args[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1044 FILE *out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1045 #ifdef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1046 int nedit = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1047 char *ed = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1048 #endif /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1049
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1050 (void) strcpy (tmpfil, m_tmpfil (invo_name));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1051 interrupted = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1052 if (filter)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1053 switch (child_id = fork ()) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1054 case NOTOK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1055 advise ("fork", "unable to");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1056 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1057
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1058 case OK: /* "trust me" */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1059 if (freopen (tmpfil, "w", stdout) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1060 fprintf (stderr, "unable to create ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1061 perror (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1062 _exit (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1063 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1064 args[0] = r1bindex (mhlproc, '/');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1065 i = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1066 args[i++] = "-forwall";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1067 args[i++] = "-form";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1068 args[i++] = filter;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1069 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1070 if (mp -> msgstats[msgnum] & SELECTED)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1071 args[i++] = getcpy (m_name (msgnum));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1072 args[i] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1073 (void) mhlsbr (i, args, mhl_action);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1074 m_eomsbr ((int (*) ()) 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1075 (void) fclose (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1076 _exit (0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1077
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1078 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1079 if (pidXwait (child_id, NULLCP))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1080 interrupted++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1081 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1082 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1083 #ifdef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1084 else if (mime) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1085 int isdf = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1086 len,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1087 nwhat = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1088 #define INITIAL_PREFIX "----- =_aaaaaaaaaa"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1089 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1090 *form = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1091 buffer[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1092 prefix[sizeof INITIAL_PREFIX];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1093 FILE *zp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1094
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1095 proc = whatnowproc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1096 for (vecp = 1; cp = vec[vecp++]; )
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1097 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1098 switch (smatch (++cp, forwswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1099 case FOEDTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1100 ed = vec[vecp++];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1101 nedit = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1102 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1103 case FONEDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1104 nedit++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1105 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1106
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1107 case FOFRMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1108 form = vec[vecp++];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1109 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1110
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1111 case FOWHTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1112 proc = vec[vecp++];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1113 nwhat = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1114 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1115 case FONWTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1116 nwhat++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1117 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1118
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1119 /* ignore -draftfolder / -draftmessage / -nodraftfolder */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1120 case FODFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1121 case FODMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1122 vecp++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1123 case FONDFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1124 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1125 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1126 (void) strcpy (tmpfil, m_draft (NULLCP, NULLCP, NOUSE, &isdf));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1127 if (!ed && !(ed = m_find ("editor")))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1128 ed = sysed;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1129
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1130 (void) strcpy (prefix, INITIAL_PREFIX);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1131 cp = index (prefix, 'a');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1132 len = strlen (prefix);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1133
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1134 for (;;) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1135 int hit = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1136 long pos;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1137
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1138 for (msgnum = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1139 msgnum <= mp -> hghsel && !interrupted && !hit;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1140 msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1141 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1142 zp = msh_ready (msgnum, 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1143 if (!fmsh)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1144 pos = ftell (zp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1145 while (fgets (buffer, sizeof buffer, zp) != NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1146 && !fmsh
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1147 && pos < Msgs[msgnum].m_stop) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1148 register char *pp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1149
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1150 if (buffer[0] != '-' || buffer[1] != '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1151 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1152
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1153 for (pp = buffer + strlen (buffer) - 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1154 pp >= buffer;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1155 pp--)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1156 if (!isspace (*pp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1157 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1158 *pp++ = '\0';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1159
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1160 if (strncmp (buffer + 2, prefix, len))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1161 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1162
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1163 hit = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1164 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1165 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1166 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1167
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1168 if (!hit)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1169 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1170
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1171 if (*cp < 'z')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1172 (*cp)++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1173 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1174 if (*++cp == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1175 advise (NULLCP,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1176 "unable to determine unique delimiter string?!?");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1177 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1178 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1179 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1180 (*cp)++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1181 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1182
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1183 if ((out = fopen (tmpfil, "w")) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1184 advise (tmpfil, "unable to create temporary file");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1185 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1186 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1187 (void) chmod (tmpfil, m_gmprot ());
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1188
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1189 fprintf (out, "%s: %s\n", VRSN_FIELD, VRSN_VALUE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1190 fprintf (out, "%s: multipart/digest; boundary=\"%s\"\n", TYPE_FIELD,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1191 prefix);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1192
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1193 if (!(zp = fopen (libpath (form ? form : forwcomps), "r"))) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1194 if (form)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1195 advise (form, "unable to open form file");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1196 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1197 advise (forwcomps, "unable to open default components file");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1198 (void) fclose (out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1199 (void) unlink (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1200 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1201 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1202 while (fgets (buffer, sizeof buffer, zp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1203 (void) fputs (buffer, out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1204 (void) fclose (zp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1205
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1206 for (msgnum = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1207 msgnum <= mp -> hghsel && !interrupted;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1208 msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1209 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1210 fprintf (out, "\n--%s\n%s: message/rfc822\n\n", prefix,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1211 TYPE_FIELD);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1212
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1213 copy_message (msgnum, out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1214 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1215 fprintf (out, "\n--%s--\n", prefix);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1216
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1217 (void) fclose (out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1218 if (nwhat)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1219 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1220 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1221 #endif /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1222 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1223 if ((out = fopen (tmpfil, "w")) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1224 advise (tmpfil, "unable to create temporary file");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1225 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1226 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1227
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1228 msgcnt = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1229 for (msgnum = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1230 msgnum <= mp -> hghsel && !interrupted;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1231 msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1232 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1233 fprintf (out, "\n\n-------");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1234 if (msgnum == mp -> lowsel)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1235 fprintf (out, " Forwarded Message%s",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1236 mp -> numsel > 1 ? "s" : "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1237 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1238 fprintf (out, " Message %d", msgcnt);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1239 fprintf (out, "\n\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1240 copy_digest (msgnum, out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1241 msgcnt++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1242 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1243
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1244 fprintf (out, "\n\n------- End of Forwarded Message%s\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1245 mp -> numsel > 1 ? "s" : "");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1246 (void) fclose (out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1247 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1248
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1249 (void) fflush (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1250 if (!interrupted)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1251 switch (child_id = fork ()) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1252 case NOTOK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1253 advise ("fork", "unable to");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1254 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1255
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1256 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1257 closefds (3);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1258 (void) signal (SIGINT, istat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1259 (void) signal (SIGQUIT, qstat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1260
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1261 #ifdef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1262 if (mime) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1263 vecp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1264 vec[vecp++] = r1bindex (proc, '/');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1265 (void) m_putenv ("mhdraft", tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1266 (void) unputenv ("mhfolder");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1267 (void) unputenv ("mhaltmsg");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1268 (void) m_putenv ("mhdist", "0");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1269 if (nedit)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1270 (void) unputenv ("mheditor");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1271 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1272 (void) m_putenv ("mheditor", ed);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1273 (void) m_putenv ("mhuse", "0");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1274 (void) unputenv ("mhmessages");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1275 (void) unputenv ("mhannotate");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1276 (void) unputenv ("mhinplace");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1277 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1278 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1279 #endif /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1280
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1281 vec[vecp++] = tmpfil;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1282 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1283
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1284 execvp (proc, vec);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1285 fprintf (stderr, "unable to exec ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1286 perror (proc);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1287 _exit (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1288
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1289 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1290 (void) pidXwait (child_id, NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1291 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1292 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1293
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1294 #ifdef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1295 if (!mime)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1296 #endif /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1297 (void) unlink (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1298 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1299
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1300 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1301
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1302 static char *hlpmsg[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1303 "The %s program emulates many of the commands found in the Rand MH",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1304 "system. Instead of operating on MH folders, commands to %s concern",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1305 "a single file.",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1306 "",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1307 "To see the list of commands available, just type a ``?'' followed by",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1308 "the RETURN key. To find out what switches each command takes, type",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1309 "the name of the command followed by ``-help''. To leave %s, use the",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1310 "``quit'' command.",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1311 "",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1312 "Although a lot of MH commands are found in %s, not all are fully",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1313 "implemented. %s will always recognize all legal switches for a",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1314 "given command though, and will let you know when you ask for an",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1315 "option that it is unable to perform.",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1316 "",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1317 "Running %s is fun, but using MH from your shell is far superior.",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1318 "After you have familiarized yourself with the MH style by using %s,",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1319 "you should try using MH from the shell. You can still use %s for",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1320 "message files that aren't in MH format, such as BBoard files.",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1321 NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1322 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1323
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1324
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1325 /* ARGSUSED */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1326
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1327 helpcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1328 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1329 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1330 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1331
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1332 for (i = 0; hlpmsg[i]; i++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1333 printf (hlpmsg[i], invo_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1334 (void) putchar ('\n');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1335 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1336 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1337
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1338 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1339
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1340 static struct swit markswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1341 #define MADDSW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1342 "add", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1343 #define MDELSW 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1344 "delete", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1345 #define MLSTSW 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1346 "list", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1347 #define MSEQSW 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1348 "sequence name", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1349 #define MPUBSW 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1350 "public", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1351 #define MNPUBSW 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1352 "nopublic", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1353 #define MZERSW 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1354 "zero", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1355 #define MNZERSW 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1356 "nozero", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1357 #define MHELP 8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1358 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1359 #define MDBUGSW 9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1360 "debug", -5,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1361
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1362 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1363 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1364
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1365 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1366
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1367 markcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1368 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1369 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1370 int addsw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1371 deletesw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1372 debugsw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1373 listsw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1374 zerosw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1375 seqp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1376 msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1377 i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1378 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1379 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1380 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1381 *seqs[NATTRS + 1],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1382 *msgs[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1383
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1384 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1385 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1386 switch (smatch (++cp, markswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1387 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1388 ambigsw (cp, markswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1389 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1390 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1391 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1392 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1393 case MHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1394 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1395 help (buf, markswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1396 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1397
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1398 case MADDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1399 addsw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1400 deletesw = listsw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1401 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1402 case MDELSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1403 deletesw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1404 addsw = listsw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1405 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1406 case MLSTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1407 listsw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1408 addsw = deletesw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1409 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1410
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1411 case MSEQSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1412 if (!(cp = *args++) || *cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1413 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1414 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1415 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1416 if (seqp < NATTRS)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1417 seqs[seqp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1418 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1419 advise (NULLCP, "only %d sequences allowed!", NATTRS);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1420 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1421 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1422 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1423
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1424 case MPUBSW: /* not implemented */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1425 case MNPUBSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1426 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1427
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1428 case MDBUGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1429 debugsw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1430 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1431
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1432 case MZERSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1433 zerosw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1434 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1435 case MNZERSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1436 zerosw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1437 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1438 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1439 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1440 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1441 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1442 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1443 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1444 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1445 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1446
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1447 if (!addsw && !deletesw && !listsw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1448 if (seqp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1449 addsw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1450 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1451 if (debugsw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1452 listsw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1453 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1454 seqs[seqp++] = "unseen";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1455 deletesw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1456 zerosw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1457 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1458 msgs[msgp++] = "all";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1459 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1460
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1461 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1462 msgs[msgp++] = listsw ? "all" :"cur";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1463 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1464 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1465 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1466
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1467 if (debugsw) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1468 printf ("invo_name=%s mypath=%s defpath=%s\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1469 invo_name, mypath, defpath);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1470 printf ("ctxpath=%s context flags=%s\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1471 ctxpath, sprintb (buf, (unsigned) ctxflags, DBITS));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1472 printf ("foldpath=%s flags=%s\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1473 mp -> foldpath,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1474 sprintb (buf, (unsigned) mp -> msgflags, FBITS));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1475 printf ("hghmsg=%d lowmsg=%d nummsg=%d curmsg=%d\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1476 mp -> hghmsg, mp -> lowmsg, mp -> nummsg, mp -> curmsg);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1477 printf ("lowsel=%d hghsel=%d numsel=%d\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1478 mp -> lowsel, mp -> hghsel, mp -> numsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1479 #ifndef MTR
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1480 printf ("lowoff=%d hghoff=%d\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1481 mp -> lowoff, mp -> hghoff);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1482 #else /* MTR */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1483 printf ("lowoff=%d hghoff=%d msgbase=0x%x msgstats=0x%x\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1484 mp -> lowoff, mp -> hghoff, mp -> msgbase, mp -> msgstats);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1485 #endif /* MTR */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1486 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1487
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1488 if (seqp == 0 && (addsw || deletesw)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1489 advise (NULLCP, "-%s requires at least one -sequence argument",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1490 addsw ? "add" : "delete");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1491 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1492 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1493 seqs[seqp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1494
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1495 if (addsw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1496 for (seqp = 0; seqs[seqp]; seqp++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1497 if (zerosw && !m_seqnew (mp, seqs[seqp], 0))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1498 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1499 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1500 if (mp -> msgstats[msgnum] & SELECTED)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1501 if (!m_seqadd (mp, seqs[seqp], msgnum, 0))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1502 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1503 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1504
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1505 if (deletesw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1506 for (seqp = 0; seqs[seqp]; seqp++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1507 if (zerosw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1508 for (msgnum = mp -> lowmsg; msgnum <= mp -> hghmsg; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1509 if (mp -> msgstats[msgnum] & EXISTS)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1510 if (!m_seqadd (mp, seqs[seqp], msgnum, 0))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1511 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1512 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1513 if (mp -> msgstats[msgnum] & SELECTED)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1514 if (!m_seqdel (mp, seqs[seqp], msgnum))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1515 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1516 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1517
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1518 if (listsw) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1519 int bits = FFATTRSLOT;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1520
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1521 #define empty(s) ((s) ? (s) : "")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1522 if (seqp == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1523 for (i = 0; mp -> msgattrs[i]; i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1524 printf ("%s%s: %s\n", mp -> msgattrs[i],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1525 mp -> attrstats & (1 << (bits + i))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1526 ? " (private)" : "",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1527 empty(m_seq (mp, mp -> msgattrs[i])));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1528 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1529 for (seqp = 0; seqs[seqp]; seqp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1530 printf ("%s%s: %s\n", seqs[seqp],
12
441a2190cfae Lion fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
1531 empty(m_seq (mp, seqs[seqp])),"");
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1532 #undef empty
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1533
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1534 interrupted = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1535 if (debugsw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1536 for (msgnum = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1537 msgnum <= mp -> hghsel && !interrupted;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1538 msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1539 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1540 printf ("%*d: id=%d top=%d start=%ld stop=%ld %s\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1541 DMAXFOLDER, msgnum,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1542 Msgs[msgnum].m_bboard_id, Msgs[msgnum].m_top,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1543 Msgs[msgnum].m_start, Msgs[msgnum].m_stop,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1544 sprintb (buf, (unsigned) mp -> msgstats[msgnum],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1545 m_seqbits (mp)));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1546 if (Msgs[msgnum].m_scanl)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1547 printf ("%s", Msgs[msgnum].m_scanl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1548 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1549 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1550 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1551
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1552 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1553
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1554 #ifdef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1555 static struct swit mhnswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1556 #define MHNAUTOSW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1557 "auto", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1558 #define MHNNAUTOSW 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1559 "noauto", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1560 #define MHNDEBUGSW 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1561 "debug", -5,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1562 #define MHNEBCDICSW 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1563 "ebcdicsafe", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1564 #define MHNNEBCDICSW 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1565 "noebcdicsafe", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1566 #define MHNFORMSW 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1567 "form formfile", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1568 #define MHNHEADSW 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1569 "headers", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1570 #define MHNNHEADSW 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1571 "noheaders", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1572 #define MHNLISTSW 8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1573 "list", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1574 #define MHNNLISTSW 9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1575 "nolist", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1576 #define MHNPARTSW 10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1577 "part number", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1578 #define MHNSIZESW 11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1579 "realsize", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1580 #define MHNNSIZESW 12
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1581 "norealsize", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1582 #define MHNRFC934SW 13
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1583 "rfc934mode", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1584 #define MHNNRFC934SW 14
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1585 "norfc934mode", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1586 #define MHNSERIALSW 15
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1587 "serialonly", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1588 #define MHNNSERIALSW 16
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1589 "noserialonly", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1590 #define MHNSHOWSW 17
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1591 "show", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1592 #define MHNNSHOWSW 18
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1593 "noshow", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1594 #define MHNSTORESW 19
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1595 "store", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1596 #define MHNNSTORESW 20
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1597 "nostore", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1598 #define MHNTYPESW 21
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1599 "type content", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1600 #define MHNVERBSW 22
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1601 "verbose", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1602 #define MHNNVERBSW 23
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1603 "noverbose", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1604 #define MHNHELPSW 24
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1605 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1606 #define MHNPROGSW 25
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1607 "moreproc program", -4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1608 #define MHNNPROGSW 26
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1609 "nomoreproc", -3,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1610 #define MHNLENSW 27
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1611 "length lines", -4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1612 #define MHNWIDSW 28
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1613 "width columns", -4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1614
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1615 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1616 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1617
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1618 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1619
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1620 mhncmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1621 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1622 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1623 int msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1624 vecp = 1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1625 i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1626 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1627 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1628 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1629 *msgs[MAXARGS],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1630 *vec[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1631
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1632 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1633 forkcmd (args, cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1634 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1635 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1636
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1637 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1638 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1639 switch (smatch (++cp, mhnswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1640 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1641 ambigsw (cp, mhnswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1642 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1643 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1644 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1645 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1646 case MHNHELPSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1647 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1648 help (buf, mhnswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1649 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1650
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1651 case MHNAUTOSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1652 case MHNNAUTOSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1653 case MHNDEBUGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1654 case MHNEBCDICSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1655 case MHNNEBCDICSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1656 case MHNHEADSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1657 case MHNNHEADSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1658 case MHNLISTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1659 case MHNNLISTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1660 case MHNSIZESW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1661 case MHNNSIZESW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1662 case MHNRFC934SW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1663 case MHNNRFC934SW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1664 case MHNSERIALSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1665 case MHNNSERIALSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1666 case MHNSHOWSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1667 case MHNNSHOWSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1668 case MHNSTORESW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1669 case MHNNSTORESW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1670 case MHNVERBSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1671 case MHNNVERBSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1672 case MHNNPROGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1673 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1674 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1675
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1676 case MHNFORMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1677 case MHNPARTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1678 case MHNTYPESW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1679 case MHNPROGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1680 case MHNLENSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1681 case MHNWIDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1682 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1683 if (!(cp = *args++) || *cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1684 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1685 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1686 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1687 vec[vecp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1688 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1689 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1690 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1691 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1692 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1693 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1694 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1695 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1696 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1697
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1698 vec[0] = cmd_name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1699 vec[vecp++] = "-file";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1700 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1701 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1702 msgs[msgp++] = "cur";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1703 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1704 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1705 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1706 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1707
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1708 interrupted = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1709 for (msgnum = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1710 msgnum <= mp -> hghsel && !interrupted;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1711 msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1712 if (mp -> msgstats[msgnum] & SELECTED)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1713 if (process (msgnum, cmd_name, vecp, vec)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1714 mp -> msgstats[msgnum] &= ~SELECTED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1715 mp -> numsel--;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1716 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1717
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1718 m_setcur (mp, mp -> hghsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1719 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1720
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1721 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1722
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1723 #endif /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1724 static struct swit packswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1725 #define PAFISW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1726 "file name", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1727
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1728 #define PAHELP 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1729 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1730
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1731 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1732 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1733
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1734 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1735
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1736 packcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1737 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1738 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1739 int msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1740 md,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1741 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1742 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1743 *file = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1744 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1745 *msgs[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1746 struct stat st;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1747
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1748 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1749 forkcmd (args, cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1750 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1751 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1752
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1753 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1754 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1755 switch (smatch (++cp, packswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1756 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1757 ambigsw (cp, packswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1758 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1759 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1760 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1761 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1762 case PAHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1763 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1764 help (buf, packswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1765 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1766
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1767 case PAFISW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1768 if (!(file = *args++) || *file == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1769 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1770 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1771 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1772 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1773 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1774 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1775 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1776 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1777 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1778 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1779 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1780 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1781
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1782 if (!file)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1783 file = "./msgbox";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1784 file = path (file, TFILE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1785 if (stat (file, &st) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1786 if (errno != ENOENT) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1787 advise (file, "error on file");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1788 goto done_pack;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1789 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1790 md = getanswer (cp = concat ("Create file \"", file, "\"? ", NULLCP));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1791 free (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1792 if (!md)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1793 goto done_pack;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1794 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1795
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1796 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1797 msgs[msgp++] = "all";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1798 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1799 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1800 goto done_pack;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1801 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1802
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1803 if ((md = mbx_open (file, getuid (), getgid (), m_gmprot ())) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1804 advise (file, "unable to open");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1805 goto done_pack;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1806 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1807 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1808 if (mp -> msgstats[msgnum] & SELECTED)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1809 if (pack (file, md, msgnum) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1810 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1811 (void) mbx_close (file, md);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1812
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1813 if (mp -> hghsel != mp -> curmsg)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1814 m_setcur (mp, mp -> lowsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1815
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1816 done_pack: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1817 free (file);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1818 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1819
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1820 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1821
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1822 int pack (mailbox, md, msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1823 char *mailbox;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1824 int md,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1825 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1826 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1827 register FILE *zp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1828
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1829 if (Msgs[msgnum].m_bboard_id == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1830 (void) readid (msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1831
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1832 zp = msh_ready (msgnum, 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1833 return mbx_write (mailbox, md, zp, Msgs[msgnum].m_bboard_id,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1834 0L, ftell (zp), Msgs[msgnum].m_stop, 1, 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1835 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1836
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1837 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1838
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1839 int packhak (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1840 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1841 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1842 int result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1843 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1844 *file = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1845
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1846 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1847 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1848 switch (smatch (++cp, packswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1849 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1850 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1851 case PAHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1852 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1853
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1854 case PAFISW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1855 if (!(file = *args++) || *file == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1856 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1857 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1858 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1859 if (*cp == '+' || *cp == '@')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1860 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1861 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1862
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1863 file = path (file ? file : "./msgbox", TFILE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1864 result = access (file, 0) == NOTOK ? OK : NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1865 free (file);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1866
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1867 return result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1868 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1869
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1870 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1871
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1872 static struct swit pickswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1873 #define PIANSW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1874 "and", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1875 #define PIORSW 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1876 "or", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1877 #define PINTSW 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1878 "not", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1879 #define PILBSW 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1880 "lbrace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1881 #define PIRBSW 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1882 "rbrace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1883
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1884 #define PICCSW 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1885 "cc pattern", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1886 #define PIDASW 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1887 "date pattern", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1888 #define PIFRSW 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1889 "from pattern", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1890 #define PISESW 8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1891 "search pattern", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1892 #define PISUSW 9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1893 "subject pattern", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1894 #define PITOSW 10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1895 "to pattern", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1896 #define PIOTSW 11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1897 "-othercomponent pattern", 15,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1898 #define PIAFSW 12
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1899 "after date", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1900 #define PIBFSW 13
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1901 "before date", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1902 #define PIDFSW 14
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1903 "datefield field", 5,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1904 #define PISQSW 15
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1905 "sequence name", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1906 #define PIPUSW 16
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1907 "public", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1908 #define PINPUSW 17
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1909 "nopublic", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1910 #define PIZRSW 18
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1911 "zero", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1912 #define PINZRSW 19
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1913 "nozero", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1914 #define PILISW 20
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1915 "list", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1916 #define PINLISW 21
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1917 "nolist", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1918 #define PIHELP 22
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1919 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1920
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1921 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1922 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1923
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1924 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1925
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1926 pickcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1927 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1928 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1929 int zerosw = 1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1930 msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1931 seqp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1932 vecp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1933 hi,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1934 lo,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1935 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1936 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1937 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1938 *msgs[MAXARGS],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1939 *seqs[NATTRS],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1940 *vec[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1941 register FILE *zp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1942
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1943 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1944 if (*cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1945 if (*++cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1946 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1947 goto pattern;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1948 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1949 switch (smatch (cp, pickswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1950 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1951 ambigsw (cp, pickswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1952 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1953 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1954 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1955 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1956 case PIHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1957 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1958 help (buf, pickswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1959 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1960
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1961 case PICCSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1962 case PIDASW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1963 case PIFRSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1964 case PISUSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1965 case PITOSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1966 case PIDFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1967 case PIAFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1968 case PIBFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1969 case PISESW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1970 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1971 pattern: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1972 if (!(cp = *args++)) {/* allow -xyz arguments */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1973 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1974 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1975 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1976 vec[vecp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1977 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1978 case PIOTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1979 advise (NULLCP, "internal error!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1980 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1981 case PIANSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1982 case PIORSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1983 case PINTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1984 case PILBSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1985 case PIRBSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1986 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1987 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1988
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1989 case PISQSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1990 if (!(cp = *args++) || *cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1991 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1992 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1993 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1994 if (seqp < NATTRS)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1995 seqs[seqp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1996 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1997 advise (NULLCP, "only %d sequences allowed!", NATTRS);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1998 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1999 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2000 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2001 case PIZRSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2002 zerosw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2003 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2004 case PINZRSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2005 zerosw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2006 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2007
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2008 case PIPUSW: /* not implemented */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2009 case PINPUSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2010 case PILISW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2011 case PINLISW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2012 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2013 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2014 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2015 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2016 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2017 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2018 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2019 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2020 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2021 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2022 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2023
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2024 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2025 msgs[msgp++] = "all";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2026 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2027 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2028 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2029 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2030
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2031 interrupted = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2032 if (!pcompile (vec, NULLCP))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2033 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2034
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2035 lo = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2036 hi = mp -> hghsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2037
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2038 for (msgnum = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2039 msgnum <= mp -> hghsel && !interrupted;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2040 msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2041 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2042 zp = msh_ready (msgnum, 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2043 if (pmatches (zp, msgnum, fmsh ? 0L : Msgs[msgnum].m_start,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2044 fmsh ? 0L : Msgs[msgnum].m_stop)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2045 if (msgnum < lo)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2046 lo = msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2047 if (msgnum > hi)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2048 hi = msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2049 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2050 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2051 mp -> msgstats[msgnum] &= ~SELECTED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2052 mp -> numsel--;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2053 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2054 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2055
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2056 if (interrupted)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2057 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2058
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2059 mp -> lowsel = lo;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2060 mp -> hghsel = hi;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2061
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2062 if (mp -> numsel <= 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2063 advise (NULLCP, "no messages match specification");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2064 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2065 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2066
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2067 seqs[seqp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2068 for (seqp = 0; seqs[seqp]; seqp++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2069 if (zerosw && !m_seqnew (mp, seqs[seqp], 0))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2070 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2071 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2072 if (mp -> msgstats[msgnum] & SELECTED)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2073 if (!m_seqadd (mp, seqs[seqp], msgnum, 0))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2074 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2075 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2076
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2077 printf ("%d hit%s\n", mp -> numsel, mp -> numsel == 1 ? "" : "s");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2078 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2079
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2080 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2081
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2082 static struct swit replswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2083 #define REANSW 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2084 "annotate", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2085 #define RENANSW 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2086 "noannotate", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2087 #define RECCSW 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2088 "cc type", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2089 #define RENCCSW 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2090 "nocc type", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2091 #define REDFSW 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2092 "draftfolder +folder", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2093 #define REDMSW 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2094 "draftmessage msg", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2095 #define RENDFSW 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2096 "nodraftfolder", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2097 #define REEDTSW 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2098 "editor editor", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2099 #define RENEDSW 8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2100 "noedit", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2101 #define REFCCSW 9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2102 "fcc +folder", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2103 #define REFLTSW 10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2104 "filter filterfile", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2105 #define REFRMSW 11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2106 "form formfile", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2107 #define REINSW 12
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2108 "inplace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2109 #define RENINSW 13
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2110 "noinplace", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2111 #define REQUSW 14
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2112 "query", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2113 #define RENQUSW 15
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2114 "noquery", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2115 #define REWHTSW 16
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2116 "whatnowproc program", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2117 #define RENWTSW 17
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2118 "nowhatnow", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2119 #define REWIDSW 19
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2120 "width columns", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2121 #define REHELP 20
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2122 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2123
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2124 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2125 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2126
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2127 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2128
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2129 replcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2130 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2131 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2132 int vecp = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2133 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2134 *msg = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2135 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2136 *vec[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2137
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2138 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2139 forkcmd (args, cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2140 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2141 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2142
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2143 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2144 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2145 switch (smatch (++cp, replswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2146 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2147 ambigsw (cp, replswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2148 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2149 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2150 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2151 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2152 case REHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2153 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2154 help (buf, replswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2155 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2156
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2157 case REANSW: /* not implemented */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2158 case RENANSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2159 case REINSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2160 case RENINSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2161 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2162
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2163 case REQUSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2164 case RENQUSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2165 case RENDFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2166 case RENEDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2167 case RENWTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2168 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2169 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2170
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2171 case RECCSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2172 case RENCCSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2173 case REEDTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2174 case REFCCSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2175 case REFLTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2176 case REFRMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2177 case REWIDSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2178 case REDFSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2179 case REDMSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2180 case REWHTSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2181 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2182 if (!(cp = *args++) || *cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2183 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2184 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2185 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2186 vec[vecp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2187 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2188 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2189 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2190 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2191 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2192 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2193 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2194 if (msg) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2195 advise (NULLCP, "only one message at a time!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2196 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2197 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2198 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2199 msg = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2200 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2201
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2202 vec[0] = cmd_name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2203 vec[vecp++] = "-file";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2204 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2205 if (!msg)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2206 msg = "cur";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2207 if (!m_convert (mp, msg))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2208 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2209 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2210
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2211 if (mp -> numsel > 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2212 advise (NULLCP, "only one message at a time!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2213 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2214 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2215 (void) process (mp -> hghsel, cmd_name, vecp, vec);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2216 m_setcur (mp, mp -> hghsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2217 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2218
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2219 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2220
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2221 static struct swit rmmswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2222 #define RMHELP 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2223 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2224
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2225 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2226 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2227
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2228 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2229
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2230 rmmcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2231 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2232 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2233 int msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2234 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2235 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2236 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2237 *msgs[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2238
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2239 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2240 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2241 switch (smatch (++cp, rmmswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2242 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2243 ambigsw (cp, rmmswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2244 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2245 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2246 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2247 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2248 case RMHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2249 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2250 help (buf, rmmswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2251 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2252 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2253 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2254 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2255 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2256 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2257 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2258 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2259 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2260
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2261 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2262 msgs[msgp++] = "cur";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2263 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2264 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2265 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2266 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2267
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2268 rmm ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2269 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2270
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2271 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2272
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2273 #ifdef MH_PLUS
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2274 struct msgs *opntrashf ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2275 struct msgs *trash ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2276 #endif /* MH_PLUS */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2277
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2278 static rmm () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2279 register int msgnum,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2280 vecp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2281 register char *cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2282 char buffer[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2283 *vec[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2284
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2285 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2286 if (rmmproc) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2287 if (mp -> numsel > MAXARGS - 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2288 advise (NULLCP, "more than %d messages for %s exec",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2289 MAXARGS - 1, rmmproc);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2290 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2291 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2292 vecp = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2293 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2294 if (mp -> msgstats[msgnum] & SELECTED)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2295 vec[vecp++] = getcpy (m_name (msgnum));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2296 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2297 forkcmd (vec, rmmproc);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2298 for (vecp = 0; vec[vecp]; vecp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2299 free (vec[vecp]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2300 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2301 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2302 #ifdef MH_PLUS
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2303 int rmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2304 char *tfold;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2305 struct msgs *tmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2306
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2307 if ((tfold = m_find ("Trash-Folder")))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2308 tmp = opntrashf (tfold, m_maildir (fmsh), &rmp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2309 #endif /* MH_PLUS */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2310 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2311 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2312 #ifdef MH_PLUS
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2313 if (tfold) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2314 tmp = trash (msgnum, tmp, rmp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2315 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2316 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2317 #endif /* MH_PLUS */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2318 (void) strcpy (buffer, m_backup (cp = m_name (msgnum)));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2319 if (rename (cp, buffer) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2320 admonish (buffer, "unable to rename %s to", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2321 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2322 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2323 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2324
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2325 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2326 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2327 mp -> msgstats[msgnum] |= DELETED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2328 mp -> msgstats[msgnum] &= ~EXISTS;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2329 #ifdef MPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2330 #ifdef BPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2331 if (pmsh && pop_dele (msgnum) != OK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2332 fprintf (stderr, "%s", response);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2333 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2334 #endif /* MPOP */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2335 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2336
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2337 if ((mp -> nummsg -= mp -> numsel) <= 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2338 if (fmsh)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2339 admonish (NULLCP, "no messages remaining in +%s", fmsh);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2340 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2341 admonish (NULLCP, "no messages remaining in %s", mp -> foldpath);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2342 mp -> lowmsg = mp -> hghmsg = mp -> nummsg = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2343 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2344 if (mp -> lowsel == mp -> lowmsg) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2345 for (msgnum = mp -> lowmsg + 1; msgnum <= mp -> hghmsg; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2346 if (mp -> msgstats[msgnum] & EXISTS)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2347 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2348 mp -> lowmsg = msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2349 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2350 if (mp -> hghsel == mp -> hghmsg) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2351 for (msgnum = mp -> hghmsg - 1; msgnum >= mp -> lowmsg; msgnum--)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2352 if (mp -> msgstats[msgnum] & EXISTS)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2353 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2354 mp -> hghmsg = msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2355 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2356
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2357 mp -> msgflags |= MODIFIED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2358 modified++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2359 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2360
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2361 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2362
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2363 #ifdef MH_PLUS
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2364 struct msgs *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2365 opntrashf (tfold, cwd, rmp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2366 char *tfold,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2367 *cwd;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2368 int *rmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2369 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2370 int len;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2371 char *tf,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2372 *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2373 *trashdir;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2374 struct stat st;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2375 struct msgs *tmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2376
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2377 tf = path (*tfold == '+' || *tfold == '@' ? tfold + 1 : tfold,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2378 *tfold != '@' ? TFOLDER : TSUBCWF);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2379 if (*tfold == '@' && *(tfold + 1) != '/') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2380 cp = tfold + 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2381 while (*cp) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2382 if (strncmp (cp, "./", 2) == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2383 cp += 2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2384 else if (strncmp (cp, "../", 3) == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2385 cp += 3;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2386 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2387 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2388 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2389 len = strlen(cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2390 if (strncmp(cwd + strlen(cwd) - len, cp, len) == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2391 trashdir = ".";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2392 tf = path ("./", TSUBCWF);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2393 } else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2394 trashdir = m_maildir (tf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2395 } else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2396 trashdir = m_maildir (tf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2397 if (strcmp(cwd, trashdir) == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2398 trashdir = ".";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2399 *rmp = strcmp(trashdir, ".") ? 0 : 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2400
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2401 if (stat (trashdir, &st) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2402 if (errno != ENOENT)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2403 adios (trashdir, "error on folder");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2404 cp = concat ("Create folder \"", trashdir, "\"? ", NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2405 if (!getanswer (cp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2406 done (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2407 free (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2408 if (!makedir (trashdir))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2409 adios (NULLCP, "unable to create folder %s", trashdir);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2410 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2411 if (chdir (trashdir) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2412 adios (trashdir, "unable to change directory to");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2413 if (!(tmp = m_gmsg (tf)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2414 adios (NULLCP, "unable to read folder %s", tfold);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2415 tmp -> curmsg = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2416 chdir (cwd);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2417 return tmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2418 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2419
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2420 struct msgs *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2421 trash (msgnum, tmp, rmp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2422 struct msgs *tmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2423 int msgnum,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2424 rmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2425 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2426 int newnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2427 char *msg,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2428 newmsg[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2429
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2430 if (rmp) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2431 msg = m_name (msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2432 if (unlink (msg) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2433 admonish (msg, "unable to unlink");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2434 return tmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2435 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2436
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2437 if (tmp -> hghmsg >= tmp -> hghoff)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2438 if (!(tmp = m_remsg (tmp, 0, tmp -> hghoff + MAXFOLDER)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2439 adios (NULLCP, "unable to allocate folder storage");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2440
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2441 newnum = ++tmp -> hghmsg;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2442 tmp -> nummsg++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2443 tmp -> msgstats[newnum] |= EXISTS | SELECTED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2444 if (tmp -> lowmsg == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2445 tmp -> lowmsg = newnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2446 if (tmp -> lowsel == 0 || newnum < tmp -> lowsel)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2447 tmp -> lowsel = newnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2448 if (newnum > tmp -> hghsel)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2449 tmp -> hghsel = newnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2450
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2451 (void) sprintf (newmsg, "%s/%s", tmp -> foldpath, m_name (newnum));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2452 msg = m_name (msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2453 if (rename (msg, newmsg) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2454 int in, out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2455 struct stat st;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2456 if (stat (newmsg, &st) != NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2457 admonish (newmsg, "unable to rename %s to", msg);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2458 return tmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2459 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2460 if ((in = open(msg, 0)) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2461 admonish (msg, "unable to open message");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2462 return tmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2463 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2464 (void) fstat (in, &st);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2465 if ((out = creat (newmsg, (int) st.st_mode & 0777)) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2466 admonish (newmsg, "unable to create");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2467 (void) close (in);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2468 return tmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2469 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2470 cpydata (in, out, msg, newmsg);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2471 (void) close (in);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2472 (void) close (out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2473 if (unlink (msg) == NOTOK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2474 admonish (msg, "unable to unlink");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2475 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2476 return tmp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2477 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2478 #endif /* MH_PLUS */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2479
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2480
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2481 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2482
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2483 static struct swit scanswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2484 #define SCCLR 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2485 "clear", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2486 #define SCNCLR 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2487 "noclear", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2488 #define SCFORM 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2489 "form formatfile", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2490 #define SCFMT 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2491 "format string", 5,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2492 #define SCHEAD 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2493 "header", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2494 #define SCNHEAD 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2495 "noheader", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2496 #define SCWID 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2497 "width columns", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2498 #define SCHELP 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2499 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2500
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2501 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2502 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2503
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2504 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2505
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2506 scancmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2507 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2508 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2509 #define equiv(a,b) (a ? b && !strcmp (a, b) : !b)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2510
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2511 int clearsw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2512 headersw = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2513 width = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2514 msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2515 msgnum,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2516 optim,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2517 state;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2518 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2519 *form = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2520 *format = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2521 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2522 *nfs,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2523 *msgs[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2524 register FILE *zp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2525 #ifdef MPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2526 #ifdef BPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2527 static int p_optim = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2528 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2529 #endif /* MPOP */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2530 static int s_optim = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2531 static char *s_form = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2532 *s_format = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2533
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2534 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2535 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2536 switch (smatch (++cp, scanswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2537 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2538 ambigsw (cp, scanswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2539 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2540 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2541 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2542 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2543 case SCHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2544 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2545 help (buf, scanswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2546 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2547
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2548 case SCCLR:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2549 clearsw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2550 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2551 case SCNCLR:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2552 clearsw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2553 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2554 case SCHEAD:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2555 headersw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2556 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2557 case SCNHEAD:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2558 headersw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2559 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2560 case SCFORM:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2561 if (!(form = *args++) || *form == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2562 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2563 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2564 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2565 format = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2566 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2567 case SCFMT:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2568 if (!(format = *args++) || *format == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2569 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2570 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2571 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2572 form = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2573 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2574 case SCWID:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2575 if (!(cp = *args++) || *cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2576 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2577 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2578 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2579 width = atoi (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2580 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2581 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2582 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2583 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2584 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2585 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2586 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2587 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2588 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2589
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2590 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2591 msgs[msgp++] = "all";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2592 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2593 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2594 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2595 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2596
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2597 nfs = new_fs (form, format, FORMAT);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2598 if (scanl) { /* force scansbr to (re)compile format */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2599 (void) free (scanl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2600 scanl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2601 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2602
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2603 if (s_optim == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2604 s_optim = optim = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2605 s_form = form ? getcpy (form) : NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2606 s_format = format ? getcpy (format) : NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2607
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2608 #ifdef MPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2609 #ifdef BPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2610 if (pmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2611 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2612 char *dp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2613 *ep,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2614 *fp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2615
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2616 if (width == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2617 width = sc_width ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2618
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2619 for (dp = nfs, i = 0; *dp; dp++, i++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2620 if (*dp == '\\' || *dp == '"' || *dp == '\n')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2621 i++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2622 i++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2623 if ((ep = malloc ((unsigned) i)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2624 adios (NULLCP, "out of memory");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2625 for (dp = nfs, fp = ep; *dp; dp++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2626 if (*dp == '\n') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2627 *fp++ = '\\', *fp++ = 'n';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2628 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2629 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2630 if (*dp == '"' || *dp == '\\')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2631 *fp++ = '\\';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2632 *fp++ = *dp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2633 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2634 *fp = '\0';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2635
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2636 if (pop_command ("XTND SCAN %d \"%s\"", width, ep) == OK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2637 p_optim = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2638
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2639 free (ep);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2640 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2641 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2642 #endif /* MPOP */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2643 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2644 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2645 optim = equiv (s_form, form) && equiv (s_format, format);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2646
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2647 #ifdef MPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2648 #ifdef BPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2649 if (p_optim && optim) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2650 for (msgnum = mp -> lowmsg; msgnum <= mp -> hghmsg; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2651 if (!(mp -> msgstats[msgnum] & SELECTED) || Msgs[msgnum].m_scanl)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2652 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2653 if (msgnum > mp -> hghmsg && pop_command ("LIST") == OK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2654 fprintf (stderr, "Stand-by...");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2655 fflush (stderr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2656
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2657 for (;;) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2658 int size;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2659
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2660 switch (pop_multiline ()) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2661 case NOTOK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2662 fprintf (stderr, "%s", response);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2663 /* and fall... */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2664 case DONE:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2665 fprintf (stderr,"\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2666 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2667
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2668 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2669 if (sscanf (response, "%d %d", &msgnum, &size) == 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2670 && mp -> lowmsg <= msgnum
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2671 && msgnum <= mp -> hghmsg
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2672 && (cp = index (response, '#'))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2673 && *++cp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2674 Msgs[msgnum].m_scanl = concat (cp, "\n", NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2675 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2676 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2677 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2678 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2679 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2680 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2681 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2682 #endif /* MPOP */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2683
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2684 interrupted = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2685 for (msgnum = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2686 msgnum <= mp -> hghsel && !interrupted;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2687 msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2688 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2689 if (optim && Msgs[msgnum].m_scanl)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2690 printf ("%s", Msgs[msgnum].m_scanl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2691 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2692 #ifdef MPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2693 #ifdef BPOP
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2694 if (p_optim
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2695 && optim
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2696 && (mp -> msgstats[msgnum] & VIRTUAL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2697 && pop_command ("LIST %d", msgnum) == OK
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2698 && (cp = index (response, '#'))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2699 && *++cp) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2700 Msgs[msgnum].m_scanl = concat (cp, "\n", NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2701 printf ("%s", Msgs[msgnum].m_scanl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2702 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2703 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2704 #endif
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2705 #endif /* MPOP */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2706
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2707 zp = msh_ready (msgnum, 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2708 switch (state = scan (zp, msgnum, 0, nfs, width,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2709 msgnum == mp -> curmsg,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2710 mp -> msgstats[msgnum] & UNSEEN, /* ?? */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2711 headersw, fmsh ? fmsh : mp -> foldpath,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2712 fmsh ? 0L : (long) (Msgs[msgnum].m_stop - Msgs[msgnum].m_start),
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2713 1)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2714 case SCNMSG:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2715 case SCNENC:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2716 case SCNERR:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2717 if (optim)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2718 Msgs[msgnum].m_scanl = getcpy (scanl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2719 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2720
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2721 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2722 advise (NULLCP, "scan() botch (%d)", state);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2723 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2724
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2725 case SCNEOF:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2726 printf ("%*d empty\n", DMAXFOLDER, msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2727 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2728 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2729 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2730 headersw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2731 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2732
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2733 if (clearsw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2734 clear_screen ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2735 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2736
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2737 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2738
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2739 static struct swit showswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2740 #define SHDRAFT 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2741 "draft", 5,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2742 #define SHFORM 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2743 "form formfile", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2744 #define SHPROG 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2745 "moreproc program", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2746 #define SHNPROG 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2747 "nomoreproc", 3,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2748 #define SHLEN 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2749 "length lines", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2750 #define SHWID 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2751 "width columns", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2752 #define SHSHOW 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2753 "showproc program", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2754 #define SHNSHOW 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2755 "noshowproc", 3,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2756 #define SHHEAD 8
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2757 "header", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2758 #define SHNHEAD 9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2759 "noheader", 3,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2760 #define SHHELP 10
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2761 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2762
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2763 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2764 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2765
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2766 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2767
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2768 showcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2769 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2770 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2771 int headersw = 1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2772 nshow = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2773 msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2774 vecp = 1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2775 mhl = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2776 seen = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2777 mode = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2778 i,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2779 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2780 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2781 *proc = showproc,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2782 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2783 *msgs[MAXARGS],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2784 *vec[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2785
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2786 if (uleq (cmd_name, "next"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2787 mode = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2788 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2789 if (uleq (cmd_name, "prev"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2790 mode = -1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2791 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2792 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2793 switch (i = smatch (++cp, showswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2794 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2795 ambigsw (cp, showswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2796 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2797 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2798 case SHNPROG:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2799 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2800 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2801 case SHHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2802 (void) sprintf (buf,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2803 "%s %s[switches] [switches for showproc]",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2804 cmd_name, mode ? NULL : "[msgs] ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2805 help (buf, showswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2806 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2807
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2808 case SHFORM:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2809 case SHPROG:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2810 case SHLEN:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2811 case SHWID:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2812 vec[vecp++] = --cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2813 if (!(cp = *args++) || *cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2814 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2815 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2816 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2817 vec[vecp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2818 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2819 case SHHEAD:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2820 headersw++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2821 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2822 case SHNHEAD:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2823 headersw = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2824 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2825 case SHSHOW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2826 if (!(proc = *args++) || *proc == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2827 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2828 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2829 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2830 nshow = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2831 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2832 case SHNSHOW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2833 nshow++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2834 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2835
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2836 case SHDRAFT:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2837 advise (NULLCP, "sorry, -%s not allowed!", showswit[i].sw);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2838 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2839 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2840 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2841 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2842 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2843 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2844 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2845 if (mode) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2846 fprintf (stderr,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2847 "usage: %s [switches] [switches for showproc]\n",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2848 cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2849 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2850 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2851 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2852 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2853 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2854 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2855
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2856 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2857 msgs[msgp++] = mode > 0 ? "next" : mode < 0 ? "prev" : "cur";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2858 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2859 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2860 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2861 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2862
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2863 #ifdef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2864 if (!nshow && !getenv ("NOMHNPROC"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2865 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2866 if ((mp -> msgstats[msgnum] & SELECTED) && nontext (msgnum)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2867 proc = (cp = m_find ("mhnproc")) ? cp : "mhn";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2868 vec[vecp++] = "-show";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2869 vec[vecp++] = "-file";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2870 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2871 goto finish;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2872 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2873 #endif /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2874
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2875 if (nshow)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2876 proc = "cat";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2877 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2878 if (strcmp (showproc, "mhl") == 0) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2879 proc = mhlproc;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2880 mhl++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2881 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2882
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2883 finish: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2884 seen = m_seqflag (mp, "unseen");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2885 vec[0] = r1bindex (proc, '/');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2886 if (mhl) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2887 msgp = vecp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2888 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2889 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2890 vec[vecp++] = getcpy (m_name (msgnum));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2891 if (seen)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2892 (void) m_seqdel (mp, "unseen", msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2893 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2894 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2895 if (mp -> numsel == 1 && headersw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2896 show (mp -> lowsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2897 (void) mhlsbr (vecp, vec, mhl_action);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2898 if (!fmsh)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2899 m_eomsbr ((int (*)()) 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2900 while (msgp < vecp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2901 free (vec[msgp++]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2902 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2903 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2904 interrupted = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2905 for (msgnum = mp -> lowsel;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2906 msgnum <= mp -> hghsel && !interrupted;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2907 msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2908 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2909 switch (ask (msgnum)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2910 case NOTOK: /* QUIT */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2911 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2912
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2913 case OK: /* INTR */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2914 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2915
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2916 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2917 if (mp -> numsel == 1 && headersw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2918 show (msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2919 if (nshow)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2920 copy_message (msgnum, stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2921 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2922 (void) process (msgnum, proc, vecp, vec);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2923
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2924 if (seen)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2925 (void) m_seqdel (mp, "unseen", msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2926 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2927 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2928 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2929 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2930 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2931
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2932 m_setcur (mp, mp -> hghsel);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2933 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2934
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2935 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2936
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2937 static show (msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2938 int msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2939 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2940 if (Msgs[msgnum].m_bboard_id == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2941 (void) readid (msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2942
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2943 printf ("(Message %d", msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2944 if (Msgs[msgnum].m_bboard_id > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2945 printf (", %s: %d", BBoard_ID, Msgs[msgnum].m_bboard_id);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2946 printf (")\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2947 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2948
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2949
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2950 /* ARGSUSED */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2951
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2952 static int eom_action (c)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2953 int c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2954 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2955 return (ftell (mhlfp) >= Msgs[mhlnum].m_stop);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2956 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2957
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2958
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2959 static FP mhl_action (name)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2960 char *name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2961 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2962 int msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2963
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2964 if ((msgnum = m_atoi (name)) < mp -> lowmsg
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2965 || msgnum > mp -> hghmsg
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2966 || !(mp -> msgstats[msgnum] & EXISTS))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2967 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2968 mhlnum = msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2969
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2970 mhlfp = msh_ready (msgnum, 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2971 if (!fmsh)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2972 m_eomsbr (eom_action);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2973
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2974 return mhlfp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2975 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2976
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2977
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2978 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2979
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2980 static ask (msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2981 int msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2982 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2983 char buf[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2984
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2985 if (mp -> numsel == 1 || !interactive || redirected)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2986 return DONE;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2987
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2988 if (SOprintf ("Press <return> to list \"%d\"...", msgnum)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2989 if (mp -> lowsel != msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2990 printf ("\n\n\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2991 printf ("Press <return> to list \"%d\"...", msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2992 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2993 (void) fflush (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2994 buf[0] = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2995 #if !defined(BSD42) && !defined(SVR4)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2996 (void) read (fileno (stdout), buf, sizeof buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2997 #else /* BSD42 || SVR4 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2998 switch (setjmp (sigenv)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2999 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3000 should_intr = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3001 (void) read (fileno (stdout), buf, sizeof buf);/* fall... */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3002
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3003 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3004 should_intr = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3005 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3006 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3007 #endif /* BSD42 || SVR4 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3008 if (index (buf, '\n') == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3009 (void) putchar ('\n');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3010
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3011 if (told_to_quit) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3012 told_to_quit = interrupted = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3013 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3014 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3015 if (interrupted) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3016 interrupted = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3017 return OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3018 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3019
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3020 return DONE;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3021 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3022
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3023 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3024
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3025 #ifdef MIME
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3026 #include "../h/mhn.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3027
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3028
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3029 static int nontext (msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3030 int msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3031 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3032 int result,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3033 state;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3034 register char *bp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3035 *dp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3036 char *chset,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3037 *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3038 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3039 name[NAMESZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3040 FILE *fp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3041
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3042 if (Msgs[msgnum].m_flags & MHNCHK)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3043 return (Msgs[msgnum].m_flags & MHNYES);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3044 Msgs[msgnum].m_flags |= MHNCHK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3045
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3046 fp = msh_ready (msgnum, 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3047
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3048 if (!(chset = getenv ("MM_CHARSET")))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3049 #ifdef JAPAN
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3050 chset = "iso-2022-jp";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3051 #else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3052 chset = "us-ascii";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3053 #endif /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3054
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3055 for (state = FLD;;)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3056 switch (state = m_getfld (state, name, buf, sizeof buf, fp)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3057 case FLD:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3058 case FLDPLUS:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3059 case FLDEOF:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3060 if (uleq (name, TYPE_FIELD)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3061 int passno;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3062 char c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3063
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3064 cp = add (buf, NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3065 while (state == FLDPLUS) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3066 state = m_getfld (state, name, buf, sizeof buf, fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3067 cp = add (buf, cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3068 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3069 bp = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3070 passno = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3071
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3072 again: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3073 for (; isspace (*bp); bp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3074 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3075 if (*bp == '(') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3076 int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3077
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3078 for (bp++, i = 0;;) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3079 switch (*bp++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3080 case '\0':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3081 invalid: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3082 result = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3083 goto out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3084 case '\\':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3085 if (*bp++ == '\0')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3086 goto invalid;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3087 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3088 case '(':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3089 i++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3090 /* and fall... */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3091 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3092 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3093 case ')':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3094 if (--i < 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3095 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3096 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3097 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3098 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3099 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3100 for (; isspace (*bp); bp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3101 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3102 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3103 if (passno == 2) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3104 if (*bp != '/')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3105 goto invalid;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3106 bp++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3107 passno = 3;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3108 goto again;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3109 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3110 else if (passno == 4) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3111 if (*bp != ';')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3112 goto invalid;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3113 bp++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3114 passno = 5;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3115 goto again;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3116 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3117 for (dp = bp; istoken (*dp); dp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3118 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3119 c = *dp, *dp = '\0';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3120 if (*bp == '\0')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3121 goto invalid;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3122 if (passno == 3) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3123 if (result = !uleq (bp, "plain"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3124 goto out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3125 *dp = c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3126 bp = dp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3127 passno = 4;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3128 goto again;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3129 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3130 if (passno > 1) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3131 if (result = !uprf (bp, "charset"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3132 goto invalid;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3133 *dp = c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3134 while (isspace (*dp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3135 dp++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3136 if (*dp++ != '=')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3137 goto invalid;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3138 while (isspace (*dp))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3139 dp++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3140 if (*dp == '"') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3141 if (bp = index (++dp, '"'))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3142 *bp = '\0';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3143 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3144 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3145 for (bp = dp; *bp; bp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3146 if (!istoken (*bp)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3147 *bp = '\0';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3148 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3149 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3150 if ((result = !uleq (dp, chset))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3151 && uleq (dp, "us-ascii")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3152 #ifdef JAPAN
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3153 && (uleq (chset, "iso-2022-jp")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3154 || uleq (chset, "euc-jp")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3155 || uleq (chset, "shift_jis")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3156 || (uprf (chset, "iso-8859-")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3157 && m_atoi (chset+9) >= 1)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3158 #else /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3159 /* && uleq (chset, "iso-8859-1")) */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3160 && uprf (chset, "iso-8859-")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3161 && m_atoi (chset+9) >= 1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3162 #endif /* JAPAN */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3163 result = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3164 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3165 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3166 if (!(result = !uleq (bp, "text"))) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3167 *dp = c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3168 bp = dp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3169 passno = 2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3170 goto again;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3171 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3172
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3173 out: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3174 free (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3175
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3176 if (result) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3177 Msgs[msgnum].m_flags |= MHNYES;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3178 return result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3179 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3180 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3181 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3182 if (uleq (name, ENCODING_FIELD)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3183 cp = add (buf, NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3184 while (state == FLDPLUS) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3185 state = m_getfld (state, name, buf, sizeof buf, fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3186 cp = add (buf, cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3187 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3188 for (bp = cp; isspace (*bp); bp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3189 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3190 for (dp = bp; istoken (*dp); dp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3191 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3192 *dp = '\0';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3193 result = !uleq (bp, "7bit")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3194 && !uleq (bp, "8bit")
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3195 && !uleq (bp, "binary");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3196
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3197 free (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3198 if (result) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3199 Msgs[msgnum].m_flags |= MHNYES;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3200 return result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3201 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3202 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3203 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3204 while (state == FLDPLUS)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3205 state = m_getfld (state, name, buf, sizeof buf, fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3206 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3207
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3208 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3209 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3210 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3211 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3212 #endif /* MIME */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3213
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3214 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3215
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3216 static struct swit sortswit[] = {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3217 #define SODATE 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3218 "datefield field", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3219 #define SOSUBJ 1
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3220 "textfield field", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3221 #define SONSUBJ 2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3222 "notextfield", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3223 #define SOLIMT 3
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3224 "limit days", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3225 #define SONLIMT 4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3226 "nolimit", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3227 #define SOVERB 5
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3228 "verbose", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3229 #define SONVERB 6
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3230 "noverbose", 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3231 #define SOHELP 7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3232 "help", 4,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3233
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3234 NULL, 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3235 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3236
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3237 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3238
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3239 sortcmd (args)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3240 char **args;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3241 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3242 int msgp = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3243 msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3244 char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3245 *datesw = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3246 *subjsw = NULL,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3247 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3248 *msgs[MAXARGS];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3249 struct tws tb,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3250 *tw;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3251
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3252 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3253 forkcmd (args, cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3254 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3255 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3256
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3257 while (cp = *args++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3258 if (*cp == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3259 switch (smatch (++cp, sortswit)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3260 case AMBIGSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3261 ambigsw (cp, sortswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3262 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3263 case UNKWNSW:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3264 fprintf (stderr, "-%s unknown\n", cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3265 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3266 case SOHELP:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3267 (void) sprintf (buf, "%s [msgs] [switches]", cmd_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3268 help (buf, sortswit);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3269 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3270
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3271 case SODATE:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3272 if (datesw) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3273 advise (NULLCP, "only one date field at a time!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3274 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3275 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3276 if (!(datesw = *args++) || *datesw == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3277 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3278 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3279 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3280 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3281
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3282 case SOSUBJ:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3283 if (subjsw) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3284 advise (NULLCP, "only one text field at a time!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3285 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3286 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3287 if (!(subjsw = *args++) || *subjsw == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3288 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3289 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3290 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3291 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3292 case SONSUBJ:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3293 subjsw = (char *)0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3294 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3295
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3296 case SOLIMT: /* too hard */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3297 if (!(cp = *args++) || *cp == '-') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3298 advise (NULLCP, "missing argument to %s", args[-2]);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3299 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3300 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3301 case SONLIMT:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3302 case SOVERB: /* not implemented */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3303 case SONVERB:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3304 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3305 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3306 if (*cp == '+' || *cp == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3307 advise (NULLCP, "sorry, no folders allowed!");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3308 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3309 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3310 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3311 msgs[msgp++] = cp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3312 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3313
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3314 if (!msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3315 msgs[msgp++] = "all";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3316 if (!datesw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3317 datesw = "Date";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3318 for (msgnum = 0; msgnum < msgp; msgnum++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3319 if (!m_convert (mp, msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3320 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3321 m_setseq (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3322
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3323 twscopy (&tb, dtwstime ());
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3324
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3325 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3326 if (Msgs[msgnum].m_scanl) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3327 free (Msgs[msgnum].m_scanl);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3328 Msgs[msgnum].m_scanl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3329 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3330 if (mp -> msgstats[msgnum] & SELECTED) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3331 if (getws (datesw, subjsw, msgnum, &Msgs[msgnum]))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3332 twscopy (&Msgs[msgnum].m_tb,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3333 msgnum != mp -> lowsel ? &Msgs[msgnum - 1].m_tb : &tb);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3334 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3335 else /* m_scaln is already NULL */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3336 twscopy (&Msgs[msgnum].m_tb, &tb);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3337 Msgs[msgnum].m_stats = mp -> msgstats[msgnum];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3338 if (mp -> curmsg == msgnum)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3339 Msgs[msgnum].m_stats |= CUR;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3340 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3341
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3342 qsort ((char *) &Msgs[mp -> lowsel], mp -> hghsel - mp -> lowsel + 1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3343 sizeof (struct Msg),
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3344 subjsw ? subsort : msgsort);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3345
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3346 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3347 if (subjsw && Msgs[msgnum].m_scanl) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3348 free (Msgs[msgnum].m_scanl); /* from subjsort */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3349 Msgs[msgnum].m_scanl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3350 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3351 mp -> msgstats[msgnum] = Msgs[msgnum].m_stats & ~CUR;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3352 if (Msgs[msgnum].m_stats & CUR)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3353 m_setcur (mp, msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3354 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3355
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3356 mp -> msgflags |= MODIFIED;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3357 modified++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3358 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3359
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3360 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3361
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3362 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3363 * getws - parse message, and get date and subject if needed. We'll use
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3364 * the msgp->m_tb tws struct for the date, and overload the msgp->m_scanl
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3365 * field with our subject string.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3366 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3367 static int getws (datesw, subjsw, msgnum, msgp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3368 char *datesw,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3369 *subjsw;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3370 int msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3371 struct Msg *msgp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3372 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3373 int state,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3374 gotdate = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3375 char *bp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3376 buf[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3377 name[NAMESZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3378 struct tws *tw = (struct tws *)0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3379 register FILE *zp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3380
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3381 zp = msh_ready (msgnum, 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3382 for (state = FLD;;) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3383 switch (state = m_getfld (state, name, buf, sizeof buf, zp)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3384 case FLD:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3385 case FLDEOF:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3386 case FLDPLUS:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3387 if (uleq (name, datesw)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3388 bp = getcpy (buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3389 while (state == FLDPLUS) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3390 state = m_getfld (state, name, buf, sizeof buf, zp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3391 bp = add (buf, bp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3392 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3393 if ((tw = dparsetime (bp)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3394 admonish (NULLCP,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3395 "unable to parse %s field in message %d",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3396 datesw, msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3397 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3398 twscopy (&(msgp->m_tb), tw);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3399 free (bp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3400 if (!subjsw) /* not using this, or already done */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3401 break; /* all done! */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3402 gotdate++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3403 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3404 else if (subjsw && uleq(name, subjsw)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3405 bp = getcpy (buf);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3406 while (state == FLDPLUS) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3407 state = m_getfld (state, name, buf, sizeof buf, zp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3408 bp = add (buf, bp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3409 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3410 msgp->m_scanl = sosmash(subjsw, bp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3411 if (gotdate)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3412 break; /* date done so we're done */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3413 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3414 subjsw = (char *)0;/* subject done, need date */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3415 } else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3416 while (state == FLDPLUS) /* flush this one */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3417 state = m_getfld (state, name, buf, sizeof buf, zp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3418 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3419 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3420
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3421 case BODY:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3422 case BODYEOF:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3423 case FILEEOF:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3424 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3425
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3426 case LENERR:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3427 case FMTERR:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3428 admonish (NULLCP, "format error in message %d", msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3429 if (msgp->m_scanl) { /* this might need free'd */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3430 free (msgp->m_scanl); /* probably can't use subj anyway */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3431 msgp->m_scanl = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3432 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3433 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3434
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3435 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3436 adios (NULLCP, "internal error -- you lose");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3437 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3438 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3439 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3440 if (tw)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3441 return OK; /* not an error if subj not found */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3442
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3443 admonish (NULLCP, "no %s field in message %d", datesw, msgnum);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3444 return NOTOK; /* NOTOK means use some other date */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3445 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3446
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3447 /* sort routines */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3448
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3449 static int msgsort (a, b)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3450 struct Msg *a,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3451 *b;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3452 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3453 return twsort (&a -> m_tb, &b -> m_tb);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3454 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3455
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3456 static int subsort (a, b)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3457 struct Msg *a,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3458 *b;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3459 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3460 register int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3461
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3462 if (a->m_scanl && b->m_scanl)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3463 if (i = strcmp (a->m_scanl, b->m_scanl))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3464 return (i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3465
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3466 return twsort (&a -> m_tb, &b -> m_tb);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3467 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3468
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3469 /*
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3470 * try to make the subject "canonical": delete leading "re:", everything
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3471 * but letters & smash letters to lower case.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3472 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3473 static char *
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3474 sosmash (subj, s)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3475 char *subj;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3476 register char *s;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3477 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3478 register char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3479 *dp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3480 c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3481 if (s) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3482 cp = s;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3483 dp = s; /* dst pointer */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3484 if (uleq (subj, "subject"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3485 while (c = *cp) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3486 if (! isspace(c)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3487 if(uprf(cp, "re:"))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3488 cp += 2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3489 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3490 if (isalnum(c))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3491 *dp++ = isupper(c) ? tolower(c) : c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3492 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3493 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3494 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3495 cp++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3496 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3497 while (c = *cp++) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3498 if (isalnum(c))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3499 *dp++ = isupper(c) ? tolower(c) : c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3500
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3501 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3502 *dp = '\0';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3503 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3504 return s;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3505 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3506
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3507 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3508
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3509 static int process (msgnum, proc, vecp, vec)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3510 int msgnum,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3511 vecp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3512 char *proc,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3513 **vec;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3514 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3515 int child_id,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3516 status;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3517 char tmpfil[80];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3518 FILE *out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3519
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3520 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3521 (void) strcpy (tmpfil, m_name (msgnum));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3522 (void) m_delete (pfolder);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3523 m_replace (pfolder, fmsh);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3524 m_sync (mp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3525 m_update ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3526 goto ready;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3527 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3528
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3529 (void) strcpy (tmpfil, m_scratch ("", invo_name));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3530 if ((out = fopen (tmpfil, "w")) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3531 int olderr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3532 extern int errno;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3533 char newfil[80];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3534
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3535 olderr = errno;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3536 (void) strcpy (newfil, m_tmpfil (invo_name));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3537 if ((out = fopen (newfil, "w")) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3538 errno = olderr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3539 advise (tmpfil, "unable to create temporary file");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3540 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3541 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3542 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3543 (void) strcpy (tmpfil, newfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3544 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3545 copy_message (msgnum, out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3546 (void) fclose (out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3547
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3548 ready: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3549 (void) fflush (stdout);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3550 switch (child_id = fork ()) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3551 case NOTOK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3552 advise ("fork", "unable to");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3553 status = NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3554 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3555
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3556 case OK:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3557 closefds (3);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3558 (void) signal (SIGINT, istat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3559 (void) signal (SIGQUIT, qstat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3560
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3561 vec[vecp++] = tmpfil;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3562 vec[vecp] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3563
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3564 execvp (proc, vec);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3565 fprintf (stderr, "unable to exec ");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3566 perror (proc);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3567 _exit (1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3568
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3569 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3570 status = pidXwait (child_id, NULLCP);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3571 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3572 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3573
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3574 if (!fmsh)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3575 (void) unlink (tmpfil);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3576 return status;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3577 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3578
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3579 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3580
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3581 static copy_message (msgnum, out)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3582 int msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3583 FILE * out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3584 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3585 long pos;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3586 static char buffer[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3587 register FILE * zp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3588
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3589 zp = msh_ready (msgnum, 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3590 if (fmsh) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3591 while (fgets (buffer, sizeof buffer, zp) != NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3592 fputs (buffer, out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3593 if (interrupted && out == stdout)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3594 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3595 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3596 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3597 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3598 pos = ftell (zp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3599 while (fgets (buffer, sizeof buffer, zp) != NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3600 && pos < Msgs[msgnum].m_stop) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3601 fputs (buffer, out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3602 pos += (long) strlen (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3603 if (interrupted && out == stdout)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3604 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3605 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3606 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3607 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3608
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3609
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3610 static copy_digest (msgnum, out)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3611 int msgnum;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3612 FILE * out;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3613 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3614 char c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3615 long pos;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3616 static char buffer[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3617 register FILE *zp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3618
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3619 c = '\n';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3620 zp = msh_ready (msgnum, 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3621 if (!fmsh)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3622 pos = ftell (zp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3623 while (fgets (buffer, sizeof buffer, zp) != NULL
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3624 && !fmsh && pos < Msgs[msgnum].m_stop) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3625 if (c == '\n' && *buffer == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3626 (void) fputc (' ', out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3627 fputs (buffer, out);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3628 c = buffer[strlen (buffer) - 1];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3629 if (!fmsh)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3630 pos += (long) strlen (buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3631 if (interrupted && out == stdout)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3632 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3633 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3634 }