From: sources@anomaly.sbs.risc.net
Subject: v01i103 - ELM v2.3.11, Electronic Mail Reader - Part 03/20
Reply-To: sources@anomaly.sbs.risc.net
Organization: The Rhode Island Internet Systems Cooperative Network
Date: Sun, 13 Sep 1992 17:38:02 GMT
Followup-To: biz.sco.general


#!/bin/sh
# this is part.03 (part 3 of a multipart archive)
# do not concatenate these parts, unpack them in order with /bin/sh
# file README continued
#
if test ! -r shar3_seq_.tmp; then
	echo "Please unpack part 1 first!"
	exit 1
fi
(read Scheck
 if test "$Scheck" != 3; then
	echo "Please unpack part $Scheck next!"
	exit 1
 else
	exit 0
 fi
) < shar3_seq_.tmp || exit 1
echo "x - Continuing file README"
sed 's/^X//' << 'SHAR_EOF' >> README &&
X> 
X> This may seem a bit over the top, but I put it back after!
X> 
X> # mv /bin/sh /bin/sh.rm
X> # mv /bin/sh.old /bin/sh
X> 
X> Then wait till nobody is using /bin/sh.rm then
X> 
X> # rm /bin/sh.rm
X> 
X> That way you preserve your old shell, ( ie you don't break it ), but you
X> get to use Configure without bus errors etc.
X> 
X> I hope that of use
X> 
X> Keith
X> -- 
X> UUCP ..!uunet!mcvax!ukc!slxsys!g4lzv!keith  | Keith Brazington
X> Smart mail  keith@g4lzv.co.uk		    | 5b Northgate Rochester Kent UK
X> Ampanet  [44.131.8.1] and [44.131.8.3]	    | +44 634 811594 Voice
X> Packet  G4LZV @ GB7UWS -- G4LZV USENET BB --| +44 634 401210 Data v22,v22bis
XYou might have to experiment and try values from 7000 to 8800.
X
X	Also on Microport SysV/AT Machines, the C compiler produces
Ximproper code for one of the arithmetic calls.  To fix this problem it
Xis necessary to reduce the complexity of the statement, as reported by
Xone of our testers here is the symptom and his patch.  Being this is a
Xcompiler bug on only one system, we make the information available, but
Xnot incorporate it in the main release.  Note, this may effect other
Xareas of Elm, and in the future, Microport may even fix this problem.
X> I finally tracked down the bug that was causing the lengthy delays when
X> the first message was displayed.  The Microport 80286 C compiler was
X> generating bad code for the computation of padding in showmsg.c.  The
X> compiler generated scratch variables in the expression were being
X> located at weird offsets in the stack segment.  This caused the program
X> to stall while the kernel attempted to grow the stack segment to a size
X> that was large enough to contain the scratch variables.  This explains
X> why it only happened the first time a message was displayed.  Here is a
X> patch that fixes the problem:
X> 
X> *** showmsg.c.dist	Fri Mar 17 21:08:37 1989
X> --- showmsg.c	Sat Mar 18 06:14:04 1989
X> ***************
X> *** 280,289
X>   	           atoi(current_header->year), current_header->time);
X>   
X>   	  /* truncate or pad title2 portion on the right
X> ! 	   * so that line fits exactly */
X> ! 	  padding =
X> ! 	    COLUMNS -
X> ! 	    (strlen(title1) + (buf_len=strlen(title2)) + strlen(title3));
X>   
X>   	  sprintf(titlebuf, "%s%-*.*s%s\n", title1, buf_len+padding,
X>   	      buf_len+padding, title2, title3);
X> 
X> --- 280,292 -----
X>   	           atoi(current_header->year), current_header->time);
X>   
X>   	  /* truncate or pad title2 portion on the right
X> ! 	   * so that line fits exactly, expression has been
X> ! 	   * simplified to avoid bug in Microport 80286
X> ! 	   * C compiler */
X> ! 	  padding = COLUMNS;
X> ! 	  padding -= strlen(title1);
X> ! 	  padding -= (buf_len = strlen(title2));
X> ! 	  padding -= strlen(title3);
X>   
X>   	  sprintf(titlebuf, "%s%-*.*s%s\n", title1, buf_len+padding,
X>   	      buf_len+padding, title2, title3);
X> 
X> -- 
X> John A. Limpert
X> UUCP:	johnl@n3dmc.UUCP, johnl@n3dmc.UU.NET, uunet!n3dmc!johnl
X
X
X	Some versions of GNUmake are slightly incompatible with
Xstandard make.  If you plan on using GNUmake instead of standard make,
Xyou might need to change instances of:
X	-$(MAKEFLAGS)
Xto:
X	$(MAKEFLAGS)
Xin all Makefiles that contain that construct.
X
X>From pyrdc!uunet!mcvax!sauna.hut.fi!jkp Thu Jul 20 23:06:10 1989
X>From: Jyrki Kuoppala <pyrdc!uunet!mcvax!cs.hut.fi!jkp>
X>Subject: ELM diff for Altos Worknet
X>Organization: Helsinki University of Technology, Finland.
X>There's a bug in the Altos Worknet that makes it impossible to change
X>a file's access time if the file is on another system (via Worknet).
X>To make elm work if you use /usr/mail over Worknet, you need to apply
X>the following patch and define WORKNET when compiling leavembox.c.
X>
X>Note: WORKNET needs to be defined somewhere, the easiest thing is
X>to add it manually to src/Makefile.  That's how I did it.
X>
X>*** elm2.2/src/leavembox.c	Tue Jul 18 20:50:32 1989
X>--- elm2.2.altos/src/leavembox.c	Tue Jul 18 23:36:11 1989
X>***************
X>*** 557,562 ****
X>--- 557,565 ----
X>  	utime_buffer.modtime= buf.st_mtime;
X>  #endif
X>  
X>+ #ifndef WORKNET
X>+ 	/* Braindamaged WorkNet from Altos doesn't know how to change
X>+ 	   a file's access time if it is on another system */
X>  #ifdef BSD
X>  	if (utime(cur_folder, utime_buffer) != 0) {
X>  #else
X>***************
X>*** 569,574 ****
X>--- 572,578 ----
X>  	  error2("Error %s trying to change file %s access time.", 
X>  		   error_name(errno), cur_folder);
X>  	}
X>+ #endif  /* WORKNET */
X>  
X>  
X>  	mailfile_size = bytes(cur_folder);
X>
X>
X>Jyrki Kuoppala    Helsinki University of Technology, Finland.
X>Internet :        jkp@cs.hut.fi           [128.214.3.119]
X>BITNET :          jkp@fingate.bitnet      Gravity is a myth, the Earth sucks!
X
X					Syd Weinstein
X					Elm Coordinator
X					elm@DSI.COM
X					(dsinc!elm)
SHAR_EOF
echo "File README is complete" &&
# ============= config.h.SH ==============
echo "x - extracting config.h.SH (Text)"
sed 's/^X//' << 'SHAR_EOF' > config.h.SH &&
Xcase $CONFIG in
X'')
X    if test ! -f config.sh; then
X	ln ../config.sh . || \
X	ln ../../config.sh . || \
X	ln ../../../config.sh . || \
X	(echo "Can't find config.sh."; exit 1)
X	echo "Using config.sh from above..."
X    fi
X    . ./config.sh
X    ;;
Xesac
Xecho "Extracting config.h (with variable substitutions)"
Xsed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#undef!'
X/* config.h
X * This file was produced by running the config.h.SH script, which
X * gets its values from config.sh, which is generally produced by
X * running Configure.
X *
X * Feel free to modify any of this as the need arises.  Note, however,
X * that running config.h.SH again will wipe out any changes you've made.
X * For a more permanent change edit config.sh and rerun config.h.SH.
X */
X
X
X/* BIN:
X *	This symbol holds the name of the directory in which the user wants
X *	to put publicly executable images for the package in question.  It
X *	is most often a local directory such as /usr/local/bin.
X */
X#define BIN "$bin"             /**/
X
X/* BYTEORDER:
X *	This symbol contains an encoding of the order of bytes in a long.
X *	Usual values (in octal) are 01234, 04321, 02143, 03412...
X */
X#define BYTEORDER 0x$byteorder		/**/
X
X/* CPPSTDIN:
X *	This symbol contains the first part of the string which will invoke
X *	the C preprocessor on the standard input and produce to standard
X *	output.	 Typical value of "cc -E" or "/lib/cpp".
X */
X/* CPPMINUS:
X *	This symbol contains the second part of the string which will invoke
X *	the C preprocessor on the standard input and produce to standard
X *	output.  This symbol will have the value "-" if CPPSTDIN needs a minus
X *	to specify standard input, otherwise the value is "".
X */
X#define CPPSTDIN "$cppstdin"
X#define CPPMINUS "$cppminus"
X
X/* CRYPT:
X *	This symbol, if defined, indicates that the crypt routine is available
X *	to encrypt passwords and the like.
X */
X#$d_crypt	CRYPT		/**/
X
X/* GETOPT:
X *	This symbol, if defined, indicates that the getopt() routine exists.
X */
X#$d_getopt	GETOPT		/**/
X
X/* HAVETERMLIB:
X *	This symbol, when defined, indicates that termlib-style routines
X *	are available.  There is nothing to include.
X */
X#$d_havetlib	HAVETERMLIB	/**/
X
X/* MKDIR:
X *	This symbol, if defined, indicates that the mkdir routine is available
X *	to create directories.  Otherwise you should fork off a new process to
X *	exec /bin/mkdir.
X */
X#$d_mkdir	MKDIR		/**/
X
X/* RENAME:
X *	This symbol, if defined, indicates that the rename routine is available
X *	to rename files.  Otherwise you should do the unlink(), link(), unlink()
X *	trick.
X */
X#$d_rename	RENAME		/**/
X
X/* SIGVEC:
X *	This symbol, if defined, indicates that BSD reliable signals are
X *	supported.
X */
X/* SIGVECTOR:
X *	This symbol, if defined, indicates that the sigvec() routine is called
X *	sigvector() instead, and that sigspace() is provided instead of
X *	sigstack().  This is probably only true for HP-UX.
X */
X#$d_sigvec	SIGVEC		/**/
X
X#$d_sigvectr	SIGVECTOR	/**/
X
X/* SYMLINK:
X *	This symbol, if defined, indicates that the symlink routine is available
X *	to create symbolic links.
X */
X#$d_symlink	SYMLINK		/**/
X
X/* VFORK:
X *	This symbol, if defined, indicates that vfork() exists.
X */
X#$d_vfork	VFORK	/**/
X
X/* WHOAMI:
X *	This symbol, if defined, indicates that the program may include
X *	whoami.h.
X */
X#$d_whoami	WHOAMI		/**/
X
X/* DEFEDITOR:
X *	This symbol contains the name of the default editor.
X */
X#define DEFEDITOR "$defeditor"		/**/
X
X/* HOSTNAME:
X *	This symbol contains name of the host the program is going to run on.
X *	The domain is not kept with hostname, but must be gotten from MYDOMAIN.
X *	The dot comes with MYDOMAIN, and need not be supplied by the program.
X *	If gethostname() or uname() exist, HOSTNAME may be ignored.
X */
X/* MYDOMAIN:
X *	This symbol contains the domain of the host the program is going to
X *	run on.  The domain must be appended to HOSTNAME to form a complete
X *	host name.  The dot comes with MYDOMAIN, and need not be supplied by
X *	the program.  If the host name is derived from PHOSTNAME, the domain
X *	may or may not already be there, and the program should check.
X */
X#define HOSTNAME "$hostname"		/**/
X#define MYDOMAIN "$mydomain"		/**/
X
X/* I_TIME:
X *	This symbol is defined if the program should include <time.h>.
X */
X/* I_SYSTIME:
X *	This symbol is defined if the program should include <sys/time.h>.
X */
X/* I_SYSTIMEKERNEL:
X *	This symbol is defined if the program should include <sys/time.h>
X *	with KERNEL defined.
X */
X#$i_time		I_TIME	 	/**/
X#$i_systime	I_SYSTIME 	/**/
X#$d_systimekernel	SYSTIMEKERNEL 	/**/
X
X/* PREFSHELL:
X *	This symbol contains the full name of the preferred user shell on this
X *	system.  Usual values are /bin/csh, /bin/ksh, /bin/sh.
X */
X#define PREFSHELL "$prefshell"		/**/
X
X/* EUNICE:
X *	This symbol, if defined, indicates that the program is being compiled
X *	under the EUNICE package under VMS.  The program will need to handle
X *	things like files that don't go away the first time you unlink them,
X *	due to version numbering.  It will also need to compensate for lack
X *	of a respectable link() command.
X */
X/* VMS:
X *	This symbol, if defined, indicates that the program is running under
X *	VMS.  It is currently only set in conjunction with the EUNICE symbol.
X */
X#$d_eunice	EUNICE		/**/
X#$d_eunice	VMS		/**/
X
X/* CONFIGURE_DATE
X *	This symbol contains the last date that configure was run for elm -v output.
X */
X#define		CONFIGURE_DATE	"$c_date"
X
X/* ASCII_CTYPE:
X *	This symbol, if defined, indicates that the ctype functions and
X *	macros are ascii specific and not 8 bit clean.
X */
X#$d_ascii	ASCII_CTYPE	/**/
X
X/* ENABLE_CALENDAR:
X *	This symbol, if defined, indicates that the calendar feature
X *	should be supported.
X */
X#$d_calendar	ENABLE_CALENDAR	/**/
X#define dflt_calendar_file	"$calendar"	
X
X/* NEED_CUSERID:
X *	This symbol, if defined, means to include our own cuserid().
X */
X#$d_cuserid NEED_CUSERID		/**/
X
X/* LOCK_BY_FLOCK
X *	This symbol, if defined, indicates that the flock mailbox locking should be used.
X */
X/* LOCK_FLOCK_ONLY
X *	This symbol, if defined, indicates that the only flock mailbox locking should also be used.
X */
X/* LOCK_DIR
X *	This symbol is the name of the lock directory for access (not mailbox) locks.
X *	It will be /usr/spool/locks or /usr/spool/uucp
X */
X#$d_flock	LOCK_BY_FLOCK		/**/
X
X#$d_flockonly	LOCK_FLOCK_ONLY		/**/
X
X#define		LOCK_DIR	"$lock_dir"	/**/
X
X/* GETHOSTNAME:
X *	This symbol, if defined, indicates that the C program may use the
X *	gethostname() routine to derive the host name.  See also DOUNAME
X *	and PHOSTNAME.
X */
X/* DOUNAME:
X *	This symbol, if defined, indicates that the C program may use the
X *	uname() routine to derive the host name.  See also GETHOSTNAME and
X *	PHOSTNAME.
X */
X/* PHOSTNAME:
X *	This symbol, if defined, indicates that the C program may use the
X *	contents of PHOSTNAME as a command to feed to the popen() routine
X *	to derive the host name.  See also GETHOSTNAME and DOUNAME.
X */
X/* HOSTCOMPILED:
X *	This symbol, if defined, indicated that the host name is compiled
X *	in from the string hostname
X */
X#$d_gethname	GETHOSTNAME	/**/
X#$d_douname	DOUNAME		/**/
X#$d_phostname	PHOSTNAME "$phostname"	/**/
X#$d_host_comp	HOSTCOMPILED	/**/
X
X/* USE_DBM
X *	This symbol, when defined, indicates that the pathalias file
X *	is available as a dbm file.  There is nothing to include.
X */
X#$d_havedbm	USE_DBM	/**/
X
X/* index:
X *	This preprocessor symbol is defined, along with rindex, if the system
X *	uses the strchr and strrchr routines instead.
X */
X/* rindex:
X *	This preprocessor symbol is defined, along with index, if the system
X *	uses the strchr and strrchr routines instead.
X */
X#$d_index	index strchr	/* cultural */
X#$d_index	rindex strrchr	/*  differences? */
X
X/* INTERNET:
X *	This symbol, if defined, indicates that there is a mailer available
X *	which supports internet-style addresses (user@site.domain).
X */
X#$d_internet	INTERNET	/**/
X
X/* ALLOW_MAILBOX_EDITING:
X *	This symbol, if defined, indicates that the E)dit mailbox
X *	function is to be allowed.
X */
X#$d_mboxedit	ALLOW_MAILBOX_EDITING	/**/
X
X/* MMDF:
X *	This symbol, if defined, indicates that mailboxes are in
X *	the MMDF format.
X */
X#$d_mmdf	MMDF	/**/
X
X/* AUTO_BACKGROUND:
X *	This symbol, if defined, indicates that newmail should go to
X *	the background automatically.
X */
X#$d_newauto AUTO_BACKGROUND /**/
X
X/* NFS_CAPABLE
X *	This symbol, if defined, indicates NFS is available.
X */
X/* NETWORK_ORDER
X *	This symbol, if defined, indicates that the internal files should be kept
X *	in network byte order.
X */
X#$d_nfs	NFS_CAPABLE		/**/
X#$d_networkorder	NETWORK_ORDER		/**/
X
X/* NO_XHEADER:
X *	This symbol, if defined, will not automatically add "X-Mailer:"
X *	headers.
X */
X#$d_noxheader	NO_XHEADER	/**/
X
X/* OPTIMIZE_RETURN:
X *	This symbol, if defined, indicates that Elm should optimize the
X *	return address of aliases.
X */
X#$d_optreturn OPTIMIZE_RETURN /**/
X
X/* LOOK_CLOSE_AFTER_SEARCH:
X *	This symbol, if defined, indicates that the pathalias route
X *	should be used for machines we talk to directly.
X */
X/* DONT_TOUCH_ADDRESSES:
X *	This symbol, if defined, indicates that elm should not
X *	touch outbound addresses
X */
X/* DONT_ADD_FROM:
X *	This symbol, if defined, indicates that elm should not adD
X *	the From: header
X */
X/* USE_DOMAIN:
X *	This symbol, if defined, indicates that elm should add
X *	the domain name to our address
X */
X/* NOCHECK_VALIDNAME:
X *	This symbol, if defined, indicates that elm should not
X *	check the addresses against mailboxes on this system.
X */
X#$d_pafirst	LOOK_CLOSE_AFTER_SEARCH /**/
X#$d_notouchadd	DONT_TOUCH_ADDRESSES /**/
X#$d_noaddfrom	DONT_ADD_FROM /**/
X#$d_usedomain	USE_DOMAIN /**/
X#$d_nocheckvalid NOCHECK_VALIDNAME	/**/
X
X/* PIDCHECK:
X *	This symbol, if defined, means that the kill(pid, 0) will
X *	check for an active pid.
X */
X#$d_pidcheck PIDCHECK		/**/
X
X/* PORTABLE:
X *	This symbol, if defined, indicates to the C program that it should
X *	not assume that it is running on the machine it was compiled on.
X *	The program should be prepared to look up the host name, translate
X *	generic filenames, use PATH, etc.
X */
X#$d_portable	PORTABLE	/**/
X
X/* PTEM:
X *	This symbol, if defined, indicates that the sys/ptem.h include file is
X *	needed for window sizing.
X */
X#$d_ptem	PTEM		/**/
X
X/* REMOVE_AT_LAST:
X *	This symbol, if defined, tells the C code to remove the lock
X *	file on lock failure.
X */
X/* MAX_ATTEMPTS:
X *	This symbol defines to the C code the number of times to try
X *	locking the mail file.
X */
X#$d_remlock REMOVE_AT_LAST	/**/
X#define MAX_ATTEMPTS	$maxattempts
X
X/* SAVE_GROUP_MAILBOX_ID:
X *	This symbol, if defined, indica;es that Elm needs to restore the
X *	group id of the file, as it is running setgid.
X */
X#$d_setgid SAVE_GROUP_MAILBOX_ID	/**/
X
X/* STRCSPN:
X *	This symbol, if defined, indicates that the strcspn() routine exists.
X */
X#$d_strspn	STRSPN		/**/
X
X#$d_strcspn	STRCSPN		/**/
X
X/* STRINGS:
X *	This symbol, if defined, indicates that the file strings.h
X *	should be included not string.h
X */
X/* PWDINSYS:
X *	This symbol, if defined, indicates that the file pwd.h
X *	is in the sys sub directory
X */
X#$d_strings	STRINGS		/**/
X#$d_pwdinsys	PWDINSYS	/**/
X
X/* ALLOW_SUBSHELL:
X *	This symbol, if defined, indicates that the '!' subshell
X *	function is to be allowed at various places.
X */
X#$d_subshell	ALLOW_SUBSHELL	/**/
X
X/* TEMPNAM:
X *	This symbol, if defined, indicates that the tempnam() routine exists.
X */
X#$d_tempnam	TEMPNAM		/**/
X
X/* TERMIOS:
X *	This symbol, if defined, indicates that the program should include
X *	termios.h rather than sgtty.h or termio.h.  There are also differences
X *	in the ioctl() calls that depend on the value of this symbol.
X */
X/* TERMIO:
X *	This symbol, if defined, indicates that the program should include
X *	termio.h rather than sgtty.h.  There are also differences in the
X *	ioctl() calls that depend on the value of this symbol.
X */
X#$d_termios	TERMIOS		/**/
X
X#$d_termio	TERMIO		/**/
X
X/* TZ_MINUTESWEST:
X *	This symbol is defined if this system uses tz_minutes west
X *	in time.h instead of timezone.  Only for BSD Systems
X */
X#$d_tz_min	TZ_MINUTESWEST 	/**/
X
X/* USE_EMBEDDED_ADDRESSES:
X *	This symbol, if defined, indicates that replyto: and from:
X *	headers can be trusted.
X */
X#$d_useembed USE_EMBEDDED_ADDRESSES	 /**/
X
X/* NOUTIMBUF:
X *	This symbol, if defined, means to include our own struct utimbuf.
X */
X#$d_utimbuf NOUTIMBUF		/**/
X
X/* VOIDSIG:
X *	This symbol is defined if this system declares "void (*signal())()" in
X *	signal.h.  The old way was to declare it as "int (*signal())()".  It
X *	is up to the package author to declare things correctly based on the
X *	symbol.
X */
X#$d_voidsig	VOIDSIG 	/**/
X
X/* MAX_SALIASES:
X *	This symbol defines the number of system wide aliases allowed.
X */
X/* MAX_UALIASES:
X *	This symbol defines the number of per user aliases allowed.
X */
X#define	MAX_SALIASES	$maxsysalias	/* number of system aliases allowed      */
X#define	MAX_UALIASES	$maxuseralias	/* number of user aliases allowed 	 */
X
X/* PASSNAMES:
X *	This symbol, if defined, indicates that full names are stored in
X *	the /etc/passwd file.
X */
X/* BERKNAMES:
X *	This symbol, if defined, indicates that full names are stored in
X *	the /etc/passwd file in Berkeley format (name first thing, everything
X *	up to first comma, with & replaced by capitalized login id, yuck).
X */
X/* USGNAMES:
X *	This symbol, if defined, indicates that full names are stored in
X *	the /etc/passwd file in USG format (everything after - and before ( is
X *	the name).
X */
X#$d_passnames	PASSNAMES /*  (undef to take name from ~/.fullname) */
X#$d_berknames	BERKNAMES /* (that is, ":name,stuff:") */
X#$d_usgnames	USGNAMES  /* (that is, ":stuff-name(stuff):") */
X
X/* XENIX:
X *	This symbol, if defined, indicates this is a Xenix system,
X *	for knocking  out the far keyword in selected places.
X */
X/* BSD:
X *	This symbol, if defined, indicates this is a BSD type system,
X */
X#$d_xenix	XENIX	/**/
X#$d_bsd	BSD	/**/
X
X!GROK!THIS!
SHAR_EOF
# ============= doc/Alias.guide ==============
if test ! -d 'doc'; then
    echo "x - creating directory doc"
    mkdir 'doc'
