home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / mm / release-0.90.txt < prev    next >
Text File  |  2020-01-01  |  30KB  |  639 lines

  1.  
  2. These notes compare MM v0.88, as originally released, with the new
  3. release of 0.90.  That means that descriptions of changes that were
  4. distributed as patches are included, so they make look familiar.
  5.  
  6. General Direction of MM v0.90 Mods
  7. ----------------------------------
  8.  
  9. In the last two years, one of the biggest projects at our Computer
  10. Center has been a push towards campus-wide email.  We are now offering
  11. free electronic mail accounts to all staff members and soon hope to
  12. offer them to all students as well.  As our preferred mail-user-agent,
  13. MM is a big part of that project.  Many of the major recent
  14. modifications to MM have been towards making it friendlier to novices.
  15. We now have a staff position of "MM Electronic Mail Consultant" as
  16. part of our User Services group.
  17.  
  18. In addition to skipping version 0.89 (you could say the running
  19. versions we released internally were 0.89) and going right to 0.90
  20. (since it is 1990, after all), we have dropped the "Beta" designation
  21. from MM's version strings (and no longer label it a "test version" on
  22. startup). 
  23.  
  24. Of course, there are still many things we want to do to MM.  We have
  25. patches from various people that we're holding on to but haven't had a
  26. chance to install.  And there is our 600 line long "tofix" file.
  27. However, it was about time (well, past time) for us to release a new
  28. version of MM, so here it is.
  29.  
  30. New Command Organization
  31. ------------------------
  32.  
  33. In MM v0.88, a question-mark for help at the top-level prompt would
  34. give a listing of all possible MM commands in alphabetical order.
  35. Since this list covered more than one screen, it was pretty useless to
  36. any but the most adventurous users.
  37.  
  38. The new command organization is divided into sections like "basic"
  39. commands, "message-handling" commands, and "filing" commands, with
  40. random "other" commands at the end.  This way, the response to "?"
  41. starts with the most common commands, and only shows the obscure
  42. commands later.  Also, a command-completion pager was added to CCMD,
  43. so users can "quit" after one screen of "?" response.
  44.  
  45. In addition, when the new variable USER-LEVEL is set to "novice", a
  46. "hints" line is printed before every prompt.  This suggests five or
  47. six of the most common commands for the user to choose from.
  48.  
  49. Help Files
  50. ----------
  51.  
  52. To make upkeep of the help messages for MM easier, each help "screen"
  53. is now in its own file.  You may recall that in v0.88 we moved the
  54. help from all the different MM source files into one big "database"
  55. file.  This file proved too big and unwieldy, and was broken out into
  56. separate files.
  57.  
  58. Joe Brennan, our MM consultant, has done an extensive rewrite on all
  59. the help files for MM.  Since his job is to make things as easy as
  60. possible for people at Columbia, some of the help files have become
  61. somewhat Columbia-specific, so you may want to modify them for your
  62. site.  To varying degrees, the Columbia-specific help screens are
  63. those for the commands (at all levels): BUG, FINGER, MM, PRINT, PUSH,
  64. SUSPEND, and Z; for the variables CRT-FILTER, EDITOR, FINGER-COMMAND,
  65. HELP-DIR, PRINT-FILTER, READ-PROMPT, SEND-PROMPT, SPELLER,
  66. USE-CRT-FILTER-ALWAYS, and USER-LEVEL; and for the general topic TEXT
  67. MODE.  You may or may not need to change these for your site.
  68.  
  69. There are also help-screens for some "topics" that didn't fit into any
  70. individual command.  First there are some for the various command
  71. groupings -- BASIC, CUSTOMIZATION, FILING, HEADER-FIELD, INFORMATION,
  72. MESSAGE-HANDLING, MESSAGE-TAGGING, OTHER, and TOP.  Then there are
  73. selected MM related subjects -- ADDRESSING, BITNET, CCMD, INTERNET,
  74. MESSAGE-SEQUENCE, SIGNATURE-FILE, and TEXT-MODE.
  75.  
  76. Joe also wrote a paper manual, which is somewhat Columbia-specific.
  77. We will look into making the Scribe source and/or Postscript version
  78. of this available at some future date.
  79.  
  80. With our fancy new help screens, we found we had several over one
  81. screenful, so we now pipe them through a pager (the CRT-FILTER
  82. variable) when needed.
  83.  
  84. Check out the help files for descriptions of the new commands and
  85. variables below.
  86.  
  87. New Commands
  88. ------------
  89.  
  90. The BYE command replaces the now-invisible QQUIT command, for less
  91. obscurity. 
  92.  
  93. The FINGER command runs finger under MM, without having to push to a
  94. shell or suspend MM.  It uses the FINGER-COMMAND variable.  This was a
  95. convenience for our novice users.
  96.  
  97. The REVIEW command is just like READ, but requires an argument (that
  98. is, no default of "unseen").  This was intended to help users who
  99. thought there was no way to see messages they had already seen.
  100.  
  101. CREATE-INIT has been renamed to SAVE-INIT since it is to be used when
  102. you already have an init file (to avoid confusion with the PROFILE
  103. command).
  104.  
  105. The BACKTRACK command, which is intended to be the same as FOLLOW,
  106. only backwards instead of forwards, has been added to the list of
  107. commands.  However, as with FOLLOW, BACKTRACK is not yet implemented.
  108.  
  109. New and Modified Variables
  110. --------------------------
  111.  
  112. See the help screens for more information on the following variables.
  113.  
  114. The "maybe"-type (yes, no, ask) variable EXPUNGE-ON-BYE determines
  115. whether MM will expunge the file when users use the "bye" command.
  116. Default is ASK.
  117.  
  118. The FINGER-COMMAND variable sets the path and name for a local finger
  119. command.  See the new FINGER command, above.  This will probably be
  120. set site-wide in the (/usr/local/lib/mm) mm.conf file.  Default is a
  121. pathless "finger".
  122.  
  123. The "maybe"-type HANDLE-CHANGED-MODTIME variable controls MM's
  124. behavior when it determines that the mail file has been changed on
  125. disk (since the last time MM touched it).  This indicates a violation
  126. of MM's locks.  See the description of CHECK_MTIME() below.
  127. Default is YES, though people reading mail files over NFS (which is
  128. *not* recommended) may find they prefer ASK.
  129.  
  130. AUTO-CREATE-FILES (type "maybe") controls whether MM asks each time it
  131. wants to create a new file.  Note that the default value of ASK is
  132. preferred since it helps keep users from misplacing messages by
  133. putting them in the wrong directory or making a typo when they specify
  134. the file name.
  135.  
  136. APPEND-NEW-MAIL (type "boolean", or yes/no) controls MM's behavior
  137. when it is writing out new mail.  Instead of rewriting the whole mail
  138. file, a new possible behavior will simply append the new messages to
  139. the end of the current file.  Note that this will not write out flag
  140. changes, like a message going from UNSEEN to SEEN (the way a complete
  141. rewrite would), but it saves a lot of time with big files.  MM will
  142. make sure to write out the smaller changes before it exits anyway.
  143. Default is NO for the old (perhaps safer) behavior.
  144.  
  145. The DEFAULT-FCC-LIST variable has been in MM for a while, but
  146. apparently it was ignored in MM v0.88.  It is implemented in v0.90.
  147.  
  148. The new USER-LEVEL variable can have the values "novice" or "expert".
  149. Currently, this is only used for the hints line described above, but
  150. it might be expanded.
  151.  
  152. The CHECK-INTERVAL variable controls how often MM checks for new mail
  153. when it is idle.  We set it to 300 seconds (five minutes) since MM was
  154. using up too much CPU time checking for new mail.
  155.  
  156. REPLY-INCLUDE-ME should now work more the way it is documented to.
  157. That is, it will not add the user to the list of recipients if the
  158. variable is "yes", but will remove the user if the variable is "no".
  159. However, REPLY-INCLUDE-ME no longer controls whether the user is
  160. included in alias expansions (via the "-om" option to sendmail).
  161.  
  162. MM v0.90 no longer adds the user's signature file when
  163. delivering to files. When delivery to files fails, the deadletter file
  164. is written out in a standard mail file format rather than just as text.
  165.  
  166. MODIFY-READ-ONLY is now defaulted to "yes" at compile time, due to
  167. numerous complaints.  It can of course be overridden in the
  168. system-wide or user init files.
  169.  
  170. Also relating to variables, MM v0.90 now supports per-group init
  171. files.  Based on a user's primary group (determined by getgid()), if
  172. the file "groupname.ini" exists in MM's library directory, MM will
  173. read it in right after it reads the system-wide init file ("mm.conf").
  174. This could be used for setting up aliases, or for setting USER-LEVEL
  175. to "novice" for a group of users.  The compilation variable
  176. GROUP_INIT_FORMAT can be used to set the name of this group init file
  177. (in case you don't want it in the MM's library directory, due to
  178. distributed maintenance perhaps).  GROUP_INIT_FORMAT should contain
  179. one "%s", to be replaced by the groupname.
  180.  
  181. New Recovery Features
  182. ---------------------
  183.  
  184. Like many programs, when MM v0.88 writes out a file it first moves the
  185. old version to filename~ (tilde), to ease recovery if something goes
  186. wrong.  Unfortunately, when the system would crash in the middle of MM
  187. writing out a file, there was no way to tell whether MM had
  188. successfully written out the file.  Often, a user would log in after
  189. the crash, enter MM with the unfinished (often empty) mailfile, get
  190. new mail, and MM would write over the ~ file with the empty one as it
  191. read in the new mail.  Thus the old mail was lost.
  192.  
  193. In MM v0.90 we added an extra step so MM can tell whether it succeeded
  194. or failed in writing a new file.  Instead of moving the mail file to
  195. mailfile~, we move it to #mailfile# (like Emacs).  When the new file
  196. is successfully written, #mailfile# gets moved to mailfile~.  Thus,
  197. whenever MM tries to GET or EXAMINE mailfile and sees #mailfile#, it
  198. knows to worry, and prints appropriate error messages.  It
  199. automatically moves #mailfile# to be the real mailfile (GET only, not
  200. EXAMINE) in situations where the mailfile is either missing or empty,
  201. and otherwise advises the user to call for help.
  202.  
  203. Note that sometimes, users *will* edit their mailfiles with Emacs, and
  204. Emacs may leave the #mailfile# file.  This confuses MM, but we judged
  205. that the consistency of using the same filename scheme was worth the
  206. ensuing confusion.
  207.  
  208. In MM v0.88, there was a check included to make sure MM was the only
  209. program writing to the mail file, as a way of backing up the
  210. advisory-only Unix locks (for example, if you look at your mailfile
  211. with Emacs it will ignore MM's locks).  However, this check was only
  212. performed when checking for new mail, rather than whenever MM was
  213. about to write to the file, and no type of recovery was done other
  214. than an advisory message.
  215.  
  216. In MM v0.90, we have a new CHECK_MTIME routine, called whenever MM is
  217. about to write to the mail file.  It checks the modify time on the
  218. file, and if it doesn't match when MM last wrote to the file then MM
  219. attempts to recover by writing the mail file out to filename.PID, and
  220. changing the internal copy to read-only (EXAMINE).  It also prints
  221. lots of verbose warnings.
  222.  
  223. Unfortunately, we have found that check_mtime() and NFS don't get
  224. along too well -- a stat() on an NFS file that has *just* been written
  225. will often give the mtime from before the last write, which makes
  226. check_mtime think the file was changed when the mtime later gets
  227. updated.  However, it is not recommended to read mail files over NFS
  228. with MM, since we don't trust the locking either.
  229.  
  230. The modifications for check_mtime() involved the new flag MF_SAVEONLY
  231. for the flags field of a message vector.  Unlike MF_RDONLY, which
  232. indicates that the current file was read in with EXAMINE and can
  233. therefore not be modified, MF_SAVEONLY indicates that MM changed the
  234. file to be read-only after encountering an error.  MF_SAVEONLY means
  235. the user is discouraged from changing MM's internal copy, but MM still
  236. wants to write the file out to disk -- perhaps the user had a quota
  237. problem when we originally noticed the changed mtime, and we want to
  238. give them a chance to clean up and write out the file.
  239.  
  240. MM v0.90 does an fsync() on the mailfile after it finishes writing it
  241. out, to make sure the changes get flushed to disk.
  242.  
  243. When sendmail is not successfully called, MM v0.90 tells the user and
  244. suggests they try the SAVE-DRAFT command.
  245.  
  246. New Parse-Error Handling Code
  247. -----------------------------
  248.  
  249. A new feature was added to make it easier for users to fix incorrect
  250. commands.  When MM (or CCMD) gets a syntax error, the correct part of
  251. the previous line is automatically put back in the command buffer so
  252. the user can fix the command without having to retype that part (as if
  253. they hadn't typed the wrong part and return).  See also command-line
  254. editing, below.
  255.  
  256. Also, error messages were made a little friendlier by modifiying CCMD
  257. so each FDB can contain an error string (like the help string).  For
  258. example, "headers snorkle" will now generate the error '?Invalid
  259. message sequence - "snorkle"' instead of the less-helpful "does not
  260. match switch or keyword".
  261.  
  262. New CHECK_CF() Semantics
  263. ------------------------
  264.  
  265. The CHECK_CF() routine checks for whether there is a current mail
  266. file, and if necessary whether it can be written to.  To handle
  267. command line arguments (for example, "$ mm read unseen") check_cf()
  268. will automagically GET or EXAMINE the main mail file (from the
  269. MAIL-FILE variable).
  270.  
  271. In MM v0.88, the argument to check_cf() was a simple boolean
  272. indicating whether write access was necessary.  However, we found it
  273. was better to pass values of O_RDONLY, O_WRONLY or O_RDWR.  These
  274. indicate, respectively, wanting a read-only file (EXAMINE), needing a
  275. writable file (GET), or wanting a writable file but willing to settle
  276. for a read-only file.  O_RDWR is useful in the case of command-line
  277. arguments -- the "mm read unseen" example above would try to do a GET,
  278. in order to update the SEEN flags if possible, but if the GET failed
  279. because the file was already locked, check_cf() would fall back on an
  280. EXAMINE, since other than the unseen flag READ is really a read-only
  281. (so to speak) operation.
  282.  
  283. The new O_RDWR option is also useful for running check_cf() in the
  284. middle of parsing a command like "edit".  (MM always runs check_cf()
  285. before parsing a message-sequence.)  Otherwise, if MODIFY-READ-ONLY
  286. was set to ASK, we were getting a problem where the "modify anyway?"
  287. question occurred in the middle of parsing a line, and the two
  288. simultaneous parses didn't get along very well.  (O_RDONLY wouldn't
  289. work in this case because the automagic GET (for command-line args)
  290. would be an EXAMINE and mess up the post-parse check, since EDIT
  291. really *does* want to modify the file.)
  292.  
  293. In addition, check_cf() returns false on error instead of longjmp'ing
  294. with a cmerr(), to allow the calling routine to handle the error as
  295. desired.
  296.  
  297. Better Handling of MAIL-DIRECTORY and Other Directory Type Variables
  298. --------------------------------------------------------------------
  299.  
  300. The parser for the mail-directory variable now handles several things
  301. better than it used to.  In MM v0.88, setting the mail-directory to be
  302. the same as the current directory would cause each file to be listed
  303. twice on "?".  This is no longer the case in MM v0.90.
  304.  
  305. Also, there is some confusion, on creating new files, of whether they
  306. should be placed in the MAIL-DIRECTORY or the current directory.  In
  307. MM v0.90 the policy is to put them in the MAIL-DIRECTORY (so they
  308. don't get misplaced) unless a subdirectory is specified -- which is
  309. taken to be under the current directory.
  310.  
  311. To unset the MAIL-DIRECTORY variable, users can now just confirm
  312. (leave it blank).
  313.  
  314. In addition, "./" is stripped off the beginning of a directory
  315. variable, and "/." is stripped off the end, for neatness.
  316.  
  317. SAME_FILE() Routine
  318. -------------------
  319.  
  320. MM v0.88 used string comparisons to check whether two filenames
  321. referred to the same file.  Thus, it could be tricked by variations on
  322. the name.  MM v0.90 has new code to perform this check, by comparing
  323. inodes and device numbers.  The first place it was used was to see if
  324. the file MM was opening was the main mail file.
  325.  
  326. We also used same_file() to make MM more aware of when it's doing a
  327. GET or EXAMINE of the same file that it is currently looking at.  For
  328. example, if you do two GETs in a row on the same filename, MM v0.88
  329. would say something about not being able to lock the file, whereas MM
  330. v0.90 will say the file is "already current writable mail file".
  331. Similarly "upgrades" and "downgrades" between GETs and EXAMINEs of the
  332. same file are handled more intelligently (see code in file.c -- look
  333. for "same_file").
  334.  
  335. Secret Debugging Code
  336. ---------------------
  337.  
  338. We found and fixed a malloc() bug or two (or ten), as well as some
  339. memory leaks.  We expect there may be more malloc() bugs, however.
  340. While looking for memory problems, we wrote some routines which are
  341. currently disabled but may be of interest to anyone out there trying
  342. to debug MM.
  343.  
  344. The debug_validate_msgvec() routine was written when messages were
  345. randomly being mangled -- in particular, "From: " fields would
  346. disappear.  Periodically, this routine would be called to look through
  347. the internal copy of the mail file and see if it still looked the way
  348. it "should", in order to help pinpoint just when (if not where) it was
  349. getting mangled.
  350.  
  351. The m_checkranges() routine, along with our whole memory-debugging
  352. suite, can be called periodically to make sure that all malloc'd
  353. strings are behaving correctly -- not writing past their boundaries.
  354. This memory-debugging code is controlled by the MDEBUG compile time
  355. variable, and is in debug.c.
  356.  
  357. Non-Interactive MM
  358. ------------------
  359.  
  360. MM was designed as a very friendly interactive program.  However,
  361. occasionally, users want to use it non-interactively -- from a "take"
  362. file or from a pipe.
  363.  
  364. The several "maybe" type variables, when set to "ask", sometimes
  365. interfered with TAKE files, by trying to be interactive when it was
  366. not appropriate.  Many such instances have been fixed by checking for
  367. interactiveness before asking (though probably not all).
  368.  
  369. The SMAIL command is for using MM in a pipe to send mail, much the way
  370. "mail" is used in a pipe now.  It is for True Believers who don't want
  371. to use anything but MM ever.
  372.  
  373. Compile-Time and Other Programmer-Level Changes
  374. -----------------------------------------------
  375.  
  376. MM v0.88 came with the configuration files s-bsd43.h, s-hpux.h,
  377. s-mtxinu43.h, s-sun40.h, and s-ultrix20.h.  In addition, MM v0.90 has
  378. s-aixrt.h, s-dynix211.h, s-isi40.h, s-sun34.h, s-sun35.h, s-sysv3b2.h,
  379. s-sysv52.h, and s-umaxv.h.  We also had to add a "volatile" definition
  380. for non-ANSI C compilers to the bottom of all the s-*.h files.  As
  381. always, please send us your new config files so we can pass them
  382. around. 
  383.  
  384. The Makefile has been cleaned up a bit.  Several people complained
  385. that "make clean" wasn't cleaning up everything it should, so we fixed
  386. (some of) that.  The install target is now more correctly implemented
  387. with several sub-targets and without invoking the old mm-install shell
  388. script.  (This includes a lot of handwaving for installing all the
  389. help files.)
  390.  
  391. MM's version number now contains a patchlevel number, to register how
  392. many patches have been applied, in addition to the major, minor, and
  393. edit numbers in MM v0.88 version numbers.
  394.  
  395. A lot of people, upon compiling MM, found that it generated "From: "
  396. fields containing "user@" and no hostname.  This had to do with
  397. gethostbyname() not returning a fully-qualified hostname and MM not
  398. noticing.  This has been patched, thanks to Peter Karp.  Similarly, MM
  399. will now use the HOSTNAME variable if all else fails, though it would
  400. be better not to have the hostname hardcoded.
  401.  
  402. We avoid use of fprintf() (for writing mail files), since it seems to
  403. be limited to 64K on some machines and large messages (often binhex'd)
  404. were getting truncated.  We also encountered a problem with certain
  405. versions of fputs() which terminate output on newline (MM v0.88 patch
  406. #4).  In another OS bug, we found we had to do an ferror() on machines
  407. where fflush() did not return an error for "Quota exceeded".
  408.  
  409. Various code fragments that we put in with some vague idea of
  410. supporting System V (without really testing them) were quite faulty,
  411. like "#include <sys/utsname>" instead of "utsname.h".  We hope to have
  412. fixed all the glaring ones that were reported.  However, we do still
  413. have some patches for compilation on a 3B2 (from Matt Jonson) which we
  414. didn't manage to install yet...
  415.  
  416. On larger mailfiles, MM v0.88 would use an extraordinary amount of
  417. virtual memory.  For example, reading in a 3 megabyte file would
  418. increase MM's image size to 21 megabytes.  This occured in
  419. local_contig_count(), and was fixed by better estimating the number of
  420. messages that would be in the mail file -- instead of guessing there
  421. would be ten messages and realloc()ing by ten messages at a time, we
  422. now guess that each message is about 1000 characters and estimate
  423. based on the size of the file (so a 3 megabyte file would be estimated
  424. to have 3000 messages instead of 10).  The behavior we were seeing
  425. seems to be related to a rumor we've heard that on some systems free()
  426. doesn't free, and so perhaps realloc() doesn't either. (Rein Tollevik
  427. found and solved this problem for us.)
  428.  
  429. Quota checking (for the STATUS command) is now correctly implemented
  430. for systems with quotactl().
  431.  
  432. MM v0.88 would sometimes pause a very long while after the CRT-FILTER
  433. (or PRINT-FILTER, or LIST or WHO command) exited.  The problem was
  434. that MM has a SIGCHLD handler, in order to catch all the sendmail
  435. processes it leaves in the background, but this handler also caught
  436. the processes started by popen().  So when pclose() waited for its
  437. child process, it was already gone, but the wait() wouldn't return an
  438. error since there were sendmail processes that it could wait on.  So,
  439. MM wouldn't wake up after exiting from the CRT-FILTER (or whatever)
  440. until a (all?) sendmail process exited.  The new mm_popen() and
  441. mm_pclose() routines handle this more nicely (though the optimal
  442. solution would be for popen() and pclose() to be implemented with the
  443. rumored wait4() call that takes a PID as an argument).
  444.  
  445. MM's usage statistics (when turned on) now include CPU usage.
  446.  
  447. Someone pointed out that RFC822 dates have only two-digit years, like
  448. "90" instead of "1990", so the date headers (Date: and Resent-Date:)
  449. MM v0.90 prints now comply.  We'll cross this road again in 9 years.
  450.  
  451. Other New Features
  452. ------------------
  453.  
  454. Display width and length are now handled better, including trapping
  455. SIG_WINCH and checking the length/width on SIG_CONT for windows users
  456. who resize their windows.
  457.  
  458. MM now supports per-mailfile "rc" files, named "<mailfile>.rc".  These
  459. are TAKEn automatically whenever the corresponding mailfile is read
  460. in.  For example, if there were a mail file that several people looked
  461. at, say "bug-reports", the "bug-reports.rc" file might contain an
  462. "echo" of a policy statement concerning that file, or run "headers
  463. since yesterday" or some such.
  464.  
  465. In the mmail.el code (for GNU emacs mmail mode) we now set the
  466. outgoing message to be in autofill mode.
  467.  
  468. SET with no arguments gives the same behavior as SHOW with no
  469. arguments -- it lists the value of all variables.
  470.  
  471. A new feature in CCMD (and therefore in MM) is command-line editing.
  472. This is based on standard kshell emacs-style command-line editing, and
  473. includes ^A (beginning of line), ^E (end of line), ^B (back one
  474. character), and ^F (forward one character), plus several more that
  475. should be documented elsewhere (but may not be).  Command-line editing
  476. can be modified with the (shell) environment variable CCMDOPT.  This
  477. contains colon-separated options from: "emacs", "gmacs", or "vi"
  478. (unimplemented) plus "bcase" or "fcase" (whether esc-U, esc-L and
  479. esc-C casify forwards or backwords).
  480.  
  481. Assorted (Non-Sorted?) Other Bugfixes and Enhancements
  482. ------------------------------------------------------
  483.  
  484. Several problems with not checking for NULL values and not
  485. initializing values to NULL were fixed (including MM v0.88 patch #1).
  486. This includes a pesky one where replying to a message without a date
  487. field would make MM dump core.
  488.  
  489. The transform program has been renamed to mm-trans since the old name
  490. was too vague.  Also, it is now better able to find message-boundaries
  491. when they aren't where they should be.  Most importantly, it now takes
  492. two arguments, an inputfile and outputfile, to discourage users from
  493. typing "mm-trans myfile > myfile" and losing the whole file.
  494.  
  495. At startup time, MM remembers where aliases came from (.mminit,
  496. .mailrc, or system-wide mm.conf), so we don't copy aliases from
  497. .mailrc to .mminit on a save-init.  (Users complained that MM didn't
  498. notice changes to the .mailrc file, since it was remembering what the
  499. file used to look like.)
  500.  
  501. We found that GNU emacs used to write slightly broken Babyl files
  502. (from rmail), and since we learned Babyl from Emacs so did MM v0.88.
  503. We've fixed MM to use the un-broken format, but if your emacs is
  504. really old you may want to define BROKEN_BABYL in your config.h.
  505. Otherwise, MM v0.90 will read either the "broken" or non-broken
  506. formats, and will write out the correct form.  Note that we recently
  507. found out that we *still* don't write complete Babyl format headers,
  508. so some variables that GNU emacs keeps there may disappear after the
  509. file is read with MM.
  510.  
  511. When a message was being displayed, "folding" (breaking into nice
  512. lines less than 80 characters, with appropriate RFC tabbing) of long
  513. message headers had some problems and should be better now.  In
  514. particular, mail from Carnegie Mellon's Andrew system was liable to
  515. make MM dump core when it tried to "fold" a header with no spaces for
  516. more than 80 characters.
  517.  
  518. We found Yet Another case where we were reversing the Daylight Savings
  519. Time adjustment.  There was also a spot where we didn't zero out or
  520. set a "seconds" variable, and it was sometimes filled with a
  521. significantly large bogus value.  This seems to have affected only
  522. babyl format.
  523.  
  524. When MM pushes to a shell or otherwise runs a program underneath
  525. itself, it now resets the umask to the value from before MM ran,
  526. instead of leaving it as the NEW-FILE-MODE (which MM favors for
  527. creating mail files).  The NEW-FILE-MODE proved inappropriate.
  528.  
  529. EXIT at Read-Level no longer does an EXPUNGE, since we're in the
  530. middle of a message-sequence and we don't want to change all the
  531. numbers.
  532.  
  533. When the sigint_handler calls askem() to ask the user "Do you really
  534. want to exit mm?"  it first opens /dev/tty.  If there was an error on
  535. the open, the tty passed to askem would not be valid, and the read in
  536. askem() would get EBADF, which wasn't checked, and it would go into a
  537. read loop.  Also, if a user is no longer on a tty to respond, read
  538. would get EOF and loop forever waiting for a yes/no response.  Both
  539. are fixed in v0.90 (and MM v0.88 patch #9).
  540.  
  541. When a corrupt mail file is read in, it is set to read-only (EXAMINE)
  542. so the problems won't be compounded.  In addition, MM v0.90 releases
  543. the lock on the file, since it doesn't need it.  Also, the warnings
  544. that are printed out in this case have been modified, hopefully to be
  545. clearer.
  546.  
  547. MM v0.88 would lose the setuid bit on mailfiles, which sendmail
  548. insists on before it will write to a file (based on a user's
  549. forwarding).  We now do an extra chmod() to make sure the file
  550. protection stays the same when we rewrite the file.  (We do however
  551. find that the bit sometimes spontaneously vanishes without MM's
  552. involvement, perhaps a sendmail bug somewhere...)
  553.  
  554. It is now possible to have a subject of ":-)", as well as other
  555. headers whose value begins with a ":".
  556.  
  557. In MM v0.88, if a user had an alias like, say, "samantha", and tried
  558. to send mail to a local user named "sam", MM would match "sam" to the
  559. alias "samantha" and send the mail there instead.  MM v0.90 makes use
  560. of a new CCMD flag (implemented for MM) called KEY_EMO to accept an
  561. "exact match only".  This means that CCMD will do escape-completion on
  562. the alias (so "sam<ESC>" will produce "samantha") but if no completion
  563. is done the alias is not matched.
  564.  
  565. When a message is copied or moved to another file, the new copy is no
  566. longer marked as deleted.
  567.  
  568. The movemail program is better about not returning success when it
  569. didn't really succeed in writing the file out.
  570.  
  571. As described in section 4.4.4 of RFC822:
  572.  
  573.     o    The  "Sender"  field  mailbox  should  NEVER  be  used
  574.     automatically, in a recipient's reply message.
  575.  
  576. Therefore MM v0.90 no longer references the "Sender:" field when doing
  577. a reply.  It will use the "Reply-To:" field if there is one, or else
  578. the "From:" field.
  579.  
  580. MM v0.88 would leave users in send mode after FORWARDing a message.
  581. Fixed in v0.90.
  582.  
  583. In MM v.0.90 the AFTER message sequence, with no time specified, no
  584. longer includes the day specified, though SINCE does.
  585.  
  586. The code for the TO message sequence now checks the BCC field of each
  587. message as well, since these are printed in the saved-messages file
  588. (and any other file MM delivers directly to).
  589.  
  590. Mailing List?
  591. -------------
  592.  
  593. Werner Uhrig has suggested a separate mailing-list for MM maintainers
  594. at other sites to report and discuss problems and ideas for
  595. changes    and ask for help and suggest 'neat usage tricks' (reducing the
  596. load on BUG-MM in the process) - and we think it is a useful idea, but
  597. don't want the overhead of organizing and maintaining another list.
  598.  
  599. Any interest or volunteers out there?
  600.  
  601. Werner is handling a lot of other lists already, and is also not keen
  602. for more and would prefer that someone with a lighter load would take
  603. on this task.  But he is willing to help get things started - so
  604. please respond to him directly so he can decide on setting things up
  605. (or not).
  606.  
  607. Please send mail to
  608.  
  609.     Werner Uhrig <werner@rascal.ics.utexas.edu>
  610.  
  611. Please note that we are not trying to discourage mail to bug-mm for
  612. bug reports, comments, questions, suggestions, etc.  That is still how
  613. you would get in touch with us.  Werner's list is more of a "MM Users
  614. Group" type of mailing list.
  615.  
  616. Thanks
  617. ------
  618.  
  619. David M. Katinsky, from Rutgers University, sent us many patches which
  620. have been incorporated into MM v0.90.  We'd like to thank him for
  621. sending them again and again when we didn't put them right in :-).
  622.  
  623. Thanks to everyone else who sent us patches, even if we didn't install
  624. them yet -- you know who you are.  So do our RCS files.
  625.  
  626. Though we may occasionally sound grumpy when defending MM, we are
  627. thankful for all the bug reports and suggestions that everyone submits
  628. so we can keep making MM better.  We still have our list of hundreds
  629. of things we want to fix and improve, so even if your suggestion
  630. hasn't shown up in v0.90 we probably haven't forgotten it.
  631.  
  632. Thanks to Joe Brennan, our Email Consultant and first line of defense
  633. for local bug-mm mail, who has done a lot of work on the MM help
  634. files, as well as on our local manual.
  635.  
  636. And of course, thanks to everyone who sends us Rave Reviews to post on
  637. our wall and cheer us up when we feel unloved :-).
  638.  
  639.