From: syd@dsinc.DSI.COM (Syd Weinstein)
Newsgroups: comp.mail.elm,comp.sources.bugs
Subject: elm 2.4 Patch #19
Followup-To: poster
Date: 5 Jan 1993 13:08:16 -0500
Organization: Datacomp Systems, Inc., Huntingdon Valley, PA 19006
NNTP-Posting-Host: dsinc.dsi.com
Summary: This is an official patch for elm 2.4 system.  Please apply it.
Priority: LOW

This is part 2 of a 3 part patch

Fix:	From rn, say "| patch -p -N -d DIR", where DIR is your elm source
	directory.  Outside of rn, say "cd DIR; patch -p -N <thisarticle".
	If you don't have the patch program, apply the following by hand,
	or get patch (version 2.0, latest patchlevel).

	After patching:
		do nothing, apply patch 20 next

	If patch indicates that patchlevel is the wrong version, you may need
	to apply one or more previous patches, or the patch may already
	have been applied.  See the patchlevel.h file to find out what has or
	has not been applied.  In any event, don't continue with the patch.

	If you are missing previous patches they can be obtained from our:
	archive server.

	Syd Weinstein
	elm@DSI.COM

	The patches are available from the dsinc archive server
	Send the following message to archive-server@DSI.COM for
	a list of available patches:

	Subject: patch list
	send index elm

Index: hdrs/patchlevel.h
Prereq: "18"
*** ../elm2.4/hdrs/patchlevel.h	Thu Dec 24 18:56:58 1992
--- hdrs/patchlevel.h	Thu Dec 24 18:57:39 1992
***************
*** 1 ****
! #define PATCHLEVEL "18"
--- 1 ----
! #define PATCHLEVEL "19"

Index: doc/answer.1
*** ../elm2.4/doc/answer.1	Thu Dec 24 18:56:33 1992
--- doc/answer.1	Thu Dec 24 18:46:44 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH ANSWER 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  answer - phone message transcription system
***************
*** 80,85 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 86,91 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/autoreply.1
*** ../elm2.4/doc/autoreply.1	Mon Oct 19 13:04:02 1992
--- doc/autoreply.1	Thu Dec 24 18:46:47 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH AUTOREPLY 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  autoreply - Automatic mail reply system
***************
*** 52,57 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 58,63 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/chkalias.1
*** ../elm2.4/doc/chkalias.1	Mon Oct 19 13:04:03 1992
--- doc/chkalias.1	Thu Dec 24 18:46:50 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH CHECKALIAS 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  checkalias - check to see if an alias is defined.
***************
*** 30,35 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 36,41 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/elm.1
*** ../elm2.4/doc/elm.1	Thu Dec 24 18:56:34 1992
--- doc/elm.1	Thu Dec 24 18:46:52 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH ELM 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  elm - an interactive mail system
***************
*** 160,165 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 166,171 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/fastmail.1
*** ../elm2.4/doc/fastmail.1	Thu Dec 24 18:56:34 1992
--- doc/fastmail.1	Thu Dec 24 18:46:53 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH FASTMAIL 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  fastmail - quick batch mail interface to a single address
***************
*** 101,106 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 107,112 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/filter.1
*** ../elm2.4/doc/filter.1	Tue Nov 17 14:10:55 1992
--- doc/filter.1	Thu Dec 24 18:46:55 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH FILTER 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  filter - filter incoming messages before adding to mailbox
***************
*** 123,128 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 129,134 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/frm.1
*** ../elm2.4/doc/frm.1	Mon Oct 19 13:04:04 1992
--- doc/frm.1	Thu Dec 24 18:46:57 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH FRM 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  frm,nfrm \- list from and subject of selected messages in mailbox or folder
***************
*** 115,120 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 121,126 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/listalias.1
*** ../elm2.4/doc/listalias.1	Mon Oct 19 13:04:04 1992
--- doc/listalias.1	Thu Dec 24 18:46:58 1992
***************
*** 1,9 ****
  .TH LISTALIAS 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  listalias - list user and system aliases
  .SH SYNOPSIS
  .B listalias
! [ regular-expression ]
  .SH DESCRIPTION
  .I Listalias
  outputs a line per alias in both the user and the system 
--- 1,15 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH LISTALIAS 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  listalias - list user and system aliases
  .SH SYNOPSIS
  .B listalias
! [ -s | -u ] [ regular-expression ]
  .SH DESCRIPTION
  .I Listalias
  outputs a line per alias in both the user and the system 
***************
*** 18,23 ****
--- 24,40 ----
  they are all listed.
  .sp
  Either way, the output is sorted.
+ .SH OPTIONS
+ .TP
+ .B \-s
+ Display only the system aliases.  
+ .BR \ \-s \ and \ \-u
+ are mutually exclusive.
+ .TP
+ .B \-u
+ Display only the user aliases.  
+ .BR \ \-s \ and \ \-u
+ are mutually exclusive.
  .SH AUTHOR
  Elm Development Group
  .SH SEE ALSO
***************
*** 28,33 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 45,50 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/messages.1
*** ../elm2.4/doc/messages.1	Thu Dec 24 18:56:34 1992
--- doc/messages.1	Thu Dec 24 18:47:00 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH MESSAGES 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  messages - quick count of messages in mailbox or folder
***************
*** 21,26 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 27,32 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/newalias.1
*** ../elm2.4/doc/newalias.1	Thu Dec 24 18:56:34 1992
--- doc/newalias.1	Thu Dec 24 18:47:02 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH NEWALIAS 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  newalias - install new elm aliases for user and/or system
***************
*** 90,95 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 96,101 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/newmail.1
*** ../elm2.4/doc/newmail.1	Thu Dec 24 18:56:34 1992
--- doc/newmail.1	Thu Dec 24 18:47:03 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH NEWMAIL 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  newmail,wnewmail - programs to asynchronously notify of new mail
***************
*** 146,151 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 152,157 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/printmail.1
*** ../elm2.4/doc/printmail.1	Thu Dec 24 18:56:34 1992
--- doc/printmail.1	Thu Dec 24 18:47:05 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH PRINTMAIL 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  printmail - format mail in a readable fashion for printing
***************
*** 32,37 ****
  readmsg(1L)
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 38,43 ----
  readmsg(1L)
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/readmsg.1
*** ../elm2.4/doc/readmsg.1	Thu Dec 24 18:56:42 1992
--- doc/readmsg.1	Thu Dec 24 18:47:09 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH READMSG 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  readmsg - extract messages from a mail folder
***************
*** 192,197 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 198,203 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: doc/tmac.n
Prereq: 5.2
*** ../elm2.4/doc/tmac.n	Mon Oct 12 23:25:42 1992
--- doc/tmac.n	Thu Dec 24 18:48:47 1992
***************
*** 1,4 ****
! .\" @(#)$Id: tmac.n,v 5.2 1992/10/11 01:33:36 syd Exp $
  .\" The News macro package
  .\"
  .\" This  is  the macro package that is used to format news documents.  It
--- 1,4 ----
! .\" @(#)$Id: tmac.n,v 5.3 1992/12/24 23:48:05 syd Exp $
  .\" The News macro package
  .\"
  .\" This  is  the macro package that is used to format news documents.  It
