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