Pine Technical Notes Version 4.05, September 1998 Pine and Pico are trademarks of the University of Washington. Copyright © 1989-1998 by the University of Washington. For information on copying, modifying or distributing documents from the Pine Information Center, see the Legal Notices. Table of Contents Introduction * Design Goals * Pine Components Background Details * Domain Names * RFC 822 Compliance * SMTP and Sendmail * Internet Message Access Protocol (IMAP) * Multipurpose Internet Mail Extensions (MIME) * Folder Collections Building and Installation * Compile-time Options * Including LDAP Functionality * Including Kerberos 5 Functionality * Pine Compile-time Options * Pico Compile-time Options * OS Dependent Compile-time Settings * IMAPd Compile-time Options * Building the Pine Programs * Installing Pine and Pico on UNIX Platforms * Installing PC-Pine * Installing IMAPd * Support Files and Environment Variables: UNIX Pine * Support Files and Environment Variables: PC-Pine Command Line Arguments * Pine * Pico * Pilot Configuration and Preferences * Pine Configuration * General Configuration Variables * Configuration Features * Hidden Config Variables and Features * Retired Variables Configuration Notes + Pine in Function Key Mode + Domain Settings + Syntax for Collections + Syntax for Remote Folders + Sorting a Folder + Alternate Editor + Signatures and Signature Placement + Feature List Variable + SMTP Servers + MIME.Types file + Additional Notes on PC-Pine Behind the Scenes * Address Books * Checkpointing * Debug Files * Filters * Folder Formats and Name Extensions * Folder Locking * INBOX and Special Folders * Internal Help Files * International Character Sets * Interrupted and Postponed Messages * Message Status * MIME: Reading a Message * MIME: Sending a Message * New Mail Notification * NFS * Printers and Printing * Save and Export * Sent Mail * Spell Checker * Terminal Emulation and Key Mapping Notes for Porting and Modification * Porting Pine to Other Platforms * Test Checklist Introduction Design Goals Throughout Pine development, we have had to strike a balance between the need to include features which advanced users require and the need to keep things simple for beginning users. To strike this balance, we have tried to adhere to these design principles: - The underlying model presented to the user has to be simple and clear. Underlying system operation is hidden as much as possible. - It's better to have a few easily understood commands that can be repeated than to have some more sophisticated command that will do the job all at once. - Whenever the user has to select a command, file name, address, etc., the user should be given (or can get) a menu from which to make the selection. Menus need to be complete, small, organized and well thought out. - Pine must provide immediate feedback for the user with each operation. - Pine must be very tolerant of user errors. Any time a user is about to perform an irreversible act (send a message, expunge messages from a folder), Pine should ask for confirmation. - Users should be able to learn by exploration without fear of doing anything wrong. This is an important feature so the user can get started quickly without reading any manuals and so fewer manuals are required. - The core set of Pine functions should be kept to a minimum so new users don't feel "lost" in seemingly extraneous commands and concepts. Just as there were goals relating to the look and feel of Pine, there were equally important goals having to do with Pine's structure-the things that users never see but still rely on every time they use Pine. While Pine can be used as a stand-alone mail user agent, one of its strongest assets is its use of the Internet Message Access Protocol (IMAP) for accessing remote email folders. In addition, Pine was one of the first programs to support the Multipurpose Internet Mail Extensions (MIME) specification. With MIME, Pine users can reliably send any binary file to any other person on the Internet who uses a MIME compliant email program. The decision to use IMAP and MIME reflects the importance of interoperability, standardization and robustness in Pine. As you work with Pine more, you will see other features which reflect the same values. For example, Pine enforces strict compliance with RFC 822, implements a strong mail folder locking mechanism and verifies a process before overwriting any files (e.g. addressbook, expunging messages). Pine Components If you have picked up the Pine distribution, then you already know that Pine comes in a few different pieces. They are: Pine The main code from which the Pine program is compiled. Pico Pico is the name for the Pine composer. The Pico code is used in two ways: (1) it is compiled on its own to be a stand-alone editor and, (2) it is compiled as a library for Pine to support composition of messages within Pine. Pico is Pine's internal editor invoked when users need to fill in header lines or type the text of an email message. Imap An API for IMAP. Includes the C-Client library, which is compiled into Pine, and the IMAP server IMAPd. C-Client implements the IMAP protocol and also negotiates all access between Pine and the mail folders it operates on, even if the folders are local. The C-Client routines are used for email folder parsing and interpreting MIME messages. IMAPd is a separate server that handles IMAP connections from any IMAP-compliant email program. When Pine accesses a remote mailbox, the Pine program is the IMAP client and the IMAPd program is the IMAP server. Background Details Domain Names Domain names are used to uniquely name each host on the Internet. A domain name has a number of parts separated by periods. Each label represents a level in the hierarchy. An example of a name is: olive.cac.washington.edu In this domain name the top-level label is edu, indicating it is at an educational institution, the second-level label is washington, indicating the University of Washington. cac is a specific department within the University of Washington, and olive is the host name. The top-level names are assigned by Internet organizations, and other names are assigned at the appropriate level. The Domain Name Service, DNS, is the distributed database used to look up these names. Pine relies on domain names in multiple places. A domain name is embedded into the message-id line generated for each piece of email. A domain name is needed to contact an IMAP server to get access to remote INBOXes and folders. Most importantly, domain names are needed to construct the From: line of your outgoing messages so that people on the Internet will be able to get email back to you. On UNIX systems, you can set the domain via the user-domain variable in the Pine configuration file, or rely on the file /etc/hosts which usually sets the name of the local host. While Pine can often deliver email without the domain name being properly configured, it is best to have this set correctly. Problems can usually be solved by adjusting the system's entry in the /etc/hosts file. The fully-qualified name should be listed before any abbreviations. 128.95.112.99 olive.cac.washington.edu olive is preferred over 128.95.112.99 olive olive.cac.washington.edu On PCs, the task of configuring the domain name is a bit different. Often times, PCs do not have domain names-they have IP addresses. IP addresses are the numbers which uniquely identify a computer on the network. The way you configure your IP address depends on the networking software which you use on the PC. You can refer to the documentation which came with your networking software or see the PC specific installation notes for help configuring the IP address with your network software. With PCs, it is vital that users set the variable user-domain in the Pine configuration file (PINERC). Details on configuring Pine with correct domain names can be found in the Domain Settings section of this document. _________________________________________________________________ RFC 822 Compliance Pine tries to adhere to RFC 822 a little more strongly than some other mailers and uses the "full name
" format rather than the older "address (full name)" format. The intent of the standard is that parentheses should only be for comments. Pine displays and generates the newer format, but will parse the old format and attempt to turn it into the new one. As far as outgoing email is concerned, Pine fully-qualifies addresses whenever possible. They are even displayed in fully-qualified form on the terminal as the user composes a message. This makes addresses more clear and gives a hint to the user that the network extends beyond the local organization. Pine implements fully-qualified domain names by tacking on the local domain to all unqualified addresses which a user types in. Any address which does not contain an "@" is considered unqualified. The newer format for addresses allows for spaces and special characters in the full name of an address. For this reason, commas are required to separate addresses. If any special characters as defined in RFC 822 appear in the full name, quotes are required around the address. Pine will insert the quotes automatically. The common cases where this happens are with periods after initials and parentheses. Because Pine fully complies with RFC 822, it is sometimes difficult to use non-Internet address formats such as UUCP's host!user or DECNet's USER::HOST with Pine. People who run Pine on these systems have made local modifications to Pine or to the mail transport agent (e.g. sendmail) to make things work for them. Pine expects dates to be in the standard RFC 822 format which is something like: [www, ] dd mmm yy hh:mm[:ss] [timezone] It will attempt to parse dates that are not in this format. When an unparsable date is encountered it is displayed as xxx xx when shown in the FOLDER INDEX screen. _________________________________________________________________ SMTP and Sendmail Pine is a user agent not a message transfer agent. In plain English, that means Pine does not know how to interact with other computers on the Internet to deliver or receive email. What Pine does know how to do is help users read, organize and create email. The "dirty work" of delivering and accepting email is handled by other programs. All outgoing email is delivered to a mail transfer program or to an SMTP server. The most common mail transfer program is sendmail. Pine 3.91 and earlier: When Pine on a UNIX computer uses the local sendmail, it first writes the message to a temporary file in /tmp. Then Pine runs a shell in the background that runs sendmail on the temporary file and then removes it. This is done with a shell in the background so the user doesn't have to wait for sendmail to finish. By default, sendmail is invoked with the -t flag to cause it to read and parse the header to determine the recipients; the -oem flag to cause errors to be mailed back; and the -oi flag to ignore dots in incoming messages. Systems administrators can choose to configure Pine to use a different mail transfer program or even sendmail with different flags. See the section on UNIX Pine Compile-time Options for more details on this. Pine can also operate as an SMTP client. SMTP stands for Simple Mail Transfer Protocol; it specifies the rules by which computers on the Internet pass email to one another. In this case, Pine passes outgoing email messages to a designated SMTP server instead of to a mail transfer program on the local machine. A program on the server then takes care of delivering the message. To make Pine operate as an SMTP client, the smtp-server variable must be set to the IP address or host name of the SMTP server within your organization. This variable accepts a comma separated list of servers, so you can specify multiple SMTP servers. PC-Pine only runs as an SMTP client. Pine 3.92 and later: The selection of which MTA to use depends on the settings of sendmail-path, smtp-server, and compile-time options. The first MTA specified in the following list is used: 1. sendmail-path in /usr/local/lib/pine.conf.fixed 2. smtp-server in /usr/local/pine.conf.fixed 3. sendmail-path specified on the command line. 4. smtp-server specified on the command line. 5. sendmail-path in the user's .pinerc file. 6. smtp-server in the user's .pinerc file. 7. sendmail-path in /usr/local/lib/pine.conf 8. smtp-server in /usr/local/pine.conf 9. DF_SENDMAIL_PATH defined at compile time. 10. SENDMAIL and SENDMAILFLAGS defined at compile time. If the sendmail-path form is used, a child process is forked, and the specified command is executed with the message passed on standard input. Standard output is then passed back and displayed for the user. NOTE: The program MUST read the message to be posted on standard input, AND operate in the style of sendmail's "-t" option. If an smtp-server is specified, a connection to the server is opened. If the message contains 8-bit text, ESMTP 8BITMIME negotiation is attempted. The message is then sent using SMTP commands. If none of the above are set, the default sendmail program is invoked with the "-bs -odb -oem" flags, ESMTP negotiation is attempted, and the message is sent. _________________________________________________________________ Internet Message Access Protocol (IMAP) IMAP is a remote access protocol for message stores. Pine uses IMAP to get at messages and folders which reside on remote machines. With IMAP, all messages are kept on the server. An IMAP client (such as Pine) can request specific messages, headers, message structures, etc. The client can also issue commands which delete messages from folders on the server. IMAP's closest kin is POP, the Post Office Protocol, which works by transferring an entire mailbox to the client where all the mail is kept. For a comparison of IMAP and POP, see the paper "Comparing Two Approaches to Remote Mailbox Access: IMAP vs. POP" by Terry Gray. A more detailed exploration of message access may be found in the paper " Message Access Paradigms and Protocols." These papers may be found in the /mail directory of the anonymous FTP server at ftp.cac.washington.edu. IMAP Features: * Allows access to mail folders from more than one client computer. * Works well over low-bandwidth lines because information is sent in small pieces as needed by the user. For example, only header information is sent to build index lists, and if someone sends a 2MB audio file via MIME, you can choose when (or if) you want to get that part of the message. * Email can be delivered and stored on a well-maintained and reliable server which is "always-up". * Folders can be accessed and manipulated from anywhere on the Internet. * Users can get to messages stored in different folders within the same Pine session. * Allows use of IMAP server for searching and parsing. * The latest revision of IMAP (IMAP4) also provides for disconnected operation, including resynchronization of message state between mail servers and message caches on clients. Pine does not yet support this capability, however. IMAP2 is defined in RFC 1176. IMAP4rev1, the revision to IMAP2, is described in RFC 2060. Further information about IMAP may be obtained from the University of Washington's IMAP Information Center on the World Wide Web. Pine 4.00 is an IMAP4rev1 client. _________________________________________________________________ Multipurpose Internet Mail Extensions (MIME) MIME is a way of encoding a multipart message structure into a standard Internet email message. The parts may be nested and may be of seven different types: Text, Audio, Image, Video, Message, Application and Multipart (nested). The MIME specification allows email programs such as Pine to reliably and simply exchange binary data (images, spreadsheets, etc.). MIME includes support for international character sets, tagging each part of a message with the character set it is written in, and providing 7-bit encoding of 8-bit character sets. It also provides a simple rich text format for marking text as bold, underlined, and so on. There is a mechanism for splitting messages into multiple parts and reassembling them at the receiving end. The MIME standard was officially published in June of 1992 as RFC 1341 and subsequently revised in RFC 1521 when it became a full Internet Standard. Pine 3.0 was one of the first email programs to Implement MIME. Now, there are dozens of commercial and freely available MIME-capable email programs. In addition, MIME is being added to newsreaders so MIME messages can be posted and read in USENET newsgroups. The MIME standard also includes support for non-ASCII text in message headers through the extensions described in RFC 1342 and subsequently revised in RFC 1522. Support for RFC 1522 was added in Pine 3.92. An actual MIME message looks something like this: Date: Tue, 12 Mar 1996 15:39:35 -0800 (PST) From: David L Miller To: David L Miller Subject: =?iso-8859-1?Q?Test_MIME_message_with_RFC-1522_headers_=28=E1?= =?i so-8859-1?Q?=E2=E3=29?= Message-Id: Mime-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-1737669234-826673975=:21583" Content-Id: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-1737669234-826673975=:21583 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: The text of the message would go here. It is readable if one doesn't mind wading around a little bit of the MIME formatting. After this is a binary file in base 64 encoding. |\ | |\/| David L. Miller dlm@cac.washington.edu (206) 685-6240 |/ |_ | | Software Engineer, Pine Development Team (206) 685-4045 (FAX) University of Washington, Networks & Distributed Computing, JE-20 4545 15th Ave NE, Seattle WA 98105, USA --0-1737669234-826673975=:21583 Content-Type: APPLICATION/ZIP; NAME="test.zip" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Test Attachment UEsDBBQAAAAIAGh8bCBbZKT4ygIAAHgFAAAEAAAAdGVzdIVUX2vbMBB/16c4 9rSBNyjsYX1UHSUROLInycv2qNhKI5ZYxlLa5dvvpDRLw6CFgJF09/t3Rxo3 WDBDD43rPJjJQpxMbw9m+h3AbyHuLLSDe7JTcPGUbtYm7NzwGP3wBYQnnT8c 7NQ5s4djsC8t4QbmYE6wsfjpLTy7uPPHCOPk/ATPk4vRDmS008GF4PzwPich zY3m4LfxOQlPNy4GcEO3P/a2h2j/xGyp9ONpco+7CHf33+4/393ff4XNibzL c1UVfXJXQIdIBRx877b4TYy9C3Fym2NEyzsX/pNDet8dD3aIJiagLbo2wwnG 4zT6cK66ZLK1NhH9J4tcZQEy7OxkNyd4nMwQbV9glP7JZb87E3O32fgnm7We XQ8+us4SM47WTCkgMPt9enc2ZAW5c+Pj7o32l0IXXk/r8pSRE3A4jqOfIqqF G+PFlSdRDOaQduXNESTwtDcYfJ8191gWXUjYmOJ43Oxdh11JTzRuSPcY37+B vNqmf0O5RB1G27mt64rLCp4X8pW1L6BvxunCeYHNk3F7s9lb+GAwyvAhOyNE Lxm0gv9gUnH9C+o5rKlacrHQtYAZV2VF+UoBrSp8kJIKzZkqgP1sJFMKagl8 1VSczQqy5noJki2onIGuQS+5AlXPNfaxArgoq3aGwJDq6lZDxVdcU82RKMG/ 4JArTVKzYrJc4pE+8CoJpGIGc65FIp8jO4WGSs3LtqISmlY2tUKyVMUFETWw H0xoUMvE8KbXB4aC6EPFzrDiF6iGlZxWBeFixiUrdXJb1kKx7y2C4hPM6Iou WI4hdVyO6yXVqkZqiXmottLJ9lzWK1LVKttqk8oZ1TS1NrJGS5jqeslQI0aK ieCvzNlgNZJqiccCc5WafLxmKdii4gsmSvYpISkteamzkRwXJiG5SoUpcERK 8xIE8QQ7o+eh5WAUy1qYRP8rioip/maI+OfyF1BLAQIUAxQAAAAIAGh8bCBb ZKT4ygIAAHgFAAAEAAAAAAAAAAEAAACkgQAAAAB0ZXN0UEsFBgAAAAABAAEA MgAAAOwCAAAAAA== --0-1737669234-826673975=:21583-- For details about Pine's implementation of MIME, see the two MIME sections "MIME: Reading a Message" and "MIME: Sending a Message" later in this document. _________________________________________________________________ Folder Collections Folder Collections are Pine's way of dealing with more than a single group of folders. With advent of PC-Pine and the development of tools within IMAP to better manage remote folders, the time was ripe to provide a mechanism for defining a group of remote folders. PC-Pine forced the issue in that many potential PC-Pine users would be migrating from UNIX Pine in a time-sharing environment and, thus, would have some investment in their archived messages on that host. For a more complete description of Folder Collections, see the section on "Syntax for Collections." The Pine distribution is designed to require as little configuration and effort at compile time as possible. Still, there are some Pine behaviors which are set at the time you compile Pine. For each of these, there is a reasonable (our opinion) default built into the code, so most systems administrators will have no need for these steps. Building and Installation Compile-time Options The files you may need to modify are ./{pico,pine}/makefile.xxx, ./{pico,pine}/osdep/os-xxx.h, and possibly ./{pico,pine}/osdep/os-xxx.ic, where xxx is the 3-letter code for your platform. You can give the command build help to see the list of ports incorporated into Pine and their associated 3-letter codes. The files ./{pico,pine}/makefile.xxx are where you would set compiler options. By default, Pine will be compiled with debugging on, optimization and profiling off. Note that if you compile with DEBUG off, then Pine will not create its normal debug files, no matter how the debug-level and debug command line flag are set. Some of these can only be set when you compile. Others, however, can be overridden by command-line flags to Pine or settings in Pine's user or system configuration files. Some of the options which can be set when compiling: Including LDAP Functionality In order to build Pine with LDAP functionality included you need to supply the LDAP library and include files. Pine has been successfully built with the University of Michigan LDAP library (ldap-3.3) and with the Netscape Directory SDK 1.0 LDAP library. To use the University of Michigan library, place a symlink called ldap to the University of Michigan LDAP source (ldap-3.3) in the top-level pine directory (where the Pine build script is located). See the comments in the script contrib/ldap-setup if you have trouble. It may also help to try running the build script in the top-level directory of the distribution once you have placed the ldap symlink. The script will attempt to give you a hint on how to make the ldap library based on the target you are building for Pine. To use the Netscape Directory SDK library, make a directory called ldap in the top-level pine directory (where the Pine build script is located). That directory should contain two subdirectories, include and libraries. The include directory is where you should put the include files from the Netscape SDK. The libraries directory is where you should put the library, libldap.a. The build script will run the script contrib/ldap-setup if you have created an ldap symlink or directory. It tries to figure out if the setup is the Univ. of Michigan code or not. If it is Univ. of Michigan ldap-3.3, then it will link against both libldap.a and liblber.a. If it isn't, it will link against only libldap.a. Including Kerberos 5 Functionality In order to build Pine with Kerberos functionality included you should place a symlink called krb5 to the directory where your Kerberos5 include files and libraries are located. That is, krb5/include and krb5/lib should exist. Place the symlink in the top-level pine directory (where the Pine build script is located). See the comments in the script contrib/krb5-setup if you have trouble. Pine Compile-time Options USE_QUOTAS Determines whether quotas are checked on startup. Default is to not check the quota. ALLOW_CHANGING_FROM This is now a hidden runtime feature called allow-changing-from . Even with this feature turned on, users still have to include From in their default-composer-hdrs or customized-hdrs in order to be able to edit the From line. A system administrator may disallow editing of the From line by putting the feature no-allow-changing-from in the system-wide fixed configuration file. The paranoid system administrator can compile in this behavior by defining NEVER_ALLOW_CHANGING_FROM in ./pine/osdep/os-xxx.h. DEFAULT_DEBUG Sets the level of debugging output created in Pine's debug files. Default is level 2. The command-line flag -d may also be used to change the debug level. For example, -dverbose=7. NUMDEBUGFILES Sets the number of debug files kept per user. Default is 4. The command-line flag -d may also be used to change this. For example, -dverbose=3,numfiles=2. BACKGROUND_POST Define this if you want to allow users to turn on the feature that enables sending to take place in a fork()'d child. This may reduce the time on the user's wall clock it takes to post mail. NOTE: You'll also have to make sure the appropriate ./pine/osdep/postreap.* file is included in the ./pine/osdep/os-xxx.ic file for your system. NEW_MAIL_TIME Interval between new-mail checks. Default is 150 seconds. This is obsolete. This should be set in a configuration file by setting the variable mail-check-interval. OVERLAP Number of lines overlap when user views the next page of a message. Default is 2 lines. This is obsolete. This should be set in a configuration file by setting the variable viewer-overlap. SENDMAIL SENDMAILFLAGS Sets the name and flags for the local program that will be called to handle outgoing email. Default is /usr/lib/sendmail -oi -oem -t. See the SMTP and Sendmail section for more details. SYSTEM_PINERC The name of the file which holds Pine configuration information for all users on the system. Default on UNIX systems is /usr/local/lib/pine.conf. SYSTEM_PINERC_FIXED The name of the file which holds the same type of information as for SYSTEM_PINERC, but only for variables that the administrator wants to keep fixed. That is, users are not allowed to change variables that are specified in the FIXED file. Default on UNIX systems is /usr/local/lib/pine.conf.fixed. There are a couple of more obscure options which are in the source code because a few people have asked for them or because we changed our minds about them being a good idea in general. ENCODE_FROMS Use Quoted-printable encoding so that From's at the beginning of lines don't end up being escaped by >'s. Most people seem to dislike the Q-P encoding more than the > escapes so this is off by default. Once everyone has MIME mail readers, we'll turn this on by default. NO_KEYBOARD_LOCK Disable the keyboard locking function in the main menu. Keyboard locking is enabled by default. An easier way to turn off Keyboard locking is to add the feature disable-keyboard-lock-cmd to the feature list variable in the global pine.conf or pine.conf.fixed file. Pico Compile-time Options There is really only one option settable specifically for Pico. It is for the UNIX Pico versions only. The file that may need some changing is ./pico/osdep/os_xxx.h.. Whatever is set will effect the behavior of the Pico stand-alone program as well as the composer within Pine. SPELLER Names the program called to do "normal" spell-checking. This can be set in a configuration file instead by setting the speller variable. OS Dependent Compile-time Settings Most of Pine's (and Pico's) operating system dependent behaviors are set in the files ./pico/osdep/os-xxx.h and ./pico/osdep/os-xxx.ic. The flags in the makefiles are also system dependent. See the comments in ./pico/osdep/os-xxx.h for more details. One that may come up is: USE_TERMINFO USE_TERMCAP Instructs Pine to use the terminfo (or termcap) database. Default varies by system. This has been moved from ./pine/osdep/os-xxx.h to ./pico/osdep/os-xxx.h. If you change this you will also have to change the file ./pico/osdep/os-xxx.ic so that it includes the file term.inf instead of term.cap (or vice versa) and you will probably have to change the libraries included by the makefiles ./{pico,pine}/makefile-xxx. Hopefully, it is already set correctly for each system. IMAPd Compile-time Options There are no options or settings required for the version of IMAPd distributed with Pine. If you need to be doing more complex modifications to IMAP, then you should pick up the IMAP development package and work with that code. The developer's version of IMAP is available for anonymous ftp from ftp.cac.washington.edu in the directory mail. The file is called imap.tar.Z. _________________________________________________________________ Building the Pine Programs You may have already compiled Pine and tried it out. If so, great! If not, you should be able to do it without too much trouble by following these step-by-step instructions: 1. Figure out what platform you're building for. You can give the command build help or look at the list in ./doc/pine-ports to see the list of ports incorporated into Pine. What you need is the three letter code for the platform. Some examples are a41 for the AIX 4.1 operating system, os4 for Digital Unix 4.0, and lnx for Linux. There are sometimes several variants for a single operating system (different compilers, shadow passwords or not, etc.) so look through the whole list in ./doc/pine-ports for the one you want. If your platform is not in the list of ports, then you might have some work ahead of you. First, check the file doc/pine-ports to see if there are others working on a port for your platform or to see if the port is included in the "contrib" section of the source code. Ports in the contrib directory were contributed by Pine administrators from around the world, but the Pine development team has not been able to test the code. Some of these ports are very old and are based on old versions of Pine. If Pine has not yet been ported to your platform at all, read the section on Porting Pine in this document. 2. Make sure you're in the root of the Pine source. When you type ls you should see the following files and directories (or something close to it): README build doc makefile pine bin contrib imap pico 3. Make sure you're getting a clean start by giving the command build clean. This should take only a few seconds to run. 4. Give the command build xxx where xxx is the three letter code you picked in step 1. The compiler should grind away for a few minutes. 5. When the compilation is complete the sizes of the four binaries built (pine, mtest, imapd, pico) will be displayed. The actual binaries are in the various source directories. In addition, the bin directory contains a link to each program compiled. You can just copy them out of bin or try them from there. The build command can be given some options which it passes on to the subordinate makes. Some that may be useful are EXTRACFLAGS, OPTIMIZE, DEBUG, EXTRALIBES, and EXTRALDFLAGS. Build is more closely integrated with the Pico and Pine makefiles than it is with the c-client makefile, so you may find that some things don't work correctly there. Here are some examples of options you may want to pass to build. This will turn off the debugging files that Pine produces, while leaving the symbol table information. We believe a better way to do this is to have an alias for pine which executes pine -d0 instead. This turns off debugging at runtime while preserving the possibility of using the debugging if a problem turns up. DEBUG=-g To also leave out the symbol table information you could pass: DEBUG= It should be ok to move string constants into a read-only area. We don't think there are any instances where Pine modifies a string constant. So you could pass a flag to your compiler that tells it to do this. This could cause several hundred K of strings to be moved from the data area of the program into the text area of the program, and that should allow that text to be shared among all instances of Pine. To do this, for example, with the AIX a41 port, you could pass this to build: EXTRACFLAGS=-qro _________________________________________________________________ Installing Pine and Pico on UNIX Platforms Installing Pine and Pico is remarkably simple. You take the program files which you have just transferred or built and you move them to the correct directory on your system. Most often the binaries go in /usr/local/bin though sometimes they are placed in /usr/bin. All the help text is compiled into Pine so there are no required auxiliary files. There are, however, three optional auxiliary files: /usr/local/lib/pine.info, /usr/local/lib/pine.conf, and /usr/local/lib/pine.conf.fixed. The file pine.info contains text on how to get further help on the local system. It is part of the help text for the main menu and should probably refer to the local help desk or the system administrator. If this file doesn't exist a generic version which suggests ``talking to the computer support staff at your site'' is shown. The file pine.conf is used to set system-wide default configurations for Pine. The file pine.conf.fixed is also used to set system-wide default configurations for Pine. The difference between these two files is that configuration variables set in the pine.conf.fixed file may not normally be over-ridden by a user. See the section on Pine Configuration later in this document for details about the pine.conf and pine.conf.fixed files. _________________________________________________________________ Installing PC-Pine Beginning with the Pine 3.90 release, there is a PC-Pine version that runs under windows using the Winsock network interface. For those who still need to run the DOS version of PC-Pine, there are versions for four different TCP/IP network stacks: FTP Inc's PC/TCP, Novell's LAN Workplace for DOS, Sun's PC/NFS, and WATTCP for packet drivers. PC-Pine needs to be able to interact closely with the stack loaded on your PC. Most of the time, this occurs automatically. However, there are certain modifications that need be made. LAN Workplace for DOS Version 4.1 Set the environment variable EXCELAN in the PC's AUTOEXEC.BAT file. This provides the necessary links so that LAN Workplace for DOS 4.1 can translate domain names to IP numbers correctly. It is needed because Pine was developed for LAN Workplace 4.0 and this particular variable is treated differently in 4.1 than in 4.0. The EXCELAN variable must point to the directory in which LAN Workplace is installed. PC/TCP versions before 2.2 You need a file called PCTCP.INI which contains a bare-minimum 2-line description of the PC's configuration. It looks like this: [pctcp ifcust 0] ip-address=xx.xx.xx.xx Where xx.xx.xx.xx is the IP address of the PC. Pine also requires an environment variable, PCTCP, which points to this file. For example: set PCTCP=C:\PINE\PCTCP.INI Packet Drivers Pine needs to be made aware of the PC's network configuration file. Simply edit the file WATTCP.CFG included in the Pine distribution. The file includes 5 configuration settings--IP-address, gateway, netmask, nameserver(s) and domainslist. If you have a network configuration file for NCSA Telnet then WATTCP.CFG is just a pared down version of the CONFIG.TEL file you already made. Take a look at CONFIG.TEL to find the correct settings for WATTCP.CFG. Once the configuration file is made, the DOS environment variable WATTCP.CFG needs to point at it. For example: set WATTCP.CFG=C:\PINE In addition to networking software issues, you might need to worry about setting the time zone. PC-Pine includes the time zone as part of outgoing email. There is a generic way for PC applications to get the time zone, but, because PC-Pine is one of a very few applications which requires this information, time zone might not be previously configured. The trick is to add an environment variable, TZ, to your PC's AUTOEXEC.BAT file. The format for the TZ environment variable is as follows: ZZZ[+H]H[:MM:SSTTT] First is the 3-letter code for your standard time, then a "+" or a "-" for direction of offset from GMT, then the amount of offset (hours, minutes, seconds) and finally the 3-letter code for your summer- or daylight savings time. Everything in [] brackets is optional. The default time zone is "PST-8PDT" (U.S. Pacific Time). Coincidentally, Microsoft is headquartered in that time zone. As an example, people in the Eastern part of the US should add this line to their AUTOEXEC.BAT files: TZ=EST-5EDT _________________________________________________________________ Installing IMAPd When the Pine distribution is built on a UNIX station, the IMAP server binary, imapd, is compiled. Installing imapd requires placing the binary in the appropriate directory, usually /usr/etc, and adding entries to /etc/services and /etc/inetd.conf or their counterparts. The following line is appropriate for /etc/services: imap 143/tcp # Mail transfer and the next line is appropriate for /etc/inetd.conf: imap stream tcp nowait root /usr/etc/imapd imapd The /etc/inetd.conf file entry may vary on different versions of UNIX. Some have a slightly different set of fields. Also the pathname in /etc/inetd.conf must match the path where imapd is installed. With this configuration, the IMAP server runs without pre-authentication. Each new IMAP connection requires a correct username and password. IMAP can also be run with pre-authentication based on the standard rsh mechanism. To enable this, the user account on the IMAP server must contain a valid file which grants access to the client machine. Enabling rimap authentication is done by creating a link called /etc/rimapd to imapd. Basically, what is happening is that Pine is taking advantage of the ability that rsh has to use privileged TCP ports so it doesn't have to run in privileged mode. If the rimap authentication fails it will drop back to plain password authentication. PC-Pine cannot take advantage of rimap authentication. Also, if your system uses a distributed configuration database, like NIS, Yellow Pages or Netinfo, be sure that appropriate steps are taken to ensure the above mentioned information is updated. _________________________________________________________________ Support Files and Environment Variables: UNIX Pine This section lists the various files which Pine uses which are not email folders. All of these are the default names of files, they may vary based on Pine's configuration. /usr/local/lib/pine.conf Pine's global configuration file. /usr/local/lib/pine.conf.fixed Non-overridable global configuration file. /usr/local/lib/pine.info Local pointer to system administrator. ~/.pinerc Personal configuration file for each user. ~/.addressbook Personal addressbook ~/.addressbook.lu Personal address book lookup file (index file to speed up lookups). ~/.newsrc Personal USENET subscription list. This is shared with other newsreading programs. ~/.pine-debugX The files created for debugging Pine problems. By default, there are 4 .pine-debug files kept at any time. ~/.signature A signature file which will be included in all outgoing email messages. ~/.pine-interrupted-mail The text of a message which was interrupted by some unexpected error which Pine detected. ~/mail/postponed-msgs A folder of messages which the user chose to postpone. /etc/mailcap System-wide mail capabilities file. Only used if $MAILCAPS not set. ~/.mailcap Personal mail capabilities file. Combines with system-wide mailcap. Only used if $MAILCAPS not set. The location of the following support files may be controlled by variables in the personal or global Pine configuration file: signature, addressbook and its index file, postponed messages, and newsrc. Unix Pine uses the following environment variables: TERM Tells Pine what kind of terminal is being used. DISPLAY Determines if Pine will try to display IMAGE attachments. SHELL If not set, default is /bin/sh MAILCAPS A semicolon delimited list of path names to mailcap files. _________________________________________________________________ Support Files and Environment Variables: PC-Pine This section lists the various files which PC-Pine uses which are not normal mail folders. All of these are the default names of files, they may vary based on Pine's configuration. \PINE.HLP File containing Pine's internal help text. \PINE.NDX Index of Pine's help text used by PC-Pine to locate entries. $PINERC or $HOME\PINE\PINERC or \PINERC Path to (required) personal configuration file. $PINECONF Path of optional global configuration file. \ADDRBOOK Personal addressbook \ADDRBOOK.LU Personal address book lookup file (index file to speed up lookups). \PINE.SIG A signature file which will be included in all outgoing email messages. \PINE.PWD A file containing encrypted password for remote mail server. \PINEDEBG.TXT Location of Pine debug file. \MAILCAP and/or \MAILCAP These paths are only used if $MAILCAPS not set. $HOME\NEWSRC or \NEWSRC Personal USENET subscription list. This may be shared with other newsreading programs. $HOME\MAIL\INTRUPTD The text of a message which was interrupted by some unexpected error which Pine detected. $HOME\MAIL\POSTPOND A folder of messages which the user chose to postpone. PC-Pine's help text and help text index file are expected to reside in the same directory as the PINE.EXE executable, as they are essentially extensions of the executable. The personal configuration file may be in the same directory as the executable, or if that is inconvenient because the executable is on a shared or read-only drive, then it can be in a file named by the $PINERC environment variable, or in $HOME\PINE\PINERC, where if not set, $HOME defaults to the root of the current working drive. Most of the other support files key off of the location of the PINERC file. However, in the case of the NEWSRC file, the path $HOME\NEWSRC is checked first. Also, the postponed messages and interrupted message folders are placed in the default folder collection, normally in the directory $HOME\MAIL. The location of the following support files may be controlled by variables in the personal or global Pine configuration file: signature, addressbook (and its index file), postponed messages, and newsrc. PC-Pine uses the following environment variables: PINERC Overrides default path to pinerc file. PINECONF Optional path to global Pine config file. HOME If not set, Pine uses the root of the current drive, e.g. C: TMP or TEMP Specifies location of temporary storage area COMSPEC Specifies shell for external commands. MAILCAPS A semicolon delimited list of path names to mailcap files. Command Line Arguments Pine Pine and PC-Pine can accept quite a few command-line arguments. Many of these arguments overlap with variables in the Pine configuration file. If there is a difference, then a flag set in the command line takes precedence. Both Pine and PC-Pine expect command line arguments to be preceded by the "-" (dash) as normally used by UNIX programs. [address] Send-to: If you put an unqualified string (or strings) in the command line, Pine reads them as email addresses. Pine will startup in the composer with a message started to the person/people specified. Once the message is sent, the Pine session closes. < file Pine will startup in the composer with file read into the body of the message. Once the message is sent, the Pine session closes. -a Special anonymous mode for UWIN*. -c n When used with the -f option, apply the nth context. This is used when there are multiple folder collections and you want to open a folder not in the primary collection. -conf Configuration: Prints a sample system configuration file to the screen or standard output. To generate an initial system configuration file, execute pine -conf > /usr/local/lib/pine.conf To generate a system configuration file using settings from an old system configuration file, execute pine -P old-pine.conf -conf > /usr/local/lib/pine.conf -create_lu addrbook sort-order Create auxiliary index (LookUp) file for addrbook and sort addrbook in sort-order, which may be dont-sort, nickname, fullname, nickname-with-lists-last, or fullname-with-lists-last. Only useful when creating global or shared address books. See Address Book Lookup File for more information, especially the warning about copying the address book after creating the lookup file. -d debug-level Debug Level: Sets the level of debugging information written by Pine. debug-level can be set to any integer 0-9. A debug level of 0 turns off debugging for the session. (Actually there are some levels higher than 9, now, but you probably don't want to see them.) -f folder Startup folder: Pine will open this folder in place of the standard INBOX. -F file Open named text file and view with Pine's browser. -h Help: Prints the list of available command-line arguments to the screen. -i Pine will start up in the FOLDER INDEX screen instead of the MAIN MENU. Configuration equivalent: initial-keystroke-list=i -I a,b,c,... Initial Keystrokes: Pine will execute this comma-separated sequence of commands upon startup. This allows users to get Pine to start in any of its menus/screens. You cannot include any input to the composer in the initial keystrokes. The key is represented by a ``CR'' in the keystroke list; the spacebar is designated by the letters ``SPACE''. Control keys are two character sequences beginning with ``^'', such as ``^I''. A tab character is ``TAB''. Function keys are ``F1'' - ``F12'' and the arrow keys are ``UP'', ``DOWN'', ``LEFT'', and ``RIGHT''. A restriction is that you can't mix function keys and character keys in this list even though you can, in some cases, mix them when running Pine. A user can always use only character keys in the startup list even if he or she is using function keys normally, or vice versa. If an element in this list is a string surrounded by double quotes (") then it will be expanded into the individual characters in the string, excluding the double quotes. Configuration equivalent: initial-keystroke-list -k Function-Key Mode: When invoked in this way, Pine expects the input of commands to be function-keys. Otherwise, commands are linked to the regular character keys. This option supported only in conjunction with UW Enhanced NCSA telnet. Configuration equivalent: use-function-keys included in feature-list. -n n Message-Number: When specified, Pine starts up in the FOLDER INDEX screen with the current message being the designated message number. -nr Special mode for UWIN*. -o folder Opens the INBOX (or a folder specified via the -f argument) ReadOnly. -p file Uses the named file as the personal configuration file instead of ~/.pinerc or the default PINERC search sequence PC-Pine uses. -P file Uses the named file as the system wide configuration file instead of /usr/local/lib/pine.conf. UNIX Pine only. -pinerc file Output fresh pinerc configuration to file, preserving the settings of variables that the user has made. Use file set to ``-'' to make output go to standard out. -r Restricted Mode: For UNIX Pine only. Pine in restricted mode can only send email to itself. Save and export are limited. -sort key Sort-Key: Specifies the order messages will be displayed in for the FOLDER INDEX screen. Key can have the following values: subject, arrival, date, from, size, orderedsubj, subject/reverse, arrival/reverse, date/reverse, from/reverse, size/reverse, orderedsubj/reverse. The default value is "arrival". The key value reverse is equivalent to arrival/reverse. This option will be expanded in the future to allow sorting on "to" and "cc". Configuration equivalent: sort-key. -z Enable Suspend: When run with this flag, the key sequence ctrl-z will suspend the Pine session. Configuration equivalent: enable-suspend included in feature-list. -option=value Assign value to the config option option. For example, -signature-file=sig1 or -feature-list=signature-at-bottom (Note: feature-list values are additive). * UWIN = University of Washington Information Navigator Pico The following command line options are supported in Pico: +n Causes pico to be started with the cursor located n lines into the file. (Note: no space between "+" sign and number) -d Rebind the "delete" key so the character the cursor is on is rubbed out rather than the character to its left. -e Enable file name completion. -f Use function keys for commands. This option supported only in conjunction with UW Enhanced NCSA telnet. -g Enable "Show Cursor" mode in file browser. Cause cursor to be positioned before the current selection rather than placed at the lower left of the display. -k Causes "Cut Text" command to remove characters from the cursor position to the end of the line rather than remove the entire line. -m Enable mouse functionality. This only works when pico is run from within an X Window System "xterm" window. -nn The -nn option enables new mail notification. The n argument is optional, and specifies how often, in seconds, your mailbox is checked for new mail. For example, -n60 causes pico to check for new mail once every minute. The default interval is 180 seconds, while the minimum allowed is 30. (Note: no space between "n" and the number) -o dir Sets operating directory. Only files within this directory are accessible. Likewise, the file browser is limited to the specified directory subtree. -rn Sets column used to limit the "Justify" command's right margin. -t Enable "tool" mode. Intended for when pico is used as the editor within other tools (e.g., Elm, Pnews). Pico will not prompt for save on exit, and will not rename the buffer during the "Write Out" command. -v View the file only, disallowing any editing. -w Disable word wrap (thus allow editing of long lines). Note: Pico will break any lines over 255 characters when reading a file, regardless of word wrapping. -x Disable keymenu at the bottom of the screen. -z Enable ^Z suspension of pico. Pilot The following command line options are supported in Pilot: -a Display all files including those beginning with a period (.). -f Use function keys for commands. This option supported only in conjunction with UW Enhanced NCSA telnet. -g Enable "Show Cursor" mode. Cause cursor to be positioned before the current selection rather than placed at the lower left of the display. -m Enable mouse functionality. This only works when pilot is run from within an X Window System "xterm" window. -nn The -nn option enables new mail notification. The n argument is optional, and specifies how often, in seconds, your mailbox is checked for new mail. For example, -n60 causes pilot to check for new mail once every minute. The default interval is 180 seconds, while the minimum allowed is 30. (Note: no space between "n" and the number) -o dir Sets operating directory. Only files within the specified directory are accessible and browsing is limited to the specified directory subtree. -v Enable single vertical column display. -x Disable keymenu at the bottom of the screen. -z Enable ^Z suspension of pilot. Configuration and Preferences Pine Configuration There is very little in Pine which requires compile-time configuration. In most cases, the compiled-in preferences will suit users and administrators just fine. When running Pine on a UNIX system, the default built-in configuration can be changed by setting variables in the system configuration files, /usr/local/lib/pine.conf or /usr/local/lib/pine.conf.fixed. Both Pine and PC-Pine also use personal (user-based) configuration files. On UNIX machines, the personal configuration file is the file ~/.pinerc. For PC-Pine systems, the personal configuration file is in $PINERC or $HOME\PINE\PINERC or \PINERC. The syntax of a non-list configuration variable is this: = If the value is absent then the variable is unset. To set a variable to the empty value the syntax is "". This is equivalent to an absent value except that it overrides any system-wide value that may be set. Quotes may be used around any value. All values are strings and end at the end of the line or the closing quote. Leading and trailing space is ignored unless it is included in the quotes. There is one variable, use-only-domain-name, for which the only appropriate values are yes and no. That's because it is a variable from the early days of Pine before features existed. There is also a second type of variable, lists. A list is a comma-separated list of values. The syntax for a list is: = [, , ... ] A list can be continued on subsequent lines by beginning the line with white-space. Both the per-user and global configuration files may contain comments which are lines beginning with a #. For UNIX Pine, there are five ways in which a variable can be set. In decreasing order of precedence they are: 1. the system-wide fixed configuration file 2. a command line argument 3. the personal configuration file (which is usually set from the Config screen) 4. the system-wide configuration file 5. default in the source code. So, system-wide fixed settings always take precedence over command line flags, which take precedence over per-user settings, which take precedence over system-wide configuration settings, which take precedence over source code defaults. PC-Pine has the same list, except that it does not use a system-wide fixed configuration file. You may get a sample/fresh copy of the system configuration file by running Pine -conf. The result will be printed on the standard output with short comments describing each variable. (The online help in the Setup screens provides longer comments.) If you need to fix some of the configuration variables, you would use the same template for the fixed configuration file as for the regular system-wide configuration file. (If it isn't clear, the purpose of the fixed configuration file is to allow system administrators to restrict the configurability of Pine. It is by no means a bullet-proof method.) Pine will automatically create the personal configuration file the first time it is run, so there is no need to generate a sample. Pine reads and writes the personal configuration file occasionally during normal operation. Users will not normally look at their personal configuration file, but will use the Setup screens from within Pine to set the values in this file. If a user does add additional comments to the personal configuration file they will be retained. References to environment variables may be included in the Pine configuration files. The format is $variable or ${variable}. The character ~ will be expanded to the $HOME environment variable. When environment variables are used for Pine settings which take lists, you must have an environment variable set for each member of the list. That is, Pine won't properly recognize an environment variable which is set equal to a comma-delimited list. It is OK to reference unset environment variables in the Pine configuration file, which will expand to nothing. _________________________________________________________________ General Configuration Variables The following is a list of all Pine configuration variables, in alphabetical order. Note that not all variables apply to all versions of Pine and that some variables are only applicable in a system configuration file and some are only applicable in a personal configuration file. addrbook-sort-rule This variable sets up the default address book sorting. Currently, Pine will accept the values dont-sort, fullname-with-lists-last, fullname, nickname-with-lists-last, and nickname. The default is to sort by fullname with lists last. address-book A list of personal address books. Each entry in the list is an optional nickname followed by a pathname or file name relative to the home directory. This list will be added to the global-address-book list to arrive at the complete set of address books. addressbook-formats This option specifies the format that address books are displayed in. By default, address books are displayed with the nicknames in the first column, the fullnames in the second column, and addresses in the third column. The system figures out reasonable defaults for the widths of the columns. An address book may be given a different format by listing special tokens in the order you want them to display. The possible tokens are NICKNAME, FULLNAME, ADDRESS, FCC, and COMMENT. More details are included in the online help for this variable. alt-addresses This option provides a place for you to list alternate email addresses you may have. If set, the option affects the behavior of the Reply command and the + symbol in the "Folder Index", which denotes that a message has been addressed specifically to you. With respect to Reply, the Reply to All option will exclude addresses listed here. bugs-additional-data System-wide configuration files only. Program/Script used by Report Bug command. Output from the program/script is captured and attached to the bug report. bugs-fullname, bugs-address, local-fullname, local-address, suggest-fullname, and suggest-address System-wide configuration files only. These are used by the bug report commands which can be accessed from some of the Help screens. character-set This sets the character set used by the terminal. Currently appropriate values are US-ASCII, ISO-8859-1 through ISO-8859-9 and ISO-2022-JP. See the section on International Character Sets for more details. The default is US-ASCII. composer-wrap-column This option specifies an aspect of Pine's Composer. This gives the maximum width that auto-wrapped lines will have. It's also the maximum width of lines justified using the ^J Justify command. The normal default is 74. The largest allowed setting is normally 80 in order to prevent very long lines from being sent in outgoing mail. When the mail is actually sent, trailing spaces will be stripped off of each line. customized-hdrs Add these custom headers when composing. Also possible to add default values to these custom headers or to any of the standard headers. This is a list variable. Each entry in the list is a header name (the actual header name that will appear in the message) followed by an optional colon and value. For example, if a Reply-to header was needed because it was different from the From address, that could be accomplished with: customized-hdrs=Reply-to: fred_flintstone@bedrock.net Leaving the optional value out allows the user to fill it in when composing a message. If it isn't filled in, it won't be included in the message. default-composer-hdrs Show only these headers (by default) when composing a message. This list may include headers defined in the customized-hdrs list. default-fcc The name of the folder to which all outgoing mail goes is set here. The compiled-in default is sent-mail (UNIX) or sentmail (PC). It can be set to "" (two double quotes with nothing between them) to turn off saving copies of outgoing mail. If default-fcc is a relative file name, then it is relative to your default collection for saves (see folder-collections). default-saved-msg-folder This option determines the default folder name for Saves... If this is not a path name, it will be in the default collection for saves. Any valid folder specification, local or IMAP, is allowed. This default folder only applies when the saved-msg-name-rule doesn't override it. Unix Pine default is normally saved-messages in the default folder collection. PC-Pine default is SAVEMAIL (normally stored as SAVEMAIL.MTX). disable-these-drivers This variable is a list of mail drivers which will be disabled. The candidates for disabling are listed below. There may be more in the future if you compile Pine with a newer version of the c-client library. * mbox * mbx * mh * mmdf * mtx * mx * news * phile * tenex * unix The mbox driver enables the following behavior: if there is a file called mbox in your home directory, and if that file is either empty or in Unix mailbox format, then every time you open INBOX the mbox driver will automatically transfer mail from the system mail spool directory into the mbox file and delete it from the spool directory. If you disable the mbox driver, this will not happen. It is not recommended to disable the driver which supports the system default mailbox format. On most non-SCO systems, that driver is the unix driver. On most SCO systems, it is the mmdf driver. The system default driver may be configured to something else on your system; check with your system manager for additional information. It is most likely not very useful for you to disable any of the drivers other than possibly mbox. You could disable some of the others if you know for certain that you don't need them but the performance gain in doing so is very modest. display-filters This option defines a list of text-filtering commands (programs or scripts) that may be used to filter text portions of received messages prior to their use (e.g., presentation in the "Message Text" display screen). For security reasons, the full path name of the filter command must be specified. See the online help text for further details. download-command This option affects the behavior of the Export command. It specifies a Unix program name, and any necessary command line arguments, that Pine can use to transfer the exported message to your personal computer's disk. download-command-prefix This option is used in conjunction with the download-command option. It defines text to be written to the terminal emulator (via standard output) immediately prior to starting the download command. This is useful for integrated serial line file transfer agents that permit command passing (e.g., Kermit's APC method). editor UNIX Pine only. Sets the name of the alternate editor for composing mail (message text only, not headers). It will be invoked with the "^_" command or it will be invoked automatically if the enable-alternate-editor-implicitly feature is set. empty-header-message When sending, if all of the To, Cc, and Newsgroups fields are empty, Pine will put a special address in the To line. The default value is "Undisclosed recipients: ;". The reason for this is to avoid embarrassment caused by some Internet mail transfer software that interprets a "missing" To: header as an error and replaces it with an Apparently-to: header that may contain the addresses you entered on the Bcc: line, defeating the purpose of the Bcc. You may change the part of this message that comes before the ": ;" by setting the empty-header-message variable to something else. fcc-name-rule Determines default folder name for fcc when composing. Currently, Pine will accept the values default-fcc, by-recipient, or last-fcc-used. If set to default-fcc, then Pine will use the value defined in the default-fcc variable (which itself has a default) for the Fcc header field. If set to by-recipient, then Pine will use the name of the recipient as a folder name for the fcc. The relevant recipient is the first address in the To field. If set to "last-fcc-used", then Pine will offer to Fcc to whatever folder you used previously. In all cases, the field can still be edited after it is initially assigned. If the fcc field in the address book is set for the first To address, that value over-rides any value derived from this rule. feature-list This is a list of the many features (options) which may be turned on or off. There is a separate section titled Configuration Features which explains each of the features. There is some additional explanation about the feature-list variable itself in Feature List Variable. folder-collections This is a list of one or more collections where saved mail is stored. See the sections describing folder collections and collection syntax for more information. The first collection in this list is the default collection for Saves, including default-fcc's. folder-extension PC-Pine only. File extension used for local folder names. This is .MTX by default. font-name Winsock version of PC-Pine only. font-size Winsock version of PC-Pine only. font-style Winsock version of PC-Pine only. forced-abook-entry System-wide Pine configuration files only. Force these address book entries into all writable personal address books. This is a list variable. Each item in the list has the form: Nickname | Fullname | Address with optional whitespace in all the obvious places. global-address-book A list of shared address books. Each entry in the list is an optional nickname followed by a pathname or file name relative to the home directory. This list will be added to the address-book list to arrive at the complete set of address books. Global address books are defined to be ReadOnly. goto-default-rule This value affects Pine's behavior when using the Goto command. There are three possible values for this option: inbox-or-folder-in-recent-collection If the current folder is INBOX, Pine will offer the last open folder as the default. If the current folder is other than INBOX, INBOX is offered as the default. inbox-or-folder-in-first-collection The second accepted value is a variation on the default which again offers INBOX if it isn't currently open, but otherwise offers the most recently visited folder in the first collection found in the "Folder List" screen. most-recent-folder The last accepted value simply causes the most recently opened folder to be offered as the default regardless of the currently opened folder. NOTE: The default while a newsgroup is open remains the same; the last open newsgroup. image-viewer This variable names the program to call for displaying parts of a MIME message that are of type IMAGE. If your system supports the mailcap system, you don't need to set this variable. inbox-path This specifies the name of the folder to use for the INBOX. By default this is unset and the system's default is used. The most common reason for setting this is to open an IMAP mailbox for the INBOX. For example, {imap5.u.example.edu}inbox will open the user's standard INBOX on the mail server, imap5. incoming-archive-folders This is like read-message-folder, only more general. This is a list of folder pairs, with the first separated from the second in the pair by a space. The first folder in a pair is the folder you want to archive, and the second folder is the folder that read messages from the first should be moved to. Depending on how you define the auto-move-read-messages" feature, you may or may not be asked when you leave the first folder if you want read messages to be moved to the second folder. In either case, moving the messages means they will be deleted from the first folder. If these are not path names, they will be in the default collection for Saves. Any valid folder specification, local or remote (via IMAP), is allowed. There is no default. incoming-folders This is a list of one or more folders other than INBOX that may receive new messages. This list is slightly special in that it is always expanded in the folder lister. In the future, it may become more special. For example, it would be nice if Pine would monitor the folders in this list for new mail. incoming-startup-rule This rule affects Pine's behavior when opening the INBOX or another folder from the "INCOMING MESSAGE FOLDERS". This rule tells Pine which message to make the current message when an incoming folder is opened. There are three possible values for this option: first-unseen The current message will be the first unseen message which has not been marked deleted, or the last message if all of the messages have been seen. This is the default setting. first-recent This is similar to first-unseen. Instead of first unseen it is the first recent message. A message is considered to be recent if it arrived since the last time the folder was open (by any mail client, not just the current one). So this option causes the current message to be set to the first undeleted-recent message, or the last message if none is both undeleted and recent. first Set the current message to the first undeleted message unless all are deleted. In that case set it to the last message. last Set the current message to the last undeleted message unless all are deleted. In that case set it to the last message. index-format This option specifies the format that folder indexes are displayed in. Normally, the system figures out reasonable defaults for the widths of the columns of the index display. A non-standard display format can be used by listing special tokens in the order you want them to display. The tokens are STATUS, FULLSTATUS, MSGNO, DATE, SIZE, DESCRIPSIZE, SUBJECT, FROMORTO, FROM, and TO. The tokens are separated by spaces. Each of the tokens may also be optionally followed by parentheses with either a number or a percentage inside the parentheses. initial-keystroke-list This is a comma-separated list of keystrokes which Pine executes on startup. Items in the list are usually just characters, but there are some special values. SPACE, TAB, and CR mean a space character, tab character, and a carriage return, respectively. F1 through F12 stand for the twelve function keys. UP, DOWN, LEFT, and RIGHT stand for the arrow keys. Control characters are represented with ^. A restriction is that you can't mix function keys and character keys in this list even though you can, in some cases, mix them when running Pine. A user can always use only character keys in the startup list even if he or she is using function keys normally, or vice versa. If an element in this list is a string surrounded by double quotes (") then it will be expanded into the individual characters in the string, excluding the double quotes. kblock-passwd-count System-wide Pine configuration files only. Number of times a user will have to enter a password when they run the keyboard lock command in the main menu. last-time-prune-questioned Personal configuration file only. This variable records the month the user was last asked if his or her sent-mail folders should be pruned. The format is yy.mm. This is automatically updated by Pine when the the pruning is done or declined. If a user wanted to make Pine stop asking this question he or she could set this time to something far in the future. This may not be set in the system-wide configuration files. Note: The yy year is actually the number of years since 1900, so it will be equal to 101 in the year 2001. last-version-used Personal configuration file only. This is set automatically by Pine. It is used to keep track of the last version of Pine that was run by the user. Whenever the version number increases, a new version message is printed out. This may not be set in the system-wide configuration files. ldap-servers This is only available if Pine was linked with an LDAP library when it was compiled. This variable is normally managed by Pine though it can be set in the system-wide configuration files as well as the personal configuration. It is a list variable. Each item in the list contains quite a bit of extra information besides just the server name. To put this into a system-wide config file the easiest thing to do is to configure a personal Pine for the LDAP server then copy the configuration line into the system-wide config file. Each item in the list looks like: server_name[:port] "quoted stuff" The server_name is just a hostname and it is followed by an optional colon and port number. The default port is 389. Following the server name is a single SPACE character followed by a bunch of characters inside double quotes. The part inside the quotes is a set of tag = value pairs. Each tag is preceded by a slash (/) and followed by an equal sign. The value for that tag is the text up to the next slash. An example of some quoted stuff is: "/base=o=University of Washington, c=US/impl=0/.../nick=My Server" This would set the search base for this server to o=University of Washington, c=US, set the implicit bit to zero, and set the nickname for the server to My Server. All of the tags correspond directly to items in the Setup/Directory screen so experiment with that if you want to see what the possible tags and values are. mail-check-interval This option specifies, in seconds, how often Pine will check for new mail. If set to zero, new-mail checking is disabled. There is a minimum value, normally 15 seconds. A side effect of disabling mail checking is that there will be situations in which the user's IMAP connection will be broken due to inactivity timers on the server. Another side effect is that the user-input-timeout option won't work. mail-directory This variable was more important in previous versions of Pine. Now it is used only as the default for storing personal folders (and only if there are no folder-collections defined). The default value is ~/mail on UNIX and $HOME\MAIL on a PC. mailcap-search-path This variable is used to replace Pine's default mailcap file search path. It takes one or more file names (full paths must be specified) in which to look for mail capability data. mimetype-search-path This variable is used to replace Pine's default mime.types file search path. It takes one or more file names (full paths must be specified) in which to look for file-name-extension to MIME type mapping data. See the Config Notes for details on Pine's usage of the MIME.Types File. new-version-threshold When a new version of Pine is run for the first time it offers a special explanatory screen to the user upon startup. This option helps control when and if that special screen appears for users that have previously run Pine. It takes as its value a Pine version number. Pine versions less than the specified value will supress this special screen while versions equal to or greater than that specified will behave normally. news-active-file-path This option tells Pine where to look for the "active file" for newsgroups when accessing news locally, rather than via NNTP. The default path is usually /usr/lib/news/active. news-collections This is a list of collections where news folders are located. See the section describing collections for more information. news-spool-directory This option tells Pine where to look for the "news spool" for newsgroups when accessing news locally, rather than via NNTP. The default path is usually /usr/spool/news. newsrc-path This option overrides the default name Pine uses for your "newsrc" news status and subscription file. If set, Pine will take this value as the full pathname for the desired newsrc file. nntp-server One or more NNTP servers (host name or IP address) which Pine will use for reading and sending news. If you read and post news to and from a single NNTP server, you can get away with only setting the nntp-server variable and leaving the news-collections variable unset. normal-background-color PC-Pine only. Currently, Pine will accept the colors black, blue, green, cyan, red, magenta, yellow, or white. normal-foreground-color PC-Pine only. See normal-background-color for possible colors. operating-dir System-wide Pine configuration files only. This names the root of the tree to which the user is restricted when reading and writing folders and files. It is usually used in the fixed configuration file. personal-name Personal configuration file only. User's full personal name. On UNIX systems, the default is taken from the accounts data base (/etc/passwd). personal-print-category Personal configuration file only. This is the category that the default print command belongs to. There are three categories. Category 1 is an attached printer which uses the ANSI escape sequence, category 2 is the standard system print command, and category 3 is the set of custom printer commands defined by the user. This just helps Pine figure out where to put the cursor when the user runs the Setup/Printer command. This is not used by PC-Pine. personal-print-command Personal configuration file only. This corresponds to the third category in the printer menu, the personally selected print commands. This variable contains the list of custom commands that the user has entered in the Setup/Printer screen. This is not used by PC-Pine. postponed-folder The folder where postponed messages are stored. The default is postponed-msgs (Unix) or POSTPOND (PC). print-font-name Winsock version of PC-Pine only. print-font-size Winsock version of PC-Pine only. print-font-style Winsock version of PC-Pine only. printer Personal configuration file only. This is the current setting for a user's printer. This variable is set from Pine's Setup/Printer screen. pruned-folders This variable allows you to define a list of one or more folders that Pine will offer to prune for you in the same way it automatically offers to prune your sent-mail folder each month. That is, once a month for each folder listed, Pine will offer to move the contents of the folder to a new folder of the same name but with the previous month's date appended. Pine will then look for any such date-appended folder names created for a previous month, and offer each one it finds for deletion. If you decline the first offer, no mail is moved and no new folder is created. Folders listed are assumed to exist, and the archive folders will be created, in the first collection defined by the folder-collections variable. read-message-folder If set, mail in the INBOX that has been read but not deleted is moved here, or rather, the user is asked whether or not he or she wants to move it here upon quitting Pine. remote-abook-history Sets how many extra copies of remote address book data will be kept in each remote address book folder. The default is three. These extra copies are simply old versions of the data. Each time a change is made a new copy of the address book data is appended to the folder. Old copies are trimmed, if possible, when Pine exits. An old copy can be put back into use by deleting and expunging newer versions of the data from the folder. Don't delete the first message from the folder. It is a special header message for the remote address book and it must be there. This is to prevent regular folders from being used as remote address book folders and having their data destroyed. remote-abook-metafile Personal configuration file only. This is usually set by Pine and is the name of a file that contains data about remote address books. reply-indent-string This variable specifies an aspect of Pine's Reply command. When a message is replied to and the text of the message is included, that text usually has the string "> " prepended to each line to indicate quoting. This variable specifies a different value for that string. If you wish to use a string which begins or ends with a space, enclose the string in double quotes. You can also include the sender's name in the prepended string. The first occurrence of "_FROM_" in the reply-indent-string will be replaced with the "username" portion (part before the @) of the address being replied to. The normal default is "> ". reverse-background-color PC-Pine only. See normal-background-color for possible colors. reverse-foreground-color PC-Pine only. See normal-background-color for possible colors. rsh-command Sets the format of the command used to open a UNIX remote shell connection. The default is "%s %s -l %s exec /etc/r%sd". All four "%s" entries MUST exist in the provided command. The first is for the command's pathname, the second is for the host to connnect to, the third is for the user to connect as, and the fourth is for the connection method (typically imap). rsh-open-timeout Sets the time in seconds that Pine will attempt to open a UNIX remote shell connection. The default is 15, the minimum non-zero value is 5, and the maximum is unlimited. If this is set to zero rsh connections will be completely disabled. rsh-path Sets the name of the command used to open a UNIX remote shell connection. The default is tyically /usr/ucb/rsh. saved-msg-name-rule Determines default folder name when Saving. If set to default-folder (which is the default setting), then Pine will offer the folder "saved-messages" (UNIX) or "SAVEMAIL" (PC) for Saving messages. The default folder offered in this way may be changed by using the configuration variable default-saved-msg-folder. If this rule is set to last-folder-used, Pine offers to Save to the folder you last successfully Saved a message to (this session). The first time you Save a message in a session, Pine offers to Save the message to the default folder. Choosing any of the by- options causes Pine to attempt to get the chosen option's value for the message being Saved. For example, if by-from is chosen, Pine attempts to get the value of who the message came from (i.e. the from address). Pine then attempts to Save the message to a folder matching that value. If by-from is chosen and no value is obtained, Pine uses by-sender. The opposite is also true. If by-recipient was chosen and the message was posted to a newsgroup, Pine will use the newsgroup name. If any of the by-nick- options are chosen, the resulting address is looked up in the user's address books and if found, the nickname for that entry is used. Similarly, if any of the by-fcc- options are chosen, the fcc from the corresponding address book entry is used. If no value is found in the address book, then if the chosen option ends with the "-then-from", "-then-sender", or "-then-recip" suffix, Pine reverts to the same behavior as by-from, by-sender or by-recipient depending on which option was specified. If the chosen option doesn't end with one of the "then-" suffixes, then Pine reverts to the default folder when no match is found in the address book. scroll-margin This option controls when Pine's line-by-line scrolling occurs. Typically, when a selected item is at the top or bottom screen edge and the UP or DOWN (and Ctrl-P or Ctrl-N) keys are pressed, the displayed items are scrolled down or up by a single line. This option allows you to tell Pine the number of lines from the top and bottom screen edge that line-by-line scrolling should occur. For example, setting this value to one (1) will cause Pine to scroll the display when you move to select an item on the display's top or bottom edge (instead of moving when you move off the edge of the screen). By default, this variable is zero (0), indicating that scrolling happens when you move up or down to select an item immediately off the display's top or bottom edge. sending-filters This option defines a list of text-filtering commands (programs and scripts) that may be selectively invoked to process a message just before it is sent. If set, the Composer's ^X Send command will allow you to select which filter (or none) to apply to the message before it is sent. For security reasons, the full path of the filter program must be specified. See the online help text for further details. sendmail-path This names the path to an alternative program, and any necessary arguments, to be used in posting mail messages. See the section on SMTP and Sendmail for more details. signature-file Names the file to be included as the signature. This defaults to ~/.signature on UNIX and \PINE.SIG on a PC. smtp-server One or more SMTP servers (host name or IP address) which Pine will use for outgoing mail. If not set, Pine passes outgoing email to the sendmail program on the local machine. PC-Pine users must have this variable set in order to send mail as they have no sendmail program. An alternate port may be specified by appending :port to the host name or IP address. See the SMTP Servers section for details. sort-key This variable sets up the default Message Index sorting. The default is to sort by arrival order (the order the messages arrived in the folder). It has the same functionality as the -sort command line argument and the $ command in the "Folder Index". If a sort-key is set, then all folders open during the session will have that as the default sort order. speller This option affects the behavior of the ^T (spell check) command in the Composer. It specifies the program invoked by ^T in the Composer. By default, Pine uses the system's "spell" command. Pine will use the command defined by this option (if any) instead. When invoking the spell-checking program, Pine appends a tempfile name (where the message is passed) to the command line. standard-printer System-wide configuration file only. Specifies a list of commands for category 2 of the Setup/Printer screen, the standard print command section. This is not used by PC-Pine. status-message-delay If this is set to a positive number, it causes the cursor to move to the status line whenever a status message is printed and pause there for this many seconds. It will probably only be useful if the show-cursor feature is also turned on. Most users should leave this set to the default value of zero since its only effect is to slow things down. tcp-open-timeout Sets the time in seconds that Pine will attempt to open a network connection. The default is 30, the minimum is 5, and the maximum is system defined (typically 75). If a connection has not completed within this many seconds Pine will give up and consider it a failed connection. upload-command This option affects the behavior of the Composer's ^R (Read File) and ^J (Attach File, in the header) commands. It specifies a Unix program name, and any necessary command line arguments, that Pine can use to transfer files from your personal computer into messages that you are composing. upload-command-prefix This option is used in conjunction with the upload-command option. It defines text to be written to the terminal emulator (via standard output) immediately prior to starting the upload command. This is useful for integrated serial line file transfer agents that permit command passing (e.g., Kermit's APC method). url-viewers List of programs to use to open Internet URLs. This value affects Pine's handling of URLs that are found in the text of messages you read. Normally, only URLs Pine can handle directly are automatically offered for selection in the "Message Text" screen. When one or more comma delimited Web browsers capable of deciphering URLs on their command line are added here, Pine will choose the first available browser to display URLs it doesn't recognize. Additionally, to support various connection methods and browsers, each entry in this list can begin with the special token _TEST(test-string)_. The test-string is a shell command that Pine will run and which must exit with a status of zero for Pine to consider that browser for use (the other criteria is that the browser must exist as a full path or a path relative to your home directory). Now for an example: url-viewers=_TEST("test -n '${DISPLAY}'")_ /usr/local/bin/netscape, /usr/local/bin/lynx, C:\BIN\NETSCAPE.BAT This example shows that for the first browser in the list to be used the environment variable DISPLAY must be defined. If it is, then the file /usr/local/bin/netscape must exist. If either condition is not met, then the file /usr/local/bin/lynx must exist. If it doesn't, then the final path and file must exist. Note that the last entry is a DOS/Windows path. This is one way to support Pine running on more than one architecture with the same configuration file. use-only-domain-name Can be set to yes or no. Anything but yes means no. If set to yes the first label in the host name will be lopped off to get the domain name and the domain name will be used for outgoing mail and such. That is, if the host name is carson.u.example.edu and this variable is set to yes, then u.example.edu will be used on outgoing mail. Only meaningful if user-domain is NOT set. user-domain Sets the domain or host name for the user, overriding the system host or domain name. See the domain name section. user-id PC-Pine only and personal configuration file only. Sets the username that is placed on all outgoing messages. The username is the part of the address that comes before the "@". user-input-timeout If this is set to an integer greater than zero, then this is the number of hours to wait for user input before Pine times out. If Pine is in the midst of composing a message or is waiting for user response to a question, then it will not timeout. However, if Pine is sitting idle waiting for the user to tell it what to do next and the user does not give any input for this many hours, Pine will exit. No expunging or moving of read messages will take place. It will exit similarly to the way it would exit if it received a hangup signal. This may be useful for cleaning up unused Pine sessions which have been forgotten by their owners. The Pine developers envision system administrators setting this to a value of several hours (24?) so that it won't surprise a user who didn't want to be disconnected. viewer-hdrs You may change the default list of headers that are viewed by listing the headers you want to view here. If the headers in your viewer-hdrs list are present in the message, then they will be shown. The order of the headers you list will also be honored. If the special value all-except is included as the first header in the viewer-hdrs list, then all headers in the message except those in the list will be shown. The values are all case insensitive. viewer-overlap This option specifies an aspect of Pine's Message Viewing screen. When the space bar is used to page forward in a message, the number of lines specified by the viewer-overlap variable will be repeated from the bottom of the screen. That is, if this was set to two lines, then the bottom two lines of the screen would be repeated on the top of the next screen. The normal default value is "2". window-position Winsock version of PC-Pine only. Window position in the format: CxR+X+Yn Where C and R are the window size in characters and X and Y are the screen position of the top left corner of the window. _________________________________________________________________ Configuration Features There are several features (options) which may be turned off or on. The configuration variable feature-list is a list of all the features that are turned on or off. Listing the name of a feature in the list will turn it on. Listing the name of a feature with the characters no- prepended will turn the feature off. This is useful for overriding system-wide defaults. This is because, unlike all the other variables, the feature-list is additive. That is, first the system-wide feature-list is read and then the user's feature-list is read. This makes it possible for the system manager to turn some of the features on by default while still allowing the user to cancel that default. For example, if the system manager has turned on the allow-talk feature by default then a user may turn it back off by including the feature no-allow-talk in his or her personal configuration file. Of course, these details are usually handled by Pine when the user turns an option on or off from inside the Setup/Config screen. System managers should take some care when turning on features by default. Some of the documentation assumes that all of the features are off by default, so it could be confusing for a user if some are on by default instead. Here is the current list of possible features. allow-changing-from Prior to Pine 4.00 there was a compile-time option called ALLOW_CHANGING_FROM. That has been replaced by a runtime feature. If this feature is turned on then the From line can be changed just like all the other header fields that can be changed. See the configuration variables customized-hdrs and default-composer-hdrs for more information on editing headers. allow-talk Unix Pine only. By default, permission for others to talk to your terminal is turned off when you are running Pine. When this feature is set, permission is instead turned on. Note: The talk program has nothing to do with Pine or email. The talk daemon on your system will attempt to print a message on your screen when someone else is trying to contact you. If you wish to see these messages while you are running Pine, you should enable this feature. If you do enable this feature and see a talk message, you must suspend or quit Pine before you can respond. assume-slow-link This feature affects Pine's display routines. If set, the normal inverse-video cursor (used to highlight the current item in a list) will be replaced by an arrow cursor and other screen update optimizations for low-speed links (e.g. 2400 bps dialup connections) will be activated. This might be useful if you know you have a slow speed link but for some reason Pine doesn't know. auto-move-read-messages This feature controls an aspect of Pine's behavior upon quitting. If set, and the read-message-folder variable is also set, then Pine will automatically transfer all read messages from the INBOX to the designated folder and mark them as deleted in the INBOX. Messages in the INBOX marked with an N (meaning New, or unseen) are not affected. auto-open-next-unread This feature controls the behavior of the TAB key when traversing folders in the optional incoming-folders collection or in optional news-collections. When the TAB (Next New) key is pressed, and there are no more unseen messages in the current (incoming message or news) folder, Pine will search the list of folders in the current collection for one containing New or Recent (new since the last time the folder was opened) messages. By default, when such a folder is found, Pine will ask whether you wish to open the folder. If this feature is set, Pine will automatically open the folder without prompting. auto-unzoom-after-apply If set, and if you are currently looking at a Zoomed Index view of selected messages, the Apply command will do the operation you specify, but then will implicitly do an UnZoom, so that you will automatically be back in the normal Index view after the Apply. auto-zoom-after-select If set, the ; select command will automatically perform a Zoom after the select is complete. compose-cut-from-cursor If set, the ^K command in the composer will cut from the current cursor position to the end of the line, rather than cutting the entire line. compose-maps-delete-key-to-ctrl-d If set, Delete will be equivalent to ^D, and delete the current character. Normally Pine defines the Delete key to be equivalent to ^H, which deletes the previous character. compose-rejects-unqualified-addrs If set, unqualified names entered as addresses will be treated as errors unless they match an addressbook nickname or are looked up successfully on an LDAP server. Pine will not attempt to turn them into complete addresses by adding your local domain (which Pine normally does by default). A complete (fully-qualified) address is one containing a username followed by an @ symbol, followed by a host or domain name (e.g. jsmith@nowhere.edu). An unqualified name is one without the @ symbol and host or domain name (e.g. jsmith). compose-send-offers-first-filter If you have sending-filters configured, setting this feature will cause the first filter in the sending-filters list to be offered as the default instead of unfiltered, the usual default. compose-sets-newsgroup-without-confirm If you enter the composer while reading a news group, you will normally be prompted to determine whether you intend the new message to be posted to the current newsgroup or not. If this feature is set, Pine will not prompt you in this situation, and will assume that you do indeed wish to post to the newsgroup you are reading. delete-skips-deleted If set, this feature will cause the Delete command to advance past other messages that are marked deleted. In other words, pressing D will both mark the current message deleted and advance to the next message that is not marked deleted. disable-busy-alarm If set, the spinning bar that sometimes appears in the status line will not appear when Pine is busy. This might be useful if it is suspected that the alarm(2) system calls that Pine uses to implement the busy spinner are suspected of causing a problem. disable-config-cmd If set, the configuration screen Setup/Config will not be available at all. disable-keyboard-lock-cmd In the Main Pine menu there is a Keyboard locking command (KBLock). If this feature is set, that command won't be available to the user. disable-keymenu If set, the command key menu that normally appears on the bottom two lines of the screen will not usually be there. Asking for help with ^G or ? will cause the key menu to appear instead of causing the help message to come up. If you want to actually see the help text, another ^G or ? will show it to you. After the key menu has popped up with the help key it will remain there for an O Other command but will disappear if any other command is typed. disable-password-cmd If set the Newpassword command usually available under the Setup command will not be available. disable-signature-edit-cmd If set the Signature editing command usually available under the Setup command will not be available. disable-take-last-comma-first Normally, when TakeAddr is used to copy an address from a message into an address book, Pine will attempt to rewrite the full name of the address in the form: Last, First instead of First Last It does this because many people find it useful to sort by Last name instead of First name. If this feature is set, then the TakeAddr command will not attempt to reverse the name in this manner. enable-8bit-esmtp-negotiation This feature affects Pine's behavior when sending mail. Internet standards require that all electronic mail messages traversing the global Internet consist of 7bit ASCII characters unless a pair of cooperating mail transfer agents explicitly agree to allow 8bit messages. In general, then, exchanging messages in non-ASCII characters requires MIME encoding. However, there are now Internet standards that allow for unencoded 8bit exchange of messages between cooperating systems. Setting this feature tells Pine to try to negotiate unencoded 8bit transmission during the sending process. Should the negotiation fail, Pine will fall back to its ordinary encoding rules. Note, this feature relies on your system's mail transport agent or configured smtp-server having the negotiation mechanism introduced in "Extended SMTP" (ESMTP) and the specific extension called 8BITMIME. enable-8bit-nntp-posting The Internet standard for exchanging USENET news messages (RFC-1036) specifies that USENET messages should conform to Internet mail standards and contain only 7bit characters, but much of the news transport software in use today is capable of successfully sending messages containing 8bit characters. Hence, many people believe that it is appropriate to send 8bit news messages without any MIME encoding. Moreover, there is no Internet standard for explicitly negotiating 8bit transfer, as there is for Internet email. Therefore, Pine provides the option of posting unencoded 8bit news messages, though not as the default. Setting this feature will turn OFF Pine's MIME encoding of newsgroup postings that contain 8bit characters. Note, articles may cross a path or pass through news transport software that is unsafe or even hostile to 8bit characters. At best this will only cause the posting to become garbled. The safest way to transmit 8bit characters is to leave Pine's MIME encoding turned on, but recipients who lack MIME-aware tools are often annoyed when they receive MIME-encoded messages. enable-aggregate-command-set Setting this feature enables the commands and subcommands that relate to performing operations on more than one message at a time. We call these "aggregate operations". In particular, the ; Select, A Apply, and Z Zoom commands are enabled by this feature. Select is used to tag one or more messages meeting the specified criteria. Apply can then be used to apply any message command to all of the selected/tagged messages. Further, the Zoom command allows you to toggle the "Folder Index" view between just those Selected and all messages in the folder. This feature also enables the ^X subcommand in the "Folder Index" WhereIs command which causes all messages matching the WhereIs argument to become selected. You may also use aggregate operations in the address book screens where you are operating on address book entries instead of on messages. enable-alternate-editor-cmd If this feature is set, and the editor variable is not set, entering the ^_ (Control-underscore) key while composing a message will prompt you for the name of the editor you would like to use. If the environment variable $EDITOR is set, this value will be offered as a default. If the editor variable is set, the ^_ key will activate the specified editor without prompting, in which case it is not necessary to set the enable-alternate-editor-cmd feature. This feature is not available in PC-Pine. enable-alternate-editor-implicitly If this feature and the editor variable are both set, Pine will automatically activate the specified editor when the cursor is moved from the header of the message being composed into the message text. For replies, the alternate editor will be activated immediately. If this feature is set but the editor variable is not set, then Pine will automatically ask for the name of an alternate editor when the cursor is moved out of the headers, or if a reply is being done. This feature is not available in PC-Pine. enable-arrow-navigation If set the left and right arrow keys will operate like the usual navigation keys < and >. enable-background-sending If set, this feature enables a subcommand in the composer's Send? confirmation prompt. The subcommand allows you to tell Pine to handle the actual posting in the background. While this feature usually allows posting to appear to happen very fast, it has no affect on the actual delivery time it takes a message to arrive at its destination. This feature isn't supported on all systems. All DOS and Windows, as well as several Unix ports, do not recognize this feature. Error handling is significantly different when this feature is enabled. Any message posting failure results in the message being appended to your Interrupted mail folder. When you type the Compose command, Pine will notice this folder and offer to extract any messages contained. Upon continuing a failed message, Pine will display the nature of the failure in the status message line. Under extreme conditions, it is possible for message data to get lost. Do not enable this feature if you typically run close to any sort of disk-space limits or quotas. enable-bounce-cmd Setting this feature enables the B Bounce command, which will prompt for an address and remail the message to the new recipient. This command is used to re-direct messages that you have received in error, or need to be redirected for some other reason (e.g. list moderation). The final recipient will see a header indicating that you have Resent the msg, but the message's From: header will show the original author of the message, and replies to it will go back to that author, and not to you. enable-cruise-mode This feature affects Pine's behavior when you hit the "Space Bar" at the end of a displayed message. Typically, Pine complains that the end of the text has already been reached. Setting this feature causes such keystrokes to be interpreted as if the Tab key had been hit, thus taking you to the next interesting message, or scanning ahead to the next incoming folder with interesting messages. enable-cruise-mode-delete This feature modifies the behavior of Pine's enable-cruise-mode feature. Setting this feature causes Pine to implicitly delete read messages when it moves on to display the next interesting message. NOTE: Beware when enabling this feature and the expunge-without-confirm feature. enable-delivery-status-notification If set, this feature enables a subcommand in the composer's "Send?" confirmation prompt. The subcommand allows you to tell Pine to request the type of Delivery Status Notification (DSN) which you would like. Most users will be happy with the default, and need not enable this feature. See the online help for more details. Note that this is not a method to request READ receipts, which tells the sender when the receiver has read the message. In this case we're talking about notification of delivery to the mailbox, not notification that the message has been seen. enable-dot-files If set, files beginning with dot (".") will be visible in the file browser. For example, you'll be able to select them when using the browser to add an attachment to a message. enable-dot-folders If set, folders beginning with dot (".") may be added and viewed. enable-exit-via-lessthan-command If set, then on screens where there is an Exit command but no < command, the < key will perform the same function as the Exit command. enable-fast-recent-test If set, the TAB key behavior in Incoming folders or News collections is modified. By default, the TAB will cause each folder in the Incoming folders collection (or in the news collection) to be examined to see how many new messages have been delivered since the last time it was viewed. If this feature is set, the check is for any recent messages instead of the count of recent messages. This is much faster in many cases. enable-flag-cmd Setting this feature enables the * Flag command, which allows you to manipulate the status flags associated with a message. By default, Flag will set the Important flag, which results in an asterisk being displayed in column one of the "Folder Index" for such messages. enable-flag-screen-implicitly This feature modifies the behavior of the * Flag command (provided it too is enabled). By default, when the * Flag command is selected, Pine offers a prompt to set one of several flags and also offers the option of entering the detailed flag manipulation screen via the ^T key. Enabling this feature causes Pine to immediately enter the detailed flag screen rather than first offer the simple prompt. enable-full-header-cmd This feature enables the H Full Headers command which toggles between the display of all headers in the message and the normal edited view of headers. The Full Header command also controls which headers are included for Export, Pipe, Print, Forward, and Reply functions. (For Reply, the Full Header mode will respect the include-headers-in-reply feature setting.) enable-goto-in-file-browser Setting this causes Pine to offer the G Goto command in the file browser. This command allows you to explicitly set the displayed directory. Pine's default behavior requires you to visit each related directory when moving between two distant directories. enable-incoming-folders If set, this feature defines a pseudo-folder collection called INCOMING MESSAGE FOLDERS. Initially, the only folder included in this collection will be your INBOX, which will no longer show up in your default saved-message folder collection. enable-jump-shortcut Setting this feature will allow you to enter a number (followed by RETURN) and jump to that message number, when in the "Folder Index" or "Message Text" screens. In other words, it obviates the need for typing the J for the Jump command. enable-mail-check-cue If set, this will cause an asterisk to appear in the upper left-hand corner of the screen whenever Pine checks for new mail, and two asterisks whenever Pine saves (checkpoints) the state of the current mailbox to disk. enable-mouse-in-xterm This feature controls whether or not an X terminal mouse can be used with Pine. If set, and the $DISPLAY variable indicates that an X terminal is being used, the left mouse button on the mouse can be used to select text or commands. Note: if this feature is set, the behavior of X terminal cut-and-paste is also modified. It is necessary to hold the shift key down while clicking left or middle mouse buttons for the normal xterm cut/paste operations. enable-msg-view-attachments This feature modifies the behavior of Pine's "Message Text" screen. Setting this feature causes Pine to present attachments in boldface. The first available attachment is displayed in inverse. This is the "selected" attachment. Pressing RETURN will cause Pine to display the selected attachment. Use the up and down arrow keys to change which of the attachments displayed in boldface is the current selection. Speaking of arrow keys, the Up and Down Arrows will select the next and previous attachments if one is available on the screen for selection. Otherwise, they will simply adjust the viewed text one line up or down. Similarly, when selectable items are present in a message, the Ctrl-F key can be used to select the next item in the message independent of which portion of the viewed message is currently displayed. The Ctrl-B key can be used to select the previous item in the same way. enable-msg-view-urls This feature modifies the behavior of Pine's "Message Text" screen. Setting this feature causes Pine to select possible URL's from the displayed text and display them in boldface for selection. The first available URL is displayed in inverse. This is the "selected" URL. Pressing RETURN will cause Pine to display the selected URL via either built-in means as with mailto:, imap:, news:, and nntp:, or via an external application as defined by the url-viewers variable. Use the up and down arrow keys to change which of the URLs displayed in boldface is the current selection. enable-msg-view-web-hostnames This feature modifies the behavior of Pine's "Message Text" screen. Setting this feature causes Pine to select possible web hostnames from the displayed text and display them in boldface for selection. The first available hostname is displayed in inverse. This is the "selected" hostname. Pressing RETURN will cause Pine to display the selected hostname via an external application as defined by the url-viewers variable. Use the up and down arrow keys to change which of the hostnames displayed in boldface is the current selection. enable-msg-view-forced-arrows This feature modifies Up and Down arrow key behavior in Pine's "Message Text" screen when selectable Attachments, URL's, or web-hostnames are presented. Pine's usual behavior is to move to the next or previous selectable item if currently displayed or simply to adjust the screen view by one line if the next selectable line is off the screen. Setting this feature causes the Up and Down arrow keys to behave as if no selectable items were present in the message. Note, the Ctrl-F (next selectable item) and Ctrl-B (previous selectable item) functionality is unchanged. enable-newmail-in-xterm-icon This feature controls whether or not Pine will attempt to announce new mail arrival when it is running in an X terminal window and that window is iconified. If set, and the $DISPLAY variable indicates that an X terminal is being used, Pine will send appropriate escape sequences to the X terminal to modify the label on Pine's icon to indicate that new mail has arrived. enable-print-via-y-command By default, Pine's print command is available by pressing the % key. In recent versions prior to 4.00, the print command was accessed by pressing the Y key. Enabling this feature will cause Pine to recognize both the old command, Y, and the new % method for invoking printing. Note, key menu labels are not changed as a result of enabling this feature. enable-reply-indent-string-editing This feature affects the Reply command's "Include original message in Reply?" prompt. When enabled, it causes the "Edit Indent String" sub-command to appear which allows you to edit the string Pine would otherwise use to denote included text from the message being replied to. NOTE: Edited reply-indent-strings only apply to the message currently being replied to. enable-search-and-replace If set Pine's composer offers the R Replace command option inside the W WhereIs command. enable-sigdashes If set and a signature-file exists, the line consisting of the three characters "-- " (dash dash space) is included before the signature. enable-suspend Setting this feature will allow you to type ^Z and temporarily suspend Pine. Not available on PC-Pine. enable-partial-match-lists This feature affects the subcommands available when Saving or Opening a new folder. If set, the subcommand ^X ListMatches will be available. This command allows you to type in a substring of the folder you are looking for and when you type ^X it will display all folders which contain that substring in their names. enable-tab-completion This feature enables the TAB key when at a prompt for a filename. In this case, TAB will cause the partial name already entered to be automatically completed, provided the partial name is unambiguous. enable-unix-pipe-cmd This feature enables the | Pipe command that sends the current message to the specified Unix command for external processing. Not available on PC-Pine. enable-verbose-smtp-posting This feature controls an aspect of Pine's message sending. When enabled, Pine will send a VERB (i.e., VERBose) command early in the posting process intended to cause the server SMTP to provide a more detailed account of the transaction. This feature is typically only useful to system administrators and other support personel as an aid in troublshooting problems. Note, this feature relies on a specific capability of the system's mail transport agent or configured smtp-server. expanded-view-of-distribution-lists If this feature is set, then distribution lists in the address book screen will always be expanded automatically. expunge-without-confirm If set, you will not be prompted to confirm your intent before the expunge takes place. Actually, you will still be prompted for confirmation if the folder is not the INBOX folder or another folder in the Incoming Folders collection. See the expunge-without-confirm-everywhere feature which follows. expunge-without-confirm-everywhere The regular expunge-without-confirm feature actually only works for the INBOX folder and for other folders in the "Incoming Folders" collection. If this feature is set then you also won't be prompted to confirm expunges for all other folders. fcc-on-bounce If set, normal Fcc (File Carbon Copy) processing will be done for bounced messages, just as if you had composed a message to the address you are bouncing to. If not set, no Fcc of the message will be saved. include-attachments-in-reply If set, any MIME attachments that were part of the original message will automatically be included in a Reply. include-header-in-reply If set, and a message being replied to is included in the Reply, then headers from that message will also be part of the reply. include-text-in-reply Normally, Pine will ask whether you wish to include the original message in your Reply. If this feature is set, the original message will be included in the reply automatically, without prompting. news-approximates-new-status This feature causes certain messages to be marked as New in the "Folder Index" of news groups. When opening a news group, Pine will consult your newsrc file and determine the last message you have previously disposed of via the D key. If this feature is set, any subsequent messages will be shown in the Index with an N, and the first of these messages will be highlighted. Although this is only an approximation of true New or Unseen status, it provides a useful cue to distinguish more-or-less recent messages from those you have seen previously, but are not yet ready to mark deleted. Background: your newsrc file (used to store message status information for news groups) is only capable of storing a single flag, and Pine uses this to record whether or not you are "done with" a message, as indicated by marking the message as Deleted. Unfortunately, this means that Pine has no way to record exactly which messages you have previously seen, so it normally does not show the N status flag for any messages in a news group. This feature enables a starting approximation of seen/unseen status that may be useful. news-post-without-validation This feature controls whether the NNTP server is queried as news groups are entered for posting. Validation over slow links (e.g. dialup using SLIP or PPP) can cause delays. Set this feature to eliminate such delays. news-read-in-newsrc-order This feature controls the order that news groups will be presented. If set, they will be presented in the same order as they occur in your newsrc file. If not set, the newsgroups will be presented in alphabetical order. pass-control-characters-as-is If set, all characters in a message will be sent to the screen. Normally, control characters are automatically suppressed in order to avoid inadvertently changing terminal setup parameters. preserve-start-stop-characters This feature controls how special control key characters, typically ^S and ^Q, are interpreted when input to Pine. These characters are known as the "start" and "stop" characters and are sometimes used in communications paths to control data flow between devices that operate at different speeds. By default, Pine turns the system's handling of these special characters off except during printing. However, if you see Pine reporting input errors such as: [ Command "^Q" not defined for this screen. ] and, at the same time, see your display become garbled, then it is likely that setting this option will solve the problem. Be aware, though, that enabling this feature will also cause Pine to ostensibly "hang" whenever the Ctrl-S key combination is entered as the system is now interpreting such input as a "stop output" command. To "start output" again, simply type Ctrl-Q. print-offers-custom-cmd-prompt When this feature is set, the Print command will have an additional subcommand called C CustomPrint. If selected, you will have the opportunity to enter any system print command, instead of being restricted to using those that have been previously configured in the Setup/Printer screen. print-includes-from-line If this feature is set, then the Unix mail style From line is included at the start of each message that is printed. This line looks something like the following, with the address replaced by the address from the From line of the message being printed: From user@domain.somewhere.com Mon May 13 14:11:06 1996 print-index-enabled This feature controls the behavior of the Print command when in the "Folder Index" screen. If set, the Print command will give you a prompt asking if you wish to print the message index, or the currently highlighted message. If not set, the message will be printed. print-formfeed-between-messages Setting this feature causes a formfeed to be printed between messages when printing multiple messages with the Apply Print command. quell-dead-letter-on-cancel This feature affects Pine's behavior when you cancel a message being composed. Pine's usual behavior is to write the canceled message to a file named dead.letter in your home directory (under UNIX; DEADLETR under WINDOWS/DOS) overwriting any previous message. Under some conditions (some routine), this can introduce a noticeable delay. Setting this feature will cause Pine NOT to write canceled compositions into the file called dead.letter. quell-lock-failure-warnings This feature affects Pine's behavior when it encounters a problem acquiring a mail folder lock. Typically, a secondary file associated with the mail folder being opened is created as part of the locking process. On some systems, such file creation has been administratively precluded by the system configuration. Pine issues a warning when such failures occur, which can become bothersome if the system is configured to disallow such actions. Setting this feature causes Pine to remain silent when this part of lock creation fails. WARNING: systems that have been configured in a way that precludes locking introduce some risk of mail folder corruption when more than one program attempts to modify the mail folder. This is most likely to occur to one's INBOX or other "Incoming Message Folder". quell-status-message-beeping If set status messages will never emit a beep. quell-user-lookup-in-passwd-file This feature controls an aspect of Pine's Composer, and if needed, will usually be set by the system manager in Pine's system-wide configuration file. Specifically, if this feature is set, Pine will not attempt to look in the system password file to find a Full Name for the entered address. Normally, names you enter into address fields (e.g. To: or Cc:) are checked against your address book(s) to see if they match an address book nickname. Failing that, (in Unix Pine) the name is then checked against the Unix password file. If the entered name matches a username in the system password file, Pine extracts the corresponding Full Name information for that individual, and adds that to the address being entered. However, password file matching can have surprising (incorrect) results if other users of the system do not receive mail at the domain you are using. That is, if either the user-domain or use-only-domain-name option is set such that the administrative domain of other users on the system isn't accurately reflected, Pine should be told that a password file match is coincidental, and Full Name info will be incorrect. For example, a personal name from the password file could get falsely paired with the entered name as it is turned into an address in the configured domain. If you are seeing this behavior, enabling this feature will prevent Unix Pine from looking up names in the password file to find the Full Name for incomplete addresses you enter. quell-partial-fetching Partial fetching is a feature of the IMAP protocol. By default, Pine will use partial fetching when copying the contents of a message or attachment from the IMAP server to Pine. This means that the fetch will be done in many small chunks instead of one big chunk. The main benefit of this approach is that the fetch becomes interruptible. That is, the user can type ^C to stop the fetch early. In some cases partial fetching may cause a performance problem so that the fetching of data takes significantly longer when partial fetching is used. Turning on this feature will turn off partial fetching. quit-without-confirm This feature controls whether or not Pine will ask for confirmation when a Quit command is received. reply-always-uses-reply-to If set, Pine will not prompt when a message being replied to contains a Reply-To: header value, but will simply use its value (as opposed to using the From: field's value). save-aggregates-copy-sequence This feature will optimize an aggregate copy operation, if possible, by issuing a single IMAP COPY command with a list of the messages to be copied. This may save network traffic when the source and destination folders are on the same IMAP server. However, many IMAP servers (including the UW IMAP server) do not preserve the order of messages when this optimization is applied. If this feature is not enabled, or if the folders are on different IMAP servers, or the folders are local and in different formats, Pine will copy each message individually. save-will-quote-leading-froms This feature controls an aspect of the Save command (and also the way outgoing messages are saved to an FCC folder). If set, Pine will add a leading > character in front of message lines beginning with "From" when they are saved to another folder, including lines syntactically distinguishable from the type of message separator line commonly used on Unix systems. The default behavior is that a > will be prepended only to lines beginning with "From " that might otherwise be confused with a message separator line on Unix systems. If Pine is the only mail program you use, this default is reasonable. If another program you use has trouble displaying a message with an unquoted From saved by Pine, you should enable this feature. This feature only applies to the common Unix mailbox format that uses message separator lines beginning with "From ". If Pine has been configured to use a different mailbox format (possibly incompatible with other mail programs), then this issue does not arise, and the feature is irrelevant. save-will-not-delete If set, Save will not mark the message Deleted (its default behavior) after it has been copied to the designated folder. save-will-advance If set, Save will (in addition to copying the current message to the designated folder) also advance to the next message. select-without-confirm This feature controls an aspect of Pine's Save, Export, and Goto commands. These commands all take text input to specify the name of the folder or file to be used, but allow you to press ^T for a list of possible names. If set, the selected name will be used immediately, without further opportunity to confirm or edit the name. show-cursor If set, the system cursor will move to convenient locations in the displays. For example, to the beginning of the status field of the highlighted index line, or to the highlighted word after a successful WhereIs command. It is intended to draw your attention to the interesting spot on the screen. show-selected-in-boldface This feature controls an aspect of Pine's aggregate operation commands; in particular, the Select and WhereIs commands. Select and WhereIs (with the ^X subcommand) will search the current folder for messages meeting a specified criteria, and tag the resulting messages with an X in the first column of the applicable lines in the "Folder Index". If this feature is set, instead of using the X to denote a selected message, Pine will attempt to display those index lines in boldface. Whether this is preferable to the X will depend on personal taste and the type of terminal being used. signature-at-bottom If this feature is set, and a message being Replied to is being included in the reply, then the contents of the signature file (if any) will be inserted after the included message, and the cursor will also be positioned after the included text. This feature does not affect the results of a Forward command. single-column-folder-list If set, the "Folder List" screen will list one folder per line instead of several per line. tab-visits-next-new-message-only This feature affects Pine's behavior when using the TAB key to move from one message to the next. Pine's usual behavior is to select the next Unread message or message flagged as Important. Setting this feature causes Pine to skip the messages flagged as Important, and select Unread messages exclusively. Tab behavior when there are no new messages left to select remains unchanged. termdef-takes-precedence In some versions of Pine before 4.00 there was a compile-time macro called TERMCAP_WINS which could be set to cause the termcap or terminfo definitions to be used instead of the built in definitions. Beginning with 4.00 this hidden runtime feature can be turned on to accomplish the same thing. use-current-dir This feature controls an aspect of several commands. If set, your "current working directory" will be used instead of your home directory for all of the following operations: + Export in the "Folder Index" and "Message Text" screens + Attachment Save in the "Message Text" and "Attachment Text" screens + ^R file inclusion in the Composer + ^J file attachment in the Composer use-function-keys This feature specifies that Pine will respond to function keys instead of the normal single-letter commands. In this mode, the key menus at the bottom of each screen will show function key designations instead of the normal mnemonic key. use-sender-not-x-sender Normally Pine adds a header line labeled X-Sender, if the sender is different from the From: line. The standard specifies that this header line should be labeled Sender, not X-Sender. Setting this feature causes Sender to be used instead of X-Sender. use-subshell-for-suspend This feature affects Pine's behavior when process suspension is enabled and then activated via the ^Z key. Pine suspension allows one to temporarily interact with the operating system command "shell" without quitting Pine, and then subsequently resume the still-active Pine session. When the enable-suspend feature is set and subsequently the ^Z key is pressed, Pine will normally suspend itself and return temporary control to Pine's parent shell process. However, if this feature is set, Pine will instead create an inferior subshell process. This is useful when the parent process is not intended to be used interactively. Examples include invoking Pine via the -e argument of the Unix xterm program, or via a menu system. Note that one typically resumes a suspended Pine by entering the Unix fg command, but if this feature is set, it will be necessary to enter the exit command instead. Hidden Config Variables and Features There are several configuration variables and features which are "hidden" from the user. That is, they don't appear on any of the configuration screens. Some of these are suppressed because they are intended to be used by system administrators, and in fact may only be set in system-wide configuration files. Others are available to users but are thought to be of such little value to most users that their presence on the Config screens would cause more confusion than help. Those features may only be set by hand editing the configuration file. Hidden Variables Not Settable by Users These variables are settable only in system-wide configuration files. * bugs-additional-data * bugs-address * bugs-fullname * forced-abook-entry * kblock-passwd-count * local-address * local-fullname * mail-directory * standard-printer * suggest-address * suggest-fullname Hidden Variables Which are Settable by Users These variables are not shown to users but are settable by means of hand editing the personal configuration file. This first group is usually maintained by Pine and there should be no reason to edit them. * last-version-used * remote-abook-metafile This group is usually correct but may be changed by system managers or users in special cases. * disable-these-drivers * last-time-prune-questioned * new-version-threshold * remote-abook-history * rsh-command * rsh-open-timeout * rsh-path * sendmail-path * tcp-open-timeout * use-function-keys System managers are usually interested in setting these in the system-wide configuration files, though users may set them if they wish. * operating-dir * user-input-timeout Hidden Features Which are Settable by Users These are features (as opposed to variables) which users or system administrators may set. Some of them only make sense for administrators. * allow-changing-from * disable-busy-alarm * disable-config-cmd * disable-keyboard-lock-cmd * disable-password-cmd * disable-signature-edit-cmd * quell-partial-fetching * save-aggregates-copy-sequence * termdef-takes-precedence Retired Variables Variables that are no longer used by the current Pine version. When an obsolete variable is encountered, its value is applied to any new corresponding setting and a comment is place before it noting that it is no longer in used. The replaced values at the time of this document include: elm-style-save Replaced by saved-msg-name-rule feature-level Replaced by feature-list. header-in-reply Replaced by include-header-in-reply in the feature-list. old-style-reply Replaced by signature-at-bottom in the feature-list. save-by-sender Replaced by saved-msg-name-rule. show-all-characters No replacement, it always works this way now. expanded-view-of-addressbooks No replacement, address book screens are hierarchical now. expanded-view-of-folders No replacement, folder list screens are hierarchical now. _________________________________________________________________ Notes on Configuration and Preferences Pine in Function Key Mode The standard Pine uses alphabetic keys for most commands, and control keys in the composer. Despite possible appearances, the current bindings are the result of much discussion and thought. All the commands in the composer are single control characters. This keeps things very neat and simple for users. Two character commands in the composer are a possibility, but we're trying to avoid them because of the added complexity for the user. Pine can also operate in a function-key mode. To go into this mode invoke pine -k or (on some UNIX systems) pinef. On a UNIX system, you can link or copy the Pine executable to pinef to install pinef. Alternatively, users and systems administrators can set the use-function-keys feature in the personal or system-wide Pine configuration file. The command menus at the bottom of the screen will show F1-F12 instead of the alphabetic commands. In addition, the help screens will be written in terms of function keys and not alphabetic keys. One of the results of using Pine in function-key mode is that users can only choose from twelve commands at any given time. In alphabetic-key mode, a user can press a key for a command (say, q to quit) and that command can be fulfilled. In function-key mode, the command must be visible on the bottom key-menu in order to be used. There are some screens where four screens of commands are operational; function-key users can get to all of them, just not all at once. _________________________________________________________________ Domain Settings Pine uses the default domain for a few different tasks. First, it is tacked onto the user-id for outgoing email. Second, it is tacked onto all "local" (unqualified) addresses in the "To:" or "Cc:" fields of messages being composed (unless they are found in the address book or on an LDAP server). The domain name is also used to generate message-id lines for each outgoing message and to allow Pine to check if an address is that of the current Pine user. Pine determines the domain name according to whichever of these it finds. The list here is in decreasing order of precedence. 1. Value of the variable user-domain in the system fixed configuration file 2. Value of the variable user-domain in the personal configuration file 3. Value of the variable user-domain in the system-wide configuration file 4. Value from an external database (DNS, /etc/hosts, NIS) as modified by a system fixed configuration file if use-only-domain-name set to yes 5. Value from an external database (DNS, /etc/hosts, NIS) as modified by a personal configuration file if use-only-domain-name set to yes 6. Value from an external database (DNS, /etc/hosts, NIS) as modified by a system configuration file if use-only-domain-name set to yes 7. Unmodified value (host name) from an external database The easiest way for this system to work is for PC-Pine users and UNIX Pine system administrators to set the user-domain variable. The variable use-only-domain-name is helpful if your site supports/requires hostless addressing, but for some reason you don't want to use the user-domain variable. _________________________________________________________________ Syntax for Collections In many environments, it is quite common to have collections of archived mail on various hosts around the network. Using the folder collections facility in Pine, access to these archives is just as simple as access to folders on Pine's local disk. "Collection" is the word we use in Pine to describe a set of folders. A collection corresponds loosely to a "directory" containing mail folders. Folders within a defined collection can be manipulated (opened, saved-to, etc) using just their simple name. Any number of folder collections can be defined, and Pine will adjust its menus and prompts to help navigate them. The way collections are defined in Pine is with the folder-collections variable in the Pine configuration file. Folder-collections takes a list of one or more collections, each (optionally) preceded by a user-defined logical name (label). Once collections are defined, Pine adjusts its menus and behavior to allow choosing files by their simple name within the collection. Consider the following: folder-collections= Local-Mail C:\MAIL\[], Remote-Mail {imap.u.example.edu}mail/[] The example shows two collections defined (a comma separated list; newlines in the list are OK if there's one or more spaces before the next entry), one local and one remote. Each collection is a space-delimited pair of elements-first an optional logical-name and second the collection specifier. The logical-name can have spaces if it has quotes around it (but keeping the logical name short and descriptive works best). Pine will use the logical-name (if provided) to reference all folders in the collection, so the user never has to see the ugliness of the collection specifier. The collection specifier can be thought of as an extended IMAP format (see the Remote Folders section for a description of IMAP format names). Basically, a pair of square-brackets are placed in the fully qualified IMAP path where the simple folder name (the part without the host name and path) would appear. Like IMAP, the path can be either fully qualified (i.e., with a leading '/') or relative to your home directory. An advanced feature of this notation is that a pattern within the square brackets allows the user to define a collection to be a subset of a directory. For example, a collection defined with the specifier: M-Mail C:MAIL/[m*] will provide a view in the folder lister of all folders in the PC's "C:MAIL" directory that start with the letter 'm' (case insensitive under DOS, of course). Further, the wildcard matching will honor characters trailing the '*' in the pattern. From within Pine, the "Folder List" display will be adjusted to allow browsing of the folders in any defined collection. Even more, you'll notice in the Goto and Save commands a pair of sub-commands to rotate through the list of logical collection names, so only a simple name need be input in order to operate on a folder in any collection. The first collection specified in the folder-collections has special significance. That folder is the "default collection for saves". By default, in cases where the user does not specify which collection should be used to Save a message, the default collection for saves will be used. Also, if the default-fcc's is a relative file name, then it is relative to the default collection for saves. (See also saved-msg-name-rule. The notion of collections encompasses both email folders and news reading. The variable news-collections uses nearly the same format as folder-collections. Newsgroups can be defined for convenient access via either IMAP or NNTP. There are advantages and disadvantages to both access methods. In the IMAP case, your news environment state is maintained on the server and, thus, will be seen by any client. The downside is that, at the moment, you must have an account on the server. In the NNTP case, server access is mostly anonymous and no state/accounting need be maintained on it. The downside is that each client, for now, must individually maintain news environment state. An example pinerc entry might be: news-collections= Remote-State {news.u.example.edu}#news.[], Local-State {news.u.example.edu/nntp}#news.[] Only newsgroups to which you are subscribed are included in the collection. The pattern matching facility can be applied so as to define a news collection which is a subset of all the newsgroups you subscribe to. For example, this could be a valid collection: Newsfeed-News {news.u.example.edu/nntp}#news.[clari.* ] Collection handling is a tough problem to solve in a general way, and the explanation of the syntax is a bit ugly. The upside is, hopefully, that for a little complexity in the Pine configuration file you get simple management of multiple folders in diverse locations. As of Pine 4.00, collection setup is handled by the Setup/collectionList screen instead of requiring hand editing of the configuration file. _________________________________________________________________ Syntax for Remote Folders Remote folders are distinguished from local folders by a leading host name bracketed by '{' and '}'. The path and folder name immediately following the closing bracket, '}', is interpreted by the IMAP server and is in a form compatible with that server (i.e., path delimiters and naming syntax relative to that server). Typically, a folder name without any path description is understood to reside in the user's "home directory" (i.e., in some way the user's personal, writable file area), as are incomplete path designations. However, the IMAP specification does not require that unqualified folder names live in one's home directory, so some IMAP servers may require fully qualified names. An example of a remote folder specification would be, {mailhost.cac.washington.edu}mail/saved-messages This example simply specifies a folder named ``saved-messages'' on the imap server ``mailhost.cac.washington.edu'', in the ``mail'' subdirectory of the user's home directory. Easy isn't it? To confuse things a bit, qualifiers are permitted within the brackets following the host name. These qualifiers consist of a slash ('/') character followed by a keyword or keyword and value, and have the effect of modifying how the connection is made to the host specified. An example of such a specification might be, {news.u.washington.edu/nntp}#news.comp.mail.mime This specifies an altogether different access method: access via the Network News Transport Protocol (NNTP). Some other possible qualifiers are /user=username, which says to login as user username; /secure, which says to require Kerberos 5 to login; imap; pop3; and anonymous. There is also an optional :portnum following the hostname. This would specify a non-standard port number to connect to. _________________________________________________________________ Sorting a Folder The mail index may be sorted by subject, size, from, to, cc, date, or arrival order. Each sort order can also be reversed. The $ command will prompt the user for the sort order. The sort order can also be specified on the command line with the -sort flag or (equivalently) with the sort-key variable in the pinerc file. When a user changes folders, the sort order will go back to the original sort order. The command line (-sort) or configuration file sort specification (sort-key) changes the original sort order. When a folder is sorted and new mail arrives in the folder it will be inserted in its properly sorted place. This can be a little odd when the folder is sorted by something like the subject. It can also be a little slow if you are viewing a large, sorted INBOX, since the INBOX will have to be re-sorted whenever new mail arrives. The sorts are all independent of case and ignore leading or trailing white space. There are actually two forms of subject sort. One called Subject and the other called OrderedSubj. They both ignore "Re:" at the beginning and "(fwd)" at the end of the subjects. Subject sorts all the subjects alphabetically. OrderedSubj sorts by subjects alphabetically, groups messages with the same subject (pseudo-threads), then sorts the groups by the date of the first message of the group. The sort by sender sorts by the user-id (part before the "@"), not the full name. The arrival sort is basically no sort at all and the date sort depends on the format of the date. Some dates are in strange formats and are unparsable. The time zone is also taken into account. Sorting large mail folders can be very slow since it requires fetching all the headers of the mail messages. With UNIX Pine, only the first sort is slow since Pine keeps a copy of all the headers. One exception is sorting in reverse arrival order. This is fast because no headers have to be examined. Pine will show progress as it is sorting. _________________________________________________________________ Alternate Editor In the Pine composer you can use any text editor, such as vi or emacs, for composing the message text. The addresses and subject still must be edited using the standard Pine composer. If you include the feature enable-alternate-editor-cmd in your pinerc you can type ^_ while in the body of the message in the composer and be prompted for the editor. If you also set the editor variable in your pinerc then ^_ will invoke the configured editor when you type it. Turning on the feature enable-alternate-editor-implicitly will automatically invoke the editor you have defined with the editor variable whenever you enter the body of a message you are composing. For example, when you move out of the last header line and into the body of the message, the alternate editor will be automatically invoked. We know that many people would like to use the alternate editor to edit the mail header as well. We considered several designs for this and didn't come up with one that we liked and that was easy to implement. One of the main problems is that you lose access to the address book. _________________________________________________________________ Signatures and Signature Placement If the file ~/.signature (UNIX) or \PINE.SIG (PC) exists, it will be included in all outgoing messages. It is included before composition starts so that the user has a chance to edit it out if he or she likes. The file name for the signature can be changed by setting the signature-file variable in the pinerc. If the feature enable-sigdashes is turned on then the line consisting of the three characters "-- " is prepended to the signature file. There is no way to have Pine include different signatures in different outgoing messages automatically. You can do this by hand, however, by having multiple signature files (.sig1, .sig2, .sig3, etc) and choosing to include (^R in the composer) the correct one for the message being sent. Pine's default behavior encourages a user to put his or her contribution before the inclusion of the original text of the message being forwarded or replied to, This is contrary to some conventions, but makes the conversation more readable when a long original message is included in a reply for context. The reader doesn't have to scroll through the original text that he or she has probably already seen to find the new text. If the reader wishes to see the old message(s), the reader can scroll further into the message. Users who prefer to add their input at the end of a message should set the signature-at-bottom feature. The signature will then be appended to the end of the message after any included text. This feature applies when Replying, not when Forwarding. _________________________________________________________________ Feature List Variable Pine used to have feature levels for users with different amounts of experience. We found that this was too restrictive. Pine now has a feature-list instead. Each user may pick and choose which features they would like enabled (simple to do in the Setup/Config screen). There is a short description of each in Configuration Features. There is also a short on-line help explaining the effect of each of the features in the Setup/Config screen. When the cursor is highlighting a feature, the ? command will show the help text for that feature. Features don't have values, they are just turned on or off. They are all off by default. The feature-list variable is different from all other configuration variables in that its value is additive. That is, the system-wide configuration file can have some features turned on by default. The user can select other features in their personal configuration file and those features will be added to the set of features turned on in the system-wide configuration file. (With all other configuration variables, the user's values replace the system-wide values.) Likewise, additional features may be set on the command-line with the argument "-feature-list=". These will be added to the others. The treatment of feature-list in the system-wide fixed configuration file is also different from other variables. The system management can fix the value of individual features by placing them in the fixed configuration file. Users will not be able to alter those features, but will still be able to set the other non-restricted features the way they like. Because feature-list is additive, there is a way to turn features off as well as on. Prepending the prefix "no-" to any feature sets it to off. This is useful for over-riding the system-wide default in the personal configuration file or for over-riding the system-wide default or the personal configuration value on the command line. For example, if the system-wide default configuration has the quit-without-confirm feature set, the user can over-ride that (and turn it off) by including no-quit-without-confirm in the personal configuration file or by giving the command line argument -feature-list=no-quit-without-confirm. More features (options) will no doubt continue to be added. _________________________________________________________________ SMTP Servers It is sometimes desireable to set smtp-server=localhost instead of setting sendmail-path to overcome the inability to negotiate ESMTP options when sendmail is invoked with the -t option. Sendmail can also be subject to unacceptable delays due to slow DNS lookups and other problems. It is sometimes desireable to configure an SMTP server on a port other than the default port 25. This may be used to provide an alternate service that is optimized for a particular environment or provides different features from the port 25 server. An example would be a program that negotiates ESMTP options and queues a message, but does not attempt to deliver messages. This would avoid delays frequently encountered when invoking sendmail directly. A typical configuration would consist of * A program that implements the SMTP or ESMTP protocol via stdio. * An entry in /etc/services for the alternate service. * An entry in /etc/inetd.conf for the alternate service. * An entry in /usr/local/lib/pine.conf, /usr/local/lib/pine.conf.fixed or ~/.pinerc. _________________________________________________________________ MIME.Types file Pine's MIME-TYPE support is based on code contributed by Hans Drexler <drexler@mpi.nl>. Pine assigns MIME Content-Types according to file name extensions found in the system-wide files /usr/local/lib/mime.types and /etc/mime.types, and a user specific ~/.mime.types file. In DOS and OS/2, Pine looks in the same directory as the PINERC file and the same dir as PINE.EXE. This is similar to the UNIX situation with personal config info coming before potentially shared config data. An alternate search path can be specified by setting the mimetype-search-path variable in the user or system-wide configuration or by setting the MIMETYPES environment variable. These files specify file extensions that will be connected to a mime type. Lines beginning with a '#' character are treated as comments and ignored. All other lines are treated as a mime type definition. The first word is a type/subtype specification. All following words are file extensions belonging to that type/subtype. Words are separated by whitespace characters. If a file extension occurs more than once, then the first definition determines the file type and subtype. A couple sample lines from a mime.types file follow: image/gif gif text/html html htm video/mpeg mpeg mpg mpe _________________________________________________________________ Additional Notes on PC-Pine Below are a few odds and ends worth mentioning about PC-Pine. They have to do with DOS-specific behavior that is either necessary or useful (and sometimes both!). As PC-Pine runs in an environment with limited access control, accounting or auditing, an additional line is automatically inserted into the header of mail messages generated by PC-Pine: X-Sender: @ By popular demand of system administrators, PC-Pine has been modified to prevent sending messages until the user has successfully logged into a remote mail server. Even though PC-Pine cannot prevent users from changing the apparent identity of the sender of a message, the IMAP server login name and host name included in the X-Sender line provide some level of traceability by the recipient. However, this should not be considered a rigorous form of authentication. It is extremely lightweight, and is not a replacement for true authentication. Hand in hand with authentication and accounting is user information. Since PC-Pine has no user database to consult for user-id, personal-name, etc., necessary information must be provided by the user/installer before PC-Pine can properly construct the "From" address required for outbound messages. PC-Pine will, by default, prompt for the requisite pieces as they are needed. This information corresponds to the PINERC variables user-id, personal-name, user-domain, and smtp-server. The user is then asked whether or not this information should automatically be saved to the PINERC. This is useful behavior in general, but can lead to problems in a lab or other shared environment. Hence, these prompts and automatic saving of configuration can be turned off on an entry by entry basis by setting any of the above values in the PINERC to the null string (i.e., a pair of double quotes). This means that the user will be prompted for the information once during each Pine session, and no opportunity to save them in the PINERC will be offered. Along similar lines, a feature allowing automatic login to the imap-server containing the user's INBOX has also been requested. This feature is not enabled by default, but requires the existence of the file named PINE.PWD in the same directory as the PINERC. Even with the existence of this file, the user must still acknowledge a prompt before the password is saved to the file. If PC-Pine is configured to access several different IMAP servers, each password entered will be kept (associated with the corresponding host name) in memory during the current session, and optionally, in the PINE.PWD file for use in subsequent sessions. WARNING! Use this feature with caution! It effectively makes the user's mail no more secure than the physical security of the machine running PC-Pine. What's more, while the password is cloaked by a mild (some might say, feeble) encryption scheme, it is nonetheless sitting in a file on the PC's disk and subject to cracking by anyone with access to it. BEWARE! Another feature of DOS is the lack of standard scratch area for temporary files. During the course of a session, PC-Pine may require numerous temporary files (large message texts, various caches, etc.). Where to create them can be a problem, particularly when running under certain network operating systems. PC-Pine observes the TMP and TEMP environment variables, and creates temporary files in the directory specified by either. In their absence, PC-Pine creates these files in the root of the current working drive. Behind the Scenes Many people ask how certain Pine features are implemented. This section outlines some of the details. Address Books Beginning with Pine 4.00 there are two types of address book storage. There are local address books, which are the address books that are stored in a local file (the address books Pine has had all along); and there are remote address books, which are stored on an IMAP server. Information About Remote Address Books NOTE: The remote address book capability does not allow you to access an existing local address book from a remote system! That is, you can't set the remote address book to something like {remote.host}.addressbook and expect to access the existing .addressbook file on remote.host. Instead, you need to create a new remote address book in a new, previously unused remote mail folder. Then you can use the Select and Apply Save commands in the address book screen to Save all of the entries from an existing local address book to the new remote address book. Beginning with Pine 4.00 there is a new type of address book called a remote address book. A remote address book is stored in a mail folder on an IMAP server. A Pine remote address book is just like a Pine local address book in that it is not interoperable with other email clients. The folder is a regular folder containing mail messages but those messages are special. The first message must be a pine remote address book header message which contains the header x-pine-addrbook. The last message in the folder contains the address book data. In between the first and the last message are old versions of the address book data. The address book data is simply stored in the message as it would be on disk, with no MIME encoding. When it is used the data from the last message in the folder is copied to a local file and then that file is used exactly like a local address book file is used. When a change is made the modified local file is appended to the remote folder in a new message. In other words, the local file is just a cache copy of the data in the remote folder. Each client which uses the remote address book will have its own cache copy of the data. Whenever a copy is done the entire address book is copied, not just the entries which have changed. Pine can tell that the remote data has changed by one of several methods. If the date contained in the Date header of the last message has changed then it knows it has changed. If the UID of the last message has changed, or the number of messages in the folder has changed, it knows that it has changed. When Pine discovers the folder has changed it gets a new copy and puts it in the local cache file. There is a new configuration file variable for remote address books called remote-abook-metafile. The variable is the name of a file in which information about remote address books is stored. There is one line in the metafile for each remote address book. The information stored there is the name of the cache file and information to help figure out when the remote folder has changed. If the metafile or any of the cache files is deleted then Pine will rebuild them the next time it runs. Remote address books have names that look just like regular remote mail folder names. For example: {host.domain}foldername Pine decides whether or not an address book is remote simply by looking at the first character of the address book name and comparing it to {. Information About All Address Books The address book is named, by default, .addressbook in the user's Unix home directory, or in the case of PC-Pine, ADDRBOOK, in the same directory as the PINERC file. There may be more than one address book, and the default name can be overridden via an entry in any of the Pine configuration files. The two configuration variables address-book and global-address-book are used to specify the names of the address books. Each of these variables is a list variable. The total set of address books for a user is the combination of all the address books specified in these two lists. Each entry in the list is an optional nickname followed by an address book name. The nickname is everything up to the last space before the file name. The global-address-book list will typically be configured in the system-wide configuration file, though a user may override it like most other variables. Address books which are listed in the global-address-book variable are forced read-only, and are typically shared among multiple users. Local address books (or local cache files for remote address books) are simple text files with lines in the format: TABTAB
TABTAB The last two fields are optional. A "line" may be made up of multiple actual lines in the file by using continuation lines, which are lines beginning with SPACE characters. The line breaks may be after TABs or in between addresses in a distribution list. Nicknames (the first field) are short names that the user types instead of typing in the full address. There are several characters which aren't allowed in nicknames in order to avoid ambiguity when parsing the address (SPACE, COMMA, @, ", ;, :, (, ), [, ], , \). Nicknames aren't required. In fact, none of the fields is required. The fullname field is usually stored as Last_name, First_name, in order that a sort on the fullname field comes out sorted by Last_name. If there is a comma in the fullname, Pine will flip the first and last name around and get rid of the comma when using the entry in a composition. It isn't required that there be a comma, that's only useful if the user wants the entries to sort on last names. The address field takes one of two forms, depending on whether the entry is a single (simple) address or a distribution list. For a simple entry, the address field is an RFC 822 address. This could be either the email-address part of the address, i.e., the part that goes inside the brackets (<>), or it could be a full RFC 822 address. The phrase part of the address (the fullname) is used unless there is a fullname present in the fullname field of the address book entry. In that case, the fullname of the address book entry replaces the fullname of the address. For a distribution list, the
is in the format: "("
,
,
, ... ")" The only purpose for the parentheses around the list of addresses is to make it easier for the parsing routines to tell that it is a simple entry instead of a list. The two are displayed differently and treated slightly differently in some cases, though most of the distinction has disappeared. Each of the addresses in a list can be a full RFC 822 address with fullname included, or it may be just the simple email-address part of the address. This allows the user to have a list which includes the fullnames of all the list members. In both the simple and list cases, addresses may also be other nicknames which appear in this address book or in one of the other address books. (Those nicknames are searched for by looking through the address books in the order they appear in the address book screen, with the first match winning.) Lists may be nested. If addresses refer to each other in a loop (for example, list A includes list B which includes list A again) this is detected and flagged. In that case, the address will be changed to "**** address loop ****". The optional fcc field is a folder name, just like the fcc field in the composer headers. If the first address in the To field of a composition comes from an address book entry with an fcc field, then that fcc is placed in the fcc header in the composer. The comments field is just a free text field for storing comments about an entry. By default, neither the fcc nor the comments field is shown on the screen in the address book screen. You may make those fields visible by configuring the variable addressbook-formats. They are also searched when you use the WhereIs command in the address book screen and are visible when you View or Update an entry. The address book is displayed in the order that it is stored. When the user chooses a different sorting criterion, the data is actually sorted and stored, as opposed to showing a sorted view of the data. When the address book is written out, it is first written to a temporary file and if that write is successful it is renamed. This guards against errors writing the file that might destroy the whole address book. The address book is re-written after each change. If the address book is a remote address book, the file is then appended to the remote mail folder using IMAP. The end-of-line character(s) in the address book file are those native to the system writing it. So it is on Unix and on PC's. However, both Unix and PC versions of Pine can read either format, so it should be possible to share a read-only address book among the two populations (using NFS, for example). The end-of-line character for the LookUp file is always just , even on a PC. _________________________________________________________________ Address Book Lookup File Starting in 3.90 there is an additional file for each address book, called the LookUp file. It usually has the same name as the address book file with the suffix ".lu" appended. (It might have a different name if a file name length restriction prohibited that name.) This file is created and maintained by Pine. If it is deleted, Pine will recreate it next time it runs. Its purpose is to speed up lookups for large address books and to reduce memory requirements for large address books. A fairly detailed description of how it is used is given in src/pine/adrbklib.h. The lookup file changes whenever the address book itself is changed. If it doesn't exist, Pine attempts to create it. If Pine doesn't have permission to create the lookup file with the standard name, it will create a temporary version in a temp directory. You want to avoid this since it would have to be rebuilt every time Pine was run, and rebuilding takes a significant time for a large address book. So, if you're going to have a shared address book in a read-only directory, it is highly desirable to create the lookup file so that the users sharing it won't have to each create a copy in a temp directory. You can do that by running Pine and accessing the address book under a user id which does have permission to write the file (root, for example) or by using the -create_lu command line argument to Pine (as root, still). If users may be using a shared address book that needs updating, it is best to move the old address book to another name rather than copying over it since the file may be opened by running Pines. It is also best to make the lookup file for the new addrbook before moving it and the address book file into place, otherwise users may get stuck attempting to initialize the new lookup file. The lookup file contains a timestamp which records the mtime of the address book file when the lookup file was last updated. Whenever a user runs Pine the current mtime of the address book is checked against this timestamp and if they differ, Pine will want to rebuild the lookup file. Because of this, it isn't a good idea to build the lookup file and then copy the address book and lookup file into place. You should move it or copy it in some way which preserves the address book file's mtime (e.g., use mv or tar). Validity Checking of Address Books There is no file locking done on Pine address books, however, there is considerable validity checking done to make sure that the address book hasn't changed unexpectedly. Whenever the address book is about to be changed, a check is made to see if the file is newer than when we read it or the remote address book folder has changed since we last copied it. If either of these is true, the change is aborted. There is an automatic, behind-the-scene check that happens every so often, also. For example, if someone else changes one of the address books that you have configured, your Pine's copy of the address book will usually be updated automatically without you noticing. This checking happens at the same time as new mail checking takes place, unless you are actively using the address book, in which case it happens more frequently. Another sort of validity check is that the lookup file contains a timestamp internally that is supposed to match the time that the address book file itself was last modified. If the lookup file timestamp doesn't match the date of the address book file, a new lookup file is built. If you are having trouble, it is always ok to remote the lookup file and restart. Pine will automatically rebuild the lookup file. One other validity check happens when looking up an entry in the address book file. An entry is looked up by first getting an offset into the address book file from the lookup file. A seek to that location is done and then the entry is read. An entry should be at the start of a line. If it isn't, something is wrong. In that case, the lookup file is rebuilt and the operation is repeated if possible. _________________________________________________________________ Checkpointing Periodically Pine will save the whole mail folder to disk to prevent loss of any mail or mail status in the case that it gets interrupted, disconnected, or crashes. The period of time Pine waits to do the checkpoint is calculated to be minimally intrusive. The timing can be changed (but usually isn't) at compile time. Folder checkpointing happens for both local folders and those being accessed with IMAP. The delays are divided into three categories: Good Time: This occurs when Pine has been idle for more than 30 seconds. In this case Pine will checkpoint if 12 changes to the file have been made or at least one change has been made and a checkpoint hasn't been done for five minutes. Bad Time: This occurs just after Pine has executed some command. Pine will checkpoint if there are 36 outstanding changes to the mail file or at least one change and no checkpoint for ten minutes. Very Bad Time: Done when composing a message. In this case, Pine will only checkpoint if at least 48 changes have been made or at least one change has been made in the last twenty minutes with no checkpoint. _________________________________________________________________ Debug Files If Unix Pine is compiled with the compiler DEBUG option on (the default), then Pine will produce debugging output to a file. The file is normally .pine-debugX in the user's home directory where X goes from 1 to 4. Number 1 is always the most recent session and 4 the oldest. Four are saved because often the user has gone in and out of Pine a few times after a problem has occurred before the expert actually gets to look at it. The amount of output in the debug files varies with the debug level set when Pine is compiled and/or as a command line flag. The default is level 2. This shows very general things and records errors. Level 9 produces copious amounts of output for each keystroke. PC-Pine creates a single debug file named PINEDEBG.TXT in the same directory as the PINERC file. _________________________________________________________________ Filters Pine is not designed to process email messages as they are delivered; rather Pine depends on the fact that some other program (sendmail, etc) will deliver messages and Pine simply reads the email folders which that other program creates. For this reason, Pine cannot filter incoming email into different folders. It can, however, work alongside most of the programs available over the Internet which perform this task. Pine is known to operate successfully with the Elm filter program and with procmail. Pine allows users to specify a set of incoming-folders. Pine will separate out all the folders listed as incoming-folders and offer convenient access to these. We hope that in the future Pine will be able to offer new message counts for all of the incoming folders, but we haven't done this so far because of the performance penalty. _________________________________________________________________ Folder Formats and Name Extensions A folder is a group of messages. The default format used by Unix Pine is the Berkeley mail format. It is also used by the standard mail command and by elm. Unix Pine also understands message folders in other formats, such as Tenex, MH, MMDF, and Netnews. PC-Pine reads and writes local (PC) folders in a special format similar to the Tenex format. Near as we can tell, PC-Pine is the only program to use this format. Beginning with version 3.90, PC-Pine includes a ReadOnly driver for the Berkeley mailbox format in addition. That means that you can import Unix mail folders, or mount them via NFS or SMB, and PC-Pine can read them --but not modify them. Extensions. In the past, file name extensions have been significant in both Unix Pine and PC-Pine, but this has caused more problems than it solved. Therefore, on Unix Pine extensions no longer have any special meaning, and this is the trend for PC-Pine as well. By default, PC-Pine adds ".MTX" to the name of any local (PC) folders that are referenced, and suppresses the extension from the "Folder List" display. Now that PC-Pine can read more than one folder format, the MTX extension no longer implies a particular format, and is largely irrelevant. By using the folder_extension option, you can change this behavior. In particular, you may set folder-extension to the "null string" (a pair of double quotes) which tells PC-Pine to neither add nor hide-from-view any folder name extension. The reason you might wish to over-ride the MTX default is that recent versions of PC-Pine have the ability to open (albeit ReadOnly) normal Unix mail folders. Since it might be inconvenient to rename all of them to have an MTX extension, it is possible with this option to switch PC-Pine's behavior so that such folders can be seen and accessed without changing their names. However, doing this means that your existing PC-Pine local folders will have apparently changed their names. For example, if you had a local folder named "FOO" it will now appear in the "Folder List" as "FOO.MTX". If you wish to save additional messages to that folder, you will need to enter the full name, "FOO.MTX" at the Save prompt. Likewise for GoTo. If you wish to permanently avoid having to deal with folder name extensions, you will need to set this option to the null string by entering two double- quote marks, and you will need to rename your existing local folders to not have an MTX extension. In DOS this can be done in one command, once you have changed to your mail directory: RENAME *.MTX *. We don't know why you might wish to, but you could also use this option to tell PC-Pine to use an extension other than MTX. In this case, enter the three characters you desire to use in lieu of "MTX". Note that your existing folders will need to be renamed to correspond to this new extension. Berkeley Mail Format This format comes to us from the ancient UNIX mail program, /bin/mail. (Note that this doesn't have anything to do with Berkeley, but we call it the Berkeley mail file format anyway.) This program was actually used to interactively read mail at one time, and is still used on many systems as the local delivery agent. In the Berkeley mail format, a folder is a simple text file. Each message (including the first) must start with a separator line which takes approximately the form: From juser@u.example.edu Wed Aug 11 14:32:33 1993 Each message ends with two blank lines. There are actually several different variations in the date part of the string, twenty at last count. Because of the format of the separators, lines in the mail message beginning with "From ", space included, risk being confused as message separator lines. Some mail programs will interpret any line beginning with "From " as a message separator, while others --including Pine-- will not be confused unless the line really looks like a message separator, complete with address and date. Such lines will be modified to begin with ">From ". In deference to other mail programs, you may also set the save-will-quote-leading-froms feature, in which case any line beginning with "From " will be modified as above. If you see this occasionally in incoming mail messages, the culprit is not Pine but the message delivery program being used at your site. You can fool Pine into thinking a file is a mail folder by copying a suitable message separator from a real folder to the beginning of the file and wherever you want message boundaries. The vast majority of INBOXes Pine reads and folders it writes are of this format. Tenex and MTX Formats Like the Berkeley format, the Tenex folder format uses a single file per folder. Historically, the name of Tenex-format folders ended with .txt, but this rule is no longer enforced. The file format consists of a header line followed by the message text for each message. The header is in one of two forms: dd-mmm-yy hh:mm:ss-zzz,n;ffffffffffff dd-mmm-yyyy hh:mm:ss sssss,n;ffffffffffff and is immediately followed by a newline (and the message text). The fields in the formats are: dd two-digit day of month (leading space if a single-digit day) mmm three-letter English month name (Jan, Feb, etc.) yy two-digit year in 20th century (obsolete) yyyy four-digit year hh two-digit hour in 24-hour clock (leading zero if single-digit) mm two-digit minute (leading zero) ss two-digit second (leading zero) zzz three-letter North American time zone (obsolete) sssss signed four-digit international time zone as in RFC 822 n one or more digits of the size of the following message in bytes ffffffffffff twelve-digit octal flags value Punctuation is as given above. The time in the header is the time that message was written to the folder. The flags are interpreted as follows: the high order 30 bits are used to indicate user flags, the next two bits are reserved for future usage, the low four bits are used for system flags (010 = answered, 04 = flagged urgent, 02 = deleted, 01 = seen). If a Tenex-format (or empty) file named mail.txt exists in a Pine user's home directory, this triggers special processing in Pine. When INBOX is opened, mail is automatically moved from /usr/spool/mail into mail.txt in the user's home directory. The format used by PC-Pine is identical to the Tenex format, with two exceptions: the folder name ends with .MTX instead of .txt (this is a requirement in the MTX format), and DOS-style CR/LF newlines are used instead of UNIX-style LF newlines. Netnews Format The netnews format is a ReadOnly format which uses directories under /usr/spool/news as folders. The /usr/spool/news/ prefix is removed and all subsequent ``/'' (slash) characters are changed to ``.'' (period). For example, the netnews folder name comp.mail.misc refers to the directory name /usr/spool/news/comp/mail/misc. In addition, the news folder name must appear in the file /usr/lib/news/active for it to be recognized. Individual messages are stored as files in that directory, with file names being the ASCII form of a number assigned to that message. The default locations above can be changed with the config variables news-spool-directory and news-active-file-path. _________________________________________________________________ Folder Locking There are two kinds of locking which Pine has to worry about. The first might be called program-contention locking. This affects the times when a program is performing actual updates on a folder. An update might be a message delivery program appending a message (sendmail delivering a message to an INBOX), status changes (checkpoints by Pine every few minutes) or deletion of messages (an expunge in Pine). For moderate sized mail messages, these operations should not last for more than a few seconds. The second kind of locking has to do with user-contention situations. This would be the case when one folder is shared by a group of people or even when one person starts multiple email sessions all of which access the same folders and INBOX. There are two standard locking mechanisms which handle program-contention locking. To be on the safe side, Pine implements both of them. The older mechanism places a file xxxx.lock (where xxxx is the name of the file being locked) in the same directory as the file being locked. This makes use of the fact that directory operations are atomic in UNIX and mostly works across NFS. There are involved algorithms used to determine if a lock has been held for an excessive amount of time and should be broken. The second program-contention locking mechanism uses the flock() system call on the mailbox. This is much more efficient and the locks can't get stuck because they go away when the process that created them dies. This is usually found on 4BSD and related machines. In addition to these, Pine--through the c-client library--provides robust locking which prevents several users (or several instances of the same user) having a mail file open (for update) at once. This user-contention lock is held the entire time that the folder is in use. With IMAPd 7.3(63) and Pine 3.84 and higher, the second Pine session which attempts to open a particular folder (usually INBOX) with Pine will ``win''. That is to say, the second session will have read/write access to the folder. The first user's folder will become read-only. (Note that this is exactly the opposite of the behavior prior to Pine 3.84 where the second open was read-only. Having the latest open be read-write seems to match more closely with what users would like to have happen in this situation.) Pine's additional locking is only effective against multiple uses of Pine or other programs using the c-client library, such as MailManager, ms, IMAPd and a few others. Beginning with Pine 3.85, there is a -o command line flag to intentionally open a mailbox read-only. Pine locking on UNIX systems works by creating lock files in /tmp of the form \usr\spool\mail\joe. The system call flock() is then used on these files; the existence of the file alone does not constitute a lock. This lock is created when the folder is opened and destroyed when it is closed. When the folder is actually being written, the standard UNIX locks are also created. If a folder is modified by some other program while Pine has it open, Pine will give up on that mail file, concluding it's best not to do any further reads or writes. This can happen if another mailer that doesn't observe Pine's user-contention locks (e.g. elm or mail) is run while Pine has the mail folder open. Pine checkpoints files every few minutes, so little data can be lost in these situations. PC-Pine does not do any folder locking. It depends on IMAP servers to handle locking of remote folders. It is assumed that only one Pine session can be running on the PC at a time, so there is no contention issue around folders on the PC itself. _________________________________________________________________ INBOX and Special Folders The INBOX folder is treated specially. It is normally kept open constantly so that the arrival of new mail can be detected. The name INBOX refers to wherever new mail is retrieved on the system. If the inbox-path variable is set, then INBOX refers to that. IMAP servers understand the concept of INBOX, so specifying the folder {imap.u.example.edu}INBOX is meaningful. The case of the word INBOX is not important, but Pine tends to display it in all capital letters. The folders for sent mail and saved messages folders are also somewhat special. They are automatically created if they are absent and recreated if they are deleted. _________________________________________________________________ Internal Help Files The file pine.hlp in the pine subdirectory of the distribution contains all the help text for Pine. On UNIX, it is compiled right into the Pine binary as strings. This is done to simplify installation and configuration. The pine.hlp file is in a special format that is documented at the beginning of the file. It is divided into sections, each with a name that winds up being referenced as a global variable. This file is processed by two awk scripts and turned into C files that are compiled into Pine. PC-Pine, which tries to run on machines with as little as 640k of memory, leaves the Pine help text out of the executable. PINE.EXE, PINE.HLP, and PINE.NDX are all needed for PC-Pine's help system. _________________________________________________________________ International Character Sets While Pine was designed in the U.S. and used mostly for English-language correspondence, it is a goal for Pine to handle email in almost any language. Many sites outside of the U.S. run Pine in their native language. The default character set for Pine is US-ASCII. That can be changed in the personal or system-wide configuration file with the variable character-set. When reading incoming email, Pine allows all character sets to pass through. Pine doesn't actually display the characters but simply passes them through; it is up to the actual display device to show the characters correctly. When composing email, Pine will accept input in any language and tag the message according to the character-set variable. Again, it is up to the input device to generate the correct sequences for the character set being used. With the exception of UNICODE-1-1-UTF-7, the outgoing message is checked to see if it is all US-ASCII text (and contains no escape characters). In that case, the text will be labeled as US-ASCII even if the character-set variable is set to something else. The theory is that every reasonable character set will have US-ASCII as a subset, and that it makes sense to label the text with the lowest-common-denominator label so that more mailers will be able to display it. Text in the UNICODE-1-1-UTF-7 character set is never re-labeled as US-ASCII. If the outgoing message is not all US-ASCII text, then it will be labeled with the character-set variable set by the user. If the user has not set the character-set variable then it will be labeled as X-UNKNOWN-CHARSET. BUG: If you prepare a UNICODE-1-1 document and read it into the composer with ^R, Pine may mistreat it. If your document, when misviewed as 8-bit bytes, does not contain any individual bytes greater than 0x7f base 16, then Pine will re-label your outgoing message as US-ASCII, even if your message is really in Unicode Cyrillic, Arabic, or Thai. On the other hand, if your UNICODE-1-1, when misviewed as 8-bit bytes, does contain at least one individual byte greater than 0x7f base 16, as is likely for Unicode French/German/Spanish, Greek, Japanese, and Chinese, then Pine will retain the UNICODE-1-1 label. The character sets are: US-ASCII Standard 7 bit English characters ISO-8859-1 8 bit European "latin 1" character set ISO-8859-2 8 bit European "latin 2" character set ISO-8859-3 8 bit European "latin 3" character set ISO-8859-4 8 bit European "latin 4" character set ISO-8859-5 8 bit Latin and Cyrillic ISO-8859-6 8 bit Latin and Arabic ISO-8859-7 8 bit Latin and Greek ISO-8859-8 8 bit Latin and Hebrew ISO-8859-9 8 bit European "latin 5" character set ISO-8859-10 8 bit European "latin 6" character set KOI8-R 8 bit Latin and Russian VISCII 8 bit Latin and Vietnamese ISO-2022-JP Latin and Japanese ISO-2022-KR Latin and Korean UNICODE-1-1 Unicode UNICODE-1-1-UTF-7 Mail-safe Unicode ISO-2022-JP-2 Multilingual Earlier versions of Pine made use of the character set tags associated with text in MIME to decide if the text should be displayed or not. Depending on the character set tag and the character-set variable in Pine, the text was either displayed as is, displayed with some characters filtered out, or not displayed at all. The current version uses a much simpler algorithm in order to maximize the chance that useful contents are readable by the user. It simply displays all messages of type text and makes no attempt to filter out characters that may be in the wrong character set. If the text is tagged as something other than US-ASCII and the tag does not match the character set that the character-set variable is set to, then a warning is printed at the start of the message. In that case, it is possible that the text will be displayed incorrectly. For example, if the text is one variant of ISO-8859 and the display device is another variant, some of the characters may show up on the screen as the wrong character. Or if the text is Japanese and the display device is not, some parts of the message may be total gibberish (which will look like ASCII gibberish). On the other hand, the parts of the Japanese message that really are US-ASCII will be readable in the midst of the gibberish. In the case of PC-Pine, the character values cannot be passed through to the display device unaltered since MS-DOS uses various non-standard character sets called "Code Pages". The mapping between DOS Code Page and standard character set is controlled by the character-set variable in the PINERC file and the PC's installed Code Page. PC-Pine will automatically map common characters in IBM Code Pages 437, 850, 860, 863, and 865 to ISO-8859-1 and back when the PINERC has character-set=ISO-8859-1. Pine will also map common characters for IBM Code Page 866 to ISO-8859-5 and back when character-set=ISO-8859-5. The mappings are bi-directional, and applied to all saved text attachments in the defined character set, messages exported, etc. Alternatively, the translation tables can be configured externally and applied at run time whenever the character-set variable is set to something other then "US-ASCII" (the default). PC-Pine looks in the text file pointed to by the environment variable ISO_TO_CP for the table to use for mapping text matching the type defined by the character-set variable into the local Code Page value. PC-Pine looks in the text file pointed to by the environment variable CP_TO_ISO for the table to use for mapping text in the local Code Page into outbound text tagged with the character-set variable's value. A text file containing a character set mapping table is expected to contain 256 elements where each element is a decimal number separated from the next element by white-space (space, tab or newline, but no commas!). The index of the element is the character's value in the source character set, and the element's value is the corresponding character's value in the destination character set. _________________________________________________________________ Interrupted and Postponed Messages If the user is composing mail and is interrupted by being disconnected (SIGHUP, SIGTERM or end of file on the standard input), Pine will save the interrupted composition and allow the user to continue it when he or she resumes Pine. As the next Pine session starts, a message will be given that an interrupted message can be continued. To continue the interrupted message, simply go into the composer. To get rid of the interrupted message, go into the composer and then cancel the message with ^C. Composition of half-done messages may be postponed to a later time by giving the ^O command. Other messages can be composed while postponed messages wait. All of the postponed messages are kept in a single folder. Postponing is a good way to quickly reference other messages while composing. _________________________________________________________________ Message Status The c-client library allows for several flags or status marks to be set for each message. Pine uses four of these flags: UNSEEN, DELETED, ANSWERED, and FLAGGED. The N in Pine's FOLDER INDEX means that a message is unseen-it has not been read from this folder yet. The D means that a message is marked for deletion. Messages marked with D are removed when the user Expunges the folder (which usually happens when the folder is closed or the user quits Pine). The A in Pine's FOLDER INDEX means that the message has been replied-to. The * in Pine's FOLDER INDEX means that the message has been ``flagged'' as important. That is, the user used the Flag command to turn the FLAGGED flag on. This flag can mean whatever the user wants it to mean. It is just a way to mark some messages as being different from others. It will usually probably be used to mark a message as somehow being ``important''. For Berkeley format folders, the message status is written into the email folder itself on the header lines marked Status: and X-Status. In Tenex and PC-Pine's MTX folder formats, the status goes into the 36-bit octal flags. _________________________________________________________________ MIME: Reading a Message Pine should be able to handle just about any MIME message. When a MIME message is received, Pine will display a list of all the parts, their types and sizes. It will display the attachments when possible and appropriate and allow users to Save all other attachments. Starting with version 3.90, Pine honors the "mailcap" configuration system for specifying external programs for handling attachments. The mailcap file maps MIME attachment types to the external programs loaded on your system which can display and/or print the file. A sample mailcap file comes bundled with the Pine distribution. It includes comments which explain the syntax you need to use for mailcap. With the mailcap file, any program (mail readers, newsreaders, WWW clients) can use the same configuration for handling MIME-encoded data. If a MAILCAPSenvironment variable is defined, Pine will use that to look for one or more mailcap files, which are combined. In the absence of MAILCAPS, Unix Pine will look for a personal mailcap file in ~/.mailcap and combine that with a system-wide file in /etc/mailcap. PC-Pine will look for a file named MAILCAP in the same directory as the PINERC file, and/or the directory containing the PINE.EXE executable. Messages which include rich text or enriched text in the main body will be displayed in a very limited way (it will show bold and underlining). If Pine sees a MIME message part tagged as type IMAGE, and Pine's image-viewer configuration variable is set, Pine will attempt to send that attachment to the named image viewing program. In the case of UNIX Pine, the DISPLAY environment variable is checked to see if an X-terminal is being used (which can handle the images). If the image-viewer variable is not set, Pine uses the mailcap system to determine what to do with IMAGE types, just as it does for any other non-TEXT type, e.g. type APPLICATION. For MIME's generic "catch all" type, APPLICATION/OCTET-STREAM, the mailcap file will probably not specify any action, but Pine users may always Save any MIME attachment to a file. MIME type "text/plain" is handled a little bit differently than the other types. If you are viewing the main body part in the MESSAGE TEXT viewing screen, then Pine will use its internal viewer to display it. This happens even if there is a mailcap description which matches this particular type. If it is labeled as having a character set other than the one you are using, it will still be displayed by the internal viewer (perhaps incorrectly), though you will get a warning message prepended to the message in the viewing screen. However, if you view a part of type "text/plain" from the ATTACHMENT INDEX screen, then Pine will check the mailcap database for a matching entry and use it in preference to its internal viewer. Some text attachments, specifically those which are just other email messages forwarded as MIME messages, are displayed as part of the main body of the message. This distinction allows easy display when possible (the forward as MIME case) and use of an attachment viewer when that is desirable (the plain text file attachment case). If the parts of a multipart message are alternate versions of the same thing Pine will select and display the one best suited. For parts of type "message/external-body", the parameters showing the retrieval method will be displayed, and the retrieval process is automated. Messages of type "message/partial" are not currently supported. _________________________________________________________________ MIME: Sending a Message There are two important factors when trying to include an attachment in a message: encoding and labeling. Pine has rules for both of these which try to assure that the message goes out in a form that is robust and can be handled by other MIME mail readers. MIME has two ways of encoding data-Quoted-Printable and Base64. Quoted-Printable leaves the ASCII text alone and only changes 8-bit characters to "=" followed by the hex digits. For example, "=09" is a tab. It has the advantage that it is mostly readable and that it allows for end of line conversions between unlike systems. Base64 encoding is similar to uuencode or btoa and just encodes a raw bit stream. This encoding is designed to get text and binary files through even the most improperly implemented and configured gateways intact, even those that distort uuencoded data. All attachments are encoded using Base64 encoding. This is so that the attachment will arrive at the other end looking exactly like it did when it was sent. Since Base64 is completely unreadable except by MIME-capable mailers or programs, there is an obvious tradeoff being made here. We chose to ensure absolutely reliable transport of attachments at the cost of requiring a MIME-capable mailer to read them. If the user doesn't want absolute integrity he or she may always include text (with the ^R command) in the body of a message instead of attaching it. With this policy, the only time quoted-printable encoding is used is when the main body of a message includes special foreign language characters. When an attachment is to be sent, Pine sniffs through it to try to set the right label (content-type and subtype). An attachment with any lines longer than 500 characters in it or more than 10% of the characters are 8-bit it will be considered binary data. Pine will recognize (and correctly label) a few special types including GIF, JPEG, PostScript, and some audio formats. Another method which can be more robust and flexible for determining the content-type and subtype is to base it on the file extension. This method uses a MIME.Types File. If it is not binary data (has only a small proportion of 8-bit characters in it,) the attachment is considered 8-bit text. 8-bit text attachments are labeled "text/plain" with charset set to the value of the user's character-set variable. If an attachment is ASCII (no 8-bit characters) and contains no ESCAPE, ^N, or ^O characters (the characters used by some international character sets), then it is considered plain ASCII text. Such attachments are given the MIME label "text/plain; charset=US-ASCII", regardless of the setting of the user's character-set variable. All other attachments are unrecognized and therefore given the generic MIME label "application/octet-stream". _________________________________________________________________ New Mail Notification Pine checks for new mail in the INBOX and in the currently open folder every two and a half minutes by default. It used to be 30 seconds instead of 150 seconds, but we increased it in order to reduce the load on large systems with lots of Pine users. The value can be changed at compile-time in the pine/os.h file. This value can be changed with the variable mail-check-interval. A new mail check can be forced by redrawing the screen with a ^L. When there is new mail, the message(s) will appear in the index, the screen will beep, and a notice showing the sender and subject will be displayed. If there has been more than one new message since you last issued a command to Pine, the notice will show the count of new messages and the sender of the most recent one. Questions have arisen about the interaction between Pine and external mail notification routines (biff, csh, login). Firstly and unfortunately, we have found no PC based program that will check for email on an IMAP server when PC-Pine is not running. If you find one, please tell us. The UNIX case is more complicated. Pine sets the modification and access time on a file every time it performs a write operation (status change or expunge). You need to see which of these your email notification program is looking at to know how it will behave with Pine. _________________________________________________________________ NFS It is possible to access mail folders on NFS mounted volumes with Pine, but there are some drawbacks to doing this, especially in the case of incoming-message folders that may be concurrently updated by Pine and the system's mail delivery agent. One concern is that Pine's user-contention locks don't work because /tmp is usually not shared, and even if it was, flock() doesn't work across NFS. The implementation of the standard UNIX ".lock" file locking has been modified to work with NFS as follows. Standard hitching post locking is used so first a uniquely named file is created, usually something like xxxx.host.time.pid. Then a link to it is created named xxxx.lock where the folder being locked is xxxx. This file constitutes the lock. This is a standard UNIX locking scheme. After the link returns, a stat(2) is done on the file. If the file has two links, it is concluded that the lock succeeded and it is safe to proceed. In order to minimize the risks of locking failures via NFS, we strongly recommend using IMAP rather than NFS to access remote incoming message folders, e.g. your INBOX. However, it is generally safe to access personal saved-message folders via NFS since it is unlikely that more than one process will be updating those folders at any given time. Still, some problems may occur when two Pine sessions try to access the same mail folder from different hosts without using IMAP. Imagine the scenario: Pine-A performs a write that changes the folder. Pine-B then attempts to perform a write on the same folder. Pine-B will get upset that the file has been changed from underneath it and abort operations on the folder. Pine-B will continue to display mail from the folder that it has in its internal cache, but it will not read or write any further data. The only thing that will be lost out of the Pine-B session when this happens is the last few status changes. If other mail readers besides Pine are involved, all bets are off. Typically, mailers don't take any precautions against a user opening a mailbox more than once and no special precautions are taken to prevent NFS problems. _________________________________________________________________ Printers and Printing UNIX Pine can print to the standard UNIX line printers or to generic printers attached to ANSI terminals using the escape sequences to turn the printer on and off. The user has a choice of three printers in the configuration. The first setting, attached-to-ansi, makes use of escape sequences on ANSI/VT100 terminals. It uses "[5i" to begin directing all output sent to the terminal to the printer and then "[4i" to return to normal. Pine will send these escape sequences if the printer is set to attached-to-ansi. This works with most ANSI/VT100 emulators on Macs and PCs such as kermit, NCSA telnet, VersaTerm Pro, and WinQVT. Various terminal emulators implement the print feature differently. For example, NCSA telnet requires "capfile = PRN" in the config.tel file. Attached-to-ansi printing doesn't work at all with the telnet provided with PC-NFS. There is also a closely related method called attached-to-ansi-no-formfeed which is the same except for the lack of formfeed character at the end of the print job. The second selection is the standard UNIX print command. The default is lpr, but it can be changed on a system basis to anything so desired in /usr/local/lib/pine.conf. The third selection is the user's personal choice for a UNIX print command. The text to be printed is piped into the command. Enscript or lpr with options are popular choices. The actual command is retained even if one of the other print selections is used for a while. Both the second and third sections are actually lists of possible commands rather than single commands. If you have a PostScript printer attached to a PC or Macintosh, then you will need to use a utility called ansiprt to get printouts on your printer. Ansiprt source code and details can be found in the ./contrib directory of the Pine distribution. The three printer choices are for UNIX Pine only. PC-Pine can only print to the locally attached printer. All printing on PC-Pine is done via ROM BIOS Print Services (Int 17h). After verifying the existence of a local printer via the BIOS Equipment-List Service (Int 11h), it simply sends the message text, character by character, to the first printer found using ASCII CR and LF at the end of lines and followed by an ASCII FF. Note, some system adjustments using the PC's "MODE" command may be required if the printer is not on the first parallel port. PC-Pine cannot generate PostScript, so printing to exclusively PostScript printers does not work. PC-Pine for Winsock uses the MS-Windows printer interface. A Pine print command will bring up a standard MS-Windows printer dialog box. _________________________________________________________________ Save and Export Pine users get two options for moving messages in Pine: Save and Export. Save is used when the message should remain ``in the Pine realm.'' Saved messages include the complete header (including header lines normally hidden by Pine), are placed in a Pine folder collection and accumulate in a standard folder format which Pine can read. In contrast, the Export command is used to write the contents of a message to a file for use outside of Pine. Messages which have been exported are placed in the user's home directory (unless the feature use-current-dir is turned on), not in a Pine folder collection. Unless FullHeaderMode is toggled on, all delivery-oriented headers are stripped from the message. Even with Export, Pine retains message separators so that multiple messages can accumulate in a single file and subsequently be accessed as a folder. On UNIX systems, the Export command pays attention to the standard umask for the setting of the file permissions. _________________________________________________________________ Sent Mail Pine's default behavior is to keep a copy of each outgoing message in a special "sent mail" folder. This folder is also called the fcc for "file carbon copy". The existence, location and name of the sent mail folder are all configurable. Sent mail archiving can be turned off by setting the configuration variable default-fcc="". The sent mail folder is assumed to be in the default collection for Saves, which is the first collection named in folder-collections. The name of the folder can be chosen by entering a name in default-fcc. With PC-Pine, this can be a bit complicated. If the default collection for Saves is local (DOS), then the default-fcc needs to be SENTMAIL, which is syntax for a DOS file. However, if the default collection for Saves is remote, then the default-fcc needs to be sent-mail to match the UNIX syntax. The configuration variable fcc-name-rule also plays a role in selecting the folder to save sent mail in. A danger here is that the sent mail could grow without bound. For this reason, we thought it useful to encourage the users to periodically prune their sent mail folder. The first time Pine is used each month it will offer to archive all messages sent from the month before. Pine also offers to delete all the sent mail archive folders which are more than 1 month old. If the user or system has disabled sent mail archiving (by setting the configuration variable default-fcc="") there will be no pruning question. _________________________________________________________________ Spell Checker Spell checking is available for UNIX Pine only. We could not find an appropriate PC based spell checker to hook into PC-Pine. Even UNIX Pine depends on the system for its spell checking and dictionary. Pico, the text editor, uses the same spell checking scheme as Pine. Lines beginning with ">" (usually messages included in replies) are not checked. The message text to be checked is on the standard input and the incorrect words are expected on the standard output. The default spell checker is UNIX spell. You can replace this by setting the speller configuration variable. Pine also respects the environment variable SPELL. The spelling checker reads its words from a standard dictionary on the system. Below is a description, contributed by Bob Hurt, of how you can create your own personal dictionary with additional ``correct'' words. Step 1: Make a file with all the words you want to include in your new dictionary. I did mine with one word per line in alphabetical order. Caps don't matter at all, as far as I know. Step 2: At the UNIX prompt, type "cat [word file] | spellin /usr/dict/hlista > [new dict name]" where [word file] is the file you just created and [new dict name] is the name of the new dictionary that Pine will look at instead of the standard /usr/dict/hlista. I named my word file .bobwords and my dictionary .bobspell so I don't have to see them when I do a ls command (ls doesn't list "dot" files). I also put the above command into my .alias file as the command makedict so I can add a word to my word file and easily recreate my dictionary. NOTE: the new dictionary is in something called a "hashed" format, and can't be read normally. Step 3: Check your new dictionary. At the UNIX prompt, type "cat [word file] | spellout [new dict name]" If you did everything correctly, it should just give you another prompt. If it lists any of the words in your file, something is wrong. I can try to help if all else fails. Step 4: Now you have to tell UNIX to use your dictionary instead of the standard one by setting the environment variable SPELL to access your dictionary. Go into your .login or .cshrc file in your home directory (it doesn't seem to make a difference which one you use) and add the line setenv SPELL "spell -d [new dict name]" I also created an alias for SPELL in my .alias file so I can use the UNIX spell command to spell-check a file outside of Pine. (The .alias line is: alias spell 'spell -d [new dict name]') Step 5: Now you need to logoff and log back on to let UNIX look at your .login (or .cshrc) file. Here is an alternative method suggested by Zachary Leber: Create a list (e.g. .zachwords) with the upper case followed by lower case words, sorted alphabetically. Add this line to .cshrc: setenv SPELL 'spell +/home/ie/rsa/.zachwords' The limitation here is that the path must be absolute (e.g. +~/.zachwords doesn't work). My man pages for spell show this + flag to be an easy way to do the exception list. This way you don't have to bother with hash lists or rehashing, and it seems to work across several platforms. _________________________________________________________________ Terminal Emulation and Key Mapping Pine has been designed to require as little as possible from the terminal. At the minimum, Pine requires cursor positioning, clear to end of line, and inverse video. Unfortunately, there are terminals that are missing some of these such as a vt52. Pine makes no assumptions as to whether the terminal wraps or doesn't wrap. If the terminal has other capabilities it may use some of them. Pine won't run well on older terminals that require a space on the screen to change video attributes, such as the Televideo 925. One can get around this on some terminals by using "protected field" mode. The terminal can be made to go into protected mode for reverse video, and then reverse video is assigned to protected mode. Pine handles screens of most any size and resizing on the fly. It catches SIGWINCH and does the appropriate thing. A screen one line high will display only the new mail notification. Screens that are less than ten columns wide don't format very nicely or work well, but will function fine again once resized to something large. Pine sets an internal maximum screen size (currently 170x200) and decides to use either termcap or terminfo when it is compiled. On the input side of things, Pine uses all the standard keys, most of the control keys and (in function-key mode) the function keys. Pine avoids certain control keys, specifically ^S, ^Q, ^H, and ^\ because they have other meanings outside of Pine (they control data flow, etc.) ^H is treated the same as the delete key, so the backspace or delete keys always works regardless of any configuration. There is a feature compose-maps-delete-key-to-ctrl-d which makes the delete key behave like ^D rather than ^H (deletes current character instead of previous character). Sometimes a communications program or communications server in between you and the other end will eat certain control characters. There is a work-around when you need it. If you type two escape characters followed by a character that will be interpreted as the character with the control key depressed. For example, ESC ESC T is equivalent to ^T. When a function key is pressed and Pine is in regular (non-function key) mode, Pine traps escape sequences for a number of common function keys so users don't get an error message or have an unexpected command executed for each character in the function key's escape sequence. Pine expects the following escape sequences from terminals defined as VT100: ANSI/VT100 F1: OP F2: OQ F3: OR F4: OS F5: Op F6: Oq F7: Or F8: Os F9: Ot F10: Ou F11: Ov Arrow keys are a special case. Pine has the escape sequences for a number of conventions for arrow keys hard coded and does not use termcap to discover them. This is because termcap is sometimes incorrect, and because many users have PC's running terminal emulators that don't conform exactly to what they claim to emulate. In some versions of Pine before 4.00 there was a compile-time macro called TERMCAP_WINS which could be set to cause the termcap or terminfo definitions to be used instead of the built in definitions. Beginning with 4.00 there is a hidden runtime feature which can be turned on to accomplish the same thing. The feature is called termdef-takes-precedence and it can be set in any of the Pine configuration files. Some arrow keys on old terminals send single control characters like ^K (one even sends ^\). These arrow keys will not work with Pine. The most popular escape sequences for arrow keys are: Up: [A ?x A OA Down: [B ?r B OB Right: [C ?v C OC Left: [D ?t D OD It is possible to configure an NCD X-terminal so that some of the special keys operate. Brad Greer contributes these instructions: 1. In your .Xdefaults file, include the following "translations", using lower hex values: Pine*VT100.Translations: #override \n\ Delete: string(0x04) \n\ End: string(0x05) \n\ Escape: string(0x03) \n\ Home: string(0x01) \n\ Next: string(0x16) \n\ Prior: string(0x19) \n\ KP_Enter: string(0x18) \n\ 2. Start up Pine from an xterm, and specify a "resource name". This resource name will allow the user to specify resources for Pine (that deviate from the defaults). For example, xterm -name Pine -e pine & (the resource name Pine corresponds to the translations just added in the .Xdefaults file). Notes for Porting and Modification Porting Pine to Other Platforms Substantial effort has gone into making Pine/Pico portable. There are still, of course, a number of machine dependencies. Some of the ports are well-tested and some are untested. In particular, the most heavily used ports are the Ultrix, AIX, NeXT, Windows, and Dec Unix ports. Each platform is given a three letter name (see the file doc/pine-ports). Make up a new one for your new port. We've attempted to bring all potential platform dependencies into the files: {pico,pine}/osdep/os-xxx.h, {pico,pine}/osdep/os-xxx.ic, and {pico,pine}/makefile.xxx, where xxx is the three letter name of the port. Thus any new port will hopefully just result in new versions of these files and some notes for the pine-ports file. There are separate dependencies in the c-client source, but that is handled in separate documentation there. Regrettably, the source code is also full of instances of ifdef DOS. Most of these are due to memory limit problems on DOS as opposed to actual system dependencies. The makefiles are kept as simple and straight-forward as possible, because many previous attempts at automatically figuring out what to do seem to have become complex and ineffective in what they set out to do: which is to make compiling and installing the program easy. Each port is for a specific hardware/software platform, also because past attempts to generalize on versions of Unix or some CPU architecture don't seem to have gained much. Thus, there is a separate makefile for each platform that calls the appropriate compiler and linker with the appropriate flags. Most of these makefiles are pretty similar. The makefile also specifies which of the os-xxx.c and os-xxx.h files to use. It is the root from which most platform dependencies are selected. In most cases the makefile also defines a symbol named after the platform on which there can be dependencies in the source code, though we've tried to minimize relying on this where reasonable. When different "ports" are very similar, it is sometimes possible to use the same pine code (for example) with only a small change in the c-client or pico code. In those cases, that kind of dependency is reflected in the top-level build script. The build script can usually be used to invoke the various makes correctly. It may set some variables before running make so look to see what build does before trying a make in one of the subdirectories. This is especially true if LDAP is being included. It is almost always easier to start with an existing port when trying to port to a new system. There is a port called gen (generic) which may be a good starting point. On the other hand, if another port is close to what you want, start with it instead. The file pico/osdep/os-xxx.h contains most of the general platform dependent #include's and #defines. There are a number of Pine configuration settings that are defined in pine/osdep/os-xxx.h, as well, such as the place it looks for certain files, defaults for the printer and folder names, the maximum screen size, and so on. Start by looking at the generic pico/osdep/os-gen.h file and comparing it to some of the specific os-xxx.h files there. The osdep/os-xxx.c files contain functions that are potentially platform dependent. Again, the idea is to gather all the dependencies in one place. We use a complicated looking method to produce the os-xxx.c files from a set of included files. Each included file usually contains a single implementation method and we've found that there are usually only two or three different methods in the ports we've done so far. Hopefully, coming up with an os-xxx.c for a new port will usually be a matter of including the right set of these already written functions. This is done by writing a new os-xxx.ic file in the osdep subdirectories. Starting with the generic os-gen.ic, as you did with the os-gen.h file above, may be a useful strategy. We strongly encourage that no changes be made to the general source when porting and that all changes be contained in the system dependent files if possible. The object is to maintain source code integrity and assimilate ports to new platforms rapidly. The more conventional way to do this is with a large collection of #ifdefs. The problem with this is that adding a port for a new platform implies changing the source code for all the other platforms and thereby risks breaking them. (We readily admit that there are still too many ifdefs in the code.) If you do port Pine to a new platform we hope that you will send us the changes required so that we may attempt to include it in a later release. Thanks! _________________________________________________________________ Test Checklist The following is a checklist of some things to check when testing a new port: ___ Sending mail, check that headers are correct ___ Sending mail with attachments ___ Sending mail with SMTP server ___ Sending mail without SMTP server ___ Sending mail with list of two SMTP servers, first one doesn't answer ___ Replying to and forwarding a message ___ Postponing messages under composition ___ Composer operations ___ Alternate editor, enable-alternate-editor-implicitly ___ Make sure local user names are expanded ___ Test spelling checker ___ Catching of SIGHUP while message is being composed ___ Setting of variables in .pinerc ___ New mail notification. Should happen with Pine idle to check timeouts ___ Reading mail (attachments, MIME, MIME with mailcap viewers) ___ Deleting, undeleting, expunging, sorting ___ Expunge to empty folder ___ Make sure that ~ expansion works in config files ___ Make sure that $VAR expansion works in config files ___ Save message to folder, check error conditions such as permission denied ___ Export message with FullHeaderMode on and off ___ Checkpointing (see the section on checkpointing) ___ Open IMAP and RIMAP folders ___ Default-fcc on remote IMAP server ___ Fcc-name-rule, fcc in addrbook (while composing) ___ Test opening bogus folders: invalid format, no permission ___ Open a USENET news group, list in folder-lister, read news, post news ___ Command line arguments ___ Change password ___ Lock keyboard ___ Address book operations (edit, delete, add, lists, whereis, composeto) ___ ReadOnly address book ___ Look at addrbook, change addrbook-sort-rule in Config, go back to addrbook screen ___ No permission to write in same directory as addrbook, should create addrbook.lu in a temp directory ___ Multiple address books ___ Address book loops from one addrbook to another and back ___ TakeAddr command with one address, with multiple addresses ___ TakeAddr command with ReadOnly address books ___ TakeAddr command with one of two address books ReadOnly ___ Send mail with empty address book ___ Config Screen operation, does pinerc get written? ___ Make sure SIGTSTP, ^Z works ___ Sent-mail pruning (set back last-time-prune-questioned variable) ___ Printing using all three printer configurations, various screens ___ View help text and news ___ Folder list operations (rename, create, delete...) ___ Saved-msg-name-rule ___ Screen redrawing in various screens (^L) ___ Window resizing in various screens ___ Error messages for incorrect terminal types (try "foo" and "vt52") ___ Reading of /usr/local/lib/pine.conf ___ Fixing variables and features in /usr/local/lib/pine.conf.fixed ___ Flag command (check message status changed in mail folder) ___ Initial-keystroke-list ___ Aggregate operations (save, delete, export, takeaddr, ...) ___ Build xxx from scratch, build clean