***************
*** 660,667 ****
  .if n \{\
  .					\" string registers
  .	ds rg (R)
! .	ds lq ""
! .	ds rq ""
  .	ds f1 "\*(dy
  .					\" number registers
  .	nr hs 1v			\" space before section header
--- 660,668 ----
  .if n \{\
  .					\" string registers
  .	ds rg (R)
! .	ds ct "
! .	ds lq "
! .	ds rq "
  .	ds f1 "\*(dy
  .					\" number registers
  .	nr hs 1v			\" space before section header
***************
*** 672,677 ****
--- 673,679 ----
  .if t \{\
  .					\" string registers
  .	ds rg \\u\\s-2\\(rg\\s0\\d
+ .	ds ct \\(co
  .	ds lq ``
  .	ds rq ''
  .					\" number registers

Index: doc/wnewmail.1
*** ../elm2.4/doc/wnewmail.1	Mon Oct 19 13:04:06 1992
--- doc/wnewmail.1	Thu Dec 24 18:47:12 1992
***************
*** 1,3 ****
--- 1,9 ----
+ .if n \{\
+ .	ds ct "
+ .\}
+ .if t \{\
+ .	ds ct \\(co
+ .\}
  .TH WNEWMAIL 1L "Elm Version 2.4" "USENET Community Trust"
  .SH NAME
  wnewmail - daemon to asynchronously notify of new mail
***************
*** 47,52 ****
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\(co\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! \fB\(co\fRDerived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
--- 53,58 ----
  .SH BUG REPORTS TO
  Syd Weinstein	elm@DSI.COM	(dsinc!elm)
  .SH COPYRIGHTS
! \fB\*(ct\fRCopyright 1988-1992 by The USENET Community Trust
  .br
! Derived from Elm 2.0, \fB\*(ct\fR Copyright 1986, 1987 by Dave Taylor

Index: filter/actions.c
Prereq: 5.2
*** ../elm2.4/filter/actions.c	Thu Dec 24 18:56:42 1992
--- filter/actions.c	Thu Dec 24 14:22:35 1992
***************
*** 1,8 ****
  
! static char rcsid[] ="@(#)$Id: actions.c,v 5.2 1992/12/11 02:16:08 syd Exp $";
  
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.2 $   $State: Exp $
   *
   * 			Copyright (c) 1988-1992 USENET Community Trust
   * 			Copyright (c) 1986,1987 Dave Taylor
--- 1,8 ----
  
! static char rcsid[] ="@(#)$Id: actions.c,v 5.3 1992/12/24 19:22:05 syd Exp $";
  
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.3 $   $State: Exp $
   *
   * 			Copyright (c) 1988-1992 USENET Community Trust
   * 			Copyright (c) 1986,1987 Dave Taylor
***************
*** 14,19 ****
--- 14,23 ----
   *
   *******************************************************************************
   * $Log: actions.c,v $
+  * Revision 5.3  1992/12/24  19:22:05  syd
+  * Quote from the filter of phrase to prevent RFC-822 parsing problems
+  * From: Syd via request from Ian Stewartson <istewart@dlvax2.datlog.co.uk>
+  *
   * Revision 5.2  1992/12/11  02:16:08  syd
   * remove unreachable return(0) at end of function
   * From: Syd
***************
*** 132,138 ****
  		    fprintf(pipefd, "Subject: \"%s\"\n", subject);
  		    fprintf(pipefd, catgets(elm_msg_cat,FilterSet,
  					    FilterFromTheFilterOf,
! 				    "From: The Filter of %s@%s <%s>\n"), 
  			    username, hostname, username);
  		    fprintf(pipefd, "To: %s\n", address);
  		    fprintf(pipefd, catgets(elm_msg_cat,
--- 136,142 ----
  		    fprintf(pipefd, "Subject: \"%s\"\n", subject);
  		    fprintf(pipefd, catgets(elm_msg_cat,FilterSet,
  					    FilterFromTheFilterOf,
! 				    "From: \"The Filter of %s@%s\" <%s>\n"), 
  			    username, hostname, username);
  		    fprintf(pipefd, "To: %s\n", address);
  		    fprintf(pipefd, catgets(elm_msg_cat,

Index: hdrs/s_aliases.h
*** ../elm2.4/hdrs/s_aliases.h	Thu Dec 24 18:56:44 1992
--- hdrs/s_aliases.h	Thu Dec 24 16:36:23 1992
***************
*** 1,4 ****
! /* s_aliases.h created from s_aliases.us by gencat on Thu Dec 10 21:08:59 EST 1992 */
  
  #define AliasesSet	0x5
  #define AliasesDelete	0x1
--- 1,4 ----
! /* s_aliases.h created from s_aliases.us by gencat on Thu Dec 24 16:36:23 EST 1992 */
  
  #define AliasesSet	0x5
  #define AliasesDelete	0x1
***************
*** 56,66 ****
--- 56,69 ----
  #define AliasesCouldntOpenTemp	0x43
  #define AliasesCouldntWriteTemp	0x44
  #define AliasesCouldntRenameTemp	0x45
+ #define AliasesReplaceExisting	0x46
  #define AliasesResync	0x49
  #define AliasesAddCurrent	0x4a
  #define AliasesMail	0x4c
  #define AliasesAddNew	0x4d
  #define AliasesAddReturn	0x4e
+ #define AliasesReplaceCurrent	0x4f
+ #define AliasesNoneToReplace	0x50
  #define AliasesNotInstalled	0x54
  #define AliasesGroupAlias	0x55
  #define AliasesAliasedAddress	0x56
***************
*** 116,118 ****
--- 119,122 ----
  #define AliasesHelpe	0x8b
  #define AliasesEdit	0x8c
  #define AliasesNoneToEdit	0x8d
+ #define AliasesHelpc	0x8e

Index: hdrs/s_elm.h
*** ../elm2.4/hdrs/s_elm.h	Thu Dec 24 18:56:44 1992
--- hdrs/s_elm.h	Thu Dec 24 19:14:05 1992
***************
*** 1,4 ****
! /* s_elm.h created from s_elm.us by gencat on Fri Dec 11 20:43:31 EST 1992 */
  
  #define ElmSet	0x3
  #define ElmYes	0x1
--- 1,4 ----
! /* s_elm.h created from s_elm.us by gencat on Thu Dec 24 16:35:48 EST 1992 */
  
  #define ElmSet	0x3
  #define ElmYes	0x1
***************
*** 342,350 ****
  #define ElmLeaveCouldntRemoveOwnLock	0x172
  #define ElmLimitEnterCriteria	0x173
  #define ElmLimitAlreadyHave	0x174
! #define ElmLimitYes	0x175
  #define ElmLimitAdding	0x176
! #define ElmLimitNo	0x177
  #define ElmLimitChanging	0x178
  #define ElmLimitNotValidCriterion	0x179
  #define ElmLimitReturnToUnlimited	0x17a
--- 342,350 ----
  #define ElmLeaveCouldntRemoveOwnLock	0x172
  #define ElmLimitEnterCriteria	0x173
  #define ElmLimitAlreadyHave	0x174
! #define ElmYesWord	0x175
  #define ElmLimitAdding	0x176
! #define ElmNoWord	0x177
  #define ElmLimitChanging	0x178
  #define ElmLimitNotValidCriterion	0x179
  #define ElmLimitReturnToUnlimited	0x17a
***************
*** 748,750 ****
--- 748,756 ----
  #define ElmPrintFailStatus	0x335
  #define ElmCouldntSeekBytesIntoTempFile	0x336
  #define ElmCannotExpand	0x337
+ #define ElmNoItemToScan	0x338
+ #define ElmConfirmFilesAppend	0x339
+ #define ElmConfirmFolderAppend	0x33a
+ #define ElmConfirmFilesCreate	0x33b
+ #define ElmConfirmFolderCreate	0x33c
+ #define ElmSavingToInstead	0x33d

Index: hdrs/defs.h
Prereq: 5.11
*** ../elm2.4/hdrs/defs.h	Thu Dec 24 18:56:44 1992
--- hdrs/defs.h	Mon Jan  4 22:36:34 1993
***************
*** 1,8 ****
  
! /* $Id: defs.h,v 5.11 1992/12/11 01:58:50 syd Exp $ */
  
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.11 $   $State: Exp $
   *
   * 			Copyright (c) 1988-1992 USENET Community Trust
   * 			Copyright (c) 1986,1987 Dave Taylor
--- 1,8 ----
  
! /* $Id: defs.h,v 5.12 1993/01/05 03:36:10 syd Exp $ */
  
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.12 $   $State: Exp $
   *
   * 			Copyright (c) 1988-1992 USENET Community Trust
   * 			Copyright (c) 1986,1987 Dave Taylor
***************
*** 14,19 ****
--- 14,24 ----
   *
   *******************************************************************************
   * $Log: defs.h,v $
+  * Revision 5.12  1993/01/05  03:36:10  syd
+  * remove leading 0s from access() defs as it confuses some
+  * compilers (and I know it shouldnt)
+  * From: Syd
+  *
   * Revision 5.11  1992/12/11  01:58:50  syd
   * Allow for use from restricted shell by putting SHELL=/bin/sh in the
   * environment of spawned mail transport program.
***************
*** 149,159 ****
  #define CM_REMAIL		(1<<4)	/* Add Sender: and Orig-To: headers */
  #define CM_DECODE		(1<<5)	/* prompt for key if message is encrypted */
  
! #define EXECUTE_ACCESS	01		/* These five are 	   */
! #define WRITE_ACCESS	02		/*    for the calls	   */
! #define READ_ACCESS	04		/*       to access()       */
! #define ACCESS_EXISTS	00		/*           <etc>         */
! #define EDIT_ACCESS	06		/*  (this is r+w access)   */
  
  #define BIG_NUM		999999		/* big number!             */
  #define BIGGER_NUM	9999999 	/* bigger number!          */
--- 154,164 ----
  #define CM_REMAIL		(1<<4)	/* Add Sender: and Orig-To: headers */
  #define CM_DECODE		(1<<5)	/* prompt for key if message is encrypted */
  
! #define EXECUTE_ACCESS	1		/* These five are 	   */
! #define WRITE_ACCESS	2		/*    for the calls	   */
! #define READ_ACCESS	4		/*       to access()       */
! #define ACCESS_EXISTS	0		/*           <etc>         */
! #define EDIT_ACCESS	6		/*  (this is r+w access)   */
  
  #define BIG_NUM		999999		/* big number!             */
  #define BIGGER_NUM	9999999 	/* bigger number!          */

Index: hdrs/sysdefs.SH
Prereq: 5.3
*** ../elm2.4/hdrs/sysdefs.SH	Wed Nov 25 14:10:37 1992
--- hdrs/sysdefs.SH	Thu Dec 24 14:24:11 1992
***************
*** 16,24 ****
  
  echo "Extracting hdrs/sysdefs.h (with variable substitutions)"
  sed <<!GROK!THIS! >sysdefs.h -e 's!^#undef!/\*#undef!'
! /* $Id: sysdefs.SH,v 5.3 1992/11/22 01:14:20 syd Exp $ */
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.3 $   $State: Exp $
   *
   * 			Copyright (c) 1988-1992 USENET Community Trust
   * 			Copyright (c) 1986,1987 Dave Taylor
--- 16,24 ----
  
  echo "Extracting hdrs/sysdefs.h (with variable substitutions)"
  sed <<!GROK!THIS! >sysdefs.h -e 's!^#undef!/\*#undef!'
! /* $Id: sysdefs.SH,v 5.4 1992/12/24 19:24:10 syd Exp $ */
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.4 $   $State: Exp $
   *
   * 			Copyright (c) 1988-1992 USENET Community Trust
   * 			Copyright (c) 1986,1987 Dave Taylor
***************
*** 30,35 ****
--- 30,40 ----
   *
   *******************************************************************************
   * $Log: sysdefs.SH,v $
+  * Revision 5.4  1992/12/24  19:24:10  syd
+  * EDITOROPTS and DEFEDITOR appear to be unused but here is
+  * a patch to make use of $editoropts.
+  * From: "Robert L. Howard" <robert.howard@matd.gatech.edu>
+  *
   * Revision 5.3  1992/11/22  01:14:20  syd
   * Allow SCO MMDF to use the mmdf library for mailer via execmail.
   * From: Larry Philps <larryp@sco.com>
***************
*** 98,104 ****
  #define emacs_editor	"$emacs"
  #define vi_editor	"$vi"
  
! #define default_editor	"$defeditor"
  #define mailhome	"$maildir/"
  
  #define default_shell	"$prefshell"
--- 103,109 ----
  #define emacs_editor	"$emacs"
  #define vi_editor	"$vi"
  
! #define default_editor	"$defeditor $editoropts"
  #define mailhome	"$maildir/"
  
  #define default_shell	"$prefshell"

Index: lib/Makefile.SH
Prereq: 5.3
*** ../elm2.4/lib/Makefile.SH	Tue Nov 10 15:20:24 1992
--- lib/Makefile.SH	Thu Dec 24 14:34:09 1992
***************
*** 29,35 ****
  
  echo "Extracting lib/Makefile (with variable substitutions)"
  cat >Makefile <<!GROK!THIS!
! # $Id: Makefile.SH,v 5.3 1992/11/07 20:07:23 syd Exp $
  #
  #  Makefile for the ELM mail program.
  #
--- 29,35 ----
  
  echo "Extracting lib/Makefile (with variable substitutions)"
  cat >Makefile <<!GROK!THIS!
! # $Id: Makefile.SH,v 5.6 1992/12/24 19:33:59 syd Exp $
  #
  #  Makefile for the ELM mail program.
  #
***************
*** 42,47 ****
--- 42,62 ----
  #			dsinc!elm
  #
  # $Log: Makefile.SH,v $
+ # Revision 5.6  1992/12/24  19:33:59  syd
+ # tune dependency list further
+ # From: Syd
+ #
+ # Revision 5.5  1992/12/24  19:30:46  syd
+ # Make all object depend on config.h, so a reconfig for a new
+ # arch in shared sources (or copied sources) forces a recompile
+ # of all modules.
+ # From: Syd
+ #
+ # Revision 5.4  1992/12/20  05:15:58  syd
+ # Add a c)hange alias, -u and -t options to listalias to list only user
+ # and only system aliases respectively.
+ # From: "Robert L. Howard" <robert.howard@matd.gatech.edu>
+ #
  # Revision 5.3  1992/11/07  20:07:23  syd
  # Add header_cmp routine
  # From: Syd
***************
*** 97,102 ****
--- 112,118 ----
  LIB_SRC		=	add_site.c	\
  			addrmchusr.c	\
  			mk_aliases.c	\
+ 			aliasdb.c	\
  			mk_lockname.c	\
  			can_access.c	\
  			can_open.c	\
***************
*** 136,141 ****
--- 152,158 ----
  LIB_OBJ		=	add_site.o	\
  			addrmchusr.o	\
  			mk_aliases.o	\
+ 			aliasdb.o	\
  			mk_lockname.o	\
  			can_access.o	\
  			can_open.o	\
***************
*** 211,216 ****
--- 228,234 ----
  add_site.o:	$(INCLDIR)/headers.h
  addrmchusr.o:	$(INCLDIR)/headers.h
  mk_aliases.o:	$(INCLDIR)/headers.h $(INCLDIR)/ndbz.h $(INCLDIR)/s_newalias.h
+ aliasdb.o:	$(INCLDIR)/headers.h $(INCLDIR)/ndbz.h
  mk_lockname.o:	$(INCLDIR)/headers.h
  can_access.o:	$(INCLDIR)/headers.h
  can_open.o:	$(INCLDIR)/headers.h
***************
*** 227,232 ****
--- 245,252 ----
  in_string.o:	$(INCLDIR)/headers.h
  istrcmp.o:	$(INCLDIR)/headers.h
  ldstate.o:	$(INCLDIR)/defs.h
+ len_next.o:	../config.h
+ mail_gets.o:	../config.h
  mcprt.o:	$(INCLDIR)/mcprt.h $(INCLDIR)/mcprtlib.h
  mcprtlib.o:	$(INCLDIR)/mcprtlib.h $(INCLDIR)/nl_types.h
  move_left.o:	$(INCLDIR)/headers.h
***************
*** 237,242 ****
--- 257,263 ----
  parsarpwho.o:	$(INCLDIR)/headers.h
  posixsig.o:	$(INCLDIR)/headers.h
  putenv.o:	$(INCLDIR)/headers.h
+ qstrings.o:	../config.h
  remfirstwd.o:	$(INCLDIR)/headers.h
  reverse.o:	$(INCLDIR)/headers.h
  shiftlower.o:	$(INCLDIR)/headers.h

Index: lib/aliasdb.c
*** /dev/null	Thu Dec 24 14:25:56 1992
--- lib/aliasdb.c	Sun Dec 20 00:14:19 1992
***************
*** 0 ****
--- 1,94 ----
+ /*******************************************************************************
+  *  The Elm Mail System  -  $Revision: 5.1 $   $State: Exp $
+  *
+  *			Copyright (c) 1988-1992 USENET Community Trust
+  *			Copyright (c) 1986,1987 Dave Taylor
+  *******************************************************************************
+  * Bug reports, patches, comments, suggestions should be sent to:
+  *
+  *	Syd Weinstein, Elm Coordinator
+  *	elm@DSI.COM			dsinc!elm
+  *
+  *******************************************************************************
+  * $Log: aliasdb.c,v $
+  * Revision 5.1  1992/12/20  05:14:05  syd
+  * Initial checkin
+  *
+  *
+  ******************************************************************************/
+ 
+ /** Alias interface with dbz routines.
+ 
+ 	This code is shared with newalias and elm so that
+   it is easier to do updates while in elm.  The routines in
+   this file are interface routines between elm alias code,
+   newalias, and listalias and the dbm routines.
+ 
+ **/
+ 
+ #include "headers.h"
+ #include <ctype.h>
+ #include "ndbz.h"
+ 
+ #ifdef BSD
+ #  include <sys/file.h>
+ #  undef tolower
+ #  undef toupper
+ #endif
+ 
+ #ifdef DEBUG
+ extern FILE *debugfile;
+ extern int  debug;
+ #endif
+ 
+ /* byte-ordering stuff */
+ #define	MAPIN(o)	((db->dbz_bytesame) ? (of_t) (o) : bytemap((of_t)(o), db->dbz_conf.bytemap, db->dbz_mybmap))
+ #define	MAPOUT(o)	((db->dbz_bytesame) ? (of_t) (o) : bytemap((of_t)(o), db->dbz_mybmap, db->dbz_conf.bytemap))
+ 
+ static of_t			/* transformed result */
+ bytemap(ino, map1, map2)
+ of_t ino;
+ int *map1;
+ int *map2;
+ {
+ 	union oc {
+ 		of_t o;
+ 		char c[SOF];
+ 	};
+ 	union oc in;
+ 	union oc out;
+ 	register int i;
+ 
+ 	in.o = ino;
+ 	for (i = 0; i < SOF; i++)
+ 		out.c[map2[i]] = in.c[map1[i]];
+ 	return(out.o);
+ }
+ 
+ read_one_alias(db, ar)
+ DBZ *db;
+ struct alias_rec *ar;
+ {
+ /*
+  *	Read an alias (name, address, etc.) from the data file
+  */
+ 
+ 	FILE *data_file = db->dbz_basef;
+ 
+ 	if (data_file == NULL)
+ 	    return(0);	/* no alias file, but hash exists, error condition */
+ 
+ 	if (fread((char *) ar, sizeof(struct alias_rec), 1, data_file) <= 0)
+ 	    return(0);
+ 
+ 	ar->status = (int) MAPIN(ar->status);
+ 	ar->alias = (char *) MAPIN(ar->alias);
+ 	ar->last_name = (char *) MAPIN(ar->last_name);
+ 	ar->name = (char *) MAPIN(ar->name);
+ 	ar->comment = (char *) MAPIN(ar->comment);
+ 	ar->address = (char *) MAPIN(ar->address);
+ 	ar->type = (int) MAPIN(ar->type);
+ 	ar->length = (long) MAPIN(ar->length);
+ 
+ 	return(1);
+ }

Index: lib/ldstate.c
Prereq: 5.3
*** ../elm2.4/lib/ldstate.c	Thu Dec 24 18:56:44 1992
--- lib/ldstate.c	Thu Dec 24 16:48:34 1992
***************
*** 1,8 ****
  
! static char rcsid[] = "@(#)$Id: ldstate.c,v 5.3 1992/12/11 01:45:04 syd Exp $";
  
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.3 $   $State: Exp $
   *
   *			Copyright (c) 1992 USENET Community Trust
   *******************************************************************************
--- 1,8 ----
  
! static char rcsid[] = "@(#)$Id: ldstate.c,v 5.4 1992/12/24 21:48:07 syd Exp $";
  
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.4 $   $State: Exp $
   *
   *			Copyright (c) 1992 USENET Community Trust
   *******************************************************************************
***************
*** 13,18 ****
--- 13,23 ----
   *
   *******************************************************************************
   * $Log: ldstate.c,v $
+  * Revision 5.4  1992/12/24  21:48:07  syd
+  * Make fgetline elm_fgetline, as BSD 4.4 now has such a routine, and
+  * it causes compile problems.
+  * From: Syd
+  *
   * Revision 5.3  1992/12/11  01:45:04  syd
   * remove sys/types.h include, it is now included by defs.h
   * and this routine includes defs.h or indirectly includes defs.h
***************
*** 50,56 ****
   */
  
  
! static char *fgetline(buf, buflen, fp)
  char *buf;
  unsigned buflen;
  FILE *fp;
--- 55,61 ----
   */
  
  
! static char *elm_fgetline(buf, buflen, fp)
  char *buf;
  unsigned buflen;
  FILE *fp;
***************
*** 87,93 ****
      status = -1;
  
      /* retrieve pathname of the folder */
!     if (fgetline(buf, sizeof(buf), fp) == NULL || buf[0] != 'F')
  	goto done;
      if ((fst->folder_name = malloc(strlen(buf+1) + 1)) == NULL)
  	goto done;
--- 92,98 ----
      status = -1;
  
      /* retrieve pathname of the folder */
!     if (elm_fgetline(buf, sizeof(buf), fp) == NULL || buf[0] != 'F')
  	goto done;
      if ((fst->folder_name = malloc(strlen(buf+1) + 1)) == NULL)
  	goto done;
***************
*** 94,100 ****
      (void) strcpy(fst->folder_name, buf+1);
  
      /* retrieve number of messages in the folder */
!     if (fgetline(buf, sizeof(buf), fp) == NULL || buf[0] != 'N')
  	goto done;
      fst->num_mssgs = atoi(buf+1);
  
--- 99,105 ----
      (void) strcpy(fst->folder_name, buf+1);
  
      /* retrieve number of messages in the folder */
!     if (elm_fgetline(buf, sizeof(buf), fp) == NULL || buf[0] != 'N')
  	goto done;
      fst->num_mssgs = atoi(buf+1);
  
***************
*** 105,117 ****
  
      /* load in the indices of the messages */
      for (i = 0 ; i < fst->num_mssgs ; ++i) {
! 	if (fgetline(buf, sizeof(buf), fp) == NULL || buf[0] != 'I')
  	    goto done;
  	fst->idx_list[i] = atol(buf+1);
      }
  
      /* load in the number of messages selected */
!     if (fgetline(buf, sizeof(buf), fp) == NULL || buf[0] != 'C')
  	goto done;
      fst->num_sel = atoi(buf+1);
  
--- 110,122 ----
  
      /* load in the indices of the messages */
      for (i = 0 ; i < fst->num_mssgs ; ++i) {
! 	if (elm_fgetline(buf, sizeof(buf), fp) == NULL || buf[0] != 'I')
  	    goto done;
  	fst->idx_list[i] = atol(buf+1);
      }
  
      /* load in the number of messages selected */
!     if (elm_fgetline(buf, sizeof(buf), fp) == NULL || buf[0] != 'C')
  	goto done;
      fst->num_sel = atoi(buf+1);
  
***************
*** 125,131 ****
  
  	/* load in the list of selected messages */
  	for (i = 0 ; i < fst->num_sel ; ++i) {
! 	    if (fgetline(buf, sizeof(buf), fp) == NULL || buf[0] != 'S')
  		goto done;
  	    fst->sel_list[i] = atoi(buf+1);
  	}
--- 130,136 ----
  
  	/* load in the list of selected messages */
  	for (i = 0 ; i < fst->num_sel ; ++i) {
! 	    if (elm_fgetline(buf, sizeof(buf), fp) == NULL || buf[0] != 'S')
  		goto done;
  	    fst->sel_list[i] = atoi(buf+1);
  	}
***************
*** 133,139 ****
      }
  
      /* that should be the end of the file */
!     if (fgetline(buf, sizeof(buf), fp) != NULL)
  	goto done;
  
      /* success */
--- 138,144 ----
      }
  
      /* that should be the end of the file */
!     if (elm_fgetline(buf, sizeof(buf), fp) != NULL)
  	goto done;
  
      /* success */

Index: lib/posixsig.c
Prereq: 5.4
*** ../elm2.4/lib/posixsig.c	Thu Dec 24 18:56:45 1992
--- lib/posixsig.c	Thu Dec 24 16:44:57 1992
***************
*** 1,8 ****
  
! static char rcsid[] = "@(#)$Id: posixsig.c,v 5.4 1992/12/07 03:13:08 syd Exp syd $";
  
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.4 $   $State: Exp $
   *
   *			Copyright (c) 1988-1992 USENET Community Trust
   *			Copyright (c) 1986,1987 Dave Taylor
--- 1,8 ----
  
! static char rcsid[] = "@(#)$Id: posixsig.c,v 5.5 1992/12/24 21:44:49 syd Exp $";
  
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.5 $   $State: Exp $
   *
   *			Copyright (c) 1988-1992 USENET Community Trust
   *			Copyright (c) 1986,1987 Dave Taylor
***************
*** 14,19 ****
--- 14,23 ----
   *
   *******************************************************************************
   * $Log: posixsig.c,v $
+  * Revision 5.5  1992/12/24  21:44:49  syd
+  * Add apollo check
+  * From: Syd
+  *
   * Revision 5.4  1992/12/07  03:13:08  syd
   * Add code to work around SunOS and sigalrm not returning EINTR
   * From: Chip, Tom, Steve, Et. Al.

Index: nls/C/C/C/s_aliases.m
*** ../elm2.4/nls/C/C/C/s_aliases.m	Thu Dec 24 18:56:46 1992
--- nls/C/C/C/s_aliases.m	Thu Dec 24 16:12:30 1992
***************
*** 21,33 ****
  $ #RMenuLn2
  11	a)lias current message, n)ew alias, d)elete or u)ndelete an alias,
  $ #RMenuLn3
! 12	or r)eturn to main menu.  To view an alias, press <return>.
  $ #RMenuLn4
  13	j = move down, k = move up, ? = help
  $ #MenuLn1
  14	Alias commands:  ?=help, <n>=set current to n, /=search pattern
  $ #MenuLn2
! 15	a)lias current message, d)elete, e)dit aliases.text, f)ully expand alias,
  $ #MenuLn3
  16	l)imit display, m)ail, n)ew alias, r)eturn, t)ag, u)ndelete, or e(x)it
  $ #Sort
