|
|
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.