]> diplodocus.org Git - nmh/blob - docs/historical/SRI-NOSC/delete.c
Added start_test/finish_test to a bunch of tests.
[nmh] / docs / historical / SRI-NOSC / delete.c
1 /* formerly rmm */
2 #include "mh.h"
3
4 int vecp, *vec[MAXARGS], fout;
5 struct msgs *mp;
6 struct swit switches[] {
7 "all", -3, /* 0 */
8 "help", 4, /* 1 */
9 0, 0
10 };
11
12 main(argc, argv)
13 char *argv[];
14 {
15 char *folder, *nfolder, *maildir, *msgs[100], buf[32];
16 register int msgnum;
17 register char *cp, *sp;
18 int msgp;
19 char *ap, *inp;
20 char *arguments[50], **argp;
21
22 fout = dup(1);
23 #ifdef NEWS
24 m_news();
25 #endif
26 folder = msgp = 0;
27 vecp = 1;
28 inp = cp = argv[0];
29 while(*cp)
30 if(*cp++ == '/')
31 inp = cp;
32 ap = inp;
33 if((cp = m_find(ap)) != -1) {
34 ap = brkstring(cp = getcpy(cp), " ", "\n");
35 ap = copyip(ap, arguments);
36 } else
37 ap = arguments;
38 copyip(argv+1, ap);
39 argp = arguments;
40 while(cp = *argp++) {
41 if(*cp == '-')
42 switch(smatch(++cp, switches)) {
43 case -2:ambigsw(cp, switches); /* ambiguous */
44 goto leave;
45 /* unknown */
46 case -1:printf("-%s unknown\n", cp);
47 goto leave;
48 /* -all */
49 case 0: printf("\"-all\" changed to \"all\"\n");
50 goto leave;
51 /* -help */
52 case 1: help(concat( inp, " [+folder] [msgs] [switches]", 0),
53 switches);
54 goto leave;
55 }
56 if(*cp == '+') {
57 if(folder) {
58 printf("Only one folder at a time.\n");
59 goto leave;
60 } else
61 folder = cp + 1;
62 } else
63 msgs[msgp++] = cp;
64 }
65 if(!msgp)
66 msgs[msgp++] = "cur";
67 if(!folder)
68 folder = m_getfolder();
69 maildir = m_maildir(folder);
70 if(chdir(maildir) < 0) {
71 printf("Can't chdir to: "); flush();
72 perror(maildir);
73 goto leave;
74 }
75 if(!(mp = m_gmsg(folder))) {
76 printf("Can't read folder!?\n");
77 goto leave;
78 }
79 if(mp->hghmsg == 0) {
80 printf("No messages in \"%s\".\n", folder);
81 goto leave;
82 }
83 for(msgnum = 0; msgnum < msgp; msgnum++)
84 if(!m_convert(msgs[msgnum], UNDELETED, UNDELETED))
85 goto leave;
86 if(mp->numsel == 0) {
87 goto leave;
88 }
89 m_replace("folder", folder);
90 if((cp = m_find("delete-prog")) == -1) {
91 for(msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++)
92 if(mp->msgstats[msgnum] & SELECTED) {
93 sp = getcpy(m_name(msgnum));
94 cp = copy(sp, buf);
95 cp[1] = 0;
96 do
97 *cp = cp[-1];
98 while(--cp >= buf && *cp != '/');
99 *++cp = ','; /* backup convention */
100 unlink(buf);
101 if(link(sp, buf) == -1 || unlink(sp) == -1)
102 printf("Can't rename %s to %s.\n", sp, buf);
103 }
104 } else {
105 if(mp->numsel > MAXARGS-2) {
106 printf("More than %d messages for deletion-prog\n",MAXARGS-2);
107 goto leave;
108 }
109 for(msgnum= mp->lowsel; msgnum<= mp->hghsel; msgnum++)
110 if(mp->msgstats[msgnum]&SELECTED)
111 vec[vecp++] = getcpy(m_name(msgnum));
112 vec[vecp] = 0;
113 vec[0] = cp;
114 m_update();
115 flush();
116 execvsrh(vec);
117 printf("Can't exec deletion prog--"); flush();
118 perror(cp);
119 }
120 leave:
121 m_update();
122 flush();
123 }