--- 21,33 ----
  $ #RMenuLn2
  11	a)lias current message, n)ew alias, d)elete or u)ndelete an alias,
  $ #RMenuLn3
! 12	m)ail to alias, or r)eturn to main menu.  To view an alias, press <return>.
  $ #RMenuLn4
  13	j = move down, k = move up, ? = help
  $ #MenuLn1
  14	Alias commands:  ?=help, <n>=set current to n, /=search pattern
  $ #MenuLn2
! 15	a)lias current message, c)hange, d)elete, e)dit aliases.text, f)ully expand,
  $ #MenuLn3
  16	l)imit display, m)ail, n)ew alias, r)eturn, t)ag, u)ndelete, or e(x)it
  $ #Sort
***************
*** 86,92 ****
  $ #AlreadyAlias
  55	Already an alias for %s.
  $ #AcceptNew
! 56	"  Accept new alias? (%c/%c) "
  $ #Superceed
  57	Superceed? (%c/%c)
  $ #EnterLastName
--- 86,92 ----
  $ #AlreadyAlias
  55	Already an alias for %s.
  $ #AcceptNew
! 56	"      Accept new alias? (%c/%c) "
  $ #Superceed
  57	Superceed? (%c/%c)
  $ #EnterLastName
***************
*** 113,118 ****
--- 113,120 ----
  68	Couldn't write to tempfile %s!
  $ #CouldntRenameTemp
  69	Couldn't rename tempfile %s after deleting alias!
