home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
mm
/
mm-ccmd-0.91-20031009.tar.gz
/
mm-ccmd-0.91-20031009.tar
/
work
/
release-0.90.txt
< prev
next >
Wrap
Text File
|
1990-12-20
|
30KB
|
639 lines
These notes compare MM v0.88, as originally released, with the new
release of 0.90. That means that descriptions of changes that were
distributed as patches are included, so they make look familiar.
General Direction of MM v0.90 Mods
----------------------------------
In the last two years, one of the biggest projects at our Computer
Center has been a push towards campus-wide email. We are now offering
free electronic mail accounts to all staff members and soon hope to
offer them to all students as well. As our preferred mail-user-agent,
MM is a big part of that project. Many of the major recent
modifications to MM have been towards making it friendlier to novices.
We now have a staff position of "MM Electronic Mail Consultant" as
part of our User Services group.
In addition to skipping version 0.89 (you could say the running
versions we released internally were 0.89) and going right to 0.90
(since it is 1990, after all), we have dropped the "Beta" designation
from MM's version strings (and no longer label it a "test version" on
startup).
Of course, there are still many things we want to do to MM. We have
patches from various people that we're holding on to but haven't had a
chance to install. And there is our 600 line long "tofix" file.
However, it was about time (well, past time) for us to release a new
version of MM, so here it is.
New Command Organization
------------------------
In MM v0.88, a question-mark for help at the top-level prompt would
give a listing of all possible MM commands in alphabetical order.
Since this list covered more than one screen, it was pretty useless to
any but the most adventurous users.
The new command organization is divided into sections like "basic"
commands, "message-handling" commands, and "filing" commands, with
random "other" commands at the end. This way, the response to "?"
starts with the most common commands, and only shows the obscure
commands later. Also, a command-completion pager was added to CCMD,
so users can "quit" after one screen of "?" response.
In addition, when the new variable USER-LEVEL is set to "novice", a
"hints" line is printed before every prompt. This suggests five or
six of the most common commands for the user to choose from.
Help Files
----------
To make upkeep of the help messages for MM easier, each help "screen"
is now in its own file. You may recall that in v0.88 we moved the
help from all the different MM source files into one big "database"
file. This file proved too big and unwieldy, and was broken out into
separate files.
Joe Brennan, our MM consultant, has done an extensive rewrite on all
the help files for MM. Since his job is to make things as easy as
possible for people at Columbia, some of the help files have become
somewhat Columbia-specific, so you may want to modify them for your
site. To varying degrees, the Columbia-specific help screens are
those for the commands (at all levels): BUG, FINGER, MM, PRINT, PUSH,
SUSPEND, and Z; for the variables CRT-FILTER, EDITOR, FINGER-COMMAND,
HELP-DIR, PRINT-FILTER, READ-PROMPT, SEND-PROMPT, SPELLER,
USE-CRT-FILTER-ALWAYS, and USER-LEVEL; and for the general topic TEXT
MODE. You may or may not need to change these for your site.
There are also help-screens for some "topics" that didn't fit into any
individual command. First there are some for the various command
groupings -- BASIC, CUSTOMIZATION, FILING, HEADER-FIELD, INFORMATION,
MESSAGE-HANDLING, MESSAGE-TAGGING, OTHER, and TOP. Then there are
selected MM related subjects -- ADDRESSING, BITNET, CCMD, INTERNET,
MESSAGE-SEQUENCE, SIGNATURE-FILE, and TEXT-MODE.
Joe also wrote a paper manual, which is somewhat Columbia-specific.
We will look into making the Scribe source and/or Postscript version
of this available at some future date.
With our fancy new help screens, we found we had several over one
screenful, so we now pipe them through a pager (the CRT-FILTER
variable) when needed.
Check out the help files for descriptions of the new commands and
variables below.
New Commands
------------
The BYE command replaces the now-invisible QQUIT command, for less
obscurity.
The FINGER command runs finger under MM, without having to push to a
shell or suspend MM. It uses the FINGER-COMMAND variable. This was a
convenience for our novice users.
The REVIEW command is just like READ, but requires an argument (that
is, no default of "unseen"). This was intended to help users who
thought there was no way to see messages they had already seen.
CREATE-INIT has been renamed to SAVE-INIT since it is to be used when
you already have an init file (to avoid confusion with the PROFILE
command).
The BACKTRACK command, which is intended to be the same as FOLLOW,
only backwards instead of forwards, has been added to the list of
commands. However, as with FOLLOW, BACKTRACK is not yet implemented.
New and Modified Variables
--------------------------
See the help screens for more information on the following variables.
The "maybe"-type (yes, no, ask) variable EXPUNGE-ON-BYE determines
whether MM will expunge the file when users use the "bye" command.
Default is ASK.
The FINGER-COMMAND variable sets the path and name for a local finger
command. See the new FINGER command, above. This will probably be
set site-wide in the (/usr/local/lib/mm) mm.conf file. Default is a
pathless "finger".
The "maybe"-type HANDLE-CHANGED-MODTIME variable controls MM's
behavior when it determines that the mail file has been changed on
disk (since the last time MM touched it). This indicates a violation
of MM's locks. See the description of CHECK_MTIME() below.
Default is YES, though people reading mail files over NFS (which is
*not* recommended) may find they prefer ASK.
AUTO-CREATE-FILES (type "maybe") controls whether MM asks each time it
wants to create a new file. Note that the default value of ASK is
preferred since it helps keep users from misplacing messages by
putting them in the wrong directory or making a typo when they specify
the file name.
APPEND-NEW-MAIL (type "boolean", or yes/no) controls MM's behavior
when it is writing out new mail. Instead of rewriting the whole mail
file, a new possible behavior will simply append the new messages to
the end of the current file. Note that this will not write out flag
changes, like a message going from UNSEEN to SEEN (the way a complete
rewrite would), but it saves a lot of time with big files. MM will
make sure to write out the smaller changes before it exits anyway.
Default is NO for the old (perhaps safer) behavior.
The DEFAULT-FCC-LIST variable has been in MM for a while, but
apparently it was ignored in MM v0.88. It is implemented in v0.90.
The new USER-LEVEL variable can have the values "novice" or "expert".
Currently, this is only used for the hints line described above, but
it might be expanded.
The CHECK-INTERVAL variable controls how often MM checks for new mail
when it is idle. We set it to 300 seconds (five minutes) since MM was
using up too much CPU time checking for new mail.
REPLY-INCLUDE-ME should now work more the way it is documented to.
That is, it will not add the user to the list of recipients if the
variable is "yes", but will remove the user if the variable is "no".
However, REPLY-INCLUDE-ME no longer controls whether the user is
included in alias expansions (via the "-om" option to sendmail).
MM v0.90 no longer adds the user's signature file when
delivering to files. When delivery to files fails, the deadletter file
is written out in a standard mail file format rather than just as text.
MODIFY-READ-ONLY is now defaulted to "yes" at compile time, due to
numerous complaints. It can of course be overridden in the
system-wide or user init files.
Also relating to variables, MM v0.90 now supports per-group init
files. Based on a user's primary group (determined by getgid()), if
the file "groupname.ini" exists in MM's library directory, MM will
read it in right after it reads the system-wide init file ("mm.conf").
This could be used for setting up aliases, or for setting USER-LEVEL
to "novice" for a group of users. The compilation variable
GROUP_INIT_FORMAT can be used to set the name of this group init file
(in case you don't want it in the MM's library directory, due to
distributed maintenance perhaps). GROUP_INIT_FORMAT should contain
one "%s", to be replaced by the groupname.
New Recovery Features
---------------------
Like many programs, when MM v0.88 writes out a file it first moves the
old version to filename~ (tilde), to ease recovery if something goes
wrong. Unfortunately, when the system would crash in the middle of MM
writing out a file, there was no way to tell whether MM had
successfully written out the file. Often, a user would log in after
the crash, enter MM with the unfinished (often empty) mailfile, get
new mail, and MM would write over the ~ file with the empty one as it
read in the new mail. Thus the old mail was lost.
In MM v0.90 we added an extra step so MM can tell whether it succeeded
or failed in writing a new file. Instead of moving the mail file to
mailfile~, we move it to #mailfile# (like Emacs). When the new file
is successfully written, #mailfile# gets moved to mailfile~. Thus,
whenever MM tries to GET or EXAMINE mailfile and sees #mailfile#, it
knows to worry, and prints appropriate error messages. It
automatically moves #mailfile# to be the real mailfile (GET only, not
EXAMINE) in situations where the mailfile is either missing or empty,
and otherwise advises the user to call for help.
Note that sometimes, users *will* edit their mailfiles with Emacs, and
Emacs may leave the #mailfile# file. This confuses MM, but we judged
that the consistency of using the same filename scheme was worth the
ensuing confusion.
In MM v0.88, there was a check included to make sure MM was the only
program writing to the mail file, as a way of backing up the
advisory-only Unix locks (for example, if you look at your mailfile
with Emacs it will ignore MM's locks). However, this check was only
performed when checking for new mail, rather than whenever MM was
about to write to the file, and no type of recovery was done other
than an advisory message.
In MM v0.90, we have a new CHECK_MTIME routine, called whenever MM is
about to write to the mail file. It checks the modify time on the
file, and if it doesn't match when MM last wrote to the file then MM
attempts to recover by writing the mail file out to filename.PID, and
changing the internal copy to read-only (EXAMINE). It also prints
lots of verbose warnings.
Unfortunately, we have found that check_mtime() and NFS don't get
along too well -- a stat() on an NFS file that has *just* been written
will often give the mtime from before the last write, which makes
check_mtime think the file was changed when the mtime later gets
updated. However, it is not recommended to read mail files over NFS
with MM, since we don't trust the locking either.
The modifications for check_mtime() involved the new flag MF_SAVEONLY
for the flags field of a message vector. Unlike MF_RDONLY, which
indicates that the current file was read in with EXAMINE and can
therefore not be modified, MF_SAVEONLY indicates that MM changed the
file to be read-only after encountering an error. MF_SAVEONLY means
the user is discouraged from changing MM's internal copy, but MM still
wants to write the file out to disk -- perhaps the user had a quota
problem when we originally noticed the changed mtime, and we want to
give them a chance to clean up and write out the file.
MM v0.90 does an fsync() on the mailfile after it finishes writing it
out, to make sure the changes get flushed to disk.
When sendmail is not successfully called, MM v0.90 tells the user and
suggests they try the SAVE-DRAFT command.
New Parse-Error Handling Code
-----------------------------
A new feature was added to make it easier for users to fix incorrect
commands. When MM (or CCMD) gets a syntax error, the correct part of
the previous line is automatically put back in the command buffer so
the user can fix the command without having to retype that part (as if
they hadn't typed the wrong part and return). See also command-line
editing, below.
Also, error messages were made a little friendlier by modifiying CCMD
so each FDB can contain an error string (like the help string). For
example, "headers snorkle" will now generate the error '?Invalid
message sequence - "snorkle"' instead of the less-helpful "does not
match switch or keyword".
New CHECK_CF() Semantics
------------------------
The CHECK_CF() routine checks for whether there is a current mail
file, and if necessary whether it can be written to. To handle
command line arguments (for example, "$ mm read unseen") check_cf()
will automagically GET or EXAMINE the main mail file (from the
MAIL-FILE variable).
In MM v0.88, the argument to check_cf() was a simple boolean
indicating whether write access was necessary. However, we found it
was better to pass values of O_RDONLY, O_WRONLY or O_RDWR. These
indicate, respectively, wanting a read-only file (EXAMINE), needing a
writable file (GET), or wanting a writable file but willing to settle
for a read-only file. O_RDWR is useful in the case of command-line
arguments -- the "mm read unseen" example above would try to do a GET,
in order to update the SEEN flags if possible, but if the GET failed
because the file was already locked, check_cf() would fall back on an
EXAMINE, since other than the unseen flag READ is really a read-only
(so to speak) operation.
The new O_RDWR option is also useful for running check_cf() in the
middle of parsing a command like "edit". (MM always runs check_cf()
before parsing a message-sequence.) Otherwise, if MODIFY-READ-ONLY
was set to ASK, we were getting a problem where the "modify anyway?"
question occurred in the middle of parsing a line, and the two
simultaneous parses didn't get along very well. (O_RDONLY wouldn't
work in this case because the automagic GET (for command-line args)
would be an EXAMINE and mess up the post-parse check, since EDIT
really *does* want to modify the file.)
In addition, check_cf() returns false on error instead of longjmp'ing
with a cmerr(), to allow the calling routine to handle the error as
desired.
Better Handling of MAIL-DIRECTORY and Other Directory Type Variables
--------------------------------------------------------------------
The parser for the mail-directory variable now handles several things
better than it used to. In MM v0.88, setting the mail-directory to be
the same as the current directory would cause each file to be listed
twice on "?". This is no longer the case in MM v0.90.
Also, there is some confusion, on creating new files, of whether they
should be placed in the MAIL-DIRECTORY or the current directory. In
MM v0.90 the policy is to put them in the MAIL-DIRECTORY (so they
don't get misplaced) unless a subdirectory is specified -- which is
taken to be under the current directory.
To unset the MAIL-DIRECTORY variable, users can now just confirm
(leave it blank).
In addition, "./" is stripped off the beginning of a directory
variable, and "/." is stripped off the end, for neatness.
SAME_FILE() Routine
-------------------
MM v0.88 used string comparisons to check whether two filenames
referred to the same file. Thus, it could be tricked by variations on
the name. MM v0.90 has new code to perform this check, by comparing
inodes and device numbers. The first place it was used was to see if
the file MM was opening was the main mail file.
We also used same_file() to make MM more aware of when it's doing a
GET or EXAMINE of the same file that it is currently looking at. For
example, if you do two GETs in a row on the same filename, MM v0.88
would say something about not being able to lock the file, whereas MM
v0.90 will say the file is "already current writable mail file".
Similarly "upgrades" and "downgrades" between GETs and EXAMINEs of the
same file are handled more intelligently (see code in file.c -- look
for "same_file").
Secret Debugging Code
---------------------
We found and fixed a malloc() bug or two (or ten), as well as some
memory leaks. We expect there may be more malloc() bugs, however.
While looking for memory problems, we wrote some routines which are
currently disabled but may be of interest to anyone out there trying
to debug MM.
The debug_validate_msgvec() routine was written when messages were
randomly being mangled -- in particular, "From: " fields would
disappear. Periodically, this routine would be called to look through
the internal copy of the mail file and see if it still looked the way
it "should", in order to help pinpoint just when (if not where) it was
getting mangled.
The m_checkranges() routine, along with our whole memory-debugging
suite, can be called periodically to make sure that all malloc'd
strings are behaving correctly -- not writing past their boundaries.
This memory-debugging code is controlled by the MDEBUG compile time
variable, and is in debug.c.
Non-Interactive MM
------------------
MM was designed as a very friendly interactive program. However,
occasionally, users want to use it non-interactively -- from a "take"
file or from a pipe.
The several "maybe" type variables, when set to "ask", sometimes
interfered with TAKE files, by trying to be interactive when it was
not appropriate. Many such instances have been fixed by checking for
interactiveness before asking (though probably not all).
The SMAIL command is for using MM in a pipe to send mail, much the way
"mail" is used in a pipe now. It is for True Believers who don't want
to use anything but MM ever.
Compile-Time and Other Programmer-Level Changes
-----------------------------------------------
MM v0.88 came with the configuration files s-bsd43.h, s-hpux.h,
s-mtxinu43.h, s-sun40.h, and s-ultrix20.h. In addition, MM v0.90 has
s-aixrt.h, s-dynix211.h, s-isi40.h, s-sun34.h, s-sun35.h, s-sysv3b2.h,
s-sysv52.h, and s-umaxv.h. We also had to add a "volatile" definition
for non-ANSI C compilers to the bottom of all the s-*.h files. As
always, please send us your new config files so we can pass them
around.
The Makefile has been cleaned up a bit. Several people complained
that "make clean" wasn't cleaning up everything it should, so we fixed
(some of) that. The install target is now more correctly implemented
with several sub-targets and without invoking the old mm-install shell
script. (This includes a lot of handwaving for installing all the
help files.)
MM's version number now contains a patchlevel number, to register how
many patches have been applied, in addition to the major, minor, and
edit numbers in MM v0.88 version numbers.
A lot of people, upon compiling MM, found that it generated "From: "
fields containing "user@" and no hostname. This had to do with
gethostbyname() not returning a fully-qualified hostname and MM not
noticing. This has been patched, thanks to Peter Karp. Similarly, MM
will now use the HOSTNAME variable if all else fails, though it would
be better not to have the hostname hardcoded.
We avoid use of fprintf() (for writing mail files), since it seems to
be limited to 64K on some machines and large messages (often binhex'd)
were getting truncated. We also encountered a problem with certain
versions of fputs() which terminate output on newline (MM v0.88 patch
#4). In another OS bug, we found we had to do an ferror() on machines
where fflush() did not return an error for "Quota exceeded".
Various code fragments that we put in with some vague idea of
supporting System V (without really testing them) were quite faulty,
like "#include <sys/utsname>" instead of "utsname.h". We hope to have
fixed all the glaring ones that were reported. However, we do still
have some patches for compilation on a 3B2 (from Matt Jonson) which we
didn't manage to install yet...
On larger mailfiles, MM v0.88 would use an extraordinary amount of
virtual memory. For example, reading in a 3 megabyte file would
increase MM's image size to 21 megabytes. This occured in
local_contig_count(), and was fixed by better estimating the number of
messages that would be in the mail file -- instead of guessing there
would be ten messages and realloc()ing by ten messages at a time, we
now guess that each message is about 1000 characters and estimate
based on the size of the file (so a 3 megabyte file would be estimated
to have 3000 messages instead of 10). The behavior we were seeing
seems to be related to a rumor we've heard that on some systems free()
doesn't free, and so perhaps realloc() doesn't either. (Rein Tollevik
found and solved this problem for us.)
Quota checking (for the STATUS command) is now correctly implemented
for systems with quotactl().
MM v0.88 would sometimes pause a very long while after the CRT-FILTER
(or PRINT-FILTER, or LIST or WHO command) exited. The problem was
that MM has a SIGCHLD handler, in order to catch all the sendmail
processes it leaves in the background, but this handler also caught
the processes started by popen(). So when pclose() waited for its
child process, it was already gone, but the wait() wouldn't return an
error since there were sendmail processes that it could wait on. So,
MM wouldn't wake up after exiting from the CRT-FILTER (or whatever)
until a (all?) sendmail process exited. The new mm_popen() and
mm_pclose() routines handle this more nicely (though the optimal
solution would be for popen() and pclose() to be implemented with the
rumored wait4() call that takes a PID as an argument).
MM's usage statistics (when turned on) now include CPU usage.
Someone pointed out that RFC822 dates have only two-digit years, like
"90" instead of "1990", so the date headers (Date: and Resent-Date:)
MM v0.90 prints now comply. We'll cross this road again in 9 years.
Other New Features
------------------
Display width and length are now handled better, including trapping
SIG_WINCH and checking the length/width on SIG_CONT for windows users
who resize their windows.
MM now supports per-mailfile "rc" files, named "<mailfile>.rc". These
are TAKEn automatically whenever the corresponding mailfile is read
in. For example, if there were a mail file that several people looked
at, say "bug-reports", the "bug-reports.rc" file might contain an
"echo" of a policy statement concerning that file, or run "headers
since yesterday" or some such.
In the mmail.el code (for GNU emacs mmail mode) we now set the
outgoing message to be in autofill mode.
SET with no arguments gives the same behavior as SHOW with no
arguments -- it lists the value of all variables.
A new feature in CCMD (and therefore in MM) is command-line editing.
This is based on standard kshell emacs-style command-line editing, and
includes ^A (beginning of line), ^E (end of line), ^B (back one
character), and ^F (forward one character), plus several more that
should be documented elsewhere (but may not be). Command-line editing
can be modified with the (shell) environment variable CCMDOPT. This
contains colon-separated options from: "emacs", "gmacs", or "vi"
(unimplemented) plus "bcase" or "fcase" (whether esc-U, esc-L and
esc-C casify forwards or backwords).
Assorted (Non-Sorted?) Other Bugfixes and Enhancements
------------------------------------------------------
Several problems with not checking for NULL values and not
initializing values to NULL were fixed (including MM v0.88 patch #1).
This includes a pesky one where replying to a message without a date
field would make MM dump core.
The transform program has been renamed to mm-trans since the old name
was too vague. Also, it is now better able to find message-boundaries
when they aren't where they should be. Most importantly, it now takes
two arguments, an inputfile and outputfile, to discourage users from
typing "mm-trans myfile > myfile" and losing the whole file.
At startup time, MM remembers where aliases came from (.mminit,
.mailrc, or system-wide mm.conf), so we don't copy aliases from
.mailrc to .mminit on a save-init. (Users complained that MM didn't
notice changes to the .mailrc file, since it was remembering what the
file used to look like.)
We found that GNU emacs used to write slightly broken Babyl files
(from rmail), and since we learned Babyl from Emacs so did MM v0.88.
We've fixed MM to use the un-broken format, but if your emacs is
really old you may want to define BROKEN_BABYL in your config.h.
Otherwise, MM v0.90 will read either the "broken" or non-broken
formats, and will write out the correct form. Note that we recently
found out that we *still* don't write complete Babyl format headers,
so some variables that GNU emacs keeps there may disappear after the
file is read with MM.
When a message was being displayed, "folding" (breaking into nice
lines less than 80 characters, with appropriate RFC tabbing) of long
message headers had some problems and should be better now. In
particular, mail from Carnegie Mellon's Andrew system was liable to
make MM dump core when it tried to "fold" a header with no spaces for
more than 80 characters.
We found Yet Another case where we were reversing the Daylight Savings
Time adjustment. There was also a spot where we didn't zero out or
set a "seconds" variable, and it was sometimes filled with a
significantly large bogus value. This seems to have affected only
babyl format.
When MM pushes to a shell or otherwise runs a program underneath
itself, it now resets the umask to the value from before MM ran,
instead of leaving it as the NEW-FILE-MODE (which MM favors for
creating mail files). The NEW-FILE-MODE proved inappropriate.
EXIT at Read-Level no longer does an EXPUNGE, since we're in the
middle of a message-sequence and we don't want to change all the
numbers.
When the sigint_handler calls askem() to ask the user "Do you really
want to exit mm?" it first opens /dev/tty. If there was an error on
the open, the tty passed to askem would not be valid, and the read in
askem() would get EBADF, which wasn't checked, and it would go into a
read loop. Also, if a user is no longer on a tty to respond, read
would get EOF and loop forever waiting for a yes/no response. Both
are fixed in v0.90 (and MM v0.88 patch #9).
When a corrupt mail file is read in, it is set to read-only (EXAMINE)
so the problems won't be compounded. In addition, MM v0.90 releases
the lock on the file, since it doesn't need it. Also, the warnings
that are printed out in this case have been modified, hopefully to be
clearer.
MM v0.88 would lose the setuid bit on mailfiles, which sendmail
insists on before it will write to a file (based on a user's
forwarding). We now do an extra chmod() to make sure the file
protection stays the same when we rewrite the file. (We do however
find that the bit sometimes spontaneously vanishes without MM's
involvement, perhaps a sendmail bug somewhere...)
It is now possible to have a subject of ":-)", as well as other
headers whose value begins with a ":".
In MM v0.88, if a user had an alias like, say, "samantha", and tried
to send mail to a local user named "sam", MM would match "sam" to the
alias "samantha" and send the mail there instead. MM v0.90 makes use
of a new CCMD flag (implemented for MM) called KEY_EMO to accept an
"exact match only". This means that CCMD will do escape-completion on
the alias (so "sam<ESC>" will produce "samantha") but if no completion
is done the alias is not matched.
When a message is copied or moved to another file, the new copy is no
longer marked as deleted.
The movemail program is better about not returning success when it
didn't really succeed in writing the file out.
As described in section 4.4.4 of RFC822:
o The "Sender" field mailbox should NEVER be used
automatically, in a recipient's reply message.
Therefore MM v0.90 no longer references the "Sender:" field when doing
a reply. It will use the "Reply-To:" field if there is one, or else
the "From:" field.
MM v0.88 would leave users in send mode after FORWARDing a message.
Fixed in v0.90.
In MM v.0.90 the AFTER message sequence, with no time specified, no
longer includes the day specified, though SINCE does.
The code for the TO message sequence now checks the BCC field of each
message as well, since these are printed in the saved-messages file
(and any other file MM delivers directly to).
Mailing List?
-------------
Werner Uhrig has suggested a separate mailing-list for MM maintainers
at other sites to report and discuss problems and ideas for
changes and ask for help and suggest 'neat usage tricks' (reducing the
load on BUG-MM in the process) - and we think it is a useful idea, but
don't want the overhead of organizing and maintaining another list.
Any interest or volunteers out there?
Werner is handling a lot of other lists already, and is also not keen
for more and would prefer that someone with a lighter load would take
on this task. But he is willing to help get things started - so
please respond to him directly so he can decide on setting things up
(or not).
Please send mail to
Werner Uhrig <werner@rascal.ics.utexas.edu>
Please note that we are not trying to discourage mail to bug-mm for
bug reports, comments, questions, suggestions, etc. That is still how
you would get in touch with us. Werner's list is more of a "MM Users
Group" type of mailing list.
Thanks
------
David M. Katinsky, from Rutgers University, sent us many patches which
have been incorporated into MM v0.90. We'd like to thank him for
sending them again and again when we didn't put them right in :-).
Thanks to everyone else who sent us patches, even if we didn't install
them yet -- you know who you are. So do our RCS files.
Though we may occasionally sound grumpy when defending MM, we are
thankful for all the bug reports and suggestions that everyone submits
so we can keep making MM better. We still have our list of hundreds
of things we want to fix and improve, so even if your suggestion
hasn't shown up in v0.90 we probably haven't forgotten it.
Thanks to Joe Brennan, our Email Consultant and first line of defense
for local bug-mm mail, who has done a lot of work on the MM help
files, as well as on our local manual.
And of course, thanks to everyone who sends us Rave Reviews to post on
our wall and cheer us up when we feel unloved :-).