From: David Levine Date: Wed, 29 Feb 2012 19:49:28 +0000 (-0600) Subject: Added sources to historical documents downloaded from X-Git-Url: http://git.marmaro.de/?a=commitdiff_plain;h=7565efea3b91264fb6055b2ecb8980807c2da677;hp=--cc;p=mmh Added sources to historical documents downloaded from http://stuff.mit.edu/afs/sipb/project/sipb-athena/src/mh/papers/ --- 7565efea3b91264fb6055b2ecb8980807c2da677 diff --git a/docs/historical/README b/docs/historical/README index 5fdb663..e5c7666 100644 --- a/docs/historical/README +++ b/docs/historical/README @@ -11,6 +11,25 @@ were downloaded from ftp://munnari.oz.au/pub/mh/doc/ designOfMH.pdf was downloaded from http://www.dtic.mil/cgi-bin/GetTRDoc?AD=ADA257836 +The sources for the papers in these directories: + bboards/ + beginners/ + changes/ + doclib/ + mh4/ + mh4mm/ + mh5/ + mh6.5/ + mh6/ + multifarious/ + mznet/ + realwork/ + trusted/ + tutorial/ +were downloaded from +http://stuff.mit.edu/afs/sipb/project/sipb-athena/src/mh/papers/ + + The README below is retained in its original form for posterity. All of the txt (.doc and .tty) files have been renamed to .txt. All of the postscript (.ps) files have been converted to pdf using ps2pdf. diff --git a/docs/historical/bboards/Makefile b/docs/historical/bboards/Makefile new file mode 100644 index 0000000..9a8885e --- /dev/null +++ b/docs/historical/bboards/Makefile @@ -0,0 +1,55 @@ +####################################################################### +# Instructions to Make, for generation of nice-looking papers using TeX +####################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if TEXINPUTS=../doclib:.:${TEXINPUTS} tex \ + \\nonstopmode\\input $<\\bye; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# bboards +############################################################# + +i-all: bboards.dvi + +i-print: bboards.dvi true + dvisp -J BBoards bboards.dvi + +i-count: true + detex text.tex | wc -cw + + +# customization files, et. al., not included below +bboards.dvi: version.tex + +version.tex: bboards.tex text.tex refs.tex version.sh + @: version.sh + +true:; + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f bboards.dvi bboards.imp + +clean:; rm -f bboards.lof bboards.log bboards.lot bboards.toc _* diff --git a/docs/historical/bboards/bboards.tex b/docs/historical/bboards/bboards.tex new file mode 100644 index 0000000..f2e25f6 --- /dev/null +++ b/docs/historical/bboards/bboards.tex @@ -0,0 +1,45 @@ +% run this through PhD-TeX + +\input dcustom +\articlestyle +\draftfalse +\input version + +\input sfwmac + +\header + The Rand MH Message Handling System:\\\\ + The UCI BBoards Facility\title + Marshall T.~Rose$^\dagger$\author + \versiondate/\info +\footnote{}{\hskip -\parindent $^\dagger$ +Computer Mail: {\tx MRose@NRTC.NORTHROP.COM}.} + +\centerline{\sc Abstract} +{\rightskip=0pt\narrower\narrower +\noindent +This document discusses how to process BBoards using the Rand \MH/ system. +In particular, +this guide discusses: +checking the status of a BBoard, +viewing new messages, +archive handling, +composing mail destined for a BBoard, +and replying to a message posted to a BBoard. + +Although this document is based on the standard \MH/ user manual\cite{MH}, +this document is meant to supplement, not supersede, +that lengthier work. + +Comments concerning this documentation should be addressed to the Internet +mailbox {\tx Bug-MH@ICS.UCI.EDU}. +\par} + +\input text +\input refs +\printcontents +\unskip\footnote{}{\hskip -\parskip This document (version \versiontag/) +was \TeX set \today\ with DISS.STY v\version.} +\showsummary + +\bye diff --git a/docs/historical/bboards/refs.tex b/docs/historical/bboards/refs.tex new file mode 100644 index 0000000..4d9b8b7 --- /dev/null +++ b/docs/historical/bboards/refs.tex @@ -0,0 +1,26 @@ +\let\journalinfo=\jourinfo +\let\thesis=\book % experimental +\let\thesisinfo=\bookinfo % .. + +\references + +\ref{MH} +\by M.T.~Rose, J.L.~Romine. +\paper The Rand \MH/ Message Handling System: User's Manual +\paperinfo UCI Version +\other +\publ Department of Information and Computer Science +\publaddr University of California, Irvine +\month July\year 1984 +\endref + +\ref{MH.TUT} +\by M.T.~Rose. +\paper The Rand MH Message Handling System: Tutorial +\other +\publ Department of Computer and Information Sciences +\publaddr University of Delaware +\month October\year 1984 +\endref + +\endreferences diff --git a/docs/historical/bboards/text.tex b/docs/historical/bboards/text.tex new file mode 100644 index 0000000..e8abccf --- /dev/null +++ b/docs/historical/bboards/text.tex @@ -0,0 +1,537 @@ +% 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/. + +In particular, the UCI BBoards facility, +which was suggested by Einar Stefferud, +has been in place at the University of California, Irvine +(in one form or another) for the last two and one-half years. +The UCI BBoards facilities runs under both \MMDF/ and {\sf SendMail}, +and, in a more restricted form, under stand-alone \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{Scope} +This document explains how to use the UCI BBoards facility to a user familiar +with \MH/ and the \unix/ operating system in general. +A large degree of expertise is not assumed. +This document does not attempt to introduce \MH/ to the novice user +(for that task, consult the \MH/ tutorial known as \cite{MH.TUT}). +Additional information on the programs discussed here +(particularly \pgm{bbc\/}) is to be found in \cite{MH}. + +\section{Conventions} +In this document, +certain \TeX -formatting conventions are adhered to: +\smallskip +{\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 {\tt typewriter style} and delimited by single-quotes. +\item{3.} \unix/ pathnames and envariables, +such as \file{/usr/uci/} and \file{\$SIGNATURE}, +are presented in {\sl slanted roman}. +\item{4.} Text presenting an example, such as +\example comp\ -editor\ zz\endexample +is presented in {\tt typewriter style}. +\smallskip} + +\section{Introduction} +\MH/ is a very powerful message handling system that runs under the \unix/ +operating system. +One of the many features which \MH/ offers is an interface to the UCI BBoards +facility. +This facility permits the efficient distribution of interest group messages +on a single host, a group of hosts under a single administration, and the +ARPA Internet community. + +Described simply, a interest group is composed of a number of subscribers +with a common interest. +These subscribers post mail to a single address, known as a +{\it distribution} address. +From this distribution address, a copy of the message is sent to each +subscriber. +Each group has a {\it moderator}, +which is the person that runs the the group. +This moderator can usually be reached at a special address, +known as a {\it request} address. +Usually, the responsibilities of the moderator are quite simple, +since the mail system handles the distribution to subscribers automatically. +In some cases, the interest group, +instead of being distributed directly to its subscribers, +is put into a {\it digest} format by the moderator and then sent to the +subscribers. +Although this requires more work on the part of the moderator, +such groups tend to be better organized. + +Unfortunately, there are a few problems with the scheme outlined above. +First, if two users on the same host subscribe to the same interest group, +two copies of the message get delivered. +This is wasteful of both processor and disk resources. + +Second, +some of these groups carry a lot of traffic. +Although subscription to an group does indicate interest on the part of a +subscriber, +it is usually not interesting to get $50$ messages or so delivered to +the user's private maildrop each day, +interspersed with {\it personal} mail, +that is likely to be of a much more important and timely nature. + +Third, if a subscriber on the distribution list for a group becomes ``bad'' +somehow, +the originator of the message and not the moderator of the group is notified. +It is not uncommon for a large list to have $10$ or so bogus addresses present. +This results in the originator being flooded with ``error messages'' from +mailers across the ARPA Internet stating that a given address on the list was +bad. +Needless to say, +the originator usually could not care less if the bogus addresses got a copy +of the message or not. +The originator is merely interested in posting a message to the group at large. +Furthermore, the moderator of the group does care if there are bogus +addresses on the list, +but ironically does not receive notification. + +To solve all of these problems, +the UCI BBoards facility introduces a new entity into the picture: +all interest group mail is handled by a special component of the mail system. +The distribution address maps to a special {\it channel} that performs +several actions. +First, if local delivery is to be performed, +then a copy of the message is placed in a global maildrop for the interest +group with a timestamp and a unique number. +Local users can read messages posted for the interest group by reading the +file. +Second, if further distribution is to take place, +a copy of the message is sent to the distribution address in such a way that +if any of the addresses are bogus, +the failure notice is sent to the maintainer of the group and not the +originator. + +This scheme has several advantages: +First, messages delivered to the host are processed and saved once +in a globally accessible area. +The UCI BBoards facility supports software which allows a user to query the +interest group for new messages and to read those messages in the \MH/-style. +Second, once a host subscribes to an interest group, +a user can add or remove him/herself from the list without contacting the +moderator. +Third, a hierarchical distribution scheme can be constructed to further +reduce the amount of message traffic. +Fourth, errors are prevented from propagating. +When an address on the distribution list goes bad, +the request address immediately responsible for the address is notified. +Usually, this is the local PostMaster and not the group moderator. + +In addition to solving the problems outlined above, +the UCI BBoards facility supports several other capabilities. +BBoards may be automatically archived in order to conserve disk space and +reduce processing time when reading them. + +Special alias files may be generated which allow the \MH/ user to shorten +address type-in. +For example, instead of sending to \eg{SF-Lovers@Rutgers}, +a user of \MH/ usually sends to \eg{SF-Lovers} and the \MH/ aliasing +facility automatically makes the appropriate expansion in the headers of the +outgoing message. +Hence, one need only know the name of a interest group and not its address. + +Finally, the UCI BBoards facility supports {\it private} interest groups +using the \unix/ group access mechanism. +This allows a group of people on the same or different machines to conduct a +private discussion. + +The practical upshot of all this is that the UCI BBoards facility automates +the vast majority of BBoards handling from the point of view of both the +PostMaster and the user. + +\section{BBoard Handling} +Usually the term {\it BBoard} is used interchangeably with the terms +{\it discussion group} and {\it interest group}. +This is true of the discussion that follows. + +The messages for a BBoard delivered locally are kept in the same format as +a maildrop.% +\nfootnote{Actually, +your site might be running with all BBoards kept on a single host. +\MH/ supports the remote access of BBoards using a modified version of the +ARPA Post Office Protocol (POP). +This has the advantage that it saves a lot of disk space, +and incurs only a modest performance penalty.} +Unlike the user's private maildrop however, +the \pgm{inc} program is not run to incorporate new BBoard messages into +the user's \MH/ \eg{+inbox} folder. +The programs which are used will be discussed momentarily. + +Each message in a BBoard maildrop has a unique number and a timestamp. +The number, called the {\it BBoard-ID}, is always ascending. +The BBoard-ID of a message should {\bf NOT} be confused with the message +number of a message, which can change as messages are removed from the BBoard. +The BBoard-ID is a value which is unique for every message delivered locally +to the BBoard. + +To read BBoards, the \MH/ user invokes \pgm{bbc}. +The \pgm{bbc} program has several switches to direct it's action. +The \switch{topics} switch to \pgm{bbc} tells the \MH/ user about the +status of a BBoard. +The \switch{check} switch to \pgm{bbc} lets the \MH/ user check on the +activity of a BBoard. +The \switch{read} switch to \pgm{bbc} invokes the \pgm{msh} program on the +BBoard. +\pgm{msh} is a monolithic program which contains most of the functionality of +\MH/ in a single program. +These commands are now discussed in greater detail. + +\subsection{BBoard status} +The \switch{topics} option to the \pgm{bbc} program can be used to report +information about a BBoard that does not pertain to the user's reading habits. +If the \MH/ users types \example bbc\ -topics\endexample +then \pgm{bbc} will list the following information for all BBoards received +on the host: +\smallskip +{\advance\leftskip by\parindent +\item{$\bullet$} the official name of the BBoard +\item{$\bullet$} the number of messages delivered to the BBoard +(but not necessarily present) +\item{$\bullet$} the date and time of the last message delivered to the BBoard +\medskip} +\noindent +In addition to \switch{topics}, +if the \switch{verbose} option is given to \pgm{bbc}, +then more information is listed: +\smallskip +{\advance\leftskip by\parindent +\item{$\bullet$} any aliases the BBoard is known as +\item{$\bullet$} the local leaders of the BBoard +\item{$\bullet$} the file that the BBoard is locally delivered to +\item{$\bullet$} the ``global'' distribution address +\item{$\bullet$} the ``global'' request address +\item{$\bullet$} the host that distributes the BBoard to the local host +\item{$\bullet$} the addresses to which this host distributes +\item{$\bullet$} miscellaneous information (presently only archiving status) +\medskip} +\noindent +Naturally, \pgm{bbc} can be invoked with the \switch{topics} option and one or +more BBoard names listed on its command line. +For example \example bbc\ -topics\ unix-wizards\endexample is completely +acceptable~---~it tells \pgm{bbc} to report the status of the BBoard +\eg{unix-wizards}. + +\subsection{BBoard checking} +The \switch{check} option to the \pgm{bbc} program can be used to check for +new BBoard messages in a synchronous fashion +(i.e., when you specifically ask for it). +The \MH/ users types \example bbc\ -check\endexample and \pgm{bbc} consults +the profile entry for \eg{bboards:} in the user's \profile/ file. +For each BBoard listed, +\pgm{bbc} prints one of several messages depending on the status of both the +BBoard and the user's reading habits +(for example, in the case of the mythical BBoard \eg{foo\/}): +\smallskip +{\advance\leftskip by\parindent +\item{1.} \eg{foo -- n items unseen}\hbreak +This message indicates items in the BBoard have not been seen by the user. +When \pgm{bbc} is invoked with the \eg{quiet} switch, +this is the only informative message that \pgm{bbc} will print out. +Users of \MH/ usually put \example bbc\ -check\ -quiet\endexample +in their \file{\$HOME/.login} file. + +\item{2.} \eg{foo -- empty}\hbreak +The BBoard is empty. + +\item{3.} \eg{foo -- n items (none seen)}\hbreak +The BBoard has $n$ items in it, but the user hasn't seen any. + +\item{4.} \eg{foo -- n items (all seen)}\hbreak +The BBoard is non-empty, and the user has seen everything in it. + +\item{5.} \eg{foo -- n items seen out of m}\hbreak +The BBoard has at most $m-n$ items that the user has not seen. +\medskip} +\noindent +It is important to note that \pgm{bbc} performs its calculations on +BBoard-ID:s and not the messages actually present in a BBoard. +This means that the numbers given by \pgm{bbc} are maximal end-points. +When \pgm{bbc} says $n$, \pgm{bbc} means ``at most $n$''. + +Naturally, \pgm{bbc} can be invoked with the \switch{check} option and one or +more BBoards listed on its command line. +For example \example bbc\ -check\ info-c\ poli-sci\endexample is completely +acceptable~---~it tells \pgm{bbc} to check on the BBoards \eg{info-c} and +\eg{poli-sci} only. + +There are two ways to check for new BBoard messages in an asynchronous fashion: +using the \pgm{CShell} variable \file{\$mail} and running the \pgm{useto} +program. + +\subsubsection{Asynchronous Checking with the CShell} +The \pgm{CShell} has a variable called \file{\$mail}. +This variable can contain one or more words. +Each word should be a filename where the shell should check for new mail. +The check is performed after a specified time interval has elapsed just +before the shell would prompt the user. + +If the first word of \file{\$mail} is a number, +then this number specifies a different checking interval, in seconds, +than the default, which is 10 minutes. + +Whenever the time interval elapses and the shell is ready to prompt the user, +the shell looks at the file and decides if new messages have arrived. +If so, it says \example You have new mail.\endexample +if only one file is present in \file{\$mail}. +Otherwise, +if more than one file is present in \file{\$mail}, +then the shell says \example New mail in foo.\endexample whenever there is new +mail in the file called \eg{foo}. + +To find out what file is associated with a BBoard, say \eg{info-unix}, +the \MH/ user types \example bbc\ -topics\ -verbose\ info-unix\endexample +Usually the local file for a BBoard has an extension of \file{.mbox}. + +\subsubsection{Asynchronous Checking with Useto} +In contrast to using the \file{\$mail} variable in the \pgm{CShell}, +the \MH/ user might employ \pgm{useto} instead.% +\nfootnote{Not all sites have \pgm{useto}; +contact the same people who supplied \MH/ to get a copy.} +The \pgm{useto} program is a continuous update display that prints information +on the status line of your terminal. +Needless to say, +your terminal must support a status line in order to run \pgm{useto}. +Not all terminals have this capability, +but for those that do it's usually well worth the effort to run \pgm{useto}. + +For example, users of \MH/ could put +\example + useto\ -bepf\ \'tcp-ip\ sftp\'\ % + \'\%D\ \%M\ \%d\ \%h:\%m\%z\%b\ \%n.tty\%t:\%l1\'% +\endexample +in their \file{\$HOME/.login} file. +This command line to \pgm{useto} says to inform the user of +\smallskip +{\advance\leftskip by\parindent +\item{$\bullet$} the current date and time +\item{$\bullet$} new mail for the user +\item{$\bullet$} new messages for the BBoards \eg{tcp-ip} and \eg{sftp} +\item{$\bullet$} the name of the host and tty that the user is logged in on +\item{$\bullet$} the 5--minute load average of that host +\smallskip} + +The \pgm{useto} program is really quite amusing and useful.% +\nfootnote{To be honest, +the author considers computing environments without \pgm{useto} +to be less than adequate.} + +\subsection{BBoard reading} +If \pgm{bbc} is not given either the \switch{check} or \switch{topics} option, +the \pgm{bbc} program reads BBoard messages. +For each BBoard listed in the \MH/ user's profile entry for \eg{bboards:}, +\pgm{bbc} checks to see if there is unread mail. +If so, \pgm{bbc} starts \pgm{msh} on the BBoard, +telling \pgm{msh} which messages haven't been seen.% +\nfootnote{If the \switch{verbose} option is given to \pgm{bbc}, +then \pgm{bbc} will start \pgm{msh} on the BBoard regardless of whether there +are unseen messages there.} + +When \pgm{msh} starts it identifies the BBoard being read and indicates how +many messages are present and how many the user has read. +Usually, in the user's \MH/ profile, +the user has the entry \example msh:\ -scan\endexample +This says that when \pgm{msh} starts, +it should print a {\it scan listing} of the messages which the user +hasn't seen yet. + +The \pgm{msh} program now prompts the user for \MH/ commands. +The user may type most of the normal \MH/ command. +The syntax and semantics of the commands typed to \pgm{msh} are identical +to their \MH/ counterparts. +For example, to reply to a message on the BBoard, +the \MH/ user types \eg{repl}; +other \MH/ commands likewise may be applied to BBoard messages. +In cases where the nature of \pgm{msh} would be inconsistent +(e.g., specifying a \arg{+folder} with some commands), +\pgm{msh} will duly inform the user. +In addition to supporting most \MH/ commands, +\pgm{msh} also has a \eg{help} command which gives a brief overview. + +The only command that behaves entirely differently in \pgm{msh} is the +\eg{mark} command when given no arguments. +The \pgm{msh} program maintains a special sequence, \eg{unseen}, +which it uses to keep track of the messages you've seen. +If the \eg{mark} command is given without any arguments, +then \pgm{msh} will interpret it as +\example mark\ -sequence\ unseen\ -delete\ -nozero\ all\endexample +Hence, to discard all of the messages in the current BBoard being read, +the \MH/ user types \eg{mark} which says to remove all messages from sequence +called \eg{unseen}. + +To leave \pgm{msh} use the \eg{quit} command. +This tells \pgm{msh} to terminate and \pgm{bbc} to go to the next BBoard. +Instead, if the user types EOT (usually CTRL-D), +then \pgm{bbc} will exit as well, +updating whatever information was appropriate. + +\section{Current BBoards} +There are many, many active interest groups. +Consult the BBoard called \eg{list-of-lists} for a comprehensive description. +Here are a few of the more popular: +\smallskip +{\advance\leftskip by\parindent +\item{\tx system} +Important announcements for the local system are posted here. + +\item{\tx mh-users} +A discussion group for users of \MH/. + +\item{\tx arpanet-bboards} +Redistribution address for all known BBoards on the ARPAnet. + +\item{\tx editor-people} +Discussion of topics related to computerized text editing, display editors, +and human factors in man/machine interaction. +The theoretical discussion is catholic, +but practical discussion focuses particularly on \tops20/ and \unix/. + +\item{\tx franz-friends} +Discusses the Franz Lisp language. + +\item{\tx header-people} +Interest specifically in the format of message headers and related issues +such as inter-network mail formats/standards, etc. + +\item{\tx human-nets} +{\sf Human-Nets} has discussed many topics, +all of them related in some way to the theme of a world-wide computer and +telecommunications network usually called WorldNet. +The topics have ranged very widely, from something like tutorials, +to state of the art discussions, +to rampant speculation about technology and its impact. + +\item{\tx info-micro} +Information/discussion list on the general interest topic of microcomputers. + +\item{\tx info-unix} +{\sf Info-UNIX} is intended for question/answer discussion, +where ``novice'' system administrators can pose questions. + +\item{\tx msggroup} +Interest in electronic mail, message formats, message systems, and the +sociological implications of the above. + +\item{\tx poli-sci} +A permanent distributed political ``bull'' session. + +\item{\tx sf-lovers} +Science Fiction lovers. +{\sf SF-Lovers} has discussed many topics, +all of them related in some way to the theme of science fiction or fantasy. + +\item{\tx space} +Discussions (daily digest) on space-related topics. + +\item{\tx telecom} +A broad spectrum moderated-digest-format discussion on telecommunictions +technology: the telephone system, modems, and other more technical aspects +of telecommunications systems. + +\item{\tx unix-emacs} +Used for new release announcements and general discussions of Gosling's +\EMACS/. + +\item{\tx unix-wizards} +Distribution list for people maintaining machines running the \unix/ operating +system. +\medskip} +\noindent +As discussed earlier, +to find out about all of the BBoards that the local host subscribes to, +the \MH/ users types \example bbc\ -topics\endexample + +\section{More on BBoards} +Finally, here are a few more operational details: + +\subsection{Creating a BBoard} +Contact the PostMaster at your host to have a BBoard created. +Be sure to indicate its status (public or private) +and scope (where distribution should occur). + +\subsection{Subscribing to a BBoard} +If your local host already receives an interest group, +then simply add the name of the BBoard to the \eg{bboards:} entry in your +\MH/ profile. +If not, ask the PostMaster to create the BBoard and contact the global +request address for you. + +\subsection{BBoard Archives} +BBoard messages are automatically archived on a weekly basis. +Usually, this results in messages older than 12 days being moved to an +{\it archive} area. +To read the archives for a BBoard, the \switch{archive} option is used. +For example, \example bbc\ -archive\ telecom\endexample +tells \pgm{bbc} to invoke \pgm{msh} on the archives for the \eg{telecom} +BBoard. + +Note that the archives may not be present for all BBoards on a given host; +also note that the archives may be periodically moved to tape and expunged +from the system. +Contact your local PostMaster for the details. + +\subsection{BBoard Addresses} +Each BBoard has associated with it 4 addresses +(for example, in the case of the mythical BBoard \eg{foo\/}): +\smallskip +{\advance\leftskip by\parindent +\item{\tx foo} The global distribution list\hbreak +If you post a message addressed to {\tx foo} then the message is distributed +to everyone who subscribes to \eg{foo}. + +\item{\tx dist-foo} The local distribution list\hbreak +If you post a message addressed to {\tx dist-foo} then the message is +distributed to the local BBoard for \eg{foo} +and to any sites which the local system distributes to. + +\item{\tx foo-request} The global moderator\hbreak +If you post a message addressed to {\tx foo-request} then the message is +sent to the moderator for the entire interest group called \eg{foo}. + +\item{\tx local-foo-request} The local moderator\hbreak +If you post a message addressed to {\tx local-foo-request} then the message is +sent to the person responsible for the BBoard \eg{foo} on the local system. +\medskip} +\noindent +These addresses are defined by the \MH/ alias facility. +Users of the BBoards facility who do not use \MH/ may not be able to make use +of them. + +\subsection{Leading a BBoard} +Except for special circumstances, this task is wholly automated. +For more information though, +see the manual entries for \man bbl(1) and \man bbleaders(8). + +\section{Extra for Experts} +Some clever \MH/ users might ask why BBoards aren't kept as folders instead +of \pgm{pack}'d files. +This is a good question. +Perhaps some future release of \MH/ and the UCI BBoards facility will treat +BBoards as a variant of read-only folders. + +The problem with \pgm{msh}, of course, is that it's a monolithic program, +and although it does support input/output redirection and a few other +primitive shell-like properties, it's still not the \pgm{CShell}. diff --git a/docs/historical/bboards/version b/docs/historical/bboards/version new file mode 100644 index 0000000..1e8b314 --- /dev/null +++ b/docs/historical/bboards/version @@ -0,0 +1 @@ +6 diff --git a/docs/historical/bboards/version.sh b/docs/historical/bboards/version.sh new file mode 100644 index 0000000..9cad3a1 --- /dev/null +++ b/docs/historical/bboards/version.sh @@ -0,0 +1,9 @@ +if [ ! -r version ]; then echo 0 > version; fi +touch version +echo '\catcode`\#=12' > version.tex +awk ' { version = $1 + 1; }\ +END { printf "\\def\\versiontag/{#2.%d}%%\n", version >> "version.tex"; \ + printf "%d\n", version > "version"; }' < version +echo '\def\versiondate/{'`date`'}%' >> version.tex +echo '\catcode`\#=6' >> version.tex +echo '\tell{Version \versiontag/ of \versiondate/}' >> version.tex diff --git a/docs/historical/bboards/version.tex b/docs/historical/bboards/version.tex new file mode 100644 index 0000000..7c3cad9 --- /dev/null +++ b/docs/historical/bboards/version.tex @@ -0,0 +1,5 @@ +\catcode`\#=12 +\def\versiontag/{#2.6}% +\def\versiondate/{Wed May 21 21:03:57 PDT 1986}% +\catcode`\#=6 +\tell{Version \versiontag/ of \versiondate/} diff --git a/docs/historical/beginners/Makefile b/docs/historical/beginners/Makefile new file mode 100644 index 0000000..7de8644 --- /dev/null +++ b/docs/historical/beginners/Makefile @@ -0,0 +1,44 @@ +######################################################################### +# Instructions to Make, for generation of nice-looking papers using LaTeX +######################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if latex \\nonstopmode\\input $<; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# beginners +############################################################# + +i-all: beginners.dvi + +i-print: beginners.dvi true + dvisp $(DFLAGS) -J Beginners beginners + +true:; + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f beginners.dvi beginners.imp + +clean:; rm -f beginners.log beginners.blg beginners.tmp _* diff --git a/docs/historical/beginners/beginners.tex b/docs/historical/beginners/beginners.tex new file mode 100644 index 0000000..a418644 --- /dev/null +++ b/docs/historical/beginners/beginners.tex @@ -0,0 +1,617 @@ +\documentstyle [12pt]{article} +\parindent=0pt +\parskip=7pt plus 2pt + +%beginners.tex,v 1.1.1.1 1993/01/30 04:41:03 jtc Exp + +\def\oneline#1{\par\bigskip\leftline{\tt\hskip.75in#1}} +\def\command#1{\par\bigskip\leftline{\tt\hskip.75in\% #1}} +\def\comarg#1#2{\par\bigskip\leftline{\tt\hskip.75in\% #1 {\it#2}}} +\def\MH/{{\sf MH}} +\def\MM/{{\sc mm}} +\def\unix/{{\sc Unix}} +\newfont{\itt}{cmti10} +\begin{document} + +\title{MH for Beginners} +\author{Mary Hegardt \and Tim Morgan} +\maketitle + +This document is intended to be an introduction for new users to the +\MH/ mail system. For more detailed information, users will want to +read the document called {\sl The Rand MH Message Handling System: +User's Manual\/} by Marshall~T. Rose and John~L. Romine. It is available +for Xeroxing in suite CS408. +\footnote{This document is specific to the environment +at the ICS department of U.~C.~Irvine. For a more general document, +see {\sl The Rand MH Message Handling System: Tutorial\/}.} + +\section{Using Electronic Mail} + +Electronic mail (e-mail) is a quick, convenient way to send a message +to another person (or persons). The message recipient can read and +reply to the message at his convenience. E-mail is much faster than +a paper memo and avoids inconveniences associated with the telephone +such as unwanted interruptions and ``phone tag.'' + +At UCI, one can send e-mail to people within the ICS department, people +in other units on campus, and to people at some other institutions +off campus (usually other universities). + +An electronic mail message consists of two parts: the headers and the +body. The body comes after the headers and consists of the ``message'': +whatever the sender types in. The headers are the lines at the top +of the message including the subject and addresses of the people +to whom the message is addressed. It is similar to the top lines +of a memo: {\tt To:}, {\tt From:}, {\tt Subject:}, and so on. The headers +are separated from the body by a blank line. As in memos, the people +listed in the {\tt Cc:}\ field are not intended to be the primary recipients +of the message. The message is for their information only, and they +are not expected to reply. + + +E-mail is also useful for discussions among groups of people. This +``bboards'' (electronic bulletin boards) facility will be discussed later. + +An electronic mail address looks like ``{\it name\/}{\tt@}{\it site\/}''. +The {\it name\/} is +a person's ``mail handle'' --- usually his first initial followed by his +last name. For example, Mary Hegardt's mail handle is ``mhegardt''. +The {\it site\/} is the system where the addressee receives mail. Within +the ICS Department, you need only know the person's mail handle; +the mail system will automatically fill in the ``{\tt @}{\it site\/}'' part. + +\section{Why MH ?} + +The \MH/ system is very different from most mail user agents. Instead of +running one large program which handles all mail functions and keeps +messages in one large file, \MH/ is a collection of smaller +single-purpose programs used to manipulate mail messages +which are kept in individual files. \MH/ may seem to be more complicated +or harder to use than other mail systems (MM, for example), but +\MH/ has been designed to allow +you to take full advantage of existing {\sc Unix}\footnote{{\sc Unix} is +a trademark of AT\&T Bell Laboratories} commands and programs +in connection with mail messages. +For example, you can use your usual text editor, spelling program, and +printer commands on individual messages. + + +\section{The Basics} + +The first time you use an \MH/ command (probably {\it inc\/}), +\MH/ will create a directory called ``Mail'' in your home (login) directory. All +your mail will be stored in directories beneath this one. It will also +create a file in your home directory called \verb|.mh_profile|. It is +a file that allows you to tailor your \MH/ environment. We'll discuss +this more later. + + +\subsection{Reading Mail} + +When someone sends a mail message to you, it is delivered to a file +called your ``mail drop'' file. When you are ready to read your mail, +you have to incorporate (or ``inc'') your mail messages from the mail +drop area into your account. + +Everytime you log in to your {\sc Unix} account, you will be told if you +have new mail messages. When you are ready to read them, type \verb|inc|. +The {\it inc\/} program will copy your mail into your ``inbox'' and generate +a ``scan'' listing of the new messages. For example, + +\begin{scriptsize} +\begin{verbatim} +4.2 BSD UNIX #116: Mon Jul 15 14:03:21 PDT 1985 +You have new ZOTnet mail, type "inc" (or mail) + +TERM = (dm1520) + +% inc + +Incorporating new mail into inbox ... + + 1+ 10/29 1732-PST Tim Morgan new bboard! < + + Please add us to the unix-sw list. Also, if RAJ hasn't mentioned it, + and if it still exists, we should get on the Astronomy bboard. + + Tim +\end{verbatim} +\end{scriptsize} + +If the message is +longer than one screenful, you will see the word ``more'' at the bottom +of the screen. When you are ready to see ``more'' of the message, +press the \fbox{space bar} to see another screenful, or press the +\fbox{return} key to see just one more line. + +To see the next message, you could type a couple of different commands: + + +\oneline{\% next} +or +\oneline{\% show next} +or +\oneline{\% show 2} + +All of these commands would have the same effect: to type out the next message +in the list. The most efficient thing to do is to type ``{\tt next}''. When +You do that, message number 2 will be shown and become the ``current message''. + +\begin{footnotesize} +\begin{verbatim} +% next + +(Message inbox:2) +Received: from UCI-20B by UCI-ICSA id aa01222; 12 Nov 85 0:23 PST +Date: 12 Nov 1985 0016-PST +From: ROODE@uci-20b +Subject: CP6 from the 20s +To: zotnet@uci-20b +cc: dana_roode%ucicp6@UCI.EDU + +What is (will be) the prescribed method of addressing for sending +CP6 mail from the 20s? They dont seem to know about @CF, @UCICP6, +but "Name_Name%UCICP6"@ICSA seems to fly. + + dana +\end{verbatim} +\end{footnotesize} + +\subsection{Selecting Messages} + +As you have seen, messages can be referred to by their message numbers. +Some \MH/ commands, such as {\it show,} can act upon more than one +message at a time. A range of messages can be specified using the +form ``{\it name1-name2\/}'' where {\it name\/} is a message number or +one of the reserved message names described below: + +\bigskip + +\def\titem[#1]{\par\noindent\hbox to .5in{\hfil\it #1\/}\qquad} + +\titem[cur] The current message (the last one that was handled) +\titem[next] The next message (same as ${\it cur\/} + 1$) +\titem[prev] The previous message (${\it cur\/} - 1$) +\titem[first] The first message in the current folder +\titem[last] The last message in the folder +\titem[all] All messages ($\it first-last$) + +\bigskip + +If you do not name a specific message, the command will act upon +the ``current message''. + +\subsection{Sending Messages} + +A mail message consists of two parts: the headers and the body. The +headers are the lines at the top of the message that say ``{\tt To:}'' +and so on. The body is the actual text of the message (what you +want to say). To send someone a message, you start with the +{\it comp\/} command. This will start up an editor called {\it prompter\/} +that will prompt you to fill in the headers. You should type the +requested information for that header or a \fbox{return} to omit it. +You should end the message by typing control-D (press down the key +marked \fbox{ctrl} and strike the D key) at the beginning of a new +line. Here's an example: + +\begin{verbatim} + % comp + To: morgan, raj + Cc: + Subject: Lunch + --------- + Where are we going for lunch today ? + + Mary + + -------- + What now ? send +\end{verbatim} + +At the ``\verb|What now ?|'' prompt you can type a {\tt?} to see +what commands you can type next. +One of the most useful options at this point is to edit the draft +of the message to correct any mistakes. To do this you type: + +\oneline{What now ? edit vi} + +This will put you in the {\it vi\/} editor to edit the message. If you use +{\it emacs\/} or any other editor, just type ``edit emacs'' or whatever. +When you have finished editing, just exit the editor as you would +normally. You will then get another ``\verb|What now ?|'' prompt. Here are some +of the ``What now'' options: + +\bigskip + +\begingroup +\def\titem[#1]{\par\hangafter=1\hangindent=1.4in\noindent + \hbox to\hangindent{\hfil#1\qquad}\ignorespaces} + +\titem[\tt edit \it editor\/] Edit the message using the specified + editor. When you exit, you will be + back at \verb|What now|. + +\titem[\tt list] Shows the message you just typed + +\titem[\tt whom -check] Verifies that the addresses you have + used are valid as far as our system + can tell + +\titem[\tt send] Sends the message to the recipients + +\titem[\tt push] Sends the message in the background + +\titem[\tt quit] Quits without sending the message. + Saves the text of the message as + a ``draft''. Type \verb|comp -use| to + get back to that draft later. + +\titem[\tt quit -delete] Quit, throwing away the draft +\endgroup + +\bigskip + +Make sure you are happy with your message before typing \verb|send|. There +is no way to recall a message once it has been sent. + +\subsection{Replying to Messages} + +To reply to the current message type {\it repl.} When you do this, +the reply headers will be printed out and you will be put in the prompter +editor to type in your reply text. When you are replying to a message, +the name of the sender of the original message will appear in the +``To:'' field. Any people on the ``To:'' or ``Cc:'' lists will also +be copied on your reply message. As with {\it comp,} when you have +finished, type control-D and \verb|send| (or whatever) at \verb|What now ?|. + +\subsection{Forwarding Messages} + +If you receive a particularly interesting message and can't resist +sharing it with others, you can forward it using the {\it forw\/} +command. You will be prompted to fill in the headers (the address +to which the message is to be forwarded, etc.). When you have done this, +you will see the text of the message which you are forwarding and will be +given the opportunity to add some enlightening text to the message. +Exit with control-D and do whatever feels good at the \verb|What now ?| +prompt. + +\subsection{The Advanced Features} + +You will probably want to master the beginning \MH/ concepts before you +tackle the following\dots + +\subsection{Folders} + +Folders are really just directories for storing mail messages in an +organized way. To store a message in a folder named +``inbox'', type: + +\oneline{\% refile 5 +inventory} + +If the folder doesn't exist yet, you will be asked if it should be created. +To access messages in another folder, you can change your current +folder from ``inbox'' to something else. If you want to look at all +the messages pertaining to the inventory, you type: + +\oneline{\% folder +inventory} + +and now you use {\it scan,} {\it show,} etc., to manipulate the messages +in that folder. +To change back to inbox, type: + +\oneline{\% folder +inbox} + +Using the {\it inc\/} command will change your current folder to be the +``inbox'' automatically. + +\section{Mailing files} + +Mailing files is usually not a good idea, especially for large files. +The mail system was never designed for moving big files. You +can use the {\it cp\/} file to move the file to another account much more +efficiently: + +\oneline{\% cp \char`\~frated/desired-file \char`\~./newfile} + +This will copy the file from frated's account to the current directory and +call it ``newfile''. + +You can also copy files across the network using {\it rcp\/}: + +\oneline{\% rcp icsd:frated/desired-file ./newfile} + +This copies frated's file on the system icsd to the current directory. + +If you {\it really\/} have to mail a file, you use the {\it mhmail\/} program. +To mail a file ``myfile'' to another user ``frated'', with ``MyFile'' as +the subject type: + +\oneline{\% mhmail frated -subject MyFile < myfile} + + +\section{Searching for messages} + +The {\it pick\/} program allows you to search your inbox (or any other) +folder to find messages which contain a certain word. If you want to +list all messages from Smith you can type: + +\oneline{\% pick -from smith -list} + +and it will list the numbers of all messages from Smith that are in the +current folder. You can {\it pick\/} messages according to any of the +headers ({\tt -to -from -subj -cc {\rm or} -date}) or just search all the +messages for a given word ({\tt -search}). + +\section{The MH Profile} + +Each \MH/ user has a file in his directory called \verb|.mh_profile|. This +file contains a list of user-specified default options for \MH/ programs. +The only required +entry is the name of your \MH/ +directory: + +\oneline{Path: Mail} +or +\oneline{Path: mhbox} + +To make a change to your \verb|.mh_profile|, you edit the file and add a +line for the applicable program. For example, if you would like to use {\it +vi\/} instead of {\it prompter\/} as your initial editor when composing +messages, you would add this line to your \verb|.mh_profile|: + +\oneline{comp: -editor vi} + +or, if you want to have a format file for {\it scan\/} to use, you should +have: + +\oneline{scan: -form {\it formatfile}} + +Almost all of the \MH/ programs have options that can be set using the +\verb|.mh_profile|. You should consult the {\sl MH User's Manual\/} +for more information about this. + +Many people will want to add a signature line to their \verb|.mh_profile|. +This line will appear as your signature on the From: line in messages +you send. It looks like this: + +\oneline{Signature: John Q. Public} + + +Occasionally people express an interest in getting rid of some of the +header lines in their mail messages. They don't want to see the +``Received from'', ``Via'' information, or some other header. It +is possible to prevent these and other annoying headers from being +displayed by changing your {\it show\/} processor to be {\it mhless.} +To do this you must add this line + +\oneline{showproc: mhless} + +to your \verb|.mh_profile|. You also must create a file +called ``.mhlessrc'' containing the words which +appear at the beginning of the lines you don't want to see. + +The typical ``.mhlessrc'' file will look like this: +\begin{verbatim} + Received + Via + BB-Posted + Return-Path +\end{verbatim} + +The ``.mhlessrc'' file must be in your home directory. + + +\section{BBoards} + +Electronic bulletin boards (BBoards) are a convenient way for a group +of people to discuss a particular topic. Messages are sent to +an address where they can be read and replied to by all interested +parties. In the ICS department we have some ``local'' BBoards which +involve only people in the department. We also subscribe to many +nationally distributed BBoards. BBoards are read using the {\it bbc\/} +program which will allow you to read the messages with +an \MH/-like interface. + +One very important BBoard is ``system''. +It contains vital news about changes in software, system +downtime, new programs, and other information useful to all users. + +To read a BBoard, you type ``\verb|bbc| {\it BBoard\_name\/}''. The {\it +bbc\/} program will check to see if there are new messages in the named +BBoard and if there are, it will start up {\it msh\/} so you can read them. +The {\it msh\/} program allows you to use regular \MH/ commands when reading +BBoards. Type ``{\tt show}'' to see the current message, ``{\tt next}'' to +see the next message, and so on. Type ``{\tt quit}'' to quit reading the +current BBoard. If you have named more than one BBoard on the command line +or in your \verb|.mh_profile|, {\it bbc\/} will continue processing the next +BBoard in the list. + +Here is an example of using {\it bbc\/} to read the system BBoard: + +\newpage +\begin{footnotesize} +\baselineskip=12pt\parskip=0pt +\leftline{\tt\% bbc \itt system} +\leftline{\tt Reading system, currently at message 1 of 22} +\leftline{\tt(msh) \itt show} +\begin{verbatim} +(Message 1, BBoard-ID: 1360) +BBoard-ID: 1360 +BB-Posted: Wed, 29 Jan 86 15:36:39 PST +Received: from localhost by UCI.EDU id a006693; 29 Jan 86 15:20 PST +To: network@UCI.EDU +Subject: Imagen 24300 +Date: Wed, 29 Jan 86 15:19:43 -0800 +From: Tinh Tang + +The Imagen 24300 is now operating normally. It was broken down +due to the paper jammed in the drum. Luckily, it didn't cause +any damage. + +/ttang +\end{verbatim}\leftline{\tt(msh) \itt next}\begin{verbatim} +(Message 4, BBoard-ID: 1363) +BBoard-ID: 1363 +BB-Posted: Fri, 31 Jan 86 13:33:37 PST +Received: from localhost by UCI.EDU id a001631; 31 Jan 86 13:30 PST +To: msgs@UCI.EDU +Subject: uci.edu down 2/7/86 17:10 - 2/7/86 20:30 +Date: Fri, 31 Jan 86 13:30:27 -0800 +From: root@UCI.EDU + +The uci.edu will be down from + February 7,1986 17:10 till February 7,1986 20:30. +The reason for the downtime is: +Both, the Computing Facility and the Physical Sciences Dataswitches +will be unavailable from 5:10pm until 8:30pm on Friday, February 7th. +Therefore all the Computers attached to those switches and the +corresponding tandem link will be unavailable to users on +the specified time. (RJ). + +Downtime Scheduler +\end{verbatim}\leftline{\tt(msh) \itt quit} +\leftline{\tt \%} +\end{footnotesize} +\newpage + +You can see a list of all the available BBoards by typing: + +\command{bbc -topics} + +You can also put a line in your ``\verb|.mh_profile|'' listing all +the BBoards you want to read on a regular basis: + +\oneline{bboards: system movies mh-users events} + +Then you only need to type ``\verb|bbc|'' to read all your BBoards. + + +\section{Checking for Mail} + +Under \unix/, there are many different ways to check for new mail. The +easiest way to do it is to set the {\it csh\/} variable named ``mail'' +to tell {\it csh\/} to check for new mail for you periodically. To +do this, add the line + + \oneline{set mail=(60 /usr/spool/mail/\$USER)} + +to the {\tt .login} file in your home directory. This command says +to check for mail if {\it csh\/} is about to prompt you with a +{\tt \%} sign, and if it has been at least 60 seconds since it last +checked for mail. The advantage of this method of mail notification, +besides simplicity, is that you will never be interrupted by a mail +notification. You will only be notified about new mail when you +are between commands. + +If you want asynchronous mail notification, which will print to your +terminal regardless of what you are currently doing, you may make +use of a ``receive mail hook'' called ``rcvtty''. To do this, +create a file in your home directory called ``{\tt .maildelivery}''. +In this file, put the line + + \oneline{* - pipe R /usr/uci/lib/mh/rcvtty} + +Then, each time mail arrives, you will receive a one--line ``scan'' +listing of the mail if your terminal is world-writable. For more +information on mail delivery files, type: + + \command{man 5 maildelivery} + +This will tell you about all the options available to you if you +use maildelivery files. + + +\section{Aliases} + +Using \MH/, you may specify your own private mail aliases. This feature +allows you to store lists of addresses or long internet addresses of people +with whom you frequently correspond in one file, and then to address them +using short mnemonic names. Typically, you will call your alias file ``{\tt +aliases}''; it must be stored in your \MH/ directory. The format of this +file is simple. The alias is given, followed by a colon, followed by one or +more legal mail addresses separated by commas. For example, you might for +some reason have an alias for all the users named ``Rose'' in the ICS +department: + + \oneline{roses: prose, srose, mrose, drose} + +In addition to your ``{\tt aliases}'' file, you will need to modify your\break +\verb|.mh_profile| in order to use aliases. You should add the flag +``{\tt -alias aliases}'' to the entries for the commands {\it ali, whom, +send,} and {\it push,} creating entries for these programs if they aren't +already in your \verb|.mh_profile|. +Now, messages addressed to ``{\tt roses}'' will be distributed to all +the people listed in the alias. + +The {\it ali\/} command is used to show you what an alias expands to. +You just type + + \comarg{ali}{alias} + +and {\it ali\/} will respond with the expansion of the {\it alias.} {\it +Ali\/} searches the system aliases file in addition to your private ones. + +\section{Blind Lists} + +There are two different types of so-called ``blind addressing'' of messages. +The {\tt BCC:} field allows you to add recipients to your message just +like those who are CC'd, but the normal recipients will not see that the +BCC recipients were copied on the message, their replies will not go to the +blind recipients, and the blind recipients cannot (easily) reply to the +message. + +The second type of blind mailing is actually called a ``group address list'', +although it is commonly referred to as a ``blind list''. +The format of this type of address is + + \oneline{{\it phrase\/}: {\it address\_list\/};} + +where the ``{\it phrase\/}'' is any English phrase of one or more words, +and the {\it address\_list\/} consists of one or more addresses separated by +commas. The recipients of a message addressed in this fashion will +see simply + + \oneline{{\it phrase\/}: ;} + +so when they reply to the message, their reply will come only to the sender +(or the {\tt Reply-To:} field, if one was specified), rather than going to +all the recipients of the original list. For example, to use a group +address list for the ``{\tt roses}'' alias you would type: + + \oneline{To: People Named Rose: roses;} + +This type of group address is very +useful for making up lists of related people, such as all the people working +on a particular research project. + + +\end{document} diff --git a/docs/historical/changes/MHCHANGES b/docs/historical/changes/MHCHANGES new file mode 100644 index 0000000..f1051e2 --- /dev/null +++ b/docs/historical/changes/MHCHANGES @@ -0,0 +1,1539 @@ + MHCHANGES from MH 6.1 to MH 6.5 + + +Tue Nov 12 11:24:46 1985 /mtr + + MH 6.1 is official. + + +Fri Nov 15 19:14:44 1985 /mtr + + uip/{rcvtty,slocal}.c: touch-ups + + +Sun Nov 17 16:28:23 1985 /mtr + + conf/doc/{ap,mhl,repl,scan}.rf: note that #ifdef BERK kills + address parsing + conf/makefiles/{doc,uip,support/*,zotnet/*}: make tar command visible + sbr/m_convert.c: oops, new message numbering resulted in bad + diagnostic + papers/*/Makefile: fix LaTeX rule for v2.08 + + +Tue Nov 19 23:06:16 1985 /mtr + + uip/send.c: de-referencing NULL due to bad precedence, tsk + + +Wed Nov 20 10:58:40 1985 /mtr + + MH 6.1 covert update for sbr/m_convert.c, uip/send.c + + +Sun Nov 24 18:58:41 1985 /mtr + + uip/slocal.c: some tuning, also fix a bug in usr_pipe() + uip/dropsbr.c: have mbx_copy support noisy + uip/{packf,post,rcvpack,sbboards,slocal}.c: use this change + + +Tue Nov 26 00:22:17 1985 /mtr + + uip/refile.c: oops, forgot copy-back on optimzied m_remsg + + +Sat Nov 30 22:36:49 1985 /mtr + + zotnet/tws/dtime.c: add #ifdef INETONLY + uip/post.c: for #ifdef BERK don't say {Local,UUCP,Network} + Recipients + conf/doc/sortm.rf: note problem with errors + uip/bbc.c: for getbbvis() insist on readability + support/bboards/bbexp.c: oops, calling pick wrong + conf/doc/pick.rf: document -datefield anomaly + conf/makefiles/support/bboards: oops, left context owned by root + h/mh.h: ruserpass -> _ruserpass for SUN. why? + + +Sun Dec 1 07:58:50 1985 /mtr + + uip/vmh.c: remove double-scroll + uip/annosbr.c: oops, closing fd: without unlocking! + sbr/makedir.c: plug an obscure security hole in inc + uip/mhlsbr.c: read_termcap being called prematurely + zotnet/tws/dtime.c: load tw_sday appropriately + zotnet/tws/*.c: try using numeric timezone for official renditions, + under #ifdef MTR for now + + +Sun Dec 1 16:11:03 1985 /mtr + + uip/inc.c: more idiotic de-referncing of NULL, found on SUNs + uip/replsbr.c: ditto + uip/show.c: recognize more of mhl's switches + + +Wed Dec 4 23:38:06 1985 /mtr + + zotnet/mts/mts.h: oops for MMDFONLY + conf/{mh-gen.8,makefiles/zotnet/mts}: talk about -Dlocname + + +Thu Dec 5 19:55:11 1985 /mtr + + uip/scansbr.c: fix machine dependency pointed out by Chuck Collins + dist/READ-ME: new file talking about make bug + COVER-LETTER, conf/{mh-gen.8,doc/MH.rf}: change UCI -> UCI.EDU + + +Fri Dec 6 11:08:20 1985 /mtr + + support/bboards/mmdfII/gen: wrong filename + + +Sun Dec 8 18:39:01 1985 /mtr + + uip/send.c: always remove dist file + uip/vmh.c: work on erase-word handling, a bit + uip/folder.c: -fast -vs- -pack fixup + uip/mhlsbr.c: %text defined for date fields + + +Tue Dec 10 18:39:37 1985 /mtr + + zotnet/mts/client.c: moved from mts/sendmail/client.c + conf/makefiles/{mts/sendmail,zotnet/mts}: changed + mts/support/llib-lsendmail, zotnet/mts/llib-lmts: changed + mts/sendmail/client.c: 4.2BSD specific only! + conf/config/mts.c, zotnet/mts/mts.h: update + conf/mhconfig.c: update + conf/Makefile: simplify + + +Tue Dec 10 21:11:45 1985 /mtr + + conf/mh-gen.8: clear up some sys5 stuff + zotnet/mf/umhook.c: sys5-ize + uip/addrsbr.c: alternate-mailboxes: defaulted wrong under #ifdef + BERK, it's now "*" + conf/doc/mh-profile.rf: fix documentation to reflect reality + + +Tue Dec 10 22:38:23 1985 /mtr + + uip/addrsbr.c: normalize a bit (finally) + uip/addrsbr.c: new routine adrsprintf() to remove #ifdef BANG + dependencies + uip/{post,rcvdist,replsbr,sbboards}.c: use adrsprintf() + uip/post.c: remove #ifdef MF dependency for stand-alone MH, + remove #ifdef DUMB dependency by making addrsbr.c smarter + about being dumber + mts/mmdf/hosts.c: remove #ifdef DUMB dependency (right now, + addrsbr:getm() is the only one that calls it and it doesn't + call it under #ifdef DUMB... + + +Tue Dec 10 23:28:20 1985 /mtr + + uip/sbboards.c: oops, typo found by lint + + +Wed Dec 11 19:08:20 1985 /mtr + + miscellany/libndir: -lndir for non-BSD sites, graciously supplied + by Kirk McKusick + + +Tue Dec 17 08:36:59 1985 /mtr + + uip/send.c: different alert announcement based on -forward + + +Tue Dec 17 08:53:52 1985 /mtr + + conf/makefiles/sbr, sbr/cndfree.c: clean-up a bit + + +Tue Dec 17 18:26:34 1985 /mtr + + sbr/m_getfld.c, uip/{format,mhl,pick}sbr.c: clean-up indirection + code for less tolerant compilers + uip/bbc.c: add -[no]rcfile switch + uip/msh.c: clean up a diagnostic + + +Tue Dec 17 21:42:44 1985 /mtr + + conf/makefiles/sbr, h/mh.h, sbr/llib-lmh: cndfree() removed + sbr/{add,m_{delete,replace}}.c, uip/{mhl,vmh}sbr.c: replace cndfree + sbr/m_foil.c, uip/install-mh.c: compensate + + +Wed Dec 18 13:37:09 1985 /mtr + + uip/bbc.c: make second, optimized pass to catch private bboards + that the user knows about + uip/popsbr.c: ditto + uip/popser.c: slight tune-up + + +Wed Dec 18 20:27:38 1985 /mtr + + uip/slocal.c: minor touch up + uip/umhook.c: moved from zotnet/mf + + +Wed Dec 18 22:51:58 1985 /mtr + + uip/bbc.c: optimize on calling mshproc, check size of maildrop + first; if empty, don't invoke it! + + +Thu Dec 19 08:16:54 1985 /mtr + + uip/refile.c: better diagnostic from Fred Blonder + + +Thu Dec 19 22:34:23 1985 /mtr + + zotnet/mts/client.c: #ifdef BIND code when no gethostent() + conf/{mh-gen.8,doc/mh-tailor.rf}: document it + + +Thu Dec 19 23:58:44 1985 /mtr + + Release MH 6.2 to selected sites, including Berkeley for 4.3BSD testing + + +Sun Dec 29 19:58:43 1985 /mtr + + zotnet/mts/client.c: fix #ifdef BIND stuff a bit + h/mshsbr.h, uip/{mhlsbr,msh,mshcmds}.c: try to fix lost peer + problems... + conf/doc/vmh.rf: update + zotnet/drop/lock.c: not returning right errno + uip/dropsbr.c: ditto, plus not trying enough + conf/makefiles/doc: "make tar" forgetting tmac.h + uip/addrsbr.c: strcpy de-referencing NULL + uip/refile.c: got rid of a spurious \n (!!) + conf/examples/{udel,nrtc-mtr}: new files + h/mh.h, sbr/m_{convert,gmsg}.c, uip/{msh,rcvstore,refile}.c: fix + LOWSEL logic + uip/vmh.c: fix slight bug in sideground handling (misspelled + #ifdef, oops!) + conf/{mh-gen.8,config/mts.c},mts/*/hosts.c: remove the NETWORK option + + +Mon Dec 30 20:03:25 1985 /mtr + + conf/Makefile: options mangled(!?!) + uip/msh.c: if update of mailbox fails, it gets zero'd(!!) + (oops, not checking error condition) + support/pop/popser.c: if update of mailbox fails, clean-up + correctly (no zero problem here!) + uip/inc.c: on truncate of maildrop, remove mailbox map (XXX) + conf/makefiles/uip, uip/{send,whatnowsbr}.c: move send into + the WhatNow shell + uip/sendsbr.c: new file + conf/doc/whatnow.rf: update + + +Tue Dec 31 10:13:44 1985 /mtr + + conf/doc/vmh.rf: back-down last update + conf/mh-gen.8: forgot an \& + conf/examples/nrtc-{gw,mtr}, h/rcvmail.h: tsk, NRTC running an old + MMDF-II + + +Tue Dec 31 13:53:14 1985 /mtr + + conf/doc/whatnow.rf, uip/whatnowsbr.c: remove "headers" option + conf/doc/ADMIN.rf: clear-up post -debug documentation + conf/doc/{mh-chart,send,post}.rf, uip/{post,send,whatnowsbr}.c: remove + -[no]remove switches + uip/{repl,post}.c: some touch-ups + + +Tue Dec 31 19:16:23 1985 /mtr + + zotnet/tws/{dtime,dtimep}.c: dst fix-ups + conf/doc/send.rf: append, not prepend + uip/rmail.c: slight touch-up + uip/ap.c: oops, not printing all info + zotnet/mf/mf.c: botching trailing comment handling! + uip/scansbr.c: have cpy() omit trailing >>blank<< + sbr/m_gmsg.c: not zero'ing msgstats[] under non-MTR code + + +Tue Dec 31 22:23:43 1985 /mtr + + conf/doc/mhook.rf: minor typos + miscellany/rcvtrip/*: update + + +Tue Dec 31 23:21:21 1985 /mtr + + uip/mhlsbr.c: a bit more pipe trickyness (this gets old real fast) + conf/doc/ADMIN.rf: talk about popd and /etc/rc.local + papers/{myths,mznet}/Makefile: update + uip/bbc.c: augment XTND2 botch diagnostic + uip/msh.c: if popd says BBoard-ID: for a message is 0, read it + ourselves + + +Fri Jan 3 13:11:03 1986 /mtr + + uip/bbc.c: SIGTSTP race condition, #undef for now + + +Sun Jan 5 20:06:03 1986 /mtr (agent: Marshall Rose) + + -- Interface TTI TMA to MH #6.2 -- + [ N.B.: The TTI TMA is NOT in the public domain; the MH support for + the TTI TMA IS in the public domain! ] + conf/{mh-gen.8,mhconfig.c,doc/ADMIN.rf}: support "tma on" + conf/makefiles/{doc,uip}: ditto + Makefile: for the moment + + +Mon Jan 6 15:25:20 1986 /mtr + + uip/{msh,mshcmds}.c: work on refile + uip/{vmh,msh}.c: support FAST quit (no final refresh on + updated mailbox) + + +Tue Jan 7 15:06:05 1986 /mtr + + uip/bbc.c: got the SIGTSTP problem, now wait on child to stop prior + to stopping ourselves... + + +Wed Jan 8 23:16:10 1986 /mtr + + uip/trmsbr.c: better defaults for "li" and "co" + + +Thu Jan 9 15:29:09 1986 /mtr + + -- Fixes Suggested by Craig Partridge -- + support/bboards/mmdfII/bboards/mmdfonly.h: if V4_2BSD on, set BSD42 + conf/doc/{mhl,show}.rf: talk more about moreproc + uip/mhlsbr.c: have INTR work as advertised + uip/{send,whatnowsbr}.c: link on dist botched, oops! + + +Thu Jan 9 16:31:28 1986 /mtr + + uip/mshcmds.c: don't rmm() messages which don't get refiled + uip/vmh.c: truncate stuff on Scan window (finally) + uip/scansbr.c: work on diagnostics a bit + + +Thu Jan 9 22:37:29 1986 /mtr + + MH 6.2 is official, awaiting enhancements Berkeley! + + +Fri Jan 10 10:17:57 1986 /mtr + + uip/sbboards.c: botch multiple bboard handling (forgot to rewind + input, thanks to Larry Henry) + support/bboards/mmdfII/bboards/bb_wtmail.c: not handling errors + right + sbr/cpydgst.c: stay symmetric with change to bb_wtmail.c, the code + worked fine, adding matching braces for clarity (!!) + + +Sun Jan 12 14:01:25 1986 /mtr + + miscellany/mh-e: new version from James Larus + + +Sun Jan 12 22:58:34 1986 /mtr + + uip/bbc.c: getbbvis a bit too agressive, use popd algorithm + + +Wed Jan 15 04:43:33 1986 /mtr + + miscellany/netnews/: more stuff + + +Wed Jan 15 18:44:32 1986 /mtr + + uip/addrsbr.c: ismymbox() losing under #ifdef DUMB, oops! + + +Wed Jan 15 19:03:54 1986 /mtr + + COVER-LETTER: update + + +Wed Jan 15 23:15:54 1986 /mtr + + support/pop/popsbr.c: pophack on PASS command + + +Fri Jan 17 13:19:23 1986 /mtr + + uip/ali.c: add -noalias for RaJ + + +Wed Jan 22 11:13:08 1986 /mtr + + support/pop/popwrd.c: squash bug + h/mh.h: remove sigmask definition + uip/{bbc,vmh}.c: add sigmask if not defined in + (4.3BSD finally wised up!) + + +Sun Jan 26 16:57:18 1986 /mtr + + {conf/makefiles/uip,uip/post.c}: lint touch-up + conf/doc/{inc,mh-chart,send,post}.rf: add the #ifdef TMA stuff + sbr/m_remsg.c: tuning + uip/mark.c: re-arrange debug output slightly + h/mh.h: add some padding to fix some m_remsg bugs + uip/{inc,rcvstore}.c: oops, mp -> hghmsg not keeping pace with + m_remsg! + + +Mon Jan 27 17:51:07 1986 /mtr + + uip/whatnowsbr.c: forgot to put -[no]push for built-in send + h/addrsbr.h, uip/{addrsbr,post}.c: introduce auxformat(), the + back-end to adrformat(); post calls auxformat directly in + certain cases + uip/{dp,forw}.c: was cheating on adrformat, now on auxformat + + +Fri Jan 31 13:25:17 1986 /mtr + + COVER-LETTER: update + support/general/mhl.format: Remove length/width constraints + + +Sun Feb 2 14:01:28 1986 /mtr + + zotnet/tws/dtime.c: twsort() fix from John Romine for ALTOS + uip/addrsbr.c: smarter ismymbox for default case + conf/{mh-gen.8,doc/repl.rf}, uip/repl.c: add #ifdef ATHENA code + + +Sun Feb 2 20:47:36 1986 /mtr + + miscellany/replies/: new directory + + +Mon Feb 3 11:21:49 1986 /mtr + + uip/whatnowsbr.c: oops, slight dist botch + support/general/mhl.format: make date display user-friendly + conf/mh-gen.8: clean-up descriptions of options + uip/sbboards.c: normalize code wrt to MMDF-II BBoards channel + uip/msh.c: when running under vmh and not in control of TTY, + ignore TSTP so BPOP can spool ahead! + papers/{usenix/usenix,multifarious/multifarios,trusted/trusted}.tex: + fix up banners a bit + + +Wed Feb 5 09:32:08 1986 /mtr + + support/bboards/mmdfII/READ-ME: update + + +Wed Feb 5 11:25:05 1986 /mtr + + MH 6.3 #1[UCI] (nrtc-gremlin) is official, still awaiting Berkeley + enhancements + + +Wed Feb 5 14:42:55 1986 /mtr + + zotnet/tws/{tws.h,dtime.c}: new argument to dasctime() + uip/{format,pick}sbr.c: make use of it + + +Sun Feb 9 22:14:10 1986 /mtr + + support/pop/syslog.c: #ifdef BSD43 means use standard syslog + + +Sun Feb 16 15:40:20 1986 /mtr + + sbr/m_setvis.c: oops, fix-up unseen sequence stuff + uip/whatnowsbr.c: oops, a couple of typos + + +Sun Feb 16 19:11:33 1986 /mtr + + -- Incorporate Berkeley enhancements, courtesy of Van Jacobson -- + h/{format,scan}sbr.h: updated for new formatsbr stuff + h/mh.h: updated for new m_getfld + conf/MH: new default file + conf/config/config.c: support spost under BERK and SENDMTS + conf/mhconfig.c: support new zotnet/fmt/ directory + conf/makefiles/uip: support spost + conf/makefiles/zotnetM: support new zotnet/fmt/ directory + conf/makefiles/zotnet/fmt: new Makefile + conf/makefiles/zotnet/tws: support for new lex-based date parser + sbr/m_gmsg.c,uip/msh.c: change init of READONLY + sbr/m_getfld.c: re-written, super optimized! + support/general/{digestcomps,mhl.digest,mhl.forward,scan.*}: use + new fmt stuff + zotnet/fmt/: new directory + zotnet/tws/{dtimep.lex,lexedit.sed,lexstring.c}: new files + zotnet/tws/dtime.c: update + uip/{forw,scan,scansbr}.c: use new format stuff + uip/{inc,mhlsbr,mshcmds,replsbr}.c: use new format stuff + uip/trmsbr.c: use stderr for ioctl()s + uip/spost.c: new file + uip/{addr,format}sbr.c: remove, they're in zotnet/fmt/ + + +Sun Feb 16 23:04:34 1986 /mtr + + zotnet/fmt/: move into sbr/ to avoid loading problems + sbr/{addrsbr,formatsbr,fmtcompile,formataddr}.c: new files + h/fmtcompile.h: new file + conf/makefiles/{sbr,zotnetM}: update + sbr/llib-lmh: update + + +Mon Feb 17 20:14:35 1986 /mtr + + support/general/scan.{time,size}: mday/month inverted + sbr/{formatsbr,fmtcompile}.c: bring upto date with MH 6.3+ + sbr/formatsbr.c: missing tzone/sday/dst handling! + h/scansbr.h: slight update + uip/scansbr.c: try using formataddr() routine to do "correct" + formatting of scan'd addresses, didn't work! use friendly + zotnet/tws/dtimep.lex: tsk, use lint! also, fix numeric timezones + sbr/addrsbr.c: some ismymbox fixes for non-BERK code (from 6.3) + sbr/formatsbr.c: not priming the pump! + h/fmtcompile.h, sbr/{formatsbr,fmtcompile}.c: add "friendly" + support/general/scan.time2: call it scan.timely + conf/makefiles/support/general: support scan.timely + + +Tue Feb 18 01:13:51 1986 /mtr + + h/formatsbr.h: updates from Van + + +Tue Feb 18 02:15:00 1986 /mtr + + uip/bbc.c: upgrade for new m_getfld() + support/general/scan.*, h/scansbr.h: still more changes + support/general/replcomps: still more changes + + +Tue Feb 18 22:14:51 1986 /mtr + + sbr/m_getfld.c: eom_action() lacking argument + sbr/m_getfld.c: not working right on packf'd files + uip/{msh,mshcmds}.c: under BPOP, need to fix things so m_getfld() + doesn't dump core! + + +Wed Feb 19 00:16:55 1986 /mtr + + uip/dist.c, support/general/distcomps, sbr/fmtcompile.c: updates + from Van + sbr/formatsbr.c: remove ismymbox prime + sbr/fmtcompile.c: use adios(), not exit()! + + +Wed Feb 19 00:56:30 1986 /mtr + + sbr/m_getfld.c: different fix for packf'd files from Van + + +Wed Feb 19 01:55:40 1986 /mtr + + h/mh.h: add msg_* vars in m_getfld() as externs + uip/{msh,{repl,scan}sbr}.c: remove msg_* declarations + sbr/m_getfld.c: add a bit of BODYEOF support (without slowing it + down, wouldn't want to upset Van!) + + +Wed Feb 19 03:11:42 1986 /mtr + + sbr/{formataddr,fmtcompile,m_{draft,getfld,maildir},printsw,pwd}.c: + lint it + uip/{formatsbr,forw,msh,replsbr,scan,scansbr,spost}.c: lint it + support/pop/popser.c: lint it + sbr/formatsbr.c: remove MHFMTDEBUG code + */Makefile: depend 'em + + +Wed Feb 19 10:50:04 1986 /mtr + + papers/mh6.4: new interim documentation directory, for 4.3BSD + conf/doc/{MH,ap,dp,mh,mh-chart,mhl,repl,scan}.rf: update + conf/doc/mh-format.rf: new file + support/general/replcomps: oops, should call formataddr on all + addrs + + +Thu Feb 20 08:07:49 1986 /mtr + + uip/{a,d}p.c: start working on it + h/formatsbr.h: new variable fmt_norm + sbr/formatsbr.c: use it + h/fmtcompile.c, sbr/{fmtcompile,formatsbr}.c: define "pretty" + sbr/formataddr.c: sight touch-up + uip/formatsbr.c: oops, bug in PUTD() + uip/{fmtcompile,formatsbr}.c: init mn structures in case of error. + This is still buggy since: 1) the structure still doesn't get + reset on errors, and 2) you can still dereference nulls + zotnet/tws/dtimep.lex: slight touch-up + + +Thu Feb 20 19:55:20 1986 /mtr + + uip/mhlsbr.c: add formatsbr support + sbr/addrsbr.c: use better default matching in ismymbox + miscellany/mtrenv: update + support/general/mhl.*: update + + +Thu Feb 20 22:57:33 1986 /mtr + + MH 6.4 #1[UCI] (nrtc-gremlin) made available to Van Jacobson + for inclusion in 4.3BSD UNIX + + +Sun Feb 23 13:59:46 1986 /mtr + + sbr/m_gmsg.c: big bug fix from Terry West. Thanks, Terry! + h/strings.h: System5 bcopy-equivalents from Doug Gwyn + zotnet/tws/tws.h: support #ifdef ATZ + conf/makefiles/uip: slight lint botch + + +Mon Feb 24 17:14:39 1986 /mtr + + uip/inc.c: have -host/-file ask if file doesn't exist + uip/{packf,mshcmds}.c: ditto + + +Tue Feb 25 08:08:43 1986 /mtr + + uip/burst.c: another realloc() fix from Terry West + sbr/vfgets.c: ditto + support/pop/popser.c: enhancmenets from Dave Cohrs + conf/doc/pop5.rf: document it + conf/mhconfig.c: support "debug" directive + makefiles/*: use it + + +Tue Feb 25 09:47:09 1986 /mtr + + uip/{scan,mshcmds}.c: slight touch-ups + uip/mhlsbr.c: fix up SIGPIPE handling, again + support/general/scan.time: fix up for numeric timezone + uip/scansbr.c: re-support "encrypted" + uip/msh.c: add "exit" command for Dave Farber + miscellany/convert: new directory + + +Tue Feb 25 17:45:28 1986 /mtr + + h/mshsbr.h, uip/msh*.c: add direct folder support for symmetry's + sake, ugh! + + +Wed Feb 26 21:05:46 1986 /mtr + + uip/sendsbr.c: better diagnostics when post fails + + +Thu Feb 27 22:12:53 1986 /mtr + + -- Van sends updates -- + conf/makefiles/uip, h/fmtcompile.h, + sbr/{format{addr,sbr},fmtcompile,addrsbr}.c, + support/general/replcomps, uip/{repl,mhl,scan,whatnow}sbr.c + + +Thu Feb 27 22:16:43 1986 /mtr + + sbr/formataddr.c: remove + sbr/addrsbr.c: Van doesn't like "user*" instead of "user" as the + default is-my-mailbox for BERK. Since he's the BERK-author, I'll + assume he knows what he's doing... + support/general/replcomps: Use "tws", instead of "pretty" for + in-reply-to: + uip/whatnowsbr.c: If -draft{folder,message} and -nodraftfolder are + added as no-ops, make them "hidden" from -help output + uip/{{a,d}p,forw,mhlsbr}.c: update + + +Mon Mar 3 10:18:40 1986 /mtr + + -- Van sends fixes to my updates -- + uip/mshcmds.c: not resetting scansbr for formatting + uip/scansbr.c: oops, typo! + + +Mon Mar 3 16:53:19 1986 /mtr + + uip/sendsbr.c: oops, close() on an uninitialized variable! (thanks + to Jim Koda) + + +Tue Mar 4 08:15:17 1986 /mtr + + -- Van sends fixes to my updates -- + uip/mhlsbr.c: not resetting mhlsbr for formatting + zotnet/tws/dtimep.lex: not getting MIL-TZ's right + + +Tue Mar 4 09:53:31 1986 /mtr + + papers/usenix/: change to realwork/ + + +Wed Mar 5 12:48:58 1986 /mtr + + dist/READ-ME: oops, forgot usenix name change + conf/makefiles/uip: hmm, interesting loader problem + + +Thu Mar 6 13:36:26 1986 /mtr + + uip/addrsbr.c: yet another fix for ismymbox() + uip/replsbr.c: #ifdef ISI code to avoid duplicate replies (due to + Jim Koda) + + +Sun Mar 9 14:04:26 1986 /mtr + + conf/mh-gen.8: add a line about chown and sys5 + sbr/m_convert.c: better BADRNG diagnostic + uip/mshcmds.c: oops, typo + + +Sun Mar 9 14:06:54 1986 /mtr + + h/scansbr.h, sbr/fmtcompile.c: better versions from Van + support/general/{replcomps,scan.timely}: better versions from Van + (snuck the %pretty instead of %tws in, eh Van?) + support/general/{digestcomps,mhl.forward,scan.{size,time}}: update + + +Sun Mar 9 18:52:37 1986 /mtr + + h/scansbr.h, support/general/{digestcomps,mhl.forward,scan.*}: update + + +Sun Mar 9 20:09:35 1986 /mtr + + zotnet/bboards/bboards.h: add BB_REMOTE flag for bbc + uip/bbc.c: support BB_REMOTE, under #ifdef MTR for the moment + uip/bbc.c: allow bb_aka (again?!?) + + +Mon Mar 10 00:43:19 1986 /mtr + + uip/{msh,mshcmds}.c: packf hack, ala refile hack + uip/{post,rcvdist}.c, support/bboards/mmdfII/bboards/bb_wtmail.c: + MMDF-II nameserver support from Steve Kille + + +Mon Mar 10 10:17:29 1986 /mtr + + {sbr/formatsbr,uip/scansbr}.c: more optimizations from Van! + sbr/m_getfld.c: Van fixes problems due to losing vanilla-4.2 C + optimizer! + sbr/m_getfld.c: slight touch-up by MTR + uip/bbc.c: remove #ifdef MTR bracketing, code works fine + uip/refile.c: slight touch-ups + sbr/m_getfld.c: on xxxERR returns, forgetting to zero value buffer + + +Mon Mar 10 18:08:37 1986 /mtr + + uip/post.c: fix handling of (in)visible addresses + uip/rcvdist.c: re-do to use format facility + uip/{replsbr,forw}.c: touch-ups + conf/config/config.c, h/mh.h: new variable rcvdistcomps + conf/{makefiles/{uip,support/general},doc/mhook.rf}: update + sbr/m_getfld.c: bstring() support for non BSD42, SYS5 systems + conf/doc/ADMIN.rf: update + + +Tue Mar 11 19:43:27 1986 /mtr + + h/dropsbr.h, uip/dropsbr.c: new routines mbx_read() and mbx_write() + uip/{msh,mshcmds}.c, support/pop/popser.c: use it + h/{addr,format,scan}sbr.h, sbr/addrsbr.c: slight touch-up + uip/inc.c: slight touch-up + + +Sun Mar 16 15:20:27 1986 /mtr + + miscellany/mem: appointment diary support from Ken Yap + + +Wed Mar 19 23:00:53 1986 /mtr + + support/pop/popser.c: one last fix for ENOENT mailboxes + + +Wed Mar 19 23:12:54 1986 /mtr + + -- Changes for MMDF-IIb -- + uip/post.c, support/bboards/mmdfII/bboards/bb_wtmail.c: know about + new mm_winit protocol and RP_NS/RP_DOK responses + + +Thu Mar 20 23:05:10 1986 /mtr + + uip/mhlsbr.c: mhl enhancement from JLR permitting a prefix string + for each line of the body (e.g, "component=" > ") + + +Fri Mar 21 21:12:39 1986 /mtr + + conf/doc/{MH,mh-format}.rf: typos + + +Sat Mar 22 11:51:45 1986 /mtr + + -- Fixes from Phyllis Kantar -- + uip/dropsbr.c: typo + conf/doc/{send,pick}.rf: typos + conf/makefiles/doc: forgot $(OPTIONSn) in $(MAN1) definition + + +Sat Mar 22 18:24:35 1986 /mtr + + uip/mhmail.c: handle -body better + + +Mon Mar 31 15:07:26 1986 /mtr + + uip/replsbr.c: handle bad addresses with better diagnostics + + +Wed Apr 2 17:17:32 1986 /mtr + + sbr/addrsbr.c: slight typo in comment + + +Sun Apr 6 19:22:52 1986 /mtr + + uip/inc.c: forgot to initialize some FILE*'s; dumps core on + celerity + + +Mon Apr 7 09:55:23 1986 /mtr + + mts/sendmail/smail.c: slight "client" check + + +Wed Apr 9 12:04:56 1986 /mtr + + -- Van fixes some more bugs -- + sbr/m_getfld.c: not handling buffer boundary cases right + uip/replsbr.c: not adding "," correctly when concatenating an + address string during message scan + sbr/formatsbr.c: mymbox test dumped core if address parse failed + h/{fmtcompile,formatsbr}.h, sbr/{fmtcompile,formatsbr}.c: more + enhancements + + +Wed Apr 9 12:36:58 1986 /mtr + + -- MTR actually gets to fix something! -- + sbr/m_getfld.c: messages with an empty body caused inc to + prematurely think the maildrop had reached EOF. Believe it + or not, the mhmail fix last month exercised this! + + +Wed Apr 9 22:08:37 1986 /mtr + + uip/vmh.c: output non-standard control characters in carat format + + +Thu Apr 10 02:26:52 1986 /mtr + + Makefile: touch-up "make distribution" + conf/examples/nrtc-*-mtr: remove + conf/makefiles/uip: touch-up + conf/doc/MH.rf: add TMA stuff, conditionally + + +Thu Apr 10 03:47:48 1986 /mtr + + sbr/m_getfld.c: Van fixes Marshall's fix + + +Thu Apr 10 10:42:25 1986 /mtr + + uip/scansbr.c: recognize the 822 "Encrypted:" header instead of + doing a uprf() on the body + uip/{scan,mshcmds}.c: recognize SCNENC return from scan () + + +Thu Apr 10 15:06:59 1986 /mtr + + conf/config/bboards.*: mail reports to PostMaster + + +Sat Apr 12 16:32:21 1986 /mtr + + uip/post.c: try to keep fcc:s under MH-directory so links are + maintained + + +Mon Apr 14 22:56:46 1986 /mtr + + support/bboards/bbexp.c: not ending msh correctly, msh tried + to update the maildrop even though it was already locked + by bbexp + + + +Mon Apr 14 23:52:03 1986 /mtr + + sbr/m_getfld.c: locc() not range checking on cnt + + +Thu Apr 17 13:25:20 1986 /mtr + + sbr/addrsbr.c: fix from Terry West, more alternate-mailbox misery + + +Thu Apr 17 20:51:53 1986 /mtr + + zotnet/mts/lock.c: add some more #ifdefs to support stand-alone + locking library + conf/examples/udel*: update + papers/myths/: remove + conf/makefile/papers: update + + +Mon Apr 21 10:22:09 1986 /mtr + + zotnet/mf/mf.c: sanity check in getadrx() on string to parse + + +Mon Apr 21 17:31:43 1986 /mtr + + uip/{inc,post}.c: slight mods for TMA mods + conf/doc/mh-chart.rf: ditto + + +Thu Apr 24 00:19:35 1986 /mtr + + conf/doc/mh-chart.rf: slight mods for TMA mods + + +Thu Apr 24 10:34:06 1986 /mtr + + zotnet/mts/lock.c: lint touch-up + support/pop/popd.c: ditto + + +Thu Apr 24 19:37:09 1986 /mtr + + conf/doc/ADMIN.rf: typos + + +Thu Apr 24 20:13:28 1986 /mtr + + uip/msgchk.c: print out last read date + conf/makefiles/uip: add tws dependency + + +Thu Apr 24 23:53:57 1986 /mtr + + -- From Craig Partridge -- + support/bboards/mmdfII/bboards/*: bug fixes for MMDF-IIb + conf/mh-gen.8: mention that MMDF-IIb has the BBoards distribution + + +Fri Apr 25 00:01:50 1986 /mtr + + conf/ADMIN.rf: slight touch-up + + +Fri Apr 25 10:47:19 1986 /mtr + + uip/trmsbr.c: use stdout (not stderr) for termcap checking + + +Fri Apr 25 13:39:55 1986 /mtr + + -- From Craig Partridge -- + support/bboards/mmdfII/bboards/getbbent.c: bad field in BBoards file + causes hang, note it and skip! + + +Sun Apr 27 17:23:56 1986 /mtr + + uip/scansbr.c: recognition of 822 Encrypted: header a bit botched + h/scansbr.h, support/general/scan.*: support encrypted + + +Mon Apr 28 21:00:21 1986 /mtr + + -- Yet Another Fix from Terry -- + uip/dropsbr.c: another typo + + +Tue Apr 29 20:17:11 1986 /mtr + + conf/doc/mhook.rf: extra tip with SendMail and slocal + + +Thu May 1 15:30:07 1986 /mtr + + -- From Craig Partridge -- + support/pop/mmdfII/pop/READ-ME: fixes + + +Fri May 2 16:35:11 1986 /mtr + + -- More Bug Fixes from Van -- + uip/scansbr.c: check return from fclose() + uip/inc.c: avoid locking/stat race condition + sbr/m_sync.c: lock signals out during update of sequences + + +Fri May 2 17:02:01 1986 /mtr + + uip/show.c: WHATNOW botch fixed by Jim Valerio + + +Sat May 3 01:37:15 1986 /mtr + + sbr/{m_{sync,update},pidwait}.c, uip/{bbc,sendsbr,vmh}: inspired + by Van's 4.2BSD signal optimizations + + +Sat May 3 02:49:29 1986 /mtr + + zotnet/tws/{tws.h,dtime.c,dtimep.lex}: fixes for DST + conf/makefiles/zotnet/tws: add -n to lex's invocation + + +Sun May 4 13:28:23 1986 /mtr + + uip/msgchk.c: change the "last read" message to use alpha-timezones + + +Sun May 4 14:18:15 1986 /mtr + + support/general/replcomps: use %tws instead of %pretty + support/general/mhl.*: streamline slight + + +Sun May 4 16:10:36 1986 /mtr + + conf/doc/mh.rf: forgot about TMA stuff + conf/makefiles/doc: forgot rcvstore + + +Sun May 4 17:49:43 1986 /mtr + + sbr/pidwait.c, uip/{bbc,sendsbr,vmh}.c: back off signal handling + modifications + +Sun May 4 18:08:47 1986 /mtr + + MH 6.5 #1[UCI] (nrtc-gremlin) made available to Van Jacobson + for inclusion in 4.3BSD UNIX + + +Mon May 5 13:32:37 1986 /mtr + + uip/trmsbr.c: try Van's version for a while + miscellany/patch: updates from Van + + +Mon May 5 16:07:12 1986 /mtr + + support/bboards/mmdfII/bboards/bb_wtmail.c: patch for IDIOTIC change + in qu_rtxt() + + +Wed May 7 13:16:45 1986 /mtr + + uip/post.c: modification for fcc:s broke stand-alone behavior for + daemons, etc.; use old method as a fall-back + sbr/m_foil.c: also improve modification a bit + support/pop/smtpd.c: dead weight + + +Thu May 8 17:50:22 1986 /mtr + + support/bboards/bbexp.c: set the mode on the archive file if + creating it, since m_gmprot() isn't a good default for this + application + + +Sun May 11 12:40:34 1986 /mtr + + miscellany/scripts/READ-ME: add amhmail description + miscellany/scripts/amhmail.sh: new script + + +Mon May 12 09:12:39 1986 /mtr + + sbr/m_getfld.c: new version of matchc() from Van that doesn't + give the SUN indigestion + + +Tue May 13 07:59:36 1986 /mtr + + uip/replsbr.c: some fixes from Van + + +Tue May 13 15:14:07 1986 /mtr + + -- Some Fixes from Hokey -- + uip/vmh.c: a few more SYS5 dependencies + zotnet/tws/dtimep.lex: added #include strings.h + conf/makefiles/zotnet/tws: added dependency for above + uip/post.c: pre-emptive reference of discard to help SYS5 loader + conf/examples/plus5: update + miscellany/less/Makefile: add SHELL=/bin/sh + sbr/m_getfld.c: slight redeclaration for SYS5 + + +Tue May 13 17:44:47 1986 /mtr + + sbr/{fmtcompile,formatsbr}.c, support/pop/popwrd.c, + uip/{ap,inc,rcvtty,post,spost,whatnowsbr}.c: + add some lint stuff + conf/makefiles/uip: better lint support for TMA + + +Thu May 15 16:36:19 1986 /mtr + + uip/{inc,msgchk,post,send}.c: improve #define-dependent + switches declarations + + +Thu May 15 17:09:34 1986 /mtr + + uip/msgchk.c, conf/doc/{mh-chart,msgchk}.rf: add -[no]date, + and -[no]notify type switches + + +Tue May 20 19:09:15 1986 /mtr + + uip/scan.c: free'ing a static, tsk + + +Tue May 20 22:51:13 1986 /mtr + + -- From Steve Smith -- + conf/examples/ridge: config file + sbr/{m_gmsg,pwd}.c: although SYS5, uses + uip/show.c: not null-terminating argvector + uip/{bbc,vmh}.c: although SYS5, has SIGTSTP + uip/sbboards.c: pre-emptive reference of discard to help SYS5 loader + conf/{mh-gen.8,mhconfig.c}: add "oldload none" + + +Wed May 21 10:10:21 1986 /mtr + + uip/{rcvdist,replsbr}.c: malloc/free fixes from Steve Smith + + +Wed May 21 20:51:47 1986 /mtr + + conf/{mh-gen.8,doc/{ADMIN,MH}.rf, papers/*/*, COVER-LETTER: update + mail addresses + + +Thu May 22 08:05:03 1986 /mtr + + -- Two New Documents from UCI -- + conf/makefiles/{papers,dist}: update + dist/READ-ME: remove + conf/doc/MH.rf: update + papers/beginners: new paper "MH for Beginners" + papers/mh4mm: new paper "MH for MM Users" + + +Thu May 22 08:13:17 1986 /mtr + + conf/mh-gen.rf: update + + +Thu May 22 15:08:06 1986 /mtr + + support/general/replcomps: typo + + +Tue May 27 19:35:38 1986 /mtr + + support/pop/popd.c: support for 4.3BSD syslog + + +Wed May 28 12:44:21 1986 /mtr + + sbr/fmtcompile.c: allow literal '%'s in format files + + +Wed May 28 16:56:40 1986 /mtr + + conf/examples/nrtc-gremlin: add -125 switch for GHS compiler + sbr/getans.c,uip/{mhlsbr,prompter,rcvtty,sendsbr}.c: a bit more + careful with the setjmp() + + +Thu May 29 23:42:54 1986 /mtr + + support/general/scan.mailx: mailx scan format from Bob Simpson of + plus5 + support/general/mhl.body: format from mtrenv + + +Sun Jun 1 23:07:24 1986 /mtr + + uip/trmsbr.c: add sc_hardcopy() + uip/mhlsbr.c: use it so we don't fork a more on hardcopy ttys + conf/doc/mhl.rf: document it + + +Fri Jun 6 10:56:40 1986 /mtr + + miscellany/less/screen.c: handle HP terminals better + +Tue 10 Jun 86 15:34 John Romine + + h/scansbr.h: eliminate superfluous space from default format + string + + +Fri 13 Jun 86 10:29 John Romine + + h/scansbr.h, support/general/scan.{timely,time,size}: add ">>" at + end of body in format string + + +Fri Jun 13 15:28:10 1986 /mtr + + sbr/addrsbr.c: another #ifdef BERK fix for the SUN + + +Fri Jun 13 20:08:36 1986 /mtr + + uip/aliasbr.c: not testing for relative names correctly + + +Sun Jun 15 14:20:10 1986 /mtr + + h/scansbr.h, support/general/scan.{timely,time,size}: remove JLR's + fix since it doesn't work right + + +Mon Jun 16 19:56:09 1986 /mtr + + sbr/{m_gmsg,pwd}.c, uip/{bbl,conflict,folder,rmf}.c: add NDIR + compile-time option if -lndir include file is called + instead of (non BSD systems) + h/local.h: new file to make this easier + + +Tue Jun 17 10:44:06 1986 /mtr + + uip/trmsbr.c: no TIOCGWINSZ working on 4.2BSD ULTRIX! + + +Tue Jun 17 14:21:08 1986 /mtr + + uip/scan.c: forgot to make -header always force ATZ behavior + + +Tue Jun 17 15:23:27 1986 /mtr + + h/mh.h: add vfork for hpux + + +Wed Jun 18 11:05:40 1986 /mtr + + support/bboards/bbexp.c: create archives in BBMODE format, private + bboards should have archives created by the BBoards user (just + like the standard file) + + +Wed Jun 18 19:57:09 1986 /mtr + + uip/vmh.c: sanitize for 8-bit whacko characters + + +Thu Jun 19 19:51:43 1986 /mtr + + zotnet/tws/dtimep.lex: fix spelling for august + + +Mon Jun 23 20:45:35 1986 /mtr + + uip/vmh.c: Bob gives us another sys5 fix + + +Sun Jun 29 21:11:30 1986 /mtr + + sbr/addrsbr.c: yet another fix for the SUN (yaffts) + conf/mhconfig.c: if both mts/smtp and options BERK, turn off + SMTP + + +Tue Jul 8 10:50:39 1986 /mtr + + uip/scansbr.c: split-up a statement for the RT compiler + conf/mh-gen.8: add some stuff on POP + conf/doc/{ADMIN,popaka}.rf: ditto + + +Fri Jul 11 10:50:31 1986 /mtr + + MH 6.5 official, out of beta, released for UCI distribution + + +Tue Jul 15 20:26:05 1986 /mtr + + papers/{bboards/bboards,tutorial/tutorial}.tex: botched MTR's + address + + +Sun Jul 27 11:52:37 1986 /mtr + + conf/doc/show.rf: typos + + +Fri Aug 8 12:57:35 1986 /mtr (agent: Marshall Rose) + + conf/config/config.c, h/mh.h, sbr/m_readefs.c, uip/mhlsbr.c: + add support for "faceproc" + + +Mon Aug 11 10:10:33 1986 /mtr (agent: Marshall Rose) + + uip/mhlsbr.c: choose default face from from: line + + +Tue Aug 12 10:53:47 1986 /mtr (agent: Marshall Rose) + + uip/mhlsbr.c: finally stabilize it + + +Tue Aug 12 10:54:47 1986 /mtr (agent: Marshall Rose) + + support/pop/popser.c: small fix from Dave Cohrs + + +Thu Aug 14 22:25:23 1986 /mtr + + support/general/replcomps: add return-path to To: list + + +Fri Aug 15 13:58:25 1986 /mtr (agent: Marshall Rose) + + uip/vmh.c: slight clean-up + + +Fri Aug 15 23:01:06 1986 /mtr + + sbr/advertise.c: slight touch-up + + +Mon Aug 18 10:38:34 1986 /mtr (agent: Marshall Rose) + + uip/wmh.c: new program--Windowing MH for Integrated Solutions + Graphics Workstations; not standardly installed for now since + requires special load libraries + conf/doc/wmh.rf: man page + conf/makefiles/uip: support wmh + + +Wed Aug 20 14:16:12 1986 /mtr (agent: Marshall Rose) + + conf/config/MakeBBoards: smarter rule + + +Wed Aug 20 17:23:39 1986 /mtr (agent: Marshall Rose) + + uip/mhlsbr.c: a bit less demanding on errors when processing the + face + + +Thu Aug 28 19:39:47 1986 /mtr (agent: Marshall Rose) + + uip/send.c: handle dist in a read-only folder + support/pop/popser.c: anonymous fix for DPOP/BPOP + + + +Fri Aug 29 09:08:15 1986 /mtr (agent: Marshall Rose) + + uip/wmh.c: for pTTY() make original window the top one + + +Tue Sep 2 15:27:34 1986 /mtr + + uip/{bbc,burst,popsbr}.c: ULTRIX loses on ferror() vs. feof() + sbr/vfgets.c: ditto + + + +Fri Sep 5 09:08:17 1986 /mtr (agent: Marshall Rose) + + mts/sendmail/smail.c: define discard() as void + + +Fri Sep 5 09:40:35 1986 /mtr (agent: Marshall Rose) + + uip/msh.c: add hidden "advance" command + uip/wmh.c: use it + + +Fri Sep 5 14:02:36 1986 /mtr (agent: Marshall Rose) + + zotnet/bboards/bboards.h: add BB_SEEN to fix list-handling bug in bbc + uip/bbc.c: use it + + +Mon Sep 8 12:47:58 1986 /mtr (agent: Marshall Rose) + + conf/config/MakeBBoards: smarter + + +Thu Oct 2 12:37:57 1986 /mtr + + support/pop/popd.c: fixes for 4.3BSD set setsockopt + + +Mon Oct 6 12:07:02 1986 /mtr (agent: Marshall Rose) + + conf/examples/encore: config file for Encore Multimax, from Mike + Iglesias of UCI + + +Wed Oct 8 15:59:05 1986 /mtr (agent: Marshall Rose) + + uip/vmh.c: more SYS5 mods from Bob Desinger + + +Thu Oct 9 12:52:41 1986 /mtr (agent: Marshall Rose) + + h/mh.h: make ruserpass nonsense based on NFS not SUN + + +Thu Oct 30 12:57:52 1986 /mtr (agent: Marshall Rose) + + sbr/formataddr.c, uip/replsbr.c: another realloc() bug found by + Terry West + + +Thu Oct 30 13:03:02 1986 /mtr (agent: Marshall Rose) + + uip/{rcvtty,ttyw}.c: if no BSD42, turn off TTYD + + +Mon Nov 3 14:11:48 1986 /mtr (agent: Marshall Rose) + + uip/msgchk.c: another SUN fix + + +Mon Nov 3 15:21:38 1986 /mtr (agent: Marshall Rose) + + sbr/m_sync.c: fix for sequent machines + + +Mon Nov 10 08:12:16 1986 /mtr + + -- Stuff from Jef Poskanzer -- + uip/forw.c: add -[no]dashmunging, a hidden option + uip/mhlsbr.c: add -[no]dashmunging, a hidden option + {conf/doc/mhl.rf,uip/mhlsbr.c}: add [no]split variable + + +Mon Nov 10 16:57:41 1986 /mtr (agent: Marshall Rose) + + -- More stuff from Jef -- + zotnet/tws/dtimep.lex: default timezone to localone one + + +Fri Nov 14 17:25:23 1986 /mtr + + conf/doc/mhook: typo found by Phyl + + +Fri Nov 21 14:33:28 1986 /mtr (agent: Marshall Rose) + + sbr/smatch.c: deref null bug + + +Sat Nov 22 20:36:31 1986 /mtr + + uip/bbc.c: set up time-bomb after HUP + + +Tue Dec 2 13:57:41 1986 /mtr (agent: Marshall Rose) + + support/bboards/bbtar.c: fix for sequent machines + + +Wed Dec 3 22:03:58 1986 /mtr + + support/pop/popd.c: minor fix + + +Mon Dec 15 11:11:32 1986 /mtr (agent: Marshall Rose) + + uip/post.c: patch for MMDF-IIb submit + + +Mon Dec 22 12:32:45 1986 /mtr (agent: Marshall Rose) + + -- From Stanford -- + h/dropsbr.h, uip/dropsbr.c, support/pop/popser.c: support LAST + command in POP service + uip/{inc,mshcmds}.c: ditto + + +Fri Jan 2 18:42:55 1987 /mtr + + uip/dropsbr.c: fixes + uip/msh.c, support/pop/popser.c: ditto + + +Fri Jan 2 18:43:09 1987 /mtr + + zotnet/tws/dtimep.lex: ctime w/o TZ hack + + +Fri Jan 2 23:41:19 1987 /mtr + + uip/rcvdist.c: touch-ups to sync with replsbr.c + uip/scansbr.c: trash trailing whitespace in header components for + formating + + +Sat Jan 3 13:11:22 1987 /mtr + + conf/config/mts.c, mts/sendmail/hosts.c: BIND fix-up + + +Sat Jan 3 15:03:00 1987 /mtr + + h/formatsbr.h: parenthesize better, use case-sensitive in + bucket search since hashing is case-sensitive + uip/{rcvdist,replsbr}.c: CT_ADDR hacks + + +Sun Jan 4 11:16:54 1987 /mtr + + uip/mhlsbr.c: "extras" hack for Elz diff --git a/docs/historical/changes/Makefile b/docs/historical/changes/Makefile new file mode 100644 index 0000000..67d4fe0 --- /dev/null +++ b/docs/historical/changes/Makefile @@ -0,0 +1,46 @@ +############################################################################## +# @(#)Makefile,v 1.1.1.1 1993/01/30 04:41:04 jtc Exp + +MAKE = make DESTDIR=$(DESTDIR) $(MFLAGS) -k +SHELL = /bin/sh + + +############################################################################## +# Generation Rules +############################################################################## + +.SUFFIXES: .ms .cat .doc .imp + +.ms.cat:; itroff -t -ms $< > $@ + +.ms.doc:; nroff -ms $< > $@ + +.cat.imp:; catimp -i $@ $< + + +###################################################################### +# Here it is... +###################################################################### + +TARGETS = mh-changes.doc + +all: mh-changes.doc + + +doc: mh-changes.doc + +i-all: all true + lpr -t -J MH-changes mh-changes.cat + +true:; + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + +unconfig clean: unclean + rm -f *.cat *.dvi *.imp *.doc + +unclean:; rm -f *.tmp _* :* core diff --git a/docs/historical/changes/mh-changes.ms b/docs/historical/changes/mh-changes.ms new file mode 100644 index 0000000..8b2e434 --- /dev/null +++ b/docs/historical/changes/mh-changes.ms @@ -0,0 +1,1010 @@ +.\" @(#)mh-changes.ms,v 1.1.1.1 1993/01/30 04:41:04 jtc Exp +.\" Standard -ms macros +.\" with the following changes +.ds lq \\*Q +.ds rq \\*U +.\" remember to update date in text below +.DA "December 14, 1992" +.if n \{\ +.na +.\} +.nr PO 1i +.po 1i +.\" .EH ''Changes to MH 6.7'%' +.\" .OH ''Changes to MH 6.7'%' +.ds LH Changes to MH 6.8 +.ds CH +.ds RH % +.TL +Changes to +.br +The RAND MH Message Handling System: +.br +UCI version MH 6.8 +.AU +John L. Romine +.AI +Computing Support Group +Department of Information and Computer Science +University of California, Irvine +Irvine, CA 92717\-3425 +.AB +.PP +This document describes the changes to the +UCI version of the RAND MH system from MH 6.6 +to this release of MH 6.8. +This document is meant to supplement, +not supersede, +the standard MH User's manual and MH Administrator's manual. +.PP +Comments concerning this documentation should be addressed to the +mailbox \fBBug\-MH@ICS.UCI.EDU\fP, or \fBucbvax!ucivax!bug-mh\fP. +.AE +.SH +ACKNOWLEDGEMENTS +.LP +The \fIMH\fP system described herein is +based on the original RAND \fIMH\fP system. +It has been extensively developed (perhaps too much so) by Marshall T. Rose +and John L. Romine at the University of California, Irvine. +Einar A. Stefferud, Jerry N. Sweet, +and Terry P. Domae provided numerous suggestions +to improve the UCI version of \fIMH\fP. +.PP +Of course, +a large number of people have helped \fIMH\fP along. +The list of \*(lq\fIMH\fP immortals\*(rq is too long to list here. +For this release, numerous \fIMH\-Workers\fP sent in fixes and other +changes. A handful of courageous \fIMH\-Workers\fP volunteered +to beta-test these changes; their help is particularly appreciated. +.KS +.SH +DISCLAIMER +.LP +The Regents of the University of California wish to make it known that: +.QP +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. +.KE +.KS +.SH +CONVENTIONS +.LP +In this document, +certain formatting conventions are adhered to: +.IP +The names of +\s-2UNIX\s+2 +commands, such as \fIcomp\fP +are presented in \fIitalics\fP. +.IP +Arguments to programs, such as `msgs' and `\-nobell' are +delimited by single-quotes. +.IP +Text that should be typed exactly as-is, such as +command lines (e.g., \*(lqfolder \-pack\*(rq), +are delimited by double-quotes. +.IP +\s-2UNIX\s+2 +pathnames and envariables, +such as \fB/usr/uci\fP and \fB$SIGNATURE\fP, +are presented in \fBbold font\fP. +.KE +.ds LH Changes for MH 6.8 +.bp +.SH +CHANGES FOR MH 6.8 +.LP +This is the current released version of \fIMH\fP +as of December 14, 1992. This release includes a number +of bug fixes and internal changes to make the code more +portable. +Two new authentication methods are provided for the POP, +and support for SVR4 shared libraries is complete. +.PP +The major user-visible change in this release is the incorporation +of support for multi-media mail as specified by the +Multi-purpose Internet Mail Extensions (\fBMIME\fP) +RFC\ 1341. +This allows you to include things like audio, +graphics, and the like, in your mail messages. +A new command, \fImhn\fP, +has been provided to support \fBMIME\fP and +a detailed man page is provided in \fImhn\fP\|(1). +.SH +Documentation +.LP +The documentation has some general improvements, and +the \fBREAD-ME\fP document has been re-organized +to help \fIMH\fP administrators find the appropriate +configuration options for their system. +The \fBMakefile\fPs in the \fBpapers/\fP hierarchy have +been changed to invoke \fITeX\fP as +\*(lqtex\*(rq (instead of \*(lqtex82\*(rq). +.LP +The following new man pages are also available: +.IP \fImhn\fP\|(1) \w'\fIpopauth\fP\|(8)'u+2n +\fImhn\fP helps the user process multi-media mail. +.IP \fImhparam\fP\|(1) +\fImhparam\fP lets the user extract information from +the \fIMH\fP profile. +.IP \fIpopauth\fP\|(8) +the APOP database administration program (see below). +.IP \fIpopi\fP\|(1) +the POP initiator (see below). +.IP \fIslocal\fP\|(1) +fully documents \fIslocal\fP. The \fImhook\fP(1) man page now +documents only the \fIMH\fP receive-mail hooks. +.SH +Internal Changes +.LP +The \fIMH\fP source code is in the process of being +cleaned up to make pedantic ANSI C compilers happy. +Occurrences of \*(lqNULL\*(rq have been replaced by +\*(lq0\*(rq where appropriate. +Extra tokens after \*(lq#else\*(rq and \*(lq#endif\*(rq +have been put inside comments (this is still in progress). +The code should now compile cleanly on many more systems, +specifically, more variants of SVR4. +.PP +The version of \fBtws/dtimep.c\fP which was included in +MH 6.7.2 was incompatible with the \fIlex\fP library +on some systems, and has been removed. +.PP +A bug in the handling of blind lists inside alias +files has been fixed. +.KS +.SH +Post Office Protocol +.LP +There were three new options added to the POP. +.IP APOP \w'APOP'u+2n +This option indicates that the POP daemon will +support the non-standard \fBAPOP\fP command which +provides a challenge-based authentication system using +the \fBMD5\fP message digest algorithm. +.IP +This option also causes the +\fIpopauth\fP program to be installed, which +allows the administrator to manipulate the \fBAPOP\fP +authorization database. +.KE +.IP KPOP +Support for KERBEROS with POP. +This code builds +\fIpopd\fP, \fIinc\fP and \fImsgchk\fP to support only the +\*(lqkpop\*(rq protocol. +This code is still expiremental, but is available for +those sites wishing to test it. +.IP MPOP +This option indicates that the POP daemon will +support the non-standard +\fBXTND SCAN\fP command which provides performance +enhancements when using the POP over low-speed connections. +.IP +This option also causes an interactive POP +client program, \fIpopi\fP, to be compiled and installed. +A man page for the \fIpopi\fP program is also provided. +This option requires the configuration to +have \*(lqbboards: pop\*(rq. +.LP +The APOP and MPOP non-standard POP +facilities are documented in +\fIThe Internet Message\fR (ISBN 0\-13\-092941\-7), +a book by Marshall T. Rose. +For more details, see \fBsupport/pop/pop-more.txt\fR +and the \fIAdministrator's Guide\fP. +The APOP option peacefully co-exists with the standard POP, +KPOP completely replaces the standard POP, and +MPOP requires \*(lqbboards: pop\*(rq. +.SH +File Locking +.LP +The file locking code has been cleaned up to support +three kinds of kernel-level file locking. As appropriate +for your system, include the +LOCKF, FCNTL or FLOCK option. For more +details, see \fImh-tailor\fP\|(5). +.SH +.KS +Configuration Directives +.LP +A number of new configuration directives have been added +or changed. The full details are given in the \fBREAD-ME\fP. +.IP cp: \w'MAILGROUP'u+2n +The command used to install new files if not \*(lqcp\*(rq. +.IP ln: +The command used to link files together in the source tree +if not \*(lqln\*(rq. +.IP mts: +Full support for ZMAILER has been added. +.IP popdir: +The directory where \fIpopd\fP will be installed if not \fB/usr/etc\fP. +.IP regtest: +Set to \*(lqon\*(rq to prevent the hostname and compile +date from being included in \fIMH\fP binaries. +.IP sharedlib: +You may now specify \*(lqsun4\*(rq or \*(lqsys5\*(rq +(for SVR4) shared libraries. +.IP signal: +Specifies the base type of the function returned by \fIsignal\fP\|(). +This was previously defined with \*(lqoptions TYPESIG\*(rq. +.KE +.LP +Several `-D' options to \fIcc\fP have been added or changed: +.IP APOP \w'MAILGROUP'u+2n +Authenticated POP (see above). +.IP AUX +Support for A/UX systems. +.IP DBMPWD +The DBM option has been renamed DBMPWD. +.IP HESIOD +Support for the HESIOD name server. +.IP KPOP +KERBEROS POP (see above). +.IP LOCALE +Support for local characters sets; uses the \fIsetlocal\fP\|() function. +.IP MAILGROUP +Makes \fIinc\fP set-group-id. +You may need this option if your \fB/usr/spool/mail\fP +is not world-writeable. +.IP MIME +Multi-media mail. +.IP MPOP +Mobile POP (see above). +.IP MSGID +Enables \fIslocal\fP to detect and surpress duplicate messages. +.IP OSF1 +Support for DEC OSF1 systems. May be incomplete. +.IP RENAME +Include this option if your system has a \fIrename\fP\|() +system call. +.IP SVR4 +Support for System 5 Release 4 or newer systems. +.IP TYPESIG +This option has been dropped. See `signal' above. +.IP UNISTD +Include this option if your system has the include +file \fB\fP. +.IP VSPRINTF +Include this option if your system has the \fIvsprintf\fP\|() +library routine; otherwise, \fI\(rudoprnt\fP\|() will be used. +.IP YEARMOD +Forces the \fImh-format\fP `year' function to +return 2-digit values. +Use this option during a brief transition period if +you have local \fImh-format\fP files which need to +be converted to support 4-digit years. +.SH +FUNCTIONAL CHANGES +.LP +In addition to the configuration changes mentioned above, +a number of functional changes have been made to the system. +Many programs have new features added and a few new +programs have are provided. +Each command's manual page gives +complete information about the its operation. +Here is a short summary of the changes. +.SH +MH Sequences +.LP +A larger number of user-defined sequences are available. +Previously, this number had been 10. +On 32-bit systems, 26 user-defined sequences are available. +.SH +Profile Components +.LP +\fIMH\fP programs will now complain if the +\fB\&.mh\(ruprofile\fR does not end in a newline. +Also, one enhancement and one new profile component are provided: +.IP Aliasfile: \w'AliasfileX'u+2n +Multiple filenames may now be given. +.IP Inbox: +New; the default folder (for \fIinc\fP, etc.) if not \*(lqinbox\*(rq. +.KS +.SH +Format Strings +.LP +A few minor bugs were fixed in format string handling, +and a few new features were added. See \fImh-format\fP\|(5) +for complete details. +.IP Addresses \w'Xxyearxdatexx'u+2n +An attempt is made to decipher X\&.400 RFC\ 987-style addresses. +.IP Comments +Comments may be added to \fImh-format\fP files; a comment +begins with the 2-character sequence \*(lq%;\*(rq, +and ends with an un-escaped newline. +.IP "%(modulo n)" +The `modulo' function escape has been added. +.IP %(year{date}) +The date parser has been enhanced to understand more +illegal date formats; `year' now returns a 4-digit number. +.KE +.SH +User Interface Programs +.LP +A number of \fIMH\fP commands have minor changes: +.IP ali \w'packmbox'u+2n +The output with `\-user\0\-list' was +changed to match the output with `\-nouser\0\-list'. +.IP burst +Will no longer drop the last message of a digest. +.IP inc +Accepts the `\-apop' switch for authenticated POP (see above); +will attempt to detect write +errors (e.g., no space left on device) when incorporating mail; +no longer replaces newline characters with NULLs. +.IP folder +The `\-noprint' option was broken and has been dropped. +.IP forw +Supports `\-mime' to use MIME-style multi-part messages. +.IP mhl +Will no longer put an extra space at the end of the +`%{text}' in a formatfield. +.IP mhn +New; manipulates multi-media (MIME) messages; a detailed +man page is provided. +.IP mhparam +New; reads the \fIMH\fP profile (and context) +and writes the values of the specified components on the +standard output; useful in programmatic constructs. +.IP msgchk +Supports `\-apop' (see above). +.IP packmbox +New; packs an \fIMH\fP folder into a UUCP-style mailbox. +.IP popi +New; a client-side POP initiator; available only if you +built \fIMH\fP with the MPOP option (see above). +.IP refile +A bug where the `rmmproc' did not remove all specified +message files has been fixed. +.IP scan +The `\-file' option is fully supported and will no longer +complain about empty folders. +.IP send +Supports `\-mime' and `\-split' to split large messages +into multiple partial messages using MIME. +.SH +Support Programs +.IP fmtdump \w'packmbox'u+2n +Can now read a format file, or a format string given +on the command line. +.IP popauth +New; manages the APOP authorization database (see above). +.IP sendmail +The \fIsendmail\fP replacement will be installed +only if your `mts' setting uses the `/smtp' option. +.IP slocal +A new man page for \fIslocal\fP is available; +the new `mbox' action is available to write a file +in \fIpackf\fP format; +a bug where extra `>' characters were written to MMDF-style +maildrops has been fixed; +if compiled with the MSGID option, can detect and suppress +reception of duplicate messages. +.IP viamail +New; bundles a directory (like \fIshar\fP\|) and +sends it through multi-media mail. + +.ds LH Changes for MH 6.7.2 +.bp +.ds CF Feb 1, 1992 +.SH +CHANGES FOR MH 6.7.2 +.LP +The MH.6.7.2 patch release is a maintenance +release. +This is the +current released version of \fIMH\fP as of February 1, 1992. +.PP +This release now supports the NCR Tower running SYS5R4. +The WP changes installed in MH.6.7.0 have been removed. +.SH +Shared Libraries +.LP +Support for SYS 5 shared libraries is in progress. +.PP +Support for Sun OS 4.0 shared libraries had been improved. +The \fIMH\fP library has been modified to move initialized +data into a data definition file. The shared library will +now consist of a \fBlibmh.so\fP and \fBlibmh.sa\fP file. +The shared library version number will no longer track the +\fIMH\fP patch release number, and its numbering begins with +version `1.1' with this release. +.SH +Replacement SendMail +.LP +Since many standard system programs expect to post mail by +invoking \fB/usr/lib/sendmail\fP, +a minimal replacement \fISendMail\fP is provided in +this release. This replacement is meant to be installed +on (e.g., diskless) client workstations which post mail +using SMTP, and do not run a message transport system. +It will call \fIpost\fP to post mail; be sure you have +configured \fIMH\fP with the `/smtp' mts option. +This sendmail replacement is installed in your +\fIMH\fP etc directory, and you should link +\fB/usr/lib/sendmail\fP +to it. +.KS +.SH +Format Strings +.LP +A manual page for the \fIfmtdump\fP format string disassembler +is supplied, and some new format functions were added: +.IP folder \w'%getenv'u+2n +In \fIscan\fP, this component escape +contains the name of the current folder. +It is not defined for other \fIMH\fP commands. +.IP getenv +This function escape returns the value of an environment variable. +.KE +.PP +There will be some additional changes in these routines in the +next patch release. +.KS +.SH +Other Bug Fixes and Enhancements +.LP +In addition to some other minor enhancements, +some bugs were fixed which in general were not user\-visible: +.IP "Blind lists" \w'datexparsing'u+2n +Users may now specify RFC822 address groups in their +alias files. These groups are implemented by \fIMH\fP +as blind lists. +.IP "date parsing" +A number of sites have brain-damaged versions of \fBlex\fP. +\fIMH\fP will now come with the date parser already run +through lex. +.IP mark +A bug dealing with \fImark\fP and the sequence named `cur' +is fixed. This was previously a problem for mh-e users. +.IP MH.doc +The \fIMH\fP nroff version of the manual no longer contains +teletype escape sequences. +.IP scan +Can now handle headers as long as 512 bytes. +.IP Signals +\fIMH\fP programs will no longer catch the \fBHUP\fP +and \fBTERM\fP signals while waiting for a sub-process. +This was causing hung processes when your terminal line was +was dropped unexpectedly. +.IP Signature +If your signature is not defined, \fIMH\fP will +use the value of the gecos field of your \fB/etc/passwd\fP +entry as your signature. +.IP "version.sh" +A bug in the \fBawk\fP script in \fBconfig/version.sh\fP +was fixed. +.KE +.ds LH Changes for MH 6.7.1a +.bp +.ds CF January 25, 1991 +.SH +CHANGES FOR MH 6.7.1a +.LP +The MH.6.7.1a patch was made available +on January 25, 1991 for limited distribution only. +(This release had some known bugs, and so was +not widely distributed.) +This release incorporates several new features +of particular note to users of sequences and format strings, +as well as some general documentation improvements. +There are a few minor enhancements and internal bug fixes also. +Complete documentation of these changes is given in +the individual manual pages, and the \fBREAD-ME\fP file. +.SH +Message Sequences +.LP +A new manual page, \fImh\-sequence\0\fP(5), has been added. +This manual page attempts to completely document the +syntax and semantics of \fIMH\fP message sequence specifications. +.PP +A powerful new feature is the ability to specify message +ranges with user-defined sequences. The specification +\*(lqname:n\*(rq may be used, and it designates up to the +first `n' messages (or last `n' messages for `-n') +which are elements of the user-defined sequence `name'. +.PP +The message +specifications \*(lqname:next\*(rq and \*(lqname:prev\*(rq +may also be used, and they +designate the +next or previous message (relative to the current message) +which is an element of the user-defined sequence `name'. +The specifications +\*(lqname:first\*(rq and \*(lqname:last\*(rq are equivalent +to \*(lqname:1\*(rq and \*(lqname:\-1\*(rq, respectively. +The specification \*(lqname:cur\*(rq is not allowed +(use just \*(lqcur\*(rq instead). +.PP +These specifications allow the user to step through +a sequence with a command like \*(lqshow name:next\*(rq. +.SH +Format Strings +.LP +\fIMH\fP format strings now support an if-then-elseif-else +clause (the `elseif' is new). This will make +format strings with multi-case conditions somewhat less complex. +.PP +A new format function `addr' had been added. This function +takes an address header name as its argument, and returns +a rendering of the address contained in that header +as \*(lquser@host\*(rq or \*(lqhost!user\*(rq. +.PP +Format widths now may be specified as a negative number. +This causes the output to be right-justified +within the format width. +.KS +.SH +Other Changes +.LP +Along with a few minor enhancements, +some bugs were fixed which in general were not user-visible: +.IP "fmtdump" \w'whatnow'u+2n +This new program +produces an pseudo-language +representation of an \fIMH\fP format file, vaguely +reminiscent of assembly language. While this output format +is not explicitly documented, +it can still be useful when debugging \fIMH\fP format files. +.IP "refile" +Now takes a `\-\[no\]rmmproc' switch. This makes it +easier to avoid loops when your \*(lqrmmproc\*(rq calls \fIrefile\fP. +.IP "slocal" +A problem with the UUCP-style mailboxes, +the `RPATHS' configuration option, +and the \*(lqReturn-Path:\*(rq header was fixed. +.IP "sortm" +Will ensure that no messages are lost if it is interrupted. +.IP "whatnow" +Will now tell you where it is leaving the draft, when +interrupted in the initial edit. Previously the draft +was simply unlinked. +.KE +.KS +.SH +Compilation Options +.IP "LOCKF" \w'whatnow'u+2n +This option causes \fIMH\fP to use the \fBlockf()\fP +system call for locking (if available), +instead of \fBflock()\fP. +.KE +.ds LH Changes for MH 6.7.1 +.bp +.ds CF December 14, 1990 +.SH +CHANGES FOR MH 6.7.1 +.LP +The MH.6.7.1 patch release is a maintenance +release, and as such, provides few changes from +the previous release. This is the +current released version of \fIMH\fP as of December 14, 1990. +.SH +User-Visible Changes +.LP +The major change in this release is to the +POP daemon (popd). In \fIMH\fP 6.7, +it was changed to be able to read both UUCP and +MMDF-style mailboxes. This did not work as reported. The +code has now been changed to parse MMDF-style mailboxes if +you are configuring MH to run with MMDF as your message +transport system. Otherwise, UUCP-style mailboxes are +expected. +.PP +Since there are number of client programs available for +only the POP2 protocol instead of POP3, popd has been +updated to support both protocols. This is a major +win. If you are compiling +with POP turned on, add the `POP2' option to +your \fIMH\fP config file, and the POP daemon +will respond to POP2 or POP3 commands. If you're using +POP, there's no reason not to include this option; it does +not affect the existing support for POP3. +.KS +.SH +Internal Changes +.LP +Some bugs were fixed which in general were not user-visible: +.IP "context" \w'replnnetcn'u+2n +Errors when writing out sequences are detected correctly. +.IP "inc" +No longer inserts extra blank lines into messages. +.IP "mh-format" +A nil pointer bug in the address parser was fixed. +.IP "repl, etc." +The malloc/free problem has been fixed. +.IP "rmf" +A spelling error in the `\-nointeractive' switch has been corrected. +.IP "rcvtty" +Will not print the message size if not available (i.e., zero). +.IP "send/post" +Illegal signatures (those containing unquoted "."s) will be quoted. +.KE +.ds LH Changes for MH 6.7.0 +.bp +.ds CF April 12, 1990 +.SH +GENERAL CHANGES FOR MH 6.7.0 +.LP +The author is pleased to announce that there are very few +user\-visible +changes to \fIMH\fP 6.7 from the previous \fIMH\fP 6.6 distribution. +The majority of development was in the form of bug fixes and +slight enhancements. +In addition, this release is slightly faster than the +previous release. +With a few minor exceptions, +it is backward\-compatible with the previous release. +\fIMH\fP 6.7.0 is the current released version of \fIMH\fP +as of April 12, 1990. +.PP +The changes were made mainly to generalize the source code to +be compatible with a larger range of systems and compilers. +There were many small changes to add declarations for ANSI C compliance. +The System 5 support has been brought up to SYS5 R3, and there is +support for Sun OS 4.0. +.SH +User\-Visible Changes +.LP +Here a quick summary of the +changes that were made which are not backward\-compatible with the +previous release of \fIMH\fP: +.IP repl \w'sortm'u+2n +The `\-format' and `\-noformat' switches +have not been functional since \fIMH\fP 5, and have been removed. +Any users who have these switches in their \fB\&.mh\(ruprofile\fP, +will have to remove them. +.IP sortm +Previously, in most cases \fIsortm\fP would fill\-in any +gaps in the numbering of a folder, +by renumbering the messages starting with `1'. +This will no longer occur; for this behavior, +use \*(lqfolder \-pack\*(rq. +.PP +.SH +Using Aliases +.LP +A new profile entry `Aliasfile:' has been added. The +\fIali\fP\^, \fIsend\fP\^, and \fIwhom\fP programs will look for +this profile entry and treat it as they would an argument to +`\-alias'. +This should make it easier for novice \fIMH\fP users to begin +using aliases. +.PP +.SH +Reading Network News & BBoards +.LP +The UCI BBoards facility can read local BBoards, and if compiled +with the `bboards: pop' and `pop: on' options, can also read remote +BBoards using the Post Office Protocol (POP ver. 3). +With this release, +\fIMH\fP can instead be compiled to read the Network News +(i.e., USENET) using the Network News Transfer Protocol (NNTP). +.PP +This capability is enabled by compiling \fIMH\fP with +the `bboards: nntp' and `pop: on' options. +Unfortunately, reading remote BBoards via the POP and reading the Network +News via the NNTP are mutually exclusive options. +.PP +To support the NNTP, +a new module, \fBuip/pshsbr.c\fP, is compiled and loaded into +\fIbbc\fP and \fImsh\fP instead of \fBuip/popsbr.c\fP. +The default BBoard is changed from \*(lqsystem\*(rq to \*(lqgeneral\*(rq +for the NNTP. +.PP +When reading BBoards, +\fIbbc\fP will first look for local BBoards, and then contact the +NNTP server to read the Network News. The location of the +NNTP server should be specified with the `nntphost:' +entry in the \fBmtstailor\fP file +(see the \fIMH\fP Administrator's Guide for details), +or may be specified on +the command line with the `\-host' switch. +.PP +.SH +Format Strings +.LP +The manual page \fImh\-format\fP\0(5) has +been rewritten to give a better explanation of how to write format strings, +and how they are interpreted by \fIMH\fP. +A line\-by\-line +description of the +default \fIrepl\fP form file (\fBreplcomps\fP) +is now included in that manual page. +.PP +.KS +Some new format functions were added, and others were augmented: +.IP trim \w'date2local'u+2n +Strips any leading and trailing white\-space from the current string value. +.IP date2local +Will coerce the date to the local timezone. +.IP date2gmt +Will coerce the date to GMT. +.IP divide +Divides the current numeric value by its argument. +This could be useful for +building \fIscan\fP format strings which print large +message sizes in \*(lqKb\*(rq or \*(lqMb\*(rq. +.IP friendly +If the address field cannot be parsed, +this function will return the text of the address header, +instead of a null string. +.IP szone +A flag indicating whether the timezone was explicit +in the date string. +.KE +.SH +PROGRAM CHANGES +.LP +In addition to the general changes mentioned above, +many programs have specific new features added, +either by new switches or by expanded functionality. +Each command's manual page gives complete information about +its new options. Here is a short summary. +.SH +User Interface Programs +.IP anno \w'prompter'u+2n +Accepts a `\-nodate' switch which inhibits the date annotation, +leaving only the body annotation. +.IP folder +When invoked with the `\-pack' switch +and the new `\-verbose' switch, \fIfolder\fP will +give information about the actions taken to renumber the folder. +.IP +On most systems, \fIfolder\fP can now create any non\-existing +parent folders of a new sub\-folder. +.IP forw +When making digests, \fIforw\fP\^ +will put the issue and volume numbers +in addition to the digest list name, in the digest trailer. +.IP inc +Detects NFS write failures, and will +not zero your maildrop in that event. +.IP msh +Supports a variant of the new \fIsortm\fP\^. +.IP prompter +Considers a period on a line by itself to signify end\-of\-file +when the `\-doteof' switch is specified. +.IP repl +The `\-[no]format' switches +have not been used since \fIMH\fP 5 and have been deleted. \fIrepl\fP +will now find filter files in the \fIMH\fP library area. +.IP scan +With the `\-file msgbox' switch, \fIscan\fP\^ +can list a \fIpackf\fP\|'d\-format file directly +(without using \fImsh\fP\^). +.IP +Lists messages in reverse order with the `\-reverse' switch. +This should be considered a bug. +.IP sortm +Now has the options: +`\-textfield field', `\-notextfield', +`\-limit days', and `\-nolimit'. +.IP +With these options, \fIsortm\fP can be instructed to sort a +folder based on the contents of an arbitrary header such +as \*(lqsubject\*(rq. +.IP +\fIsortm\fP minimizes renaming messages, and +will no longer arbitrarily pack folders; for this behavior, +use \*(lqfolder \-pack\*(rq. +.IP whatnow +Deletes the draft by renaming it with leading comma, instead +of unlinking it. +.SH +\fIMH\fP Support Programs +.LP +.KS +The following support programs also have changes or enhancements: +.IP mhl \w'rcvtty'u+2n +Will now accept a format string on any component, not just on +addresses and dates. +.KE +.IP popd +Will use \fIshadow\fP passwords if compiled with the +\fBSHADOW\fP option. It can now also +read UUCP\-style maildrops directly. +.IP rcvtty +If given no arguments, \fIrcvtty\fP will produce a \fBscan\fP +listing as specified by a format string or file; a default +format string is used if one is not specified. +.IP +Before the listing is written to the users terminal, the +terminal's bell is rung and a newline is output. +The `\-nobell' and the `\-nonewline' options +inhibit these functions. +.IP +\fIrcvtty\fP will obey terminal write +notification set by \fImesg\fP. +With the `\-biff' switch, \fIrcvtty\fP will +also obey the mail notification status set by +\fIbiff\fP. +.IP +On \fBBSD43\fP systems, as with \fIwrite\fP, +\fIrcvtty\fP will be installed set\-group\-id to the group \*(lqtty\*(rq. +.IP slocal +Understands UUCP\-style \*(lqFrom \*(rq lines and will write +output files using this format if appropriate. +Before invoking a delivery program, \fIslocal\fP will strip +such lines unless compiled with the \fBRPATHS\fP option, +in which case it will will convert such lines into +\*(lqReturn\-Path:\*(rq headers. +.IP +\fIslocal\fP has a new result code \*(lqN\*(rq, +for use in \fB.maildelivery\fP files. +With this result code, +\fIslocal\fP will +perform the action only if the message has not been delivered +and the previous action succeeded. This allows for performing +an action only if multiple conditions are true. +.SH +DOCUMENTATION +.LP +Several of the older \fIMH\fP papers have been difficult to format +because they depended on an older version of +PhDTeX which was +not supplied. These papers have been updated, and some TeX +library files are supplied in \fBpapers/doclib/\fP, so that +these papers may be generated on any system with TeX. +.PP +Many of the manual pages have been revised to include documentation +of new command options, and some have been expanded to give more detail. +All are now slightly reformatted at installation time +to make them more compatible with programs like \fImakewhatis\fP\^. +.PP +.SH +\fIMH\fP ADMINISTRATION +.LP +This section describes changes in configuring, compiling and +installing \fIMH\fP 6.7 and should not +be of interest to casual \fIMH\fP users. +The \fBREAD\-ME\fP file has been +considerably revised and expanded to give more detail +about the configuration and compilation options which +have been included in this release. Some compilation options +have been removed, and many new options have been added. +.PP +All \fIMH\fP \fBMakefile\fPs have been updated to work around some +incompatibilities introduced in newer versions of \fImake\fP\^. +\fIMH\fP programs will no longer be installed with the sticky\-bit +turned on. +.PP +Reading this section not a substitute for carefully +reading the \fBREAD\-ME\fP file before attempting to compile \fIMH\fP +.PP +.KS +.SH +Bug Fixes +.LP +Some bugs were fixed which in general were not user\-visible: +.IP "address parser" \w'dynamicnmemory'u+2n +Fixed to allow use of the \*(lqAT\*(rq domain, and some +minor bugs were fixed pertaining to address groups. +.IP "date parser" +Improved to accept more forms of illegal dates. Military +timezones were removed. +.IP "dynamic memory" +Many problems with corruption of the dynamic memory pool +have been fixed. +.IP locking +Will open files for write, if necessary to enable locking. +.IP "nil pointers" +All reported nil pointer problems have been fixed. +.IP replcomps +The \*(lqIn\-Reply\-To:\*(rq header had quotes added +around the date field to comply with RFC822. +.KE +.SH +White Pages +.LP +If \fIMH\fP is compiled with the \fBWP\fP option, +\fIsend\fP recognizes an address between \*(lq<<\*(rq and \*(lq>>\*(rq characters +such as: +.DS +To: << rose \-org psi >> +.DE +to be a name meaningful to a whitepages service. In order to expand the +name, \fIsend\fP must be invoked interactively +(i.e., not from \fIpush\fP\^). For each +name, \fIsend\fP will invoke a command called \fIfred\fP\^ +in a special mode asking to expand the name. +.PP +To get a copy of the white pages service, contact wpp\-manager@psi.com. +.SH +Configuration Options +.LP +Some configuration options have been added or changed: +.IP cc \w'bbdelivery'u+2n +To specify an alternate C compiler. +.IP ccoptions +Defaults to `\-O'. +.IP bboards +May now be defined as \*(lqon\*(rq, +\*(lqoff\*(rq, \*(lqpop\*(rq, or \*(lqnntp\*(rq. +.IP bbdelivery +Determines whether the bboard delivery agent +and library files should be installed. +.IP lex +To specify an alternate version of \fIlex\fP\^. +.IP mailgroup +If defined, \fIinc\fP will be made set\-group\-id to this group. +.IP sharedlib +For \fBSUN40\fP systems; if \*(lqon\*(rq, makes \fBlibmh.a\fP +into a shared library. +.IP slibdir +The directory where the above shared library should be installed. +.IP sprintf +Set this to \*(lqint\*(rq if that's what your \fIsprintf\fP\0(3) library +routine returns. +.SH +Compilation Options +.LP +For different configurations, +several `\-D' options to \fIcc\fP have been added or changed: +.IP BERK \w'SENDMAILBUG'u+1n +This disables the address and date parsing routines. If you +want to do much with \fImh\-format\fP\0(5), don't enable this. +.IP BSD43 +Will make \fIrcvtty\fP set\-group\-id to the group \*(lqtty\*(rq. +.IP DBM +For sites with a dbm\-style password file (such as with Yellow +Pages), \fIMH\fP will not read the entire passwd file into a cache. +At one site that runs YP on a large passwd file, using this +showed a 6:1 performance improvement. +.IP NETWORK +This option has been deleted. See \fBSOCKETS\fP. +.IP NOIOCTLH +Tells \fIMH\fP not to include the file \fBsys/ioctl.h\fP. Use this +if this file is not present on your system. +.IP NTOHLSWAP +On systems with TCP/IP networking, +\fImsh\fP will try to use the \fBntohl()\fP macro from the +file \fBnetinet/in.h\fP to byte\-swap the binary map files +it writes. +.IP SENDMAILBUG +Some versions of \fIsendmail\fP return a \fB451\fP (failure) reply code +when they don't mean to indicate failure. This option considers +that code to be equivalent to \fB250\fP (OK). +.IP SHADOW +Causes \fIpopd\fP to read the file \fB/etc/shadow\fP for +encrypted passwords instead of \fB/etc/passwd\fP. Use this if you +have a shadow password file (such as on newer versions of SYSTEM 5). +.IP SOCKETS +Enable this if you are on a non\-BSD system with a +socket interface for TCP/IP networking compatible with 4.2BSD +.SM +UNIX. +.NL +.IP SUN40 +Use on Suns running Sun OS 4.0 and later. +.IP SYS5 +This option has been updated to refer to SYS5 R3 and later systems. +.IP SYS5DIR +Use this if your system uses \*(lqstruct dirent\*(rq instead of +\*(lqstruct direct\*(rq. This should be true for systems based +on SYS5 R3 and later. +.IP TYPESIG +Defines the base type for the \fIsignal\fP system call. This +defaults to \*(lqint\*(rq, but should be defined as \*(lqvoid\*(rq +if appropriate for your system. +.IP WP +Enables support for the White Pages service. +.SH +Installation +.LP +\fIMH\fP will now +explicitly set the protection mode on every file it installs. +.PP +Previously any existing file installed by \fIMH\fP +would be backed up into +the source tree, and then overwritten. +Now, a few system\-dependent files will not be overwritten, and your +changes will have to be merged in by hand. +See the \fBREAD\-ME\fP file for more details. diff --git a/docs/historical/doclib/READ-ME b/docs/historical/doclib/READ-ME new file mode 100644 index 0000000..3063cef --- /dev/null +++ b/docs/historical/doclib/READ-ME @@ -0,0 +1,39 @@ +@(#)READ-ME,v 1.1.1.1 1993/01/30 04:41:04 jtc Exp + +This directory contains the TeX style and macro files necessary to +typset the following documents: + +mh4 Changes to The Rand MH Message Handling System: MH.4 +mh5 Changes to The Rand MH Message Handling System: MH.5 +realwork MH.5: How to process 200 messages a day ... +bboards The Rand MH Message Handling System: The UCI BBoards Facility +tutorial The Rand MH Message Handling System: Tutorial +multifarious MH: A Multifarious User Agent +trusted Design of the TTI Prototype Trusted Mail Agent + +These documents were originally designed to be typset with the AM font +family using UCI PhDTeX, which was AmSTeX with the UCI diss.sty style +preloaded. Since (not surprisingly) few sites had UCI PhDTeX, diss.sty +was included with the documents. + +In the intervening years, AmSTeX has evolved and few sites are still +using the AM font family. Although some of these documents are +now outdated, some sites may still want to generate and print them. +For this reason, this directory contains all files necessary to typeset +these documents using plain TeX (as of Version 2.991). + +The following newer documents are typset using LaTeX; the needed style +and macro files are present in each directory: + +beginners MH for Beginners +mh4mm MH for MM Users +mh6 Changes to The Rand MH Message Handling System: MH.6 +mh6.5 Changes to The Rand MH + Message Handling System: MH #6.5 for 4.3BSD UNIX +mznet MZnet: Mail Service for Personal Micro-Computer Systems + +Updating the older documents to use LaTeX would be possible but tedious, +especially considering how outdated most of the documents are. + + + John Romine 1/31/90 diff --git a/docs/historical/doclib/amstex.tex b/docs/historical/doclib/amstex.tex new file mode 100644 index 0000000..9eb17c1 --- /dev/null +++ b/docs/historical/doclib/amstex.tex @@ -0,0 +1,889 @@ +% AMS-TEX VERSION 0.999999 - FOR USE WITH TEX VERSION 1.0 +% COPYRIGHT (C) 1983 BY AMERICAN MATHEMATICAL SOCIETY + + +% NOTE 1, NOTE 2, ... REFER TO NOTES IN THE FILE AMSTEX.DOC + + +% SPECIAL CATCODES + +\catcode`\@=13 % NOTE 1 +\def@{\errmessage{AmS-TeX error: \string@ has no current use + (use \string\@\space for printed \string@ symbol)}} +\catcode`\@=11 % NOTE 2 +\def\@{\char'100 } +\catcode`\~=13 % NOTE 3 + + +% AMSTEX ERROR MESSAGES + +\def\err@AmS#1{\errmessage{AmS-TeX error: #1}} % NOTE 4 + + +% SOME BASIC CONTROL SEQUENCES USED IN OTHER DEFINITIONS + +\def\eat@AmS#1{} + +\long\def\comp@AmS#1#2{\def\@AmS{#1}\def\@@AmS{#2}\ifx + \@AmS\@@AmS\def\cresult@AmS{T}\else\def\cresult@AmS{F}\fi} % NOTE 5 + +\def\in@AmS#1#2{\def\intest@AmS##1#1##2{\comp@AmS##2\end@AmS\if T\cresult@AmS + \def\cresult@AmS{F}\def\in@@AmS{}\else + \def\cresult@AmS{T}\def\in@@AmS####1\end@AmS{}\fi\in@@AmS}% + \def\cresult@AmS{F}\intest@AmS#2#1\end@AmS} % NOTE 6 + + +% BASIC MECHANICSMS TO ALLOW USER TO MAKE DEFINITIONS + +\let\relax@AmS=\relax % NOTE 7 + +% CHANGES IN plain WHERE THERE IS \relax, THAT MUST NOW BE \relax@AmS + +\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi + \relax@AmS} + +\def\iterate{\body\let\next\iterate \else\let\next\relax@AmS\fi \next} + +\def\enskip{\hskip.5em\relax@AmS} + +\def\strut{\relax@AmS\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi} + +\let\+=\relax@AmS +\def\sett@b{\ifx\next\+\let\next\relax@AmS + \def\next{\afterassignment\s@tt@b\let\next}% + \else\let\next\s@tcols\fi\next} +\def\s@tt@b{\let\next\relax@AmS\us@false\m@ketabbox} + +\def\smash{\relax@AmS % \relax@AmS, in case this comes first in \halign + \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh + \fi\next} + +% (END OF CHANGES TO plain) + +\def\define#1{\expandafter\ifx\csname\expandafter\eat@AmS\string#1\endcsname + \relax@AmS\def\dresult@AmS{\def#1}\else + \err@AmS{\string#1\space is already defined}\def + \dresult@AmS{\def\garbage@AmS}\fi\dresult@AmS} % NOTE 8 + +\let\redefine=\def + +\def\predefine#1#2{\let#1=#2} + + +% MACROS FOR DEFICIENT KEYBOARDS + +\chardef\plus=`+ +\chardef\equal=`= +\chardef\less=`< +\chardef\more=`> + + +% MACROS FOR HANDLING TEXT + +\let\ic@AmS=\/ +\def\/{\unskip\ic@AmS} + +\def\Space@AmS.{\futurelet\Space@AmS\relax@AmS} +\Space@AmS. % % NOTE 10 (no NOTE 9) + +\def~{\unskip\futurelet\tok@AmS\s@AmS} +\def\s@AmS{\ifx\tok@AmS\Space@AmS\def\next@AmS{}\else + \def\next@AmS{\ }\fi\penalty 9999 \next@AmS} % NOTE 11 + +\def\period{\unskip.\spacefactor3000 { }} + + +\def\srdr@AmS{\thinspace} % NOTE 12 +\def\drsr@AmS{\kern .02778em } +\def\sldl@AmS{\kern .02778em} +\def\dlsl@AmS{\thinspace} + +\def\lqtest@AmS#1{\comp@AmS{#1}`\if T\cresult@AmS\else\comp@AmS{#1}\lq\fi} + + % NOTE 13 + +\def\qspace#1{\unskip + \lqtest@AmS{#1}\let\fresult@AmS=\cresult@AmS\if T\cresult@AmS + \def\qspace@AmS{\ifx\tok@AmS\Space@AmS\def\next@AmS{\dlsl@AmS`}\else + \def\next@AmS{\qspace@@AmS}\fi\next@AmS}\else + \def\qspace@AmS{\ifx\tok@AmS\Space@AmS\def\next@AmS{\drsr@AmS'}\else + \def\next@AmS{\qspace@@AmS}\fi\next@AmS}\fi + \futurelet\tok@AmS\qspace@AmS} % NOTE 14 + +\def\qspace@@AmS{\futurelet\tok@AmS\qspace@@@AmS} + +\def\qspace@@@AmS{\if T\fresult@AmS \ifx\tok@AmS`\sldl@AmS`\else + \ifx\tok@AmS\lq\sldl@AmS`\else \dlsl@AmS`\fi \fi + \else \ifx\tok@AmS'\srdr@AmS'\else + \ifx\tok@AmS\rq\srdr@AmS'\else \drsr@AmS'\fi \fi + \fi} + + + +\def\dash{\unskip\penalty0---} +\def\slash{\unskip/\penalty\exhyphenpenalty} + +\def\{{\relax@AmS\ifmmode\delimiter"4266308 \else + $\delimiter"4266308 $\fi} % NOTE 16 (No NOTE 15) + +\def\}{\relax@AmS\ifmmode\delimiter"5267309 \else$\delimiter"5267309 $\fi} + + +\def\AmSTeX{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em + $\cal S$-\TeX} + +\def\smallvspace{\vskip\smallskipamount} % NOTE 17 +\def\medvspace{\vskip\medskipamount} +\def\bigvspace{\vskip\bigskipamount} + + +\def\linebreak{\unskip\penalty-10000 } % NOTE 18 +\def\pagebreak{\vadjust{\penalty-10000 }} +\def\newpage{\par\vfill\eject} + +\def\newline{\ifvmode \err@AmS{There's no line here to break}\else + \hfil\penalty-10000\fi} + +\def\topspace#1{\insert\topins{\penalty100 \splittopskip=0pt + \vbox to #1{}}} +\def\midspace#1{\setbox0=\vbox to #1{}\advance\dimen0 by \pagetotal + \ifdim\dimen0>\pagegoal\topspace{#1}\else\vadjust{\box0}\fi} + +\long\def\comment{\begingroup + \catcode`\{=12 \catcode`\}=12 \catcode`\#= 12 \catcode`\^^M=12 + \catcode`\%=12 \catcode`^^A=14 + \comment@AmS} +\begingroup\catcode`^^A=14 +\catcode`\^^M=12 ^^A +\long\gdef\comment@AmS#1^^M#2{\comp@AmS\endcomment{#2}\if T\cresult@AmS^^A +\def\comment@@AmS{\endgroup}\else^^A + \long\def\comment@@AmS{\comment@AmS#2}\fi\comment@@AmS}\endgroup % NOTE 19 + + +% STYLE, SPACING AND ALTERNATE NAMES + +\let\dsize=\displaystyle +\let\tsize=\textstyle +\let\ssize=\scriptstyle +\let\sssize=\scriptscriptstyle + +\def\text#1{\hbox{\rm#1}} + +\def\quad{\relax@AmS\ifmmode + \hbox{\hskip1em}\else\hskip1em\relax@AmS\fi} % NOTE 20 +\def\qquad{\quad\quad} +\def\,{\relax@AmS\ifmmode\mskip\thinmuskip\else$\mskip\thinmuskip$\fi} +\def\;{\relax@AmS + \ifmmode\mskip\thickmuskip\else$\mskip\thickmuskip$\fi} + + +\def\stack#1#2{{#1\atop #2}} + +\def\frac#1#2{{#1\over#2}} +\def\Frac#1#2{{\displaystyle{#1\over#2}}} + +\def\thickfrac#1#2{{#1\above1pt #2}} + +\def\binom#1#2{{#1\choose #2}} +\def\Binom#1#2{{\displaystyle{#1\choose #2}}} + + +\mathchardef\:="603A % NOTE 21 + + +% BIG DELIMITERS + +\def\big@AmS#1{{\hbox{$\left#1\vbox to\big@@AmS{}\right.\offspace@AmS$}}} +\def\Big@AmS#1{{\hbox{$\left#1\vbox to\Big@@AmS{}\right.\offspace@AmS$}}} +\def\bigg@AmS#1{{\hbox{$\left#1\vbox to\bigg@@AmS{}\right.\offspace@AmS$}}} +\def\Bigg@AmS#1{{\hbox{$\left#1\vbox to\Bigg@@AmS{}\right.\offspace@AmS$}}} +\def\offspace@AmS{\nulldelimiterspace0pt \mathsurround0pt } + +\def\big@@AmS{8.5pt} % NOTE 24 (no NOTES 22, 23) +\def\Big@@AmS{11.5pt} +\def\bigg@@AmS{14.5pt} +\def\Bigg@@AmS{17.5pt} + +\def\bigl{\mathopen\big@AmS} +\def\bigm{\mathrel\big@AmS} +\def\bigr{\mathclose\big@AmS} +\def\Bigl{\mathopen\Big@AmS} +\def\Bigm{\mathrel\Big@AmS} +\def\Bigr{\mathclose\Big@AmS} +\def\biggl{\mathopen\bigg@AmS} +\def\biggm{\mathrel\bigg@AMS} +\def\biggr{\mathclose\bigg@AmS} +\def\Biggl{\mathopen\Bigg@AmS} +\def\Biggm{\mathrel\Bigg@AmS} +\def\Biggr{\mathclose\Bigg@AmS} + + +% MAKING ' WORK FOR PRIMES + +{\catcode`'=13 \gdef'{^\bgroup\prime\prime@AmS}} +\def\prime@AmS{\futurelet\tok@AmS\prime@@AmS} +\def\prime@@@AmS#1{\futurelet\tok@AmS\prime@@AmS} +\def\prime@@AmS{\ifx\tok@AmS'\def\next@AmS{\prime\prime@@@AmS}\else + \def\next@AmS{\egroup}\fi\next@AmS} + + +% SMASHES % NOTE 25 + +\def\topsmash{\relax@AmS\ifmmode\def\topsmash@AmS + {\mathpalette\mathtopsmash@AmS}\else + \let\topsmash@AmS=\maketopsmash@AmS\fi\topsmash@AmS} + +\def\maketopsmash@AmS#1{\setbox0=\hbox{#1}\topsmash@@AmS} + +\def\mathtopsmash@AmS#1#2{\setbox0=\hbox{$#1{#2}$}\topsmash@@AmS} + +\def\topsmash@@AmS{\vbox to 0pt{\kern-\ht0\box0}} + + +\def\botsmash{\relax@AmS\ifmmode\def\botsmash@AmS + {\mathpalette\mathbotsmash@AmS}\else + \let\botsmash@AmS=\makebotsmash@AmS\fi\botsmash@AmS} + +\def\makebotsmash@AmS#1{\setbox0=\hbox{#1}\botsmash@@AmS} + +\def\mathbotsmash@AmS#1#2{\setbox0=\hbox{$#1{#2}$}\botsmash@@AmS} + +\def\botsmash@@AmS{\vbox to \ht0{\box0\vss}} + + + +% LARGE OPERATORS + +\def\LimitsOnSums{\let\slimits@AmS=\displaylimits} % NOTE 26 +\def\NoLimitsOnSums{\let\slimits@AmS=\nolimits} + +\LimitsOnSums + +\mathchardef\coprod@AmS"1360 \def\coprod{\coprod@AmS\slimits@AmS} +\mathchardef\bigvee@AmS"1357 \def\bigvee{\bigvee@AmS\slimits@AmS} +\mathchardef\bigwedge@AmS"1356 \def\bigwedge{\bigwedge@AmS\slimits@AmS} +\mathchardef\biguplus@AmS"1355 \def\biguplus{\biguplus@AmS\slimits@AmS} +\mathchardef\bigcap@AmS"1354 \def\bigcap{\bigcap@AmS\slimits@AmS} +\mathchardef\bigcup@AmS"1353 \def\bigcup{\bigcup@AmS\slimits@AmS} +\mathchardef\prod@AmS"1351 \def\prod{\prod@AmS\slimits@AmS} +\mathchardef\sum@AmS"1350 \def\sum{\sum@AmS\slimits@AmS} +\mathchardef\bigotimes@AmS"134E \def\bigotimes{\bigotimes@AmS\slimits@AmS} +\mathchardef\bigoplus@AmS"134C \def\bigoplus{\bigoplus@AmS\slimits@AmS} +\mathchardef\bigodot@AmS"134A \def\bigodot{\bigodot@AmS\slimits@AmS} +\mathchardef\bigsqcup@AmS"1346 \def\bigsqcup{\bigsqcup@AmS\slimits@AmS} + + +\def\LimitsOnInts{\let\ilimits@AmS=\displaylimits} +\def\NoLimitsOnInts{\let\ilimits@AmS=\nolimits} + +\NoLimitsOnInts + +\mathchardef\int@AmS"1352 +\def\int{\gdef\intflag@AmS{T}\int@AmS\ilimits@AmS} % NOTE 27 + +\mathchardef\oint@AmS"1348 \def\oint{\gdef\intflag@AmS{T}\oint@AmS\ilimits@AmS} + +\def\inttest@AmS#1{\def\intflag@AmS{F}\setbox0=\hbox{$#1$}} + + +\def\intic@AmS{\mathchoice{\hbox{\hskip5pt}}{\hbox + {\hskip4pt}}{\hbox{\hskip4pt}}{\hbox{\hskip4pt}}} % NOTE 28 +\def\negintic@AmS{\mathchoice + {\hbox{\hskip-5pt}}{\hbox{\hskip-4pt}}{\hbox{\hskip-4pt}}{\hbox{\hskip-4pt}}} +\def\intkern@AmS{\mathchoice{\!\!\!}{\!\!}{\!\!}{\!\!}} +\def\intdots@AmS{\mathchoice{\cdots}{{\cdotp}\mkern 1.5mu + {\cdotp}\mkern 1.5mu{\cdotp}}{{\cdotp}\mkern 1mu{\cdotp}\mkern 1mu + {\cdotp}}{{\cdotp}\mkern 1mu{\cdotp}\mkern 1mu{\cdotp}}} + +\newcount\intno@AmS % NOTE 29 + +\def\intii{\gdef\intflag@AmS{T}\intno@AmS=2\futurelet % NOTE 30 + \tok@AmS\ints@AmS} +\def\intiii{\gdef\intflag@AmS{T}\intno@AmS=3\futurelet\tok@AmS\ints@AmS} +\def\intiv{\gdef\intflag@AmS{T}\intno@AmS=4\futurelet\tok@AmS\ints@AmS} +\def\intdotsint{\gdef\intflag@AmS{T}\intno@AmS=0\futurelet + \tok@AmS\ints@AmS} + +\def\ints@AmS{\findlimits@AmS\ints@@AmS} + +\def\findlimits@AmS{\def\ignoretoken@AmS{T}\ifx\tok@AmS\limits + \def\limits@AmS{T}\else\ifx\tok@AmS\nolimits\def\limits@AmS{F}\else + \def\ignoretoken@AmS{F}\ifx\ilimits@AmS\nolimits\def\limits@AmS{F}\else + \def\limits@AmS{T}\fi\fi\fi} + +\def\multintlimits@AmS{\int@AmS\ifnum \intno@AmS=0\intdots@AmS + \else \intkern@AmS\fi + \ifnum\intno@AmS>2\int@AmS\intkern@AmS\fi + \ifnum\intno@AmS>3 \int@AmS\intkern@AmS\fi \int@AmS} + +\def\multint@AmS{\int\ifnum \intno@AmS=0\intdots@AmS\else\intkern@AmS\fi + \ifnum\intno@AmS>2\int\intkern@AmS\fi + \ifnum\intno@AmS>3 \int\intkern@AmS\fi \int} + +\def\ints@@AmS{\if F\ignoretoken@AmS\def\ints@@@AmS{\if + T\limits@AmS\negintic@AmS + \mathop{\intic@AmS\multintlimits@AmS}\limits\else + \multint@AmS\nolimits\fi}\else\def\ints@@@AmS{\if T\limits@AmS + \negintic@AmS\mathop{\intic@AmS\multintlimits@AmS}\limits\else + \multint@AmS\nolimits\fi\eat@AmS}\fi\ints@@@AmS} + + + +\def\LimitsOnNames{\let\nlimits@AmS=\displaylimits} +\def\NoLimitsOnNames{\let\nlimits@AmS=\nolimits} + +\LimitsOnNames + +\def\operatorname#1{\mathop{\mathcode`'="7027 \mathcode`-="70 + \rm #1}\nolimits} % NOTE 31 + +\def\operatornamewithlimits#1{\mathop{\mathcode`'="7027 \mathcode`-="702D + \rm #1}\nlimits@AmS} + +\def\operator#1{\mathop{#1}\nolimits} +\def\operatorwithlimits#1{\mathop{#1}\displaylimits} + +\def\limover{\mathop{\overline{\rm lim}}} +\def\limunder{\mathop{\underline{\vrule height 0pt depth .2ex width 0pt + \rm lim}}} +\def\liminj{\setbox0=\hbox{\rm lim}\mathop{\rm lim} + \limits_{\topsmash{\hbox to \wd0{\leftarrowfill}}}} +\def\limproj{\setbox0=\hbox{\rm lim}\mathop{\rm lim} + \limits_{\topsmash{\hbox to \wd0{\rightarrowfill}}}} + + +% SUBSIDIARY CONSIDERATIONS FOR LARGE OPERATORS -- BUFFER AND SHAVE + +\newdimen\buffer@AmS +\buffer@AmS=\fontdimen13\tenex % NOTE 32 +\newdimen\buffer +\buffer=\buffer@AmS + +\def\changebuffer#1{\fontdimen13 \tenex=#1 \buffer=\fontdimen13 \tenex} +\def\resetbuffer{\fontdimen13 \tenex=\buffer@AmS \buffer=\buffer@AmS} + +\def\shave#1{\mathop{\hbox{$\fontdimen13\tenex=0pt % NOTE 33 + \displaystyle{#1}$}}\fontdimen13\tenex=1\buffer} + + +\def\topshave#1{\topsmash{#1}\vphantom{\shave{#1}}} + +\def\botshave#1{\botsmash{#1}\vphantom{\shave{#1}}} + + + +% ALIGNED UNITS + +\def\Let@AmS{\relax@AmS\iffalse{\fi\let\\=\cr\iffalse}\fi} % NOTE 34 + +\def\align{\def\vspace##1{\noalign{\vskip ##1}} % NOTE 35 + \,\vcenter\bgroup\Let@AmS\tabskip=0pt\openup3pt\mathsurround=0pt % NOTE 35.1 + \halign\bgroup\strut + \hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil\cr} % NOTES 36, 37 + +\def\endalign{\strut\crcr\egroup\egroup} + + +\def\bunch{\def\vspace##1{\noalign{\vskip ##1}} + \,\vcenter\bgroup\Let@AmS\tabskip=0pt\openup3pt\mathsurround=0pt + \halign\bgroup\strut\hfil$\displaystyle{##}$\hfil\cr} + +\def\endbunch{\strut\crcr\egroup\egroup} + +\def\matrix{\catcode`\^^I=4 \futurelet\tok@AmS\matrix@AmS} % NOTE 38 + +\def\matrix@AmS{\relax@AmS\iffalse{\fi \ifnum`}=0\fi\ifx\tok@AmS\format + \def\next@AmS{\expandafter\matrix@@AmS\eat@AmS}\else + \def\next@AmS{\matrix@@@AmS}\fi\next@AmS} + +\def\matrix@@@AmS{ + \ifnum`{=0\fi\iffalse}\fi\,\vcenter\bgroup\Let@AmS\tabskip=0pt + \normalbaselines\halign\bgroup $\strut\hfil##\hfil$&&\quad$\strut + \hfil##\hfil$\cr\strut\cr\noalign{\kern-\baselineskip}} % NOTE 39 + +\def\matrix@@AmS#1\\{ + \def\premable@AmS{#1}\toks@{##} + \def\c{$\copy\strutbox\hfil\the\toks@\hfil$}\def\r + {$\copy\strutbox\hfil\the\toks@$}% + \def\l{$\copy\strutbox\the\toks@\hfil$}% +\setbox0= +\hbox{\xdef\Preamble@AmS{\premable@AmS}} + \def\vspace##1{\noalign{\vskip ##1}}\ifnum`{=0\fi\iffalse}\fi +\,\vcenter\bgroup\Let@AmS + \tabskip=0pt\normalbaselines\halign\bgroup\span\Preamble@AmS\cr + \mathstrut\cr\noalign{\kern-\baselineskip}} + % NOTE 40 + +\def\endmatrix{\crcr\mathstrut\cr\noalign{\kern-\baselineskip + }\egroup\egroup\,\catcode`\^^I=10 } + + + +\def\matrixp{\left(\matrix} +\def\endmatrixp{\endmatrix\right)} + +\def\matrixb{\left[\matrix} +\def\endmatrixb{\endmatrix\right]} + +\def\matrixv{\left|\matrix} +\def\endmatrixv{\endmatrix\right|} + +\def\matrixvv{\left\|\matrix} +\def\endmatrixvv{\endmatrix\right\|} + + +\def\spacedots#1for#2{\multispan#2\leaders\hbox{$\mkern#1mu.\mkern + #1mu$}\hfill} +\def\dotsfor#1{\spacedots 1.5 for #1} % NOTE 41 + + +\def\enabletabs{\catcode`\^^I=4 \enabletabs@AmS} +\def\enabletabs@AmS#1\disabletabs{#1\catcode`\^^I=10 } % NOTE 42 + +\def\Enabletabs{\catcode`\^^I=4 } +\def\Disabletabs{\catcode`\^^I=10 } + + +\def\smallmatrix{\futurelet\tok@AmS\smallmatrix@AmS} % NOTE 43 + +\def\smallmatrix@AmS{\relax@AmS\iffalse{\fi \ifnum`}=0\fi\ifx\tok@AmS\format + \def\next@AmS{\expandafter\smallmatrix@@AmS\eat@AmS}\else + \def\next@AmS{\smallmatrix@@@AmS}\fi\next@AmS} + +\def\smallmatrix@@@AmS{ + \ifnum`{=0\fi\iffalse}\fi\,\vcenter\bgroup\Let@AmS\tabskip=0pt + \baselineskip8pt\lineskip1pt\lineskiplimit1pt + \halign\bgroup $\strut\hfil##\hfil$&&\;$\strut + \hfil##\hfil$\cr\strut\cr\noalign{\kern-\baselineskip}} + +\def\smallmatrix@@AmS#1\\{ + \def\premable@AmS{#1}\toks@{##} + \def\c{$\copy\strutbox\hfil\the\toks@\hfil$}\def\r + {$\copy\strutbox\hfil\the\toks@$}% + \def\l{$\copy\strutbox\the\toks@\hfil$}% +\hbox{\xdef\Preamble@AmS{\premable@AmS}} + \def\vspace##1{\noalign{\vskip ##1}}\ifnum`{=0\fi\iffalse}\fi +\,\vcenter\bgroup\Let@AmS + \tabskip=0pt\baselineskip8pt\lineskip1pt\lineskiplimit1pt +\halign\bgroup\span\Preamble@AmS\cr + \mathstrut\cr\noalign{\kern-\baselineskip}} + +\def\endsmallmatrix{\crcr\mathstrut\cr\noalign{\kern-\baselineskip} + \egroup\egroup\,} + + +\def\cases{\left\{ \,\vcenter\bgroup\Let@AmS\normalbaselines\tabskip=0pt + \halign\bgroup$##\hfil$&\qquad$##\hfil$\cr} % NOTE 44 + +\def\endcases{\crcr\egroup\egroup\right.} + + +% TAGGING + +\def\TagsOnLeft{\def\tagposition@AmS{L}} +\def\TagsOnRight{\def\tagposition@AmS{R}} +\def\TagsAsMath{\def\tagstyle@AmS{M}} +\def\TagsAsText{\def\tagstyle@AmS{T}} + +\TagsOnLeft +\TagsAsText + +\def\tag#1$${\if L\tagposition@AmS + \leqno\else\eqno\fi\def\atag@AmS{T}\maketag@AmS#1\tagend@AmS$$} % NOTE 45 + +\def\maketag@AmS{\futurelet\tok@AmS\maketag@@AmS} % NOTE 46 +\def\maketag@@AmS{\ifx\tok@AmS[\def\next@AmS{\maketag@@@AmS}\else + \def\next@AmS{\maketag@@@@AmS}\fi\next@AmS} +\def\maketag@@@AmS[#1]#2\tagend@AmS{\if F\atag@AmS\else % NOTE 46.1 + \if M\tagstyle@AmS\hbox{$#1$}\else\hbox{#1}\fi\fi + \gdef\atag@AmS{F}} +\def\maketag@@@@AmS#1\tagend@AmS{\if F\atag@AmS \else + \if T\autotag@AmS \setbox0=\hbox + {\if M\tagstyle@AmS\tagform@AmS{$#1$}\else\tagform@AmS{#1}\fi} + \ifdim\wd0=0pt \tagform@AmS{*}\else + \if M\tagstyle@AmS\tagform@AmS{$#1$}\else\tagform@AmS{#1}\fi + \fi\else + \if M\tagstyle@AmS\tagform@AmS{$#1$}\else\tagform@AmS{#1}\fi + \fi + \fi\gdef\atag@AmS{F}} + +\def\tagform@AmS#1{\hbox{\rm(#1\unskip)}} + +\def\AutoTag{\def\autotag@AmS{T}} +\def\NoAutoTag{\def\autotag@AmS{F}} + +\NoAutoTag + + + + + +\def\inaligntag@AmS{F} \def\inbunchtag@AmS{F} % NOTE 47 + +\def\CenteredTagsOnBrokens{\def\centerbroken@AmS{T}} % NOTE 48 +\def\TopOrBottomTagsOnBrokens{\def\centerbroken@AmS{F}} +\TopOrBottomTagsOnBrokens + +\def\broken{\global\setbox0=\vbox\bgroup\Let@AmS\tabskip=0pt + \if T\inaligntag@AmS\else + \if T\inbunchtag@AmS\else\openup3pt\fi\fi\mathsurround=0pt + \halign\bgroup\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfill + \cr} + % NOTE 49 +\def\endbroken{\strut\crcr\egroup\egroup + \global\setbox7=\vbox{\unvbox0\setbox1=\lastbox + \hbox{\unhbox1\unskip\setbox2=\lastbox + \unskip\setbox3=\lastbox + \global\setbox4=\copy3 + \box3\box2}}% % NOTE 50 + \if L\tagposition@AmS + \if T\inaligntag@AmS + \if T\centerbroken@AmS\gdef\broken@AmS + {&\vcenter{\vbox{\moveleft\wd4\box7}}}% % NOTE 51 + \else + \gdef\broken@AmS{&\vbox{\moveleft\wd4\vtop{\unvbox7}}}% % NOTE 52 + \fi + \else % NOTE 53 + \if T\centerbroken@AmS\gdef\broken@AmS + {\vcenter{\box7}}% + \else + \gdef\broken@AmS{\vtop{\unvbox7}}% + \fi + \fi + \else % NOTE 55 (no note 54) + \if T\inaligntag@AmS + \if T\centerbroken@AmS + \gdef\broken@AmS{&\vcenter{\vbox{\moveleft\wd4\box7}}}% + \else + \gdef\broken@AmS{&\vbox{\moveleft\wd4\box7}}% + \fi + \else + \if T\centerbroken@AmS + \gdef\broken@AmS{\vcenter{\box7}}% + \else + \gdef\broken@AmS{\box7}% + \fi + \fi + \fi\broken@AmS} + +\def\cbroken{\xdef\centerbroken@@AmS{\centerbroken@AmS}% + \def\centerbroken@AmS{T}\broken} % NOTE 56 +\def\endcbroken{\endbroken\def\centerbroken@AmS{\centerbroken@@AmS}} + + +\def\multline#1${\in@AmS\tag{#1}\if T\cresult@AmS + \def\multline@AmS{\def\atag@AmS{T}\getmltag@AmS#1$}\else + \def\multline@AmS{\def\atag@AmS{F}\setbox9=\hbox{}\multline@@AmS + \multline@@@AmS#1$}\fi\multline@AmS} % NOTE 57 + +\def\getmltag@AmS#1\tag#2${\setbox9=\hbox{\maketag@AmS#2\tagend@AmS}% + \multline@@AmS\multline@@@AmS#1$} + +\def\multline@@AmS{\if L\tagposition@AmS + \def\lwidth@AmS{\hskip\wd9}\def\rwidth@AmS{\hskip0pt}\else + \def\lwidth@AmS{\hskip0pt}\def\rwidth@AmS{\hskip\wd9}\fi} % NOTE 58 + +\def\multline@@@AmS{\def\vspace##1{\noalign{\vskip ##1}}% + \def\shoveright##1{##1\hfilneg\rwidth@AmS\quad} % NOTE 59 + \def\shoveleft##1{\setbox % NOTE 60 + 0=\hbox{$\displaystyle{}##1$}% + \setbox1=\hbox{$\displaystyle##1$}% + \ifdim\wd0=\wd1 + \hfilneg\lwidth@AmS\quad##1\else + \setbox2=\hbox{\hskip\wd0\hskip-\wd1}% + \hfilneg\lwidth@AmS\quad\hskip-.5\wd2 ##1\fi} + \vbox\bgroup\Let@AmS\openup3pt\halign\bgroup\hbox to \the\displaywidth + {$\displaystyle\hfil{}##\hfil$}\cr\hfilneg\quad + \if L\tagposition@AmS\hskip-1em\copy9\quad\else\fi} % NOTE 61 + + +\def\endmultline{\if R\tagposition@AmS\quad\box9 % NOTES 62, 63 + \hskip-1em\else\fi\quad\hfilneg\crcr\egroup\egroup} + + + +\def\aligntag#1$${\def\inaligntag@AmS{T}\openup3pt\mathsurround=0pt % NOTE 64 + \Let@AmS + \def\tag{\gdef\atag@AmS{T}&} % NOTE 65 + \def\vspace##1{\noalign{\vskip##1}} % NOTE 66 + \def\xtext##1{\noalign{\hbox{##1}}} % NOTE 67 + \def\break{\noalign{\penalty-10000 }} % NOTE 68 + \def\nobreak{\noalign{\penalty 10000 }} + \def\allowbreak{\noalign{\penalty 0 }} + \def\goodbreak{\noalign{\penalty -500 }} + \gdef\atag@AmS{F}% +\if L\tagposition@AmS\laligntag@AmS#1$$\else + \raligntag@AmS#1$$\fi} + +\def\raligntag@AmS#1$${\tabskip\centering + \halign to \the\displaywidth +{\hfil$\displaystyle{##}$\tabskip 0pt + &$\displaystyle{{}##}$\hfil\tabskip\centering + &\llap{\maketag@AmS##\tagend@AmS}\tabskip 0pt\cr\noalign{\vskip- + \lineskiplimit}#1\crcr}$$} + +\def\laligntag@AmS#1$${\tabskip\centering % NOTE 69 + \halign to \the\displaywidth +{\hfil$\displaystyle{##}$\tabskip0pt + &$\displaystyle{{}##}$\hfil\tabskip\centering + &\kern-\displaywidth\rlap{\maketag@AmS##\tagend@AmS}\tabskip + \the\displaywidth\cr\noalign{\vskip-\lineskiplimit}#1\crcr}$$} + +\def\endaligntag{} + +\def\bunchtag#1$${\def\inbunchtag@AmS{T}\openup3pt\mathsurround=0pt % NOTE 70 + \Let@AmS + \def\tag{\gdef\atag@AmS{T}&} + \def\vspace##1{\noalign{\vskip##1}} + \def\xtext##1{\noalign{\hbox{##1}}} + \def\break{\noalign{\penalty-10000 }} + \def\nobreak{\noalign{\penalty 10000 }} + \def\allowbreak{\noalign{\penalty 0 }} + \def\goodbreak{\noalign{\penalty -500 }} + \if L\tagposition@AmS\lbunchtag@AmS#1$$\else + \rbunchtag@AmS#1$$\fi} + +\def\rbunchtag@AmS#1$${\tabskip\centering + \halign to \displaywidth {$\hfil\displaystyle{##}\hfil$& + \llap{\maketag@AmS##\tagend@AmS}\tabskip 0pt\cr\noalign{\vskip- + \lineskiplimit}#1\crcr}$$} + +\def\lbunchtag@AmS#1$${\tabskip\centering + \halign to \displaywidth +{$\hfil\displaystyle{##}\hfil$&\kern- + \displaywidth\rlap{\maketag@AmS##\tagend@AmS}\tabskip\the\displaywidth\cr + \noalign{\vskip-\lineskiplimit}#1\crcr}$$} + +\def\endbunchtag{} + + +% MISCELLANEOUS + +\def\hyphen{\mathchar"702D} % NOTE 71 +\def\endash{\mathchar"707B} +\def\emdash{\mathchar"707C} +\def\rightquote{\mathchar"7027} +\def\rightquoteii{\mathchar"7022} +\def\leftquote{\mathchar"7060} +\def\leftquoteii{\mathchar"705C} + +\def\mod#1{\allowbreak\mkern18mu{\rm mod}\,\,#1} + +% CONTINUED FRACTIONS + +\def\numeratorleft#1{#1\hskip 0pt plus 1filll\relax@AmS} +\def\numeratorright#1{\hskip 0pt plus 1filll\relax@AmS#1} +\def\numeratorcenter#1{\hskip 0pt plus 1filll\relax@AmS + #1\hskip 0pt plus 1filll\relax@AmS} + +\def\cfrac@AmS#1,{\def\numerator@AmS{#1}\cfrac@@AmS*} % NOTE 72 + +\def\cfrac@@AmS#1;#2#3\cfend@AmS{\comp@AmS\cfmark@AmS{#2}\if T\cresult@AmS + \gdef\cfrac@@@AmS + {\expandafter\eat@AmS\numerator@AmS\strut\over\eat@AmS#1}\else + \comp@AmS;{#2}\if T\cresult@AmS\gdef\cfrac@@@AmS + {\expandafter\eat@AmS\numerator@AmS\strut\over\eat@AmS#1}\else +\gdef\cfrac@@@AmS{\if R\cftype@AmS\hfill\else\fi + \expandafter\eat@AmS\numerator@AmS\strut + \if L\cftype@AmS\hfill\else\fi\over + \eat@AmS#1\displaystyle {\cfrac@AmS*#2#3\cfend@AmS}} + \fi\fi\cfrac@@@AmS} + +\def\cfrac#1{\def\cftype@AmS{C}\cfrac@AmS*#1;\cfmark@AmS\cfend@AmS} + +\def\cfracl#1{\def\cftype@AmS{L}\cfrac@AmS*#1;\cfmark@AmS\cfend@AmS} + +\def\cfracr#1{\def\cftype@AmS{R}\cfrac@AmS*#1;\cfmark@AmS\cfend@AmS} + +\def\adorn#1#2#3{\mathsurround=0pt\setbox0=\hbox{$\displaystyle{#2}#3$}% + \setbox1=\hbox{$\displaystyle\vphantom{#2}#1{#2}$}% + \setbox2=\hbox{\hskip\wd0\hskip-\wd1}% + \hskip-\wd2\mathop{\hskip\wd2\vphantom{#2}#1{#2}#3}} + +% ARROWS % NOTE 73 + +\def\overrightarrow{\mathpalette\overrightarrow@AmS} + +\def\overrightarrow@AmS#1#2{\vbox{\halign{$##$\cr + #1{-}\mkern-6mu\cleaders\hbox{$#1\mkern-2mu{-}\mkern-2mu$}\hfill + \mkern-6mu{\to}\cr + \noalign{\kern -1pt\nointerlineskip} + \hfil#1#2\hfil\cr}}} + +\let\overarrow=\overrightarrow + +\def\overleftarrow{\mathpalette\overleftarrow@Ams} + +\def\overleftarrow@Ams#1#2{\vbox{\halign{$##$\cr + #1{\leftarrow}\mkern-6mu\cleaders\hbox{$#1\mkern-2mu{-}\mkern-2mu$}\hfill + \mkern-6mu{-}\cr + \noalign{\kern -1pt\nointerlineskip} + \hfil#1#2\hfil\cr}}} + +\def\overleftrightarrow{\mathpalette\overleftrightarrow@AmS} + +\def\overleftrightarrow@AmS#1#2{\vbox{\halign{$##$\cr + #1{\leftarrow}\mkern-6mu\cleaders\hbox{$#1\mkern-2mu{-}\mkern-2mu$}\hfill + \mkern-6mu{\to}\cr + \noalign{\kern -1pt\nointerlineskip} + \hfil#1#2\hfil\cr}}} + +\def\underrightarrow{\mathpalette\underrightarrow@AmS} + +\def\underrightarrow@AmS#1#2{\vtop{\halign{$##$\cr + \hfil#1#2\hfil\cr + \noalign{\kern -1pt\nointerlineskip} + #1{-}\mkern-6mu\cleaders\hbox{$#1\mkern-2mu{-}\mkern-2mu$}\hfill + \mkern-6mu{\to}\cr}}} + +\let\underarrow=\underrightarrow + +\def\underleftarrow{\mathpalette\underleftarrow@AmS} + +\def\underleftarrow@AmS#1#2{\vtop{\halign{$##$\cr + \hfil#1#2\hfil\cr + \noalign{\kern -1pt\nointerlineskip} + #1{\leftarrow}\mkern-6mu\cleaders\hbox{$#1\mkern-2mu{-}\mkern-2mu$}\hfill + \mkern-6mu{-}\cr}}} + +\def\underleftrightarrow{\mathpalette\underleftrightarrow@AmS} + +\def\underleftrightarrow@AmS#1#2{\vtop{\halign{$##$\cr + \hfil#1#2\hfil\cr + \noalign{\kern -1pt\nointerlineskip} + #1{\leftarrow}\mkern-6mu\cleaders\hbox{$#1\mkern-2mu{-}\mkern-2mu$}\hfill + \mkern-6mu{\to}\cr}}} + +% DOTS + +\def\dotsc{\mathinner{\ldotp\ldotp\ldotp}} +\def\dotsi{\mathinner{\cdotp\cdotp\cdotp}} +\def\dotsj{\mathinner{\ldotp\ldotp\ldotp}} +\def\dotsb{\mathinner{\cdotp\cdotp\cdotp}} + +\def\binary@AmS#1{{\thinmuskip 0mu \medmuskip 1mu \thickmuskip 1mu % NOTE 74 + \setbox0=\hbox{$#1{}{}{}{}{}{}{}{}{}$}\setbox1=\hbox + {${}#1{}{}{}{}{}{}{}{}{}$}\ifdim\wd1>\wd0\gdef\binary@@AmS{T}\else + \gdef\binary@@AmS{F}\fi}} + +\def\dots{\relax@AmS\ifmmode\def\dots@AmS{\mdots@AmS}\else + \def\dots@AmS{\tdots@AmS}\fi\dots@AmS} + +\def\mdots@AmS{\futurelet\tok@AmS\mdots@@AmS} + +\def\mdots@@AmS{\def\thedots@AmS{\dotsj}% + \ifx\tok@AmS\bgroup\else + \ifx\tok@AmS\egroup\else + \ifx\tok@AmS$\else + \iffalse{\fi \ifx\tok@AmS\\ \iffalse}\fi\else % NOTE 75 + \iffalse{\fi \ifx\tok@AmS& \iffalse}\fi\else + \ifx\tok@AmS\left\else + \ifx\tok@AmS\right\else + \ifx\tok@AmS,\def\thedots@AmS{\dotsc}\else + \inttest@AmS\tok@AmS\if T\intflag@AmS\def\thedots@AmS{\dotsi}\else + \binary@AmS\tok@AmS\if T\binary@@AmS\def\thedots@AmS{\dotsb}\else + \def\thedots@AmS{\dotsj}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\thedots@AmS} + +\def\tdots@AmS{\unskip\ \tdots@@AmS} + +\def\tdots@@AmS{\futurelet\tok@AmS\tdots@@@AmS} + +\def\tdots@@@AmS{$\ldots\, + \ifx\tok@AmS,$\else + \ifx\tok@AmS.\,$\else + \ifx\tok@AmS;\,$\else + \ifx\tok@AmS:\,$\else + \ifx\tok@AmS?\,$\else + \ifx\tok@AmS!\,$\else + $\ \fi\fi\fi\fi\fi\fi} + + +% SET NOTATION + +\def\lset{\{\,} +\def\rset{\,\}} + + +\def\leftset#1\mid#2\rightset{\hbox{$\displaystyle +\left\{\,#1\vphantom{#1#2}\;\right|\;\left. + #2\vphantom{#1#2}\,\right\}\offspace@AmS$}} + + +% ACCENT SYMBOLS + +\def\dotii#1{{\mathop{#1}\limits^{\vbox to -1.4pt{\kern-2pt + \hbox{\tenrm..}\vss}}}} +\def\dotiii#1{{\mathop{#1}\limits^{\vbox to -1.4pt{\kern-2pt + \hbox{\tenrm...}\vss}}}} +\def\dotiv#1{{\mathop{#1}\limits^{\vbox to -1.4pt{\kern-2pt + \hbox{\tenrm....}\vss}}}} + +\def\vecsymbol{\rightarrow} +\def\barsymbol{-} +\def\tildesymbol{\mathchar"0218 } +\def\hatsymbol{{\mathchoice{\null}{\null}{\,\,\hbox{\lower 10pt\hbox + {$\widehat{\null}$}}}{\,\hbox{\lower 20pt\hbox + {$\hat{\null}$}}}}} +\def\dotsymbol{{\nonscript\,.}} +\def\dotiisymbol{{\nonscript\,\hbox{\tenrm..}}} +\def\dotiiisymbol{{\nonscript\,\hbox{\tenrm...}}} +\def\dotivsymbol{{\nonscript\,\hbox{\tenrm....}}} +\def\dotsymbol{{\nonscript\,\hbox{\tenrm.}}} + + + +% OVERSET AND OVERBRACE + +\def\overset#1\to#2{{\mathop{#2}^{#1}}} + +\def\underset#1\to#2{{\mathop{#2}_{#1}}} + +\def\oversetbrace#1\to#2{{\overbrace{#2}^{#1}}} +\def\undersetbrace#1\to#2{{\underbrace{#2}_{#1}}} + + +% ROOTS + +\def\uproot#1{\gdef\theuproot{#1 pt}} +\def\theuproot{0 pt} + +\def\therightroot{0mu} +\def\rightroot#1{\gdef\therightroot{-#1mu}} + + +\def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}% + \dimen@\ht\z@ \advance\dimen@-\dp\z@ \advance\dimen@\theuproot + \mskip5mu\raise.6\dimen@\copy\rootbox \mskip-10mu \mskip\therightroot + \box\z@\gdef\theuproot{0 pt}\gdef\therightroot{0mu}} % NOTE 76 + + +% BOXED + + +\def\boxed#1{\setbox0=\hbox{$\displaystyle{#1}$}\hbox{\lower.4pt\hbox{\lower + 3pt\hbox{\lower 1\dp0\hbox{\vbox{\hrule height .4pt \hbox{\vrule width + .4pt \hskip 3pt\vbox{\vskip 3pt\box0\vskip3pt}\hskip 3pt \vrule width + .4pt}\hrule height .4pt}}}}}} + +% FORMATTING MACROS COMMON TO ALL STYLES + +\def\documentstyle#1{\input #1.sty} + +\newif\ifretry@AmS +\def\y@AmS{y } \def\y@@AmS{Y } \def\n@AmS{n } \def\n@@AmS{N } +\def\ask@AmS{\message + {Do you want output? (y or n, follow answer by return) }\loop + \read-1 to\answer@AmS + \ifx\answer@AmS\y@AmS\retry@AmSfalse\outputon + \else\ifx\answer@AmS\y@@AmS\retry@AmSfalse\outputon + \else\ifx\answer@AmS\n@AmS\retry@AmSfalse\outputoff + \else\ifx\answer@AmS\n@@AmS\retry@AmSfalse\outputoff + \else \retry@AmStrue\fi\fi\fi\fi + \ifretry@AmS\message{Type y or n, follow answer by return: }\repeat} + +\def\outputoff{\global\output{\setbox0=\box255 \deadcycles=0}} + +\def\outputon{\global\output{\output@AmS}} +\outputon + +\catcode`\@=13 diff --git a/docs/historical/doclib/article.tex b/docs/historical/doclib/article.tex new file mode 100644 index 0000000..fdc0e75 --- /dev/null +++ b/docs/historical/doclib/article.tex @@ -0,0 +1,45 @@ +% Support for the Article style of DISS.STY (do not explicitly load...) + + +\catcode`\@=11 % for a little while + + +% usage: \header text\title text\author text\info +\outer\def\header#1\title#2\author#3\info{% + \null\vskip .8in plus .1in minus .1in + \begingroup + \titlefont + \let\\=\cr + \tabskip=0pt + \halign to\hsize{\centerline{\ignorespaces##\unskip}\cr#1\cr}% + \endgroup + \bigskip + + \begingroup + \authorfont + \let\\=\cr + \tabskip=0pt + \halign to\hsize{\centerline{\ignorespaces##\unskip}\cr#2\cr}% + \endgroup + \medskip + + \begingroup + \let\\=\cr + \tabskip=0pt + \halign to\hsize{\centerline{\ignorespaces##\unskip}\cr#3\cr}% + \endgroup + \vskip .5in plus .1in + + \def\banner{\bop\chapter#1\endchapter}% +} + + +% Parameters different than the AmS-TeX dissertation style + +\quiet + \oddpagesfalse + \singlespace +\verbose + + +\catcode`\@=12 % back to normal diff --git a/docs/historical/doclib/dcustom.tex b/docs/historical/doclib/dcustom.tex new file mode 100644 index 0000000..c84da28 --- /dev/null +++ b/docs/historical/doclib/dcustom.tex @@ -0,0 +1,198 @@ +% Customize the dissertation style of AmS-TeX + +\expandafter\ifx\csname documentstyle\endcsname\relax \input amstex\fi +\expandafter\ifx\csname ask\endcsname\relax \documentstyle{diss}\fi + + +\catcode`\@=11 % for a little while + + +% Parameters different that diss.sty + +\hoffset=.175in % center it... + +% \def\contitle{\jobname.toc} +% \def\figtitle{\jobname.lof} +% \def\tabtitle{\jobname.lot} + + +% Figure Support + +\def\tagfigure#1#2#3{% + \figure{figure#1}{#2}% + \ifundefined{#3}% + \expandafter\let\csname#3\endcsname=\lastfigure + \else + \tell{Warning: #3 is already defined}% + \fi +} + +\def\tagdiagram#1#2#3{% + \diagram{diagram#1}{#2}% + \ifundefined{#3}% + \expandafter\let\csname#3\endcsname=\lastfigure + \else + \tell{Warning: #3 is already defined}% + \fi +} + +\def\tagtable#1#2#3{% + \table{#2}% + \input table#1\relax + \endtable + \ifundefined{#3}% + \expandafter\let\csname#3\endcsname=\lasttable + \else + \tell{Warning: #3 is already defined}% + \fi +} + + +% Page Numbering + +\newif\ifdraft \draftfalse + +\def\draftstring{{\ifdraft \tt Draft\fi}} +\def\draftext{% + \ifdraft + \begingroup + \tt + \ifodd\pageno + \TeX set \today\ with DISS.STY v\version + \else + Draft \versiontag/ of \versiondate/ + \fi + \endgroup + \fi +} +\def\versiontag/{\errmessage{version.tex not loaded!}} +\let\versiondate=\versiontag +\def\uci@headpage{\draftext\hfil\rm\folio} +\def\uci@footpage{\draftstring\hfil\rm\folio\hfil\draftstring} + + +% Draft style + +\def\draftstyle{% + \quiet + \drafttrue + \nochapternumbers + \verbose +} + + +% Article and Galley styles + +\let\@articlestyle=\articlestyle + +\outer\def\articlestyle{% + \quiet + \@articlestyle + \input article + \verbose +} + +\outer\def\galleystyle{% + \quiet + \@articlestyle + \input galley + \verbose +} + + +% Theorems, Equations, and the like + +\outer\def\proclaim #1. #2\par{% + \medbreak\vskip-\parskip + \begingroup + \singlespace + \noindent{\smallertype\sc#1.\enspace}{\sl#2}\par + \endgroup + \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi +} + +\def\proof #1.{\lp{\smallertype\sc Proof of #1.\enspace}} + +\def\thm#1{{\smallertype\sc#1}} + +\def\eqn#1{\ifmmode {\it(#1\/)}\else $\it(#1\/)$\fi} + +\def\implies{\quad\supset\ } + +\def\tdots{\ldots\thinspace} + + +% References... + +\let\journalinfo=\jourinfo +\let\thesis=\book % experimental +\let\thesisinfo=\bookinfo % .. + + +% Miscellaneous Macros + +\let\bop=\newpage + +\def\hbreak{\hfil\break} + +\def\lp{\par\noindent} + +% usage: \boxit{text} +\def\boxit#1{% + \leavevmode + \thinspace + \hbox{% + \smallertype + \vrule + \vtop{% + \vbox{% + \hrule\kern\p@ + \hbox{\vphantom{\sc/}\thinspace{\sc#1}\thinspace} + }% + \kern\p@\hrule + }% + \vrule + }% + \thinspace +} + + +% Additional verbatim support + +\def\?{\char'077} + +\def\verbatimlines{% + \lineno@uci=\z@ + \begingroup + \setupverbatim + \parskip=\z@ plus .05\baselineskip + \parindent=20\p@ + \everypar{\advance\lineno@uci by\@ne \llap{\the\lineno@uci\ \ }}% + \catcode`\ =13 \catcode`\^^M=13 \catcode`\?=\z@ + \verbatimgobble +} + + +% Trademarks... + +\input trademark + + +% Parameters different than the AmS-TeX dissertation style + +\quiet + \twosided + \useolddigits + \raggedbottom + \raggedright + \AuthorsInCSC + \refdef@AmS\yr\oldstyle + \halfspace + \twelvepoint +\verbose + + +\catcode`\@=12 % back to normal + + +\let\dcustom=\empty diff --git a/docs/historical/doclib/diss.sty b/docs/historical/doclib/diss.sty new file mode 100644 index 0000000..399c495 --- /dev/null +++ b/docs/historical/doclib/diss.sty @@ -0,0 +1,2164 @@ +% UCI Dissertation Style for AmSTeX. +% @(#)diss.sty,v 1.1.1.1 1993/01/30 04:41:05 jtc Exp + +% Tim Morgan with many suggestions, bug fixes, etc, from Marshall Rose +% Based originally on Michael Spivak's AMSPPT.STY. + +% When edits are made to this file, the version number should be incremented. +\def\version{103} +\let\fmtversion=\version % These two control sequences are defined +\def\fmtname{dissertation} % in plain.tex, so we do it here too. + +% Assumes the following hidden definitions from plain.tex: +% \z@ is defined from plain.tex as 0pt (and magically can +% be used as the integer constant 0 also). +% \p@ is the same, but 1pt +% \@ne is 1 +% \m@ne is -1 +% \tw@ is 2 +% \thr@@ is 3 +% \@m is 1000 +% \@M is 10000 +% And the following scratch register definitions: +% \dimen@ is \dimendef'd to be \dimen0 +% \skip@ is \skipdef'd to be \skip0 +% \count@ is \count255 + +\catcode`\@=11 % So we can use a special character + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PARAMETERS DIFFERENT THAN IN PLAIN % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% These are words which TeX doesn't hyphenate perfectly. +% Unfortunately, the plural forms must be included also. +\hyphenation{com-put-er com-mun ap-pen-dix cart-wheel data-base Dijk-stra} +\hyphenation{in-fra-struc-ture man-u-script mi-cro-fiche para-mil-i-tary} +\hyphenation{post-am-ble pre-am-ble sub-scrib-er wave-guide sub-scrib-ers} +\hyphenation{com-put-ers cart-wheels data-bases in-fra-struc-tures} +\hyphenation{man-u-scripts mi-cro-fiches post-am-bles pre-am-bles} +\hyphenation{buf-fer buf-fers des-ig-na-ted par-a-graph par-a-graphs} +\hyphenation{key-stroke key-strokes usu-al-ly} + + +\def\normal@topskip{0.48cm} +\topskip=\normal@topskip % For correct page positioning, do NOT +\hoffset=0.5in % change any of these values!!! +\voffset=0.07cm +\hsize=15.2cm +\vsize=22.2cm + +\normallineskiplimit=\p@ % Min. dist. btw. lines. +\parindent=1cm % Normal indentation. +\hfuzz=0.115\p@ % So we hear fewer complaints. Good up to +\vfuzz=0.115\p@ % 300 dpi. + +\pretolerance=200 % At 12pt, these margins are kind of narrow +\tolerance=300 % so we have to be more tolerant. +\clubpenalty=\@M % Never allow these. +\widowpenalty=\@M +\newlinechar=`\^^J % For writing output to tty. +\uchyph=\z@ % Don't take any chances. +\brokenpenalty=\@M % Never hyphenate last line on a page. +\newcount\defaultinterlinepenalty % This probably won't make any +\defaultinterlinepenalty=\thr@@ % difference, so why not?? +\interlinepenalty=\defaultinterlinepenalty + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PARAMETERS DIFFERENT from AmSTeX % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\TagsOnRight % Set tags like a sane person does + + +%%%%%%%%%%%%%%%%%%%%%%%% +% EXTRA FONTS NEEDED % +%%%%%%%%%%%%%%%%%%%%%%%% + +\newif\ifolddigits +\olddigitsfalse % Allow use of amcscod10 for citations +\def\useolddigits{% + \olddigitstrue + \oktell{Old Digits Mode}% +} + +\font\sixrm=cmr6 \font\sixbf=cmbx6 +\font\sixi=cmmi6 \skewchar\sixi='177 +\font\sixsy=cmsy6 \skewchar\sixsy='60 + +\font\eightrm=cmr8 \font\eightsl=cmsl8 \font\eightit=cmti8 +\font\eightsy=cmsy8 \skewchar\eightsy='60 +\skewchar\eightsy='60 \font\eightbf=cmbx8 +\font\eightex=cmex10 at 8\p@ +\font\eighti=cmmi8 \skewchar\eighti='177 + +\font\ninerm=cmr9 \font\nineit=cmti9 +\font\ninei=cmmi9 \skewchar\ninei='177 +\font\ninesy=cmsy9 \skewchar\ninesy='60 +\font\ninesl=cmsl9 \font\ninebf=cmbx9 + +\font\twelvecsc=cmcsc10 scaled \magstep1 +\font\tencsc=cmcsc10 +\font\eightcsc=cmcsc10 at 8\p@ +\font\elevencsc=cmcsc10 scaled \magstephalf +\font\ninecsc=cmcsc10 at 9\p@ + +\let\tencscod=\tencsc +\let\eightcscod=\eightcsc + +\font\eightsf=cmss10 at 8\p@ +\font\tensf=cmss10 +\font\twelvesf=cmss10 at 12\p@ + +\font\twelvett=cmtt10 scaled \magstep1 +\font\eighttt=cmtt10 at 8\p@ % \tentt is predefined in plain.tex + +\font\twelvebti=cmbti at 12\p@ +\font\tenbti=cmbti +\font\eightbti=cmbti at 8\p@ + +\font\twelveex=cmex10 scaled \magstep1 \font\twelverm=cmr10 scaled \magstep1 +\font\twelvesl=cmsl10 scaled \magstep1 \font\twelvebf=cmbx10 scaled \magstep1 +\font\twelvei=cmmi10 scaled \magstep1 \skewchar\twelvei='177 +\font\twelvesy=cmsy10 scaled \magstep1 \skewchar\twelvesy='60 +\font\twelveit=cmti10 scaled \magstep1 + +\font\twelvechap@font=cmssbx10 at 14\p@ +\font\twelvesec@font=cmss10 at 13\p@ +\font\twelvesubsec@font=cmssi10 scaled \magstep1 + +\font\tenchap@font=cmssbx10 scaled \magstep1 +\font\tensec@font=cmssbx10 scaled \magstephalf +\font\tensubsec@font=cmssi10 + +\font\eightchap@font=cmssbx10 +\font\eightsec@font=cmss10 at 9\p@ +\font\eightsubsec@font=cmssqi8 + +% Font selection +\newcount\font@no +\def\curfont{\ifcase\font@no\rm\or\it\or\sl\or\bf\or\tt\or\csc\or\bti\or\sf + \else\errmessage{Internal font confusion}\fi} + +%%%%%%%%%%%%%%%%%%%%% +% SPACING CONTROL % +%%%%%%%%%%%%%%%%%%%%% + +\newskip\normalabovedisplayskip +\newskip\normalbelowdisplayskip +\newskip\normalabovedisplayshortskip +\newskip\normalbelowdisplayshortskip +\newdimen\normalparskip \normalparskip=22.5\p@ +\newdimen\parstretch \parstretch=8\p@ + +\newif\ifsinglespacing % Tells if we are currently in single space mode +\newif\ifhalfspacing % Special version of singlespacing, a little bigger. + +% Actually tell TeX what spacing is wanted +\def\setbaselines{% + \baselineskip=\normalbaselineskip + \abovedisplayskip=\normalabovedisplayskip + \belowdisplayskip=\normalbelowdisplayskip + \abovedisplayshortskip=\normalabovedisplayshortskip + \belowdisplayshortskip=\normalbelowdisplayshortskip + % Compute \parskip for even paragraph spacing at all pt sizes + \dimen@=\normalparskip + \advance\dimen@ by -\normalbaselineskip + \parskip=\dimen@ plus\parstretch +} + +% Go from double to single spacing +\def\reducespacing{% + \normalbaselineskip=0.64\normalbaselineskip + \normalabovedisplayskip=0.64\normalabovedisplayskip + \normalbelowdisplayskip=0.64\normalbelowdisplayskip + \normalabovedisplayshortskip=0.64\normalabovedisplayshortskip + \normalbelowdisplayshortskip=0.64\normalbelowdisplayshortskip +} + +% Set halfspacing baseline etc starting from singlespacing mode +\def\sethalfspacing{% + \normalbaselineskip=1.28125\normalbaselineskip + \abovedisplayskip=1.28125\abovedisplayskip + \belowdisplayskip=1.28125\belowdisplayskip + \abovedisplayshortskip=1.28125\abovedisplayshortskip + \belowdisplayshortskip=1.28125\belowdisplayshortskip +} + +% Go to single spacing if we're not there already +\def\singlespace{% + \normalspacing \reducespacing + \halfspacingfalse \singlespacingtrue + \setbaselines +} + +% Go to 1-1/2 spacing. +\def\halfspace{% + \normalspacing \reducespacing \sethalfspacing + \singlespacingtrue \halfspacingtrue + \setbaselines +} + +% Go to normal, doublespacing mode +\def\doublespace{% + \normalspacing + \singlespacingfalse \halfspacingfalse + \setbaselines +} + +% Make sure we're doing the spacing we're supposed to be. +\def\setspacing{% + \normalspacing + \ifsinglespacing + \reducespacing + \ifhalfspacing \sethalfspacing \fi + \fi + \setbaselines +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% FOUR DIFFERENT POINT SIZES % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\twelvepoint{% + \def\big@@AmS{10.2\p@}% + \def\Big@@AmS{13.8\p@}% + \def\bigg@@AmS{17.4\p@}% + \def\Bigg@@AmS{21.0\p@}% + \let\smallertype=\tenpoint + \let\curtype=\twelvepoint + \def\biggertype{\errmessage{No larger point size available}}% + \def\normalspacing{% + \normalbaselineskip=22.8\p@ + \normalabovedisplayskip=14.5\p@ plus 3\p@ minus 9\p@ + \normalbelowdisplayskip=14.5\p@ plus 3\p@ minus 9\p@ + \normalabovedisplayshortskip=\z@ plus 4\p@ + \normalbelowdisplayshortskip=9\p@ plus 4\p@ minus 5\p@ + }% + \def\rm{\font@no=0\fam\z@\twelverm}% + \def\it{\font@no=1\fam\itfam\twelveit}% + \def\sl{\font@no=2\fam\slfam\twelvesl}% + \def\bf{\font@no=3\fam\bffam\twelvebf}% + \def\tt{\font@no=4\fam\ttfam\twelvett \spaceskip.5em plus.25em + minus.15em }% + \def\csc{\font@no=5\twelvecsc}% + \def\bti{\font@no=6\twelvebti}% + \def\sf{\font@no=7\twelvesf}% + \let\sc=\csc + \ifolddigits + \let\cite@font=\tencscod + \else + \let\cite@font=\elevencsc + \fi + \textfont\z@=\twelverm \scriptfont\z@=\ninerm \scriptscriptfont\z@=\sixrm + \textfont\@ne=\twelvei \scriptfont\@ne=\ninei \scriptscriptfont\@ne=\sixi + \textfont\tw@=\twelvesy \scriptfont\tw@=\ninesy \scriptscriptfont\tw@=\sixsy + \textfont\thr@@=\twelveex \scriptfont\thr@@=\twelveex + \scriptscriptfont\thr@@=\twelveex + \textfont\itfam=\twelveit + \textfont\slfam=\twelvesl + \textfont\ttfam=\twelvett + \textfont\bffam=\twelvebf \scriptfont\bffam=\ninebf + \scriptscriptfont\bffam=\sixbf + \let\chap@font=\twelvechap@font + \let\sec@font=\twelvesec@font + \let\subsec@font=\twelvesubsec@font + \let\subsubsec@font=\twelvebf + \def\oldstyle{\fam1\twelvei}% + \setspacing + \curfont + \ifundefined{everypointsize}\else\everypointsize{twelve}{12}\fi +} + +\def\tenpoint{% + \def\big@@AmS{8.5\p@}% + \def\Big@@AmS{11.5\p@}% + \def\bigg@@AmS{14.5\p@}% + \def\Bigg@@AmS{17.5\p@}% + \let\smallertype=\eightpoint + \let\curtype=\tenpoint + \let\biggertype=\twelvepoint + \def\normalspacing{% + \normalbaselineskip=18.9\p@ + \normalabovedisplayskip=12\p@ plus 3\p@ minus 9\p@ + \normalbelowdisplayskip=12\p@ plus 3\p@ minus 9\p@ + \normalabovedisplayshortskip=\z@ plus 3\p@ + \normalbelowdisplayshortskip=7\p@ plus 3\p@ minus 4\p@ + }% + \def\rm{\font@no=0\fam\z@\tenrm}% + \def\it{\font@no=1\fam\itfam\tenit}% + \def\sl{\font@no=2\fam\slfam\tensl}% + \def\bf{\font@no=3\fam\bffam\tenbf}% + \def\tt{\font@no=4\fam\ttfam\tentt \spaceskip.5em plus.25em + minus.15em }% + \def\csc{\font@no=5\tencsc} + \def\bti{\font@no=6\tenbti}% + \def\sf{\font@no=7\tensf}% + \let\sc=\csc + \ifolddigits + \let\cite@font=\eightcscod + \else + \let\cite@font=\ninecsc + \fi + \textfont\z@=\tenrm \scriptfont\z@=\sevenrm \scriptscriptfont\z@=\fiverm + \textfont\@ne=\teni \scriptfont\@ne=\seveni \scriptscriptfont\@ne=\fivei + \textfont\tw@=\tensy \scriptfont\tw@=\sevensy \scriptscriptfont\tw@=\fivesy + \textfont\thr@@=\tenex \scriptfont\thr@@=\tenex + \scriptscriptfont\thr@@=\tenex + \textfont\itfam=\tenit + \textfont\slfam=\tensl + \textfont\ttfam=\tentt + \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf + \scriptscriptfont\bffam=\fivebf + \let\chap@font=\tenchap@font + \let\sec@font=\tensec@font + \let\subsec@font=\tensubsec@font + \let\subsubsec@font=\tenbf + \def\oldstyle{\fam1\teni}% + \setspacing + \curfont + \ifundefined{everypointsize}\else\everypointsize{ten}{10}\fi +} + +\def\eightpoint{% + \def\big@@AmS{6.8\p@}% + \def\Big@@AmS{9.2\p@}% + \def\bigg@@AmS{11.6\p@}% + \def\Bigg@@AmS{14.0\p@}% + \def\smallertype{\errmessage{No smaller point size available}}% + \let\curtype=\eightpoint + \let\biggertype=\tenpoint + \def\normalspacing{% + \normalbaselineskip=15\p@ + \normalabovedisplayskip=10\p@ plus 2.4\p@ minus 7.2\p@ + \normalbelowdisplayskip=10\p@ plus 2.4\p@ minus 7.2\p@ + \normalabovedisplayshortskip=\z@ plus 2.4\p@ + \normalbelowdisplayshortskip=55.6\p@ plus 2.4\p@ minus 3.2\p@ + }% + \def\rm{\font@no=0\fam\z@\eightrm}% + \def\it{\font@no=1\fam\itfam\eightit}% + \def\sl{\font@no=2\fam\slfam\eightsl}% + \def\bf{\font@no=3\fam\bffam\eightbf}% + \def\tt{\font@no=4\fam\ttfam\eighttt \spaceskip.5em plus.25em + minus.15em }% + \def\csc{\font@no=5\eightcsc}% + \def\bti{\font@no=6\eightbti}% + \def\sf{\font@no=7\eightsf}% + \let\sc=\csc + \def\cite@font{\errmessage{You may not do citations in 8 point}} + \textfont\z@=\eightrm \scriptfont\z@=\sixrm \scriptscriptfont\z@=\fiverm + \textfont\@ne=\eighti \scriptfont\@ne=\sixi \scriptscriptfont\@ne=\fivei + \textfont\tw@=\eightsy \scriptfont\tw@=\sixsy \scriptscriptfont\tw@=\fivesy + \textfont\thr@@=\eightex \scriptfont\thr@@=\eightex + \scriptscriptfont\thr@@=\eightex + \textfont\itfam=\eightit + \textfont\slfam=\eightsl + \textfont\ttfam=\eighttt + \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf + \scriptscriptfont\bffam=\fivebf + \let\chap@font=\eightchap@font + \let\sec@font=\eightsec@font + \let\subsec@font=\eightsubsec@font + \let\subsubsec@font=\eightbf + \def\oldstyle{\fam1\eighti}% + \setspacing + \curfont + \ifundefined{everypointsize}\else\everypointsize{eight}{10}\fi +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% TABLE of CONTENTS Macros % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% This set of macros allows you to build a table of contents for a document +% automatically in TeX. There are only three control sequences which you +% will need to use. The first is \inicont, which initializes the macros. +% This package works by writing the appropriate lines into a file called +% \jobname.toc in your account. This file is read by \printcontents or +% by \printcont in PRINT-PRELIM.TEX. +% +\newwrite\cont@file % Get a free channel to write to +\newif\ifcont@closed +\cont@closedtrue % Haven't opened contents file yet +\newwrite\fig@file +\newwrite\tab@file +\newif\iffig@closed +\fig@closedtrue % Or the list of figures file +\newif\iftab@closed +\tab@closedtrue % Or the tables file + +\def\contitle{\jobname.toc} % Default name of contents file +\def\figtitle{\jobname.lof} % ditto for figures file +\def\tabtitle{\jobname.lot} % ditto for tables file + +% Make sure the contents file is open before writing to it +\def\opencontfile{% + \ifcont@closed + \immediate\openout\cont@file=\contitle + \cont@closedfalse + \fi +} + +% +% This control sequence adds its argument to the table of contents. +% +\def\content#1{% + \opencontfile + \let\\=\space + \write\cont@file{\string\Z{#1}{\the\pageno}}% +} + +% +% This control sequence is the same as \content except that the first +% box written will have two leading spaces to indent it. +% +\def\subcontent#1{% + \opencontfile + \let\\=\space + \write\cont@file{\string\Z{\string\hskip \parindent{}#1}{\the\pageno}}% +} + +% And the same thing for sub-sections +\def\subsubcontent#1{% + \opencontfile + \let\\=\space + \write\cont@file{\string\Z{\string\hskip 2\parindent{}#1}{\the\pageno}}% +} + +% And the same thing for sub-sub-sections +\def\subsubsubcontent#1{% + \opencontfile + \let\\=\space + \write\cont@file{\string\Z{\string\hskip 3\parindent{}#1}{\the\pageno}}% +} + +% Simple table-of-contents printer for \articlestyle. +% For dissertations, use the one in print-prelim.tex. +% Use this macro as the last thing in your report, since it makes +% the page numbers be in romannumerals at the bottom of the page. +\def\printcontents{% + \closeout \cont@file + \null\vfill\supereject % Close output, end last page + \twelvepoint\rm % Make sure we're in normal mode + \pageno=\m@ne % Contents get roman numerals. + \plain@page@numbers % Put page #s at bottom only + \oktell{Table of Contents} + \null \vskip .8in minus\baselineskip + \centerline{\chap@font Contents} + \vskip \tw@\baselineskip + \rightline{Page} + \begingroup % Temporarily change \baselineskip to avoid + % underfull \vbox's during output errors. + \baselineskip=\@ne\baselineskip plus .05\baselineskip + \def\Z##1##2{\line{\ignorespaces##1\leaders + \hbox to.7em{.\hfil}\hfil\hbox to2em{\hss##2}}} + \catcode`@=11 + \let\\=\space + \input\contitle \relax + \endgroup % Also undoes the \catcode change +} + + +%%%%%%%%%%%%%%%%%%%%%%%% +% NUMBERED FOOTNOTES % +%%%%%%%%%%%%%%%%%%%%%%%% + +% First, modify \vfootnote from Plain to use smallertype and singlespace +\def\vfootnote#1{% + \insert\footins\bgroup\tenpoint\singlespace + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox \floatingpenalty\@MM + \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip + \parindent=.13in + \textindent{#1}\footstrut\futurelet\next\fo@t +} + +% Allocate a counter for the numbered footnotes +\newcount\note@count \note@count=\@ne + +\def\nfootnote#1{% + \unskip\footnote{$^{\number\note@count}$}{#1}% + \global\advance\note@count by\@ne +} + +% Same except that trailing period or comma is ``tucked'' under +% the note mark. \ntucknote provides auto numbering. +\def\ntucknote#1#2{\nfootnote{#1}\llap{#2}} +\def\tucknote#1#2#3{\footnote{#1}{#2}\llap{#3}} + + +%%%%%%%%%%%%%%%%%%%% +% UTILITY MACROS % +%%%%%%%%%%%%%%%%%%%% + +% Insert a discretionary hyphen. For use in restricted +% horizontal mode, as in the bibliography. +\def\hyphenbreak{\discretionary{-}{}{-}} + +% Check if a macro name is currently undefined (from The TeXbook) +\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax} + +% Terminal input and output routines and auxilary stuff +\newwrite\undef@out@chan % Allocate a channel for the tty +\def\tell#1{{\let\\=\space\immediate\write\undef@out@chan{#1}}} +\def\ask#1{\read-16 to #1} % Read from tty w/o prompt + +% Sanitize a string before \write'ing it. +% Call with \unexpanded{op}{msg} +% Modified from version in The TeXbook, originally by Todd Allen +\long\def\unexpanded#1#2{% + \def\finwrite{#1}% + {\aftergroup\finwrite\aftergroup{\sanitize@uci#2\endsanity@uci}}% +} +\def\sanitize@uci{\futurelet\next@uci\sanswitch@uci} +\def\sanswitch@uci{\ifx\next@uci\endsanity@uci + \else\ifx\next@uci\\\aftergroup\space\let\next@uci=\eat@uci + \else\ifcat\noexpand\next@uci\space\aftergroup\space\let\next@uci=\eat@uci + \else\ifcat\noexpand\next@uci\bgroup\aftergroup{\let\next@uci=\eat@uci + \else\ifcat\noexpand\next@uci\egroup\aftergroup}\let\next@uci=\eat@uci + \else\let\next@uci=\copytoken@uci\fi\fi\fi\fi\fi \next@uci +} +\def\eat@uci{\afterassignment\sanitize@uci \let\next@uci= } +\long\def\copytoken@uci#1{% + \ifcat\noexpand#1\relax\aftergroup\noexpand + \else\ifcat\noexpand#1\noexpand~\aftergroup\noexpand + \fi + \fi + \aftergroup#1\sanitize@uci +} +\def\endsanity@uci\endsanity@uci{} + +% Now use the sanity stuff to make a sane tell command. This macro +% actually takes one argument, but since it's the last for \unexpanded, +% we avoid scanning it twice by not picking it up here. +\def\sanetell{\unexpanded{\immediate\write\undef@out@chan}} + +% Produce verbatim listings of various sorts + +\def\uncatcodespecials{\def\do##1{\catcode`##1=12 } \dospecials} +\def\setupverbatim{% + \par \tt \spaceskip=\z@ % Want fixed tt spacing now + \obeylines \uncatcodespecials \obeyspaces \verbatimdefs +} + +% This macro turns on verbatim mode until ?endverbatim is seen. +\def\verbatim{% + \begingroup \setupverbatim + \parskip=\z@ plus .05\baselineskip \parindent=\z@ + \catcode`\ =13 \catcode`\^^M=13 \catcode`\?=\z@ + \verbatimgobble +} +{\catcode`\^^M=13{\catcode`\ =13\gdef\verbatimdefs{\def^^M{\ \par}\let =\ }} + \gdef\verbatimgobble#1^^M{}% +} + +% This defines ?endverbatim to end the group which begins with \verbatim +\let\endverbatim=\endgroup + +% Input a file in verbatim mode. Sometimes useful for including +% real-life examples into a paper. +\def\verbfile#1{% + \begingroup\setupverbatim + \parskip=\z@ plus .05\baselineskip \parindent=\z@ + \input#1 \endgroup +} + +% This is the same as the above, but it adds line numbers to each +% line of the file printed. \lineno@uci has the obvious use. +\newcount\lineno@uci +\def\listing#1{% + \lineno@uci=\z@ + \begingroup\setupverbatim + \parskip=\z@ plus .05\baselineskip \parindent=20\p@ + \everypar{\advance\lineno@uci by\@ne \llap{\the\lineno@uci\ \ }}% + \input#1 + \endgroup +} + +% Draw a little qed symbol (black box) +\def\qed{\hbox{\hskip\p@ \vrule width4\p@ height6\p@ depth1.5\p@ \hskip\p@}} + +% Conditions -- from AmSppt +\newif\ifrunin@AmS +\runin@AmSfalse +\let\runin=\runin@AmStrue +\newdimen\cond@dimen +\newdimen\condindent % Amount each nested condition is indented +\condindent=.5in % Default indentation amount + +% This is used in \conditions +\def\firstcon@AmS#1:{% + \ifrunin@AmS + {\rm\ignorespaces#1\unskip}\ignorespaces + \runin@AmSfalse + \else + \par + \ifdim\lastskip<\smallskipamount + \removelastskip \penalty55 \smallskip + \fi + \\#1:% + \fi +} + +% Do one item of the conditions. This is really \\ in disguise. +\def\cond@item#1:{% + \par\noindent + \hbox to \cond@dimen{\hfil\rm\ignorespaces#1\unskip\quad}% + \hangafter1 + \hangindent\cond@dimen\ignorespaces +} + +\cond@dimen=\z@ % Value for outermost block +% Do the main stuff for \conditions. +\def\conditions{% + \par + \let\\=\cond@item + \begingroup + \advance\cond@dimen by\condindent + \firstcon@AmS +} + +% Exit special stuff for \conditions. +\def\endconditions{% + \par\smallbreak\endgroup + \ifdim\cond@dimen>\z@ \cond@item \fi % If ending an inner condition +} + +% Automatically numbered items +\newcount\item@count +\newdimen\item@dimen \item@dimen=\z@ +\def\item@prefix{} +\def\beginitems{% + \begingroup + \advance \parindent by\item@dimen + \ifnum\item@dimen>\z@ + \edef\item@prefix{\item@prefix\number\item@count.} + \else + \item@dimen=1cm + \fi + \item@count=\z@ \singlespace \interlinepenalty=200 +} +\def\enditems{\par\endgroup} +\def\nitem{\advance\item@count by\@ne \item{\item@prefix\number\item@count.}} + +% Turn back on the \+ construct of plain TeX. +\def\tabalign{\us@true\m@ketabbox} +\outer\def\+{\tabalign} + +% Fix AmSTeX's definition used in its definition of ~ (tie). +\def\s@AmS{\penalty\@M\ifx\tok@AmS\Space@AmS\else\ \fi} + +% And make \/ work the way it does in plain.tex +\let\/=\ic@AmS + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PAGE CONTROL and OBJECT MANIPULATION % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% This definition doesn't blow up if you're in vertical mode already +\def\pagebreak{\ifhmode\vadjust{\break}\else\break\relax} + +% This definition clears out all previous inserts etc to +% guarantee that the following stuff is at the top of a page. +\def\clearpage{\vfill\supereject} + +% This macro keeps the stuff in the argument on the same page, leaving +% blank space on this page if necessary +\def\keep{\par\setbox\z@=\vbox\bgroup} +\def\endkeep{% + \egroup + \dimen@=\ht\z@ + \advance\dimen@ by\dp\z@ + \vskip\z@ plus\dimen@ + \penalty\z@ + \vskip\z@ plus-\dimen@ + \vskip\parskip + \box\z@ + \goodbreak +} +\def\filkeep{% + \egroup + \filbreak + \vskip\parskip + \box\z@ + \goodbreak +} + +% List macros from the TeXbook + +\toksdef\ta=\z@ \toksdef\tb=\tw@ +\newif\ifresult@uci + +% usage: \newlist\list +\def\newlist#1{\let#1=\empty} + +% usage: \append{item}\to\list +\def\append#1\to#2{\ta={\\{#1}}\tb=\expandafter{#2}\edef#2{\the\tb\the\ta}} +\def\gappend#1\to#2{\ta={\\{#1}}\tb=\expandafter{#2}\xdef#2{\the\tb\the\ta}} + +% usage: \cardinality\list\to\counter +\def\cardinality#1\to#2{#2=\z@ \long\def\\##1{\advance#2 by\@ne }#1} + +% usage: \ifismember{item}\of\list ... \else ... \fi +\def\ifismember#1\of#2{% + \def\given@uci{#1}% + \result@ucifalse + \def\\##1{% + \def\next@uci{##1}% + \ifx\next@uci\given@uci \result@ucitrue\fi + }% + #2% + \ifresult@uci +} + +% usage: \ifwasmember{item}\of\list ... \else ... \fi +% side effect: removes {item} from \list if present +\def\ifwasmember#1\of#2{% + \newlist\ref@mtr + \def\given@uci{#1}% + \result@ucifalse + \def\\##1{% + \def\next@uci{##1}% + \ifx\next@uci\given@uci + \result@ucitrue + \else + \append ##1\to\ref@mtr + \fi + }% + #2% + \let#2=\ref@mtr + \ifresult@uci +} + +% Append #1 to list #2 if #1 is not already in #2 +\def\addtolist#1\to#2{% + \ifismember#1\of#2% + \else + \append #1\to #2% + \fi +} +% Same thing, but do it \global'ly +\def\gaddtolist#1\to#2{% + \ifismember#1\of#2% + \else + \gappend#1\to#2% + \fi +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% STUFF for BIBLIOGRAPHY and APPENDICES % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Bibliography Package: +% Original version by Michal Spivak +% Updated for JACM format and automated by Tim Morgan +% Final cleanup, and much-improved automation, by Marshall Rose +% Additional work and IEEE support by TM. + +% Simple appendix entry builder +\def\appendix#1#2{% + \par + \clearpage + \ifoddpages + \ifodd\pageno \else \null\vfill\eject\fi + \fi + \pageno@foot + \begingroup + \setbox\z@=\hbox{#1}% + \ifdim\wd\z@>\z@ + \content{Appendix #1: #2}% + \oktell{Appendix #1: #2}% + \def\title{Appendix #1\\#2}% + \else + \content{Appendix: #2}% + \oktell{Appendix: #2}% + \def\title{Appendix\\#2}% + \fi + \let\\=\cr \tabskip=\z@ \chap@font + \halign to\hsize{\centerline{\ignorespaces##\unskip}\cr\title\cr}% + \endgroup + \nobreak + \vskip 1.0in minus 0.15in +} + + +% Citations: +% We keep a running list, \ref@set, which is +% all the things which were \cite'd throughout the paper, with +% only one entry for each different key. +% +% There are three versions of each of the citation +% commands: +% 1. The \def'd version is the normal one used throughout the paper. +% 2. Within a figure, table, etc,'s caption, because of the use of +% \def and \edef, a special version which just produces the +% citation without the \gaddtolist command is used. These +% definitions are predefined, and are \let to be \cite etc with +% \no@cites, for speed. +% +% When the user requests a citation with key, we first look it up +% in a translation table called \key@table, organized as a list of +% pairs, to see if it really should be +% printed differently. The user can specify this translation table using +% the \printkey command. If a key is not in the table, it is printed +% as-is. + +% We keep the dimension \key@size as the largest printed key so far. +% This value can then be used to print the keys in the bibliography +% optimally, rather than just trying to guess. Each time we print a +% (in \use@key), we see if it's longer than \key@size, and if so then +% we set \key@size = its width. +\newdimen\key@size +\key@size=\z@ % Init. value so \key@size is made as small as possible + +% Invisible citation. usage: \icite{key} +\def\icite#1{% + \gaddtolist#1\to\ref@set +} + +% Management of \key@table stuff. This table is formatted as +% \\{real-key}{printed-key}... +\newlist\key@table + +% Add a pair of items to the list. This should be done before any +% citations are made, for obvious reasons. +% #1=real key (the one you use in the paper and bibliography) +% #2=the key that gets printed in the output +\def\printkey#1#2{% + \ta={\\{#1}{#2}}% + \tb=\expandafter{\key@table}% + \xdef\key@table{\the\tb\the\ta}% +} + +% Print a key, looking it up in the table. #1 is \whatever which +% expands to the key used by the user. The definition of \\ here +% makes use of the format of the \key@table, so that the table is +% actually EXECUTED, hence making lookup relatively fast. +\newif\if@not@printed@ +\def\use@key#1{% + \@not@printed@true + \def\\##1##2{% + \if@not@printed@ + \def\temp@uci{##1}% + \ifx\temp@uci#1% + \@not@printed@false + \setbox\z@=\hbox{[##2]\enspace}% + \ifdim\wd\z@>\key@size \global\key@size=\wd\z@ \fi + ##2% + \fi + \fi + }% + \key@table + \if@not@printed@ + \setbox\z@=\hbox{\cite@font[\ignorespaces#1\unskip]\enspace}% + \ifdim\wd\z@>\key@size \global\key@size=\wd\z@ \fi + #1% + \fi +} + +% This macro moves forward until it hits \end, skipping spaces. +% Each time it hits a comma, or when it hits and \end, it +% adds whatever has been collected so far (in \@total) to +% \ref@set and to the output list. It is assumed that \@total +% has been set to \empty before this routine is called (this is done +% by \@@cite, below). +\def\@icite#1{% + \if#1\end + \expandafter\gaddtolist\@total\to\ref@set + \use@key\@total + \let\@next=\relax % Exit loop after this time + \else + \if#1,% % We have a complete key now. + \expandafter\gaddtolist\@total\to\ref@set + \use@key\@total,\space + \global\let\@total=\empty + \else + \xdef\@total{\@total#1}% Add new char to total + \fi + \let\@next=\@icite % Continue looping until done + \fi + \@next +} + +% Initialize and call \@icite. Used in \cite, \citep, \citepp +\def\@@cite#1{\global\let\@total=\empty\@icite#1\end} + +% usage: \cite{key [, key...]} +\def\cite#1{% + {\cite@font[\@@cite{#1}]}% +} + +% usage: \citep{key}{page} +\def\citep#1#2{% + {\cite@font[\@@cite{#1}, \hbox{\rm p \ignorespaces#2\unskip}]}% +} + +% usage: \citepp{key}{pages} +\def\citepp#1#2{% + {\cite@font[\@@cite{#1}, \hbox{\rm pp \ignorespaces#2\unskip}]}% +} + +% These three definitions are used in \no@cites, below. They +% don't handle extraneous spaces as well as the normal +% definition, but they should be sufficient for most people. +\def\i@cite#1{{\cite@font[\noexpand\noexpand\noexpand\@@cite{#1}]}} + +\def\i@citep#1#2{{\cite@font[\noexpand\noexpand\noexpand\@@cite{#1},\space + \hbox{\noexpand\noexpand\noexpand\rm p \ignorespaces#2\unskip}]}% +} + +\def\i@citepp#1#2{{\cite@font[\noexpand\noexpand\noexpand\@@cite{#1},\space + \hbox{\noexpand\noexpand\noexpand\rm pp \ignorespaces#2\unskip}]}% +} + +% Turn off adding citations to \ref@set. This is needed when +% using \cite etc inside a caption for tables, figures, etc. +% \no@cites is undone by exiting an enclosing group. +\def\no@cites{% + \let\citepp=\i@citepp + \let\citep=\i@citep + \let\cite=\i@cite +} + +%%%%%%%%%%%%%%%%%%%%%% +% References Section % +%%%%%%%%%%%%%%%%%%%%%% + +% The basic strategy is as follows. We read the bib. file, which is +% assumed to be in sorted order of keys/author names. Each +% entry is of the form \ref{key}. We see if that key is in the table +% \ref@set, which is a table of all the keys we've \cite'd. If the key +% isn't in the list, we print it in parens and go on to the next entry. +% Otherwise, we print the key in square brackets, and format the +% bibliography entry according to the format (JACM or IEEE). We print a +% warning if the key is in the \ref@seen list. We add the key to +% the \ref@seen list. The key is removed from the \ref@set list if it +% was there. At the end of the references (\endreferences), we check +% if there are any keys left in \ref@set. If so, the bib. file was +% deficient, and we print a warning message (it should probably be a +% fatal error message). + +% Annotation control +\newif\ifinclude@annos % Should annotations be printed? +\include@annosfalse % By default, no +\def\annotate{% % ``official'' command + \include@annostrue + \oktell{Annotating bibliography}% +} + +\newif\ifin@anno % True while doing an annotation +\in@annofalse + +\def\refi@AmS{F} % This starts as False + +% Begin an annotation -- must be in vertical mode. Just gather +% text into box0 for use by \endanno. We do a couple of consistency +% checks at the beginning. +\def\anno{% + \ifhmode + \message{You forgot the \noexpand\endref command!} + \message{I've inserted one for you.} + \endanno + \fi + \if F\refi@AmS + \errmessage{No \noexpand\ref command before first \noexpand\anno} + \fi + \let\\=\newline + \in@annotrue + \setbox\z@=\vbox\bgroup +} + +% End of an annotation. Decide if it should be typeset or skipped. +\def\endanno{% + \egroup % End the group for box0 + \in@annofalse % No longer doing an annotation + \if T\refed@uci % If previous reference was used, + \ifinclude@annos {% And if we're producing an annotated bib., + \vskip\parskip + \interlinepenalty=\defaultinterlinepenalty + \unvbox\z@ % Then include annotation as normal paragraph(s) + \par + }\fi + \fi +} + +\global\newlist\ref@set % list of all references cited +\global\newlist\ref@seen % list of all references defined + +\def\reftitle{References} % Default title for bibliography + +% usage: \references (begin the References section) +\def\references{% + \vfill\supereject % Begin new page, clear out everything + \ifoddpages % Make sure start on even page. + \ifodd\pageno \relax \else \null\vfill\eject \fi + \fi + \begingroup % Following changes are local to bib. + + \twelvepoint % Get good appearance + \singlespace + \no@cites % \cite's just produce [key] + \parskip=0.6\baselineskip plus5\p@ minus4\p@ + \tolerance=5000 % Must be extremely tolerant! + \pretolerance=300 + \interlinepenalty=400 % To discourage breaking a reference + % across page boundaries + \uchyph=\@ne % Needed to try hyphenating title words + \sfcode`.=\@m % Like \frenchspacing, but only for + % periods + + % Now we output the title and so forth. + \centerline{\csc \reftitle}% + \nobreak + \medskip + \content\reftitle % Tell user and TOC. + \oktell\reftitle + \pageno@foot % Put page # in special place + + % Special definitions within reference mode + \let\year=\yr + \let\month=\mon +} + +% usage: \endreferences (end the References section) +\def\endreferences{% + \par % Make sure last printed reference is finished up. + \cardinality\ref@set\to\count@ + \ifnum\count@>\z@ + \def\\##1{[##1] } + \ifnum\count@>1 + \message{Warning: \number\count@\space undefined citations: \ref@set} + \else + \message{Warning: One undefined citation: \ref@set} + \fi + \fi + \endgroup % End of \references group +} + + +% References Database + + +\newbox\bybox@AmS \newbox\bysamebox@AmS +\newbox\paperbox@AmS \newbox\paperinfobox@AmS +\newbox\jourbox@AmS \newbox\jourinfobox@AmS +\newbox\volbox@AmS \newbox\issuebox@AmS +\newbox\monbox@AmS \newbox\yrbox@AmS +\newbox\pagesbox@AmS \newbox\editorbox@AmS +\newbox\bookbox@AmS \newbox\bookinfobox@AmS +\newbox\publbox@AmS \newbox\publaddrbox@AmS +\newbox\finalinfobox@AmS\newbox\wastebox@uci +\newbox\talkbox@AmS \newbox\keybox@AmS +\newbox\editorsbox@AmS + +\def\using@IEEE{F} % By default, not using IEEE format + +% reset a \keyword to the ``not used'' condition +\def\refset@AmS#1{% + \expandafter\gdef\csname is\expandafter\eat@AmS + \string#1@AmS\endcsname{F}\expandafter + \setbox\csname\expandafter\eat@AmS\string#1box@AmS\endcsname=\null +} + +% reset \keyword's +\def\ref@AmS{% + \refset@AmS\key \refset@AmS\finalinfo + \refset@AmS\by \gdef\isbysame@AmS{F}% + \refset@AmS\paper \refset@AmS\paperinfo + \refset@AmS\jour \refset@AmS\jourinfo + \refset@AmS\vol \refset@AmS\issue + \refset@AmS\mon \refset@AmS\yr + \refset@AmS\pages \gdef\ispage@AmS{F}% + \refset@AmS\book \refset@AmS\bookinfo + \refset@AmS\publ \refset@AmS\publaddr + \refset@AmS\editor \refset@AmS\talk + \refset@AmS\editors + \gdef\istoappear@AmS{F}% + \gdef\isinbook@AmS{F}% + \bgroup + \ignorespaces +} + +% usage: \ref{citation} \keywords arguments ... \endref. We make sure +% we aren't still doing an \anno first. +\def\ref#1{% + \ifin@anno + \message{You forgot an \noexpand\endanno command,} + \message{but I forgive you this time.} + \endanno + \fi + \def\refi@AmS{T}% + \ifwasmember#1\of\ref@set + \def\refed@uci{T}% + \okmessage{[#1]}% + \else + \def\refed@uci{F}% + \okmessage{(#1)}% + \fi + \ifismember#1\of\ref@seen + \sanetell{multiply defined: [#1]}% + \else + \append#1\to\ref@seen + \fi + \def\refl@AmS{F}% + \def\\{\egroup\endref@AmS\gdef\refi@AmS{F}\ref@AmS}% + \ref@AmS + \gdef\@total{#1}% + \key \if T\refed@uci + \use@key\@total + \fi\egroup\setbox\wastebox@uci=\hbox\bgroup\ignorespaces +} + +% End of a reference. +% +% Note that \endref@AmS is \let to be whichever \endref@xxx command +% is being used; default is \endref@JACM for JACM format. +% +% If we printed the reference, \endref@AmS will +% have set \bysamebox@AmS to be a box containing a box +% containing a rule and a period. This is unboxed if a subsequent +% reference which gets printed uses \bysame. Otherwise, we here +% save the \by field (if given) so that if a subsequent reference +% using \bysame gets used, we'll know who the author was, even though +% the reference which gave the author(s) wasn't printed. Tricky, huh? +\def\endref{% + \egroup\gdef\refl@AmS{T}% + \if T\refed@uci + \endref@AmS + \else + \if T\isby@AmS + \setbox\bysamebox@AmS=\box\bybox@AmS + \fi + \fi + \par +} + +% define a \keyword. #1=keyword, #2=font to use, or {} +\def\refdef@AmS#1#2{% + \def#1{% + \egroup + \expandafter\gdef + \csname is\expandafter\eat@AmS\string#1@AmS\endcsname{T}% + \expandafter\setbox + \csname\expandafter\eat@AmS\string#1box@AmS\endcsname + =\hbox\bgroup#2\ignorespaces + }% +} + +% define the keywords + +\refdef@AmS\by\by@font \refdef@AmS\paper{} +\refdef@AmS\paperinfo{} \refdef@AmS\jour\book@font +\refdef@AmS\vol\book@font \refdef@AmS\issue{} +\refdef@AmS\mon{} \refdef@AmS\yr{} +\refdef@AmS\pages{} \refdef@AmS\talk{} +\refdef@AmS\book\book@font \refdef@AmS\bookinfo{} +\refdef@AmS\publ{} \refdef@AmS\publaddr{} +\refdef@AmS\finalinfo{} \refdef@AmS\editor{} +\refdef@AmS\jourinfo{} \refdef@AmS\key\cite@font +\refdef@AmS\editors{} + +% These don't fit the normal pattern. +\def\bysame{\egroup\gdef\isbysame@AmS{T}\bgroup} +\def\page{\egroup\gdef\ispage@AmS{T}\setbox\pagesbox@AmS=\hbox\bgroup + \ignorespaces} +\def\toappear{\egroup\gdef\istoappear@AmS{T}\bgroup} +\def\inbook{\egroup\gdef\isinbook@AmS{T}\setbox\bookbox@AmS=\hbox\bgroup + \book@font\ignorespaces +} + +% This is the font we normally print book and journal titles in, but we +% use \twelveit for IEEE format. +\let\book@font=\twelvesl + +% Similarly, this is the font to use for the author's name(s). +% Optionally, the user can ask for the cite font instead (this is +% not necessarily related to use of the IEEE format). +\let\by@font=\twelverm + +% As an option, the user can have the author's name(s) in caps-small-caps. +\def\AuthorsInCSC{% + \let\by@font=\elevencsc + \oktell{Authors in CSC mode}% +} + +% Define some aliases for some of the above, for user convenience. +\let\pp=\pages +\let\pgs=\pages +\let\pg=\page +\let\p=\page +\let\journal=\jour +\let\volume=\vol +\let\author=\by +\let\authors=\by +\let\ieee@editors=\editors % Save it in case we use IEEE format +\let\editors=\editor % If using default JACM format +\let\other=\talk +\let\no=\issue + +% Helpers to \endref@AmS, which speed things up a lot, and/or +% make the code more compact. +\def\a@comma{, } % Used in next routine. Predefined for speed of \let. +\def\setpunct@AmS{\let\prepunct@AmS=\a@comma} +\def\ppunbox@AmS#1{\prepunct@AmS\unhbox#1\unskip} + + +% Actually do some typesetting (finally). As mentioned above, +% \endref@AmS is called to print a reference if we want it. It +% is \let to be either \endref@JACM or \endref@IEEE (or possibly +% some other format in the future) depending on the desired +% format. +% +% For some reason, the ~'s don't see to tie things, so some +% \hbox's were introduced. +% +% There is unfortunately a lot of common code between the +% different formats. Here are some sections which were easy to +% pull out: +\def\endref@startup{% + % Test to see if there is anything in the wastebox + \setbox\wastebox@uci=\hbox{\unhbox\wastebox@uci\unskip}% + \ifdim\wd\wastebox@uci>\z@ + \errmessage{Keyword omitted after \noexpand\ref}% + \fi + \let\prepunct@AmS=\empty + \vskip\parskip + \noindent \hangafter=\@ne +} + +% This is the text printed for the JACM format for papers +% appearing in a book. +\def\appearing@in{Appearing in } + +% Common code at the end of \endref@JACM and \endref@IEEE. +% The argument is the date routine to use. +\def\endref@finishup#1{% + \if T\istalk@AmS + \dimen@=\wd\talkbox@AmS + \ifdim\dimen@>\z@ + \ppunbox@AmS\talkbox@AmS\setpunct@AmS + \fi + \fi + \if T\isbook@AmS + \ppunbox@AmS\bookbox@AmS \setpunct@AmS + \editor@ref + \fi + \if T\isinbook@AmS + \prepunct@AmS\appearing@in\unhbox\bookbox@AmS\unskip \setpunct@AmS + \editor@ref \gdef\isbook@AmS{T}% + \fi + \if T\isbookinfo@AmS + \ppunbox@AmS\bookinfobox@AmS\setpunct@AmS + \fi + \if T\using@IEEE + \if T\ispubladdr@AmS + \ppunbox@AmS\publaddrbox@AmS + \if T\ispubl@AmS \def\prepunct@AmS{: }\else\setpunct@AmS\fi + \fi + \if T\ispubl@AmS + \ppunbox@AmS\publbox@AmS\setpunct@AmS + \fi + \else + \if T\ispubl@AmS + \ppunbox@AmS\publbox@AmS\setpunct@AmS + \fi + \if T\ispubladdr@AmS + \ppunbox@AmS\publaddrbox@AmS\setpunct@AmS + \fi + \fi + \if T\isbook@AmS + \if T\isvol@AmS + \prepunct@AmS Vol.~\unhbox\volbox@AmS\unskip\setpunct@AmS + \fi + \if T\isyr@AmS + \ppunbox@AmS\yrbox@AmS\setpunct@AmS + \fi + \if T\istoappear@AmS + \ (to appear)\setpunct@AmS + \fi + \if T\ispages@AmS + \prepunct@AmS pp.~\unhbox\pagesbox@AmS\unskip\setpunct@AmS + \fi + \if T\ispage@AmS + \prepunct@AmS p.~\unhbox\pagesbox@AmS\unskip\setpunct@AmS + \fi + \fi + \if T\istalk@AmS + #1% This is the date routine to use. + \fi + \if T\isfinalinfo@AmS + \period\unhbox\finalinfobox@AmS + \else + \if T\refl@AmS . + \else ; + \fi + \fi +} + +% Print editor(s) if and as appropriate. +\def\editor@ref{% + \if T\using@IEEE + \if T\iseditor@AmS + \ppunbox@AmS\editorbox@AmS, Ed.\setpunct@AmS + \fi + \if T\iseditors@AmS + \ppunbox@AmS\editorsbox@AmS, Eds.\setpunct@AmS + \fi + \else + \if T\iseditor@AmS + \ppunbox@AmS\editorbox@AmS\ (ed.)\setpunct@AmS + \fi + \fi +} + +% This routine prints the date in the JACM format +\def\date@JACM{% + \if T\isyr@AmS + \/\ (% + \if T\ismon@AmS + \unhbox\monbox@AmS\unskip, + \fi + \unhbox\yrbox@AmS\unskip)\setpunct@AmS + \else + \if T\ismon@AmS + \ppunbox@AmS\monbox@AmS\setpunct@AmS + \fi + \fi +} + +% This prints the date in the IEEE format. +\def\date@IEEE{% + \if T\isyr@AmS + \prepunct@AmS + \if T\ismon@AmS + \unhbox\monbox@AmS\unskip\a@comma + \fi + \unhbox\yrbox@AmS\unskip\setpunct@AmS + \else + \if T\ismon@AmS + \ppunbox@AmS\monbox@AmS\setpunct@AmS + \fi + \fi +} + + +% This version produces JACM format references. +\def\endref@JACM{% + \endref@startup + \if T\refi@AmS + \hbox to \key@size{\cite@font [\unhbox\keybox@AmS\unskip]\hfil}% + \hangindent=\key@size + \if T\isby@AmS + \unhcopy\bybox@AmS\unskip + \def\prepunct@AmS{\hskip7\p@ plus5\p@\relax}% + \setbox\z@=\hbox{\unhbox\bybox@AmS\unskip}% + \dimen@=\wd\z@ % We want \dimen0=max(\wd0, 2in) + \ifdim\dimen@>2in \dimen@=2in \fi + \setbox\bysamebox@AmS=\hbox{\hbox to\dimen@{\leaders\hrule\hfill.}}% + \else + \if T\isbysame@AmS + \unhcopy\bysamebox@AmS\unskip + \def\prepunct@AmS{\hskip7\p@ plus5\p@\relax}% + \fi + \fi + \fi + \if T\ispaper@AmS + \ppunbox@AmS\paperbox@AmS\def\prepunct@AmS{. }% + \fi + \if T\ispaperinfo@AmS + \ppunbox@AmS\paperinfobox@AmS\def\prepunct@AmS{. }% + \fi + \if T\isjour@AmS + \ppunbox@AmS\jourbox@AmS\setpunct@AmS + \editor@ref + \if T\isjourinfo@AmS + \ppunbox@AmS\jourinfobox@AmS\setpunct@AmS + \fi + \if T\isvol@AmS + \ \unhbox\volbox@AmS\unskip + \fi + \if T\isissue@AmS + \ppunbox@AmS\issuebox@AmS\setpunct@AmS + \fi + \date@JACM + \if T\istoappear@AmS + \ (to appear)\setpunct@AmS + \fi + \if T\ispages@AmS + \ppunbox@AmS\pagesbox@AmS\setpunct@AmS + \fi + \if T\ispage@AmS + \prepunct@AmS p.~\unhbox\pagesbox@AmS\unskip\setpunct@AmS + \fi + \fi + \endref@finishup\date@JACM +} + + +% This version produces IEEE format references. +\def\endref@IEEE{% + \endref@startup + \if T\refi@AmS + \hbox to \key@size{\cite@font [\unhbox\keybox@AmS\unskip]\hfil}% + \hangindent=\key@size + \if T\isby@AmS \unhcopy\bybox@AmS\unskip\setpunct@AmS + \setbox\z@=\hbox{\unhbox\bybox@AmS\unskip}% + \dimen@=\wd\z@ % We want \dimen0=max(\wd0, 2in) + \ifdim\dimen@>2in \dimen@=2in \fi + \setbox\bysamebox@AmS=\hbox{\hbox to\dimen@{\leaders\hrule\hfill}}% + \else + \if T\isbysame@AmS + \unhcopy\bysamebox@AmS\unskip\setpunct@AmS + \fi + \fi + \fi + \if T\ispaper@AmS + \prepunct@AmS``\unhbox\paperbox@AmS\unskip,'' + \let\prepunct@AmS=\empty + \fi + \if T\ispaperinfo@AmS + \ppunbox@AmS\paperinfobox@AmS\def\prepunct@AmS{, }% + \fi + \if T\isjour@AmS + \ppunbox@AmS\jourbox@AmS\setpunct@AmS + \editor@ref + \if T\isjourinfo@AmS + \ppunbox@AmS\jourinfobox@AmS\setpunct@AmS + \fi + \if T\isvol@AmS + \prepunct@AmS vol.~\unhbox\volbox@AmS\unskip\setpunct@AmS + \fi + \if T\isissue@AmS + \prepunct@AmS no.~\unhbox\issuebox@AmS\unskip\setpunct@AmS + \fi + \if T\istoappear@AmS + \ (to appear)\setpunct@AmS + \fi + \if T\ispages@AmS + \prepunct@AmS pp.~\unhbox\pagesbox@AmS\unskip\setpunct@AmS + \fi + \if T\ispage@AmS + \prepunct@AmS p.~\unhbox\pagesbox@AmS\unskip\setpunct@AmS + \fi + \if T\ispubladdr@AmS + \ppunbox@AmS\publaddrbox@AmS + \if T\ispubl@AmS \def\prepunct@AmS{: }\else\setpunct@AmS\fi + \fi + \if T\ispubl@AmS + \ppunbox@AmS\publbox@AmS\setpunct@AmS + \fi + \let\ispubl@AmS=F\let\ispubladdr@AmS=F% For finishup routine + \date@IEEE + \fi + \endref@finishup\date@IEEE +} + + +% By default, we use JACM format references +\let\endref@AmS=\endref@JACM + +% But it's possible to get the other format +\def\IEEE{% + \gdef\using@IEEE{T}% Now we're using IEEE format. + \let\editors=\ieee@editors + \let\endref@AmS=\endref@IEEE + \refdef@AmS\vol{}% Vol not printed in slanted any more. + \global\let\appearing@in=\empty % Don't say that in IEEE format. + \let\volume=\vol + \let\book@font=\twelveit % Book and journal titles in this font. + \oktell{IEEE Bibliography Style}% +} + + +% References Dump + +\newwrite\dump@file + +\catcode`\{=12 \catcode`\}=12 \catcode`\%=12 \catcode`\[=1 \catcode`\]=2 +\def\ref@open[{] +\def\ref@close[}] +\def\ref@comment[%] +\catcode`\{=1 \catcode`\}=2 \catcode`\%=14 \catcode`\[=12 \catcode`\]=12 + +\def\refdump{% + \vfill\supereject + \begingroup + \content\reftitle + \tell{Dumping \reftitle\space to refdump.tex}% + \immediate\openout\dump@file=refdump + \immediate\write\dump@file{% + \noexpand\catcode`\noexpand\@=11 ^^J% + \noexpand\let\noexpand\content=\noexpand\eat@AmS^^J% + \noexpand\pageno=\the\pageno^^J% + \noexpand\def\noexpand\ref@set\ref@open\ref@comment + }% + \def\\##1{\immediate\write\dump@file{ \noexpand\\{##1}\ref@comment}}% + \ref@set + \immediate\write\dump@file{% + \ref@close^^J% + }% + \immediate\closeout\dump@file + \endgroup +} + + +%%%%%%%%%%%%%%%%%%%% +% OUTPUT CONTROL % +%%%%%%%%%%%%%%%%%%%% + +% Control for informational messages. Default is \verbose mode. +\newif\iftell@all +\let\verbose=\tell@alltrue +\let\quiet=\tell@allfalse +\verbose +\def\oktell#1{\iftell@all\tell{#1}\fi} +\def\okmessage#1{\iftell@all\message{#1}\fi} + +% Chapter macro parameters +\newcount\chapterno +\chapterno=\z@ % Number of current chapter +\newif\ifnumber@chapters +\number@chapterstrue % By default, number the chapters +\def\nochapternumbers{% + \number@chaptersfalse + \oktell{No Chapter Numbers mode}% +} + +% Same thing for sections, subsections, etc +\newcount\sectno \sectno=\@ne +\newcount\subsectno \subsectno=\@ne +\newcount\subsubsectno \subsubsectno=\@ne +\newif\ifnumber@sections +\def\numbersections{% + \number@sectionstrue + \oktell{Section Numbers mode}% +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%% +% OUTPUT CONTROL MACROS % +%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +% Center, left justify, right justify -- avoid exceeding margins +\def\centerline#1{\line{\hfill#1\hfill}} +\def\leftline#1{\line{#1\hfill}} +\def\rightline#1{\line{\hfill#1}} +\def\threepart#1#2#3{\line{\hskip\leftskip\rlap{#1}\hfill#2\hfill + \llap{#3}\hskip\rightskip}} + +% End of the main body of the document +\let\enddiss=\bye + +% Summary Information +\outer\def\showsummary{% + \begingroup + \def\note##1##2##3##4{% + \count@=##1 + \advance\count@ by##3 + \ifcase\count@ + \message{No ##2s##4}\or + \message{1 ##2##4}\else + \message{\the\count@\space ##2s##4}\fi + }% + \note\fignumber{figure}{-1}{,}% + \note\tablenumber{table}{-1}{,}% + \note\note@count{footnote}{-1}{,}% + \cardinality\ref@set\to\count@ + \note\count@{citation}{0}{.}% + \endgroup +} + + +% Real version of ragged right margins +\def\raggedright{% + \rightskip=\z@ plus 2em + \oktell{Raggedright mode}% +} + +% Disallow hyphenation -- a very dangerous thing +\def\nohyphens{% + \hyphenpenalty=\@M\tolerance=500\pretolerance=\@M + \oktell{Nohyphens mode}% +} + +% Allow capitalized words to be hyphenated +\def\hyphenall{% + \uchyph=\@ne + \oktell{Hyphenating all words}% +} + +% Handle a long quotation in a standard way +\def\bigquote#1\endbigquote{% + \par + \vskip \baselineskip \vskip -\parskip + { \advance\rightskip by30\p@ + \advance\leftskip by30\p@ + \smallertype + \singlespace + \let\\=\newline + \noindent\llap{``}\ignorespaces#1\unskip''\par + }% End of singlespacing and special indentation + \vskip \baselineskip \vskip -\parskip +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% CHAPTERS, SECTIONS, FIGURES, TABLES % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% What to do at the beginning of a chapter +\def\chapter#1\endchapter{ + \chapter@base #1\endchapter + \oktell{Chapter \number\chapterno: #1} + \content{Chapter \number\chapterno: #1} +} + + +% This boolean controls whether chapters are made to start only on +% odd pages. +\newif\ifoddpages +\oddpagesfalse +\def\twosided{% This is the ``official'' command + \oddpagestrue + \oktell{Twosided mode}% +} + +% The guts of the \chapter command. \chapter==\chapter@base when +% in \articlestyle. +\def\chapter@base#1\endchapter{ + \par + \clearpage % Clean up from prev chapter + \ifoddpages % Make sure start on even page. + \ifodd\pageno \relax \else \null\vfill\eject \fi + \fi + \pageno@foot % Page #ing special for chap pages + \advance\chapterno by\@ne + \ifnumber@chapters + \centerline{\chap@font CHAPTER \number\chapterno}% Do heading + \fi + \sectno=\z@ + \subsectno=\z@ + \subsubsectno=\z@ + {\let\\=\cr \tabskip=\z@ \chap@font % Center the chapter title + \halign to\hsize{\centerline{\ignorespaces##\unskip}\cr#1\cr} + } + \nobreak % Shouldn't happen anyway + \vskip 1.0in minus 0.15in +} + +% What to do at the beginning of a section +\outer\def\section{\dosection} +\def\dosection#1{% + \skip@=\lastskip % \par resets \lastskip, apparently + \par + % This junk trys to provide consistent spacing + \dimen@=\baselineskip + \ifdim\skip@<\dimen@ + \ifdim\skip@=\z@ + \penalty-200 + \fi + \vskip \dimen@ plus .5\baselineskip + \fi + \ifnumber@sections + \advance\sectno by\@ne + \subsectno=\z@ + \subsubsectno=\z@ + \leftline{\sec@font\number\sectno. #1} + \else + \leftline{\sec@font#1} + \fi + \subcontent{#1} + \sanetell{ Section: #1} + \nobreak + \vskip \z@ plus .15\baselineskip + \vskip -\parskip +} + +% And for sub-sections +\outer\def\subsection{\dosubsection} +\def\dosubsection#1{% + \skip@=\lastskip + \par + \dimen@=.6\baselineskip + \ifdim\skip@<\dimen@ + \ifdim\skip@=\z@ + \penalty-100 + \fi + \vskip \dimen@ plus .3\baselineskip + \fi + \ifnumber@sections + \advance\subsectno by\@ne + \subsubsectno=\z@ + \leftline{\subsec@font\number\sectno.\number\subsectno. #1} + \else + \leftline{\subsec@font#1} + \fi + \subsubcontent{#1} + \sanetell{ \\Subsection: #1} + \nobreak + \vskip \z@ plus .1\baselineskip + \vskip -\parskip +} + +% And for sub-sub-sections +\outer\def\subsubsection{\dosubsubsection} +\def\dosubsubsection#1{% + \skip@=\lastskip + \par + \dimen@=.5\baselineskip + \ifdim\skip@<\dimen@ + \ifdim\skip@=\z@ + \penalty-50 + \fi + \vskip \dimen@ plus .3\baselineskip + \fi + \ifnumber@sections + \advance\subsubsectno by\@ne + \leftline{\subsubsec@font\number\sectno.\number\subsectno + .\number\subsubsectno. #1} + \else + \leftline{\subsubsec@font#1} + \fi + \subsubsubcontent{#1} + \sanetell{ \\\\Subsubsection: #1} + \nobreak + \vskip -\parskip +} + +% This is an alternate definition for plain TeX's \@ins, +% omitting the \par. It is for use during \figure etc. Reason: +% If you use \figure right after \section, it would otherwise +% become a legal place for a page break. +\def\@ins@uci{\begingroup\setbox\z@\vbox\bgroup} + +% This is \endinsert from plain.tex, but \midinsert's are not converted +% to \topinsert's, since that can lead to figures getting out of order. +% This can lead to excessive blank space at the bottom of the page, but +% that's life. Makes use of \keep...\endkeep type stuff. +\def\endinsert{\egroup % finish the \vbox + \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ + \advance\dimen@12\p@ + \vskip\z@ plus\dimen@ + \penalty\z@ + \vskip\z@ plus-\dimen@ + \bigskip\box\z@\bigbreak + \else\insert\topins{\penalty100 % floating insertion + \splittopskip\z@skip + \splitmaxdepth\maxdimen \floatingpenalty\z@ + \ifp@ge \dimen@\dp\z@ + \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero + \else \box\z@\nobreak\bigskip\fi}\fi\endgroup} + + +% This macro provides rudamentary support for figures. The +% argument to \figure is the name of the file containing the tpic (or whatever) +% output. The second argument is the caption for the picture. +% As usual, TeX's delayed paging and midinserting causes expansion-timing +% problems which have to be kludged around. +\newif\iftopfigs \topfigstrue +\def\domidfigs{% + \topfigsfalse + \oktell{Midfigs mode}% +} + +% Counters for figures/diagrams/examples and tables +\newcount\fignumber \fignumber=\@ne +\newcount\tablenumber \tablenumber=\@ne + +% Helper for \figure, \example, and \diagram. Define \lastfigure and +% \this@insert, increment the figure number for next time, and make sure +% the figures list file is open for writing. +% #1=the caption, to be written to the figures list file +\def\advance@figno#1{% + \xdef\lastfigure{\the\fignumber}% Remember the current figure number + \begingroup\no@cites + \let\\=\space + \xdef\this@insert{\write\noexpand\fig@file{\noexpand\noexpand + \noexpand\listfig{\lastfigure}{#1}% + {\noexpand\number\noexpand\pageno}% + }% + }% + \endgroup + \global\advance\fignumber by\@ne + \iffig@closed % Open figures file if not already + \immediate\openout\fig@file=\figtitle + \global\fig@closedfalse + \fi +} + +% Bump the table number after defining \lasttable. Prepare \this@insert. +% Define \table@caption. +\def\advance@tablenumber#1{% + \xdef\lasttable{\the\tablenumber}% Remember the current figure number + \begingroup \no@cites \let\\=\space + \xdef\this@insert{\write\noexpand\tab@file{\noexpand\noexpand + \noexpand\listfig{\lasttable}{#1}% + {\noexpand\number\noexpand\pageno}% + }% + }% + \endgroup + \global\advance\tablenumber by\@ne + \gdef\table@caption{#1}% +} + +\newif\ifpage@figs \page@figsfalse + +% Special mode to put figures/diagrams/examples on separate pages +\def\pagefigs{% + \oktell{Page Figures mode}% + \page@figstrue +} + +% Usage: \figure{filename}{caption with \\'s} +\def\figure#1#2{% + \begingroup % Hide anything that crazy user does! + \advance@figno{#2}% + % Now do mid or top insert as appropriate + \let\@ins=\@ins@uci + \ifpage@figs + \shipout\vbox to\vsize\bgroup + {\smallertype\rm\input #1\relax\centerline{\box\graph}}% + \vfill + \centerline{Figure \lastfigure}\this@insert + \egroup + \else \iftopfigs \topinsert \else \midinsert \fi + \hrule + \vskip .5\baselineskip + {\smallertype\rm\input #1\relax\centerline{\box\graph}}% + \vskip .5\baselineskip plus .5\baselineskip + \centerline{\twelvebf Figure \lastfigure}% + \this@insert + \let\\=\cr \tabskip=\z@ + \halign to\hsize{\centerline{\ignorespaces##\unskip}\cr#2\cr}% + \vskip2\p@ + \hrule + \endinsert + \fi + \endgroup +} + + +% Allow user to specify arbitrary diagrams. The arguments are: +% #1=name of the file containing the commands to form the diagram, +% #2=caption for the figure, possibly containing \\'s. +\def\diagram#1#2{% + \begingroup + \advance@figno{#2}% + % Do mid or top insert as appropriate + \let\@ins=\@ins@uci + \ifpage@figs + \shipout\vbox to\vsize\bgroup + {\smallertype\rm\input #1\relax}% + \vfill + \centerline{\twelverm Figure \lastfigure}\this@insert + \egroup + \else \iftopfigs \topinsert \else \midinsert \fi + \hrule + \vskip .5\baselineskip + {\smallertype\rm\input #1\relax}% + \vskip .5\baselineskip plus .5\baselineskip + \centerline{\twelvebf Figure \lastfigure}% + \this@insert + \let\\=\cr \tabskip=\z@ + \halign to \hsize{\centerline{\ignorespaces##\unskip}\cr#2\cr}% + \vskip2\p@ + \hrule + \endinsert + \fi + \endgroup +} + + +% Allow user to include verbatim examples from files. The arguments are: +% #1=name of the file containing the text of the example, +% #2=caption for the figure, possibly containing \\'s. +\def\example#1#2{% + \begingroup + \advance@figno{#2}% + % Do mid or top insert as appropriate + \let\@ins=\@ins@uci + \ifpage@figs + \shipout\vbox to\vsize\bgroup + \vbox{\smallertype\singlespace\verbfile{#1}}% + \vfill + \centerline{\twelverm Figure \lastfigure}\this@insert + \egroup + \else \iftopfigs \topinsert \else \midinsert \fi + \hrule + \vskip .5\baselineskip + \vbox{\smallertype\singlespace\verbfile{#1}}% + \vskip .5\baselineskip plus .5\baselineskip + \centerline{\twelvebf Figure \lastfigure}% + \this@insert + \let\\=\cr \tabskip=\z@ + \halign to \hsize{\centerline{\ignorespaces##\unskip}\cr#2\cr}% + \vskip2\p@ + \hrule + \endinsert + \fi + \endgroup +} + + +% Similar thing for tables +% usage: \table{caption} ...text... \endtable +\def\table#1{% + \begingroup % Hide user zingers + \advance@tablenumber{#1}% + \setbox\z@=\vbox\bgroup +} + + +% End of the table body specification. +\def\endtable{% + \egroup % End the definition of \box0. + % Now do top or mid insert + \let\@ins=\@ins@uci + \iftab@closed % Open output file if necessary + \immediate\openout\tab@file=\tabtitle + \global\tab@closedfalse + \fi + \ifpage@figs + \shipout\vbox to\vsize\bgroup + \box\z@ + \vfill + \centerline{\twelverm Table \lasttable}\this@insert + \egroup + \else \iftopfigs \topinsert \else \midinsert \fi + \hrule + \vskip .5\baselineskip + \box\z@ % Insert the material here. + \vskip .5\baselineskip plus .5\baselineskip + \centerline{\twelvebf Table \lasttable}% + \this@insert + \let\\=\cr \tabskip=\z@ + \halign to\hsize{\centerline{\ignorespaces##\unskip}\cr\table@caption + \cr}% + \vskip2\p@ + \hrule + \endinsert + \fi + \endgroup +} + + +% End of the table body specification for a full-page table. +\def\endtablepage{% + \egroup % End the definition of \box0. + % Now do top or mid insert + \let\@ins=\@ins@uci + \iftab@closed % Open output file if necessary + \immediate\openout\tab@file=\tabtitle + \global\tab@closedfalse + \fi + \ifpage@figs + \shipout\vbox to\vsize\bgroup + \box\z@ + \vfill + \centerline{\twelverm Table \lasttable}\this@insert + \egroup + \else \pageinsert + \hrule + \vskip .5\baselineskip + \box\z@ % Insert the material here. + \vskip .5\baselineskip plus .5\baselineskip + \centerline{\twelvebf Table \lasttable}% + \this@insert + \let\\=\cr \tabskip=\z@ + \halign to\hsize{\centerline{\ignorespaces##\unskip}\cr\table@caption + \cr}% + \vskip2\p@ + \hrule + \endinsert + \fi + \endgroup +} + +% Environment for report generation -- use only at the beginning! +% Since sections are the biggest division, the table of contents +% stuff is redefined, and chapter numbering is turned off so that +% \chapter can be used for the first-page title. The title page +% gets no page number (page # 0). The user can get to the +% normal chapter font as \titlefont, and the section font as +% \authorfont. +\def\articlestyle{% + \nochapternumbers + \let\subsubsubcontent=\subsubcontent + \let\subsubcontent=\subcontent + \let\subcontent=\content + \let\chapter=\chapter@base + \pageno=\z@ + \let\titlefont=\chap@font + \let\authorfont=\sec@font + \oktell{Articlestyle mode}% +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% PAGE NUMBERING and OUTPUT ROUTINES % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% This macro produces a blank, numbered page of output +\def\blankpage{\pageinsert \null\vfill \endinsert} + +% This defintion of \folio differs from Plain's in that (a) page +% numbers are printed in 12pt, and (b) roman numeral ones are +% printed in italics. It makes use of a trick, that +% \romannumeral0 produces no output, which we need for title +% pages and things, so we make their page numbers be 0. +\def\folio{\ifnum\pageno>\z@ + {\twelverm\number\pageno}\else + {\twelveit\romannumeral-\pageno}\fi +} + +% Permanent definitions of macros which get switched in and out +% with \let's. Do not change any of these !!! +\def\uci@headpage{\hfill\folio} +\def\uci@footpage{\hfill\folio\hfill} +\headline={\uci@headline} +\footline={\uci@footline} + +% If this is used as the footline, it causes a page number to be +% printed, but with the side-effect of making the headline blank +% and the footline a page number again. This is used on pages +% like the first of a chapter. +\def\no@foot{% + \uci@footpage + \global\let\uci@footline=\hfil + \global\let\uci@headline=\uci@headpage +} + +% This macro causes the page number to be at the bottom of the current +% page, and after it has been used there once, it moves to the +% top right of each page. It also sets \dimen\topins=0pt so that +% any material \topinsert'd on these pages will get carried over +% to subsequent pages. +\def\pageno@foot{% + \dimen\topins=\z@ + \let\uci@headline=\hfil + \let\uci@footline=\no@foot +} + +% Executing this causes page numbers to be at the bottom only, as +% with the plain TeX format. +\def\plain@page@numbers{% + \let\uci@headline=\hfil % Initial values similar to plain's + \let\uci@footline=\uci@footpage +} + +% Change plain's \makeheadline and \makefootline to position page +% numbers as required. +\def\makeheadline{% + \vbox to\z@{\vskip-22.65\p@ + \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip +} +\def\makefootline{\baselineskip=1.6cm\line{\the\footline}} + +% Define an output routine which will restore \dimen\topins +% after \chapter, \references, etc, title pages, which have +% \dimen\topins=0pt +\def\dissoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}% + \advancepageno \global\dimen\topins=\vsize + \ifnum\outputpenalty>-\@MM \else\dosupereject\fi +} +\let\output@AmS=\dissoutput +\dimen\topins=\vsize % Don't insert more than will fit on one page + +% Output Routines: We adjust the \raggedbottom command of plain +% TeX so that the extra space is no more than 1in, and so that +% the space is put above footnotes instead of below. NOTE: Since +% we put a \vfil below the page contents, the topskip glue will +% never actually be stretched. Its stretchability is just to +% let TeX know about the raggedness in computing when to make a +% page break. Since it's 1in, the \vfil will never be stretched to +% more than that amount. + +\def\raggedbottom{\topskip=\normal@topskip plus1in \r@ggedbottomtrue + \oktell{Ragged bottom mode}} +\def\normalbottom{\topskip=\normal@topskip\r@ggedbottomfalse + \oktell{Normal bottom mode}} + +\def\pagecontents{% + \ifvoid\topins\else\unvbox\topins\fi + \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255 + \ifr@ggedbottom \kern-\dimen@ \vfil\fi + \ifvoid\footins \else % footnote info is present + \vskip\skip\footins + \footnoterule + \unvbox\footins + \fi +} + + +%%%%%%%%%%%%%%%%%%%% +% INITIALIZATION % +%%%%%%%%%%%%%%%%%%%% + +\font@no=0 % Default font=\rm, +\twelvepoint % point size, +\doublespace % and spacing +\plain@page@numbers % Page nos like plain's + +% Note that normally in AmSTeX, the @ character may not be used. +% But in the dissertation style, @ may be used as a normal character, +% As it can in plain TeX. +\catcode`\@=12 + +% Eat any further \documentstyle commands +\def\documentstyle#1{} + +% This prints out our welcome message, and it computes the time +% and date string once per run, which saves time if they're used +% more than once. Since \catcode`@=12 at the time this is +% executed, it can't contain any @-type macros. +\everyjob={% + \begingroup + \xdef\today{% + \ifcase\month + \the\month\or + January\or + February\or + March\or + April\or + May\or + June\or + July\or + August\or + September\or + October\or + November\or + December\else + \the\month + \fi\space\the\day, \the\year + }% + \count0=\time + \count1=\count0 + \divide\count0by60 + \count2=\count0 + \multiply\count0by60 + \advance\count1by-\count0 + \ifnum\count2>11 + \ifnum\count2>12 \advance\count2by-12\fi + \def\ampm{PM}% + \else + \ifnum\count2=0 \advance\count2by12\fi + \def\ampm{AM}% + \fi + \xdef\daytime{% + \ifnum\count2<10 0\fi \the\count2:% + \ifnum\count1<10 0\fi \the\count1 + \ampm + }% + \endgroup + \tell{AmSTeX Dissertation Style, version \version}% +} + +\edef\temp@uci{\the\everyjob} +\temp@uci diff --git a/docs/historical/doclib/sfwmac.tex b/docs/historical/doclib/sfwmac.tex new file mode 100644 index 0000000..ee42e24 --- /dev/null +++ b/docs/historical/doclib/sfwmac.tex @@ -0,0 +1,120 @@ +% Support for writing UNIX-style documentation (based on webmac.tex) + + +\catcode`\@=11 % for a little while + + +% More fonts + +\font\sixteentex=cmtex10 scaled\magstep2 +\font\twelvetex=cmtex10 scaled\magstep1 +\font\tentex=cmtex10 +\font\eighttex=cmtex10 + +\def\curfont{% + \ifcase\font@no + \rm\or + \it\or + \sl\or + \bf\or + \tt\or + \sc\or + \sf\or + \tx + \else \errmessage{font madness}\fi +} + +\chardef\AM=`\& % ampersand +\chardef\BS=`\\ % backslash +\chardef\LB=`\{ % left brace +\chardef\RB=`\} % right brace +\def\LQ{{\tt\char'22}} % left quote +\def\RQ{{\tt\char'23}} % right quote +\def\SP{{\tt\char`\ }} % space +\chardef\TL=`\~ % tilde +\chardef\UL=`\_ % underline + +\def\everypointsize#1#2{% + \def\tx{% + \font@no=8 + \csname#1tex\endcsname + \let\&=\AM \let\\=\BS \let\{=\LB \let\`=\LQ + \let\}=\RB \let\'=\RQ \let\ =\SP \let\~=\TL + \let\_=\UL + }% +} + +\curtype + + +% Standard Characters + +\def\#{\hbox{\tt\char`\#}} % parameter sign +\def\${\hbox{\tt\char`\$}} % dollar sign +\def\%{\hbox{\tt\char`\%}} % percent sign +\def\^{\ifmmode\mathchar"222 \else\char`^ \fi} % pointer or hat + + +% Examples + +\def\eg#1{\hbox{\tx``#1''}} % in-line + +\def\example#1\endexample{% % multi-line + $$% + \displayindent=\leftskip + \advance\displayindent by1.5\parindent + \let\\=\cr + \tabskip=0pt + \halign{% + \leftline{\tx\ignorespaces##\unskip}\cr + #1\cr + }$$% +} + + +% Miscellany + +\def\pgm#1{{\it#1}} % UNIX programs +\def\man#1(#2){\pgm{#1\/}(#2)} % manual entries +\def\arg#1{\hbox{\tx`{}#1'{}}} % arguments to programs +\def\switch#1{\hbox{\tx`{}-#1'{}}} % switches to programs +\def\file#1{\hbox{\sl#1}} % filename +\def\bq#1{`{}#1`{}} % back-quoted command + + +% Commonly used software systems + +\def\EMACS/{{\sf EMACS}} +\def\INFO/{{\sf INFO}} +\def\MLisp/{{\sf MLisp}} + +\def\MH/{{\sf MH}} +\def\UUCP/{{\sf UUCP}} +\def\SendMail/{{\sf SendMail}} +\def\Mail/{{\sf Mail}} +\def\sequences/{{sequences}} +\def\mh#1{{\sf mh.#1}} +\def\context/{\file{context}} +\def\profile/{\file{.mh\_profile}} +\def\whatnow/{{\tx What now?\/}} + +\def\MMDF/{{\sf MMDF}} +\def\MMDFII/{{\sf MMDF-II}} + +\def\AMSPPT.STY/{{\tt amsppt.sty}} +\ifundefined{AmsTeX} + \def\AmSTeX{% + $\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em + $\cal S$-\TeX + }% +\fi + +\def\DISS.STY/{{\tt diss.sty}} +\def\PhDTeX{PhD-\TeX} + +\def\ROFF/{{\sf ROFF}} + +\def\TTYD/{{\sf TTYD}} + + +\catcode`\@=12 % back to normal diff --git a/docs/historical/doclib/trademark.tex b/docs/historical/doclib/trademark.tex new file mode 100644 index 0000000..926f720 --- /dev/null +++ b/docs/historical/doclib/trademark.tex @@ -0,0 +1,53 @@ +% Trademarks... + +\def\gobble#1{} + +\def\tradeORGfont{\sc} % used for organizations (e.g., ACM) +\def\tradeNAMfont{\sf} % used for names (e.g., Ada) + +\def\tradeorg#1{\tradeaux{#1}{\expandafter\gobble\string#1}\empty\tradeORGfont} +\def\tradename#1#2#3{\tradeaux{#1}{#2}{#3}\tradeNAMfont} +\def\trademark#1#2{% + \tradeaux{#1}{\expandafter\gobble\string#1}{#2}\tradeNAMfont +} + +\def\tradeaux#1#2#3#4{% + \def#1/{\relax}% % in case #3 references #1 + \setbox0=\hbox{#3}% % when we make the \hbox + \ifdim\wd0>0pt + \gdef#1/{% + \tradeaux{#1}{#2}\empty{#4}% + #1/\nfootnote{#1/ is a trademark of #3.}% + }% + \else + \gdef#1/{{#4#2}}% + \fi +} + +\tradeorg\acm +\tradeorg\ansi +\tradename\Ada{Ada} + {the Department of Defense (\Ada/ Joint Program Office)} +\tradeorg\bsd +\tradeorg\ccitt +\tradename\cms{CMS} {International Business Machines, Incorporated} +\tradename\cpm{CP/M} {Digital Research Corporation} +\tradename\decnet{DECnet} {Digital Equipment Corporation} +\tradeorg\dod +\tradename\ethernet{Ethernet} {the Xerox Corporation} +\tradename\eunice{Eunice} \empty +\tradeorg\ieee +\tradename\lattice{Lattice} {Lattice, Incorporated} +\tradename\locus{Locus} {Locus Computing Corporation} +\tradename\msdos{MS-DOS} {Microsoft Corporation} +\tradeorg\milstd +\tradename\pcinterface{PC-Interface}% + {Locus Computing Corporation} +\tradename{\tops20}{Tops20} {Digital Equipment Corporation} +\tradename\trustedmail{Trusted\ Mail}% + {Trusted Technologies, Incorporated} +\tradename\unix{UNIX} {AT\&T Bell Laboratories} +\tradename\vax{VAX} {Digital Equipment Corporation} +\tradename\vm{VM} {International Business Machines, Incorporated} +\tradename\vms{VMS} {Digital Equipment Corporation} +\tradename\xenix{Xenix} {Microsoft Corporation} diff --git a/docs/historical/mh4/MHCHANGES b/docs/historical/mh4/MHCHANGES new file mode 100644 index 0000000..1488917 --- /dev/null +++ b/docs/historical/mh4/MHCHANGES @@ -0,0 +1,347 @@ + MHCHANGES from mh.3 to mh.4 + + +Wed Feb 17 14:47:18 1984 PostMaster (agent: Marshall Rose) + + Decide that mh.3 is finished. This file keeps track of the + changes made between the mh.3 and mh.4 versions. Note that it's + being kept in add-source-change format instead of the usual + add-change-log-entry format. + + +Thu Feb 16 10:19:12 1984 PostMaster (agent: Marshall Rose) + + uip/bbr.c - Have bbr use a different prompt based on the name it + was invoked with. This is useful, since it used to use the same + prompt as "ex". This got confusing since sometimes you'd be + editing a file in ex while composing a message from bbr. + + +Fri Feb 17 09:10:55 1984 Rand MH System (agent: John Romine) + + uip/bbc.c: output last update date with -topics in short form + instead of local leaders. local leaders are listed with the other + fields with -topics -verbose. + + +Sat Mar 31 08:26:29 1984 PostMaster (agent: John Romine) + + uip/mhmail.c: unlink temp file when exiting due to null input. + + +Mon Apr 2 07:34:35 1984 PostMaster (agent: John Romine) + + uip/refile.c: remove(): bug fix. call delete-prog if (filep > 0) + instead of if (filep > 1). + + +Fri Apr 6 10:52:26 1984 PostMaster (agent: + + uip/show.c: mhl wasn't seeing its name so it wasn't checking its + profile entry. (fix from spencer thomas at utah-gr). + + +Sat Jun 30 12:28:21 1984 Rand MH mail system (agent: Marshall Rose) + + sbr/m_getdefs.c: make sure $MH is non-empty before using it. + + +Sat Jun 30 12:28:48 1984 Rand MH mail system (agent: Marshall Rose) + + config/mh.h: compact msgs structure a bit. Also add new entry, + mp -> attrstats, which tells if the corresponding attribute named + in mp -> msgattrs is public or private. + + +Sat Jun 30 12:29:53 1984 Rand MH mail system (agent: Marshall Rose) + + config/mh.h: Raise MAXFOLDER to 2K-1 and modify DMAXFOLDER as + appropriate. Also, make LOWSEL dependent on MAXFOLDER. + + +Sat Jun 30 16:23:01 1984 Rand MH mail system (agent: Marshall Rose) + + Add the SMTP option to the SendMail configuration. Extend + post/send to accept -mail, -soml, -saml, and -send. Also add + -client host and -server host. + + +Sat Jun 30 16:23:20 1984 Rand MH mail system (agent: Marshall Rose) + + Add the -[no]public switches to bbr$mark, bbr$pick, mark, and pick. + + +Sat Jun 30 16:40:22 1984 Rand MH mail system (agent: Marshall Rose) + + sbr/m_edit.c: On first edit, if "-editor pgm" not specified, try + to use $EDITOR prior to using the profile entry for editor. + + +Sat Jun 30 23:27:27 1984 Rand MH mail system (agent: Marshall Rose) + + uip/send: if $SIGNATURE is empty, and there's a "signature" entry + in the profile, set $SIGNATURE to that for post. + + +Mon Jul 2 02:07:37 1984 Rand MH mail system (agent: Marshall Rose) + + uip/post, uip/send: rework BCC handling to allow the use of a + filter file. + + +Sat Jul 7 01:03:02 1984 Rand MH mail system (agent: Marshall Rose) + + sbr/m_edit.c: #undef the $EDITOR stuff, maybe it's not such a good + idea... + + +Sat Jul 7 18:51:02 1984 Rand MH mail system (agent: Marshall Rose) + + mhmts/hosts.c: add '#include ' for #ifdef BSD42. + sbr/m_gmsg.c: fix initializatino of flags[]. + uip/whom.c: close down fd:s, just like send does, to avoid the + infamous "too many open" files error with the MMDFMTS version + of post. + uip/pick.c: fix-up "[Folder xyz being re-used]" message. It was + using the wrong string for the folder name. + + +Sun Jul 8 23:58:56 1984 Rand MH mail system (agent: Marshall Rose) + + uip/bbr.c: add the hidden "-prompt string" switch for JLR. + + +Mon Jul 9 00:01:01 1984 Rand MH mail system (agent: Marshall Rose) + + uip/prompter.c: with BSD42, do a clearerr() on stdin when we get + an EOF. Otherwise, with an EOF in the headers, we lose big... + + +Mon Jul 9 14:48:51 1984 Rand MH mail system (agent: Marshall Rose) + + config/mh.h: add extern char *version. + sbr/help.c: have help() print out program name and version info. + conf/makefiles/uip: use version.sh to create version.c for loading + with uip:s. + + +Mon Jul 9 17:05:09 1984 Rand MH mail system (agent: Marshall Rose) + + sbr/showfile.c: take arg vector from caller. + uip/show.c: new "-file file" switch for showfile. + sbr/m_edit.c: take arg vector from caller. If present, give to + editor in exec. + + +Mon Jul 9 23:15:20 1984 Rand MH mail system (agent: Marshall Rose) + + uip/{scan,inc,bbr}.c: new switches -[no]size to show the size + of the message. + uip/scansbr.c: implement -size for scan, inc, and bbr$scan. + uip/folder.c: new switches to implement the folder stack. + uip/clrsbr.c: consolidate clear_screen() into one file. + + +Tue Jul 10 01:15:22 1984 Rand MH mail system (agent: Marshall Rose) + + config/mh.h, conf/config/config.c, sbr/m_{getdefs,update}.c: add + "context" file in addition to the MH-profile. The former is + dynamic, it contains pfolder and private sequences. The latter is + static, it contains switches, etc. The ctx file defaults to + Mail/context. But in the MH-profile, you can define the entry for + "context" to be whatever you want... + + +Wed Jul 11 02:25:25 1984 Rand MH mail system (agent: Marshall Rose) + + uip/repl.c: toss the hidden -[no]ccme switches. + + +Wed Jul 11 18:41:07 1984 Rand MH mail system (agent: Marshall Rose) + + uip/folder.c: remove -up, -down, and -short + uip/pick.c: toss all the file-op:s, -scan, and -show. Just define + sequences, or spit 'em to stdout. + The select sub-folder is dead! + Long live user-defined sequences! + Pick got rid of 11 (!!) switches this way, and we've taken our + first step into a new age of functionality. + +Fri Jul 13 13:17:48 1984 Rand MH mail system (agent: Marshall Rose) + + uip/folder.c: Set up things so DMAXFOLDER is used when formatting + the output strings. + + +Fri Jul 13 13:37:21 1984 Rand MH mail system (agent: Marshall Rose) + + uip/scansbr.c: Compress the fields a bit. Right-justify some + parts of the header. + + +Sun Jul 15 03:01:12 1984 Rand MH mail system (agent: Marshall Rose) + + uip/{comp,dist,forw,repl}.c: If send of draft loses, come back to + "What now?" level. Also fix bug with invocation of editor. + + +Sun Jul 15 17:10:38 1984 Rand MH mail system (agent: Marshall Rose) + + uip/{comp,dist,forw,repl}.c: Add -[no]unique switch. + uip/send.c: Remove -[no]unique switch, also read ~/.signature file + and define $SIGNATURE if need be. + uip/post.c: Don't read ~/.signature file, use $SIGNATURE only. + uip/{bbr$scan,inc,scan,scansbr}.c: Only do the ftell() business + with -size on an inc. The others can do an fstat or pointer + arithmentic to calculate the size. + + + +Mon Jul 16 00:18:49 1984 Rand MH mail system (agent: Marshall Rose) + + uip/{comp,dist,forw,repl}.c: If "quit" with no "delete, tell the + user the name of the draft file. + uip/send.c: if invoked as "push", act accordingly + sbr/m_send.c: know about "push". + uip/mhpath.c: -help wasn't any. + uip/rcv{cron,tty}.c: set-up for an MMDF system. + + +Mon Jul 16 00:21:52 1984 Rand MH mail system (agent: Marshall Rose) + + Install the new Previous-Sequence mechanism. Introduce the SEQMOD + flag to the msgs structure. Just about every MH program now calls + m_setseq () upon parsing the messages and calls m_sync() prior to + exiting. + + +Mon Jul 16 15:51:28 1984 Rand MH mail system (agent: Marshall Rose) + + Gather up the ZOTnet libraries into zotnet/libzot.a, makes things + less complicated. + + +Mon Jul 16 22:07:40 1984 Rand MH mail system (agent: Marshall Rose) + + uip/*.c: Change arguments[50] to arguments[MAXARGS]; change + msgs[100] to msgs[MAXARGS] to avoid argument overflow with new + pick. + + +Tue Jul 17 00:08:52 1984 Rand MH mail system (agent: Marshall Rose) + + Install the Sequence-Negation mechanism. + + +Tue Jul 17 16:02:02 1984 Rand MH mail system (agent: Marshall Rose) + + uip/bbr.c: bring dist, forw, and repl up to date with -[no]unique. + + +Tue Jul 17 16:19:14 1984 Rand MH mail system (agent: Marshall Rose) + + uip/folder.c: handle +folder and msg argument with -all. + + +Tue Jul 17 19:20:10 1984 Rand MH mail system (agent: Marshall Rose) + + uip/anno.c: don't require -text. Also fix bug in prompting. + + +Wed Jul 18 03:01:11 1984 Rand MH mail system (agent: Marshall Rose) + + Install the code necesary for the @folder notation, meaning + +cwf/folder (TSUBCWF). + + +Wed Jul 18 05:35:14 1984 Rand MH mail system (agent: Marshall Rose) + + uip/{comp,dist,forw,repl}.c: Add -draft{folder,message} switches, + remove -[no]unique switches + sbr/m_draft.c: New module to interpret -draft switches + uip/send.c: Handle multiple messages, add -draft{folder,message} + switches, add -push switch + uip/bbr.c: bring dist, forw, and repl up to date with all these + changes + conf/config/config.c: change mh_deliver to postproc + + +Wed Jul 18 20:39:29 1984 Rand MH mail system (agent: Marshall Rose) + + sbr/path.c: add compath() logic to compress things like @.. and so + on. + + +Thu Jul 19 19:56:16 1984 Rand MH Mail Handler (agent: Marshall Rose) + + sbr/m_edit.c: put back in the draft preserve/delete logic from mh.2 + sbr/m_draft.c: add the "use" parameter saying whether "new" or + "cur" should be the default. + + +Fri Jul 20 21:27:03 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/{comp,dist,forw,repl}.c: new logic if draft exists. + uip/{comp,dist,forw,refile,repl,send}.c: fix miscalculation in + path of draft/source folder. + + +Sat Jul 21 14:15:43 1984 Rand MH Mail Handler (agent: Marshall Rose) + + sbr/{m_gmsg,m_seq}.c: allow "compressed" sequence descriptors + (e.g., x-y instead of x x+1 ... y-1 y). Makes things run + faster and avoids problems if a sequence is really *big*. + + +Mon Jul 23 09:08:12 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/{dist,forw,repl}.c: fix busted logic when m_draft() is called + after we've built the msgs structure for the folder we're working + on. Call m_draft() first. Other solution was to have m_draft() + do a pwd(), save the result, do its work, and then chdir() back. + Sigh. + + +Mon Jul 23 09:11:27 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/scansbr.c: If the message has no date, flag it and use the + date on the file, if appropriate (e.g., from 'scan' not 'inc'). + + +Mon Jul 23 14:27:51 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/{comp,dist,forw,repl,send}.c: add -nodraftfolder switch to + turn off draft folder. + uip/send.c: add -[no]unique switch to enable/disable message + renaming on pushes. + + +Mon Jul 23 16:09:04 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/{scan,replsbr}.c: use ismymbox to determine if address is my + mailbox. + uip/addrsbr.c: add ismymbox() to say just that. + + +Mon Jul 23 19:07:00 1984 Rand MH Mail Handler (agent: Marshall Rose) + + sbr/m_getdefs.c: allow long lines in MH profile. + uip/ptt.c: rename ptt.c to ap.c and install in MH etc directory. + + +Wed Jul 25 08:49:44 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/bbr.c: bring upto date with dist/forw/repl's -nodraftfolder. + sbr/trimcpy.c: fold tabs into spaces in addition to newlines. + + +Thu Aug 2 15:05:29 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/rcv{cron,tty}.c: move the ``#include '' above the + ``#include "mmdf.h"'' + mf/*.{h,c}: change lexequ() to lequal() to avoid conflict with + MMDF-II routine name. + +Fri Oct 26 22:19:42 1984 Rand MH Mail Handler (agent: John Romine) + conf/Makefile: make CFLAGS=-O, LDFLAGS=-ns + sendmts/smail.c: line 99: formal parameter 'watch' was missing. diff --git a/docs/historical/mh4/Makefile b/docs/historical/mh4/Makefile new file mode 100644 index 0000000..c783629 --- /dev/null +++ b/docs/historical/mh4/Makefile @@ -0,0 +1,56 @@ +####################################################################### +# Instructions to Make, for generation of nice-looking papers using TeX +####################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if TEXINPUTS=../doclib:.:${TEXINPUTS} tex \ + \\nonstopmode\\input $<\\bye; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# mh4 +############################################################# + +i-all: mh4.dvi + +i-print: mh4.dvi true + dvisp -V -J MH4 $(DFLAGS) mh4.dvi + +i-count: true + detex text.tex | wc -cw + + +# customization files, et. al., not included below +mh4.dvi: version.tex + +version.tex: mh4.tex text.tex version.sh + @: version.sh + +true:; + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f mh4.dvi mh4.imp + +clean:; rm -f CONTENTS.tex FIGURES.tex \ + mh4.lof mh4.log mh4.lot mh4.toc _* diff --git a/docs/historical/mh4/mh4.tex b/docs/historical/mh4/mh4.tex new file mode 100644 index 0000000..cd1753f --- /dev/null +++ b/docs/historical/mh4/mh4.tex @@ -0,0 +1,58 @@ +% run this through PhD-TeX + +\input dcustom +\articlestyle +\draftfalse +\input version + +\input sfwmac + +% these are special for mh4.tex +\def\entry#1{\boxit{#1:}} +\def\whatnow/{{\tt What now?\/}} + +\def\pgm#1{{\it#1}} % UNIX programs +\def\man#1(#2){\pgm{#1\/}(#2)} % Manual entries +\def\arg#1{\hbox{\sl\`{}#1\'{}}} % arguments to programs +\def\switch#1{\hbox{\`{}\tt-\sl#1\'{}}} % switches to programs +\def\eg#1{\hbox{\tt#1}} % example +\def\file#1{\hbox{\sl#1}} % filename +\def\bq#1{\`{}#1\`{}} % back-quoted command + +\header + Changes to\\ + The Rand MH Message Handling System:\\\\ + MH.4\title + Marshall T.~Rose\author + \versiondate/\info +\footnote{}{\hskip -\parskip $^\dagger$ Computer Mail: {\tx MRose@ICS.UCI.EDU}.} +\centerline{\sc Abstract} +{\rightskip=0pt\narrower\narrower +\noindent +This document describes user-visible changes to the +UCI version of the Rand \MH/ system that were made +from \mh3 to \mh4. +In particular, +four facilities are discussed: +multiple composition of drafts, +user-defined sequences, +the folder-stack, +and, +relative folder addressing. +This document does not describe bug-fixes, per se, +or internal changes, +unless these activities resulted in a visible change for the \MH/ user. +\par +This document is meant to supplement, +not supersede, the standard \MH/ user manual\cite{MH}. +\par +Comments concerning this documentation should be addressed to the Internet +mailbox {\sf Bug-MH@ICS.UCI.EDU}. +\par} + +\input text +\input refs +\printcontents +\showsummary + +\bye diff --git a/docs/historical/mh4/refs.tex b/docs/historical/mh4/refs.tex new file mode 100644 index 0000000..3278715 --- /dev/null +++ b/docs/historical/mh4/refs.tex @@ -0,0 +1,16 @@ +\let\journalinfo=\jourinfo +\let\thesis=\book % experimental +\let\thesisinfo=\bookinfo % .. + +\references + +\ref{MH} +\paper The Rand \MH/ Message Handling System: User's Manual +\paperinfo UCI Version +\other +\publ Department of Information and Computer Science +\publaddr University of California, Irvine +\month July\year 1984 +\endref + +\endreferences diff --git a/docs/historical/mh4/text.tex b/docs/historical/mh4/text.tex new file mode 100644 index 0000000..419b1b8 --- /dev/null +++ b/docs/historical/mh4/text.tex @@ -0,0 +1,723 @@ +% 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. diff --git a/docs/historical/mh4/version b/docs/historical/mh4/version new file mode 100644 index 0000000..8f92bfd --- /dev/null +++ b/docs/historical/mh4/version @@ -0,0 +1 @@ +35 diff --git a/docs/historical/mh4/version.sh b/docs/historical/mh4/version.sh new file mode 100644 index 0000000..9ec1e79 --- /dev/null +++ b/docs/historical/mh4/version.sh @@ -0,0 +1,9 @@ +if [ ! -r version ]; then echo 0 > version; fi +touch version +echo '\catcode`\#=12' > version.tex +awk ' { version = $1 + 1; }\ +END { printf "\\def\\versiontag/{#1.%d}%%\n", version >> "version.tex"; \ + printf "%d\n", version > "version"; }' < version +echo '\def\versiondate/{'`date`'}%' >> version.tex +echo '\catcode`\#=6' >> version.tex +echo '\tell{Version \versiontag/ of \versiondate/}' >> version.tex diff --git a/docs/historical/mh4/version.tex b/docs/historical/mh4/version.tex new file mode 100644 index 0000000..db4c095 --- /dev/null +++ b/docs/historical/mh4/version.tex @@ -0,0 +1,5 @@ +\catcode`\#=12 +\def\versiontag/{#1.35}% +\def\versiondate/{Fri Jul 27 11:23:07 PDT 1984}% +\catcode`\#=6 +\tell{Version \versiontag/ of \versiondate/} diff --git a/docs/historical/mh4mm/Makefile b/docs/historical/mh4mm/Makefile new file mode 100644 index 0000000..fa9c890 --- /dev/null +++ b/docs/historical/mh4mm/Makefile @@ -0,0 +1,44 @@ +######################################################################### +# Instructions to Make, for generation of nice-looking papers using LaTeX +######################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if latex \\nonstopmode\\input $<; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# mh4mm +############################################################# + +i-all: mh4mm.dvi + +i-print: mh4mm.dvi true + dvisp $(DFLAGS) -J Mh4mm mh4mm + +true:; + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f mh4mm.dvi mh4mm.imp + +clean:; rm -f mh4mm.log mh4mm.blg mh4mm.tmp _* diff --git a/docs/historical/mh4mm/mh4mm.tex b/docs/historical/mh4mm/mh4mm.tex new file mode 100644 index 0000000..8603218 --- /dev/null +++ b/docs/historical/mh4mm/mh4mm.tex @@ -0,0 +1,660 @@ +\documentstyle [12pt]{article} +\parindent=0pt +\parskip=7pt plus 2pt + +\def\oneline#1{\par\bigskip\leftline{\tt\hskip.75in#1}} +\def\command#1{\par\bigskip\leftline{\tt\hskip.75in\% #1}} +\def\comarg#1#2{\par\bigskip\leftline{\tt\hskip.75in\% #1 {\it#2}}} +\def\tcom#1{\par\bigskip\leftline{\tt\hskip.75in@#1}} +\def\MH/{{\sf MH}} +\def\tops20/{{\sc Tops-20}} +\def\unix/{{\sc Unix}} +\def\MM/{{\sc mm}} +\newfont{\itt}{cmti10} +\sloppy +\begin{document} + +\title{MH for MM Users} +\author{Mary Hegardt \and Tim Morgan} +\maketitle + +\section{Introduction} + +This document is another in a continuing series on use of the \MH/ mail +system at UCI. It is intended for those users accustomed to the \MM/ ``user +agent'' (mail program) under \tops20/ and who are already familiar with +network mail, but who may not be experienced \unix/ users. For an +introduction to \MH/, see ``MH For Beginners'' by Mary +Hegardt and Tim Morgan. For complete, detailed information on the \MH/ +system, see {\sl The Rand MH Message Handling System: User's Manual\/} by +Marshall~T. Rose and John~L. Romine. Both documents are available for +Xeroxing in suite CS408. + +\subsection{UNIX Versus Tops-20} + +The \unix/\footnote{\unix/ is a trademark of AT\&T Bell Laboratories} +paradigm is that each command, or program, should perform only one +function. An extension of this idea is that the operating system +implements only those functions which are necessary, but it does so in +a very general way so that programs may still accomplish their functions. +This philosophy probably evolved because the original versions +of \unix/ ran on PDP-11 minicomputers which had only a small memory +space for each process. + +Consequently, all commands in \unix/, with a very few exceptions, are +in actuality programs. On \tops20/, in contrast, many of the most frequently +used commands are built into the user's shell, or {\em exec.} Both the +Exec and {\it csh,} which is typically the user's command interface on +\unix/, will accept and parse command lines, attempting to invoke a command +as a program if it is not one of the built-in commands. \unix/ and \tops20/ +are surprisingly similar internally: the use of the shell, separate +processes for each command or program to execute, standard input and output +for each program, and many other ideas are common to both operating +systems. Users should be familiar with the capabilities of the shell, +which is described in the document ``Introduction to the Csh.'' + +\subsection{The MH User Interface} + +The \MH/ mail ``user agent'' is different from most other mail systems. +\MM/, for example, is a {\em monolithic\/} system because one program +implements all the mail-related functions. The disadvantages of monolithic +systems are that (a)~they are large, so they tend to put more burden on the +computer system, and (b)~they allow for much less flexibility. In contrast, +\MH/ implements each mail command as a separate program: there is no single +program called {\it mh.} This approach facilitates interspersing mail +commands with other, perhaps unrelated, commands. + +Another unique feature of \MH/ is that it takes advantage of the facilities +provided by the operating system. Most mail agents, such as \MM/, maintain +a file containing the user's mail in a special, usually undocumented, format. +When a message is deleted, \MM/ must take care of compacting the mail file. +It must be able to distinguish the separate messages contained in the file. +\MM/ must also implement a simple text editor to allow the user to enter +and modify a message while it is being composed. +These functions are essentially those provided by the operating system when +separate files are stored within a directory. Therefore, the approach +taken by \MH/ is that +each message is kept in a separate file. This file simply contains the +message, with no other special formatting characters or requirements. +All the messages are stored within a normal \unix/ directory. This approach +makes it easy to add new \MH/ commands, to edit messages using standard +text editors, etc. + +All your \MH/ related files are stored in a directory within your home +directory. Usually this directory is called {\tt Mail} or {\tt mhbox}, +although you are free to name it as you choose. Another file in your home +directory called \verb|.mh_profile| is equivalent to the {\tt MM.INIT} file +under \MM/. It contains all the options which you prefer for the various +\MH/ commands. It also contains the name of the \MH/ directory and the +name that you want on your outgoing mail in the {\tt From:} field (your +``{\em signature\/}''). + +\section{Getting Started} + +\subsection{Incorporating Mail} + +Another important difference between \MM/ and \MH/ is the concept of the +{\em maildrop\/} file. Under \tops20/, the mail transport system delivers +new messages directly into the recipient's {\tt MAIL.TXT} file, where they may +then be processed with \MM/. In contrast, the \unix/ mail transport system, +called {\it MMDF-II,} makes no assumptions about the user agent used by the +recipient. Instead, it puts all new mail into a special file called the +{\em maildrop.} This file is in the \verb|/usr/spool/mail| directory. +When you log in, if there is new mail for you in your +maildrop, you will be so notified by the message + + \oneline{You have new ZOTnet mail -- type inc (or mail)} + +When you are ready to process this new mail, you may type the command + + \command{inc} + +(``incorporate'') which will copy the new mail into separate files, one per +message, stored in your ``inbox'' folder. A folder is a subdirectory +beneath your \MH/ directory which is used to store related messages. +Additional information on folders is given in Section~\ref{Folders}, +page~\pageref{Folders}. The +``inbox'' is a distinguished folder because by default {\it inc\/} will +always copy new mail into that folder, removing it from the maildrop. + +If this is the first time you have used {\it inc\/} or any other \MH/ +command, the {\it mh-install\/} program will inform you that it is +creating your {\tt Mail} directory. It will also create +the ``inbox'' folder directory, and \verb|.mh_profile|. + +\subsection{Message Numbers}\label{Scan} + +As {\it inc\/} processes each message, it prints a ``scan'' listing showing +the message number, the date the message was sent, +the name of the sender, the subject, and sometimes the initial part of the +text of the message. A ``scan'' listing is thus similar to the output of +the {\tt HEADERS} command in \MM/. Each message within a folder is given a +number, starting with 1, by which it can be referenced. {\it +Inc\/} will display the numbers assigned to each new message in its ``scan'' +listing. + +As in \MM/, there is a ``current message'' number which usually identifies the +message most recently manipulated by the user. With most \MH/ commands, +this will be the default message if no messages are explicitly specified in +a command. {\it Inc\/} makes the first new message the current message, +which is indicated by a ``{\tt+}'' character in the scan listing, just after +the message number. + +Many \MH/ commands take a list of messages to process. A message designation +is either a single message number, two message numbers separated by a dash. +The dash format indicates a range of messages including the endpoints. A +message list consists of one or more message designations separated by +spaces. For example, messages 11 through 15 and message 17 may be indicated +by typing + + \oneline{11-15 17} + +as the argument to some command. There are also several predefined names +for messages or lists of messages which may be used in place of message +numbers: + +\bigskip +\begingroup\parskip=0pt +\def\titem[#1]{\par\hangafter=1\hangindent=.7in\noindent + \hbox to\hangindent{\it\hfil#1\qquad}\ignorespaces} + +\titem[cur] The current message (the last one that was handled). Equivalent + to ``.'' or ``{\tt CURRENT}'' in \MM/. +\titem[next] The next message +\titem[prev] The previous message +\titem[first] The first message in the current folder. +\titem[last] The last message in the folder. Equivalent to {\tt\%} or + {\tt*} in \MM/. +\titem[all] All messages ($\it first-last$). Same as in \MM/. +\endgroup + +It is also possible for you to define your own named {\em sequences\/} of +messages. See the {\it pick\/} command description for more details. + +\section{Processing Messages} + +This section contains a list of the common \MM/ commands and their +equivalents in the in \MH/ mail system. A short textual note describes how +the \MH/ commands differ from their \MM/ counterparts. + +\subsection{Listing Messages} + +As mentioned in Section~\ref{Scan}, +the {\it scan\/} command may be used to summarize the +messages in a folder, similar to the {\tt HEADERS} command in \MM/. Unlike +most \MH/ commands, however, {\it scan\/} defaults to {\em all\/} the +messages in the current folder unless you specify one or messages on the +command line to be scanned. So simply typing + + \command{scan} + +is equivalent to typing {\tt HEADERS ALL} (or {\tt H A}) in \MM/. + +\subsection{Reading Mail} + +Unlike the {\tt READ} command in \MM/, in \MH/ there is no special +mail-reading mode (indicated in \MM/ by the {\tt R>} prompt). +The command to read messages in \MH/ is {\it show.} If no message list is +specified, then the current message is displayed. The message is displayed +by your ``showproc'', as specified in the \verb|.mh_profile|, described +in Section~\ref{Tailoring}. +Normally, your ``showproc'' will be {\it more\/} or {\it mhless.} +Both of these programs will display your messages one screenful at a time. +You press the \fbox{space bar} on your terminal to see the next screenful, +or the \fbox{return} key to see the next line. + +The command + + \command{show next} + +(which will display the first message following the current message in the +current folder) can be abbreviated as simply + + \command{next} + +Similarly, the command ``{\tt show prev}'' can be abbreviated as simply ``{\tt +prev}''. + +To get a paper copy of a mail message, take the output from the {\it show\/} +command and pipe it into the {\it imprint\/} command. + + \command{show 5 | imprint} + +See the manual page for {\it imprint\/} for more information. + + +\subsection{Deleting Messages} + +The equivalent of the {\tt DELETE} command in \MM/ is {\it rmm\/} in \MH/ +(remove messages). It acts on the current message unless messages are +specified on the command line. Unlike \MM/, the deleted messages will +no longer show up in a ``scan'' listing. But the messages are not +completely removed; they are renamed to have a comma +prepended to the name of the file containing the message within its folder +directory. Therefore, if you need to recover a message, it is possible to +go into the directory and rename the message back. Be careful in doing this +not to overwrite a new message with the same message number! It is a \unix/ +convention that files whose names begin with a comma will be removed from +disk ({\em expunged\/}) early each morning. Therefore, your deleted +messages will be available for the rest of the day, unless you remove another +message subsequently which has the same message. Then the previously deleted +message is gone. + +\subsection{Replying to Mail} + +The equivalent of the {\tt REPLY} command in \MM/ is {\it repl\/} in \MH/. +{\it Repl\/} may be given the number of the message to which you wish to +reply, or it will default to the current message. When replying in \MM/, +you are prompted asking if you wish to reply to all the recipients of the +message to which you are replying, or only to its sender. In \MH/, normally +the reply will be constructed to be sent to all the recipients. You may +select which recipients receive copies of your reply by using the {\tt +-query} option on {\it repl,} or by putting this option in your +\verb|.mh_profile|, as described in Section~\ref{Tailoring}. If you +wish a reply to go to everyone but yourself, you can +use \verb|repl -nocc me|. + +\subsection{Sending Mail} + +The equivalent of the {\tt SEND} \MM/ command is {\it comp\/} (``compose'') +in \MH/. These two commands are fairly similar, except that the recipient of +the message cannot be specified on the {\it comp\/} command line. +The {\it comp\/} program invokes a simple editor called {\it prompter\/} +which will prompt you for the {\tt To:}, {\tt Cc:}, +and {\tt Subject:} fields of the message. Then a line of dashes is typed, +and you may enter the body of your message (its {\em text,} in \MM/ terms). +When you are finished, type \fbox{ctrl}--D (equivalent to typing \fbox{ESC} or +control-Z in \MM/). Then you'll receive the prompt + + \oneline{What now?} + +which is similar to \MM/'s {\tt S>} prompt. You may receive a list of the +options that you have at this point by typing ``{\tt?}'' followed by +\fbox{return}. Here is a short list of the options and their meanings. +Notice that, unlike \MM/, there are very few commands to modify the message +(such as the {\tt TEXT}, {\tt TO}, {\tt CC}, etc., commands which may be +typed at the {\tt S>} prompt in \MM/). In place of these commands, you use +the {\tt edit} command to invoke your favorite text editor on the message, +and you use it to make the equivalent changes. You also use your editor +to include other files into the body of the message, rather than using +control-B, as in \MM/. One additional use of the {\tt edit} command is +for spelling checking. In \MM/, you may use the command {\tt SPELL} +for this purpose. +In \MH/, you type ``{\tt edit spell}''\footnote{ Actually, any +program named after the ``{\tt edit}'' command will be invoked with +whatever arguments you have given and a path to the file containing +the message you are editing.} instead. This will +cause the spelling checker to be run, giving you a list of the possibly +misspelled words in your message. + +\bigskip + +\begingroup +\def\titem[#1]{\par\hangafter=1\hangindent=1.4in\noindent + \hbox to\hangindent{\hfil#1\qquad}\ignorespaces} + +\titem[\tt edit \it editor\/] Edit the message using the specified + editor. When you exit, you will be + back at \verb|What now?|. + +\titem[\tt list] Shows the message you just typed + +\titem[\tt whom -check] Verifies that the addresses you have + used are valid as far as our system + can tell + +\titem[\tt send] Sends the message to the recipients + +\titem[\tt push] Sends the message in the background + +\titem[\tt quit] Quits without sending the message. + Saves the text of the message as + a ``draft''. Type \verb|comp -use| to + get back to that draft later. + +\titem[\tt quit -delete] Quit, throwing away the draft +\endgroup + +\bigskip + +\subsection{Forwarding Mail} + +The {\it forw\/} command is used in \MH/ to forward messages. It will take +a list of messages on the command line to be forwarded, or it will default +to the current message if none are specified. It will prompt you like {\it +comp\/} does for the {\tt To:}, {\tt Cc:}, and {\tt Subject:}\ fields. Note +that, unlike \MM/'s {\tt FORWARD} command, {\it forw\/} will not construct a +subject line automatically. Also as with {\it comp,} you will have the +opportunity to add additional text to the message(s) which you are +forwarding, ended with a control-D. + +\subsection{Resending Mail} + +The equivalent of the {\tt RESEND} command in \MM/ is the {\it dist\/} +(``distribute'') command in \MH/. {\it Dist\/} works very much like the +{\it forw\/} command, except that the prompts will be {\tt Resend-To:}, +{\tt Resend-Cc:}, etc. After filling in the headers, a line of dashes +is typed giving the impression that additional text can be entered. +Nothing could be further from the truth; if you add any text at this +point the {\it dist\/} will fail. Your only opportunity to add text +is in the {\tt Resend-Note:} field. + +\section{Advanced Topics} + +\subsection{Selecting Messages} + +In \MM/, you may use several reserved command words to select messages +in place of an explicit list of message numbers. For example, you can +type ``{\tt DELETE FROM SMITH}'' to remove all the messages from a user named +``Smith''. Rather than building such a capability into each \MH/ program +which can process message lists, a special program called {\it pick\/} is +used instead. Just as there are predefined sequences of messages, such as +``{\tt all}'', ``{\tt cur}'', etc., you may use {\it pick\/} to define your +own sequences. {\it Pick\/} is capable of selecting messages from a folder +based on the {\tt To:}, {\tt From:}, {\tt Subject:}, {\tt Cc:}, or {\tt +Date:} fields, or by searching the body of the message. The patterns to be +searched for may include full regular expressions (see the ``man'' page for +{\it ed(1)\/} for more information) or simple strings. + +{\it Pick\/} may be used in one of two ways. First, it may output the +sequence of message numbers which match the search parameters. Using the +backquoting mechanism of the shell, these message numbers may then become +the arguments to other \MH/ programs. The second way to use {\it pick\/} is +to have it define a new sequence name which will be the messages which were +selected. Only this second method of using {\it pick\/} will be described +here; see {\it pick(l)\/} if you wish to use the first method. + +In your \verb|.mh_profile|, add the line + + \oneline{pick: -seq sel} + +Then each time you use the {\it pick\/} command, it will define the +resulting sequence of messages to be called ``sel''. Then to ``pick'' all +the messages in the current folder which are from ``Smith'', just type + + \command{pick -from smith} + +To see a summary of those messages, type + + \command{scan sel} + +Then to the remove the messages, type the command + + \command{rmm sel} + +You can {\it pick\/} messages according to any of the headers ({\tt -to +-from -subj -cc {\rm or} -date}) or just search all the messages for a given +word ({\tt -search}). + +\subsection{Customizing Your Mail Environment}\label{Tailoring} + +In \MM/, you use the {\tt PROFILE} command to tailor your mail environment. +This command writes a file called {\tt MM.INIT} in your home directory which +is then read by subsequent executions of \MM/. In the \MH/ system, the file +\verb|.mh_profile| serves the same purpose. It is edited with any normal +text editor, rather than using a special-purpose command to modify it. The +format of the file is line oriented, one line per \MH/ program or \MH/ +option to be set. The only required line in the profile is the name of the +primary \MH/ mail directory, which is by default {\tt Mail}. This +information is specified by the line + + \oneline{Path: Mail} + +The textual name you would like to have on your outgoing mail is specified +by the {\tt Signature:} line. For example, + + \oneline{Signature: Mary Hegardt} + +The BBoards which you like to read should also be listed in the +\verb|.mh_profile| (see Section~\ref{BBoards}, page~\pageref{BBoards}, for +additional information). For example, if you read the ``system'' BBoard +(where all important announcements are posted), as well as ``whimsey'' +and ``imagen-users'' BBoards, your \verb|.mh_profile| should contain the line + + \oneline{bboards: system whimsey imagen-users} + +Other options may be specified on a per-program basis. The format for these +lines is the same. First, the program name is given followed by a colon. +Then any flags which are to be the default options for that program are +given. Here is a short list of the most common options which you may want +to set in your \verb|.mh_profile|: + + \oneline{showproc: mhless} + +The {\it showproc\/} is the program used to show messages to you. By +default, it is the {\it more\/} command. {\it Mhless\/} is the same as +{\it more\/} except that it omits the headers of the messages which you +indicate that you wish not to see. Type + + \command{man mhless} + +for more information about this program. + + \oneline{msh: -scan} + +Selecting this option causes an automatic scan of new messages on BBoards to be +made when reading BBoards with {\it bbc,} similar to the scan listing +produced by {\it inc.} + + \oneline{repl: -query} + +causes {\it repl\/} to ask for each address in the message being replied to +if it should be included in the {\tt To:} or {\tt Cc:} fields of the reply +being composed. + + \oneline{pick: -seq sel} + +This line will cause messages ``picked'' by the {\it pick\/} command to be +put into a sequence named ``sel''. This sequence name may then be used +just as the built-in sequences (``last'', ``first'', etc.). + +\subsection{Aliases} + +Using \MH/, you may specify your own private mail aliases. This feature +allows you to store lists of addresses or long internet addresses of people +with whom you frequently correspond in one file, and then to address them +using short mnemonic names. Typically, you will call your alias file ``{\tt +aliases}''; it must be stored in your \MH/ directory. The format of this +file is simple. The alias is given, followed by a colon, followed by one or +more legal mail addresses separated by commas. For example, you might for +some reason have an alias for all the users named ``Rose'' in the ICS +department: + + \oneline{roses: prose, srose, mrose, drose} + +In addition to your ``{\tt aliases}'' file, you will need to modify your +\verb|.mh_profile| in order to use aliases. You should add the flag +``{\tt -alias aliases}'' to the entries for the commands {\it ali, whom, +send,} and {\it push,} creating entries for these programs if they aren't +already in your \verb|.mh_profile|. +Now, messages addressed to ``{\tt roses}'' will be distributed to all +the people listed in the alias. + +The {\it ali\/} command is used to show you what an alias expands to. +You just type + + \comarg{ali}{alias} + +and {\it ali\/} will respond with the expansion of the {\it alias.} {\it +Ali\/} searches the system aliases file in addition to your private ones. + +\subsection{Blind Lists} + +There are two different types of so-called ``blind addressing'' of messages. +Users of \MM/ may already be familiar with the ``Blind Carbon Copy'', or +{\tt BCC:} field. It allows you to add recipients to your message just +like those who are CC'd, but the normal recipients will not see that the +BCC recipients were copied on the message, their replies will not go to the +blind recipients, and the blind recipients cannot (easily) reply to the +message. + +The second type of blind mailing is actually called a ``group address list'', +although it is commonly referred to as a ``blind list''. +The format of this type of address is + + \oneline{{\it phrase\/}: {\it address\_list\/};} + +where the ``{\it phrase\/}'' is any English phrase of one or more words, +and the {\it address\_list\/} consists of one or more addresses separated by +commas. The recipients of a message addressed in this fashion will +see simply + + \oneline{{\it phrase\/}: ;} + +so when they reply to the message, their reply will come only to the sender +(or the {\tt Reply-To:} field, if one was specified), rather than going to +all the recipients of the original list. For example, to use a group +address list for the ``{\tt roses}'' alias you would type: + + \oneline{To: People Named Rose: roses;} + +This type of group address is very +useful for making up lists of related people, such as all the people working +on a particular research project. + +\subsection{Folders}\label{Folders} + +As mentioned previously, folders are directories within your \MH/ directory +used to store related messages. There is no equivalent of the folder +concept in the \MM/ system. Usually, you will use only the folder ``inbox'', +so you won't have to worry about folders. However, if you process a large +volume of mail, then folders become invaluable in managing the messages +which you wish to keep for future reference. + +Just as there is a ``current message,'' \MH/ maintains a ``current folder,'' +which will normally be ``inbox''. You can change folders either by +specifying the folder on the command line of \MH/ programs which take a +list of messages as an argument, or by using the {\tt folder} command: + + \command{folder +{\it folder\_name}} + +In general, the folder name is indicated by a ``{\tt+}'' sign followed +immediately by the folder name, all preceeding any list of messages. For +example, you may read the most recent message in a folder called +``job\_offers'' using the command + + \command{show +job\_offers last} + +This command will have the side-effect of setting the current folder to be +``job\_offers''. You may move messages from the current folder into the +``job\_offers'' folder using the command + + \comarg{refile +job\_offers}{messages} + +where, as usual, the {\it messages\/} list will default to the current +message in the current folder if none are specified. Note that, in contrast +with the {\it show\/} command and most other \MH/ commands, the {\it +messages\/} are {\em not\/} considered to be in the folder ``job\_offers''. +You may obtain a summary of all your folders by typing the command + + \command{folders} + +When you remove messages from a folder using the {\it rmm\/} command, +the deleted messages will show up as a ``hole'' in the message numbering. +The command + + \command{folder -pack} + +will cause all the messages within one folder to be renumbered starting +with~1. Similarly, the command + + \command{folders -pack} + +will do the same thing for all your folders. + +To remove an empty folder, use the command + + \command{rmf +{\it folder}} + +\subsection{Reading BBoards}\label{BBoards} + +Two special-purpose programs are utilized in reading BBoards. The first is +{\it bbc,} which is used to check a list of BBoards for new messages. +The list of messages may be given on the command line, or if not, it will be +taken from the {\tt BBoards:} list in your \verb|.mh_profile|. You may +obtain a list of all the available BBoards by typing the command + + \command{bbc -topics} + +For each BBoard with unseen messages, {\it bbc\/} will invoke the \MH/ +shell, {\it msh,} whose prompt is + + \oneline{(msh)} + +The {\it msh\/} program allows you to read BBoard mail as if it were normal +messages in one of your folders. Almost all the \MH/ commands will work +just as the normally do. Typing the command ``{\tt quit}'' to {\it msh\/} +causes it to stop reading the current BBoard and go on to the next one +containing unseen messages, or to exit if there are no more such BBoards. +Typing control-D causes {\it msh\/} to exit unconditionally. The command +{\tt mark} followed by a message number causes {\it msh\/} to act as if you +have seen that message and all previous ones. + +\subsection{Checking for Mail} + +Under \unix/, there are about a dozen different ways to check for new mail. +The easiest way to do it is to set the {\it csh\/} variable named ``mail'' +to tell {\it csh\/} to check for new mail for you periodically. To do this, +add the line + + \oneline{set mail=(60 /usr/spool/mail/\$USER)} + +to your {\tt .login} file in your home directory. This command says to +check for mail if {\it csh\/} is about to prompt you with a {\tt\%} sign, +and if it has been at least 60 seconds since it last checked for mail. +The advantage of this method of mail notification, besides simplicity, is +that you will never be interrupted by a mail notification. You will only be +notified of new mail when you are between commands, when the shell is about to +prompt you. + +If you desire asynchronous mail notification, which will print to your +terminal regardless of what you are currently doing, you may make use of a +``Receive Mail Hook'' called ``rcvtty''. To do this, create a file in your +home directory called ``{\tt .maildelivery}''. In this file, put the line + + \oneline{* - pipe R /usr/uci/lib/mh/rcvtty} + +Then each time new mail arrives, you will receive a one-line ``scan'' +listing of the mail if your terminal is world-writable. For more information +on ``maildelivery'' files, type: + + \command{man 5 maildelivery} + + +\subsection{Saving Drafts} + +Normally when you use {\it comp,} it creates the message being composed in a +file called ``{\tt draft}'' in your \MH/ directory. If you use the ``{\tt +quit}'' option at the ``{\tt What now?}'' prompt, this file will remain +there. You may later use the command + + \command{comp -use} + +to resume composing the message. + +If you begin composing a new message and there is already a ``draft'' file, +you will be asked for the disposition of this file. Typing {\tt?} +\fbox{return} will give you a list of the options at this point. Normally +you will either {\tt replace} (delete) the old draft and begin +a new one or {\tt use} the old one. + +The {\tt -file} switch to {\it comp\/} may be used to specify the name of a +draft other than ``{\tt draft}''. For example, one might type + + \command{comp -file mary} + +to begin composing a message maintained in the draft file ``{\tt mary}''. +Typing + + \command{comp -file mary -use} + +would cause {\it comp\/} to resume composing this same draft after a +``{\tt quit}'' command to the ``{\tt What now?}'' prompt. + +Very advanced users of \MH/ maintain multiple draft files in a {\it draft +folder.} This is a normal folder which holds all your drafts, rather than +having just one draft in your \MH/ directory named ``{\tt draft}''. If you +feel that you need to use draft folders, you should consult the {\sl MH +User's Manual\/} for additional information. + +\end{document} diff --git a/docs/historical/mh5/MHCHANGES b/docs/historical/mh5/MHCHANGES new file mode 100644 index 0000000..3365f66 --- /dev/null +++ b/docs/historical/mh5/MHCHANGES @@ -0,0 +1,1462 @@ + MHCHANGES from mh.4 to mh.5 + + +Mon Aug 27 05:00:44 1984 Rand MH Mail Handler (agent: Marshall Rose) + + Decide that mh.4 is finished. This file keeps track of the + changes made between the mh.4 and mh.5 versions. As usual, it's + being kept in add-source-change format. [Actually, mh.4 was + finished on July 1, 1984. For obscure reasons, this ChangeLog + didn't start until August 27th though.] + + +Mon Aug 27 05:07:37 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/inc.c: examine the profile entry "maildrop" to override the + default maildrop if necessary. "maildrop" is interpreted with + m_mailpath(), so if not an absolute path, it's interpreted relative + to the user's MH directory. + + +Tue Sep 11 19:59:24 1984 Rand MH Mail Handler (agent: Marshall Rose) + + tws/dtime.c: have it know about EDT. Really, dtimezone needs to + get fixed up and use two tables instead of one... + + +Wed Sep 12 20:02:22 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/rcv{cron,tty}.c: if not reading mmdf.h, then read smail.h to + get proper definitions of RP_M{ECH,OK}. + + +Sun Sep 16 16:08:39 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/folder.c: change capitalization of "%d Folder%s" to + "%d folder%s". + + +Tue Sep 18 14:16:53 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/folder.c: if folder is unreadable (errno==EACCES), just say + "unreadable", don't bother to call admonish(). + + +Tue Sep 18 14:30:57 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/inc.c: Check $MAILDROP prior to checking the Maildrop: profile + entry. + + +Wed Sep 19 16:02:18 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/scan..c: if message is unreadable (errno==EACCES), just say + "unreadble", don't bother to call admonish(). + + +Fri Sep 21 19:25:25 1984 Rand MH Mail Handler (agent: Marshall Rose) + + sendmts/hosts.c: change ALLHOSTS logic: if we're running with an + exception file, then turn ALLHOSTS on (let mail system be final + arbitrator). Also, if using an exception file, play along if the + file can't be opened. + + +Sat Sep 22 19:03:02 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/sbboards.c: forgot a few arguments in a couple of printf-like + strings. + + +Sat Sep 22 20:19:40 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/rcvlink.c: new rcvmail hook, just like the old rcvlink hook + used in the ZOTnet. + + +Mon Oct 1 20:48:25 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/{scan,inc,scansbr}.c: change scansbr.h to #define the return + codes from scansbr$scan(). Modify scan.c to say if a null message + is empty. + + +Mon Oct 1 20:49:32 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/repl{,sbr}.c: add the -[no]query switch which interactively + prompts the user for info on who should be replied-to. + + +Wed Oct 10 09:15:23 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/install-mh.c: fix minor typo in display of help message. + + +Wed Oct 10 14:41:30 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/rcv{cron,link,tty}.c: foil m_getdefs() for JLR. + + +Fri Oct 12 09:52:19 1984 Rand MH Mail Handler (agent: Marshall Rose) + + sbr/m_edit.c: change rindex() to r1bindex(). Silly typo. + + +Fri Oct 12 09:53:56 1984 Rand MH Mail Handler (agent: Marshall Rose) + + uip/ap.c: be sure to foil m_getdefs() for consistency. + + +Mon Oct 15 08:27:13 1984 /mtr (agent: Marshall Rose) + + conf/{mhconfig.c,config/config.c}: make the default editor + configurable. + conf/mhconfig.c: add support for othersupport/Makefile. + Makefile,conf/{config/mts.c,makefiles/mts}: add support for the + mtstailor file. + othersupport/tutorial/: include the MH tutorial + uip/{ap,bbr,conflict,inc,post,rcvcron,rcvlink,rmail,sbboards,slocal}.c, + mts/msgchk.c: add support for the mtstailor file. + uip/{rmail,sbboards,slocal}.c: foil m_getdefs() (just in case). + + +Wed Oct 17 10:02:27 1984 /mtr (agent: Marshall Rose) + + uip/inc.c: more mtstailor fixes, always read MAILDIR. + uip/prompter.c: add the -[no]rapid switch. + + +Thu Oct 18 11:14:15 1984 /mtr (agent: Marshall Rose) + + uip/annosbr.c: if file doesn't exist, don't spit out error + diagnostic (comp/dist/forw/send -anno followed by push). + + +Fri Oct 19 08:57:23 1984 /mtr (agent: Marshall Rose) + + uip/dist.c: instead of introducing Prev-Resent-Header: just prepend + Prev- to previous resent-XXX: fields. + uip/{post,dist}.c: append resent-XXX: fields instead of prepending + them. Also some minor clean-up. + tws/dtime.c: use a better structure to permit "fool-proof" + generation of time with dst. + tws/dtimep.c: minor clean-up. + + +Sat Oct 20 11:47:26 1984 /mtr (agent: Marshall Rose) + + uip/post.c: let fcc: fields have more than one folder entry. + + +Mon Oct 22 11:37:30 1984 /mtr (agent: Marshall Rose) + + sendmts/smail.c: forgot to declare parameter watch for -DSENDMAIL. + conf/makefiles/*: make "make install" a synonym for "make inst-all". + conf/makefiles/*: support $(DESTDIR) convention. + + +Tue Oct 23 12:35:58 1984 /mtr (agent: Marshall Rose) + + conf/config/mts.c, mts/mts.h: remove the mbx_lock() and mbx_unlk() + routines and replace them with the lock-and-open routines + lkopen(), lkclose(), lkfopen(), and lkfclose(). lkopen() acquires + an exclusive lock on the named file (which *must* exist) and then the + appropriate open. lkclose() releases the lock and closes the + file. lkfopen() is to lkopen() as fopen() is to open(). lkfclose() + is to lkclose() as fclose() is to close(). I had to do all this + so with 4.2BSD we can use flock to do the locking instead of the + link/unlink business. + + +Wed Oct 24 11:00:55 1984 /mtr (agent: Marshall Rose) + + -- All fixes from Terry Domae at NRTC -- + conf/mhconfig.c: invoke mhdoc with csh explicitly since V7 doesn't. + conf/config/config.c, config/mh.h: add new global variable libpath. + uip/mhlsbr.c: support libpath for system-wide forms. + config/mh.h,mf/mf.c,sbr/getusr.c,uip/post.c: add -DNRTC for MAILID + support + uip/replsbr.c: don't panic if the host for the sender/from field + is unknown. + uip/{send,whom}.c: forgot to use m_draft() instead of m_maildir(draft). + sbr/m_draft.c: fix things up for show -draft. + uip/show.c: add a "-form formfile" switch. Also, support for -draft + to reflect draftfolders. + + +Wed Oct 24 21:46:22 1984 /mtr (agent: Marshall Rose) + + conf/config/config.c, config/mh.h: add libpath() which looks first + in m_maildir and then etcpath for the file. Get rid of the + std* variables since libpath() now does the same thing. + With libpath, we now search m_maildir and then etcpath for + alias files for send and whom, form files for comp, dist, forw, + and repl, and filter files for forw and mhl. + + +Sat Oct 27 23:08:23 1984 /mtr (agent: Marshall Rose) + + sbr/m_getdefs.c: create the MH-directory if it's not there. + uip/rmf.c: when rmf'ing a folder make sure parent's folder is + writable as well as the folder. + + +Sun Oct 28 10:32:06 1984 /mtr (agent: Marshall Rose) + + uip/*.c: remove calls to m_news(), also add m_foil() to foil + implicit calls to m_getdefs (). + {sbr/m_getdefs,uip/rmf}.c: make mp->others checking a bit smarter + for #ifdef UCI. + + +Sun Oct 28 20:36:45 1984 /mtr (agent: Marshall Rose) + + uip/folder.c: On "folder +foo", if +foo doesn't exist, ask if it + should be. + + +Sun Oct 28 22:12:22 1984 /mtr (agent: Marshall Rose) + + uip/bbr$repl: forgot to support -[no]query. + conf/doc/tmac.h: add .nf and .fi at the right spots for "FILES", + etc. + +Mon Oct 29 19:23:10 1984 /mtr (agent: Marshall Rose) + + uip/bbc.c: remove a couple of calls to setbbent(). They were + defeating setbbfile(). They weren't even needed since the + first thing that bbc does (even before parsing arguments) is + to call setbbent(). + uip/show.c: force -noformat, -noheader, and -nopr to be at least + three characters for recognition. + uip/post.c: when invoking fileproc, add a '+' only if it doesn't + start with '+' or '@'. + + +Tue Oct 30 08:12:50 1984 /mtr (agent: Marshall Rose) + + uip/{comp,dist,forw,repl}.c: make the "push" option at "What now?" + level visible. Document the draftfolder switches in the + manual page + uip/bbc.c: document `-file BBoardsfile' in manual page + uip/bbl.c: remove -debug switch + uip/repl.c: remove -debug switch + uip/send.c: document -[no]remove in manual page, make -push + visible and add -nopush. Document the draftfolder switches in + the manual pages + + + +Tue Oct 30 16:35:37 1984 /mtr (agent: Marshall Rose) + + uip/prompter.c: if the skeleton lacked a body sometimes prompter + would ask for a body and sometimes it wouldn't. Now it doesn't. + uip/dist.c: call ready_msg() each time ready_draft() is called so + user can edit message being dist'd. (sigh) + + +Tue Oct 30 18:59:45 1984 /mtr (agent: Marshall Rose) + + mf/mf.c: very minor clean-up of isfrom(). + mhmts/{hosts.c,netmail.c},{mmdf,sendmts}/hosts.c: include mts.h + + +Tue Oct 30 21:30:38 1984 /mtr (agent: Marshall Rose) + + tws/dtimep.c: parse ctime(3) strings, since some fool hosts + actually permit that to get into the Internet. + + +Tue Oct 30 22:14:19 1984 /mtr (agent: Marshall Rose) + + uip/post.c: if we get an address-bearing field without any address, + just ignore it instead of complaining about it. + + +Wed Oct 31 07:54:41 1984 /mtr (agent: Marshall Rose) + + mmdf/hosts.c: somehow "mmdf.h" and "util.h" weren't included. + + +Wed Oct 31 08:13:36 1984 /mtr (agent: Marshall Rose) + + uip/prompter.c: if the skeleton lacked a body sometimes prompter + would ask for a body and sometimes it wouldn't. Now it ALWAYS + does. + uip/show.c: "show -pr -f n" exec'd "pr inbox/-f inbox/n". Now it + exec's "pr -f inbox/n" like it should. + + +Wed Oct 31 14:41:06 1984 /mtr (agent: Marshall Rose) + + uip/scansbr.c: change SLINE to 78 (instead of 79). We really + should read termcap or an MH profile entry though. + + +Wed Oct 31 19:12:58 1984 /mtr (agent: Marshall Rose) + + uip/rcv{cron,tty}.c: include "../mmdf/util.h" when MMDFMTS. + + +Wed Oct 31 20:23:13 1984 /mtr (agent: Marshall Rose) + + -- All fixes from Phyllis Kantar at Rand -- + uip/repl.c: should use done(1) if the initial m_edit fails instead + of done(0). + sendmts/smail.c: comment out passing of "-ov" to SendMail if + compiled at Rand. + +Wed Oct 31 22:27:33 1984 /mtr (agent: Marshall Rose) + + uip/repl.c: since post can handle multiple folders in an fcc: + line, take advantage of it. + + +Thu Nov 1 00:33:24 1984 /mtr (agent: Marshall Rose) + + bbsupport/{bboards.{daily,weekly},bb{save,remove}} - use /bin/sh + not /bin/csh + bbsupport/bb{aka,exp,tar}.c - call setbbent() with the right + argument. Where applicable use /bin/sh not /bin/csh + conf/config/MakeBBoards - remove dependencies + conf/mhconfig.c - support for empty mmdfldir and non-empty + mmdflfil. + + +Thu Nov 1 15:14:43 1984 /mtr (agent: Marshall Rose) + + support/mhl.format: change terminal length from 40 to 23. + + +Thu Nov 1 18:42:44 1984 /mtr (agent: Marshall Rose) + + sbr/brkstring.c: brkany() wasn't checking for a null string. It + does now. + + +Fri Nov 2 07:56:36 1984 /mtr (agent: Marshall Rose) + + uip/pick.c: if no matches and -list output a "0" so backquoting + fails. + + +Fri Nov 2 13:17:27 1984 /mtr (agent: Marshall Rose) + + uip/replsbr.c: don't bomb if returnee's host is unknown (use + AD_HOST instead of AD_NAME). + mmdf/hosts.c: when calling mmdf_init() use invo_name and not "mh". + + +Fri Nov 2 13:44:50 1984 /mtr (agent: Marshall Rose) + + uip/{forw,forwsbr}.c: change encapsulation algorithm to use + different bit-stuffing scheme. + uip/mhlsbr.c: with -forward (interface from forw), support change + in encapsulation algorithm. + + +Fri Nov 2 17:08:18 1984 /mtr (agent: Marshall Rose) + + uip/forwsbr.c: remove, put cpydgst() into sbr/cpydata.c + config/mh.h, sbr/llib-lmh: declare cpydgst(). + + +Sat Nov 3 19:56:51 1984 /mtr (agent: Marshall Rose) + + uip/bbc.c: get this: "bbc -quiet" with no other arguments and a + bogus "bboards:" entry in the profile would yield a core dump. + Marvelous. + + +Sun Nov 4 15:00:20 1984 /mtr (agent: Marshall Rose) + + sbr/m_getfld.c: in the interests of speed-up, change eom() to a + macro that calls the auxilary function Eom() if need be. This, + along with the addition of a new mbx_style, DEFAULT, should + give a significant speed-up in parsing individual files and + the MH profile. Finally, make Getc() a macro as well, which + calls the routine GETC() only on special occasions. + config/mh.h,sbr/{llib-lmh,m_getfld.c}: change mbx_unknown() to + m_unknown(). + + +Sun Nov 4 17:40:04 1984 /mtr (agent: Marshall Rose) + + uip/folder.c: forgot the m_sync() after m_setcur(). This + prevented "folder +folder msg" from setting msg as cur. + + +Mon Nov 5 13:14:36 1984 /mtr (agent: Marshall Rose) + + uip/replsbr.c: don't adios() when can't understand "From:" or + "Sender:" field. Continue on, gracefully (ha!) + + +Mon Nov 5 18:15:01 1984 /mtr (agent: Marshall Rose) + + -- ALTOS port of MH.5 (under #ifdef ALTOS) -- + conf/config/config.c: "more" resides in /usr/bin/. "ls" resides + in /bin/. + conf/config/mts.c: read /etc/mhid for {Local,System}Name(). Also + add routine gethostname () which reads /etc/systemid. + config/mh.h: #include "../config/altos.h" on #ifdef ALTOS. Also, + new #define LINK which is "@" unless ALTOS else "#". + config/altos.h: to get past V7 compiler... + mf/msgchk.c: was using NULL instead of "" + mf/mf.h: #include "../config/altos.h" on #ifdef ALTOS. + sbr/m_edit.c: use LINK instead of "@" + sbr/m_gmsg.c: use LINK instead of "@" + sbr/m_seq.c: was using NULL instead of "" + uip/clrsbr.c: use minimum of 2048 size for termcap buffer + uip/dist.c: use LINK instead of "@" + uip/install-mh.c: use (FILE *)NULL instead of NULL + uip/msh.c: don't #include if ALTOS + uip/repl.c: use link instead of "@" + uip/rmf.c: use link instead of "@" + + +Tue Nov 6 09:56:21 1984 /mtr (agent: Marshall Rose) + + conf/mhconfig.c: add "oldload" option for ALTOS. + + +Tue Nov 6 09:56:55 1984 /mtr (agent: Marshall Rose) + + sbr/{m_edit.c,llib-lmh}: add extra argument for $cwd for edit. + uip/{comp,dist,forw,repl}.c: call pwd() and invoke m_edit with the + extra argument. + + +Tue Nov 6 21:16:42 1984 /mtr (agent: Marshall Rose) + + uip/msh.c: call m_unknown() since advanced m_getfld() algorithm + loses otherwise (a long story). + + +Tue Nov 6 21:33:39 1984 /mtr (agent: Marshall Rose) + + uip/dist.c: on "push" call ready_draft() prior to actual push() + since if dist is invoked from bbr the file being distributed + will get zapped prior to ready_draft() getting called. Moby + hack. + + +Wed Nov 7 20:12:04 1984 /mtr (agent: Marshall Rose) + + sbr/m_draft.c: "Draft-Folder: +drafts" loses. Strip the '+' if + need-be. + + + +Wed Nov 7 20:45:44 1984 /mtr (agent: Marshall Rose) + + uip/{clr,scan}sbr.c: read termcap to ascertain the length of the + scan line. + uip/trmsbr.c: used to be called uip/clrsbr.c + + +Wed Nov 7 21:51:56 1984 /mtr (agent: Marshall Rose) + + uip/post.c: make Bcc:s look more line a forwarded message. + uip/mhl.c: add -forwall flag to help forw for batching. the -forward + flag now just uses the encapsulation algorithm. + + +Thu Nov 8 16:59:37 1984 /mtr (agent: Marshall Rose) + + uip/bbc.c: trap sigTERM just like sigEMT so user can kill bbc and + "have the right thing happen". + + +Sat Nov 10 16:10:33 1984 /mtr (agent: Marshall Rose) + + sbr/trimcpy.c: remove all trailing [lt]wsp. + + +Mon Nov 12 08:15:59 1984 /mtr (agent: Marshall Rose) + + uip/msh.c: msh$show didn't know about the `-form formfile' switch. + + +Mon Nov 12 08:29:19 1984 /mtr (agent: Marshall Rose) + + conf/makefiles/bbsupport: when MH profile was installed for the + BBoards login, the context file wasn't. + sbr/m_getdefs.c: if "context:" isn't set in the MH profile, then + don't complain if it's not there. + + +Mon Nov 12 11:01:51 1984 /mtr (agent: Marshall Rose) + + uip/post.c: re-arrange the code a bit for better organization. + + +Mon Nov 12 22:15:53 1984 /mtr (agent: Marshall Rose) + + -- All fixes from Fred Blonder at UMCP-CS -- + conf/doc/mh.rf: add more details (mini tutorial). + sbr/{concat.c,llib-lmh}: use + sbr/m_name.c: use simpler method, sprintf(). Also fix size of + name[] buffer. + + +Tue Nov 13 00:08:01 1984 /mtr (agent: Marshall Rose) + + uip/{burst,msh}.c: fix bursting algorithm to support forwardings/bcc:s. + uip/{forw,mhlsbr,post}.c: strip one extra \n from last encapsulation + boundary. + + +Tue Nov 13 00:58:41 1984 /mtr (agent: Marshall Rose) + + uip/msh.c: add "inc" and "mhmail" commands (big deal). + + +Tue Nov 13 13:08:41 1984 /mtr (agent: Marshall Rose) + + newsupport/mh_receive: make it generated during MH configuration. + conf/mhconfig.c: support above change. + + +Tue Nov 13 18:58:43 1984 /mtr (agent: Marshall Rose) + + tws/{tws.h,dtime.c}: move tws_compare() from uip/picksbr.c to + dtime.c, call it twsort(). + + +Tue Nov 13 21:05:53 1984 /mtr (agent: Marshall Rose) + + uip/msh.c: add "sortm" command. + uip/sortm.c: clean it up a bit. + + +Wed Nov 14 10:23:19 1984 /mtr (agent: Marshall Rose) + + -- All suggestions from Phyllis Kantar at Rand -- + mf/mf.{h,c}: add new field entry "note" for 822-style comments. + config/addrsbr.h: add corresponding field entry m_note. + also change m_hnum to m_type. + uip/addrsbr.c: add a new argument to getm() to say what type the + default host is. + + +Wed Nov 14 13:30:00 1984 /mtr (agent: Marshall Rose) + + sbr/m_convert.c: if "0" is given as a message number, print + special error message (for use with backquoted pick). + sbr/m_gmsg.c: be more careful about saying when "cur" exists. + (don't set "curmsg" unless "mp -> msgstats[curmsg] & EXISTS"). + + +Wed Nov 14 19:06:24 1984 /mtr (agent: Marshall Rose) + + sbr/m_{gmsg,seq}.c: fix various logic bugs that prevented private + sequences from being recognized as such. + + +Wed Nov 14 20:16:04 1984 /mtr (agent: Marshall Rose) + + sbr/adios.c: for 4.2BSD use writev() on the adios() family of + routines, gives much smoother output. + uip/mhlsbr.c: call the adios() family of routines instead of + explicitly using stderr. + + +Wed Nov 14 22:19:10 1984 /mtr (agent: Marshall Rose) + + sbr/m_gmsg.c: undo curmsg "fix" above, it broke MH mightily! + sbr/m_convert.c: check curmsg here, so explicit references to + "cur", when it doesn't exist, fails. + + +Wed Nov 14 23:24:56 1984 /mtr (agent: Marshall Rose) + + -- All suggestions from Phyllis Kantar at Rand -- + sbr/{ssequal,uleq}.c: default arguments to "" if NULL. + uip/addrsbr.c: have ismymbox() recognize localhost!user. + uip/folder.c: have "folder -fast msg" set "msg" as cur. + sbr/m_getdefs.c: if using $MH, and it isn't relative, + after expanding it, setenv it to an absolute pathname for + subshells. + + +Thu Nov 15 09:24:32 1984 /mtr (agent: Marshall Rose) + + -- More fixes from Fred Blonder at UMCP-CS -- + sbr/concat.c: botched installation for the pyramid. + use Fred's code. + + +Thu Nov 15 09:29:43 1984 /mtr (agent: Marshall Rose) + + -- Fixes from John Romine at TGC -- + uip/{forw,mhlsbr}.c: using NULL instead of "" in a couple of + places. + + +Thu Nov 15 12:11:58 1984 /mtr (agent: Marshall Rose) + + mmdf/hosts.c: at the suggestion of Doug Kingston, use dm_v2route() + to map host references to official domain strings. + + +Thu Nov 15 21:15:41 1984 /mtr (agent: Marshall Rose) + + -- Fixes from John Romine at TGC -- + sbr/m_getdefs.c: use (FILE *)NULL instead of NULL when testing + fopen()'s return value. + + +Fri Nov 16 08:20:50 1984 /mtr (agent: Marshall Rose) + + sbr/m_getdefs.c: close up COMPAT code slightly. + conf/makefiles/*: change "-cp $(BINDIR)/cmd zcmd" to use "-mv". + (On a trial basis.) + +Fri Nov 16 08:21:08 1984 /mtr (agent: Marshall Rose) + + -- More fixes from Fred Blonder at UMCP-CS -- + conf/mhconfig.c: #define SVAL(s) to handle those pesky + de-references to NULL. + + +Fri Nov 16 19:01:32 1984 /mtr (agent: Marshall Rose) + + uip/msh.c: remove -[no]burst switches. Add "rmm" command, but don't + document it yet. Still have to resolve a few problems. + + +Sat Nov 17 13:49:12 1984 /mtr (agent: Marshall Rose) + + config/mh.h,uip/{folder,refile}.c: add NFOLDERS to denote max number + of folders/files on command line. + + +Sat Nov 17 15:33:14 1984 /mtr (agent: Marshall Rose) + + uip/{mhl,trm}sbr.c: add sc_length() to return li#. Have mhl + assume co# and li# based on termcap entry if not given on + command line. If entries aren't present in termcap, use + values in template. + + +Sat Nov 17 21:22:35 1984 /mtr (agent: Marshall Rose) + + conf/makefiles/{mts,uip}: change PGMPROT to 755 for dpk. + + +Sat Nov 17 22:43:11 1984 /mtr (agent: Marshall Rose) + + uip/msh.c: add msh$pack command. + uip/pack.c: simplify a bit. + + +Sun Nov 18 15:00:07 1984 /mtr (agent: Marshall Rose) + + uip/pick.c: if -help, set -nozero so done() doesn't print "0". + Moby hack. + + +Mon Nov 19 23:36:57 1984 /mtr (agent: Marshall Rose) + + uip/bbc.c: neaten handling of distribution addresses on + `-topics' output. + + +Tue Nov 20 16:56:14 1984 /mtr (agent: Marshall Rose) + + bboards/{bboards.h,getbbent.c}: change bboard structure to make + life easier for bbc. Also add new structure for use with msh. + + +Wed Nov 21 13:35:33 1984 /mtr (agent: Marshall Rose) + + config/dropsbr.h: new include file + uip/dropsbr.c: add support for maildrop mapping + uip/dropsbr.c: add new parameter to mbx_open() for default mode on + creation + uip/{msh,pack,post,rcvpack,s{bboards,local}}.c: modify to use new + support for maildrop mapping + + +Fri Nov 23 19:26:35 1984 /mtr (agent: Marshall Rose) + + uip/{bbc,post,prompter,rcvdist,rmail,{repl,scan}sbr,s{bboards,local}}.c: + minor clean-up + + +Fri Nov 23 21:08:04 1984 /mtr (agent: Marshall Rose) + + -- More Changes for the ALTOS -- + config/altos.h: didn't work, idiotic V7 compiler (cpp) didn't do + "the right thing", so get rid of it and change the variable + names in-line + conf/config/mts.c: make isdlm{1,2} into macros instead of routines + in mf/mf.c; also move getusr() there. + conf/config/mts.c: make getfullname () standard and add new + mtstailor option, mailid, to do the BRL/NRTC stuff with + pw_gecos + + +Sat Nov 24 09:59:31 1984 /mtr (agent: Marshall Rose) + + -- Fixes from John Romine at TGC -- + conf/mh-gen.8: include "dm.h" in list of include files for MMDF2 + conf/mh-gen.8: typo "ggenerate" + conf/examples/READ-ME: BSD41a => BSD41A + conf/mhconfig.c: V7 compiler tosses its cookies on reasonably + formed structure members. Fix + conf/config/config.c: remove comment about "pick -show" + conf/{config/config.c,doc/mh-profile.rf}, config/mh.h sbr/m_getdefs.c: + remove scanproc, since that's used only by "pick -scan" which does + not exist + conf/mhdoc: make into a Bourne shell script. + + +Sat Nov 24 19:09:14 1984 /mtr (agent: Marshall Rose) + + sbr/showfile.c: if lproc is "mhl", use mhlproc for consistency + (Actually, user should use "lproc: show", "showproc: mhl".) + +Sat Nov 24 22:29:09 1984 /mtr (agent: Marshall Rose) + + uip/mhlsbr.c: into the fold + + +Sun Nov 25 13:28:47 1984 /mtr (agent: Marshall Rose) + + uip/{{mhl,trm}sbr,msh}.c: use and support SOprintf() for output + to terminal + uip/mhlsbr.c: add support for built-in mhl in msh, mhlsbr() + uip/msh.c: use new support for built-in mhl + sbr/m_getfld.c: some mis-logic in Eom(); if style is UNKNOWN, + ALWAYS figure out what it is prior to going on + + +Sun Nov 25 19:30:46 1984 /mtr (agent: Marshall Rose) + + bbsupport/bboards.{dai,week}ly: if the bboards login shell is csh, + can't use /bin/sh format... + + +Sun Nov 25 23:36:59 1984 /mtr (agent: Marshall Rose) + + uip/{mhl,trm}sbr.c: move discard() from mhlsbr to trmsbr + + +Mon Nov 26 10:20:07 1984 /mtr (agent: Marshall Rose) + + uip/send.c: add -[no]forward + + +Mon Nov 26 12:26:28 1984 /mtr (agent: Marshall Rose) + + uip/mhlsbr.c: add -[no]bell + + +Mon Nov 26 20:34:18 1984 /mtr (agent: Marshall Rose) + + sbr/refile.c: new module; implements the "refile" option at "What + now?" level + uip/{comp,dist,forw,repl}.c: new switch -noedit, says to skip the + initial edit and proceed directly to "What now?" level. + Also make use of the new "refile" option at "What now?" level + uip/comp.c: support for JLR's comp from a folder/msg notion + + +Tue Nov 27 14:19:18 1984 /mtr (agent: Marshall Rose) + + uip/post.c: ignore Fcc:s when disting + + +Tue Nov 27 16:54:51 1984 /mtr (agent: Marshall Rose) + + sbr/m_draft.c: add new result parameter which tells if a + draft-folder is being used + uip/{comp,dist,forw,repl,show,send,whom}.c: modified appropriately + for extra parameter; this info is needed to decide which prompt and + options to offer the user if the draft chosen exists + + +Tue Nov 27 19:08:46 1984 /mtr (agent: Marshall Rose) + + uip/addrsbr.c: in addition to griping about bogus addresses in the + "alternate-mailboxes:" entry, add a line saying to fix it (and + where) + uip/scansbr.c: very minor cosmetic change in cpyfrm() for group + handling + + +Tue Nov 27 19:22:51 1984 /mtr (agent: Marshall Rose) + + sbr/m_getfld.c: add m_eomsbr() for msh$mhl for bursting (sigh) + + +Tue Nov 27 20:44:45 1984 /mtr (agent: Marshall Rose) + + -- More Changes for the ALTOS -- + conf/makefiles/{mts,tws}: @(LDOPTIONS) was being left out of + LDFLAGS + config/aliasbr.h,uip/{ali,aliasbr}.c: prefix members of the aka + structure with ak_, prefix members of the adr structure with ad_ + tws/tws.h: type "void" undefined + uip/rcv{dist,pack,tty}.c: include only if not on + ALTOS + uip/ttyw.c: put everything under #ifdef TTYD + + +Tue Nov 27 21:02:41 1984 /mtr (agent: Marshall Rose) + + uip/send.c: re-implement the -[no]unique switches for JLR. + + +Wed Nov 28 00:15:25 1984 /mtr (agent: Marshall Rose) + + uip/trmsbr.c: always read termcap and do what we can. When called + from in a non-interactive environment, do the right thing at + the right time... + uip/msh.c: call sc_width() at start-up to read good values from + trmsbr + + +Wed Nov 28 08:24:04 1984 /mtr (agent: Marshall Rose) + + uip/refile.c: if +folder arg is forgotten, don't print usage + string. Also add -draft switch. + + +Wed Nov 28 11:28:56 1984 /mtr (agent: Marshall Rose) + + uip/mhlsbr.c: ignores wasn't being handled properly (logic bug) + + +Wed Nov 28 19:57:44 1984 /mtr (agent: Marshall Rose) + + uip/rcv{pack,tty}.c: move inclusion of and + to the not MMDFMTS part, since "util.h" includes + 'em + + +Wed Nov 28 20:37:16 1984 /mtr (agent: Marshall Rose) + + uip/comp.c: restore old context-sensitive behavior + + +Wed Nov 28 20:42:21 1984 /mtr (agent: Marshall Rose) + + conf/makefiles/*: for installations, use mv -f to save backup + + +Wed Nov 28 22:59:34 1984 /mtr (agent: Marshall Rose) + + uip/msh.c: add -draft argument to msh$refile; clean-up -draft + argument in msh$show + sbr/m_draft.c: call path() on value of Draft-Folder: so relative + folders work (!!) + uip/repl.c: expand fcc: @folder arguments + + +Thu Nov 29 01:55:12 1984 /mtr (agent: Marshall Rose) + + uip/pick.c: don't output that "0" on error exits if stdout is a + tty... (yep, pick acts differently for ttys, just like ls) + + +Fri Nov 30 08:47:52 1984 /mtr (agent: Marshall Rose) + + uip/news.c: forgot to include mh.h; no one must be using it, love + to trash it from the distribution. + + + -- Enter BETA Testing -- + + +Wed Dec 5 14:28:18 1984 /mtr (agent: Marshall Rose) + + mts/msgchk.c, Makefile, conf/makefiles/mts: honor MF conventions + in msgchk, required MH sbr library + uip/inc.c: better check of umincproc + uip/{dist,forw,repl}.c: typo prevented annotation with the pyramid + cc + conf/makefiles/{bbsupport,uip}: give path to chown + uip/dropsbr.c: no diagnostic if map is empty + conf/config/mts.c, bboards/getbbent.c: more ALTOS stuff for v7 cc + sbr/m_getfld.c, uip/mhlsbr.c: botched pointer to function notation, + visible on v7 cc + bbsupport/bbexp.c: forgot to foil m_getdefs() + sbr/m_{setcur,seq}.c: handle "cur" correctly + sbr/m_getfld.c: in msh$mhl with a message with no body, big loss + uip/post.c: don't ask + sbr/m_getfld.c, conf/makefiles/sbr: use the mts stuff to + initialize the delimiter. The programs that need this will + call mts_init() themselvess prior to calling m_getfld() + + +Wed Dec 5 22:58:11 1984 /mtr (agent: Marshall Rose) + + uip/sbboards.c: on distribution, if a particular address loses, + keep on going and report the error later on. + bboards/mmdf/mmdf.{1,2}/bboards/bb_wtmail.c: in addition to above + fix to sbboards, post failure notices to the local-XXX-request + address. + + +Fri Dec 7 00:25:24 1984 /mtr (agent: Marshall Rose) + + uip/{inc,show}.c: implement "unseen" for TGC. This feature is + currently undocumented pending field-testing. + + + +Sat Dec 8 18:16:20 1984 /mtr (agent: Marshall Rose) + + uip/rcvtty.c: minor-cleanup + + +Sat Dec 8 18:16:41 1984 /mtr (agent: Marshall Rose) + + config/mh.h, tws/tws.h, conf/config/mts.c: remove the void + definitions + conf/Makefile, config/makefiles/*: remove -ns from LDFLAGS + conf/makefiles/uip: don't use the -g option for ls for + s{bboards,local} + conf/makefiles/*: use -l to ls not -ls + + +Mon Dec 10 23:38:05 1984 /mtr (agent: Marshall Rose) + + config/scansbr.h, uip/{inc,scansbr,send,post}.c: add support for + TTI's prototype TMA under #ifdef TMA + uip/tmasbr.c: new module for support + + +Tue Dec 11 17:05:36 1984 /mtr (agent: Marshall Rose) + + uip/trmsbr.c: minor fix in discard() for #ifdef ALTOS + + +Tue Dec 11 22:35:58 1984 /mtr (agent: Marshall Rose) + + -- Fixes from Julian Onions at Nottingham -- + conf/makfiles/*: "ld -x -r" terminates with status 1 even if all + goes well, so tell make not to worry about it + config/mh.h,conf/examples/READ-ME: talk about void=int + uip/{msh,post,rcv{dist,pack,tty},slocal}.c: include if + not V7 + + +Wed Dec 12 11:51:52 1984 /mtr (agent: Marshall Rose) + + tws/{tws.h,dtime.c}: use modified version of gtime() to add new + structure element to (struct tws *). This makes time + comparisons insensitive to timezones, etc. + +Thu Dec 13 00:05:42 1984 /mtr (agent: Marshall Rose) + + sbr/m_getfld.c: big fields were having their headers zero'd + + +Tue Dec 18 15:59:34 1984 /mtr (agent: Marshall Rose) + + sbr/m_getfld.c, uip/scansbr.c: some speed improvements from Jim + Larus at UCB + + +Tue Dec 18 16:00:07 1984 /mtr (agent: Marshall Rose) + + bboards/getbbent.c, conf/config/mts.c, sbr/m_backup.c, + uip/dropsbr.c: for ALTOS "%.*s" doesn't work if * evals to 0, + so kludge around it + + +Tue Dec 18 16:00:48 1984 /mtr (agent: Marshall Rose) + + uip/{bbc,msh}.c: for Farber, say name of BBoard not name of file + + +Tue Dec 18 16:48:17 1984 /mtr (agent: Marshall Rose) + + bboards/*.c, conf/config/mts.c, mhmts/*.c, mmdf/*.c, sendmts/*.c, + tws/*.c: register madness + + +Wed Dec 19 12:49:42 1984 /mtr (agent: Marshall Rose) + + sbr/m_getfld.c: advise() with inverted arguments + + +Sat Dec 29 10:43:12 1984 /mtr (agent: Marshall Rose) + + uip/msh.c: improved $mhfolder handling for -prompt. + + +Sat Dec 29 10:45:08 1984 /mtr (agent: Marshall Rose) + + sbr/m_sync.c: handle public and read-only sequences correctly + uip/rmf.c: fix botch for handling read-only folders + + +Sat Dec 29 12:17:50 1984 /mtr (agent: Marshall Rose) + + conf/{config/config.c,doc/{folder,mh-profile}.rf}, sbr/m_getdefs.c, + uip/folder.c: fix folder -fast -recurse + + +Sat Dec 29 16:56:59 1984 /mtr (agent: Marshall Rose) + + conf/makefiles/sbr, config/mh.h, sbr/llib-lmh, sbr/closefds.c, + uip/{msh,post,rcvtty,replsbr,send,slocal,whom}.c: implement + closefds () + + +Sun Dec 30 11:50:57 1984 /mtr (agent: Marshall Rose) + + uip/post.c: one more -noverbose fix + + +Sun Dec 30 12:01:08 1984 /mtr (agent: Marshall Rose) + + uip/sortm.c: fix for holes in "msgs" from Mike O'Brien + + +Sun Dec 30 12:11:45 1984 /mtr (agent: Marshall Rose) + + uip/post.c: have non-recipient addresses honor aliases + + +Sun Dec 30 19:52:27 1984 /mtr (agent: Marshall Rose) + + conf/config/{config,mts}.c, mmdf/hosts.c, uip/trmsbr.c, + bboards/getbbent.c, config/mh.h: minor cleanup. + + +Mon Dec 31 17:43:49 1984 /mtr (agent: Marshall Rose) + + tws/{tws.h,dtime.c}: add dgmtime() + + +Mon Dec 31 21:28:07 1984 /mtr (agent: Marshall Rose) + + uip/packf.c, conf/doc/packf.c, conf/{config/config.c,makefiles/uip}, + change pack to packf + config/mh.h: make MAXFOLDERS smaller for the ALTOS + + +Wed Jan 2 13:20:42 1985 /mtr (agent: Marshall Rose) + + uip/addrsbr.c: #ifdef DUMB inserted + + +Fri Jan 4 16:28:49 1985 /mtr (agent: Marshall Rose) + + uip/addrsbr.c: SENDMTS was botching UUCP addrs + + +Mon Jan 7 19:05:22 1985 /mtr (agent: Marshall Rose) + + uip/inc.c: add -[no]truncate + conf/doc/*: change up documentation a bit + + +Tue Jan 8 09:12:42 1985 /mtr (agent: Marshall Rose) + + conf/{mh-gen,doc/MH}.rf: last change, fix public domain notice + config/notice.h: remove + uip/version.sh: don't include ../config/notice.h + + +Tue Jan 8 09:45:25 1985 /mtr (agent: Marshall Rose) + + sbr/m_edit.c: from Mike O'Brien on 4.2BSD use symlinks if "@" is + across file systems + uip/inc.c: slight botch in -[no]truncate + +Tue Jan 8 13:54:13 1985 /mtr (agent: Marshall Rose) + + MH.5 is finished, finally. + + +Sat Jan 26 09:05:52 1985 /mtr (agent: Marshall Rose) + + -- Fixes for MHMTS configuration -- + conf/makefiles/uip: shouldn't build rcvdist on an MHMTS system + conf/doc/mhook.rf: ditto + conf/config/mts.c, mhmts/netmail.c, mts/mts.h, uip/rmail.c: + some typos in the declarations of global MTS variables that + are MHMTS specific + mf/mmuu.c: addr_convert() conflicted with routine of same name + in uumm.c + uip/news.c: looking in the wrong place for on 4.2BSD + systems + + +Sat Jan 26 09:08:43 1985 /mtr (agent: Marshall Rose) + + uip/{inc,post}.c: changes for #ifdef TMA; this stuff is still + under non-disclosure (not the MH code, just the -ltma library + which doesn't come with MH) + + +Sat Jan 26 09:38:08 1985 /mtr (agent: Marshall Rose) + + tws/dtime.c: #define dysize(), since could be a macro in ctime.c + (thanks, Fred) + + +Sat Jan 26 09:12:27 1985 /mtr (agent: Marshall Rose) + + MH #5.310[UCI] (uci-750a) released to MH-Workers + + +Sun Jan 27 17:41:03 1985 /mtr (agent: Marshall Rose) + + sendmts/smail.c, uip/post.c: with -DSMTP, keep one SMTP connection + open, instead of starting a new one for each transaction + othersupport/pop/{Makefile,{popd,popser,inc,popsbr}.c}: support + "rpop" under #ifdef RPOP + othersupport/pop/client.c: remove + conf/{config/mts.c,tailor/READ-ME,makefiles/sendmts}, mts/mts.h, + sendmts/{smail,client}.c: support new server search list + facility used by both -DSMTP and -DPOP + + +Sun Jan 27 18:42:49 1985 /mtr (agent: Marshall Rose) + + conf/makefiles/mts: dependency screw-up on mts.o + + +Tue Feb 12 19:33:14 1985 /mtr (agent: Marshall Rose) + + uip/mhlsbr.c: clear_screen() logic between messages botched + + +Mon Feb 18 12:53:50 1985 /mtr (agent: Marshall Rose) + + conf/doc/send.rf, uip/send.c: de-implement ~/.signature support + + +Wed Feb 20 20:40:14 1985 /mtr (agent: Marshall Rose) + + uip/inc.c: fix suggested by John Dilley at Purdue, inc now ignore + signals if it's going to zero the maildrop. + + +Wed Feb 20 20:48:12 1985 /mtr (agent: Marshall Rose) + + sbr/adios.c: save errno prior to doing fancy perror stuff + + +Fri Mar 1 19:48:53 1985 /mtr (agent: Marshall Rose) + + conf/config/config.c: if MORE is defined, used that instead of + /usr/ucb/more. The #ifdef ALTOS dependency is removed. + ALTOS users should use options MORE='"/usr/bin/more"', + just like users of the Dual. + conf/examples/READ-ME: document same + + +Fri Mar 1 19:56:43 1985 /mtr (agent: Marshall Rose) + + conf/config/mts.c: for the DUAL, you can't link to a file that you + can't read, unbelievable, eh?, so change the creat (foo, 0000) + to creat (foo, 0400). Also, fix up some botched args to a + sprintf() call. + + +Fri Mar 1 19:59:32 1985 /mtr (agent: Marshall Rose) + + uip/trmsbr.c: forgot to make a termcap buffer TXTSIZ'd instead + of BUFSIZ'd. + + +Sat Mar 1 20:21:17 1985 /mtr (agent: Marshall Rose) + + MH #5.321[UCI] (uci-750a) released to MH-Workers + + +Wed Mar 6 18:08:11 1985 /mtr (agent: Marshall Rose) + + uip/{dropsbr,packf,post,slocal}.c: fix to maildrop mapping bug + with MHMTS and local delivery in post, and SENDMTS and local + delivery in slocal + +Wed Mar 6 18:19:46 1985 /mtr (agent: Marshall Rose) + + TODO, config/addrsbr.h, sendmts/smail.c, mf/mf.{c,h}, + uip/{addrsbr,ap,post,rcvdist,sbboards}.c: handle 822-style + routing + + +Wed Mar 6 18:59:22 1985 /mtr (agent: Marshall Rose) + + -- Fixes from Robert Elz -- + sbr/makedir.c: use mkdir() under #ifdef BSD42 + uip/rmf.c: use rmdir() under #ifdef BSD42 + + +Sat Mar 9 15:36:13 1985 /mtr (agent: Marshall Rose) + + bboards/mmdf/mmdf.{1,2}/bboards/bb_wtmail.c, uip/sbboards.c: + fix minor bug requiring nearly major re-write!!! + + +Sat Mar 9 15:54:40 1985 /mtr (agent: Marshall Rose) + + uip/dropsbr.c: fix bug when fixing stomped maildrop. + + +Tue Mar 12 18:07:44 1985 /mtr (agent: Marshall Rose) + + othersupport/pop/pop.txt: a few minor corrections to typos. + + +Wed Mar 13 22:01:37 1985 /mtr (agent: Marshall Rose) + + -- Fixes suggested by Phyllis Kantar -- + uip/{comp,dist,forw,repl}.c: fix quit -delete logic + conf/doc/{comp,mh-chart}.rf: document "-file file" switch + uip/send.c: "send -help" should done (1) for comp, et. al. + uip/send.c: typo "tempoary" + conf/doc/{send,whom}.rf: Profile Components forgot Draft-Folder + uip/ali.c: always load system aliases + conf/doc/{MH,comp,dist,forw,mhook,repl,send,show,mh-alias,mh-mail, + mh-profile,mhl,post}.rf: typo fixes + conf/doc/send.rf, uip/send.c: -forward now the default, also + don't gripe about "show -draft file" + + +Wed Mar 13 22:24:07 1985 /mtr (agent: Marshall Rose) + + uip/send.c: fix "use xxx logic" + uip/msh.c: a NULL vs. "" typo + + +Thu Mar 14 22:41:37 1985 /mtr (agent: Marshall Rose) + + -- Fixes suggested by John Dilley -- + conf/{config/mts.c,tailor/READ-ME}: add new mtstailor variables + localname, systemname, and uucpchan + mts/mts.h, conf/{mh-gen.8,config/{mts.c,mtstailor},tailor/READ-ME}: + add new mtstailor variable lockstyle to control style of locking + sbr/m_getfld.c: catch the UNIX "from user" line + uip/scansbr.c: make use of the UNIX "from user" line + uip/addrsbr.c: more #ifdef DUMB support + uip/inc.c: minor bug in inc w.r.t. closing locked file + uip/post.c: more #ifdef DUMB support + uip/replsbr.c: support Return-Path: for defaulting host names + as a last resort + + +Fri Mar 15 11:45:00 1985 /mtr (agent: Marshall Rose) + + othersupport/emh/READ-ME: new file + + +Fri Mar 15 23:05:43 1985 /mtr (agent: Marshall Rose) + + bbsupport/bbexp.c: fix string botch for command to popen. + also allow extra arguments to indicate aging period. + + +Fri Mar 15 23:21:29 1985 /mtr (agent: Marshall Rose) + + sbr/printsw.c: compress output of printed switches + sbr/m_getdefs.c: let $MHCONTEXT override context variable + sbr/m_{getdefs,gmsg,sync}.c, conf/doc/mh-profile.rf: let the profile + entry "mh-sequences" override .mh_sequences + sbr/m_seq.c: optimization + + +Sat Mar 16 00:28:01 1985 /mtr (agent: Marshall Rose) + + uip/{inc,msh,rcvtty,scan,scansbr}.c: clean up handling of + inc -silent + sbr/{llib-lmh,m_send.c}, uip/{annosbr,comp,dist,forw,repl}.c: move + annotations into send + conf/makefiles/uip, uip/{send,post}.c: ditto + conf/doc/{dist,forw,repl}.rf: ditto + uip/anno.c: forgot to check (mp -> msgstats[msgnum] & SELECTED) + + +Sat Mar 16 01:38:06 1985 /mtr (agent: Marshall Rose) + + conf/config/mts.c: add a few calls to mts_init ("mts") at + strategic places + + +Sat Mar 16 12:23:37 1985 /mtr (agent: Marshall Rose) + + uip/{mark,msh}.c: don't set previous-sequence to make debugging + easier + + +Sat Mar 16 12:49:48 1985 /mtr (agent: Marshall Rose) + + Makefile: simply Makefile using sh, also make DESTDIR work + conf/makefiles/othersupport: simplify Makefile + + +Tue Mar 19 14:17:30 1985 /mtr (agent: Marshall Rose) + + othersupport/mtrenv/bin/{distf,mpick,packit}: updates + + +Tue Mar 19 17:31:14 1985 /mtr (agent: Marshall Rose) + + conf/doc/{ap,mh-chart}.rf, uip/ap.c: accept -help switch + + +Tue Mar 19 18:16:33 1985 /mtr (agent: Marshall Rose) + + conf/doc/msgchk.rf: new file + conf/{doc/{mh,mh-chart,MH}.rf,makefiles/doc}: update for msgchk + + +Thu Mar 21 08:45:11 1985 /mtr (agent: Marshall Rose) + + sendmts/smail.c: fix logic error in sm_end(); MMDF-I has this + problem, MMDF-II might! + + +Sat Mar 23 12:48:30 1985 /mtr (agent: Marshall Rose) + + -- Support the WhatNow shell -- + conf/makefiles/{sbr,uip}: updates for all of this + uip/{comp,dist,forw,repl}.c: remove What now? code, + add -whatnow program, -nowhatnow + sbr/m_whatnow.c: new module + conf/config/config.c,config/mh.h,sbr/m_getdefs.c: new variable + whatnowproc + sbr/llib-lmh: update + uip/whatnow.c: new program, the first WhatNow shell + conf/doc/{mh-chart,whom}.rf, uip/whom.c: upgrade to take draftfolder + arguments + sbr/putenv.c: update for above + sbr/m_send.c: undo previous edits, m_whatnow() takes care of it + uip/distsbr.c: new module for dist-style support + uip/{send,whom}.c: call distout() in distsbr.c + conf/doc/whatnow.rf: new file + conf/doc/{MH,comp,dist,forw,mh,mh-{chart,profile},repl}.rf: updates + conf/doc/template: fix + + +Sun Mar 24 18:32:47 1985 /mtr (agent: Marshall Rose) + + sbr/m_draft.c, + uip/{comp,dist,forw,refile,repl,send,show,whatnow,whom}.c: have + -nodraftfolder override "Draft-Folder:" profile entry + + +Mon Mar 25 18:06:48 1985 /mtr (agent: Marshall Rose) + + mf/mf.c: avoid (incorrectly) recognizing " at " for "@" by using a + heuristic suggested by JSol. + + +Tue Mar 26 18:02:52 1985 /mtr (agent: Marshall Rose) + + conf/doc/repl.rf: document bug in replcomps + + +Tue Mar 26 18:32:49 1985 /mtr (agent: Marshall Rose) + + conf/{config/mts.c,tailor/READ-ME}, config/aliasbr.h, mts/mts.h, + uip/aliasbr.c: make "*" logic mts-tailorable (ugh), you get + to choose highest non-user uid and non-user shell + + +Wed Apr 3 23:52:13 1985 /mtr (agent: Marshall Rose) + + sendmts/smail.c: comment out an extra RSET for UCI's losing + MMDF-I SMTP server + + +Wed Apr 3 23:53:12 1985 /mtr (agent: Marshall Rose) + + ohtersupport/mtrenv/bin/whatnow: new file + + +Sat Apr 6 16:17:23 1985 /mtr (agent: Marshall Rose) + + MH #5.348[UCI] (uci-750a) released to MH-Workers + + +Fri Apr 19 18:27:16 1985 /mtr (agent: Marshall Rose) + + conf/{config/mts.c,tailor/READ-ME}, mts/mts.h, uip/inc.c: + support the new MTS variable "pophost" + + +Fri Apr 19 18:28:44 1985 /mtr (agent: Marshall Rose) + + bboards/bboards.h, uip/bbc.c: support BB_INVIS for "hidden" + BBoards in -topic + uip/bbc.c: catch a long name that got past us + uip/bbc.c: fix -topics logic when BBoards given + + +Fri Apr 19 18:32:13 1985 /mtr (agent: Marshall Rose) + + conf/doc/MH.rf, sbr/m_send.c: de-implement "push" in whatnow + having send look for profile-entry of "push" rather than "send" + to confusing to the user "community" + + +Fri Apr 19 19:13:44 1985 /mtr (agent: Marshall Rose) + + uip/post.c: more #ifdef DUMB madness, for local addresses, + if no host portion given, then don't give it to sm_wadr() + uip/post.c: back #ifdef DUMB off a bit in From: for MMDFMTS + + +Fri Apr 19 19:23:39 1985 /mtr (agent: Marshall Rose) + + uip/whatnow.c: if edit fails, it's time to go away + sbr/m_edit.c: minor cosmetic change + + +Fri Apr 19 19:44:25 1985 /mtr (agent: Marshall Rose) + + uip/send.c: on annotations, if push'd avoid getting upset + if message to annotate isn't there + uip/send.c: fix "typo" for r1bindex () + uip/send.c: put ~/.signature support back in under #ifdef UCI + uip/send.c: use mktemp() instead of bogus makename! + uip/send.c: fix screwy interaction between msh, dist, whatnow, + and send (oh no!) + + +Sat Apr 20 14:46:10 1985 /mtr (agent: Marshall Rose) + + sbr/m_send.c, uip/whatnow.c: on "push", let send do push() instead + of whatnow + + +Wed Apr 24 22:44:30 1985 /mtr (agent: Marshall Rose) + + sbr/m_whatnow.c, uip/{dist,forw,repl}.c: fix obscure "@" bug. + + +Wed Apr 24 22:45:39 1985 /mtr (agent: Marshall Rose) + + conf/doc/MH.rf: just a few more fixes... + + +Thu May 2 21:13:03 1985 /mtr (agent: Marshall Rose) + + uip/sbboards.c: fdopen() called with wrong arg! + + +Thu May 2 21:13:32 1985 /mtr (agent: Marshall Rose) + + uip/post.c: a few more back-offs with #ifdef DUMB... + + +Thu May 2 21:13:32 1985 /mtr (agent: Marshall Rose) + + conf/makefiles/uip: make whatnow chmod +t'd + + +Thu May 2 21:14:56 1985 /mtr (agent: Marshall Rose) + + MH #5.360[UCI] (uci-750a) released to MH-Workers diff --git a/docs/historical/mh5/Makefile b/docs/historical/mh5/Makefile new file mode 100644 index 0000000..5eb4134 --- /dev/null +++ b/docs/historical/mh5/Makefile @@ -0,0 +1,56 @@ +####################################################################### +# Instructions to Make, for generation of nice-looking papers using TeX +####################################################################### + +.SUFFIXES: .pic .web .tex .dvi + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if TEXINPUTS=../doclib:.:${TEXINPUTS} tex \ + \\nonstopmode\\input $<\\bye; \ + then exit 0; else rm $@; exit 1; fi' + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# mh5 +############################################################# + +i-all: mh5.dvi + +i-print: mh5.dvi true + dvisp -J mh5 mh5.dvi + +i-count: true + detex text.tex | wc -cw + + +# customization files, et. al., not included below +mh5.dvi: version.tex + +version.tex: mh5.tex text.tex diagram1.tex diagram2.tex refs.tex version.sh + @: version.sh + +true:; + + + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f mh5.dvi mh5.imp + +clean:; rm -f CONTENTS.tex FIGURES.tex \ + mh5.lof mh5.log mh5.lot mh5.toc _* diff --git a/docs/historical/mh5/diagram1.tex b/docs/historical/mh5/diagram1.tex new file mode 100644 index 0000000..c0a620a --- /dev/null +++ b/docs/historical/mh5/diagram1.tex @@ -0,0 +1,12 @@ +% diagram 1 + +\verbatim +From: @(digest)-Request +To: @(digest) Distribution: dist-@(digest); +Subject: @(digest) Digest V@(volume) #@(issue) +Reply-To: @(digest) +-------- +@(digest) Digest @(date) Volume @(volume) : Issue @(issue) + +Today's Topics: +?endverbatim diff --git a/docs/historical/mh5/diagram2.tex b/docs/historical/mh5/diagram2.tex new file mode 100644 index 0000000..1d3467e --- /dev/null +++ b/docs/historical/mh5/diagram2.tex @@ -0,0 +1,10 @@ +% diagram 2 + +\verbatim +width=80,length=0,overflowtext=,overflowoffset=0 +Date:leftadjust,compress,compwidth=9 +From:leftadjust,compress,compwidth=9 +Subject:leftadjust,compress,compwidth=9 +: +body:nocomponent,overflowtext=,overflowoffset=0 +?endverbatim diff --git a/docs/historical/mh5/mh5.tex b/docs/historical/mh5/mh5.tex new file mode 100644 index 0000000..49b63df --- /dev/null +++ b/docs/historical/mh5/mh5.tex @@ -0,0 +1,41 @@ +% run this through PhD-TeX + +\input dcustom +\articlestyle +\drafttrue +\input version + +\input sfwmac + +\header + Changes to\\ + The Rand MH Message Handling System:\\\\ + MH.5\title + Marshall T.~Rose$^\dagger$\author + \versiondate/\info +\footnote{}{\hskip -\parskip $^\dagger$ Computer Mail: {\tx MRose@ICS.UCI.EDU}.} + +\centerline{\sc Abstract} +{\rightskip=0pt\narrower\narrower +\noindent +This document describes the user-visible change to the +UCI version of the Rand \MH/ system that were made from \mh4 to \mh5. +This document does not describe bug-fixes, per se, +or internal changes, +unless these activies resulted in a visisble change for the \MH/ user. + +This document is meant to supplement, +not supersede, the standard \MH/ user manual\cite{MH}. + +Comments concerning this documentation should be addressed to the Internet +mailbox {\sf Bug-MH@ICS.UCI.EDU}. +\par} + +\input text +\input refs +\printcontents +\unskip\footnote{}{\hskip -\parskip This document (version \versiontag/) +was \TeX set \today\ with DISS.STY v\version.} +\showsummary + +\bye diff --git a/docs/historical/mh5/refs.tex b/docs/historical/mh5/refs.tex new file mode 100644 index 0000000..ea546ed --- /dev/null +++ b/docs/historical/mh5/refs.tex @@ -0,0 +1,35 @@ +\let\journalinfo=\jourinfo +\let\thesis=\book % experimental +\let\thesisinfo=\bookinfo % .. + +\references + +\ref{MH} +\by M.T.~Rose, J.L.~Romine. +\paper The Rand \MH/ Message Handling System: User's Manual +\paperinfo UCI Version +\other +\publ Department of Information and Computer Science +\publaddr University of California, Irvine +\month July\year 1984 +\endref + +\ref{MH.BB} +\by M.T.~Rose. +\paper The Rand MH Message Handling System: The UCI BBoards Facility +\other +\publ Department of Computer and Information Sciences +\publaddr University of Delaware +\month October\year 1984 +\endref + +\ref{MH.TUT} +\by M.T.~Rose. +\paper The Rand MH Message Handling System: Tutorial +\other +\publ Department of Computer and Information Sciences +\publaddr University of Delaware +\month October\year 1984 +\endref + +\endreferences diff --git a/docs/historical/mh5/text.tex b/docs/historical/mh5/text.tex new file mode 100644 index 0000000..79c4156 --- /dev/null +++ b/docs/historical/mh5/text.tex @@ -0,0 +1,318 @@ +% 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: +\smallskip +{\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 {\tt typewriter style} and delimited by single-quotes. +\item{3.} \unix/ pathnames and envariables, +such as \file{/usr/uci/} and \file{\$SIGNATURE}, +are presented in {\sl slanted roman}. +\item{4.} Text presenting an example, such as +\example comp\ -editor\ zz\endexample +is presented in {\tt typewriter style}. +\smallskip} + +\bop\section{General Changes} +The author is pleased to announce that there are actually very few +user-visible changes to \mh5 from the \mh4 distribution. +The majority of \mh5 development was in the form of bug fixes and slight +generalizations. +In addition, \mh5 is somewhat faster than \mh4: +all programs have been speeded-up slightly, +a few, such as \pgm{msh}, have been speeded-up signficantly. + +\subsection{Library Paths} +When a filter or form file argument is given to an \MH/ program, +and the name specified is not absolute (doesn't start with a \file{/\/}), +then the \MH/ program will first check in the user's \MH/ directory. +If the file is not present, +then program will consult the standard \MH/ library for the file. +This convention allows the PostMaster to make available system-wide +templates and skeletons. + +\subsection{MH Directory} +If the \MH/ directory of a user doesn't exist, +then \MH/ will query the user if it should be created. +This is primarily useful when copying a \profile/ from one host to another, +or when the site administrator creates a \profile/ for a user when creating +the associated login. + +\subsection{Documentation} +Two new documents have been prepared for the \mh5 distribution: +{\sl The Rand MH Message Handling System: Tutorial}, +which is cited as \cite{MH.TUT}; +and, +{\sl The Rand MH Message Handling System: The UCI BBoards Facility}, +which is cited as \cite{MH.BB}. +The former is a useful tutorial for novice users of \MH/. +The latter describes BBoard handling and \MH/. + +\section{Draft Handling} +This section discusses how the handling of drafts has been changed in \mh5. + +The most important change is that the {\it draft-folder} notation +and the {\it push} option at \whatnow/ level have been explicitly made +visible in the \MH/ system. +There's a new profile entry called \eg{Draft-Folder} which defines the +default draft-folder for the \MH/ user. +By using this entry, such as \example Draft-Folder:\ +drafts\endexample +the \MH/ user needn't add \switch{draftfolder\ drafts} to the entries +for \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} in the user's +\profile/ file. + +\subsection{What Happens if the Draft Exists} +A new option has been added to \pgm{comp}, \pgm{dist}, \pgm{forw}, and +\pgm{repl} when the draft already exists: \eg{refile\ +folder}. +This allows you to \pgm{refile} the draft into another folder and then get a +fresh draft. + +\subsection{Editing Environment} +In previous versions of \MH/, +when \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} allowed the user to +edit the draft, +the \MH/ user's current working directory was somewhere inside of the user's +\MH/ directory. +This often lead to confusing results. +In \mh5, +when the user edits a draft, +the current working directory is unchanged. +Furthermore, two envariables are defined during the editing session for +\pgm{dist} and \pgm{forw}: +\file{\$editalt}, +which is the name of the message (\unix/ file) being distributed or replied-to; +and, +\file{\$mhfolder}, +which is the name of the folder (\unix/ directory) containing the message +being distributed or replied-to. + +\subsection{Rapid Composition} +The \pgm{prompter} command has two new switches \switch{rapid} and +\switch{norapid}. +If the \switch{rapid} option is given then \pgm{repl} won't display an +existing body of the draft being edited. +This is useful for using \pgm{forw} with a slow terminal. + +\subsection{Ultra Rapid Composition} +The \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} commands have a new +option, \switch{noedit}. +If \switch{noedit} is given, +then the initial edit is supressed. +This is useful for various canned applications +(and perhaps more graceful than \switch{-editor /bin/true\/}). + +\subsection{Digest Generation} +The \pgm{forw} command has the beginnings of a digest-composition facility, +with the \switch{digest\ list}, \switch{issue\ number}, +and \switch{volume\ number} switches. + +If \pgm{forw} is given the argument \eg{list} to the \switch{digest} switch, +and the \switch{issue\ number} switch is not given, +then \pgm{forw} looks for a profile entry called +\eg{digest-issue-list:} and increments its value to use as the issue +number. +Similarly, +if the \switch{volume\ number} switch is not given, +then \pgm{forw} looks for \eg{digest-volume-list:} +(but does not increment its value) to use as the volume number. + +Having calculated the name of the digest and the volume and issue numbers, +\pgm{forw} will look for a profile entry called \eg{sedproc:} +(which defaults to \pgm{/bin/sed\/})and filter the components file +(as specified with the \switch{form\ formfile} switch) +with the following definitions: +\eg{@(digest)}, \eg{@(issue)}, \eg{@(volume)}, and \eg{@(date)}. + +\tagdiagram{1}{Sample skeleton for digest composition}{digestcomps} +A good components file to use, (which might be called \file{digestcomps\/}) is +shown in Figure~\digestcomps. + +\pgm{Forw} will now compose the draft, +using the standard digest encapsulation algorithm +(even putting a \eg{End of list Digest} trailer in the draft). +Once the draft is composed by \pgm{forw}, +it writes out the volume and issue profile entries for the digest, +and then invokes the editor. + +\tagdiagram{2}{Sample template for digest messages}{mhldigest} +Naturally, when composing the draft, +the \pgm{forw} program will honor the\hbreak +\switch{filter\ filterfile} switch, +which is given to \pgm{mhl} to filter each message being forwarded prior to +encapsulation in the draft. +A good filter file to use, (which might be called \file{mhl.digest\/}) +is shown in Figure~\mhldigest. + +\subsection{Replies} +The \pgm{repl} command has two new switches \switch{query} and +\switch{noquery}. +If the \switch{query} option is given then for each address that would go in +the \eg{cc:} field of the reply, +\pgm{repl} asks the user if the address should be included. +This is sometimes useful for replying to mail sent to a large number of people. +(Obviously, one could simply edit the draft produced by \pgm{repl}, +but the \switch{query} option is useful if \pgm{prompter} is the editor used +by \pgm{repl} and one doesn't want to invoke a second editor.) + +Previous versions of \pgm{repl} would terminate if a \eg{From:} or +\eg{Sender:} field was not found or could not be parsed. +The \pgm{repl} program in \mh5 will continue to compose the reply draft, +after advising you of this anomaly. + +\subsection{Blind Carbon Copies} +After much experimentation, \MH/ has finally stabilized on the format of +blind-carbon-copies. +As in \mh4, when \pgm{post} generates a draft for blind recipients, +a new draft is composed with a minimal set of headers. +In \mh5 however, the \eg{BCC-Disclaimer:} field is no longer used. +Instead, the draft for the blind recipients contains the original message as a +forwarded message. +This more clearly identifies a blind-carbon-copy to the blind recipient. + +\subsection{File Carbon Copies} +A message draft can now have more than one folder listed in a \eg{Fcc:} field. +Each folder should be separated by a comma, just like the addresses in a +\eg{cc:} field. +In addition, the folders listed in a \eg{Fcc:} field may use the +relative-folder addressing notation +(though this latter activity is not recommended). + +\subsection{Refiling the Draft} +At \whatnow/ level, there is a new option, \eg{refile}. +This options takes any arguments acceptable to the \pgm{refile} program, +and \pgm{refile\/}'s the message draft into the named folder(s). + +\subsection{Annotations} +If the \switch{annotate} switch is given to \pgm{dist}, \pgm{forw}, or +\pgm{repl}, and the message is (re)moved by the user prior to the successful +posting of the draft, the \MH/ program will not complain as before. +Hence, users of the \eg{push} option at \whatnow/ level need not worry about +asynchronous error messages. + +\section{Other Changes} +This last section describes the other more program-specific changes made to +\MH/. + +\subsection{Bursting} +The bursting mechanism in \MH/ has been made sufficiently general to allow +\pgm{burst} to work on forwarded messages and blind-carbon-copies in addition +to digests. +Although \pgm{burst} can not always successfully decapsulate messages +encapsulated by sites not running \MH/, +it handles forwarded messages and blind-carbon-copies, +as constructed by \pgm{forw} and \pgm{send}, easily. + +In addition, the \pgm{send} program has two new switches, +\switch{forward}, and \switch{noforward}. +If the \switch{forward} option is given, +then if a \pgm{send} which has been \pgm{push\/}'d in the background fails, +in addition to containing the reasons for the failure, +the failure notice contains the draft as a forwarded message. +This means one can simply \pgm{burst} the failure notice to get the draft +back, +instead of hunting around for it. + +\subsection{Incorporation of Mail} +There's a new profile entry called \eg{MailDrop} which can be used to define +the default maildrop that \pgm{inc} should use. +In addition, if the envariable \file{\$MAILDROP} is defined, +then \pgm{inc} will use its value as the default maildrop. + +The \pgm{inc} program also has a new option: +\switch{truncate} and \switch{notruncate}, +which indicates if the maildrop should be truncated. +By default, \switch{truncate} is used defualt maildrop is used, +otherwise \switch{notruncate} is used. + +\subsection{Clearing the Display} +The \switch{ff} and \switch{noff} switches have been removed from the +\pgm{scan} and \pgm{mhl} programs. +Instead, the \pgm{scan} has been given two switches, +\switch{clear} and \switch{noclear} +(\pgm{mhl} already has these switches). +The action of the \switch{clear} option is simple: +if the standard output to the \MH/ program is a terminal, +then the program will output the correct ``escape sequence'' to clear the +terminal's screen; +if the standard output is not a terminal, +then the program will output a formfeed. + +In addition, +both \pgm{scan} and \pgm{mhl} consult the \file{\$TERM} envariable to +determine such things as the length and width of your terminal. +The \pgm{scan} program uses this to determine how long each line of the scan +listing should be. +The \pgm{mhl} program uses this to determine the default length and width +of your terminal (instead of the $40$ by $80\/$), +prior to reading the template or consulting command line options. + +\subsection{Folder Handling} +If the \pgm{folder} command is given the name of a folder that does not exist, +\pgm{folder} will query the user if the folder should be created. +This is useful for creating a folder that the \MH/ user intends to access +later. + +In previous releases of \MH/, +the \pgm{rmf} program would consider a folder writable if it was writable by +the user. +Since \pgm{rmf} ultimately removes the folder itself, +\pgm{rmf} considers a folder writable if the folder and its parent are +writable by the user. +If not, the folder is treated as a read-only folder by \pgm{rmf}. + +\subsection{MailDrops} +The name of the \pgm{pack} program has been changed to \pgm{packf}. +The author didn't want to do this. +Some people don't know when to leave well enough alone. + +\subsection{Refiling} +The \pgm{refile} program now has a \switch{draft} switch saying to file the +current draft. + +\subsection{RcvMail Support} +In addition to the standard \pgm{rcvpack} and \pgm{rcvtty} receive mail hooks, +and the \pgm{rcvtrip} shell script, +there's a new rcvmail hook called \pgm{rcvdist}. +The \pgm{rcvdist} hook allows a user of \MH/ to have his/her mail forwarded +without the intervention of the PostMaster. +(By the way, the \pgm{rcvpack} hook used to be called \pgm{rcvcron\/}.) + +\subsection{Reading BBoards} +The \pgm{msh} program (which used to be called \pgm{bbr\/}) +implements an \MH/ shell. +In addition to the commands that the old \pgm{bbr} program had, +\pgm{msh} also has the +\pgm{inc}, \pgm{mhmail}, \pgm{pack}, \pgm{rmm} and \pgm{sortm} commands. + +In addition, \pgm{msh} uses a ``maildrop mapping'' mechanism to +significantly speed-up its start-up time compared to the old \pgm{bbr}. +The \pgm{pack} program supports this mechanism as well, +so \pgm{msh} starts quickly on ordinary \pgm{pack\/}'d files as well. + +Finally, \pgm{mhl} is now built-in to \pgm{msh}, +so with a \eg{showproc} of \pgm{mhl}, +the \pgm{msh} user gets speedy response in listing messages. diff --git a/docs/historical/mh5/version b/docs/historical/mh5/version new file mode 100644 index 0000000..aabe6ec --- /dev/null +++ b/docs/historical/mh5/version @@ -0,0 +1 @@ +21 diff --git a/docs/historical/mh5/version.sh b/docs/historical/mh5/version.sh new file mode 100644 index 0000000..9ec1e79 --- /dev/null +++ b/docs/historical/mh5/version.sh @@ -0,0 +1,9 @@ +if [ ! -r version ]; then echo 0 > version; fi +touch version +echo '\catcode`\#=12' > version.tex +awk ' { version = $1 + 1; }\ +END { printf "\\def\\versiontag/{#1.%d}%%\n", version >> "version.tex"; \ + printf "%d\n", version > "version"; }' < version +echo '\def\versiondate/{'`date`'}%' >> version.tex +echo '\catcode`\#=6' >> version.tex +echo '\tell{Version \versiontag/ of \versiondate/}' >> version.tex diff --git a/docs/historical/mh5/version.tex b/docs/historical/mh5/version.tex new file mode 100644 index 0000000..dfd3194 --- /dev/null +++ b/docs/historical/mh5/version.tex @@ -0,0 +1,5 @@ +\catcode`\#=12 +\def\versiontag/{#1.21}% +\def\versiondate/{Wed Nov 14 08:55:30 EST 1984}% +\catcode`\#=6 +\tell{Version \versiontag/ of \versiondate/} diff --git a/docs/historical/mh6.5/MHCHANGES b/docs/historical/mh6.5/MHCHANGES new file mode 100644 index 0000000..f9e4812 --- /dev/null +++ b/docs/historical/mh6.5/MHCHANGES @@ -0,0 +1,1052 @@ + MHCHANGES from MH 6.1 to MH 6.3 + + +Tue Nov 12 11:24:46 1985 /mtr + + MH 6.1 is official. + + +Fri Nov 15 19:14:44 1985 /mtr + + uip/{rcvtty,slocal}.c: touch-ups + + +Sun Nov 17 16:28:23 1985 /mtr + + conf/doc/{ap,mhl,repl,scan}.rf: note that #ifdef BERK kills + address parsing + conf/makefiles/{doc,uip,support/*,zotnet/*}: make tar command visible + sbr/m_convert.c: oops, new message numbering resulted in bad + diagnostic + papers/*/Makefile: fix LaTeX rule for v2.08 + + +Tue Nov 19 23:06:16 1985 /mtr + + uip/send.c: de-referencing NULL due to bad precedence, tsk + + +Wed Nov 20 10:58:40 1985 /mtr + + MH 6.1 covert update for sbr/m_convert.c, uip/send.c + + +Sun Nov 24 18:58:41 1985 /mtr + + uip/slocal.c: some tuning, also fix a bug in usr_pipe() + uip/dropsbr.c: have mbx_copy support noisy + uip/{packf,post,rcvpack,sbboards,slocal}.c: use this change + + +Tue Nov 26 00:22:17 1985 /mtr + + uip/refile.c: oops, forgot copy-back on optimzied m_remsg + + +Sat Nov 30 22:36:49 1985 /mtr + + zotnet/tws/dtime.c: add #ifdef INETONLY + uip/post.c: for #ifdef BERK don't say {Local,UUCP,Network} + Recipients + conf/doc/sortm.rf: note problem with errors + uip/bbc.c: for getbbvis() insist on readability + support/bboards/bbexp.c: oops, calling pick wrong + conf/doc/pick.rf: document -datefield anomaly + conf/makefiles/support/bboards: oops, left context owned by root + h/mh.h: ruserpass -> _ruserpass for SUN. why? + + +Sun Dec 1 07:58:50 1985 /mtr + + uip/vmh.c: remove double-scroll + uip/annosbr.c: oops, closing fd: without unlocking! + sbr/makedir.c: plug an obscure security hole in inc + uip/mhlsbr.c: read_termcap being called prematurely + zotnet/tws/dtime.c: load tw_sday appropriately + zotnet/tws/*.c: try using numeric timezone for official renditions, + under #ifdef MTR for now + + +Sun Dec 1 16:11:03 1985 /mtr + + uip/inc.c: more idiotic de-referncing of NULL, found on SUNs + uip/replsbr.c: ditto + uip/show.c: recognize more of mhl's switches + + +Wed Dec 4 23:38:06 1985 /mtr + + zotnet/mts/mts.h: oops for MMDFONLY + conf/{mh-gen.8,makefiles/zotnet/mts}: talk about -Dlocname + + +Thu Dec 5 19:55:11 1985 /mtr + + uip/scansbr.c: fix machine dependency pointed out by Chuck Collins + dist/READ-ME: new file talking about make bug + COVER-LETTER, conf/{mh-gen.8,doc/MH.rf}: change UCI -> UCI.EDU + + +Fri Dec 6 11:08:20 1985 /mtr + + support/bboards/mmdfII/gen: wrong filename + + +Sun Dec 8 18:39:01 1985 /mtr + + uip/send.c: always remove dist file + uip/vmh.c: work on erase-word handling, a bit + uip/folder.c: -fast -vs- -pack fixup + uip/mhlsbr.c: %text defined for date fields + + +Tue Dec 10 18:39:37 1985 /mtr + + zotnet/mts/client.c: moved from mts/sendmail/client.c + conf/makefiles/{mts/sendmail,zotnet/mts}: changed + mts/support/llib-lsendmail, zotnet/mts/llib-lmts: changed + mts/sendmail/client.c: 4.2BSD specific only! + conf/config/mts.c, zotnet/mts/mts.h: update + conf/mhconfig.c: update + conf/Makefile: simplify + + +Tue Dec 10 21:11:45 1985 /mtr + + conf/mh-gen.8: clear up some sys5 stuff + zotnet/mf/umhook.c: sys5-ize + uip/addrsbr.c: alternate-mailboxes: defaulted wrong under #ifdef + BERK, it's now "*" + conf/doc/mh-profile.rf: fix documentation to reflect reality + + +Tue Dec 10 22:38:23 1985 /mtr + + uip/addrsbr.c: normalize a bit (finally) + uip/addrsbr.c: new routine adrsprintf() to remove #ifdef BANG + dependencies + uip/{post,rcvdist,replsbr,sbboards}.c: use adrsprintf() + uip/post.c: remove #ifdef MF dependency for stand-alone MH, + remove #ifdef DUMB dependency by making addrsbr.c smarter + about being dumber + mts/mmdf/hosts.c: remove #ifdef DUMB dependency (right now, + addrsbr:getm() is the only one that calls it and it doesn't + call it under #ifdef DUMB... + + +Tue Dec 10 23:28:20 1985 /mtr + + uip/sbboards.c: oops, typo found by lint + + +Wed Dec 11 19:08:20 1985 /mtr + + miscellany/libndir: -lndir for non-BSD sites, graciously supplied + by Kirk McKusick + + +Tue Dec 17 08:36:59 1985 /mtr + + uip/send.c: different alert announcement based on -forward + + +Tue Dec 17 08:53:52 1985 /mtr + + conf/makefiles/sbr, sbr/cndfree.c: clean-up a bit + + +Tue Dec 17 18:26:34 1985 /mtr + + sbr/m_getfld.c, uip/{format,mhl,pick}sbr.c: clean-up indirection + code for less tolerant compilers + uip/bbc.c: add -[no]rcfile switch + uip/msh.c: clean up a diagnostic + + +Tue Dec 17 21:42:44 1985 /mtr + + conf/makefiles/sbr, h/mh.h, sbr/llib-lmh: cndfree() removed + sbr/{add,m_{delete,replace}}.c, uip/{mhl,vmh}sbr.c: replace cndfree + sbr/m_foil.c, uip/install-mh.c: compensate + + +Wed Dec 18 13:37:09 1985 /mtr + + uip/bbc.c: make second, optimized pass to catch private bboards + that the user knows about + uip/popsbr.c: ditto + uip/popser.c: slight tune-up + + +Wed Dec 18 20:27:38 1985 /mtr + + uip/slocal.c: minor touch up + uip/umhook.c: moved from zotnet/mf + + +Wed Dec 18 22:51:58 1985 /mtr + + uip/bbc.c: optimize on calling mshproc, check size of maildrop + first; if empty, don't invoke it! + + +Thu Dec 19 08:16:54 1985 /mtr + + uip/refile.c: better diagnostic from Fred Blonder + + +Thu Dec 19 22:34:23 1985 /mtr + + zotnet/mts/client.c: #ifdef BIND code when no gethostent() + conf/{mh-gen.8,doc/mh-tailor.rf}: document it + + +Thu Dec 19 23:58:44 1985 /mtr + + Release MH 6.2 to selected sites, including Berkeley for 4.3BSD testing + + +Sun Dec 29 19:58:43 1985 /mtr + + zotnet/mts/client.c: fix #ifdef BIND stuff a bit + h/mshsbr.h, uip/{mhlsbr,msh,mshcmds}.c: try to fix lost peer + problems... + conf/doc/vmh.rf: update + zotnet/drop/lock.c: not returning right errno + uip/dropsbr.c: ditto, plus not trying enough + conf/makefiles/doc: "make tar" forgetting tmac.h + uip/addrsbr.c: strcpy de-referencing NULL + uip/refile.c: got rid of a spurious \n (!!) + conf/examples/{udel,nrtc-mtr}: new files + h/mh.h, sbr/m_{convert,gmsg}.c, uip/{msh,rcvstore,refile}.c: fix + LOWSEL logic + uip/vmh.c: fix slight bug in sideground handling (misspelled + #ifdef, oops!) + conf/{mh-gen.8,config/mts.c},mts/*/hosts.c: remove the NETWORK option + + +Mon Dec 30 20:03:25 1985 /mtr + + conf/Makefile: options mangled(!?!) + uip/msh.c: if update of mailbox fails, it gets zero'd(!!) + (oops, not checking error condition) + support/pop/popser.c: if update of mailbox fails, clean-up + correctly (no zero problem here!) + uip/inc.c: on truncate of maildrop, remove mailbox map (XXX) + conf/makefiles/uip, uip/{send,whatnowsbr}.c: move send into + the WhatNow shell + uip/sendsbr.c: new file + conf/doc/whatnow.rf: update + + +Tue Dec 31 10:13:44 1985 /mtr + + conf/doc/vmh.rf: back-down last update + conf/mh-gen.8: forgot an \& + conf/examples/nrtc-{gw,mtr}, h/rcvmail.h: tsk, NRTC running an old + MMDF-II + + +Tue Dec 31 13:53:14 1985 /mtr + + conf/doc/whatnow.rf, uip/whatnowsbr.c: remove "headers" option + conf/doc/ADMIN.rf: clear-up post -debug documentation + conf/doc/{mh-chart,send,post}.rf, uip/{post,send,whatnowsbr}.c: remove + -[no]remove switches + uip/{repl,post}.c: some touch-ups + + +Tue Dec 31 19:16:23 1985 /mtr + + zotnet/tws/{dtime,dtimep}.c: dst fix-ups + conf/doc/send.rf: append, not prepend + uip/rmail.c: slight touch-up + uip/ap.c: oops, not printing all info + zotnet/mf/mf.c: botching trailing comment handling! + uip/scansbr.c: have cpy() omit trailing >>blank<< + sbr/m_gmsg.c: not zero'ing msgstats[] under non-MTR code + + +Tue Dec 31 22:23:43 1985 /mtr + + conf/doc/mhook.rf: minor typos + miscellany/rcvtrip/*: update + + +Tue Dec 31 23:21:21 1985 /mtr + + uip/mhlsbr.c: a bit more pipe trickyness (this gets old real fast) + conf/doc/ADMIN.rf: talk about popd and /etc/rc.local + papers/{myths,mznet}/Makefile: update + uip/bbc.c: augment XTND2 botch diagnostic + uip/msh.c: if popd says BBoard-ID: for a message is 0, read it + ourselves + + +Fri Jan 3 13:11:03 1986 /mtr + + uip/bbc.c: SIGTSTP race condition, #undef for now + + +Sun Jan 5 20:06:03 1986 /mtr (agent: Marshall Rose) + + -- Interface TTI TMA to MH #6.2 -- + [ N.B.: The TTI TMA is NOT in the public domain; the MH support for + the TTI TMA IS in the public domain! ] + conf/{mh-gen.8,mhconfig.c,doc/ADMIN.rf}: support "tma on" + conf/makefiles/{doc,uip}: ditto + Makefile: for the moment + + +Mon Jan 6 15:25:20 1986 /mtr + + uip/{msh,mshcmds}.c: work on refile + uip/{vmh,msh}.c: support FAST quit (no final refresh on + updated mailbox) + + +Tue Jan 7 15:06:05 1986 /mtr + + uip/bbc.c: got the SIGTSTP problem, now wait on child to stop prior + to stopping ourselves... + + +Wed Jan 8 23:16:10 1986 /mtr + + uip/trmsbr.c: better defaults for "li" and "co" + + +Thu Jan 9 15:29:09 1986 /mtr + + -- Fixes Suggested by Craig Partridge -- + support/bboards/mmdfII/bboards/mmdfonly.h: if V4_2BSD on, set BSD42 + conf/doc/{mhl,show}.rf: talk more about moreproc + uip/mhlsbr.c: have INTR work as advertised + uip/{send,whatnowsbr}.c: link on dist botched, oops! + + +Thu Jan 9 16:31:28 1986 /mtr + + uip/mshcmds.c: don't rmm() messages which don't get refiled + uip/vmh.c: truncate stuff on Scan window (finally) + uip/scansbr.c: work on diagnostics a bit + + +Thu Jan 9 22:37:29 1986 /mtr + + MH 6.2 is official, awaiting enhancements Berkeley! + + +Fri Jan 10 10:17:57 1986 /mtr + + uip/sbboards.c: botch multiple bboard handling (forgot to rewind + input, thanks to Larry Henry) + support/bboards/mmdfII/bboards/bb_wtmail.c: not handling errors + right + sbr/cpydgst.c: stay symmetric with change to bb_wtmail.c, the code + worked fine, adding matching braces for clarity (!!) + + +Sun Jan 12 14:01:25 1986 /mtr + + miscellany/mh-e: new version from James Larus + + +Sun Jan 12 22:58:34 1986 /mtr + + uip/bbc.c: getbbvis a bit too agressive, use popd algorithm + + +Wed Jan 15 04:43:33 1986 /mtr + + miscellany/netnews/: more stuff + + +Wed Jan 15 18:44:32 1986 /mtr + + uip/addrsbr.c: ismymbox() losing under #ifdef DUMB, oops! + + +Wed Jan 15 19:03:54 1986 /mtr + + COVER-LETTER: update + + +Wed Jan 15 23:15:54 1986 /mtr + + support/pop/popsbr.c: pophack on PASS command + + +Fri Jan 17 13:19:23 1986 /mtr + + uip/ali.c: add -noalias for RaJ + + +Wed Jan 22 11:13:08 1986 /mtr + + support/pop/popwrd.c: squash bug + h/mh.h: remove sigmask definition + uip/{bbc,vmh}.c: add sigmask if not defined in + (4.3BSD finally wised up!) + + +Sun Jan 26 16:57:18 1986 /mtr + + {conf/makefiles/uip,uip/post.c}: lint touch-up + conf/doc/{inc,mh-chart,send,post}.rf: add the #ifdef TMA stuff + sbr/m_remsg.c: tuning + uip/mark.c: re-arrange debug output slightly + h/mh.h: add some padding to fix some m_remsg bugs + uip/{inc,rcvstore}.c: oops, mp -> hghmsg not keeping pace with + m_remsg! + + +Mon Jan 27 17:51:07 1986 /mtr + + uip/whatnowsbr.c: forgot to put -[no]push for built-in send + h/addrsbr.h, uip/{addrsbr,post}.c: introduce auxformat(), the + back-end to adrformat(); post calls auxformat directly in + certain cases + uip/{dp,forw}.c: was cheating on adrformat, now on auxformat + + +Fri Jan 31 13:25:17 1986 /mtr + + COVER-LETTER: update + support/general/mhl.format: Remove length/width constraints + + +Sun Feb 2 14:01:28 1986 /mtr + + zotnet/tws/dtime.c: twsort() fix from John Romine for ALTOS + uip/addrsbr.c: smarter ismymbox for default case + conf/{mh-gen.8,doc/repl.rf}, uip/repl.c: add #ifdef ATHENA code + + +Sun Feb 2 20:47:36 1986 /mtr + + miscellany/replies/: new directory + + +Mon Feb 3 11:21:49 1986 /mtr + + uip/whatnowsbr.c: oops, slight dist botch + support/general/mhl.format: make date display user-friendly + conf/mh-gen.8: clean-up descriptions of options + uip/sbboards.c: normalize code wrt to MMDF-II BBoards channel + uip/msh.c: when running under vmh and not in control of TTY, + ignore TSTP so BPOP can spool ahead! + papers/{usenix/usenix,multifarious/multifarios,trusted/trusted}.tex: + fix up banners a bit + + +Wed Feb 5 09:32:08 1986 /mtr + + support/bboards/mmdfII/READ-ME: update + + +Wed Feb 5 11:25:05 1986 /mtr + + MH 6.3 #1[UCI] (nrtc-gremlin) is official, still awaiting Berkeley + enhancements + + +Wed Feb 5 14:42:55 1986 /mtr + + zotnet/tws/{tws.h,dtime.c}: new argument to dasctime() + uip/{format,pick}sbr.c: make use of it + + +Sun Feb 9 22:14:10 1986 /mtr + + support/pop/syslog.c: #ifdef BSD43 means use standard syslog + + +Sun Feb 16 15:40:20 1986 /mtr + + sbr/m_setvis.c: oops, fix-up unseen sequence stuff + uip/whatnowsbr.c: oops, a couple of typos + + +Sun Feb 16 19:11:33 1986 /mtr + + -- Incorporate Berkeley enhancements, courtesy of Van Jacobson -- + h/{format,scan}sbr.h: updated for new formatsbr stuff + h/mh.h: updated for new m_getfld + conf/MH: new default file + conf/config/config.c: support spost under BERK and SENDMTS + conf/mhconfig.c: support new zotnet/fmt/ directory + conf/makefiles/uip: support spost + conf/makefiles/zotnetM: support new zotnet/fmt/ directory + conf/makefiles/zotnet/fmt: new Makefile + conf/makefiles/zotnet/tws: support for new lex-based date parser + sbr/m_gmsg.c,uip/msh.c: change init of READONLY + sbr/m_getfld.c: re-written, super optimized! + support/general/{digestcomps,mhl.digest,mhl.forward,scan.*}: use + new fmt stuff + zotnet/fmt/: new directory + zotnet/tws/{dtimep.lex,lexedit.sed,lexstring.c}: new files + zotnet/tws/dtime.c: update + uip/{forw,scan,scansbr}.c: use new format stuff + uip/{inc,mhlsbr,mshcmds,replsbr}.c: use new format stuff + uip/trmsbr.c: use stderr for ioctl()s + uip/spost.c: new file + uip/{addr,format}sbr.c: remove, they're in zotnet/fmt/ + + +Sun Feb 16 23:04:34 1986 /mtr + + zotnet/fmt/: move into sbr/ to avoid loading problems + sbr/{addrsbr,formatsbr,fmtcompile,formataddr}.c: new files + h/fmtcompile.h: new file + conf/makefiles/{sbr,zotnetM}: update + sbr/llib-lmh: update + + +Mon Feb 17 20:14:35 1986 /mtr + + support/general/scan.{time,size}: mday/month inverted + sbr/{formatsbr,fmtcompile}.c: bring upto date with MH 6.3+ + sbr/formatsbr.c: missing tzone/sday/dst handling! + h/scansbr.h: slight update + uip/scansbr.c: try using formataddr() routine to do "correct" + formatting of scan'd addresses, didn't work! use friendly + zotnet/tws/dtimep.lex: tsk, use lint! also, fix numeric timezones + sbr/addrsbr.c: some ismymbox fixes for non-BERK code (from 6.3) + sbr/formatsbr.c: not priming the pump! + h/fmtcompile.h, sbr/{formatsbr,fmtcompile}.c: add "friendly" + support/general/scan.time2: call it scan.timely + conf/makefiles/support/general: support scan.timely + + +Tue Feb 18 01:13:51 1986 /mtr + + h/formatsbr.h: updates from Van + + +Tue Feb 18 02:15:00 1986 /mtr + + uip/bbc.c: upgrade for new m_getfld() + support/general/scan.*, h/scansbr.h: still more changes + support/general/replcomps: still more changes + + +Tue Feb 18 22:14:51 1986 /mtr + + sbr/m_getfld.c: eom_action() lacking argument + sbr/m_getfld.c: not working right on packf'd files + uip/{msh,mshcmds}.c: under BPOP, need to fix things so m_getfld() + doesn't dump core! + + +Wed Feb 19 00:16:55 1986 /mtr + + uip/dist.c, support/general/distcomps, sbr/fmtcompile.c: updates + from Van + sbr/formatsbr.c: remove ismymbox prime + sbr/fmtcompile.c: use adios(), not exit()! + + +Wed Feb 19 00:56:30 1986 /mtr + + sbr/m_getfld.c: different fix for packf'd files from Van + + +Wed Feb 19 01:55:40 1986 /mtr + + h/mh.h: add msg_* vars in m_getfld() as externs + uip/{msh,{repl,scan}sbr}.c: remove msg_* declarations + sbr/m_getfld.c: add a bit of BODYEOF support (without slowing it + down, wouldn't want to upset Van!) + + +Wed Feb 19 03:11:42 1986 /mtr + + sbr/{formataddr,fmtcompile,m_{draft,getfld,maildir},printsw,pwd}.c: + lint it + uip/{formatsbr,forw,msh,replsbr,scan,scansbr,spost}.c: lint it + support/pop/popser.c: lint it + sbr/formatsbr.c: remove MHFMTDEBUG code + */Makefile: depend 'em + + +Wed Feb 19 10:50:04 1986 /mtr + + papers/mh6.4: new interim documentation directory, for 4.3BSD + conf/doc/{MH,ap,dp,mh,mh-chart,mhl,repl,scan}.rf: update + conf/doc/mh-format.rf: new file + support/general/replcomps: oops, should call formataddr on all + addrs + + +Thu Feb 20 08:07:49 1986 /mtr + + uip/{a,d}p.c: start working on it + h/formatsbr.h: new variable fmt_norm + sbr/formatsbr.c: use it + h/fmtcompile.c, sbr/{fmtcompile,formatsbr}.c: define "pretty" + sbr/formataddr.c: sight touch-up + uip/formatsbr.c: oops, bug in PUTD() + uip/{fmtcompile,formatsbr}.c: init mn structures in case of error. + This is still buggy since: 1) the structure still doesn't get + reset on errors, and 2) you can still dereference nulls + zotnet/tws/dtimep.lex: slight touch-up + + +Thu Feb 20 19:55:20 1986 /mtr + + uip/mhlsbr.c: add formatsbr support + sbr/addrsbr.c: use better default matching in ismymbox + miscellany/mtrenv: update + support/general/mhl.*: update + + +Thu Feb 20 22:57:33 1986 /mtr + + MH 6.4 #1[UCI] (nrtc-gremlin) made available to Van Jacobson + for inclusion in 4.3BSD UNIX + + +Sun Feb 23 13:59:46 1986 /mtr + + sbr/m_gmsg.c: big bug fix from Terry West. Thanks, Terry! + h/strings.h: System5 bcopy-equivalents from Doug Gwyn + zotnet/tws/tws.h: support #ifdef ATZ + conf/makefiles/uip: slight lint botch + + +Mon Feb 24 17:14:39 1986 /mtr + + uip/inc.c: have -host/-file ask if file doesn't exist + uip/{packf,mshcmds}.c: ditto + + +Tue Feb 25 08:08:43 1986 /mtr + + uip/burst.c: another realloc() fix from Terry West + sbr/vfgets.c: ditto + support/pop/popser.c: enhancmenets from Dave Cohrs + conf/doc/pop5.rf: document it + conf/mhconfig.c: support "debug" directive + makefiles/*: use it + + +Tue Feb 25 09:47:09 1986 /mtr + + uip/{scan,mshcmds}.c: slight touch-ups + uip/mhlsbr.c: fix up SIGPIPE handling, again + support/general/scan.time: fix up for numeric timezone + uip/scansbr.c: re-support "encrypted" + uip/msh.c: add "exit" command for Dave Farber + miscellany/convert: new directory + + +Tue Feb 25 17:45:28 1986 /mtr + + h/mshsbr.h, uip/msh*.c: add direct folder support for symmetry's + sake, ugh! + + +Wed Feb 26 21:05:46 1986 /mtr + + uip/sendsbr.c: better diagnostics when post fails + + +Thu Feb 27 22:12:53 1986 /mtr + + -- Van sends updates -- + conf/makefiles/uip, h/fmtcompile.h, + sbr/{format{addr,sbr},fmtcompile,addrsbr}.c, + support/general/replcomps, uip/{repl,mhl,scan,whatnow}sbr.c + + +Thu Feb 27 22:16:43 1986 /mtr + + sbr/formataddr.c: remove + sbr/addrsbr.c: Van doesn't like "user*" instead of "user" as the + default is-my-mailbox for BERK. Since he's the BERK-author, I'll + assume he knows what he's doing... + support/general/replcomps: Use "tws", instead of "pretty" for + in-reply-to: + uip/whatnowsbr.c: If -draft{folder,message} and -nodraftfolder are + added as no-ops, make them "hidden" from -help output + uip/{{a,d}p,forw,mhlsbr}.c: update + + +Mon Mar 3 10:18:40 1986 /mtr + + -- Van sends fixes to my updates -- + uip/mshcmds.c: not resetting scansbr for formatting + uip/scansbr.c: oops, typo! + + +Mon Mar 3 16:53:19 1986 /mtr + + uip/sendsbr.c: oops, close() on an uninitialized variable! (thanks + to Jim Koda) + + +Tue Mar 4 08:15:17 1986 /mtr + + -- Van sends fixes to my updates -- + uip/mhlsbr.c: not resetting mhlsbr for formatting + zotnet/tws/dtimep.lex: not getting MIL-TZ's right + + +Tue Mar 4 09:53:31 1986 /mtr + + papers/usenix/: change to realwork/ + + +Wed Mar 5 12:48:58 1986 /mtr + + dist/READ-ME: oops, forgot usenix name change + conf/makefiles/uip: hmm, interesting loader problem + + +Thu Mar 6 13:36:26 1986 /mtr + + uip/addrsbr.c: yet another fix for ismymbox() + uip/replsbr.c: #ifdef ISI code to avoid duplicate replies (due to + Jim Koda) + + +Sun Mar 9 14:04:26 1986 /mtr + + conf/mh-gen.8: add a line about chown and sys5 + sbr/m_convert.c: better BADRNG diagnostic + uip/mshcmds.c: oops, typo + + +Sun Mar 9 14:06:54 1986 /mtr + + h/scansbr.h, sbr/fmtcompile.c: better versions from Van + support/general/{replcomps,scan.timely}: better versions from Van + (snuck the %pretty instead of %tws in, eh Van?) + support/general/{digestcomps,mhl.forward,scan.{size,time}}: update + + +Sun Mar 9 18:52:37 1986 /mtr + + h/scansbr.h, support/general/{digestcomps,mhl.forward,scan.*}: update + + +Sun Mar 9 20:09:35 1986 /mtr + + zotnet/bboards/bboards.h: add BB_REMOTE flag for bbc + uip/bbc.c: support BB_REMOTE, under #ifdef MTR for the moment + uip/bbc.c: allow bb_aka (again?!?) + + +Mon Mar 10 00:43:19 1986 /mtr + + uip/{msh,mshcmds}.c: packf hack, ala refile hack + uip/{post,rcvdist}.c, support/bboards/mmdfII/bboards/bb_wtmail.c: + MMDF-II nameserver support from Steve Kille + + +Mon Mar 10 10:17:29 1986 /mtr + + {sbr/formatsbr,uip/scansbr}.c: more optimizations from Van! + sbr/m_getfld.c: Van fixes problems due to losing vanilla-4.2 C + optimizer! + sbr/m_getfld.c: slight touch-up by MTR + uip/bbc.c: remove #ifdef MTR bracketing, code works fine + uip/refile.c: slight touch-ups + sbr/m_getfld.c: on xxxERR returns, forgetting to zero value buffer + + +Mon Mar 10 18:08:37 1986 /mtr + + uip/post.c: fix handling of (in)visible addresses + uip/rcvdist.c: re-do to use format facility + uip/{replsbr,forw}.c: touch-ups + conf/config/config.c, h/mh.h: new variable rcvdistcomps + conf/{makefiles/{uip,support/general},doc/mhook.rf}: update + sbr/m_getfld.c: bstring() support for non BSD42, SYS5 systems + conf/doc/ADMIN.rf: update + + +Tue Mar 11 19:43:27 1986 /mtr + + h/dropsbr.h, uip/dropsbr.c: new routines mbx_read() and mbx_write() + uip/{msh,mshcmds}.c, support/pop/popser.c: use it + h/{addr,format,scan}sbr.h, sbr/addrsbr.c: slight touch-up + uip/inc.c: slight touch-up + + +Sun Mar 16 15:20:27 1986 /mtr + + miscellany/mem: appointment diary support from Ken Yap + + +Wed Mar 19 23:00:53 1986 /mtr + + support/pop/popser.c: one last fix for ENOENT mailboxes + + +Wed Mar 19 23:12:54 1986 /mtr + + -- Changes for MMDF-IIb -- + uip/post.c, support/bboards/mmdfII/bboards/bb_wtmail.c: know about + new mm_winit protocol and RP_NS/RP_DOK responses + + +Thu Mar 20 23:05:10 1986 /mtr + + uip/mhlsbr.c: mhl enhancement from JLR permitting a prefix string + for each line of the body (e.g, "component=" > ") + + +Fri Mar 21 21:12:39 1986 /mtr + + conf/doc/{MH,mh-format}.rf: typos + + +Sat Mar 22 11:51:45 1986 /mtr + + -- Fixes from Phyllis Kantar -- + uip/dropsbr.c: typo + conf/doc/{send,pick}.rf: typos + conf/makefiles/doc: forgot $(OPTIONSn) in $(MAN1) definition + + +Sat Mar 22 18:24:35 1986 /mtr + + uip/mhmail.c: handle -body better + + +Mon Mar 31 15:07:26 1986 /mtr + + uip/replsbr.c: handle bad addresses with better diagnostics + + +Wed Apr 2 17:17:32 1986 /mtr + + sbr/addrsbr.c: slight typo in comment + + +Sun Apr 6 19:22:52 1986 /mtr + + uip/inc.c: forgot to initialize some FILE*'s; dumps core on + celerity + + +Mon Apr 7 09:55:23 1986 /mtr + + mts/sendmail/smail.c: slight "client" check + + +Wed Apr 9 12:04:56 1986 /mtr + + -- Van fixes some more bugs -- + sbr/m_getfld.c: not handling buffer boundary cases right + uip/replsbr.c: not adding "," correctly when concatenating an + address string during message scan + sbr/formatsbr.c: mymbox test dumped core if address parse failed + h/{fmtcompile,formatsbr}.h, sbr/{fmtcompile,formatsbr}.c: more + enhancements + + +Wed Apr 9 12:36:58 1986 /mtr + + -- MTR actually gets to fix something! -- + sbr/m_getfld.c: messages with an empty body caused inc to + prematurely think the maildrop had reached EOF. Believe it + or not, the mhmail fix last month exercised this! + + +Wed Apr 9 22:08:37 1986 /mtr + + uip/vmh.c: output non-standard control characters in carat format + + +Thu Apr 10 02:26:52 1986 /mtr + + Makefile: touch-up "make distribution" + conf/examples/nrtc-*-mtr: remove + conf/makefiles/uip: touch-up + conf/doc/MH.rf: add TMA stuff, conditionally + + +Thu Apr 10 03:47:48 1986 /mtr + + sbr/m_getfld.c: Van fixes Marshall's fix + + +Thu Apr 10 10:42:25 1986 /mtr + + uip/scansbr.c: recognize the 822 "Encrypted:" header instead of + doing a uprf() on the body + uip/{scan,mshcmds}.c: recognize SCNENC return from scan () + + +Thu Apr 10 15:06:59 1986 /mtr + + conf/config/bboards.*: mail reports to PostMaster + + +Sat Apr 12 16:32:21 1986 /mtr + + uip/post.c: try to keep fcc:s under MH-directory so links are + maintained + + +Mon Apr 14 22:56:46 1986 /mtr + + support/bboards/bbexp.c: not ending msh correctly, msh tried + to update the maildrop even though it was already locked + by bbexp + + + +Mon Apr 14 23:52:03 1986 /mtr + + sbr/m_getfld.c: locc() not range checking on cnt + + +Thu Apr 17 13:25:20 1986 /mtr + + sbr/addrsbr.c: fix from Terry West, more alternate-mailbox misery + + +Thu Apr 17 20:51:53 1986 /mtr + + zotnet/mts/lock.c: add some more #ifdefs to support stand-alone + locking library + conf/examples/udel*: update + papers/myths/: remove + conf/makefile/papers: update + + +Mon Apr 21 10:22:09 1986 /mtr + + zotnet/mf/mf.c: sanity check in getadrx() on string to parse + + +Mon Apr 21 17:31:43 1986 /mtr + + uip/{inc,post}.c: slight mods for TMA mods + conf/doc/mh-chart.rf: ditto + + +Thu Apr 24 00:19:35 1986 /mtr + + conf/doc/mh-chart.rf: slight mods for TMA mods + + +Thu Apr 24 10:34:06 1986 /mtr + + zotnet/mts/lock.c: lint touch-up + support/pop/popd.c: ditto + + +Thu Apr 24 19:37:09 1986 /mtr + + conf/doc/ADMIN.rf: typos + + +Thu Apr 24 20:13:28 1986 /mtr + + uip/msgchk.c: print out last read date + conf/makefiles/uip: add tws dependency + + +Thu Apr 24 23:53:57 1986 /mtr + + -- From Craig Partridge -- + support/bboards/mmdfII/bboards/*: bug fixes for MMDF-IIb + conf/mh-gen.8: mention that MMDF-IIb has the BBoards distribution + + +Fri Apr 25 00:01:50 1986 /mtr + + conf/ADMIN.rf: slight touch-up + + +Fri Apr 25 10:47:19 1986 /mtr + + uip/trmsbr.c: use stdout (not stderr) for termcap checking + + +Fri Apr 25 13:39:55 1986 /mtr + + -- From Craig Partridge -- + support/bboards/mmdfII/bboards/getbbent.c: bad field in BBoards file + causes hang, note it and skip! + + +Sun Apr 27 17:23:56 1986 /mtr + + uip/scansbr.c: recognition of 822 Encrypted: header a bit botched + h/scansbr.h, support/general/scan.*: support encrypted + + +Mon Apr 28 21:00:21 1986 /mtr + + -- Yet Another Fix from Terry -- + uip/dropsbr.c: another typo + + +Tue Apr 29 20:17:11 1986 /mtr + + conf/doc/mhook.rf: extra tip with SendMail and slocal + + +Thu May 1 15:30:07 1986 /mtr + + -- From Craig Partridge -- + support/pop/mmdfII/pop/READ-ME: fixes + + +Fri May 2 16:35:11 1986 /mtr + + -- More Bug Fixes from Van -- + uip/scansbr.c: check return from fclose() + uip/inc.c: avoid locking/stat race condition + sbr/m_sync.c: lock signals out during update of sequences + + +Fri May 2 17:02:01 1986 /mtr + + uip/show.c: WHATNOW botch fixed by Jim Valerio + + +Sat May 3 01:37:15 1986 /mtr + + sbr/{m_{sync,update},pidwait}.c, uip/{bbc,sendsbr,vmh}: inspired + by Van's 4.2BSD signal optimizations + + +Sat May 3 02:49:29 1986 /mtr + + zotnet/tws/{tws.h,dtime.c,dtimep.lex}: fixes for DST + conf/makefiles/zotnet/tws: add -n to lex's invocation + + +Sun May 4 13:28:23 1986 /mtr + + uip/msgchk.c: change the "last read" message to use alpha-timezones + + +Sun May 4 14:18:15 1986 /mtr + + support/general/replcomps: use %tws instead of %pretty + support/general/mhl.*: streamline slight + + +Sun May 4 16:10:36 1986 /mtr + + conf/doc/mh.rf: forgot about TMA stuff + conf/makefiles/doc: forgot rcvstore + + +Sun May 4 17:49:43 1986 /mtr + + sbr/pidwait.c, uip/{bbc,sendsbr,vmh}.c: back off signal handling + modifications + +Sun May 4 18:08:47 1986 /mtr + + MH 6.5 #1[UCI] (nrtc-gremlin) made available to Van Jacobson + for inclusion in 4.3BSD UNIX diff --git a/docs/historical/mh6.5/Makefile b/docs/historical/mh6.5/Makefile new file mode 100644 index 0000000..5b67f77 --- /dev/null +++ b/docs/historical/mh6.5/Makefile @@ -0,0 +1,57 @@ +######################################################################### +# Instructions to Make, for generation of nice-looking papers using LaTeX +######################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if latex \\nonstopmode\\input $<; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# mh6 +############################################################# + +i-all: mh6.dvi + +i-print: mh6.dvi true + dvisp $(DFLAGS) -J mh6 mh6 + + +# customization files, et. al., not included below +mh6.dvi: mh6.vrsn + +mh6.vrsn: mh6.tex version.sh + @: version.sh mh6 + +biblio:; bibtex mh6 + +index:; idx2ind mh6 + sed -e 's|%\\newindex|\\newindex|' < mh6.ind > mh6.tmp + mv mh6.tmp mh6.ind + +true:; + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f mh6.dvi mh6.imp + +clean:; rm -f mh6.log mh6.blg mh6.tmp _* diff --git a/docs/historical/mh6.5/READ-ME b/docs/historical/mh6.5/READ-ME new file mode 100644 index 0000000..f39b7cf --- /dev/null +++ b/docs/historical/mh6.5/READ-ME @@ -0,0 +1,7 @@ +[ For the following, substitute the name of the directory this file resides + in for "foo". E.G., if this file is mh5/READ-ME, s%foo%mh5%g ] + + The Makefile assumes you have LaTeX on your system. LaTeX is Leslie + Lamport's macro package for TeX. If you can't find LaTeX on your + system, ask your local TeX maintainer where it's kept, since LaTeX + should have come with your UNIX TeX distribution. diff --git a/docs/historical/mh6.5/bcustom.bib b/docs/historical/mh6.5/bcustom.bib new file mode 100644 index 0000000..f98b683 --- /dev/null +++ b/docs/historical/mh6.5/bcustom.bib @@ -0,0 +1,22 @@ +% BibTeX customization + +% people +@string{mtr = "Marshall T. Rose"} + +% places +@string{nic = "ARPA Internet Network Information Center"} +@string{nrtc = "Northrop Research and Technology Center"} +@string{sri = "SRI International"} +@string{uci = "University of California, Irvine"} +@string{udel = "University of Delaware"} +@string{cis = "Department of Computer and Information Sciences"} +@string{ics = "Department of Information and Computer Science"} +@string{rand = "The Rand Corporation"} + +% journals +@string{cn/isdn = "Computer Networks and ISDN Systems"} +@string{ccr = "Computer Communication Review"} +@string{ieeecm = "IEEE Communications Magazine"} + +% types +@string{rfc = "Request for Comments"} diff --git a/docs/historical/mh6.5/lcustom.tex b/docs/historical/mh6.5/lcustom.tex new file mode 100644 index 0000000..c595c04 --- /dev/null +++ b/docs/historical/mh6.5/lcustom.tex @@ -0,0 +1,249 @@ +% LaTeX customization + + +\makeatletter % for a little while + + +% plain TeX compatibility + +\def\oldstyle{\xdef\@oldstyle{\the\textfont\@ne}\mit\@oldstyle} + + +% PhD-TeX compatibility + +\def\showsummary{% + \begingroup + \def\note##1{% + \ifcase\value{##1}no ##1s\or + 1 ##1\else + \the\value{##1} ##1s\fi + }% + \typeout{LaTeX summary: \note{figure}, \note{table}, \note{footnote}.}% + \endgroup +} + +\def\smaller{\footnotesize} + + +% Float Support + +% \tagfigure*[FLOAT]{FILE}{CAPTION}{LABEL} +% * optional +% FLOAT float options +% FILE reads TPIC output in file figureFILE +% CAPTION for list of figures +% LABEL for \ref and \pageref +\def\tagfigure{\@ifstar{\@stagfigure}{\@tagfigure}} +\def\@tagfigure{\@ifnextchar[{\@@tagfigure}{\@@tagfigure[t]}} +\def\@stagfigure{\@ifnextchar[{\@@stagfigure}{\@@stagfigure[t]}} + +\def\@@tagfigure[#1]#2{% + \@@@tagfigure[#1]{\input figure#2\relax\centerline{\box\graph}}} +\def\@@stagfigure[#1]#2{% + \@@@stagfigure[#1]{\input figure#2\relax\centerline{\box\graph}}} + + +% \tagdiagram*[FLOAT]{FILE}{CAPTION}{LABEL} +% * optional +% FLOAT float options +% FILE reads LaTeX input in file diagramFILE +% CAPTION for list of figures +% LABEL for \ref and \pageref +\def\tagdiagram{\@ifstar{\@stagdiagram}{\@tagdiagram}} +\def\@tagdiagram{\@ifnextchar[{\@@tagdiagram}{\@@tagdiagram[t]}} +\def\@stagdiagram{\@ifnextchar[{\@@stagdiagram}{\@@stagdiagram[t]}} + +\def\@@tagdiagram[#1]#2{\@@@tagfigure[#1]{\input diagram#2\relax}} +\def\@@stagdiagram[#1]#2{\@@@stagfigure[#1]{\input diagram#2\relax}} + +\def\@@@tagfigure[#1]#2#3#4{% + \begin{figure}[#1] + \hrule + \vskip .5\baselineskip + \begin{minipage}\columnwidth + \small#2% + \end{minipage} + \vskip .5\baselineskip plus .5\baselineskip + \caption{#3}% + \label{#4}% + \vskip 2pt + \hrule + \end{figure} +} + +\def\@@@stagfigure[#1]#2#3#4{% + \begin{figure*}[#1] + \hrule + \vskip .5\baselineskip + \begin{minipage}\textwidth + \small#2% + \end{minipage} + \vskip .5\baselineskip plus .5\baselineskip + \caption{#3}% + \label{#4}% + \vskip 2pt + \hrule + \end{figure*} +} + + +% \tagtable*[FLOAT]{FILE}{CAPTION}{LABEL} +% * optional +% FILE read LaTeX input in file tableFILE +% FLOAT float options +% CAPTION for list of tables +% LABEL for \ref and \pageref +\def\tagtable{\@ifstar{\@stagtable}{\@tagtable}} +\def\@tagtable{\@ifnextchar[{\@@tagtable}{\@@tagtable[t]}} +\def\@stagtable{\@ifnextchar[{\@@stagtable}{\@@stagtable[t]}} + +\def\@@tagtable[#1]#2#3#4{% + \begin{table}[#1] + \hrule + \vskip .5\baselineskip + \begin{minipage}\textwidth + \small\input table#2\relax + \end{minipage} + \vskip .5\baselineskip plus .5\baselineskip + \caption{#3}% + \label{#4}% + \vskip 2pt + \hrule + \end{table} +} + +\def\@@stagtable[#1]#2#3#4{% + \begin{table*}[#1] + \hrule + \vskip .5\baselineskip + \begin{minipage}\columnwidth + \small\input table#2\relax + \end{minipage} + \vskip .5\baselineskip plus .5\baselineskip + \caption{#3}% + \label{#4}% + \vskip 2pt + \hrule + \end{table*} +} + + +% Document style options: +% 10pt - Makes ten-point type the normal (default) type size +% draftnote - Customized draft option + +\@namedef{ds@10pt}{\def\@ptsize{0}} %%% for orthogonality + + +\newif\ifdraft \draftfalse + +\def\draftstring{{\ifdraft \tt Draft\fi}} + +\def\draftext{% + \ifdraft + \begingroup + \tt + \ifodd\thepage + \LaTeX set \today\ with \fmtname\ v\fmtversion + \else + Draft \versiontag/ of \versiondate/ + \fi + \endgroup + \fi +} + +\def\versiontag/{% + \gdef\versiontag/{\#0}% + \gdef\versiondate/{\today}% + \@input{\jobname.vrsn}%6 + \versiontag/% +} +\def\versiondate/{% + \gdef\versiontag/{\#0}% + \gdef\versiondate/{\today}% + \@input{\jobname.vrsn}% + \versiondate/% +} + +\def\ds@draftnote{% + \drafttrue + \@ifundefined{ds@draft}{}{\ds@draft}% + \def\ps@plain{% + \def\@oddhead{\draftext\hfil}% + \def\@oddfoot{\draftstring\hfil\rm\thepage\hfil\draftstring}% + \let\@evenhead=\@oddhead + \let\@evenfoot=\@oddfoot + }% +} + + +% The Title + +\def\title#1{% + \gdef\@title{#1}% + \gdef\banner{% + \newpage\setcounter{page}{1}% + \begin{center}\Large#1\end{center}% + }% +} + + +% Miscellany + +\def\implies{\quad\supset\ } + +\def\tdots{\ldots\thinspace} + +\def\boxit#1{\fbox{\sc#1}} + +\def\note#1{\ifdraft\marginpar{\tt#1}\fi} + + +% Fractions (from The TUGboat v6 n1, 1985) + +\def\myfrac#1/#2{% + \leavevmode\kern.1em + \raise.5ex\mbox{\the\scriptfont\z@ #1}\kern-.1em + /\kern-.15em\lower.25ex\mbox{\the\scriptfont\z@ #2}% +} + + +% Trademarks... + +\input trademark + + +% Startup + +\xdef\today{% + \ifcase\month + \number\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\else + \number\month\fi + \space\number\day, {\noexpand\mit\number\year}% +} + +\begingroup + \count0=\time + \count1=\count0 + \divide\count0 by 60 + \count2=\count0 + \multiply\count0 by 60 + \advance\count1 by -\count0 + \ifnum\count2>11 + \ifnum\count2>12 \advance\count2 by -12\fi + \def\ampm{pm}% + \else + \ifnum\count2=0 \advance\count2 by 12\fi + \def\ampm{am}% + \fi + \xdef\daytime{% + \ifnum\count2<10 0\fi \the\count2:% + \ifnum\count1<10 0\fi \the\count1 + \ampm + }% +\endgroup + + +\makeatother % back to normal diff --git a/docs/historical/mh6.5/mh6.bbl b/docs/historical/mh6.5/mh6.bbl new file mode 100644 index 0000000..de04fdc --- /dev/null +++ b/docs/historical/mh6.5/mh6.bbl @@ -0,0 +1,10 @@ +\begin{thebibliography}{MRose85} + +\bibitem[MRose85]{MH.USR} +Marshall~T. Rose and John~L. Romine. +\newblock {\it {The Rand MH Message Handling System: User's Manual}}. +\newblock Department of Information and Computer Science, University of + California, Irvine, \mh6 edition, November, {\oldstyle 1985}. +\newblock UCI Version. + +\end{thebibliography} diff --git a/docs/historical/mh6.5/mh6.major b/docs/historical/mh6.5/mh6.major new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/docs/historical/mh6.5/mh6.major @@ -0,0 +1 @@ +2 diff --git a/docs/historical/mh6.5/mh6.minor b/docs/historical/mh6.5/mh6.minor new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/docs/historical/mh6.5/mh6.minor @@ -0,0 +1 @@ +10 diff --git a/docs/historical/mh6.5/mh6.tex b/docs/historical/mh6.5/mh6.tex new file mode 100644 index 0000000..29b169e --- /dev/null +++ b/docs/historical/mh6.5/mh6.tex @@ -0,0 +1,617 @@ +% run this through LaTeX + +\input lcustom + +\documentstyle[12pt,sfwmac]{article} + +\begin{document} + +\title{Changes to\\ The Rand MH Message Handling System:\\ + MH \#6.5 for 4.3BSD UNIX} +\author{Marshall T.~Rose\\ + Northrop Research and Technology Center\\ + One~Research Park\\ + Palos Verdes Peninsula, CA 90274} +\date{\ifdraft \versiondate/\\ Version \versiontag/\else \today\fi} +\maketitle +\footnotetext[0]{\hskip -\parindent +This document (version \versiontag/) +was \LaTeX set \today\ with \fmtname\ v\fmtversion.} + +\begin{abstract} +This document describes the user-visible change to the +UCI version of the Rand \MH/ system that were made from \mh5 to \MH/ \#6.5. +It is based on the \mh6 changes document, +but has been updated to accurately reflect the \MH/ distributed with +4.3\bsd/~\unix/. +This document does not describe bug-fixes, per se, +or internal changes, +unless these activities resulted in a visible change for the \MH/ user. + +This document is meant to supplement, +not supersede, the standard \MH/ User's manual\cite{MH.USR}. + +Comments concerning this documentation should be addressed to the Internet +mailbox {\sf Bug-MH@ICS.UCI.EDU}. +\end{abstract} + +\newpage + \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 T.~Rose +and John L.~Romine at the University of California, Irvine. +Einar A.~Stefferud, Jerry N.~Sweet, +and Terry P.~Domae provided numerous suggestions +to improve the UCI version of \MH/. +Of course, +a large number of people have helped \MH/ along. +The list of ``\MH/~immortals'' is too long to list here. +However, Van Jacobson deserves a special acknowledgement for his tireless +work in improving the performance of \MH/. +Some programs have been speeded-up by a factor of 10 or 20. +All of users of \MH/, everywhere, owe a special thanks to Van. + + \section* {Disclaimer} +The Regents of the University of California wish to make it known that: +\begin{quote} +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. +\end{quote} + +\newpage + \section* {Conventions} +In this document, +certain \LaTeX -formatting conventions are adhered to: +\begin{enumerate} +\item The names of \unix/ commands, such as \pgm{comp}, +are presented in {\it text italics}. + +\item Arguments to programs, such as \arg"msgs", +are presented in {\tt typewriter style} and delimited by single-quotes. + +\item \unix/ pathnames and envariables, +such as $$\file{/usr/uci/}\hbox{\qquad and\qquad}\file{\$SIGNATURE},$$ +are presented in {\sl slanted roman}. + +\item Text presenting an example, such as +\begin{verbatim} + comp -editor zz +\end{verbatim} +is presented in {\tt typewriter style}. +\end{enumerate} + +\newpage + \section* {General Changes} +Unlike the changes between \mh4 and \mh5, +a large number of user-visible changes have been made in \mh6. +These changes have been in the form of bug fixes and several generalizations. +The majority of these will not affect novice users. +In addition, \mh6 is a great deal faster than \mh5: +all programs have been speeded-up significantly, +thanks to work done by Van Jacobson as part of the process of including \mh6 +in the 4.3\bsd/~\unix/ distribution. + +This document describes all user-visible changes to \mh5 from it's initial +release to the intermediate release of \MH/ \#6.5. + +\subsection* {System-5 Support} +In addition to support for \bsd/~\unix/, V7~\unix/ and \xenix/ variants of +\unix/, +\MH/ finally has support for the AT\&T variant of \unix/, System~5. +Hopefully this will greatly expand the number of system which can run \MH/. +Ironically, +it appears that five ports of earlier versions of \MH/ (including \mh5) +were done, +but news of the work was not widespread.% +\footnote{In fact, +three groups in one large organization ported \MH/ independently, +each without knowledge of the others' work.} + +\subsection* {Documentation} +Several new documents have been included in the \mh6 distribution: +The paper {\em MH.5: How to process 200 messages a day and still get some +real work done} +was presented at the 1985 Summer Usenix Conference and Exhibition in +Portland, Orgeon. +Another paper, {\em MH: A Multifarious User Agent}, +has been accepted for publication by Computer Networks. +Both describe \MH/, +the former from a more technical and somewhat humorous perspective, +the latter from a more serious and research-oriented perspective. +In addition, +a third paper has been included, +{\em Design of the TTI Prototype Trusted Mail Agent}, +which describes a so-called ``trusted'' mail agent built on top of \MH/. +This paper was presented at the Second International Symposium on +Computer Message Systems in Washington, D.C. +A fourth paper, +{\em MZnet: Mail Service for Personal Micro-Computer Systems}, +is also included. +This paper, +which was presented at the First International Symposium on Computer Message +Systems in Nottingham, U.K., +describes a \cpm/-based version of \MH/. + +In addition, +the \MH/ tutorial, {\em The Rand MH Message Handling System: Tutorial}, +and, +{\em The Rand MH Message Handling System: The UCI BBoards Facility}, +have both been updated by Jerry N.~Sweet. + +For \MH/ administrators (PostMasters and the like), +there's an entirely new document, +{\em The Rand MH Message Handling System: Administrator's Guide}. +It explains most of the ``ins and outs'' of maintaining an \MH/ system. + +Finally, all of the manual entries and the \MH/ manual have had a thorough +working over. +The documentation is expanded, more accurate, and more detailed. + +\subsection* {Help Listings} +When any \MH/ command is invoked with the \switch"help" switch, +in addition to listing the syntax of the command and version information, +the \MH/ configuration options will be listed. +\MH/ has so many configuration options, +that when debugging problems, this information is invaluable. + +\subsection* {The \MH/ Profile} +There are two new profile entries worth noting: +\verb"MH-Sequences" tells \MH/ the name of the file to record public +sequences in. +Users of \pgm{vm}, a proprietary, visual front-end to \MH/, +make use of this to disable the public sequences feature of \MH/. + +The profile entry \verb"Unseen-Sequence" names those sequences which should be +defined as those messages recently incorporated by \pgm{inc}. +The \pgm{show} program knows to remove messages from this sequence once it +thinks they have been seen. +If this profile entry is not present, or is empty, then no sequences are +defined. +Otherwise, for each name given, the sequence is first zero'd and then each +message incorporated is added to the sequence. +As such, this profile entry is rather analogous to the +\verb"Previous-Sequence" entry in the user's \MH/ profile. + +In addition, the \verb"Alternate-Mailboxes" entry in the profile has been +expanded to support simple wild-carding. +Also, the default for this profile entry is now the user's mail-id at any host. +This change was made since \MH/ can no longer reliably figure out what +the user's real outgoing address looks like. + +Finally, +when the \pgm{install-mh} program is automatically invoked by \MH/, +it won't prompt the user for information. +Instead, it notes that it's setting up the default environment. +In addition, +the \MH/ administrator may set-up a file called \file{mh.profile} in the \MH/ +library area which is consulted by \pgm{install-mh} when initializing the +user's \profile/. + +\subsection* {The \MH/ Context} +The \pgm{folder}, \pgm{scan}, and \pgm{show} programs have been modified to +update the user's \MH/ context prior to writing to the user's terminal. +This allows the \MH/ user interrupt output to the terminal and still have the +expected context. +This is especially useful to interrupt long \pgm{scan} listings. +This change also introduces a subtle bug between \pgm{show} and messages +denoted by the \verb"Unseen-Sequence". +See \man show(1) for the details. + +\subsection* {Addresses and 822 support} +\MH/ now fully supports the RFC-822 routing syntax for addresses +(it used to recognize the syntax, but ignore the information present). +In addition, +there are three major modes for support of non-822 addressing in \MH/: +\begin{itemize} +\item BERK\\ +This is useful on sites running \SendMail/. +It doesn't support full 822--style addressing, +in favor of recognizing such formats as ACSnet, and so on. +For sites that can't run in an 822--compliant environment, +this is the option to use +(at the price of sacrificing some of the power of 822--style addressing). +This also drastically reduces the address formatting facilities described +below. + +\item DUMB\\ +Although not as liberal as BERK, +the DUMB option is useful on sites in which the message transport system +conforms to the 822 standard, +but wants to do all the defaulting itself. + +\item BANG\\ +From out in left field, +the BANG option favors \UUCP/-style addressing over 822--style addressing. +Hopefully when all the \UUCP/ sites around get around to adopting domain-style +addresses, this option won't be needed. +\end{itemize} + +The \pgm{ap} program (mentioned momentarily) and the \pgm{ali} program +both support a \switch"normalize" switch indicate if addresses should be +resolved to their ``official'' hostnames. + +\subsection* {New Programs} +There are five new programs available: +The \pgm{ap} program is the \MH/ stand-alone address parser. +It's useful for printing address in various formats +(and for debugging address strings). +The \pgm{dp} program is similar, but works on dates instead of addresses. + +The \pgm{msgchk} program checks for new mail, +possibly using the Post Office Protocol, POP, described below. + +A new receive mail hook, +the \pgm{rcvstore} program, +which was written by Julian L.~Onions is available. + +Finally, a visual front-end to \pgm{msh} called \pgm{vmh} has been included. +(This program is discussed in greater detail later on.) + +\subsection* {Message Numbering} +\MH/ now no longer restricts the number of messages which may reside in a +folder +(beyond that of system memory constraints). +This means that message numbers larger than 2000 are permissible. +Hopefully this will make life easier for people reading the network news +using \MH/. + + \section* {The WhatNow Shell} +In \mh6, +there is now the concept of a unified \whatnow/ processor that +the four composition programs, \pgm{comp}, \pgm{dist}, \pgm{forw}, +and \pgm{repl} all invoke. +This permits a greater flexibility in building mail applications with \MH/. +As a result, there's a new program, \pgm{whatnow}, which acts as the default +\whatnow/ program. +Consult the \man whatnow(1) manual entry for all the details. +The only important user-visible change is the \verb"headers" option went away, +which wasn't used that much anyway. + + +The only other thing worth noting is that unless \MH/ has been compiled with +the UCI option, +the user's \file{\$HOME/.signature} file is not consulted for the user's +personal name. + + \section* {Format Strings} +A general format string facility has been added to allow \MH/ users to tailor +the output of certain commands. + +The \pgm{inc}, \pgm{scan}, \pgm{ap}, and \pgm{dp} programs all consult a +file containing format strings. +Format strings, +which look a lot like \man printf(3) strings, +give these \MH/ commands precise instructions on how to format their output. + +As a result, +the \pgm{inc} and \pgm{scan} programs no longer have the +\switch"size", \switch"nosize", +\switch"time", \switch"notime", +\switch"numdate", and \switch"nonumdate" +switches. +These switches have been replaced with the +\switch"form formatfile" switch and the \switch"format string" switch. +The former directs the program to consult the named file for the format +strings. +The latter directs the program to use the named string as the format. +To get the behavior of the old \switch"time" option, +use the \switch"form scan.time" option. +Similarly, +to get the effect of \switch"size", +use \switch"form scan.size". + +A fun form to use is \switch"form scan.timely" with \pgm{scan}. +Try it sometime. + + +The \pgm{repl} command uses a file containing format files to +indicate how the reply draft should be constructed. +Note that reply templates prior to \mh6 are incompatible with \mh5.% +\footnote{In fact, reply templates between \mh6 and \MH/ \#6.5 are +imcompatible.} +Don't worry though, +it's quite easy to convert the templates by hand. +(Those clever enough to have written a reply template to begin with won't +have {\em any\/} problem.) + +Similarly, when the \pgm{forw} program is constructing a digest, +it uses a file containing format strings to indicate how to build the +encapsulating draft. + +Finally, you can use these facilities in \pgm{mhl} as well. + + \section* {News} +The depreciated \MH/ news system (from \mh1) is now de-supported. +Use the ``hoopy'' BBoards facility instead. + + \section* {BBoards} +\MH/ maintainers take note: +the default home directory for the bboards login has changed from +\file{/usr/bboards/} to \file{/usr/spool/bboards/}. +Use the \verb"bbhome" directive in your \MH/ configuration file to set +it back to the old value if you wish. + +In addition, the aliases field for a BBoard in the BBoards file is now +deemed useful only for addressing, not for user input to \pgm{bbc}. +This means when giving the name of a BBoard to \pgm{bbc}, +only the official name should be used. + +A final note for mailsystem maintainers: +the \MMDFII/ BBoards channel and the \SendMail/ BBoards mailer have been +modified to use the standard message encapsulation format when returning +failed messages to the list maintainer. +This means that the failure notices that the maintainer receives can +simply be \pgm{burst}. + +\subsection* {New Switches in bbc} +The \pgm{bbc} program permits you to specify the \verb"mshproc" to use on the +command line by using the \switch"mshproc program" option. +There's also a \switch"rcfile file" option which does ``the obvious thing''. +In addition, options which aren't understood by \pgm{bbc} are passed along to +the \verb"mshproc". + +In addition, the following commands +pass any unrecognized switches on to the program that they invoke: +\pgm{bbc}, \pgm{next}, \pgm{show}, \pgm{prev}, and \pgm{vmh}. + +\subsection* {Distributed BBoards} +If both BBoards and POP (see the next section) are enabled, +then distributed BBoards can be supported on top of the POP service. +This allows the \MH/ user to read BBoards on a server machine +instead of the local host +(which saves a lot of wasted disk space when the same BBoards are replicated +several times at a site with several hosts). +See the {\em Administrator's Guide\/} for information on how this can be made +completely transparent to the \MH/ user. + +If you have several machines at your site running 4.2\bsd/~\unix/ +and connected by an \ethernet/ (or other high-speed LAN), +you {\em want\/} this software. + +\subsection* {Visual Front-End to msh} +A simple window management protocol has been implemented for \MH/ programs +that might wish to act as a back-end to a sophisticated visual front-end. + +The first implementation of a server side (front-end) program is \pgm{vmh}, +which uses \man curses(3) to maintain a split-screen interface. +Perhaps look for a \pgm{mhtool} program for the SUN next! + +The \pgm{msh} program has been modified to speak the client side (back-end) +of this protocol, if so directed. +At present, \pgm{msh} is the only program in the \MH/ distribution which +implements the client side of the window management protocol. + +\subsection* {Updates in msh} +Prior to quitting, +the \pgm{msh} command now asks if the \pgm{packf\/}'d file you've been +perusing should be updated if you've modified it and the file is writable by +you. +The file can be modified by using \pgm{burst}, \pgm{rmm}, \pgm{rmm}, +or \pgm{sortm} commands. +The file can also be modified by using the \pgm{refile} command without the +\switch"link" option. +(Or course, +the \switch"link" option doesn't actually link anything to the file.) + + \section* {Distributed Mail} +\MH/ now contains a powerful facility for doing distributed mail +(having \MH/ reside on a host different than the message transport agent). +For general information, +consult either the +{\em MH.5: How to process 200 messages a day and still get some real work +done} paper, +or the {\em MH: A Multifarious User Agent} paper. +For specific information, +consult the {\em Administrator's Guide}. +Here's a brief synopsis: + +This POP facility in \MH/ is based on a modification of the ARPA Post +Office Protocol (POP). +A POP {\em subscriber\/} is a remote user, +on a POP {\em client host}, +that wishes to pick-up mail on a POP {\em service host}. + +There are two ways to administer POP: +\begin{itemize} +\item Naive Mode\\ +Each user-id in the \man passwd(5) file is considered a POP subscriber. +No changes are required for the mailsystem on the POP service host. +However, +this method requires that each POP subscriber have an entry in the password +file. +The POP server will fetch the user's mail from wherever maildrops are kept on +the POP service host. +This means that if maildrops are kept in the user's home directory, +then each POP subscriber must have a home directory. + +\item Smart Mode\\ +This is based on the notion that the list of POP subscribers and the list of +login users are completely separate name spaces. +A separate database (similar to the \man BBoards(5) file) +is used to record information about each POP subscriber. +Unfortunately, +the local mailsystem must be changed to reflect this. +This requires two changes (both of which are simple): +\begin{enumerate} +\item Aliasing\\ + The aliasing mechanism is augmented so that POP subscriber addresses + are diverted to a special delivery mechanism. + \MH/ comes with a program, \man popaka(8), which generates the + additional information to be put in the mailsystem's alias file. +\item Delivery\\ + A special POP delivery channel (for \MMDFII/) + or POP mailer (for \SendMail/) performs the actual delivery (\mh6 + supplies both). + All it really does is just place the mail in the POP spool area. +\end{enumerate} +Clever mailsystem people will note that +the POP mechanism is really a special case of the more general +BBoards mechanism. +\end{itemize} +These two different philosophies are not compatible on the same POP service +host: one or the other, but not both, may be run. + +In addition, there is one user-visible difference, +which the administrator controls the availability of. +The difference is whether the POP subscriber must supply a password to the POP +server: +\begin{itemize} +\item ARPA standard method\\ +This uses the standard ARPA technique of sending a username and a password. +The appropriate programs (\pgm{inc}, \pgm{msgchk}, and possibly \pgm{bbc\/}) +will prompt the user for this information. + +\item \unix/ remote method\\ +This uses the Berkeley \unix/ reserved port method for authentication. +This requires that the two or three mentioned above programs be {\em setuid\/} +to root. +(There are no known holes in any of these programs.) +\end{itemize} +These two different philosophies are compatible on the same POP service host: +to selectively disable RPOP for hosts which aren't trusted, +either modify the \file{.rhosts} file in the case of POP subscribers being +\unix/ logins, +or zero the contents of network address field of the \man pop(5) file for the +desired POP subscribers. + +The \pgm{inc} command also has two other switches when \MH/ is enabled for +POP: +\switch"pack file" and \switch"nopack". +Normally, +\pgm{inc} will use the POP to incorporate mail from a POP service host into +an \MH/ folder (\verb"+inbox"). +However, +there are some misguided individuals who prefer to \pgm{msh} to read their +maildrop. +By using the \switch"pack file" option, +these individuals can direct \pgm{inc} to fetch their maildrop from the POP +service host and store it locally in the named file. +As expected, \pgm{inc} will treat the local file as a maildrop, +performing the appropriate locking protocols. +And, +if the file doesn't exist, +the user is now asked for confirmation. + + \section* {Rcvmail hooks} +In order to offer users of \MH/ increased rcvmail hook functionality, +the \pgm{slocal} program has been upgraded to support the semantics of +the \MMDFII/ mail-delivery mechanism. +This means that users of \mh6 can maintain identical \file{.maildelivery} +files regardless of the underlying transport system. +See \man mhook(1) for all the details. + +\subsection* {Change in rcvdist} +The \pgm{rcvdist} rcvmail hook now uses the \MH/ formatting facility when +redistributing a message. + +\subsection* {Field change in rcvpack} +The \pgm{rcvpack} rcvmail hook now adds the field name \verb"Delivery-Date:" +instead of \verb"Cron-Date:" to messages it \pgm{pack\/}s. + + \section* {GNU Emacs Support} +James Larus' \pgm{mh-e} macro package for GNU Emacs (version~17) is included +in the distribution. +When loaded in Emacs, this provides a handy front-end. + + \section* {Other Changes} +Here's the miscellany: + +\subsection* {Continuation Lines} +Alias files used by \MH/, +display templates used by \pgm{mhl}, +and format files used by \pgm{forw}, \pgm{repl}, and \pgm{scan} all support +a standard continuation line syntax. +To continue a line in one of these files, +simply end the line with the backslash character (`$\backslash$'). +All the other files used by \MH/ are in 822--format, +so the 822--continuation mechanism is used.% +\footnote{Looking back, +it would have been best had all files in \MH/ used the 822--format.} + +\subsection* {Default Date Format} +\MH/ now uses numeric timezones instead of locally-meaningful alpha timezones +when generating mail. +This change was made to encourage the use of unambiguous, globally-meaningful +timezone strings. +A local configuration option can disable this correct behavior. +All of the \pgm{mhl} templates have been modified to use locally-meaningful +alpha timezones when displaying messages. + +\subsection* {New switch in ali} +The \pgm{ali} command now has a \switch"noalias" switch to prevent +system-wide aliases from being interpreted. + +\subsection* {Modifications to show} +The \switch"format", \switch"noformat", \switch"pr", and \switch"nopr" +options to \pgm{show} have gone away in favor of a more general mechanism. +The \switch"showproc program" option tells \pgm{show} +(or \pgm{next} or \pgm{prev\/}) to use the named program as the \verb"showproc". +The \switch"noshowproc" option tells \pgm{show}, et. al., +to use the \man cat(1) program instead of a \verb"showproc". +As a result, the profile entry \verb"prproc" is no longer used. + +\subsection* {Switch change in inc} +The \switch"ms ms-file" switch in \pgm{inc} has been changed to +\switch"file name" to be more consistent. + +\subsection* {Front-End to mhl} +When outputting to a terminal, +the \pgm{mhl} program now runs the program denoted by the profile entry +\verb"moreproc". +If this entry is not present, +the default is the UCB \pgm{more} program. +If the entry is non-empty, +then that program is spliced between \pgm{mhl} and the user's terminal. +The author uses the \pgm{less} program as his \verb"moreproc". + +Of course, +if \pgm{mhl} isn't outputting to a terminal, +then \verb"moreproc" is not invoked. + +Finally, +to aid in the construction of replies, +a prefix string may be specified for the \verb"body" component of the message +being replied-to. +Simply use the \verb"component=" construct in \pgm{mhl} for \verb"body:". + +\subsection* {Confirmation in packf} +If the file specified by the \switch"file name" switch doesn't exist, +the user is now asked for confirmation. + +\subsection* {Complex Expressions in pick} +The \pgm{pick} command now handles complex boolean expressions. + +\subsection* {Defaults change in prompter and burst} +The \switch"prepend" option is now the default in \pgm{prompter}. +The \switch"noinplace" option is now the default in \pgm{burst}. + +\subsection* {Fcc:s and post} +If multiple Fcc:s for a message are specified during posting, +\pgm{post} will try much harder to preserve links. + +\subsection* {Interactive option in rmf} +The \pgm{rmf} program has been changed to support an \switch"interactive" +switch. +If given, +then the user is prompted regarding whether the folder should be deleted. +If the folder to be removed is not given by the user, +this switch is defaulted to on. + +\subsection* {Trusted Mail Interface} +\MH/ now has an interface for so-called ``trusted mail'' applications. +Although the modifications to \MH/ to support this are in the public domain, +the actual library that \MH/ uses is not. +Contact Professor David J.~Farber ({\sf Farber@UDel\/}) for more information. + +\bibliography{bcustom,sfwdoc} +\bibliographystyle{alpha} + +\showsummary + +\end{document} diff --git a/docs/historical/mh6.5/mh6.vrsn b/docs/historical/mh6.5/mh6.vrsn new file mode 100644 index 0000000..56094e0 --- /dev/null +++ b/docs/historical/mh6.5/mh6.vrsn @@ -0,0 +1,6 @@ +\begingroup + \catcode`\#=12 + \gdef\versiontag/{#2.10}% + \gdef\versiondate/{Wed May 21 21:06:09 PDT 1986}% +\endgroup +\typeout{Version \versiontag/ of \versiondate/} diff --git a/docs/historical/mh6.5/sfwdoc.bib b/docs/historical/mh6.5/sfwdoc.bib new file mode 100644 index 0000000..b74f815 --- /dev/null +++ b/docs/historical/mh6.5/sfwdoc.bib @@ -0,0 +1,237 @@ +% ``Software'' bibliography database for BiB-TeX + + +@misc{AmSTeX, + author = "Michael Spivak", + title = "{Summary of \AmSTeX{}}", + month = sep, + year = 1983 +} + +@misc{BibTeX, + author = "Oren Patashnik", + title = "{\BibTeX{}ing}", + month = may, + year = 1983 +} + +@misc{Emacs, + author = "James Gosling", + title = "{UNIX EMACS, UCI Version}", + month = may, + year = 1982 +} + +@book{LaTeXbook, + author = "Leslie Lamport", + title = "{\LaTeX{}: A Document Preparation System}", + publisher= {Addison-Wesley}, + address= {Reading, Massachusetts}, + year = 1985 +} + +@manual{MH.ADM, + title = "{The Rand MH Message Handling System: + Administrator's Guide}", + edition = {\mh6}, + author = mtr, + organization= ics, + address = uci, + month = nov, + year = 1985, + note = {UCI Version} +} + +@manual{MH.BB, + title = "{The Rand MH Message Handling System: + The UCI BBoards Facility}", + author = mtr, + organization= cis, + address = udel, + month = oct, + year = 1984 +} + +@manual{MH.POP, + title = "{Post Office Protocol (revised)}", + author = mtr, + organization= cis, + address = udel, + month = oct, + year = 1984 +} + +@manual{MH.XPOP, + title = "{Post Office Protocol (revised) + Extended Service Offerings}", + author = mtr, + organization= nrtc, + month = dec, + year = 1985 +} + +@manual{MH.USR, + title = "{The Rand MH Message Handling System: + User's Manual}", + edition = {\mh6}, + author = "Marshall T. Rose and John L. Romine", + organization= ics, + address = uci, + month = nov, + year = 1985, + note = {UCI Version} +} + +@manual{MH.TUT, + title = "{The Rand MH Message Handling System: + Tutorial}", + author = "Marshall T. Rose and Jerry N. Sweet", + organization= cis, + address = udel, + month = oct, + year = 1984 +} + +@manual{MH.4, + title = "{Changes to the Rand MH Message Handling System: + MH.4}", + author = mtr, + organization= ics, + address = uci, + month = jul, + year = 1984 +} + +@manual{MH.5, + title = "{Changes to the Rand MH Message Handling System: + MH.5}", + author = mtr, + organization= cis, + address = udel, + month = jan, + year = 1985 +} + +@manual{MH.6, + title = "{Changes to the Rand MH Message Handling System: + MH.6}", + author = mtr, + organization= nrtc, + month = nov, + year = 1985 +} + +@manual{MH6.4, + title = "{Changes to the Rand MH Message Handling System: + MH \#6.4 for 4.3BSD UNIX}", + author = mtr, + organization= nrtc, + month = feb, + year = 1986 +} + +@inproceedings{MMDF, + author = "David H. Crocker and E.S. Szurkowski and + David J. Farber", + title = "{An Internetwork Memo Distribution + Facility~---~MMDF}", + booktitle= "{Proceedings, Sixth Data Communications Symposium}", + pages = {18--25}, + month = nov, + year = 1979, + note = {Asilomar} +} + +@inproceedings{MMDFII, + author = "Douglas P. Kingston~III", + title = "{MMDFII: A Technical Review}", + booktitle= {Proceedings, Summer Usenix Conference and Exhibition}, + pages = {32--41}, + month = jun, + year = 1984, + note = {Salt Lake City, Utah} +} + +@misc{PhDTeX, + author = "E. Timothy Morgan", + title = "{A Dissertation Style for \AmSTeX{}}", + month = sep, + year = 1984, + note = {Department of Information and Computer Science, + University of California, Irvine} +} + +@techreport{PIC, + author = "Brian W. Kernighan", + title = "{PIC --- A Graphics Language for Typesetting User + Manual}", + type = {Computing Science Technical Report}, + number = 85, + institution= {Bell Laboratories}, + address = {Murray Hill, New Jersey}, + month = mar, + year = 1982 +} + +@manual{SendMail, + title = "{SENDMAIL~---~An Internetwork Mail Router}", + author = "Eric Allman", + organization= {Britton-Lee, Inc.}, + address = {Berkeley, California}, + month = jul, + year = 1983 +} + +@manual{Slides, + title = "{Using \SLiTeX{} to Make Slides at NRTC}", + author = mtr, + organization= nrtc, + month = apr, + year = 1986 +} + +@book{TeXbook, + author = "Donald E. Knuth", + title = "{The \TeX{}book}", + publisher= {Addison-Wesley}, + address = {Reading, Massachusetts}, + year = 1983 +} + +@techreport{TeX.Roff, + author = "Michael Urban", + title = "{A Guide to \TeX{} for the Troff User}", + institution= {TRW Software Productivity Project}, + month = oct, + year = 1984 +} + +@misc{TeX.Trip, + author = "Donald E. Knuth", + title = "{A Test File for \TeX{}}", + month = jul, + year = 1983, + note = {Version 0.999} +} + +@manual{UCI.map, + title = "{The UCI RoadMap}", + author = mtr, + organization= cis, + address = udel, + month = oct, + year = 1984 +} + +@article{WEB.TUT, + author = "Donald E. Knuth", + title = "{Literate Programming}", + journal = {The Computer Journal}, + year = 1983 +} + +@misc{WEB.USR, + author = "Donald E. Knuth", + title = "{WEB USER MANUAL}", + year = 1983 +} diff --git a/docs/historical/mh6.5/sfwmac.sty b/docs/historical/mh6.5/sfwmac.sty new file mode 100644 index 0000000..fe0cb23 --- /dev/null +++ b/docs/historical/mh6.5/sfwmac.sty @@ -0,0 +1,66 @@ +% LaTeX support for writing UNIX-style documentation + + +% UNIX-style references + +\def\sfwFILfont{\sl} + +\def\@egaux#1#2#3{% + \def#1##1{% + #2\begingroup \tt \let\do=\@makeother \dospecials + \def\@tempa####1##1{####1\endgroup#3}\@tempa + }% +} + +\def\pgm#1{\mbox{\it#1}\index{#1}} % programs +\def\xpgm#1#2{\mbox{\it#1}\index{\noexpand\noexpand\noexpand#2{}}} +\def\man#1(#2){\xpgm{#1\/}{#1}(#2)} % manual entries +\@egaux\arg{`{}}{'{}} % arguments to programs +\@egaux\switch{`{}-}{'{}} % switches to programs +\def\file#1{\mbox{\sfwFILfont#1}} % filename + + +% Commonly used software systems + +\def\sfwPGMfont{\sf} + +\def\@sfwdef#1#2{\@sfwaux{#1/}{#2}} +\def\@sfwaux#1#2{\def#1{\mbox{#2}\index{\noexpand\noexpand\noexpand#1{}}}} + +\@sfwdef\EMACS{\sfwPGMfont EMACS} +\@sfwdef\INFO{\sfwPGMfont INFO} +\@sfwdef\MLisp{\sfwPGMfont MLisp} + +\@sfwdef\MH{\sfwPGMfont MH} +\def\mh#1{\mbox{\sfwPGMfont mh.#1}\index{mh.#1}} +\@sfwdef\Mail{\file{Mail/}} +\@sfwdef\context{\file{context}} +\@sfwdef\profile{\file{.mh\_profile}} +\@sfwdef\sequences{\file{.mh\_sequences}} +\def\whatnow/{\verb*"What now?"\index{whatnow}} + +\@sfwdef\MMDF{\sfwPGMfont MMDF} +\@sfwdef\MMDFI{\sfwPGMfont MMDF-I} +\@sfwdef\MMDFII{\sfwPGMfont MMDF-II} + +\@sfwdef\SendMail{\sfwPGMfont SendMail} +\@sfwdef\UUCP{\sfwPGMfont UUCP} + +\def\AmS{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\cal S$} +\@sfwaux\AmSTeX{\rm \AmS-\TeX} + +\@sfwaux\PhDTeX{\rm P\kern-.05em{\sc h\kern-.025em D}\kern-0.08em\TeX} + +\@sfwaux\LaTeX{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX} +\@sfwaux\BibTeX{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em\TeX} +\@sfwaux\SLiTeX{\rm S\kern-.06em{\sc l\kern-.035emi}\kern-.06em\TeX} + +\@sfwaux\NRTeX{\rm NR-\TeX} + +\@sfwdef\ROFF{\sfwPGMfont ROFF} + +\@sfwdef\SUMEX{\sfwPGMfont SUMEX} + +\@sfwdef\WEB{\sfwPGMfont WEB} + +\@sfwdef\TTYD{\sfwPGMfont TTYD} diff --git a/docs/historical/mh6.5/trademark.tex b/docs/historical/mh6.5/trademark.tex new file mode 100644 index 0000000..07dccd5 --- /dev/null +++ b/docs/historical/mh6.5/trademark.tex @@ -0,0 +1,59 @@ +% Trademarks... + +\def\gobble#1{} +\def\tradeORGfont{\sc} % used for organizations (e.g., ACM) +\def\tradeNAMfont{\sf} % used for names (e.g., Ada) + +\def\tradeorg#1{% + \tradeaux{#1}{\expandafter\gobble\string#1}\empty\tradeORGfont +} +\def\tradename#1#2#3{\tradeaux{#1}{#2}{#3}\tradeNAMfont} +\def\trademark#1#2{% + \tradeaux{#1}{\expandafter\gobble\string#1}{#2}\tradeNAMfont +} + +\def\tradeaux#1#2#3#4{% + \def#1/{\relax}% % in case #3 references #1 + \setbox0=\hbox{#3}% % when we make the \hbox + \ifdim\wd0>0pt + \gdef#1/{% + \tradeaux{#1}{#2}\empty{#4}% + #1/\footnote{#1/ is a trademark of #3.}% + }% + \else + \gdef#1/{{#4#2}}% + \fi +} + +\tradeorg\acm +\tradeorg\ansi +\tradename\Ada{Ada} + {the Department of Defense (\Ada/ Joint Program Office)} +\tradeorg\bsd +\tradeorg\ccitt +\tradename\cms{CMS} {International Business Machines, Incorporated} +\tradename\cpm{CP/M} {Digital Research Corporation} +\tradename\decnet{DECnet} {Digital Equipment Corporation} +\tradeorg\dod +\tradename\ethernet{Ethernet} {the Xerox Corporation} +\tradename\eunice{Eunice} \empty +\tradeorg\ieee +\tradename\lattice{Lattice} {Lattice, Incorporated} +\tradename\locus{Locus} {Locus Computing Corporation} +\def\microvax/{$\mu$\vax/} +\def\microvms/{$\mu$\vms/} +\tradeorg\milstd +\tradename\msdos{MS-DOS} {Microsoft Corporation} +\tradename\pcinterface{PC-Interface}% + {Locus Computing Corporation} +\tradename\pdp{PDP} {Digital Equipment Corporation} +\tradename{\tops20}{Tops20} {Digital Equipment Corporation} +\tradename\trustedmail{Trusted\ Mail}% + {Trusted Technologies, Incorporated} +\tradename\ultrix{ULTRIX} {Digital Equipment Corporation} +\tradename\unibus{UNIBUS} {Digital Equipment Corporation} +\tradename\unix{UNIX} {AT\&T Bell Laboratories} +\tradename\vax{VAX} {Digital Equipment Corporation} +\tradename\vm{VM} {International Business Machines, Incorporated} +\tradename\vms{VMS} {Digital Equipment Corporation} +\tradename\xenix{Xenix} {Microsoft Corporation} diff --git a/docs/historical/mh6.5/version.sh b/docs/historical/mh6.5/version.sh new file mode 100644 index 0000000..1b473ee --- /dev/null +++ b/docs/historical/mh6.5/version.sh @@ -0,0 +1,19 @@ +if [ "x$1" = x ]; then echo 'usage: version.sh top-level-file' 1>&2; exit 1; fi + +if [ ! -r $1.major ]; then + echo 1 > $1.major + rm -f $1.minor +fi +if [ ! -r $1.minor ]; then echo 0 > $1.minor; fi + +echo '\begingroup' > $1.vrsn +echo ' \catcode`\#=12' >> $1.vrsn + +echo `cat $1.major $1.minor` | \ +awk ' { major = $1; minor = $2 + 1}\ +END { printf " \\gdef\\versiontag/{#%d.%d}%%\n", major, minor >> "'$1.vrsn'"; \ + printf "%d\n", minor > "'$1.minor'"; }' + +echo ' \gdef\versiondate/{'`date`'}%' >> $1.vrsn +echo '\endgroup' >> $1.vrsn +echo '\typeout{Version \versiontag/ of \versiondate/}' >> $1.vrsn diff --git a/docs/historical/mh6/MHCHANGES b/docs/historical/mh6/MHCHANGES new file mode 100644 index 0000000..7069fda --- /dev/null +++ b/docs/historical/mh6/MHCHANGES @@ -0,0 +1,1773 @@ + MHCHANGES from mh.5 to mh.6 + + +Tue Jan 8 13:54:13 1985 /mtr (agent: Marshall Rose) + + MH.5 is finished, finally. + + +Sat Jan 26 09:05:52 1985 /mtr (agent: Marshall Rose) + + -- Fixes for MHMTS configuration -- + conf/makefiles/uip: shouldn't build rcvdist on an MHMTS system + conf/doc/mhook.rf: ditto + conf/config/mts.c, mhmts/netmail.c, mts/mts.h, uip/rmail.c: + some typos in the declarations of global MTS variables that + are MHMTS specific + mf/mmuu.c: addr_convert() conflicted with routine of same name + in uumm.c + uip/news.c: looking in the wrong place for on 4.2BSD + systems + + +Sat Jan 26 09:08:43 1985 /mtr (agent: Marshall Rose) + + uip/{inc,post}.c: changes for #ifdef TMA; this stuff is still + under non-disclosure (not the MH code, just the -ltma library + which doesn't come with MH) + + +Sat Jan 26 09:38:08 1985 /mtr (agent: Marshall Rose) + + tws/dtime.c: #define dysize(), since could be a macro in ctime.c + (thanks, Fred) + + +Sat Jan 26 09:12:27 1985 /mtr (agent: Marshall Rose) + + MH #5.310[UCI] (uci-750a) released to MH-Workers + + +Sun Jan 27 17:41:03 1985 /mtr (agent: Marshall Rose) + + sendmts/smail.c, uip/post.c: with -DSMTP, keep one SMTP connection + open, instead of starting a new one for each transaction + othersupport/pop/{Makefile,{popd,popser,inc,popsbr}.c}: support + "rpop" under #ifdef RPOP + othersupport/pop/client.c: remove + conf/{config/mts.c,tailor/READ-ME,makefiles/sendmts}, mts/mts.h, + sendmts/{smail,client}.c: support new server search list + facility used by both -DSMTP and -DPOP + + +Sun Jan 27 18:42:49 1985 /mtr (agent: Marshall Rose) + + conf/makefiles/mts: dependency screw-up on mts.o + + +Tue Feb 12 19:33:14 1985 /mtr (agent: Marshall Rose) + + uip/mhlsbr.c: clear_screen() logic between messages botched + + +Mon Feb 18 12:53:50 1985 /mtr (agent: Marshall Rose) + + conf/doc/send.rf, uip/send.c: de-implement ~/.signature support + + +Wed Feb 20 20:40:14 1985 /mtr (agent: Marshall Rose) + + uip/inc.c: fix suggested by John Dilley at Purdue, inc now ignore + signals if it's going to zero the maildrop. + + +Wed Feb 20 20:48:12 1985 /mtr (agent: Marshall Rose) + + sbr/adios.c: save errno prior to doing fancy perror stuff + + +Fri Mar 1 19:48:53 1985 /mtr (agent: Marshall Rose) + + conf/config/config.c: if MORE is defined, used that instead of + /usr/ucb/more. The #ifdef ALTOS dependency is removed. + ALTOS users should use options MORE='"/usr/bin/more"', + just like users of the Dual. + conf/examples/READ-ME: document same + + +Fri Mar 1 19:56:43 1985 /mtr (agent: Marshall Rose) + + conf/config/mts.c: for the DUAL, you can't link to a file that you + can't read, unbelievable, eh?, so change the creat (foo, 0000) + to creat (foo, 0400). Also, fix up some botched args to a + sprintf() call. + + +Fri Mar 1 19:59:32 1985 /mtr (agent: Marshall Rose) + + uip/trmsbr.c: forgot to make a termcap buffer TXTSIZ'd instead + of BUFSIZ'd. + + +Sat Mar 1 20:21:17 1985 /mtr (agent: Marshall Rose) + + MH #5.321[UCI] (uci-750a) released to MH-Workers + + +Wed Mar 6 18:08:11 1985 /mtr (agent: Marshall Rose) + + uip/{dropsbr,packf,post,slocal}.c: fix to maildrop mapping bug + with MHMTS and local delivery in post, and SENDMTS and local + delivery in slocal + +Wed Mar 6 18:19:46 1985 /mtr (agent: Marshall Rose) + + TODO, config/addrsbr.h, sendmts/smail.c, mf/mf.{c,h}, + uip/{addrsbr,ap,post,rcvdist,sbboards}.c: handle 822-style + routing + + +Wed Mar 6 18:59:22 1985 /mtr (agent: Marshall Rose) + + -- Fixes from Robert Elz -- + sbr/makedir.c: use mkdir() under #ifdef BSD42 + uip/rmf.c: use rmdir() under #ifdef BSD42 + + +Sat Mar 9 15:36:13 1985 /mtr (agent: Marshall Rose) + + bboards/mmdf/mmdf.{1,2}/bboards/bb_wtmail.c, uip/sbboards.c: + fix minor bug requiring nearly major re-write!!! + + +Sat Mar 9 15:54:40 1985 /mtr (agent: Marshall Rose) + + uip/dropsbr.c: fix bug when fixing stomped maildrop. + + +Tue Mar 12 18:07:44 1985 /mtr (agent: Marshall Rose) + + othersupport/pop/pop.txt: a few minor corrections to typos. + + +Wed Mar 13 22:01:37 1985 /mtr (agent: Marshall Rose) + + -- Fixes suggested by Phyllis Kantar -- + uip/{comp,dist,forw,repl}.c: fix quit -delete logic + conf/doc/{comp,mh-chart}.rf: document "-file file" switch + uip/send.c: "send -help" should done (1) for comp, et. al. + uip/send.c: typo "tempoary" + conf/doc/{send,whom}.rf: Profile Components forgot Draft-Folder + uip/ali.c: always load system aliases + conf/doc/{MH,comp,dist,forw,mhook,repl,send,show,mh-alias,mh-mail, + mh-profile,mhl,post}.rf: typo fixes + conf/doc/send.rf, uip/send.c: -forward now the default, also + don't gripe about "show -draft file" + + +Wed Mar 13 22:24:07 1985 /mtr (agent: Marshall Rose) + + uip/send.c: fix "use xxx logic" + uip/msh.c: a NULL vs. "" typo + + +Thu Mar 14 22:41:37 1985 /mtr (agent: Marshall Rose) + + -- Fixes suggested by John Dilley -- + conf/{config/mts.c,tailor/READ-ME}: add new mtstailor variables + localname, systemname, and uucpchan + mts/mts.h, conf/{mh-gen.8,config/{mts.c,mtstailor},tailor/READ-ME}: + add new mtstailor variable lockstyle to control style of locking + sbr/m_getfld.c: catch the UNIX "from user" line + uip/scansbr.c: make use of the UNIX "from user" line + uip/addrsbr.c: more #ifdef DUMB support + uip/inc.c: minor bug in inc w.r.t. closing locked file + uip/post.c: more #ifdef DUMB support + uip/replsbr.c: support Return-Path: for defaulting host names + as a last resort + + +Fri Mar 15 11:45:00 1985 /mtr (agent: Marshall Rose) + + othersupport/emh/READ-ME: new file + + +Fri Mar 15 23:05:43 1985 /mtr (agent: Marshall Rose) + + bbsupport/bbexp.c: fix string botch for command to popen. + also allow extra arguments to indicate aging period. + + +Fri Mar 15 23:21:29 1985 /mtr (agent: Marshall Rose) + + sbr/printsw.c: compress output of printed switches + sbr/m_getdefs.c: let $MHCONTEXT override context variable + sbr/m_{getdefs,gmsg,sync}.c, conf/doc/mh-profile.rf: let the profile + entry "mh-sequences" override .mh_sequences + sbr/m_seq.c: optimization + + +Sat Mar 16 00:28:01 1985 /mtr (agent: Marshall Rose) + + uip/{inc,msh,rcvtty,scan,scansbr}.c: clean up handling of + inc -silent + sbr/{llib-lmh,m_send.c}, uip/{annosbr,comp,dist,forw,repl}.c: move + annotations into send + conf/makefiles/uip, uip/{send,post}.c: ditto + conf/doc/{dist,forw,repl}.rf: ditto + uip/anno.c: forgot to check (mp -> msgstats[msgnum] & SELECTED) + + +Sat Mar 16 01:38:06 1985 /mtr (agent: Marshall Rose) + + conf/config/mts.c: add a few calls to mts_init ("mts") at + strategic places + + +Sat Mar 16 12:23:37 1985 /mtr (agent: Marshall Rose) + + uip/{mark,msh}.c: don't set previous-sequence to make debugging + easier + + +Sat Mar 16 12:49:48 1985 /mtr (agent: Marshall Rose) + + Makefile: simply Makefile using sh, also make DESTDIR work + conf/makefiles/othersupport: simplify Makefile + + +Tue Mar 19 14:17:30 1985 /mtr (agent: Marshall Rose) + + othersupport/mtrenv/bin/{distf,mpick,packit}: updates + + +Tue Mar 19 17:31:14 1985 /mtr (agent: Marshall Rose) + + conf/doc/{ap,mh-chart}.rf, uip/ap.c: accept -help switch + + +Tue Mar 19 18:16:33 1985 /mtr (agent: Marshall Rose) + + conf/doc/msgchk.rf: new file + conf/{doc/{mh,mh-chart,MH}.rf,makefiles/doc}: update for msgchk + + +Thu Mar 21 08:45:11 1985 /mtr (agent: Marshall Rose) + + sendmts/smail.c: fix logic error in sm_end(); MMDF-I has this + problem, MMDF-II might! + + +Sat Mar 23 12:48:30 1985 /mtr (agent: Marshall Rose) + + -- Support the WhatNow shell -- + conf/makefiles/{sbr,uip}: updates for all of this + uip/{comp,dist,forw,repl}.c: remove What now? code, + add -whatnow program, -nowhatnow + sbr/m_whatnow.c: new module + conf/config/config.c,config/mh.h,sbr/m_getdefs.c: new variable + whatnowproc + sbr/llib-lmh: update + uip/whatnow.c: new program, the first WhatNow shell + conf/doc/{mh-chart,whom}.rf, uip/whom.c: upgrade to take draftfolder + arguments + sbr/putenv.c: update for above + sbr/m_send.c: undo previous edits, m_whatnow() takes care of it + uip/distsbr.c: new module for dist-style support + uip/{send,whom}.c: call distout() in distsbr.c + conf/doc/whatnow.rf: new file + conf/doc/{MH,comp,dist,forw,mh,mh-{chart,profile},repl}.rf: updates + conf/doc/template: fix + + +Sun Mar 24 18:32:47 1985 /mtr (agent: Marshall Rose) + + sbr/m_draft.c, + uip/{comp,dist,forw,refile,repl,send,show,whatnow,whom}.c: have + -nodraftfolder override "Draft-Folder:" profile entry + + +Mon Mar 25 18:06:48 1985 /mtr (agent: Marshall Rose) + + mf/mf.c: avoid (incorrectly) recognizing " at " for "@" by using a + heuristic suggested by JSol. + + +Tue Mar 26 18:02:52 1985 /mtr (agent: Marshall Rose) + + conf/doc/repl.rf: document bug in replcomps + + +Tue Mar 26 18:32:49 1985 /mtr (agent: Marshall Rose) + + conf/{config/mts.c,tailor/READ-ME}, config/aliasbr.h, mts/mts.h, + uip/aliasbr.c: make "*" logic mts-tailorable (ugh), you get + to choose highest non-user uid and non-user shell + + +Wed Apr 3 23:52:13 1985 /mtr (agent: Marshall Rose) + + sendmts/smail.c: comment out an extra RSET for UCI's losing + MMDF-I SMTP server + + +Wed Apr 3 23:53:12 1985 /mtr (agent: Marshall Rose) + + ohtersupport/mtrenv/bin/whatnow: new file + + +Sat Apr 6 16:17:23 1985 /mtr (agent: Marshall Rose) + + MH #5.348[UCI] (uci-750a) released to MH-Workers + + +Fri Apr 19 18:27:16 1985 /mtr (agent: Marshall Rose) + + conf/{config/mts.c,tailor/READ-ME}, mts/mts.h, uip/inc.c: + support the new MTS variable "pophost" + + +Fri Apr 19 18:28:44 1985 /mtr (agent: Marshall Rose) + + bboards/bboards.h, uip/bbc.c: support BB_INVIS for "hidden" + BBoards in -topic + uip/bbc.c: catch a long name that got past us + uip/bbc.c: fix -topics logic when BBoards given + + +Fri Apr 19 18:32:13 1985 /mtr (agent: Marshall Rose) + + conf/doc/MH.rf, sbr/m_send.c: de-implement "push" in whatnow + having send look for profile-entry of "push" rather than "send" + to confusing to the user "community" + + +Fri Apr 19 19:13:44 1985 /mtr (agent: Marshall Rose) + + uip/post.c: more #ifdef DUMB madness, for local addresses, + if no host portion given, then don't give it to sm_wadr() + uip/post.c: back #ifdef DUMB off a bit in From: for MMDFMTS + + +Fri Apr 19 19:23:39 1985 /mtr (agent: Marshall Rose) + + uip/whatnow.c: if edit fails, it's time to go away + sbr/m_edit.c: minor cosmetic change + + +Fri Apr 19 19:44:25 1985 /mtr (agent: Marshall Rose) + + uip/send.c: on annotations, if push'd avoid getting upset + if message to annotate isn't there + uip/send.c: fix "typo" for r1bindex () + uip/send.c: put ~/.signature support back in under #ifdef UCI + uip/send.c: use mktemp() instead of bogus makename! + uip/send.c: fix screwy interaction between msh, dist, whatnow, + and send (oh no!) + + +Sat Apr 20 14:46:10 1985 /mtr (agent: Marshall Rose) + + sbr/m_send.c, uip/whatnow.c: on "push", let send do push() instead + of whatnow + + +Wed Apr 24 22:44:30 1985 /mtr (agent: Marshall Rose) + + sbr/m_whatnow.c, uip/{dist,forw,repl}.c: fix obscure "@" bug. + + +Wed Apr 24 22:45:39 1985 /mtr (agent: Marshall Rose) + + conf/doc/MH.rf: just a few more fixes... + + +Thu May 2 21:13:03 1985 /mtr (agent: Marshall Rose) + + uip/sbboards.c: fdopen() called with wrong arg! + + +Thu May 2 21:13:32 1985 /mtr (agent: Marshall Rose) + + uip/post.c: a few more back-offs with #ifdef DUMB... + + +Thu May 2 21:13:32 1985 /mtr (agent: Marshall Rose) + + conf/makefiles/uip: make whatnow chmod +t'd + + +Thu May 2 21:14:56 1985 /mtr (agent: Marshall Rose) + + MH #5.360[UCI] (uci-750a) released to MH-Workers + + +Tue May 21 21:29:18 1985 /mtr + + Begin work on research-version of MH (#5.380[NRTC]). This version + won't be sent out to the MH-Workers list, so I can do some power + coding for a change. + + -- WHATNOW changes -- + + uip/{refile,send,show,whom}.c: #ifdef WHATNOW experimental code + sbr/m_whatnow.c, uip/{whatnow,whatnowsbr}.c: default whatnow is + a built-in for comp, et. al. + sbr/{m_{edit,send},showhom}.c: removed since whatnowsbr has 'em + sbr/showfile.c: likewise, showhead function removed + + + -- POP changes -- + + conf/doc/inc.rf, uip/inc.c: pop now lives in inc + uip/spop.c: link to sbboards.c, the POP mailer for SendMail + popsupport/: new directory from the ashes of + othersupport/popsupport/, containing many new programs, files, + and documentation + bboards/{bboards.h,getbbent.c}: new functions to support + popsupport/mmdfII/: the POP channel for MMDF-II, linked to the + BBoards channel, as appropriate + conf/doc/msgchk.rf, mts/msgchk.c: support POP + + + -- Bug Fixes -- + + uip/post.c: for path code, fixed a couple of dumb typos. + uip/replsbr.c: if -noformat, don't worry about no addresses + uip/bbc.c: another couple of nasty bugs fixed + sendmts/smail.c: don't send HELO if talking to SendMail on the + local host + conf/doc/{MH,repl,forw,comp,dist,show,mh,mh-chart,whom}.rf: bug + fixes + + -- Configuration and Clean-up -- + + conf/mhconfig.c: support new options: pop, chown, remove + conf/makefiles/*: more chmods where appropriate + config/config.c, sbr/help.c: include compile-time options in help + listing. + sbr/m_backup.c,uip/forw.c: remove makename in favor of mktemp + sbr/pr_array.c: removed, since no one was using it + config/mh.h, sbr/llib-lmh: update for all this + othersupport/patch/: the latest version + + +Tue May 21 22:33:58 1985 /mtr + + uip/scansbr.c: when copying characters to the scan listing, + know about underlining conventions + + +Wed May 22 10:16:17 1985 /mtr + + sbr/m_getfld.c: Eom() was botching gathering the UNIX from line + (fix from Matt Crawford ) + sendmts/smail.c: sm_end(NOTOK) was clobbering sm_reply + + +Wed May 22 15:29:25 1985 /mtr + + popsupport/popser.c: if maildrop doesn't exist, note it and + continue + conf/doc/bbc.rf, uip/bbc.c: add -user switch to help POP debugging + bboards/getbbent.c: have getbberr() return useful info for + setbbfile (), setbbinfo (), and setbbent () + popsupport/{popaka,popser,popwrd}.c, uip/{bbc,spop}.c: take advantage + of getbberr() + + +Wed May 22 19:49:43 1985 /mtr + + Makefile, config/mh.h, conf/makefiles/*, bboards/getbbent.c, + */llib-l*, tws/{dtime,dtimep}.c: start the linting process, + lint everything except the uip/ directory + sendmts/smail.c, uip/trmsbr.c: move discard to sbr/ library + mf/mf.c: lint fixes + sbr/{getans,m_{gmsg,setcur},refile,showfile}.c: lint fixes + sbr/{putenv,sprintb}.c: #include mh.h + sbr/*: VOID -> (void) + bbsupport/bb{aka,exp,tar}.c: lint fixes + + +Thu May 23 09:06:32 1985 /mtr + + conf/makefiles/{mts,uip}, uip/msgchk.c: moved from mts/ + +Thu May 23 22:06:25 1985 /mtr + + conf/makfiles/uip,uip/*.c: next step in the lint process + config/mh.h, sbr/llib-lmh, uip/rmf.c: move remdir() to sbr/makedir.c + + +Mon May 27 11:33:32 1985 /mtr + + config/mh.h, sbr/{closefds,m_getdefs}.c: #ifdef OVERHEAD experimental + code + + +Mon May 27 17:05:18 1985 /mtr + + tws/dp.c: move to uip/ + uip/formatsbr.c: new module + config/scansbr.h: define stuff for formatsbr + + +Mon May 27 21:45:23 1985 /mtr + + uip/{ap,addrsbr}.c: upgrade ap to use formatsbr; required a new + param to getm(), so modules which call getm() got changed + as well + othersupport/rcvtrip/rcvtrip: upgrade + + +Tue May 28 19:45:36 1985 /mtr + + config/scansbr.h,uip/{inc,msh,rcvtty,scan,scansbr}.c: bite the + bullet and have scansbr use a format string + uip/{inc,scan}.c: no more -[no]numdate, -[no]size, -[no]time + and use -format string and -width columns instead + + +Wed May 29 14:53:33 1985 /mtr + + othersupport/mtrenv/*: update + + +Wed May 29 16:38:49 1985 /mtr + + Makefile, conf/makefiles/*: support depend. N.B.: This is for + DEVELOPMENT WORK ONLY. "make depend" runs unifdef because some + #include files are configuration specific. Sadly, unifdef + isn't on all systems (it originated at Rand and migrated to + 4.2BSD). As a result, unless you have unifdef, don't run make + depend. The dependencies listed in the conf/makefiles/* files + are "generic". + + +Fri May 31 22:19:15 1985 /mtr + + uip/replsbr.c: bite the bullet and have repl use the format string + routines as well + + +Fri May 31 23:33:59 1985 /mtr + + conf/doc/*.rf: more doc fixes; document WHATNOW, OVERHEAD + sbr/m_getdefs.c: more OVERHEAD code to optimize MH subforks + + +Sat Jun 1 01:35:06 1985 /mtr + + conf/doc/mhook.rf, uip/rcv*.c: account for MMDF-II change regarding + rcvmail hooks and maildelivery(5) + + +Sat Jun 1 11:18:06 1985 /mtr + + mf/mf.c, uip/*sbr.c: more register declarations + + +Sat Jun 1 14:45:25 1985 /mtr + + uip/{pick,picksbr,msh}.c: bite the bullet and have pick allow + complex booleans + conf/doc/{mh-chart,pick}.rf: ditto + +Sun Jun 2 14:07:46 1985 /mtr + + uip/whatnowsbr.c: don't say the draft's left around if it isn't + (suggested by Mike O'Brien) + uip/whatnowsbr.c: return value from non-initial calls to m_edit() + not handled right (pointed out by Richard Johnson) + sbr/m_getfld.c: be a bit smarter when recognizing that idiotic + "From " line from silly UNIX-style maildrops + + +Sun Jun 2 18:36:19 1985 /mtr + + conf/doc/*.rf: more clean-up + uip/ali.c: change help messages a bit, and add -[no]normalize + switches + conf/doc/mh-tailor.rf: new file + config/mh.h,uip/{post,repl}.c: move definition of OUTPUTLINELEN + to mh.h so sbr/help.c can use it + sbr/help.c: smarter output routine for options + + +Mon Jun 3 11:28:46 1985 /mtr + + TODO: remove since there's nothing worth left doing in it! + + +Mon Jun 3 14:54:30 1985 /mtr + + othersupport/usenix: new directory containing the MH paper + presented at the 1985 Summer Usenix Conference + + +Mon Jun 3 22:15:18 1985 /mtr + + conf/doc/packd.rf, uip/packd.c: de-implement, essentially useless + under 4.2BSD + + +Tue Jun 4 13:30:27 1985 /mtr + + uip/trmsbr.c: optimize a bit, the ontty test in clear_screen () + isn't needed + + +Tue Jun 4 20:00:32 1985 /mtr + + -- Suggested by Dave Yost -- + conf/doc/tmac.h: use ".nf" after ".SH" inside various macros + (since ".SH" tends to set ".fi") + sbr/m_{gmsg,sync}.c: some .mh_sequences optimizations for hm + conf/config/config.c: support #ifdef NOMHSEQ + + +Thu Jun 6 23:03:09 1985 /mtr + + uip/{format,mhl}sbr.c: add some definitions for sprintb() + bboards/bboards.h: define BBITS there instead of uip/bbc.c + + +Sun Jun 9 14:44:36 1985 /mtr + + conf/makefiles/uip,uip/show.c: make show/next/prev one program + uip/{show,next,prev}hdr.c: remove as a result of above + conf/doc/{next,prev}.rf: update + + +Sun Jun 9 16:37:40 1985 /mtr + + uip/dropsbr.c, uip/sbboards.c: .cnt mechanism broken, + introduce new routine mbx_openX() in dropsbr.c and use that + instead of mbx_open when opening an .cnt file + + + +Sun Jun 16 10:21:33 1985 /mtr + + uip/{ap,dp,{repl,scan}sbr}.c: the old echo controversy raises it's + ugly head: suppose we have a line in a replcomps file which is + entirely in a %<...%> conditional and the conditional is false. + In that case, we still get a blank line. This is very BAD if it + occurs in the headers. Two solutions possible: + 1. If a call to FSprintf() returns a empty string, don't + put out a \n. + 2. In new_fs, put the \n's in and just return one big + string instead of an array of strings. + Option [2] was implemented initially because it lets conditionals + span multiple lines in the file. In order to keep the format files + from looking too complicated, EOL was ignored in format files, + \n's should be embedded where appropriate. A single format + string argument is considered to have an implicit \n. This is + inconsistent, but it keeps the format files readable. Option [2] + was discarded though since it required a \n at the end of each + line in the format file if there was no conditional stuff + there. So, option [1] got implemented even though it doesn't + allow conditionals to be multi-line (which is okay, since you + can use \n in a line). + + +Thu Jun 20 19:55:23 1985 /mtr + + -- Performance Enhancements from the 4.3BSD folks (by Van Jacobson) -- + config/mh.h: define vfork for systems without it + sbr/{refile,showfile}.c,uip/{replsbr,send,whatnowsbr}.c: replace + fork() with vfork() + config/mh.h: move Van's getfld.h definitions into here + sbr/m_getfld.c: major performance tuning! (use -DRPATHS to get + Return-Path: info from UNIX from: line) + uip/{inc,msh}.c: m_unknown parameter added + uip/trmsbr.c: support for TIOCGWINSZ in 4.3BSD(!!) + uip/scan.c: -[no]reverse under #ifdef BERK (I really HATE this) + also, update context prior to scan, again under #ifdef BERK + uip/scansbr.c: performance enhancements plus inline copy of message + body to output file for inc + uip/mhlsbr.c: under #ifdef BERK pipe output to /usr/ucb/more if + stdoutput is a terminal. + uip/post.c: #ifdef DUMB a bit dumber for Berkeley addrsbr (actually + these changes were made earlier for other reasons) + uip/addrsbr.c: use prescan-like routine in SendMail under #ifdef + BERK, also enable wild-carding. The former probably breaks + the stuff in ap, et. al. + + +Fri Jun 21 13:09:29 1985 /mtr + + uip/addrsbr.c: liked the wild-carding, so even for #ifndef BERK you + get it. Of course in this case, you can wildcard on both the + mbox and the host. It turns out that this is really useful for + people who have many mailboxes and get a lot of munged mail. + + +Mon Jun 24 14:58:25 1985 /mtr + + conf/doc/*.rf: Numerous documentation fixes suggested by Jerry + Sweet. + conf/doc/ADMIN.rf: New document: Administrator's Guide + + +Mon Jun 24 23:31:42 1985 /mtr + + uip/send.c: try to prevent confused annotations. The algorithm + works for dist and repl, but not forw + + +Wed Jun 26 12:36:38 1985 /mtr + + MH #5.457 becomes MH #6.1 in beta + + +Mon Jul 1 06:26:38 1985 /mtr + + -- Suggestions from Bob Desinger -- + config/mh.h, sbr/m_backup.c: locate SBACKUP definition in mh.h + sbr/m_gmsg.c, uip/rmf.c: handle SBACKUP prefix files appropriately, + also, slight optimizations + + +Mon Jul 1 09:18:42 1985 /mtr + + sbr/m_{file,gmsg}.c, uip/{msh,refile,rmm,send}.c: #ifdef notdef the + stuff marking messages as DELETED, since it's not used + + +Mon Jul 1 22:22:49 1985 /mtr + + conf/doc/mhl.rf, uip/mhlsbr.c: remove the #ifdef BERK stuff and + generalize it. If the MH profile entry mhlproc is defined, then + you get the BERK behavior using the mhlproc as the output filter. + Otherwise, you get the old behavior. If this works nice, I'll + make "more" the default mhlproc and set-up config.c, mh.h, and + m_getdefs.c as appropriate (with the documentation mh-profile.rf) + For the moment, I'm using "less" as my mhlproc and it works + fine. + + +Thu Jul 4 08:29:11 1985 /mtr + + conf/doc/ADMIN.rf: put in a word or two about running conflict + conf/makefiles/dist: add rules for .imp files + + +Thu Jul 4 08:38:01 1985 /mtr + + tws/{dtime,dtimep}.c: know about J{D,S}T, also under #ifdef HUJI + generate it if appropriate. (from Danny Braniss) + + +Thu Jul 4 16:00:38 1985 /mtr + + othersupport/mtrenv/mhbox/dp.debug: new file + + +Thu Jul 4 17:36:34 1985 /mtr + + uip/msh.c: "pack" should be called "packf". + + +Sun Jul 7 13:26:28 1985 /mtr + + uip/{addsbr,post,rcvdist,replsbr,sbboards}.c: support #ifdef BANG + conf/examples/READ-ME: ditto + + +Sun Jul 7 13:31:01 1985 /mtr + + othersupport/scripts/: new directory for scripts. First is Bob + Designer's modifications to JLR's append script. + othersupport/mtrenv/bin/append: remove + + +Tue Jul 9 18:59:21 1985 /mtr + + -- Suggested by Thomas Scott Christiansen -- + uip/msh.c: move big Msgs[] structure from auto to static + othersupport/netnews/{.,mhbox}/: new directories + othersupport/netnews/{mh_profile,mhbox/flupcomps} new files + + +Wed Jul 10 09:04:04 1985 /mtr + + uip/send.c: typo defining LISTDSW + + +Wed Jul 10 12:07:42 1985 /mtr + + uip/addrsbr.c: another de-reference of NULL fixed + + +Wed Jul 10 14:08:39 1985 /mtr + + conf/makefiles/popsupport,popsupport/popd.{c,8c}: a bit of clean-up + + +Wed Jul 10 14:48:05 1985 /mtr + + uip/mhlsbr.c: don't SIG_DFL signals on start-up; if run from msh, + this loses big, if not run from msh, then signals are SIG_DFL + anyway... + + +Wed Jul 10 20:40:53 1985 /mtr + + conf/config/config.c,config/mh.h,sbr/m_getdefs.c,uip/mhlsbr.c: + mhl's choice of mhlproc was confusing to forw. Add new variable + moreproc to fix the problem. Note as a result, the old BERK + behavior is the default, you have to turn off moreproc in your + .mh_profile if you don't want mhl to use it + + +Thu Jul 11 12:34:15 1985 /mtr + + conf/makefiles/uip: oops, forgot a @END: SENDMTS inside an @BEGIN: POP + + +Fri Jul 12 10:32:40 1985 /mtr + + config/mh.h,sbr/uleq.c: change strindex() -> stringdex () to avoid + MMDF name conflict + uip/{addrsbr,dropsbr,msh,rcvpack,sbboards}.c: ditto + + +Sun Jul 14 12:54:55 1985 /mtr + + -- Enhancements from John L. Romine -- + uip/mhlsbr.c: minor cleanup + + +Sun Jul 14 13:23:49 1985 /mtr + + tws/dtimep.c: have "BST" mean British Summer Time not + Bering Standard Time + + +Sun Jul 14 13:44:13 1985 /mtr + + othersupport/bboards: version #2.1 as suggested by Jerry Sweet + conf/doc/{ADMIN,mf,mh-{mts,tailor},bb{exp,oards5,tar},pop8}.rf: fixes + suggested by Jerry Sweet + + +Sun Jul 14 18:51:22 1985 /mtr + + uip/formatsbr.c: handle the blank line bug by hacking it (see the + "echo controversy" discussed above). The solution is to insert + a space in truly blank lines... + + +Tue Jul 16 12:41:54 1985 /mtr + + uip/ali.c: forgot to call mts_init() to get "everyone", and "noshell" + + +Wed Jul 17 09:47:19 1985 /mtr + + bboards/mmdf/mmdf.2/bboards/bb_wtmail: change dist_address to + ds_address, dist_log to ds_log + + +Thu Jul 18 15:59:19 1985 /mtr + + conf/mh-gen.8: typo + + +Sun Jul 21 15:36:24 1985 /mtr + + conf/doc/{send,whom,mh-alias}.rf: aliasing hints + conf/doc/{{MH,tmac}.h,template}: support hints section + conf/doc/mh-mts.rf: minor fix + + +Mon Jul 22 16:50:54 1985 /mtr + + uip/picksbr.c: logic for handling "--header value" botched + + +Tue Jul 23 20:30:39 1985 /mtr + + uip/whom.c: pass more switches to post. Since they're ALL secret, + no documentation needed! + + + +Wed Jul 24 14:07:31 1985 /mtr + + conf/mh.h, sbr/m_getfld.c, uip/{msh,{mhl,scan}sbr}.c: fix broken + msh message delimiting behavior and broken mhl behavior under + msh + + +Wed Jul 24 21:01:15 1985 /mtr + + uip/forw.c: -build logic botched + + +Wed Jul 24 23:42:41 1985 /mtr + + uip/addrsbr.c: bug with #ifdef BERK, mp -> m_nohost not getting + set so no aliasing done! + conf/config/mts.c: lockfile name building botched! + + +Thu Jul 25 00:00:00 1985 /mtr + + MH #6.24 enters beta + + +Thu Jul 25 17:00:17 1985 /mtr + + conf/doc/ADMIN.rf, uip/{inc,msgchk}.c: minor re-work POP debug + features + + +Thu Jul 25 21:31:00 1985 /mtr + + conf/doc/pick.rf: finally get documentation right + conf/makefiles/dist: a few more things + + +Fri Jul 26 11:09:35 1985 /mtr + + sendmts/smail.c: slight fix for major bug with #ifdef BERK + + +Sat Jul 27 00:33:39 1985 /mtr + + conf/doc/{mhl,show}.rf: upgrade a bit + conf/makefiles/uip, uip/{mhl,mhlsbr,show}.c: add address/date parsing + on demand + conf/doc/{dp,scan}.rf, uip/formatsbr.c: slight upgrade + support/mhl.{format,forward}: update a bit + + +Sat Jul 27 12:46:12 1985 /mtr + + -- Documentation Fixes from Bob Designer -- + conf/doc/{post,mh-profile,show,send,repl,next,folder}.rf: typos + uip/whatnowsbr.c: back to the old prompt + + +Sat Jul 27 12:55:27 1985 /mtr + + sbr/m_sync: slight adjustment + uip/{addr,format,pick}sbr.c: a bit more debug info + + +Tue Jul 30 21:44:00 1985 /mtr + + -- Suggested by Phyllis Kanter -- + uip/folder.c: fix -fast and -recurse mis-interaction + uip/burst.c: fix non-existant message handling when expanding the + folder + conf/config/config.c: fix comment re: whatnowproc + config/mh.h, sendmts/smail.c: declare a couple of things that + should be in + sbr/m_getdefs.c: don't complain if "context: file" isn't there. + sbr/m_{convert,file,gmsg,name}.c: fix boundary handling of MAXFOLDER + conf/mh-gen.8: say a few words about chown, remove in MH config + file + conf/{config/config.c,examples/READ-ME}: two new options, + FOLDPROT, MSGPROT + conf/{config/config.c,doc/mh-profile.rf}, config/mh.h: add the + "unseen-sequence" + sbr/{m_setcur.c,llib-lmh}, uip/{inc,show}.c: do the UNSEEN business + + +Wed Jul 31 10:44:22 1985 /mtr + + conf/doc/{tmac.h,{ADMIN,MH,bbl,folder,mh-profile,msh,scan,whatnow}.rf}: + documentation fixes + conf/doc/{mhpath,show}.rf: ditto + uip/msh.c: slight typo + + +Thu Aug 1 21:30:36 1985 /mtr + + uip/inc.c: fix conflict between -ms and POP + + +Sun Aug 4 14:23:58 1985 /mtr + + conf/doc/{ADMIN,mh-mts,bboards8}.rf: doc fixes + + +Sun Aug 4 14:23:35 1985 /mtr + + -- Suggested by Phyllis Kanter -- + + conf/doc/*.rf: doc fixes + + +Mon Aug 5 12:29:56 1985 /mtr + + -- From John Romine -- + conf/config/mts.c: do lock structure allocation dynamically + and free up 25K of static data space (which may never even + be referenced!) + + +Mon Aug 5 20:27:12 1985 /mtr + + uip/rcvstore.c, conf/doc/rcvstore.rf: new program from Julian + Onions + conf/{makefiles/uip,doc/{MH,mh,mh-chart,mhook}.rf}: upgrade + + +Mon Aug 5 20:57:47 1985 /mtr + + sbr/m_gmsg.c, uip/{bbl,mhlsbr,post,refile}.c: minor notdef touch-up + conf/doc/inc.rf: slight touch-up + conf/mhconfig.c: support some invocation arguments + uip/sortm.c: alloc structure dynamically + + +Tue Aug 6 17:22:59 1985 /mtr + + -- From John Romine -- + conf/makefiles/mmdf: slight typo + mmdf/LN: better version + conf/{mh-gen.8,mhconfig.c,makefiles/doc}: support two new options + for manual pages: "none" and "gen" + + +Wed Aug 7 21:14:19 1985 /mtr + + uip/mhlsbr.c: m_popen_pid -> m_pid for 7limit + + +Thu Aug 8 00:00:00 1985 /mtr + + MH #6.59 enters beta + + +Mon Aug 12 19:42:28 1985 /mtr + + uip/mhlsbr.c: slight clarification for ontty == NOTTY and -clear + at termination; also, try to get signals right again + + +Wed Aug 14 17:27:41 1985 /mtr + + config/aliasbr.h: optimize structures for ALTOS + uip/aliasbr.c: optimize for ALTOS and UNIX in general + + +Wed Aug 14 21:54:20 1985 /mtr + + conf/config/mts.c, config/aliasbr.h, sbr/{m_getdefs,path}.c, + popsupport/popd.c, uip/{ali,aliasbr,msh,picksbr,post}.c: a couple + more touch-ups + + +Thu Aug 15 11:19:26 1985 /mtr + + uip/inc.c: forgot an #ifdef for POP + + +Thu Aug 15 16:42:26 1985 /mtr + + CMP: shell script to aid Bug-MH in figuring out what's changed + + +Thu Aug 15 16:58:13 1985 /mtr + + conf/doc/{bbleader,bboards,mh-profile,prompter,show}.rf: minor touch-up + + +Fri Aug 16 03:55:21 1985 /mtr + + sbr/m_getfld.c, uip/msh.c: fix trailing newline bug with mhl+no + moreproc + uip/addrsbr.c: slight touch-up + + +Fri Aug 16 04:48:13 1985 /mtr + + conf/{mhconfig.c,mh-gen.8,makefiles/uip}: fix long standing bug + about sbboards, slocal, and spop being installed even for MMDF + configurations + + +Fri Aug 16 05:48:51 1985 /mtr + + mf/{mf.h,{mf,mmuu,umhook,uumm}.c}: change vfgets() to mfgets(), + and slight bug fix in the process + conf/makefiles/sbr, config/mh.h, sbr/llib-lmh: new vfgets() + sbr/vfgets.c: new routine to support virtual-fgets + uip/{alias,format,mhl}sbr.c: call vfgets to handle continuation lines + conf/doc/{ap,dp,mh-alias,mhl,repl,scan}.rf: continuation lines now + supported + support/replcomps + conf/config/mts.c, sbr/m_{draft,getdefs,whatnow}.c, + sendmts/smail.c, tws/dtime.c, + uip/{comp,inc,mark,mhpath,msh,post,rcvstore,refile,send}.c: notdef + cleanup + sendmts/hosts.c, uip/{aliasbr,dropsbr,rcvdist,send}.c: minor cleanup + sbr/{add,m_replace}.c: ditto + uip/mhlsbr.c: minor parenthization for ALTOS + + +Sun Aug 18 20:22:17 1985 /mtr + + uip/{burst,msh,picksbr}.c: augment botch message a bit + + +Mon Aug 19 20:07:50 1985 /mtr + + conf/{mhconfig.c,mh-gen.8}: new config option "bbhome" + conf/config/bboards.{daily,weekly}: moved from bbsupport/ + conf/{config/crontab,doc/{ADMIN,bbc}.rf,makefiles/{bbsupport,uip}}: + support bbhome + conf/examples/nrtc-isc: renamed to nrtc-gremlin + conf/MAKE: modified accordingly + + +Tue Aug 20 11:27:22 1985 /mtr + + othersupport/Mail: new directory, unsupported + + +Tue Aug 20 15:59:46 1985 /mtr + + conf/doc/{ADMIN,pop8,rcvstore}.rf: minor clean-up + + +Tue Aug 20 22:19:18 1985 /mtr + + Makefile,conf/makefiles/{sbr,zotnet}: clean-up make clean a bit + + +Wed Aug 21 11:12:33 1985 /mtr + + conf/{config/config.c,makefiles/{support,uip}}, config/mh.h, + conf/doc/{MH,forw,mh-profile}.rf,uip/forw.c: use formatsbr to do + digestifying + uip/formatsbr.c: fix minor typo + tws/{tws.h,dtime.c}: new routine, twsnow() + mf/uumm.c, tws/dtime.c, uip/{msh,picksbr,scansbr,sortm}.c: use twsnow() + + +Thu Aug 22 20:12:05 1985 /mtr + + uip/{forw,mhlsbr}.c: let mhl know about digest handling so forw + becomes less complicated (mhl already knows about forwarding)! + + +Thu Aug 29 10:52:41 1985 /mtr + + -- Merge in changes for SYS5 -- + conf/examples/READ-ME: all non-sprintf changes under #ifdef SYS5 + conf/{mhconfig.c,config/{config,mts}.c}, sbr/*.c, tws/dtime*.c, + uip/*.c: sprintf() returns an int, so always (void) it + tws/dtime*.c: no ftime() + conf/mhdoc: echo works differently, ridiculous! + config/mh.h: dup2() doesn't exist, so define it + conf/mhconfig.c, uip/post.c: enums might not exist + sbr/discard.c, uip/{prompter,trmsbr}.c: ioctl()'s different + + +Thu Aug 29 15:09:25 1985 /mtr + + uip/{ali,post}.c: load system aliases file last instead of first. + This lets users override system aliases AND rely on + host-specific alias for final resolution! + + +Thu Aug 29 20:13:47 1985 /mtr + + bboards/getbbent.c, tws/dtimep.c: normalize + + +Sun Sep 1 17:12:54 1985 /mtr + + conf/doc/MH.rf: minor typo and change the names of a few chapters + + +Sat Sep 7 16:42:06 1985 /mtr + + conf/config/mts.c, config/mh.h, mf/mf.h: remove dup2() define for + SYS5 and add it as a real routine + conf/doc/{MH,bbleader,burst,forw,mf,mh-profile,scan}.rf: doc fixes + + +Sat Sep 7 17:43:24 1985 /mtr + + uip/msh.c: advise of gap when BBoard reading + + +Sat Sep 7 17:43:53 1985 /mtr + + -- Major Directory Tree Re-Organization -- + papers/: new directory, move TeX stuff from othersupport/ there + conf/{mhconfig.c,makefiles/{othersupport,papers}}: support this + config/*.h, */*.c: move .h files to new directory h/, update .c + files accordingly + h/strings.h: new .h file to define all those string functions once + and for all! + {bboards,mts,mf,tws}/: move under zotnet/ + mts/: new directory + {mhmts,sendmts,mmdf}/: move under mts/ + {support,popsupport,newsupport,bbsupport}: move under support/ + + +Mon Sep 9 19:42:13 1985 /mtr + + conf/doc/{MH,comp,dist,forw,mh-mail,mhl,repl}.rf: better verbatim + mode in roff + zotnet/tws/dtime*.c: more SYS5 cleanup + conf/doc/{ADMIN,MH,mh-mts,popd}.rf: more doc hackery + uip/post.c: remove tmpfil/bccfil when dying() + + +Mon Sep 9 22:12:59 1985 /mtr + + zotnet/bboards/{bboards.h,getbbent.c}: flags for setbbent() + uip/bbc.c, support/{bboards/*,pop/*}.c: use 'em + + +Tue Sep 10 16:23:23 1985 /mtr + + Makefile, conf/Makefile, conf/makefiles/*: implement "make squeaky" + and "make tar" + + +Tue Sep 10 17:47:35 1985 /mtr + + conf/{mhconfig.c,mh-gen.8}: change "uucp" option to "mf" option + conf/{examples,tailor}/READ-ME: remove since mh-gen.8 contains + this information now + + +Wed Sep 11 10:10:33 1985 /mtr + + -- More doc fixes from Phyllis Kantar -- + conf/doc/{comp,dist,mh,mhl,repl,whatnow}.rf: doc fixes + + +Wed Sep 11 11:03:29 1985 /mtr + + conf/makefiles/*, conf/makefiles/*/*: unifdef stuff wasn't working + out, remove it + + +Wed Sep 11 22:02:17 1985 /mtr + + -- Suggested by John A. Dilly -- + mts/sendmail/smail.c: fix bug with intermittant dot being added + during sm_wtxt(); thanks, John! + conf/config/config.c: support ~/.mhrc by allowing libpath() + recognize the CShell ~-construct. This is under #ifdef MHRC + + +Mon Sep 16 20:50:32 1985 /mtr + + miscellany/less: sources to Mark Nudelman's "less" program included + Thanks, Mark! + zotnet/tws/dtime.c: support illegal GreyBook timezone strings + + +Mon Sep 16 20:53:18 1985 /mtr + + -- Fixes from Hokey (mostly SYS5) -- + uip/version.sh: generate version.rf not version.me so it stays + around + conf/doc/{ADMIN,MH}.rf: use same + conf/mhconfig.c: new option "ranlib" for BSD or SYS5 + conf/makefiles/*: use same + + +Mon Sep 16 21:50:01 1985 /mtr + + -- Suggestion from John Shepherd -- + uip/slocal.c: handle idiotic multiple "From " lines + + +Tue Sep 17 09:47:55 1985 /mtr + + uip/addrsbr.c: slight tuning to #ifdef BERK + + +Wed Sep 18 07:49:27 1985 /mtr + + sbr/discard.c: oops, logic was botched for all versions of UNIX! + + +Wed Sep 18 23:23:28 1985 /mtr + + conf/mhconfig.c: oops, toss (void)'s + + +Fri Sep 20 09:48:06 1985 /mtr + + miscellany/mh-e: GNU Emacs front-end to MH from James Larus + + +Fri Sep 20 20:59:19 1985 /mtr + + uip/msh.c: split into h/mshsbr.h, uip/{msh,mshcmds}.c + uip/mshcmds.c: on refile, without -link, mark messages as deleted + + +Fri Sep 20 21:22:55 1985 /mtr + + conf/mhconfig.c: add mandir entry to overrid /usr/man + zotnet/mf/uumm.c: simplify a conditional for the ALTOS + + +Fri Sep 20 22:35:56 1985 /mtr + + uip/msh.c: have "quit" command update msgbox after confirmation if + changed + uip/{mhlsbr,repl}.c: on forwardings/replies force -noclear (HACK) + uip/prompter.c: fold in SYS5 terminal handling better + + +Sat Sep 21 00:12:47 1985 /mtr + + h/vmhsbr.h, uip/{vmh,vmhsbr,vmhtest}.c: experimental new visual + front-end to msh + sbr/*.c: break many aggregate files into smaller ones + + +Sun Sep 22 21:06:21 1985 /mtr + + uip/{msh,mshcmds}.c: interface to vmh + + +Mon Sep 23 04:25:33 1985 /mtr + + uip/show.c: normalize showproc handling; remove -[no]format and + -[no]pr, add -show program and -noshow + + +Mon Sep 23 10:42:18 1985 /mtr + + support/bboards/mmdf*/bboards/bb_wtmail.c: remove bogus ch_host + hackery; use the BBoard file instead! + uip/bbc.c: add -[no]protocol to tell bbc if mshproc knows about + bbc protocol + + +Tue Sep 24 19:18:49 1985 /mtr + + uip/burst.c: make static structure an alloc'd structure + uip/{burst,mshcmd}.c: trim extra trailing newline if present + + +Thu Sep 26 11:42:18 1985 /mtr + + uip/addrsbr.c: change Alternate-Mailboxes: defaulting + + +Tue Oct 1 10:15:24 1985 /mtr + + sbr/m_getdefs.c: set[ug]id() to real [ug]ids prior to exec of + install-mh + uip/install-mh.c: don't need set[ug]ids, also if -auto, don't + ask questions, say what you're going to do and do it! + zotnet/mts/mts.h: remove reference to "../h/strings.h" + conf/config/mts.c,support/bboards/bbaka.c: ask for "../h/strings.h" + mts/{mh/{hosts,netmail},sendmail/{client,hosts,smail},mmdf/hosts}.c: + ditto + zotnet/mf/mf.h: ditto + + +Tue Oct 1 14:31:54 1985 /mtr + + conf/makefiles/doc: oops, version.me -> version.rf + uip/msh.c: oops, zero'd name of BBoard prior to putenv of mhfolder + conf/mhconfig.c: support ldflags for options to ld at beginning + of command + + +Tue Oct 1 22:08:32 1985 /mtr + + h/mh.h, sbr/m_gmsg.c: slight XYZ tuning + + +Wed Oct 2 02:48:02 1985 /mtr + + uip/vmh.c: add less-like interface to command handling + + +Wed Oct 2 10:03:12 1985 /mtr + + -- Pointed out by Bob Designer -- + uip/slocal.c: oops, typo! + + +Wed Oct 2 11:12:52 1985 /mtr + + uip/{burst,mshcmds}.c: oops, another "slight" typo + + +Wed Oct 2 11:31:49 1985 /mtr + + -- Suggested by Dave Yost -- + sbr/m_getdefs.c: avoid a cast (and structure dependencies) by using + a popular C idiom (taught to Dave by Bakul Shah). [This also + makes MH work on the Gould...] + h/mh.h,sbr/m_delete.c: take the opportunity to clean things up a bit + + +Wed Oct 2 21:34:44 1985 /mtr + + uip/vmh.c: a bit more tuning + + +Thu Oct 3 23:43:35 1985 /mtr + + uip/inc.c: change "-ms ms-file" to "-file name" to be more + consistent + uip/inc.c: also, if -notruncate, don't zero POP maildrop! + + +Fri Oct 4 19:36:56 1985 /mtr + + h/mh.h, conf/config/config.c, sbr/m_getdefs.c: make vmhproc a + built-in + uip/vmh.c: ditto, also better help message + + +Fri Oct 4 21:08:26 1985 /mtr + + uip/{comp,dist,forw,repl}.c: -[no]whatnow changed to + -[no]whatnowproc + uip/{next,prev,show}.c: -[no]show changed to -[no]showproc + uip/vmh.c: -[no]visual changed to -[no]vmhproc + uip/rmm.c: Delete-Prog: changed to rmmproc + + +Sat Oct 5 14:20:02 1985 /mtr + + uip/{post,rcvdist}.c: add call to mmdf_init() under #ifdef MMDFII + h/mh.h, *: XYZ becomes the "real thing" + + +Sat Oct 5 17:22:56 1985 /mtr + + -- Suggested by Dave Yost -- + h/mh.h, conf/config/config.c: define globals in config.c, extern + 'em in mh.h + conf/mhconfig.c: rm files prior to creating 'em for CTM + uip/version.sh: ditto + + +Sat Oct 5 23:17:39 1985 /mtr + + Makefile, conf/makefiles/*: fix "make tar" + uip/mshcmds.c: finally track down that mhl pipe problem + Makefile, conf/makefiles/*: clean->unclean,squeaky->clean + + +Sun Oct 6 11:46:11 1985 /mtr + + uip/{folder,scan}.c: context changes ASAP + sbr/remdir.c: clean-up + h/mh.h, uip/{mhlsbr,mhmail,msh,post,prompter}.c: fix up signal + handling when in background + + +Sun Oct 6 20:38:29 1985 /mtr + + uip/msh.c: fseek() too tricky for our own good... + uip/{burst,mshcmds}.c: try to recover from errors more gracefully + (ha!) + + +Wed Oct 9 19:49:04 1985 /mtr + + uip/send.c: fix bogus annotation handling, e.g., + send -push; rmm; folder -pack + uip/{forw,mhlsbr}.c: add extra blank line after final EB so + user can add suffix text with an editor (e.g., prompter) + and not screw-up + conf/doc/burst.rf: warn about text after final EB being lost + with -inplace + + +Sun Oct 13 14:17:10 1985 /mtr + + h/mshsbr.h, uip/{msh,mshcmds,vmh}.c: fix signal handling for + forks under vmh + support/bboards/mmdf*/bboards/ch_bboards.c: remove some logging + info + + +Sun Oct 13 18:17:10 1985 /mtr + + sbr/vfgets.c: oops, minor typo + sbr/m_gmsg.c: re-think alloc strategy a bit + sbr/m_gmsg.c: use #ifdef XYZ experimental code for no limits to + #-messages in a folder! + sbr/m_file.c: move into uip/refile.c + h/folder.h: remove + + +Mon Oct 14 12:03:39 1985 /mtr + + uip/send.c: still more work on annotation logic... + + +Tue Oct 15 17:14:11 1985 /mtr + + h/mh.h, sbr/m_{convert,gmsg,remsg}.c, + uip/{burst,inc,rcvstore,refile}.c: final XYZ check-out, remove + #ifdefs + + +Tue Oct 15 18:52:49 1985 /mtr + + uip/prompter.c: add hidden -[no]body switch + sbr/vfgets.c: slight logic botch + + +Thu Oct 17 16:02:25 1985 /mtr + + uip/msh.c: move pgmwait out of msh and into it's own sbr/ file + h/mh.h, {sbr,uip}/*.c: normalize pidwait stuff + sbr/m_foil.c, uip/{post,send,whom}.c: fix bug in alias mechanism + when following included files + uip/{inc,post,send,whom}.c: normalize switch handling a bit + + +Thu Oct 17 19:41:18 1985 /mtr + + -- Suggested by Dave Yost -- + uip/install-mh.c: new variable, mh_defaults, to default user's + profile + + +Sun Oct 20 13:02:59 1985 /mtr + + uip/rmf.c: add -[no]interactive switch + + +Sun Oct 20 13:03:13 1985 /mtr + + conf/config/bboards.*: fix to work under sh or csh + + +Sun Oct 20 22:11:58 1985 /mtr + + -- Suggested by Hokey for SYS5 -- + conf/mh-gen.8: mention -lndir for SYS5 + sbr/m_gmsg.c: fix stand-alone continue + makefiles: add SHELL=/bin/sh + + +Mon Oct 21 12:26:56 1985 /mtr + + uip/{msh,vmh}.c: some tuning + uip/bbc.c: know about SIGTSTP + + +Mon Oct 21 18:45:29 1985 /mtr + + conf/mh-gen.8: mention gould stuff + conf/doc/*.rf: talk about quoting of arguments + + +Tue Oct 22 21:47:01 1985 /mtr + + uip/bbc.c: don't have -help imply -topics + + +Wed Oct 23 01:34:54 1985 /mtr + + conf/mhconfig.c: change default bbhome to /usr/spool/bboards + support/pop/popser.c: support maildrop mapping + uip/dropsbr.c: some optimizations + support/pop/popsbr.c: link into uip/ directory to simplify + top-level Makefile + + +Wed Oct 23 12:34:04 1985 /mtr + + conf/config/mts.c: two new variables: popbbhost and popbbuser, + under #ifdef BPOP + uip/bbc.c: use same + support/pop/pop.txt: revise remove HEAD in favor of more general + TOP + + +Wed Oct 23 20:46:17 1985 /mtr + + uip/prompter.c: -prepend is the default now + uip/burst.c: -noinplace is the default now + + +Thu Oct 24 21:07:37 1985 /mtr + + conf/config/mts.c: new variable popbblist which, if present, + lists only thoses hosts that can use BBoards over POP + + +Fri Oct 25 08:38:35 1985 /mtr + + support/pop/popser.c, uip/bbc.c: don't recognize bb_aka's in + name lookups + + +Sun Oct 27 17:40:20 1985 /mtr + + zotnet/bboards/{bboards.h,getbbent.c}: make make_lower() integral + uip/vmh.c: avoid ~'s when possible (actually forever owing to pWIN + logic!) + uip/vmh.c: make STATUS window be reverse-video, make prompt + not be reverse-video + uip/vmh.c: have EOT work as expected under bbc + uip/vmh.c: if CE set, then don't scroll on exit + uip/msh.c: make readids() logic smarter in the degenerate case + h/mshsbr.h, uip/{msh,mshcmds}.c: keep scan line cached + uip/{msh,mshcmds}.c: clean-up handling under vmh a bit + uip/{bbc,inc,msgchk}.c: improve defaulting for nullifying host + conf/config/mts.c: with flock() retry 5 times at 5 second intervals + + +Sun Oct 27 22:13:23 1985 /mtr + + h/dropsbr.h, uip/dropsbr.c: add new field, m_size, to maildrop + structure (and bump version number). This keeps track of + the number of ARPA Internet octets in the message + support/bboards/mmdf*/bboards/bb_wtmail.c, support/pop/popser.c, + uip/dropsbr.c, uip/mshcmds.c, uip/rcvpack.c, uip/sbboards.c: all + affected... + + +Mon Oct 28 19:31:13 1985 /mtr + + uip/vmh.c: don't read tty modes unless in foreground + + +Tue Oct 29 01:25:36 1985 /mtr + + uip/addrsbr.c: freeing a couple of things twice! + uip/msh.c: a malloc() bug! + + +Tue Oct 29 22:33:45 1985 /mtr + + h/dropsbr.h: new routine map_read() + uip/dropsbr.c: performance improvement in map_read() + uip/msh.c: -[no]topcur for vmh usage + + +Wed Oct 30 16:39:56 1985 /mtr + + Makefile: add "make checkout" for MH maintainers only! + uip/version.sh: extend + + +Wed Oct 30 18:19:49 1985 /mtr + + -- Suggested by Douglas P. Kingston -- + mts/mmdf/hosts.c: remove bogus gethostname() logic, let + the mtstailor file handle it. + + +Wed Oct 30 18:20:11 1985 /mtr + + -- Suggested by James M. Galvin -- + uip/bbl.c: invoke inc with -file not -ms + + +Thu Oct 31 21:40:50 1985 /mtr + + Makefile, conf/makefiles/*: rm core in unclean + sbr/m_atoi.c: renamed from mu_atoi() + uip/bbc.c: minor add_bb() logic fix + uip/new.c, support/news/: de-supported! + uip/msh.c: re-direction under vmh was losing + + +Sun Nov 3 13:12:51 1985 /mtr + + uip/version.sh: smarter wrt finding hostname + uip/msh.c: finally got re-direction under vmh right! + uip/mhlsbr.c: for moreproc, get signal handling right + + +Sun Nov 3 22:06:58 1985 /mtr + + uip/vmh.c: work-around standout bug in curses, under #ifdef XYZ + uip/vmh.c: try slight work-around for double-scroll'ing effect + + +Mon Nov 4 09:16:56 1985 /mtr + + uip/send.c: oops, bug in dist handling + conf/{mhconfig.c,mh-gen.8}: warn about mhconfig requiring make + clean later + + +Mon Nov 4 16:00:56 1985 /mtr + + uip/vmh.c: Wgetstr() now minibuffer-exit's right + + +Tue Nov 5 16:15:52 1985 /mtr + + zotnet/bboards/getbbent.c: optimize a bit + zotnet/bboards/{bboards.h,getbbent.c}: new routine setpwinfo() + support/{bboards/mmdfII/bboards/bb_wtmail,pop/pop{ser,wrd}}.c, + uip/sbboards.c: use setpwinfo () + uip/mshcmds.c: slight typo in msh$pick + + +Tue Nov 5 22:29:29 1985 /mtr + + sbr/m_replace.c: fix logic glitch: not using getcpy() on update! + + +Tue Nov 5 22:43:50 1985 /mtr + + zotnet/bboards/{bboards.h,getbbent.c}: new routine getbbtime() + support/pop/{popd,popser}.c: use getbbtime() to speed start-up + time, a major win! + conf/makefiles/uip: oops, sbboards installed in wrong area! + + +Wed Nov 6 01:55:16 1985 /mtr + + support/bboards/mmdfII/bb_wtmail.c, uip/sbboards.c: use + encapsulation format when returning failed mail + + +Wed Nov 6 14:08:08 1985 /mtr + + uip/mshcmds.c: burst wasn't resetting scan listing cache + mts/sendmail/client.c: don't use servers defaulting if name of + service host is explicitly given + + +Wed Nov 6 20:47:55 1985 /mtr + + uip/msh.c: more msh-using-POP-to-read-BBoards speed improvements + + +Wed Nov 6 23:05:00 1985 /mtr + + uip/inc.c: add -[pa]ck file switches to packf(1) with the POP + uip/bbc.c: add $MHBBRC support + + +Thu Nov 7 00:31:45 1985 /mtr + + sbr/m_tmpfil.c: new routine + uip/*.c: use it if necessary + + +Sun Nov 10 11:52:50 1985 /mtr + + uip/send.c: oops, annotations botched for forw! + + +Sun Nov 10 16:30:46 1985 /mtr + + uip/refile.c: set previous sequence on destination folders + uip/rcvsbr.c: new file + uip/rcvpack.c: change Cron-Date: to Delivery-Date: + + +Mon Nov 11 07:47:05 1985 /mtr + + uip/slocal.c: implemenet MailDelivery, ala MMDF-II + uip/rcv*.c: take advantage of it + uip/rcvs{br,elect}.c: no longer needed + uip/{folder,inc,refile}.c: done(1) if user doesn't want to create + folders diff --git a/docs/historical/mh6/Makefile b/docs/historical/mh6/Makefile new file mode 100644 index 0000000..8fbaab8 --- /dev/null +++ b/docs/historical/mh6/Makefile @@ -0,0 +1,53 @@ +####################################################################### +# Instructions to Make, for generation of nice-looking papers using TeX +####################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if latex \\nonstopmode\\input $<; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# mh6 +############################################################# + +i-all: mh6.dvi + +i-print: mh6.dvi true + dvisp -J mh6 mh6.dvi + + +# customization files, et. al., not included below +mh6.dvi: version.tex + +version.tex: mh6.tex version.sh + @: version.sh + +true:; + + + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f mh6.dvi mh6.imp + +clean:; rm -f mh6.log _* diff --git a/docs/historical/mh6/READ-ME b/docs/historical/mh6/READ-ME new file mode 100644 index 0000000..f39b7cf --- /dev/null +++ b/docs/historical/mh6/READ-ME @@ -0,0 +1,7 @@ +[ For the following, substitute the name of the directory this file resides + in for "foo". E.G., if this file is mh5/READ-ME, s%foo%mh5%g ] + + The Makefile assumes you have LaTeX on your system. LaTeX is Leslie + Lamport's macro package for TeX. If you can't find LaTeX on your + system, ask your local TeX maintainer where it's kept, since LaTeX + should have come with your UNIX TeX distribution. diff --git a/docs/historical/mh6/lcustom.tex b/docs/historical/mh6/lcustom.tex new file mode 100644 index 0000000..c2efa80 --- /dev/null +++ b/docs/historical/mh6/lcustom.tex @@ -0,0 +1,121 @@ +% LaTeX customization + + +\catcode`\@=11 % for a little while + + +% plain TeX compatibility + +\def\oldstyle{\xdef\@oldstyle{\the\textfont\@ne}\mit\@oldstyle} + + +% PhD-TeX compatibility + +\def\showsummary{% + \begingroup + \def\note##1{% + \ifcase\value{##1}no ##1s\or + 1 ##1\else + \the\value{##1} ##1s\fi + }% + \tell{LaTeX summary: \note{figure}, \note{table}, \note{footnote}.}% + \endgroup +} + +\let\nfootnote=\footnote + +\let\tell=\typeout + +\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax} + +\def\implies{\quad\supset\ } + +\def\tdots{\ldots\thinspace} + +\let\bop=\newpage + +\def\hbreak{\hfil\break} + +\def\lp{\par\noindent} + +\def\boxit#1{\fbox{\sc#1}} + + +% Figure Support + +\def\tagfigure#1#2#3{% + \begin{figure}[t] + \hrule + \vskip .5\baselineskip + {\small\rm\input figure#1\relax\centerline{\box\graph}}% + \vskip .5\baselineskip plus .5\baselineskip + \caption{#2}% + \label{#3}% + \vskip 2pt + \hrule + \end{figure}% +} + +\def\tagdiagram#1#2#3{% + \begin{figure}[t] + \hrule + \vskip .5\baselineskip + {\small\rm\input diagram#1\relax}% + \vskip .5\baselineskip plus .5\baselineskip + \caption{#2}% + \label{#3}% + \vskip 2pt + \hrule + \end{figure}% +} + +\def\tagtable#1#2#3{% + \begin{table}[t] + \hrule + \vskip .5\baselineskip + {\small\rm\input table#1\relax}% + \vskip .5\baselineskip plus .5\baselineskip + \caption{#2}% + \label{#3}% + \vskip 2pt + \hrule + \end{table}% +} + + +% Draft Stuff + +\newif\ifdraft \draftfalse + +\def\draftstring{{\ifdraft \tt Draft\fi}} + +\def\draftext{% + \ifdraft + \begingroup + \tt + \ifodd\thepage + \LaTeX set \today\ with \fmtname\ v\fmtversion + \else + Draft \versiontag/ of \versiondate/ + \fi + \endgroup + \fi +} + +\def\versiontag/{\errmessage{version.tex not loaded!}} +\let\versiondate=\versiontag + +\def\ds@DScustom{\ifdraft \@ifundefined{ds@draft}{}{\ds@draft}\fi} + +\def\note#1{\ifdraft\marginpar{\tt#1}\fi} + + +% Galley style % TODO + + +% Trademarks... + +\input trademark + + +\catcode`\@=12 % back to normal diff --git a/docs/historical/mh6/mh6.bbl b/docs/historical/mh6/mh6.bbl new file mode 100644 index 0000000..14f9f1e --- /dev/null +++ b/docs/historical/mh6/mh6.bbl @@ -0,0 +1,5 @@ +\begin{thebibliography}{MMmmm99} + +\bibitem[MH]{MH} M.T.~Rose, J.L.~Romine. +{\em The Rand \MH/ Message Handling System: User's Manual} (UCI Version). +\end{thebibliography} diff --git a/docs/historical/mh6/mh6.tex b/docs/historical/mh6/mh6.tex new file mode 100644 index 0000000..c798f72 --- /dev/null +++ b/docs/historical/mh6/mh6.tex @@ -0,0 +1,558 @@ +% run this through LaTeX + +\input lcustom +\input version + +\documentstyle[12pt,DScustom,sfwmac]{article} +\setcounter{page}{0} +\pagestyle{empty} + +\begin{document} + +\title{Changes to\\ The Rand MH Message Handling System:\\ MH.6} +\author{Marshall T.~Rose\\ + Northrop Research and Technology Center\\ + One~Research Park\\ + Palos Verdes Peninsula, CA 90274} +\date{\ifdraft \versiondate/\\ Version \versiontag/\else \today\fi} +\maketitle +\footnotetext[0]{\hskip -\parindent +This document (version \versiontag/) +was \LaTeX set \today\ with \fmtname\ v\fmtversion.}% + +\begin{abstract} +\noindent This document describes the user-visible change to the +UCI version of the Rand \MH/ system that were made from \mh5 to \mh6. +This document does not describe bug-fixes, per se, +or internal changes, +unless these activities resulted in a visible change for the \MH/ user. + +This document is meant to supplement, +not supersede, the standard \MH/ User's manual\cite{MH}. + +Comments concerning this documentation should be addressed to the Internet +mailbox {\sf Bug-MH@UCI.EDU}. +\end{abstract} + +\bop\pagestyle{plain}\pagenumbering{arabic} + + \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 T.~Rose +and John L.~Romine at the University of California, Irvine. +Einar A.~Stefferud, Jerry N.~Sweet, +and Terry P.~Domae provided numerous suggestions +to improve the UCI version of \MH/. +Of course, +a large number of people have helped \MH/ along. +The list of ``\MH/~immortals'' is too long to list here. + + \section* {Disclaimer} +The Regents of the University of California wish to make it known that: +\begin{quote} +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. +\end{quote} + +\bop + + \section* {Conventions} +In this document, +certain \LaTeX -formatting conventions are adhered to: +\begin{enumerate} +\item The names of \unix/ commands, such as \pgm{comp}, +are presented in {\it text italics}. + +\item Arguments to programs, such as \arg{msgs}, +are presented in {\tt typewriter style} and delimited by single-quotes. + +\item \unix/ pathnames and envariables, +such as $$\file{/usr/uci/}\hbox{\qquad and\qquad}\file{\$SIGNATURE},$$ +are presented in {\sl slanted roman}. + +\item Text presenting an example, such as +\example comp\ -editor\ zz\endexample +is presented in {\tt typewriter style}. +\end{enumerate} + +\bop + + \section* {General Changes} +Unlike the changes between \mh4 and \mh5, +a large number of user-visible changes have been made in \mh6. +These changes have been in the form of bug fixes and several generalizations. +The majority of these will not affect novice users. +In addition, \mh6 is a great deal faster than \mh5: +all programs have been speeded-up significantly, +thanks to work done by Van Jacobson as part of the process of including \mh5 +in the 4.3\bsd/~\unix/ distribution. + +This document describes all user-visible changes to \mh5 from it's initial +release to the initial release of \mh6. + +\subsection* {System-5 Support} +In addition to support for \bsd/~\unix/, V7~\unix/ and \xenix/ variants of +\unix/, +\MH/ finally has support for the AT\&T variant of \unix/, System~5. +Hopefully this will greatly expand the number of system which can run \MH/. +Ironically, +it appears that five ports of earlier versions of \MH/ (including \mh5) +were done, +but news of the work was not widespread.% +\nfootnote{In fact, +three groups in one large organization ported \MH/ independently, +each without knowledge of the others' work.} + +\subsection* {Documentation} +Several new documents have been included in the \mh6 distribution: +The paper {\em MH.5: How to process 200 messages a day and still get some +real work done} +was presented at the 1985 Summer Usenix Conference and Exhibition in +Portland, Orgeon. +Another paper, {\em MH: A Multifarious User Agent}, +has been accepted for publication by Computer Networks. +Both describe \MH/, +the former from a more technical and somewhat humorous perspective, +the latter from a more serious and research-oriented perspective. +In addition, +a third paper has been included, +{\em Design of the TTI Prototype Trusted Mail Agent}, +which describes a so-called ``trusted'' mail agent built on top of \MH/. +This paper was presented at the Second International Symposium on +Computer Message Systems in Washington, D.C. +A fourth paper, +{\em MZnet: Mail Service for Personal Micro-Computer Systems}, +is also included. +This paper, +which was presented at the First International Symposium on Computer Message +Systems in Nottingham, U.K., +describes a \cpm/-based version of \MH/. + +In addition, +the \MH/ tutorial, {\em The Rand MH Message Handling System: Tutorial}, +and, +{\em The Rand MH Message Handling System: The UCI BBoards Facility}, +have both been updated by Jerry N.~Sweet. + +For \MH/ administrators (PostMasters and the like), +there's an entirely new document, +{\em The Rand MH Message Handling System: Administrator's Guide}. +It explains most of the ``ins and outs'' of maintaining an \MH/ system. + +Finally, all of the manual entries and the \MH/ manual have had a thorough +working over. +The documentation is expanded, more accurate, and more detailed. + +\subsection* {Help Listings} +When any \MH/ command is invoked with the \switch{help} switch, +in addition to listing the syntax of the command and version information, +the \MH/ configuration options will be listed. +\MH/ has so many configuration options, +that when debugging problems, this information is invaluable. + +\subsection* {The \MH/ Profile} +There are two new profile entries worth noting: +\eg{MH-Sequences} tells \MH/ the name of the file to record public +sequences in. +Users of \pgm{vm}, a proprietary, visual front-end to \MH/, +make use of this to disable the public sequences feature of \MH/. + +The profile entry \eg{Unseen-Sequence} names those sequences which should be +defined as those messages recently incorporated by \pgm{inc}. +The \pgm{show} program knows to remove messages from this sequence once it +thinks they have been seen. +If this profile entry is not present, or is empty, then no sequences are +defined. +Otherwise, for each name given, the sequence is first zero'd and then each +message incorporated is added to the sequence. +As such, this profile entry is rather analogous to the +\eg{Previous-Sequence} entry in the user's \MH/ profile. + +In addition, the \eg{Alternate-Mailboxes} entry in the profile has been +expanded to support simple wild-carding. +Also, the default for this profile entry is now the user's mail-id at any host. +This change was made since \MH/ can no longer reliably figure out what +the user's real outgoing address looks like. + +Finally, +when the \pgm{install-mh} program is automatically invoked by \MH/, +it won't prompt the user for information. +Instead, it notes that it's setting up the default environment. +In addition, +the \MH/ administrator may set-up a file called \file{mh.profile} in the \MH/ +library area which is consulted by \pgm{install-mh} when initializing the +user's \profile/. + +\subsection* {The \MH/ Context} +The \pgm{folder}, \pgm{scan}, and \pgm{show} programs have been modified to +update the user's \MH/ context prior to writing to the user's terminal. +This allows the \MH/ user interrupt output to the terminal and still have the +expected context. +This is especially useful to interrupt long \pgm{scan} listings. +This change also introduces a subtle bug between \pgm{show} and messages +denoted by the \eg{Unseen-Sequence}. +See \man show(1) for the details. + +\subsection* {Addresses and 822 support} +\MH/ now fully supports the RFC-822 routing syntax for addresses +(it used to recognize the syntax, but ignore the information present). +In addition, +there are three major modes for support of non-822 addressing in \MH/: +\begin{itemize} +\item BERK\hbreak +This is useful on sites running \SendMail/. +It doesn't support full 822--style addressing, +in favor of recognizing such formats as ACSnet, and so on. +For sites that can't run in an 822--compliant environment, +this is the option to use +(at the price of sacrificing some of the power of 822--style addressing). + +\item DUMB\hbreak +Although not as liberal as BERK, +the DUMB option is useful on sites in which the message transport system +conforms to the 822 standard, +but wants to do all the defaulting itself. + +\item BANG\hbreak +From out in left field, +the BANG option favors \UUCP/-style addressing over 822--style addressing. +Hopefully when all the \UUCP/ sites around get around to adopting domain-style +addresses, this option won't be needed. +\end{itemize} + +The \pgm{ap} program (mentioned momentarily) and the \pgm{ali} program +both support a \switch{normalize} switch indicate if addresses should be +resolved to their ``official'' hostnames. + +\subsection* {New Programs} +There are five new programs available: +The \pgm{ap} program is the \MH/ stand-alone address parser. +It's useful for printing address in various formats +(and for debugging address strings). +The \pgm{dp} program is similar, but works on dates instead of addresses. + +The \pgm{msgchk} program checks for new mail, +possibly using the Post Office Protocol, POP, described below. + +A new receive mail hook, +the \pgm{rcvstore} program, +which was written by Julian L.~Onions is available. + +Finally, a visual front-end to \pgm{msh} called \pgm{vmh} has been included. +(This program is discussed in greater detail later on.) + +\subsection* {Message Numbering} +\MH/ now no longer restricts the number of messages which may reside in a +folder +(beyond that of system memory constraints). +This means that message numbers larger than 2000 are permissible. +Hopefully this will make life easier for people reading the network news +using \MH/. + + \section* {The WhatNow Shell} +In \mh6, +there is now the concept of a unified \whatnow/ processor that +the four composition programs, \pgm{comp}, \pgm{dist}, \pgm{forw}, +and \pgm{repl} all invoke. +This permits a greater flexibility in building mail applications with \MH/. +As a result, there's a new program, \pgm{whatnow}, which acts as the default +\whatnow/ program. +Consult the \man whatnow(1) manual entry for all the details. + +The only other thing worth noting is that unless \MH/ has been compiled with +the UCI option, +the user's \file{\$HOME/.signature} file is not consulted for the user's +personal name. + + \section* {Format Strings} +A general format string facility has been added to allow \MH/ users to tailor +the output of certain commands. + +The \pgm{inc}, \pgm{scan}, \pgm{ap}, and \pgm{dp} programs all consult a +file containing format strings. +Format strings, +which look a lot like \man printf(3) strings, +give these \MH/ commands precise instructions on how to format their output. + +As a result, +the \pgm{inc} and \pgm{scan} programs no longer have the +\switch{size}, \switch{nosize}, +\switch{time}, \switch{notime}, +\switch{numdate}, and \switch{nonumdate} +switches. +These switches have been replaced with the +\switch{form~formatfile} switch and the \switch{format~string} switch. +The former directs the program to consult the named file for the format +strings. +The latter directs the program to use the named string as the format. +To get the behavior of the old \switch{time} option, +use the \switch{form~scan.time} option. +Similarly, +to get the effect of \switch{size}, +use \switch{form~scan.size}. + +The \pgm{repl} command uses a file containing format files to +indicate how the reply draft should be constructed. +Note that reply templates prior to \mh6 are incompatible with \mh5. +Don't worry though, +it's quite easy to convert the templates by hand. +(Those clever enough to have written a reply template to begin with won't +have {\em any\/} problem.) + +Similarly, when the \pgm{forw} program is constructing a digest, +it uses a file containing format strings to indicate how to build the +encapsulating draft. + + \section* {News} +The depreciated \MH/ news system (from \mh1) is now de-supported. +Use the ``hoopy'' BBoards facility instead. + + \section* {BBoards} +\MH/ maintainers take note: +the default home directory for the bboards login has changed from +\file{/usr/bboards/} to \file{/usr/spool/bboards/}. +Use the \eg{bbhome} directive in your \MH/ configuration file to set +it back to the old value if you wish. + +In addition, the aliases field for a BBoard in the BBoards file is now +deemed useful only for addressing, not for user input to \pgm{bbc}. +This means when giving the name of a BBoard to \pgm{bbc}, +only the official name should be used. + +A final note for mailsystem maintainers: +the \MMDFII/ BBoards channel and the \SendMail/ BBoards mailer have been +modified to use the standard message encapsulation format when returning +failed messages to the list maintainer. +This means that the failure notices that the maintainer receives can +simply be \pgm{burst}. + +\subsection* {New Switches in bbc} +The \pgm{bbc} program permits you to specify the \eg{mshproc} to use on the +command line by using the \switch{mshproc~program} option. +In addition, options which aren't understood by \pgm{bbc} are passed along to +the \eg{mshproc}. + +In addition, the following commands +pass any unrecognized switches on to the program that they invoke: +\pgm{bbc}, \pgm{next}, \pgm{show}, \pgm{prev}, and \pgm{vmh}. + +\subsection* {Distributed BBoards} +If both BBoards and POP (see the next section) are enabled, +then distributed BBoards can be supported on top of the POP service. +This allows the \MH/ user to read BBoards on a server machine +instead of the local host +(which saves a lot of wasted disk space when the same BBoards are replicated +several times at a site with several hosts). +See the {\em Administrator's Guide\/} for information on how this can be made +completely transparent to the \MH/ user. + +If you have several machines at your site running 4.2\bsd/~\unix/ +and connected by an \ethernet/ (or other high-speed LAN), +you {\em want\/} this software. + +\subsection* {Visual Front-End to msh} +A simple window management protocol has been implemented for \MH/ programs +that might wish to act as a back-end to a sophisticated visual front-end. + +The first implementation of a server side (front-end) program is \pgm{vmh}, +which uses \man curses(3) to maintain a split-screen interface. +Perhaps look for a \pgm{mhtool} program for the SUN next! + +The \pgm{msh} program has been modified to speak the client side (back-end) +of this protocol, if so directed. +At present, \pgm{msh} is the only program in the \MH/ distribution which +implements the client side of the window management protocol. + +\subsection* {Updates in msh} +Prior to quitting, +the \pgm{msh} command now asks if the \pgm{packf\/}'d file you've been +perusing should be updated if you've modified it and the file is writable by +you. +The file can be modified by using \pgm{burst}, \pgm{rmm}, \pgm{rmm}, +or \pgm{sortm} commands. +The file can also be modified by using the \pgm{refile} command without the +\switch{link} option. +(Or course, +the \switch{link} option doesn't actually link anything to the file.) + + \section* {Distributed Mail} +\MH/ now contains a powerful facility for doing distributed mail +(having \MH/ reside on a host different than the message transport agent). +For general information, +consult either the +{\em MH.5: How to process 200 messages a day and still get some real work +done} paper, +or the {\em MH: A Multifarious User Agent} paper. +For specific information, +consult the {\em Administrator's Guide}. +Here's a brief synopsis: + +This POP facility in \MH/ is based on a modification of the ARPA Post +Office Protocol (POP). +A POP {\em subscriber\/} is a remote user, +on a POP {\em client host}, +that wishes to pick-up mail on a POP {\em service host}. + +There are two ways to administer POP: +\begin{itemize} +\item Naive Mode\hbreak +Each user-id in the \man passwd(5) file is considered a POP subscriber. +No changes are required for the mailsystem on the POP service host. +However, +this method requires that each POP subscriber have an entry in the password +file. +The POP server will fetch the user's mail from wherever maildrops are kept on +the POP service host. +This means that if maildrops are kept in the user's home directory, +then each POP subscriber must have a home directory. + +\item Smart Mode\hbreak +This is based on the notion that the list of POP subscribers and the list of +login users are completely separate name spaces. +A separate database (similar to the \man BBoards(5) file) +is used to record information about each POP subscriber. +Unfortunately, +the local mailsystem must be changed to reflect this. +This requires two changes (both of which are simple): +\begin{enumerate} +\item Aliasing\hbreak + The aliasing mechanism is augmented so that POP subscriber addresses + are diverted to a special delivery mechanism. + \MH/ comes with a program, \man popaka(8), which generates the + additional information to be put in the mailsystem's alias file. +\item Delivery\hbreak + A special POP channel (for \MMDFII/) or POP mailer (for \SendMail/) + performs the actual delivery (\mh6 supplies both). + All it really does is just place the mail in the POP spool area. +\end{enumerate} +Clever mailsystem people will note that +the POP mechanism is really a special case of the more general +BBoards mechanism. +\end{itemize} +These two different philosophies are not compatible on the same POP service +host: one or the other, but not both, may be run. + +In addition, there is one user-visible difference, +which the administrator controls the availability of. +The difference is whether the POP subscriber must supply a password to the POP +server: +\begin{itemize} +\item ARPA standard method\hbreak +This uses the standard ARPA technique of sending a username and a password. +The appropriate programs (\pgm{inc}, \pgm{msgchk}, and possibly \pgm{bbc\/}) +will prompt the user for this information. + +\item \unix/ remote method\hbreak +This uses the Berkeley \unix/ reserved port method for authentication. +This requires that the two or three mentioned above programs be {\em setuid\/} +to root. +(There are no known holes in any of these programs.) +\end{itemize} +These two different philosophies are compatible on the same POP service host: +to selectively disable RPOP for hosts which aren't trusted, +either modify the \file{.rhosts} file in the case of POP subscribers being +\unix/ logins, +or zero the contents of network address field of the \man pop(5) file for the +desired POP subscribers. + +The \pgm{inc} command also has two other switches when \MH/ is enabled for +POP: +\switch{pack~file} and \switch{nopack}. +Normally, +\pgm{inc} will use the POP to incorporate mail from a POP service host into +an \MH/ folder (\eg{+inbox}). +However, +there are some misguided individuals who prefer to \pgm{msh} to read their +maildrop. +By using the \switch{pack~file} option, +these individuals can direct \pgm{inc} to fetch their maildrop from the POP +service host and store it locally in the named file. +As expected, \pgm{inc} will treat the local file as a maildrop, +performing the appropriate locking protocols. + + \section* {Rcvmail hooks} +In order to offer users of \MH/ increated rcvmail hook functionality, +the \pgm{slocal} program has been upgraded to support the semantics of +the \MMDFII/ mail-delivery mechanism. +This means that users of \mh6 can maintain identical \file{.maildelivery} +files regardless of the underlying transport system. +See \man mhook(1) for all the details. + +\subsection* {Field change in rcvpack} +The \pgm{rcvpack} rcvmail hook now adds the field name \eg{Delivery-Date:} +instead of \eg{Cron-Date:} to messages it \pgm{pack\/}s. + + \section* {Other Changes} +Here's the miscellany: + +\subsection* {Continuation Lines} +Alias files used by \MH/, +display templates used by \pgm{mhl}, +and format files used by \pgm{forw}, \pgm{repl}, and \pgm{scan} all support +a standard continuation line syntax. +To continue a line in one of these files, +simply end the line with the backslash character (`$\backslash$'). +All the other files used by \MH/ are in 822--format, +so the 822--continuation mechanism is used.% +\nfootnote{Looking back, +it would have been best had all files in \MH/ used the 822--format.} + +\subsection* {Modifications to show} +The \switch{format}, \switch{noformat}, \switch{pr}, and \switch{nopr} +options to \pgm{show} have gone away in favor of a more general mechanism. +The \switch{showproc~program} option tells \pgm{show} +(or \pgm{next} or \pgm{prev\/}) to use the named program as the \eg{showproc}. +The \switch{noshowproc} option tells \pgm{show}, et. al., +to use the \man cat(1) program instead of a \eg{showproc}. +As a result, the profile entry \eg{prproc} is no longer used. + +\subsection* {Front-End to mhl} +When outputting to a terminal, +the \pgm{mhl} program now runs the program denoted by the profile entry +\eg{moreproc}. +If this entry is not present, +the default is the UCB \pgm{more} program. +If the entry is non-empty, +then that program is spliced between \pgm{mhl} and the user's terminal. +The author uses the \pgm{less} program as his \eg{moreproc}. + +Of course, +if \pgm{mhl} isn't outputting to a terminal, +then \eg{moreproc} is not invoked. + +\subsection* {Switch change in inc} +The \switch{ms~ms-file} switch in \pgm{inc} has been changed to +\switch{file~name} to be more consistent. + +\subsection* {Complex Expressions in pick} +The \pgm{pick} command now handles complex boolean expressions. + +\subsection* {Defaults change in prompter and burst} +The \switch{prepend} option is now the default in \pgm{prompter}. +The \switch{noinplace} option is now the default in \pgm{burst}. + +\subsection* {Interactive option in rmf} +The \pgm{rmf} program has been changed to support an \switch{interactive} +switch. +If given, +then the user is prompted regarding whether the folder should be deleted. +If the folder to be removed is not given by the user, +this switch is defaulted to on. + +\subsection* {Trusted Mail Interface} +\MH/ now has an interface for so-called ``trusted mail'' applications. +Although the modifications to \MH/ to support this are in the public domain, +the actual library that \MH/ uses is not. +Contact Professor David J.~Farber ({\sf Farber@UDel\/}) for more information. + +\bibliography{mh6} + +\showsummary + +\end{document} diff --git a/docs/historical/mh6/sfwmac.sty b/docs/historical/mh6/sfwmac.sty new file mode 100644 index 0000000..b9c6794 --- /dev/null +++ b/docs/historical/mh6/sfwmac.sty @@ -0,0 +1,88 @@ +% LaTeX support for writing UNIX-style documentation (based on webmac.tex) + + +\makeatletter % for a little while + +\typeout{Document Style 'sfwmac'. Version 1.00 - released 17 June 1985} + + +% Examples + +\def\eg#1{\hbox{``\verb*"#1"''}} % in-line + +\def\example#1\endexample{% % multi-line + $$% + \displayindent=\leftskip + \ifdim\parindent>\z@ + \advance\displayindent by1.5\parindent + \else + \advance\displayindent by.15\hsize + \fi + \let\\=\cr + \tabskip=\z@ + \halign{\ignorespaces\verb*"##"\unskip\hfil\cr#1\cr}% + $$% +} + + +% Miscellany + +\def\pgm#1{{\it#1}} % UNIX programs +\def\man#1(#2){\pgm{#1\/}(#2)} % manual entries +\def\arg#1{\hbox{`{}\verb*"#1"'{}}} % arguments to programs +\def\switch#1{\hbox{`{}-\verb*"#1"'{}}} % switches to programs +\def\file#1{\hbox{\sl#1}} % filename + + +% Commonly used software systems + +\def\EMACS/{{\sf EMACS}} +\def\INFO/{{\sf INFO}} +\def\MLisp/{{\sf MLisp}} + +\def\MH/{{\sf MH}} +\def\mh#1{{\sf mh.#1}} +\def\Mail/{\file{Mail/}} +\def\context/{\file{context}} +\def\profile/{\file{.mh\_profile}} +\def\sequences/{\file{.mh\_sequences}} +\def\whatnow/{\verb*"What now?"} + +\def\MMDF/{{\sf MMDF}} +\def\MMDFI/{\hbox{\sf MMDF-I}} +\def\MMDFII/{\hbox{\sf MMDF-II}} + +\def\SendMail/{{\sf SendMail}} +\def\UUCP/{{\sf UUCP}} + +\def\AmS{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\cal S$} +\def\AMSPPT.STY/{{\tt amsppt.sty}} +\def\AmSTeX{\hbox{\rm \AmS-\TeX}} + +\def\DISS.STY/{{\tt diss.sty}} +\def\PhDTeX{\hbox{\rm PhD-\TeX}} + +\def\LaTeX{\hbox{\rm L\kern-.2em\raise.3ex\hbox{\sc a}\kern-.09em\TeX}} +\def\BibTeX{\hbox{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em\TeX}} +\def\SLiTeX{\hbox{\rm S\kern-.065em L\kern-.18em\raise.32ex\hbox{\sc i}% + \kern-.03em\TeX}} + +\def\NRTeX{\hbox{\rm NR-\TeX}} + +\def\ROFF/{{\sf ROFF}} + +\def\SUMEX/{{\sf SUMEX}} + +\def\TTYD/{{\sf TTYD}} + + +% Fractions (from TUGboat v6 n1, 1985) + +\def\frac#1/#2{% + \leavevmode\kern.1em + \raise.5ex\hbox{\the\scriptfont\z@ #1}\kern-.1em + /\kern-.15em\lower.25ex\hbox{\the\scriptfont\z@ #2}% +} + + +\makeatother % back to normal diff --git a/docs/historical/mh6/trademark.tex b/docs/historical/mh6/trademark.tex new file mode 100644 index 0000000..cff9046 --- /dev/null +++ b/docs/historical/mh6/trademark.tex @@ -0,0 +1,54 @@ +% Trademarks... + +\def\gobble#1{} + +\def\tradeORGfont{\sc} % used for organizations (e.g., ACM) +\def\tradeNAMfont{\sf} % used for names (e.g., Ada) + +\def\tradeorg#1{\tradeaux{#1}{\expandafter\gobble\string#1}\empty\tradeORGfont} +\def\tradename#1#2#3{\tradeaux{#1}{#2}{#3}\tradeNAMfont} +\def\trademark#1#2{% + \tradeaux{#1}{\expandafter\gobble\string#1}{#2}\tradeNAMfont +} + +\def\tradeaux#1#2#3#4{% + \def#1/{\relax}% % in case #3 references #1 + \setbox0=\hbox{#3}% % when we make the \hbox + \ifdim\wd0>0pt + \gdef#1/{% + \tradeaux{#1}{#2}\empty{#4}% + #1/\nfootnote{#1/ is a trademark of #3.}% + }% + \else + \gdef#1/{{#4#2}}% + \fi +} + +\tradeorg\acm +\tradeorg\ansi +\tradename\Ada{Ada} + {the Department of Defense (\Ada/ Joint Program Office)} +\tradeorg\bsd +\tradeorg\ccitt +\tradename\cms{CMS} {International Business Machines, Incorporated} +\tradename\cpm{CP/M} {Digital Research Corporation} +\tradename\decnet{DECnet} {Digital Equipment Corporation} +\tradeorg\dod +\tradename\ethernet{Ethernet} {the Xerox Corporation} +\tradename\eunice{Eunice} \empty +\tradeorg\ieee +\tradename\lattice{Lattice} {Lattice, Incorporated} +\tradename\locus{Locus} {Locus Computing Corporation} +\tradename\msdos{MS-DOS} {Microsoft Corporation} +\tradeorg\milstd +\tradename\pcinterface{PC-Interface}% + {Locus Computing Corporation} +\tradename\pdp{PDP} {Digital Equipment Corporation} +\tradename{\tops20}{Tops20} {Digital Equipment Corporation} +\tradename\trustedmail{Trusted\ Mail}% + {Trusted Technologies, Incorporated} +\tradename\unix{UNIX} {AT\&T Bell Laboratories} +\tradename\vax{VAX} {Digital Equipment Corporation} +\tradename\vm{VM} {International Business Machines, Incorporated} +\tradename\vms{VMS} {Digital Equipment Corporation} +\tradename\xenix{Xenix} {Microsoft Corporation} diff --git a/docs/historical/mh6/version b/docs/historical/mh6/version new file mode 100644 index 0000000..7facc89 --- /dev/null +++ b/docs/historical/mh6/version @@ -0,0 +1 @@ +36 diff --git a/docs/historical/mh6/version.sh b/docs/historical/mh6/version.sh new file mode 100644 index 0000000..4853996 --- /dev/null +++ b/docs/historical/mh6/version.sh @@ -0,0 +1,9 @@ +if [ ! -r version ]; then echo 0 > version; fi +touch version +echo '\catcode`\#=12' > version.tex +awk ' { version = $1 + 1; }\ +END { printf "\\def\\versiontag/{#1.%d}%%\n", version >> "version.tex"; \ + printf "%d\n", version > "version"; }' < version +echo '\def\versiondate/{'`date`'}%' >> version.tex +echo '\catcode`\#=6' >> version.tex +echo '\typeout{Version \versiontag/ of \versiondate/}' >> version.tex diff --git a/docs/historical/mh6/version.tex b/docs/historical/mh6/version.tex new file mode 100644 index 0000000..d17bef4 --- /dev/null +++ b/docs/historical/mh6/version.tex @@ -0,0 +1,5 @@ +\catcode`\#=12 +\def\versiontag/{#1.36}% +\def\versiondate/{Tue Nov 12 10:50:55 PST 1985}% +\catcode`\#=6 +\typeout{Version \versiontag/ of \versiondate/} diff --git a/docs/historical/multifarious/Makefile b/docs/historical/multifarious/Makefile new file mode 100644 index 0000000..1b029c3 --- /dev/null +++ b/docs/historical/multifarious/Makefile @@ -0,0 +1,57 @@ +####################################################################### +# Instructions to Make, for generation of nice-looking papers using TeX +####################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if TEXINPUTS=../doclib:.:${TEXINPUTS} tex \ + \\nonstopmode\\input $<\\bye; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# multifarious +############################################################# + +i-all: multifarious.dvi + +i-print: multifarious.dvi true + dvisp $(DFLAGS) -J Multifarious multifarious + + +# customization files, et. al., not included below +multifarious.dvi: version.tex + +version.tex: multifarious.tex \ + text.tex \ + figure0.tex figure1.tex diagram2.tex diagram3.tex \ + refs.tex appendixA.tex \ + version.sh + @: version.sh + +true:; + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f multifarious.dvi multifarious.imp + +clean:; rm -f multifarious.lof multifarious.log multifarious.lot \ + multifarious.toc _* diff --git a/docs/historical/multifarious/appendixA.tex b/docs/historical/multifarious/appendixA.tex new file mode 100644 index 0000000..f6b61cb --- /dev/null +++ b/docs/historical/multifarious/appendixA.tex @@ -0,0 +1,230 @@ +% appendix A % mtr + +\catcode`\@=11 % for a little while + +\def\psect#1{% + \skip@=\lastskip + \par + \dimen@=.6\baselineskip + \ifdim\skip@<\dimen@ + \ifdim\skip@=\z@ \penalty-100 \fi + \vskip \dimen@ plus .3\baselineskip + \fi + \centerline{\underbar{#1}}% + \nobreak + \vskip \z@ plus .1\baselineskip + \vskip -\parskip +} + +\def\pitem#1 #2.{\item{\pgm{#1\/}:} #2\hbreak} + +\catcode`\@=12 % back to normal + + +\appendix{A}{MH Commands} +\MH/ is composed of several \unix/ programs, +which in theory are fairly simple and single-purposed. +These commands are functionally grouped below: + +\psect{Composing Mail} +\pitem{comp} compose a message. +A program to originate a message. +Usually, a special prompting editor front-end, \pgm{prompter}, +is used to fill-in a composition template with the addressees of +the message, subject, and so forth. + +\pitem{dist} redistribute a message to additional addresses. +A program that re-enters a message previously received by the user +into the message transport system. +Only new addresses are added; +the body of the message is not changed in any way. + +\pitem{forw} forward messages. +A program that encapsulates one or more messages in a new message draft. +In addition, the user may add initial and/or closing comments. + +\pitem{repl} reply to a message. +A program that constructs a reply to a message using a reply template. +The template mechanism has sufficient generality to permit the user to +``program'' the form of the reply draft based on the contents of the message +being replied-to. + +\pitem{send} send a message. +A program that posts a draft with the message transport system. +The \pgm{send} program is +usually invoked by one of the four preceding programs, +and performs simple front-end pre-processing prior to invoking the +\pgm{post} program. +For example, +if invoked in {\it push}'d mode, +\pgm{send} will immediately relinquish control of the user's terminal and +post the message in the background. +If the posting fails, +\pgm{send} will send back a failure notice to the user. +If the user had \pgm{push\/}'d the sending of the draft, +then by default +the draft being sent is encapsulated in the failure notice. +This permits easy \pgm{burst}'ing of the failure notice to retrieve the +original draft. +Otherwise, +if the posting was successful, +the draft is marked as having been sent. + +\pitem{whatnow} prompting front-end for send. +A program which is called by \pgm{comp}, et. al., +after the initial draft has been generated. +The \MH/ user can specify a different \pgm{whatnow} program, +which yields considerable extensibility. + +\pitem{whom} report to whom a message would go. +A program which examines the addresses of the draft and expands +all user-defined aliases contained therein. +Optionally, +\pgm{whom} may actually interact with the message transport system +to determine the validity of the final addresses. +This program is also usually invoked by \pgm{comp}, et.~al. + +\psect{Posting Mail} +\pitem{ali} list mail aliases. +A simple front-end to the \MH/ aliasing mechanism. + +\pitem{ap} parse addresses 822--style. +A useful debugging tool for PostMasters who wish to examine how \MH/ +interprets an Internet address. + +\pitem{conflict} search for alias/password conflicts. +Another program used by system administrators to check the consistency of +\MH/ alias files, and portions of the local message transport agent. + +\pitem{install-mh} initialize the MH environment. +A program which is automatically executed the first time a user issues an +\MH/ command. +This program performs once-only initialization of the user's \MH/ environment. + +\pitem{mhmail} send or read mail. +A simple program generally used by other programs to generate messages. +The \pgm{mhmail} command is similar in purpose to the old \pgm{BellMail} +program. + +\pitem{post} deliver a message. +A complex \MH/ back-end that interacts with the local message transport agent +to enter messages through the posting slot. +(See the description of \pgm{send} above). + +\psect{Reading Mail} +\pitem{inc} incorporate new mail. +A program that interacts with the local message transport agent +to retrieve messages from the user's maildrop. + +\pitem{msgchk} check for waiting mail. +A program which reports the status of mail waiting in the user's maildrop. + +\pitem{show} show (list) messages. +A program which lists messages to its standard output +(usually the user's terminal), +possibly invoking another program to do the actual listing. +Most users of \MH/ have \pgm{show} automatically call the \pgm{mhl} program +to format the message. +The \pgm{next} and \pgm{prev} programs are simply +\eg{show\ next} and \eg{show\ prev}, +respectively. + +\pitem{mhl} produce formatted listings of MH messages. +A program which displays a message as directed by a template. +This permits the user to filter out uninteresting headers +and re-arrange other headers to a particular preference. +In addition to being invoked by \pgm{show}, +the \pgm{mhl} program is optionally also +invoked by \pgm{forw} to format each message being forwarded; +invoked by \pgm{repl} to format the body of a message being replied-to, +if that message is being included in the reply draft; +and, +invoked by \pgm{post} to format a message being sent as a blind-carbon-copy. + +\pitem{rmm} remove messages. +A program that removes messages from an \MH/ folder, +optionally running a user-defined program instead of deleting them. +If no program is given, +the messages are ``softly'' removed, +so they may possibly be recovered later. + +\pitem{scan} produce a one-line-per-message scan listing. +A program that generates a scan listing for messages. +Each line of the listing contains date, source, subject, +and possibly the initial body of the message. + +\psect{Folder Handling} +\pitem{folder} set/list current folder/message. +A program used to list information concerning the current folder, +or set the current folder and/or message. + +\pitem{folders} list all folders. +A program to list information on all folders +(actually, just a special case of the \pgm{folder} command). +Since the \MH/ folder structure may be recursive, +the user can indicate that \pgm{folders} should recursively examine all +folders. + +\pitem{refile} file message(s) in (an)other folder(s). +A program to move (or copy) messages from a source folder to one or more +destination folders. + +\pitem{rmf} remove folder. +A program that deletes a folder and all messages therein. + +\psect{Message Selection} +\pitem{anno} annotate messages. +A program to arbitrarily annotate messages. +If the user so desires, +after distributing, forwarding, or replying-to a message, +\MH/ will automatically attach an annotation to the +original message indicating the date and addresses. + +\pitem{mark} mark messages. +A program to manipulate user-defined sequences (lists of messages). +Usually, \pgm{mark} is not employed directly by the \MH/ user. + +\pitem{pick} select messages by content. +A program to examine a list of messages and choose those which meet a +particular selection criterion. +The \pgm{pick} program is often used in \unix/ back-quoted operations to pass +message sequences to other \MH/ commands. + +\pitem{sortm} sort messages. +A program to sort a list of messages according to the date given in a +particular field. + +\psect{Distribution List Handling} +\pitem{bbc} check on BBoards. +A front-end to run \pgm{msh} on a list of distribution lists which the +user isn't current on. + +\pitem{bbl} manage a BBoard. +A (depreciated) program used to manually manage the local archives of a +distribution list. +These functions (archiving, expunging) are performed automatically by \MH/. + +\pitem{burst} explode digests into messages. +A program used to decapsulate messages from ARPA Internet digests. +In addition, +messages which have been encapsulated during forwarding +(i.e., with \pgm{forw\/}) +can also be decapsulated using \pgm{burst}.% +\nfootnote{Similarly, blind-carbon-copies may be decapsulated, +though only socially mature users should do so.} + +\pitem{msh} MH shell (and BBoard reader). +A monolithic program used to implement \MH/ commands on +messages arranged in a single file (maildrop format). +Useful +since distribution lists are kept in this format to minimize consumption of +system resources. + +\pitem{pack} compress a folder into a single file. +A program which takes messages stored in \MH/ format and places them in a +single file (using the same format known by \pgm{msh\/}). + +\psect{Interface to the \unix/ File System} +\pitem{mhpath} print full pathnames of \MH/ messages and folders. +A program which maps \MH/-style names into the \unix/ file naming convention. + diff --git a/docs/historical/multifarious/diagram2.tex b/docs/historical/multifarious/diagram2.tex new file mode 100644 index 0000000..0af120d --- /dev/null +++ b/docs/historical/multifarious/diagram2.tex @@ -0,0 +1,28 @@ +% diagram 2 + +\verbatim +Path: Mail +Editor: prompter +prompter-next: emacs +Folder-Protect: 700 +Msg-Protect: 600 +Previous-Sequence: pseq +Alternate-Mailboxes: jsweet@uci-icse, jsweet@uci-750a +Draft-Folder: drafts +Sequence-Negation: not +bbc: -quiet +bboards: system mh-workers sf-lovers whimsey +comp: -form mycomponents +dist: -annotate -inplace +folder: -noheader +forw: -annotate -inplace -format +mhl: -noclear +next: -noheader +prev: -noheader +prompter: -prepend +repl: -annotate -inplace -cc me +send: -format -msgid +scan: -noheader -time +show: -noheader -format +showproc: mhl +?endverbatim diff --git a/docs/historical/multifarious/diagram3.tex b/docs/historical/multifarious/diagram3.tex new file mode 100644 index 0000000..42d77c0 --- /dev/null +++ b/docs/historical/multifarious/diagram3.tex @@ -0,0 +1,13 @@ +% diagram 3 + + +\verbatim +To: +cc: ,, +Subject: Re: +In-reply-to: Your message of . + +In-reply-to: Your message of . +Fcc: +-------- +?endverbatim diff --git a/docs/historical/multifarious/figure0.pic b/docs/historical/multifarious/figure0.pic new file mode 100644 index 0000000..e7ecd77 --- /dev/null +++ b/docs/historical/multifarious/figure0.pic @@ -0,0 +1,31 @@ +.PS 5.9i +## figure 1 +C1: ellipse "\UA/" +B1: box "\MTA/" with .n at (C1.s.x, C1.s.y-3*lineht) +B8: box "\MTA/" with .w at (B1.e.x+linewid, B1.e.y) +B2: box invis "$\ldots$" with .w at (B8.e.x+linewid, B1.e.y) +B9: box invis "$\ldots$" with .w at (B2.e.x+linewid, B1.e.y) +B3: box "\MTA/" with .w at (B9.e.x+linewid, B1.e.y) +C2: ellipse "\UA/" with .s at (B3.n.x, C1.s.y) +## + arrow from C1.s to B1.n + arrow from B1.e to B8.w + arrow from B8.e to B2.w + arrow from B2.e to B9.w + arrow from B9.e to B3.w + arrow from B3.n to C2.s +## +B4: box width B3.e.x+linewid/3-(B1.w.x-linewid/3) \ + height 3*boxht \ + with .c at B2.c + move to (B4.n.x, B4.n.y-lineht/2); "\MTS/" +## + line dashed "POSTING" "" \ + from (B4.w.x-linewid, B4.n.y+lineht/2) \ + to (C1.s.x, B4.n.y+lineht/2) + line dashed "RECEIPT" "" \ + from (B4.e.x+linewid, B4.n.y+lineht/2) \ + to (C2.s.x, B4.n.y+lineht/2) + move to ((B2.e.x+B9.w.x)/2, B2.s.y); "RELAYING" +## +.PE diff --git a/docs/historical/multifarious/figure0.tex b/docs/historical/multifarious/figure0.tex new file mode 100644 index 0000000..70928ba --- /dev/null +++ b/docs/historical/multifarious/figure0.tex @@ -0,0 +1,110 @@ +\catcode`@=11 +\expandafter\ifx\csname graph\endcsname\relax \alloc@4\box\chardef\insc@unt\graph\fi +\catcode`@=12 +\setbox\graph=\vtop{% + \baselineskip=0pt \lineskip=0pt \lineskiplimit=0pt + \vbox to0pt{\hbox{% + \special{pn 8}% + \special{ar 866 207 311 206 0.000 6.283}% + \rlap{\kern 0.866in\lower 0.249in\hbox to 0pt{\hss \UA/\hss}}% + \special{pa 554 2081}% + \special{pa 554 1665}% + \special{pa 1179 1665}% + \special{pa 1179 2081}% + \special{pa 554 2081}% + \special{fp}% + \rlap{\kern 0.866in\lower 1.915in\hbox to 0pt{\hss \MTA/\hss}}% + \special{pa 1595 2081}% + \special{pa 1595 1665}% + \special{pa 2220 1665}% + \special{pa 2220 2081}% + \special{pa 1595 2081}% + \special{fp}% + \rlap{\kern 1.907in\lower 1.915in\hbox to 0pt{\hss \MTA/\hss}}% + \rlap{\kern 2.948in\lower 1.915in\hbox to 0pt{\hss $\ldots$\hss}}% + \rlap{\kern 3.989in\lower 1.915in\hbox to 0pt{\hss $\ldots$\hss}}% + \special{pa 4718 2081}% + \special{pa 4718 1665}% + \special{pa 5343 1665}% + \special{pa 5343 2081}% + \special{pa 4718 2081}% + \special{fp}% + \rlap{\kern 5.030in\lower 1.915in\hbox to 0pt{\hss \MTA/\hss}}% + \special{ar 5030 207 311 206 0.000 6.283}% + \rlap{\kern 5.030in\lower 0.249in\hbox to 0pt{\hss \UA/\hss}}% + \special{pa 866 415}% + \special{pa 866 1665}% + \special{fp}% + \special{pa 846 1581}% + \special{pa 866 1665}% + \special{fp}% + \special{pa 887 1581}% + \special{pa 866 1665}% + \special{fp}% + \special{pa 1179 1873}% + \special{pa 1595 1873}% + \special{fp}% + \special{pa 1512 1894}% + \special{pa 1595 1873}% + \special{fp}% + \special{pa 1512 1852}% + \special{pa 1595 1873}% + \special{fp}% + \special{pa 2220 1873}% + \special{pa 2636 1873}% + \special{fp}% + \special{pa 2553 1894}% + \special{pa 2636 1873}% + \special{fp}% + \special{pa 2553 1852}% + \special{pa 2636 1873}% + \special{fp}% + \special{pa 3261 1873}% + \special{pa 3677 1873}% + \special{fp}% + \special{pa 3594 1894}% + \special{pa 3677 1873}% + \special{fp}% + \special{pa 3594 1852}% + \special{pa 3677 1873}% + \special{fp}% + \special{pa 4302 1873}% + \special{pa 4718 1873}% + \special{fp}% + \special{pa 4635 1894}% + \special{pa 4718 1873}% + \special{fp}% + \special{pa 4635 1852}% + \special{pa 4718 1873}% + \special{fp}% + \special{pa 5030 1665}% + \special{pa 5030 415}% + \special{fp}% + \special{pa 5051 499}% + \special{pa 5030 415}% + \special{fp}% + \special{pa 5010 499}% + \special{pa 5030 415}% + \special{fp}% + \special{pa 415 2497}% + \special{pa 415 1248}% + \special{pa 5482 1248}% + \special{pa 5482 2497}% + \special{pa 415 2497}% + \special{fp}% + \rlap{\kern 2.948in\lower 1.498in\hbox to 0pt{\hss \MTS/\hss}}% + \rlap{\kern 0.433in\lower 0.999in\hbox to 0pt{\hss POSTING\hss}}% + \rlap{\kern 0.433in\lower 1.165in\hbox to 0pt{\hss \hss}}% + \special{pa 0 1040}% + \special{pa 866 1040}% + \special{da 0.050}% + \rlap{\kern 5.464in\lower 0.999in\hbox to 0pt{\hss RECEIPT\hss}}% + \rlap{\kern 5.464in\lower 1.165in\hbox to 0pt{\hss \hss}}% + \special{pa 5898 1040}% + \special{pa 5030 1040}% + \special{da 0.050}% + \rlap{\kern 3.469in\lower 2.123in\hbox to 0pt{\hss RELAYING\hss}}% + \kern 5.899in + }\vss}% + \kern 2.498in +} diff --git a/docs/historical/multifarious/figure1.pic b/docs/historical/multifarious/figure1.pic new file mode 100644 index 0000000..df5437c --- /dev/null +++ b/docs/historical/multifarious/figure1.pic @@ -0,0 +1,41 @@ +.PS +A: box shaded width 2.5i "\file{\$HOME/} (user's home directory)" +B: box "\profile/" with .nw at (A.sw.x,A.sw.y-lineht) +C: box shaded "\Mail/" with .ne at (A.se.x,A.se.y-lineht) +D: box "\context/" with .n at (B.s.x,B.s.y-lineht) +E: box shaded "\file{inbox/}" with .w at (D.e.x+(linewid/2),D.w.y) +F: box "\file{mhl.format}" with .w at (E.e.x+(linewid/2),E.w.y) +G: box "\file{replcomps}" with .w at (F.e.x+(linewid/2),F.w.y) +H: box shaded "\file{drafts/}" with .w at (G.e.x+(linewid/2),G.w.y) +I: box shaded "\file{chron/}" with .w at (H.e.x+(linewid/2),H.w.y) +J: box width 0.2i height 0.2i "\file{3}" with .n at \ + (E.s.x+(linewid*1.5),E.s.y-lineht) +K: box width 0.2i height 0.2i "\file{2}" with .e at (J.w.x-(linewid/4),J.e.y) +L: box width 0.2i height 0.2i "\file{1}" with .e at (K.w.x-(linewid/4),K.e.y) +M: box width 1i "\sequences/" with .ne at (L.w.x-(linewid/4),L.ne.y) +N: box shaded "\file{yr.1985/}" with .n at (I.s.x,I.s.y-lineht) +O: box shaded "\file{yr.1984/}" with .e at (N.w.x-(linewid/4),N.e.y) +P: box width 0.2i height 0.2i "\file{1}" with .ne at \ + (O.w.x-(linewid/2),O.ne.y) +line dotted from A.n to (A.n.x+(linewid/2),A.n.y+(lineht/2)) +line from A.s to B.n +line from A.s to C.n +line from C.s to D.n +line from C.s to E.n +line from C.s to F.n +line from C.s to G.n +line from C.s to H.n +line from C.s to I.n +line from E.s to M.n +line from E.s to L.n +line from E.s to K.n +line from E.s to J.n +line from H.s to P.n +line dotted from H.s to (H.s.x+(linewid/2),H.s.y-(lineht/2)) +line from I.s to N.n +line from I.s to O.n +line dotted from N.s to (N.s.x-(linewid/2),N.s.y-(lineht/2)) +line dotted from N.s to (N.s.x+(linewid/2),N.s.y-(lineht/2)) +line dotted from O.s to (O.s.x-(linewid/2),O.s.y-(lineht/2)) +line dotted from O.s to (O.s.x+(linewid/2),O.s.y-(lineht/2)) +.PE diff --git a/docs/historical/multifarious/figure1.tex b/docs/historical/multifarious/figure1.tex new file mode 100644 index 0000000..0ebc02d --- /dev/null +++ b/docs/historical/multifarious/figure1.tex @@ -0,0 +1,193 @@ +\catcode`@=11 +\expandafter\ifx\csname graph\endcsname\relax \alloc@4\box\chardef\insc@unt\graph\fi +\catcode`@=12 +\setbox\graph=\vtop{% + \baselineskip=0pt \lineskip=0pt \lineskiplimit=0pt + \vbox to0pt{\hbox{% + \special{pn 8}% + \special{sh}% + \special{pa 0 749}% + \special{pa 0 249}% + \special{pa 2499 249}% + \special{pa 2499 749}% + \special{pa 0 749}% + \special{fp}% + \rlap{\kern 1.249in\lower 0.539in\hbox to 0pt{\hss \file{\$HOME/} (user's home directory)\hss}}% + \special{pa 0 1749}% + \special{pa 0 1249}% + \special{pa 749 1249}% + \special{pa 749 1749}% + \special{pa 0 1749}% + \special{fp}% + \rlap{\kern 0.374in\lower 1.539in\hbox to 0pt{\hss \profile/\hss}}% + \special{sh}% + \special{pa 1749 1749}% + \special{pa 1749 1249}% + \special{pa 2499 1249}% + \special{pa 2499 1749}% + \special{pa 1749 1749}% + \special{fp}% + \rlap{\kern 2.124in\lower 1.539in\hbox to 0pt{\hss \Mail/\hss}}% + \special{pa 0 2749}% + \special{pa 0 2249}% + \special{pa 749 2249}% + \special{pa 749 2749}% + \special{pa 0 2749}% + \special{fp}% + \rlap{\kern 0.374in\lower 2.539in\hbox to 0pt{\hss \context/\hss}}% + \special{sh}% + \special{pa 999 2749}% + \special{pa 999 2249}% + \special{pa 1749 2249}% + \special{pa 1749 2749}% + \special{pa 999 2749}% + \special{fp}% + \rlap{\kern 1.374in\lower 2.539in\hbox to 0pt{\hss \file{inbox/}\hss}}% + \special{pa 1999 2749}% + \special{pa 1999 2249}% + \special{pa 2749 2249}% + \special{pa 2749 2749}% + \special{pa 1999 2749}% + \special{fp}% + \rlap{\kern 2.374in\lower 2.539in\hbox to 0pt{\hss \file{mhl.format}\hss}}% + \special{pa 2999 2749}% + \special{pa 2999 2249}% + \special{pa 3749 2249}% + \special{pa 3749 2749}% + \special{pa 2999 2749}% + \special{fp}% + \rlap{\kern 3.374in\lower 2.539in\hbox to 0pt{\hss \file{replcomps}\hss}}% + \special{sh}% + \special{pa 3999 2749}% + \special{pa 3999 2249}% + \special{pa 4749 2249}% + \special{pa 4749 2749}% + \special{pa 3999 2749}% + \special{fp}% + \rlap{\kern 4.374in\lower 2.539in\hbox to 0pt{\hss \file{drafts/}\hss}}% + \special{sh}% + \special{pa 4999 2749}% + \special{pa 4999 2249}% + \special{pa 5749 2249}% + \special{pa 5749 2749}% + \special{pa 4999 2749}% + \special{fp}% + \rlap{\kern 5.374in\lower 2.539in\hbox to 0pt{\hss \file{chron/}\hss}}% + \special{pa 2024 3449}% + \special{pa 2024 3249}% + \special{pa 2224 3249}% + \special{pa 2224 3449}% + \special{pa 2024 3449}% + \special{fp}% + \rlap{\kern 2.124in\lower 3.389in\hbox to 0pt{\hss \file{3}\hss}}% + \special{pa 1699 3449}% + \special{pa 1699 3249}% + \special{pa 1899 3249}% + \special{pa 1899 3449}% + \special{pa 1699 3449}% + \special{fp}% + \rlap{\kern 1.799in\lower 3.389in\hbox to 0pt{\hss \file{2}\hss}}% + \special{pa 1374 3449}% + \special{pa 1374 3249}% + \special{pa 1574 3249}% + \special{pa 1574 3449}% + \special{pa 1374 3449}% + \special{fp}% + \rlap{\kern 1.474in\lower 3.389in\hbox to 0pt{\hss \file{1}\hss}}% + \special{pa 249 3749}% + \special{pa 249 3249}% + \special{pa 1249 3249}% + \special{pa 1249 3749}% + \special{pa 249 3749}% + \special{fp}% + \rlap{\kern 0.749in\lower 3.539in\hbox to 0pt{\hss \sequences/\hss}}% + \special{sh}% + \special{pa 4999 3749}% + \special{pa 4999 3249}% + \special{pa 5749 3249}% + \special{pa 5749 3749}% + \special{pa 4999 3749}% + \special{fp}% + \rlap{\kern 5.374in\lower 3.539in\hbox to 0pt{\hss \file{yr.1985/}\hss}}% + \special{sh}% + \special{pa 4124 3749}% + \special{pa 4124 3249}% + \special{pa 4874 3249}% + \special{pa 4874 3749}% + \special{pa 4124 3749}% + \special{fp}% + \rlap{\kern 4.499in\lower 3.539in\hbox to 0pt{\hss \file{yr.1984/}\hss}}% + \special{pa 3674 3449}% + \special{pa 3674 3249}% + \special{pa 3874 3249}% + \special{pa 3874 3449}% + \special{pa 3674 3449}% + \special{fp}% + \rlap{\kern 3.774in\lower 3.389in\hbox to 0pt{\hss \file{1}\hss}}% + \special{pa 1249 249}% + \special{pa 1499 0}% + \special{dt 0.050}% + \special{pa 1249 749}% + \special{pa 374 1249}% + \special{fp}% + \special{pa 1249 749}% + \special{pa 2124 1249}% + \special{fp}% + \special{pa 2124 1749}% + \special{pa 374 2249}% + \special{fp}% + \special{pa 2124 1749}% + \special{pa 1374 2249}% + \special{fp}% + \special{pa 2124 1749}% + \special{pa 2374 2249}% + \special{fp}% + \special{pa 2124 1749}% + \special{pa 3374 2249}% + \special{fp}% + \special{pa 2124 1749}% + \special{pa 4374 2249}% + \special{fp}% + \special{pa 2124 1749}% + \special{pa 5374 2249}% + \special{fp}% + \special{pa 1374 2749}% + \special{pa 749 3249}% + \special{fp}% + \special{pa 1374 2749}% + \special{pa 1474 3249}% + \special{fp}% + \special{pa 1374 2749}% + \special{pa 1799 3249}% + \special{fp}% + \special{pa 1374 2749}% + \special{pa 2124 3249}% + \special{fp}% + \special{pa 4374 2749}% + \special{pa 3774 3249}% + \special{fp}% + \special{pa 4374 2749}% + \special{pa 4624 2999}% + \special{dt 0.050}% + \special{pa 5374 2749}% + \special{pa 5374 3249}% + \special{fp}% + \special{pa 5374 2749}% + \special{pa 4499 3249}% + \special{fp}% + \special{pa 5374 3749}% + \special{pa 5124 3999}% + \special{dt 0.050}% + \special{pa 5374 3749}% + \special{pa 5624 3999}% + \special{dt 0.050}% + \special{pa 4499 3749}% + \special{pa 4249 3999}% + \special{dt 0.050}% + \special{pa 4499 3749}% + \special{pa 4749 3999}% + \special{dt 0.050}% + \kern 5.750in + }\vss}% + \kern 4.000in +} diff --git a/docs/historical/multifarious/multifarious.tex b/docs/historical/multifarious/multifarious.tex new file mode 100644 index 0000000..878e1eb --- /dev/null +++ b/docs/historical/multifarious/multifarious.tex @@ -0,0 +1,105 @@ +% run this through PhD-TeX + +\input dcustom +\articlestyle +\input version + +\def\draftext{% + \begingroup + \eightpoint\sf + Reprinted from + {\it Computer Networks and ISDN Systems}, 10(2), + September, {\oldstyle 1985}% + \endgroup +} +\catcode`\@=11 +\def\draftstring{% + \ifnum\pageno>\z@ + \begingroup + \eightpoint\sf + Copyright $\copyright$ {\oldstyle 1985}, + North Holland Publishing Company + \endgroup + \fi +} +\def\uci@footpage{\draftstring\hfil\rm\folio} +\catcode`\@=12 + +\input sfwmac +\def\MTA/{{\sf MTA}} +\def\MTS/{{\sf MTS}} +\def\UA/{{\sf UA}} +\def\MH/{{\sf MH}} + +\def\uitem#1{\item{\underbar{#1}:}} + +\header + MH: A Multifarious User Agent\title + Marshall T.~Rose\\ + Member, Research Technical Staff\\ + Northrop Research and Technology Center$^\dagger$\\ + \\ + Einar A.~Stefferud\\ + President, Network Management Associates$^\ddagger$\\ + and Visiting Lecturer, University of California, Irvine\\ + \\ + Jerry N.~Sweet\\ + Member, Technical Staff\\ + Local Network Systems$^{\bowtie}$\author\info +\footnote{}{\hskip -\parindent $^\dagger$ +One~Research Park, +Palos Verdes Peninsula, CA 90274. +Telephone: 213/377--4811.\hbreak +Computer mail: {\tx MRose\%NRTC@USC-ECL}} +\footnote{}{\hskip -\parindent $^\ddagger$ +17301~Drey Lane, +Huntington Beach, CA 92647. +Telephone: 714/842--3711.\hbreak +Computer mail: {\tx EStefferud@ICS.UCI.EDU}} +\footnote{}{\hskip -\parindent $^{\bowtie}$ +130~McCormick Avenue, Suite~102, +Costa Mesa, CA 92626. +Telephone: 714/754--6631.\hbreak +Computer mail: {\tx JSweet@ICS.UCI.EDU}} + +\centerline{\sc Abstract} % mtr +{\rightskip=0pt +\lp +The UCI version of the Rand Message Handling System (\MH/) is discussed, +including important extensions. +\MH/ is a powerful user agent which operates in the ARPA Internet and UUCP +environments. +In addition to the basic functions provided by a user agent, +such as reading and sending mail, +\MH/ has several distinguishing characteristics which give the user +additional message handling capabilities. +In particular, +\MH/ provides mechanisms for organizing messages, +tailoring its own behavior, +and extending its functions. + +\lp +This document describes \MH/ from several perspectives. +Particular emphasis is given to: +the \MH/ user environment, +advanced features of \MH/ which have proven to be particularly useful for +sophisticated users of electronic mail, +\MH/'s potential as a record manager, +and +\MH/ as a part of a distributed mail environment. +Although \MH/ as been widely used since its creation in 1979, +a discussion of its perspectives and functionality has not appeared in the +open literature. +\par} + +\input text +\input refs +\input appendixA + +\printcontents +\unskip\footnote{}{\hskip -\parindent +This document (version \versiontag/) +was \TeX set \today\ with DISS.STY v\version.} +\showsummary + +\bye diff --git a/docs/historical/multifarious/refs.tex b/docs/historical/multifarious/refs.tex new file mode 100644 index 0000000..cba2736 --- /dev/null +++ b/docs/historical/multifarious/refs.tex @@ -0,0 +1,250 @@ +% references + +\references + +\ref{DCome83} +\by D.~Comer. +\paper The Computer Science Research Network CSnet: +A History and Status Report +\journal Communications of the ACM\volume 26\issue 10 +\month October\year 1983 +\pages 747--753 +\endref + +\ref{DCroc79} +\by D.H.~Crocker, E.S.~Szurkowski, D.J.~Farber. +\paper An Internetwork Memo Distribution Facility~---~MMDF +\inbook Proceedings, +Sixth Data Communications Symposium +\publaddr Asilomar +\month November\year 1979 +\pages 18--25 +\endref + +\ref{DCroc82} +\by D.H.~Crocker. +\paper Standard for the Format of ARPA Internet Text Messages +\paperinfo Request for Comments 822 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month August\year 1982 +\endref + +\ref{DEA} +\book Data Encryption Algorithm +\bookinfo X3.92--1981 +\publ American National Standards Institute +\year 1981 +\endref + +\ref{DKing84} +\by D.P.~Kingston,~III. +\paper MMDFII: A Technical Review +\inbook Proceedings +Usenix Summer '84 Conference +\publaddr Salt Lake City, Utah +\month June\year 1984 +\pages 32--41 +\endref + +\ref{EAllm83} +\by E.~Allman. +\paper SENDMAIL~---~An Internetwork Mail Router +\other +\publ Britton-Lee, Inc. +\publaddr Berkeley, California +\month July\year 1983 +\endref + +\ref{EOlse84} +\by E.W.~Olsen. +\paper NetOS Concepts and Facilities +\other +\publ Local Network Systems, Inc. +\publaddr Costa Mesa, California +\month August\year 1984 +\endref + +\ref{EStef84} +\by E.A.~Stefferud, J.N.~Sweet, T.P.~Domae. +\paper MZnet: Mail Service for Personal Micro-Computer Systems +\inbook Proceedings, +Second International Symposium on Computer Message Systems +\publaddr Nottingham, U.K +\month May\year 1984 +\pages 293--302 +\endref + +\ref{FIKM} +\book Financial Institution Key Management +\bookinfo X9.17--198\_ (draft) +\publ American National Standards Institute +\year 198\_ +\endref + +\ref{FIPS46} +\book Data Encryption Standard +\bookinfo Federal Information Processing Standards, +Publication 46 +\month January\year 1977 +\endref + +\ref{FIPS81} +\book DES Modes of Operation +\bookinfo Federal Information Processing Standards, +Publication 81 +\month December\year 1980 +\endref + +\ref{FIPS98} +\paper Specification for Message Format for Computer Based Message Systems +\other +\publ National Bureau of Standards +\month January\year 1983 +\endref + +\ref{HERMES} +\by Bolt, Beranek, and Newman. +\paper Hermes User's Manual +\paperinfo for TOPS-20 +\other +\publ Bolt, Beranek, and Newman +\publaddr Boston, MA +\month January\year 1979 +\endref + +\ref{IP} +\paper Internet Protocol +\paperinfo Request for Comments 791 (\milstd/ 1777) +\inbook Internet Protocol Transition Workbook +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month September\year 1981 +\endref + +\ref{JReyn84} +\by J.K.~Reynolds. +\paper Post Office Protocol +\paperinfo Request for Comments 918 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month October\year 1984 +\endref + +\ref{LLamp82} +\by L.~Lamport, R.~Shostak, M.~Pease. +\paper The Byzantine Generals Problem +\journal ACM Transactions on Programming Languages and Systems +\volume 4 +\month July\year 1982 +\pages 382--401 +\endref + +\ref{MButl85} +\by M.~Butler, J.B.~Postel, et.~al. +\paper Post Office Protocol - Version~2 +\paperinfo Request for Comments 937 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month February\year 1985 +\endref + +\ref{MRose84a} +\by M.T.~Rose. +\paper The Rand MH Message Handling System: The UCI BBoards Facility +\other +\publ Department of Computer and Information Sciences +\publaddr University of Delaware +\month October\year 1984 +\endref + +\ref{MRose84b} +\by M.T.~Rose. +\paper The Rand MH Message Handling System: Tutorial +\other +\publ Department of Computer and Information Sciences +\publaddr University of Delaware +\month October\year 1984 +\endref + +\ref{MRose85a} +\by M.T.~Rose, J.L.~Romine. +\paper The Rand \MH/ Message Handling System: User's Manual +\paperinfo UCI Version +\other +\publ Department of Information and Computer Science +\publaddr University of California, Irvine +\month January\year 1985 +\endref + +\ref{MRose85b} +\by M.T.~Rose, E.A.~Stefferud. +\paper Proposed Standard for Message Encapsulation +\paperinfo Request for Comments 934 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month January\year 1985 +\endref + +\ref{MRose85c} +\by M.T.~Rose, D.J.~Farber, S.T.~Walker. +\paper Design of the TTI Prototype Trusted Mail Agent +\inbook Proceedings, +Second International Symposium on Computer Message Systems +\publaddr Washington, D.C. +\month September\year 1985 +\toappear +\endref + +\ref{MRose85d} +\by M.T.~Rose, E.A.~Stefferud, J.N.~Sweet. +\paper MH: A Multifarious User Agent +\journal Computer Networks%\volume V\issue N +\toappear +\endref + +\ref{SMTP} +\paper Simple Mail Transfer Protocol +\paperinfo Request for Comments 821 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month August\year 1982 +\endref + +\ref{TCP} +\paper Transmission Control Protocol +\paperinfo Request for Comments 793 (\milstd/ 1778) +\inbook Internet Protocol Transition Workbook +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month September\year 1981 +\endref + +\ref{VVoyd83} +\by V.L.~Voydock, S.T.~Kent. +\paper Security Mechanisms in High-Level Network Protocols +\journal Computing Surveys\volume 15\issue 2 +\month June\year 1983 +\pages 135--171 +\endref + +\ref{WJoy83} +\by W.N.~Joy, E.~Cooper, R.S.~Fabry, S.J.~Leffler, K.~McKusick, D.~Mosher. +\paper 4.2\bsd/ System Manual +\paperinfo Technical Report Number 5 +\publ Computer Systems Research Group, University of California, Berkeley +\month July\year 1983 +\endref + +\ref{X.400} +\book Message Handling Systems: System Model-Service Elements +\bookinfo Recommendation X.400 +\publ International Telegraph and Telephone Consultative Committee (CCITT) +\endref + +\endreferences diff --git a/docs/historical/multifarious/text.tex b/docs/historical/multifarious/text.tex new file mode 100644 index 0000000..de45049 --- /dev/null +++ b/docs/historical/multifarious/text.tex @@ -0,0 +1,1115 @@ +% begin text + +\banner + +\section{Introduction} % mtr +\tagfigure{0}{\MTS/ model}{mtsmodel} + +The UCI version of the Rand Message Handling System, \MH/, +is a user agent. +In the interests of brevity, +we dispense with the usual definition of terms, +refer the reader to Figure~\mtsmodel, +and simply note that \MH/ is not responsible for delivering mail. +Rather, +it interacts with a {\it message transport system}, \MTS/, +at two interfaces: +it sends mail by placing it through a {\it posting slot} to the \MTS/, +and it receives mail by retrieving it through a {\it delivery slot} from the +\MTS/. +Besides these two \MTS/-specific activities, +the tasks which \MH/ addresses are: +the composition of messages +(which may, or may not, be in reference to previously sent messages), +the reading of messages, +and the organization of messages. + +\MH/ was originally developed by the Rand Corporation, +and initially was proprietary software. +The Department of Information and Computer Science at +University of California, Irvine, +shortly after joining the Computer Science Network (CSnet), +acquired a copy of \MH/, +and began additional development of the software. +Since that time, +the Rand Corporation has declared \MH/ to be in the public domain, +and the UCI version of \MH/ has passed through four major releases. + +Much credit must be given to the initial designers and implementors of \MH/: +Bruce Borden, Stockton Gaines, and Norman Shapiro. +Although \MH/ has suffered significant development at UCI +since Rand's initial release, +the fundamental concepts of \MH/'s environs have remained nearly unchanged. +In addition, +the current maintainers of \MH/ gratefully acknowledge the comments of the +many sites which have run various releases of \MH/ in the past. + +\MH/ runs on different versions of the \unix/ operating system +(such as 4.2\bsd/~\unix/ and various flavors of v7~\unix/). +In addition, +\MH/ supports four different \MTS/ interfaces: +\SendMail/\cite{EAllm83}, +the standard mailer for 4.2\bsd/ systems; +\MMDF/\cite{DCroc79} and \MMDFII/\cite{DKing84}, +the Multi-Channel Memo Distribution Facility developed by the University of +Delaware +which forms the software-backbone for CSnet\cite{DCome83} mail relays service; +SMTP, +the ARPA Internet Simple Mail Transfer Protocol\cite{SMTP}; +and, +a stand-alone delivery system. + +The organization of this paper is straight-forward, +given space considerations. +Initially, +the \MH/ philosophy of mail handling is presented, +along with a description of the environment which the \MH/ user is given to +process mail. +Following this, +certain advanced features of \MH/ are discussed in more detail. +In particular, +the notion of a {\it draft folder} is introduced, +which permits the handling of multiple drafts during composition. +In addition, +message selection facilities are described. +Next, +two different aspects of \MH/'s power as a software system are discussed: +record handling, in which \MH/ facilitates record processing systems; +and, +how \MH/ can be employed in a distributed mail environment. +This latter section raises questions as to the location of the posting and +delivery slots, +along with authentication mechanisms. +Finally, +we conclude by discussing areas of future development which \MH/ may endure. + +Although familiarity with \MH/ is not assumed on the part of the reader, +some knowledge of the \unix/ operating system is useful. +Appendix~A gives a short synopsis of the \MH/ commands. + +\section{The \MH/ Philosophy} % mtr +Although \MH/ has many traits which tend to differ it from other user agents, +the design aspect which fundamentally influences the interface between \MH/ +and the user is that it is composed of many small +programs instead of one very large one. +This architecture gives \MH/ much of its strength, +since intermediate and advanced users are able to take advantage of this +flexibility. + +The key to this flexibility is that the \unix/ shell +(usually the {\it C} shell or the {\it Bourne} shell), +is the user's interface to \MH/. +This means that when handling mail, +the entire power of the shell is at the user's disposal in addition to the +facilities which \MH/ provides. +Hence, +the user may intersperse mail handling commands with other commands in an +arbitrary fashion, +making use of command handling capabilities that the user's shell provides. + +Furthermore, +rather than storing messages in a complicated data structure +within a monolithic file, +in \MH/, each message is a \unix/ file, +and each folder (an object which holds groups of messages) +is a \unix/ directory. +That is, +the directory and file structure of \unix/ is used directly. +As a result, +any \unix/ file-handling command can be applied to any message. + +To the novice, +this may not make much sense or may not seem important. +From three years of observation, we have seen that +as users of \MH/ have become more experienced +they have found this capability to be quite attractive. +In addition, +this approach is often quite pleasing to system implementors, +because it minimizes the amount of coding to be performed +and, +given a modular design, +changes to the software system can be maintained easily. +Our empirical findings confirm our theoretical expectations regarding the +\MH/ architecture. + +Having described how \MH/ fits into the \unix/ environment, +we now discuss the mail handling environment which is available to the \MH/ +user. + +\subsection{The \MH/ Environs} % jns +\MH/ provides a complementary environment to the user's shell. +While the shell maintains a context related to the user's focus in the file +system (a {\it current working directory\/}), +mail handling is performed in a separate mail folder context. +Operations on mail can therefore be +performed entirely without regard to the current file system context, +although \MH/ does not prevent the user from making use of that context. +Certain mail handling functions do make use of information +maintained by the shell. +For instance, by setting certain shell parameters, +called {\it environment variables}, +alternate mail handling contexts can be selected. + +\MH/ conventions often have direct analogs to shell or file system +conventions. +The shell has a current working directory; \MH/ has a current mail folder. +When the user begins a session on the system, +the user's ``home directory'' is the base context; +\MH/'s default base area, the \Mail/ directory, +is found under the user's home directory. +The user's default shell parameters are set upon beginning a new +session from a startup profile +(called \file{.profile} for \pgm{sh} users +or \file{.cshrc} for \pgm{csh} users); +the default parameters for \MH/ commands are taken from a file called +\profile/ in the user's home directory. +The shell has an {\it environment\/}; +\MH/ has a \context/ file. +Each of the user's directories has files; +each of the user's \MH/ folders has messages. + +These parallels have a basis not only in \MH/'s high level mail +handling model, +but also in the way low level shell and file +system conventions have been abstracted to implement \MH/ conventions. +Directories are folders; files are messages. +The \Mail/ directory forms the root of a virtual file subsystem within +which the user operates on mail without disturbing files outside this +mail handling domain. + +\tagfigure{1}{\MH/ File Subsystem\\(directories are shaded)}{MHfiles} +\tagdiagram{2}{Elaborated \MH/ Profile}{elab} +\subsection{The \MH/ Profile} +The \profile/ contains plaintext that describes the user's default mail +handling parameters. +An example of an elaborated profile is shown in Figure~\elab. + +Each line in the profile consists of an \MH/ parameter name terminated +with a colon (`:') followed by parameter values. +In this example, +``global'' parameters are listed in the first few lines, +with program-specific parameters following. +Each \MH/ program examines global parameters as well as any parameter +with the same name by which the program was invoked. +For example, +the \pgm{comp} program, which is used to compose new messages to be sent, +examines the entries: +\medskip +{\advance\leftskip by2\parindent +\uitem{Path} +The path parameter specifies the name of the \MH/ root directory. +This is normally named \Mail/. + +\uitem{Editor} +The editor parameter specifies which text editor is first invoked to create +the header information and body of a message draft. +In most cases, this editor is the \MH/ default editor, \pgm{prompter}. + +\uitem{Draft-Folder} +This parameter specifies a folder within which new message drafts +are to be created. +The draft folder mechanism is an advanced feature of \MH/ that is +given separate treatment in a later segment of this paper. + +\uitem{comp} +The program-specific parameter examined by \pgm{comp} lists +user-default options. +\par} +\medskip + +\noindent +Other programs invoked by \pgm{comp} +(e.g. \pgm{prompter} and \pgm{send\/}) would examine their own profile +entries as well. +\MH/ programs have reasonable compiled-in defaults and also permit options to +be specified on the shell command line with which the programs are invoked. +The order of override precedence is: command line options first, +\profile/ options second, and compiled-in defaults last. + +Each program option is prefixed by a dash (`-') following the \unix/ +convention. +Unlike most \unix/-style options, +however, the options are words rather than single letters. +An option may be abbreviated to an unambiguous prefix. +Each \MH/ program has a \switch{help} option that +displays a brief summary of the program's available options. + +\subsection{Folders and Messages} +In a typical paper-oriented office, +new correspondence arrives and is stacked in an ``in box'', +while outgoing correspondence is placed in an ``out box''. +Processed material is stored in +appropriately labelled folders and filed away for future reference. +This state of affairs is modelled in \MH/ with {\it folders} +and {\it messages}, +which are simply text files (one message per file) stored +under the folder directories. +Most of the user's folders are kept under the \Mail/ directory. + +A folder is given an alphanumeric name permissible within the \unix/ file +system structure, +and each message stored therein is given a numeric name in the range 1..1999. +The upper bound on message numbers was +selected for efficient access to an internal representation, +an array of bits (a ``bit set''), +with each bit indicating the presence or +absence of a message with a number in the range 1..1999. +This internal representation also restricts the order of multiple +message reference to an ascending numerical sequence. +Other representations have been studied +(e.g., an unsorted sparse array of integers), +but have been rejected for reasons of efficiency. +Folders may contain subfolders, +corresponding to \unix/ tree-structured directories. +For the sake of completeness, +it might be said that ``sub-messages'' exist insofar as message ``digests'', +which nest messages inside other messages, +are supported by certain advanced \MH/ functions. + +The current working folder is the default folder selected for almost +all \MH/ commands. +To select explicitly a folder for mail handling +commands entails specifying the name of the folder, prefixing the name +with a plus-symbol (`+'). +An example is: \example refile\ 1\ 2\ 3\ +chron/yr.1984\endexample +This command re-files the selected messages +(\file{1}, \file{2}, and \file{3} here) +from the current working folder to a subfolder under the +folder \file{chron} named \file{yr.1984}. +To see the folder/subfolder relationship, refer to Figure~\MHfiles. + +The plus-symbol notation is specific to those folders immediately +subordinate to the \Mail/ directory. +This is analogous to ``absolute pathnames'' in \unix/---those +files whose positions in the file system +hierarchy are given starting with the system root, +names prefixed with the slash character (`/'). +To specify folders subordinate to the current working folder, +an at-sign (`@') is substituted for (`+'). +It is permitted to use \unix/ dot notation to specify parent folders. +Referring to Figure~\MHfiles, +if the current working folder were \eg{+chron/yr.1985}, +then the command \example folder\ @../yr.1984\endexample +\noindent +selects the subfolder \file{yr.1984} in the parent directory +\file{chron}, as the new current working folder. +While the current working folder is normally the default, it may be +specified explicitly as \eg{@.}. + +\subsection{The Context File} +The \profile/ contains static information about the user's +preferences. +A \context/ file, contained in the \Mail/ directory, +contains the current mail handling environment information, +which changes as different folders, messages, and named message lists +(called {\it message sequences\/}) are selected, created, and updated. +This information is retained between invocations of \MH/ commands, +and is preserved across system sessions. + +\tagdiagram{3}{Elaborated Reply Template}{replcomps} +\subsection{Templates} +The message draft composition functions +(\pgm{comp}, \pgm{repl}, \pgm{forw}, and \pgm{dist\/}) +use certain default header formats, +which may be changed by the user through the use of message templates. +The exact format of a template may vary among commands. +An example of an elaborated template for the reply command \pgm{repl} is +shown in Figure~\replcomps. + +This template specifies how the automatically-generated header for a +draft message in reply to a source message is to be formatted. +The syntax is capable of directing output of header lines based on the +presence or absence of other header lines in the source message. + +Other kinds of templates are used to specify the display formats of +messages, or to specify the way that messages are to be included in +other messages. This is similar to the functionality provided by BBN +Hermes\cite{HERMES}, +another powerful mail handling system for \tops20/ based systems. + +\subsection{Explaining All This to New Users} +There do exist people who do not like \MH/.% +\nfootnote{At UCI, these +people are reported to be weeded out at an early stage and quietly taken to the +Ministry of Love to be made {\it uncrimethinkful}.} +The emerging pattern of complaints from such people indicates that \MH/ +accentuates their perceptions of the deficiencies of \unix/, +to wit, lack of interactivity and lack of easily found help facilities. +Also, +some feel that the proximity of the mail handling environment to the +operating system is a distraction, rather than an asset. +There have been some attempts to make \MH/ more accessible to users who prefer +menu-oriented or monolithic mail system interfaces.% +\nfootnote{For example, +\pgm{mhe} from Brian Reid of Stanford University +and \pgm{emh} from Marshall Rose +are instances of macro packages for James Gosling's \EMACS/ extensible editor, +while the \pgm{hm} program from Jim Guyton of the Rand Corporation is a +monolithic \MH/ interface. +As of this writing, +none of these programs is documented in the literature.} + +In truth, +users new to \unix/ do not always acclimate to \MH/ easily. +The command set is undistinguishably mixed in with all other \unix/ +utilities, and it is not easy, without aid of a manual, +to pick out the necessary commands. +\MH/ does not provide any ``hand-holding'' to guide +the user through a minimally useful command subset. + +Another problem is that the initial default user profile is too often sparse, +containing only a \eg{Path:} parameter. +\MH/ commands will perform adequately without specific information +in the profile, +so new users often neglect optionally useful \MH/ capabilities, +eventually becoming frustrated with the limited default capabilities, +yet unable to determine without researching through the user's manual, +the necessary options that would solve their problems. + +The currently available means for learning how to use \MH/ are: +\medskip +{\advance\leftskip by 2\parindent +\item{$\bullet$} +One-on-one tutoring by knowledgeable \MH/ users, +which has so far shown the best results with new users. + +\item{$\bullet$} +Consulting the {\it \MH/ Tutorial\/}\cite{MRose84b}, +or the {\it \MH/ User's Manual\/}\cite{MRose85a}. + +\item{$\bullet$} +Using the \pgm{msh} (``\MH/ shell'') program as a training shell to read +bulletin boards. +The \pgm{msh} command is an interactive program that provides some help +messages and can list available \MH/ commands. +\par} +\medskip + +\noindent +No on-line tutorial materials are presently distributed with the \mh5 +system, although there are some plans in the works to provide a program +to help with setting up the user profile that would also provide +operational tips for \MH/ and \unix/. + +It should be noted that these perceived defects of \MH/ do not affect its +utility any more than analogous problems with any operating system +will diminish its actual capabilities. +Users may quarrel with the means chosen for orchestrating \MH/, +but the fact remains that \MH/ is a very +useful set of mail handling tools that is flexible, +infinitely interoperable with other \unix/ text handling tools, +and yet simple enough for new users to grasp once they are given the +proper start. +The fact that better tutorial materials and training do not exist only means +that some further work needs to be done in the area of user-education. + +\section{A Few Advanced Features} % mtr +We now consider certain advanced features in \MH/. +These features have been chosen to demonstrate some useful capabilities +available to the \MH/ user. +It should be noted that many capabilities of \MH/, +such as shell scripts for extensibility, +mail delivery hooks, +the personal aliasing facility, +and so forth, +are not described here for lack of space. + +\subsection{Draft Folders} % jns +The {\it draft folder} facility provides a method by which several +message drafts can be simultaneously composed and maintained until +sent. +The rationale for this is that partially composed message drafts, +perhaps elaborate sets of separate messages, +can be incrementally completed, +while a folder provides a consistent organization for drafts in progress. +This is comparable to similar situations in the ``paper world'' where +contracts, business correspondence, and other communications, +rather than being created serially with each posted in turn before composing +the next, +are usually left in various stages of +completion before they are eventually mailed. + +The \eg{Draft-Folder:} parameter value in the \MH/ profile is used to +specify a default draft folder, +where each draft is given a number and an ``artificial'' date stamp. +Provided that the proper header fields have been completed, +a \pgm{scan} listing of the draft folder provides a summary of +each draft in progress: +to whom the message is to be sent, +the subject, +the date of the draft's initial creation and optionally, +the current size of the draft in terms of characters. +Experienced users of \MH/ may often keep as many as five to ten unfinished +drafts in their draft folder. +``Draft clutter'' can be remedied easily with the \pgm{rmm} command. + +\subsection{Message Selection} % stef +\MH/ commands accept {\it message sequence} specifications to specify which +\arg{msg} or \arg{msgs} are to be operated upon. +Here are some examples: +\example scan\ 1\ 3\ 5\ 19\ 185\endexample +to get a scan listing of messages 1, 3, 5, 19 and 185. +\example scan\ pseq\endexample +to get a scan listing of whatever message sequence was given to the previous +MH command (in this case 1, 3, 5, 19, and 185). +\example show\ first\ last\endexample +to get a display of the first and last messages in the folder. +The \MH/ sequences named \eg{first} and \eg{last} are system defined pseudo +sequences which act like explicit sequences when given to MH commands. +Others are \eg{cur}, \eg{next}, \eg{prev}, +and \eg{all} which respectively specify the ``current'' message, +the ``next'' after cur, +the ``previous'' message before cur, +or ``all'' messages in the current-folder. +The \pgm{scan} assumes \eg{all} while show assumes \eg{cur}, +unless overridden on the command line. +Over-ride precedence is: command-line first, +\profile/ second, +and compiled-in default last. + +Users can define additional sequences for similar use, +but must avoid using reserved names. +A few optional sequence names have been preempted by \MH/, +such as \eg{pseq} to mean the +``sequence used by the previous MH command,'' +and \eg{unseen} to mean the ``messages not yet seen by the user.'' +Sometimes these preempted names can be changed by resetting them in the +user's \MH/ profile, +but these facilities are beyond the scope of this discussion. + +The mark command can be used to set the values for user-defined sequences: +\example mark\ 1\ 3\ 5\ -seq\ zzz\\ + mark\ 4\ 5\ 9\ -seq\ zzz\ -nozero\endexample +will create a user-sequence named \eg{zzz} and put the sequence \eg{1 3 5} +in it. +The \pgm{mark} command assumes that any prior content in an +existing user-sequence should be ``zeroed'' before the new sequence value is +recorded. +This can be prevented with a \switch{nozero} switch on the command line, +to add \eg{4 5 9} to the original \eg{1 3 5} to yield \eg{1 3 4 5 9}. +\example mark\ pseq\ zzz\ -seq\ zzznew\endexample +will create a new sequence named \eg{zzznew} and set its value to the combined +(inclusive or) of the existing user-sequences in \eg{pseq} and \eg{zzz} for +its value. + +Another more powerful way to set the values of a user-sequence is with +the pick command, which provides full string search capabilities: +\example pick\ -from\ mrose\ -seq\ yyy\\ + pick\ -from\ mrose\ -seq\ yyy\ -list\endexample +will search though all the \eg{From:} fields in the current folder for the +string \eg{mrose} and place the list of ``hits'' +in the sequence named \eg{yyy}. +The \switch{list} switch will cause the resulting list to also be displayed on +the user's terminal. +If no \switch{seq\ name} switch is given, +pick will assume \switch{list} +and will simply display the resulting list of hits on the user's terminal. + +This \switch{list} behavior of pick allows users to take advantage of the +\unix/ backquoting facility to embed searches in other \MH/ commands. +\example scan\ \bq{pick\ -from\ mrose}\endexample +will produce a scan listing of \switch{from\ mrose} hits because the +\unix/ shell will spawn a process to execute the +\eg{pick\ -from\ mrose} segment and return the \switch{list} +results as the message sequence to be scanned. +\example mark\ pseq\ -seq\ zzz\endexample +could then be used to capture the ``previous sequence'' in zzz for later use. + +One last facility should be mentioned here. +It is also possible to negate a sequence to specify a new sequence. +The default negation string is \eg{not}. +\example scan\ notzzz\\ + mark\ notzzz\ -seq\ zzznot\endexample +will give the user a scan listing of all the messages in the current folder +that are not included in the sequence \eg{zzz}. +The mark example will of course record the negation of zzz in zzznot. +It is a bad idea to use the string \eg{not} as the beginning of any +user-sequence name, +if \eg{not} is defined as the negation string. +(Users can choose a different negation string.) + +From this discussion, +it should be clear that \MH/ provides a uniform set of ways to capture +and use sequences to augment the user's short- and long-term +memory and to manipulate lists of interesting messages. +User-sequences are normally stored as RFC822 labeled text lines in a file +(e.g., \sequences/) +in the folder with the messages referred to in the sequence. +If a user does not have write access to a folder, +then the \MH/ \pgm{mark} and \pgm{pick} commands will +create a ``private'' sequence in the user's \context/ file. +Switches are available to give the user control over +the choice of \switch{private} or \switch{public} sequence options. + +Since user-sequences are stored as ordinary text lines in RFC822 labeled +fields, +there is no prohibition against someone writing programs to perform +any kind of useful manipulation on \MH/ sequences. +Boolean operators can be implemented, +or complex indexing structures could be developed to serve special purposes. +If a DBMS can utilize \unix/ pathnames or \MH/ \arg{+folder} and +message names, +then the full power of the DBMS might be applied. +The intention of \MH/ development teams has always been to leave open the +widest possible array of options for later extension. +The only restrictions should be the user's ingenuity, +programming prowess, and the available machine resources. +Unfortunately these resources always seem to be available in +limited quantities. + +\subsection{Distribution Lists} % mtr +\MH/ has a convenient interface to the UCI BBoards facility\cite{MRose84a}.% +\nfootnote{The UCI BBoards facility can run under either the \MMDF/ or +\SendMail/, +or in a more restricted form under stand-alone \MH/.} +This facility permits the efficient distribution of interest group messages +on a single host, +to a group of hosts under a single administration, +and to the ARPA Internet community. + +Described simply, an interest group is composed of a number of subscribers +with a common interest. +These subscribers post mail to a single address, known as a +{\it distribution} address (e.g., {\tx MH-Workers@UCI}). +From this distribution address, a copy of the message is sent to each +subscriber. +Each group has a {\it moderator}, +which is the person that runs the group. +This moderator can usually be reached at a special address, +known as a {\it request} address (e.g., {\tx MH-Workers-Request@UCI}). +Usually, the responsibilities of the moderator are quite simple, +since the mail system handles distribution to subscribers automatically. +In some interest groups, +instead of each separate message being distributed directly to subscribers, +a batch of (related) messages are put into a {\it digest} format by the +moderator and then sent to the subscribers. +Although this requires more work on the part of the moderator +and introduces delays, +such groups tend to be better organized. + +Unfortunately, some problems arise with the scheme outlined above. +First, if two users on the same host subscribe to the same interest group, +two copies of the message will be delivered. +This is wasteful of both processor and disk resources at that host. + +Second, +some groups carry a lot of traffic. +Although subscription to a group does indicate interest on the part of a +subscriber, +it is usually not interesting to get 50 messages or so delivered to +the user's private maildrop each day, +interspersed with {\it personal} mail, +that is likely to be of a much more important and timely nature. + +Third, if a subscriber's address in a distribution list +becomes ``bad'' somehow and causes failed mail to be returned, +the originator of the message is normally notified. +It is not uncommon for a large list to have several bogus addresses. +This results in the originator being flooded with ``error messages'' from +mailers across the Internet stating that a given address on the list was +bad. +Needless to say, +the originator usually does not care if the bogus addresses got a copy +of the message or not. +The originator is merely interested in posting a message +to the group at large. +On the other hand, +the moderator of the group does care if there are bogus addresses on the list, +but ironically does not receive notification. + +To solve all of these problems, +the UCI BBoards facility introduces a new entity into the picture: +all interest group mail is handled by a special component of the mail system. +The distribution address maps to a special {\it channel} that performs +several actions. +First, if local delivery is to be performed, +then a copy of the message is placed in a global maildrop for the interest +group with a timestamp and a unique number. +Local users can read messages posted for the interest group by reading this +``public'' maildrop. +Second, if further distribution is to take place, +a copy of the message is sent to the distribution address in such a way that +if any of the addresses are bogus, +failure notices will be returned to the local maintainer of the group +address list, rather than the originator of the message. + +This scheme has several advantages: +First, messages delivered to the local host are processed and saved once +in a globally accessible area. +The UCI BBoards facility supports software which allows a user to query an +interest group for new messages and to read and process +those messages in the \MH/-style. +Second, once a host administrator subscribes to an interest group, +each user can join or quit the list's readership without +contacting anyone. +Third, a hierarchical distribution scheme can be constructed to +reduce the amount of delivery effort. +Fourth, errors are prevented from propagating. +When an address on the distribution list goes bad, +the list moderator who is immediately responsible for the address is notified. +If a local moderator does not exist, +then the local PostMaster is notified (not the global group moderator). + +In addition to solving the problems outlined above, +the UCI BBoards facility supports several other capabilities. +BBoards may be automatically archived in order to conserve disk space and +reduce processing time when reading current items. +Also, +the archives can be separately maintained on tape for access by interested +researchers. + +Special alias files may be generated which allow the \MH/ user to shorten +address type-in. +For example, instead of sending to {\tx SF-Lovers@Rutgers}, +a user of \MH/ usually sends to \eg{SF-Lovers} and the \MH/ aliasing +facility automatically makes the appropriate expansion in the headers of the +outgoing message. +Hence, +the user need only know the name of an interest group and not its global +network address. + +Finally, the UCI BBoards facility supports {\it private} interest groups +using the \unix/ group access mechanism. +This allows a group of people on the same or different machines to conduct a +private discussion. + +The practical upshot of all this is that the UCI BBoards facility automates +the vast majority of BBoards handling from the point of view of both the +PostMaster and the user. + +\MH/ provides three programs to deal with interest groups. +The \pgm{bbc} program is used to check on the status of one or more groups, +and to optionally start an \MH/ shell on those groups which the user is +interested in. +The \pgm{bbl} program can be used to perform manual maintenance on a +discussion group beyond the normal automatic capabilities of the UCI BBoards +facility. +Finally, +the \pgm{msh} program implements an \MH/ shell for reading BBoards, +in which nearly all of the \MH/ commands are implemented in a single program. + +Observant readers may note that the use of \pgm{msh} is contrary to the \MH/ +philosophy of using relatively small, single-purposed programs. +Sadly, +the authors admit that this is true. +In an effort to avoid some problems with shared-access and message naming +conventions (which are beyond the scope of this paper), +BBoards are kept in maildrop format (monolithic) instead of folders. +Some research has gone into overcoming this problem in order to restore +\MH/'s purity of purpose, +but all solutions proposed to date are either unworkable or require +significant recoding of \MH/'s internals. + +\subsection{Encapsulation} % mtr +As described above, +some interest groups appear in digest form. +This means that the messages which appear in such a forum actually +encapsulate other messages in their body. +It turns out that the generation of a digest is not at all unlike the +generation of a draft which forwards one or more messages. +In RFC934\cite{MRose85b}, +a method is proposed to standardize message encapsulation for the ARPA +Internet community. +\MH/ uses this method for the generation of digests, +forwardings, +and blind-carbon-copies. + +A key requisite for using an encapsulation technique for digests and +forwardings is the ability to later decapsulate the contents. +Without this ability, +the forwarded messages are of little use to the recipients because they can +not be distributed, forwarded, replied-to, searched-for, +or otherwise processed as separate individual messages. +In the case of a digest, +a bursting capability is especially useful. +Not only does the ability to burst a digest permit a recipient of the digest +to reply to an individual digestified message, +but it also allows the recipient to selectively process the other messages +encapsulated in the digest. + +For example, +a single digest issue usually contains more than one topic. +A subscriber may only be interested in a subset of the topic discussed in a +particular issue. +With a bursting capability, +the subscriber can burst the digest, +scan the headers, +and process those messages which are of interest. +The others can be ignored, +if the user so desires. + +Note that with proper encapsulation technology, +one can argue for the re-distribution of messages simply becoming +special cases of message forwarding. +For example, +the NBS Standard for Mail Interchange\cite{FIPS98} +and the recent CCITT draft on Mail Handling Systems standards\cite{X.400} +both discourage the re-distribution facility in favor of forwarding +by encapsulation. + +\subsection{Encapsulation and Blind-Carbon-Copies} % mtr +Many user agents support a blind-carbon-copy facility. +\MH/ implements this using a form of encapsulation. +It may not be apparent to the reader as to why encapsulation of the original +message is a good way to deliver blind-carbon-copies. +With a blind-carbon-copy facility, +two types of addressees are possible in the draft to be sent: +{\it visible} and {\it blind}. +The visible recipients are listed as addresses in the \eg{To:} and \eg{cc:} +fields, +and the blind recipients are listed in the \eg{Bcc:} fields of the draft. +The idea behind this facility is that copies of the draft which are +delivered to the \eg{To:} and \eg{cc:} recipients should show the visible +recipients only. + +A major concern with a blind-carbon-copy facility +is that blind recipients should be prevented from accidentally replying to the +message in such a way that the visible recipients are included as addressees +in the reply. + +There are several methods to implement this facility. +Most rely on posting two drafts with the \MTS/. +One draft is destined for visible recipients, +and simply lacks the \eg{Bcc:} fields of the original draft. +The second draft is destined for the blind recipients. +The question then arises as to what form this latter draft posted should take. + +One approach might be to disable the \eg{To:} and \eg{cc:} fields of the +draft sent to the blind recipients +(e.g., by prefixing the string \eg{BCC-} to these fields). +Unfortunately, +this is often very confusing to the blind recipients +because it differs from what the visible recipients got. +Although accidental replies are not possible, +it is often difficult to tell that the message received is the result of a +blind-carbon-copy. + +The method used by \MH/ is to post two drafts, +a visible draft for the visible recipients, +and a blind draft for the blind recipients. +The visible draft consists of the original draft without any \eg{Bcc:} fields. +The blind draft contains the visible message as a forwarded message. +The headers for the blind draft contain the minimal RFC822 headers +(\eg{From:} and \eg{Date:}) +and, +if the original draft had a ``Subject:'' field, +then this header field is also included. +In addition, +\MH/ alerts the recipient that the message is a blind-carbon-copy by +placing this information in the initial encapsulation information in the +blind recipient's copy. +This scheme prevents inadvertent replies while allowing the recipient +full access to an exact copy of what was sent to the visible recipients. + +\section{\MH/ as a Record Handler} % stef +Although message format standards such as RFC822 +(and its predecessors) were originally devised to facilitate +computer processing of interpersonal messages, +there is no special reason why the concept should be +limited to interpersonal message processing. +Messages are just one of a variety of useful record forms that might +be created in one place and transfered to another for processing. +In this regard, +RFC822 wisely left open the option for higher level applications to use +arbitrary header names or field contents by proscribing \MTS/ use +of header names beginning with \eg{X-}. + +\MH/ carries though on this idea by allowing the \pgm{pick} command +to accept any arbitrary field name for string searches, +so MH users can select on any arbitrary field name without prior definition. +Beyond this, +since all messages are simply files in \unix/ directories, +applications can be developed to apply any programmable process to +any selected message. + +For example, +a {\it Time Card Form} might be called up by an \MH/ user with +\example comp\ -form\ timecomps\endexample +to enter time and attendance information into \eg{X-time$\tdots$:} fields in a +draft message record. +The \file{timecomps} form would include the address of a +supervisor who should validate the information, +along with empty fields to be filled in with data. +In fancy applications, +this might be done with a sophisticated interactive data entry tool +which would validate entered information, +but this is an open choice within the \MH/ framework. +Another +alternative would be to use a received message as the blank form to add a +degree of central control over time and attendance reporting forms. + +Receiving supervisors could simply register approval by using the \MH/ +\pgm{dist} command to resend subordinates' time cards to higher approval +levels, or +to send them to a time card collection address. +The \MH/ \pgm{dist} command automatically inserts ``ReSent'' header fields +showing who resent it and the resending date. +Alternatively, +the MH \pgm{forw} command could be used to transfer a batch of approved time +cards to the next processing station. +If desired, a new ``approval'' command could be programmed to provide a more +trusted authentication, perhaps with encryption of the content. +Trusted mail systems, such as \trustedmail/\cite{MRose85c}, +are becoming available for this purpose. + +At the final collection destination, +an automated User Agent could be programmed to directly load the data into +the Time and Attendance DBMS by +parsing and decoding the data contained in the \eg{X-time$\tdots$:} fields. +It might be noted that while the RFC822 does not restrict the +internal forms of messages, +it is necessary to conform to the interchange standard if specialized filters +for message headers are not to be built to serve as {\it export laundries} +(a term originating with Stephen H.~Willson to describe conformance +transformations in \Ada/). + +\subsection{Mapping Between Record Modes (DBMS/MHS)} +This time and attendance example suggests that it is possible to define +one-to-one mappings between RFC822 fields and DBMS data elements. +For every DBMS data element definition, +there is a potential corresponding RFC822 transferable equivalent +definition which can facilitate mail transfers of record information. +Indeed, +a large portion of the definitional work is already done where a Data Base +has already been defined. +All that remains is to define the RFC822 equivalents. + +The suggestion that a batch of time cards be forwarded inside a ``cover'' +message implies that it is possible in the \MH/ framework to recursively +bundle messages within messages, and be able to recover the originals for +separate processing at a receiving destination. +The \MH/ \pgm{burst} command can be applied recursively for this purpose +because \MH/ encapsulation uses an unambiguous scheme to delimit messages +that are enclosed inside other messages. +Thus, +it should be possible to extract a structured set of records from a DBMS +and mail the set to a foreign site for processing, or reinsertion into +another DBMS. +As long as the DBMS data element definitions +correctly correspond to the RFC822 definitions, +it is not even necessary +for the source and destination DBMS systems to be the same. + +From this discussion, +it is concluded that the \MH/ framework can be useful +for building distributed record handling systems where people at widely +scattered locations must create and submit record forms for processing +at distant locations. +This might prove to be especially effective when +a mail system is also needed for other communication purposes. +A network of sales offices is a good example, +where general message service would be used for communications +with remote manufacturing and distribution centers, +and could also be used for an order entry system. + +Another example might be for structured communications, as occur in +requisition and purchasing systems. +Requisitions could be filled in and mailed to approval offices, +and resent or forwarded to others for action. +At some point, +the requisitions could flow into other other more suitable +processing systems as needed. +At the very least, the ability to originate +requisitions can be distributed to anyone with access to a mail system +that can originate a proper requisition form. + +As a last example, +\MH/ already supports group discussions with its BBoard facilities +which allow for automatic sorting of mail by group address, +with shared private or public group access to contributed items. +As has been shown to be possible with administrative record systems, +there is no obvious limit to the ways that group discussion traffic +might be organized into structured collections with indices, +annotations, or reference pointers +to aid in making conference archives more useful. +Indeed, \MH/ tools could even be used to feed discussion items into +existing conference systems. + +\section{Distributed Mail} % mtr +Next, we consider how \MH/ might be used in a distributed mail environment. +Two schemes are discussed: +one in which connectivity is high and connections are relatively ``cheap'', +and one in which connectivity is low and connections are ``expensive''. + +\subsection{The ARPA Internet Environs} % mtr +The ARPA Internet community consists of many types of heterogeneous nodes. +Some hosts are large mainframe computers, +others are personal workstations. +All communicate using the \milstd/ TCP/IP protocol suite\cite{IP,TCP}. +Messages which conform to the Standard for the Format of ARPA Internet Text +Messages\cite{DCroc82} +are exchanged using the Simple Mail Transfer Protocol\cite{SMTP}. + +On smaller nodes in the ARPA Internet it is often impractical to maintain +a message transport agent. +For example, +a workstation may not have sufficient resources (cycles, disk space) +in order to permit an SMTP server and associated local mail delivery system +to be kept resident and continuously running. +Furthermore, +the workstation could be off-net for extended periods of time. +Similarly, +it may be expensive (or impossible) to keep a personal computer +interconnected to an IP-style network for long periods of time. +In other words, +the node is lacking the resource known as ``connectivity''. + +Despite this, +it is often desirable to be able to process mail with \MH/ on these smaller +nodes, +and they often support a user agent to aid the tasks of mail handling. +To solve this problem, +a network node which can support a message transport entity +(known as {\it service} host) offers +a maildrop service to these less endowed nodes +(known as {\it client} hosts). +The Post Office Protocol\cite{JReyn84} (POP) is intended to permit a +workstation to dynamically access a maildrop on a service host to pick-up +mail.% +\nfootnote{Actually, +there are three different descriptions of the POP. +The first, cited in \cite{JReyn84}, +was the original description of the protocol, +which suffered from certain problems. +Since then, +two alternate descriptions have been developed. +The official revision of the POP\cite{MButl85}, +and the revision of the POP which \MH/ uses +(which is documented in an internal memorandum in the \MH/ release). +This paper considers the POP in the context of the \MH/ release.} +The level of access includes the ability to +determine the number of messages in the maildrop and the size of each message, +as well as to retrieve and delete individual messages. +More sophisticated implementations of the POP server +are able to distinguish between the header and body portion of each message, +and send $n$ lines of a message to the POP client. +This capability is useful in thinly connected environments where conservation +of bandwidth is important. +By utilizing a more intelligent POP client, +a user may generate ``scan~listings'' and dynamically decide which messages +are worth taking delivery on. +The philosophy of the POP is to put intelligence in the +POP clients and not the POP servers. + +The underlying paradigm in which the POP functions is that of a +split-slot/remote-\UA/ model. +The client host (such as a workstation) is without a co-resident +{\it message transport agent} (\MTA/), +and thus makes use of a service host with an \MTA/ to obtain posting (SMTP) +and delivery (POP) services. +The entity which supports this type of environment is called a remote-\UA/ +since the user agent resides on a different host than its associated message +transport agent. + +One very important issue which must be raised at this point is one of +authentication. +The POP requires that a client identify itself to the server using a +server-specific user-id and a server/user-specific password. +This authentication is required to prevent unauthorized entities from +accessing a maildrop on a POP service host. +It must be emphasized that the POP client is not a ``trusted'' entity of the +\MTS/ in any sense at all. + +Ideally, +one would also like to authenticate mail as it is posted on the POP service +host using the SMTP. +Currently, +in the ARPA Internet community, +no authentication is done with SMTP transactions. +This is considered a shortcoming by those interested in researching the +split-\UA/ model of distributed mail. +The MZnet environment, +discussed in the next section, +has authentication facilities for posting mail. + +The current release of \MH/ supports the above model fully: +a POP client program is available to retrieve a maildrop on a POP service +host. +In addition, +using the SMTP configuration for delivery in \MH/, +a user is able to specify a search-list of service hosts (and networks) +with which to try to post mail. +Using this search-list, +when an \MH/ user posts a draft, +the \pgm{post} program will attempt to establish an SMTP connection +with each host in the list to post the message until it succeeds. +Initial experimentation with the split-\UA/ +in a local network environment has proved quite successful. + +\subsection{The MZnet Environs} % jns +In 1983, +the MZnet project\cite{EStef84} at the University of California, Irvine +set out to study the problems involved with bringing +Internet-class mail handling facilities to personal computers. +The project used Apple~II computers running the CP/M 2.2 operating system. +Programming was done in a subset of the C language called BDS C. +The transport system was based on the \MMDF/ PhoneNet software, +and implemented a {\it split-slot} arrangement between a personal computer +and a larger, +centralized mail distribution system that performed user +authentication and provided a relatively secure mail transfer channel. +The user agent, CP/MH, was based on \MH/. + +A conclusion of the experiment was that small personal computer systems +with dial-up phone connections constrain user agent systems design in +ways that require use of a {\it split-slot} interface between the \UA/ +and its supporting \MTA/, and that this interface +best provides the required services if it has error controlled command +and data transfer facilities, with interactive behavior. +Another conclusion indicated that a good design for a user agent in such +a small personal computer +environment could be based on a very modular architecture, +such as \MH/. +A final conclusion was that session-level authentication of the client \UA/ +is required for both posting and delivery. + +It should be noted that the MZnet project had a profound influence on the +development of the POP used by \MH/. +A somewhat more detailed discussion of the relations between the two +environments can be found in the POP description contained +in the \MH/ release. + +\section{A Final Note} % jns +With the fifth major release of the \MH/ system, +it has become clear that most major increases in functionality can come +only at the expense of either efficiency or portability. +Although there has been great effort to keep \MH/ portable to a number of +\unix/ implementations,% +\nfootnote{As of this writing, +there are approximately 75~sites running \mh5 +on five different implementations of \unix/.} +the divergence in process management facilities, +file system enhancements, +and even C~compiler capabilities +has already presented obstacles to some attempts to rehost the \MH/ code. + +There has been some discussion of implementing specialized \MH/ daemons +that maintain context information over one or more sessions, +thus decreasing the amount of overhead involved in starting each \MH/ command. +Unfortunately, +even if such daemons were to be implemented, +they would be very difficult to move to versions of \unix/ +without sophisticated process management facilities, +and even then the differences in ``philosophies'' +of process management\cite{WJoy83,EOlse84} +would tend to keep such daemons system specific. +A better solution seems to be simply to tune existing code. + +\section{Acknowledgements} +The authors would like to thank Norman Z.~Shapiro and +Phyllis Kantar of the Rand Corporation for their invaluable comments during +the preparation of this paper. + +\section{Distribution Information} +For information concerning distribution mechanics for the current release of +\MH/, please contact: +$$\displayindent=\leftskip \advance\displayindent by1.5\parindent + \halign{\leftline{#}\cr + Support Group\cr + Attn: MH Distribution\cr + Department of Information and Computer Science\cr + University of California, Irvine\cr + Irvine, CA 92717\qquad USA\cr + \cr + 714/856--6852\cr +}$$ diff --git a/docs/historical/multifarious/version b/docs/historical/multifarious/version new file mode 100644 index 0000000..fb1e7bc --- /dev/null +++ b/docs/historical/multifarious/version @@ -0,0 +1 @@ +54 diff --git a/docs/historical/multifarious/version.sh b/docs/historical/multifarious/version.sh new file mode 100644 index 0000000..9ec1e79 --- /dev/null +++ b/docs/historical/multifarious/version.sh @@ -0,0 +1,9 @@ +if [ ! -r version ]; then echo 0 > version; fi +touch version +echo '\catcode`\#=12' > version.tex +awk ' { version = $1 + 1; }\ +END { printf "\\def\\versiontag/{#1.%d}%%\n", version >> "version.tex"; \ + printf "%d\n", version > "version"; }' < version +echo '\def\versiondate/{'`date`'}%' >> version.tex +echo '\catcode`\#=6' >> version.tex +echo '\tell{Version \versiontag/ of \versiondate/}' >> version.tex diff --git a/docs/historical/multifarious/version.tex b/docs/historical/multifarious/version.tex new file mode 100644 index 0000000..7d936c0 --- /dev/null +++ b/docs/historical/multifarious/version.tex @@ -0,0 +1,5 @@ +\catcode`\#=12 +\def\versiontag/{#1.54}% +\def\versiondate/{Wed May 21 21:04:22 PDT 1986}% +\catcode`\#=6 +\tell{Version \versiontag/ of \versiondate/} diff --git a/docs/historical/mznet/Makefile b/docs/historical/mznet/Makefile new file mode 100644 index 0000000..2c9aec6 --- /dev/null +++ b/docs/historical/mznet/Makefile @@ -0,0 +1,48 @@ +######################################################################### +# Instructions to Make, for generation of nice-looking papers using LaTeX +######################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if latex \\nonstopmode\\input $<; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# mznet +############################################################# + +i-all: mznet.dvi + +i-print: mznet.dvi true + dvisp $(DFLAGS) -J MZnet mznet + + +# customization files, et. al., not included below +mznet.dvi: mznet.tex figure1.tex figure2.tex + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f mznet.dvi mznet.imp + +clean:; rm -f mznet.log _* + +true:; diff --git a/docs/historical/mznet/READ-ME b/docs/historical/mznet/READ-ME new file mode 100644 index 0000000..f8d2a04 --- /dev/null +++ b/docs/historical/mznet/READ-ME @@ -0,0 +1,18 @@ +Copyright information for "MZnet: Mail Service for Personal Micro- +Computer Systems", Stefferud, Einar; Sweet, Jerry; Domae, Terry. + +Title: Computer Message Services, Proceedings of the IFIP WG 6.5 + Conference (Nottingham, U.K., May 1-4, 1984) + +Editor: H. T. Smith + +Copyright transferred to the International Federation for Information +Processing. Authors reserve all proprietary rights and the right +to use all or part of this article in future works of their own. +In the case of republication of the whole article or parts thereof, +in journals or reprint publications by third party, written permission, +written permission must be obtained from IFIP or its designated +Publisher to be signed by at least one of the authors (who agrees +to inform the others, if any) or, in the case of a "work made for hire", +by the employer. + diff --git a/docs/historical/mznet/figure1.pic b/docs/historical/mznet/figure1.pic new file mode 100644 index 0000000..b8a5cef --- /dev/null +++ b/docs/historical/mznet/figure1.pic @@ -0,0 +1,44 @@ +.PS +B1: box "user" +B2: box "UA" with .n at (B1.s.x, B1.s.y-(lineht/2)) +B3: box "MTA" with .n at (B2.s.x, B2.s.y-(lineht*4)) +B4: box "PhoneNet" with .n at (B3.s.x, B3.s.y-lineht) +B5: box "{\it modem}" with .n at (B4.s.x, B4.s.y-lineht) +B6: box "{\it modem}" with .w at (B5.e.x+(linewid*2), B5.e.y) +B7: box "PhoneNet" with .s at (B6.n.x, B4.s.y) +B8: box "MTA" with .s at (B7.n.x, B3.s.y) +B9: box "MTA" with .w at (B8.e.x+linewid, B8.e.y) +B10: box "PhoneNet" with .n at (B9.n.x, B7.n.y) +B11: box "{\it modem}" with .s at (B10.s.x, B6.s.y) +B12: box "{\it modem}" with .w at (B11.e.x+(linewid*2), B11.e.y) +B13: box "PhoneNet" with .s at (B12.s.x, B10.s.y) +B14: box "MTA" with .s at (B13.n.x, B3.s.y) +B15: box "UA" with .s at (B14.n.x, B2.s.y) +B16: box "user" with .s at (B15.n.x, B1.s.y) +line from B1.s to B2.n +line from B2.s to B3.n +line from B3.s to B4.n +line from B4.s to B5.n +line from B5.e to B6.w +line from B6.n to B7.s +line from B7.n to B8.s +line from B8.e to B9.w +line from B9.s to B10.n +line from B10.s to B11.n +line from B11.e to B12.w +line from B12.n to B13.s +line from B13.n to B14.s +line from B14.n to B15.s +line from B15.n to B16.s +line dashed from (B8.e.x+(linewid/2), B8.e.y-(lineht/2)) to \ + (B8.e.x+(linewid/2), B6.s.y) +line dotted from (B2.sw.x+(linewid/8), B3.n.y+(lineht*1.5)) to \ + (B2.se.x-(linewid/8), B3.n.y+(lineht*1.5)) +line dotted from (B15.sw.x+(linewid/8), B3.n.y+(lineht*1.5)) to \ + (B15.se.x-(linewid/8), B3.n.y+(lineht*1.5)) +move to (B1.n.x, B1.n.y+lineht); "{\tt Any Host}" +move to (B16.n.x, B1.n.y+lineht); "{\tt Any Other Host}" +move to (B8.e.x+(linewid/2), B1.n.y+lineht); "{\tt Relay Host}" +move to (B2.s.x+(linewid/2), B3.n.y+(lineht*1.75)); "{\it slot}" +move to (B15.s.x-(linewid/2), B3.n.y+(lineht*1.75)); "{\it slot}" +.PE diff --git a/docs/historical/mznet/figure1.tex b/docs/historical/mznet/figure1.tex new file mode 100644 index 0000000..26ac160 --- /dev/null +++ b/docs/historical/mznet/figure1.tex @@ -0,0 +1,182 @@ +\catcode`@=11 +\expandafter\ifx\csname graph\endcsname\relax \alloc@4\box\chardef\insc@unt\graph\fi +\catcode`@=12 +\setbox\graph=\vtop{% + \baselineskip=0pt \lineskip=0pt \lineskiplimit=0pt + \vbox to0pt{\hbox{% + \special{pn 8}% + \special{pa 0 999}% + \special{pa 0 499}% + \special{pa 749 499}% + \special{pa 749 999}% + \special{pa 0 999}% + \special{fp}% + \rlap{\kern 0.374in\lower 0.791in\hbox to 0pt{\hss user\hss}}% + \special{pa 0 1749}% + \special{pa 0 1249}% + \special{pa 749 1249}% + \special{pa 749 1749}% + \special{pa 0 1749}% + \special{fp}% + \rlap{\kern 0.374in\lower 1.541in\hbox to 0pt{\hss UA\hss}}% + \special{pa 0 4249}% + \special{pa 0 3749}% + \special{pa 749 3749}% + \special{pa 749 4249}% + \special{pa 0 4249}% + \special{fp}% + \rlap{\kern 0.374in\lower 4.041in\hbox to 0pt{\hss MTA\hss}}% + \special{pa 0 5249}% + \special{pa 0 4749}% + \special{pa 749 4749}% + \special{pa 749 5249}% + \special{pa 0 5249}% + \special{fp}% + \rlap{\kern 0.374in\lower 5.041in\hbox to 0pt{\hss PhoneNet\hss}}% + \special{pa 0 6249}% + \special{pa 0 5749}% + \special{pa 749 5749}% + \special{pa 749 6249}% + \special{pa 0 6249}% + \special{fp}% + \rlap{\kern 0.374in\lower 6.041in\hbox to 0pt{\hss {\it modem}\hss}}% + \special{pa 1749 6249}% + \special{pa 1749 5749}% + \special{pa 2499 5749}% + \special{pa 2499 6249}% + \special{pa 1749 6249}% + \special{fp}% + \rlap{\kern 2.124in\lower 6.041in\hbox to 0pt{\hss {\it modem}\hss}}% + \special{pa 1749 5249}% + \special{pa 1749 4749}% + \special{pa 2499 4749}% + \special{pa 2499 5249}% + \special{pa 1749 5249}% + \special{fp}% + \rlap{\kern 2.124in\lower 5.041in\hbox to 0pt{\hss PhoneNet\hss}}% + \special{pa 1749 4249}% + \special{pa 1749 3749}% + \special{pa 2499 3749}% + \special{pa 2499 4249}% + \special{pa 1749 4249}% + \special{fp}% + \rlap{\kern 2.124in\lower 4.041in\hbox to 0pt{\hss MTA\hss}}% + \special{pa 2999 4249}% + \special{pa 2999 3749}% + \special{pa 3749 3749}% + \special{pa 3749 4249}% + \special{pa 2999 4249}% + \special{fp}% + \rlap{\kern 3.374in\lower 4.041in\hbox to 0pt{\hss MTA\hss}}% + \special{pa 2999 5249}% + \special{pa 2999 4749}% + \special{pa 3749 4749}% + \special{pa 3749 5249}% + \special{pa 2999 5249}% + \special{fp}% + \rlap{\kern 3.374in\lower 5.041in\hbox to 0pt{\hss PhoneNet\hss}}% + \special{pa 2999 6249}% + \special{pa 2999 5749}% + \special{pa 3749 5749}% + \special{pa 3749 6249}% + \special{pa 2999 6249}% + \special{fp}% + \rlap{\kern 3.374in\lower 6.041in\hbox to 0pt{\hss {\it modem}\hss}}% + \special{pa 4749 6249}% + \special{pa 4749 5749}% + \special{pa 5499 5749}% + \special{pa 5499 6249}% + \special{pa 4749 6249}% + \special{fp}% + \rlap{\kern 5.124in\lower 6.041in\hbox to 0pt{\hss {\it modem}\hss}}% + \special{pa 4749 5249}% + \special{pa 4749 4749}% + \special{pa 5499 4749}% + \special{pa 5499 5249}% + \special{pa 4749 5249}% + \special{fp}% + \rlap{\kern 5.124in\lower 5.041in\hbox to 0pt{\hss PhoneNet\hss}}% + \special{pa 4749 4249}% + \special{pa 4749 3749}% + \special{pa 5499 3749}% + \special{pa 5499 4249}% + \special{pa 4749 4249}% + \special{fp}% + \rlap{\kern 5.124in\lower 4.041in\hbox to 0pt{\hss MTA\hss}}% + \special{pa 4749 1749}% + \special{pa 4749 1249}% + \special{pa 5499 1249}% + \special{pa 5499 1749}% + \special{pa 4749 1749}% + \special{fp}% + \rlap{\kern 5.124in\lower 1.541in\hbox to 0pt{\hss UA\hss}}% + \special{pa 4749 999}% + \special{pa 4749 499}% + \special{pa 5499 499}% + \special{pa 5499 999}% + \special{pa 4749 999}% + \special{fp}% + \rlap{\kern 5.124in\lower 0.791in\hbox to 0pt{\hss user\hss}}% + \special{pa 374 999}% + \special{pa 374 1249}% + \special{fp}% + \special{pa 374 1749}% + \special{pa 374 3749}% + \special{fp}% + \special{pa 374 4249}% + \special{pa 374 4749}% + \special{fp}% + \special{pa 374 5249}% + \special{pa 374 5749}% + \special{fp}% + \special{pa 749 5999}% + \special{pa 1749 5999}% + \special{fp}% + \special{pa 2124 5749}% + \special{pa 2124 5249}% + \special{fp}% + \special{pa 2124 4749}% + \special{pa 2124 4249}% + \special{fp}% + \special{pa 2499 3999}% + \special{pa 2999 3999}% + \special{fp}% + \special{pa 3374 4249}% + \special{pa 3374 4749}% + \special{fp}% + \special{pa 3374 5249}% + \special{pa 3374 5749}% + \special{fp}% + \special{pa 3749 5999}% + \special{pa 4749 5999}% + \special{fp}% + \special{pa 5124 5749}% + \special{pa 5124 5249}% + \special{fp}% + \special{pa 5124 4749}% + \special{pa 5124 4249}% + \special{fp}% + \special{pa 5124 3749}% + \special{pa 5124 1749}% + \special{fp}% + \special{pa 5124 1249}% + \special{pa 5124 999}% + \special{fp}% + \special{pa 2749 4249}% + \special{pa 2749 6249}% + \special{da 0.050}% + \special{pa 62 2999}% + \special{pa 687 2999}% + \special{dt 0.050}% + \special{pa 4812 2999}% + \special{pa 5437 2999}% + \special{dt 0.050}% + \rlap{\kern 0.374in\lower 0.041in\hbox to 0pt{\hss {\tt Any Host}\hss}}% + \rlap{\kern 5.124in\lower 0.041in\hbox to 0pt{\hss {\tt Any Other Host}\hss}}% + \rlap{\kern 2.749in\lower 0.041in\hbox to 0pt{\hss {\tt Relay Host}\hss}}% + \rlap{\kern 0.624in\lower 2.916in\hbox to 0pt{\hss {\it slot}\hss}}% + \rlap{\kern 4.874in\lower 2.916in\hbox to 0pt{\hss {\it slot}\hss}}% + \kern 5.500in + }\vss}% + \kern 6.250in +} diff --git a/docs/historical/mznet/figure2.pic b/docs/historical/mznet/figure2.pic new file mode 100644 index 0000000..a622071 --- /dev/null +++ b/docs/historical/mznet/figure2.pic @@ -0,0 +1,41 @@ +.PS +B1: box "user" +B2: box "UA" with .n at (B1.s.x, B1.s.y-(lineht/2)) +B3: box "MTA" with .n at (B2.s.x, B2.s.y-(lineht*4)) +B4: box "PhoneNet" with .n at (B3.s.x, B3.s.y-lineht) +B5: box "{\it modem}" with .n at (B4.s.x, B4.s.y-lineht) +B6: box "{\it modem}" with .w at (B5.e.x+(linewid*2), B5.e.y) +B7: box "PhoneNet" with .s at (B6.n.x, B4.s.y) +B8: box "MTA" with .s at (B7.n.x, B3.s.y) +B9: box "MZnet" with .s at (B8.ne.x+(linewid/2), B8.n.y+lineht) +B10: box "PhoneNet" with .n at (B9.se.x+(linewid/2), B7.n.y) +B11: box "{\it modem}" with .s at (B10.s.x, B6.s.y) +B12: box "{\it modem}" with .w at (B11.e.x+(linewid*2), B11.e.y) +B13: box "PhoneNet" with .s at (B12.s.x, B10.s.y) +B14: box "MZnet" with .s at (B13.n.x, B9.s.y) +B15: box "UA" with .s at (B14.n.x, B2.s.y) +B16: box "user" with .s at (B15.n.x, B1.s.y) +line from B1.s to B2.n +line from B2.s to B3.n +line from B3.s to B4.n +line from B4.s to B5.n +line from B5.e to B6.w +line from B6.n to B7.s +line from B7.n to B8.s +line from B8.n to (B9.s.x-(boxwid/4), B9.s.y) +line from (B9.s.x+(boxwid/4), B9.s.y) to B10.n +line from B10.s to B11.n +line from B11.e to B12.w +line from B12.n to B13.s +line from B13.n to B14.s +line from B14.n to B15.s +line from B15.n to B16.s +line dashed from (B9.s.x, B9.s.y-(lineht/2)) to (B9.s.x, B6.s.y) +line dotted from (B2.sw.x+(linewid/8), B9.e.y) to (B2.se.x-(linewid/8), B9.e.y) +line dotted from B9.e to B14.w +move to (B1.n.x, B1.n.y+lineht); "{\tt Any Host}" +move to (B16.n.x, B1.n.y+lineht); "{\tt PC}" +move to (B9.n.x, B1.n.y+lineht); "{\tt MZnet Host}" +move to (B9.e.x+linewid, B9.e.y+(lineht/4)); "{\it split slot}" +move to (B2.s.x+(linewid/2), B9.e.y+(lineht/4)); "{\it slot}" +.PE diff --git a/docs/historical/mznet/figure2.tex b/docs/historical/mznet/figure2.tex new file mode 100644 index 0000000..7d18dc3 --- /dev/null +++ b/docs/historical/mznet/figure2.tex @@ -0,0 +1,182 @@ +\catcode`@=11 +\expandafter\ifx\csname graph\endcsname\relax \alloc@4\box\chardef\insc@unt\graph\fi +\catcode`@=12 +\setbox\graph=\vtop{% + \baselineskip=0pt \lineskip=0pt \lineskiplimit=0pt + \vbox to0pt{\hbox{% + \special{pn 8}% + \special{pa 0 999}% + \special{pa 0 499}% + \special{pa 749 499}% + \special{pa 749 999}% + \special{pa 0 999}% + \special{fp}% + \rlap{\kern 0.374in\lower 0.791in\hbox to 0pt{\hss user\hss}}% + \special{pa 0 1749}% + \special{pa 0 1249}% + \special{pa 749 1249}% + \special{pa 749 1749}% + \special{pa 0 1749}% + \special{fp}% + \rlap{\kern 0.374in\lower 1.541in\hbox to 0pt{\hss UA\hss}}% + \special{pa 0 4249}% + \special{pa 0 3749}% + \special{pa 749 3749}% + \special{pa 749 4249}% + \special{pa 0 4249}% + \special{fp}% + \rlap{\kern 0.374in\lower 4.041in\hbox to 0pt{\hss MTA\hss}}% + \special{pa 0 5249}% + \special{pa 0 4749}% + \special{pa 749 4749}% + \special{pa 749 5249}% + \special{pa 0 5249}% + \special{fp}% + \rlap{\kern 0.374in\lower 5.041in\hbox to 0pt{\hss PhoneNet\hss}}% + \special{pa 0 6249}% + \special{pa 0 5749}% + \special{pa 749 5749}% + \special{pa 749 6249}% + \special{pa 0 6249}% + \special{fp}% + \rlap{\kern 0.374in\lower 6.041in\hbox to 0pt{\hss {\it modem}\hss}}% + \special{pa 1749 6249}% + \special{pa 1749 5749}% + \special{pa 2499 5749}% + \special{pa 2499 6249}% + \special{pa 1749 6249}% + \special{fp}% + \rlap{\kern 2.124in\lower 6.041in\hbox to 0pt{\hss {\it modem}\hss}}% + \special{pa 1749 5249}% + \special{pa 1749 4749}% + \special{pa 2499 4749}% + \special{pa 2499 5249}% + \special{pa 1749 5249}% + \special{fp}% + \rlap{\kern 2.124in\lower 5.041in\hbox to 0pt{\hss PhoneNet\hss}}% + \special{pa 1749 4249}% + \special{pa 1749 3749}% + \special{pa 2499 3749}% + \special{pa 2499 4249}% + \special{pa 1749 4249}% + \special{fp}% + \rlap{\kern 2.124in\lower 4.041in\hbox to 0pt{\hss MTA\hss}}% + \special{pa 2374 3249}% + \special{pa 2374 2749}% + \special{pa 3124 2749}% + \special{pa 3124 3249}% + \special{pa 2374 3249}% + \special{fp}% + \rlap{\kern 2.749in\lower 3.041in\hbox to 0pt{\hss MZnet\hss}}% + \special{pa 2999 5249}% + \special{pa 2999 4749}% + \special{pa 3749 4749}% + \special{pa 3749 5249}% + \special{pa 2999 5249}% + \special{fp}% + \rlap{\kern 3.374in\lower 5.041in\hbox to 0pt{\hss PhoneNet\hss}}% + \special{pa 2999 6249}% + \special{pa 2999 5749}% + \special{pa 3749 5749}% + \special{pa 3749 6249}% + \special{pa 2999 6249}% + \special{fp}% + \rlap{\kern 3.374in\lower 6.041in\hbox to 0pt{\hss {\it modem}\hss}}% + \special{pa 4749 6249}% + \special{pa 4749 5749}% + \special{pa 5499 5749}% + \special{pa 5499 6249}% + \special{pa 4749 6249}% + \special{fp}% + \rlap{\kern 5.124in\lower 6.041in\hbox to 0pt{\hss {\it modem}\hss}}% + \special{pa 4749 5249}% + \special{pa 4749 4749}% + \special{pa 5499 4749}% + \special{pa 5499 5249}% + \special{pa 4749 5249}% + \special{fp}% + \rlap{\kern 5.124in\lower 5.041in\hbox to 0pt{\hss PhoneNet\hss}}% + \special{pa 4749 3249}% + \special{pa 4749 2749}% + \special{pa 5499 2749}% + \special{pa 5499 3249}% + \special{pa 4749 3249}% + \special{fp}% + \rlap{\kern 5.124in\lower 3.041in\hbox to 0pt{\hss MZnet\hss}}% + \special{pa 4749 1749}% + \special{pa 4749 1249}% + \special{pa 5499 1249}% + \special{pa 5499 1749}% + \special{pa 4749 1749}% + \special{fp}% + \rlap{\kern 5.124in\lower 1.541in\hbox to 0pt{\hss UA\hss}}% + \special{pa 4749 999}% + \special{pa 4749 499}% + \special{pa 5499 499}% + \special{pa 5499 999}% + \special{pa 4749 999}% + \special{fp}% + \rlap{\kern 5.124in\lower 0.791in\hbox to 0pt{\hss user\hss}}% + \special{pa 374 999}% + \special{pa 374 1249}% + \special{fp}% + \special{pa 374 1749}% + \special{pa 374 3749}% + \special{fp}% + \special{pa 374 4249}% + \special{pa 374 4749}% + \special{fp}% + \special{pa 374 5249}% + \special{pa 374 5749}% + \special{fp}% + \special{pa 749 5999}% + \special{pa 1749 5999}% + \special{fp}% + \special{pa 2124 5749}% + \special{pa 2124 5249}% + \special{fp}% + \special{pa 2124 4749}% + \special{pa 2124 4249}% + \special{fp}% + \special{pa 2124 3749}% + \special{pa 2562 3249}% + \special{fp}% + \special{pa 2937 3249}% + \special{pa 3374 4749}% + \special{fp}% + \special{pa 3374 5249}% + \special{pa 3374 5749}% + \special{fp}% + \special{pa 3749 5999}% + \special{pa 4749 5999}% + \special{fp}% + \special{pa 5124 5749}% + \special{pa 5124 5249}% + \special{fp}% + \special{pa 5124 4749}% + \special{pa 5124 3249}% + \special{fp}% + \special{pa 5124 2749}% + \special{pa 5124 1749}% + \special{fp}% + \special{pa 5124 1249}% + \special{pa 5124 999}% + \special{fp}% + \special{pa 2749 3499}% + \special{pa 2749 6249}% + \special{da 0.050}% + \special{pa 62 2999}% + \special{pa 687 2999}% + \special{dt 0.050}% + \special{pa 3124 2999}% + \special{pa 4749 2999}% + \special{dt 0.050}% + \rlap{\kern 0.374in\lower 0.041in\hbox to 0pt{\hss {\tt Any Host}\hss}}% + \rlap{\kern 5.124in\lower 0.041in\hbox to 0pt{\hss {\tt PC}\hss}}% + \rlap{\kern 2.749in\lower 0.041in\hbox to 0pt{\hss {\tt MZnet Host}\hss}}% + \rlap{\kern 3.624in\lower 2.916in\hbox to 0pt{\hss {\it split slot}\hss}}% + \rlap{\kern 0.624in\lower 2.916in\hbox to 0pt{\hss {\it slot}\hss}}% + \kern 5.500in + }\vss}% + \kern 6.250in +} diff --git a/docs/historical/mznet/mznet.bbl b/docs/historical/mznet/mznet.bbl new file mode 100644 index 0000000..3144d22 --- /dev/null +++ b/docs/historical/mznet/mznet.bbl @@ -0,0 +1,52 @@ +\begin{thebibliography}{5.} +\bibitem{ARPANET-Literature} SRI-NIC, ARPANET Directory, +Network Information Center, SRI International, Menlo Park, California +(November 1980). +\bibitem{CACM-83} Comer, D., A Computer Science Research Network CSNET: +A History and Status Report, Communications of the ACM, volume 26, number 10 +(October 1983) 747-753. +\bibitem{USENET-Literature} Emerson, S. L., USENET: A Bulletin Board +for Unix Users. BYTE, volume 8, number 10 (October 1983) 219-236. +\bibitem{Vittal81} Vittal, J., MSG: A Simple Message System, in: +Uhlig (editor), Proceedings of the IFIP TC-6 International Symposium on +Computer Message Systems (North-Holland, April 1981). +\bibitem{Deutsch81} Deutsch, D., Design of a Message Format Standard, in: +Uhlig (editor), Proceedings of the IFIP TC-6 International Symposium on +Computer Message Systems (North-Holland, April 1981). +\bibitem{Pickens81} v.Bochmann, G. and Pickens, J. R., A Methodology +for the Specification of a Message Transport System, in: Uhlig (editor), +Proceedings of the IFIP TC-6 International Symposium on Computer Message +Systems (North-Holland, April 1981). +\bibitem{Kerr81} Kerr, I. H., Interconnection of Electronic Mail Systems, +in: Uhlig (editor), Proceedings of the IFIP TC-6 International Symposium +on Computer Message Systems (North-Holland, April 1981). +\bibitem{RFC-822} Crocker, D., Standard for the Format of ARPA Internet +Text Messages (RFC 822) Network Information Center, SRI International, +Menlo Park, California (August 1982). +\bibitem{NBS} NBS, Message Format for Computer-Based Message Systems, +U.S. National Bureau of Standards FIPS Publication 98 (March 1983). +\bibitem{CCITT} CCITT Study Group VII/5, Draft Recommendation +X.MHS1: Message Handling Systems: System Model---Service Elements (version 2), +Technical Report, International Telegraph and Telephone Consultative +Committee (CCITT) (December 1982). +\bibitem{Rose84} Rose, M., Low Tech Connections into the ARPA Internet: +The RawPacket Split-Gateway, University of California Irvine +Techical Report number 216 (February 1984). +\bibitem{MMDF} Crocker, D., Szurkowski, E., Farber, D. J., An Internet +Memo Distribution Facility---MMDF, Proceedings of the Sixth IEEE Data +Communications Symposium (November 1979). +\bibitem{Rose83-1} Rose, M., The ZOTnet---A Local Area Mailing Network, +University of California Irvine Technical Report number 200 (January 1983). +\bibitem{CSNET-UCI} CSNET-CIC, Focus on the University of California, Irvine, +CSNET News 2, Bolt, Beranek, and Newman, Cambridge, Massachusetts +(October 1983). +\bibitem{Rose83-2} Rose, M., Achieving Interoperability Between +Two Domains---Connecting the ZOTnet and UUCP Computer Mail Networks, +University of California Irvine Technical Report number 201 (January 1983). +\bibitem{RFC-MMM} Rose, M., Proposed Standard for Message Munging (RFC 886), +Network Information Center, SRI International, Menlo Park, California +(December 1983). +\bibitem{MH} Borden, B. S., Gaines, R. S., and Shapiro, N.Z., +The Rand MH Message Handling System: User's Manual +(Rand Corporation, March 1983). +\end{thebibliography} diff --git a/docs/historical/mznet/mznet.tex b/docs/historical/mznet/mznet.tex new file mode 100644 index 0000000..05ec3bf --- /dev/null +++ b/docs/historical/mznet/mznet.tex @@ -0,0 +1,583 @@ +% run through through LaTeX + +\documentstyle[12pt]{article} +\setcounter{page}{0} +\pagestyle{empty} + +\hyphenation{Phone-Net} + +\def\tagfigure#1#2#3{% + \begin{figure}[t] + \hrule + \vskip.5\baselineskip + \begin{small}\rm + \input#1\relax + \centerline{\box\graph} + \end{small} + \vskip.5\baselineskip plus.5\baselineskip + \caption{#2} + \label{#3} + \vskip2pt + \hrule + \end{figure} +} + +\begin{document} + +\title{MZnet: Mail Service for Personal Micro-Computer Systems} +\author{Einar Stefferud\\ + \it President,\\ + \it Network Management Associates\\ + and\\ + \it Visiting Lecturer,\\ + \it in Information and Computer Science\\ + \it University of California at Irvine\\ \quad\\ +Jerry Sweet\\ + \it Department of Information and Computer Science\\ + \it University of California at Irvine\\ \quad\\ +Terrance Domae\\ + \it School of Engineering\\ + \it University of California at Los Angeles} +\date{} +\maketitle + +\newpage + +\begin{abstract} +Traditional computer mail systems involve a co-resident User Agent (UA) +and Mail Transfer System (MTS) on a time-shared host computer +which may be connected to other hosts in a network, +with new mail posted or delivered directly through +co-resident mail-slot programs. +To introduce personal micro-computers (PCs) into this environment +requires modification of the traditional mail system architecture. +To this end, the MZnet project uses a {\it split-slot} model, +placing UA programs on the PCs while leaving MTA programs +on a mail relay host which can provide authentication and buffering. +The split-slot arrangement might be viewed as a new protocol level which +operates somewhere between the currently defined MTS-MTS and UA-UA levels. +\end{abstract} + +\newpage\pagestyle{plain}\pagenumbering{arabic} + + \section* {Introduction} +Mail systems were born and have grown up on large central +time sharing systems, +often imbedded in large networks of inter-operating computers with +a set of distributed processes automatically transferring mail +between users. +This is certainly the case with the U.S. Department of Defense (DoD) +Advanced Research Projects Agency Network (ARPANET) +\cite{ARPANET-Literature} +where much of the original computer network mail systems +research and development has taken place. +Other mail networks such as the Computer Science Network +\cite{CACM-83} +sponsored by the U.S. National Science Foundation, +have also used relatively large shared computers +lodged in an institutional setting, +though they are often connected together with ordinary dial-up +telephone links to form a large geographic network. +Another U.S. example is USENET +\cite{USENET-Literature} +which connects thousands of Unix\footnote{UNIX is +a Trademark of Bell Laboratories, Inc.} +systems together with informally-supported dial telephone links. +Although there have been several attempts, there appear to be no +successful mail networks based on small personal computers, +such as those that use the CP/M\footnote{CP/M is a +Trademark of Digital Research, Inc.} +or MS-DOS\footnote{MS-DOS is a Trademark of Microsoft Corporation.} +operating systems. + +\tagfigure{figure1}{The MHS Model}{mhsmodel} +The accepted architectural model (see Figure~\ref{mhsmodel}) +for computer network mail +(first articulated by the IFIP 6.5 Systems Environment Working Group) +involves a User Agent (UA) which posts new mail items through a mail slot +\cite{Vittal81,Deutsch81,Pickens81,Kerr81} +to a Mail Transfer Agent (MTA) which delivers posted items +to designated UA recipients through corresponding delivery slots. +When mail is to be delivered to a UA on another host, it is transferred +first to another MTA on the recipient user's host, which in turn puts +the mail item through its local delivery slot. +In this model, a Mail Transfer System (MTS) may be viewed +as a collection of MTAs with network connections among them +to provide Mail Transfer Services for a large number of users on +different host computers. + +Replicating this UA/MTA/MTS model on a personal micro-computer (PC) +is not an easy task. +Aspects of PCs that make support of this model difficult include +limited storage capacities, +limited processing capabilities, +and the fact that PCs are geared to support a single user +rather than several users at once. +A PC with limited secondary diskette storage and +limited processing capacity (often single-thread) is not well suited +to support the full range of automatic interactions between a UA and +an MTA, or the necessary interactions between MTAs in an MTS. +For example, +we do not see any way to certify PC systems for authentication +of posted mail. +A PC can change its entire character and behavior with insertion of a new +program diskette, suggesting that it is the operating system +diskettes and their users that must be certified, rather than the computers. +Review of certification issues shows that it is not the computer, +but its operators and managers that must be certified, +and this involves the notions of central management and control. +All this is lost in the maze of PCs that we see proliferating +on and off our campuses, in and out of our offices and homes. + +Thus, we see a need for a new arrangement with the UA separated from +its MTA, and using communication protocols to interact with it in ways +that resemble MTA-to-MTA interactions. +The UA is placed on the PC end, while the more complex +tasks performed by the MTA are relegated to the remote host end. +The remote MTA must authenticate mail items offered by the PC-based +UA, just as it would for a co-located UA, but the task is more difficult +because the PC UA is potentially anyone among the public telephone +connectable population. +This can be handled with password systems, but recognition and +identification are not the only services to be provided at the posting slot. +Posting also requires some validation of recipient addresses, +and validation of the syntax and semantics of certain header fields. +Example standards are provided by the U.S. National Bureau of Standards +(NBS) and the U.S. DoD ARPANET for the format of mail to be transferred +\cite{RFC-822,NBS,CCITT}. + +The new arrangement described in this paper might be called a +{\it split mail slot} in that the UA side of the slot is split away from +the MTA side. +Although the UA and MTA may be on opposite ends of a telephone connection, +they must still act together as a single processing unit +to move mail from one to the other, with all that this may entail. +This gives rise to a number of new MTA/UA requirements such as error +control for service requests, user intervention to select items for +delivery, and user postponement or rejection of delivery without +triggering failure notices to senders. +These are not serious problems when both MTA and UA are +programs running on a single host. +For example, with both UA and MTA on the same host, +unwanted junk mail is simply deleted at low cost, +compared to the cost of deletion after a long delivery transmission time. +Better that our PC users be able to discard items +without delivery transmission. + + \subsection* {Overview of the MZnet Environment} +The MZnet project is an undergraduate student effort sponsored within +the Information and Computer Science (ICS) Department of the +University of California at Irvine (UCI) in Southern California. +For the past 2 years, the UCI mail network, known as +ZOTnet, has been connected into the Computer Science +Network (CSnet) and in 1984, has joined the DoD ARPA Internet with a +{\it Split-Gateway} connection \cite{Rose84} +to the University of Southern California +Information Sciences Institute (USC-ISI). +The MZnet split-slot arrangement may have some similarities to the +Split-Slot Internet Gateway +at least in name, +but the problems and the implementations are quite different. + +The UCI ZOTnet environment \cite{Rose83-1} +gives the MZnet project a full-fledged +Internet-class mail system as its foundation. +The MZnet project objective is to extend this class +of mail service to personal computers located in student and faculty +residences, offices and laboratories, without waiting for full-blown +local area networking to first provide connections. +This follows a pattern of making the most of existing facilities +to provide a reasonable level of service. + +The UCI ZOTnet uses the CSnet-provided MMDF +(Multi-channel Memo Distribution Facility) software \cite{MMDF} +from the University of Delaware to interconnect +two VAX 750 Unix systems with two DEC TOPS-20 systems +through a port selector, with dial telephone connection to a CSnet relay +\cite{CSNET-UCI}. +The ZOTnet has since evolved into an ethernet-connected +local area network with the aforementioned +gateway connection into the DoD Internet. +The ZOTnet also connects to USENET with the UUCP protocols, +and provides format transformations for mail flowing between +protocol domains +\cite{Rose83-2,RFC-MMM}. +Adding to the reach of the ZOTnet with MZnet +is a natural part of its evolution\footnote{For those who are +properly curious about such things, +the name ``ZOTnet'' derives from the cry of the UCI mascot which +is the Anteater from the B.C. comic strip, and MZnet is simply +a contraction for Micro-ZOTnet.}. + +To this point we have set the context of the MZnet project. +The remainder of this paper is devoted to relatively technical +discussions of implementation of the PC user agent programs +and the split-slot UA/MTA interface. + + \section* {The MZnet User Agent: CP/MH} +CP/MH is a collection of programs designed to work in conjunction +with the Micro ZOTnet (MZnet) as an extension of the UCI ZOTnet. +CP/MH programs permit a user of a CP/M 2.2-based microcomputer to +send and receive ZOTnet mail messages, as well as to manipulate +them locally on floppy disks. +The CP/MH programs are written in the C programming language and +should be portable to similar operating environments, such as MS-DOS, etc. + +CP/MH is based on the UCI version of the Rand MH message handling system +\cite{MH} +for the Unix operating system. +The major philosophical differences between CP/MH and typical user agents +such as MSG +\cite{Vittal81} +and its descendants are those of modularity and of user interface. +In CP/MH (as in MH) the user does not invoke a single monolithic program +to deal with mail, but rather invokes individual, +non-interactive programs with common knowledge +of the way messages are stored. +Each program has default behavior which can be modified by using Unix-style +command line options at time of invocation or through a user profile. +Help messages can also be evoked from CP/MH programs. + + \subsection* {Messages and Folders} +The format of a CP/MH message adheres more or less to the syntax +described in RFC 822 +in which a message consists of headers containing information pertaining +to the message source and destination, +and the message body, separated from the headers by a blank line. +An example of such a message might be: + +\begin{verbatim} + Date: 02 Nov 83 23:04:53 PST (Wed) + To: Toto + From: The Great And Powerful Oz + Subject: What Be Your Excuse? + + What's the matter? I ask you for a simple thing like + "distribute this to Witch@Oz-West," and you can't do it. + You undergrads will do anything to get out of work! + + --ozzie +\end{verbatim} + +Following the MH convention, each message is kept in a separate file. +Since a message is simply ASCII text, it can be operated upon by +non-CP/MH programs (such as text editors, in particular). + +Collections of messages are called {\it folders}. Under CP/MH, +folders are represented by several files: an {\it info} file, +containing maintenance information about the folder, and a set +of message files with the same name as the info file, but with +unique numeric suffixes ({\it extensions} in CP/M parlance). +An example of this naming scheme might be: + +{\tt +\begin{description} +\item[{\tt DRAFT}] {\rm the info file for the {\tt DRAFT} folder} +\item[{\tt DRAFT.001}] {\rm message 1 in the folder} +\item[{\tt DRAFT.002}] {\rm message 2 in the folder} +\item[{\tt DRAFT.003}] {\rm message 3 in the folder} +\end{description} +} + +The number of messages that may be stored in a folder is limited +primarily by the storage capacity of a floppy disk, but also by +the three-digit limit of a CP/M extension. + +The info file contains a field named {\tt CURRENT:} specifying the +current message number. +The current message number signifies the default message operated upon +by CP/MH commands using a particular folder. +The current message number may be modified by some commands. +An example of the contents of the info file {\tt DRAFT} might be + +\begin{flushleft} +\hspace{.5in} {\tt CURRENT: 3} +\end{flushleft} + +This indicates that the file {\tt DRAFT.003} would be operated upon +when default conditions apply (i.e. when no message number is +explicitly given to a CP/MH command). + +Possible future uses for the info file include named message sequences +(a set of messages to which commands may be applied as a whole) and +user profile information for application to particular folders (there +is presently a single user profile, described shortly). + +A floppy diskette may contain more than one folder, but folders +do not extend over more than one floppy diskette; therefore two +different diskettes may contain folders with the same name. + + \subsection* {CP/MH Commands} +Commands operating on messages can be divided into several general categories: +\medskip +\begin{description} +\item[Transporting:] sending, receiving +\item[Viewing:] selecting for display, showing header summaries +\item[Creating:] composing, replying, forwarding +\item[Archiving:] categorizing, refiling, deleting, sorting +\end{description} + +\medskip +The architecture of CP/MH permits the simulation of some of these +categories using standard CP/M commands when CP/MH, in its present +primitive state, does not cover them. + +A minimal functionality is presently provided by the following four commands: +\medskip +\begin{description} +\item[COMP] +composes mail items: +creates a file containing header information taken +from a standard or user-specified template. +This newly-created file may be edited to fill in +the header fields and body. +\item[REPL] +replies to mail items: +creates a file containing header +information appropriate for answering a given mail item. +This newly-created file may be edited to +change header fields and fill in the body. +\item[SEND] +sends mail items: +posts selected items through the split-slot from a draft folder. +\item[INC] +receives mail items: +takes delivery of selected items +across the split-slot, incorporating +them into a mailbox folder. +\end{description} +\medskip +These commands, with a few enhancements and modifications +appropriate to the CP/M environment, are functionally almost +identical to their Unix MH counterparts. + +CP/MH commands are invoked like any other +CP/M commands such as ED, PIP, or DIR. +Command line options are generally preceded by a dash +(e.g. {\tt -editor A:ED}), and may be abbreviated. +Folder names are preceded by a plus (e.g. {\tt +B:DRAFT}). +Messages are identified by numbers or by the special names {\tt first}, +{\tt last}, {\tt current}, {\tt next}, and {\tt previous}. + +An example of use of a CP/MH command is: + +\begin{flushleft} +\hspace{1in} {\tt comp -edit a:ed -use last +b:draft -log} +\end{flushleft} + +This particular example will edit the last-composed message (the +{\tt -use last} option) in the folder {\tt DRAFT} on disk drive {\tt B:} +(the {\tt +b:draft} option), using the standard CP/M editor ED on disk +drive {\tt A:} (the {\tt -edit a:ed} option), and prompting the user when +it is appropriate to change disks (the {\tt -log} option). + +All CP/MH commands have a {\tt -help} option which displays all +available options for the particular command invoked. +Another common option is {\tt -log} which permits the user to change +({\it relog}) diskettes after invoking a command, for purposes of +selecting diskettes with message folders or with editor programs. +This is particularly useful on single-drive systems or on systems +with diskettes of low storage capacity. + + \subsection* {The Profile} +If there are options commonly used with a particular CP/MH command, +they may be entered in the user profile contained in the file called +(naturally enough) {\tt PROFILE}, which must exist on the same diskette on +which CP/MH commands reside and from which the commands are invoked. +A profile entry consists of a program name followed by a colon and +the options to be used with that program, for example: + +{\tt +\begin{flushleft} +\hspace{1in} comp: -editor A:VEDIT +B:outbox -log \\ +\hspace{1in} repl: -editor A:VEDIT -log \\ +\hspace{1in} send: +B:outbox \\ +\hspace{1in} inc: +B:inbox -log +\end{flushleft} +} + +Individual profile components are overridden by options given at +the time of invocation (e.g. {\tt -noedit} given on the command line +will override the {\tt -editor} profile component for a particular command). + + \section* {The MZnet Split-Slot Mail Transfer System} +The MZnet split-slot software implements a peer-to-peer +communication protocol between a time-sharing host's MTA and a personal +micro-computer (PC) UA. +This MZnet protocol extends the UA/MTA/UA model of +computer-based message systems (CBMS) to provide a +split gateway function between individual PCs and the ZOTnet +similar to the UCI ICS split Internet gateway described previously +(see Figure~\ref{splitslot}). +\tagfigure{figure2}{The Split-Slot Model}{splitslot} + + \subsection* {The Structure of the Split-Slot} +The MZnet Split Gateway consists of three distributed processing components: +\medskip +\begin{itemize} +\item A PC running a UA (in MZnet, CP/MH) acting as the mail server. +\item A mini/mainframe host running a full MTA (MMDF in MZnet) +providing mail relay services. +\item A communication protocol (a modified version of MMDF PhoneNet) to +connect the two ends of the split-slot. +\end{itemize} +\medskip +Although this combination may not be unique, the method by which the MZnet +split-slot bonds these parts together uniquely deals with the +problems of remote user agents. +In addition to overcoming limited storage and processing capacities, +remote user agents must deal with noisy modem lines, +mail software certification, and mail system security problems. +The MZnet architecture appears to solve these problems with +a clean mail interface for PCs. + + \subsection* {The MZnet Mail Server} +The split-slot mail server consists of a set of {\it command packet} +programs run from the PC. +These programs simply present commands +through the PhoneNet communication protocol to the mail relay slave program +on the host. +Some basic commands are: + +\medskip +\begin{description} +\item[PostMail] posts mail drafts to MTA +\item[GetMail] accepts mail from MTA +\item[RemoteScan] displays information about waiting mail +\item[Quit] drops connection between PC and Host +\end{description} + +\medskip +Each command has the form: + +\begin{flushleft} +\hspace{.5in} Command Request \\ +\hspace{.5in} Data Transmission \\ +\hspace{.5in} Command Termination +\end{flushleft} + +For example, the PostMail command is a small program that: +\medskip +\begin{itemize} +\item initiates a command with the Mail Slave by sending the command +name (PostMail) encoded within a PhoneNet packet; +\item sends a series of PhoneNet packets that contain pieces of +the mail item to be posted; +\item finally sends a command termination signal to end +the transaction without +terminating the connection between host and PC. +\end{itemize} + + \subsection* {The MZnet Channel To MMDF} +The MZnet Channel runs on the MTA host under the University of Delaware's +MMDF (Version 1) and is responsible for both delivery of received mail +to MZnet users, and posting of MZnet user-originated mail. +The MMDF MZnet channel maintains a unique message queue for each +registered MZnet user. +As new mail items arrive, +they are posted to the appropriate queues, +where MZnet holds the mail items for pickup by their registered +recipients. + +To send or receive mail, +the MZnet user must attach to the host, +log into the public MZnet account, +and identify (authenticate) himself. +During the MZnet session with the host, +the user has access only to that restricted set of functions +provided by the MZnet split gateway protocol: +he may request delivery of queued mail with GetMail, +or post new mail with PostMail. +Prior to taking delivery of queued mail, +a survey of waiting mail also may be requested with RemoteScan to obtain +message size information (among other data) +to allow intelligent disposition +of mail in the queue. + +Hidden within these activities are issues of security and certification. +To certify and establish the identity of the user, +a second password is requested after logging into the +public MZnet account. +This certification procedure allows MZnet to certify the source +of originated mail. +A relatively secure environment is provided by MZnet, +as it is the only interface to the host permitted to MZnet users +(once beyond the public login procedure), +and it offers only the severely restricted set of +PhoneNet-encoded commands. +Aside from security issues, +using a single account to handle all MZnet users +reduces demands on system resources. + + \subsection* {The MZnet-PhoneNet Protocol} +A unique facet of the MZnet system derives from the PhoneNet File +Transfer Protocol (FTP). +PhoneNet FTP is a simple error-checked packet protocol which transfers +ASCII plaintext. +PhoneNet encodes any non-plaintext character (or any other character +``forbidden'' by the idiosyncrasies of the communicating systems) by +mapping it onto an ``accepted'' character set. +The accepted character set mapping is determined by +a ``negotiating'' session between the two systems at the start of +the PhoneNet session. + +MZnet transfers all information (both commands and data) in PhoneNet +packets to obtain error control. +The MZnet-PhoneNet command FTP tolerates noise with a high degree +of success, and in effect, connects both ends of the Split Slot +together with a reliable set of virtual wires. + + \subsection* {MZnet Session Example} +Here, a typical MZnet session is presented, with the UA commands +issued from the PC side of the connection printed +in a {\tt typewriter} typeface, and the responses +from the host side printed +in an {\it italic} typeface. +PhoneNet interactions are indented. +The initial connection to the host is accomplished with the +{\tt term} program, which provides a simple terminal emulation +function. +The prompt of the PC for a UA command is ``A$\rangle$''. +Note that passwords are never echoed by the host system. + +\begin{tabbing} +xxxxxxxx \= xxxxxxx \= \kill +\> A$\rangle$ {\tt term} \\ +\> {\it login:} {\tt mznet} \\ +\> {\it password:} \\ +\> {\it MZ-Password:} \\ +\> \> PhoneNet packet negotiation \\ +\> {\it Connected.} \\ +\> \> exit terminal mode \\ +\> A$\rangle$ {\tt send cur} \\ +\> \> PostMail command \\ +\> \> message text packet transmission \\ +\> \> command terminator \\ +\> A$\rangle$ {\tt quit} \\ +\> \> Quit command \\ +\> {\it Disconnecting.} +\end{tabbing} + + \section* {Conclusions} +The main conclusions of this paper are that +small personal computer systems +with dial-up phone connections constrain User Agent systems design +in ways that require use of a {\it split-slot} interface between +the UA and its supporting Mail Transfer Agent (MTA), and that +this interface will best provide the required services if it +has error controlled command and data transfer facilities, with +interactive behavior. + +It is also believed that a good design for the small PC UA +is based on a very modular architecture, such as the Rand MH +system, which has been used as a pattern for the MZnet UA. + +By bringing these concepts together, +we expect MZnet to provide reliable UA/MTA +service to a distributed set of small personal computers, to match +the quality of service that is normally only available from larger +mainframe host systems with co-resident UA/MTA pairs. + +\bibliography{mznet} + +\end{document} diff --git a/docs/historical/realwork/Makefile b/docs/historical/realwork/Makefile new file mode 100644 index 0000000..2f03766 --- /dev/null +++ b/docs/historical/realwork/Makefile @@ -0,0 +1,56 @@ +####################################################################### +# Instructions to Make, for generation of nice-looking papers using TeX +####################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if TEXINPUTS=../doclib:.:${TEXINPUTS} tex \ + \\nonstopmode\\input $<\\bye; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# realwork +############################################################# + +i-all: realwork.dvi + +i-print: realwork.dvi true + dvisp $(DFLAGS) -J RealWork realwork.dvi + + +# customization files, et. al., not included below +realwork.dvi: version.tex + +version.tex: realwork.tex text.tex appendixA.tex appendixB.tex refs.tex \ + diagram1.tex diagram2.tex diagram3.tex diagram4.tex \ + diagram5.tex diagram6.tex diagram7.tex diagram8.tex \ + diagram10.tex \ + version.sh + @: version.sh + +true:; + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f realwork.dvi realwork.imp + +clean:; rm -f realwork.lof realwork.log realwork.lot realwork.toc _* diff --git a/docs/historical/realwork/appendixA.tex b/docs/historical/realwork/appendixA.tex new file mode 100644 index 0000000..f6b61cb --- /dev/null +++ b/docs/historical/realwork/appendixA.tex @@ -0,0 +1,230 @@ +% appendix A % mtr + +\catcode`\@=11 % for a little while + +\def\psect#1{% + \skip@=\lastskip + \par + \dimen@=.6\baselineskip + \ifdim\skip@<\dimen@ + \ifdim\skip@=\z@ \penalty-100 \fi + \vskip \dimen@ plus .3\baselineskip + \fi + \centerline{\underbar{#1}}% + \nobreak + \vskip \z@ plus .1\baselineskip + \vskip -\parskip +} + +\def\pitem#1 #2.{\item{\pgm{#1\/}:} #2\hbreak} + +\catcode`\@=12 % back to normal + + +\appendix{A}{MH Commands} +\MH/ is composed of several \unix/ programs, +which in theory are fairly simple and single-purposed. +These commands are functionally grouped below: + +\psect{Composing Mail} +\pitem{comp} compose a message. +A program to originate a message. +Usually, a special prompting editor front-end, \pgm{prompter}, +is used to fill-in a composition template with the addressees of +the message, subject, and so forth. + +\pitem{dist} redistribute a message to additional addresses. +A program that re-enters a message previously received by the user +into the message transport system. +Only new addresses are added; +the body of the message is not changed in any way. + +\pitem{forw} forward messages. +A program that encapsulates one or more messages in a new message draft. +In addition, the user may add initial and/or closing comments. + +\pitem{repl} reply to a message. +A program that constructs a reply to a message using a reply template. +The template mechanism has sufficient generality to permit the user to +``program'' the form of the reply draft based on the contents of the message +being replied-to. + +\pitem{send} send a message. +A program that posts a draft with the message transport system. +The \pgm{send} program is +usually invoked by one of the four preceding programs, +and performs simple front-end pre-processing prior to invoking the +\pgm{post} program. +For example, +if invoked in {\it push}'d mode, +\pgm{send} will immediately relinquish control of the user's terminal and +post the message in the background. +If the posting fails, +\pgm{send} will send back a failure notice to the user. +If the user had \pgm{push\/}'d the sending of the draft, +then by default +the draft being sent is encapsulated in the failure notice. +This permits easy \pgm{burst}'ing of the failure notice to retrieve the +original draft. +Otherwise, +if the posting was successful, +the draft is marked as having been sent. + +\pitem{whatnow} prompting front-end for send. +A program which is called by \pgm{comp}, et. al., +after the initial draft has been generated. +The \MH/ user can specify a different \pgm{whatnow} program, +which yields considerable extensibility. + +\pitem{whom} report to whom a message would go. +A program which examines the addresses of the draft and expands +all user-defined aliases contained therein. +Optionally, +\pgm{whom} may actually interact with the message transport system +to determine the validity of the final addresses. +This program is also usually invoked by \pgm{comp}, et.~al. + +\psect{Posting Mail} +\pitem{ali} list mail aliases. +A simple front-end to the \MH/ aliasing mechanism. + +\pitem{ap} parse addresses 822--style. +A useful debugging tool for PostMasters who wish to examine how \MH/ +interprets an Internet address. + +\pitem{conflict} search for alias/password conflicts. +Another program used by system administrators to check the consistency of +\MH/ alias files, and portions of the local message transport agent. + +\pitem{install-mh} initialize the MH environment. +A program which is automatically executed the first time a user issues an +\MH/ command. +This program performs once-only initialization of the user's \MH/ environment. + +\pitem{mhmail} send or read mail. +A simple program generally used by other programs to generate messages. +The \pgm{mhmail} command is similar in purpose to the old \pgm{BellMail} +program. + +\pitem{post} deliver a message. +A complex \MH/ back-end that interacts with the local message transport agent +to enter messages through the posting slot. +(See the description of \pgm{send} above). + +\psect{Reading Mail} +\pitem{inc} incorporate new mail. +A program that interacts with the local message transport agent +to retrieve messages from the user's maildrop. + +\pitem{msgchk} check for waiting mail. +A program which reports the status of mail waiting in the user's maildrop. + +\pitem{show} show (list) messages. +A program which lists messages to its standard output +(usually the user's terminal), +possibly invoking another program to do the actual listing. +Most users of \MH/ have \pgm{show} automatically call the \pgm{mhl} program +to format the message. +The \pgm{next} and \pgm{prev} programs are simply +\eg{show\ next} and \eg{show\ prev}, +respectively. + +\pitem{mhl} produce formatted listings of MH messages. +A program which displays a message as directed by a template. +This permits the user to filter out uninteresting headers +and re-arrange other headers to a particular preference. +In addition to being invoked by \pgm{show}, +the \pgm{mhl} program is optionally also +invoked by \pgm{forw} to format each message being forwarded; +invoked by \pgm{repl} to format the body of a message being replied-to, +if that message is being included in the reply draft; +and, +invoked by \pgm{post} to format a message being sent as a blind-carbon-copy. + +\pitem{rmm} remove messages. +A program that removes messages from an \MH/ folder, +optionally running a user-defined program instead of deleting them. +If no program is given, +the messages are ``softly'' removed, +so they may possibly be recovered later. + +\pitem{scan} produce a one-line-per-message scan listing. +A program that generates a scan listing for messages. +Each line of the listing contains date, source, subject, +and possibly the initial body of the message. + +\psect{Folder Handling} +\pitem{folder} set/list current folder/message. +A program used to list information concerning the current folder, +or set the current folder and/or message. + +\pitem{folders} list all folders. +A program to list information on all folders +(actually, just a special case of the \pgm{folder} command). +Since the \MH/ folder structure may be recursive, +the user can indicate that \pgm{folders} should recursively examine all +folders. + +\pitem{refile} file message(s) in (an)other folder(s). +A program to move (or copy) messages from a source folder to one or more +destination folders. + +\pitem{rmf} remove folder. +A program that deletes a folder and all messages therein. + +\psect{Message Selection} +\pitem{anno} annotate messages. +A program to arbitrarily annotate messages. +If the user so desires, +after distributing, forwarding, or replying-to a message, +\MH/ will automatically attach an annotation to the +original message indicating the date and addresses. + +\pitem{mark} mark messages. +A program to manipulate user-defined sequences (lists of messages). +Usually, \pgm{mark} is not employed directly by the \MH/ user. + +\pitem{pick} select messages by content. +A program to examine a list of messages and choose those which meet a +particular selection criterion. +The \pgm{pick} program is often used in \unix/ back-quoted operations to pass +message sequences to other \MH/ commands. + +\pitem{sortm} sort messages. +A program to sort a list of messages according to the date given in a +particular field. + +\psect{Distribution List Handling} +\pitem{bbc} check on BBoards. +A front-end to run \pgm{msh} on a list of distribution lists which the +user isn't current on. + +\pitem{bbl} manage a BBoard. +A (depreciated) program used to manually manage the local archives of a +distribution list. +These functions (archiving, expunging) are performed automatically by \MH/. + +\pitem{burst} explode digests into messages. +A program used to decapsulate messages from ARPA Internet digests. +In addition, +messages which have been encapsulated during forwarding +(i.e., with \pgm{forw\/}) +can also be decapsulated using \pgm{burst}.% +\nfootnote{Similarly, blind-carbon-copies may be decapsulated, +though only socially mature users should do so.} + +\pitem{msh} MH shell (and BBoard reader). +A monolithic program used to implement \MH/ commands on +messages arranged in a single file (maildrop format). +Useful +since distribution lists are kept in this format to minimize consumption of +system resources. + +\pitem{pack} compress a folder into a single file. +A program which takes messages stored in \MH/ format and places them in a +single file (using the same format known by \pgm{msh\/}). + +\psect{Interface to the \unix/ File System} +\pitem{mhpath} print full pathnames of \MH/ messages and folders. +A program which maps \MH/-style names into the \unix/ file naming convention. + diff --git a/docs/historical/realwork/appendixB.tex b/docs/historical/realwork/appendixB.tex new file mode 100644 index 0000000..082de3a --- /dev/null +++ b/docs/historical/realwork/appendixB.tex @@ -0,0 +1,87 @@ +% appendix B % mtr + +\appendix{B}{Distribution Mechanics} +The \mh5 distribution is available in two forms: +\smallskip +{\advance\leftskip by\parindent +\item{1.} Anonymous FTP\hbreak +If you can FTP to the ARPA Internet, +use anonymous FTP to the ARPAnet host UDel-Huey [10.2.0.96] +and retrieve the file portal/mh.5--tar. +This is a \pgm{tar} image of size 2.1~MB (approximately). + +\item{2.} 9--track tape, 1600~bpi, \pgm{tar} format\hbreak +Otherwise, you can send \$50.00 to the address below. +This covers the cost of a magtape, handling, and shipping. +In addition, +you'll get a laser-printed hard-copy of the \MH/ documentation. +The documentation includes installation guide, +\MH/ Tutorial, +\MH/ User's Manual, +changes document (from \mh4 to \mh5), +and BBoards Manual. + +\item{} If you go with this option, +be sure to include your USPS address with your check. +Checks should be made payable to +$$\hbox{Regents of the University of California}$$ +It's also a good idea (though not mandatory) to send a computer mail message +to {\tx Bug-MH@UCI} when you send your check via USPS to ensure minimal +turn-around time. +The distribution address is: +$$\displayindent=\leftskip \advance\displayindent by1.5\parindent + \halign{\leftline{#}\cr + Support Group\cr + Attn: MH Distribution\cr + Department of Information and Computer Science\cr + University of California, Irvine\cr + Irvine, CA 92717\cr + \cr + 714/856--6852\cr +}$$ + +\item{} Sadly, if you just want the hard-copies of the documentation, +you still have to pay the \$50.00. +The \pgm{tar} image has the documentation source +(the man is in \ROFF/ format, but the rest are in \TeX\ format). +\smallskip} +\noindent +In addition, +there is some hope that \mh5, or a successor, +might be found in a future 4.x~Berkeley distribution. + +Although \MH/ is not ``supported'' per se, +it does have a bug reporting address. +Normally, +the address {\tx Bug-MH@UCI} is used to report bugs and bug fixes. +There are however, +two discussion groups which concern themselves with \MH/: +\smallskip +{\advance\leftskip by\parindent +\item{1.} MH-Users@UCI\hbreak +A discussion group for the \MH/ user community at large. +Appropriate topics include: +questions about how to use \MH/, +tips on \MH/ usage, +and exchange of \MH/ shell scripts. +All requests to be added to or deleted from this list, +along with problems, questions and suggestions, +should be sent to {\tx MH-Users-Request@UCI}. + +\item{2.} MH-Workers@UCI\hbreak +A discussion group for \MH/ maintainers and experts. +Appropriate topics include: +questions on how to configure \MH/, +tips on \MH/ configuration, +exchange of \MH/ bug reports (and fixes). +All requests to be added to or deleted from this list, +along with problems, questions and suggestions, +should be sent to {\tx MH-Workers-Request@UCI}. +\smallskip} +\noindent +The \eg{UCI} host is also known as \eg{ucivax}, +so a possible \UUCP/ path might be {\tx $\tdots$!ucbvax!ucivax!bug-mh}. + +Updates to \MH/ are published on the {\tx MH-Workers} list +in the form of context diffs, +and the appropriate distribution images are updated as well. diff --git a/docs/historical/realwork/diagram1.tex b/docs/historical/realwork/diagram1.tex new file mode 100644 index 0000000..5d25839 --- /dev/null +++ b/docs/historical/realwork/diagram1.tex @@ -0,0 +1,45 @@ +% diagram 1 + +\verbatimlines +% inc +Incorporating new mail into inbox... + + 1+ 03/16 Rand MH System MH transcript < + +Here's the body of a sample message. +% repl +To: Rand MH System +cc: jromine@uci-icsa +Subject: Re: MH transcript +In-reply-to: Your message of 16 Mar 85 18:28:59 PST (Sat). +-------- +Thanks for the test. + +/JLR +^D + +What now?? send +% comp +To: MRose@UCI +cc: +Subject: sample comp +-------- +Here's a sample compose for the MH transcript. + +/JLR +^D + +What now?? send -verbose + -- Posting for All Recipients -- + -- Local Recipients -- + MRose: address ok + -- Recipient Copies Posted -- +Message Processed +?endverbatim diff --git a/docs/historical/realwork/diagram10.tex b/docs/historical/realwork/diagram10.tex new file mode 100644 index 0000000..b321213 --- /dev/null +++ b/docs/historical/realwork/diagram10.tex @@ -0,0 +1,14 @@ +% diagram 10 + +\verbatim +mmdfldir: /usr/spool/mail +mmdflfil: +mmdelim1: \001\001\001\001\n +mmdelim2: \001\001\001\001\n +mmailid: 0 +lockstyle: 0 +lockldir: + +hostable: /usr/local/lib/mh/hosts +servers: localhost \01localnet +?endverbatim diff --git a/docs/historical/realwork/diagram2.tex b/docs/historical/realwork/diagram2.tex new file mode 100644 index 0000000..f7f7f87 --- /dev/null +++ b/docs/historical/realwork/diagram2.tex @@ -0,0 +1,12 @@ +% diagram 2 + +\verbatim +To: +cc: +Bcc: +Fcc: outbox +Fcc: +Subject: +Reply-To: +-------- +?endverbatim diff --git a/docs/historical/realwork/diagram3.tex b/docs/historical/realwork/diagram3.tex new file mode 100644 index 0000000..11a7edb --- /dev/null +++ b/docs/historical/realwork/diagram3.tex @@ -0,0 +1,13 @@ +% diagram 3 + +\verbatim +To: +cc: , +Fcc: +outbox +Fcc: +Subject: Re: +In-reply-to: Your message of . + +In-reply-to: Your message of . +-------- +?endverbatim diff --git a/docs/historical/realwork/diagram4.tex b/docs/historical/realwork/diagram4.tex new file mode 100644 index 0000000..e9c15c0 --- /dev/null +++ b/docs/historical/realwork/diagram4.tex @@ -0,0 +1,22 @@ +% diagram 4 + +\verbatim +From: Message Agent \<> +To: +Fcc: +rcvtrip +Fcc: +Subject: BEEP! Re: +Subject: BEEP! +In-reply-to: Your message of . + +In-reply-to: Your message of . +-------- + + This is an automatic reply. Feel free to send additional mail, as only + this one notice will be generated. + + I am attending the USENIX Summer '85 conference in Portland, Oregon. + I expect to be reading mail again on the 16th of June. + +/mtr +?endverbatim diff --git a/docs/historical/realwork/diagram5.tex b/docs/historical/realwork/diagram5.tex new file mode 100644 index 0000000..3b36477 --- /dev/null +++ b/docs/historical/realwork/diagram5.tex @@ -0,0 +1,48 @@ +% diagram 5 + +\verbatim +To: +cc: , +Fcc: +outbox +Fcc: +Subject: Re: +In-reply-to: Your message of . + +In-reply-to: Your message of . +Reply-To: /dev/null +-------- + + \ + *-XXX + / XX + X + X + X + X + X + IIIIIIIII + IIIIIIIII + IIIIIIIII + IIIIIIIII + XXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXXXXXXXXXXXXXXXX + XXXXXXXXX +?endverbatim diff --git a/docs/historical/realwork/diagram6.tex b/docs/historical/realwork/diagram6.tex new file mode 100644 index 0000000..18577c8 --- /dev/null +++ b/docs/historical/realwork/diagram6.tex @@ -0,0 +1,13 @@ +% diagram 6 + +\verbatim +width=80,length=0,overflowtext=,overflowoffset=10 +Date:leftadjust,compress,compwidth=9 +Subject:leftadjust,compress,compwidth=9 +From:leftadjust,compress,compwidth=9 +To:leftadjust,compress,compwidth=9 +cc:leftadjust,compress,compwidth=9 +Resent-Note:leftadjust,compwidth=9 +: +body:nocomponent,overflowoffset=0 +?endverbatim diff --git a/docs/historical/realwork/diagram7.tex b/docs/historical/realwork/diagram7.tex new file mode 100644 index 0000000..f5b6034 --- /dev/null +++ b/docs/historical/realwork/diagram7.tex @@ -0,0 +1,48 @@ +% diagram 7 + +\verbatim +: 'mpick - relate messages /mtr' +PATH=:/bin:/usr/bin:/usr/ucb:/usr/local:/usr/local/lib/mh; export PATH +F="" M="" S="" + +for A in $* +do + case $A in + -*) S="$S $A" ;; + + +*|@*) case $F in + "") F=$A ;; + *) echo "mpick: only one folder at a time" 1>&2 + exit 1 ;; + esac ;; + + *) M="$M $A" ;; + esac +done + +S="$S -sequence hits -list -nozero" + +if mark $F all -add -sequence hits; + then mark $F all -delete -sequence hits; + else exit 1; +fi + +for A in ${M-cur} +do + for C in `mhpath $F $A` + do + if [ -r $C ]; + then + I=`mhl -form mhl.msgid $C`; + case $I in + "") echo "no message-id in message `basename $C`" 1>&2 ;; + *) pick --in-reply-to "$I" $S ;; + esac + else + echo "message $A doesn't exist" 1>&2; exit 1; + fi + done +done + +exit 0 +?endverbatim diff --git a/docs/historical/realwork/diagram8.tex b/docs/historical/realwork/diagram8.tex new file mode 100644 index 0000000..36d8ee6 --- /dev/null +++ b/docs/historical/realwork/diagram8.tex @@ -0,0 +1,14 @@ +% diagram 8 + +\verbatim +: 'append - stupid append editor for MH - /jlr' +case $# in + 1|2) case $# in + 1) F=$1; echo -n "Append file: " 1>&2; read A ;; + 2) F=$2; A=$1 ;; + esac + cat $A < /dev/null >> $F ;; + *) echo "append: arg count" 1>&2 ; exit 1 ;; +esac +exit +?endverbatim diff --git a/docs/historical/realwork/diagram9.tex b/docs/historical/realwork/diagram9.tex new file mode 100644 index 0000000..b67c2e7 --- /dev/null +++ b/docs/historical/realwork/diagram9.tex @@ -0,0 +1,15 @@ +% diagram 9 + +\verbatim +bin /usr/local +bboards on +editor /usr/local/prompter +etc /usr/local/lib/mh +mail /usr/spool/mail +manuals local +mts sendmail/smtp +news off +options BSD42 +options MHE NETWORK +options UCI +?endverbatim diff --git a/docs/historical/realwork/realwork.tex b/docs/historical/realwork/realwork.tex new file mode 100644 index 0000000..6454913 --- /dev/null +++ b/docs/historical/realwork/realwork.tex @@ -0,0 +1,84 @@ +% run this through PhD-TeX + +\input dcustom +\articlestyle +\input version + +\def\draftext{% + \begingroup + \eightpoint\sf + Reprinted from + {\it Proceedings, Summer Usenix Conference and Exhibition}, + Portland, Oregon, + June, {\oldstyle 1985}% + \endgroup +} + +\input sfwmac + +\def\bannerhack{$^{\bowtie}$\global\let\bannerhack=\empty} +\header + MH.5:\\ + How to process 200 messages a day\\ + and still get some real work done\bannerhack\title + Marshall T.~Rose\\ + Member, Research Technical Staff\\ + Northrop Research and Technology Center$^\dagger$\\ + \\ + John L.~Romine\\ + Computing Support Group\\ + Department of Information and Computer Science\\ + University of California, Irvine$^\ddagger$\author\info +\footnote{}{\hskip -\parindent $^{\bowtie}$ +Alternate title: {\sl MH: Your Key to Success}.} +\footnote{}{\hskip -\parindent $^\dagger$ +One~Research Park, +Palos Verdes Peninsula, CA 90274. +Telephone: 213/377--4811.\hbreak +Computer mail: +MRose\%NRTC@USC-ECL, $\tdots$!\{ucbvax!ucivax,trwrb\}!nrtc!mrose.} +\footnote{}{\hskip -\parindent $^\ddagger$ +University of California at Irvine, +Irvine, CA 92717. +Telephone: 714/856--6852.\hbreak +Computer mail: +J-Romine@USC-ECL, $\tdots$!\{ucbvax,trwrb\}!ucivax!jromine.} + +\centerline{\sc Abstract} % mtr +{\rightskip=0pt\narrower +\lp +The UCI version of the Rand Message Handling System (\MH/) is discussed. +\MH/ is a powerful user agent which operates in the ARPA Internet and UUCP +environments. +In addition to the usual functions provided by similar programs, +\MH/ has several distinguishing characteristics which give the user +additional message handling capability. +In particular, +\MH/ provides mechanisms for maintaining an organized mail environment, +tailoring its behavior, +and extending its functions. + +\lp +This document describes \MH/ from several perspectives. +Particular emphasis is given to: +the \MH/ user environment, +advanced features of \MH/ which have proven to be particularly useful for +sophisticated users of electronic mail, +the user interface issues in \MH/, +and the \mh5 distribution. +The paper concludes with a summary of the authors' experiences with \MH/, +and a discussion of future areas of enhancement. +\par} + +\input text +\input refs +\input appendixA +\input appendixB + +\printcontents +\unskip\footnote{}{\hskip -\parindent +This document (version \versiontag/) +was \TeX set \today\ with DISS.STY v\version.} +\showsummary + +\bye diff --git a/docs/historical/realwork/refs.tex b/docs/historical/realwork/refs.tex new file mode 100644 index 0000000..cba2736 --- /dev/null +++ b/docs/historical/realwork/refs.tex @@ -0,0 +1,250 @@ +% references + +\references + +\ref{DCome83} +\by D.~Comer. +\paper The Computer Science Research Network CSnet: +A History and Status Report +\journal Communications of the ACM\volume 26\issue 10 +\month October\year 1983 +\pages 747--753 +\endref + +\ref{DCroc79} +\by D.H.~Crocker, E.S.~Szurkowski, D.J.~Farber. +\paper An Internetwork Memo Distribution Facility~---~MMDF +\inbook Proceedings, +Sixth Data Communications Symposium +\publaddr Asilomar +\month November\year 1979 +\pages 18--25 +\endref + +\ref{DCroc82} +\by D.H.~Crocker. +\paper Standard for the Format of ARPA Internet Text Messages +\paperinfo Request for Comments 822 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month August\year 1982 +\endref + +\ref{DEA} +\book Data Encryption Algorithm +\bookinfo X3.92--1981 +\publ American National Standards Institute +\year 1981 +\endref + +\ref{DKing84} +\by D.P.~Kingston,~III. +\paper MMDFII: A Technical Review +\inbook Proceedings +Usenix Summer '84 Conference +\publaddr Salt Lake City, Utah +\month June\year 1984 +\pages 32--41 +\endref + +\ref{EAllm83} +\by E.~Allman. +\paper SENDMAIL~---~An Internetwork Mail Router +\other +\publ Britton-Lee, Inc. +\publaddr Berkeley, California +\month July\year 1983 +\endref + +\ref{EOlse84} +\by E.W.~Olsen. +\paper NetOS Concepts and Facilities +\other +\publ Local Network Systems, Inc. +\publaddr Costa Mesa, California +\month August\year 1984 +\endref + +\ref{EStef84} +\by E.A.~Stefferud, J.N.~Sweet, T.P.~Domae. +\paper MZnet: Mail Service for Personal Micro-Computer Systems +\inbook Proceedings, +Second International Symposium on Computer Message Systems +\publaddr Nottingham, U.K +\month May\year 1984 +\pages 293--302 +\endref + +\ref{FIKM} +\book Financial Institution Key Management +\bookinfo X9.17--198\_ (draft) +\publ American National Standards Institute +\year 198\_ +\endref + +\ref{FIPS46} +\book Data Encryption Standard +\bookinfo Federal Information Processing Standards, +Publication 46 +\month January\year 1977 +\endref + +\ref{FIPS81} +\book DES Modes of Operation +\bookinfo Federal Information Processing Standards, +Publication 81 +\month December\year 1980 +\endref + +\ref{FIPS98} +\paper Specification for Message Format for Computer Based Message Systems +\other +\publ National Bureau of Standards +\month January\year 1983 +\endref + +\ref{HERMES} +\by Bolt, Beranek, and Newman. +\paper Hermes User's Manual +\paperinfo for TOPS-20 +\other +\publ Bolt, Beranek, and Newman +\publaddr Boston, MA +\month January\year 1979 +\endref + +\ref{IP} +\paper Internet Protocol +\paperinfo Request for Comments 791 (\milstd/ 1777) +\inbook Internet Protocol Transition Workbook +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month September\year 1981 +\endref + +\ref{JReyn84} +\by J.K.~Reynolds. +\paper Post Office Protocol +\paperinfo Request for Comments 918 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month October\year 1984 +\endref + +\ref{LLamp82} +\by L.~Lamport, R.~Shostak, M.~Pease. +\paper The Byzantine Generals Problem +\journal ACM Transactions on Programming Languages and Systems +\volume 4 +\month July\year 1982 +\pages 382--401 +\endref + +\ref{MButl85} +\by M.~Butler, J.B.~Postel, et.~al. +\paper Post Office Protocol - Version~2 +\paperinfo Request for Comments 937 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month February\year 1985 +\endref + +\ref{MRose84a} +\by M.T.~Rose. +\paper The Rand MH Message Handling System: The UCI BBoards Facility +\other +\publ Department of Computer and Information Sciences +\publaddr University of Delaware +\month October\year 1984 +\endref + +\ref{MRose84b} +\by M.T.~Rose. +\paper The Rand MH Message Handling System: Tutorial +\other +\publ Department of Computer and Information Sciences +\publaddr University of Delaware +\month October\year 1984 +\endref + +\ref{MRose85a} +\by M.T.~Rose, J.L.~Romine. +\paper The Rand \MH/ Message Handling System: User's Manual +\paperinfo UCI Version +\other +\publ Department of Information and Computer Science +\publaddr University of California, Irvine +\month January\year 1985 +\endref + +\ref{MRose85b} +\by M.T.~Rose, E.A.~Stefferud. +\paper Proposed Standard for Message Encapsulation +\paperinfo Request for Comments 934 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month January\year 1985 +\endref + +\ref{MRose85c} +\by M.T.~Rose, D.J.~Farber, S.T.~Walker. +\paper Design of the TTI Prototype Trusted Mail Agent +\inbook Proceedings, +Second International Symposium on Computer Message Systems +\publaddr Washington, D.C. +\month September\year 1985 +\toappear +\endref + +\ref{MRose85d} +\by M.T.~Rose, E.A.~Stefferud, J.N.~Sweet. +\paper MH: A Multifarious User Agent +\journal Computer Networks%\volume V\issue N +\toappear +\endref + +\ref{SMTP} +\paper Simple Mail Transfer Protocol +\paperinfo Request for Comments 821 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month August\year 1982 +\endref + +\ref{TCP} +\paper Transmission Control Protocol +\paperinfo Request for Comments 793 (\milstd/ 1778) +\inbook Internet Protocol Transition Workbook +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month September\year 1981 +\endref + +\ref{VVoyd83} +\by V.L.~Voydock, S.T.~Kent. +\paper Security Mechanisms in High-Level Network Protocols +\journal Computing Surveys\volume 15\issue 2 +\month June\year 1983 +\pages 135--171 +\endref + +\ref{WJoy83} +\by W.N.~Joy, E.~Cooper, R.S.~Fabry, S.J.~Leffler, K.~McKusick, D.~Mosher. +\paper 4.2\bsd/ System Manual +\paperinfo Technical Report Number 5 +\publ Computer Systems Research Group, University of California, Berkeley +\month July\year 1983 +\endref + +\ref{X.400} +\book Message Handling Systems: System Model-Service Elements +\bookinfo Recommendation X.400 +\publ International Telegraph and Telephone Consultative Committee (CCITT) +\endref + +\endreferences diff --git a/docs/historical/realwork/text.tex b/docs/historical/realwork/text.tex new file mode 100644 index 0000000..d5c58eb --- /dev/null +++ b/docs/historical/realwork/text.tex @@ -0,0 +1,1121 @@ +% begin text + +\banner + +\section{Introduction} % mtr +The UCI version of the Rand Message Handling System, \MH/, +is a software system that performs two functions: +\underbar{first}, +it interfaces a user to a message transport system, +so the user may receive and send mail; +\underbar{second}, +it permits the user to maintain an organized mail environment to facilitate +the composition of new messages and the reading of old messages. +In short, +while not responsible for the delivery of messages, +\MH/ aids the user in handling mail. + +\MH/ was originally developed by the Rand Corporation, +and initially was proprietary software. +The Department of Information and Computer Science at +University of California, Irvine, +shortly after joining the Computer Science Network (CSnet), +acquired a copy of \MH/, +and began additional development of the software. +Since that time, +the Rand Corporation has declared \MH/ to be in the public domain, +and the UCI version of \MH/ has passed through four major releases. +The current version, \mh5, +is available from U.C.~Irvine for a nominal distribution fee, +or may be retrieved from the University of Delaware via anonymous FTP. + +Much credit must be given to the initial designers and implementors of \MH/: +Bruce Borden, Stockton Gaines, and Norman Shapiro. +Although \MH/ has suffered significant development at UCI +since Rand's initial release, +the fundamental concepts of \MH/'s environs have remained nearly unchanged. +In addition, +the authors of the current release gratefully acknowledge the comments of the +many sites which have run various releases of \MH/ in the past. +In particular, +the dozen or so beta test sites for \mh5 +provided tremendous help in stabilizing the current release. + +\MH/ runs on different versions of the \unix/ operating system +(such as Berkeley~4.2\bsd/ and various flavors of v7). +In addition, +\MH/ supports four different message transport interfaces: +\SendMail/\cite{EAllm83}, +the standard mailer for 4.2\bsd/ systems; +\MMDF/\cite{DCroc79} and \MMDFII/\cite{DKing84}, +the Multi-Channel Memo Distribution Facility developed by the University of +Delaware +which forms the software-backbone for CSnet\cite{DCome83} mail relay service; +SMTP, +the ARPA Internet Simple Mail Transfer Protocol\cite{SMTP}; +and, +a stand-alone delivery system. + +This paper is organized in a straight-forward fashion: +Initially, +the \MH/ philosophy of mail handling is presented, +along with a description of the environment which the \MH/ user is given to +process mail. +Following this, +certain advanced features of \MH/ are discussed in more detail, +such as facilities for selecting messages, +and ``advanced'' concepts in {\it draft} handling. +In addition, +user interface issues in mail handling are addressed, +and the merits of \MH/'s approach is critically examined. +Next, +the \mh5 distribution package is described. +Finally, +we conclude by discussing the authors' experience with \MH/ development +and introducing areas where \MH/ may be further developed. + +Although familiarity with \MH/ is not assumed on the part of the reader, +some knowledge of the \unix/ operating system is useful. +Appendix~A gives a short synopsis of the \MH/ commands. + +\section{The \MH/ Philosophy} % mtr +Although \MH/ has many traits which tend to distinguish it from other systems +which handle mail, +there is a single fundamental design decision which influences the interface +between \MH/ and the user: +\MH/ differs from most other systems in that it is composed of many small +programs instead of one very large one. +This architecture gives \MH/ much of its strength, +since intermediate and advanced users are able to take advantage of this +flexibility. + +The key to this flexibility is that the \unix/ shell +(usually the {\it C} shell or the {\it Bourne} shell), +is the user's interface to \MH/. +This means that when handling mail, +the entire power of the shell is at the user's disposal, +in addition to the +facilities which \MH/ provides. +Hence, +the user may intersperse mail handling commands with other commands in an +arbitrary fashion, +making use of command handling capabilities which +the user's shell provides. + +Furthermore, +rather than storing messages in a complicated data structure +within a monolithic file, +each message in \MH/ is a \unix/ file, +and each folder (an object which holds groups of messages) +in \MH/ is a \unix/ directory. +That is, +the directory- and file-structure of \unix/ is used directly. +As a result, +any \unix/ file-handling command can be applied to any message. + +To the novice, +this may not make much sense or may not seem important. +However, +as users of \MH/ become more experienced, +they find this capability attractive. +In addition, +this approach is often quite pleasing to system implementors, +because it minimizes the amount of coding to be performed, +and given a modular design, +changes to the software system can be maintained easily. +There are, however, performance penalties to be paid with this scheme. +This issue is considered later in the paper. + +Having described how \MH/ fits into the \unix/ environment, +we now discuss the mail handling environment which is available to the \MH/ +user. + +\subsection{The \MH/ Environs} % jlr +In the \file{\$HOME} directory of each \MH/ user, a file named +\profile/ contains static information about the user's \MH/ environment, +and default arguments for \MH/ programs. +For the latter case, +each line of profile takes the form: +\example program-name:\ options\endexample +Each \MH/ program consults the user's \profile/ for its options. +These options are consulted prior to evaluating any command-line arguments, +and so provide the \MH/ user the capability to customize the defaults for each +command. +Futher, by using the \unix/ link facility, +different names can be given to the same command. +Since each \MH/ command looks +in the \profile/ +for a component with the name by which it was invoked, +it's possible to have different defaults for the same program. +For example, +it is not uncommon to link \pgm{prompter} +(a simple prompting editor front-end) +under the name \pgm{rapid} in the +user's \file{bin/} directory, and add to the \profile/: +\example rapid:\ -prepend\ -rapid\endexample +As a result, +when \pgm{prompter} is invoked as \pgm{rapid}, +it automatically uses the \switch{prepend} and \switch{rapid} options. + +The profile component \eg{Path:} is the path to the user's +\MH/-directory, usually \Mail/. +In addition to containing the user's folders, +the \MH/-directory also contains {\it skeletons} and +{\it templates} used by the \MH/ programs, +and the user's \context/ file. +This latter file has the same format as the user's \profile/, +and contains the dynamic, +context-dependent information about the user's environment. +Whenever \MH/ looks for an \MH/-specific file, +such as a template or skeleton, +it first consults the user's \MH/-directory, +and then a system-wide library area. + +The \MH/ user always has a {\it current folder}, +which is the folder in which +the user is currently (or was last) working. +Since any \MH/ program which deals with folders implicitly manipulates this +information, +the name of the current folder is stored in the \file{context} +component \eg{Current-Folder:}. +Every folder has a {\it current message} known as \arg{cur}. +These values are the defaults for \MH/ commands which +accept folder and/or messages arguments. + +\MH/ programs make use of a set of envariables +which further customize their behavior. +The \file{\$MH} envariable, if present, +specifies the name of an alternate profile for the user. +This allows a user of \MH/ to +easily maintain multiple mail-handling environments. + +In terms of command syntax, +most \MH/ commands accept an optional {\it folder} argument, +such as \arg{+outbox}. +Unlike most \unix/ commands, +all \MH/ commands have switches which are words, rather than single letters. +Switches may be abbreviated to the least unambiguous prefix. +All \MH/ commands also support a \switch{help} switch, +which lists the syntax of the command along with available switches, +and the version number of the command. +Most \MH/ commands also take a \arg{msg} or \arg{msgs} argument +which takes the form of a message number (\eg{1}), a message range (\eg{1-2}), +a standard sequence name (\eg{cur}), +or a user-defined sequence name (\eg{select}). + +\tagdiagram{1}{An \MH/ Session}{session} +\subsection{An \MH/ Transcript} % jlr +Figure~\session\ contains a transcript of a simple \MH/ session. +First, \pgm{inc} is run to incorporate the new mail into the +user's \eg{+inbox} folder. + +A \pgm{scan} listing of the mail is printed while +it is being incorporated. +(The user could run \pgm{scan} explicitly to generate additional \pgm{scan} +listings later on.) +The \pgm{scan} listing gives the message number, followed +by the date, message sender, and subject. +(If the message originated from the user generating the listing, +the \eg{to:} addressee is displayed instead of the sender.) +If the subject is short, +the first part of the message body is displayed after the characters \eg{<<}. +The plus sign (`+') after +the message number indicates the current message. + +The user \pgm{show\/}s the message, and decides to \pgm{repl\/}y. +A reply draft +is created using the headers of the message being replied-to, +using the default \file{replcomps} template. +The default editor, \pgm{prompter}, is called to edit the draft. +When an EOT is typed, \pgm{prompter} exits and the +user is left at the \whatnow/ prompt. +The option \pgm{send} is chosen. +Since there were no problems in posting the draft with the message transport +system, +no additional output is produced. +(\MH/ is not verbose by default.) + +The user then decides to compose a new message. +The default skeleton, \file{components}, is copied to the draft, +and \pgm{prompter} is once again called. +After entering the addresses, subject, and body, +the user then \pgm{send\/}s the \file{draft} from the \whatnow/ prompt, +using \eg{send\ -verbose}, which causes +\MH/ to list out the message addresses as it submits them +to the message transport system. + +\section{Some \MH/ Features} % mtr +We now consider certain advanced features in \MH/. +These features have been chosen to demonstrate some useful capabilities +available to the \MH/ user. + +\subsection{Message Sequences and Selection} % jlr +\MH/ has several built-in message sequence names, which may +be used anywhere a \arg{msg} or \arg{msgs} argument is expected. +These are: +\arg{cur}, \arg{next}, \arg{prev}, \arg{first}, \arg{last}, and \arg{all}. +Message ranges may also be specified. +For example, \arg{all} is actually \arg{first-last}, and +\arg{+mh\ last:5} references the last five messages in your +\arg{+mh} folder. +A powerful capability of \MH/ is the ability to use not only the pre-defined +message sequence names, +but also arbitrary user-defined message sequence names. + +Although all \MH/ programs recognize user-defined sequences when appropriate, +the \pgm{pick} and \pgm{mark} commands can create and modify +user-defined message sequences. +The \pgm{mark} command allows low-level manipulation of sequences, +and is not particularly interesting in our discussion. + +The \pgm{pick} command selects certain messages out of a folder. +The criteria used for selection may be a search string and/or a date range. + +Searching is performed on either a specific header in the message +(e.g., \eg{To:}), +or anywhere within the message. +By default, +\pgm{pick} lists out the message numbers that matched +the selection criteria. +Thus, \pgm{pick} is useful in backquoted operations to the shell. +For example, to scan all the messages in the current folder from ``frated'', +the \MH/ user issues the command: +\example scan\ \bq{pick\ -from\ frated}\endexample +To perform more complicated message selection, +user-defined sequences are employed. +Supplying a \switch{sequence\ name} +argument to \pgm{pick}, will cause it to define the +sequence \arg{name} as those messages matched. + +Giving \pgm{pick} a list of messages causes it to limit its search to just +those messages. +For example, +to find all the messages in the current folder from ``frated'' also dated +before friday: +\example pick\ -from\ frated\ -sequence\ select\\ + pick\ select\ -before\ friday\ -sequence\ select\endexample +With the first \pgm{pick} command, +the sequence \eg{select} is defined +to be all those messages from ``frated''. +In the second command, only those messages already in the \eg{select} +sequence are searched, and the \eg{select} sequence is redefined to be +only those messages which are also +dated before friday. +Those messages could then be \pgm{show\/}n with: +\example show\ select\endexample +When a \switch{sequence\ name} argument is given to \pgm{pick}, +the default behavior --- listing the message numbers +matched --- is inhibited. +To re-enable this behavior, the \switch{list} option may be given. +As a result, +advanced users of \MH/ often put the following line in their \profile/: +\example pick:\ -sequence\ select\ -list\endexample +which allows them to easily make use of the \arg{select} sequence as the +messages last selected with \pgm{pick}. + +Often it is desirable to act upon those messages which +are {\it not} members of a given sequence. +For this purpose, +the \eg{Sequence-Negation:} profile entry is useful. +If the name of a user-defined sequence is prefixed with the value of the +sequence-negation profile entry, +\MH/ commands will operate upon those messages which are {\it not} members +of that sequence. +For example, given a profile entry of: +\example Sequence-Negation:\ not\endexample +those messages which +are not in the \arg{select} sequence could be \pgm{scan\/}'d with: +\example scan\ notselect\endexample + +Obviously, some confusion could result if an attempt was made +to define a sequence name +which began with the sequence-negation string (e.g., \eg{notselect}). +For this reason, \MH/ users will often use a single +character, +which their shell doesn't interpret, +as their sequence-negation string +(e.g., up-caret (`\^{}') for {\it C} Shell users, +and exclamation-mark (`!') for {\it Bourne} shell users). + +\MH/ also provides a way of automatically remembering the last +message list given to +an \MH/ command. +This facility is implemented by using a profile entry called +\eg{Previous-Sequence:}. + +\subsection{Draft Handling} % jlr +After the initial edit of a message draft, +the \pgm{comp}, \pgm{dist}, \pgm{forw}, and \pgm{repl} programs +give the user a \whatnow/ prompt. +The valid responses include: +\pgm{edit} to re-edit the draft, +\pgm{quit} to exit without sending the draft, +\pgm{send} to send the draft, and +\pgm{push} to send the draft in the background. + +When the \pgm{send} option is given, +the draft is posted with the message transport system. +If there problems posting the draft, +the \whatnow/ prompt is re-issued, +so errors in the draft may be corrected. + +Since posting the draft can be slow, +the \pgm{push} option allows the \MH/ user to send the draft in the +background, and return immediately to the shell. +If there are problems posting the message, +the user will not see the diagnostics produced by +the message transport system. +For this reason, +if \pgm{push} is used instead of \pgm{send}, +and the message is not successfully posted, +\MH/ mails a message to the user +containing any diagnostics which the message transport system produced +along with a copy of the message. +Later, +the draft may be re-edited by entering \eg{comp\ -use}. + +A relatively new feature of \MH/ is the ability to use a folder to store +multiple drafts. +These drafts are kept in an ordinary \MH/ folder, +and may be operated upon by \MH/ commands. +To enable this feature, +the \MH/ user selects a folder-name for the draft-folder, +and creates an entry in the \profile/: +\example Draft-Folder:\ +foldername\endexample +From this point on, +when a message is composed, +the draft will be created as a message in that folder, +instead of using the \file{draft} file in the user's \MH/ directory. +Unfortunately, +if posting problems occur on a message which has been \pgm{push\/}'d, +it may be difficult to re-edit the draft with +\eg{comp\ -use}. +This might be the case if the user had started composing another message, +while that first draft was being posted. +In that event, +the current-message in the draft-folder would no longer point +to the failed draft. + +There is a solution for this problem, however. +By default, +\pgm{push} assumes the \switch{forward} option, +which says that if the message draft fails to be posted, +it should be forwarded back to the user in the +error report which \pgm{push} generates. +The failed draft may then be extracted with the \pgm{burst} program +(discussed later). + +\subsection{BBoards} % mtr +\MH/ has a convenient interface to the UCI BBoards facility\cite{MRose84a}.% +\nfootnote{The UCI BBoards facility can run under either the \MMDF/ or +\SendMail/, +or in a more restricted form under stand-alone \MH/.} +This facility permits the efficient distribution of interest group messages +on a single host, +to a group of hosts under a single administration, +and to the ARPA Internet community. + +Although most readers are probably familiar with the concept of an interest +group in the Internet context, a brief description is now given. +Observant readers will notice that the distributed nature of the +``network news'' (a.k.a.~USENET) +tends to avoid many of the problems described below. + +Described simply, an interest group is composed of a number of subscribers +with a common interest. +These subscribers post mail to a single address, known as the +{\it distribution} address (e.g., {\tx MH-Workers@UCI}. +From this distribution address, a copy of the message is sent to each +subscriber. +Each group has a {\it moderator}, +who is the person that runs the group. +This moderator can usually be reached at a special address, +known as the {\it request} address (e.g., {\tx MH-Workers-Request@UCI}). +Usually, the responsibilities of the moderator are quite simple, +since the mail system handles distribution to subscribers automatically. +In some interest groups, +instead of each separate message being distributed directly to subscribers, +a batch of (hopefully related) messages +are put into a {\it digest} format by the +moderator and then sent to the subscribers. +(This is similar to a newsletter format.) +Although this requires more work on the part of the moderator +and introduces delays, +such groups tend to be better organized. + +Unfortunately, some problems arise with the scheme outlined above. +First, if two users on the same host subscribe to the same interest group, +two copies of the message are delivered. +This is wasteful of both processor and disk resources at that host. + +Second, +some groups carry a lot of traffic. +Although subscription to a group does indicate interest on the part of a +subscriber, +it is usually not interesting to get 50 or so messages delivered +each day +to the user's private maildrop, +interspersed with {\it personal} mail, +which is likely to be of a much more important and timely nature. + +Third, if a subscriber's address in a distribution list +becomes ``bad'' somehow and causes failed mail to be returned, +the originator of the message is normally notified. +It is not uncommon for a large list to have several bogus addresses. +This results in the originator being flooded with ``error messages'' from +mailers across the Internet stating that a given address on the list was +bad. +Needless to say, +the originator usually does not care if the bogus addresses got a copy +of the message or not. +The originator is merely interested in posting a message +to the group at large. +On the other hand, +the moderator of the group does care if there are bogus addresses on the list, +but ironically does not receive notification. + +To solve these problems, +the UCI BBoards facility introduces a new entity into the picture: +a {\it distribution channel}. +All interest group mail is handled by +the special mail system component. +The distribution address for an interest-group +maps mail for that interest-group to the distribution channel, +which then performs +several actions. +First, if local delivery is to be performed, +a copy of the message is placed in a global maildrop for the interest +group with a timestamp and a unique number. +Local users can read messages posted for the interest group by reading this +``public'' maildrop. +Second, if further distribution is to take place, +a copy of the message is sent to the distribution address in such a way that +if any of the addresses are bogus, +failure notices will be returned to the local maintainer of the group +address list, rather than the originator of the message. + +This scheme has several advantages: +First, messages delivered to the local host are processed and saved once +in a globally accessible area. +The UCI BBoards facility supports software which allows a user to query an +interest group for new messages and to read and process +those messages in the \MH/-style. +Second, once a host administrator subscribes to an interest group, +each user may join or quit the list's readership without +contacting anyone. +Third, a hierarchical distribution scheme can be constructed to +reduce the amount of delivery effort. +Finally, errors are prevented from propagating. +When an address on the distribution list goes bad, +the list moderator who is responsible for the address is notified. +If a local moderator does not exist, +then the local PostMaster is notified (not the global group moderator). + +In addition to solving the problems outlined above, +the UCI BBoards facility supports several other capabilities. +BBoards may be automatically archived in order to conserve disk space and +reduce processing time when reading current items. +Also, +the archives can be separately maintained on tape for access by interested +researchers. + +Special alias files may be generated which allow the \MH/ user to shorten +address entry. +For example, instead of sending to {\tx SF-Lovers@Rutgers}, +a user of \MH/ usually sends to \eg{SF-Lovers} and the \MH/ aliasing +facility automatically makes the appropriate expansion in the headers of the +outgoing message. +Hence, +the user need only know the name of an interest group and not its global +network address. + +Finally, the UCI BBoards facility supports {\it private} interest groups +using the \unix/ group access mechanism. +This allows a group of people on the same or different machines to conduct a +private discussion. + +The practical upshot of all this is that the UCI BBoards facility automates +the vast majority of BBoards handling from the point of view of both the +PostMaster and the user. + +\MH/ provides three programs to deal with interest groups. +The \pgm{bbc} program is used to check on the status of one or more groups, +and to optionally start an \MH/ shell on those groups which the user is +interested in. +The \pgm{bbl} program can be used to manually perform maintenance on a +discussion group beyond the normal automatic capabilities of the UCI BBoards +facility. +Finally, +the \pgm{msh} program implements an \MH/ shell for reading BBoards, +in which nearly all of the \MH/ commands are implemented in a single program. + +Observant readers may note that the use of \pgm{msh} is contrary to the \MH/ +philosophy of using relatively small, single-purpose programs. +Sadly, +the authors admit that this is true. +In an effort to minimize use of system resources however, +BBoards are kept in maildrop format instead of folders.% +\nfootnote{When the message transport system delivers a message to a user +it stores it in a single file, called a {\it maildrop}. +Since many messages may be present in a single maildrop, +(in theory) there is a unique string acting as a separator between messages +in the maildrop. +Although this is convenient for storage of messages, +it makes retrieval more difficult unless a separate index into the maildrop +is kept. +This latter approach is taken by the \pgm{msg} program available with \MMDFII/ +and by \pgm{msh} as well.} +Some research has gone into overcoming this problem to restore +\MH/'s purity of purpose, +but all solutions proposed to date are either unworkable or require +significant recoding of \MH/'s internals. + +\subsection{Bursting} % jlr +Internet interest group mail is often sent out in digest form. +The experienced \MH/ user may wish to deal with the digest messages on +an individual basis, however. +The \pgm{burst} program allows the \MH/ user to extract these digest +messages, +and store each as an individual \MH/ message. + +\pgm{Burst} will also extract forwarded messages generated by \pgm{forw} +(or the forwarded message in the error report generated by \pgm{push}, +as described above). +Although \pgm{burst} cannot always decapsulate +messages encapsulated by sites not running \MH/, +it adheres to the proposed standard described in \cite{MRose85b}. + +\subsection{Distributed Mail} % mtr +The ARPA Internet community consists of many types of heterogeneous nodes. +Some hosts are large mainframe computers, +others are personal workstations. +All communicate using the \milstd/ TCP/IP protocol suite\cite{IP,TCP}. +Messages which conform to the Standard for the Format of ARPA Internet Text +Messages\cite{DCroc82} +are exchanged using the Simple Mail Transfer Protocol\cite{SMTP}. + +On smaller nodes in the ARPA Internet, +it is often impractical to maintain +a message transport system (e.g., \SendMail/). +For example, +a workstation may not have sufficient resources (cycles, disk space) +in order to permit an SMTP server and associated local mail delivery system +to be kept resident and continuously running. +Furthermore, +the workstation could be off-net for extended periods of time. +Similarly, +it may be expensive (or impossible) to keep a personal computer +interconnected to an IP-style network for long periods of time. +In other words, +the node is lacking the resource known as ``connectivity''. + +Despite this, +it is often desirable to be able to manage mail with \MH/ on these smaller +nodes, +and they often support a user agent to aid the tasks of mail handling. +To solve this problem, +a network node which can support a message transport entity +(known as {\it service} host) offers +a maildrop service to these less endowed nodes +(known as {\it client} hosts). +The Post Office Protocol\cite{JReyn84} (POP) is intended to permit a +workstation to dynamically access a maildrop on a service host to pick-up +mail.% +\nfootnote{Actually, +there are three different descriptions of the POP. +The first, cited in \cite{JReyn84}, +was the original description of the protocol, +which suffered from certain problems. +Since then, +two alternate descriptions have been developed. +The official revision of the POP\cite{MButl85}, +and the revision of the POP which \MH/ uses +(which is documented in an internal memorandum in the \MH/ release). +This paper considers the POP in the context of the \MH/ release.} +The level of access includes the ability to +determine the number of messages in the maildrop and the size of each message, +as well as to retrieve and delete individual messages. +More sophisticated implementations of the POP server +are able to distinguish between the header and body portion of each message, +and send $n$ lines of a message to the POP client. +This capability is useful in thinly connected environments where conservation +of bandwidth is important. +By utilizing a more intelligent POP client, +a user may generate ``scan~listings'' and decide dynamically which messages +are worth taking delivery on. +The philosophy of the POP is to put intelligence in the +POP clients and not the POP servers. + +The current release of \MH/ supports the above model fully. +A POP client program is available to retrieve a maildrop from a POP service +host. +In addition, +using the SMTP configuration for delivery in \MH/ +(either in conjunction with \SendMail/ or the \MMDF/), +a user is able to specify a search-list of service hosts (and/or networks) +to try to post mail. +Using this search-list, +when an \MH/ user posts a draft, +the \pgm{post} program will attempt to establish an SMTP connection +with each host in the search-list to post the message until it succeeds. +Initial experimentation using the POP and \MH/ +in a local network environment has proved quite successful. + +\section{User Interface Issues in \MH/} % mtr +At this point, +it is perhaps useful to take a step backwards and examine the success +and problems of \MH/'s approach to user interfaces. + +\subsection{Creeping Featurism} % mtr +A complaint often heard about systems which undergo substantial development +by many people over a number of years, is that more and more options are +introduced which add little to the functionality but greatly increase the +amount of information a user needs to know in order to get useful work done. +This is usually referred to as {\it creeping featurism}. + +Unfortunately \MH/, +having undergone six years of off-and-on development by ten or so +well-meaning programmers (the present authors included), +suffers mightily from this. +For example, +the \pgm{send} command has twenty-five visible switches, +and at least nine hidden switches, +for a total of thirty-four. +The poor user who types \example send\ -help\endexample watches the options +scroll off the screen +(since the \switch{help} switch also lists out four other lines of +information).% +\nfootnote{Recently, +this was fixed by compressing the way in which switches are presented. +The solution is only temporary however, +as \pgm{send} will no doubt acquire an {\it endless} number of switches in +the years to come.} +The sad part is that all of these switches are useful in one form or another. + +There are a lot of good things to be said for the +``one program, one function'' philosophy of system design. +In the \MH/ case, however, +each program really does only one mail handling activity +(with a few minor exceptions). +The options associated with each command are present to modify the program's +behavior to perform similar, but slightly different tasks. +In further defense of \MH/, +note that there are~32 \MH/ commands at present, +all performing different tasks. + +The problem with creeping featurism though, +is that while the functionality of the system increases sub-linearly, +the complexity of the system increases linearly. +That is, +although the number of switches that a program takes might double, +it is unlikely that the program's functionality or capabilities will double. + +\subsection{Templates versus Switches} % mtr +One way to trim the explosion of available options, +while still increasing functionality, +is to introduce options with a richer domain. +Hence, +instead of using options which take {\it on} or {\it off} forms +or simple numeric or string values, +the possible values which an option might take on is given a large space. +There are several ways that this might be accomplished. + +\tagdiagram{2}{Draft Skeleton}{components} +The \pgm{comp}, \pgm{dist}, and \pgm{forw} programs +use draft {\it skeletons} (simple form fill-in files) to construct the +general format of the draft being composed. +An example of a draft skeleton used for composing new messages +(by \pgm{comp\/}) is shown in Figure~\components. +The approach is to let the user specify (and later edit) both arbitrary +headers of draft and the body of the draft. +Note while most of the fields are empty, +the first \eg{Fcc:} field already contains a value. +By using the simple prompting editor, \pgm{prompter}, +the user can speedily enter the headers of the message. +The \pgm{prompter} program given the skeleton in Figure~\components\ would +prompt the user for the contents of each field, +except for the second \eg{fcc:}, +which it would include verbatim. +It would then read the body of the message up to an end-of-file. +Naturally, +the \MH/ user is free to use {\it any} editor to edit {\it any} part of the +draft (headers or body). +This example +demonstrates the flexibility achieved by not limiting what headers a +draft may contain (which most mail sending programs do), +while still retaining the simplicity of being able to treat the entire +message draft as a \unix/ file. + +\tagdiagram{3}{Reply Template}{replcomps} +Another more interesting approach is used by the \pgm{repl} command, +which constructs a draft in reply-to a previously received message. +Instead of adding switches to indicate which fields of the draft should be +derived from the message being replied-to, +and how they should be derived, +a single option, +the ability to specify a {\it template}, was made available. +An example of a reply template is shown in Figure~\replcomps. +Put simply, +based on the presence of certain fields in the message being replied-to, +and a few switches given by the user, +using the reply template, +\pgm{repl} generates the reply draft automatically. + +\tagdiagram{4}{The \file{tripcomps} Reply Template}{tripcomps} +This facility, for example, +can be used to generate automatic replies.% +\nfootnote{\MH/ supports the notion of a user-defined {\it mail hook} +which is invoked each time a user receives mail.} +One function might be to write a \pgm{rcvtrip} shell script +which automatically answered messages when mail wasn't being read for a +period of time +(e.g., while attending a conference). +An example of a reply template at the heart of such a script +is shown in Figure~\tripcomps. + +\tagdiagram{5}{The \file{bombcomps} Reply Template}{bombcomps} +Finally, +another application might be to utilize +the highly useful letter bomb protocol.% +\nfootnote{The authors wish to credit Ron Natalie of the Ballistics Research +Laboratory in Aberdeen, Maryland for formalizing the +use of this protocol in the ARPA Internet community.} +The important thing to note about this template is that it generates not only +the headers of the reply draft (with a creative \eg{Reply-to:} address), +but the body as well. +Hence, +the commands +\example + repl\ -form\ bombcomps\ -noedit\ ;\ rmm\\ + What\ now?\ push% +\endexample +are very handy for dealing with disturbing mail in a straight-forward manner. +Of course, \pgm{repl} could be linked to \pgm{bomb} in the user's \file{bin/} +directory and an appropriate line could be added to the user's \MH/ profile, +in order to further shorten type-in. + +\tagdiagram{6}{Display Template}{mhlforward} +A variation on the reply template is the {\it display template}. +A display template, as used by the \pgm{mhl} program, +contains instructions on how to format a message. +In addition to being used by \pgm{show}, et.~al., +the \pgm{forw} program can also use a display template to format each +message being forwarded. +Similarly, +although \pgm{repl} uses a reply template to construct the draft +being composed, +it also may use a display template to format the body of the message +being replied-to for enclosure in the reply. +Furthermore, +the \pgm{post} program may use a display template to format the body of a +blind-carbon-copy. +An example of a display template used for formatting forwarded messages +is shown in Figure~\mhlforward. + +As with reply templates, +display templates can offer a lot of functionality. +For example, +the one line display template: +\example + body:nocomponent,overflowtext=,overflowoffset=0,width=10000% +\endexample +can be used to extract the body of a message, +while ignoring the headers. +Hence, +if a \pgm{shar} archive arrived in the mail, +a convenient way to unpack it, +assuming the above display template was called \file{mhl.body}, +would be: +\example show\ -form\ mhl.body\ |\ sh\endexample + +The biggest win with display templates, +of course, +is that all those annoying header lines which mailers +everywhere generate can be simply and easily filtered out. + +\subsection{Modularity versus Monolithicity} % jlr +Since \MH/ is a set of programs +which perform separate tasks, +as opposed to being a single, monolithic program, +the power of the shell is used directly to aid in mail-handling. +One powerful capability which this design achieves is the ability to extend +the \MH/ command set, +by developing shell scripts which use the standard \MH/ +programs to accomplish complicated or specialized tasks. + +\tagdiagram{7}{The \pgm{mpick} Script}{mpick} +For example, +in the \MH/ distribution there is a shell script +called \pgm{mpick} (shown in Figure~\mpick) +which tries to locate all the messages which pertain to a given discussion, +by looking at the \eg{Message-ID:} and \eg{In-reply-to:} headers, +to find matching message-ids.% +\nfootnote{Note that the shell scripts included in the \MH/ distribution +are written for the {\it Bourne} shell, +and have a `:' as the first character of the first line, +so they will be portable to all versions of \unix/, +not just those which support the +Berkeley `\#!' enhancement.} + +\tagdiagram{8}{The \pgm{append} Editor}{appended} +Unfortunately, some parts of \MH/ are somewhat monolithic. +An example of this is the \whatnow/ prompt. +There are only a few options at this prompt, +and one cannot give a normal shell command. +Some \MH/ users seem to feel that more options should be added to +the \whatnow/ prompt, such as an \pgm{insert-file} option. +It was argued that just about any editor would allow you to +insert a file, and another \whatnow/ option was not needed. +These users persisted, however, so the +problem was solved, by writing a trivial shell +script ``editor'' (see Figure~\appended) +which could be invoked by the \pgm{edit} option: +\example What now?\ edit\ append\ filename\endexample + +A better interface at this point is really needed, however. +One possibility is to simply pass any unrecognized commands on +to a shell for interpretation, supplying the path name of the draft file +as an argument. +A solution which shows more promise is to give you a sub-shell +{\it instead} of the \whatnow/ prompt, +and setup certain envariables so that +the \MH/ commands would act upon the \file{draft} by default. +For example, \pgm{show} with no \arg{msgs} arguments +would show the draft instead of the current message. +This alternative has recently been implemented and is under testing. + +\section{The \MH/ Distribution} % mtr +The \mh5 distribution is now briefly described, +both in terms of static configuration methods +and dynamic tailoring. +Appendix~B describes the mechanics of receiving an \mh5 distribution. + +\subsection{Configurable \MH/} % jlr +The \MH/ distribution currently runs on a large number of different \unix/ +versions, +ranging from MicroSoft XENIX to Berkeley 4.2\bsd/. +All the code which is specific to a particular target environment is +enabled via the C-preprocessor \eg{\#ifdef} mechanism, +so compilation under different versions of \unix/ is trivial. +There are, +however, +a large number of compile-time options which may vary from site to site, +so an automated configuration method was needed. + +\tagdiagram{9}{Sample \MH/ Configuration File}{mhconfig} +The \MH/-installer must create a configuration file, +which contains a list of the compile-time options +and the values which are desired for them. +Compile-time options include the installation location for \MH/, +what kind of message transport system is to be used, +and the default editor for the installation. +An example of such a configuration file is shown in Figure~\mhconfig. + +After creating this file (several examples are included in the distribution), +the installer runs the \pgm{mhconfig} program, +which customizes the \file{Makefile\/}s and some of the programs, +for that site's particular installation. +No hand-editing of any source code should be necessary, +under normal circumstances. + +\subsection{Interface to the Message Transport System} % jlr & mtr +\MH/ will run with a number of message transport systems, +including \SendMail/, \MMDFII/, and a small stand-alone system. +One flexible method of posting mail is through an SMTP connection. +There are a couple of major wins in using this configuration: +First, +none of the \MH/ programs need to know where the interface programs to +the message transport system are located, +which makes them easier to move between systems. +Second, +mail can be posted on relay hosts, +and the local host of an \MH/ user may not need a message transport system at +all (as alluded to in the preceeding discussion on the POP). + +\tagdiagram{10}{Sample MTS Tailor File}{mtstailor} +Those parts of \MH/ which interact with the local message transport agent +read additional tailoring information when they start.% +\nfootnote{This simple facility is based on a more extensive +tailoring capability found in \MMDFII/.} +This information includes +the location of standard and alternate maildrops, +maildrop delimiter strings, +the locking directory and locking style, +and other tailoring information specific for the particular +message transport system in use +(e.g., the default server search-list when mail is posted with the SMTP). +In most cases, +by using a tailor file, +each site running a similar \MH/ configuration is able to simply transfer +\MH/ binaries between hosts. +An example of such a tailor file is shown in Figure~\mtstailor. + +A continuing question which is often raised is how intelligent should user +agents (like \MH/ and UCB \pgm{Mail}\/) be with respect to the environment in +which they operate. +At present, \MH/ likes to determine +the official hostnames for addresses when posting mail. +Many argue that this is improper or unnecessary behavior for a user agent, +and that the local message transport agent should handle these functions. +Unfortunately, +this implies that the message transport agent should munge headers when mail +is posted to remove local host aliases and only permit address fields with +fully-qualified addresses. +Sadly, neither \SendMail/ nor \MMDFII/ really gets this right +(flames to \file{/dev/null} please). +The current \MH/ maintainers believe that the resolution of host aliases to +official names should be a well-supported interface with the local message +transport agent. +However, to provide equal time to those who hold opposite views, +\MH/ supports a configuration option called \eg{DUMB} which disables \MH/'s +attempts to resolve addresses into fully-qualified strings. + +\section{Concluding Remarks} % jlr and mtr +While \MH/ has undergone significant development since +the original +Rand release, the authors have +tried to keep the fundamental concepts of +\MH/ unchanged. + % specific vs. general +The authors have continually had to battle against +well-meaning \MH/ users who wanted to make \MH/ +more like other (less powerful) user agents. +More and more ``features'' were often suggested for \MH/, +usually at the expense of making \MH/ less general, and more specific. +In nearly all cases, the ``features'' which these users wanted +were already present in \MH/ in a slightly different form, +or could be realized by simply writing a short shell script. +A classic example is the repeated requests by one user to have \pgm{dist} +take a list of messages rather than a single message and distribute each one +of them in turn. +A simple shell script which called \pgm{dist} repeatedly, +perhaps with ``canned'' arguments so the user typed in addressing information +only once, would easily meet this request. + + % generality +A number of \MH/ comands have a large number of options. +When adding options, the authors have tried to make the options +general, while still accomodating the requests of specific users. +An example of a specific request which was implemented as a +general feature is the \eg{Previous-Sequence} profile entry +(mentioned above). +If you use this profile entry, every \MH/ command is forced to write +out \context/ changes, making every command somewhat slower. +Since only a few users wanted this capability, it was implemented +in such a way that users who didn't want it, didn't have to pay +the cost of slowing down every \MH/ command. + + % naive user :: MH +\MH/ has a powerful tailoring capability provided by the \profile/. +Using profile entries, users may +customize their own environment without affecting others. +Novice users often take advantage of the \MH/-tailoring +capabilities to try to make \MH/ work similarly to +other user agents they've used. +This has the advantage of allowing them to quickly begin +using \MH/ to handle their mail. +However, since these novice users don't take advantange of all the +capabilities of \MH/, +they frequently will complain about things they think can't +be done with \MH/, or could be done ``better'' some other way. +Fortunately, +as these users become more experienced with both \MH/ and \unix/, +they can modify their environment to take better advantage of +all of \MH/'s capabilities. +Novice \MH/ users who see features lacking +are encouraged to take a better look at what \MH/ {\it can} do, +instead of trying to make \MH/ into something it isn't. +This may sound rather inflammatory, +but it would really be a much nicer world for us all if users of software +systems would read the manual prior to asking questions. + + % speed consideration +For a moment, let's consider the evolution of one \MH/ feature which has +proved itself to be very useful. +As users began employing \MH/ to handle their mail, +the number of messages that could be processed +in a given amount of time increased greatly. +As the volume of messages increased however, +it became clear that some \MH/ operations were too slow, +in particular the interaction with the (slow) message transport system. +To overcome this problem, the \pgm{push} option +was added at the \whatnow/ prompt. +Originally, this option was hidden from novice users +and did little more than send the message in the background: +any output generated by +the background \pgm{send} process would be printed +asyncronously on the terminal. +If a message failed posting with the message transport system, +it would simply be left in the \file{draft} file. + +Gradually, other features were added to \pgm{push}. +Since users wanted to be able to send more than one draft +at a time, \pgm{push} was changed to optionally +rename the draft file before posting it. +(This is what the hidden \switch{unique} option does.) +Having message transport system diagnostics +written asyncronously on the user's terminal was annoying, +so \pgm{push} was made to intercept these diagnostics, +and mail the user a report containing them. +Although the diagnostic report mailed back by \pgm{push} contains +the name of the draft which failed, +a useful added feature was the ability to have \pgm{push} +include the failed draft as well. +Eventually, the draft-folder mechanism was implemented to make +handling multiple message drafts much easier. + + +\subsection{TODO} % mtr +There are, no doubt, a number of improvements which could be made to \MH/. +At the present time, +what further development should \MH/ suffer? +Although not by any means inclusive, +here's a list: +\smallskip +{\advance\leftskip by\parindent +\item{1.} Performance Enhancements\hbreak +Hardware gets faster all the time, but people always complain that software +is too slow. +Owing to its user interface style, +\MH/ is somewhat slower than monolithic programs like UCB \pgm{Mail}. +It would be nice if \MH/ could be tuned or accelerated somehow. + +\item{2.} Port to System~5\hbreak +\MH/ runs on 4.2\bsd/~\unix/ and Version~7 variants. +It should not be difficult to port \MH/ to a SYS5 environment. +This should significantly increase the number of hosts +on which \MH/ can run. +The authors, +lacking a SYS5 machine (and experience with SYS5) to perform the port, +are actively seeking a System~5 guru to attempt this feat. + +\item{3.} Interface to the Network News\hbreak +Not all sites that run \MH/ are in the ARPA Internet, +and as such the UCI BBoards facility may not be of much use to them. +A good \MH/ interface to the network news would allow users on hosts with a +news feed to employ the same interface for reading and sending both mail and +news. + +\item{4.} Programmed Instruction for Beginners\hbreak +The complexity of \MH/ is often intimidating to new users. +It would be nice to develop a set of \pgm{learn} lessons for those users who +don't like \pgm{man} pages and non-interactive tutorials. + +\item{5.} Message List Expansion\hbreak +At present, when a list of messages is given to an \MH/ command, +it expands the list and processes each message in numerical order +rather than the order in which the messages were given +(e.g., \eg{show\ 2\ 1} \pgm{show\/}s message~1 +and then message~2). +It would be nice if \MH/ processed messages in the order +they were given. + +\item{6.} Context Changes\hbreak +In nearly all cases, +an \MH/ command does not write out context changes until it is about to exit +successfully. +There is some controversy as to whether this is the correct behavior +in all cases. +Some argue that once an \MH/ command has fully parsed its argument list, +the context should be updated. +\par} diff --git a/docs/historical/realwork/version b/docs/historical/realwork/version new file mode 100644 index 0000000..920a139 --- /dev/null +++ b/docs/historical/realwork/version @@ -0,0 +1 @@ +43 diff --git a/docs/historical/realwork/version.sh b/docs/historical/realwork/version.sh new file mode 100644 index 0000000..9ec1e79 --- /dev/null +++ b/docs/historical/realwork/version.sh @@ -0,0 +1,9 @@ +if [ ! -r version ]; then echo 0 > version; fi +touch version +echo '\catcode`\#=12' > version.tex +awk ' { version = $1 + 1; }\ +END { printf "\\def\\versiontag/{#1.%d}%%\n", version >> "version.tex"; \ + printf "%d\n", version > "version"; }' < version +echo '\def\versiondate/{'`date`'}%' >> version.tex +echo '\catcode`\#=6' >> version.tex +echo '\tell{Version \versiontag/ of \versiondate/}' >> version.tex diff --git a/docs/historical/realwork/version.tex b/docs/historical/realwork/version.tex new file mode 100644 index 0000000..57ae70c --- /dev/null +++ b/docs/historical/realwork/version.tex @@ -0,0 +1,5 @@ +\catcode`\#=12 +\def\versiontag/{#1.43}% +\def\versiondate/{Tue Apr 30 08:38:26 PDT 1985}% +\catcode`\#=6 +\tell{Version \versiontag/ of \versiondate/} diff --git a/docs/historical/trusted/Makefile b/docs/historical/trusted/Makefile new file mode 100644 index 0000000..33c7f8e --- /dev/null +++ b/docs/historical/trusted/Makefile @@ -0,0 +1,61 @@ +####################################################################### +# Instructions to Make, for generation of nice-looking papers using TeX +####################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if TEXINPUTS=../doclib:.:${TEXINPUTS} tex \ + \\nonstopmode\\input $<\\bye; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# trusted +############################################################# + +i-all: trusted.dvi + +i-print: trusted.dvi true + dvisp $(DFLAGS) -J Trusted trusted.dvi + + +# customization files, et. al., not included below +trusted.dvi: version.tex + +version.tex: trusted.tex \ + text.tex \ + figure1.tex figure2.tex figure3.tex table4.tex \ + appendixA.tex \ + diagramA1-1.tex diagramA1-2.tex diagramA1-3.tex \ + diagramA1-4.tex \ + appendixB.tex \ + diagramB1-1.tex diagramB1-2.tex \ + appendixC.tex refs.tex \ + version.sh + @: version.sh + +true:; + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f trusted.dvi trusted.imp + +clean:; rm -f trusted.lof trusted.log trusted.lot trusted.toc _* diff --git a/docs/historical/trusted/appendixA.tex b/docs/historical/trusted/appendixA.tex new file mode 100644 index 0000000..694be57 --- /dev/null +++ b/docs/historical/trusted/appendixA.tex @@ -0,0 +1,77 @@ +% appendix A + +\appendix{A}{An MH Session} + +\tagdiagram{A1-1}{Sending Encrypted Mail}{sendmail} +In the following, +the user \eg{Marshall\ T.\ Rose} logged onto host \eg{udel-dewey}, +wishes to send a message to a user known as +the \eg{UCI\ Portal} (a system maintenance account). +As shown in Figure~\sendmail, line~1, +the user first establishes a mapping between the name \eg{UCI\ Portal} and +the address {\tx uci@udel-dewey}. +Once this mapping is performed, +it remains in effect until the user indicates otherwise to the \TMA/. +When the \pgm{tma} program is invoked, +it consults the \TMA/ database to see if that user is known. +If not, +it contacts the \KDS/ to ask for the \KDS/ ID associated with the user. +If the response is successful (in this case, the \KDS/ ID is \eg{3}), +then the \TMA/ updates its database. +The \pgm{tma} program indicates in its output the \KDS/ ID associated with +the user, +along with all known addresses (in this case, only one). +So, once the name to address mapping has been described the user, +the user agent, \MH/, deals only with the address, +while the trusted mail agent deals with the name and \KDS/ ID aspects of the +user. + +Next, the \pgm{comp} program is invoked to compose a new draft on line~5. +The user addresses the local user \eg{uci} in the To: field, +and indicates that a plaintext copy should be kept in the folder \eg{+outbox}. +After entering the subject and text of the draft, +the user enters \whatnow/ level on line~13. +At this point, +the user directs \MH/ to send the draft in encrypted form. +The resulting output is verbose (a default for \pgm{send} for this user) +but instructive. +Initially, +all addresses in the draft are verified on lines~14 to~17. +Two forms of verification occur: +first, the \MTS/ is asked to verify the address as much as possible. +For local addresses, +the \MTS/ decides if the name has a maildrop associated with it. +For remote addresses, +the \MTS/ decides if the host is known to it. +The second type of verification occurs with the \TMA/. +For all addresses, +the \TMA/ is asked if it can find a mapping from the address to a \KDS/ ID. + +The reason \MH/ goes to all this trouble is a philosophical issue. +Since the copy of the encrypted draft is different for each recipient, +\pgm{post} tries to verify that all recipients can be successfully posted +prior to actually posting the different ciphertext versions of the draft. +This behavior is not optimal in terms of cycles, +but is perhaps ``correct'' from a \UA/ perspective. + +Finally, the draft is actually posted, and the folder carbon-copy is filed. + +\tagdiagram{A1-2}{Receiving Encrypted Mail}{recvmail} +Some time later, the UCI portal is informed that new mail has arrived. +As shown in Figure~\recvmail, +the \pgm{inc} program is run. +The \eg{E} prior to the date of the message indicates that \pgm{inc} has +detected the message to be encrypted. +Since the user did not inhibit \pgm{inc} from deciphering the message, +it proceeds to do so. + +\tagdiagram{A1-3}{Message Prior to Decryption}{before} +\tagdiagram{A1-4}{Message After Decryption}{after} +Finally, it may be instructive to see what the encrypted message looked like +when it was delivered to the portal's maildrop, +and the final message after deciphering. +Figures~\before\ and~\after\ show these respectively. +In particular, +note that the \eg{X-KDS-ID:} field has been introduced in Figure~\after\ +after successfully deciphering the message. +The presence of this field authenticates the sender of the message. diff --git a/docs/historical/trusted/appendixB.tex b/docs/historical/trusted/appendixB.tex new file mode 100644 index 0000000..8881435 --- /dev/null +++ b/docs/historical/trusted/appendixB.tex @@ -0,0 +1,93 @@ +% appendix B + +\appendix{B}{A Short Exchange} + +The simple nature of the interchange between the user and \MH/ +in Appendix~A completely hides any interactions between the \TMA/ +and the \KDS/. +Let us briefly examine an exchange that might occur +after the destination \TMA/ receives the message shown in Figure~\before. + +To begin, +the \TMA/ must ascertain what it knows about the sender of the message, +which claims to have a \KDS/ ID of~17. +That is, +the \TMA/ must first consider what key relationships it has with the sender. +For the sake of argument, +suppose that this purported subscriber is unknown to the \TMA/. +In this case, +the first step it must undertake is to ascertain the validity of this +subscriber. + +\tagdiagram{B1-1}{Ascertaining the Sender}{rui} +As shown in Figure~\rui\ on lines~1--7, +the \TMA/ does this by establishing a connection to the \KDS/ and issuing an +{\it request identified user} (RUI) MCL.% +\nfootnote{In point of fact, +the {\it very} first thing that the \TMA/ does after connecting to the \KDS/ +is verify that the key relationships between the \KDS/ and the \TMA/ are +valid (have not expired). +If the key relationship between the two has expired, +the \TMA/ issues a {\it request service initialization} RSI MCL to +establish a new key relationship. +This relationship contains a {\it key-encrypting key} (KK) +and an {\it authentication key} (KA). +Once a valid key relationship exists between the \KDS/ and the \TMA/, +transactions concerning other key relationships may take place.} +If the response by the \KDS/ is positive, +the \TMA/ will use the information returned when generating the +\eg{X-KDS-ID:} field for authentication. +The response \CSM/ returned by the \KDS/ includes +an {\it authentication checksum} (the MAC field on line~15) +and a {\it transaction count} (the CTA field on line~12) +to prevent spoofing by a process pretending to be the \KDS/. +The \TMA/ then acknowledges that the response from the server was acceptable +on lines~18--24. + +The next step is to ascertain the actual key relationship used to encrypt the +structure $m$, which appears after the identifying string. +The \TMA/ consults the IDK field in $m$, +and if this relationship is unknown to it, +then the \KDS/ is asked to disclose the key relationship. + +\tagdiagram{B1-2}{Ascertaining the Key Relationship}{rsi} +As shown in Figure~\rsi\ on lines~1--9, +This is done by issuing a {\it request service initialization} (RSI) MCL +and specifying the particular key relationship of interest. +The \KDS/ consults its database, +and if the exact key relationship between the two indicated \TMA/s can be +ascertained, +it returns this information. +The key relationship +is encrypted using the key relationship between the \KDS/ and the \TMA/, +and the usual count and authentication fields are included. + +Once the \TMA/ knows the key relationship used to encrypt the structure $m$, +it can decider the structure and ascertain the KD/IV/KA triple used to +encrypt the body of the message. + +% <--- ( +% <--- MCL/RSI +% <--- ORG/3 +% <--- KDC/TTI +% <--- SVR/*KK.KD +% <--- EDC/dabfdb4c +% <--- ) +% ---> ( +% ---> MCL/RTR +% ---> ORG/3 +% ---> *KK/926b876cafce46cd365382c36a40fa80 +% ---> CTA/1 +% ---> KD/1eea5394e6ad1b75 +% ---> KD/6c95c8d2caa75807 +% ---> EDK/850618075827 +% ---> KDC/TTI +% ---> MAC/501f71b6 +% ---> EDC/5bd7b2d0 +% ---> ) +% <--- ( +% <--- MCL/ACK +% <--- ORG/3 +% <--- KDC/TTI +% <--- EDC/db46ce7e +% <--- ) diff --git a/docs/historical/trusted/appendixC.tex b/docs/historical/trusted/appendixC.tex new file mode 100644 index 0000000..e3b043e --- /dev/null +++ b/docs/historical/trusted/appendixC.tex @@ -0,0 +1,151 @@ +% appendix C + +\appendix{C}{Differences between the ANSI and TTI drafts} + +The differences between the \ansi/ draft standard for +financial institution key management, +and the \TTI/ draft's specification for trusted mail handling, +are considered. + +The concept of a {\it key distribution center} +(\CKD/ in the \ansi/ draft, \KDC/ in the \TTI/ draft) +environment differs. +In the \ansi/ draft, +only one party talks to the {\it key distribution server} (\KDS/); +in the \TTI/ draft, +both parties talk to the \KDS/. +This leads to a number of differences in the two protocols. +The reason for this shift in the \TTI/ draft is somewhat subtle: +although both parties can talk to the \KDS/, +the {\it mail transfer system} (\MTS/) +environment is such that both {\it user agents} (\UA/s) are unable to +contact each other in real-time. +Hence, a detailed two-way protocol between them is prohibitively expensive.% +\nfootnote{In the words of Einar A.~Stefferud: +``Every interesting connection has at least two end-points~---~connections +with only one end-point are always uninteresting.''} + +Before discussing the differences between the two drafts, +let us consider the differences in the two environments: +in the electronic mail environment, +the two end-to-end peers need not be simultaneously online. +Electronic mail relies on a communication service with potentially large +delays in transit between {\it message transfer agents} (\MTA/s). +A basic concept of ``mail'' is that an originator must release the enveloped +message to a ``transfer agent'' before delivery can be attempted to a +recipient. +In contrast, +in the electronic funds environment, +the two peers make use of a virtual-circuit service. +This means that they can synchronize much easier +and inter-operate in a more direct fashion. + +Service protocols are based on the notion of requests and responses. +A client issues a request to a server, +the server processes the request and returns a response. +Depending on the complexity of the protocol, +the client may now respond to the server's message, +or might issue a new request, +or might terminate the connection. + +As delays in the network increase, +along with the possibility of loss or corruption or re-ordering of messages, +it becomes more difficult to implement a service protocol. +In the case of a high-level protocol making use of a virtual-circuit service, +most problems can be ignored, +as the virtual-circuit service masks out problems in the network +by using sequences, positive (and/or negative) acknowledgments, windows, +and so on. + +Sadly, electronic mail cannot utilize a virtual-circuit throughout the \MTS/ +(although individual \MTA/-wise connections are (in theory) virtual-circuit +based). +This means that implementing a real-time or interactive +service protocol between two endpoints (a.k.a.~\UA/s) +in the \MTS/ is very difficult. +As a result, +the complexity of an end-to-end protocol in the \MTS/ +(in terms of requests and responses) +is severely constrained. +For all practical purposes, +an \MTA/ can assume datagram service and nothing else: +messages might be re-ordered; +messages might not reach their destination; +messages might be corrupted (though this is unlikely); +in cases of failure, a notice might be generated, or might not. + +In terms of the environment in which {\it cryptographic service messages} +(\CSM/s) must flow, +the high degree of delay and uncertainty make the implementation of a complex +end-to-end protocol between \UA/s prohibitively expensive. +Hence, a \KDC/ is needed, +to which each \UA/ can connect using a virtual-circuit service, +at posting and delivery time. +The \TTI/ draft terms such a user agent a {\it trusted mail agent} (\TMA/). +Since both \TMA/s can connect to the \KDS/ at different times using different +media, +the \KDS/ maintains state information about the key relationships between +different \TMA/s and manages those relationships appropriately. +Since connections to the \KDS/ can be expensive in terms of resources, +each \TMA/ caches information received from the \KDS/ appropriately. + +That's the gist of the argument as to why the \TTI/ draft differs from the +\ansi/ draft. +It might be possible to include \CSM/s in the messages which \UA/s exchange, +but management of these \CSM/s can not be done reliably or in a straightforward +fashion owing to the datagram nature of the service offered by the \MTS/. +Finally, it should be noted that in the \TTI/ draft, +the \KDS/ never initiates a connection with a \TMA/, +rather it is the \TMA/s which connect to the \KDS/. + +In the following, +the differences between the two drafts are highlighted. +Minor differences between the two are not discussed. + +In the \ansi/ draft, +$\S 4.2$ (p.~22) discusses the requirements for the automated key +management architecture. +The \TTI/ draft has somewhat more ``depth'', +since the \ansi/ draft does not make use of a {\it master key} (MK) +to fully automate the distribution of {\it key-encrypting keys} (KK). + +The \ansi/ draft states that once a KK-relationship is discontinued by either +of that pair, +the relation is not to be re-used for any subsequent activity. +This can't be guaranteed in the prototype implementation. +If one of the \TMA/s wishes to discontinue a key, +not only does it have to inform the \KDS/, +but the other \TMA/ as well. +Since the \TTI/ draft does not permit \CSM/s between \TMA/-peers, +the latter action doesn't seem possible. +However, there is a solution. +Whenever a message is deciphered, +the \TMA/ checks the effective date of the key used to +encrypt a message it has received, +and if the key is newer than the one it currently uses, +it considers the older key to be discontinued. + +Furthermore, +although the environment in the \TTI/ draft is that of a key distribution +center, +the notion of an {\it ultimate recipient} is not present, +since all clients connect to the \KDS/ at one time or another. +In addition, +the differences between the environs envisioned by the two drafts +become even more pronounced when one considers that the \KDS/ distributes +key-encrypting keys to \TMA/s, +although the \ansi/ draft specifically prohibits this. + +Finally, +there is another important technical difference between the two +drafts: +every request to the \KDS/ by the \TMA/ +results in a specifically defined response from the \KDS/ to the \TMA/. +Furthermore, +if the \KDS/ responds in a positive manner, +then the \TMA/ acknowledges this. +This three-way interaction is used to ensure consistency between the states +of the \KDS/ and the \TMA/. +The \ansi/ draft does not require such behavior, +and might profit from some finite-state analysis to ascertain unsafe +(in terms of correctness) states which are reachable. diff --git a/docs/historical/trusted/diagramA1-1.tex b/docs/historical/trusted/diagramA1-1.tex new file mode 100644 index 0000000..0dc088f --- /dev/null +++ b/docs/historical/trusted/diagramA1-1.tex @@ -0,0 +1,29 @@ +% diagram A1-1 + +\verbatimlines +% tma -add -user "UCI Portal" uci@udel-dewey +3: "UCI Portal" + uci@udel-dewey + +% comp +To: uci +Fcc: +outbox +Subject: test message +-------- +mumble, mumble. +^D + +What now?? send -encrypt + -- Address Verification -- + -- Local Recipients -- + uci: address ok + -- Address Verification Successful -- + -- Posting for All Recipients -- + -- Local Recipients -- + uci: address ok + -- Recipient Copies Posted -- + -- Filing Folder Copies -- + Fcc outbox: folder ok + -- Folder Copies Filed -- +Message Processed +?endverbatim diff --git a/docs/historical/trusted/diagramA1-2.tex b/docs/historical/trusted/diagramA1-2.tex new file mode 100644 index 0000000..3918ef1 --- /dev/null +++ b/docs/historical/trusted/diagramA1-2.tex @@ -0,0 +1,12 @@ +% diagram A1-2 + +\verbatimlines +% inc +Incorporating new mail into inbox... + + 1+E02/28 0227-EST mrose test message <> +?endverbatim diff --git a/docs/historical/trusted/diagramA1-3.tex b/docs/historical/trusted/diagramA1-3.tex new file mode 100644 index 0000000..342f37e --- /dev/null +++ b/docs/historical/trusted/diagramA1-3.tex @@ -0,0 +1,25 @@ +% diagram A1-3 + +\verbatim +Received: From localhost.DELAWARE by udel-dewey.DELAWARE id a022713 + ;28 Feb 85 2:27 EST +To: uci@udel-dewey +Subject: test message +Date: 28 Feb 85 02:27:16 EST (Thu) +Message-ID: <4057.478423636@udel-dewey> +From: mrose@udel-dewey + +ENCRYPTED MESSAGE: TTI TMA +( +MCL/MAIL +RCV/3 +ORG/17 +IDK/850228072730 +KD/e36813a3882eebd1 +KD/fa8b8ac657476669 +IV/Ef9d283565431b103 +MIC/fdb927fb +MAC/50e9de30 +) +a13774f652d844762c4fc03c2f4e201b9d2f57eadb00546c +?endverbatim diff --git a/docs/historical/trusted/diagramA1-4.tex b/docs/historical/trusted/diagramA1-4.tex new file mode 100644 index 0000000..8d5a2e8 --- /dev/null +++ b/docs/historical/trusted/diagramA1-4.tex @@ -0,0 +1,14 @@ +% diagram A1-4 + +\verbatim +Received: From localhost.DELAWARE by udel-dewey.DELAWARE id a022713 + ;28 Feb 85 2:27 EST +To: uci@udel-dewey +Subject: test message +Date: 28 Feb 85 02:27:16 EST (Thu) +Message-ID: <4057.478423636@udel-dewey> +From: mrose@udel-dewey +X-KDS-ID: 17 (Marshall T. Rose) + +mumble, mumble. +?endverbatim diff --git a/docs/historical/trusted/diagramB1-1.tex b/docs/historical/trusted/diagramB1-1.tex new file mode 100644 index 0000000..6f802c0 --- /dev/null +++ b/docs/historical/trusted/diagramB1-1.tex @@ -0,0 +1,28 @@ +% diagram B1-1 + +\verbatimlines +<--- ( +<--- MCL/RIU +<--- RCV/17 +<--- ORG/3 +<--- KDC/TTI +<--- EDC/1a1fbbba +<--- ) +---> ( +---> MCL/RTR +---> RCV/17 +---> ORG/3 +---> CTA/1 +---> USR/"Marshall T. Rose" +---> KDC/TTI +---> MAC/2ebde134 +---> EDC/96b183de +---> ) +<--- ( +<--- MCL/ACK +<--- RCV/17 +<--- ORG/3 +<--- KDC/TTI +<--- EDC/59a8ddcc +<--- ) +?endverbatim diff --git a/docs/historical/trusted/diagramB1-2.tex b/docs/historical/trusted/diagramB1-2.tex new file mode 100644 index 0000000..c90c52d --- /dev/null +++ b/docs/historical/trusted/diagramB1-2.tex @@ -0,0 +1,34 @@ +% diagram B1-2 + +\verbatimlines +<--- ( +<--- MCL/RSI +<--- RCV/17 +<--- ORG/3 +<--- IDK/850228072730 +<--- KDC/TTI +<--- SVR/KD.IV.KK +<--- EDC/83679e14 +<--- ) +---> ( +---> MCL/RTR +---> RCV/17 +---> ORG/3 +---> KK/095f9d6b87f57871 +---> CTA/2 +---> KD/527fbb5593efd318 +---> KD/1dcab338be1e7a09 +---> IV/E02db5e598b2823ae +---> EDK/850618075332 +---> KDC/TTI +---> MAC/12cbbdf5 +---> EDC/8cd0c4a8 +---> ) +<--- ( +<--- MCL/ACK +<--- RCV/17 +<--- ORG/3 +<--- KDC/TTI +<--- EDC/59a8ddcc +<--- ) +?endverbatim diff --git a/docs/historical/trusted/figure1.pic b/docs/historical/trusted/figure1.pic new file mode 100644 index 0000000..e7ecd77 --- /dev/null +++ b/docs/historical/trusted/figure1.pic @@ -0,0 +1,31 @@ +.PS 5.9i +## figure 1 +C1: ellipse "\UA/" +B1: box "\MTA/" with .n at (C1.s.x, C1.s.y-3*lineht) +B8: box "\MTA/" with .w at (B1.e.x+linewid, B1.e.y) +B2: box invis "$\ldots$" with .w at (B8.e.x+linewid, B1.e.y) +B9: box invis "$\ldots$" with .w at (B2.e.x+linewid, B1.e.y) +B3: box "\MTA/" with .w at (B9.e.x+linewid, B1.e.y) +C2: ellipse "\UA/" with .s at (B3.n.x, C1.s.y) +## + arrow from C1.s to B1.n + arrow from B1.e to B8.w + arrow from B8.e to B2.w + arrow from B2.e to B9.w + arrow from B9.e to B3.w + arrow from B3.n to C2.s +## +B4: box width B3.e.x+linewid/3-(B1.w.x-linewid/3) \ + height 3*boxht \ + with .c at B2.c + move to (B4.n.x, B4.n.y-lineht/2); "\MTS/" +## + line dashed "POSTING" "" \ + from (B4.w.x-linewid, B4.n.y+lineht/2) \ + to (C1.s.x, B4.n.y+lineht/2) + line dashed "RECEIPT" "" \ + from (B4.e.x+linewid, B4.n.y+lineht/2) \ + to (C2.s.x, B4.n.y+lineht/2) + move to ((B2.e.x+B9.w.x)/2, B2.s.y); "RELAYING" +## +.PE diff --git a/docs/historical/trusted/figure1.tex b/docs/historical/trusted/figure1.tex new file mode 100644 index 0000000..a60d07d --- /dev/null +++ b/docs/historical/trusted/figure1.tex @@ -0,0 +1,110 @@ +\catcode`@=11 +\expandafter\ifx\csname graph\endcsname\relax \alloc@4\box\chardef\insc@unt\graph\fi +\catcode`@=12 +\setbox\graph=\vtop{% + \baselineskip=0pt \lineskip=0pt \lineskiplimit=0pt + \vbox to0pt{\hbox{% + \special{pn 8}% + \special{ar 866 207 311 206 0.000 6.283}% + \rlap{\kern 0.866in\lower 0.247in\hbox to 0pt{\hss \UA/\hss}}% + \special{pa 554 2081}% + \special{pa 554 1665}% + \special{pa 1179 1665}% + \special{pa 1179 2081}% + \special{pa 554 2081}% + \special{fp}% + \rlap{\kern 0.866in\lower 1.913in\hbox to 0pt{\hss \MTA/\hss}}% + \special{pa 1595 2081}% + \special{pa 1595 1665}% + \special{pa 2220 1665}% + \special{pa 2220 2081}% + \special{pa 1595 2081}% + \special{fp}% + \rlap{\kern 1.907in\lower 1.913in\hbox to 0pt{\hss \MTA/\hss}}% + \rlap{\kern 2.948in\lower 1.913in\hbox to 0pt{\hss $\ldots$\hss}}% + \rlap{\kern 3.989in\lower 1.913in\hbox to 0pt{\hss $\ldots$\hss}}% + \special{pa 4718 2081}% + \special{pa 4718 1665}% + \special{pa 5343 1665}% + \special{pa 5343 2081}% + \special{pa 4718 2081}% + \special{fp}% + \rlap{\kern 5.030in\lower 1.913in\hbox to 0pt{\hss \MTA/\hss}}% + \special{ar 5030 207 311 206 0.000 6.283}% + \rlap{\kern 5.030in\lower 0.247in\hbox to 0pt{\hss \UA/\hss}}% + \special{pa 866 415}% + \special{pa 866 1665}% + \special{fp}% + \special{pa 846 1581}% + \special{pa 866 1665}% + \special{fp}% + \special{pa 887 1581}% + \special{pa 866 1665}% + \special{fp}% + \special{pa 1179 1873}% + \special{pa 1595 1873}% + \special{fp}% + \special{pa 1512 1894}% + \special{pa 1595 1873}% + \special{fp}% + \special{pa 1512 1852}% + \special{pa 1595 1873}% + \special{fp}% + \special{pa 2220 1873}% + \special{pa 2636 1873}% + \special{fp}% + \special{pa 2553 1894}% + \special{pa 2636 1873}% + \special{fp}% + \special{pa 2553 1852}% + \special{pa 2636 1873}% + \special{fp}% + \special{pa 3261 1873}% + \special{pa 3677 1873}% + \special{fp}% + \special{pa 3594 1894}% + \special{pa 3677 1873}% + \special{fp}% + \special{pa 3594 1852}% + \special{pa 3677 1873}% + \special{fp}% + \special{pa 4302 1873}% + \special{pa 4718 1873}% + \special{fp}% + \special{pa 4635 1894}% + \special{pa 4718 1873}% + \special{fp}% + \special{pa 4635 1852}% + \special{pa 4718 1873}% + \special{fp}% + \special{pa 5030 1665}% + \special{pa 5030 415}% + \special{fp}% + \special{pa 5051 499}% + \special{pa 5030 415}% + \special{fp}% + \special{pa 5010 499}% + \special{pa 5030 415}% + \special{fp}% + \special{pa 415 2497}% + \special{pa 415 1248}% + \special{pa 5482 1248}% + \special{pa 5482 2497}% + \special{pa 415 2497}% + \special{fp}% + \rlap{\kern 2.948in\lower 1.496in\hbox to 0pt{\hss \MTS/\hss}}% + \rlap{\kern 0.433in\lower 0.997in\hbox to 0pt{\hss POSTING\hss}}% + \rlap{\kern 0.433in\lower 1.163in\hbox to 0pt{\hss \hss}}% + \special{pa 0 1040}% + \special{pa 866 1040}% + \special{da 0.050}% + \rlap{\kern 5.464in\lower 0.997in\hbox to 0pt{\hss RECEIPT\hss}}% + \rlap{\kern 5.464in\lower 1.163in\hbox to 0pt{\hss \hss}}% + \special{pa 5898 1040}% + \special{pa 5030 1040}% + \special{da 0.050}% + \rlap{\kern 3.469in\lower 2.121in\hbox to 0pt{\hss RELAYING\hss}}% + \kern 5.899in + }\vss}% + \kern 2.498in +} diff --git a/docs/historical/trusted/figure2.pic b/docs/historical/trusted/figure2.pic new file mode 100644 index 0000000..3f2733e --- /dev/null +++ b/docs/historical/trusted/figure2.pic @@ -0,0 +1,35 @@ +\def\UA/{{\sf UA}} +\def\MTA/{{\sf MTA}} +\def\MTS/{{\sf MTS}} +.PS 5.9i +## figure 2 +U1: circle "user" +C1: ellipse "\UA/" with .n at (U1.s.x, U1.s.y-3*lineht/2) +B1: box "\MTA/" with .n at (C1.s.x, C1.s.y-5*lineht/2) +B8: box "\MTA/" with .w at (B1.e.x+linewid, B1.e.y) +B2: box invis "$\ldots$" with .w at (B8.e.x+linewid, B1.e.y) +B9: box invis "$\ldots$" with .w at (B2.e.x+linewid, B1.e.y) +B3: box "\MTA/" with .w at (B9.e.x+linewid, B1.e.y) +C2: ellipse "\UA/" with .s at (B3.n.x, C1.s.y) +U2: circle "user" with .s at (C2.n.x, U1.s.y) +## + arrow from U1.s to C1.n + arrow from C1.s to B1.n + arrow from B1.e to B8.w + arrow from B8.e to B2.w + arrow from B2.e to B9.w + arrow from B9.e to B3.w + arrow from B3.n to C2.s + arrow from C2.n to U2.s +## +B4: box width B3.e.x+linewid/3-(B1.w.x-linewid/3) \ + height 4*boxht \ + with .c at B2.c + move to (B4.n.x, B4.n.y-lineht/2); "\MTS/" +## + move to (U1.s.x, (U1.s.y+C1.n.y)/2); \ + "\ name $\longrightarrow$ address" ljust + move to (B1.n.x, (B1.n.y+B4.n.y)/2); \ + "\ address $\longrightarrow$ route" ljust +## +.PE diff --git a/docs/historical/trusted/figure2.tex b/docs/historical/trusted/figure2.tex new file mode 100644 index 0000000..e87f3c8 --- /dev/null +++ b/docs/historical/trusted/figure2.tex @@ -0,0 +1,126 @@ +\def\UA/{{\sf UA}} +\def\MTA/{{\sf MTA}} +\def\MTS/{{\sf MTS}} +\catcode`@=11 +\expandafter\ifx\csname graph\endcsname\relax \alloc@4\box\chardef\insc@unt\graph\fi +\catcode`@=12 +\setbox\graph=\vtop{% + \baselineskip=0pt \lineskip=0pt \lineskiplimit=0pt + \vbox to0pt{\hbox{% + \special{pn 8}% + \special{ar 524 241 241 241 0.000 6.283}% + \rlap{\kern 0.524in\lower 0.283in\hbox to 0pt{\hss user\hss}}% + \special{ar 524 1454 363 240 0.000 6.283}% + \rlap{\kern 0.524in\lower 1.496in\hbox to 0pt{\hss \UA/\hss}}% + \special{pa 161 3393}% + \special{pa 161 2908}% + \special{pa 888 2908}% + \special{pa 888 3393}% + \special{pa 161 3393}% + \special{fp}% + \rlap{\kern 0.524in\lower 3.193in\hbox to 0pt{\hss \MTA/\hss}}% + \special{pa 1373 3393}% + \special{pa 1373 2908}% + \special{pa 2100 2908}% + \special{pa 2100 3393}% + \special{pa 1373 3393}% + \special{fp}% + \rlap{\kern 1.736in\lower 3.193in\hbox to 0pt{\hss \MTA/\hss}}% + \rlap{\kern 2.948in\lower 3.193in\hbox to 0pt{\hss $\ldots$\hss}}% + \rlap{\kern 4.161in\lower 3.193in\hbox to 0pt{\hss $\ldots$\hss}}% + \special{pa 5009 3393}% + \special{pa 5009 2908}% + \special{pa 5736 2908}% + \special{pa 5736 3393}% + \special{pa 5009 3393}% + \special{fp}% + \rlap{\kern 5.373in\lower 3.193in\hbox to 0pt{\hss \MTA/\hss}}% + \special{ar 5373 1454 363 240 0.000 6.283}% + \rlap{\kern 5.373in\lower 1.496in\hbox to 0pt{\hss \UA/\hss}}% + \special{ar 5373 241 241 241 0.000 6.283}% + \rlap{\kern 5.373in\lower 0.283in\hbox to 0pt{\hss user\hss}}% + \special{pa 524 484}% + \special{pa 524 1211}% + \special{fp}% + \special{pa 500 1114}% + \special{pa 524 1211}% + \special{fp}% + \special{pa 548 1114}% + \special{pa 524 1211}% + \special{fp}% + \special{pa 524 1696}% + \special{pa 524 2908}% + \special{fp}% + \special{pa 500 2811}% + \special{pa 524 2908}% + \special{fp}% + \special{pa 548 2811}% + \special{pa 524 2908}% + \special{fp}% + \special{pa 888 3151}% + \special{pa 1373 3151}% + \special{fp}% + \special{pa 1276 3175}% + \special{pa 1373 3151}% + \special{fp}% + \special{pa 1276 3126}% + \special{pa 1373 3151}% + \special{fp}% + \special{pa 2100 3151}% + \special{pa 2585 3151}% + \special{fp}% + \special{pa 2488 3175}% + \special{pa 2585 3151}% + \special{fp}% + \special{pa 2488 3126}% + \special{pa 2585 3151}% + \special{fp}% + \special{pa 3312 3151}% + \special{pa 3797 3151}% + \special{fp}% + \special{pa 3700 3175}% + \special{pa 3797 3151}% + \special{fp}% + \special{pa 3700 3126}% + \special{pa 3797 3151}% + \special{fp}% + \special{pa 4524 3151}% + \special{pa 5009 3151}% + \special{fp}% + \special{pa 4912 3175}% + \special{pa 5009 3151}% + \special{fp}% + \special{pa 4912 3126}% + \special{pa 5009 3151}% + \special{fp}% + \special{pa 5373 2908}% + \special{pa 5373 1696}% + \special{fp}% + \special{pa 5397 1793}% + \special{pa 5373 1696}% + \special{fp}% + \special{pa 5349 1793}% + \special{pa 5373 1696}% + \special{fp}% + \special{pa 5373 1211}% + \special{pa 5373 484}% + \special{fp}% + \special{pa 5397 581}% + \special{pa 5373 484}% + \special{fp}% + \special{pa 5349 581}% + \special{pa 5373 484}% + \special{fp}% + \special{pa 0 4120}% + \special{pa 0 2181}% + \special{pa 5898 2181}% + \special{pa 5898 4120}% + \special{pa 0 4120}% + \special{fp}% + \rlap{\kern 2.948in\lower 2.465in\hbox to 0pt{\hss \MTS/\hss}}% + \rlap{\kern 0.524in\lower 0.889in\hbox to0pt{\ name $\longrightarrow$ address\hss}}% + \rlap{\kern 0.524in\lower 2.586in\hbox to0pt{\ address $\longrightarrow$ route\hss}}% + \kern 5.899in + }\vss}% + \kern 4.121in +} diff --git a/docs/historical/trusted/figure3.pic b/docs/historical/trusted/figure3.pic new file mode 100644 index 0000000..0327b12 --- /dev/null +++ b/docs/historical/trusted/figure3.pic @@ -0,0 +1,32 @@ +.PS 5.9i +## figure 3 +C1: ellipse "\UA/" +B1: box "\MTA/" with .n at (C1.s.x, C1.s.y-3*lineht) +B8: box "\MTA/" with .w at (B1.e.x+linewid, B1.e.y) +B2: box invis "$\ldots$" with .w at (B8.e.x+linewid, B1.e.y) +B9: box invis "$\ldots$" with .w at (B2.e.x+linewid, B1.e.y) +B3: box "\MTA/" with .w at (B9.e.x+linewid, B1.e.y) +C2: ellipse "\UA/" with .s at (B3.n.x, C1.s.y) +## + arrow from C1.s to B1.n + arrow from B1.e to B8.w + arrow from B8.e to B2.w + arrow from B2.e to B9.w + arrow from B9.e to B3.w + arrow from B3.n to C2.s +## +B4: box width B3.e.x+linewid/3-(B1.w.x-linewid/3) \ + height 3*boxht \ + with .c at B2.c + move to (B4.n.x, B4.n.y-lineht/2); "\MTS/" +## +B5: box "\TMA/" with .w at (C1.e.x+linewid, C1.e.y) +B6: box "\TMA/" with .e at (C2.w.x-linewid, C2.w.y) +B7: box "\KDS/" with .c at ((B5.c.x+B6.c.x)/2, B5.c.y) +## + line <- -> from C1.e to B5.w + arrow from B5.e to B7.w + arrow from B6.w to B7.e + line <- -> from C2.w to B6.e +## +.PE diff --git a/docs/historical/trusted/figure3.tex b/docs/historical/trusted/figure3.tex new file mode 100644 index 0000000..8fe387f --- /dev/null +++ b/docs/historical/trusted/figure3.tex @@ -0,0 +1,164 @@ +\catcode`@=11 +\expandafter\ifx\csname graph\endcsname\relax \alloc@4\box\chardef\insc@unt\graph\fi +\catcode`@=12 +\setbox\graph=\vtop{% + \baselineskip=0pt \lineskip=0pt \lineskiplimit=0pt + \vbox to0pt{\hbox{% + \special{pn 8}% + \special{ar 524 241 363 240 0.000 6.283}% + \rlap{\kern 0.524in\lower 0.281in\hbox to 0pt{\hss \UA/\hss}}% + \special{pa 161 2423}% + \special{pa 161 1938}% + \special{pa 888 1938}% + \special{pa 888 2423}% + \special{pa 161 2423}% + \special{fp}% + \rlap{\kern 0.524in\lower 2.221in\hbox to 0pt{\hss \MTA/\hss}}% + \special{pa 1373 2423}% + \special{pa 1373 1938}% + \special{pa 2100 1938}% + \special{pa 2100 2423}% + \special{pa 1373 2423}% + \special{fp}% + \rlap{\kern 1.736in\lower 2.221in\hbox to 0pt{\hss \MTA/\hss}}% + \rlap{\kern 2.948in\lower 2.221in\hbox to 0pt{\hss $\ldots$\hss}}% + \rlap{\kern 4.161in\lower 2.221in\hbox to 0pt{\hss $\ldots$\hss}}% + \special{pa 5009 2423}% + \special{pa 5009 1938}% + \special{pa 5736 1938}% + \special{pa 5736 2423}% + \special{pa 5009 2423}% + \special{fp}% + \rlap{\kern 5.373in\lower 2.221in\hbox to 0pt{\hss \MTA/\hss}}% + \special{ar 5373 241 363 240 0.000 6.283}% + \rlap{\kern 5.373in\lower 0.281in\hbox to 0pt{\hss \UA/\hss}}% + \special{pa 524 484}% + \special{pa 524 1938}% + \special{fp}% + \special{pa 500 1841}% + \special{pa 524 1938}% + \special{fp}% + \special{pa 548 1841}% + \special{pa 524 1938}% + \special{fp}% + \special{pa 888 2181}% + \special{pa 1373 2181}% + \special{fp}% + \special{pa 1276 2205}% + \special{pa 1373 2181}% + \special{fp}% + \special{pa 1276 2157}% + \special{pa 1373 2181}% + \special{fp}% + \special{pa 2100 2181}% + \special{pa 2585 2181}% + \special{fp}% + \special{pa 2488 2205}% + \special{pa 2585 2181}% + \special{fp}% + \special{pa 2488 2157}% + \special{pa 2585 2181}% + \special{fp}% + \special{pa 3312 2181}% + \special{pa 3797 2181}% + \special{fp}% + \special{pa 3700 2205}% + \special{pa 3797 2181}% + \special{fp}% + \special{pa 3700 2157}% + \special{pa 3797 2181}% + \special{fp}% + \special{pa 4524 2181}% + \special{pa 5009 2181}% + \special{fp}% + \special{pa 4912 2205}% + \special{pa 5009 2181}% + \special{fp}% + \special{pa 4912 2157}% + \special{pa 5009 2181}% + \special{fp}% + \special{pa 5373 1938}% + \special{pa 5373 484}% + \special{fp}% + \special{pa 5397 581}% + \special{pa 5373 484}% + \special{fp}% + \special{pa 5349 581}% + \special{pa 5373 484}% + \special{fp}% + \special{pa 0 2908}% + \special{pa 0 1454}% + \special{pa 5898 1454}% + \special{pa 5898 2908}% + \special{pa 0 2908}% + \special{fp}% + \rlap{\kern 2.948in\lower 1.736in\hbox to 0pt{\hss \MTS/\hss}}% + \special{pa 1373 484}% + \special{pa 1373 0}% + \special{pa 2100 0}% + \special{pa 2100 484}% + \special{pa 1373 484}% + \special{fp}% + \rlap{\kern 1.736in\lower 0.281in\hbox to 0pt{\hss \TMA/\hss}}% + \special{pa 3797 484}% + \special{pa 3797 0}% + \special{pa 4524 0}% + \special{pa 4524 484}% + \special{pa 3797 484}% + \special{fp}% + \rlap{\kern 4.161in\lower 0.281in\hbox to 0pt{\hss \TMA/\hss}}% + \special{pa 2585 484}% + \special{pa 2585 0}% + \special{pa 3312 0}% + \special{pa 3312 484}% + \special{pa 2585 484}% + \special{fp}% + \rlap{\kern 2.948in\lower 0.281in\hbox to 0pt{\hss \KDS/\hss}}% + \special{pa 985 217}% + \special{pa 888 241}% + \special{fp}% + \special{pa 985 266}% + \special{pa 888 241}% + \special{pa 1373 241}% + \special{fp}% + \special{pa 1276 266}% + \special{pa 1373 241}% + \special{fp}% + \special{pa 1276 217}% + \special{pa 1373 241}% + \special{fp}% + \special{pa 2100 241}% + \special{pa 2585 241}% + \special{fp}% + \special{pa 2488 266}% + \special{pa 2585 241}% + \special{fp}% + \special{pa 2488 217}% + \special{pa 2585 241}% + \special{fp}% + \special{pa 3797 241}% + \special{pa 3312 241}% + \special{fp}% + \special{pa 3409 217}% + \special{pa 3312 241}% + \special{fp}% + \special{pa 3409 266}% + \special{pa 3312 241}% + \special{fp}% + \special{pa 4912 266}% + \special{pa 5009 241}% + \special{fp}% + \special{pa 4912 217}% + \special{pa 5009 241}% + \special{pa 4524 241}% + \special{fp}% + \special{pa 4621 217}% + \special{pa 4524 241}% + \special{fp}% + \special{pa 4621 266}% + \special{pa 4524 241}% + \special{fp}% + \kern 5.899in + }\vss}% + \kern 2.909in +} diff --git a/docs/historical/trusted/refs.tex b/docs/historical/trusted/refs.tex new file mode 100644 index 0000000..cba2736 --- /dev/null +++ b/docs/historical/trusted/refs.tex @@ -0,0 +1,250 @@ +% references + +\references + +\ref{DCome83} +\by D.~Comer. +\paper The Computer Science Research Network CSnet: +A History and Status Report +\journal Communications of the ACM\volume 26\issue 10 +\month October\year 1983 +\pages 747--753 +\endref + +\ref{DCroc79} +\by D.H.~Crocker, E.S.~Szurkowski, D.J.~Farber. +\paper An Internetwork Memo Distribution Facility~---~MMDF +\inbook Proceedings, +Sixth Data Communications Symposium +\publaddr Asilomar +\month November\year 1979 +\pages 18--25 +\endref + +\ref{DCroc82} +\by D.H.~Crocker. +\paper Standard for the Format of ARPA Internet Text Messages +\paperinfo Request for Comments 822 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month August\year 1982 +\endref + +\ref{DEA} +\book Data Encryption Algorithm +\bookinfo X3.92--1981 +\publ American National Standards Institute +\year 1981 +\endref + +\ref{DKing84} +\by D.P.~Kingston,~III. +\paper MMDFII: A Technical Review +\inbook Proceedings +Usenix Summer '84 Conference +\publaddr Salt Lake City, Utah +\month June\year 1984 +\pages 32--41 +\endref + +\ref{EAllm83} +\by E.~Allman. +\paper SENDMAIL~---~An Internetwork Mail Router +\other +\publ Britton-Lee, Inc. +\publaddr Berkeley, California +\month July\year 1983 +\endref + +\ref{EOlse84} +\by E.W.~Olsen. +\paper NetOS Concepts and Facilities +\other +\publ Local Network Systems, Inc. +\publaddr Costa Mesa, California +\month August\year 1984 +\endref + +\ref{EStef84} +\by E.A.~Stefferud, J.N.~Sweet, T.P.~Domae. +\paper MZnet: Mail Service for Personal Micro-Computer Systems +\inbook Proceedings, +Second International Symposium on Computer Message Systems +\publaddr Nottingham, U.K +\month May\year 1984 +\pages 293--302 +\endref + +\ref{FIKM} +\book Financial Institution Key Management +\bookinfo X9.17--198\_ (draft) +\publ American National Standards Institute +\year 198\_ +\endref + +\ref{FIPS46} +\book Data Encryption Standard +\bookinfo Federal Information Processing Standards, +Publication 46 +\month January\year 1977 +\endref + +\ref{FIPS81} +\book DES Modes of Operation +\bookinfo Federal Information Processing Standards, +Publication 81 +\month December\year 1980 +\endref + +\ref{FIPS98} +\paper Specification for Message Format for Computer Based Message Systems +\other +\publ National Bureau of Standards +\month January\year 1983 +\endref + +\ref{HERMES} +\by Bolt, Beranek, and Newman. +\paper Hermes User's Manual +\paperinfo for TOPS-20 +\other +\publ Bolt, Beranek, and Newman +\publaddr Boston, MA +\month January\year 1979 +\endref + +\ref{IP} +\paper Internet Protocol +\paperinfo Request for Comments 791 (\milstd/ 1777) +\inbook Internet Protocol Transition Workbook +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month September\year 1981 +\endref + +\ref{JReyn84} +\by J.K.~Reynolds. +\paper Post Office Protocol +\paperinfo Request for Comments 918 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month October\year 1984 +\endref + +\ref{LLamp82} +\by L.~Lamport, R.~Shostak, M.~Pease. +\paper The Byzantine Generals Problem +\journal ACM Transactions on Programming Languages and Systems +\volume 4 +\month July\year 1982 +\pages 382--401 +\endref + +\ref{MButl85} +\by M.~Butler, J.B.~Postel, et.~al. +\paper Post Office Protocol - Version~2 +\paperinfo Request for Comments 937 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month February\year 1985 +\endref + +\ref{MRose84a} +\by M.T.~Rose. +\paper The Rand MH Message Handling System: The UCI BBoards Facility +\other +\publ Department of Computer and Information Sciences +\publaddr University of Delaware +\month October\year 1984 +\endref + +\ref{MRose84b} +\by M.T.~Rose. +\paper The Rand MH Message Handling System: Tutorial +\other +\publ Department of Computer and Information Sciences +\publaddr University of Delaware +\month October\year 1984 +\endref + +\ref{MRose85a} +\by M.T.~Rose, J.L.~Romine. +\paper The Rand \MH/ Message Handling System: User's Manual +\paperinfo UCI Version +\other +\publ Department of Information and Computer Science +\publaddr University of California, Irvine +\month January\year 1985 +\endref + +\ref{MRose85b} +\by M.T.~Rose, E.A.~Stefferud. +\paper Proposed Standard for Message Encapsulation +\paperinfo Request for Comments 934 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month January\year 1985 +\endref + +\ref{MRose85c} +\by M.T.~Rose, D.J.~Farber, S.T.~Walker. +\paper Design of the TTI Prototype Trusted Mail Agent +\inbook Proceedings, +Second International Symposium on Computer Message Systems +\publaddr Washington, D.C. +\month September\year 1985 +\toappear +\endref + +\ref{MRose85d} +\by M.T.~Rose, E.A.~Stefferud, J.N.~Sweet. +\paper MH: A Multifarious User Agent +\journal Computer Networks%\volume V\issue N +\toappear +\endref + +\ref{SMTP} +\paper Simple Mail Transfer Protocol +\paperinfo Request for Comments 821 +\other +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month August\year 1982 +\endref + +\ref{TCP} +\paper Transmission Control Protocol +\paperinfo Request for Comments 793 (\milstd/ 1778) +\inbook Internet Protocol Transition Workbook +\publ ARPA Internet Network Information Center (NIC) +\publaddr SRI International +\month September\year 1981 +\endref + +\ref{VVoyd83} +\by V.L.~Voydock, S.T.~Kent. +\paper Security Mechanisms in High-Level Network Protocols +\journal Computing Surveys\volume 15\issue 2 +\month June\year 1983 +\pages 135--171 +\endref + +\ref{WJoy83} +\by W.N.~Joy, E.~Cooper, R.S.~Fabry, S.J.~Leffler, K.~McKusick, D.~Mosher. +\paper 4.2\bsd/ System Manual +\paperinfo Technical Report Number 5 +\publ Computer Systems Research Group, University of California, Berkeley +\month July\year 1983 +\endref + +\ref{X.400} +\book Message Handling Systems: System Model-Service Elements +\bookinfo Recommendation X.400 +\publ International Telegraph and Telephone Consultative Committee (CCITT) +\endref + +\endreferences diff --git a/docs/historical/trusted/table4.tex b/docs/historical/trusted/table4.tex new file mode 100644 index 0000000..dd7e808 --- /dev/null +++ b/docs/historical/trusted/table4.tex @@ -0,0 +1,55 @@ +% table 4 + +\def\entry#1#2#3{& & &\cr} + +\centerline{\vbox{% + \offinterlineskip + \halign{\vrule#& \strut\enskip\hfil#\hfil\enskip& + \vrule#& \strut\enskip#\hfil\enskip& + \vrule#& \strut\enskip\hfil#\hfil\enskip& + \vrule#\cr +\noalign{\hrule} +height2pt&\omit& &\omit& &\omit&\cr + \entry {\bf Abbrev.}{\hfil\bf Term}{\bf Context} +height2pt&\omit& &\omit& &\omit&\cr +\noalign{\hrule} +height2pt&\omit& &\omit& &\omit&\cr + \entry {CBC}{Cipher Block Chaining}{DES} + \entry {CBMS}{Computer Based Message System}{} + \entry {CKD}{Key Distribution Center}{EFT} + \entry {CKS}{Checksumming}{DES} + \entry {CSM}{Cryptographic Service Message}{} + \entry {DEA}{Data Encryption Algorithm}{} + \entry {DES}{Data Encryption Standard}{} + \entry {DSM}{Disconnect Service Message}{MCL} + \entry {ECB}{Electronic Code Book}{DES} + \entry {EFT}{Electronic Funds Transfer}{} + \entry {IDK}{Key Identifier}{CSM} + \entry {ID}{Identifier}{KDS} + \entry {IP}{Internet Protocol}{} + \entry {IV}{Initialization Vector}{CSM} + \entry {KA}{Authentication Key}{CSM} + \entry {KDC}{Key Distribution Center}{CBMS} + \entry {KDS}{Key Distribution Server}{CBMS} + \entry {KD}{Data-encrypting Key}{CSM} + \entry {KK}{Key-encrypting Key}{CSM} + \entry {MAC}{Message Authentication Code}{CSM} + \entry {MCL}{Message Class}{CSM} + \entry {MH}{The Rand Message Handling System}{} + \entry {MIC}{Message Integrity Code}{CSM} + \entry {MK}{Master Key}{CSM} + \entry {MTA}{Message Transport Agent}{CBMS} + \entry {MTS}{Message Transport System}{CBMS} + \entry {ORG}{Message Originator}{CSM} + \entry {RCV}{Message Receiver}{CSM} + \entry {RIU}{Request Identified User}{MCL} + \entry {RSI}{Request Service Initialization}{MCL} + \entry {RUI}{Request User Identification}{MCL} + \entry {TCP}{Transmission Control Protocol}{} + \entry {TMA}{Trusted Mail Agent}{CBMS} + \entry {TTI}{Trusted Technologies, Inc.}{} + \entry {UA}{User Agent}{CBMS} +height2pt&\omit& &\omit& &\omit&\cr +\noalign{\hrule} + }% +}} diff --git a/docs/historical/trusted/text.tex b/docs/historical/trusted/text.tex new file mode 100644 index 0000000..8da1f30 --- /dev/null +++ b/docs/historical/trusted/text.tex @@ -0,0 +1,1077 @@ +% begin text + +\banner + +\section{Introduction} +Initially, +a brief model of a user community employing a trusted mail service is +introduced. +Following this introduction, +a prototype system is described which attempts to meet the needs of a user +community. +Finally, +open issues are discussed, +which are currently not satisfied by the prototype system or its model of +operation. + +Two or more entities, +called {\it users}, +wish to communicate in a {\it secure} environment. +Depending on their available resources, +different levels of security are possible. +At the extreme, +two parties with substantial resources may wish to communicate in a fashion +which prevents any third parties, +known as {\it adversaries}, +from observing their communication. +At this level, +not only is an adversary unable to capture the communication for analysis, +but in fact, the adversary is unaware that any communication is occurring at +all. +In most applications, +this level of security is prohibitively expensive. +A more economic method is to translate messages into a form which is useless +to an adversary and then to communicate those messages on an insecure medium. + +This latter method requires the two users to have some sort of {\it key} +with which to ``lock'' the plaintext into ciphertext when transmitting, +and then to ``unlock'' the ciphertext back into useful form when receiving. +Hence, there are two central issues to deal with: +\underbar{first}, +keys must be generated, distributed, and maintained in a secure fashion; +and, +\underbar{second}, +the keys must be ``intricate'' enough so that sense can't be made out of the +ciphertext without knowledge of the key. +The first part is handled by a {\it key distribution center} (\KDC/), +which maintains a list of users and a set of keys for each pair of users. +The second part relies on sophisticated encryption and decryption algorithms. +It is beyond the scope of this paper to describe cryptographic techniques in +detail. +For a detailed survey of this area, the reader should consult \cite{VVoyd83}. + +\tagfigure{1}{The \MTS/ Model}{mtsmodel} +In the context of our discussion (using the terminology of \cite{X.400}), +the medium used to transport is supplied +by a {\it message transport system} (\MTS/), +which is composed of one or more {\it message transport agents} (\MTA/s). +Usually, +the entire \MTS/ is distributed in nature, +and not under a single administrative entity; +in contrast, an \MTA/ is usually controlled by a single administration and +resides in a particular domain. +At every end-point in the medium, +a {\it user agent} (\UA/) acts on behalf of a user and interfaces +to a local \MTA/. +This model is briefly summarized in Figure~\mtsmodel. + +A message, in our context, consists of two parts: +the {\it headers} and the {\it body}. +The headers are rigorously structured; +they contain addressing information and other forms useful to a \UA/. +The body is freely formatted and is usually not meaningful to a \UA/. + +When a message is sent from one user to another, +the following activities occur: +The originating user indicates to the \UA/ the address of the recipient; +the \UA/ then posts the message through a {\it posting slot} to an \MTA/, +which involves a posting protocol in which the validity of the address +and the syntax of the message are considered. +Upon successful completion of the protocol, +the \MTA/ accepts responsibility for delivering the message, +or if delivery fails, to inform the originating user of the failure. +The \MTA/ then decides if it can deliver the message directly to the +recipient; +if so, it delivers the message through a {\it delivery slot} to the +recipient's \UA/, +using a delivery protocol. +If not, it contacts an adjacent \MTA/, closer to the recipient, +and negotiates its transfer (using a protocol similar to the posting protocol). +This process repeats until an \MTA/ is able to deliver the message, +or an \MTA/ determines that the message can't be delivered. +In this latter case, +a failure notice is sent to the originating user. + +\tagfigure{2}{Mappings in the \MTS/ model}{mappings} +It is important to note that there are two mappings which occur here. +The first, which is performed implicitly by the originating user, +maps the name of the recipient into the recipient's address; +the second, which is performed explicitly by the \MTS/, +maps the address of the recipient into a route to get from the originator's +\MTA/ to the recipient's \MTA/. +These mappings are depicted in Figure~\mappings. + +Obviously, there is no guarantee that the \MTS/ can be made secure, +in {\it any} sense of the word. +This is particularly true if it is under several administrations. +Regardless of the number of administrations in the \MTS/, +this problem quickly degenerates to a problem of +Byzantine generals\cite{LLamp82}. +Further, trying to secure each \MTA/ in the path that a message travels is +equally questionable. + +\tagfigure{3}{Modifications to the \MTS/ model}{tmodel} +To support secure communications in this environment, +a new entity, +the {\it trusted mail agent} (\TMA/) is introduced into our model. +A solution is to have the \UA/ interact with this entity +both when posting a message and when taking delivery of a message. +The \UA/ first contacts a \TMA/ to encrypt the body of the message for the +recipient, +prior to pushing it through the posting slot. +Upon receipt from the destination \MTA/, +the \UA/ examines the message and contacts +the \TMA/ to decipher the body of the message from the source. +An overview of the relationship between the standard \MTS/ model +and the augmentations made for the \trustedmail/ system is shown in +Figure~\tmodel. + +To achieve these tasks, +the \TMA/ interacts with a {\it key distribution service} (\KDS/), +which manages keys between pairwise users. +At this point, a third mapping takes place: +the \UA/ must be able to map addresses into the identifier(s) +by which the originator and recipient are known by the \TMA/ and \KDS/. +These identifiers are known as \KDS/ IDs, or simply IDs. +Usually, a fourth mapping also occurs, +which maps the ID of a user into the name of a user. +In our context, +there is an exact one-to-one mapping between the name of a user and the ID +of that user. +In contrast, +there may be a one-to-many mapping between the name of a user and +that user's address in the \MTS/. +Further, there are usually many different routes which a message may traverse +when going from an originating user to a recipient user. + +The \TMA/ is said to be {\it trusted} because it can be relied on to perform +only those actions specifically requested by the user. +In the context of this paper, +this means, given proper construction and maintenance of the \TMA/, +that the software will communicate with the \KDC/ in some secure fashion to +negotiate key relationships and that it will not disclose those key +relationships to other parties. +Furthermore, +the body of mail messages exchanged between users which employ +a trusted mail agent will be unintelligible to other parties. +Finally, +a recipient of a message receives authenticated information from the +trusted mail agent as to the identify of the sender. + +Hence, +when each user employs a \TMA/, +end-to-end encryption occurs at the \UA/ level +(to avoid any problems with malicious \MTA/s).% +\nfootnote{Note that in the scope of this system, +the end-points are the user agents, not the hosts they reside on. +In fact, +it may very well be the case that the user agent and the local message +transport agent do not reside on the same host.} +Any adversary listening in on the \MTS/, +may observe messages, +but make no sense out of them +(other than rudimentary traffic analysis). +Note, however, +that since the medium itself is not secure, +an adversary may still introduce new messages, +corrupt messages, +or remove messages, +as they traverse the \MTS/. +In the first two cases, however, +the recipient would be suspicious +because the adversary lacks the encrypting key employed by the source user. +In the third case, +the source user can retransmit the message after a suitable time. +Of course, +there is no built-in retransmission policy~---~this aspect depends on the +user's sending mail and is beyond the scope of the system. + +It is important to understand the target community for the \trustedmail/ system +described herein. +In particular, +the \TMA/ is intended for a commercial and not a military environment. +This distinction is important, +since it is the {\it fundamental} assumption of this paper that +the latter community has much stricter requirements than the former. +Because of this, +the prototype system is able to make certain simplifying assumptions which +permit it to operate in a mode which is less secure than military +applications would permit. +Although these issues are explored in greater detail at the end of the paper, +for the moment recall that, like most qualities, trustedness is not absolute: +there are varying degrees of trustedness, +and as a system becomes more trusted, +it becomes more expensive, in some sense, to operate and maintain. + +It is perhaps instructive at this point to consider why the introduction of a +key distribution center is appropriate in this environment, +and why the {\it fundamental} assumption that trusted mail agents do not +directly communicate with each other is necessary. +Although a user agent is able to converse with the local message transport +agent in real-time, +it is frequently not able to communicate with other user agents in real-time. +Furthermore, +considering the vast problems and overhead +of trying to establish secure communications from ``scratch'' +(a problem far beyond the scope of this paper), +it is would not be a good idea to try and communicate key relationships with +other user agents, +even if it were always possible to do so. +In addition, +by separating the trusted aspects of the message transport system from the +system itself, +many other advantages can be seen. +These are presented in greater detail at the end of the paper. + +The discussion thus far has considered only a single recipient. +In practice, a user might wish to send to several others, +using a different key for each. +Hence each copy of the message is encrypted differently, +depending on the particular recipient in question. +Note that this has the effect of {\it un-bundling} message transfer in the +\MTS/, +as advanced \MTA/s tend to keep only a single copy of the message for any +number of recipients in order to save both cpu, disk, and I/O resources. + +For example, +in some existing mail systems, +if a message was sent to $n$ users on a remote system, +then the $n$ addresses would be sent from the source \MTA/ to the remote \MTA/ +along with one copy of the message. +Upon delivery, +the remote \MTA/ would deliver a copy to each of the $n$ recipients, +but the virtual wire between the source \MTA/ and the recipient \MTA/ was +burdened with only one copy of the message. +But in a secure environment, +since a different key is used by the source user when communicating with each +of the $n$ recipients, +$n$ different messages will be posted with the local \MTA/, +and the advantages of recipient bundling are lost. + +Along these lines however, +private discussion groups may wish to avoid this problem by establishing +access to a single ID for their use. +In this case, +a subscriber to the \KDS/ may actually have more than one ID, +one for ``personal'' use and one for each discussion group. +The appropriate ID is used when posting messages to the discussion group. +Naturally the administrative policy for deciding who is allowed to use the +\KDS/ ID of a discussion group is left to the moderator of the group. +Observant readers will note that this vastly decreases the aspect of +secure communications for the discussion group. +This method is suggested as a compromise +which permits the bundling of messages for multiple recipients +to reduce \MTS/ traffic. +The price is high however, +as a compromise on behalf of {\it any} member of the discussion group +compromises the entire group. +For large discussion groups and a bandwidth limited \MTS/, +this price may be worth paying. +The prototype implementation of the \TMA/ supports multiple recipients but +not multiple \KDS/ IDs. + +Having described this environment for communication, +the designs of a \KDS/ and \TMA/ which form the heart of the \TTI/ +\trustedmail/ system are discussed. +The prototype system was developed on a \vax/-11/780 running 4.2\bsd/ \unix/. +The system is based on the \ansi/ draft\cite{FIKM} +for financial key management, +but diverges somewhat in operation +owing to the differences between the electronic mail (CBMS) +and electronic funds (EFT) environments. +Note however that the \ansi/ data encryption algorithm\cite{DEA,FIPS46} is +used in the current implementation. +A public-key cipher system was not considered as the basis for the prototype +since, to the authors' knowledge, +an open standard for a public-key system has yet to be adopted by the +commercial community. +In contrast, +the \ansi/ draft for financial key management appears to be receiving +wide support from the commercial community. + +\tagtable{4}{Abbreviations used in this paper}{terms} +In the description that follows, +a large number of acronyms are employed to denote commonly used terms. +In order to aid the reader, +these are summarized in Table~\terms. + +\section{The Key Distribution Service} +The prototype version of the \KDS/ +was designed to provide key distribution services for +user agents under both the same or different administrations. +As a result, +the means by which a trusted mail agent connects to a key distribution server +is quite flexible. +For example, +the prototype system supports connections via +standard terminal lines, +dial-ups (e.g., over a toll-free 800 number), +\unix/ pipes, +and over TCP sockets\cite{IP,TCP}. +In the interests of simplicity, +for the remainder of this paper, +a TCP/IP model of communication is used. +Initially, +a server on a well-known service host in the ARPA Internet community +listens for connections on a well-known port.% +\nfootnote{The term {\it well known} in this context means that the +location of the service is known {\it a priori} to the clients.} +As each connection is established, +it services one or more transactions over the lifetime of the session. +When all transactions for a session have been made, +the connection is closed. +If the necessary locking operations are performed by the server +to avoid the usual database problems, +then more than one connection may be in progress simultaneously. +Of course, +a time-out facility should also be employed to prevent a rogue agent from +monopolizing the key distribution server. + +Once a session has been started, +the client (a.k.a.~\TMA/) initiates transactions with the server +(a.k.a.~\KDS/). +Each transaction consists of the exchange of two or three +{\it cryptographic service messages} (\CSM/s): +the client sends a request, +the server attempts to honor the request and sends a response, +and, +if the server responded positively, +the client then acknowledges the transaction. +By exchanging these cryptographic service messages, +the \KDS/ and the \TMA/ are able to communicate key relationships. +Obviously, the relationships themselves must be transmitted in encrypted +form.% +\nfootnote{Otherwise an adversary could simply impersonate a \TMA/ and ask +for the desired key relationships. +Similarly, this also prevents an adversary from successfully impersonating a +key distribution server.} +Hence, not only are key relationships between two \TMA/s communicated, +but key relationships between the \KDS/ and the \TMA/ are communicated as well. + +This leads us to consider the key relationships that exist +between a \TMA/ and the \KDS/. +A client usually has three keys dedicated for use with the server. +The first is the {\it master key} (denoted MK), +which has an infinite cryptoperiod, and is rarely used. +This key is distributed manually. +The second is the {\it key-encrypting key} (denoted KK), +which has a shorter cryptoperiod. +Whenever a KK is transmitted to the \TMA/, +it is encrypted with the master key. +The third is the {\it authentication key} (denoted KA), +which is used to authenticate transactions that do not contain data keys +(a count field is also used to avoid play-back attacks). +Whenever a KA is transmitted to the \TMA/, +it is encrypted with the key-encrypting key. +When transactions contain keys, +an associated count field is included to indicate the number of +keys encrypted with the key-encrypting key used. +Although not used by the prototype implementation, +a production system would employ audit mechanisms to monitor usage histories. + +Currently four types of requests are honored by the \KDS/: +two key relationship primitives, and two name service primitives. +The type is indicated by the {\it message class} (MCL) of the first +cryptographic service message sent in the transaction. +As each message class is discussed, +the appropriate datastructures used by the \KDS/ are introduced. +Space considerations prevent a detailed description of the information +exchanged in each transaction. +Appendix~B of this paper presents a short example of an interaction between +the \KDS/ and a \TMA/. + +The first two requests are used to create (or retrieve) key relationships, +and to destroy key relationships: + +The {\it request service initialization} (RSI) message class +is used to establish a {\it key-encrypting key} (KK) relationship +between the \TMA/ and another \TMA/, +or between the \TMA/ and the \KDS/. +As implied by the name, +a key-encrypting key is used to cipher keys which are used to cipher data +exchanged between peers. +These other keys are called {\it data keys} (KDs). + +The {\it disconnect service message} (DSM) message class +is used to discontinue a KK-relationship +between the \TMA/ and another \TMA/, +or between the \TMA/ and the \KDS/. +This prevents keys which are felt to have been compromised, +or are vulnerable to compromise, +from receiving further use in the system. +It should be noted that, +owing to mail messages (not \CSM/s) in transit, +a discontinued key relationship +may be needed to decipher the key used to encipher a mail message. +The prototype \KDS/ supports this capability. + +In addition to maintaining an MK/KK/KA triple for each \TMA/, +the \KDS/ also remembers KK-relationships between \TMA/s. +The reason for this stems from a fundamental difference between the +electronic funds transfer and computer-based message system worlds. +The \KDS/ assumes that no two arbitrarily chosen \TMA/s can communicate in +real-time, +and as a result, +\TMA/s do not exchange cryptographic service messages. +(See Appendix~C for a more detailed discussion.) +This means that when a \TMA/ establishes a KK-relationship with another \TMA/, +the former \TMA/ may start using the KK before the latter \TMA/ knows of the +new KK-relationship. +In fact, +it is quite possible for a KK-relationship to be established, +used, +and then discontinued, +all unilaterally on the part of one \TMA/. +It is up to the \KDS/ to retain old cryptographic material +(possibly for an indefinite period of time), +and aid the latter \TMA/ in reconstructing KK-relationships as the need arises. +Naturally, +discontinued KKs are not used to encode any new information, +but rather to decode old information. +(Again, refer to Appendix~C for additional details.) + +The other two requests are used to query the directory service aspects of the +key distribution server: + +The {\it request user identification} (RUI) message class +is used to identify a subscriber to the \KDS/. +Both the \KDS/ and \TMA/ are independent of any underlying mail transport +system (\MTS/). +As a result, +a subscriber to the \KDS/ is known by two unique attributes: +a ``real-world'' name, +and a \KDS/ identifier (ID). +The user of a mail system, +or the \UA/, +is responsible for mapping an \MTS/-specific address +(e.g., {\tx MRose@UDEL.ARPA}) +to the person associated with that maildrop +(e.g., \eg{Marshall\ T.\ Rose}). +When conversing with the \KDS/, +the \TMA/ uses the \KDS/ ID of another user to reference that person's \TMA/. +Since it is inconvenient to remember the IDs (as opposed to people's names), +the \KDS/ provides the RUI message class to permit a \TMA/ to query the +mapping between names and IDs. +If the \KDS/ cannot return an exact match, +it may respond with a list of possible matches +(if the identifying information given was ambiguous), +or it may respond with a response that there is no matching user. + +Finally, +the {\it request identified user} (RIU) message class +performs the inverse operation: +given a \KDS/ ID, a ``real-world'' name is returned. +This request is useful for disambiguating unsuccessful RUI requests +and in boot-strapping a \TMA/. + +The \KDS/ maintains two directories: +a private directory and a public directory. +The private directory contains all information on all clients to the \KDS/. +The public directory is a subset of this, +and is used by the \KDS/ when processing RUI and RIU requests.% +\nfootnote{In the prototype implementation, +the two directories are, for the moment, identical.} +As a result, +certain clients of the \KDS/ may have unlisted IDs and names. + +\section{The Trusted Mail Agent} +The prototype version of the \TMA/ +was designed to interface directly to the user agent in order to maximize +transparency to the user. +In present form, +the \TMA/ is available as a load-time library under 4.2\bsd/ \unix/, +although efforts are currently underway to transport the \TMA/ to a PC-based +environment. + +The software modules which compose the \TMA/ contain a rich set of interfaces +to the \KDS/. +In addition, +the \TMA/ manages a local database, +so responses from the \KDS/ may be cached and used at a later time. +In all cases, +the \KDS/ is consulted only if the information is not present +in the \TMA/ database, +or if the information in question has expired (e.g., KK-relationships). +This caching activity minimizes connections to the \KDS/. +Although connections are relatively cheap in the ARPA Internet, +substantial savings are achieved for PCs which contact the \KDS/ over a +public phone network (dial-up) connection. + +The \TMA/ performs mappings between pairs of the following objects: +user names, \KDS/ IDs, and \MTS/ addresses. +The \TMA/ considers all trusted mail agents, including itself, +as a user name, \KDS/ ID, and one or more \MTS/ addresses. +Although the \TMA/ does not interpret addresses itself, +in order to simplify mail handling, +the \TMA/ remembers the relationship between these objects so the user enters +this information only once. + +Initially, +when a \TMA/ is booted, +the user supplies it with the master key and the user's \KDS/ ID. +Both of these quantities are assigned by the personnel at the key +distribution center, +and subsequently transmitted to the user via an alternate, bonded service.% +\nfootnote{In this fashion, +the problems of boot-strapping over an unsecure medium are avoided.} +The \TMA/ connects with the \KDS/ and verifies its identity. +From this point on, +the \TMA/ manages its KK-relationships between the \KDS/ and other \TMA/s +without user intervention. + +The current implementation of the \TMA/ assumes a ``general memo framework'' +in the context of the Standards for ARPA Internet Text Messages\cite{DCroc82}: +\smallskip +{\advance\leftskip by\parindent +\item{1.} A message consists of two parts: +the {\it headers} and the {\it body}. +A blank line separates the headers from the body. + +\item{2.} Each (virtual) line in the headers consists of a keyword/value +pair, in which the keyword is separated from the value by a colon (:). +The headers are rigorously structured in the sense that they contain +addressing and other information useful to a user agent. + +\item{3.} The body is freely formatted and must not be meaningful to a +user agent. +However, as will be seen momentarily, +the body of encrypted messages must have an initial fixed format which the +\TMA/ enforces. +\smallskip} +\noindent +This format is widely called ``822'' after the number assigned to the +defining report\cite{DCroc82}.% +\nfootnote{Although an 822--style framework is employed by the \TMA/ prototype, +the 822 \eg{Encrypted:} header is not currently present in encrypted messages. +This is due to a design decision which assumes that nothing in the headers of +a message is sacred to the transport system, +and that ``helpful'' munging might occur at any time. +In the real world, such helpfulness is often a problem.} + +To support the cipher activities described below, +the \TMA/ contains internal routines to perform the following DES functions: +electronic code book (ECB) for key encryption, +cipher block chaining (CBC) for mail message encryption, +checksumming (CKS) for mail message and \CSM/ authentication. +Readers interested in these different modes of operation for the DES should +consult \cite{FIPS81}. + +\subsection{Encrypting Mail} +To encipher a message, the method used is a straightforward adaptation +of the standard encrypting/authentication techniques +(though the terminology is tedious). +Consider the following notation: +\smallskip +{\advance\leftskip by\parindent +\itemm $a_x(s)$ the checksum of the string $s$ using the key $x$ +(DEA~{\it checksumming} authentication) + +\itemm $a_{x+y}(s)$ the checksum of the string $s$ using the exclusive-or +of the two keys $x$ and $y$ + +\itemm $e_x(y)$ the encryption of the key $y$ using the key $x$ +(DEA~{\it electronic code book} encryption) + +\itemm $e_{x,y}(s)$ the encryption of the string $s$ using the key $x$ +and initialization vector $y$ +(DEA~{\it cipher block chaining} encryption) + +\itemm $h$ the headers of the message + +\noindent and, + +\itemm $b$ the body of the message +\smallskip} +\noindent +For each message to be encrypted, +a data key, initialization vector, authentication key (KD/IV/KA) +triple is generated by a random process. +(It goes without saying that the integrity of the system depends on the +process being {\it random\/}). +Then, for each user to receive a copy of the encrypted message, +the following actions are taken: + +First, the headers of the message are output in the clear. +Then, a {\it banner} string, $i$, is constructed and placed at the beginning +of the body of the message: +\example ENCRYPTED MESSAGE: TTI TMA\endexample +which identifies the message as being encrypted by the \TTI/ \TMA/. +Following the banner string is a structure, $m$, +which takes on the syntax and most of the semantics of a cryptographic +service message: +$$\displayindent=\leftskip \advance\displayindent by1.5\parindent + \halign{\hfil#/& \enspace#\hfil\cr + MCL& MAIL\cr + RCV& rcvid\cr + ORG& orgid\cr + IDK& kkid\cr + KD& $e_{kk}(ka)$\cr + KD& $e_{kk}(kd)$\cr + IV& $e_{kd}(iv)$\cr + MIC& $a_{ka}(b)$\cr + MAC& $a_{kd+ka}(m)$\cr +}$$ +After this, the encrypted body is output, $e_{kd,iv}(b)$. +In short, the entire output consists of +$$h+i+m+e_{kd,iv}(b).$$ + +The purpose of the structure $m$ is many-fold. +The MCL field indicates the structure $m$'s type; +currently only the type MAIL is generated and understood. +The RCV and ORG fields identify the intended recipient of the message +and the originator. +The IDK field identifies the key-encrypting key, KK, +used to encrypt the next two fields. +The first KD field has the encrypted authentication key, KA, +used to calculate the MIC of the plaintext of the body of the message. +After the body of the message is deciphered, $a_{ka}(b)$ is calculated and +compared to the value of the MIC field. +Hence, the MIC field authenticates the message body. +The second KD field has the encrypted data encrypting key, KD, +which along with the encrypted initialization vector in the IV field +was used to generate the ciphertext of the body. +Finally, the MAC field authenticates the $m$ structure itself. +The use of a data key, initialization vector, authentication key (KD/IV/KA) +triple permits us to perform key distribution in a hierarchical fashion and +allows the system to use a KK-relationship over a longer cryptoperiod +without fear of compromise. + +The \TMA/ provides three primary interfaces to a \UA/ to send encrypted mail: +the first takes a file-descriptor to a message +and returns a structure $g$ (called a {\it group}) +describing the ciphertext version of the body +(this structure contains a KD, IV, and KA generated at random, +along with a file-descriptor to the plaintext headers, +a file-descriptor to the ciphertext body, +and the checksum of the plaintext body); +the second takes a user entry (or \MTS/ address) and $g$, +and returns a file-descriptor to the encrypted message +for that user (or \MTS/ address); +the third takes $g$ and performs clean-up operations. +The chief advantage to this scheme of encryption +is that if the message is to be sent to more than one recipient, +then the MIC and the encrypted body need only be calculated once, +since the KD, IV, and KA remain constant +(only the KK's change with each recipient, +hence for each copy of the encrypted message, +only the structure $m$ need be re-calculated). + +There are, however, a few subtleties involved: +\underbar{first}, +the \MTS/ usually accepts only 7--bit characters, +so the encrypted text is exploded to consist of only printable characters;% +\nfootnote{% +As a rule, in all \CSM/s, +when encrypted information is transmitted, +it is exploded after encryption by the sender, +and imploded prior to decryption by the receiver.} +\underbar{second}, +since the \MTS/ may impose limits on the length of a line, +each line of output is limited to 64~characters; +and, +\underbar{third}, +since the body may require trailing padding, +during encryption +one last unit of 8~bytes is written (and encrypted), +naming the number of characters (presently, nulls) padded in the +previous 8~bytes ($0\tdots7$). + +\subsection{Decrypting Mail} +To decipher a message, the method is also straightforward: +The headers are output in the clear. +The banner string is essentially ignored, +and the structure $m$ is consulted to identify the correct key-encrypting key. +The \TMA/ checks to see if it knows of that KK. +If not, it asks the \KDS/ to supply it. +From that point, +the KA, KD, and IV are deciphered. +The $m$ structure is then authenticated. +With the correct key, +the remainder of the body is deciphered, +and all except for the last 16~bytes are output. +The last 8~bytes indicate how many of the previous 8~bytes should be output. +So, +the appropriate number of bytes is output, +and the plaintext body is authenticated and compared to the MIC. +Needless to say, +as the body is deciphered, +it is imploded back to 8--bit characters and lines are restored to their +previous lengths. +To indicate that the message was correctly deciphered, +a new header of the form +\example X-KDS-ID: orgid (originator's name)\endexample +is appended to the headers of the message. +Note that this provides an authentication mechanism. +Note, further, +that the \UA/ did not have to know the identity of the sender of the message. + +\section{Modifications to MH} +\MH/ is a public domain \UA/ for \unix/, +which is widely used in dealing with both a large number of electronic mail +application and a large number of messages. +Although this document does not intend to describe \MH/, +parts of the system are described as they relate to the \TMA/. +Readers interested in \MH/ should consult either the user's +manual\cite{MRose85a} for a detailed description, +or \cite{MRose85d} for a higher-level description. + +To modify \MH/ in order to make use of a \TMA/, +three programs were changed (with a high degree of transparency to the user), +and two new programs were introduced. + +In \MH/, +when a user wishes to send a composed draft +(which may be an entirely new message, +a re-distribution of a message, +a forwarding of messages, +or a reply to a message), +the user invokes the \pgm{send} program. +This program performs some minor front-end work for a program called +\pgm{post} which actually interacts with the \MTS/. +A new option to the \pgm{send} and \pgm{post} programs, +the \switch{encrypt} switch, +is introduced. +If the user indicates +\example send\ -encrypt\endexample +then \pgm{post} encrypts the messages it sends. + +When sending an encrypted message, +\pgm{post} first checks that each addressee has a mapping to a \KDS/ ID +during address verification. +Then, instead of batching all addresses for a message in a single posting +transaction, +for each addressee, +\pgm{post} consults the \TMA/ for the appropriately encrypted text and +posts that instead. +(Appendix~A discusses the reasons for this more fully.) +Hence, +assuming the user has established mappings between \MTS/ addresses +and \KDS/ IDs, +the \TMA/ does all the work necessary to encrypt the message, +including contacting the \KDS/ as necessary.% +\nfootnote{Once the \TMA/ establishes a connection to the \KDS/, +it retains that connection until the \UA/ terminates. +This is done to minimize connections to the \KDS/. +In the context of \MH/, +since the trusted mail agent is active over the lifetime of an invocation of +a program such as \pgm{post}, +this means that the connection is terminated just before the program +terminates.} + +In \MH/, +when a user is notified that new mail has arrived, +the \pgm{inc} program is run. +As each message is incorporated into the user's message handling area, +a scan (one-line) listing of the message is generated. + +By default, +the \pgm{inc} program upon detecting one or more encrypted messages, +after the scanning process, +asks the \TMA/ to decipher the message, +and if successful, +scans the deciphered messages. +This action can be inhibited with the \switch{nodecrypt} switch. +Hence, if the user wishes to retain messages in encrypted form, +\pgm{inc} can be told to note the presence of encrypted messages, +but otherwise not to process them. +By using the \MH/ user profile mechanism, +\pgm{inc} can be easily customized to reflect the user's tastes. +Again, +the actions of the \TMA/ are transparent to the user. +In fact, +if encrypted mail is received from users unknown to the \TMA/, +it queries the \KDS/ as to their identity prior to retrieving the +KK-relationship. + +If \pgm{inc} fails to decrypt a message for some reason, +or if \pgm{inc} was told not to decrypt a message, +the \pgm{decipher} program can be used. +This simple program merely deciphers each message given in its argument +list. +The \pgm{decipher} program can be given the \switch{insitu} switch, +which directs it to replace the ciphertext version of the message with the +plaintext version; +or, +the \switch{noinsitu} switch can be used indicating that the ciphertext +version of the message should be left untouched and the plaintext version +should be listed on the standard output. + +Finally, +the \pgm{tma} program is used to manipulate the \TMA/ database, +containing commands to boot the database, +add new users to the database, +and to establish mappings between addresses and users in the \TMA/ database. +This program can also be used to disconnect KKs between other \TMA/s, +and the KK/KA between itself and the \KDS/. + +Appendix~A of this paper contains a transcript of an \MH/ session. + +\section{Remarks} +We now consider the merit of the system described. +After presenting some of the basic strengths of the system +and a few unresolved questions, +the discussion centers on the simplifying assumptions made by the system, +and how these can be defended in a non-military environment. + +\subsection{Strengths} +It can be argued that the prototype system +(and the augmented model in which it finds its basis) +present many strengths. + +Perhaps the most important is the high-level of independence from the \MTS/ +enjoyed by the system. +As a result, +since the \TMA/ does not interact directly with the \MTS/, +it can be made to be completely free from any \MTS/-specific attributes, +such as naming, addressing, and routing conventions. +Furthermore, +when interfacing a \trustedmail/ system, +no modifications need be made to the \MTS/ or local \MTA/. + +In addition to the systems-level advantage to this scheme, +users of the system profit as well, +since many disjoint \MTS/s can be employed by a user with a single \TMA/. +This reduces the number of weaknesses in the system and allows a user to keep +a single database of ``trusted'' correspondents. +It should also make analysis and verification of the \TMA/ easier. + +Of course from the user-viewpoint, +once the \TMA/ has been initially booted, +all key management is automatic. +Not only does this reduce the risk of compromise of cryptographic material +(given proper construction and maintenance of the \TMA/), +but it relieves the user of a tedious and error-prone task. + +Finally, +although the \KDS/ described herein is used to support \trustedmail/, +other applications which require key management, +could employ the services offered by the key distribution center. + +\subsection{Open Questions} +At present, there are many restrictions on the prototype implementation +described. +Some of these result from that fact that the implementation is a prototype +and not a production system. +Others deal with more fundamental issues. + +In terms of the \TMA/, +the expiration delay for keys is hard-wired in; +it should be user-settable. +In the prototype version, +the KK and KA with the \KDS/ are good for 2~days or 10~uses +(whichever comes first), +while a KK for use with another \TMA/ is good for 1~day or 5~uses. +In actual practice, +keys with long cryptoperiods might be good for 6~months or 100~uses, +while keys with short cryptoperiods might be good for 1~month or 25~uses. +The choice of actual values is an open question +beyond the scope of prototype system.% +\nfootnote{The current values were chosen by guess work. +Although not necessarily technically sound, +the small numbers were very good for debugging purposes.} +In many respects, this issue is a classic trade-off: +with relatively small cryptoperiods, +an adversary has less chance of breaking a key, +but with longer cryptoperiods less connections have to be made to the key +distribution server. + +A fundamental issue, +owing to differences between the EFT and CBMS environments, +is that the \KDS/ implements only a subset of the \ansi/ draft +and the semantics of certain operations have changed somewhat. +It would be nice to unify the CBMS and EFT views +of a {\it key distribution center} +(in the former environment, the center is called a \KDC/, +while in the latter environment, the center is known as a \CKD/). +Appendix~C of this paper discusses the differences between the two +perspectives in greater detail. + +At present, +the relationship between errors in the \TMA/ and the posting process is an +open question. +For example, +if an address doesn't have a mapping in the \TMA/ database, +\pgm{post} treats this as an address verification error. +This prevents the draft from being posted. +The philosophy of the \UA/ is unclear at this point, +with respect to how recovery should occur. +A second area, also in question, deals with the way in which plaintext and +ciphertext versions of a message are present in a system. +Clearly, it is a bad idea to make both versions available, +but since the \TMA/ doesn't try to concern itself with first party +observation, +there seems to be little possibility of preventing this behavior. +The best that can be done, +at this stage, +is simply to choose a consistent policy that user's should attempt to adhere +to. +The software can help somewhat in implementing this policy, +but it certainly can't circumvent the user. + +The prototype is built on the assumption that a single key +distribution server is present. +Since the \ansi/ draft\cite{FIKM} makes provisions for +{\it key translation centers}, +the \trustedmail/ prototype should perhaps be made to operate in a more diverse +environment. +Until the issues become clearer, +this remains open. + +Finally, +for distribution lists, +a large number of people would need to share the same \KDS/ ID. +The current implementation doesn't support this. +Each \TMA/ database is for a particular ID. +A user with multiple IDs would need multiple databases, +or the database should be re-organized. + +\subsection{Weaknesses} +As pointed out earlier, +this prototype system situates itself in a commercial, not military, +environment. +With respect to this decision, +several aspects of the system are now discussed, +which we feel are acceptable in a commercial environment, +but which would be considered weaknesses in a military environment: + +\item{1.} Traffic Flow\hbreak +The prototype \TMA/ makes no attempt whatsoever to prevent or confuse traffic +analysis by augmenting traffic flow. + +\item{2.} The Database of \KDS/ Subscribers\hbreak +Since information returned by the request user identification (RUI) +and request identified user (RIU) MCLs are returned in the clear, +this allows an adversary to ascertain subscribers to the \KDS/, +and perhaps deduce some information about the system. +Without knowledge of the master key however, +an adversary could not impersonate a subscriber though. +Still, in the military sense, this is a weakness. +However, +all this assumes that the database maintained by the \KDS/ accurately +reflects the real-world. + +\item{3.} Multiple Recipients\hbreak +It is possible, though not proven to the authors' knowledge, +that the scheme used to avoid encrypting the body of a message more than once +for multiple recipients might permit one of the recipients who is also an +adversary to compromise the key relationship between the sender and another +recipient. + +\item{} The scenario goes like this: +When a message is being prepared for encryption, +a single KD/IV/KA triple is generated to encrypt the body. +Since the sender has a different key relationship with each recipient, +each message sent is different, since the structure $m$ depends not only on +the KD/IV/KA triple but also on the key relation between the sender and a +particular recipient. +Now suppose that one of the recipients, $r_1$, +in addition to receiving the copy of the message meant for him/her also +intercepts a copy of the message destined for another recipient, $r_2$. +At this point, +the recipient $r_1$ has both the plaintext and ciphertext version of the body, +the plaintext version of the KD/IV/KA triple, +and the ciphertext version of the KD/IV/KA triple that was generated using +the key relationship between the sender and the recipient $r_2$. +The question is: +can $r_1$ now deduce the key relationship between the sender and $r_2$? + +\item{} If so, then the way that the \TMA/ attempts to minimize the use of +encryption resources is a weakness. +But, even if this is possible, +given relatively short cryptoperiods for key relationships between \TMA/ +peers, +this becomes a non-problem. + +\item{4.} Discussion Groups\hbreak +As discussed earlier, +the proposed method of associating a single \KDS/ ID with the membership of a +discussion group does introduce a significant weakness for the security of +messages sent to the discussion group. +Since the \TMA/ does not assume a general broadcast facility, +it appears that there are no good solutions to the problem of discussion +group traffic. +Of course, +it is easy enough to simply send to each member of the group. + +\item{} For the sake of argument, +let's assume that the discussion group has $n$ members. +Now, +since a different key relationship would exist between the sender and +each of the $n$ recipients, +the structure $m$ would be different for each recipient +and so a different message would have to be sent to each recipient. +To make matters worse, +if one rejects the way the \TMA/ handles multiple recipients, +not only does the \MTS/ get burdened with $n$ different messages, +but the sender's \TMA/ gets burdened by having to encrypt +the body of the message $n$ times. +For meaningful values of $n$ (say on the order of~500, or even~25), +the amount of resources required for any trusted discussion group are simply +too costly. + +\subsection{Compromises, Compromises} +Each of the possible weaknesses discussed above represent a compromise +between the expense of the system and the level of security it can provide. + +The first two areas, if addressed by the \TMA/, +could result in much less background information being available to an +adversary. +In an application where it is important that an adversary not know who is +talking to whom, +or who can talk at all, +this is very important. +It is the authors' position that in the commercial environment, +this issue is not paramount. +By ignoring the issue of traffic flow, +the \TMA/ has a lot less work to do and the \MTS/ is kept clear of +``useless'' messages. +By keeping the information returned by the RUI and RIU MCLs in the clear, +the complexity of the \TMA/ is significantly reduced. + +The second two areas, if addressed by the \TMA/, +could result in a lesser probability of traffic being deciphered by an +adversary. +Regardless of the application, +this is always extremely important. +However, +the authors' feel that the compromise made by the \TMA/ in these two issues +is not substantial, +and does not result in an explicit weakness when a message is sent to +multiple recipients +(note that when there is only a single recipient of a message, +these two policies can not introduce weaknesses). +In return, efficient use can be made of both the \MTS/ and the \TMA/ when +messages are being sent to multiple recipients. +Given scarce resources or large numbers of recipients, +this approach may prove to be quite winning. + +Of course, much work remains to be done to prove the success of the \TMA/ in +all four of these areas. + +\section{Acknowledgements} +The prototype implementation described herein utilizes a public domain +implementation of the DES algorithm\cite{DEA} +which was originally implemented by James J.~Gillogly in May, 1977 +(who at that time was with the Rand Corporation, +and is now affiliated with Gillogly Software). +Interfaces to Dr.~Gillogly's implementation were subsequently coded by +Richard W.~Outerbridge in September, 1984 +(who at that time was with the Computer Systems Research Institute +at the University of Toronto, +and is now affiliated with Perle Systems, Incorporated). + +The authors would like to acknowledge Dennis Branstad, +Elaine Barker, and David Balensen of the National Bureau of Standards +for their comments on the prototype system +and insights on the ANSI draft\cite{FIKM}. +In particular, Dr.~Branstad originally suggested the method used for +encrypting a single message for multiple recipients under different keys. + +The authors (and all those who have read this paper) would like to thank +Willis H.~Ware of the Rand Corporation, +and Jonathon B.~Postel of the USC/Information Sciences Institute. +Their extensive comments resulted in a much more readable paper. +In addition, +the authors would like to thank +Dr. Stephen P.~Smith and Major Douglas A.~Brothers +for their insightful comments. diff --git a/docs/historical/trusted/trusted.tex b/docs/historical/trusted/trusted.tex new file mode 100644 index 0000000..d2e3ee2 --- /dev/null +++ b/docs/historical/trusted/trusted.tex @@ -0,0 +1,98 @@ +% run this through PhD-TeX + +\input dcustom +\articlestyle +\input version + +\def\appendix#1#2{\dosection{Appendix #1: #2}} + +\def\draftext{% + \begingroup + \eightpoint\sf + Reprinted from + {\it Proceedings, Second International Symposium on Computer Message + Systems}, + {\oldstyle 1985}% + \endgroup +} +\catcode`\@=11 +\def\draftstring{% + \ifnum\pageno>\z@ + \begingroup + \eightpoint\sf + Copyright $\copyright$ {\oldstyle 1985}, + IFIP TC-6 + \endgroup + \fi +} +\def\uci@footpage{\draftstring\hfil\rm\folio} +\catcode`\@=12 + +\input sfwmac +\def\CKD/{{\sf CKD}} +\def\CSM/{{\sf CSM}} +\def\KDC/{{\sf KDC}} +\def\KDS/{{\sf KDS}} +\def\MTA/{{\sf MTA}} +\def\MTS/{{\sf MTS}} +\def\TMA/{{\sf TMA}} +\def\TTI/{{\sl TTI\/}} +\def\UA/{{\sf UA}} + +\def\itemm$#1${\item{$#1\/$:}} + +\header + Design of the TTI Prototype\\ + Trusted Mail Agent\title + Marshall T.~Rose$^\dagger$\\ + David J.~Farber\\ + Stephen T.~Walker\author\info +\footnote{}{\hskip -\parindent +$^\dagger$ All three authors are with Trusted Technologies, Incorporated, +POB~45, Glenwood,~MD~21738, USA. +Telephone: 301/854--6889. +In addition, Professor Farber is with the University of Delaware.} + +\centerline{\sc Abstract} +{\rightskip=0pt\narrower\narrower +\noindent +The design of the \TTI/ prototype Trusted Mail Agent (\TMA/) is discussed. +This agent interfaces between two entities: +a key distribution center (\KDC/) and a user agent (\UA/). +The \KDC/ manages keys for the encryption of text messages, +which two subscribers to a key distribution service (\KDS/) may exchange. +The \TMA/ is independent of any underlying message transport system. + +\lp +Subscribers to the \KDC/ are known by unique identifiers, +known as IDs. +In addition to distributing keys, +the \KDC/ also offers a simple directory lookup service, +in which the ``real-world'' name of a subscriber may be mapped to an ID, +or the inverse mapping may be performed. + +\lp +This document details three software components: +\underbar{first}, +a prototype key distribution service, +which has been running in a TCP/IP environment since December, 1984; +\underbar{second}, +a prototype trusted mail agent; +and, +\underbar{third}, +modifications to an existing \UA/, +the Rand \MH/ Message Handling system, +which permit interaction with the prototype \TMA/. +\par} + +\input text +\input refs +\input appendixA +\input appendixB +\input appendixC +\printcontents +\unskip\footnote{}{\hskip -\parskip This document (version \versiontag/) +was \TeX set \today\ with DISS.STY v\version.} +\showsummary + +\bye diff --git a/docs/historical/trusted/version b/docs/historical/trusted/version new file mode 100644 index 0000000..abdfb05 --- /dev/null +++ b/docs/historical/trusted/version @@ -0,0 +1 @@ +60 diff --git a/docs/historical/trusted/version.sh b/docs/historical/trusted/version.sh new file mode 100644 index 0000000..9ec1e79 --- /dev/null +++ b/docs/historical/trusted/version.sh @@ -0,0 +1,9 @@ +if [ ! -r version ]; then echo 0 > version; fi +touch version +echo '\catcode`\#=12' > version.tex +awk ' { version = $1 + 1; }\ +END { printf "\\def\\versiontag/{#1.%d}%%\n", version >> "version.tex"; \ + printf "%d\n", version > "version"; }' < version +echo '\def\versiondate/{'`date`'}%' >> version.tex +echo '\catcode`\#=6' >> version.tex +echo '\tell{Version \versiontag/ of \versiondate/}' >> version.tex diff --git a/docs/historical/trusted/version.tex b/docs/historical/trusted/version.tex new file mode 100644 index 0000000..a4eb0f9 --- /dev/null +++ b/docs/historical/trusted/version.tex @@ -0,0 +1,5 @@ +\catcode`\#=12 +\def\versiontag/{#2.60}% +\def\versiondate/{Thu Aug 8 14:53:26 PDT 1985}% +\catcode`\#=6 +\tell{Version \versiontag/ of \versiondate/} diff --git a/docs/historical/tutorial/Makefile b/docs/historical/tutorial/Makefile new file mode 100644 index 0000000..1099838 --- /dev/null +++ b/docs/historical/tutorial/Makefile @@ -0,0 +1,54 @@ +####################################################################### +# Instructions to Make, for generation of nice-looking papers using TeX +####################################################################### + +.SUFFIXES: .pic .web .tex .dvi .imp + +.pic.tex:; tpic $< + +.web.tex:; sh -c 'if weave $<; then exit 0; else rm $@; exit 1; fi' + +.tex.dvi:; sh -c 'if TEXINPUTS=../doclib:.:${TEXINPUTS} tex \ + \\nonstopmode\\input $<\\bye; \ + then exit 0; else rm $@; exit 1; fi' + +.dvi.imp:; dviimp $(DFLAGS) -i $@ $< + + +############################################################# +# Here it is... +############################################################# + +all: i-all +print: i-print + + +############################################################# +# tutorial +############################################################# + +i-all: tutorial.dvi + +i-print: tutorial.dvi true + dvisp -J Tutorial tutorial.dvi + + +# customization files, et. al., not included below +tutorial.dvi: version.tex + +version.tex: tutorial.tex text.tex refs.tex version.sh + @: version.sh + +true:; + + + + +############################################################################## +# Miscellaneous tasks +############################################################################## + +distribution: clean + rm -f tutorial.dvi tutorial.imp + +clean:; rm -f tutorial.lof tutorial.log tutorial.lot tutorial.toc _* diff --git a/docs/historical/tutorial/refs.tex b/docs/historical/tutorial/refs.tex new file mode 100644 index 0000000..f50b724 --- /dev/null +++ b/docs/historical/tutorial/refs.tex @@ -0,0 +1,46 @@ +\let\journalinfo=\jourinfo +\let\thesis=\book % experimental +\let\thesisinfo=\bookinfo % .. + +\references + +\ref{MRose84} +\by M.T.~Rose. +\paper The Rand \MH/ Message Handling System: The UCI BBoards Facility +\other +\publ Department of Computer and Information Sciences +\publaddr University of Delaware +\month October\year 1984 +\endref + +\ref{MRose85a} +\by M.T.~Rose, J.L.~Romine. +\paper The Rand \MH/ Message Handling System: User's Manual +\paperinfo UCI Version +\other +\publ Department of Information and Computer Science +\publaddr University of California, Irvine +\month January\year 1985 +\endref + +\ref{MRose85b} +\by M.T.~Rose. +\paper The Rand \MH/ Message Handling System: Administrator's Guide +\paperinfo UCI Version, MH Classic +\other +\publ Northrop Corporation +\publaddr Research and Technology Center +\month July\year 1985 +\endref + +\ref{SPayn85} +\by S.~Payne +\paper MH5: Electronic Mail +\paperinfo Rand Note \#N-2281-RCC +\other +\publ The Rand Computation Center +\publaddr Rand, 1700 Main St., Santa Monica, CA 90406-2138 +\month May\year 1985 +\endref + +\endreferences diff --git a/docs/historical/tutorial/text.tex b/docs/historical/tutorial/text.tex new file mode 100644 index 0000000..471aaa2 --- /dev/null +++ b/docs/historical/tutorial/text.tex @@ -0,0 +1,803 @@ +% 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/. + +Parts of this document are taken from a Rand tutorial \cite{SPayn85} by +Sue Payne. + + \section{Disclaimer} +The Regents of the University of California issue the following +disclaimer concerning the UCI version of MH: +\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{Scope} +This document assumes that you have no knowledge of \MH/. +However, to use \MH/ you should have some familiarity with the \unix/ +operating system, +particularly with the way commands are given, +how files are named, +the jargon (e.g. {\it shell}, {\it argument}, {\it home directory}, +{\it pathname\/}), +and how to use a text editor (such as \pgm{ex}, \pgm{vi}, or \pgm{emacs\/}). + +This tutorial covers only basic material. +For additional information about \MH/, +consult the {\it User's Manual} \cite{MRose85a}. +Other documents of possible interest to you include +{\it The UCI BBoards Facility} \cite{MRose84} +and +the {\it MH Administrator's Guide} \cite{MRose85b}. + + \section{How To Use This Tutorial} +Different typefaces and symbols are used in this document to denote the +kinds of things you (the user) must type on your keyboard. +\smallskip +{\advance\leftskip by\parindent +\item{1.} The names of programs are given in {\it text italics}: +\smallskip\hskip 1in \pgm{comp}\smallskip +\item{2.} Arguments to programs are given in {\tt typewriter style}, +delimited by single-quotes: +\smallskip\hskip 1in \arg{msgs}\smallskip +\item{3.} \unix/ pathnames are given in {\sl slanted roman}: +\smallskip\hskip 1in \file{/usr/uci/}\smallskip +\item{4.} Text giving a full example is presented in {\tt typewriter style}: +\example comp\ -editor\ vi\endexample +The ``\hbox{\tt\char`\ }'' glyph % (visible space glyph) +is used to indicate an explicit space (the kind you make with the +space bar on your keyboard). +\smallskip} + + \section{Introduction} +With \MH/ you can send messages to other people on your system +and read messages that other people send to you. +Depending on how things have been set up on your system, +it may be possible for you to send messages to people on remote systems. +You can also reply to messages that you have received, +review them, +organize them in {\it folders}, +and delete them. + +\MH/ differs from other mail programs in that it is composed of many +small programs instead of just one very large program. +Among new users this sometimes causes some confusion +along the lines of ``what program do I run?'' +With \MH/, you use the shell to invoke one program at a time. +This means that when you handle mail, +the entire power of the shell is at your disposal +in addition to the facilities that \MH/ provides. +In the beginning, this may not make much sense or may not seem important. +However, we have found that as new users of \MH/ gain experience, +they find this style of interface to be very useful. + + \section{Summary} +The most minimal list of \MH/ commands that you can get by with is: +\smallskip +{\advance\leftskip by\parindent +\item{\pgm{inc}} - incorporate mail (get new mail) +\item{\pgm{show}} - show the first message +\item{\pgm{next}} - show the next message +\item{\pgm{prev}} - show the previous message +\item{\pgm{comp}} - compose a new message to send +\item{\pgm{repl}} - reply to a received message +\smallskip} +\pgm{Comp} and \pgm{repl} give enough prompting possibly to get you along. +However, it is suggested that you take the time to peruse this +tutorial before leaping into things. + + \section{Messages and Folders} +A message takes the form of a memorandum, +and is composed of two major parts: +a {\it header}, +which contains such information as +\eg{To} and \eg{From} addresses, \eg{Subject}, \eg{Date}, etc.; +and the {\it body}, +which is the actual text of the message. +Each {\it component} in the header starts with a keyword followed by +a colon and additional information. +For example, in the message: +\example + Date: 10 Oct 84 17:41:14 EDT (Wed)\\ + To: News@udel-dewey\\ + Subject: UCI Software Talk\\ + From: UCI Portal (agent: Marshall Rose) \\\\ + This is the text. +\endexample +there are four header items, and one line of text in the body. +Note that a blank line separates the body from the headers. + +\MH/ stores a message as an ordinary file in a \unix/ directory. +This directory is called a {\it folder}. +If you choose to keep and organize your messages, +you may create as many folders as you wish. +There is no limit as to the number of messages in a folder. +Typically messages are numbered from~1 up. +All of your personal folders, +along with some other information that \MH/ needs to know, +are kept in a special directory called \file{Mail} under your home directory. +Normally, \MH/ manages these files and directories automatically, +so you needn't muck around with them directly unless you really want to. + +You won't have any folders until somebody sends mail to you, as a rule. +If you are anxious to try out \MH/, but no one has sent you mail yet, +try sending mail to yourself to start out with. + + \section{Reading New Mail} +When you are notified that you have mail (usually when you log in), +perhaps with the message +\example You have mail.\endexample +then you know that messages are waiting in your {\it maildrop}. +To read these messages, you first have to {\it incorporate} the mail +into your ``in-box'' by typing the command: +\example inc\endexample +This incorporates the new mail from your mail drop to your in-box, +which is a folder named (naturally enough) \arg{+inbox}. +As \pgm{inc} incorporates your new mail, +it generates a {\it scan listing} of the mail: +$$\vbox{\tenpoint\tx\halign{\hfil#&#\hfil&& \quad#\hfil\cr +\noalign{\noindent Incorporating new mail into inbox...\medskip} +2&+& 10/10& WESTINE\%USC-ISIF& RFC 916 Now Available& + < version; fi +touch version +echo '\catcode`\#=12' > version.tex +awk ' { version = $1 + 1; }\ +END { printf "\\def\\versiontag/{#2.%d}%%\n", version >> "version.tex"; \ + printf "%d\n", version > "version"; }' < version +echo '\def\versiondate/{'`date`'}%' >> version.tex +echo '\catcode`\#=6' >> version.tex +echo '\tell{Version \versiontag/ of \versiondate/}' >> version.tex diff --git a/docs/historical/tutorial/version.tex b/docs/historical/tutorial/version.tex new file mode 100644 index 0000000..48c2f0c --- /dev/null +++ b/docs/historical/tutorial/version.tex @@ -0,0 +1,5 @@ +\catcode`\#=12 +\def\versiontag/{#2.8}% +\def\versiondate/{Wed May 21 21:04:08 PDT 1986}% +\catcode`\#=6 +\tell{Version \versiontag/ of \versiondate/}