+ $ #ReplaceExisting
+ 70	"Replace existing alias? (%c/%c) "
  $ #Resync
  73	Resynchronize aliases...
  $ #AddCurrent
***************
*** 123,128 ****
--- 125,134 ----
  77	Add a new alias to database...
  $ #AddReturn
  78	Return to main menu...
+ $ #ReplaceCurrent
+ 79	Replace current alias in database...
+ $ #NoneToReplace
+ 80	Warning: no aliases to replace!
  $ #NotInstalled
  84	Warning: new aliases not installed yet!
  $ #GroupAlias
***************
*** 132,138 ****
  $ #FullyExpanded
  87	"Fully expand alias: "
  $ #AliasedFull
! 88	Aliased address:\n\r%s
  $ #PressReturn
  89	Press <return> to continue.
  $ #NotFound
--- 138,144 ----
  $ #FullyExpanded
  87	"Fully expand alias: "
  $ #AliasedFull
! 88	Aliased address for:\t%s\n\r
  $ #PressReturn
  89	Press <return> to continue.
  $ #NotFound
***************
*** 170,178 ****
  $ #Helpn
  107	n = Add a new user alias, adding to alias database at next resync.
  $ #Helpi
! 108	Return from alias menu (with prompting).
  $ #HelpQ
! 109	Return from alias menu (no prompting).
  $ #Helpt
  111	t = Tag current alias for further operations.
  $ #HelpCtrlT
--- 176,184 ----
  $ #Helpn
  107	n = Add a new user alias, adding to alias database at next resync.
  $ #Helpi
! 108	i = Return from alias menu (with prompting).
  $ #HelpQ
! 109	R = Return from alias menu (no prompting).
  $ #Helpt
  111	t = Tag current alias for further operations.
  $ #HelpCtrlT
***************
*** 182,188 ****
  $ #HelpCtrlU
  114	^U = Mark for undeletion user aliases matching specified pattern.
  $ #HelpX
! 115	Exit from alias menu, abandoning any pending deletions.
  $ #HelpNoHelp
  116	That key isn't used in this section.
  $ #ErrorMemory
--- 188,194 ----
  $ #HelpCtrlU
  114	^U = Mark for undeletion user aliases matching specified pattern.
  $ #HelpX
! 115	x = Exit from alias menu, abandoning any pending deletions.
  $ #HelpNoHelp
  116	That key isn't used in this section.
  $ #ErrorMemory
***************
*** 235,237 ****
--- 241,245 ----
  140	Edit %s...
  $ #NoneToEdit
  141	No aliases to edit!
+ $ #Helpc
+ 142	c = Change current user alias, modifying alias database at next resync.

Index: nls/C/C/C/s_elm.m
*** ../elm2.4/nls/C/C/C/s_elm.m	Thu Dec 24 18:56:46 1992
--- nls/C/C/C/s_elm.m	Thu Dec 24 19:14:16 1992
***************
*** 139,145 ****
  $ #EditmsgUserEditor
  68	\t%co\tInvoke a user specified editor on the message.\n\r
  $ #EditmsgPrintMsg
! 69	\t%cp\tPrint out message as typed in so far.\n\r)
  $ #EditmsgReadFile
  70	\t%cr\tRead in the specified file.\n\r
  $ #EditmsgSubject
--- 139,145 ----
  $ #EditmsgUserEditor
  68	\t%co\tInvoke a user specified editor on the message.\n\r
  $ #EditmsgPrintMsg
