Mush 6.4 to 6.5 Patch Kit, Part 4 of 6
Barton E. Schaefer
schaefer at ogccse.ogc.edu
Sat Apr 29 03:43:26 AEST 1989
Part 4 of the Mush 6.5 Upgrade Kit. Read the instructions in part 1.
---------------------------------------------------------------------------
Prereq: Part3
*** mush-6.4/kit.check Tue Apr 18 17:29:04 1989
--- kit.check Tue Apr 18 17:29:04 1989
***************
*** 1 ****
! Part3
--- 1 ----
! Part3-check
*** mush-6.4/msgs.c Fri Mar 24 10:13:05 1989
--- msgs.c Tue Apr 18 09:38:20 1989
***************
*** 313,321 ****
}
#ifdef DOT_LOCK
if ((i = dot_lock(mailfile)) == 0)
! #endif /* DOT_LOCK */
! #ifdef DOT_LOCK
! mail_fp = mask_fopen(mailfile, "w+");
#else /* !DOT_LOCK */
/* We can't lock a file unless we have an fd, but "w+" will zero
* the file. If the lock later failed for any reason (possible
--- 313,319 ----
}
#ifdef DOT_LOCK
if ((i = dot_lock(mailfile)) == 0)
! mail_fp = mask_fopen(mailfile, "w+");
#else /* !DOT_LOCK */
/* We can't lock a file unless we have an fd, but "w+" will zero
* the file. If the lock later failed for any reason (possible
***************
*** 418,440 ****
#endif /* SYSV */
#endif /* !DOT_LOCK */
- close_lock(mailfile, mail_fp);
-
- #ifdef SUNTOOL
- if (istool) {
- mail_timer.it_value.tv_sec = time_out;
- setitimer(ITIMER_REAL, &mail_timer, NULL);
- }
- #endif /* SUNTOOL */
-
/* some users like to have zero length folders for frequent usage */
if (mbox)
fclose(mbox);
if (j) {
- long times[2];
- times[1] = time(×[0]) - (long)2;
- if (!strcmp(mailfile, spoolfile) && utime(mailfile, times))
- error("utime");
print_more(": saved %d message%s\n", j, (j==1)? NO_STRING: "s");
} else
#ifdef HOMEMAIL
--- 416,425 ----
***************
*** 452,457 ****
--- 437,458 ----
if (k)
print("saved %d message%s in %s\n",k,(k==1)? NO_STRING:"s", mbox_file);
+ close_lock(mailfile, mail_fp);
+
+ if (j) {
+ long times[2];
+ times[1] = time(×[0]) - (long)2;
+ if (!strcmp(mailfile, spoolfile) && utime(mailfile, times))
+ error("utime");
+ }
+
+ #ifdef SUNTOOL
+ if (istool) {
+ mail_timer.it_value.tv_sec = time_out;
+ setitimer(ITIMER_REAL, &mail_timer, NULL);
+ }
+ #endif /* SUNTOOL */
+
turnoff(glob_flags, IGN_SIGS);
return 1;
***************
*** 525,534 ****
char *tail = rindex(mailfile, '/');
if (tail && tail[1])
b += Strcpy(b, tail+1);
! else
/* Fall through */
case 'F':
! b += Strcpy(b, mailfile);
if (ison(glob_flags, READ_ONLY))
b += Strcpy(b, " [read-only]");
}
--- 526,536 ----
char *tail = rindex(mailfile, '/');
if (tail && tail[1])
b += Strcpy(b, tail+1);
! else {
/* Fall through */
case 'F':
! b += Strcpy(b, mailfile);
! }
if (ison(glob_flags, READ_ONLY))
b += Strcpy(b, " [read-only]");
}
***************
*** 546,552 ****
return;
}
(void) sprintf(buf,"\"%s\"%s: %d message%s, %d new, %d unread",
! mailfile, ison(glob_flags, READ_ONLY)? " [read only]" : "",
msg_cnt, (msg_cnt != 1)? "s": NO_STRING, new, unread);
if (istool || iscurses)
(void) sprintf(buf+strlen(buf), ", %d deleted", deleted);
--- 548,555 ----
return;
}
(void) sprintf(buf,"\"%s\"%s: %d message%s, %d new, %d unread",
! trim_filename(mailfile),
! ison(glob_flags, READ_ONLY)? " [read only]" : "",
msg_cnt, (msg_cnt != 1)? "s": NO_STRING, new, unread);
if (istool || iscurses)
(void) sprintf(buf+strlen(buf), ", %d deleted", deleted);
***************
*** 726,732 ****
char path[256];
parse_from(fp, path);
if (path[0])
! (void) sprintf(buf, "From %s %s %s %d %d:%d:00 %d\n",
path, wkday, month, day, hour, mins, year);
bytes = ftell(tmpf);
}
--- 729,735 ----
char path[256];
parse_from(fp, path);
if (path[0])
! (void)sprintf(buf,"From %s %s %s %d %02d:%02d:00 %d\n",
path, wkday, month, day, hour, mins, year);
bytes = ftell(tmpf);
}
*** mush-6.4/mush.1 Fri Mar 24 10:16:50 1989
--- mush.1 Tue Apr 18 09:26:39 1989
***************
*** 123,128 ****
--- 123,140 ----
.B debug
command.
.TP
+ \-e
+ (\-echo)
+ Normally, the program runs with the local echo off and each character
+ typed is processed individually so as to process certain macros and
+ keyboard mappings. This option will supress this from taking place
+ and the program will only process input after a carriage return has
+ been hit. Under normal circumstances, this action is transparent to
+ the user and the use of this option is discouraged except when using
+ a debugger with the program. Note that if this option is specified,
+ any key sequence set by map or map! will not take place. This option
+ is ignored for curses mode.
+ .TP
\-F[!] filename
(\-source)
This file is the same type as the initialization file read on startup
***************
*** 1862,1871 ****
.in -4
.fi
.sp
! If a `+' or `\-' precedes the list of bits, the specified bits are turned
! on or off respectively, without modifying other bits.
If no `+' or `\-' is given, then the list of bits is set explicitly and
all other bits are lost.
.sp
Message lists can be piped to the
.B flags
--- 1874,1886 ----
.in -4
.fi
.sp
! If a `+' or `\-' is included in the list of bits, the specified bits are
! turned on or off respectively, without modifying other bits.
If no `+' or `\-' is given, then the list of bits is set explicitly and
all other bits are lost.
+ The `\-' modifier can be escaped with a backslash (i.e., \*Q\\\-\*U) to
+ prevent its interpretation as part of a message range, or it may be given
+ \fIafter\fR the list of bits for the same reason.
.sp
Message lists can be piped to the
.B flags
***************
*** 1873,1884 ****
.sp
.nf
.ti +4
! cmd r 'reply \\!* | flags + r'
.fi
.sp
to mark as
.I replied-to
! all messages included in a reply,
.TP
.BR folder " [\-N] [\-r] [!] [ %[user] | # | & | file ]"
.RB ( fo )
--- 1888,1899 ----
.sp
.nf
.ti +4
! cmd r 'flags \\!* + r | reply'
.fi
.sp
to mark as
.I replied-to
! all messages included in a reply.
.TP
.BR folder " [\-N] [\-r] [!] [ %[user] | # | & | file ]"
.RB ( fo )
***************
*** 2281,2287 ****
You can create personalized headers in your outgoing mail using this command.
.sp
.nf
! Usages:
.in +2
.ta 2.5i
my_hdr print all your headers
--- 2296,2302 ----
You can create personalized headers in your outgoing mail using this command.
.sp
.nf
! Command usage:
.in +2
.ta 2.5i
my_hdr print all your headers
***************
*** 2310,2315 ****
--- 2325,2339 ----
The
.B un_hdr
command may take `*' as an argument to un_hdr everything set.
+ .sp
+ Example:
+ .sp
+ .ti +2
+ my_hdr Phone-Number: (415) 491-1000
+ .sp
+ Note: You cannot set the headers From: and Date:. Attempting to do
+ so will not result in any error messages; they will simply be overwritten
+ by the system when your mail is delivered.
.TP
.BR pick " [flags] [<pattern>]"
Allows the user to select particular messages from a folder.
***************
*** 2837,2843 ****
--- 2861,2877 ----
If a message list is specified, each digest is disassembled to the same
filename (if given). If no filename is given and the user did not request
a merge, then a temporary file is made.
+ .TP
+ .BR update " -N"
+ Updates your current folder writing back changes just as if you
+ .BR quit.
+ The \-N option prevents the headers from being listed once the
+ folder has been read back in once it has been updated.
.sp
+ See the
+ .BR folder
+ command for complete information.
+ .sp
.SH VARIABLES
Shell variables are controlled via the
.B set
***************
*** 2926,2931 ****
--- 2960,2969 ----
finished editing a letter to be sent.
In the tool mode, this is ignored; the Cc list
is always prompted for after the Subject prompt.
+ If the variable
+ .B edit_hdrs
+ is set, prompting will not occur, but a Cc: line will be added to the
+ edit file.
.TP
.B autodelete
(Boolean)
***************
*** 3112,3117 ****
--- 3150,3156 ----
autosign2 = \*Qaddress1, address2, ... : <signature>\*U
.sp
Each address can be one of these types:
+ .RS
.TP
1) address
Legal mailing addresses that do not contain comment
***************
*** 3120,3136 ****
.TP
2) *username
If the username is present on the recipient list, regardless of what
! remove site the user may reside (including locally), the pattern matches.
.TP
3) !hostname !host1!host2...
Any user can be specified as long as he resides on the specified hostname.
If a path of hosts is specified, then the user must reside on the end of
the specified path.
.TP
! 4) @dom.ain
! The user must reside on any host within the domain specified. Neither
! the user or the hostname needs to match; only the domain name must be
! required to match.
.sp
Example:
.sp
--- 3159,3179 ----
.TP
2) *username
If the username is present on the recipient list, regardless of what
! remote site the user may reside (including locally), the pattern matches.
.TP
3) !hostname !host1!host2...
Any user can be specified as long as he resides on the specified hostname.
If a path of hosts is specified, then the user must reside on the end of
the specified path.
+ .\" Nroff note: there is a problem with the @sub.domain line. Why?
+ .\" The .br is intended to deal with this.
.TP
! 4) @sub.domain
! .br
! The user must reside on any host within the domain specified.
! Neither the user or the hostname needs to match; only the domain name must
! be required to match.
! .RE
.sp
Example:
.sp
***************
*** 3142,3149 ****
This means that any mail sent to 1) anyone at island, 2) anyone within
the berkeley domain, 3) anyone within the mit domain, 4) Bart Schaefer
(at any host anywhere -- even locally),
! and 4) root on my local machine only (or, root at my-machine-name)
! will be signed by my "alternate" signature. If any address on the
recipient list fails to satisfy these four matches, the mail will be
signed by my regular signature.
.sp
--- 3185,3192 ----
This means that any mail sent to 1) anyone at island, 2) anyone within
the berkeley domain, 3) anyone within the mit domain, 4) Bart Schaefer
(at any host anywhere -- even locally),
! and 4) root on the local machine only (or, root at local-machine-name)
! will be signed by my \*Qalternate\*U signature. If any address on the
recipient list fails to satisfy these four matches, the mail will be
signed by my regular signature.
.sp
***************
*** 3253,3258 ****
--- 3296,3354 ----
Editor to use when \*Q~e\*U is specified.
Default is the value of the variable
.BR visual .
+ .TP
+ .B edit_hdrs
+ (Boolean)
+ When in letter-composition mode (via \fBmail\fR or \fBreply\fR, etc),
+ the headers of the outgoing message is stored in the same buffer as
+ the text of the letter. So, if the editor is called to edit the message
+ buffer, the headers of the message can be edited as well. There are
+ some restrictions, however.
+ .sp
+ There must be a To: header. Without this, mush will not deliver the
+ letter. Instead, the editor must be reentered and a To: header with
+ a valid recipient must be inserted. Just because a valid Cc: header
+ exists does not affect this restriction. You may have as many To: and
+ Cc: headers as you like.
+ .sp
+ The From: header must not be altered. Altering this header will
+ result in a warning and it will be replaced by a correct one.
+ .sp
+ The Date: header will always be replaced by one with a more accurate
+ time and date stamp. Therefore, changing or removing this header has
+ no effect.
+ .sp
+ You cannot add a Status: header and blank headers are dropped.
+ For example, if an empty Cc: header exists, the header will
+ not show up in the outgoing message. Therefore, leaving empty
+ headers has no effect.
+ .sp
+ Aliases specified on the command line are expanded and put into the
+ message buffer in their expanded form regardless of the value of
+ .B no_expand.
+ However, if the user changes the headers using the editor and specifies
+ aliases, those aliases will not be expanded if
+ .B no_expand
+ is set. Otherwise, they are expanded as usual.
+ .sp
+ The headers Bcc: and Fcc: are removed as expected.
+ .sp
+ One added side effect of
+ .B edit_hdrs
+ is that you can add an Fcc: header to specify a \*QFile Carbon Copy\*U.
+ This must be a full pathname to a file or program. For programs, the
+ pathname must be preceded by a pipe character (|).
+ .sp
+ When using
+ .B edit_hdrs,
+ certain tilde escapes don't work. Specifically, any tilde escape that
+ allows you to add or set headers or to empty the file are inactive.
+ These functions are to be done in the editor only.
+ .sp
+ Once a letter is being edited,
+ .B edit_hdrs
+ cannot be set or unset; the user must end the letter (either
+ by sending it or forcefully terminating it) first.
.TP
.B escape
(Character)
*** mush-6.4/mush.h Fri Mar 24 10:12:35 1989
--- mush.h Tue Apr 18 09:38:29 1989
***************
*** 1,6 ****
/* @(#)mush.h (c) copyright 1986 (Dan Heller) */
! #define VERSION "Mail User's Shell (6.4 2/14/89)"
#include "config.h"
--- 1,6 ----
/* @(#)mush.h (c) copyright 1986 (Dan Heller) */
! #define VERSION "Mail User's Shell (6.5 4/03/89)"
#include "config.h"
***************
*** 34,39 ****
--- 34,48 ----
#include <setjmp.h>
#include "strings.h"
+ extern char
+ *malloc(), /* allocate memory */
+ *calloc(), /* allocate and clear memory */
+ *realloc(); /* re-allocate memory */
+
+ extern void
+ free_vec(), /* free a malloc'ed argv */
+ xfree(); /* free malloc'ed pointers */
+
#ifdef SUNTOOL
# include <suntool/tool_hs.h>
#else /* SUNTOOL */
***************
*** 340,345 ****
--- 349,355 ----
#define EDIT 4 /* enter editor by default on mailing */
#define SIGN 5 /* auto-include ~/.signature in mail */
#define DO_FORTUNE 6 /* add a fortune at end of msgs */
+ #define EDIT_HDRS 7 /* if true, user edits headers using editor */
/* msg flags */
#define NO_HEADER 7 /* don't print header of message (top, write) */
***************
*** 427,432 ****
--- 437,443 ----
*getpath(), /* static char returning path (expanding ~, +, %, #) */
*do_set(), /* set/unset an option, alias, ignored-hdr */
*reverse(), /* reverse a string */
+ *trim_filename(), /* remove or condense leading file name path */
*prog_name,
/* from loop.c */
*** mush-6.4/rite.c Fri Mar 24 10:01:25 1989
--- rite.c Thu Apr 13 16:52:58 1989
***************
*** 6,11 ****
--- 6,12 ----
static char String[BUFSIZ];
static int count, overflow, save_orig_x;
+ static int backspace(), Addch();
char *
rite(c)
***************
*** 22,28 ****
return NULL;
}
literal_next = 0;
! if (c == _tty.sg_erase || c == CTRL(127) || c == CTRL(H)) {
if (count)
backspace();
} else if (c == _tty.sg_kill) {
--- 23,29 ----
return NULL;
}
literal_next = 0;
! if (c == _tty.sg_erase || c == CTRL(\127) || c == CTRL(H)) {
if (count)
backspace();
} else if (c == _tty.sg_kill) {
*** mush-6.4/select.c Fri Mar 24 10:04:44 1989
--- select.c Wed Apr 12 10:26:35 1989
***************
*** 307,313 ****
action = event;
if (menu_ptr == &help_menu || action == MENU_HELP) {
! switch(action) {
when DEL_MSG: case UNDEL_MSG:
(void) help(fd, "menu_delete", tool_help);
when READ_MSG: (void) help(fd, "next", tool_help);
--- 307,313 ----
action = event;
if (menu_ptr == &help_menu || action == MENU_HELP) {
! switch ((int) action) {
when DEL_MSG: case UNDEL_MSG:
(void) help(fd, "menu_delete", tool_help);
when READ_MSG: (void) help(fd, "next", tool_help);
***************
*** 405,411 ****
action = m_item->mi_data;
else
return;
! switch(action) {
case O_SAVE:
save_opts(0, DUBL_NULL);
when O_RSTR:
--- 405,411 ----
action = m_item->mi_data;
else
return;
! switch ((int) action) {
case O_SAVE:
save_opts(0, DUBL_NULL);
when O_RSTR:
*** mush-6.4/setopts.c Fri Mar 24 10:05:46 1989
--- setopts.c Thu Apr 13 16:53:02 1989
***************
*** 11,17 ****
register char **argv;
{
register struct options *tmp;
- struct options *calloc();
register char *option, *value = NULL;
if (!(option = *argv))
--- 11,16 ----
***************
*** 50,59 ****
}
/* check to see if option is already set by attempting to unset it */
! (void) un_set(list, option);
/* now make a new option struct and set fields */
! if (!(tmp = calloc((unsigned)1, sizeof(struct options)))) {
error("calloc");
return -1;
}
--- 49,59 ----
}
/* check to see if option is already set by attempting to unset it */
! if (un_set(list, option) == -1)
! return 0;
/* now make a new option struct and set fields */
! if (!(tmp = (struct options *)calloc((unsigned)1,sizeof(struct options)))) {
error("calloc");
return -1;
}
***************
*** 106,112 ****
tmp->value = savestr(sprintf(wval, "%d", wrapcolumn));
} else if (!strcmp(tmp->option, "history"))
init_history((value && *value)? atoi(value) : 1);
! else if (!strcmp(tmp->option, "known_hosts")) {
register char *p;
int n;
/* in case user separated with commas */
--- 106,118 ----
tmp->value = savestr(sprintf(wval, "%d", wrapcolumn));
} else if (!strcmp(tmp->option, "history"))
init_history((value && *value)? atoi(value) : 1);
! else if (!strcmp(tmp->option, "realname")) {
! char *new[4];
! new[1] = "NAME";
! new[2] = tmp->value;
! new[3] = NULL;
! Setenv(3, new); /* new[0] is ignored */
! } else if (!strcmp(tmp->option, "known_hosts")) {
register char *p;
int n;
/* in case user separated with commas */
***************
*** 144,160 ****
#ifdef SUNTOOL
int x,y;
! if (istool && !str)
y = 10 + 2 * l_height(LARGE);
#endif /* SUNTOOL */
! if (!str && !istool)
(void) do_pager(NULL, TRUE); /* page using internal pager */
for (opts = list; opts; opts = opts->next)
if (!str) {
#ifdef SUNTOOL
! if (istool)
pw_text(msg_win, 5, y, PIX_SRC, fonts[DEFAULT], opts->option);
else
#endif /* SUNTOOL */
--- 150,166 ----
#ifdef SUNTOOL
int x,y;
! if (istool >= 2 && !str)
y = 10 + 2 * l_height(LARGE);
#endif /* SUNTOOL */
! if (!str && istool < 2)
(void) do_pager(NULL, TRUE); /* page using internal pager */
for (opts = list; opts; opts = opts->next)
if (!str) {
#ifdef SUNTOOL
! if (istool >= 2)
pw_text(msg_win, 5, y, PIX_SRC, fonts[DEFAULT], opts->option);
else
#endif /* SUNTOOL */
***************
*** 161,167 ****
(void) do_pager(opts->option, FALSE);
if (opts->value)
#ifdef SUNTOOL
! if (istool) {
x = 30*l_width(DEFAULT);
pw_text(msg_win, x,y, PIX_SRC, fonts[DEFAULT], opts->value);
pw_text(msg_win, x+1, y, PIX_SRC|PIX_DST,
--- 167,173 ----
(void) do_pager(opts->option, FALSE);
if (opts->value)
#ifdef SUNTOOL
! if (istool >= 2) {
x = 30*l_width(DEFAULT);
pw_text(msg_win, x,y, PIX_SRC, fonts[DEFAULT], opts->value);
pw_text(msg_win, x+1, y, PIX_SRC|PIX_DST,
***************
*** 174,180 ****
(void) do_pager(opts->value, FALSE);
}
#ifdef SUNTOOL
! if (istool)
Clrtoeol(msg_win, x, y, DEFAULT), y += l_height(DEFAULT);
else
#endif /* SUNTOOL */
--- 180,186 ----
(void) do_pager(opts->value, FALSE);
}
#ifdef SUNTOOL
! if (istool >= 2)
Clrtoeol(msg_win, x, y, DEFAULT), y += l_height(DEFAULT);
else
#endif /* SUNTOOL */
***************
*** 189,195 ****
return "";
}
! if (!str && !istool)
(void) do_pager(NULL, FALSE); /* terminate internal pager */
/* if we still haven't matched, check for environment vars */
--- 195,201 ----
return "";
}
! if (!str && istool < 2)
(void) do_pager(NULL, FALSE); /* terminate internal pager */
/* if we still haven't matched, check for environment vars */
***************
*** 259,264 ****
--- 265,273 ----
} else if (!strcmp(p, "hostname")) {
free_vec(ourname);
ourname = DUBL_NULL;
+ } else if (ison(glob_flags, IS_GETTING) && !strcmp(p, "edit_hdrs")) {
+ wprint("You mush finish this letter first.\n");
+ return -1;
}
}
***************
*** 617,623 ****
else if (firstchar == 'f')
help_str = "fkey";
else
! help_str = "own_hdrs";
return help(0, help_str, cmd_help);
}
--- 626,632 ----
else if (firstchar == 'f')
help_str = "fkey";
else
! help_str = "my_hdr";
return help(0, help_str, cmd_help);
}
*** mush-6.4/signals.c Fri Mar 24 10:04:09 1989
--- signals.c Wed Apr 12 10:28:16 1989
***************
*** 296,306 ****
turnoff(glob_flags, NEW_MAIL);
else
turnon(glob_flags, NEW_MAIL);
if (istool) {
mail_status(0);
(void) do_hdrs(0, DUBL_NULL, NULL);
! bell();
}
if (msg_cnt < last_msg_cnt) {
last_msg_cnt = msg_cnt;
last_spool_size = spool_size;
--- 296,308 ----
turnoff(glob_flags, NEW_MAIL);
else
turnon(glob_flags, NEW_MAIL);
+ #ifdef SUNTOOL
if (istool) {
mail_status(0);
(void) do_hdrs(0, DUBL_NULL, NULL);
! window_bell(print_sw);
}
+ #endif /* SUNTOOL */
if (msg_cnt < last_msg_cnt) {
last_msg_cnt = msg_cnt;
last_spool_size = spool_size;
*** mush-6.4/strings.c Fri Mar 24 10:04:11 1989
--- strings.c Wed Apr 12 10:44:12 1989
***************
*** 161,182 ****
return n;
}
- void
- xfree(cp)
- char *cp;
- {
- extern char end[];
-
- if (cp >= end && cp < (char *) &cp && debug < 5)
- free(cp);
- }
-
char *
savestr(s)
register char *s;
{
register char *p;
! char *malloc();
if (!s)
s = "";
if (!(p = malloc((unsigned) (strlen(s) + 1)))) {
--- 161,172 ----
return n;
}
char *
savestr(s)
register char *s;
{
register char *p;
!
if (!s)
s = "";
if (!(p = malloc((unsigned) (strlen(s) + 1)))) {
***************
*** 184,201 ****
return NULL;
}
return strcpy(p, s);
- }
-
- void
- free_vec(argv)
- char **argv;
- {
- register int n;
- if (!argv)
- return;
- for (n = 0; argv[n]; n++)
- xfree(argv[n]);
- xfree((char *)argv);
}
/* copy a vector of strings into one string -- return the end of the string */
--- 174,179 ----
*** mush-6.4/strings.h Fri Mar 24 09:58:43 1989
--- strings.h Wed Apr 12 10:13:28 1989
***************
*** 30,36 ****
*savestr(); /* strcpy arg into malloc-ed memory; return address */
extern void
- free_vec(), /* free a malloc'ed argv */
print_argv(), /* prints an argv as one string */
! putstring(), /* put a string */
! xfree(); /* free malloc'ed pointers */
--- 30,34 ----
*savestr(); /* strcpy arg into malloc-ed memory; return address */
extern void
print_argv(), /* prints an argv as one string */
! putstring(); /* put a string */
*** mush-6.4/viewopts.c Fri Mar 24 10:04:45 1989
--- viewopts.c Wed Apr 12 10:33:50 1989
***************
*** 35,41 ****
"Include a copy of author's message each time you reply to mail." },
{ "autoprint", NULL, TOOL | TEXT,
"Display the next message on the list when you delete a message." },
! { "auto_route", NULL, TOOL | TEXT,
"Remove redundant uucp addresses when replying to messages." },
{ "autosign", "-Filename", TOOL | TEXT,
"Add file (~/.signature if set but no value) at end of all letters." },
--- 35,41 ----
"Include a copy of author's message each time you reply to mail." },
{ "autoprint", NULL, TOOL | TEXT,
"Display the next message on the list when you delete a message." },
! { "auto_route", "-Host/Path", TOOL | TEXT,
"Remove redundant uucp addresses when replying to messages." },
{ "autosign", "-Filename", TOOL | TEXT,
"Add file (~/.signature if set but no value) at end of all letters." },
***************
*** 51,56 ****
--- 51,58 ----
"The name of the file to store dead mail (default = ~/dead.letter)." },
{ "dot", NULL, TOOL | TEXT,
"Allow \".\" on a line by itself to send letter." },
+ { "edit_hdrs", NULL, TOOL | TEXT,
+ "Allow headers of messages to be edited using your editor." },
{ "editor", "Editor name/path", TOOL | TEXT,
"Editor for message editing (default = env EDITOR or \"vi\")." },
{ "escape", "Character", TOOL | TEXT,
***************
*** 77,83 ****
"Ignores ^D as exit, or (if set), execute \"command\"." },
{ "indent_str", "String", TOOL | TEXT,
"String to offset included messages within your letters." },
! { "in_reply_to", NULL, TOOL | TEXT,
"When responding to mail, add In-Reply-To: to message headers." },
{ "keepsave", NULL, TOOL | TEXT,
"Prevents messages from being marked as `deleted' when you `save'." },
--- 79,85 ----
"Ignores ^D as exit, or (if set), execute \"command\"." },
{ "indent_str", "String", TOOL | TEXT,
"String to offset included messages within your letters." },
! { "in_reply_to", "-String", TOOL | TEXT,
"When responding to mail, add In-Reply-To: to message headers." },
{ "keepsave", NULL, TOOL | TEXT,
"Prevents messages from being marked as `deleted' when you `save'." },
***************
*** 249,255 ****
txt.y = 50 + line*20 + l_height(curfont);
}
if (!p || *p == '-') {
! register char *argv[2];
argv[0] = viewopts[start_cnt+line].v_opt;
argv[1] = NULL;
(void) add_option(&set_options, argv);
--- 251,257 ----
txt.y = 50 + line*20 + l_height(curfont);
}
if (!p || *p == '-') {
! char *argv[2];
argv[0] = viewopts[start_cnt+line].v_opt;
argv[1] = NULL;
(void) add_option(&set_options, argv);
*** mush-6.4/PATCHNOTES Mon Mar 27 12:14:39 1989
--- PATCHNOTES Mon Mar 27 10:50:20 1989
***************
*** 0 ****
--- 1,184 ----
+ Changes/bugfixes in this patch:
+
+ General:
+ The functions malloc() and calloc() have been declared correctly
+ in mush.h, and corresponding changes to use typecasts have been
+ made to other files. Those changes are not mentioned here.
+
+ Changes were also made to eliminate gcc warnings in a number of
+ files. Again, those changes are not described here.
+
+ The makefiles have been modified to include the new malloc.c file.
+
+ README:
+ Corrected installation instructions for Sun and Xenix systems.
+ Removed references to the obsolete OLD_MAILER definition.
+
+ Added descriptions of PICKY_MAILER, MTA_EXIT, TIMEZONE and
+ INTERNAL_MALLOC definitions.
+
+ README-6.4:
+ Corrected typographical error.
+
+ README-6.5:
+ A new file summarizing these patch notes.
+
+ addrs.c:
+ Fixed ordering problem in if-else in compare_addresses
+
+ Repaired route_addresses().
+
+ cmd_help:
+ Changed the key string for my_hdr help to fix curses "h?" bug.
+
+ commands.c:
+ The "edit" commmand now invokes $editor, and the "visual" command
+ must be used to get $visual. Abbreviations "e" and "v" still work.
+
+ Piping of deleted messages is now possible if $show_deleted
+ is set.
+
+ config.h-dist:
+ Added new definition MTA_EXIT. It should be set to an integer
+ representing a successful exit status from your MTA.
+
+ Changed the way locking is defined for MMDF, to better support
+ the variety of MMDF locking protocols.
+
+ Changed the VERBOSE_ARG for MMDF from W to Ww.
+
+ Removed references to the obsolete OLD_MAILER definition.
+ Added new definition PICKY_MAILER, which is the opposite: if
+ your MTA absolutely insists on adding From: and Date:, this
+ definition will suppress mush's versions of those headers.
+ Added descriptions of INTERNAL_MALLOC, TIMEZONE, DAYLITETZ,
+ MMDF, HOMEMAIL, and NO_COMMAS definitions.
+
+ curses.c:
+ Improved the behavior of "quit" (q) from curses mode when the
+ mailbox needs to be updated. In particular, the mailbox is no
+ longer needlessly reread before exiting.
+
+ Added screen refresh (redo) and macro flush after executing
+ source command (C_SOURCE).
+
+ dates.c:
+ Added usage of the new TIMEZONE definitions to rfc_date() for
+ systems lacking any other method for determining the current
+ timezone. The new DAYLITETZ definition is also used.
+
+ file.c:
+ Corrected compilation error for HOMEMAIL systems. This patch has
+ already appeared on comp.sources.bugs, as noted above.
+
+ Lock and save names of files opened by find_files(), to prevent
+ collisions in send_it() (mail.c) among mush children.
+
+ Added function trim_filename().
+
+ folders.c:
+ Changing folders now sets the mailfile to a full path name to
+ prevent name collisions when changing directories.
+
+ hdrs.c:
+ Small change to header_field() to allow its use in conjunction
+ with the header editing changes.
+
+ Fixed bugs in do_hdr(): "z-" now works correctly; the -H option
+ works correctly again; completing a screenful of header summaries
+ by scanning backward when the current message is deleted works.
+
+ lock.c:
+ Delay loop to wait for exclusive lock would exit incorrectly
+ when interrupted. It also printed its message each time around
+ the loop, instead of adding ellipses as was intended.
+
+ #ifdef MMDF ended in the wrong place, changed it.
+
+ Explicit unlocking added to close_lock for BSD due to Ultrix
+ fclose problems.
+
+ Changed the way locking is defined for MMDF, to better support
+ the variety of MMDF locking protocols.
+
+ mail.c:
+ Write errors when sending mail are now correctly caught and dealt
+ with. If write to the MTA fails, sending aborts and a dead.letter
+ is created.
+
+ The exit status of the MTA is now monitored, and a dead.letter is
+ created when the MTA returns an error. This doesn't necessarily
+ mean the mail wasn't sent, and you may get error mail from the MTA.
+
+ Setting the $verbose variable during composition is now handled
+ correctly.
+
+ Carbon-copy recipients are collected correctly when using replyall
+ on two or more messages.
+
+ Files opened in send_it() are now locked (see file.c) to prevent
+ collisions with other sends. Pipes opened are now closed with
+ pclose() to avoid filling up popen's internal tables.
+
+ Extensive changes have been made to support header editing. See
+ REAMDE-6.5 for the ramifications.
+
+ main.c:
+ The 6.4 PATCHDATE has been undef'd.
+
+ Code has been added to handle the optional INTERNAL_MALLOC and to
+ start the mushtool correctly when run from .suntools in SunOS4.0.
+
+ malloc.c:
+ A new file to support the INTERNAL_MALLOC definition. The xfree()
+ and free_vec() functions have moved here.
+
+ misc.c:
+ Moved an incorrectly placed fseek() in sign_letter().
+
+ Added backslash handling to msg_flags() to allow escaping of the
+ `-' argument (turn off bits). This helps prevent collisions
+ with message-list parsing.
+
+ msgs.c:
+ Some compilers were having trouble with a case label within an
+ else, producing incorrect code. Added braces to force correct
+ interpretation.
+
+ HOMEMAIL systems could lose mail if the "spool" mailbox was
+ updated and unlinked while new mail was being delivered. Moved
+ releasing of the lock to below the unlink to help prevent this.
+
+ The new trim_filename() function (see file.c) is used by the
+ mail_status() function to shorten the folder name it displays.
+
+ mush.1:
+ Documented the long-undocumented -e option.
+
+ Documented the new edit_hdrs setting.
+
+ Documented the "update" command separately from the "folder"
+ command.
+
+ Minor formatting corrections and proofreading.
+
+ mush.h:
+ Changed VERSION to 6.5 and date to 4/03/89.
+
+ Added glob_flag for EDIT_HDRS and declarations of alloc functions.
+ Also added declaration of trim_filename().
+
+ setopts.c:
+ Added support for the new $edit_hdrs variable.
+
+ Fixed the help string for the my_hdr command in do_alias().
+
+ strings.c:
+ The functions xfree() and free_vec() have moved to malloc.c.
+
+ strings.h:
+ The declaration of xfree() has moved to mush.h.
+
+ viewopts.c:
+ Added support for the new $edit_hdrs variable.
+
*** mush-6.4/kit.check Tue Apr 18 17:29:04 1989
--- kit.check Tue Apr 18 17:29:04 1989
***************
*** 1 ****
! Part3-check
--- 1 ----
! Part4
--
Bart Schaefer "And if you believe that, you'll believe anything."
-- DangerMouse
CSNET / Internet schaefer at cse.ogc.edu
UUCP ...{sun,tektronix,verdix}!ogccse!schaefer
More information about the Comp.sources.bugs
mailing list