Annotation of 43BSD/contrib/mh/papers/realwork/text.tex, revision 1.1.1.1

1.1       root        1: % begin text
                      2: 
                      3: \banner
                      4: 
                      5: \section{Introduction}                         % mtr
                      6: The UCI version of the Rand Message Handling System, \MH/,
                      7: is a software system that performs two functions:
                      8: \underbar{first},
                      9: it interfaces a user to a message transport system,
                     10: so the user may receive and send mail;
                     11: \underbar{second},
                     12: it permits the user to maintain an organized mail environment to facilitate
                     13: the composition of new messages and the reading of old messages.
                     14: In short,
                     15: while not responsible for the delivery of messages,
                     16: \MH/ aids the user in handling mail.
                     17: 
                     18: \MH/ was originally developed by the Rand Corporation,
                     19: and initially was proprietary software.
                     20: The Department of Information and Computer Science at
                     21: University of California, Irvine,
                     22: shortly after joining the Computer Science Network (CSnet),
                     23: acquired a copy of \MH/,
                     24: and began additional development of the software.
                     25: Since that time,
                     26: the Rand Corporation has declared \MH/ to be in the public domain,
                     27: and the UCI version of \MH/ has passed through four major releases.
                     28: The current version, \mh5,
                     29: is available from U.C.~Irvine for a nominal distribution fee,
                     30: or may be retrieved from the University of Delaware via anonymous FTP.
                     31: 
                     32: Much credit must be given to the initial designers and implementors of \MH/:
                     33: Bruce Borden, Stockton Gaines, and Norman Shapiro.
                     34: Although \MH/ has suffered significant development at UCI
                     35: since Rand's initial release,
                     36: the fundamental concepts of \MH/'s environs have remained nearly unchanged.
                     37: In addition,
                     38: the authors of the current release gratefully acknowledge the comments of the
                     39: many sites which have run various releases of \MH/ in the past.
                     40: In particular,
                     41: the dozen or so beta test sites for \mh5
                     42: provided tremendous help in stabilizing the current release.
                     43: 
                     44: \MH/ runs on different versions of the \unix/ operating system
                     45: (such as Berkeley~4.2\bsd/ and various flavors of v7).
                     46: In addition,
                     47: \MH/ supports four different message transport interfaces:
                     48: \SendMail/\cite{EAllm83},
                     49: the standard mailer for 4.2\bsd/ systems;
                     50: \MMDF/\cite{DCroc79} and \MMDFII/\cite{DKing84},
                     51: the Multi-Channel Memo Distribution Facility developed by the University of
                     52: Delaware
                     53: which forms the software-backbone for CSnet\cite{DCome83} mail relay service;
                     54: SMTP,
                     55: the ARPA Internet Simple Mail Transfer Protocol\cite{SMTP};
                     56: and,
                     57: a stand-alone delivery system.
                     58: 
                     59: This paper is organized in a straight-forward fashion:
                     60: Initially,
                     61: the \MH/ philosophy of mail handling is presented,
                     62: along with a description of the environment which the \MH/ user is given to
                     63: process mail.
                     64: Following this,
                     65: certain advanced features of \MH/ are discussed in more detail,
                     66: such as facilities for selecting messages,
                     67: and ``advanced'' concepts in {\it draft} handling.
                     68: In addition,
                     69: user interface issues in mail handling are addressed,
                     70: and the merits of \MH/'s approach is critically examined.
                     71: Next,
                     72: the \mh5 distribution package is described.
                     73: Finally,
                     74: we conclude by discussing the authors' experience with \MH/ development
                     75: and introducing areas where \MH/ may be further developed.
                     76: 
                     77: Although familiarity with \MH/ is not assumed on the part of the reader,
                     78: some knowledge of the \unix/ operating system is useful.
                     79: Appendix~A gives a short synopsis of the \MH/ commands.
                     80: 
                     81: \section{The \MH/ Philosophy}                  % mtr
                     82: Although \MH/ has many traits which tend to distinguish it from other systems
                     83: which handle mail,
                     84: there is a single fundamental design decision which influences the interface
                     85: between \MH/ and the user:
                     86: \MH/ differs from most other systems in that it is composed of many small
                     87: programs instead of one very large one.
                     88: This architecture gives \MH/ much of its strength,
                     89: since intermediate and advanced users are able to take advantage of this
                     90: flexibility.
                     91: 
                     92: The key to this flexibility is that the \unix/ shell
                     93: (usually the {\it C} shell or the {\it Bourne} shell),
                     94: is the user's interface to \MH/.
                     95: This means that when handling mail,
                     96: the entire power of the shell is at the user's disposal,
                     97: in addition to the
                     98: facilities which \MH/ provides.
                     99: Hence,
                    100: the user may intersperse mail handling commands with other commands in an
                    101: arbitrary fashion,
                    102: making use of command handling capabilities which
                    103: the user's shell provides.
                    104: 
                    105: Furthermore,
                    106: rather than storing messages in a complicated data structure
                    107: within a monolithic file,
                    108: each message in \MH/ is a \unix/ file,
                    109: and each folder (an object which holds groups of messages)
                    110: in \MH/  is a \unix/ directory.
                    111: That is,
                    112: the directory- and file-structure of \unix/ is used directly.
                    113: As a result,
                    114: any \unix/ file-handling command can be applied to any message.
                    115: 
                    116: To the novice,
                    117: this may not make much sense or may not seem important.
                    118: However,
                    119: as users of \MH/ become more experienced,
                    120: they find this capability attractive.
                    121: In addition,
                    122: this approach is often quite pleasing to system implementors,
                    123: because it minimizes the amount of coding to be performed,
                    124: and given a modular design,
                    125: changes to the software system can be maintained easily.
                    126: There are, however, performance penalties to be paid with this scheme.
                    127: This issue is considered later in the paper.
                    128: 
                    129: Having described how \MH/ fits into the \unix/ environment,
                    130: we now discuss the mail handling environment which is available to the \MH/
                    131: user.
                    132: 
                    133: \subsection{The \MH/ Environs}                 % jlr
                    134: In the \file{\$HOME} directory of each \MH/ user, a file named
                    135: \profile/ contains static information about the user's \MH/ environment, 
                    136: and default arguments for \MH/ programs.
                    137: For the latter case,
                    138: each line of profile takes the form:
                    139: \example program-name:\ options\endexample
                    140: Each \MH/ program consults the user's \profile/ for its options.
                    141: These options are consulted prior to evaluating any command-line arguments,
                    142: and so provide the \MH/ user the capability to customize the defaults for each
                    143: command.
                    144: Futher, by using the \unix/ link facility,
                    145: different names can be given to the same command.
                    146: Since each \MH/ command looks
                    147: in the \profile/
                    148: for a component with the name by which it was invoked,
                    149: it's possible to have different defaults for the same program.
                    150: For example,
                    151: it is not uncommon to link \pgm{prompter}
                    152: (a simple prompting editor front-end)
                    153: under the name \pgm{rapid} in the
                    154: user's \file{bin/} directory, and add to the \profile/:
                    155: \example rapid:\ -prepend\ -rapid\endexample
                    156: As a result,
                    157: when \pgm{prompter} is invoked as \pgm{rapid},
                    158: it automatically uses the \switch{prepend} and \switch{rapid} options.
                    159: 
                    160: The profile component \eg{Path:} is the path to the user's
                    161: \MH/-directory, usually \Mail/.
                    162: In addition to containing the user's folders,
                    163: the \MH/-directory also contains {\it skeletons} and
                    164: {\it templates} used by the \MH/ programs,
                    165: and the user's \context/ file.
                    166: This latter file has the same format as the user's \profile/,
                    167: and contains the dynamic,
                    168: context-dependent information about the user's environment.
                    169: Whenever \MH/ looks for an \MH/-specific file,
                    170: such as a template or skeleton,
                    171: it first consults the user's \MH/-directory,
                    172: and then a system-wide library area.
                    173: 
                    174: The \MH/ user always has a {\it current folder},
                    175: which is the folder in which
                    176: the user is currently (or was last) working.
                    177: Since any \MH/ program which deals with folders implicitly manipulates this
                    178: information,
                    179: the name of the  current folder is stored in the \file{context}
                    180: component \eg{Current-Folder:}.
                    181: Every folder has a {\it current message} known as \arg{cur}.
                    182: These values are the defaults for \MH/ commands which
                    183: accept folder and/or messages arguments.
                    184: 
                    185: \MH/ programs make use of a set of envariables
                    186: which further customize their behavior.
                    187: The \file{\$MH} envariable, if present,
                    188: specifies the name of an alternate profile for the user.
                    189: This allows a user of \MH/ to
                    190: easily maintain multiple mail-handling environments.
                    191: 
                    192: In terms of command syntax,
                    193: most \MH/ commands accept an optional {\it folder} argument,
                    194: such as \arg{+outbox}.
                    195: Unlike most \unix/ commands,
                    196: all \MH/ commands have switches which are words, rather than single letters.
                    197: Switches may be abbreviated to the least unambiguous prefix.
                    198: All \MH/ commands also support a \switch{help} switch,
                    199: which lists the syntax of the command along with available switches,
                    200: and the version number of the command.
                    201: Most \MH/ commands also take a \arg{msg} or \arg{msgs} argument
                    202: which takes the form of a message number (\eg{1}), a message range (\eg{1-2}),
                    203: a standard sequence name (\eg{cur}),
                    204: or a user-defined sequence name (\eg{select}).
                    205: 
                    206: \tagdiagram{1}{An \MH/ Session}{session}
                    207: \subsection{An \MH/ Transcript}                        % jlr
                    208: Figure~\session\ contains a transcript of a simple \MH/ session.
                    209: First, \pgm{inc} is run to incorporate the new mail into the 
                    210: user's \eg{+inbox} folder.
                    211: 
                    212: A \pgm{scan} listing of the mail is printed while
                    213: it is being incorporated.
                    214: (The user could run \pgm{scan} explicitly to generate additional \pgm{scan}
                    215: listings later on.)
                    216: The \pgm{scan} listing gives the message number, followed
                    217: by the date, message sender, and subject.
                    218: (If the message originated from the user generating the listing,
                    219: the \eg{to:} addressee is displayed instead of the sender.)
                    220: If the subject is short,
                    221: the first part of the message body is displayed after the characters \eg{<<}.
                    222: The plus sign (`+') after
                    223: the message number indicates the current message.
                    224: 
                    225: The user \pgm{show\/}s the message, and decides to \pgm{repl\/}y.
                    226: A reply draft
                    227: is created using the headers of the message being replied-to,
                    228: using the default \file{replcomps} template.
                    229: The default editor, \pgm{prompter}, is called to edit the draft.
                    230: When an EOT is typed, \pgm{prompter} exits and the
                    231: user is left at the \whatnow/ prompt.
                    232: The option \pgm{send} is chosen.
                    233: Since there were no problems in posting the draft with the message transport
                    234: system, 
                    235: no additional output is produced.
                    236: (\MH/ is not verbose by default.)
                    237: 
                    238: The user then decides to compose a new message.
                    239: The default skeleton, \file{components}, is copied to the draft,
                    240: and \pgm{prompter} is once again called.
                    241: After entering the addresses, subject, and body,
                    242: the user then \pgm{send\/}s the \file{draft} from the \whatnow/ prompt,
                    243: using \eg{send\ -verbose}, which causes
                    244: \MH/ to list out the message addresses as it submits them
                    245: to the message transport system.
                    246: 
                    247: \section{Some \MH/ Features}                   % mtr
                    248: We now consider certain advanced features in \MH/.
                    249: These features have been chosen to demonstrate some useful capabilities
                    250: available to the \MH/ user.
                    251: 
                    252: \subsection{Message Sequences and Selection}   % jlr
                    253: \MH/ has several built-in message sequence names, which may
                    254: be used anywhere a \arg{msg} or \arg{msgs} argument is expected.
                    255: These are:
                    256: \arg{cur}, \arg{next}, \arg{prev}, \arg{first}, \arg{last}, and \arg{all}.
                    257: Message ranges may also be specified.
                    258: For example, \arg{all} is actually \arg{first-last}, and
                    259: \arg{+mh\ last:5} references the last five messages in your
                    260: \arg{+mh} folder.
                    261: A powerful capability of \MH/ is the ability to use not only the pre-defined
                    262: message sequence names,
                    263: but also arbitrary user-defined message sequence names.
                    264: 
                    265: Although all \MH/ programs recognize user-defined sequences when appropriate, 
                    266: the \pgm{pick} and \pgm{mark} commands can create and modify 
                    267: user-defined message sequences.
                    268: The \pgm{mark} command allows low-level manipulation of sequences,
                    269: and is not particularly interesting in our discussion.
                    270: 
                    271: The \pgm{pick} command selects certain messages out of a folder.
                    272: The criteria used for selection may be a search string and/or a date range.
                    273: 
                    274: Searching is performed on either a specific header in the message
                    275: (e.g., \eg{To:}),
                    276: or anywhere within the message.
                    277: By default,
                    278: \pgm{pick} lists out the message numbers that matched
                    279: the selection criteria.
                    280: Thus, \pgm{pick} is useful in backquoted operations to the shell.
                    281: For example, to scan all the messages in the current folder from ``frated'',
                    282: the \MH/ user issues the command:
                    283: \example scan\ \bq{pick\ -from\ frated}\endexample
                    284: To perform more complicated message selection,
                    285: user-defined sequences are employed.
                    286: Supplying a \switch{sequence\ name}
                    287: argument to \pgm{pick}, will cause it to define the
                    288: sequence \arg{name} as those messages matched.
                    289: 
                    290: Giving \pgm{pick} a list of messages causes it to limit its search to just
                    291: those messages.
                    292: For example,
                    293: to find all the messages in the current folder from ``frated'' also dated
                    294: before friday:
                    295: \example pick\ -from\ frated\ -sequence\ select\\
                    296:         pick\ select\ -before\ friday\ -sequence\ select\endexample
                    297: With the first \pgm{pick} command,
                    298: the sequence \eg{select} is defined
                    299: to be all those messages from ``frated''.
                    300: In the second command, only those messages already in the \eg{select}
                    301: sequence are searched, and the \eg{select} sequence is redefined to be
                    302: only those messages which are also
                    303: dated before friday.
                    304: Those messages could then be \pgm{show\/}n with:
                    305: \example show\ select\endexample
                    306: When a \switch{sequence\ name} argument is given to \pgm{pick},
                    307: the default behavior --- listing the message numbers
                    308: matched --- is inhibited.
                    309: To re-enable this behavior, the \switch{list} option may be given.
                    310: As a result,
                    311: advanced users of \MH/ often put the following line in their \profile/:
                    312: \example pick:\ -sequence\ select\ -list\endexample
                    313: which allows them to easily make use of the \arg{select} sequence as the
                    314: messages last selected with \pgm{pick}.
                    315: 
                    316: Often it is desirable to act upon those messages which
                    317: are {\it not} members of a given sequence.
                    318: For this purpose,
                    319: the \eg{Sequence-Negation:} profile entry is useful.
                    320: If the name of a user-defined sequence is prefixed with the value of the
                    321: sequence-negation profile entry,
                    322: \MH/ commands will operate upon those messages which are {\it not} members
                    323: of that sequence.
                    324: For example, given a profile entry of:
                    325: \example Sequence-Negation:\ not\endexample
                    326: those messages which
                    327: are not in the \arg{select} sequence could be \pgm{scan\/}'d with:
                    328: \example scan\ notselect\endexample
                    329: 
                    330: Obviously, some confusion could result if an attempt was made
                    331: to define a sequence name
                    332: which began with the sequence-negation string (e.g., \eg{notselect}).
                    333: For this reason, \MH/ users will often use a single
                    334: character,
                    335: which their shell doesn't interpret,
                    336: as their sequence-negation string
                    337: (e.g., up-caret (`\^{}') for {\it C} Shell users,
                    338: and exclamation-mark (`!') for {\it Bourne} shell users).
                    339: 
                    340: \MH/ also provides a way of automatically remembering the last
                    341: message list given to
                    342: an \MH/ command.
                    343: This facility is implemented by using a profile entry called
                    344: \eg{Previous-Sequence:}.
                    345: 
                    346: \subsection{Draft Handling}                    % jlr
                    347: After the initial edit of a message draft,
                    348: the \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} programs
                    349: give the user a \whatnow/ prompt.
                    350: The valid responses include:
                    351: \pgm{edit} to re-edit the draft,
                    352: \pgm{quit} to exit without sending the draft,
                    353: \pgm{send} to send the draft, and
                    354: \pgm{push} to send the draft in the background.
                    355: 
                    356: When the \pgm{send} option is given,
                    357: the draft is posted with the message transport system.
                    358: If there problems posting the draft,
                    359: the \whatnow/ prompt is re-issued,
                    360: so errors in the draft may be corrected.
                    361: 
                    362: Since posting the draft can be slow,
                    363: the \pgm{push} option allows the \MH/ user to send the draft in the
                    364: background, and return immediately to the shell.
                    365: If there are problems posting the message,
                    366: the user will not see the diagnostics produced by
                    367: the message transport system.
                    368: For this reason,
                    369: if \pgm{push} is used instead of \pgm{send},
                    370: and the message is not successfully posted,
                    371: \MH/ mails a message to the user
                    372: containing any diagnostics which the message transport system produced
                    373: along with a copy of the message.
                    374: Later,
                    375: the draft may be re-edited by entering \eg{comp\ -use}.
                    376: 
                    377: A relatively new feature of \MH/ is the ability to use a folder to store
                    378: multiple drafts.
                    379: These drafts are kept in an ordinary \MH/ folder,
                    380: and may be operated upon by \MH/ commands.
                    381: To enable this feature,
                    382: the \MH/ user selects a folder-name for the draft-folder,
                    383: and creates an entry in the \profile/:
                    384: \example Draft-Folder:\ +foldername\endexample
                    385: From this point on,
                    386: when a message is composed,
                    387: the draft will be created as a message in that folder,
                    388: instead of using the \file{draft} file in the user's \MH/ directory.
                    389: Unfortunately,
                    390: if posting problems occur on a message which has been \pgm{push\/}'d,
                    391: it may be difficult to re-edit the draft with
                    392: \eg{comp\ -use}.
                    393: This might be the case if the user had started composing another message,
                    394: while that first draft was being posted.
                    395: In that event,
                    396: the current-message in the draft-folder would no longer point
                    397: to the failed draft.
                    398: 
                    399: There is a solution for this problem, however.
                    400: By default,
                    401: \pgm{push} assumes the \switch{forward} option,
                    402: which says that if the message draft fails to be posted,
                    403: it should be forwarded back to the user in the
                    404: error report which \pgm{push} generates.
                    405: The failed draft may then be extracted with the \pgm{burst} program
                    406: (discussed later).
                    407: 
                    408: \subsection{BBoards}                           % mtr
                    409: \MH/ has a convenient interface to the UCI BBoards facility\cite{MRose84a}.%
                    410: \nfootnote{The UCI BBoards facility can run under either the \MMDF/ or
                    411: \SendMail/,
                    412: or in a more restricted form under stand-alone \MH/.}
                    413: This facility permits the efficient distribution of interest group messages
                    414: on a single host,
                    415: to a group of hosts under a single administration,
                    416: and to the ARPA Internet community.
                    417: 
                    418: Although most readers are probably familiar with the concept of an interest
                    419: group in the Internet context, a brief description is now given.
                    420: Observant readers will notice that the distributed nature of the
                    421: ``network news'' (a.k.a.~USENET)
                    422: tends to avoid many of the problems described below.
                    423: 
                    424: Described simply, an interest group is composed of a number of subscribers
                    425: with a common interest.
                    426: These subscribers post mail to a single address, known as the
                    427: {\it distribution} address (e.g., {\tx MH-Workers@UCI}.
                    428: From this distribution address, a copy of the message is sent to each
                    429: subscriber.
                    430: Each group has a {\it moderator},
                    431: who is the person that runs the group.
                    432: This moderator can usually be reached at a special address,
                    433: known as the {\it request} address (e.g., {\tx MH-Workers-Request@UCI}).
                    434: Usually, the responsibilities of the moderator are quite simple,
                    435: since the mail system handles distribution to subscribers automatically.
                    436: In some interest groups,
                    437: instead of each separate message being distributed directly to subscribers,
                    438: a batch of (hopefully related) messages
                    439: are put into a {\it digest} format by the
                    440: moderator and then sent to the subscribers.
                    441: (This is similar to a newsletter format.)
                    442: Although this requires more work on the part of the moderator
                    443: and introduces delays,
                    444: such groups tend to be better organized.
                    445: 
                    446: Unfortunately, some problems arise with the scheme outlined above.
                    447: First, if two users on the same host subscribe to the same interest group,
                    448: two copies of the message are delivered.
                    449: This is wasteful of both processor and disk resources at that host.
                    450: 
                    451: Second,
                    452: some groups carry a lot of traffic.
                    453: Although subscription to a group does indicate interest on the part of a
                    454: subscriber,
                    455: it is usually not interesting to get 50 or so messages delivered
                    456: each day
                    457: to the user's private maildrop,
                    458: interspersed with {\it personal} mail,
                    459: which is likely to be of a much more important and timely nature.
                    460: 
                    461: Third, if a subscriber's address in a distribution list 
                    462: becomes ``bad'' somehow and causes failed mail to be returned,
                    463: the originator of the message is normally notified.
                    464: It is not uncommon for a large list to have several bogus addresses.
                    465: This results in the originator being flooded with ``error messages'' from
                    466: mailers across the Internet stating that a given address on the list was
                    467: bad.
                    468: Needless to say,
                    469: the originator usually does not care if the bogus addresses got a copy
                    470: of the message or not.
                    471: The originator is merely interested in posting a message
                    472: to the group at large.
                    473: On the other hand,
                    474: the moderator of the group does care if there are bogus addresses on the list,
                    475: but ironically does not receive notification.
                    476: 
                    477: To solve these problems,
                    478: the UCI BBoards facility introduces a new entity into the picture:
                    479: a {\it distribution channel}.
                    480: All interest group mail is handled by 
                    481: the special mail system component.
                    482: The distribution address for an interest-group
                    483: maps mail for that interest-group to the distribution channel,
                    484: which then performs
                    485: several actions.
                    486: First, if local delivery is to be performed,
                    487: a copy of the message is placed in a global maildrop for the interest
                    488: group with a timestamp and a unique number.
                    489: Local users can read messages posted for the interest group by reading this
                    490: ``public'' maildrop.
                    491: Second, if further distribution is to take place,
                    492: a copy of the message is sent to the distribution address in such a way that
                    493: if any of the addresses are bogus,
                    494: failure notices will be returned to the local maintainer of the group
                    495: address list, rather than the originator of the message.
                    496: 
                    497: This scheme has several advantages:
                    498: First, messages delivered to the local host are processed and saved once
                    499: in a globally accessible area.
                    500: The UCI BBoards facility supports software which allows a user to query an
                    501: interest group for new messages and to read and process
                    502: those messages in the \MH/-style.
                    503: Second, once a host administrator subscribes to an interest group,
                    504: each user may join or quit the list's readership without
                    505: contacting anyone.
                    506: Third, a hierarchical distribution scheme can be constructed to
                    507: reduce the amount of delivery effort.
                    508: Finally, errors are prevented from propagating.
                    509: When an address on the distribution list goes bad,
                    510: the list moderator who is responsible for the address is notified.
                    511: If a local moderator does not exist,
                    512: then the local PostMaster is notified (not the global group moderator).
                    513: 
                    514: In addition to solving the problems outlined above,
                    515: the UCI BBoards facility supports several other capabilities.
                    516: BBoards may be automatically archived in order to conserve disk space and
                    517: reduce processing time when reading current items.
                    518: Also,
                    519: the archives can be separately maintained on tape for access by interested
                    520: researchers.
                    521: 
                    522: Special alias files may be generated which allow the \MH/ user to shorten
                    523: address entry.
                    524: For example, instead of sending to {\tx SF-Lovers@Rutgers},
                    525: a user of \MH/ usually sends to \eg{SF-Lovers} and the \MH/ aliasing
                    526: facility automatically makes the appropriate expansion in the headers of the
                    527: outgoing message.
                    528: Hence,
                    529: the user need only know the name of an interest group and not its global
                    530: network address.
                    531: 
                    532: Finally, the UCI BBoards facility supports {\it private} interest groups
                    533: using the \unix/ group access mechanism.
                    534: This allows a group of people on the same or different machines to conduct a
                    535: private discussion.
                    536: 
                    537: The practical upshot of all this is that the UCI BBoards facility automates
                    538: the vast majority of BBoards handling from the point of view of both the
                    539: PostMaster and the user.
                    540: 
                    541: \MH/ provides three programs to deal with interest groups.
                    542: The \pgm{bbc} program is used to check on the status of one or more groups,
                    543: and to optionally start an \MH/ shell on those groups which the user is
                    544: interested in.
                    545: The \pgm{bbl} program can be used to manually perform maintenance on a
                    546: discussion group beyond the normal automatic capabilities of the UCI BBoards
                    547: facility.
                    548: Finally,
                    549: the \pgm{msh} program implements an \MH/ shell for reading BBoards,
                    550: in which nearly all of the \MH/ commands are implemented in a single program.
                    551: 
                    552: Observant readers may note that the use of \pgm{msh} is contrary to the \MH/
                    553: philosophy of using relatively small, single-purpose programs.
                    554: Sadly,
                    555: the authors admit that this is true.
                    556: In an effort to minimize use of system resources however,
                    557: BBoards are kept in maildrop format instead of folders.%
                    558: \nfootnote{When the message transport system delivers a message to a user
                    559: it stores it in a single file, called a {\it maildrop}.
                    560: Since many messages may be present in a single maildrop,
                    561: (in theory) there is a unique string acting as a separator between messages
                    562: in the maildrop.
                    563: Although this is convenient for storage of messages,
                    564: it makes retrieval more difficult unless a separate index into the maildrop
                    565: is kept.
                    566: This latter approach is taken by the \pgm{msg} program available with \MMDFII/
                    567: and by \pgm{msh} as well.}
                    568: Some research has gone into overcoming this problem to restore
                    569: \MH/'s purity of purpose,
                    570: but all solutions proposed to date are either unworkable or require
                    571: significant recoding of \MH/'s internals.
                    572: 
                    573: \subsection{Bursting}                  % jlr
                    574: Internet interest group mail is often sent out in digest form.
                    575: The experienced \MH/ user may wish to deal with the digest messages on
                    576: an individual basis, however.
                    577: The \pgm{burst} program allows the \MH/ user to extract these digest
                    578: messages,
                    579: and store each as an individual \MH/ message.
                    580: 
                    581: \pgm{Burst} will also extract forwarded messages generated by \pgm{forw}
                    582: (or the forwarded message in the error report generated by \pgm{push},
                    583: as described above).
                    584: Although \pgm{burst} cannot always decapsulate
                    585: messages encapsulated by sites not running \MH/,
                    586: it adheres to the proposed standard described in \cite{MRose85b}.
                    587: 
                    588: \subsection{Distributed Mail}                  % mtr
                    589: The ARPA Internet community consists of many types of heterogeneous nodes.
                    590: Some hosts are large mainframe computers,
                    591: others are personal workstations.
                    592: All communicate using the \milstd/ TCP/IP protocol suite\cite{IP,TCP}.
                    593: Messages which conform to the Standard for the Format of ARPA Internet Text
                    594: Messages\cite{DCroc82}
                    595: are exchanged using the Simple Mail Transfer Protocol\cite{SMTP}.
                    596: 
                    597: On smaller nodes in the ARPA Internet,
                    598: it is often impractical to maintain
                    599: a message transport system (e.g., \SendMail/).
                    600: For example,
                    601: a workstation may not have sufficient resources (cycles, disk space)
                    602: in order to permit an SMTP server and associated local mail delivery system
                    603: to be kept resident and continuously running.
                    604: Furthermore,
                    605: the workstation could be off-net for extended periods of time.
                    606: Similarly,
                    607: it may be expensive (or impossible) to keep a personal computer
                    608: interconnected to an IP-style network for long periods of time.
                    609: In other words,
                    610: the node is lacking the resource known as ``connectivity''.
                    611: 
                    612: Despite this,
                    613: it is often desirable to be able to manage mail with \MH/ on these smaller
                    614: nodes,
                    615: and they often support a user agent to aid the tasks of mail handling.
                    616: To solve this problem,
                    617: a network node which can support a message transport entity
                    618: (known as {\it service} host) offers
                    619: a maildrop service to these less endowed nodes
                    620: (known as {\it client} hosts).
                    621: The Post Office Protocol\cite{JReyn84} (POP) is intended to permit a
                    622: workstation to dynamically access a maildrop on a service host to pick-up
                    623: mail.%
                    624: \nfootnote{Actually,
                    625: there are three different descriptions of the POP.
                    626: The first, cited in \cite{JReyn84},
                    627: was the original description of the protocol,
                    628: which suffered from certain problems.
                    629: Since then,
                    630: two alternate descriptions have been developed.
                    631: The official revision of the POP\cite{MButl85},
                    632: and the revision of the POP which \MH/ uses
                    633: (which is documented in an internal memorandum in the \MH/ release).
                    634: This paper considers the POP in the context of the \MH/ release.}
                    635: The level of access includes the ability to
                    636: determine the number of messages in the maildrop and the size of each message,
                    637: as well as to retrieve and delete individual messages.
                    638: More sophisticated implementations of the POP server
                    639: are able to distinguish between the header and body portion of each message,
                    640: and send $n$ lines of a message to the POP client.
                    641: This capability is useful in thinly connected environments where conservation
                    642: of bandwidth is important.
                    643: By utilizing a more intelligent POP client,
                    644: a user may generate ``scan~listings'' and decide dynamically which messages
                    645: are worth taking delivery on.
                    646: The philosophy of the POP is to put intelligence in the 
                    647: POP clients and not the POP servers.
                    648: 
                    649: The current release of \MH/ supports the above model fully.
                    650: A POP client program is available to retrieve a maildrop from a POP service
                    651: host.
                    652: In addition,
                    653: using the SMTP configuration for delivery in \MH/
                    654: (either in conjunction with \SendMail/ or the \MMDF/),
                    655: a user is able to specify a search-list of service hosts (and/or networks)
                    656: to try to post mail.
                    657: Using this search-list,
                    658: when an \MH/ user posts a draft,
                    659: the \pgm{post} program will attempt to establish an SMTP connection
                    660: with each host in the search-list to post the message until it succeeds.
                    661: Initial experimentation using the POP and \MH/
                    662: in a local network environment has proved quite successful.
                    663: 
                    664: \section{User Interface Issues in \MH/}                % mtr
                    665: At this point,
                    666: it is perhaps useful to take a step backwards and examine the success
                    667: and problems of \MH/'s approach to user interfaces.
                    668: 
                    669: \subsection{Creeping Featurism}                        % mtr
                    670: A complaint often heard about systems which undergo substantial development
                    671: by many people over a number of years, is that more and more options are
                    672: introduced which add little to the functionality but greatly increase the
                    673: amount of information a user needs to know in order to get useful work done.
                    674: This is usually referred to as {\it creeping featurism}.
                    675: 
                    676: Unfortunately \MH/,
                    677: having undergone six years of off-and-on development by ten or so
                    678: well-meaning programmers (the present authors included),
                    679: suffers mightily from this.
                    680: For example,
                    681: the \pgm{send} command has twenty-five visible switches,
                    682: and at least nine hidden switches,
                    683: for a total of thirty-four.
                    684: The poor user who types \example send\ -help\endexample watches the options
                    685: scroll off the screen
                    686: (since the \switch{help} switch also lists out four other lines of
                    687: information).%
                    688: \nfootnote{Recently,
                    689: this was fixed by compressing the way in which switches are presented.
                    690: The solution is only temporary however,
                    691: as \pgm{send} will no doubt acquire an {\it endless} number of switches in
                    692: the years to come.}
                    693: The sad part is that all of these switches are useful in one form or another.
                    694: 
                    695: There are a lot of good things to be said for the
                    696: ``one program, one function'' philosophy of system design.
                    697: In the \MH/ case, however,
                    698: each program really does only one mail handling activity
                    699: (with a few minor exceptions).
                    700: The options associated with each command are present to modify the program's
                    701: behavior to perform similar, but slightly different tasks.
                    702: In further defense of \MH/,
                    703: note that there are~32 \MH/ commands at present,
                    704: all performing different tasks.
                    705: 
                    706: The problem with creeping featurism though,
                    707: is that while the functionality of the system increases sub-linearly,
                    708: the complexity of the system increases linearly.
                    709: That is,
                    710: although the number of switches that a program takes might double,
                    711: it is unlikely that the program's functionality or capabilities will double.
                    712: 
                    713: \subsection{Templates versus Switches}         % mtr
                    714: One way to trim the explosion of available options,
                    715: while still increasing functionality,
                    716: is to introduce options with a richer domain.
                    717: Hence,
                    718: instead of using options which take {\it on} or {\it off} forms
                    719: or simple numeric or string values,
                    720: the possible values which an option might take on is given a large space.
                    721: There are several ways that this might be accomplished.
                    722: 
                    723: \tagdiagram{2}{Draft Skeleton}{components}
                    724: The \pgm{comp}, \pgm{dist}, and \pgm{forw} programs
                    725: use draft {\it skeletons} (simple form fill-in files) to construct the
                    726: general format of the draft being composed.
                    727: An example of a draft skeleton used for composing new messages
                    728: (by \pgm{comp\/}) is shown in Figure~\components.
                    729: The approach is to let the user specify (and later edit) both arbitrary
                    730: headers of draft and the body of the draft.
                    731: Note while most of the fields are empty,
                    732: the first \eg{Fcc:} field already contains a value.
                    733: By using the simple prompting editor, \pgm{prompter},
                    734: the user can speedily enter the headers of the message.
                    735: The \pgm{prompter} program given the skeleton in Figure~\components\ would
                    736: prompt the user for the contents of each field,
                    737: except for the second \eg{fcc:},
                    738: which it would include verbatim.
                    739: It would then read the body of the message up to an end-of-file.
                    740: Naturally,
                    741: the \MH/ user is free to use {\it any} editor to edit {\it any} part of the
                    742: draft (headers or body).
                    743: This example 
                    744: demonstrates the flexibility achieved by not limiting what headers a
                    745: draft may contain (which most mail sending programs do),
                    746: while still retaining the simplicity of being able to treat the entire
                    747: message draft as a \unix/ file.
                    748: 
                    749: \tagdiagram{3}{Reply Template}{replcomps}
                    750: Another more interesting approach is used by the \pgm{repl} command,
                    751: which constructs a draft in reply-to a previously received message.
                    752: Instead of adding switches to indicate which fields of the draft should be
                    753: derived from the message being replied-to,
                    754: and how they should be derived,
                    755: a single option,
                    756: the ability to specify a {\it template}, was made available.
                    757: An example of a reply template is shown in Figure~\replcomps.
                    758: Put simply,
                    759: based on the presence of certain fields in the message being replied-to,
                    760: and a few switches given by the user,
                    761: using the reply template,
                    762: \pgm{repl} generates the reply draft automatically.
                    763: 
                    764: \tagdiagram{4}{The \file{tripcomps} Reply Template}{tripcomps}
                    765: This facility, for example,
                    766: can be used to generate automatic replies.%
                    767: \nfootnote{\MH/ supports the notion of a user-defined {\it mail hook}
                    768: which is invoked each time a user receives mail.}
                    769: One function might be to write a \pgm{rcvtrip} shell script
                    770: which automatically answered messages when mail wasn't being read for a
                    771: period of time
                    772: (e.g., while attending a conference).
                    773: An example of a reply template at the heart of such a script
                    774: is shown in Figure~\tripcomps.
                    775: 
                    776: \tagdiagram{5}{The \file{bombcomps} Reply Template}{bombcomps}
                    777: Finally,
                    778: another application might be to utilize
                    779: the highly useful letter bomb protocol.%
                    780: \nfootnote{The authors wish to credit Ron Natalie of the Ballistics Research
                    781: Laboratory in Aberdeen, Maryland for formalizing the
                    782: use of this protocol in the ARPA Internet community.}
                    783: The important thing to note about this template is that it generates not only
                    784: the headers of the reply draft (with a creative \eg{Reply-to:} address),
                    785: but the body as well.
                    786: Hence,
                    787: the commands
                    788: \example
                    789:     repl\ -form\ bombcomps\ -noedit\ ;\ rmm\\
                    790:     What\ now?\ push%
                    791: \endexample
                    792: are very handy for dealing with disturbing mail in a straight-forward manner.
                    793: Of course, \pgm{repl} could be linked to \pgm{bomb} in the user's \file{bin/}
                    794: directory and an appropriate line could be added to the user's \MH/ profile,
                    795: in order to further shorten type-in.
                    796: 
                    797: \tagdiagram{6}{Display Template}{mhlforward}
                    798: A variation on the reply template is the {\it display template}.
                    799: A display template, as used by the \pgm{mhl} program,
                    800: contains instructions on how to format a message.
                    801: In addition to being used by \pgm{show}, et.~al.,
                    802: the \pgm{forw} program can also use a display template to format each
                    803: message being forwarded.
                    804: Similarly,
                    805: although \pgm{repl} uses a reply template to construct the draft
                    806: being composed,
                    807: it also may use a display template to format the body of the message
                    808: being replied-to for enclosure in the reply.
                    809: Furthermore,
                    810: the \pgm{post} program may use a display template to format the body of a
                    811: blind-carbon-copy.
                    812: An example of a display template used for formatting forwarded messages
                    813: is shown in Figure~\mhlforward.
                    814: 
                    815: As with reply templates,
                    816: display templates can offer a lot of functionality.
                    817: For example,
                    818: the one line display template:
                    819: \example
                    820:     body:nocomponent,overflowtext=,overflowoffset=0,width=10000%
                    821: \endexample
                    822: can be used to extract the body of a message,
                    823: while ignoring the headers.
                    824: Hence,
                    825: if a \pgm{shar} archive arrived in the mail,
                    826: a convenient way to unpack it,
                    827: assuming the above display template was called \file{mhl.body},
                    828: would be:
                    829: \example show\ -form\ mhl.body\ |\ sh\endexample
                    830: 
                    831: The biggest win with display templates,
                    832: of course,
                    833: is that all those annoying header lines which mailers
                    834: everywhere generate can be simply and easily filtered out.
                    835: 
                    836: \subsection{Modularity versus Monolithicity}   % jlr
                    837: Since \MH/ is a set of programs
                    838: which perform separate tasks,
                    839: as opposed to being a single, monolithic program,
                    840: the power of the shell is used directly to aid in mail-handling.
                    841: One powerful capability which this design achieves is the ability to extend
                    842: the \MH/ command set,
                    843: by developing shell scripts which use the standard \MH/
                    844: programs to accomplish complicated or specialized tasks.
                    845: 
                    846: \tagdiagram{7}{The \pgm{mpick} Script}{mpick}
                    847: For example,
                    848: in the \MH/ distribution there is a shell script
                    849: called \pgm{mpick} (shown in Figure~\mpick)
                    850: which tries to locate all the messages which pertain to a given discussion,
                    851: by looking at the \eg{Message-ID:} and \eg{In-reply-to:} headers,
                    852: to find matching message-ids.%
                    853: \nfootnote{Note that the shell scripts included in the \MH/ distribution
                    854: are written for the {\it Bourne} shell,
                    855: and have a `:' as the first character of the first line,
                    856: so they will be portable to all versions of \unix/,
                    857: not just those which support the
                    858: Berkeley `\#!' enhancement.}
                    859: 
                    860: \tagdiagram{8}{The \pgm{append} Editor}{appended}
                    861: Unfortunately, some parts of \MH/ are somewhat monolithic.
                    862: An example of this is the \whatnow/ prompt.
                    863: There are only a few options at this prompt,
                    864: and one cannot give a normal shell command.
                    865: Some \MH/ users seem to feel that more options should be added to
                    866: the \whatnow/ prompt, such as an \pgm{insert-file} option.
                    867: It was argued that just about any editor would allow you to 
                    868: insert a file, and another \whatnow/ option was not needed.
                    869: These users persisted, however, so the
                    870: problem was solved, by writing a trivial shell
                    871: script ``editor'' (see Figure~\appended)
                    872: which could be invoked by the \pgm{edit} option:
                    873: \example What now?\ edit\ append\ filename\endexample
                    874: 
                    875: A better interface at this point is really needed, however.
                    876: One possibility is to simply pass any unrecognized commands on
                    877: to a shell for interpretation, supplying the path name of the draft file
                    878: as an argument.
                    879: A solution which shows more promise is to give you a sub-shell
                    880: {\it instead} of the \whatnow/ prompt,
                    881: and setup certain envariables so that
                    882: the \MH/ commands would act upon the \file{draft} by default.
                    883: For example, \pgm{show} with no \arg{msgs} arguments
                    884: would show the draft instead of the current message.
                    885: This alternative has recently been implemented and is under testing.
                    886: 
                    887: \section{The \MH/ Distribution}                        % mtr
                    888: The \mh5 distribution is now briefly described,
                    889: both in terms of static configuration methods
                    890: and dynamic tailoring.
                    891: Appendix~B describes the mechanics of receiving an \mh5 distribution.
                    892: 
                    893: \subsection{Configurable \MH/}                 % jlr
                    894: The \MH/ distribution currently runs on a large number of different \unix/
                    895: versions,
                    896: ranging from MicroSoft XENIX to Berkeley 4.2\bsd/.
                    897: All the code which is specific to a particular target environment is
                    898: enabled via the C-preprocessor \eg{\#ifdef} mechanism,
                    899: so compilation under different versions of \unix/ is trivial.
                    900: There are,
                    901: however,
                    902: a large number of compile-time options which may vary from site to site,
                    903: so an automated configuration method was needed.
                    904: 
                    905: \tagdiagram{9}{Sample \MH/ Configuration File}{mhconfig}
                    906: The \MH/-installer must create a configuration file,
                    907: which contains a list of the compile-time options
                    908: and the values which are desired for them.
                    909: Compile-time options include the installation location for \MH/,
                    910: what kind of message transport system is to be used,
                    911: and the default editor for the installation.
                    912: An example of such a configuration file is shown in Figure~\mhconfig.
                    913: 
                    914: After creating this file (several examples are included in the distribution),
                    915: the installer runs the \pgm{mhconfig} program,
                    916: which customizes the \file{Makefile\/}s and some of the programs,
                    917: for that site's particular installation.
                    918: No hand-editing of any source code should be necessary,
                    919: under normal circumstances.
                    920: 
                    921: \subsection{Interface to the Message Transport System} % jlr & mtr
                    922: \MH/ will run with a number of message transport systems,
                    923: including \SendMail/, \MMDFII/, and a small stand-alone system.
                    924: One flexible method of posting mail is through an SMTP connection.
                    925: There are a couple of major wins in using this configuration: 
                    926: First,
                    927: none of the \MH/ programs need to know where the interface programs to
                    928: the message transport system are located,
                    929: which makes them easier to move between systems.
                    930: Second,
                    931: mail can be posted on relay hosts,
                    932: and the local host of an \MH/ user may not need a message transport system at
                    933: all (as alluded to in the preceeding discussion on the POP).
                    934: 
                    935: \tagdiagram{10}{Sample MTS Tailor File}{mtstailor}
                    936: Those parts of \MH/ which interact with the local message transport agent
                    937: read additional tailoring information when they start.%
                    938: \nfootnote{This simple facility is based on a more extensive
                    939: tailoring capability found in \MMDFII/.}
                    940: This information includes
                    941: the location of standard and alternate maildrops,
                    942: maildrop delimiter strings,
                    943: the locking directory and locking style,
                    944: and other tailoring information specific for the particular
                    945: message transport system in use
                    946: (e.g., the default server search-list when mail is posted with the SMTP).
                    947: In most cases,
                    948: by using a tailor file,
                    949: each site running a similar \MH/ configuration is able to simply transfer
                    950: \MH/ binaries between hosts.
                    951: An example of such a tailor file is shown in Figure~\mtstailor.
                    952: 
                    953: A continuing question which is often raised is how intelligent should user
                    954: agents (like \MH/ and UCB \pgm{Mail}\/) be with respect to the environment in
                    955: which they operate.
                    956: At present, \MH/ likes to determine 
                    957: the official hostnames for addresses when posting mail.
                    958: Many argue that this is improper or unnecessary behavior for a user agent,
                    959: and that the local message transport agent should handle these functions.
                    960: Unfortunately,
                    961: this implies that the message transport agent should munge headers when mail
                    962: is posted to remove local host aliases and only permit address fields with
                    963: fully-qualified addresses.
                    964: Sadly, neither \SendMail/ nor \MMDFII/ really gets this right
                    965: (flames to \file{/dev/null} please).
                    966: The current \MH/ maintainers believe that the resolution of host aliases to
                    967: official names should be a well-supported interface with the local message
                    968: transport agent.
                    969: However, to provide equal time to those who hold opposite views,
                    970: \MH/ supports a configuration option called \eg{DUMB} which disables \MH/'s
                    971: attempts to resolve addresses into fully-qualified strings.
                    972: 
                    973: \section{Concluding Remarks}                   % jlr and mtr
                    974: While \MH/ has undergone significant development since
                    975: the original
                    976: Rand release, the authors have
                    977: tried to keep the fundamental concepts of
                    978: \MH/ unchanged.
                    979:                                                % specific vs. general
                    980: The authors have continually had to battle against
                    981: well-meaning \MH/ users who wanted to make \MH/
                    982: more like other (less powerful) user agents.
                    983: More and more ``features'' were often suggested for \MH/,
                    984: usually at the expense of making \MH/ less general, and more specific.
                    985: In nearly all cases, the ``features'' which these users wanted
                    986: were already present in \MH/ in a slightly different form,
                    987: or could be realized by simply writing a short shell script.
                    988: A classic example is the repeated requests by one user to have \pgm{dist}
                    989: take a list of messages rather than a single message and distribute each one
                    990: of them in turn.
                    991: A simple shell script which called \pgm{dist} repeatedly,
                    992: perhaps with ``canned'' arguments so the user typed in addressing information
                    993: only once, would easily meet this request.
                    994: 
                    995:                                                % generality
                    996: A number of \MH/ comands have a large number of options.
                    997: When adding options, the authors have tried to make the options
                    998: general, while still accomodating the requests of specific users.
                    999: An example of a specific request which was implemented as a
                   1000: general feature is the \eg{Previous-Sequence} profile entry
                   1001: (mentioned above).
                   1002: If you use this profile entry, every \MH/ command is forced to write
                   1003: out \context/ changes, making every command somewhat slower.
                   1004: Since only a few users wanted this capability, it was implemented
                   1005: in such a way that users who didn't want it, didn't have to pay
                   1006: the cost of slowing down every \MH/ command.
                   1007: 
                   1008:                                                % naive user :: MH
                   1009: \MH/ has a powerful tailoring capability provided by the \profile/.
                   1010: Using profile entries, users may
                   1011: customize their own environment without affecting others.
                   1012: Novice users often take advantage of the \MH/-tailoring
                   1013: capabilities to try to make \MH/ work similarly to
                   1014: other user agents they've used.
                   1015: This has the advantage of allowing them to quickly begin
                   1016: using \MH/ to handle their mail.
                   1017: However, since these novice users don't take advantange of all the
                   1018: capabilities of \MH/,
                   1019: they frequently will complain about things they think can't
                   1020: be done with \MH/, or could be done ``better'' some other way.
                   1021: Fortunately,
                   1022: as these users become more experienced with both \MH/ and \unix/,
                   1023: they can modify their environment to take better advantage of
                   1024: all of \MH/'s capabilities.
                   1025: Novice \MH/ users who see features lacking
                   1026: are encouraged to take a better look at what \MH/ {\it can} do,
                   1027: instead of trying to make \MH/ into something it isn't.
                   1028: This may sound rather inflammatory,
                   1029: but it would really be a much nicer world for us all if users of software
                   1030: systems would read the manual prior to asking questions.
                   1031: 
                   1032:                                                % speed consideration
                   1033: For a moment, let's consider the evolution of one \MH/ feature which has
                   1034: proved itself to be very useful.
                   1035: As users began employing \MH/ to handle their mail,
                   1036: the number of messages that could be processed
                   1037: in a given amount of time increased greatly.
                   1038: As the volume of messages increased however,
                   1039: it became clear that some \MH/ operations were too slow,
                   1040: in particular the interaction with the (slow) message transport system.
                   1041: To overcome this problem, the \pgm{push} option
                   1042: was added at the \whatnow/ prompt.
                   1043: Originally, this option was hidden from novice users
                   1044: and did little more than send the message in the background:
                   1045: any output generated by
                   1046: the background \pgm{send} process would be printed
                   1047: asyncronously on the terminal.
                   1048: If a message failed posting with the message transport system,
                   1049: it would simply be left in the \file{draft} file.
                   1050: 
                   1051: Gradually, other features were added to \pgm{push}.
                   1052: Since users wanted to be able to send more than one draft
                   1053: at a time, \pgm{push} was changed to optionally
                   1054: rename the draft file before posting it.
                   1055: (This is what the hidden \switch{unique} option does.)
                   1056: Having message transport system diagnostics
                   1057: written asyncronously on the user's terminal was annoying,
                   1058: so \pgm{push} was made to intercept these diagnostics,
                   1059: and mail the user a report containing them.
                   1060: Although the diagnostic report mailed back by \pgm{push} contains
                   1061: the name of the draft which failed,
                   1062: a useful added feature was the ability to have \pgm{push}
                   1063: include the failed draft as well.
                   1064: Eventually, the draft-folder mechanism was implemented to make
                   1065: handling multiple message drafts much easier.
                   1066: 
                   1067: 
                   1068: \subsection{TODO}                              % mtr
                   1069: There are, no doubt, a number of improvements which could be made to \MH/.
                   1070: At the present time,
                   1071: what further development should \MH/ suffer?
                   1072: Although not by any means inclusive,
                   1073: here's a list:
                   1074: \smallskip
                   1075: {\advance\leftskip by\parindent
                   1076: \item{1.} Performance Enhancements\hbreak
                   1077: Hardware gets faster all the time, but people always complain that software
                   1078: is too slow.
                   1079: Owing to its user interface style,
                   1080: \MH/ is somewhat slower than monolithic programs like UCB \pgm{Mail}.
                   1081: It would be nice if \MH/ could be tuned or accelerated somehow.
                   1082: 
                   1083: \item{2.} Port to System~5\hbreak
                   1084: \MH/ runs on 4.2\bsd/~\unix/ and Version~7 variants.
                   1085: It should not be difficult to port \MH/ to a SYS5 environment.
                   1086: This should significantly increase the number of hosts
                   1087: on which \MH/ can run.
                   1088: The authors,
                   1089: lacking a SYS5 machine (and experience with SYS5) to perform the port,
                   1090: are actively seeking a System~5 guru to attempt this feat.
                   1091: 
                   1092: \item{3.} Interface to the Network News\hbreak
                   1093: Not all sites that run \MH/ are in the ARPA Internet,
                   1094: and as such the UCI BBoards facility may not be of much use to them.
                   1095: A good \MH/ interface to the network news would allow users on hosts with a
                   1096: news feed to employ the same interface for reading and sending both mail and
                   1097: news.
                   1098: 
                   1099: \item{4.} Programmed Instruction for Beginners\hbreak
                   1100: The complexity of \MH/ is often intimidating to new users.
                   1101: It would be nice to develop a set of \pgm{learn} lessons for those users who
                   1102: don't like \pgm{man} pages and non-interactive tutorials.
                   1103: 
                   1104: \item{5.} Message List Expansion\hbreak
                   1105: At present, when a list of messages is given to an \MH/ command,
                   1106: it expands the list and processes each message in numerical order
                   1107: rather than the order in which the messages were given
                   1108: (e.g., \eg{show\ 2\ 1} \pgm{show\/}s message~1
                   1109: and then message~2).
                   1110: It would be nice if \MH/ processed messages in the order
                   1111: they were given.
                   1112: 
                   1113: \item{6.} Context Changes\hbreak
                   1114: In nearly all cases,
                   1115: an \MH/ command does not write out context changes until it is about to exit
                   1116: successfully.
                   1117: There is some controversy as to whether this is the correct behavior
                   1118: in all cases.
                   1119: Some argue that once an \MH/ command has fully parsed its argument list,
                   1120: the context should be updated.
                   1121: \par}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.