! 69	\t%cp\tPrint out message as typed in so far.\n\r
  $ #EditmsgReadFile
  70	\t%cr\tRead in the specified file.\n\r
  $ #EditmsgSubject
***************
*** 203,211 ****
  $ #KeysNotSame
  102	"Your keys were not the same!"
  $ #AbandonChange
! 103	"Abandon change to mailbox? (y/n) "
  $ #AbandonChangePlural
! 104	"Abandon changes to mailbox? (y/n) "
  $ #SendOnlyMode
  105	Send only mode [ELM %s]
  $ #NewMailHangOn
--- 203,211 ----
  $ #KeysNotSame
  102	"Your keys were not the same!"
  $ #AbandonChange
! 103	"Abandon change to mailbox? (%c/%c) "
  $ #AbandonChangePlural
! 104	"Abandon changes to mailbox? (%c/%c) "
  $ #SendOnlyMode
  105	Send only mode [ELM %s]
  $ #NewMailHangOn
***************
*** 223,229 ****
  $ #NoMailReturnAddress
  112	No mail to get return address of!
  $ #NoMailToScan
! 113	No %s to scan!
  $ #PatternNotFound
  114	pattern not found!
  $ #ScanForCalendar
--- 223,229 ----
  $ #NoMailReturnAddress
  112	No mail to get return address of!
  $ #NoMailToScan
! 113	No mail to scan!
  $ #PatternNotFound
  114	pattern not found!
  $ #ScanForCalendar
***************
*** 614,630 ****
  kind of termcap entry for "%s" - check your "TERM" setting...\n
  $quote '
  $ #LeaveDeleteMessage
! 321	'Delete message? (y/n) '
  $ #LeaveDeleteMessages
! 322	'Delete messages? (y/n) '
  $ #LeaveMoveMessage
! 323	'Move read message to "received" folder? (y/n) '
  $ #LeaveMoveMessages
! 324	'Move read messages to "received" folder? (y/n) '
  $ #LeaveKeepMessage
! 325	'Keep unread message in incoming mailbox? (y/n) '
  $ #LeaveKeepMessages
! 326	'Keep unread messages in incoming mailbox? (y/n) '
  $quote
  $ #SomethingWrongInCounts
  327	Something wrong in message counts! Folder unchanged.\n
--- 614,630 ----
  kind of termcap entry for "%s" - check your "TERM" setting...\n
  $quote '
  $ #LeaveDeleteMessage
! 321	'Delete message? (%c/%c) '
  $ #LeaveDeleteMessages
! 322	'Delete messages? (%c/%c) '
  $ #LeaveMoveMessage
! 323	'Move read message to "received" folder? (%c/%c) '
  $ #LeaveMoveMessages
! 324	'Move read messages to "received" folder? (%c/%c) '
  $ #LeaveKeepMessage
! 325	'Keep unread message in incoming mailbox? (%c/%c) '
  $ #LeaveKeepMessages
! 326	'Keep unread messages in incoming mailbox? (%c/%c) '
  $quote
  $ #SomethingWrongInCounts
  327	Something wrong in message counts! Folder unchanged.\n
***************
*** 718,728 ****
  $quote
  $ #LimitAlreadyHave
  372	Already have selection criteria - add more? (%c/%c) %c%c
! $ #LimitYes
  373	Yes.
  $ #LimitAdding
  374	Adding criteria...
! $ #LimitNo
  375	No.
  $ #LimitChanging
  376	Change criteria...
--- 718,728 ----
  $quote
  $ #LimitAlreadyHave
  372	Already have selection criteria - add more? (%c/%c) %c%c
! $ #YesWord
  373	Yes.
  $ #LimitAdding
  374	Adding criteria...
! $ #NoWord
  375	No.
  $ #LimitChanging
  376	Change criteria...
***************
*** 752,758 ****
  $ #MailNotSent
  388	"Mail not sent."
  $ #NoSubjectContinue
! 389	No subject - Continue with message? (%c/%c) %c%c
  $ #MailNotSend
  390	"Mail not sent."
  $ #CopiesTo
--- 752,758 ----
  $ #MailNotSent
  388	"Mail not sent."
  $ #NoSubjectContinue
! 389	"No subject - Continue with message? (%c/%c) "
  $ #MailNotSend
  390	"Mail not sent."
  $ #CopiesTo
***************
*** 778,786 ****
  $ #MailSent
  401	Mail sent!
  $ #RecallLastInstead
! 402	Recall last kept message instead? (%c/%c) %c%c
  $ #RecallLastKept
! 403	Recall last kept message? (%c/%c) %c%c
  $ #PleaseChooseSend
  404	Please choose one of the following options by parenthesized letter: s
  $ #AndNowSend
--- 778,786 ----
  $ #MailSent
  401	Mail sent!
  $ #RecallLastInstead
! 402	"Recall last kept message instead? (%c/%c) "
  $ #RecallLastKept
! 403	"Recall last kept message? (%c/%c) "
  $ #PleaseChooseSend
  404	Please choose one of the following options by parenthesized letter: s
  $ #AndNowSend
***************
*** 801,807 ****
  $ #WriteFailedCopyAcross
  412	\nWrite failed in copy_message_across\n
  $ #BounceOffRemote
! 413	"Bounce" a copy off the remote machine? (%c/%c) %c%c
  $ #WarningBlankIgnored
  414	Warning: blank line in %s ignored!
  $ #BackquoteCmdFailed
--- 801,807 ----
  $ #WriteFailedCopyAcross
  412	\nWrite failed in copy_message_across\n
  $ #BounceOffRemote
! 413	"Bounce" a copy off the remote machine? (%c/%c) "
  $ #WarningBlankIgnored
  414	Warning: blank line in %s ignored!
  $ #BackquoteCmdFailed
***************
*** 973,979 ****
  $quote "
  $ #EnterPattern
  509	"Enter pattern: "
- $quote
  $ #MessagesMatchPattern
  510	%s %s that match pattern...
  $ #SomeMessagesATagged
--- 973,978 ----
***************
*** 981,989 ****
  $ #AMessageATagged
  512	One %s is already tagged.
  $ #RemoveTags
! 513	Remove Tags? (%c/%c) %c%c
  $ #RemoveTag
! 514	Remove Tag? (%c/%c) %c%c
  $ #TaggedMessages
  515	%s %d %s.
  $ #TaggedMessage
--- 980,988 ----
  $ #AMessageATagged
  512	One %s is already tagged.
  $ #RemoveTags
! 513	"%s Remove Tags? (%c/%c) "
  $ #RemoveTag
! 514	"%s Remove Tag? (%c/%c) "
  $ #TaggedMessages
  515	%s %d %s.
  $ #TaggedMessage
***************
*** 1002,1008 ****
  522	ELM [match] failed looking %ld bytes into file (%s).
  $ #CouldntMallocBytes
  523	\n\nCouldn't malloc %d bytes!!\n\n
- $quote "
  $ #ChangeToWhichFolder
  524	"Change to which folder: "
  $quote
--- 1001,1006 ----
***************
*** 1086,1093 ****
  567	Sorry - couldn't make file temp file name.
  $ #CouldntOpenForWriting
  568	Sorry - couldn't open file %s for writing (%s).
  $ #SureYouWantToRemail
! 569	Are you sure you want to remail this message (%c/%c)? %c%c
  $ #BounceCancelled
  570	Bounce of message cancelled.
  $ #ResendingMail
--- 1084,1093 ----
  567	Sorry - couldn't make file temp file name.
  $ #CouldntOpenForWriting
  568	Sorry - couldn't open file %s for writing (%s).
+ $quote "
  $ #SureYouWantToRemail
! 569	"Are you sure you want to remail this message (%c/%c)? "
! $quote
  $ #BounceCancelled
  570	Bounce of message cancelled.
  $ #ResendingMail
***************
*** 1147,1153 ****
  $ #ShownWithSelect
  593	%s is '%s' with %d shown out of %d [ELM %s]
  $ #ShownNoSelect
! 594	%s is '%s' with %d message%s [ELM %s]
  $ #FolderWord
  595	Folder
  $ #MailboxWord
--- 1147,1153 ----
  $ #ShownWithSelect
  593	%s is '%s' with %d shown out of %d [ELM %s]
  $ #ShownNoSelect
! 594	%s is '%s' with 1 message [ELM %s]
  $ #FolderWord
  595	Folder
  $ #MailboxWord
***************
*** 1554,1564 ****
  $ #EditMessage
  806	"Choose e)dit message, "
  $ #EditMsg
! 807	"Choose e)edit msg, m)ake form, "
  $ #Shell
  808	"!)shell, "
  $ #HeadersCopy
! 809	"h)eaders, c)opy, "
  $ #Ispell
  810	"i)spell, "
  $quote
--- 1554,1564 ----
  $ #EditMessage
  806	"Choose e)dit message, "
  $ #EditMsg
! 807	"Choose e)dit msg, m)ake form, "
  $ #Shell
  808	"!)shell, "
  $ #HeadersCopy
! 809	"h)eaders, c)opy file, "
  $ #Ispell
  810	"i)spell, "
  $quote
***************
*** 1588,1590 ****
--- 1588,1604 ----
  822	\nCouldn't seek %ld bytes into temp file.\n
  $ #CannotExpand
  823	Cannot expand alias '%s'!\n\r
