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