forked from theappleman/dmc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfilter.c
65 lines (62 loc) · 1.66 KB
/
filter.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* dmc - dynamic mail client
* See LICENSE file for copyright and license details.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
char b[1024], argv2[1024][1024], *ptr;
int edit = argc, filter = 1, value = 0, print = 0, i, j;
if (argc > 1) {
if (!strcmp (argv[1], "-h")) {
printf ("Usage: %s [-hv] [headers | :] [-e] [new headers] < mail\n", argv[0]);
return 1;
} else if (!strcmp (argv[1], "-v")) {
value = 1;
filter++;
}
for (i = filter; i < argc; i++)
if (!strcmp (argv[i], "-e"))
edit = i;
for (i = 0; i < argc; i++) {
strncpy (argv2[i], argv[i], 1023);
argv2[i][1023] = '\0';
}
}
memset (b, '\0', 1024);
/* Headers */
while (fgets (b, 1023, stdin) && b[0] != '\n')
if ((b[0] == ' ' || b[0] == '\t')) {
if (print) fputs (b, stdout);
} else for (i = filter; i < edit && argv[i]; i++)
if (!strncmp (b, argv[i], strlen(argv[i])) || argv[i][0] == ':') {
/* Edit/Remove Headers */
print = 1;
for (j = edit + 1; !value && j < argc && argv[j]; j++)
if ((ptr = strchr (argv[j], ':')) &&
!strncmp (b, argv[j], ptr - argv[j] + 1)) {
if (ptr[1] != '\0' && argv2[j][0])
puts (argv[j]);
argv2[j][0] = '\0';
print = 0;
break;
}
if (print) {
if (value && (ptr = strchr (b, ':')))
ptr += 2;
else ptr = b;
fputs (ptr, stdout);
}
break;
} else print = 0;
if (!value) {
/* New Headers */
for (i = edit + 1; i < argc; i++)
if (argv2[i][0]) puts (argv2[i]);
if (edit < argc) puts ("");
/* Body */
while ((argc < 2 || edit < argc) && fgets (b, 1023, stdin))
fputs (b, stdout);
}
return 0;
}