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