+ $ #NoItemToScan
+ 824	No %s to scan!
+ $quote "
+ $ #ConfirmFilesAppend
+ 825	"Append to an existing file `%s'? (%c/%c) "
+ $ #ConfirmFolderAppend
+ 826	"Append to mail folder `%s'? (%c/%c) "
+ $ #ConfirmFilesCreate
+ 827	"Create a new file `%s'? (%c/%c) "
+ $ #ConfirmFolderCreate
+ 828	"Create a new mail folder `%s'? (%c/%c) "
+ $quote
+ $ #SavingToInstead
+ 829	Alright - saving to `%s' instead

Index: nls/C/C/C/s_filter.m
*** ../elm2.4/nls/C/C/C/s_filter.m	Tue Nov 17 15:10:50 1992
--- nls/C/C/C/s_filter.m	Thu Dec 24 16:37:33 1992
***************
*** 21,27 ****
  $ #PopenFailed
  10	filter (%s): popen %s failed!\n
  $ #FromTheFilterOf
! 11	From: The Filter of %s@%s <%s>\n
  $ #XFilteredBy
  12	X-Filtered-By: filter, version %s\n\n
  $ #BeginMesg
--- 21,27 ----
  $ #PopenFailed
  10	filter (%s): popen %s failed!\n
  $ #FromTheFilterOf
! 11	From: "The Filter of %s@%s" <%s>\n
  $ #XFilteredBy
  12	X-Filtered-By: filter, version %s\n\n
  $ #BeginMesg
***************
*** 117,123 ****
  $ #Execute
  57	Execute
  $ #Action
! 58	Action
  $ #CantOpenFiltersum
  59	filter (%s): Can't open filtersum file %s!\n
  $ #WarningInvalidForShort
--- 117,123 ----
  $ #Execute
  57	Execute
  $ #Action
! 58	?action?
  $ #CantOpenFiltersum
  59	filter (%s): Can't open filtersum file %s!\n
  $ #WarningInvalidForShort
***************
*** 185,191 ****
  $ #TheDefaultAction
  90	: the default action\n
  $ #ForkSaveFailed
! 91	filter (%s): fork and save of command failed\n\
  \tsaving with current group id\n
  $quote "
  $ #RuleNum
--- 185,191 ----
  $ #TheDefaultAction
  90	: the default action\n
  $ #ForkSaveFailed
! 91	filter (%s): fork-and-save of command failed\n\
  \tsaving with current group id\n
  $quote "
  $ #RuleNum

Index: nls/C/C/C/s_from.m
*** ../elm2.4/nls/C/C/C/s_from.m	Sat Oct  3 18:35:21 1992
--- nls/C/C/C/s_from.m	Thu Dec 24 16:38:42 1992
***************
*** 22,38 ****
  $ #NoMesgInFolder
  11	No messages in that folder!\n
  $ #NoExplainMail
! 12	%s no%s mail.\n
  $ #NoExplainMessages
! 13	No%s messages in that folder.
  $ #StringStringMail
! 14	%s%s mail.\n
  $ #ThereAreMesg
! 15	There are%s messages in that folder.\n
  $ #FollowingMesg
  16	%s the following mail messages:\n
  $ #FolderContainsFollowing
! 17	Folder contains the following%s messages:\n
  $quote "
  $ #FolderContains
  18	"Folder contains "
--- 22,38 ----
  $ #NoMesgInFolder
  11	No messages in that folder!\n
  $ #NoExplainMail
! 12	%s no %s mail.\n
  $ #NoExplainMessages
! 13	No %s messages in that folder.
  $ #StringStringMail
! 14	%s %s mail.\n
  $ #ThereAreMesg
! 15	There are %s messages in that folder.\n
  $ #FollowingMesg
  16	%s the following mail messages:\n
  $ #FolderContainsFollowing
! 17	Folder contains the following %s messages:\n
  $quote "
  $ #FolderContains
  18	"Folder contains "

Index: nls/C/C/C/s_newalias.m
*** ../elm2.4/nls/C/C/C/s_newalias.m	Thu Dec 24 18:56:46 1992
--- nls/C/C/C/s_newalias.m	Sun Dec 20 00:10:03 1992
***************
*** 32,38 ****
  $ #ErrWrite
  16	** Error writing alias '%s'.
  $ #ListUsage
! 17	Usage: listalias <optional-regular-expression>\n
  $ #NoPipe
  18	cannot open pipe to egrep program for expressions!\n
  $ #NoOpenData
--- 32,38 ----
  $ #ErrWrite
  16	** Error writing alias '%s'.
  $ #ListUsage
! 17	Usage: listalias [ -s | -u ] <optional-regular-expression>\n
  $ #NoPipe
  18	cannot open pipe to egrep program for expressions!\n
  $ #NoOpenData

Index: src/alias.c
Prereq: 5.17
*** ../elm2.4/src/alias.c	Thu Dec 24 18:56:48 1992
--- src/alias.c	Thu Dec 24 16:42:07 1992
***************
*** 1,8 ****
  
! static char rcsid[] = "@(#)$Id: alias.c,v 5.17 1992/12/13 17:59:18 syd Exp $";
  
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.17 $   $State: Exp $
   *
   * 			Copyright (c) 1988-1992 USENET Community Trust
   * 			Copyright (c) 1986,1987 Dave Taylor
--- 1,8 ----
  
! static char rcsid[] = "@(#)$Id: alias.c,v 5.19 1992/12/24 21:42:01 syd Exp $";
  
  /*******************************************************************************
!  *  The Elm Mail System  -  $Revision: 5.19 $   $State: Exp $
   *
   * 			Copyright (c) 1988-1992 USENET Community Trust
   * 			Copyright (c) 1986,1987 Dave Taylor
***************
*** 14,19 ****
--- 14,29 ----
   *
   *******************************************************************************
   * $Log: alias.c,v $
+  * Revision 5.19  1992/12/24  21:42:01  syd
+  * Fix messages and nls messages to match.  Plus use want_to
+  * where appropriate.
+  * From: Syd, via prompting from Jan Djarv <Jan.Djarv@sa.erisoft.se>
+  *
+  * Revision 5.18  1992/12/20  05:15:58  syd
+  * Add a c)hange alias, -u and -t options to listalias to list only user
+  * and only system aliases respectively.
+  * From: "Robert L. Howard" <robert.howard@matd.gatech.edu>
+  *
   * Revision 5.17  1992/12/13  17:59:18  syd
   * Please write on the blackboard 500 times `NULL != 0.'
   * From: chip@chinacat.unicom.com (Chip Rosenthal)
***************
*** 357,363 ****
  }
  
  int
! add_alias()
  {
  /*
   *	Add an alias to the user alias text file.  If there
--- 367,374 ----
  }
  
  int
! add_alias(replace, to_replace)
! int replace, to_replace;
  {
  /*
   *	Add an alias to the user alias text file.  If there
***************
*** 365,370 ****
--- 376,391 ----
   *	create a group alias from the tagged files.
   *
   *	Return zero if alias not added in actuality.
+  *
+  *	If replace == FALSE, then we will ask for the new
+  *	aliasname.
+  *
+  *	If replace == TRUE, then we are replacing the alias
+  *	denoted by to_replace.
+  *
+  *	Note that even if replace == FALSE, if the user types
+  *	in the name of a current alias then we can still do
+  *	a replacement.
   */
  
  	int i, leftoff, tagged = 0;
***************
*** 371,377 ****
  
  	char aliasname[SLEN], firstname[SLEN], lastname[SLEN];
  	char address1[LONG_STRING], buffer[SLEN];
! 	char comment[LONG_STRING], ch;
  
  /*
   *	See if there are any tagged aliases.
--- 392,399 ----
  
  	char aliasname[SLEN], firstname[SLEN], lastname[SLEN];
  	char address1[LONG_STRING], buffer[SLEN];
! 	char comment[LONG_STRING], ch = *def_ans_no;
! 	char *ch_ptr;
  
  /*
   *	See if there are any tagged aliases.
***************
*** 396,404 ****
  	            AliasesSet, AliasesCreateGroup,
  	            "Create group alias? (%c/%c) "),
  	        *def_ans_yes, *def_ans_no);
! 	    ch = want_to(buffer, *def_ans_no);
  	}
! 	if (tagged > 1) {
  	 /*
  	  * If multiple tagged aliases then we assume the user
  	  * wants to create a group alias.  The default response
--- 418,426 ----
  	            AliasesSet, AliasesCreateGroup,
  	            "Create group alias? (%c/%c) "),
  	        *def_ans_yes, *def_ans_no);
! 	    ch = want_to(buffer, *def_ans_no, LINES-3);
  	}
! 	else if (tagged > 1) {
  	 /*
  	  * If multiple tagged aliases then we assume the user
  	  * wants to create a group alias.  The default response
***************
*** 412,464 ****
  	            AliasesSet, AliasesCreateGroup,
  	            "Create group alias? (%c/%c) "),
  	        *def_ans_yes, *def_ans_no);
! 	    ch = want_to(buffer, *def_ans_yes);
  	}
  
  /*
!  *	Create the group alias.  This is (hopefully) only
!  *	done if one of the above want_to() questions were
   *	answered YES (and thus there *were* tagged messages
   *	and the user responded correctly).
   */
  	if (ch == *def_ans_yes) {
  	    strcpy(address1, aliases[leftoff]->alias);
- 	    clearit(aliases[leftoff]->status, TAGGED);
- 	    show_msg_tag(leftoff);
  	    for (i=leftoff+1; i < message_count; i++) {
  	        if (ison(aliases[i]->status, TAGGED)) {
  	            strcat(address1, ",");
  	            strcat(address1, aliases[i]->alias);
- 	            clearit(aliases[i]->status, TAGGED);
- 	            show_msg_tag(i);
  	        }
  	    }
  	}
  
! 	strcpy(buffer, catgets(elm_msg_cat,
! 	        AliasesSet, AliasesEnterAliasName, "Enter alias name: "));
! 	PutLine0(LINES-2,0, buffer);
! 	CleartoEOLN();
! 	*aliasname = '\0';
! 	if (get_aliasname(aliasname, buffer) != 0) {
! 	    dprint(3, (debugfile, 
! 	        "Aliasname [%s] was rejected in add_alias\n", aliasname));
! 	    ClearLine(LINES-2);
! 	    return(0);
  	}
  
! 	*lastname = '\0';
! 	*firstname = '\0';
! 	*comment = '\0';
  	get_realnames(aliasname, firstname, lastname, comment, buffer);
  
! 	if ((tagged == 0) || (ch == *def_ans_no)) {
  	    sprintf(buffer, catgets(elm_msg_cat,
  	            AliasesSet, AliasesEnterAddress,
  	            "Enter address for %s: "), aliasname);
  	    PutLine0(LINES-2,0, buffer);
  	    CleartoEOLN();
! 	    *address1 = '\0';
  	    optionally_enter(address1, LINES-2, strlen(buffer), FALSE, FALSE);
  	    Raw(ON);
  	    if (strlen(address1) == 0) {
--- 434,518 ----
  	            AliasesSet, AliasesCreateGroup,
  	            "Create group alias? (%c/%c) "),
  	        *def_ans_yes, *def_ans_no);
! 	    ch = want_to(buffer, *def_ans_yes, LINES-3);
  	}
  
  /*
!  *	Create the group alias address.  This is only done
!  *	if one of the above want_to() questions were
   *	answered YES (and thus there *were* tagged messages
   *	and the user responded correctly).
   */
  	if (ch == *def_ans_yes) {
  	    strcpy(address1, aliases[leftoff]->alias);
  	    for (i=leftoff+1; i < message_count; i++) {
  	        if (ison(aliases[i]->status, TAGGED)) {
  	            strcat(address1, ",");
  	            strcat(address1, aliases[i]->alias);
  	        }
  	    }
  	}
