annotate papers/realwork/text.tex @ 0:bce86c4163a3

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