Columbia MM A Mail Manager Program in C Chris Maio Computer Research Facilities, Computer Science Department (formerly) Fuat Baran Howie Kaye Melissa Metz Center for Computing Activities Columbia University ABSTRACT -------- Columbia MM is a mail manager program based on the TOPS-20 MM program running on Digital Equipment Corporation DEC20 systems. Columbia MM is written in C using the CCMD (TOPS-20 COMND Jsys in C) package developed at Columbia University. MM currently runs under various flavors of UNIX. Ports to various other microcomputer and mainframe operating systems are planned. INTRODUCTION ------------ Columbia University used to have a number of DECSYSTEM-2060's on campus. (The Columbia University Center for Computing Activities (CUCCA) had four, the Computer Science Department had one, and Teachers College had one.) Our user community, especially the less technically experienced, grew accustomed to the friendly user interface provided by programs written for TOPS-20. The two most widely used programs were the Exec (equivalent of the shell in UNIX), and MM, the mail program, both written using the TOPS-20 COMND Jsys (monitor call). The users loved the ability to see what input was expected next (the help provided when you type a '?' anywhere in a parse), and command completion (completion of unique input when an ESC was typed). Unfortunately, the good days did not last. DEC (Digital Equipment Corporation) discontinued the DEC20 line and, due to rising maintenance costs, it was decided that all of our DEC20's would be phased out and replaced by other systems. Various people were consulted, surveys were conducted, and plans were made. When asked what a minimally acceptable system should have, a large number of users said that an MM equivalent would be highest on their list of priorities. (Some others were Emacs, Scribe, etc.) People that knew about the usual mail facility supplied with Unix stated that they did not like it at all. CUCCA and the CS Department ultimately decided to go with various UNIX machines to replace the aging DEC20's. By 1988, CUCCA had a DEC VAX 8700 running Ultrix 2.0, a VAX 750, numerous microvaxen, and three Sun 4s. Over the previous two years student computing had slowly migrated from the DEC20's to Unix systems. At about the same time as all this was happening, a package called CCMD was also being developed (at CUCCA, initially by Andrew Lowry and later on by Howie Kaye). CCMD is a general parsing mechanism for developing line-oriented user interfaces to programs. It is based on the functionality of TOPS-20's COMND Jsys. CCMD allows a program to parse for various field types (file names, user names, dates and times, keywords, numbers, arbitrary text, tokens, etc.). The original reason for writing the CCMD package was to use it in locally developed microcomputer cluster software. For various reasons which we won't go into here, this project never saw the light of day, though the CCMD package came about as a useful product. CCMD was announced to the public on some Internet mailing lists as well as at Usenix in the summer of 1987. A mailing list to discuss TOPS-20 to UNIX migration issues was set up (info-topsux@cunixc.cc.columbia.edu). (Send requests to info-topsux-request@cunixc.cc.columbia.edu.) We began using CCMD internally for various programs. Our operations interface, group management program etc. were all written using CCMD as the user interface. Chris Maio, at the Computer Science Department, began writing MM in C using CCMD. CUCCA also decided that it needed to make an MM-like program available to its users who were migrating from the DEC20's. So three systems programmers from CUCCA (Fuat Baran, Howie Kaye and Melissa Metz) joined Chris Maio in his efforts, and Columbia-MM was born. The first internal release of Columbia MM was unleashed on our user population in January of 1988. Since then we have put up numerous new versions internally, and in May 1988 we began beta testing with the help of eager people at other sites. DESCRIPTION ----------- MM is a powerful electronic mail system which allows you to send, read, edit and manage messages quickly and easily. Since it is written with the CCMD package, you can hit the escape key to complete commands and "?" to find out what MM is expecting. These are the five most popular commands: SEND user-name Send mail to specified user-name. May be a USER-NAME or a list of USER-NAMES, local or network addresses. READ msgs Read specified messages, MSGS, from current file. The default is to read UNSEEN messages. DELETE msgs Delete specified messages, MSGS, from current file. HEADERS msgs Give a brief summary of the specified messages, MSGS. HELP topic Type a message explaining the specified TOPIC. MESSAGE SEQUENCES ----------------- A message sequence is a series of messages that have some trait in common. Various specifiers, listed below, identify a message sequence; the intersection of the specifiers given determines the messages to be processed. Some specifiers are compound and accept a string argument (e.g., 'FROM FOO', or 'SUBJECT HOMEWORK'). If the argument to any of these has a space (or certain other non-alphanumeric characters) in it, the argument should be quoted, as in 'FROM "JOHN SMITH"'. The message sequences available are: AFTER Equivalent to SINCE ALL Every message in your file, whether deleted or not. ANSWERED Messages you have REPLY'd to or ANSWER'd BEFORE Messages before a given date CURRENT MM keeps a pointer to the current message it is set at. This sequence (which consists of only 1 message obviously) is that message. DELETED Messages you have marked for deletion with the DELETE command or the MOVE command FLAGGED Messages you have marked with the FLAG command FROM Followed with a word or phrase denoting the senders of the message; e.g. HEADERS FROM SMITH would show all the headers of the messages you've received from SMITH. INVERSE This reverses the sequence. Instead of taking the sequence as lowest message number to highest, it takes it from highest to lowest KEYWORD Messages containing the specified keyword LAST Followed with a number specifying the last n messages in the file NEW Messages that are new as of this MM session ON Messages on a given date PREVIOUS-SEQUENCE The last sequence used in an MM command RECENT Messages that were new as of this MM session but which have already been seen SEEN Messages that you have read SINCE Messages after a given date (entered as DATE-MONTH-YEAR or mm/dd/yy) SUBJECT Followed with a word or phrase denoting the subject of the message; e.g. HEADERS SUBJECT MEETING would show you all the headers of the messages about a meeting (assuming they say MEETING in the header) TEXT Followed with a word, phrase or sentence denoting the text of the message; e.g. HEADERS TEXT BIZARRE would show you the headers of all the messages with the word BIZARRE in their text or headers TO Followed with the name of a recipient, shows messages whose To or cc fields contain that recipient. UNANSWERED Messages you have not REPLY'd to or ANSWER'd UNDELETED Messages that haven't been deleted via the DELETE or MOVE commands UNFLAGGED Messages that haven't been flagged by the FLAG command UNKEYWORD Messages not included in the specified keyword UNSEEN Messages you haven't seen via the READ or TYPE command Also, message numbers are allowed to be specified as a sequence, i.e. 1,2,3,5,8 - Messages 1, 2, 3, 5, and 8 1:3,5:8 - Messages 1 through 3 and 5 through 8 5 - Message number 5 6+3 - Messages 6, 7, and 8 CCMD FEATURES ------------- We have already mentioned that MM is written with the CCMD package. This provides sevaral features to make it easier for MM to parse your input. Probably the most important feature is instant help. At almost any point when MM is waiting for input from you, you can type a "?", and MM will tell you what it is looking for. (One exception is when MM is parsing an outgoing message, at which time the question mark will simply get inserted into the text like any other character.) If you have partially typed a command, MM will only show you things that match the current input. Another feature is command completion or recognition. This means that when MM is parsing, you can hit the ESCAPE key or TAB key and MM will complete the current field (command keyword, filename, etc.), if it is unambiguous. Control-F works similarly to tab and escape, but only completes to a punctuation character. If what you have typed is ambiguous, MM will beep. You can then hit "?" to find out the available completions. For example, if you were typing in the file name "mail.txt" and there were no other files in your directory beginning with "m", you could simply type "m" and MM would echo "mail.txt ". If you typed "m" MM would echo "mail" and wait for you to finish it. This is useful when specifying the name of a new file. A third feature is command retry. This means that after you have typed a command and hit return, then realize that was not what you meant to do, you can redo the command. When you get the prompt back from MM, if the VERY NEXT character you type is control-H, MM will redisplay your last command. You can then delete the offending parts and run the command you wanted. This saves you from having to retype the entire command. A new feature is command line editing, which include a command history mechanism. Editing is done with standard emacs-like commands. MM will accept comments on any line -- this is most useful inside files run by the "take" command. The comment start string is typically "#", and the comment end string is end of line. In case you should want to input any of these special characters, CCMD also provides a quoting character, control-V. Control-V followed by any character simply inserts that character into the current command. COMPATIBILITY ------------- MM is compatible with various other mail programs, and has hooks for adding more in the future. MM currently supports the following mail file formats: mtxt: mtxt is the format used by MM-20 on DEC20s. This format is not compatible with any other Unix mail utilities, but has the advantage of being easier to parse. That is, mm will read in an mtxt format file faster than any other format. Babyl: Babyl is the mail file format used by gnuemacs rmail mode. Use this format if you wish to use emacs for reading your mail as well as mm. mbox: mbox is the mail file format the Unix mail(1) program uses. Use this format if you wish to use mail(1) for reading your mail as well as mm. Future plans include supporting mh(1), and pop (post office protocol) for remote systems (PC's, ...). MAIL DELIVERY ------------- MM currently uses sendmail(8) to deliver mail, but it should be fairly easy to make it use other delivery systems. SYSTEMS ------- MM comes with configuration files for 4.3 BSD; HP/UX; Mt Xinu 4.3; SunOS versions 3.4, 3.5, and 4.0 (works for 4.1); Ultrix 2.0; AIX for an IBM RT; Dynix 2.1.1; Integrated Solutions Release 4.0; System V on a 3B2, and version 5.2; and Encore's Umax. (At Columbia we currently only run MM under SunOS 4.1 and Encore's Umax 4.3, and rely on our formerly-beta testers for the other ports.) AVAILABILITY ------------ MM is currently just out of Beta Test and is actively worked on. If you wish to hear about new versions and patches, please send mail to info-mm-request@columbia.edu (Internet) info-mm-request%cunixf.cc.columbia.edu@cuvma.cc.columbia.edu (Bitnet) ...rutgers!columbia!info-mm-request (Usenet) and we'll add you to our list of people involved in MM. MM is currently available via anonymous ftp from cunixf.cc.columbia.edu (128.59.40.130), in the mm subdirectory. The following files are currently available: mm-0.90.0.tar.Z # MM version 0.90 (new release) mm-intro.txt # general introductory document release-0.87.txt # release notes for 0.87 (changes # since 0.86) release-0.88.txt # release notes for 0.88 (changes # since 0.87) release-0.90.txt # release notes for 0.90 (changes # since 0.88) patch.xx # numbered patches for the current version mm-{Version #}.tar.Z contains the full (compressed and tarred) sources to MM and CCMD. Contained in the mm subdirectory (once uncompressed and untarred), is an INSTALL file with installation hints. We occasionally send out patches to our mailing list. COPYRIGHT --------- Columbia MM carries the following copyright notice: Copyright (c) 1986, 1990, The Trustees of Columbia University in the City of New York. Chris Maio, Computer Research Facilities, Computer Science Department (formerly), Fuat C. Baran, Howard Kaye, Melissa Metz, Academic Systems Group, Center for Computing Activities. Permission is granted to any individual or institution to use, copy, or redistribute this software so long as it is not sold for profit, provided that this notice and the original copyright notices are retained. Columbia University makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.