|
|
1.1 root 1: .\" @(MHWARNING)
2: .po +.75i
3: .de $c \" Major Heading printer
4: .ce
5: .b "\\s12\\n+(ch.\\ \\$1\\s0" \" 12 Point Bold Header
6: .(x
7:
8: \ \ \ \\n(ch.\\ \\ \\$1
9: .)x
10: .sp 45p \" 45 point space or about 1/2 inch
11: ..
12: \".nr xs .15v \" Put index entries closer together
13: .(x
14:
15: Section
16: .)x _
17: .de $0 \" Sub-Heading macro called AFTER printing the heading
18: .(x
19: .sp .3v
20: .ti .5i
21: \\$1
22: .)x
23: ..
24: .de $s \" Macro to print footnote separator
25: \"\l'2i' \" No line drawn
26: .if n \
27: . sp 1.3 \" But extra space to make up for it.
28: ..
29: .fc ^ ~ \" The characters ^ and ~ CANNOT BE USED
30: \" throughout this document except as field
31: \" delimiter & pad indicator!
32: .he ''-%-''
33: .ll 32P \" 32 Picas or about 5+1/3 inch Line Length
34: .if n .ll 72m \" Use 72 ems for nroff
35: .nr ss 30p \" 30 point space before section titles
36: .nr fm 5v \" Rand likes bigger than normal [3v] bottom margins
37: .nr bm 7v \" ditto
38: .ds . \\fB.\\fP\\h'-(1m/3)' \" Bold period to stand out.
39: .ds << <\\h!-(\\w'<'/2)!<
40: .ds >> >\\h!-(\\w'>'/2)!>
41: .ds ** \v'-3p'\s+1*\s0\v'+3p'
42: .so version.rf
43: .tp
44: .(l C
45: \fIdiscard this page\fR
46: .sp 4
47: The Rand \fIMH\fR
48: Message Handling System:
49: User's Manual
50: .sp
51: UCI Version
52: .sp 2
53: \*(td
54: \*(MH
55: .)l
56: .++ C
57: .+c INTRODUCTION
58: .pp
59: Although people can travel cross-country in hours and can
60: reach others by telephone in seconds, communications still depend
61: heavily upon paper, most of which is distributed through the mails.
62: .pp
63: There are several major reasons for this continued dependence on
64: written documents.
65: First, a written document may be proofread
66: and corrected prior to its distribution, giving the author
67: complete control over his words.
68: Thus, a written document is
69: better than a telephone conversation in this respect.
70: Second,
71: a carefully written document is far less likely to be
72: misinterpreted or poorly translated than a phone conversation.
73: Third, a signature offers reasonable verification of authorship,
74: which cannot be provided with media such as telegrams.
75: .pp
76: However, the need for
77: .u fast ,
78: accurate, and reproducible document distribution is
79: obvious.
80: One solution in widespread use is the telefax.
81: Another
82: that is rapidly gaining popularity is electronic mail.
83: Electronic mail is similar to telefax in that the data to be sent
84: are digitized, transmitted via phone lines, and
85: turned back into a document at the receiver.
86: The advantage of
87: electronic mail is in its compression factor.
88: Whereas a telefax
89: must scan a page in very fine lines and send all of the black and
90: white information, electronic mail assigns characters fixed
91: codes which can be transmitted as a few bits of information.
92: Telefax presently has the advantage of being able to transmit an
93: arbitrary page, including pictures, but electronic mail is
94: beginning to deal with this problem.
95: Electronic mail also integrates well
96: with current directions in office automation, allowing documents
97: prepared with sophisticated equipment at one site to be quickly
98: transferred and printed at another site.
99: .pp
100: Currently, most electronic mail is intraorganizational,
101: with mail transfer remaining within one computer.
102: As computer
103: networking becomes more common, however, it is becoming more feasible to
104: communicate with anyone whose computer can be linked to your
105: own via a network.
106: .pp
107: The pioneering efforts on general-purpose electronic mail
108: were by organizations using the DoD ARPAnet[1].
109: The capability to send messages between computers existed before
110: the ARPAnet was developed, but it was used only in limited ways.
111: With the advent of the
112: ARPAnet, tools began to be developed which made it convenient for
113: individuals or organizations to distribute messages
114: over broad geographic areas, using
115: diverse computer facilities.
116: The interest and activity in
117: message systems has now reached such proportions that steps
118: have been taken within the DoD to coordinate and
119: unify the development of military message systems.
120: The use of electronic mail is expected to increase
121: dramatically in the next few years.
122: The utility of such systems
123: in the command and control and intelligence environments is
124: clear, and applications in these areas will probably lead the
125: way.
126: As the costs for sending and handling electronic messages
127: continue their rapid decrease, such uses can be
128: expected to spread rapidly into other areas and, of course, will
129: not be limited to the DoD.
130: .pp
131: A message system provides tools that help users (individuals
132: or organizations) deal with messages in various ways.
133: Messages
134: must be composed, sent, received, stored, retrieved,
135: forwarded, and replied to.
136: Today's best interactive computer
137: systems provide a variety of word-processing and information
138: handling capabilities.
139: The message handling facilities should be
140: well integrated with the rest of the system, so as to be a
141: graceful extension of overall system capability.
142: .pp
143: The message system described in this report, \fIMH\fR, provides most of the
144: features that can be found in other message systems and also
145: incorporates some new ones.
146: It has been built on the UNIX time-sharing
147: system[2], a popular operating system for the DEC PDP-11\**
148: and VAX-11 classes of computers.
149: .(f
150: \** PDP and VAX are trademarks of Digital Equipment Corporation.
151: .)f
152: A \*(lqsecure\*(rq operating
153: system similar to UNIX is currently being developed[3],
154: and that system will also run \fIMH\fR.
155: .pp
156: This report provides a complete description of \fIMH\fR and
157: thus may serve as a user's manual, although parts of the report
158: will be of interest to non-users as well.
159: Sections 2 and 3, the
160: Overview and Tutorial, present the key
161: ideas of \fIMH\fR and will give those not familiar with message systems
162: an idea of what such systems are like.
163: .pp
164: \fIMH\fR consists of a set of commands which use some special
165: files and conventions.
166: The final section is divided into three parts.
167: The first part covers the information
168: a user needs to know in addition to the
169: commands.
170: Then, each of the \fIMH\fR commands is described in detail.
171: Finally, other obscure details are revealed.
172: A summary of the commands is given in Appendix A,
173: and the syntax of message sequences is given in Appendix B.
174: .pp
175: A novel approach has been taken in the design of \fIMH\fR.
176: Instead of creating a large subsystem that appears as a single
177: command to the user (such as MS[4]),
178: \fIMH\fR is a collection of separate commands
179: which are run as separate programs.
180: The file and directory
181: system of UNIX are used directly.
182: Messages are stored as
183: individual files (datasets), and collections of them are grouped
184: into directories.
185: In contrast, most other message systems store
186: messages in a complicated data structure within a monolithic
187: file.
188: With the \fIMH\fR approach, UNIX commands can be
189: interleaved with commands invoking the functions of the message
190: handler.
191: Conversely, existing UNIX commands
192: can be used in connection with messages.
193: For
194: example, all the usual UNIX editing, text-formatting, and printing
195: facilities can be applied directly to individual messages.
196: MH,
197: therefore, consists of a relatively small amount of new code; it
198: makes extensive use of other UNIX software to provide the
199: capabilities found in other message systems.
200: .+c OVERVIEW
201: .pp
202: There are three main aspects of \fIMH\fR\0: the way messages are
203: stored (the message database), the user's profile (which directs
204: how certain actions of the message handler take place), and the
205: commands for dealing with messages.
206: .pp
207: Under \fIMH\fR, each message is stored as a separate file.
208: A user
209: can take any action with a message that he could with an ordinary
210: file in UNIX.
211: A UNIX directory in which messages are stored is
212: called a folder.
213: Each folder contains some standard entries to support
214: the message-handling functions.
215: The messages in a folder have numerical
216: names.
217: These folders (directories)
218: are entries in a particular directory path, described in
219: the user profile, through which \fIMH\fR can find message folders.
220: Using the UNIX \*(lqlink\*(rq facility, it is possible for one copy of a
221: message to be \*(lqfiled\*(rq in more than one folder, providing a
222: message index facility.
223: Also, using the UNIX tree-structured
224: file system, it is possible to have a folder within a folder,
225: nested arbitrarily deep,
226: and have the full power of the \fIMH\fR commands available.
227: .pp
228: Each user of \fIMH\fR has a user profile, a file in
229: his \fB$HOME\fR (initial login) directory called \fI\&.mh\(ruprofile\fR.
230: This profile contains several
231: pieces of information used by the \fIMH\fR commands:
232: a path name to the directory that contains the message folders
233: and parameters that tailor \fIMH\fR commands
234: to the individual user's requirements.
235: There is also another file,
236: called the user context,
237: which contains information concerning which folder the user last referenced
238: (the \*(lqcurrent\*(rq folder).
239: It also contains
240: most of the necessary state information concerning how
241: the user is dealing with his messages, enabling \fIMH\fR to be
242: implemented as a set of individual UNIX commands, in contrast to the
243: usual approach of a monolithic subsystem.
244: .pp
245: In \fIMH\fR, incoming mail is appended
246: to the end of a file in a system spooling area for the user.
247: This area is called the mail drop directory,
248: and the file is called the user's mail drop.
249: Normally when the user logins in,
250: s/he is informed of new mail
251: (or the \fIMH\fR program \fImsgchk\fR may be run).
252: The user adds the new messages to his/her collection of \fIMH\fR messages
253: by invoking the command
254: \fIinc\fR.
255: The \fIinc\fR (incorporate) command adds the new
256: messages to a folder called \*(lqinbox\*(rq, assigning them names which
257: are consecutive integers starting with the next highest integer
258: available in inbox.
259: \fIinc\fR also produces a
260: \fIscan\fR summary of
261: the messages thus incorporated.
262: A folder can be compacted into a single file,
263: for easy storage,
264: by using the \fIpackf\fR command.
265: Also,
266: messages within a folder can be sorted by date and time with the \fIsortm\fR
267: command.
268:
269: .pp
270: There are four commands for examining the messages in a
271: folder:
272: \fIshow\fR,
273: \fIprev\fR,
274: \fInext\fR,
275: and
276: \fIscan\fR.
277: The \fIshow\fR command displays a message in a folder,
278: \fIprev\fR displays the message preceding the current message, and
279: \fInext\fR displays the message following the current message.
280: \fIMH\fR lets the user choose the program that displays individual messages.
281: A special program, \fImhl\fR, can be used to display messages according
282: to the user's preferences.
283: The \fIscan\fR command summarizes the messages in a folder,
284: normally producing one line per message, showing who the message is from,
285: the date, the subject, etc.
286: .pp
287: The user may move a message from one folder to another with
288: the command
289: \fIrefile\fR.
290: Messages may be removed from a folder
291: by means of the command
292: \fIrmm\fR.
293: In addition, a user may query
294: what the current folder is and may specify that a new folder
295: become the current folder, through the command
296: \fIfolder\fR.
297: All folders may be summarized with the \fIfolders\fR command.
298: A message folder (or subfolder) may be removed by means of
299: the command
300: \fIrmf\fR.
301: .pp
302: A set of messages based on content may be selected by
303: use of the command \fIpick\fR.
304: This command searches through
305: messages in a folder and selects those that match a given
306: set of criteria.
307: These messages are then bound to a \*(lqsequence\*(rq name for use with other
308: \fIMH\fR commands.
309: The \fImark\fR command manipulates these sequences.
310: .pp
311: There are five commands enabling the user to create new
312: messages and send them:
313: \fIcomp\fR,
314: \fIdist\fR,
315: \fIforw\fR,
316: \fIrepl\fR,
317: and
318: \fIsend\fR.
319: The \fIcomp\fR command
320: provides the facility for the user to compose a
321: new message;
322: \fIdist\fR redistributes mail to additional addressees;
323: \fIforw\fR enables the user to forward messages; and
324: \fIrepl\fR facilitates the generation of a reply to an incoming message.
325: The last three commands may optionally annotate the original message.
326: Messages may be arbitrarily annotated with the \fIanno\fR command.
327: Once a draft has been constructed by one of the four above composition
328: programs,
329: a user\-specifiable program is run to query the user as to the disposition of
330: the draft prior to sending.
331: \fIMH\fR provides the simple \fIwhatnow\fR program to start users off.
332: If
333: a message is not sent directly by one of these commands, it may
334: be sent at a later time using the command
335: \fIsend\fR.
336: \fIMH\fR allows the use of any UNIX editor when composing a message.
337: For rapid entry, a special editor, \fIprompter\fR, is provided.
338: For programs, a special mail-sending program, \fImhmail\fR, is provided.
339: .pp
340: \fIMH\fR supports a personal aliasing facility which gives users the
341: capability to considerably shorten address typein
342: and use meaningful names for addresses.
343: The \fIali\fR program can be used to query \fIMH\fR as to the expansion of a
344: list of aliases.
345: After composing a message, but prior to sending, the \fIwhom\fR command
346: can be used to determine exactly who a message would go to.
347: .pp
348: \fIMH\fR provides a natural interface for telling the user's shell the names
349: of \fIMH\fR messages and folders.
350: The \fImhpath\fR program achieves this capability.
351: .pp
352: @BEGIN: BBOARDS
353: Finally, \fIMH\fR supports the UCI BBoards facility.
354: \fIbbc\fR can be used to query the status of a group of BBoards,
355: while \fImsh\fR can be used to read them.
356: BBoard leaders are also well supported, with the \fIbbl\fR program.
357: @END: BBOARDS
358: The \fIburst\fR command can be used to \*(lqshred\*(rq digests of messages
359: into individual messages.
360: .pp
361: All of the elements summarized above
362: are described in more detail in the following sections.
363: Many of the
364: normal facilities of UNIX provide additional capabilities for
365: dealing with messages in various ways.
366: For example, it is
367: possible to print messages
368: on the line-printer without requiring any additional code within
369: \fIMH\fR\0.
370: Using standard UNIX facilities, any terminal output can be
371: redirected to a file for repeated or future viewing.
372: In general,
373: the flexibility and capabilities of the UNIX interface with the
374: user are preserved as a result of the integration of \fIMH\fR into the UNIX
375: structure.
376: .+c TUTORIAL
377: .pp
378: This tutorial provides a brief introduction to the \fIMH\fR commands.
379: It should be sufficient
380: to allow the user to read his mail, do some simple manipulations of
381: it, and create and send messages.
382: .pp
383: A message has two major pieces: the
384: header and the body.
385: The body consists of the text of the message
386: (whatever you care to type in).
387: It follows the header and is separated from
388: it by an empty line.
389: (When you compose a message, the form that appears
390: on your terminal shows a line of dashes after the header.
391: This is for
392: convenience and is replaced by an empty line when the message is
393: sent.) The header is composed of several components, including the
394: subject of the message and the person to whom it is addressed.
395: Each component starts with a name
396: and a colon; components must not start with a blank.
397: The text of the
398: component may take more than one line, but each continuation line must
399: start with a blank.
400: Messages typically have \*(lqTo:\*(rq, \*(lqcc:\*(rq, and
401: \*(lqSubject:\*(rq components.
402: When composing a message, you should include
403: the \*(lqTo:\*(rq and \*(lqSubject:\*(rq components;
404: the \*(lqcc:\*(rq (for people you want to send copies to) is not necessary.
405: .pp
406: The basic \fIMH\fR commands are
407: \fIinc\fR,
408: \fIscan\fR,
409: \fIshow\fR,
410: \fInext\fR,
411: \fIprev\fR,
412: \fIrmm\fR,
413: \fIcomp\fR,
414: and
415: \fIrepl\fR.
416: These are described below.
417:
418: \fIinc\fR
419: .pp
420: When you get the message \*(lqYou have mail\*(rq, type the command \fIinc\fR.
421: You will get a \*(lqscan listing\*(rq such as:
422:
423: .nf
424: .in +.5i
425: .ta \w'7+ 'u +\w'11/26 'u +\w'To:norm 'u
426: 7+ \07/13 Cas revival of measurement work
427: 8 10/\09 Norm NBS people and publications
428: 9 11/26 To:norm question \*(<<Are there any functions
429: .re
430: .in -.5i
431: .fi
432: .pp
433: This shows the messages you received since the last time you
434: executed this command (\fIinc\fR adds these new messages to your inbox folder).
435: You can see this list again, plus a list of any
436: other messages you have, by using the
437: \fIscan\fR command.
438:
439: \fIscan\fR
440: .pp
441: The scan listing shows the message number, followed by the
442: date and the sender.
443: (If you are the sender, the addressee in the \*(lqTo:\*(rq
444: component is displayed.
445: You may send yourself a message by including
446: your name among the \*(lqTo:\*(rq or \*(lqcc:\*(rq addressees.)
447: It also shows the message's subject; if
448: the subject is short, the first part of the body of the message is
449: included after the characters \*(<<.
450:
451: .ne 5
452: \fIshow\fR
453: .pp
454: This command shows the current message, that is,
455: the first one of the new messages after an
456: \fIinc\fR.
457: If the message is not
458: specified by name (number), it is
459: generally the last message referred to by an \fIMH\fR command.
460: For example,
461:
462:
463: .ta \w'\fIshow\fR\0|\0\fIlpr\fR 'u
464: .ti .5i
465: ^\fIshow\fP\05~^will show message 5.
466: .re
467:
468: .pp
469: You can use the show command to copy a message or print a
470: message.
471:
472: .(b L
473: .in .5i
474: .ta \w'\fIshow\fR\0|\0\fIlpr\fR 'u
475: ^\fIshow\fR\0>\0\fIx\fR~^will copy the message to file x.
476: .br
477: ^\fIshow\fR\0|\0\fIlpr\fR~^will print the message, using the \fIlpr\fR command.
478: .br
479: ^\fInext\fR~^will show the message that follows the current message.
480: .br
481: ^\fIprev\fR~^will show the message previous to the current message.
482: .br
483: ^\fIrmm\fR~^will remove the current message.
484: .br
485: ^\fIrmm\03\fR~^will remove message 3.
486: .)b
487:
488: .ne 5
489: \fIcomp\fR
490: .pp
491: The
492: \fIcomp\fR command puts you in the editor to write or edit a message.
493: Fill in or
494: delete the \*(lqTo:\*(rq, \*(lqcc:\*(rq, and \*(lqSubject:\*(rq fields,
495: as appropriate, and type the body of the message.
496: Then
497: exit normally from the editor.
498: You will be asked
499: \*(lqWhat now?\*(rq.
500: Type a carriage return to see the options.
501: Typing \fBsend\fR
502: will cause the message to be sent; typing \fBquit\fR will cause an exit
503: from
504: \fIcomp\fR,
505: with the message draft saved.
506: .pp
507: If you quit without sending the message, it will be saved in a file
508: called <name>/Mail/draft (where <name> is your \fB$HOME\fR directory).
509: You can resume editing the message later with \*(lqcomp\0\-use\*(rq;
510: or you can send the message later, using the \fIsend\fR command.
511:
512: .ne 4
513: \fIcomp\0\-editor\0prompter\fR
514: .pp
515: This command uses a different editor and is useful for preparing
516: \*(lqquick and dirty\*(rq messages.
517: It prompts you for each component of the
518: header.
519: Type the information for that component, or type a carriage
520: return to omit the component.
521: After that, type the body of the
522: message.
523: Backspacing is the only form of editing allowed with this editor.
524: When the body is complete, type a carriage return followed by <EOT>
525: (usually <CTRL-D>).
526: This completes the initial preparation of the message; from then on, use
527: the same procedures as with
528: \fIcomp\fR (above).
529:
530: .ne 5
531: \fIrepl\fR
532: .br
533: \fIrepl\fR\0n
534: .pp
535: This command makes up an initial message form with a header
536: that is appropriate for
537: replying to an existing message.
538: The message being answered is the
539: current message if no message number is mentioned, or n if a number
540: is specified.
541: After the header is completed, you can finish the message as in
542: \fIcomp\fR (above).
543: .pp
544: This is enough information to get you going using \fIMH\fR.
545: There are more commands,
546: and the commands described here have more features.
547: Subsequent sections
548: explain \fIMH\fR in complete detail.
549: The system is quite powerful if you
550: want to use its sophisticated features, but the foregoing commands
551: suffice for sending and receiving messages.
552: .pp
553: There are numerous additional capabilities you may wish to explore.
554: For example, the
555: \fIpick\fR command will select a subset of messages
556: based on specified criteria such as sender and/or subject.
557: Groups of
558: messages may be designated, as described in Sec. IV,
559: under \fBMessage Naming\fR.
560: The file \fI\&.mh\(ruprofile\fR can be used to tailor your use of
561: the message system to your needs and preferences, as described in Sec. IV,
562: under \fBThe User Profile\fR.
563: In general, you may
564: learn additional features of the system selectively, according to your
565: requirements,
566: by studying the relevant sections of this manual.
567: There is no need to
568: learn all the details of the system at once.
569: .+c "DETAILED DESCRIPTION"
570: .pp
571: This section describes the \fIMH\fR system in detail, including the components
572: of the user profile, the conventions for message naming, and some of
573: the other \fIMH\fR conventions.
574: Readers who are
575: generally familiar with computer systems will be able to follow
576: the principal ideas, although some details may be meaningful only to
577: those familiar with UNIX.
578: .uh "THE USER PROFILE"
579: .pp
580: The first time an \fIMH\fR command is issued by a new user, the system
581: prompts for a \*(lqPath\*(rq and creates an \fIMH\fR \*(lqprofile\*(rq.
582: .pp
583: Each \fIMH\fR user has a profile which contains tailoring
584: information for each individual program.
585: Other profile entries control the \fIMH\fR path (where folders and
586: special files are kept), folder and message protections, editor
587: selection, and default arguments for each \fIMH\fR program.
588: Each user of \fIMH\fR also has a context file which contains
589: current state information for the \fIMH\fR package
590: (the location of the context file is kept in the user's \fIMH\fR directory,
591: or may be named in the user profile).
592: When a folder becomes
593: the current folder, it is recorded in the user's context.
594: (Other state information is kept in the context file,
595: see the manual entry for \fImh\-profile\0\fR(5) for more details.)
596: In general,
597: the term \*(lqprofile entry\*(rq refer to entries in either the profile or
598: context file.
599: Users of \fIMH\fR needn't worry about the distinction,
600: \fIMH\fR handles these things automatically.
601: .pp
602: The \fIMH\fR profile is stored in the file \fI\&.mh\(ruprofile\fR in the
603: user's \fB$HOME\fR directory\**.
604: .(f
605: \** By defining the envariable \fB$MH\fR,
606: you can specify an alternate profile to be used by \fIMH\fR commands.
607: .)f
608: It has the format of a message without
609: any body.
610: That is, each profile entry is on one line, with a
611: keyword followed by a colon (:) followed by text particular to
612: the keyword.
613: .br
614: \(rh\ \ \&
615: \fIThis file must not have blank lines.\fR
616: .br
617: The keywords
618: may have any combination of upper and lower case.
619: (See the information of \fImh\-mail\fR later on in this manual
620: for a description of message formats.)
621: .pp
622: For the average \fIMH\fR user, the only profile entry of
623: importance is \*(lqPath\*(rq.
624: Path specifies a directory in which \fIMH\fR
625: folders and certain files such as \*(lqdraft\*(rq are found.
626: The
627: argument to this keyword must be a legal UNIX path that names an
628: existing directory.
629: If this path is not absolute
630: (i.e., does not begin with a \fB/\fR\0),
631: it will be presumed to start from the user's \fB$HOME\fR directory.
632: All folder and message references within
633: \fIMH\fR will relate to this path unless full path names are used.
634: .pp
635: Message protection defaults to 644, and folder protection to
636: 711.
637: These may be changed by profile entries \*(lqMsg-Protect\*(rq
638: and \*(lqFolder-Protect\*(rq, respectively.
639: The argument to these
640: keywords is an octal number which is used as the UNIX file mode\**.
641: .(f
642: \** See \fIchmod\fR\0(1) in the \fIUNIX Programmer's Manual\fR\0[5].
643: .)f
644: .pp
645: When an \fIMH\fR program starts running, it looks through the
646: user's profile for an entry with a keyword matching the program's
647: name.
648: For example, when
649: \fIcomp\fR is run, it looks for a \*(lqcomp\*(rq
650: profile entry.
651: If one is found, the text of the profile entry is
652: used as the default switch setting until all defaults are overridden
653: by explicit switches passed to the program as arguments.
654: Thus the profile
655: entry \*(lqcomp:\0\-form\0standard.list\*(rq would direct
656: \fIcomp\fR to use the
657: file \*(lqstandard.list\*(rq as the message skeleton.
658: If an explicit
659: form switch is given to the
660: \fIcomp\fR command, it will override the
661: switch obtained from the profile.
662: .pp
663: In UNIX, a program may exist under several names,
664: either by linking or aliasing.
665: The actual invocation name is used by an \fIMH\fR
666: program when scanning for its profile defaults\**.
667: .(f
668: \** Unfortunately,
669: the shell does not preserve aliasing information when calling a program,
670: hence if a program is invoked by an alias different than its name,
671: the program will examine the profile entry for it's name,
672: not the alias that the user invoked it as.
673: The correct solution is to create a (soft) link in your \fI$HOME/bin\fR
674: directory to the \fIMH\fR program of your choice.
675: By giving this link a different name,
676: you can use an alternate set of defaults for the command.
677: .)f
678: Thus, each \fIMH\fR program
679: may have several names by which it can be invoked, and each name
680: may have a different set of default switches.
681: For example, if
682: \fIcomp\fR is invoked by the name
683: \fIicomp\fR,
684: the profile entry
685: \*(lqicomp\*(rq will control the default switches for this invocation of
686: the
687: \fIcomp\fR program.
688: This provides a powerful
689: definitional facility for commonly used switch settings.
690: .pp
691: The default editor
692: for editing within
693: \fIcomp\fR,
694: \fIrepl\fR,
695: \fIforw\fR,
696: and
697: \fIdist\fR,
698: is usually \fIprompter\fR,
699: but might be something else at your site,
700: such as \fI/usr/ucb/ex\fR or \fI/bin/e\fR.
701: A different editor may be used by specifying
702: the profile entry
703: \*(lqEditor: \*(rq.
704: The argument to \*(lqEditor\*(rq is the name of an
705: executable program or shell command file which can be found via
706: the user's $PATH defined search path, excluding the current
707: directory.
708: The \*(lqEditor:\*(rq profile specification
709: may in turn be overridden by a `\-editor\0<editor>'
710: profile switch associated with
711: \fIcomp\fR,
712: \fIrepl\fR,
713: \fIforw\fR,
714: or
715: \fIdist\fR.
716: Finally, an explicit editor switch specified with any
717: of these four commands will have ultimate precedence.
718: .pp
719: During message composition, more than one editor may be
720: used.
721: For example, one editor (such as \fIprompter\fR\0)
722: may be used
723: initially, and a second editor may be invoked later to revise
724: the message being composed
725: (see the discussion of
726: \fIcomp\fR in Section 5 for details).
727: A profile entry \*(lq<lasteditor>\-next:\0<editor>\*(rq specifies the name of
728: the editor to be used after a particular editor.
729: Thus \*(lqcomp:\0\-e\0prompter\*(rq
730: causes the initial text to be collected by
731: \fIprompter\fR,
732: and the profile entry \*(lqprompter\-next:\0ed\*(rq names ed as the
733: editor to be invoked for the next round of editing.
734: .pp
735: Some of the \fIMH\fR commands, such as
736: \fIshow\fR,
737: can be used on
738: message folders owned by others, if those folders are readable.
739: However,
740: you cannot write in someone else's folder.
741: All the \fIMH\fR command
742: actions not requiring write permission may be used with
743: a \*(lqread-only\*(rq folder.
744: .pp
745: Table 1 lists examples of some of the currently defined profile
746: entries, typical arguments, and the programs that reference the
747: entries.
748: .bp
749: .in .9i
750: .ll -.9i
751: .ta \w'<program>:\0default switches 'u
752: .sp 30p
753: .ce
754: Table 1
755: .sp 8p
756: .ce
757: P\s-2ROFILE\s0 C\s-2OMPONENTS\s0
758: .hl \" ~12p preceding + 1v (12p) after
759: .nf
760: ^^\fIMH\fR Programs that
761: ^Keyword and Argument~^\ use Component\h'|\n(.lu-.9i'\v'4p'\l'|0'\v'-4p' \" \l'..' does underlining
762: .sp
763: ^Path:\0Mail~^All
764: ^Current-Folder:\0inbox~^Most
765: ^Editor:\0/usr/ucb/ex~^\fIcomp, dist, forw, repl\fR
766: ^Msg\-Protect:\0644~^\fIinc\fR
767: ^Folder\-Protect:\0711~^\fIinc, pick, refile\fR
768: ^<program>:\0default switches~^All
769: ^prompter\-next:\0ed~^\fIcomp, dist, forw, repl\fR
770: .hl
771: .ll +.9i
772: .in 0
773: .fi
774: .pp
775: Path
776: .u should
777: be present.
778: Current\-Folder is maintained
779: automatically by many \fIMH\fR commands (see the \fBContext\fR sections of
780: the individual commands in Sec. IV).
781: All other entries are optional,
782: defaulting to the values described above.
783: .uh "MESSAGE NAMING"
784: .pp
785: Messages may be referred to explicitly or implicitly when
786: using \fIMH\fR commands.
787: A formal syntax of message names is given in Appendix B, but the
788: following description should be sufficient for most \fIMH\fR users.
789: Some details of message naming that apply only to certain
790: commands are included in the description of those
791: commands.
792: .pp
793: Most of the \fIMH\fR commands accept arguments specifying one or
794: more folders, and one or more messages to operate on.
795: The use of
796: the word \*(lqmsg\*(rq as an argument to a command means that exactly one
797: message name may be specified.
798: A message name may be a number,
799: such as 1, 33, or 234, or it may be
800: one of the \*(lqreserved\*(rq message names:
801: first, last, prev, next, and cur.
802: (As a shorthand, a
803: period (\&.) is equivalent to cur.)
804: The meanings of these names are straightforward:
805: \*(lqfirst\*(rq is the first message in the folder;
806: \*(lqlast\*(rq is the last message in the folder;
807: \*(lqprev\*(rq is the message numerically previous to the current message;
808: \*(lqnext\*(rq is the message numerically following the current message;
809: \*(lqcur\*(rq (or \*(lq\&.\*(rq) is the current message in the folder.
810: In addition,
811: \fIMH\fR supports user\-defined\-sequences;
812: see the description of the \fImark\fR command for more information.
813: .pp
814: The default in commands that take a \*(lqmsg\*(rq argument is
815: always \*(lqcur\*(rq.
816: .pp
817: The word \*(lqmsgs\*(rq indicates that several messages may be
818: specified.
819: Such a specification consists of several message
820: designations separated by spaces.
821: A message designation is
822: either a message name or a message range.
823: A message range is a
824: specification of the form name1\-name2 or name1:n, where name1 and
825: name2 are message names and n is an integer.
826: The first form
827: designates all the messages from name1 to name2 inclusive; this
828: must be a non-empty range.
829: The second form specifies up to n
830: messages, starting with name1 if name1 is a number, or first,
831: cur, or next, and ending with name1 if name1 is last or
832: prev.
833: This interpretation of n is overridden if n is preceded
834: by a plus sign or a minus sign;
835: +n always means up to n messages starting with
836: name1, and \-n always means up to n messages ending with name1.
837: Repeated specifications of the same message have the same effect
838: as a single specification of
839: the message.
840: Examples of
841: specifications are:
842:
843: .(b
844: 1 5 7\-11 22
845: first 6 8 next
846: first\-10
847: last:5
848: .)b
849: .pp
850: The message name \*(lqall\*(rq is a shorthand for \*(lqfirst\-last\*(rq,
851: indicating all of the messages in the folder.
852: .pp
853: In commands that accept \*(lqmsgs\*(rq arguments, the default is
854: either cur or all, depending on which makes more sense.
855: .pp
856: In all of the \fIMH\fR commands, a plus sign preceding an argument
857: indicates a folder name.
858: Thus, \*(lq+inbox\*(rq is the name of the
859: user's standard inbox.
860: If an explicit folder argument is given
861: to an \fIMH\fR command, it will become the current folder (that is,
862: the \*(lqCurrent-Folder:\*(rq entry
863: in the user's profile will be changed to this folder).
864: In the case of the
865: \fIrefile\fR command, which
866: can have multiple output folders, a new source folder (other than
867: the default current folder) is specified by `\-src\0+folder'.
868: .uh "OTHER MH CONVENTIONS"
869: .pp
870: One very powerful feature of \fIMH\fR is that the \fIMH\fR commands may
871: be issued from any current directory, and the proper path to
872: the appropriate folder(s) will be taken from the user's profile.
873: If the \fIMH\fR path is not appropriate for a specific folder or file,
874: the automatic prepending of the \fIMH\fR path can be avoided by
875: beginning a folder or file name with \fB/\fR,
876: or with \fB\&./\fR or \fB\&.\&./\fR component.
877: Thus any specific absolute path may be specified along with any path
878: relative to the current working directory.
879: .pp
880: Arguments to the various programs may be given in any order,
881: with the exception of a few switches whose arguments must follow
882: immediately, such as `\-src\0+folder' for \fIrefile\fR.
883: .pp
884: Whenever an \fIMH\fR command prompts the user, the valid options
885: will be listed in response to a <RETURN>.
886: (The first of the
887: listed options is the default if end-of-file is encountered,
888: such as from a command file.)
889: A valid response is any \fIunique\fR abbreviation of one of the listed options.
890: .pp
891: Standard UNIX documentation conventions are used in this report
892: to describe \fIMH\fR command syntax.
893: Arguments enclosed in brackets
894: ([ ]) are optional; exactly one of the arguments enclosed
895: within braces ({ }) must be specified, and all other
896: arguments are required.
897: The use of ellipsis dots (...) indicates
898: zero or more repetitions of the previous item.
899: For example,
900: \*(lq+folder ...\*(rq would indicate that one or more \*(lq+folder\*(rq
901: arguments is required
902: and \*(lq[+folder ...]\*(rq indicates that 0 or more
903: \*(lq+folder\*(rq arguments may be given.
904: .pp
905: \fIMH\fR departs from UNIX standards by using switches that consist of
906: more than one character, e.g. `\-header'.
907: To minimize typing,
908: only a unique abbreviation of a switch need be typed; thus, for
909: `\-header', `\-hea' is probably sufficient, depending on the
910: other switches the command accepts.
911: Each \fIMH\fR program
912: accepts the switch `\-help' (which \fBmust\fR be spelled out fully)
913: and produces a syntax description and a list of switches.
914: In the
915: list of switches, parentheses indicate required characters.
916: For example, all `\-help' switches will appear as \*(lq\-(help)\*(rq,
917: indicating that no abbreviation is accepted.
918: Furthermore,
919: the `\-help' switch tells the version of the \fIMH\fR program you invoked.
920: .pp
921: Many \fIMH\fR switches have both on and off forms, such as
922: `\-format' and `\-noformat'.
923: In many of the descriptions which follow,
924: only one form is defined; the other form, often used to
925: nullify profile switch settings, is assumed to be the opposite.
926: .br
927: .bp
928: .uh "MH COMMANDS"
929: .pp
930: The \fIMH\fR package comprises several programs:
931: .\" I pity the fool who tampers with the next line...
932: .ds ZZ -me
933: .so mh.me
934: .pp
935: These programs are described below.
936: The form of the descriptions
937: conforms to the standard
938: form for the description of UNIX commands.
939: .if t \{
940: .ll 6.5i
941: .lt 6.5i
942: \}
943: .fo '[mh.6]'MH'UCI version'
944: .de SC
945: .he '\\$1(\\$2)'-%-'\\$1(\\$2)'
946: .bp
947: .(x
948: .ti .8i
949: \\$1
950: .)x
951: ..
952: .de NA
953: .b \\s-2NAME\\s0
954: .ti .5i
955: ..
956: .de SY
957: .sp
958: .b \\s-2SYNOPSIS\\s0
959: .in 1i
960: .ti .5i
961: .na
962: ..
963: .de DE
964: .ad
965: .sp
966: .in 0
967: .b \\s-2DESCRIPTION\\s0
968: .sp
969: .fi
970: .in .5i
971: ..
972: .de Hh
973: .ad
974: .sp
975: .in 0
976: .b "\\s-2Helpful Hints\\s0"
977: .sp
978: .fi
979: .in .5i
980: ..
981: .de Fi
982: .(b L
983: .ti 0
984: .b \\s-2Files\\s0
985: .ta \w'@(MHETCPATH)/ExtraBigFileName 'u
986: ..
987: .de Pr
988: .)b
989: .(b L F
990: .ta \w'ExtraBigProfileName 'u
991: .ti 0
992: .b "\\s-2Profile Components\\s0"
993: .ti .5i
994: ..
995: .de Ps
996: .ti .5i
997: ..
998: .de Sa
999: .)b
1000: .(b L F
1001: .ti 0
1002: .b "\\s-2See Also\\s0"
1003: .br
1004: ..
1005: .de De
1006: .)b
1007: .(b L
1008: .in .5i
1009: .ti 0
1010: .b \\s-2Defaults\\s0
1011: ..
1012: .de Ds
1013: ..
1014: .de Co
1015: .)b
1016: .(b L F
1017: .ti 0
1018: .b \\s-2Context\\s0
1019: .br
1020: ..
1021: .de Hi
1022: .)b
1023: .(b L F
1024: .ti 0
1025: .b \\s-2History\\s0
1026: .br
1027: ..
1028: .de Bu
1029: .)b
1030: .(b L F
1031: .ti 0
1032: .b \\s-2Bugs\\s0
1033: .br
1034: ..
1035: .de En
1036: .)b
1037: .in 0
1038: ..
1039: .po -.50i
1040: .so ali.me
1041: .so anno.me
1042: @BEGIN: BBOARDS
1043: .so bbc.me
1044: .so bbl.me
1045: .so bbleader.me
1046: .so bboards.me
1047: @END: BBOARDS
1048: .so burst.me
1049: .so comp.me
1050: .so dist.me
1051: .so folder.me
1052: .so forw.me
1053: .so inc.me
1054: .so mark.me
1055: .so mhl.me
1056: .so mhmail.me
1057: .so mhook.me
1058: .so mhpath.me
1059: .so msgchk.me
1060: .so msh.me
1061: .so next.me
1062: .so packf.me
1063: .so pick.me
1064: .so prev.me
1065: .so prompter.me
1066: .so rcvstore.me
1067: .so refile.me
1068: .so repl.me
1069: .so rmf.me
1070: .so rmm.me
1071: .so scan.me
1072: .so send.me
1073: .so show.me
1074: .so sortm.me
1075: .so vmh.me
1076: .so whatnow.me
1077: .so whom.me
1078: .po +.50i
1079: .he ''-%-''
1080: .fo ''''
1081: .br
1082: .if t \{
1083: .ll 32P
1084: .lt 32P
1085: \}
1086: .bp
1087: .uh "MORE DETAILS"
1088: .pp
1089: This section describes some of the more intense points of the \fIMH\fR system,
1090: by expanding on topics previously discussed.
1091: The format presented conforms to the standard form for the description of UNIX
1092: documentation.
1093: .if t \{
1094: .ll 6.5i
1095: .lt 6.5i
1096: \}
1097: .fo '[mh.6]'MH'UCI version'
1098: .po -.50i
1099: .so mh-alias.me
1100: .so mh-format.me
1101: .so mh-mail.me
1102: .so mh-profile.me
1103: .so ap.me
1104: .so conflict.me
1105: .so dp.me
1106: .so install-mh.me
1107: .so post.me
1108: .po +.50i
1109: .he ''-%-''
1110: .fo ''''
1111: .br
1112: .if t \{
1113: .ll 32P
1114: .lt 32P
1115: \}
1116: .+c "REPORTING PROBLEMS"
1117: .pp
1118: If problems are encountered with an \fIMH\fR program,
1119: the problems should be reported to the local maintainers of \fIMH\fR.
1120: When doing this,
1121: the name of the program should be reported,
1122: along with the version information for the program.
1123: To find out what version of an \fIMH\fR program is being run,
1124: invoke the program with the `\-help' switch.
1125: In addition to listing the syntax of the command,
1126: the program will list information pertaining to its version.
1127: This information includes the version of \fIMH\fR,
1128: the host it was generated on,
1129: and the date the program was loaded.
1130: A second line of information,
1131: found on versions of \fIMH\fR after #5.380 include \fIMH\fR configuration
1132: options.
1133: For example,
1134:
1135: .in +.5i
1136: version: MH 6.1 #1[UCI] (nrtc-gremlin) of Wed Nov 6 01:13:53 PST 1985
1137: .br
1138: options: [BSD42] [MHE] [NETWORK] [SENDMTS] [MMDFII] [SMTP] [POP]
1139: .in -.5i
1140:
1141: The `6.1 #1[UCI]' indicates that the program is from the UCI \fImh.6\fR
1142: version of \fIMH\fR.
1143: The program was generated on the host `nrtc-gremlin' on
1144: `Wed Nov 6 01:13:53 PST 1985'.
1145: It's usually a good idea to send the output of the `\-help' switch along
1146: with your report.
1147:
1148: If there is no local \fIMH\fR maintainer,
1149: try the address \fBBug-MH\fR.
1150: If that fails, use the Internet mailbox \[email protected]\fR.
1151:
1152: .+c "ADVANCED FEATURES"
1153: .de UH
1154: .lp
1155: .b "\\$1"
1156: .pp
1157: .(x
1158: .ti .8i
1159: \\$1
1160: .)x
1161: ..
1162: .pp
1163: This section describes some features of \fIMH\fR that were included strictly
1164: for advanced \fIMH\fR users.
1165: These capabilities permit \fIMH\fR to exhibit more powerful behavior for the
1166: seasoned \fIMH\fR users.
1167: .uh "USER\-DEFINED SEQUENCES"
1168: .pp
1169: User\-defined sequences allow the \fIMH\fR user a tremendous amount of power
1170: in dealing with groups of messages in the same folder
1171: by allowing the user to bind a group of messages to a meaningful symbolic
1172: name.
1173: The user may choose any name for a message sequence,
1174: as long as it consists of alphanumeric characters and does not conflict with
1175: the standard \fIMH\fR reserved message names
1176: (e.g., \*(lqfirst\*(rq, etc).
1177: After defining a sequence,
1178: it can be used wherever an \fIMH\fR command expects a `msg' or `msgs'
1179: argument.
1180: Although all \fIMH\fR commands expand user\-defined sequences as appropriate,
1181: there are two commands that allow the user to define and manipulate them:
1182: \fIpick\fR and \fImark\fR.
1183: .UH "Pick and User\-Defined Sequences"
1184: .pp
1185: Most users of \fIMH\fR will use user\-defined sequences only with
1186: the \fIpick\fR command.
1187: By giving the `\-sequence\ name' switch to \fIpick\fR
1188: (which can occur more than once on the command line),
1189: each sequence named is defined as those messages which \fIpick\fR matched
1190: according the the selection criteria it was given.
1191: Hence,
1192:
1193: .ti +.5i
1194: pick\0\-from\0frated\0\-seq\0fred
1195:
1196: finds all those messages in the current folder which were from
1197: \*(lqfrated\*(rq,
1198: creates a sequence called \*(lqfred\*(rq,
1199: and then adds them to the sequence.
1200: The user could then invoke
1201:
1202: .ti +.5i
1203: scan\0fred
1204:
1205: to get a \fIscan\fR listing of those messages.
1206: Note that by default,
1207: \fIpick\fR creates the named sequences
1208: before it adds the selected messages to the sequence.
1209: Hence, if the named sequence already existed,
1210: the sequence is destroyed prior to being re\-defined
1211: (nothing happens to the messages that were a part of this sequence,
1212: they simply cease to be members of that sequence).
1213: By using the `\-nozero' switch, this behavior can be inhibited,
1214: as in
1215:
1216: .in +.5i
1217: pick\0\-from\0frated\0\-seq\0sgroup
1218: .br
1219: pick\0\-from\0fear\0\-seq\0sgroup\0\-nozero
1220: .br
1221: pick\0\-from\0freida\0\-seq\0sgroup\0\-nozero
1222: .in -.5i
1223:
1224: finds all those messages in the current folder which were from
1225: \*(lqfrated\*(rq, \*(lqfear\*(rq, or \*(lqfreida\*(rq,
1226: and defines the sequence called \*(lqsgroup\*(rq as exactly those messages.
1227: These operations amounted to an \*(lqinclusive\-or\*(rq of three selection
1228: criteria,
1229: using \fIpick\fR,
1230: one can also generate the \*(lqand\*(rq of some selection criteria as well:
1231:
1232: .in +.5i
1233: pick\0\-from\0frated\0\-seq\0fred
1234: .br
1235: pick\0\-before\0friday\0\-seq\0fred\0fred
1236: .in -.5i
1237:
1238: This example defines the sequence called \*(lqfred\*(rq as exactly those
1239: messages from \*(lqfrated\*(rq that were dated prior to \*(lqfriday\*(rq.\**
1240: .(f
1241: \** Of course,
1242: it is much easier to simply use the built\-in boolean operation of
1243: \fIpick\fR to get the desired results:
1244:
1245: .ti +.5i
1246: pick\0\-from\0frated\0\-or\0\-from\0fear\0\-or\0\-from\0freida\0\-seq\0sgroup
1247:
1248: and
1249:
1250: .ti +.5i
1251: pick\0\-from\0frated\0\-and\0\-before\0friday\0\-seq\0fred
1252:
1253: do exactly the same thing as the five commands listed above.
1254: Hence, the `\-nozero' option to \fIpick\fR is only useful to manipulate
1255: existing sequences.
1256: .)f
1257: .pp
1258: \fIPick\fR is normally used as a back\-quoted command,
1259: for example,
1260:
1261: .ti +.5i
1262: scan\0`pick\0\-from\0postmaster`
1263:
1264: Now suppose that the user decides that another command should be issued,
1265: using exactly those messages.
1266: Since,
1267: \fIpick\fR wasn't given a `\-sequence\ name' argument in this example,
1268: the user would end\-up typing the entire back\-quoted command again.
1269: A simpler way is to add a default sequence name to the \&.mh\(ruprofile.
1270: For example,
1271:
1272: .ti +.5i
1273: pick:\0\-seq\0select\0\-list
1274:
1275: will tell \fIpick\fR to always define the sequence \*(lqselect\*(rq whenever
1276: it's run.
1277: The `-list' is necessary since the `\-sequence\ name' switch sets `\-nolist'
1278: whenever the former is encountered.
1279: Hence, this profile entry makes \fIpick\fR define the \*(lqselect\*(rq
1280: sequence and otherwise behave exactly as if there was no profile entry at all.
1281: .UH "Mark and User\-Defined Sequences"
1282: .pp
1283: The \fImark\fR command lets the user perform low\-level manipulation of
1284: sequences,
1285: and also provides a well\-needed debug facility to the
1286: implementors/developers/maintainers of \fIMH\fR (the \fIMH\fR\-hacks).
1287: In the future, a user\-friendly \*(lqfront\-end\*(rq for \fImark\fR will
1288: probably be developed to give the \fIMH\fR user a way to take better
1289: advantage of the underlying facilities.
1290: .UH "Public and Private User\-Defined Sequences"
1291: .pp
1292: There are two kinds of sequences: \fIpublic\fR sequences,
1293: and \fIprivate\fR sequences.
1294: \fIPublic\fR sequences of a folder are accessible to any \fIMH\fR user that
1295: can read that folder and are kept in the \&.mh\(rusequences file in the folder.
1296: \fIPrivate\fR sequences are accessible only to the \fIMH\fR user that defined
1297: those sequences and are kept in the user's \fIMH\fR context file.
1298: By default,
1299: \fIpick\fR (and \fImark\fR\0) create \fIpublic\fR sequences
1300: if the folder for which the sequences are being defined is writable by the
1301: \fIMH\fR user.
1302: Otherwise, \fIprivate\fR sequences are created.
1303: This can be overridden with the `\-public' and `\-private' switches.
1304: .UH "Sequence Negation"
1305: .pp
1306: In addition to telling an \fIMH\fR command to use the messages in the sequence
1307: \*(lqseen\*(rq, as in
1308:
1309: .ti +.5i
1310: refile\0seen\0+old
1311:
1312: it would be useful to be easily able to tell an \fIMH\fR command to use all
1313: messages \fIexcept\fR those in the sequence.
1314: One way of doing this would be to use \fImark\fR and define the sequence
1315: explicitly,
1316: as in
1317:
1318: .ti +.5i
1319: mark\0\-delete\0\-zero\0seen\0\-seq\0notseen
1320:
1321: which,
1322: owing to \fImark\fR\0's cryptic interpretation of `\-delete' and `\-zero',
1323: defines the sequence \*(lqnotseen\*(rq to be all messages not in the sequence
1324: \*(lqseen\*(rq.
1325: Naturally,
1326: anytime the sequence \*(lqseen\*(rq is changed,
1327: \*(lqnotseen\*(rq will have to be updated.
1328: Another way to achieve this is to define the entry
1329: \*(lqSequence\-Negation:\*(rq in the \&.mh\(ruprofile.
1330: If the entry was
1331:
1332: .ti +.5i
1333: Sequence\-Negation:\0not
1334:
1335: then anytime an \fIMH\fR command was given \*(lqnotseen\*(rq as a `msg' or
1336: `msgs' argument,
1337: it would substitute all messages that are not a member of the sequence
1338: \*(lqseen\*(rq.
1339: That is,
1340:
1341: .ti +.5i
1342: refile\0notseen\0+new
1343:
1344: does just that.
1345: The value of the \*(lqSequence\-Negation:\*(rq entry in the profile can be
1346: any string.
1347: Hence,
1348: experienced users of \fIMH\fR do not use a word,
1349: but rather a special character which their shell does not interpret
1350: (users of the \fICShell\fR use a single caret or circumflex (usually shift\-6),
1351: while users of the Bourne shell use an exclamation\-mark).
1352: This is because there is nothing to prevent a user of \fIMH\fR from defining a
1353: sequence with this string as its prefix,
1354: if the string is nothing by letters and digits.
1355: Obviously,
1356: this could lead to confusing behavior
1357: if the \*(lqSequence\-Negation:\*(rq entry leads \fIMH\fR to believe that two
1358: sequences are opposites by virtue of their names differing by the prefix
1359: string.
1360: .UH "The Previous Sequence"
1361: .pp
1362: Many times users find themselves issuing a series of commands on the same
1363: sequences of messages.
1364: If the user first defined these messages as a sequence,
1365: then considerable typing may be saved.
1366: If the user doesn't have this foresight,
1367: \fIMH\fR provides a handy way of having \fIMH\fR remember the `msgs' or
1368: `msg' argument last given to an \fIMH\fR command.
1369: If the entry \*(lqPrevious\-Sequence:\*(rq is defined in the
1370: \&.mh\(ruprofile,
1371: then when the command finishes,
1372: it will define the sequence(s) named in the value of this entry as being
1373: exactly those messages that were specified.
1374: Hence, a profile entry of
1375:
1376: .ti +.5i
1377: Previous\-Sequence:\0pseq
1378:
1379: directs any \fIMH\fR command that accepts a `msg' or `msgs' argument to
1380: define the sequence \*(lqpseq\*(rq as those messages when it finishes.
1381: More than one sequence name may be placed in this entry,
1382: separated with spaces.
1383: The one disadvantage of this approach
1384: is that the \fIMH\fR progams have to update the sequence information for
1385: the folder each time they run
1386: (although most programs read this information,
1387: usually only \fIpick\fR and \fImark\fR have to write this information out).
1388: .UH "The Unseen Sequence"
1389: .pp
1390: Finally, some users like to distinguish between messages which have been
1391: previously seen by them.
1392: Both \fIinc\fR and \fIshow\fR honorthe profile entry
1393: \*(lqUnseen\-Sequence\*(rq to support this activity.
1394: Whenever \fIinc\fR places new messages in a folder,
1395: if the entry \*(lqUnseen\-Sequence\*(rq is defined in the \&.mh\(ruprofile,
1396: then when the command finishes,
1397: \fIinc\fR will add the new messages to the sequence(s) named in the value of
1398: this entry.
1399: Hence, a profile entry of
1400:
1401: .ti +.5i
1402: Unseen\-Sequence:\0 unseen
1403:
1404: directs \fIinc\fR to add new messages to the sequence \*(lqunseen\*(rq.
1405: Unlike the behavior of the \*(lqPrevious\-Sequence\*(rq entry in the profile
1406: however,
1407: the sequence(s) will \fBnot\fR be zero'd.
1408: .pp
1409: Similarly,
1410: whenever \fIshow\fR (or \fInext\fR or \fIprev\fR\0) displays a message,
1411: they remove those messages from any sequences named by the
1412: \*(lqUnseen\-Sequence\*(rq entry in the profile.
1413: .uh "COMPOSITION OF MAIL"
1414: .pp
1415: There are a number of interesting advanced facilities for the composition of
1416: outgoing mail.
1417:
1418: .UH "The Draft Folder"
1419: .pp
1420: The \fIcomp\fR, \fIdist\fR, \fIforw\fR, and \fIrepl\fR commands have two
1421: switches, `\-draftfolder\0+folder' and `\-draftmessage\0msg'.
1422: If `\-draftfolder\0+folder' is used,
1423: these commands are directed to construct a draft message in the indicated
1424: folder.
1425: (The \*(lqDraft\-Folder:\*(rq profile entry may be used to declare a
1426: default draft folder for use with
1427: \fIcomp\fR, \fIdist\fR, \fIforw\fR, and \fIrepl\fR)
1428: If `\-draftmessage\0msg' is not used, it defaults to `new'
1429: (unless the user invokes \fIcomp\fR with `\-use',
1430: in which case the default is `cur').
1431: Hence, the user may have several message compositions in progress
1432: simultaneously.
1433: Now, all of the \fIMH\fR tools are available on each of the user's message
1434: drafts
1435: (e.g., \fIshow\fR, \fIscan\fR, \fIpick\fR, and so on).
1436: If the folder does not exist,
1437: the user is asked if it should be created (just like with \fIrefile\fR\0).
1438: Also,
1439: the last draft message the user was composing is known as `cur' in the
1440: draft folder.
1441: .pp
1442: Furthermore,
1443: the \fIsend\fR command has these switches as well.
1444: Hence, from the shell,
1445: the user can send off whatever drafts desired using the
1446: standard \fIMH\fR `msgs' convention with `\-draftmessage msgs'.
1447: If no `msgs' are given, it defaults to `cur'.
1448: .pp
1449: In addition,
1450: all five programs have a `\-nodraftfolder' switch,
1451: which undoes the last occurrence of `\-draftfolder\0folder'
1452: (useful if the latter occurs in the user's \fIMH\fR profile).
1453: .pp
1454: If the user does not give the `\-draftfolder\0+folder' switch,
1455: then all these commands act ``normally''.
1456: Note that the `\-draft' switch to \fIsend\fR and \fIshow\fR
1457: still refers to the file called `draft' in the user's \fIMH\fR
1458: directory.
1459: In the interests of economy of expression,
1460: when using \fIcomp\fR or \fIsend\fR,
1461: the user needn't prefix the draft `msg' or `msgs' with
1462: `\-draftmessage'.
1463: Both of these commands accept a `file' or `files' argument,
1464: and they will, if given `\-draftfolder\0+folder' treat these arguments
1465: as `msg' or `msgs'.\**
1466: .(f
1467: \** This may appear to be inconsistent, at first,
1468: but it saves a lot of typing.
1469: .)f
1470: Hence,
1471:
1472: .ti +.5i
1473: send -draftf +drafts first
1474:
1475: is the same as
1476:
1477: .ti +.5i
1478: send -draftf +drafts -draftm first
1479:
1480: .pp
1481: To make all this a bit more clear, here are some examples.
1482: Let's assume that the following entries are in the \fIMH\fR profile:
1483:
1484: .in +.5i
1485: .nf
1486: Draft\-Folder: +drafts
1487: sendf: -draftfolder +drafts
1488: .fi
1489: .in -.5i
1490:
1491: Furthermore,
1492: let's assume that the program \fIsendf\fR is a (symbolic) link in the user's
1493: \fB$HOME/bin/\fR directory to \fIsend\fR.
1494: Then, any of the commands
1495:
1496: .in +.5i
1497: .nf
1498: comp
1499: dist
1500: forw
1501: repl
1502: .fi
1503: .in -.5i
1504:
1505: constructs the message draft in the `draft' folder using the `new'
1506: message number.
1507: Furthermore,
1508: they each define `cur' in this folder to be that message draft.
1509: If the user were to use the \fIquit\fR option at `What now?' level,
1510: then later on,
1511: if no other draft composition was done,
1512: the draft could be sent with simply
1513:
1514: .ti +.5i
1515: sendf
1516:
1517: Or,
1518: if more editing was required,
1519: the draft could be edited with
1520:
1521: .ti +.5i
1522: comp -use
1523:
1524: Instead,
1525: if other drafts had been composed in the meantime,
1526: so that this message draft was no longer known as `cur' in the `draft'
1527: folder,
1528: then the user could \fIscan\fR the folder to see which message draft in the
1529: folder should be used for editing or sending.
1530: Clever users could even employ a back-quoted \fIpick\fR to do the work:
1531:
1532: .ti +.5i
1533: comp -use `pick +drafts -to bug-mh`
1534:
1535: or
1536:
1537: .ti +.5i
1538: sendf `pick +drafts -to bug-mh`
1539:
1540: Note that in the \fIcomp\fR example,
1541: the output from \fIpick\fR must resolve to a single message draft
1542: (it makes no sense to talk about composing two or more drafts with one
1543: invocation of \fIcomp\fR\0).
1544: In contrast,
1545: in the \fIsend\fR example,
1546: as many message drafts as desired can appear,
1547: since \fIsend\fR doesn't mind sending more than one draft at a time.
1548: .pp
1549: Note that the argument `\-draftfolder\0+folder' is not
1550: included in the profile entry for \fIsend\fR,
1551: since when \fIcomp\fR, et. al., invoke \fIsend\fR directly,
1552: they supply \fIsend\fR with the UNIX pathname of the message draft,
1553: and \fBnot\fR a `draftmessage\0msg' argument.
1554: As far as \fIsend\fR is concerned,
1555: a \fIdraft folder\fR is not being used.
1556: .pp
1557: It is important to realize that \fIMH\fR treats the draft folder like a standard
1558: \fIMH\fR folder in nearly all respects.
1559: There are two exceptions:
1560: .u first ,
1561: under no circumstancs will the `\-draftfolder\0folder' switch cause the
1562: named folder to become the current folder.\**
1563: .(f
1564: \** Obviously,
1565: if the folder appeared in the context of a standard `+folder'
1566: argument to an \fIMH\fR program, as in
1567:
1568: .ti +.5i
1569: scan +drafts
1570:
1571: it might become the current folder, depending on the context changes of the
1572: \fIMH\fR program in question.
1573: .)f
1574: .u Second ,
1575: although conceptually \fIsend\fR deletes the `msgs' named in the draft
1576: folder,
1577: it does not call `delete-prog' to perform the deletion.
1578:
1579: .UH "What Happens if the Draft Exists"
1580: .pp
1581: When the \fIcomp\fR, \fIdist\fR, \fIforw\fR, and \fIrepl\fR commands are
1582: invoked and the draft you indicated already exists,
1583: these programs will prompt the user for a reponse directing the program's
1584: action.
1585: The prompt is
1586:
1587: .ti +.5i
1588: Draft ``/usr/src/uci/mh/mhbox/draft'' exists (xx bytes).
1589: .ti +.5i
1590: Disposition?
1591:
1592: The appropriate responses and their meanings are:
1593: .u replace :
1594: deletes the draft and starts afresh;
1595: .u list :
1596: lists the draft;
1597: .u refile :
1598: files the draft into a folder and starts afresh;
1599: and,
1600: .u quit :
1601: leaves the draft intact and exits.
1602: In addition, if you specified `\-draftfolder\0folder' to the command,
1603: then one other response will be accepted:
1604: .u new :
1605: finds a new draft,
1606: just as if `\-draftmessage\0new' had been given.
1607: Finally, the \fIcomp\fR command will accept one more response:
1608: .u use :
1609: re-uses the draft,
1610: just as if `\-use' had been given.
1611:
1612: .UH "The Push Option at What now? Level"
1613: .pp
1614: The \fIpush\fR option to the \*(lqWhat now?\*(rq query
1615: in the \fIcomp\fR, \fIdist\fR, \fIforw\fR, and \fIrepl\fR commands,
1616: directs the command to \fIsend\fR the draft
1617: in a special detached fashion,
1618: with all normal output discarded.
1619: If \fIpush\fR is used and the draft can not be sent,
1620: then \fIMH\fR will send the user a message,
1621: indicating the name of the draft file,
1622: and an explanation of the failure.
1623: .\" Although using \fIpush\fR calls \fIsend\fR\0(1),
1624: .\" the \fIsend\fR command will consult the profile entry for \fIpush\fR.
1625: .pp
1626: The user can also invoke \fIsend\fR from the shell with the `\-push'
1627: switch,
1628: which makes \fIsend\fR act like it had been \fIpush\fR\0'd by one of the
1629: composition commands.
1630: .\" composition commands.\**
1631: .\" .(f
1632: .\" \** Note that in this case,
1633: .\" \fIsend\fR consults the profile entry for whatever name it was invoked as,
1634: .\" such as \fIsendf\fR.
1635: .\" .)f
1636: .pp
1637: By using \fIpush\fR, the user can free the shell to do other things,
1638: because it appears to the shell that the \fIMH\fR command has finished.
1639: As a result the shell will immediately prompt for another command,
1640: despite the fact that the command is really still running.
1641: Note that if the user indicates that annotations are to be performed
1642: (with `\-annotate' to \fIdist\fR, \fIforw\fR, or \fIrepl\fR),
1643: the annotations will be performed after the message has been
1644: successfully sent.
1645: This action will appear to occur asynchronously.
1646: Obviously, if one of the messages that is to be annotated is
1647: removed before the draft has been successfully sent,
1648: then when \fIMH\fR tries to make the annotations,
1649: it won't be able to do so.
1650: In previous versions of \fIMH\fR,
1651: this resulted in an error message mysteriously appearing on the user's
1652: terminal.
1653: In \fImh.5\fR and later versions,
1654: in this special circumstance, no error will be generated.
1655: .pp
1656: If send is \fIpush\fR\0'd,
1657: then the `\-forward' switch is examined if a failure notice is generated.
1658: If given,
1659: then the draft is forwarded with the failure notice sent to the user.
1660: This allows rapid \fIburst\fR\0'ing of the failure notice to retrieve the
1661: unsent draft.
1662:
1663: .UH "Options at What now? Level"
1664: .pp
1665: By default,
1666: the message composition programs call a program called \fIwhatnow\fR before
1667: the initial draft composition.
1668: The \fIMH\fR user can specify any program for this.
1669: Following is some information about the default \*(lqWhat now?\*(rq level.
1670: More detailed information can be found in the \fIwhatnow\fR\0(1) manual entry.
1671: .pp
1672: When using the \fIcomp\fR, \fIdist\fR, \fIforw\fR, and \fIrepl\fR commands at
1673: \*(lqWhat now?\*(rq level,
1674: the \fIedit\fR, \fIlist\fR, \fIheaders\fR, \fIrefile\fR,
1675: and (for the \fIdist\fR and \fIrepl\fR commands) the \fIdisplay\fR options
1676: will pass on any additional arguments given them to whatever program they
1677: invoke.
1678: .pp
1679: In \fImh.1\fR (the original Rand \fIMH\fR\0)
1680: and \fImh.2\fR (the first UCI version of \fIMH\fR\0),
1681: \fIMH\fR used a complicated heuristic to determine if the draft should be
1682: deleted or preserved after an unsuccessful edit.
1683: In \fImh.3\fR,
1684: \fIMH\fR was changed to preserve the draft always,
1685: since \fIcomp\fR, et. al.,
1686: could usually look at a draft, apply another set of heuristics,
1687: and decide if it was important or not.
1688: With the notion of a \fIdraft folder\fR,
1689: in which one by default gets a `new' message draft,
1690: the edit deletion/preservation algorithm was re-implemented,
1691: to keep the draft folder from being cluttered with aborted edits.
1692: .pp
1693: Also,
1694: note that by default,
1695: if the draft cannot be successfully sent,
1696: these commands return to \*(lqWhat now?\*(rq level.
1697: But, when \fIpush\fR is used, this does not happen (obviously).
1698: Hence,
1699: if these commands were expected to annotate any messages,
1700: this will have to be done by hand, later on, with the \fIanno\fR command.
1701: .pp
1702: Finally, if the `\-delete' switch is not given to the \fIquit\fR option,
1703: then these commands will inform the user of the name of the unsent draft file.
1704:
1705: .UH "Digests"
1706: .pp
1707: The \fIforw\fR command has the beginnings of a digestifying facility,
1708: with the `\-digest\ list', `\-issue\ number', and `\-volume\ number' switches.
1709:
1710: If \fIforw\fR is given \*(lqlist\*(rq to the `\-digest' switch
1711: as the name of the discussion group,
1712: and the `\-issue\ number' switch is not given,
1713: then \fIforw\fR looks for an entry in the user's \fIMH\fR context called
1714: \*(lq\fIdigest\fR\-issue\-list\*(rq and increments its value to use as the
1715: issue number.
1716: Similarly,
1717: if the `\-volume\ number' switch is not given,
1718: then \fIforw\fR looks for \*(lq\fIdigest\fR\-volume\-list\*(rq
1719: (but does not increment its value) to use as the volume number.
1720:
1721: Having calculated the name of the digest and the volume and issue numbers,
1722: \fIforw\fR will now process the components file using the same format string
1723: mechanism used by \fIrepl\fR.
1724: The current `%'\-escapes are:
1725:
1726: .nf
1727: .ta \w'escape 'u +\w'integer 'u
1728: \fIescape\fR \fItype\fR \fIsubstitution\fR
1729: digest string digest name
1730: issue integer issue number
1731: volume integer volume number
1732: .re
1733: .fi
1734:
1735: In addition, to capture the current date,
1736: any of the escapes valid for \fIdp\fR\0(8) are also valid for \fIforw\fR.
1737:
1738: The default components file used by \fIforw\fR when in digest mode is:
1739:
1740: .nf
1741: .in +.5i
1742: .ne 10
1743: .eo
1744: .so @(MHETCPATH)/digestcomps
1745: .ec
1746: .in -.5i
1747: .fi
1748:
1749: Hence, when the `\-digest' switch is present,
1750: the first step taken by \fIforw\fR is to expand the format strings in the
1751: component file.
1752: The next step is to compose the draft using
1753: the standard digest encapsulation algorithm
1754: (even putting an \*(lqEnd of list Digest\*(rq trailer in the draft).
1755: Once the draft is composed by \fIforw\fR,
1756: \fIforw\fR writes out the volume and issue profile entries for the digest,
1757: and then invokes the editor.
1758:
1759: Naturally, when composing the draft,
1760: \fIforw\fR will honor the `\-filter\ filterfile' switch,
1761: which is given to \fImhl\fR to filter each message being forwarded prior to
1762: encapsulation in the draft.
1763: A good filter file to use, which is called \fImhl.digest\fR, is:
1764:
1765: .nf
1766: .in +.5i
1767: .ne 10
1768: .eo
1769: .so @(MHETCPATH)/mhl.digest
1770: .ec
1771: .in -.5i
1772: .fi
1773:
1774: .uh "FOLDER HANDLING"
1775: .pp
1776: There are two interesting facilities for manipulating folders:
1777: relative folder addressing,
1778: which allows a user to shorten the typing of long folder names;
1779: and
1780: the folder\-stack,
1781: which permits a user to keep a stack of current folders.
1782:
1783: .UH "Relative Folder Addressing"
1784: .pp
1785: By default, when `+folder' is given,
1786: and the folder name is not absolute
1787: (does not start with \fB/\fR, \fB\&./\fR, or \fB\&.\&./\fR),
1788: then the UNIX pathname of the folder is interpreted relative to the user's
1789: \fIMH\fR directory.
1790: Although this mechanism works fine for top\-level folders and their immediate
1791: sub\-folders,
1792: once the depth of the sub\-folder tree grows, it becomes rather unwieldly:
1793:
1794: .ti +.5i
1795: scan\0+mh/mh.4/draft/flames
1796:
1797: is a lot of typing.
1798: \fIMH\fR can't do anything if the current folder was \*(lq+inbox\*(rq,
1799: but if the current folder was, say, \*(lq+mh/mh.4/draft\*(rq,
1800: \fIMH\fR has a short\-hand notation to reference a sub\-folder of the
1801: current folder.
1802: Using the `@folder' notation,
1803: the \fIMH\fR user can direct any \fIMH\fR program which expects a `+folder'
1804: argument to look for the folder relative to the current folder instead of the
1805: user's \fIMH\fR directory.
1806: Hence, if the current folder \fIwas\fR \*(lq+mh/mh.4/draft\*(rq,
1807: then
1808:
1809: .ti +.5i
1810: scan\0@flames
1811:
1812: would do the trick handily.
1813: In addition, if the current folder \fIwas\fR \*(lq+mh/mh.4/draft\*(rq,
1814:
1815: .ti +.5i
1816: scan\0@../pick
1817:
1818: would scan the folder \*(lq+mh/mh.4/pick\*(rq,
1819: since, in the UNIX fashion,
1820: it references the folder \*(lqpick\*(rq which is a sub\-folder of
1821: the folder that is the parent of the current folder.
1822: Since most advanced \fIMH\fR users seem to exhibit a large degree of locality
1823: in referencing folders when they process mail,
1824: this convention should receive a wide range of uses.
1825:
1826: .UH "The Folder\-Stack"
1827: .pp
1828: The \fIfolder\-stack\fR mechanism in \fIMH\fR gives the \fIMH\fR user a
1829: facility similar to the \fICShell\fR\0's directory\-stack.
1830: Simply put,
1831:
1832: .ti +.5i
1833: folder\0\-push\0+foo
1834:
1835: makes \*(lqfoo\*(rq the current folder,
1836: saving the folder that was previously the current folder on the
1837: \fIfolder\-stack\fR.
1838: As expected,
1839:
1840: .ti +.5i
1841: folder\0\-pop
1842:
1843: takes the top of the \fIfolder\-stack\fR and makes it the current folder.
1844: Each of these switches lists the \fIfolder\-stack\fR when they execute.
1845: It is simple to write a \fIpushf\fR command as a shell script.
1846: It's one line:
1847:
1848: .ti +.5i
1849: exec\0folder\0\-push\0$@
1850:
1851: Probably a better way is to link \fIfolder\fR to the $HOME/bin/ directory under
1852: the name of \fIpushf\fR and then add the entry
1853:
1854: .ti +.5i
1855: pushf:\0\-push
1856:
1857: to the \&.mh\(ruprofile.
1858: .pp
1859: The manual page for \fIfolder\fR discusses the analogy between the
1860: \fICShell\fR directory stack commands and the switches in \fIfolder\fR which
1861: manipulate the \fIfolder\-stack\fR.
1862: The \fIfolder\fR command uses the context entry `Folder\-Stack:' to keep
1863: track of the folders in the user's stack of folders.
1864: \"
1865: \" On to the Appendices
1866: \"
1867: .fo ''-%-''
1868: .he ''''
1869: .(x
1870: .sp
1871: Appendix
1872: .)x _
1873: .de $c \" Major Heading printer
1874: .ce
1875: Appendix \\n+(ch
1876: .sp 2p
1877: .ce
1878: .b "\\s12\\$1\\s0" \" 12 Point Bold Header
1879: .(x
1880: \ \ \ \\n(ch.\\ \\ \\$2
1881: .)x
1882: .sp 45p \" 45 points or about 1/2 inch
1883: ..
1884: .++ A
1885: .bp
1886: .$c "COMMAND SUMMARY" "Command Summary"
1887: .po -.50i
1888: .so mh-chart.me
1889: .po +.50i
1890: .if t \{
1891: .ll 32P
1892: .lt 32P
1893: \}
1894: .bp
1895: .$c "MESSAGE NAME BNF" "Message Name BNF"
1896:
1897: .nf
1898: .in 1i
1899: .ta \w'signed-number 'u +\w':= 'u +\w'user-defined-sequence 'u
1900: msgs := msgspec |
1901: msgs msgspec
1902:
1903: msgspec := msg |
1904: msg-range |
1905: msg-sequence |
1906: user-defined-sequence
1907:
1908: msg := msg-name |
1909: <number>
1910:
1911: msg-name := \*(lqfirst\*(rq |
1912: \*(lqlast\*(rq |
1913: \*(lqcur\*(rq |
1914: \*(lq\&.\*(rq |
1915: \*(lqnext\*(rq |
1916: \*(lqprev\*(rq
1917:
1918: msg-range := msg\*(lq-\*(rqmsg |
1919: \*(lqall\*(rq
1920:
1921: msg-sequence := msg\*(lq:\*(rqsigned-number
1922:
1923: signed-number := \*(lq+\*(rq<number> |
1924: \*(lq-\*(rq<number> |
1925: <number>
1926: .re
1927: .fi
1928: .sp
1929: .lp
1930: Where <number> is a decimal number greater than zero.
1931: .lp
1932: Msg-range specifies all of the messages in the given range
1933: and must not be empty.
1934: .lp
1935: Msg-sequence specifies up to <number> of messages, beginning
1936: with \*(lqmsg\*(rq (in the case of first, cur, next, or <number>),
1937: or ending with \*(lqmsg\*(rq (in the case of prev or last).
1938: +<number> forces \*(lqstarting with msg\*(rq, and \-<number> forces
1939: \*(lqending with number\*(rq.
1940: In all cases, \*(lqmsg\*(rq must exist.
1941: .lp
1942: User\-defined sequences are defined and manipulated with the \fIpick\fR
1943: and \fImark\fR commands.
1944: .in 0
1945: .bp
1946: .ce
1947: .b \\s12REFERENCES\\s0
1948: .(x
1949: .sp
1950: REFERENCES
1951: .)x
1952: .sp 3
1953: .in .4i
1954: .ti 0
1955: 1. Crocker, D. H., J. J. Vittal, K. T. Pogran, and D. A. Henderson, Jr.,
1956: \*(lqStandard for the Format of ARPA Network Text Messages,\*(rq
1957: \fIRFC733\fR,
1958: November 1977.
1959:
1960: .ti 0
1961: 2. Thompson, K., and D. M. Ritchie, \*(lqThe UNIX Time-sharing System,\*(rq
1962: \fICommunications of the ACM\fR, Vol. 17, July 1974, pp. 365-375.
1963:
1964: .ti 0
1965: 3. McCauley, E. J., and P. J. Drongowski, \*(lqKSOS\-The Design of a Secure
1966: Operating System,\*(rq \fIAFIPS Conference Proceedings\fR,
1967: National Computer Conference,
1968: Vol. 48, 1979, pp. 345-353.
1969:
1970: .ti 0
1971: 4. Crocker, David H., \fIFramework and Functions of the \*(lqMS\*(rq Personal
1972: Message System\fR, The Rand Corporation, R-2134-ARPA, December 1977.
1973:
1974: .ti 0
1975: 5. Thompson, K., and D. M. Ritchie, \fIUNIX Programmer's Manual\fR, 6th ed.,
1976: Western Electric Company, May 1975 (available only to UNIX licensees).
1977:
1978: .ti 0
1979: 6. Crocker, D. H.,
1980: \*(lqStandard for the Format of ARPA Internet Text Messages,\*(rq
1981: \fIRFC822\fR,
1982: August 1982.
1983: .de $c
1984: .ce
1985: .b "\\s12\\$1\\s0" \" 12 Point Bold Header
1986: .(x y
1987: .sp
1988: \\$1
1989: .)x
1990: .sp 3
1991: ..
1992: .++ P
1993: .bp 1
1994: .fo ''''
1995: .he ''-%-''
1996: .+c "READ THIS"
1997: .pp
1998: Although the \fIMH\fR system was originally developed by the Rand Corporation,
1999: and is now in the public domain,
2000: the Rand Corporation assumes no responsibility for \fIMH\fR
2001: or this particular version of \fIMH\fR.
2002: .pp
2003: In addition,
2004: the Regents of the University of California issue the following
2005: \fBdisclaimer\fR in regard to the UCI version of \fIMH\fR:
2006: .sp 1
2007: .in +.5i
2008: \*(lqAlthough each program has been tested by its contributor,
2009: no warranty, express or implied,
2010: is made by the contributor or the University of California,
2011: as to the accuracy and functioning of the program
2012: and related program material,
2013: nor shall the fact of distribution constitute any such warranty,
2014: and no responsibility is assumed by the contributor
2015: or the University of California in connection herewith.\*(rq
2016: .in -.5i
2017: .pp
2018: This version of \fIMH\fR is in the public domain,
2019: and as such,
2020: there are no real restrictions on its use.
2021: The \fIMH\fR source code and documentation have no licensing restrictions
2022: whatsoever.
2023: As a courtesy,
2024: the authors ask only that you provide appropriate credit to the Rand
2025: Corporation and the University of California for having developed the software.
2026: .pp
2027: \fIMH\fR is a software package that is supported neither by the Rand
2028: Corporation nor the University of California.
2029: However,
2030: since we do use the software ourselves and plan to continue using
2031: (and improving) \fIMH\fR,
2032: bug reports and their associated fixes should be reported back to us so that
2033: we may include them in future releases.
2034: The current computer mailbox for \fIMH\fR is \fBBug\[email protected]\fR
2035: (in the ARPA Internet),
2036: and \fB...!ucbvax!ucivax!bug\-mh\fR (UUCP).
2037: Presently,
2038: there are two Internet discussion groups,
2039: \fBMH\[email protected]\fR and \fBMH\[email protected]\fR.
2040: If there is sufficient interest,
2041: corresponding Usenet news groups may be established along with the
2042: appropriate gateways.
2043: .+c FOREWORD
2044: .pp
2045: This document describes the Rand \fIMH\fR Message Handling System.
2046: Its primary purpose is to serve as a user's manual.
2047: It has been heavily based on a previous version of the manual,
2048: prepared by Bruce Borden, Stockton Gaines, and Norman Shapiro.
2049: .pp
2050: \fIMH\fR is a particularly novel system,
2051: and thus it is often more prone to change than other pieces of production
2052: software.
2053: As such, some specific points in this manual may not be correct in the
2054: future.
2055: In all cases, the on\-line sections of this manual,
2056: available through the UNIX\** \fIman\fR command,
2057: should present the most current information.
2058: .(f
2059: \** UNIX is a trademark of AT&T Bell Laboratories.
2060: .)f
2061: .pp
2062: When reading this document as a user's manual,
2063: certain sections are more interesting than others.
2064: The Preface and Summary are not particularly interesting to those
2065: interested in learning \fIMH\fR.
2066: The Introduction is slightly more interesting,
2067: as it touches upon the organization of the remainder of this document.
2068: The most useful sections are the Overview, Tutorial, and Detailed
2069: Description.
2070: The Overview should be read by all \fIMH\fR users, regardless of their
2071: expertise (beginning, novice, advanced, or hacker).
2072: The Tutorial should be read by all beginning and novice \fIMH\fR users,
2073: as it presents a nice description of the \fIMH\fR system.
2074: The Detailed Description should be read by the day\-to\-day user of \fIMH\fR,
2075: as it spells out all of the realities of the \fIMH\fR system.
2076: The Advanced Features section discusses some powerful \fIMH\fR capabilities for
2077: advanced users.
2078: Appendix A is particularly useful for novices,
2079: as it summarizes the invocation syntax of all the \fIMH\fR commands.
2080: .pp
2081: There are also several other documents which may be useful to you:
2082: \fIThe Rand MH Message Handling System: Tutorial\fR,
2083: which is a tutorial for \fIMH\fR;
2084: \fIThe Rand MH Message Handling System: The UCI BBoards Facility\fR,
2085: which describes the BBoards handling under \fIMH\fR;
2086: \fIMH.5: How to process 200 messages a day and still get some real work
2087: done\fR,
2088: which was presented at the 1985 Summer Usenix Conference and
2089: Exhibition in Portland, Oregon;
2090: \fIMH: A Multifarious User Agent\fR,
2091: which has been accepted for publication by Computer Networks;
2092: \fIMZnet: Mail Service for Personal Micro\-Computer Systems\fR,
2093: which was presented at the First International Symposium on Computer Message
2094: Systems in Nottingham, U.K.;
2095: and,
2096: \fIDesign of the TTI Prototype Trusted Mail Agent\fR,
2097: which describes a proprietary \*(lqtrusted\*(rq mail system built on \fIMH\fR.
2098: All of these documents exist in the \fImh.6\fR distribution sent to your
2099: site.
2100: There's also a document,
2101: \fIChanges to the Rand MH Message Handling System: MH.6\fR,
2102: which describes user\-visible changes made to \fIMH\fR since the last major
2103: release.
2104: .pp
2105: This manual is very large, as it describes a large, powerful system in
2106: gruesome detail.
2107: The important thing to remember is:
2108: .sp 2
2109: .ce
2110: .b "\s+4DON'T PANIC\s0\**"
2111: .sp 2
2112: As explained in the tutorial, you really need to know only 5 commands to
2113: handle most of your mail.
2114: .(f
2115: \** Note the large, \fIfriendly\fR letters.
2116: .)f
2117: .pp
2118: Very advanced users may wish to consult
2119: \fIThe Rand MH Message Handling System: Administrator's Guide\fR,
2120: which is also present in the \fImh.6\fR distribution sent to your site.
2121: .+c ACKNOWLEDGMENTS
2122: .pp
2123: The \fIMH\fR system described herein is based on the original Rand \fIMH\fR
2124: system.
2125: It has been extensively developed (perhaps too much so) by Marshall T. Rose and
2126: John L. Romine at the University of California, Irvine.
2127: Einar A. Stefferud, Jerry N. Sweet, and Terry P. Domae provided numerous
2128: suggestions to improve the UCI version of \fIMH\fR.
2129: Of course,
2130: a large number of people have helped \MH/ along.
2131: The list of ``\fIMH\fR immortals'' is too long to list here.
2132: However, Van Jacobson deserves a special acknowledgement for his tireless
2133: work in improving the performance of \fIMH\fR.
2134: Some programs have been speeded-up by a factor of 10 or 20.
2135: All of users of \fIMH\fR, everywhere, owe a special thanks to Van.
2136: .pp
2137: This manual is based on the original \fIMH\fR manual written at Rand by
2138: Bruce Borden, Stockton Gaines, and Norman Shapiro.
2139: .+c PREFACE
2140: .pp
2141: This report describes a system for dealing with messages transmitted on a
2142: computer. Such messages might originate with other users of the same
2143: computer or might come from an outside source through a network to which the user's
2144: computer is connected. Such computer-based message systems are
2145: becoming increasingly widely used, both within and outside the Department
2146: of Defense.
2147: .pp
2148: The message handling system \fIMH\fR was developed for two reasons.
2149: One was to investigate some
2150: research ideas concerning how a message system might take advantage of
2151: the architecture of the UNIX time-sharing operating system for
2152: Digital Equipment Corporation PDP-11 and VAX computers, and the special
2153: features of UNIX's command-level interface with the user (the
2154: \*(lqshell\*(rq). The other reason was to provide a better and more
2155: adaptable base than that of conventional designs
2156: on which to build a command and control message system.
2157: The effort has succeeded in both
2158: regards, although this report mainly describes the message system itself
2159: and how it fits in with UNIX.
2160: .pp
2161: The present report should be of interest to three groups of readers. First,
2162: it is a complete reference manual for the users of \fIMH\fR.
2163: Second, it should be
2164: of interest to those who have a general knowledge of computer-based
2165: message systems, both in civilian and military applications. Finally,
2166: it should be of interest to those who build large subsystems that
2167: interface with users, since it illustrates a new approach to such
2168: interfaces.
2169: .pp
2170: The original \fIMH\fR system was developed by Bruce Borden,
2171: using an approach suggested by Stockton Gaines and Norman Shapiro.
2172: Valuable assistance was provided by Phyllis Kantar in the later
2173: stages of the system's implementation.
2174: Several colleagues
2175: contributed to the ideas included in this system, particularly
2176: Robert Anderson and David Crocker.
2177: In addition, valuable experience
2178: in message systems, and a valuable source of ideas, was available
2179: to us in the form of a previous message system for UNIX called
2180: MS, designed at Rand by David Crocker.
2181: .pp
2182: This report was originally prepared as part of the Rand project entitled
2183: \*(lqData Automation Research\*(rq, sponsored by Project AIR FORCE.
2184: .+c SUMMARY
2185: .pp
2186: Electronic communication of text messages is becoming
2187: commonplace. Computer-based message systems\-software
2188: packages that provide tools for dealing with messages\-are used in many
2189: contexts. In particular, message systems are becoming
2190: increasingly important in command and control and intelligence
2191: applications.
2192: .pp
2193: This report describes a message handling system called \fIMH\fR.
2194: This system provides the user
2195: with tools to compose, send, receive, store, retrieve, forward, and
2196: reply to messages. \fIMH\fR has been built on the UNIX time-sharing system,
2197: a popular operating system developed for the DEC PDP-11 and VAX classes of
2198: computers.
2199: .pp
2200: A complete description of \fIMH\fR is given for users of
2201: the system. For those who do not intend to use the system, this description
2202: gives a general idea of what a message system is like. The system involves
2203: some new ideas about how large subsystems can be constructed.
2204: .pp
2205: The interesting and unusual features of \fIMH\fR include the
2206: following: The user command interface to \fIMH\fR is the UNIX \*(lqshell\*(rq
2207: (the standard UNIX command interpreter). Each separable
2208: component of message handling, such as message composition or
2209: message display, is a separate command. Each program is driven from
2210: and updates a private user environment, which is stored as a file
2211: between program invocations. This private environment also contains
2212: information to \*(lqcustom tailor\*(rq \fIMH\fR to the individual's tastes.
2213: \fIMH\fR stores each message as a separate file under UNIX, and it utilizes the
2214: tree-structured UNIX file system to organize groups of files within
2215: separate directories or \*(lqfolders\*(rq. All of the UNIX facilities
2216: for dealing with files and directories, such as
2217: renaming, copying, deleting, cataloging, off-line printing, etc., are
2218: applicable to messages and directories of messages (folders). Thus,
2219: important capabilities needed in a message system are available in \fIMH\fR
2220: without the need (often seen in other message systems) for code that
2221: duplicates the facilities of the supporting operating system.
2222: It also allows users familiar with the shell to use \fIMH\fR with minimal
2223: effort.
2224: .he ''''
2225: .fo ''''
2226: .bp
2227: .ce
2228: .b \\s12CONTENTS\\s0
2229: .sp 3
2230: .xp y
2231: .xp x
2232: .bp
2233: .\" And now the COVER sheet
2234: .po +.325i
2235: .ll 32P
2236: .nf
2237:
2238: .sp 1.5in
2239: .ps 24
2240: .vs 32
2241: .ft B
2242: .ce 4
2243: THE RAND MH
2244: MESSAGE HANDLING
2245: SYSTEM:
2246: USER'S MANUAL
2247: .ft R
2248: .sp .8i
2249: .ps 20
2250: .vs 24
2251: .ce
2252: UCI Version
2253: .sp 0.7i
2254: .ce 2
2255: Marshall T. Rose
2256: John L. Romine
2257: .sp 0.5i
2258: .ce 2
2259: Based on the original manual by
2260: Borden, Gaines, and Shapiro
2261: .vs
2262: .sp 1i
2263: .ps 18
2264: .vs 22
2265: .ce 2
2266: \*(td
2267: \*(MH
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.