annotate 3rdparty/packages/uucpbb/src/recvmail.c @ 2913:1c1600cc9f02

makefiles: Stop if a component fails to build The unconditional looping of subdirectories in the makefiles would just carry on even if one of them failed. To avoid that build errors go unnoticed, the build should stop on any error. For this, commands should be chained with "&&" and not ";" in makefile recipes.
author Tormod Volden <debian.tormod@gmail.com>
date Sun, 12 Jan 2014 01:32:45 +0100
parents 5ba8e711a1a3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1772
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1 /* recvmail.c This routine allows a user to read his/her mail.
5ba8e711a1a3 source added
boisy
parents:
diff changeset
2 Copyright (C) 1990, 1993 Rick Adams and Bob Billson
5ba8e711a1a3 source added
boisy
parents:
diff changeset
3
5ba8e711a1a3 source added
boisy
parents:
diff changeset
4 This file is part of the OS-9 UUCP package, UUCPbb.
5ba8e711a1a3 source added
boisy
parents:
diff changeset
5
5ba8e711a1a3 source added
boisy
parents:
diff changeset
6 This program is free software; you can redistribute it and/or modify
5ba8e711a1a3 source added
boisy
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
5ba8e711a1a3 source added
boisy
parents:
diff changeset
8 the Free Software Foundation; either version 2 of the License, or
5ba8e711a1a3 source added
boisy
parents:
diff changeset
9 (at your option) any later version.
5ba8e711a1a3 source added
boisy
parents:
diff changeset
10
5ba8e711a1a3 source added
boisy
parents:
diff changeset
11 This program is distributed in the hope that it will be useful,
5ba8e711a1a3 source added
boisy
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
5ba8e711a1a3 source added
boisy
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5ba8e711a1a3 source added
boisy
parents:
diff changeset
14 GNU General Public License for more details.
5ba8e711a1a3 source added
boisy
parents:
diff changeset
15
5ba8e711a1a3 source added
boisy
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
5ba8e711a1a3 source added
boisy
parents:
diff changeset
17 along with this program; if not, write to the Free Software
5ba8e711a1a3 source added
boisy
parents:
diff changeset
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
5ba8e711a1a3 source added
boisy
parents:
diff changeset
19
5ba8e711a1a3 source added
boisy
parents:
diff changeset
20 The author of UUCPbb, Bob Billson, can be contacted at:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
21 bob@kc2wz.bubble.org or uunet!kc2wz!bob or by snail mail:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
22 21 Bates Way, Westfield, NJ 07090
5ba8e711a1a3 source added
boisy
parents:
diff changeset
23 */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
24
5ba8e711a1a3 source added
boisy
parents:
diff changeset
25 /* Rewritten to support new spooled mail format. Mail is kept as separate
5ba8e711a1a3 source added
boisy
parents:
diff changeset
26 files in the directory pointed to by the parameter 'maildir' in the
5ba8e711a1a3 source added
boisy
parents:
diff changeset
27 /DD/SYS/UUCP/Parameters file. Each file is named 'mYYMMDDHHMMSS', where
5ba8e711a1a3 source added
boisy
parents:
diff changeset
28 'YYMMDDHHMMSS' is the date/time RMAIL processed the message --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
29
5ba8e711a1a3 source added
boisy
parents:
diff changeset
30 #include "uucp.h"
5ba8e711a1a3 source added
boisy
parents:
diff changeset
31 #include "mail.h"
5ba8e711a1a3 source added
boisy
parents:
diff changeset
32 #include <ctype.h>
5ba8e711a1a3 source added
boisy
parents:
diff changeset
33 #include <modes.h>
5ba8e711a1a3 source added
boisy
parents:
diff changeset
34 #include <direct.h> /* Added - BAS */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
35 #include <sgstat.h>
5ba8e711a1a3 source added
boisy
parents:
diff changeset
36 #ifndef _OSK
5ba8e711a1a3 source added
boisy
parents:
diff changeset
37 #include <os9.h>
5ba8e711a1a3 source added
boisy
parents:
diff changeset
38 #include "dir_6809.h"
5ba8e711a1a3 source added
boisy
parents:
diff changeset
39 #else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
40 #include <dir.h>
5ba8e711a1a3 source added
boisy
parents:
diff changeset
41 #endif
5ba8e711a1a3 source added
boisy
parents:
diff changeset
42
5ba8e711a1a3 source added
boisy
parents:
diff changeset
43 #define WORDSIZE 40
5ba8e711a1a3 source added
boisy
parents:
diff changeset
44
5ba8e711a1a3 source added
boisy
parents:
diff changeset
45
5ba8e711a1a3 source added
boisy
parents:
diff changeset
46 char dspmail(), getresponse();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
47 void givehelp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
48
5ba8e711a1a3 source added
boisy
parents:
diff changeset
49
5ba8e711a1a3 source added
boisy
parents:
diff changeset
50 int recvmail (fifo)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
51 flag fifo;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
52 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
53 flag dothis, direction;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
54 int numltrs, ltrsleft;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
55 register MAILPTR envelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
56 MAILPTR firstenvelop = NULL;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
57 struct mailbag *whatnow(), *reverselist(), *gathermail();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
58
5ba8e711a1a3 source added
boisy
parents:
diff changeset
59 /* Check waiting for mail. Exit if there is none. When we return our
5ba8e711a1a3 source added
boisy
parents:
diff changeset
60 current data directory will be our mailbox directory. */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
61
5ba8e711a1a3 source added
boisy
parents:
diff changeset
62 if ((numltrs = ltrsleft = checkmail (FALSE, user)) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
63 exit (0);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
64
5ba8e711a1a3 source added
boisy
parents:
diff changeset
65 firstenvelop = gathermail (numltrs);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
66
5ba8e711a1a3 source added
boisy
parents:
diff changeset
67 if (!fifo)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
68 firstenvelop = reverselist (firstenvelop);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
69
5ba8e711a1a3 source added
boisy
parents:
diff changeset
70 /* Open each letter and read it. Then decide if we want to: save,
5ba8e711a1a3 source added
boisy
parents:
diff changeset
71 delete, undelete, redisplay, move to the next or previous letter. */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
72
5ba8e711a1a3 source added
boisy
parents:
diff changeset
73 envelop = firstenvelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
74 direction = FORWARD;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
75 do
5ba8e711a1a3 source added
boisy
parents:
diff changeset
76 switch (dothis = openenvelop (envelop))
5ba8e711a1a3 source added
boisy
parents:
diff changeset
77 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
78 case ALLREAD:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
79 markallmail (firstenvelop, TRUE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
80 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
81
5ba8e711a1a3 source added
boisy
parents:
diff changeset
82 case KILLMAIL:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
83 markallmail (firstenvelop, FALSE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
84 ltrsleft = 0;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
85
5ba8e711a1a3 source added
boisy
parents:
diff changeset
86 case QUIT:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
87 envelop = ENDMAIL;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
88 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
89
5ba8e711a1a3 source added
boisy
parents:
diff changeset
90 case UNDELETE:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
91 undeletemail (firstenvelop, &ltrsleft);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
92 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
93
5ba8e711a1a3 source added
boisy
parents:
diff changeset
94 case DELETE:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
95 --ltrsleft;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
96
5ba8e711a1a3 source added
boisy
parents:
diff changeset
97 default:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
98 envelop = whatnow (dothis, envelop, &direction);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
99 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
100 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
101 while (envelop != ENDMAIL);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
102
5ba8e711a1a3 source added
boisy
parents:
diff changeset
103 if (!fifo)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
104 firstenvelop = reverselist (firstenvelop);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
105
5ba8e711a1a3 source added
boisy
parents:
diff changeset
106 if (ltrsleft < numltrs)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
107 fputs ("\b \bremoving deleted mail...", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
108
5ba8e711a1a3 source added
boisy
parents:
diff changeset
109 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
110 #ifndef _OSK
5ba8e711a1a3 source added
boisy
parents:
diff changeset
111 loadpager (FALSE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
112 #endif
5ba8e711a1a3 source added
boisy
parents:
diff changeset
113
5ba8e711a1a3 source added
boisy
parents:
diff changeset
114 if (rmailin)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
115 munload (rmail, 0);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
116
5ba8e711a1a3 source added
boisy
parents:
diff changeset
117 updatemail_list (firstenvelop, ltrsleft);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
118 free (firstenvelop);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
119 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
120
5ba8e711a1a3 source added
boisy
parents:
diff changeset
121
5ba8e711a1a3 source added
boisy
parents:
diff changeset
122
5ba8e711a1a3 source added
boisy
parents:
diff changeset
123 /* Create a double-linked list of all the mail. Return a pointer to the start
5ba8e711a1a3 source added
boisy
parents:
diff changeset
124 of the list. */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
125
5ba8e711a1a3 source added
boisy
parents:
diff changeset
126 struct mailbag *gathermail (numltrs)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
127 int numltrs;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
128 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
129 char mailine[MLINE];
5ba8e711a1a3 source added
boisy
parents:
diff changeset
130 register MAILPTR ep;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
131 FILE *mlptr;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
132 char *p, *p1;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
133 MAILPTR elast, envelops;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
134 int newmail, unreadmail;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
135
5ba8e711a1a3 source added
boisy
parents:
diff changeset
136 if ((mlptr = fopen (mail_list, "r")) == NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
137 fatal ("gathermail: can't open user's mail..list");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
138
5ba8e711a1a3 source added
boisy
parents:
diff changeset
139 /* create a double-linked list of pointers to each line in mail..list */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
140 envelops = (MAILPTR) malloc (numltrs * sizeof (MAILBAG));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
141
5ba8e711a1a3 source added
boisy
parents:
diff changeset
142 if (envelops == NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
143 fatal ("gathermail: can't malloc envelops array");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
144
5ba8e711a1a3 source added
boisy
parents:
diff changeset
145 /* make forward and backward links */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
146 ep = envelops;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
147 elast = envelops + numltrs;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
148 do
5ba8e711a1a3 source added
boisy
parents:
diff changeset
149 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
150 if (ep < elast - 1)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
151 ep->next = ep + 1; /* next envelop or... */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
152 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
153 ep->next = ENDMAIL; /* ...end of list */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
154
5ba8e711a1a3 source added
boisy
parents:
diff changeset
155 if (ep != envelops)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
156 ep->prev = ep - 1; /* everything else... */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
157 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
158 ep->prev = ENDMAIL; /* ...or first envelop */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
159 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
160 while (++ep < elast);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
161
5ba8e711a1a3 source added
boisy
parents:
diff changeset
162 newmail = unreadmail = 0;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
163 ep = envelops;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
164 while (mfgets (mailine, MLINE, mlptr) != NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
165 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
166 /* save the individual mail..list line and point to the fields */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
167 ep->mline = p1 = strdup (mailine);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
168
5ba8e711a1a3 source added
boisy
parents:
diff changeset
169 if (ep->mline == NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
170 fatal ("recvmail: can't malloc mail..list line");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
171
5ba8e711a1a3 source added
boisy
parents:
diff changeset
172 /* status */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
173 ep->status = *p1++;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
174
5ba8e711a1a3 source added
boisy
parents:
diff changeset
175 if (ep->status == 'N')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
176 ++newmail;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
177 else if (ep->status == 'U')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
178 ++unreadmail;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
179
5ba8e711a1a3 source added
boisy
parents:
diff changeset
180 /* file name */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
181 p = strchr (p1, '|');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
182 *p = '\0';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
183 ep->letter = p1;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
184 ++ep;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
185 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
186 fclose (mlptr);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
187
5ba8e711a1a3 source added
boisy
parents:
diff changeset
188 if (newmail || unreadmail)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
189 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
190 printf ("\nOS-9 Mailx v%s %d message%s",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
191 version, numltrs, numltrs > 0 ? "s" : "");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
192
5ba8e711a1a3 source added
boisy
parents:
diff changeset
193 if (newmail)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
194 printf (" %d new", newmail);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
195
5ba8e711a1a3 source added
boisy
parents:
diff changeset
196 if (unreadmail)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
197 printf (" %d unread", unreadmail + newmail);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
198
5ba8e711a1a3 source added
boisy
parents:
diff changeset
199 fputs ("\n\nhit <ENTER> to continue...", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
200 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
201 getresponse();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
202 cls();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
203 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
204 return (envelops);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
205 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
206
5ba8e711a1a3 source added
boisy
parents:
diff changeset
207
5ba8e711a1a3 source added
boisy
parents:
diff changeset
208
5ba8e711a1a3 source added
boisy
parents:
diff changeset
209 /* reverse the order of a double-linked list --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
210
5ba8e711a1a3 source added
boisy
parents:
diff changeset
211 struct mailbag *reverselist (list)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
212 MAILPTR list;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
213 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
214 register MAILPTR p1;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
215 MAILPTR p2;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
216
5ba8e711a1a3 source added
boisy
parents:
diff changeset
217 p2 = ENDMAIL;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
218 while (list)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
219 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
220 p1 = list;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
221 list = p1->next;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
222 p1->prev = p1->next;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
223 p1->next = p2;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
224 p2 = p1;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
225 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
226 return (p2);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
227 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
228
5ba8e711a1a3 source added
boisy
parents:
diff changeset
229
5ba8e711a1a3 source added
boisy
parents:
diff changeset
230
5ba8e711a1a3 source added
boisy
parents:
diff changeset
231 struct mailbag *whatnow (whichway, envelop, direction)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
232 flag whichway, *direction;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
233 register MAILPTR envelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
234 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
235 MAILPTR tmpmail;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
236
5ba8e711a1a3 source added
boisy
parents:
diff changeset
237 tmpmail = envelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
238 switch (whichway)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
239 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
240 case DELETE: /* toss letter/envelop, update links */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
241 envelop->status = 'D';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
242 whichway = *direction == FORWARD ? NEXT : PREVIOUS;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
243
5ba8e711a1a3 source added
boisy
parents:
diff changeset
244 case NEXT: /* move to next message */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
245 do
5ba8e711a1a3 source added
boisy
parents:
diff changeset
246 if ((envelop = envelop->next) == ENDMAIL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
247 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
248 if ( !quitmail() )
5ba8e711a1a3 source added
boisy
parents:
diff changeset
249 envelop = tmpmail;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
250 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
251 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
252 while (envelop->status == 'D' || envelop->status == 'B');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
253
5ba8e711a1a3 source added
boisy
parents:
diff changeset
254 *direction = FORWARD;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
255 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
256
5ba8e711a1a3 source added
boisy
parents:
diff changeset
257 case PREVIOUS: /* show last message */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
258 do
5ba8e711a1a3 source added
boisy
parents:
diff changeset
259 if ((envelop = envelop->prev) == ENDMAIL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
260 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
261 envelop = tmpmail;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
262 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
263 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
264 while (envelop->status == 'D' || envelop->status == 'B');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
265
5ba8e711a1a3 source added
boisy
parents:
diff changeset
266 *direction = REVERSE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
267 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
268
5ba8e711a1a3 source added
boisy
parents:
diff changeset
269 case BADLETTER: /* damaged letter or header, skip it */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
270 envelop->status = 'B';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
271 envelop = *direction == FORWARD ? envelop->next != ENDMAIL
5ba8e711a1a3 source added
boisy
parents:
diff changeset
272 ? envelop->next : envelop
5ba8e711a1a3 source added
boisy
parents:
diff changeset
273 : envelop->next != ENDMAIL
5ba8e711a1a3 source added
boisy
parents:
diff changeset
274 ? envelop->prev : envelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
275 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
276
5ba8e711a1a3 source added
boisy
parents:
diff changeset
277 case AGAIN: /* show current message again */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
278 default:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
279 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
280 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
281 return (envelop);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
282 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
283
5ba8e711a1a3 source added
boisy
parents:
diff changeset
284
5ba8e711a1a3 source added
boisy
parents:
diff changeset
285
5ba8e711a1a3 source added
boisy
parents:
diff changeset
286 /* mark all mail as either all read or all deleted. If KILLMAIL is TRUE, all
5ba8e711a1a3 source added
boisy
parents:
diff changeset
287 mail will be deleted and mail will exit immediately. Therefore, killed
5ba8e711a1a3 source added
boisy
parents:
diff changeset
288 mail cannot be restored with the 'x' or 'u' commands. --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
289
5ba8e711a1a3 source added
boisy
parents:
diff changeset
290 int markallmail (firstenvelop, nokilli)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
291 MAILPTR firstenvelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
292 flag nokilli;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
293 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
294 register MAILPTR envelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
295
5ba8e711a1a3 source added
boisy
parents:
diff changeset
296 for (envelop = firstenvelop; envelop; envelop = envelop->next)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
297 envelop->status = nokilli ? 'P' : 'D';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
298 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
299
5ba8e711a1a3 source added
boisy
parents:
diff changeset
300
5ba8e711a1a3 source added
boisy
parents:
diff changeset
301
5ba8e711a1a3 source added
boisy
parents:
diff changeset
302 /* make mail we deleted in this session readable again */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
303
5ba8e711a1a3 source added
boisy
parents:
diff changeset
304 int undeletemail (firstenvelop, ltrsleft)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
305 MAILPTR firstenvelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
306 int *ltrsleft;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
307 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
308 char line[256];
5ba8e711a1a3 source added
boisy
parents:
diff changeset
309 MAILPTR envelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
310 register char *p;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
311 char c;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
312 FILE *fp;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
313 int i;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
314
5ba8e711a1a3 source added
boisy
parents:
diff changeset
315 p = line;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
316 envelop = firstenvelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
317 do
5ba8e711a1a3 source added
boisy
parents:
diff changeset
318 if (envelop->status == 'D')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
319 if ((fp = fopen (envelop->letter, "r")) != NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
320 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
321 /* print header... */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
322 cls();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
323
5ba8e711a1a3 source added
boisy
parents:
diff changeset
324 while (mfgets (p, sizeof (line), fp) != NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
325 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
326 if (!*p)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
327 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
328
5ba8e711a1a3 source added
boisy
parents:
diff changeset
329 puts (p);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
330 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
331
5ba8e711a1a3 source added
boisy
parents:
diff changeset
332 /* ...and first four lines of message */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
333 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
334
5ba8e711a1a3 source added
boisy
parents:
diff changeset
335 for (i = 0; i < 4; ++i)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
336 if (mfgets (p, sizeof (line), fp) == NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
337 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
338 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
339 puts (p);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
340
5ba8e711a1a3 source added
boisy
parents:
diff changeset
341 fclose (fp);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
342 fputs ("\n\nUndelete this or resume reading? Y/n/r...",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
343 stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
344
5ba8e711a1a3 source added
boisy
parents:
diff changeset
345 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
346 c = tolower ( getresponse() );
5ba8e711a1a3 source added
boisy
parents:
diff changeset
347 switch (c)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
348 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
349 case 'r':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
350 return (0);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
351
5ba8e711a1a3 source added
boisy
parents:
diff changeset
352 case 'n':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
353 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
354
5ba8e711a1a3 source added
boisy
parents:
diff changeset
355 case 'y':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
356 default:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
357 envelop->status = 'P';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
358 ++(*ltrsleft);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
359 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
360 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
361 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
362 while ((envelop = envelop->next) != ENDMAIL);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
363
5ba8e711a1a3 source added
boisy
parents:
diff changeset
364 fputs ("\n\nHit ENTER to read mail...", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
365 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
366 getresponse();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
367 return (0);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
368 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
369
5ba8e711a1a3 source added
boisy
parents:
diff changeset
370
5ba8e711a1a3 source added
boisy
parents:
diff changeset
371
5ba8e711a1a3 source added
boisy
parents:
diff changeset
372 /* returns TRUE if user wants to exit after reading last message --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
373
5ba8e711a1a3 source added
boisy
parents:
diff changeset
374 int quitmail()
5ba8e711a1a3 source added
boisy
parents:
diff changeset
375 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
376 register char c;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
377 char answer;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
378
5ba8e711a1a3 source added
boisy
parents:
diff changeset
379 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
380 ReVOn();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
381 fputs (" Last message...quit? y/N ", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
382 ReVOff();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
383 c = tolower ( getresponse() );
5ba8e711a1a3 source added
boisy
parents:
diff changeset
384 CurUp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
385 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
386 ErEOLine();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
387 CurUp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
388 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
389
5ba8e711a1a3 source added
boisy
parents:
diff changeset
390 if (c == 'y')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
391 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
392 putchar (' ');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
393 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
394 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
395 return (c == 'y' ? TRUE : FALSE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
396 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
397
5ba8e711a1a3 source added
boisy
parents:
diff changeset
398
5ba8e711a1a3 source added
boisy
parents:
diff changeset
399
5ba8e711a1a3 source added
boisy
parents:
diff changeset
400 int openenvelop (envelop)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
401 MAILPTR envelop;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
402 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
403 FILE *infile;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
404 flag whichway;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
405 register char c;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
406
5ba8e711a1a3 source added
boisy
parents:
diff changeset
407 if ((infile = fopen (envelop->letter, "r")) == NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
408 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
409 printf ("\n%s: glue too strong...can't open '%s'\n",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
410 pname, envelop->letter);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
411
5ba8e711a1a3 source added
boisy
parents:
diff changeset
412 /* give 'em a chance to read */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
413 sleep (2);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
414
5ba8e711a1a3 source added
boisy
parents:
diff changeset
415 /* letter disappear on us? remove it from mail..list */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
416 return (errno == 216 ? DELETE : BADLETTER);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
417 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
418
5ba8e711a1a3 source added
boisy
parents:
diff changeset
419 /* display incoming mail */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
420 if (getmsg (infile))
5ba8e711a1a3 source added
boisy
parents:
diff changeset
421 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
422 if (usepager)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
423 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
424 sprintf (temp, "%s %s", pager, envelop->letter);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
425 docmd_na (temp);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
426 whichway = mailcmd (envelop->letter);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
427 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
428 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
429 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
430 c = dspmail (infile, envelop->status);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
431 switch (tolower (c))
5ba8e711a1a3 source added
boisy
parents:
diff changeset
432 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
433 /* want to see letter again */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
434 case 'a':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
435 whichway = AGAIN;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
436 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
437
5ba8e711a1a3 source added
boisy
parents:
diff changeset
438 /* want to see previous letter */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
439 case 'p':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
440 case '-':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
441 whichway = PREVIOUS;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
442 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
443
5ba8e711a1a3 source added
boisy
parents:
diff changeset
444 /* go on to next letter */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
445 case 'n':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
446 whichway = NEXT;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
447 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
448
5ba8e711a1a3 source added
boisy
parents:
diff changeset
449 /* exit immediately, leaving mail unchanged */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
450 case 'x':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
451 exit (0);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
452
5ba8e711a1a3 source added
boisy
parents:
diff changeset
453 /* we need help */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
454 case 'h':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
455 case '?':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
456 givehelp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
457 /* fall through */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
458
5ba8e711a1a3 source added
boisy
parents:
diff changeset
459 /* continue with the current letter */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
460 default:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
461 whichway = mailcmd (envelop->letter);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
462 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
463 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
464 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
465 if (envelop->status != 'D' && envelop->status != 'B')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
466 envelop->status = 'P';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
467 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
468 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
469 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
470 whichway = BADLETTER;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
471 printf ("\n%s: letter %s's header has illegible handwriting\n",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
472 pname, envelop->letter);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
473 sleep (2); /* short pause */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
474 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
475
5ba8e711a1a3 source added
boisy
parents:
diff changeset
476 /* close the letter file */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
477 fclose (infile);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
478 return (whichway);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
479 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
480
5ba8e711a1a3 source added
boisy
parents:
diff changeset
481
5ba8e711a1a3 source added
boisy
parents:
diff changeset
482
5ba8e711a1a3 source added
boisy
parents:
diff changeset
483 /* getmsg --get message
5ba8e711a1a3 source added
boisy
parents:
diff changeset
484
5ba8e711a1a3 source added
boisy
parents:
diff changeset
485 Get header info from next mail message in the spooled mail directory.
5ba8e711a1a3 source added
boisy
parents:
diff changeset
486 */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
487
5ba8e711a1a3 source added
boisy
parents:
diff changeset
488 int getmsg (file)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
489 FILE *file;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
490 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
491 char replyto[100], replynam[100], resentrply[100], resentfrm[100];
5ba8e711a1a3 source added
boisy
parents:
diff changeset
492 char resentnam[100], resentdate[40], resentid[100];
5ba8e711a1a3 source added
boisy
parents:
diff changeset
493 register char *lp;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
494 char *p;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
495 flag header;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
496
5ba8e711a1a3 source added
boisy
parents:
diff changeset
497 *subject = *fromdate = *frommsgid = *fromname = '\0';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
498 *sender = *replynam = *resentrply = *resentfrm = '\0';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
499 *resentdate = *resentid = '\0';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
500 header = TRUE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
501 lp = line;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
502
5ba8e711a1a3 source added
boisy
parents:
diff changeset
503 /* be sure this are all cleared out -- REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
504 memset (address, '\0', sizeof (address));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
505 memset (replyto, '\0', sizeof (replyto));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
506
5ba8e711a1a3 source added
boisy
parents:
diff changeset
507 /* Are we still in the header? If so, look at line */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
508 while (header)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
509 if (mfgets (lp, sizeof (line), file) != NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
510 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
511 if (*lp == '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
512 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
513 header = FALSE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
514 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
515 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
516
5ba8e711a1a3 source added
boisy
parents:
diff changeset
517 /* Be paranoid and extract From return path this will be
5ba8e711a1a3 source added
boisy
parents:
diff changeset
518 overwritten by From: or Reply-to:, if found. */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
519
5ba8e711a1a3 source added
boisy
parents:
diff changeset
520 if (*lp == '>' && strncmp (lp, ">From ", 6) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
521 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
522 strcpy (temp, skipspace (lp+5));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
523 for (p = temp; !isspace (*p) && *p != '\0'; p++)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
524 ;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
525
5ba8e711a1a3 source added
boisy
parents:
diff changeset
526 *p = '\0';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
527 strcpy (address, temp);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
528 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
529
5ba8e711a1a3 source added
boisy
parents:
diff changeset
530 /* extract From: return path + fromname */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
531 if (*lp == 'F' && strnucmp (lp, Hfrom, 6) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
532 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
533 strcpy (address, getval (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
534 strcpy (fromname, getrealname (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
535 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
536
5ba8e711a1a3 source added
boisy
parents:
diff changeset
537 /* extract Sender: return path */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
538 if (*lp == 'S' && strnucmp (lp, Hsender, 8) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
539 strcpy (sender, getval (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
540
5ba8e711a1a3 source added
boisy
parents:
diff changeset
541 /* Reply-To, Resent-Reply-To, Resent-From: fields */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
542 if (*lp == 'R')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
543 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
544 /* extract Reply-To: return path */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
545 if (strnucmp (lp, Hreplyto, 10) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
546 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
547 strcpy (replyto, getval (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
548 strcpy (replynam, getrealname (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
549 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
550
5ba8e711a1a3 source added
boisy
parents:
diff changeset
551 /* extract Resent-From: path */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
552 else if (strnucmp (lp, "Resent-From: ", 13) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
553 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
554 strcpy (resentfrm, getval (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
555 strcpy (resentnam, getrealname (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
556 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
557
5ba8e711a1a3 source added
boisy
parents:
diff changeset
558 /* extract Resent-Reply-To: path */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
559 else if (strnucmp (lp, "Resent-Reply-To: ", 17) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
560 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
561 strcpy (resentrply, getval (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
562 strcpy (resentnam, getrealname (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
563 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
564
5ba8e711a1a3 source added
boisy
parents:
diff changeset
565 /* extract Resent-Date */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
566 else if (strnucmp (lp, "Resent-Date: ", 13) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
567 strcpy (resentdate, getstring (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
568
5ba8e711a1a3 source added
boisy
parents:
diff changeset
569 /* extract Resent-Message-Id */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
570 else if (strnucmp (lp, "Resent-Message-Id: ", 19) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
571 strcpy (resentid, getval (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
572 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
573
5ba8e711a1a3 source added
boisy
parents:
diff changeset
574 /* extract message ID */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
575 if (*lp == 'M' && *resentid == '\0'
5ba8e711a1a3 source added
boisy
parents:
diff changeset
576 && strnucmp (lp, "Message-Id: ", 12) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
577 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
578 strcpy (frommsgid, getval (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
579 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
580
5ba8e711a1a3 source added
boisy
parents:
diff changeset
581 /* extract message time */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
582 if (*lp == 'D' && *resentdate == '\0'
5ba8e711a1a3 source added
boisy
parents:
diff changeset
583 && strnucmp (lp, Hdate, 6) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
584 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
585 strncpy (fromdate, getstring (lp), sizeof (fromdate));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
586 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
587
5ba8e711a1a3 source added
boisy
parents:
diff changeset
588 /* extract subject */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
589 if (*lp == 'S' && strnucmp (lp, Hsubject, 9) == 0 ||
5ba8e711a1a3 source added
boisy
parents:
diff changeset
590 strnucmp (lp, Hsubj, 6) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
591 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
592 if (*subject == '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
593 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
594 strcpy (temp, getstring (lp));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
595
5ba8e711a1a3 source added
boisy
parents:
diff changeset
596 if (strnucmp (temp, "Re:", 3) != 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
597 strcpy (subject, "Re: ");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
598
5ba8e711a1a3 source added
boisy
parents:
diff changeset
599 strcat (subject, temp);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
600 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
601 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
602 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
603 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
604 /* header ended prematurely */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
605 return (FALSE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
606
5ba8e711a1a3 source added
boisy
parents:
diff changeset
607 /* Resent-Date overrides Date: --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
608 if (*resentdate != '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
609 strncpy (fromdate, resentdate, sizeof (fromdate));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
610
5ba8e711a1a3 source added
boisy
parents:
diff changeset
611 /* be sure fromdate is properly terminated */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
612 fromdate[sizeof (fromdate) - 1] = '\0';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
613
5ba8e711a1a3 source added
boisy
parents:
diff changeset
614 /* Resent-Message-Id: overrides Message-Id: --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
615 if (*resentid != '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
616 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
617 strncpy (frommsgid, resentid, sizeof (fromdate));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
618 frommsgid[sizeof (frommsgid) - 1] = '\0';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
619 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
620
5ba8e711a1a3 source added
boisy
parents:
diff changeset
621 /* Resent-Reply-To: supercedes From: in determining return path
5ba8e711a1a3 source added
boisy
parents:
diff changeset
622 -or- Resent-From: supercedes From: in determining return path
5ba8e711a1a3 source added
boisy
parents:
diff changeset
623 -or- Reply-To: supercedes From: in determining return path */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
624
5ba8e711a1a3 source added
boisy
parents:
diff changeset
625 if (*resentrply != '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
626 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
627 strcpy (address, resentrply);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
628 strcpy (fromname, resentnam);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
629 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
630 else if (*resentfrm != '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
631 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
632 strcpy (address, resentfrm);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
633 strcpy (fromname, resentnam);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
634 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
635 else if (*replyto != '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
636 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
637 strcpy (address, replyto);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
638 strcpy (fromname, replynam);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
639 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
640
5ba8e711a1a3 source added
boisy
parents:
diff changeset
641 if (*fromname == '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
642 strcpy (fromname, address);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
643
5ba8e711a1a3 source added
boisy
parents:
diff changeset
644 rewind (file);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
645 return (TRUE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
646 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
647
5ba8e711a1a3 source added
boisy
parents:
diff changeset
648
5ba8e711a1a3 source added
boisy
parents:
diff changeset
649
5ba8e711a1a3 source added
boisy
parents:
diff changeset
650 /* dspmail --display mail message */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
651
5ba8e711a1a3 source added
boisy
parents:
diff changeset
652 char dspmail (file, status)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
653 register FILE *file;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
654 char status;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
655 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
656 static char *returnon = "ahnp-qx?";
5ba8e711a1a3 source added
boisy
parents:
diff changeset
657 static int columns = 79, rows;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
658 static flag firstletter = TRUE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
659 register char *p;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
660 flag header = TRUE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
661 int i;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
662 char c, t;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
663
5ba8e711a1a3 source added
boisy
parents:
diff changeset
664 /* Get number of rows from path descriptor. We assume at least an
5ba8e711a1a3 source added
boisy
parents:
diff changeset
665 80 column display is used. */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
666
5ba8e711a1a3 source added
boisy
parents:
diff changeset
667 if (firstletter) /* Changed -- REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
668 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
669 struct sgbuf pd;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
670
5ba8e711a1a3 source added
boisy
parents:
diff changeset
671 rows = (_gs_opt (STDOUT, &pd) != ERROR) ? (int) pd.sg_page : 24;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
672 --rows;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
673 firstletter = FALSE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
674 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
675
5ba8e711a1a3 source added
boisy
parents:
diff changeset
676 cls();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
677 i = 0;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
678 c = '\0';
5ba8e711a1a3 source added
boisy
parents:
diff changeset
679 p = line;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
680 while (mfgets (p, sizeof (line), file) != NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
681 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
682 if (header && *p == '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
683 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
684 fputs ("Status: ", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
685 switch (status)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
686 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
687 case 'N':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
688 puts ("NEW");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
689 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
690
5ba8e711a1a3 source added
boisy
parents:
diff changeset
691 case 'U':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
692 puts ("UNREAD");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
693 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
694
5ba8e711a1a3 source added
boisy
parents:
diff changeset
695 default:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
696 puts ("READ");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
697 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
698 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
699 header = FALSE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
700 ++i;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
701 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
702
5ba8e711a1a3 source added
boisy
parents:
diff changeset
703 if (i >= rows || *p == '\f')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
704 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
705 ReVOn();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
706 fputs (" --MORE--", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
707 ReVOff ();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
708 c = tolower ( getresponse() );
5ba8e711a1a3 source added
boisy
parents:
diff changeset
709 CurUp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
710 putchar('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
711 DelLine();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
712 CurUp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
713 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
714 i = 0;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
715
5ba8e711a1a3 source added
boisy
parents:
diff changeset
716 /* Go to 'mailx>' prompt on <A>gain, <->/<P>revious, <N>ext,
5ba8e711a1a3 source added
boisy
parents:
diff changeset
717 <Q>uit, or e<X>it. Changed --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
718
5ba8e711a1a3 source added
boisy
parents:
diff changeset
719 if (strchr (returnon, c) != NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
720 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
721 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
722 fixline (p);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
723
5ba8e711a1a3 source added
boisy
parents:
diff changeset
724 if (header)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
725 if (!fullheader)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
726 if (strnucmp (p, ">From ", 6) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
727 goto showit;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
728 else if (strnucmp (p, Hfrom, 6) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
729 goto showit;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
730 else if (strnucmp (p, "To: ", 4) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
731 goto showit;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
732 else if (strnucmp (p, Hdate, 6) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
733 goto showit;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
734 else if (strnucmp (p, Hreplyto, 10) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
735 goto showit;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
736 else if (strnucmp (p, Hsubject, 9) == 0
5ba8e711a1a3 source added
boisy
parents:
diff changeset
737 || strnucmp (p, Hsubj, 6) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
738 goto showit;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
739 else if (strnucmp (p, Hcc, 4) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
740 goto showit;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
741 else if (strnucmp (p, Hsender, 8) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
742 goto showit;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
743 else if (strnucmp (p, Hx, 2) == 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
744 goto showit;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
745 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
746 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
747 showit: puts (p);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
748 i += (strlen (p) / columns) + 1;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
749 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
750 fclose (file);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
751
5ba8e711a1a3 source added
boisy
parents:
diff changeset
752 if (c == 'n') /* flush keyboard input */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
753 if ((i = _gs_rdy (0)) > 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
754 read (0, temp, i);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
755 return (c);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
756 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
757
5ba8e711a1a3 source added
boisy
parents:
diff changeset
758
5ba8e711a1a3 source added
boisy
parents:
diff changeset
759
5ba8e711a1a3 source added
boisy
parents:
diff changeset
760 /* Returns PREVIOUS if we want to redisplay the previous message. AGAIN if we
5ba8e711a1a3 source added
boisy
parents:
diff changeset
761 want to redisplay the current message. NEXT if we want to move on to the
5ba8e711a1a3 source added
boisy
parents:
diff changeset
762 next message. DELETE if we deleted the current message. */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
763
5ba8e711a1a3 source added
boisy
parents:
diff changeset
764 int mailcmd (letter)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
765 char *letter;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
766 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
767 char path[128];
5ba8e711a1a3 source added
boisy
parents:
diff changeset
768 struct fildes fdes;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
769 flag noerror, orig_usesig, orig_cc_prompt, cflag;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
770 int n, f;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
771 register char c;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
772 char *p, *words[WORDSIZE], *tmpAdrs, *tmpSubj;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
773
5ba8e711a1a3 source added
boisy
parents:
diff changeset
774 /* make a copy of the filename in case we reply -- REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
775 strcpy (message, letter);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
776
5ba8e711a1a3 source added
boisy
parents:
diff changeset
777 /* run mailx commands for this message */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
778 for (;;)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
779 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
780 fputs ("\nmailx> ", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
781 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
782 c = tolower ( getresponse() );
5ba8e711a1a3 source added
boisy
parents:
diff changeset
783 switch (c)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
784 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
785 /* Next message */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
786 case ' ':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
787 case 'n':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
788 case '\n':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
789 return (NEXT);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
790
5ba8e711a1a3 source added
boisy
parents:
diff changeset
791 /* toggle displaying entire or abbreviated header */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
792 case 'z':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
793 fullheader = !fullheader;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
794 backspace (1);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
795 printf ("full header display %s...",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
796 fullheader ? "on" : "off");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
797
5ba8e711a1a3 source added
boisy
parents:
diff changeset
798 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
799 #ifndef _OSK
5ba8e711a1a3 source added
boisy
parents:
diff changeset
800 tsleep (60); /* brief pause so */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
801 #else /* everyone can read */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
802 sleep (1); /* the message */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
803 #endif
5ba8e711a1a3 source added
boisy
parents:
diff changeset
804 /* fall through */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
805
5ba8e711a1a3 source added
boisy
parents:
diff changeset
806 /* redisplay the current message */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
807 case 'a':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
808 return (AGAIN);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
809
5ba8e711a1a3 source added
boisy
parents:
diff changeset
810 /* reply command */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
811 case 'r':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
812 /* save current From: */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
813 if ((tmpAdrs = strdup (address)) != NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
814 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
815 reply = TRUE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
816 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
817 sendmail();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
818 strcpy (address, tmpAdrs);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
819 free (tmpAdrs);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
820 reply = FALSE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
821 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
822 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
823 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
824 fputs ("mailcmd: can't make copy of From:", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
825 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
826 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
827 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
828 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
829
5ba8e711a1a3 source added
boisy
parents:
diff changeset
830 /* save command -- strip or keep header --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
831 case 's':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
832 case 'w':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
833 /* Set up a flag to tell us later whether or not we need
5ba8e711a1a3 source added
boisy
parents:
diff changeset
834 to reset the uid of the file. We don't want to do this
5ba8e711a1a3 source added
boisy
parents:
diff changeset
835 simple hack for just any file as it would allow anyone
5ba8e711a1a3 source added
boisy
parents:
diff changeset
836 to put a file anywhere in the file system. --BAS 2 */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
837
5ba8e711a1a3 source added
boisy
parents:
diff changeset
838 cflag = FALSE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
839 p = getinput (path, sizeof (path));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
840
5ba8e711a1a3 source added
boisy
parents:
diff changeset
841 if (*p == '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
842 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
843 sprintf (fname, "%s/mbox", homedir);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
844 cflag = TRUE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
845 asetuid (0);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
846 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
847 else if (*p == '/')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
848 strcpy (fname, p);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
849 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
850 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
851 sprintf (fname, "%s/%s", homedir, p);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
852 cflag = TRUE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
853 asetuid(0);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
854 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
855 printf ("\nSaving message to %s\n", fname);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
856
5ba8e711a1a3 source added
boisy
parents:
diff changeset
857 /* If you don't check the ownership of the file, then it
5ba8e711a1a3 source added
boisy
parents:
diff changeset
858 is possible to overwrite any file on the same disk as
5ba8e711a1a3 source added
boisy
parents:
diff changeset
859 filename given, if you allow users to make links.
5ba8e711a1a3 source added
boisy
parents:
diff changeset
860 --BAS 2 */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
861
5ba8e711a1a3 source added
boisy
parents:
diff changeset
862 if ((f = open (fname, 1)) > 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
863 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
864 _gs_gfd (f, &fdes, sizeof (fdes));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
865 close (f);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
866
5ba8e711a1a3 source added
boisy
parents:
diff changeset
867 if (myuid != (unsigned)fdes.fd_own)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
868 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
869 printf ("%s: %s exists and it is not yours\n",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
870 pname, fname);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
871
5ba8e711a1a3 source added
boisy
parents:
diff changeset
872 if (cflag)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
873 asetuid (myuid);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
874 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
875 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
876 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
877
5ba8e711a1a3 source added
boisy
parents:
diff changeset
878 /* save message with header */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
879 if (c == 's')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
880 noerror = fileapnd (letter, fname, TRUE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
881 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
882 /* save message without header */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
883 noerror = fileapskp (letter, fname, TRUE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
884
5ba8e711a1a3 source added
boisy
parents:
diff changeset
885 if (noerror == FALSE)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
886 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
887 printf ("%s: can't save letter to %s...error %d\n",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
888 pname, fname, errno);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
889
5ba8e711a1a3 source added
boisy
parents:
diff changeset
890 asetuid (myuid);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
891 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
892 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
893
5ba8e711a1a3 source added
boisy
parents:
diff changeset
894 /* If we need to, reset the ownership of the file-BAS 2 */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
895 if (cflag)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
896 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
897 chown (fname, myuid);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
898 asetuid (myuid);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
899 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
900
5ba8e711a1a3 source added
boisy
parents:
diff changeset
901 /* delete current message -- REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
902 case 'd':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
903 CurUp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
904 fputs ("\nDelete? y/N ", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
905 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
906 c = tolower ( getresponse() );
5ba8e711a1a3 source added
boisy
parents:
diff changeset
907
5ba8e711a1a3 source added
boisy
parents:
diff changeset
908 if (c == 'y')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
909 return (DELETE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
910 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
911 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
912 CurUp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
913 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
914 ErEOLine();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
915 CurUp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
916 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
917 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
918 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
919
5ba8e711a1a3 source added
boisy
parents:
diff changeset
920 /* redisplay previous message */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
921 case 'p':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
922 case '-':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
923 return (PREVIOUS);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
924
5ba8e711a1a3 source added
boisy
parents:
diff changeset
925 /* forward copy of message to user(s) */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
926 case 'f':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
927 fputs ("orward to: ", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
928 p = getinput (path, sizeof (path));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
929
5ba8e711a1a3 source added
boisy
parents:
diff changeset
930 if (!*p)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
931 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
932
5ba8e711a1a3 source added
boisy
parents:
diff changeset
933 /* save the current To: */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
934 if ((tmpAdrs = strdup (address)) != NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
935 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
936 /* clear the old To: */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
937 memset (address, '\0', sizeof (address));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
938 usesig = NOSIG;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
939 forward = TRUE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
940 n = getargs (words, p, WORDSIZE); /* REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
941
5ba8e711a1a3 source added
boisy
parents:
diff changeset
942 if (parse_addr (n, words) != ABORT)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
943 sendmail();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
944
5ba8e711a1a3 source added
boisy
parents:
diff changeset
945 /* restore previous To: */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
946 strcpy (address, tmpAdrs);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
947 free (tmpAdrs);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
948 usesig = USESIG;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
949 forward = FALSE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
950 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
951 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
952 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
953 fputs ("mailcmd: can't make copy of To:", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
954 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
955 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
956 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
957 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
958
5ba8e711a1a3 source added
boisy
parents:
diff changeset
959 /* mail command...can include command line options d,p and s */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
960 case 'm':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
961 p = getinput (path, sizeof (path));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
962
5ba8e711a1a3 source added
boisy
parents:
diff changeset
963 if (*p == '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
964 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
965
5ba8e711a1a3 source added
boisy
parents:
diff changeset
966 /* save original To: and Subject: */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
967 if ((tmpAdrs = strdup (address)) == NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
968 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
969 fputs ("mailcmd: cannot save original To:",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
970 stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
971 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
972 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
973 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
974
5ba8e711a1a3 source added
boisy
parents:
diff changeset
975 if ((tmpSubj = strdup (subject)) == NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
976 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
977 fputs ("mailcmd: cannot save original Subject:",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
978 stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
979 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
980 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
981 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
982
5ba8e711a1a3 source added
boisy
parents:
diff changeset
983 /* clear the address and subject --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
984 memset (address, '\0', sizeof (address));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
985 memset (subject, '\0', sizeof (subject));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
986
5ba8e711a1a3 source added
boisy
parents:
diff changeset
987 /* save original cc_prompt and usesig */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
988 orig_usesig = usesig;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
989 orig_cc_prompt = cc_prompt;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
990 n = getargs (words, p, WORDSIZE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
991
5ba8e711a1a3 source added
boisy
parents:
diff changeset
992 if (parse_addr (n, words) != ABORT)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
993 sendmail();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
994
5ba8e711a1a3 source added
boisy
parents:
diff changeset
995 /* put back original cc_prompt and usesig */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
996 usesig = orig_usesig;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
997 cc_prompt = orig_cc_prompt;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
998 strcpy (address, tmpAdrs);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
999 free (tmpAdrs);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1000 strcpy (subject, tmpSubj);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1001 free (tmpSubj);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1002 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1003
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1004 /* exit mail after killing deleted mail */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1005 case 'q':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1006 return (QUIT);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1007
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1008 /* exit without touch any mail */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1009 case 'x':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1010 interrupt (0);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1011
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1012 /* make ALL deleted mail readable again */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1013 case 'u':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1014 return (UNDELETE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1015
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1016 /* fork a shell for the user */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1017 case '!':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1018 forkshell();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1019 fputs ("\b ", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1020 CurUp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1021 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1022
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1023 /* help command */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1024 case 'h':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1025 case '?':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1026 givehelp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1027 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1028
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1029 /* mark all mail read --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1030 case 'c':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1031 backspace (1);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1032 fputs ("marking all mail as read...", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1033 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1034 return (ALLREAD);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1035
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1036 /* delete ALL mail then exit */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1037 case 'k':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1038 backspace (1);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1039 fputs ("delete ALL mail? y/N ", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1040 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1041 c = tolower ( getresponse() );
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1042 backspace (23);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1043
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1044 if (c == 'y')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1045 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1046 fputs ("are you sure? y/N ", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1047 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1048 c = tolower ( getresponse() );
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1049 backspace (20);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1050
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1051 if (c == 'y')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1052 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1053 fputs ("killing all mail...", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1054 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1055 return (KILLMAIL);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1056 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1057 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1058 CurUp();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1059 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1060 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1061
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1062 /* toggle file viewer on or off --REB */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1063 case 'v':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1064 fputs ("iewer ", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1065
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1066 if (*pager != '\0')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1067 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1068 usepager = !usepager;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1069 printf ("now %s...", usepager ? "on" : "off");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1070 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1071 #ifndef _OSK
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1072 loadpager (usepager ? TRUE: FALSE);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1073 #endif
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1074 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1075 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1076 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1077 fputs ("is not defined...", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1078 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1079 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1080 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1081
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1082 #ifdef FIXME
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1083 /* current message is piped to standard input of a program */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1084 case '|':
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1085 p = getinput (path, sizeof (path));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1086
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1087 if (*p == NULL)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1088 continue;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1089
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1090 dopipe (letter, p);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1091 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1092 #endif
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1093 default:
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1094 printf ("\nUnknown command: %c\n", c);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1095 break;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1096 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1097 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1098 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1099
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1100
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1101
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1102 /* get a single character response from the user */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1103
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1104 char getresponse()
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1105 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1106 char c;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1107
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1108 /* wait for valid input */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1109 echo (OFF);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1110 do
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1111 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1112 while (_gs_rdy (0) <= 0)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1113 tsleep (4);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1114
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1115 read (0, &c, 1);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1116 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1117 while (c < '\x20' && c > '\x7f');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1118
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1119 echo (ON);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1120 if (c != '\n' && c != ' ')
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1121 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1122 putchar (c);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1123 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1124 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1125 return (c);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1126 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1127
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1128
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1129
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1130 /* Open double overlay windows for keyboard user--white on red over black on
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1131 black. Should only be called by CoCo when TERMCAP is not defined. */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1132
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1133 #ifndef TERMCAP
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1134 int popdoublewindow (x, y, width, height)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1135 int x, y, width, height;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1136 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1137 char outstr[18];
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1138
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1139 /* turn off the cursor */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1140 write (1, "\x05\x20", 2);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1141
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1142 *(outstr + 0) = *(outstr + 9) = 0x1b;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1143 *(outstr + 1) = *(outstr + 10) = 0x22;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1144 *(outstr + 2) = *(outstr + 11) = 1;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1145 *(outstr + 5) = *(outstr + 14) = width;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1146 *(outstr + 6) = *(outstr + 15) = height;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1147
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1148 /* bottom window */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1149 *(outstr + 3) = x + 1; /* offset bottom window */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1150 *(outstr + 4) = y + 1;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1151 *(outstr + 7) = 2; /* black on black */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1152 *(outstr + 8) = 2;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1153
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1154 /* top window */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1155 *(outstr + 12) = x;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1156 *(outstr + 13) = y;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1157 *(outstr + 16) = 0; /* white on red */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1158 *(outstr + 17) = 4;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1159
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1160 write (1, outstr, sizeof (outstr));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1161 winopen = TRUE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1162 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1163
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1164
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1165
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1166 /* Close double overlay window */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1167
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1168 int closedoublewindow()
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1169 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1170 write (1, "\x1b\x23\x1b\x23\x08 \n\x09\x05\x21", 11);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1171 winopen = FALSE;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1172 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1173 #endif
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1174
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1175
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1176 /* backspace-space-backspace to delete part of a line */
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1177
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1178 int backspace (howmany)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1179 int howmany;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1180 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1181 register int i;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1182
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1183 for (i = 0; i < howmany; ++i)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1184 fputs ("\b \b", stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1185
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1186 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1187 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1188
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1189
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1190
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1191 int putdashes (howmany)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1192 int howmany;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1193 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1194 register int i;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1195
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1196 putchar (' ');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1197
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1198 for (i = 0; i < howmany; ++i)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1199 putchar ('=');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1200
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1201 fflush (stdout);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1202 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1203
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1204
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1205
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1206 void givehelp()
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1207 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1208 register char **hlp;
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1209 static char *helptxt[] = {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1210 "a\t\t redisplay current message",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1211 "c\t\t mark all mail as read",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1212 "d\t\t delete current message",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1213 "f\t\t forward current message",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1214 "h, ?\t this message",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1215 "k\t\t delete ALL mail",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1216 "m <address> send mail to <address>",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1217 "n/ENTER/SPACE go to next message",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1218 "p, -\t show previous message",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1219 "q\t\t update and exit",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1220 "r\t\t reply to this message",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1221 "s [filename] save message to 'filename'",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1222 "\t\t default is 'mbox'",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1223 "u\t\t undelete mail",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1224 "v\t\t toggle using file viewer",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1225 "w [filename] save message without header to",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1226 "\t\t 'filename', default is 'mbox'",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1227 "x\t\t exit with no updating",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1228 "z\t\t toggle message header display",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1229 "!\t\t fork a shell",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1230 #ifdef FIXME
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1231 "|cmd\t run 'cmd' with current message",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1232 "\t\t as input",
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1233 #endif
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1234 NULL
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1235 };
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1236
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1237 #ifndef TERMCAP
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1238 if (t2flag)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1239 puts ("\n");
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1240 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1241 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1242 popdoublewindow (31, 0, 48, 22);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1243 putdashes (17);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1244 printf (" Mailx v%s", version);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1245 putdashes (17);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1246 putchar (' ');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1247 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1248 #else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1249 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1250 putdashes (17);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1251 printf ("Mailx v%s", version);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1252 putdashes (17);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1253 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1254 #endif
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1255 for (hlp = helptxt; *hlp; ++hlp)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1256 printf (" %s\n", strdetab (strcpy (temp, *hlp), 7));
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1257
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1258 #ifndef TERMCAP
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1259 if (t2flag)
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1260 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1261 else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1262 {
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1263 putdashes (46);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1264 getresponse();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1265 closedoublewindow();
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1266 }
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1267 #else
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1268 putdashes (46);
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1269 putchar ('\n');
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1270 #endif
5ba8e711a1a3 source added
boisy
parents:
diff changeset
1271 }