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