% begin text \banner \section{Acknowledgements} The \MH/ system described herein is based on the original Rand \MH/ system. It has been extensively developed (perhaps too much so) by Marshall Rose and John Romine at the University of California, Irvine. Einar Stefferud, Jerry Sweet, and Terry Domae provided numerous suggestions to improve the UCI version of \MH/. \section{Disclaimer} The Regents of the University of California wish to make it known that: \bigquote Although each program has been tested by its contributor, no warranty, express or implied, is made by the contributor or the University of California, as to the accuracy and functioning of the program and related program material, nor shall the fact of distribution constitute any such warranty, and no responsibility is assumed by the contributor or the University of California in connection herewith. \endbigquote \section{Conventions} In this document, certain \TeX -formatting conventions are adhered to: {\advance\leftskip by\parindent \item{1.} The names of \unix/ commands, such as \pgm{comp}, are presented in {\it text italics}. \item{2.} Arguments to programs, such as \arg{msgs}, are presented in {\sl slanted roman} and delimited by single-quotes. \item{3.} \unix/ pathnames and envariables, such as \file{/usr/uci/} and \file{\$SIGNATURE}, are also presented in {\sl slanted roman}. \item{4.} Text presenting an example, such as \eg{frated}, is presented in {\tt typewriter style}. \item{5.} Entries in the user's \MH/ \profile/ and \context/ files, such as \entry{Current-Folder}, are presented in {\sc Caps-Small-Caps} and delimited by a box. \smallskip} \bop\section{General Changes} This section discusses system-wide changes to \MH/ that are general in nature. \subsection{Message Numbering} In previous versions of \MH/, a folder could have up to \eg{999} messages; in \mh4, this limit has been raised to \eg{1999}. \subsection{Version Information} When any \MH/ command is invoked with the \switch{help} switch, in addition to listing the syntax of the command, the program will list information pertaining to its version. This information includes the version of \MH/, the host it was generated on, and the date the program was loaded. For example, \example MH \#4.25[UCI] (uci-750b) of Thu Jul 19 21:07:01 PDT 1984\endexample The \eg{\#4.25[UCI]} indicates that the program is from the UCI \mh4 version of \MH/. The program was generated on \eg{uci-750b}, on \eg{Thu Jul 19 21:07:01 PDT 1984}. \par This information is sometimes useful in the unusual circumstance when a bug is found in \MH/. By providing the version information, along with the circumstances concerning the problem with \MH/, the local \MH/ maintainer is better able to track-down the problem. \subsection{The User Context} The \MH/ profile for the user now consists of two parts: a static part, the \profile/, which is found in the user's \file{\$HOME/} directory, and, a dynamic part, the \context/, which is usually found in the user's \MH/ directory. The former file contains information which \MH/ commands read, but {\it never\/} write (e.g., command switches). The latter contains information that \MH/ commands read and write, (e.g., \entry{Current-Folder}). \par This change has three advantages over the way things were done in \mh3. \underbar{First}, a lot less information gets written out when an \MH/ command exits, if the context changes. This is due to the fact that the user's \context/ file is often much, much smaller than a user's \profile/ file. \underbar{Second}, one can keep different context files around (the entry \entry{context} is changed in the user's \profile/ file).% \nfootnote{Note that this entry must be given {\it entirely} in lowercase in the \profile/ file.} Hence, the \MH/ user can maintain different sets of private sequences (explained later), by manipulating different \context/ files. \underbar{Third}, if more than one person uses a \unix/ login (say a maintenance account), then each can define their own \file{\$MH} envariable to point to their \profile/ file. As a result, each user has the \MH/ environment which that user is accustomed to. Further, depending on the needs of the users who share the \unix/ login, the same or different contexts may be automatically maintained for that login. \par See \man{mh-profile}(5) for more details on the user context file. \section{Message Selection} A new facility has been added to give the \MH/ user greater power in selecting and referencing messages: first, a change to the \pgm{pick} program is described; second, the notion of user-defined sequences is detailed. \subsection{Selecting Messages} The \pgm{pick} command now does only one thing: it defines sequences based on the selection criterion it is given. In addition, with the \switch{list} switch, \pgm{pick} can be directed to list the numbers of the messages which satisfied the criterion, to the standard output. This is very handy for using \pgm{pick} in backquoted operations with the shell. \subsection{User-Defined Sequences} User-defined sequences allow the \MH/ user a tremendous amount of power in dealing with groups of messages in the same folder by allowing the user to bind a group of messages to a meaningful symbolic name. The user may choose any name for a message sequence, as long as it consists of alphanumeric characters and does not conflict with the standard \MH/ reserved message names (e.g., \arg{first}, etc). After defining a sequence, it can be used wherever a \MH/ command expects a \arg{msg} or \arg{msgs} argument. Although all \MH/ commands expand user-defined sequences as appropriate, there are two commands that allow the user to define and manipulate them: \pgm{pick} and \pgm{mark}. \subsubsection{Pick and User-Defined Sequences} Most users of \MH/ will use only the \pgm{pick} command. By giving the \switch{sequence~name} switch to \pgm{pick} (which can occur more than once on the command line), each sequence named is defined as those messages which \pgm{pick} matched, according the the selection criteria it was given. Hence, \example pick -from frated -seq fred\endexample finds all those messages in the current folder which were from \eg{frated}, creates a sequence called \eg{fred}, and then adds them to the sequence. The user could then invoke \example scan fred\endexample to get a \pgm{scan} listing of those messages. Note that by default, \pgm{pick} creates the named sequences before it adds the selected messages to the sequence. Hence, if the named sequence already existed, the sequence is destroyed prior to being re-defined (nothing happens to the messages that were a part of this sequence, they simply cease to be members of that sequence). By using the \switch{nozero} switch, this behavior can be inhibited, as in \example pick -from frated -seq sgroup\\ pick -from fear -seq sgroup -nozero\\ pick -from freida -seq sgroup -nozero% \endexample which finds all those messages in the current folder which were from \eg{frated}, \eg{fear}, or \eg{freida}, and defines the sequence called \eg{sgroup} as exactly those messages. These operations amounted to an ``inclusive-or'' of three selection criteria. Using \pgm{pick}, one can also generate the ``and'' of some selection criteria as well: \example pick -from frated -seq fred\\ pick -before friday -seq fred -nozero fred% \endexample This example defines the sequence called \eg{fred} as exactly those messages from \eg{frated} that were dated prior to \eg{friday}. \par \pgm{Pick} is normally used as a back-quoted command, for example, \example scan \bq{pick -from postmaster}\endexample Now suppose that the user decides that another command should be issued, using exactly those messages. Since, \pgm{pick} wasn't given a \switch{sequence~name} argument in this example, the user would end-up typing the entire back-quoted command again. A simpler way is to add a default sequence name to the \profile/ file. For example, \example pick: -sequence select -list\endexample will tell \pgm{pick} to always define the sequence \eg{select} whenever it's run. The \switch{list} is necessary since the \switch{sequence~name} switch sets \switch{nolist} whenever the former is encountered. Hence, this profile entry makes \pgm{pick} define the \eg{select} sequence and otherwise behave exactly as if it had no profile entry at all. \par Finally, previous versions of \pgm{pick} balked if a selection criterion was not given. The \mh4 version of \pgm{pick} does not, and merely matches the messages that were specified. This lets the \MH/ user type something such as \example show \bq{pick last:20 -seq fear}\endexample instead of typing \example mark -add -nozero -seq fear last:20\\ show fear% \endexample \subsubsection{Mark and User-Defined Sequences} The \pgm{mark} command lets the user perform low-level manipulation of sequences, and also provides a well-needed debug facility to the implementors/developers/maintainers of \MH/ (the \MH/-hacks). In the future, a user-friendly ``front-end'' for \pgm{mark} will probably be developed to give the \MH/ user a way to take better advantage of the underlying facilities. \subsubsection{Public and Private User-Defined Sequences} There are two kinds of sequences: {\it public\/} sequences, and {\it private\/} sequences. {\it Public\/} sequences of a folder are accessible to any \MH/ user who can read that folder. {\it Private\/} sequences are accessible only to the \MH/ user who defined those sequences. By default, \pgm{pick} (and \pgm{mark\/}) create {\it public\/} sequences if the folder for which the sequences are being defined is writable by the \MH/ user. Otherwise, {\it private\/} sequences are created. This can be overridden with the \switch{public} and \switch{private} switches. \subsubsection{Sequence Negation} In addition to telling a \MH/ command to use the messages in the sequence \eg{seen}, as in \example refile seen +old\endexample it would be useful to be easily able to tell a \MH/ command to use all messages {\it except\/} those in the sequence. One way of doing this would be to use \pgm{mark} and define the sequence explicitly, as in \example mark -delete -zero seen -seq notseen\endexample which, owing to \pgm{mark\/}'s cryptic interpretation of \switch{delete} and \switch{zero}, defines the sequence \eg{notseen} to be all messages not in the sequence \eg{seen}. Naturally, anytime the sequence \eg{seen} is changed, \eg{notseen} will have to be updated. Another way to achieve this is to define the entry \entry{Sequence-Negation} in the \profile/ file. If the entry was \example Sequence-Negation: not\endexample then anytime a \MH/ command was given \eg{notseen} as a \arg{msg} or \arg{msgs} argument, it would substitute all messages that are not a member of the sequence \eg{seen}. That is, \example refile notseen +new\endexample does just that. The value of the \entry{Sequence-Negation} entry in the profile can be any string. Hence, experienced users of \MH/ do not use a word, but rather a special character which their shell does not interpret (users of the \pgm{CShell} use a single carat, \eg{`\^'}, while users of the Bourne shell use an exclamation-mark, \eg{`!'\/}). This is because there is nothing to prevent a user of \MH/ from defining a sequence with this string as its prefix, if the string is nothing but letters and digits. Obviously, this could lead to confusing behavior if the \entry{Sequence-Negation} entry leads \MH/ to believe that two sequences are opposites, by virtue of their names differing by the prefix string. \subsubsection{The Previous Sequence} Many times users find themselves issuing a series of commands on the same sequences of messages. If the user first defined these messages as a sequence, then considerable typing may be saved. If the user doesn't have this foresight, \MH/ provides a handy way of remembering the \arg{msgs} or \arg{msg} argument last given to a \MH/ command by the user. If the entry \entry{Previous-Sequence} is defined in the \profile/ file, then when the command finishes, it will define the sequence(s) named in the value of this entry as being defined as those messages that were specified. Hence, a profile entry of \example Previous-Sequence: pseq\endexample directs any \MH/ command that accepts a \arg{msg} or \arg{msgs} argument to define the sequence \eg{pseq} as those messages when it finishes. More than one sequence name may be placed in this entry, separated with spaces. The one disadvantage of this approach is that all \MH/ commands have to update the sequence information for the folder each time they run (although most commands read this information, usually only \pgm{pick} and \pgm{mark} have to write this information out). \section{Composition of Mail} Two new facilities have been added to give the \MH/ user greater power in composing and sending mail: the {\it draft folder}, which allows a user to maintain a folder of message drafts; and, {\it draft pushing}, which permits a user to \pgm{send} the current draft in the background. \subsection{The Draft Folder} The \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} commands have two hidden switches, \switch{draftfolder~+folder} and \switch{draftmessage~msg}. If \switch{draftfolder~+folder} is used, these commands are directed to construct a draft message in the indicated folder. If \switch{draftmessage~msg} is not used, it defaults to \arg{new} (unless the user invokes \pgm{comp} with \switch{use}, in which case the default is \arg{cur}). Hence, the user may have several message compositions in progress simultaneously. Now, all of the \MH/ tools are available on each of the user's message drafts (e.g., \pgm{show}, \pgm{scan}, \pgm{pick}, and so on). If the folder does not exist, the user is asked if it should be created (just like with \pgm{refile\/}). Also, the last draft message the user was composing is known as \arg{cur} in the draft folder. \par Furthermore, the \pgm{send} command has these switches as well. Hence, from the shell, the user can send off whatever drafts desired using the standard \MH/ \arg{msgs} convention with \switch{draftmessage msgs}. If no \arg{msgs} are given, it defaults to \arg{cur}. \par In addition, all five programs have a \switch{nodraftfolder} switch, which undoes the last occurance of \switch{draftfolder~folder} (useful if the latter occurs in the user's \MH/ profile). \par If the user does not give the \switch{draftfolder~+folder} switch, then all these commands act ``normally''. Note that the \switch{draft} switch to \pgm{send} and \pgm{show} still refers to the file called \eg{draft} in the user's \MH/ directory. In the interests of economy of expression, when using \pgm{comp} or \pgm{send}, the user needn't prefix the draft \arg{msg} or \arg{msgs} with \switch{draftmessage}. Both of these commands accept a \arg{file} or \arg{files} argument, and they will, if given \switch{draftfolder~+folder} treat these arguments as \arg{msg} or \arg{msgs}.% \nfootnote{This may appear to be inconsistant, at first, but it saves a lot of typing.} Hence, \example send -draftf +draft first\endexample is the same as \example send -draftf +draft -draftm first\endexample \par To make all this a bit more clear, here are some examples. Let's assume that the following entries are in the \profile/ file: \example comp: -draftfolder +draft\\ dist: -draftfolder +draft\\ forw: -draftfolder +draft\\ repl: -draftfolder +draft\\ sendf: -draftfolder +draft% \endexample Furthermore, let's assume that the program \pgm{sendf} is a symbolic link in the user's \file{\$HOME/bin/} directory to \pgm{send}. Then, any of the commands \example comp\\ dist\\ forw\\ repl% \endexample constructs the message draft in the \eg{draft} folder using the \arg{new} message number. Furthermore, they each define \arg{cur} in this folder to be that message draft. If the user were to use the \pgm{quit} option at \whatnow/ level, then later on, if no other draft composition was done, the draft could be sent with simply \example sendf\endexample Or, if more editing was required, the draft could be edited with \example comp -use\endexample Instead, if other drafts had been composed in the meantime, so that this message draft was no longer known as \arg{cur} in the \eg{draft} folder, then the user could \pgm{scan} the folder to see which message draft in the folder should be used for editing or sending. Clever users could even employ \pgm{pick} to do the work: \example comp -use \bq{pick +draft -to bug-mh}\\ \noalign{\leftline{or}} sendf \bq{pick +draft -to bug-mh}% \endexample Note that in the \pgm{comp} example, the output from \pgm{pick} must resolve to a single message draft (it makes no sense to talk about composing two or more drafts with one invocation of \pgm{comp\/}). In contrast, in the \pgm{send} example, as many message drafts as desired can appear, since \pgm{send} doesn't mind sending more than one draft at a time. \par Note that the argument \switch{draftfolder~+folder} is not included in the profile entry for \pgm{send}, since when \pgm{comp}, et. al., invoke \pgm{send} directly, they supply \pgm{send} with the \unix/ pathname of the message draft, and {\it not} a \arg{draftmessage~msg} argument. As far as \pgm{send} is concerned, a {\it draft folder} is not being used. \par It is important to realize that \MH/ treats the draft folder like a standard \MH/ folder in nearly all respects. There are two exceptions: \underbar{first} under no circumstancs will the \arg{draftfolder~folder} switch cause the named folder to become the current folder.% \nfootnote{Obviously, if the folder appeared in the context of a standard \arg{+folder} argument to an \MH/ program, as in \example scan +draft\endexample it might become the current folder, depending on the context changes of the \MH/ program in question.} \underbar{Second}, although conceptually \pgm{send} deletes the \arg{msgs} named in the draft folder, it does not call \entry{delete-prog} to perform the deletion. \subsection{What Happens if the Draft Exists} When the \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} commands are invoked and the draft you indicated already exists, these programs will prompt the user for a reponse directing the program's action. In \mh4, the prompt is \begingroup \smallertype \example ``/usr/src/uci/mh/mhbox/draft'' exists; replace, list, or quit?% \endexample \endgroup The appropriate responses and their meanings are: \smallskip {\advance\leftskip by\parindent \item{\underbar{replace}:} deletes the draft and starts afresh. \item{\underbar{list}:} lists the draft. \item{\underbar{quit}:} leaves the draft intact and exits. \smallskip} \noindent In addition, if you specified \switch{draftfolder~folder} to the command, then one other response will be accepted: \smallskip {\advance\leftskip by\parindent \item{\underbar{new}:} finds a new draft, just as if \switch{draftmessage~new} had been given. \smallskip} \noindent Finally, the \pgm{comp} command will accept one more response: \smallskip {\advance\leftskip by\parindent \item{\underbar{use}:} re-uses the draft, just as if \switch{use} had been given. \smallskip} \subsection{The Push Option at\/{ }\whatnow/ Level} The \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} commands take an additional option for the \whatnow/ query. The \pgm{push} option, which must be spelled out fully, directs the command to \pgm{send} the draft in a special detached fashion, with all normal output is discarded. If \pgm{push} is used and the draft can not be sent, then \MH/ will send the user a message, indicating the name of the draft file, and an explanation of the failure. Although using \pgm{push} calls \man{send}(1), the \pgm{send} command will consult the profile entry for \pgm{push}. \par The user can also invoke \pgm{send} from the shell with the \switch{push} switch, which makes \pgm{send} act like it had been \pgm{push\/}'d by one of the composition commands.% \nfootnote{Note that in this case, \pgm{send} consults the profile entry for whatever name it was invoked as, such as \pgm{sendf}.} \par The \pgm{send} program also has two other switches, \switch{unique} and \switch{nounique}. If \pgm{push\/}'d, then the \switch{unique} switch tells \pgm{send} to rename the draft file to a unique filename. This allows the user to have several drafts being sent simultaneously (after {\it push\/}ing one draft, another draft may be composed and edited immediately). The \switch{unique} switch, which is the default when \pgm{send} is \pgm{push\/}'d, is not really useful if you're using {\it draft folders}, as the user generally gets a new message draft for each composition. Hence, users of the {\it draft folder} mechanism should put \example send: -nounique\endexample in their \profile/ file. This has the added advantage of making \example comp -use\endexample easy to use when a draft fails to be posted properly. \par By using \pgm{push}, the user can free the shell to do other things, because it appears to the shell that the \MH/ command has finished. As a result the shell will immediately prompt for another command, despite the fact that the command is really still running. Note that if the user indicates that annotations are to be performed (with \switch{annotate}), the annotations will be performed after the message has been successfully sent. This action will appear to occur asynchronously. Obviously, if one of the messages that is to be annotated is removed before the draft has been successfully sent, then when \MH/ tries to make the annotations, it won't be able to do so, and an error message will mysteriously appear on the user's terminal. \subsection{Options at\/{ }\whatnow/ Level} When using the \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} commands at \whatnow/ level, the \pgm{edit}, \pgm{list}, \pgm{headers}, and (for the \pgm{dist} and \pgm{repl} commands) the \pgm{display} options will pass on any additional arguments given them to whatever program they invoke. \par In addition, in \mh1 (the original Rand \MH/) and \mh2 (the first UCI version of \MH/), \MH/ used a complicated heuristic to determine if the draft should be deleted or preserved after an unsuccessful edit. In \mh3, \MH/ was changed to always preserve the draft, since \pgm{comp}, et. al., could usually look at a draft, apply another set of heuristics, and decide if it was important or not. With the notion of a {\it draft folder}, in which one by default gets a \arg{new} message draft, \mh4 has again re-implemented the edit deletion/preservation algorithm (with a minor bug-fix), to keep the draft folder from being cluttered with aborted edits. \par Also, note that by default, if the draft cannot be successfully sent, these commands return to \whatnow/ level. But, when \pgm{push} is used, this does not happen (obviously). Hence, if these commands were expected to annotate any messages, this will have to be done by hand, later on, with the \pgm{anno} command. \par Finally, if the \switch{delete} switch is given to the \pgm{quit} option, then these commands will inform the user of the name of the unsent draft file. \subsection{Posting of Mail} \mh4 does a few different things when mail is posted. \subsubsection{Signature} There's now a \entry{Signature} entry in the \profile/ file. If the \file{\$SIGNATURE} envariable is not set, then \pgm{send} will consult this profile entry to determine the personal name of the \MH/ user. This personal name is placed in the \eg{From:} field of the message. If this profile entry doesn't exist, then \pgm{send} will consult the file \file{\$HOME/.signature}. \subsubsection{Blind Carbon Copies} The \pgm{post} command now handles blind carbon copies in an entirely different fashion from the way they were handled in \mh3. In particular, the message sent to ``blind'' recipients contains minimal information in its headers, namely \eg{Date:}, \eg{Message-ID:} (if \switch{msgid} was given), \eg{From:}, \eg{Subject:} (if given in the message draft), and a standard blind carbon copy disclaimer. The body of the message sent to the blind recipients is simply the actual message sent to the ``sighted'' recipients. However, if the \switch{filter~filterfile} switch was given to \pgm{post}, then the body of the message is given to \pgm{mhl} to be formatted with the named \arg{filterfile}. \subsubsection{Server Interaction} In \mh4, \MH/ supports a mail transport configuration which allows \pgm{post} to talk directly to an SMTP server. A possible extension of this, which looks particularly promising for when \MH/ is used on small workstations, is the ability to post mail on a different host, such as a ``mail relay''. In this way, the load on the local host may be reduced, and mail traffic may be handled more efficiently. \section{Folder Handling} Two new facilities have been added to give the \MH/ user greater power in manipulating folders: {\it relative folder addressing}, which allows a user to shorten the typing of long folder names; and the {\it folder-stack}, which permits a user to keep a stack of current folders. \subsection{Relative Folder Addressing} By default, when \arg{+folder} is given, and the folder name is not absolute (i.e., does not start with \file{/}, \file{./}, or \file{../}), then the \unix/ pathname of the folder is interpreted relative to the user's \MH/ directory. Although this mechanism works fine for top-level folders and their immediate sub-folders, once the depth of the sub-folder tree grows, it becomes rather unwieldly: \example scan +mh/mh.4/draft/flames\endexample is a lot of typing. \MH/ can't do anything if the current folder was \eg{+inbox}, but if the current folder was, say, \eg{+mh/mh.4/draft}, \MH/ has a short-hand notation to reference a sub-folder of the current folder. Using the \arg{@folder} notation, the \MH/ user can direct any \MH/ command which expects a \arg{+folder} argument to look for the folder relative to the current folder instead of the user's \MH/ directory. Hence, if the current folder was \eg{+mh/mh.4/draft}, then \example scan @flames\endexample would do the trick handily. In addition, if the current folder was \eg{+mh/mh.4/draft}, \example scan @../pick\endexample would scan the folder \eg{+mh/mh.4/pick}, since, in the \unix/ fashion, it references the folder \eg{pick} which is a sub-folder of the folder that is the parent of the current folder. Since most advanced \MH/ users seem to exhibit a large degree of locality in referencing folders when they process mail, this convention should receive a lot of use. \subsection{The Folder Stack} The {\it folder-stack\/} mechanism in \MH/ gives the \MH/ user a facility similar to the {\it CShell\/}'s directory-stack. Simply put, \example folder -push +foo\endexample makes \eg{foo} the current folder, saving the folder that was previously the current folder on the {\it folder-stack}. As expected, \example folder -pop\endexample takes the top of the {\it folder-stack\/} and makes it the current folder. Each of these switches lists the {\it folder-stack\/} when they execute. It is simple to write a {\it pushf\/} command as a shell script. It's one line: \example exec folder -push \$@\endexample Probably a better way is to link \pgm{folder} to your \file{\$HOME/bin/} directory under the name of \pgm{pushf} and then add the entry \example pushf: -push\endexample to the \profile/ file. \par The manual page for \man{folder}(1) discusses the analogy between the \pgm{CShell} directory stack commands and the switches in \pgm{folder} which manipulate the {\it folder-stack}. \section{Other Changes} This last section discusses the other, more program-specific changes made to \MH/. \subsection{Address Parsing} There's a new library program, \pgm{ap}, which parses addresses according to the rules that the \MH/ programs use. It's often useful for figuring out how \MH/ sees a particular address. The \pgm{rcvtrip} rcvmail hook, described at the end of this report, uses this facility. \subsection{Alternate Mailboxes} There's a new entry in the profile, \entry{Alternate-Mailboxes}, which is read by \pgm{repl} and \pgm{scan} to determine which addresses in a messages are under the user's administration. Hence, \example Alternate-Mailboxes: mh@uci-750a, bug-mh \endexample says that the mailbox \eg{mh@uci-750a} and any mailbox whose local part is \eg{bug-mh} is read by the user. Hence, \pgm{repl} will not include them in the reply list, and \pgm{scan} will act accordingly if it encounters a message which is from any of these addresses. A current restriction is that the hostnames given must be the ``official'' hostnames for the mailboxes, as local nicknames for hosts are not replaced with their official site names. \subsection{Annotation} The \pgm{anno} command no longer prompts for a \eg{text} component if the \switch{text~body} switch isn't given. \subsection{More on Folder Handling} If \pgm{folders} (or \pgm{folder} when invoked with the \switch{all} switch) is given a \arg{+folder} or \arg{msg} argument, then it will set the current folder and/or message (in previous versions of \MH/, \pgm{folders} ignored any \arg{+folder} or \arg{msg} arguments). In addition, the top-level folders of the current folder will be listed (if \switch{norecurse} is in effect), or the current folder will be listed recursively (if \switch{recurse} was given). \subsection{Scanning} The \pgm{scan} and \pgm{inc} commands now have a \switch{size} switch (and a complementary switch, \switch{nosize}), which indicate if the {\it scan listing\/} should include the size of the message in bytes. \par Furthermore, the fields in the {\it scan listing\/} have been compressed a bit to allow more of the \eg{Subject} and \eg{Body} portions of the listing to appear. \par Finally, if \pgm{scan} encounters a message without a date field, rather than leaving that portion of the {\it scan listing} blank, as had been done in previous versions of \MH/, the date is filled-in with the last write date of the message, and post-fixed with a `*'. This is particularly handy for scanning a {\it draft folder}, as message drafts usually aren't allowed to have dates in them. \subsection{BBoards Support} The \pgm{bbr} command now uses the name it was invoked with as its prompting string. To override this, the \MH/ user can specify the \switch{prompt~string} switch to \pgm{bbr}. \par The \pgm{bbc} command now lists the \eg{last update time} of a {\it BBoard}, instead of the \eg{local leaders} when \switch{topics} is used without \switch{verbose}. The \eg{local leaders} are now listed when \switch{verbose} is given with \switch{topics}. \subsection{RcvMail Support} The \pgm{rcvcron} and \pgm{rcvtty} are now standard in all \mh4 configurations. Further, there's a shell script, \pgm{rcvtrip}, that demonstrates the power (and utility) of a {\it hook\/} operating in the \MH/ environment.