+ 	else {
+ 	    tagged = 0;
+ 	}
  
! /*
!  *	Only ask for an aliasname if we are NOT replacing the
!  *	current alias.
!  */
! 	if (replace) {
! 	    strcpy(aliasname, aliases[to_replace]->alias);
! 	}
! 	else {
! 	    strcpy(buffer, catgets(elm_msg_cat,
! 	            AliasesSet, AliasesEnterAliasName, "Enter alias name: "));
! 	    PutLine0(LINES-2,0, buffer);
! 	    CleartoEOLN();
! 	    *aliasname = '\0';
! 	    if ((replace = get_aliasname(aliasname, buffer, &to_replace)) < 0) {
! 	        dprint(3, (debugfile, 
! 	            "Aliasname [%s] was rejected in add_alias\n", aliasname));
! 	        ClearLine(LINES-2);
! 	        return(0);
! 	    }
  	}
  
! /*
!  *	If we are replacing an existing alias, we will assume that
!  *	they might want to be just editing most of what is already
!  *	there.  So we copy some defaults from the existing alias.
!  */
! 	if (replace) {
! 	    strcpy(lastname, aliases[to_replace]->last_name);
! 	    strcpy(firstname, aliases[to_replace]->name);
! 	    ch_ptr = strstr(firstname, lastname);
! 	    *(ch_ptr-1) = '\0';
! 	    strcpy(comment, aliases[to_replace]->comment);
! 	}
! 	else {
! 	    *lastname = '\0';
! 	    *firstname = '\0';
! 	    *comment = '\0';
! 	}
  	get_realnames(aliasname, firstname, lastname, comment, buffer);
  
! /*
!  *	Since there are no tagged aliases, we must ask for an
!  *	address.  If we are replacing, a default address is
!  *	presented.
!  */
! 	if (tagged == 0) {
  	    sprintf(buffer, catgets(elm_msg_cat,
  	            AliasesSet, AliasesEnterAddress,
  	            "Enter address for %s: "), aliasname);
  	    PutLine0(LINES-2,0, buffer);
  	    CleartoEOLN();
! 	    if (replace) {
! 	        strcpy(address1, aliases[to_replace]->address);
! 	    }
! 	    else {
! 	        *address1 = '\0';
! 	    }
  	    optionally_enter(address1, LINES-2, strlen(buffer), FALSE, FALSE);
  	    Raw(ON);
  	    if (strlen(address1) == 0) {
***************
*** 468,475 ****
  	    }
  	}
  
! 	return(ask_accept(aliasname, firstname, lastname, comment, address1,
! 	        buffer));
  
  }
  
--- 522,547 ----
  	    }
  	}
  
! 	if(ask_accept(aliasname, firstname, lastname, comment, address1,
! 	        buffer, replace, to_replace)) {
! 	 /*
! 	  * We can only clear the tags after we know that the
! 	  * alias was added.  This allows the user to back out
! 	  * and rethink without losing the tags.
! 	  */
! 	    if (tagged > 0) {
! 	        for (i=leftoff; i < message_count; i++) {
! 	            if (ison(aliases[i]->status, TAGGED)) {
! 	                clearit(aliases[i]->status, TAGGED);
! 	                show_msg_tag(i);
! 	            }
! 	        }
! 	    }
! 	    return(1);
! 	}
! 	else {
! 	    return(0);
! 	}
  
  }
  
***************
*** 493,498 ****
--- 565,571 ----
  	static char bad_punc[] = ",.:;";
  	char *punc_ptr;
  	int i, match;
+ 	int replace, to_replace;
  
  	if (current_mail_message == 0) {
  	 dprint(4, (debugfile, 
***************
*** 508,517 ****
  	PutLine0(LINES-2,0, buffer);
  	CleartoEOLN();
  	*aliasname = '\0';
! 	if (get_aliasname(aliasname, buffer) != 0) {
  	    dprint(3, (debugfile, 
  	        "Aliasname [%s] was rejected in add_current_alias\n",
  	        aliasname));
  	    return(0);
  	}
  
--- 581,591 ----
  	PutLine0(LINES-2,0, buffer);
  	CleartoEOLN();
  	*aliasname = '\0';
! 	if ((replace = get_aliasname(aliasname, buffer, &to_replace)) < 0) {
  	    dprint(3, (debugfile, 
  	        "Aliasname [%s] was rejected in add_current_alias\n",
  	        aliasname));
+ 	    ClearLine(LINES-2);
  	    return(0);
  	}
  
***************
*** 611,617 ****
  	strcpy(address1, strip_parens(address1));	/* remove parens! */
  
  	return(ask_accept(aliasname, firstname, lastname, comment, address1,
! 	        buffer));
  
  }
  
--- 685,691 ----
  	strcpy(address1, strip_parens(address1));	/* remove parens! */
  
  	return(ask_accept(aliasname, firstname, lastname, comment, address1,
! 	        buffer, replace, to_replace));
  
  }
  
***************
*** 865,870 ****
--- 939,960 ----
  		      clear_error();
  		      newaliases += add_current_alias();	break;
  
+ 	    case 'c':
+ 	              if (current > 0) {
+ 	                  PutLine0(LINES-3, strlen(Prompt),
+ 			      catgets(elm_msg_cat,
+ 	                              AliasesSet, AliasesReplaceCurrent,
+ 	                              "Replace current alias in database..."));
+ 		          clear_error();
+ 		          newaliases += add_alias(TRUE, current-1);
+ 	              }
+ 	              else {
+ 		          error(catgets(elm_msg_cat,
+ 	                          AliasesSet, AliasesNoneToReplace,
+ 				  "Warning: no aliases to replace!"));
+ 	              }
+ 		      break;
+ 
  	    case 'e': PutLine1(LINES-3, strlen(Prompt),
  	                  catgets(elm_msg_cat, AliasesSet, AliasesEdit,
  	                      "Edit %s..."), ALIAS_TEXT);
***************
*** 913,919 ****
  			     catgets(elm_msg_cat, AliasesSet, AliasesAddNew,
  					     "Add a new alias to database..."));
  		      clear_error();
! 		      newaliases += add_alias(); 		break;
  
  	    case 'q':
  	    case 'Q':
--- 1003,1009 ----
  			     catgets(elm_msg_cat, AliasesSet, AliasesAddNew,
  					     "Add a new alias to database..."));
  		      clear_error();
! 		      newaliases += add_alias(FALSE, -1); 		break;
  
  	    case 'q':
  	    case 'Q':
***************
*** 1167,1172 ****
--- 1257,1266 ----
  	    "a = Add (return) address of current message to alias database."));
  		      break;
  
+ 	    case 'c': error(catgets(elm_msg_cat, AliasesSet, AliasesHelpc,
+ "c = Change current user alias, modifying alias database at next resync."));
+ 		      break;
+ 
  	    case 'd': error(catgets(elm_msg_cat, AliasesSet, AliasesHelpd,
  	    "d = Mark the current alias for deletion from alias database."));
  		      break;
***************
*** 1313,1342 ****
  
  }
  
- /* byte-ordering stuff */
- #define	MAPIN(o)	((db->dbz_bytesame) ? (of_t) (o) : bytemap((of_t)(o), db->dbz_conf.bytemap, db->dbz_mybmap))
- #define	MAPOUT(o)	((db->dbz_bytesame) ? (of_t) (o) : bytemap((of_t)(o), db->dbz_mybmap, db->dbz_conf.bytemap))
- 
- static of_t			/* transformed result */
- bytemap(ino, map1, map2)
- of_t ino;
- int *map1;
- int *map2;
- {
- 	union oc {
- 		of_t o;
- 		char c[SOF];
- 	};
- 	union oc in;
- 	union oc out;
- 	register int i;
- 
- 	in.o = ino;
- 	for (i = 0; i < SOF; i++)
- 		out.c[map2[i]] = in.c[map1[i]];
- 	return(out.o);
- }
- 
  get_one_alias(db, current)
  DBZ *db;
  int current;
--- 1407,1412 ----
***************
*** 1350,1360 ****
  	struct alias_rec	ar;
  	FILE *data_file = db->dbz_basef;
  
