AA ii EEEEEEE lll AAAA EE EE ll AAAA mm mm iii ggg gg aaaa EE ll mm mm AA AA mmm mmm ii gg gg aa EEEE ll mmm mmm AAAAAA mm m mm ii gg gg aaaa EE ll mm m mm AA AA mm mm ii gggg aa aa EE EE ll mm mm AA AA mm mm iiii gg gg aaa aa EEEEEEE llll mm mm ggggg Amiga Elm, Copyright (c) 1991 by Andreas M. Kirchwitz ========================================================== (amk@zikzak.in-berlin.de) based on hwr-mail by Heiko W.Rupp (hwr@pilhuhn.ka.sub.org) ------------------------------------------------------------ Consequently, after becoming more and more disenchanted with the existing electronic mail facilities (dmail, amr) I decided to undertake creating my own system. In any case, the system should be useable without reading any of the documentation! Any comments or problems with any of the documentation or the program itself are welcome; if you can't get electronic mail to me, please feel free instead to drop me a note via the overland mail address given below. Amiga Elm was written with the "CygnusEd Professional 2.12" editor and successfully compiled with the "Lattice SAS/C 5.10a" c-compiler. ----------------------------------------------------------------------------- The Index (Main) Screen ========================= Upon entry to the program, the main screen will be displayed as below: Mailbox is 'uumail:amk' with 15 messages [Elm 0.42] -> N 1 Apr 24 Larry Fenske (49) Hello there N 2 Apr 24 jad@hpcnoe (84) Chico? Why go there? D 3 Apr 23 Carl Smith (53) Dinner tonight? NU 4 Apr 18 Don Knuth (354) Your version of TeX... N 5 Apr 18 games (26) Bug in cribbage game AF 6 Apr 15 kevin (27) More software requests 7 Apr 13 John Jacobs (194) How can you hate RUSH? U 8 Apr 8 decvax!mouse (68) Re: your Usenet article L F 9 Apr 6 root (7) O 10 Apr 5 root (13) +, -, <, >, ?=help, =set current to n c)hange folder, C)opy, d)elete, e)dit, E)xport, f)orward, g)oto last, m)ail, o)ptions, p)rint, q)uit, r)eply, s)ave, u)ndelete, w)rite, or e(x)it Command: @ There are a number of things to notice about this, the main screen. Most likely, on your computer the message currently "active" will be displayed in an inverse bar rather than being delimited by the two character arrow as here. It's nothing to worry about; displaying inverse video is just quite difficult on printable guides! The first line on the screen (the screen title) always displays the name of the current folder, the number of messages in the folder, and the current Elm version number. The arrow ("->") or inverse video bar will always indicate which is the current message. The first field that appears associated with each message is the status field. This can be blank (as with most of the ones above, or can have any combination of the following: These characters signifies temporary status: N for a new message O for an old (i.e. not new but not read) message D for a deleted message These characters signifies permanent status: U for urgent mail L for a logged message (i.e. written to a file or printed) F for a message that has been forwared A for an answered (replied) message B for a bounced message Continuing from left to right, the next field is the message number. For the most part you can ignore these unless you want to quickly move to a specific message (as we'll see later). The date associated with each message is typically the date the person actually sent the message. The next field displayed indicates whom the message is from. Elm will try to display the full name of the person who sent the message, rather than the their return address or computer login. Some systems don't generate the correct headers, though, hence messages like numbers 2 and 8, where it's their return address. The number in parentheses is the total number of lines in the message (without header). The final field is the subject of the message. Notice that messages might not have any subject, as in messages #9 and #10. The maximum of messages displayed depends on the screen dimensions and size of the default system font. Further into the document we'll learn how to change "pages" in the folder. The three line Menu display will always indicate the relevant commands. Some commands do not show up on the mini-menu because they are somewhat esoteric, but they do appear on the '?' help screen (can you find it there, though?). Finally, the '@' character indicates where the cursor would be, awaiting your input. The typical action at this point is to use the or key to read the current message, which will clear the screen and display the current message: Message 1/15 from Larry Fenske Apr 24 '87 at 8:45 pm Hello there Dave, Just wanted to drop you a brief note to see what was going on with you this afternoon. Life here has been the usual fun and games... Ah well, off to the great wilds beyond the desk! Larry Before we go further with our example, however, let's look at all the functions available from the main screen: +, k, ----------------- Move the current message pointer up to the next message (going to the next page if needed). -, j, ------------------- Move the current message pointer down to the next message (going to the next page if needed). <, ---------------- Goto previous page. >, ----------------- Goto next page. Display the current message using the builtin pager: , ----------------------------------------------------------------------- When issued from the index (main) screen, it will display the first screen of the current message; and then when issued while in the builtin pager (prompting "--More--" or something like that), it will page through the message to the end; and then when issued at the end of a message (when "End of Message" appears), it will bring you back to the index screen. Specify new current message: ------------------------------------------- When you type in any digit key Elm will prompt "Set current to : n", where 'n' is the digit entered. Enter the full number and terminate with . Note that changing the current message to a message not on the current page of headers will result in a new page being displayed. Resynchronize folder: $ ------------------------ On more advanced systems, it's nice to start up the mailer in a window and let it sit in background unless new mail arrives which point it can be brought up to the forefront of the system and read. In this case, the modified mail folder is saved not very often, so when your system chrashes all modifications since last (re-) read of the folder are lost. To avoid to quit and start Elm again, this command lets Elm write the current folder back to disk (like "Quick quit", see below) and read it again (like it was started again). Bounce mail: b (not yet implemented - sorry, i can't do that, dave) --------------- This "remails" mail to someone else in such a way as to make the return address the original sender rather than you. (The forward command is similar, but it makes the return address you rather than the original sender.) Copy to folder: C ------------------ This command copies the current message to a folder. If there is anything in the folder currently the message or messages are appended to the end, otherwise the folder is created containing only the newly copied message. The prompt for this command is `Copy to folder: '. A response of cancels the command and returns the user to the system prompt. The usual filename metacharacters are available, too. That is, this command expands filenames with '=' (on first position) being your maildir directory ("uumail:" by default); i.e. "=dave" is expanded to "uumail:dave". Change folder: c ----------------- Specifying this command allows the user to change the folder that is currently being read. This is intended for perusal and reply to previously archived messages. The prompt is "Name of new folder: " and entering cancels the operation, while entering a filename causes the program to read that file as the new folder, if possible. The usual filename metacharacters are available, too. That is, this command expands filenames with '=' (on first position) being your maildir directory ("uumail:" by default); i.e. "=dave" is expanded to "uumail:dave". Delete and Undelete: d and u ----------------------------- Neither of these two commands have any prompts and indicate their action by either adding a 'D' to the current message index entry (indicating deletion pending) or removing the 'D' (indicating that the message isn't set for deletion). Edit mailbox: e ---------------- This allows you to modify the current mail file at a single keystroke. This is mostly useful for editing down messages before saving them. Modifying headers should be done with extreme caution, as they contain routing information and other vital stuff for full functionality. Note that Elm re-reads the folder if the folder has been modified; this operation can take a little while. Forward: f ----------- Allows the user to forward the current message to another user. This copies the message into the edit buffer and allows the user to add their own message too. (See also bounce, above.) Goto last message: g --------------------- Move the current message pointer to the last message in the folder. (going to the next page if needed) Display header: h ------------------ This command displays the current message with all headers intact. When you display a message with other commands, certain header lines are formatted and others discarded. Mail: m -------- Send mail to a specified user. The editor is invoked and the message can be composed. Unread: n ---------- Mark message as unread. If the message was new for this session the 'N' flag will appear again; else the message is marked as old (not read yet but not new for this session). Options: o ----------- This full-screen display allows you to alter the settings of a number of parameters. It's self-documenting (where have you heard that before?) so isn't explained in too much detail here. Print: p --------- This allows you to print out (prt:) the current message. Quit: q -------- If you're in the pager, you are returned to the index screen. If you are on the index screen, Elm quits altogether. If any messages are marked for deletion, it will ask if you want them deleted. Read messages are always kept in the incoming mailbox. Quick quit: Q -------------- This behaves similar to the 'q' command except that you are never prompted for answers to the message disposition questions. If any messages are marked for deletion, they will be deleted without further inquiry. Reply: r --------- Reply to the sender of the current message. A copy of the source message is copied into the edit buffer prepended with the prefix character sequence specified in your .elm/elmrc file. Save to folder: s ------------------ This command is like the 'copy' command (see above), except that the saved message is marked for deletion. This command expands filenames with '=' (on first position) being your maildir directory ("uumail:" by default); i.e. "=dave" is expanded to "uumail:dave". Write to file: w ----------------- This command is like the 'copy' command (see above), except that the saved message is marked for deletion and the header of the message is not written to the specified file; so files created with this command cannot be used by Elm afterwards due to the missing header. This command expands filenames with '=' (on first position) being your maildir directory ("uumail:" by default); i.e. "=dave" is expanded to "uumail:dave". Exit: x -------- This leaves Elm discarding any changes to the mailbox. If changes are pending (such as messages marked for deletion) a prompt is made to confirm discarding the changes. If confirmed, no messages are deleted and the statuses of messages are unchanged. That is, any messages that were new will remain new instead of being noted as old, and any messages that were read for the first time will be again noted as unread. Quick exit: X -------------- This leaves Elm in the quickest possible manner without even prompting about discarding the changes to the mailbox. No messages are deleted and the statuses of messages are unchanged. That is, any messages that were new will remain new instead of being noted as old, and any messages that were read for the first time will be again noted as unread. ----------------------------------------------------------------------------- The Builtin Pager =================== Now, back to our example. The builtin pager shows you each page of the message; it deals also with lines longer than the actual screen width. The pager offers you some additional choices which are equivalent to the correspondending functions from the index screen: Mail, Reply, Forward, Delete. But there's one more feature: Header. This command displays the current message with all headers intact. When you display a message with other commands, certain header lines are formatted and others discarded. Choose Header again to display the message from the beginning in the old manner. (there's a flag in the configuration file for displaying headers; properly speaking, the Header command switches this flag) When you are about to send of a message under the forward, mail, or reply commands (see above), a small menu of the following options appears: Forget. This gets you out of sending a message you started. If you are in send-only mode, the message is saved to the file Cancelled.mail in your home directory. Otherwise it can be restored at the next forward, mail, or reply command during the current session of Elm. After issuing one of those commands you will be prompted with "Recall last kept message?" Edit message. Entering this command will allow you to edit the text of your message again. Send. This sends the message as is without any further ado, except that the signature (uulib:.signature or uulib:.signature) is appended to the message. Send without signature. This sends the message as is without any further ado. BTW: The file uulib:.elm/elmheaders (or uulib:.elm/elmheaders) is always appended to your message header. ----------------------------------------------------------------------------- The Configuration File ======================== Elm, like lots of other software on the Amiga system, has the ability to automatically read in a configuration file at each invocation. The file must be called elmrc and reside in the .elm directory located in your uulib: directory. It can have any of the entries below, in any order. If you are missing any entries, or if you don't have an .elm/elmrc file, the default values (listed below for each option) will be used. Note that those options below designated with * can be altered using Elm via the o)ptions screen. Elm tries to support multi-user; first it opens a configuration file named "uulib:.elm/elmrc", where is the name found in uulib:Config. If Elm is invoked from a shell with the -f option and the argument specifies an user name (and not only a file name), this will be taken as . If all this fails, Elm opens the file "uulib:.elm/elmrc" ( = ""). Same procedure is done with "uulib:.signature", "uulib:.elm/elmheaders" and all other user-dependent files. The configurations file consists of a bunch of keywords and their values. Keywords begin in the first column and are seperated from their value by one or more white spaces (space or tabulator). It's not allowed to omit a value. Keywords and values are case-independent. For a better idea of how this all works, here's my .elm/elmrc file. While looking through it, notice that you can have lots of comments and blank lines for readability. # example .elm/elmrc - options file for the ELM mail system # (rename it to ".elm/elmrc" for multiple users) # If the sender has included a "Return-Receipt-To:
" in the # message header, Elm will send back an acknowledge if the message was # successfully read. "Yes" turns this feature on, any other off. # Use with care, because normally "s(end)mail" handles it for you. # (*) AnswerReturnReceipt No # If the sender has included a "Return-View-To:
" in the # message header, Elm will send back an acknowledge if the message was # successfully read. "Yes" turns this feature on, any other off. # (*) AnswerReturnView Yes # If you want to have an acknowledge if the receipient of a message has # received this message, Elm adds a "Return-Receipt-To:
" to the # message header, where address is the same like "From:
". # "Yes" turns this feature on, any other off. # (*) RequestReturnReceipt No # If you want to have an acknowledge if the receipient of a message has # read this message, Elm adds a "Return-View-To:
" to the # message header, where address is the same like "From:
". # "Yes" turns this feature on, any other off. # (*) RequestReturnView No # If you always want to see the full header of each message and not only # some keywords (From:,Cc:,Bcc:,Subject:), set it to "Yes", any other # value shows only a small reformatted header. # (*) ShowFullHeader No # The message body (text) and the signature are divided by "-- \n" # normally. Elm recognizes this and gives you the abiltity to hide # signatures. If you want to see the signature, set value to "Yes", # any other will suppress signatures. # (*) ShowSignature Yes # This is a dirty trick (sorry), but due to easy programming Elm # allocates space for incoming mails statically. Each mail costs # an amount of about 100 bytes. "MaxMails" *must* be big enough # to handle big mailboxes. MaxMails 200 # If you reply to a message, each line of the source text will be # included in your new mail and prefixed with this string. If you # do not want any prefix, set value to "". DO NOT OMIT THIS VALUE! PrefixString "> " # All outgoing mail is saved to a special archive. This archive # is not meant to be a mail folder, so it should not be read by Elm. # If you do not want to save outgoing mail, omit the value # for this keyword or omit both (prefix line with '#'). SentArchive uumail:mail.sent # What editor to use for editing mails, folders etc. # (if not in your DOS search path, use full (absolute) path) Editor StartCED # The full user name (real name) for outbound mail. FullName Andreas M. Kirchwitz # Where to save received and read messages to. # If you quit Elm, all messages marked as read (not old, not new and # not marked for deletion) may be saved to this folder. On exit Elm # will prompt the user whether to save or not. (see also 'AlwaysKeep') ReceivedFolder uumail:mail.received # If you quit Elm quickly ('Q'), all messages marked for deletion # may be removed from the folder ("Yes") or not (any other value). AlwaysDelete Yes # If you quit Elm quickly ('Q'), all read messages may be # moved to the 'ReceivedFolder' (see above) or may be kept # in the incoming mailbox ("Yes"). AlwaysKeep Yes # Elm makes a backup of the current folder in uumail: (appending ".o"), # before saving the folder to the original file. If you wish to keep # this backup - even if no error occured while saving - set the value # to "Yes", set it to any other value to delete the backup if the folder # was written successfully to disk. # (*) KeepBackup No # There are several versions of the 'sendmail' program which is called # by Elm. Each of them has a different behavior in parsing the mailfile # and the command line options. For example: Ingo Feulner's sendmail # has no -R (realname) option but it allows to omit the -f option and # to put the complete From: line into the mailfile. Matt Dillon's # sendmail has some problems with From: within the mailfile, but it # allows -R option... # # Set value to 'Feulner' for Ingo Feulner's sendmail (AmigaUUCP Plus) # (sendmail is called without options, all keywords within mailfile), # set value to 'Dillon' for Matt Dillon's sendmail (AmigaUUCP D) # (sendmail is called with options -f and -R, no From: within mailfile), # any other value will call sendmail only with option -f and no # From: line within mailfile. # SendmailVersion Feulner # If doing a reply, Elm puts an introducing line for you in front of # the quoted text. To give this automated process a more personal touch, # some useful keywords are available (relating to the original message): # # $NAME : full real name # $FIRSTNAME : only the first name # $MSGID : message id # $DATE : date # # If Elm cannot find the corresponding fact (for example, the real name # is missing in the original message) the keyword remains unchanged. # ReplyIntroduction Hi $FIRSTNAME ($NAME), in $MSGID on $DATE you wrote: # same as "ReplyIntroduction" (see above), but for forwarded messages ForwardIntroduction On $DATE, $NAME wrote: # Screen Parameters # (should be large enough for 80x20 characters (with default font)) # Width (in pixels) of the Elm screen. # Must be large enough to hold at least 80 characters of the default font. Screen-Width 640 # Height (in pixels) of the Elm screen. # Must be large enough to hold at least 20 characters of the default font. Screen-Height 270 # If you want to set the Interlace-Flag for opening of the screen, # set this value to "Yes", any other turns interlace off. Screen-Interlace Yes # By default Elm uses the workbench colors for its screen. # You have to specify four colors (two bitplanes), which are # equivalent to the ones given by the "palette" tool from # Commodore's Workbench/Extras disks. Hexadecimal numbers must # begin with "0x" (or "0X"), octal numbers with "0" and any # other numbers are assumed to be decimal. Color 0x45A 0xFFF 0xF00 0x88F # Elm reads and writes very slowly. To speed up saving a little bit, # you may allow Elm to allocate some extra bytes for buffered I/O. # These extra buffers are used to put in the body of each mail, so # for maximum speed increase the buffers must be big enough to hold # your largest message body. Minimum buffer size is 1024 bytes. # Because of C's limitations ("int" for "fread()/fwrite()") buffers # should not be greater than ca. 36000 bytes. Buffers 20000 # end of .elm/elmrc ----------------------------------------------------------------------------- Command Line Options ====================== elm --- Get UserName from uulib:Config and read folder uumail:. elm ---------- Start Elm in send-mode. This will allow sending of a single message to the specified recipient with all the options usually available in the Elm system itself. Elm puts you into an editor for you to enter the text of the message. elm -s -or- elm -s ------------------------------------------------------ Start Elm in send-mode (see above) and additionally specify subject for message to mail. elm -f --------------- Instead of the UserName in env:UserName or uulib:Config Elm uses the argument as new user name; it will try reading the folder uumail:. If this fails, Elm re-uses UserName from env:UserName or uulib:Config, takes as a normal filename and opens it. If you wish to read a folder from uumail: without changing your user name to , use an absolute path. Elm does not change the user name und does not try uumail: first, if contains one of the characters ':' or '/'. elm ?, -?, -h, -v ----------------- Print version and configuration information. ----------------------------------------------------------------------------- Additional Features ===================== The mailer provides a facility for including customized header lines in the messages you send. If you have an .elm/elmheaders file, the mailer will include its contents immediately after the regular headers of all outbound mail. Here's a typical .elm/elmheaders file: Organization: Department of Fun & Games Cc: bonzo@tic.tac.toe X-Charset: iso-8859-1 These lines will appear after all other header lines in the message. While running, Elm checks the mail folder on every action taken by the user. Elm compares date and length of the folder with previous values and re-reads the folder if it has been changed. This means you can run Elm in background and Elm re-reads the actual folder automatically if new mail comes in. Elm tries to handle with your data files very safely. Before re-writing a folder to disk, it is backed up to ".o" (normally located in your mail directory "uumail:"). Therefore it should be very difficult to lose some of your important data during a session. ----------------------------------------------------------------------------- Installing ============ Copy the Elm binary to your dos search path (e.g. "uucp:c"), create a configuration file (an example is included) and have all the assigns and configs you need for AmigaUUCP. Username is taken from command line option -f (it's very tricky, see above) then from env:Username and finally from uulib:Config (if not found before). Nodename (Sitename) and Domain are always taken from uulib:Config. ----------------------------------------------------------------------------- Bugs, Infos, To Dos ===================== REPORT: Send bug reports, ideas, flames etc. to "elm-fan@zikzak.in-berlin.de" (UUCP). INFO: Major parts of this document are taken from the original Elm documentation written by Dave Taylor (taylor@hplabs.hp.com). TO DO: - better handling of included mail-headers - bounce mail - aliases - faster load & save ----------------------------------------------------------------------------- Elm (Amiga Elm) is (c) Copyright 1991, Andreas M. Kirchwitz, all rights reserved. Any possesor of this version "Elm" for the Amiga is hereby granted a non-exclusive license permitting its use and/or redistribution, subject to the following terms and conditions. Permission is hereby granted to freely redistribute this version of "Elm" via electronic bulletin board systems (BBS's), freely redistributable disk collections (such as provided by Fred Fish), service bureaus (BiX, GEnie, CompuServe, etc), and networks such as USENET, BITNET, and Internet, provided that such distribution includes this unmodified License, and all of the documentation files (README and .doc files), in addition to the executable, and with all copyright notices intact. Access to the source code must also be available and allowed. Use of the "Elm" executable and docmentation in any environment, commercial or otherwise is not restricted, and no fee shall be required for said use. The use of the source code is also permitted in other freely redistributable works, provided proper acknowledgement of the authors is given. The use of the source code in a commercial product is prohibited without prior written permission of the author. Without prior written permission from the author, it is prohibited to sell or otherwise convey this version of "Elm" for monetary or other forms of compensation, other than the customery service and/or duplication fees as may be charged by the distribution mechanisms identified above. It is further prohibited, without prior written permission from the author, to include this version of "Elm" in whole or in part, in the distribution of any commercial hardware or software package, or component thereof. This version of "Elm" is provided "as is", without express or implied warranty. The author makes no claim or representation about the suitability of this software for any purpose. The author disclaims any and all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall the author be liable for any special, indirect, or consequential damages, or any damages whatsoever resulting from loss of use, data, or profits, whether in an action of contract, negligence, or other tortious action, arising out of or in connection with the use or performance of this software. Andreas M. Kirchwitz Seesener Str. 69 1000 Berlin 31 +49 (0)30 873376 Federal Republic of Germany UUCP ------ amk@zikzak.in-berlin.de amk@cs.tu-berlin.de amk@methan.chemie.fu-berlin.de IRC ----- bonzo MAILBOX --------- Eprom's Datenhaus, +49 30 3722739, ID: Big Bonzo (Sysop) Leguan's Byte Channel, +49 30 8122442, ID: Big Bonzo (Sysop) -end-of-manual-