fi
echo "x - extracting doc/Alias.guide (Text)"
sed 's/^X//' << 'SHAR_EOF' > doc/Alias.guide &&
X.\" @(#)$Id: Alias.guide,v 4.1 90/04/28 22:40:58 syd Exp $
X.\"
X.\"  A guide to the ELM alias system and so on.
X.\"  format with:
X.\"      tbl Alias.guide | troff -mn > Alias.format'
X.\"
X.\"  (C) Copyright 1986, 1987 Dave Taylor
X.\"  (C) Copyright 1988, 1989, 1990 USENET Community Trust
X.\"  Elm is now in the public trust. Bug reports, comments, suggestions, flames
X.\"  etc. should go to:
X.\"	Syd Weinstein		elm@DSI.COM (dsinc!elm)
X.\"
X.\"  $Log:	Alias.guide,v $
X.\" Revision 4.1  90/04/28  22:40:58  syd
X.\" checkin of Elm 2.3 as of Release PL0
X.\" 
X.\"  
X.tm Have we been run through "tbl" first?? I hope so!
X.po 1i
X.ds h0
X.ds h1
X.ds h2
X.ds f0
X.ds f1
X.ds f2
X.nr Hy 1
X.nr Pt 1
X.nr Pi 0
X.lg 0
X.nf
X.na
X.rs
X.za
X.sp |3.0i
X.ce 99
X.ps 20
X.ss 18
X.vs 12
X\f3The Elm Alias System Users Guide\f1
X.sp 4
X.ps 12
X.ss 14
X.vs 14
X\f2What aliases are and how to use them
Xin the \f3Elm\fP mail system\f1
X.sp 2
XDave Taylor
X.sp 
XHewlett-Packard Laboratories
X1501 Page Mill Road
XPalo Alto CA
X94304
X.sp 3
Xemail:  taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
X.sp 3
X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
X.sp
XSyd Weinstein
XDatacomp Systems, Inc.
X3837 Byron Road
XHuntingdon Valley, PA 19006-2320
X.sp
Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
X.sp 2
X\s18\f3\(co\f1\s12 Copyright 1986, 1987 by Dave Taylor
X\s18\f3\(co\f1\s12 Copyright 1988, 1989, 1990 by The USENET Community Trust
X.ps 10
X.ss 12
X.vs 12
X.fi
X.ad
X.bp 1
X.sv 5v
X.ps 14
X.ss 12
X.vs 16
X\f3The Elm Alias System Users Guide\f1
X.ds h0 "Alias Users Guide
X.ds h1
X.ds h2 "Version 2.3
X.ds f0 "May 1, 1990
X.ds f1
X.ds f2 "Page %
X.sp
X.ps 10
X.ss 12
X.vs 12
X(Version 2.3)
X.sp 2
XDave Taylor
X.sp
XHewlett-Packard Laboratories
X1501 Page Mill Road
XPalo Alto CA
X94304
X.sp 
Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
X.sp 2
X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
X.sp
XSyd Weinstein
XDatacomp Systems, Inc.
X3837 Byron Road
XHuntingdon Valley, PA 19006-2320
X.sp
Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
X.sp 2
XMay 1, 1990
X.ce 0
X.sp 3
X.pg
XThis document is intended as a supplement to the \f2Elm Users Guide\f1
Xand is only of interest to those users desiring more knowledge
Xabout how aliases work and how to create strange and exciting
Xaliases for their systems (okay, so maybe it's not \f2that\f1 exciting!)
X.sp
X.pg
XThis document is broken up into the following sections;
Xuser aliases,
Xgroup aliases,
Xsystem aliases,
Xediting and installing new aliases,
Xthe host routing database,
Xthe domain routing database,
Xgeneral warnings and other chitchat.
X.sp
X.hn 1 User Aliases
X
XThe most simple type of aliases in the \f3Elm\f1 system are individual
Xuser aliases.  These are made up of three parts;
X.nf
X	\f2aliasname list\f1  =  \f2username\f1  =  \f2address\f1 \s-2\u1\d\s0
X.fn
X1. Notice that the alias separator has moved from being a colon 
Xcharacter (`:') to the equals sign (`=').
XThis is due to the requirements of the X.400 addressing scheme.
X.ef
X.fi
XWhere the \f2aliasname list\f1 is either a single aliasname\s-2\u2\d\s0
X.fn
X2. aliasnames can be any combination of letters, numbers, dashes (`-'),
Xperiods (`.'), or underscores (`_').  Letter case is not significant.
XThat is `FRED' and `Fred' are identical.
X.ef
Xor a list of aliasnames separated by commas.  Aliasnames are case insensitive and will be
Xconverted to all lower case by the alias system.
X.pg
X\f2Username\f1 is used to indicate the full `real name' of the user.  
XFor example, if you had an alias for `taylor' to get to me, the 
X\f2username\f1 field would contain `Dave Taylor' or 
Xperhaps `Dave Taylor at HP'
Xor some other permutation.  \f3Elm\f1
Xuses this information to add the users full name to the addresses of 
Xoutbound mail to get more readable addresses.  
X.pg
X\f2Address\f1 is either the users full electronic mail address or, if
Xthe machine routing database is installed, the minimum address needed
Xto specify the destination.  For example, say our routing database
Xcontained information on how to get to machine `hp-sdd' and I wanted
Xto have an address for my friend Ken there \(em I could have his address
Xspecified as simply `ken@hp-sdd' (or alternatively `hp-sdd!ken' since
Xthe two are functionally equivalent).
X.sp
X.pg 0
XLet's get on to some examples, shall we?
X.sp
XConsider this excerpt from my own \f2.elm/aliases.text\f1 file;
X
X.nf
X.ft CW
X.zf
X.in .5i
X.ta \w'frank,minjarez 'u \w'frank,minjarez = Frank Minjarez 'u
X# Mail aliases for Dave Taylor
X# Friends from UCSD
Xaddie	= Addie Silva	= addie@hp-sdd.SDD.HP.COM
Xfrank,minjarez	= Frank Minjarez	= Minjarez.Verify@dockmaster.arpa
Xpizzini	= Ken Pizzini	= hplabs!ucbvax!ucdavis!pai!ken
X.ft 1
X
X.in 0
X.fi
XNote that the alias for Frank Minjarez has two \f2aliasnames\f1 associated
Xwith it,
X.ft CW
X.zf
Xfrank\f1 and
X.ft CW
X.zf
Xminjarez\f1.
XAlso notice that the first and second aliases
Xuse the ARPA Internet style naming convention of \f2user@machine\f1 
Xwhereas the third uses the UUCP notation of \f2machine!user\f1.
X.pg
XFor the most part, the notational format is transparent within the
Xalias file \(em the only time it \f2does\f1 make a difference 
Xis if you have to specify more than the machine that the user is
Xreceiving mail on (as in the third example above).  
X.pg
XSuffice to say that if you must specify any sort of uucp route
Xthat you should use the uucp notation as much as possible to ensure
Xthat the system expands the correct machine name.  Similarly, if
Xyou're bouncing mail through different ARPA Internet sites (to
Xget to a foreign system, as in the example below) you should use the
Xnotation that system expects:
X
X.ft CW
X.zf
X.ti .5i
X	listserv%byuadmin.BITNET@rugters.edu
X.ft 1
X.sp
X.hn 1 Group Aliases
X
XAfter the confusion of user aliases, group aliases are even more 
Xfun!  For the most part the notation is very similar;
X
X	\f2aliasname list\f1   =   \f2groupname\f1   =   \f2list of people\f1
X
XWhere \f2aliasname list\f1 and \f2groupname\f1 are exactly equivalent
Xto the corresponding fields in user aliases.
X.pg
XThe interesting part is the \f2list of people\f1 field; this
Xfield is actually in the same notation as the aliasname list,
Xso it's really quite easy to create.
XIt's best to illustrate by example:
X
X.ft CW
X.zf
X.nf
X.in .5i
Xfriends, mypals = The Gang of Six = joe, larry, mary, joanna,
X\h'\w'friends, mypals = The Gang of Six = 'u'nancy, michael
X.ft 1
X
X.in 0
X.fi
X(Notice that you can continue onto as many lines as you'd like so
Xlong as each additional line start with either a \s8SPACE\s10 or a \s8TAB\s10
Xcharacter)
X.pg
XThe major limitation with group aliases is that each of the
Xpeople in the list must be a \f2previously defined alias\f1
Xor a valid mail address on the current machine.
X.pg
XWhat does this mean?  That the following excerpt from an alias file:
X
X.in .5i
X.ft CW
X.zf
X.nf
X.ta \w'hawaii 'u \w'hawaii = The Hawaiian Twins 'u
Xhawaii	= The Hawaiian Twins	= joe@cs.rit.edu, maoa
Xmaoa	= Maoa Lichtenski Jr	= maoa@Hawaii.cs.uh.edu
X.ft 1
X
X.in 0
X.fi
Xwill fail for two reasons \(em not only does the group \f2list of people\f1
Xcontain a complex address, but it also contains an aliasname that is 
Xdefined \f2further on\f1 in
Xthe \f2.elm/aliases.text\f1 file.
X.pg
XThe correct way to have the previous aliases in the file are to have them 
Xorganized like:
X
X.ft CW
X.zf
X.in .5i
X.ta \w'hawaii 'u \w'hawaii = The Hawaiian Twins 'u
X.nf
Xjoe	= Joe Lichtenski	= joe@cs.rit.edu
Xmaoa	= Maoa Lichtenski Jr	= maoa@Hawaii.cs.uh.edu
Xhawaii	= The Hawaiian Twins	= joe, maoa
X.ft 1
X
X.in 0
X.fi
Xwhich will then work correctly.
X.sp
XFortunately, while this seems fairly picky, when you run \f2newalias\f1
Xto install the new aliases, you'll get relevant and meaningful
Xerror messages to help you fix your aliases up correctly.
X.sp
X.hn 1 System Aliases
X
XSystem aliases are functionally equivalent to the individual \f3Elm\f1 
Xalias lists each \f3Elm\f1 user has (both user aliases and group aliases) 
Xbut are \f2read only\f1 for everyone but the \f3Elm\f1 administrator.  The 
Xformat of the file is identical to the users file, and the only difference is
Xthat this file is expected to be located in the directory that contains
Xthe \f2system_hash_file\f1 and \f2system_data_file\f1 files (see the
X\f2Elm Configuration Guide\f1 for more details on these variables).
X.pg
XSimply create the system alias file in the specified directory
Xas you would a normal alias file, and install it the same way (see the
Xfollowing section for more details on that).  
X.pg
XVoila!!
X.sp
X.hn 1 Editing and Installing New Aliases
X
XTo install new aliases, you need merely to create, or modify,
Xthe file \f2.elm/aliases.text\f1 until you're
Xsatisfied with it and it meets the requirements discussed above.
XYou can then try to install it with the command;
X
X	$ \f3newalias\f1
X
Xwhich will either report back the number of aliases installed 
Xor any errors encountered trying to parse and store the
Xgiven alias list.
X.pg
XNote that blank lines are no problem and that comments are not only
Xallowed but actually encouraged, and must have `\f3#\f1' as the first
Xcharacter of each comment line.
X.sp
XFinally, if you find that you're hitting the ``Too many aliases'' error, 
Xthen you'll need to reconfigure the entire \f3Elm\f1 system (again,
Xsee \f2The Elm Configuration Guide\f1).
X.sp
X.hn 1 The Hostname Routing Database
X
XFloating about on the various networks is a rather nifty program by
Xa number of people, including Peter Honeyman and Steve Bellovin, 
Xcalled \f2pathalias\f1.  What this software does is 
Xtake the Usenet articles in the group ``comp.mail.maps'' and change
Xthem into a file of the form;
X
X	\f2hostname\f1    <tab>    \f2address\f1
X
Xwhich then must be sorted alphabetically and stored in the file
Xpointed to by \f2pathfile\f1 for \f3Elm\f1 (and other 
Xprograms) to use.
X.pg
XIf you don't have the program, or don't want to use it, you can 
Xsimulate this file by listing machines in the same format.  The
Xexact format expected is;
X
X	\f2hostname\f1<tab>\f2machine-address\f1
X
Xwhere \f2hostname\f1 is a limited identifier (no special characters) and
Xmachine-address MUST contain the sequence `%s' (and consequently
Xany other percent signs that appear in the address must be paired)
Xso that the call in the program ``sprintf(buffer, machine-address, username)''
Xwill generate a valid return address.  This file must be sorted alphabetically
Xfor Elm to use it properly.
X.pg
XBy way of example, here are a few entries from my own file;
X
X.ft CW
X.zf
X.in .5i
X.TS
Xl l.
XHPL	%s@hplabs
XPARC	%s%%Xerox.PA.COM@hplabs
Xamc-hq	%s%%AMC-HQ.ARPA@hplabs
Ximsss	%s%%IMSSS%%AI.STANFORD.EDU@hplabs
Xinfopro	hplabs!infopro!%s
Xinterleaf	sun!interleaf!%s
X.TE
X.ft 1
X
X.in 0
XAs you can see, the addresses can get pretty complicated.  In fact
Xit's due purely to the complexity of addresses that this file 
Xis so useful.
X.sp
X.ne 5
XSome brief examples:
X
X.in .5i
X.ft CW
X.zf
X.nf
X$ \f3elm joe@HPL\f1
X.ft CW
X.zf
XTo: joe@hplabs
X$ \f3elm michelle@imsss\f1
X.ft CW
X.zf
XTo: michelle%IMSSS%AI.STANFORD.EDU@hplabs
X$ \f3elm fiedler@infopro\f1
X.ft CW
X.zf
XTo: hplabs!infopro!fiedler
X.ft 1
X.fi
X
X.in 0
XIf you'd like further information on the \f2pathalias\f1 program, try
Xkeeping track of the entries in the netnews group \f2comp.sources.unix\f1 \(em
Xit's posted about once a year or so...
X.sp
X.hn 1 The Domain Routing Database
X
XAnother interesting feature of the 
X\f3Elm\f1 system is the shorthand domain routing database.  
XThis is the same database (in the same strange format) as used by
Xthe publically available \f2uumail\f1 program.
X.pg
XIn a nutshell, the file contains information of the form;
X
X.in .5i
X\f2domain,   path-to-gateway,  rewrite-template\f1
X.in 0
X
XThe \f2domain\f1 field must begin with a leading `.' and
Xis usually ordered in the same way as the standard
Xdomain entries (that is, ``\s8.HP.COM\s10'' not ``\s8.COM.HP\s10'').
X.pg
X\f2Path-to-gateway\f1 is routing information on how to get
Xto the particular gateway that this domain expects, and
Xalways is a machine/host name (to be found in the pathalias
Xdatabase, see the previous section) preceded by a `>' 
Xcharacter.
X.pg
X\f2Rewrite-template\f1 is the most interesting of the
Xthree, and is akin to a printf string for C.  The 
Xchanges are that instead of `%s' `%d' and so on, the
Xactual ``percent'' values represent various parts of 
Xthe address, namely;
X
X.in .5i
X.TS
Xc l.
X\f3Symbol	Represents\f1
X%U	The username in the To: address
X%N	The remote machine name
X%D	%N + domain information 
X%R	path to %N from pathalias
X%P	\f2path-to-gateway\f1 entry
X%%	The `%' character
X.TE
X.in 0
X
Xwith this very un-intuitive setup, let's look at a few entries 
Xfrom the domains database and then see how they work:
X
X.nf
X.ft CW
X.zf
X.in .5i
X\&.EUR.UUCP, , , %R!%U
X\&.ATT.COM, >att, , %P!%D!%U
X\&.HP.COM, , , %R!%U
X\&.UUCP, , , %R!%U
X\&.COM, >hplabs, , %P!%U@%D
X\&.CSNET, >hplabs, , %P!18:12:00%%D@CSNET-RELAY.ARPA
X\&.EDU, >hplabs, , %P!%U@%D
X.ft 1
X.fi
X.in 0
X
X(Note the presence of a third field that is always null.
XThis is for compatibility with the \f2uumail\f1 program.
XAlso notice that there is a space after each and every comma,
Xeven if that field has an entry.)
X.pg
XTo see how it all works, let's suppose that we want to send a message
Xto `jad@cs.purdue.edu'.  This would break down into the following fields:
X
X.nf
X.in .5i
X%U = \f2jad\f1
X%N = \f2cs\f1
X%D = \f2cs.purdue.edu\f1
X.in 0
X	  
X.fi
XWhen the \f3Elm\f1 program matches the \f2.edu\f1  entry
X
X.nf
X.in .5i
X.ft CW
X.zf
X\&.EDU, >hplabs, , %P!%U@%D
X.ft 1
X.in 0
X
X.fi
Xthe other field instantiated would be:
X
X.nf
X.in .5i
X%P = \f2path to hplabs\f1
Xtemplate = \f2%P!%U@%D\f1
X.in 0
X.fi
X
XIf, say, our path to \f2hplabs\f1 was \f2hpcnoe!hplabs\f1, then
Xthe fully expanded address would be:
X
X.nf
X.ft CW
X.zf
X.in .5i
Xhpcnoe!hplabs!jad@cs.purdue.edu
X.ft 1
X.in 0
X.fi
X
X\f1and so on.  
X.sp
XWhat does this mean to the average user?  It means that you can
Xfor the most part send mail to people on different networks by
Xsimply using their full address, including any domain information, 
Xso that mail to addresses like ``Jack@AI.MIT.EDU'' will work, 
Xa message to ``SueAnn@BBN.MAILNET'' will work and so on!
X.sp
X.hn 1 Other Stuff not Covered Yet
X
XProbably the biggest question you have in your mind right now
Xis ``But how the heck does this relate to my existing \f2Berkeley Mail\f1
Xaliases and the lower-level \f2sendmail\f1 alias system??''  Well,
Xrest assured that if you \f2really\f1 want to have
Xyour aliases down in the transport you can.  No problem.  All you'll
Xneed to do is to turn off the address validation routine in \f3Elm\f1.
X.pg
XAnd for those ex-\f2Berkeley Mail\f1 fans, you can translate your 
Xaliases into the format that \f3Elm\f1 wants by running them
Xthrough the \f2awk\f1 script listed in the appendix.
X.pg
XFinally, if you have any problems or questions, try looking in 
Xthe \f2newalias\f1 manual entry, or dropping me a line at the
X``usual'' email address.
X.bp
X.ce 99
X\f3Appendix One
XAn AWK Script for Translating Aliases from 
Xa \f2Berkeley Mail\fP ``.mailrc'' File to an \f2Elm\fP ``.elm/aliases.text'' 
XFile\f1
X.ce 0
X.sp 
X.nf
X
X.ta .5i
X.ft CW
X.zf
XBEGIN { print "# Elm .elm/aliases.text file, from a .mailrc file..." 
X	print ""
X	}
Xnext_line == 1 { 
X	next_line = 0;
X	group = ""
X	for (i = 1; i <= NF; i++) {
X	  if (i == NF && $i == "\\\\") sep = ""
X	  else                       sep = ", "
X	  if ($i == "\\\\") {
X	    group = sprintf("%s,", group)
X	    next_line = 1;
X	  }
X	  else if (length(group) > 0)
X	    group = sprintf("%s%s%s", group, sep, $i);
X	  else
X	    group = $i;
X	  }
X	  print "\\t" group
X	}
X$1 ~ /[Aa]lias | [Gg]roup/ { 
X	if ( NF == 3)
X	  print $2 " = user alias = " $3;
X	else {
X	  group = ""
X	  for (i = 3; i <= NF; i++) {
X	    if (i == NF && $i == "\\\\") sep = ""
X	    else        sep = ", "
X	    if ($i == "\\\\") {
X	      group = sprintf("%s,", group)
X	      next_line = 1;
X	    }
X	    else if (length(group) > 0) 
X	      group = sprintf("%s%s%s", group, sep, $i);
X	    else
X	      group = $i;
X	    }
X	    print $2 " = group alias = " group;
X	  }
X	}
X
X.ft 1
X.fi
XNote: this script is contained in the release under the name ``mailrc.awk''
Xin the utilities directory ``utils''.
SHAR_EOF
# ============= doc/Config.guid ==============
echo "x - extracting doc/Config.guid (Text)"
sed 's/^X//' << 'SHAR_EOF' > doc/Config.guid &&
X.\" @(#)$Id: Config.guid,v 4.1 90/04/28 22:41:00 syd Exp $
X.\"
X.\"  A guide to the ELM alias system and so on.
X.\"  format with:
X.\"      'troff tmac.n Config.guid > Config.fmtd'
X.\"
X.\"  (C) Copyright 1986, 1987 Dave Taylor
X.\"  (C) Copyright 1988, 1989, 1990 Usenet Community Trust
X.\"  Elm is now in the public trust. Bug reports, comments, suggestions, flames
X.\"  etc. should go to:
X.\"	Syd Weinstein		elm@DSI.COM (dsinc!elm)
X.\"
X.\"  $Log:	Config.guid,v $
X.\" Revision 4.1  90/04/28  22:41:00  syd
X.\" checkin of Elm 2.3 as of Release PL0
X.\" 
X.\"
X.tm Have we been run through "tbl" first?? I hope so!
X.po 1i
X.ds h0
X.ds h1
X.ds h2
X.ds f0
X.ds f1
X.ds f2
X.nr Hy 1
X.nr Pt 1
X.nr Pi 0
X.lg 0
X.nf
X.na
X.rs
X.za
X.sp |3.0i
X.ce 99
X.ps 20
X\f3Elm Configuration Guide\f1
X.sp 4
X.ps 12
X.ss 14
X.vs 14
X\f2How to install and customize the Elm mail system\f1
X.sp 2
XDave Taylor
X.sp
XHewlett-Packard Laboratories
X1501 Page Mill Road
XPalo Alto CA
X94304
X.sp 3
Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
X.sp 3
X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
X.sp
XSyd Weinstein
XDatacomp Systems, Inc.
X3837 Byron Road
XHuntingdon Valley, PA 19006-2320
X.sp
Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
X.sp 3
X.ps 18
X\f3\(co\f1\s12 Copyright 1986,1987 by Dave Taylor
X.ps 18
X\f3\(co\f1\s12 Copyright 1988, 1989, 1990 by The USENET Community Trust
X.ps 10
X.ss 12
X.vs 12
X.fi
X.ad
X.bp 1
X.sv 5v
X.ps 14
X\f3Elm Configuration Guide\f1
X.ds h0 "Elm Configuration Guide
X.ds h1
X.ds h2 "Version 2.3
X.ds f0 "May 1, 1990
X.ds f1 "Page %
X.sp
X.ps 10
X(Version 2.3)
X.sp 2
XDave Taylor
X.sp
XHewlett-Packard Laboratories
X1501 Page Mill Road
XPalo Alto CA
X94304
X.sp 
Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
X.sp 2
X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
X.sp
X.sp
XSyd Weinstein
XDatacomp Systems, Inc.
X3837 Byron Road
XHuntingdon Valley, PA 19006-2320
X.sp
Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
X.sp 2
XMay 1, 1990
X.ce 0
X.sp 3
X.pg
XThis document is intended as a supplement to the \f2Elm Users Guide\f1
Xand \f2Elm Reference Guide\f1
Xand should be of interest mainly to people at a site either installing
Xor maintaining the source code to the \f3Elm\f1 mail system, or
Xmodifying the code.
X.sp 
XIt is \f2required\f1 that installation be done by using the
X\f2Configure\f1 script supplied with the system.  Please see the
Xfile \f2Instruct\f1 for further information on running \f2Configure\f1.
X.sp
XThe remainder of this document will discuss the various questions
Xasked by the \f2Configure\f1 script and the
Xoptions available via direct editing of various files and
Xparameters.  As indicated above, almost all of the sites that install
X\f3Elm\f1 should find the \f2Configure\f1 script more than
Xsufficient.
X.hu Using Configure
X.pg
X\f2Configure\fP is a shell script that will automatically determine the
Xtype of system it is running on and tune the parameters of Elm to fit
Xthat system and its environment.  Where the installer has a choice, it
Xasks questions of the installer.  \f2Configure\fP provides its own
Xinstructions when run, so they are not repeated here.  However, when
Xthe installer is presented with a choice, this next section explains
Xsome of the options available.  Not all the questions or options to
Xthose questions are explained.
X.sp 2
X.pg
XEnable calendar feature?
X.sp
XElm has a feature to take specially marked lines within mail messages
Xand add them to a file for use by the system calendar program.  The
Xcommand to do this extraction needs to be enabled to work.  There is
Xalso a follow on question regarding the name of the calendar file:
X.pg
XDefault calendar file?
X.sp
Xwhich is usually calendar on most systems.  This file will reside in the
Xusers home directory, not their .elm directory.
X.pg
XDoes your /etc/passwd file keep full names in Berkeley/V7 format (name
Xfirst thing after ':' in GCOS field)?
X.sp
XElm uses the full name from the password file if it is available.
XThere are two major ways this name is stored.  Berkeley/V7 systems
Xplace the name as the entire GCOS field string, that is it starts
Xdirectly after the ':' that delimits the fields.  USG
X.ux " Systems" (
XGroup, or AT&T) systems put the users name after a department number
Xand separate it from that number by a '-'.  The end of the users full
Xname in these systems is a '('.  Look at your /etc/password file and if
Xeither version applies, answer yes to that version.  If neither
Xapplies, answer no.  Elm can still get the users name from the
X".fullname" file in their home directory.
X.pg
XEvery now and then someone has a (gethostname, uname) that lies about
Xthe hostname but can't be fixed for political or economic reasons.
XWould you like to pretend (gethostname, uname) isn't there and maybe
Xcompile in the hostname?
X.sp
XElm needs to know the correct name of the host on which it is executing
Xto be able to create the proper headers for the outbound mail.  Some systems
Xuse one name for uucp and another name for the system and others just don't
Xreply to the subroutines with the proper name.  In this case it will be
Xnecessary to compile in the name.  In all other cases this should not
Xbe needed.  It is provided just in case there is a problem with your
Xsystem.
X.pg
XDoes your mailer understand INTERNET addresses?
X.sp
XElm will work with systems that can process the `@' character of INTERNET
Xformat addresses or with the `!' format of uucp addresses.  If your
Xmail delivery agent understands the `@' format addresses, they should be
Xused and this question is answered yes.  If when you send mail with the
X`@' format addresses (such as elm@dsi.com), they bounce, then answer this
Xquestion no.
X.pg
XAm I going to be running as a setgid program?
X.sp
XOn USG type systems and many other types,
Xaccess to the mailboxes and the mailbox directory
Xis via the group permissions.  The mail user agents, such as Elm, need
Xwrite access into this directory to be able to move the mailbox around
Xdue to internal editing and to create lock files.  If the permissions
Xon your mailbox directory are drwxrwxr-x, then Elm needs to be a setgid
Xprogram.
X.pg
XWhat is the default editor on your system?
X.sp
XIf no editor is specified in the users \f2.elm/elmrc file,\f1 this is which
Xeditor to use.  The editor is used to compose outbound mail messages.
X.pg
XWhat pager do you prefer to use with Elm?
X.sp
XThis is the standard pager to use for reading messages.
XBesides the usual system pagers, two Elm specific internal options
Xexist: builtin and builtin+.  The built-in pager is faster to execute
Xbut much less flexible than the system provided pagers.  The + version
Xjust clears the page before displaying the next page.  Otherwise the
Xtwo versions are identical.
X.hu Other Configurable Parameters
X.pg
XThe following parameters rarely need to be changed, but are provided if
Xyou need them.  \f2Configure\fP does not prompt for their values.  To
Xchange them, edit the \f2hdrs/sysdefs.h\f1 file directly after running
XConfigure.
X.lp FIND_DELTA 1.0i
XThis is the delta that the binary search of the pathalias database
Xwill use to determine when it's slicing up a single line, rather than
Xa multitude of lines.   Ideally, this should be set to 1 byte less
Xthan the shortest line in the file...the default is 10 bytes.
X.lp MAX_IN_WEEDLIST 1.0i
XThe maximum number of headers that can be specified in the weedout
Xlist of the \f2.elm/elmrc\f1 file.  A suggested alternative approach if this
Xnumber is too small is to specify initial substrings in the file
Xrather than increasing the number.  For example, say you want to 
Xweedout the headers ``Latitude:'' and ``Latitudinal-Coords:'', you
Xcould simply specify ``Latitud''" and match them both!  Furthermore
Xyou could also specify headers like ``X-'' and remove all the user
Xdefined headers!
X.lp MAX_HOPS 1.0i
XWhen replying to a G)roup, this is the maximum number of hops that
Xa message can have taken.  This is used to try to optimize the 
Xreturn address (remove cyclic loops and so on) and regular use
Xshould show that the default of 35 is plenty more than you'll
Xever need!
X.lp system_text_file 1.0i
XThis is the source text file for the system level aliases.
XSee either the \f2newalias(1L)\f1 man page, or \f2The Elm
XAlias System Users Guide\f1 for further details.
X.lp system_hash_file 1.0i
XThis is the file that contains the hashed version of the system 
Xaliases.  
X.lp system_data_file 1.0i
XThis is the other file the \f2newalias\f1 command installs in the system
Xalias area and contains the actual addresses for each of the aliases
Xcontained in the hashed data file.
X.lp ALIAS_TEXT 1.0i
XThis is where the individual users alias text file lives.
X.lp ALIAS_HASH 1.0i
XWhere the hashed aliases are stored,
X.lp ALIAS_DATA 1.0i
Xand where the alias address data itself is kept.
X.lp DEBUGFILE 1.0i
XThe name of the file to put in the users home directory if they choose to
Xuse the `-d' debug option. 
X.lp OLDEBUG 1.0i
XThe name of the file to save the previous debug output as.  (this feature
Xwas added to ensure that users wanting to mail bug reports wouldn't 
Xautomatically overwrite the debug log of the session in question)
X.lp temp_lock_dir 1.0i
XDirectory for lock files for XENIX.
X.lp temp_file 1.0i
XTemporary file for sending outbound messages.
X.lp temp_form_file 1.0i
XA place to store temporary forms (for Forms Mode) while answering them.
X.lp temp_mbox 1.0i
XPlace to keep copy of incoming mailbox to avoid collisions with newer
Xmail.
X.lp temp_print  1.0i
XFile to use when creating a printout of a message.
X.lp temp_edit 1.0i
XFile to use when editing the mailbox file on XENIX.
X.lp temp_uuname 1.0i
XWhere to redirect output of the \f2uuname(1M)\f1 command.
X.lp mailtime_file 1.0i
XFile to compare date to to determine if a given message is New
Xsince the last time the mail was read or not.
X.lp readmsg_file 1.0i
XFile to use when communicating with the \f2readmsg\f1 program (see
Xthat program for more information)
X.lp smflags  1.0i
XDefines the flags to hand to \f2sendmail\f1 if and when the program
Xchooses to use it.
X.lp smflagsv 1.0i
XDefines the flags to hand to \f2sendmail\f1 in verbose voyuer mode.
X.lp mailer 1.0i
XIf you don't have \f2sendmail\f1, this is the mailer that'll be used.
X.lp helpfile 1.0i
XThe help file name prefix.
X.lp ELMRC_INFO 1.0i
XThe file containing textual messages associated with each
X\f3Elm\f1 variable setting in the users \f2``.elm/elmrc''\f1
Xfile.  This is used when the user chooses to auto-save the
Xoptions from within the main program.
X.lp elmrcfile 1.0i
XThe name of the automatic control file within the \f2.elm\f1
Xdirectory. (currently \f2elmrc\f1)
X.lp old_elmrcfile 1.0i
XWhen a new elmrc file is saved, the old one is also saved, being
Xrenamed to whatever this identifier is set to.
X.lp mailheaders  1.0i
XThe name of the optional file that users may have that will be
Xincluded in the headers of each outbound message.
X.lp dead_letter 1.0i
XIf the user decides not to send a message it will instead be saved
Xto this filename in their home directory.
X.lp unedited_mail 1.0i
XIn the strange case when the mailer suddenly finds all the directories
Xit uses shut off (like \f2/usr/mail\f1 and \f2/tmp\f1) 
Xthen it'll put the current
Xmailbox into this file in the users home directory.
X.lp newalias 1.0i
XHow to install new aliases..(note: you MUST have the '-q' flag!)
X.lp readmsg 1.0i
XWhat the \f2readmsg(1L)\f1 program is installed as.
SHAR_EOF
# ============= doc/Elm.cover ==============
echo "x - extracting doc/Elm.cover (Text)"
sed 's/^X//' << 'SHAR_EOF' > doc/Elm.cover &&
X.\" @(#)$Id: Elm.cover,v 4.1 90/04/28 22:41:01 syd Exp $
X.\"
X.\"  Cover sheet for the ELM mail system...
X.\"  format with 
X.\"	troff tmac.n Elm.cover > Coversheet.fmtd'
X.\"
X.\"  Elm is now in the public trust. Bug reports, comments, suggestions, flames
X.\"  etc. should go to:
X.\"	Syd Weinstein		elm@DSI.COM (dsinc!elm)
X.\"
X.\"  (C) Copyright 1986, 1987 Dave Taylor
X.\"  (C) Copyright 1988, 1989, 1990 Usenet Community Trust
X.\"
X.\"  $Log:	Elm.cover,v $
X.\" Revision 4.1  90/04/28  22:41:01  syd
X.\" checkin of Elm 2.3 as of Release PL0
X.\" 
X.\"  
X.po 1i
X.ds h0
X.ds h1
X.ds h2
X.ds f0
X.ds f1
X.ds f2
X.nr Hy 1
X.nr Pt 1
X.nr Pi 8
X.lg 0
X.nf
X.na
X.rs
X.za
X.sv |3.0i
X.ce 99
X.ps 25
X\fBThe \s26Elm\s25 Mail System\fR
X.sp 2
X.ps 14
X.ss 16
X.vs 16
X\fIA Replacement Mailer for All Unix Systems\fR
X.sp 3
XDave Taylor
X.sp
XHewlett-Packard Laboratories
X1501 Page Mill Road
XPalo Alto CA
X94304
X.sp
Xemail: taylor\s12@\s14hplabs \ or \ hplabs!taylor
X.sp 4
X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
X.sp
XSyd Weinstein
XDatacomp Systems, Inc.
X3837 Byron Road
XHuntingdon Valley, PA 19006-2320
X.sp
Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
SHAR_EOF
# ============= doc/Filter.guid ==============
echo "x - extracting doc/Filter.guid (Text)"
sed 's/^X//' << 'SHAR_EOF' > doc/Filter.guid &&
X.\" @(#)$Id: Filter.guid,v 4.1 90/04/28 22:41:03 syd Exp $
X.\"
X.\"  A guide to the Elm Filter program
X.\"  format with:
X.\"	 'tbl tmac.n Filter.guid | troff > Filter.format'
X.\"
X.\"  (C) Copyright 1986, 1987 Dave Taylor
X.\"  (C) Copyright 1988, 1989, 1990 Usenet Community Trust
X.\"
X.\"  Elm is now in the public trust. Bug reports, comments, suggestions, flames
X.\"  etc. should go to:
X.\"	Syd Weinstein		elm@DSI.COM (dsinc!elm)
X.\"
X.\"  $Log:	Filter.guid,v $
X.\" Revision 4.1  90/04/28  22:41:03  syd
X.\" checkin of Elm 2.3 as of Release PL0
X.\" 
X.\" Revision 3.8  90/03/26  15:12:06  syd
X.\"
X.tm Have we been run through "tbl" first?? I hope so!
X.po 1i
X.ds h0
X.ds h1
X.ds h2
X.ds f0
X.ds f1
X.ds f2
X.nr Hy 1
X.nr Pt 1
X.nr Pi 8
X.lg 0
X.nf
X.na
X.rs
X.za
X.sp |3.0i
X.ce 99
X.ps 20
X.ss 18
X.vs 12
X\f3The Elm Filter System Guide\f1
X.sp 4
X.ps 12
X.ss 14
X.vs 14
X\f2What the filter program is, what it does,
Xand how to use it\f1
X.sp 2
XDave Taylor
X.sp
XHewlett-Packard Laboratories
X1501 Page Mill Road
XPalo Alto CA
X94304
X.sp 3
Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
X.sp 3
X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
X.sp
XSyd Weinstein
XDatacomp Systems, Inc.
X3837 Byron Road
XHuntingdon Valley, PA 19006-2320
X.sp
Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
X.sp 3
X.ps 18
X\f3\(co\f1\s12 Copyright 1986, 1987 by Dave Taylor
X.ps 18
X\f3\(co\f1\s12 Copyright 1988, 1989, 1990 by The USENET Community Trust
X.ps 10
X.ss 12
X.vs 12
X.fi
X.ad
X.bp 1
X.sv 5v
X.ps 14
X\f3The Elm Filter System Guide\f1
X.ds h0 "Elm Filter Guide
X.ds h2 "Version 2.3
X.ds f0 "May 1, 1990
X.ds f1 "Page %
X.sp
X.ps 10
X(Version 2.3)
X.sp 2
XDave Taylor
X.sp
XHewlett-Packard Laboratories
X1501 Page Mill Road
XPalo Alto CA
X94304
X.sp 
Xemail: taylor\s-1@\s+1hplabs.HP.COM  or  hplabs\s-1!\s+1taylor
X.sp 2
X>>> Elm is now in the public trust. Bug reports, comments, etc. to: <<<
X.sp
XSyd Weinstein
XDatacomp Systems, Inc.
X3837 Byron Road
XHuntingdon Valley, PA 19006-2320
X.sp
Xemail: elm\s-1@\s+1DSI.COM  or  dsinc\s-1!\s+1elm
X.sp 2
XMay 1, 1990
X.ce 0
X.sp 3
X.pg
XOne of the greatest problems with the burgeoning electronic mail
Xexplosion is that I tend to get lots of mail that I don't care about.
XAmusingly, perhaps, I have the equivalent of electronic junk mail.
XNot amusing, however, is the fact that this can rapidly 
Xaccumulate and end up taking over my mailbox.
X.pg
XAt the same time I often get mail that, while it is interesting
Xand important, can easily be filed to be read later, without ever
Xactually having to cluttering up my incoming mailbox.
X.sp 2
XThis, then, is what \f2filter\f1 does!  The \f2filter\f1 program
Xallows you to define a set of rules by which all incoming mail should
Xbe screened, and a subsequent set of actions to perform based on whether
Xthe conditions were met or not.  \f2Filter\f1 also has the ability to mail
Xa summary of what actions it performed on the incoming mail as often as
Xyou'd like.
X.ne 5
X.hu Writing the Rules
X.sp
XThe language for writing \f2filter\f1 rules is pretty simple, actually.
XThe fundamental structure is;
X.nf
X.ti .5i
Xif  (\f2condition\f1)  then  \f2action\f1
X.fi
XWhere \f2condition\f1 is constructed by an arbitrary number of 
Xindividual conditions of the form ``\f2field\f1  \f2relation\f1  \f2value\f1''.
X(an optional further type of rule is of the form ``always \f2action\f1''
Xbut should only be used as the last rule in the ruleset, for obvious
Xreasons).
XThe \f2field\f1 value can be;
X.nf
X.in .5i
Xsubject
Xfrom
Xto
Xlines
Xcontains
X.in 0
X.fi
Xwhere, if ``lines'' is chosen, the \f2relation\f1 can be any of the
Xstandard relationships (`>', `<', `>=', `<=', `!=' and `=').  
XIf another action is
Xchosen, ``contains'' can be used as the relation, ``='', or, if you'd
Xlike, you can skip the relationship entirely (e.g. `subject "joe"').
XThe \f2value\f1 is any quoted string that is to be matched against
Xor number if ``lines'' is the field being considered.
X.sp
XIndividual conditions are joined together by using the word ``and'',
Xand the logic of a condition can be flipped by using ``not'' as the
Xfirst word (e.g. `not subject "joe"').  We'll see more examples of
Xthis later.
X.sp
XNote that the ``or'' logical conjunction isn't a valid part of the
X\f2filter\f1 conditional statement.  
X.sp
XFinally, <\f2action\f1> can be any of;
X.nf
X.in .5i
Xdelete
Xsave   \f2foldername\f1
Xsavecopy  \f2foldername\f1
Xforward  \f2address\f1
Xexecute  \f2command\f1
Xleave
X.in 0
X.fi
Xwhere they result in the actions;  \f3delete\f1 deletes the message;
X\f3save\f1 saves a copy of the message in the specified foldername;
X\f3savecopy\f1 does the same as save, but also puts a copy in your mailbox;
X\f3forward\f1 sends the message to the specified address; 
X\f3execute\f1 feeds the message to the specified command (or complex
Xsequence of commands) as standard input;
Xand \f3leave\f1 leaves the message in your mailbox.
X.sp
XFoldernames can contain any of a number of macros, too, as we'll see in
Xthe example ruleset below.  The macros available for the string fields are;
X.ft CW
X.zf
X.TS
Xcenter;
Xlf3 lf3
Xl l.
XMacro	Meaning
X.ft CW
X.zf
X%d	day of the month
X%D	day of the week (0-6)
X%h	hour of the day (0-23)
X%m	month of the year (0-11)
X%r	return address of message
X%s	subject of original message
X%S	``Re: \f2subject of original message\fP''
X.ft CW
X.zf
X%t	current hour and minute in HH:MM format
X%y	year (last two digits)
X.TE
X.ft 1
X.sp
XThe rules file can also contain comments (any line starting with a `#')
Xand blank lines.  
X.sp 
XThe file itself needs to reside in your .elm directory off your home directory and be 
Xcalled \f2.elm/filter-rules\f1.  Here's an example:
X.nf
X.ft CW
X.zf
X # $HOME/.elm/filter-rules
X #
X # Filter rules for the Elm Filter program. Don't change without some
X # serious thought. (remember - order counts)
X #
X # (for Dave Taylor)
X # rule 1
X if (from contains "!uucp") then delete
X # rule 2
X to "postmaster" ? save "/tmp/postmaster-mail.%d"
X # rule 3
X if (to "culture" and lines > 20) ? save "/users/taylor/Mail/culture"
X # rule 4
X subject = "filter test" ? forward "hpldat!test"
X # rule 5
X if [ subject = "elm" ] savecopy "/users/taylor/Mail/elm-incoming"
X # rule 6
X subject = "display-to-console" ? execute "cat - > /dev/console"
X.fi
X.ft 1
X(notice the loose syntax \(em there are lots of valid ways to specify a
Xrule in the \f2filter\f1 program!!)
X.sp
XTo translate these into English;
X.sp
X.nr TW \w'1. 'u
X.in .5i
X.ti -\n(TWu
X1. All messages from uucp should be summarily deleted.
X
X.ti -\n(TWu
X2. All mail to postmaster should be saved in a folder (file) called 
X/tmp/postmaster-mail.\f2numeric-day-of-the-week\f1
X
X.ti -\n(TWu
X3. All mail addressed to `culture' with at least 20 lines
Xshould be automatically appended to the folder
X/users/taylor/Mail/culture.
X
X.ti -\n(TWu
X4. All messages that contain the subject `filter test' should be forwarded to
Xme, but via the address `hpldat!test' (to force a non-user forward)
X
X.ti -\n(TWu
X5. All messages with a subject that contains the word `elm' should be saved in
Xthe folder ``/users/taylor/Mail/elm-incoming'' and also dropped into my
Xmailbox.
X
X.ti -\n(TWu
X6. Any message with the subject ``display-to-console'' will be immediately
Xwritten to the console.
X.in 0
X.sp
XNotice that the \f2order\f1 of the rules is very important.  If we, for 
Xexample, were to get a message from `uucp' that had the subject `filter test',
Xthe \f2filter\f1 program would match rule 1 and delete the message.  It 
Xwould never be forwarded to `hpldat!test'.  It is for this reason that
Xgreat care should be taken with the ordering of the rules.
X.ne 5
X.hu Checking the rules out
X.sp
XThe \f2filter\f1 program has a convenient way of check out the rules you 
Xhave written.  Simply invoke it with the \f3-r\f1 (\f3r\f1ules) flag;
X.nf
X.in .5i
X% \f3filter -r\f1
X.ft CW
X.zf
X.in .5i+\w'Rule 1: 'u
X.ti .5i
XRule 1: if (from = "!uucp") then
XDelete 
X.ti .5i
XRule 2: if (to = "postmaster") then
XSave  /tmp/postmaster-mail.<day-of-week>
X.ti .5i
XRule 3: if (to = "culture" and lines > 20) then
XSave  /users/taylor/Mail/culture
X.ti .5i
XRule 4: if (subject = "filter test") then
XForward  hpldat!test
X.ti .5i
XRule 5: if (subject="elm") then
XCopy  and  Save  /users/taylor/Mail/elm-incoming
X.ti .5i
XRule 6: if (subject="display-to-console") then
XExecute "cat - > /dev/console"
X.ft 1
X.in 0
X.fi
X.sp
X.ft 1
XThere are a few things to notice \(em first off, these are the parsed and
Xrebuilt rules, so we can see that they are all in a 
Xconsistent format.  Also, notice on the filename for rule 2 that the
Xprogram has correctly expanded the ``%d'' macro to be the day of the 
Xweek.
X.sp
XIt is \f3highly\f1 recommended that you always check your ruleset before
Xactually letting the program use it!
X.ne 5
X.hu Actually Using the Program
X.sp
XNow the bad news.  If you aren't running \f2sendmail\f1 you cannot use
Xthis program as currently written.  Why?  Because the \f2filter\f1
Xprogram expects to be put in your \f2.forward\f1 file and that is something
Xthat only \f2sendmail\f1 looks at!
X.sp
XThe format for the entry in the \f2.forward\f1 file (located in your
Xhome directory) is simply;
X.nf
X.ti .5i
X"| /usr/local/bin/filter"
X.fi
XAllright, it isn't quite \f2that\f1 simple!  Since \f2filter\f1 will be invoked
Xby processes that don't know where you are logged in, you need to have some
Xway to trap the error messages.  For ease of use, it was decided to have all
Xthe messages written to the file specified by `-o' (or \f2stderr\f1)
Xwhich means that you have two main
Xchoices for the actual entry.  Either;
X.nf
X.ti .5i
X"| /usr/local/bin/filter -o /dev/console"
X.fi
Xwhich will log all errors on the system console (each error is prefixed with
X``filter (\f2username\f1)'' to distinguish it), or;
X.nf
X.ti .5i
X"| /usr/local/bin/filter -o /tmp/joe.filter_errors"
X.fi
XIf you want to have a copy saved to a file.  Note that the quotes are a required
Xpart of the line.  A possible strategy would be
Xto have the errors written to a file and to then have a few lines in 
Xyour \f2.login\f1 script like:
X.nf
X.ft CW
X.zf
X.in .5i+\w'if 'u
X.ti .5i
Xif ( -f /tmp/joe.filter_errors) then
Xecho  "\ \ "
Xecho "Filter program errors;"
Xcat /tmp/joe.filter_errors
Xecho "\ \ "
X.ti .5i
Xendif
X.ft 1
X.in 0
X.ft 1
X.fi
XYou can also use the \f3-v\f1 flag in combination with the above to have
Xa more verbose log file saved by having
Xyour \f2.forward\f1 file;
X.nf
X"| /usr/local/bin/filter -vo /tmp/joe.filter_errors"
X.fi
XSuffice to say, you can get pretty tricky with all this!!
X.ne 5
X.hu Summarizing the Actions Taken
X.sp
XThe \f2Filter\f1 program keeps a log of all actions performed, including
Xwhat rules it matched against, in your .elm directory in a file 
Xcalled \f2.elm/filterlog\f1.  You can either directly operate on this file,
Xor, much more recommended, you can one of the two summarize flags to
Xthe program and let \f2it\f1 do the work for you!
X.sp
XThe difference between the two is best demonstrated by example:
X.nf
X% \f3filter -s\f1
X.ft CW
X.zf
X.in .5i
X                Summary of Filter Activity
X                \l'\w'Summary of Filter Activity'u-'
XA total of 418 messages were filtered:
XThe default rule of putting mail into your mailbox
X.in .5i+\w'Rule #1: 'u
Xapplied 364 times (87%)
X.ti .5i
XRule #1: (delete message)
Xapplied 1 time (0%)
X.ti .5i
XRule #2: (save in "/users/taylor/Filtered-Mail/netnews.12")
Xapplied 8 times (2%)
X.ti .5i
XRule #3: (save in "/users/taylor/Filtered-Mail/postmaster.12")
Xapplied 14 times (3%)
X.ti .5i
XRule #5: (save in "/users/taylor/Filtered-Mail/risks.12")
Xapplied 3 times (1%)
X.ti .5i
XRule #6: (save in "/users/taylor/Filtered-Mail/rays.12")
Xapplied 28 times (7%)
X.ft 1
X.ti 0
Xversus:
X.ti .5i
X% \f3filter -S\f1
X.ti .5i
X\f2the output as listed above, followed by:\f1
X.ft CW
X.zf
X.ti .5i
XExplicit log of each action;
X.ti .5i
XMail from taylor about Filter Summary
XPUT in mailbox: the default action
X.ti .5i
XMail from news@hplabsz.hpl.hp.com about Newsgroup comp.editors created
XPUT in mailbox: the default action
X.ti .5i
XMail from root about Log file: cleanuplog
XPUT in mailbox: the default action
X.ft 1
X.ti .5i
X[etc etc]
X.in 0
X.ft 1
X.fi
XTo actually use either of the summarizing options, there 
Xare two ways that are recommended;
X.sp
XThe preferred way is to have a line in either your \f2crontab\f1
X(ask your administrator for help with this) that invokes the \f2filter\f1
Xprogram as often as you desire with the \f3-s\f1 flag.  For example, I
Xhave a summary mailed to me every morning at 8:00 am:
X.nf
X.ft CW
X.zf
X   0 8 * * * "/usr/local/bin/filter -s | elm -s 'Filter Summary' taylor"
X.fi
X.sp
X.ft 1
XAn alternative is to have your \f2.login\f1 execute the command each time.
X.sp 2
XNote that if you want to have your log files cleared out each time the 
Xsummary is generated you'll need to use the '-c' flag too.  Also,
Xif you want to keep a long list of actions performed you can do this
Xby saving it as you display it.  A way to do this would be, if you were to
Xhave the invocation in your \f2.login\f1 script, to use:
X.nf
X.in .5i
X.ft CW
X.zf
Xecho "Filter Log;"
Xfilter -c -s | tee -a PERM.filter.log\f1
X.ft 1
X.in 0
X.fi
Xwhich would append a copy of all the output to the file `PERM.filter.log'
Xand would avoid you having to read larger and larger summaries of
Xwhat the program had done.
X.ne 5
X.hu Further Testing of the Ruleset
X.sp
XWith the \f2readmsg\f1 command available, it is quite easy to test the
Xrules you've written to see if they'll do what you desire.  
X.sp
XFor example, we can use the \f3-n\f1 flag to \f2filter\f1, which means
X`don't actually do this, just tell me what rule you matched, if any, and
Xwhat action you would have performed' (you can see why a single letter 
Xflag is easier to type in!!), and feed it each message in our mailbox 
Xby using a command like;
X.nf
X.in .5i
X% \f3set message=1\f1
X% \f3set total_messages=`messages`\f1
X% \f3while  (1)\f1
X> \f3if ($message > $total_messages) exit\f1
SHAR_EOF
echo "End of  part 3"
echo "File doc/Filter.guid is continued in part 4"
echo "4" > shar3_seq_.tmp
exit 0
Newsgroups: biz.sco.sources