! 	if (data_file == NULL)
! 	    return(0);	/* no alias file, but hash exists, error condition */
! 
! 	if (fread((char *) &ar, sizeof(ar), 1, data_file) <= 0)
  	    return(0);
  
  	if (current >= max_aliases) {
  	    new_max = max_aliases + KLICK;
--- 1420,1428 ----
  	struct alias_rec	ar;
  	FILE *data_file = db->dbz_basef;
  
! 	if(read_one_alias(db, &ar) == 0) {
  	    return(0);
+ 	}
  
  	if (current >= max_aliases) {
  	    new_max = max_aliases + KLICK;
***************
*** 1383,1397 ****
  	    aliases[current] = NULL;
  	}
  
- 	ar.status = (int) MAPIN(ar.status);
- 	ar.alias = (char *) MAPIN(ar.alias);
- 	ar.last_name = (char *) MAPIN(ar.last_name);
- 	ar.name = (char *) MAPIN(ar.name);
- 	ar.comment = (char *) MAPIN(ar.comment);
- 	ar.address = (char *) MAPIN(ar.address);
- 	ar.type = (int) MAPIN(ar.type);
- 	ar.length = (long) MAPIN(ar.length);
- 
  	if ((a = (struct alias_rec *)
  		malloc(sizeof(ar) + ar.length)) == NULL) {
  		error1(catgets(elm_msg_cat, AliasesSet, AliasesErrorMemory,
--- 1451,1456 ----
***************
*** 1519,1551 ****
  }
  
  int
! get_aliasname(aliasname, buffer)
  char *aliasname, *buffer;
  {
  
  	int loc;
- 	char ch;
  
  	optionally_enter(aliasname, LINES-2, strlen(buffer), FALSE, FALSE);
  	if (strlen(aliasname) == 0) 
  	    return(-1);
          if ( !ok_alias_name(aliasname) ) {
  	    error1(catgets(elm_msg_cat, AliasesSet, AliasesBadChars,
  	            "Bad character(s) in alias name %s."), aliasname);
  	    return(-1);
  	}
  	if ((loc = find_alias(aliasname, USER)) >= 0) {
  	    dprint(3, (debugfile, 
  	         "Attempt to add a duplicate alias [%s] in get_aliasname\n",
! 	         aliases[loc]->address)); 
  	    if (aliases[loc]->type & GROUP )
! 	        error1(catgets(elm_msg_cat, AliasesSet, AliasesAlreadyGroup,
  	                "Already a group with name %s."), aliases[loc]->alias);
  	    else
! 	        error1(catgets(elm_msg_cat, AliasesSet, AliasesAlreadyAlias,
  	                "Already an alias for %s."), aliases[loc]->alias);
! 	    return(-1);
  	}
  	if ((loc = find_alias(aliasname, SYSTEM)) >= 0) {
  	    dprint(3, (debugfile, 
  	      "Attempt to add a duplicate system alias [%s] in get_aliasname\n",
--- 1578,1660 ----
  }
  
  int
! get_aliasname(aliasname, buffer, duplicate)
  char *aliasname, *buffer;
+ int *duplicate;
  {
  
+ /*
+  *	Have the user enter an aliasname, check to see if it
+  *	is legal, then check for duplicates.  If a duplicate
+  *	is found offer to replace existing alias.
+  *
+  *	Return values:
+  *
+  *	-1	Either the aliasname was zero length, had bad
+  *		characters and was a duplicate which the user
+  *		chose not to replace.
+  *
+  *	0	A new alias was entered successfully.
+  *
+  *	1	The entered alias was an existing USER alias
+  *		that the user has chosen to replace.  In this
+  *		case the alias to replace is passed back in
+  *		in the variable 'duplicate'.
+  */
+ 
  	int loc;
  
  	optionally_enter(aliasname, LINES-2, strlen(buffer), FALSE, FALSE);
+ /*
+  *	Return if nothing was entered.
+  */
  	if (strlen(aliasname) == 0) 
  	    return(-1);
+ /*
+  *	Return if invalid alias characters were entered.
+  */
          if ( !ok_alias_name(aliasname) ) {
  	    error1(catgets(elm_msg_cat, AliasesSet, AliasesBadChars,
  	            "Bad character(s) in alias name %s."), aliasname);
  	    return(-1);
  	}
+ /*
+  *	Check to see if there is already a USER alias by this name.
+  */
  	if ((loc = find_alias(aliasname, USER)) >= 0) {
  	    dprint(3, (debugfile, 
  	         "Attempt to add a duplicate alias [%s] in get_aliasname\n",
! 	         aliases[loc]->alias)); 
  	    if (aliases[loc]->type & GROUP )
! 	        PutLine1(LINES-2,0, catgets(elm_msg_cat,
! 	                AliasesSet, AliasesAlreadyGroup,
  	                "Already a group with name %s."), aliases[loc]->alias);
  	    else
! 	        PutLine1(LINES-2,0, catgets(elm_msg_cat,
! 	                AliasesSet, AliasesAlreadyAlias,
  	                "Already an alias for %s."), aliases[loc]->alias);
! 	    CleartoEOLN();
! 	    MCsprintf(buffer, catgets(elm_msg_cat,
! 	            AliasesSet, AliasesReplaceExisting,
! 	            "Replace existing alias? (%c/%c) "),
! 	        *def_ans_yes, *def_ans_no);
! 	 /*
! 	  * If they don't want to replace the alias by that name
! 	  * then just return.
! 	  */
! 	    if (want_to(buffer, *def_ans_no, LINES-3) != *def_ans_yes)
! 	        return(-1);
! 	    *duplicate = loc;
! 	    return(1);
  	}
+ /*
+  *	If they have elected to replace an existing alias then
+  *	we assume that they would also elect to superceed a
+  *	system alias by that name (since they have already
+  *	done so).  So we don't even bother to check or ask.
+  *
+  *	Of course we do check if there was no USER alias match.
+  */
  	if ((loc = find_alias(aliasname, SYSTEM)) >= 0) {
  	    dprint(3, (debugfile, 
  	      "Attempt to add a duplicate system alias [%s] in get_aliasname\n",
***************
*** 1557,1563 ****
  	        alias_type(aliases[loc]->type), aliases[loc]->alias);
  	    MCsprintf(buffer, catgets(elm_msg_cat, AliasesSet, AliasesSuperceed,
  	            "Superceed? (%c/%c)"), *def_ans_yes, *def_ans_no);
! 	    if ((ch = want_to(buffer, *def_ans_yes)) != *def_ans_yes)
  	        return(-1);
  	}
  	return(0);
--- 1666,1676 ----
  	        alias_type(aliases[loc]->type), aliases[loc]->alias);
  	    MCsprintf(buffer, catgets(elm_msg_cat, AliasesSet, AliasesSuperceed,
  	            "Superceed? (%c/%c)"), *def_ans_yes, *def_ans_no);
! 	 /*
! 	  * If they don't want to superceed the SYSTEM alias then
! 	  * just return.
! 	  */
! 	    if (want_to(buffer, *def_ans_yes, LINES-3) != *def_ans_yes)
  	        return(-1);
  	}
  	return(0);
***************
*** 1593,1603 ****
  }
  
  int
! ask_accept(aliasname, firstname, lastname, comment, address, buffer)
  char *aliasname, *firstname, *lastname, *comment, *address, *buffer;
  {
  
  	char ch;
  
  	if (strlen(firstname) == 0) {
  	    strcpy(buffer, lastname);  
--- 1706,1719 ----
  }
  
  int
! ask_accept(aliasname, firstname, lastname, comment, address, buffer,
! 	replace, replacement)
  char *aliasname, *firstname, *lastname, *comment, *address, *buffer;
+ int replace, replacement;
  {
  
  	char ch;
+ 	char *(old_alias[1]);
  
  	if (strlen(firstname) == 0) {
  	    strcpy(buffer, lastname);  
***************
*** 1615,1624 ****
  	PutLine3(LINES-2,0, catgets(elm_msg_cat, AliasesSet, AliasesAddressTo,
  	        "New alias: %s is '%s'."), aliasname, buffer);
  	CleartoEOLN();
  	MCsprintf(buffer, catgets(elm_msg_cat, AliasesSet, AliasesAcceptNew,
! 		"  Accept new alias? (%c/%c) "), *def_ans_yes, *def_ans_no);
! 	if((ch = want_to(buffer, *def_ans_yes)) == *def_ans_yes)
! 	  add_to_alias_text(aliasname, firstname, lastname, comment, address);
  	ClearLine(LINES-2);
  	ClearLine(LINES-1);
  	return(ch == *def_ans_yes ? 1 : 0);
--- 1731,1757 ----
  	PutLine3(LINES-2,0, catgets(elm_msg_cat, AliasesSet, AliasesAddressTo,
  	        "New alias: %s is '%s'."), aliasname, buffer);
  	CleartoEOLN();
+ /*
+  *	Kludge Alert:  Spaces are padded to the front of the prompt
+  *	to write over the previous question.  Should probably record
+  *	the end of the line, move to it, and CleartoEOLN() it.
+  */
  	MCsprintf(buffer, catgets(elm_msg_cat, AliasesSet, AliasesAcceptNew,
! 		"      Accept new alias? (%c/%c) "), *def_ans_yes, *def_ans_no);
! 	if((ch = want_to(buffer, *def_ans_yes, LINES-3)) == *def_ans_yes) {
! 	    if (replace) {
! 	        old_alias[0] = aliases[replacement]->alias;
! 	        delete_from_alias_text(old_alias, 1);
! 	     /*
! 	      * Kludge Alert:  We need to get the trailing comma
! 	      * (added in delete_from_alias_text()) off of the
! 	      * alias since the display won't be re-sync'd right
! 	      * away.
! 	      */
! 	        *((old_alias[0])+strlen(old_alias[0])-1) = '\0';
! 	    }
! 	    add_to_alias_text(aliasname, firstname, lastname, comment, address);
! 	}
  	ClearLine(LINES-2);
  	ClearLine(LINES-1);
  	return(ch == *def_ans_yes ? 1 : 0);

-- 
========================================================================
Sydney S. Weinstein, CDP, CCP          Elm Coordinator - Current 2.4PL20
Datacomp Systems, Inc.                 Projected 3.0 Release: ??? ?,1994
syd@DSI.COM or dsinc!syd      Voice: (215) 947-9900, FAX: (215) 938-0235
Newsgroups: comp.mail.elm