".
+  * With the exception of MMDF, below, you should OMIT a trailing newline
+  * from the setting of MSG_SEPARATOR.
+  * If you don't know what any of this means, leave it alone.
+  */
+ /* #define MSG_SEPARATOR "From " /**/
+ #ifdef MMDF
+ /*
+  * These values should be identical (respectively) to the contents of
+  * delim1 and delim2 in MMDFSRC/conf/yoursite/conf.c (sans newline).
+  */
+ #define MSG_SEPARATOR	"\001\001\001\001\n"
+ #define END_MSG_SEP	"\001\001\001\001\n"
+ /*
+  * You only need to define LCKDFLDIR if you have MMDF configured to use the
+  * locking routines in lib/util/lk_lock.c (ie., link(2)-based locking).
+  * Most of you WILL NOT need this, since you probably use one of the more
+  * sophisticated locking modules provided with MMDF.  Remember to alter the
+  * Makefile so as to access the MMDF library at the link step.
+  */
+ /* #define LCKDFLDIR	"/usr/spool/mmdf/lockfiles" /* (for example) */
+ #else /* !MMDF */
+ #ifdef M_XENIX
+ #define DOT_LOCK	/* DOT_LOCK should be used for SCO Xenix */
+ #endif /* M_XENIX */
+ #endif /* MMDF */
+ 
+ #ifdef HOMEMAIL
+ #define MAILFILE	".mailbox"	/* or whatever */
+ #else /* HOMEMAIL */
+ #ifndef MAILDIR
+ #if defined(SYSV) && !defined(SVR4)
+ #define MAILDIR		"/usr/mail"
+ #else /* BSD || SVR4 */
+ #define MAILDIR		"/usr/spool/mail"
+ #endif /* SYSV && !SVR4 */
+ #endif /* MAILDIR */
+ #endif /* HOMEMAIL */
+ 
+ /* If your mailer does not understand commas between addresses, you should
+  * define NO_COMMAS.  This includes pre-3.0 smail and default MTAs used on
+  * xenix, and sys-v systems.
+  * This does NOT apply to MMDF or sendmail, in most cases.  SunOS 4.1 as
+  * shipped needs this, but note that if you are allowing mush to default
+  * to SUN_4_1 (see the end of this file) you won't get this.
+  */
+ #ifdef SUN_4_1		/* SunOS 4.1 has warped sendmail.cf */
+ #define NO_COMMAS /**/
+ #endif /* SUN_4_1 */
+ 
+ /*
+  * Most RFC822-compliant mailers (sendmail) will add the headers From:
+  * and Date: on outgoing mail.  If the user or UA sends these headers,
+  * such MTAs will generally use the headers as the user or UA set them.
+  * Mailers that are not RFC822-compliant sometimes fail to add these
+  * headers at all, so the UA must supply them.  Mush normally does so.
+  *
+  * However, there are certain MTAs which will insist on adding new From:
+  * and Date: headers.  These "picky mailers" may remove the user or UA 
+  * From: and Date: headers, or they may leave them but insert a leading
+  * '>', which makes the headers very ugly and redundant or contradictory.
+  * PICKY_MAILER prevents mush from adding From: or Date:, so the MTA can.
+  *
+  * Many RFC822-compliant mailers are "picky", including certain sendmail
+  * configurations.  It is advisable to set PICKY_MAILER *UNLESS* your MTA
+  * is known not to be RFC822 compiant (xenix, older sys-v) or can be
+  * counted on to pass through user-defined headers without modification.
+  */
+ /* #define PICKY_MAILER /**/
+ 
+ /* If your system supports the vprintf() functions, True for sys-v and
+  * later sun versions (3.0+ ?).  Typically not true for BSD systems, but
+  * that will probably change in the future.
+  */
+ #if defined(__linux__) || defined(SYSV) || defined(sun)
+ #define VPRINTF
+ #endif /* __linux__ || SYSV || sun */
+ 
+ /* If your system uses the getwd() system call (as opposed to getcwd()),
+  * and your system is not a BSD system (e.g. MIPS), define GETWD below.
+  */
+ /* #define GETWD	/**/
+ 
+ /* If your system has the BSD-style directory routines (opendir/readdir),
+  * define DIRECTORY.  This happens automatically in glob.h for BSD.
+  */
+ #if defined(SVR4) || defined(__linux__)
+ #define DIRECTORY
+ #endif /* SVR4 || __linux__ */
+ 
+ /* If your system has the POSIX "utimbuf" structure for utime(2),
+  * define POSIX_UTIME.  You may have to change <sys/utime.h> to <utime.h>
+  * in mush.h.
+  */
+ #if defined(__linux__) || (defined(SVR4) && !defined(sun))
+ #define POSIX_UTIME
+ #endif /* __linux__ || (SVR4 && !sun) */
+ 
+ /* The remainder of this file attempt to automatically supply some sanity.
+  * You shouldn't need to change this part unless your system is really odd.
+  */
+ 
+ #ifdef BSD
+ #    undef SYSV /* Sorry, can't do both BSD and SYSV */
+ #    undef SVR4
+ #    undef SVR3
+ #    undef SVR2
+ #endif /* BSD */
+ #if defined(SUNTOOL) || defined(SUN_3_5) || defined(SUN_4_0) || defined(SUN_4_1)
+ #if !defined(BSD) && !defined(SYSV)
+ #    define BSD /* default to BSD */
+ #endif /* !BSD && !SYSV */
+ #if !defined(SUN_3_5) && !defined(SUN_4_0)
+ #    ifndef SUN_4_1
+ #        define SUN_4_1 /* default to sun 4.1 */
+ #    endif /* SUN_4_1 */
+ #    define SUN_4_0 /* 4.0 stuff needed too */
+ #endif /* !SUN_3_5 && !SUN_4_0 */
+ #ifdef SUN_4_0
+ #    undef SUN_3_5
+ #    undef SIGRET
+ #    define SIGRET void
+ #endif /* SUN_4_0 */
+ #endif /* SUNTOOL || SUN_3_5 || SUN_4_0 || SUN_4_1 */
+ #ifdef SVR4
+ #    undef SVR3
+ #    undef SYSV
+ #    define SYSV
+ #else
+ #ifdef SYSV
+ #    undef SVR3
+ #    ifndef SVR2
+ #        define SVR3
+ #    endif /* SVR2 */
+ #endif /* SYSV */
+ #endif /* SVR4 */
+ #ifdef SVR3
+ #    undef SYSV
+ #    define SYSV
+ #endif /* SVR3 */
diff -rc --new-file orig/mush-7.2.5/config.h-svr4 mush-7.2.5/config.h-svr4
*** orig/mush-7.2.5/config.h-svr4	Thu Jan  1 01:00:00 1970
--- mush-7.2.5/config.h-svr4	Sat Sep 11 20:36:53 1993
***************
*** 0 ****
--- 1,176 ----
+ /* config.h 1.1	(c) copyright 1986 (Dan Heller) */
+ 
+ /* Default names and locations for files */
+ #define MAILRC		".mushrc"
+ #define ALTERNATE_RC	".mailrc"
+ #define DEFAULT_RC	"/usr/local/lib/Mushrc"
+ #define ALT_DEF_RC	"/usr/local/lib/Mail.rc"
+ #define SIGNATURE	".signature"
+ #define FORTUNE		"/usr/local/games/fortune"
+ #define COMMAND_HELP	"/usr/local/lib/cmd_help"
+ #ifdef SUNTOOL
+ #    define TOOL_HELP	"/usr/local/lib/tool_help"
+ #endif /* SUNTOOL */
+ #define ALTERNATE_HOME	"/tmp"       /* Path must be read/write to EVERYONE */
+ #define EDFILE  	".edXXXXXX"  /* file/pathname added to user's "home" */
+ 
+ #define LS_COMMAND	"ls"
+ #define LPR		"lp"
+ #define DEF_PRINTER	"lp"
+ /* If your lpr command understands only -P or -d (or some other flag) then
+  * define PRINTER_OPT to the appropriate value.  If you want to be able to
+  * use either one, don't define this at all.  The defaults (when neither
+  * -P nor -d is used on the mush "lpr" command line) are as noted here.
+  * If your lpr requires that the option and the printer name be separate
+  * arguments, include a trailing space in this definition.
+  */
+ #ifdef SYSV
+ #define PRINTER_OPT	"-d"
+ #endif /* SYSV */
+ #ifdef BSD
+ #define PRINTER_OPT	"-P"
+ #endif /* BSD */
+ 
+ /* default settings for some variable strings */
+ #define DEF_PROMPT	"%m/%t: "
+ #define DEF_PAGER	"internal" /* set to "internal" to use internal pager */
+ #define DEF_SHELL	"$SHELL"
+ #define DEF_EDITOR	"$EDITOR"
+ #define DEF_FOLDER	"~/Mail"        /* default Mail folder */
+ #define DEF_MBOX	"~/mbox"	/* default mbox */
+ #define DEF_INDENT_STR	"  "		/* indent included mail */
+ #define DEF_ESCAPE	"~"
+ #define DEF_HDR_FMT	"%16n %13d %-4l %34s" /* default hdr_format */
+ #define DEF_CURSES_HELP	\
+     "display save mail reply next-msg back-msg screen-next screen-back"
+ 
+ /* Headers that will NOT be included when forwarding mail */
+ #define IGNORE_ON_FWD	"status,priority,return-receipt-to"
+ 
+ #define	MAXMSGS	1000		/* Maximum number of messages we can read */
+ #define HDRSIZ	(2*BUFSIZ)	/* This should not be < BUFSIZ! */
+ 
+ /*
+  * Define INTERNAL_MALLOC and recompile if you have trouble with mush
+  * core-dumping due to malloc/free errors.  Also, if you run a System 5
+  * variant, you might notice a performance improvement if you define this
+  * variable.  It uses the malloc distributed by Larry Wall for perl v2.
+  */
+ /* #define INTERNAL_MALLOC /**/
+ 
+ /*
+  * Define TIMEZONE if your system has neither the SysV external variable
+  * tzname nor the BSD timezone() function.  The example below is for
+  * Gould BSD4.3 systems; others should define it as a string, e.g. "PST"
+  * If TIMEZONE is defined, DAYLITETZ can also be defined, e.g. "PDT"
+  *
+  * Define USA if you are using US/NorthAmerican time zone abbreviations.
+  * If USA is not defined, dates in outgoing mail will include timezones
+  * specified as offsets from GMT, e.g. Pacific Standard Time is -0800.
+  */
+ /* #define TIMEZONE T->tm_zone /**/
+ /* #define USA /**/
+ 
+ /* mail delivery system macros and defines... */
+ 
+ /*
+  * If you are using MMDF, define MMDF here.
+  */
+ /* #define MMDF /**/
+ #if defined(M_UNIX) && defined(M_XENIX)
+ #define MMDF
+ /* #define M_EXECMAIL	/* Define if you haven't fixed submit permissions */
+ #endif /* M_UNIX && M_XENIX */
+ #ifdef MMDF
+ /*
+  * If MMDF delivers mail the user's home directory, define HOMEMAIL.
+  * Also check the definition of the delivery file name MAILFILE, below.
+  */
+ /* #define HOMEMAIL /**/
+ #ifdef M_EXECMAIL
+ #define MAIL_DELIVERY	"/usr/lib/mail/execmail"
+ # define VERBOSE_ARG	"-v"
+ # define METOO_ARG	"-m"
+ #else /* M_EXECMAIL */
+ #define MAIL_DELIVERY	"exec /usr/mmdf/bin/submit -mlnr"
+ #define VERBOSE_ARG	"Ww"
+ #define MTA_EXIT	9	/* exit status for successful submit */
+ #endif /* M_EXECMAIL */
+ #else /* MMDF */
+ /*
+  * If you are not using MMDF, check these definitions.
+  */
+ #define MAIL_DELIVERY	"/usr/lib/sendmail -i" /* "-i" works like "-oi" */
+ #define VERBOSE_ARG	"-v"    /* undef if none exists */
+ #define METOO_ARG	"-m"    /* man sendmail for more info. */
+ #define MTA_EXIT	0	/* exit status for successful mail delivery */
+ #endif /* MMDF */
+ 
+ /* If your mail transfer agent uses something *besides* "From " to separate
+  * adjacent messages in a folder, define MSG_SEPARATOR to be this string.
+  * If that string is 4 ^A's, then the string would be "\001\001\001\001".
+  * With the exception of MMDF, below, you should OMIT a trailing newline
+  * from the setting of MSG_SEPARATOR.
+  * If you don't know what any of this means, leave it alone.
+  */
+ /* #define MSG_SEPARATOR "From " /**/
+ #ifdef MMDF
+ /*
+  * These values should be identical (respectively) to the contents of
+  * delim1 and delim2 in MMDFSRC/conf/yoursite/conf.c (sans newline).
+  */
+ #define MSG_SEPARATOR	"\001\001\001\001\n"
+ #define END_MSG_SEP	"\001\001\001\001\n"
+ /*
+  * You only need to define LCKDFLDIR if you have MMDF configured to use the
+  * locking routines in lib/util/lk_lock.c (ie., link(2)-based locking).
+  * Most of you WILL NOT need this, since you probably use one of the more
+  * sophisticated locking modules provided with MMDF.  Remember to alter the
+  * Makefile so as to access the MMDF library at the link step.
+  */
+ /* #define LCKDFLDIR	"/usr/spool/mmdf/lockfiles" /* (for example) */
+ #else /* !MMDF */
+ #ifdef M_XENIX
+ #define DOT_LOCK	/* DOT_LOCK should be used for SCO Xenix */
+ #endif /* M_XENIX */
+ #endif /* MMDF */
+ 
+ /* If your mailer does not understand commas between addresses, you should
+  * define NO_COMMAS.  This includes pre-3.0 smail and default MTAs used on
+  * xenix, and sys-v systems.
+  * This does NOT apply to MMDF or sendmail, in most cases.
+  */
+ /* #ifdef SUN_4_1		/* SunOS 4.1 has warped sendmail.cf */
+ #define NO_COMMAS /**/
+ /* #endif /* SUN_4_1 */
+ 
+ /*
+  * Most RFC822 compliant mailers (sendmail) will add the headers From:
+  * and Date: on outgoing mail.  If the user or UA sends these headers,
+  * most MTAs will not append them automatically.  However, there are
+  * certain MTAs which will not allow this -- these "picky mailers" will
+  * precede such headers with a '>' and make the headers very ugly and
+  * somewhat redundant or contradictory.  It is advisable to set this
+  * *UNLESS* your MTA is not RFC822 compiant -- therefore you should NOT
+  * set this (xenix, sys-v).
+  */
+ /* #define PICKY_MAILER /**/
+ 
+ /* If your system supports the vprintf() functions, True for sys-v and
+  * later sun versions (3.0+ ?).  Typically not true for BSD systems, but
+  * that will probably change in the future.
+  */
+ #if defined(SYSV) || defined(sun)
+ #define VPRINTF
+ #endif /* SYSV || sun */
+ 
+ /* If your system uses the getwd() system call (as opposed to getcwd()),
+  * and your system is not a BSD system (e.g. MIPS), define GETWD below.
+  */
+ /* #define GETWD	/**/
+ 
+ #ifdef HOMEMAIL
+ #define MAILFILE	"Mailbox"	/* or whatever */
+ #else /* HOMEMAIL */
+ #define MAILDIR		"/usr/spool/mail"
+ #endif /* HOMEMAIL */
diff -rc --new-file orig/mush-7.2.5/curses.c mush-7.2.5/curses.c
*** orig/mush-7.2.5/curses.c	Fri Oct 30 19:55:31 1992
--- mush-7.2.5/curses.c	Sun Oct 17 15:22:30 1993
***************
*** 487,504 ****
  
  	/* order messages (sort) and redisplay the headers */
  	when C_SORT : case C_REV_SORT :
! 	    (void) strcpy(file, "sort");
! 	    if (c == C_REV_SORT) {
! 		print("Reverse "), turnon(glob_flags, CONT_PRNT);
! 		(void) strcat(file, " -");
! 	    }
! 	    print(
! 	"Order messages by [author, date, length, Status, subject, priority]: "
! 		);
! 	    if ((c = m_getchar()) == 'a' || c == 'd' || c == 'l' ||
! 		    c == 'S' || c == 's' || c == 'R' || c == 'p') {
  		print("reordering messages...");
! 		(void) cmd_line(sprintf(buf, "%s %c", file, c), msg_list);
  		print_more("done.");
  		if (ison(glob_flags, CNTD_CMD))
  		    putchar('\n'), puts(compose_hdr(current_msg));
--- 487,501 ----
  
  	/* order messages (sort) and redisplay the headers */
  	when C_SORT : case C_REV_SORT :
! 	    print((c == C_SORT) ? "Order " : "Reverse order ");
! 	    turnon(glob_flags, CONT_PRNT);
! 	    print("by [author, date, length, Status, subject, priority, to]: ");
! 	    n = m_getchar();
! 	    if (index("adlSRspt",n)) {
  		print("reordering messages...");
! 		sprintf(buf,"sort %s%c%s",(c == C_SORT) ? "" : "r",n,
! 		    (n == 'd' || n == 'l') ? "" : "d");
! 		(void) cmd_line(buf, msg_list);
  		print_more("done.");
  		if (ison(glob_flags, CNTD_CMD))
  		    putchar('\n'), puts(compose_hdr(current_msg));
diff -rc --new-file orig/mush-7.2.5/folders.c mush-7.2.5/folders.c
*** orig/mush-7.2.5/folders.c	Tue Mar 31 23:03:48 1992
--- mush-7.2.5/folders.c	Wed Oct 27 17:14:57 1993
***************
*** 85,91 ****
  	 */
  	n = 0;
  	if (*tmp != '/') {
! 	    if (!GetCwd(buf, sizeof buf)) {
  		error("getcwd: %s",buf);
  		return -1;
  	    }
--- 85,92 ----
  	 */
  	n = 0;
  	if (*tmp != '/') {
! 	    buf[0] = '\0';
! 	    if (GetCwd(buf, sizeof buf) == NULL) {
  		error("getcwd: %s",buf);
  		return -1;
  	    }
***************
*** 132,137 ****
--- 133,148 ----
  	xfree(msg[msg_cnt].m_date_recv);
  	xfree(msg[msg_cnt].m_date_sent);
  	msg[msg_cnt].m_date_recv = msg[msg_cnt].m_date_sent = NO_STRING;
+ 	xfree(msg[msg_cnt].m_subject);
+ 	xfree(msg[msg_cnt].m_target);
+ 	xfree(msg[msg_cnt].m_source);
+ 	xfree(msg[msg_cnt].m_from);
+ 	xfree(msg[msg_cnt].m_name);
+ 	xfree(msg[msg_cnt].m_addr);
+ 	msg[msg_cnt].m_subject = NULL;
+ 	msg[msg_cnt].m_target = msg[msg_cnt].m_source = NULL;
+ 	msg[msg_cnt].m_from = msg[msg_cnt].m_name = msg[msg_cnt].m_addr = NULL;
+ 	msg[msg_cnt].m_author = 0;
      }
      msg_cnt = 0, msg[0].m_offset = 0L;
      turnoff(glob_flags, CONT_PRNT);
***************
*** 677,683 ****
  	if (fputs(from, fp) == EOF)
  #endif /* MSG_SEPARATOR */
  	    art_cnt = -1;
! 	if (!(p = header_field(n, "from")))
  	    p = "Mush-Undigest (Real author unknown)";
  	if (fprintf(fp, "From: %s\n", p) == EOF)
  	    art_cnt = -1;
--- 688,694 ----
  	if (fputs(from, fp) == EOF)
  #endif /* MSG_SEPARATOR */
  	    art_cnt = -1;
! 	if (!(p = header_field(n, "source")))
  	    p = "Mush-Undigest (Real author unknown)";
  	if (fprintf(fp, "From: %s\n", p) == EOF)
  	    art_cnt = -1;
diff -rc --new-file orig/mush-7.2.5/hdrs.c mush-7.2.5/hdrs.c
*** orig/mush-7.2.5/hdrs.c	Fri Oct 30 19:55:32 1992
--- mush-7.2.5/hdrs.c	Wed Oct 27 17:27:46 1993
***************
*** 52,58 ****
   * "buf" and return its address.
   */
  char *
! header_field(n, str)
  char *str;
  {
      static char    buf[HDRSIZ];
--- 52,58 ----
   * "buf" and return its address.
   */
  char *
! real_header_field(n, str)
  char *str;
  {
      static char    buf[HDRSIZ];
***************
*** 88,96 ****
--- 88,231 ----
      }
      if (b > buf && *--b == ',')
  	*b = 0;
+ 
      return (*buf)? buf: NULL;
  }
  
+ /*
+  * To speed up sorting at the expense of some space we cache here
+  * the subject and the to/newsgroups and reply-to/from fields.
+  */
+ 
+ #define Strncpy(buf,p) (void)(strncpy(buf,p,sizeof(buf)),buf[sizeof(buf)-1]=0)
+ 
+ unsigned
+ author_of(n, from, name, addr, isauthor, show_to, to)
+ char from[HDRSIZ], name[HDRSIZ], addr[HDRSIZ], to[HDRSIZ];
+ unsigned *isauthor;
+ {
+     register char *p, *p2;
+ 
+     from[0] = name[0] = addr[0] = '\0';
+ 
+     /* who's the message from */
+ 
+     if ((p = reply_to(n, 0, from))) {
+ 	/* NOTE:  this fails if the sender has '<' or '!' in
+ 	 * the RFC822 comment fields -- leading "comment"
+ 	 * or trailing (comment) -- but that isn't critical
+ 	 */
+ 	if ((p2 = rindex(p, '!')) || (p2 = index(p, '<')))
+ 	    p = p2 + 1;
+     } else
+ 	p = strcpy(from, "unknown"); /* just in case */
+ 
+     /* If the From field contains the user's login name, then the message
+      * could be from the user -- attempt to give more useful information
+      * by telling to whom the message was sent.  This is not possible if
+      * the "to" header failed to get info (which is probably impossible).
+      * Use take_me_off() to be sure the message really is from the current
+      * user and not just someone with the same login at another site.
+      */
+     if (show_to /* && !strncmp(p, login, strlen(login)) */)
+ 	(void) take_me_off(from);
+     if (show_to && (*isauthor = !*from) && to) {  /* assign and test */
+ 	(void) get_name_n_addr(to, name+4, addr+4);
+ 	if (addr[4])
+ 	    (void) strncpy(addr, "TO: ", 4);
+ 	if (name[4]) {  /* check to see if a name got added */
+ 	    (void) strncpy(name, "TO: ", 4);
+ 	    Strncpy(from, name);
+ 	} else
+ 	    Strncpy(from, addr);
+     } else
+ 	(void) get_name_n_addr(from, name, addr);
+ 
+     if (from[0] && msg[n].m_from == NULL)	msg[n].m_from = savestr(from);
+     if (addr[0] && msg[n].m_addr == NULL)	msg[n].m_addr = savestr(addr);
+     if (name[0] && msg[n].m_name == NULL)	msg[n].m_name = savestr(name);
+ 
+     msg[n].m_author = 1;
+ 
+     return (from[0] || addr[0] || name[0]);
+ }
+ 
+ char *
+ author_to(n, str)
+ char *str;
+ {
+     register char *p;
+ 
+     if (!msg[n].m_author) {
+ 	char from[HDRSIZ], name[HDRSIZ], addr[HDRSIZ];
+ 	author_of(n,from,name,addr,(unsigned *) 0,0,(char *) 0);
+     }
+ 
+     if ((p = msg[n].m_addr) != NULL) {
+ 	Debug("author_to: msg %d: cached addr %s\n", n, p);
+ 	strcpy(str,p);
+ 	return str;
+     }
+ 
+     if ((p = msg[n].m_name) != NULL) {
+ 	Debug("author_to: msg %d: cached name %s\n", n, p);
+ 	strcpy(str,p);
+ 	return str;
+     }
+ 
+     if ((p = msg[n].m_from) != NULL) {
+ 	Debug("author_to: msg %d: cached from %s\n", n, p);
+ 	strcpy(str,p);
+ 	return str;
+     }
+ 
+     return NULL;
+ }
+ 
+ char *
+ header_field(n, str)
+ char *str;
+ {
+     register char *p,*q;
+ 
+ #if 0 /* not used anywhere */
+     if (!strcmp(str,"author")) {
+ 	(p = author_to(n,str));
+       	if (p == NULL) return NULL;
+     }
+     else
+ #endif
+     if (!strcmp(str,"subject")) {
+ 	(p = q = msg[n].m_subject)
+ 	    || (p = real_header_field(n,"subject"));
+ 	if (p == NULL) return NULL;
+ 	if (q == NULL) msg[n].m_subject = savestr(p);
+     }
+     else if (!strcmp(str,"source")) {
+ 	(p = q = msg[n].m_source)
+ 	    || (p = real_header_field(n,"from"))
+ 	    || (p = real_header_field(n,"reply-to"))
+ 	    || (p = real_header_field(n,"sender"))
+ 	    || (p = real_header_field(n,"apparently-from"))
+ 	    || (p = real_header_field(n,"resent-from"));
+ 	if (p == NULL) return NULL;
+ 	if (q == NULL) msg[n].m_source = savestr(p);
+     }
+     else if (!strcmp(str,"target")) {
+ 	(p = q = msg[n].m_target)
+ 	    || (p = real_header_field(n,"to"))
+ 	    || (p = real_header_field(n,"newsgroups"))
+ 	    || (p = real_header_field(n,"resent-to"))
+ 	    || (p = real_header_field(n,"apparently-to"));
+ 	if (p == NULL) return NULL;
+ 	if (q == NULL) msg[n].m_target = savestr(p);
+     }
+     else
+ 	p = real_header_field(n,str);
+ 
+     return p;
+ }
+ 
  do_hdrs(argc, argv, list)
  register char **argv, list[];
  {
***************
*** 333,340 ****
      return 0;
  }
  
- #define Strncpy(buf,p) (void)(strncpy(buf,p,sizeof(buf)),buf[sizeof(buf)-1]=0)
- 
  /*
   * format a header from the information about a message (from, to, date,
   * subject, etc..).  The header for message number "cnt" is built and is
--- 468,473 ----
***************
*** 389,430 ****
      user[0] = name[0] = Day[0] = Mon[0] = Tm[0] = Yr[0] = Wkday[0] = 0;
  
      /* who's the message to */
!     if ((p = header_field(cnt, "resent-to")) ||
! 	(p = header_field(cnt, "to")) ||
! 	(p = header_field(cnt, "apparently-to")))
  	Strncpy(to, p);
  
!     /* who's the message from */
!     if ((p = header_field(cnt, "from")) && strcpy(from, p)
! 	    || (p = reply_to(cnt, 0, from))) {
! 	/* NOTE:  this fails if the sender has '<' or '!' in
! 	 * the RFC822 comment fields -- leading "comment"
! 	 * or trailing (comment) -- but that isn't critical
! 	 */
! 	if ((p2 = rindex(p, '!')) || (p2 = index(p, '<')))
! 	    p = p2 + 1;
!     } else
! 	p = strcpy(from, "unknown"); /* just in case */
!     /* If the From field contains the user's login name, then the message
!      * could be from the user -- attempt to give more useful information
!      * by telling to whom the message was sent.  This is not possible if
!      * the "to" header failed to get info (which is probably impossible).
!      * Use take_me_off() to be sure the message really is from the current
!      * user and not just someone with the same login at another site.
!      */
!     if (show_to && !strncmp(p, login, strlen(login)))
! 	(void) take_me_off(from);
!     if (show_to && (isauthor = !*from)) {  /* assign and test */
! 	(void) get_name_n_addr(to, name+4, addr+4);
! 	if (addr[4])
! 	    (void) strncpy(addr, "TO: ", 4);
! 	if (name[4]) {  /* check to see if a name got added */
! 	    (void) strncpy(name, "TO: ", 4);
! 	    Strncpy(from, name);
! 	} else
! 	    Strncpy(from, addr);
!     } else
! 	(void) get_name_n_addr(from, name, addr);
  
      if (ison(glob_flags, DATE_RECV))
  	date_p = msg[cnt].m_date_recv;
--- 522,531 ----
      user[0] = name[0] = Day[0] = Mon[0] = Tm[0] = Yr[0] = Wkday[0] = 0;
  
      /* who's the message to */
!     if ((p = header_field(cnt, "target")))
  	Strncpy(to, p);
  
!     author_of(cnt, from, name, addr, &isauthor, show_to, to);
  
      if (ison(glob_flags, DATE_RECV))
  	date_p = msg[cnt].m_date_recv;
***************
*** 518,524 ****
  		when 's': p2 = subject;
  		when 'l': p2 = sprintf(lines, "%d", msg[cnt].m_lines);
  		when 'c': p2 = sprintf(lines, "%ld", msg[cnt].m_size);
! 		when 'i': (p2 = header_field(cnt, "message-id")) || (p2 = "");
  		/* date formatting chars */
  		when 'd': p2 = date; /* the full date */
  		when 'T': p2 = Tm;
--- 619,625 ----
  		when 's': p2 = subject;
  		when 'l': p2 = sprintf(lines, "%d", msg[cnt].m_lines);
  		when 'c': p2 = sprintf(lines, "%ld", msg[cnt].m_size);
! 		when 'i': (p2 = real_header_field(cnt, "message-id")) || (p2 = "");
  		/* date formatting chars */
  		when 'd': p2 = date; /* the full date */
  		when 'T': p2 = Tm;
***************
*** 643,651 ****
  	if (!p)
  	    print("Warning: message contains no `reply_to_hdr' headers.\n");
      }
!     if (p || (!p && ((p = header_field(n, field = "reply-to")) ||
! 		    (p = header_field(n, field = "from")) ||
! 		    (p = header_field(n, field = "return-path"))))) {
  	skipspaces(0);
      } else if (!p) {
  DoFrom:
--- 744,752 ----
  	if (!p)
  	    print("Warning: message contains no `reply_to_hdr' headers.\n");
      }
!     if (p || (!p && ((p = real_header_field(n, field = "reply-to")) ||
! 		    (p = real_header_field(n, field = "from")) ||
! 		    (p = real_header_field(n, field = "return-path"))))) {
  	skipspaces(0);
      } else if (!p) {
  DoFrom:
***************
*** 694,706 ****
  	 */
  BrokenFrom:
  	if (!lcase_strncmp(field, "from_", -1) &&
! 		(p = header_field(n, "resent-from")) ||
! 		    (p = header_field(n, "from")) ||
! 		    (p = header_field(n, "sender"))) {
  	    /* p2 is either NULL or addr (BrokenFrom) */
  	    (void) get_name_n_addr(p, name, p2);
  	}
! 	if (!name[0] && (p = header_field(n, "name")))
  	    (void) strcpy(name, p);
  	if (name[0]) {
  	    if ((p = any(name, "(<,\"")) && (*p == ',' || *p == '<'))
--- 795,807 ----
  	 */
  BrokenFrom:
  	if (!lcase_strncmp(field, "from_", -1) &&
! 		(p = real_header_field(n, "resent-from")) ||
! 		    (p = real_header_field(n, "from")) ||
! 		    (p = real_header_field(n, "sender"))) {
  	    /* p2 is either NULL or addr (BrokenFrom) */
  	    (void) get_name_n_addr(p, name, p2);
  	}
! 	if (!name[0] && (p = real_header_field(n, "name")))
  	    (void) strcpy(name, p);
  	if (name[0]) {
  	    if ((p = any(name, "(<,\"")) && (*p == ',' || *p == '<'))
***************
*** 726,751 ****
  	 * The assumption that HDRSIZ is correct is unwise, but I know it
  	 * to be true for Mush.  Be forewarned if you call this routine.
  	 */
! 	if (lim > 0 && (p = header_field(n, "resent-to")) && *p) {
  	    *b++ = ',', *b++ = ' ';
  	    p[lim] = '\0'; /* prevent overflow */
  	    b += Strcpy(b, p);
  	    lim = HDRSIZ - (b - buf) - 2;
  	}
! 	if (lim > 0 && (p = header_field(n, "to")) && *p) {
  	    *b++ = ',', *b++ = ' ';
  	    p[lim] = '\0'; /* prevent overflow */
  	    b += Strcpy(b, p);
  	    lim = HDRSIZ - (b - buf) - 2;
  	}
! 	if (lim > 0 && (p = header_field(n, "apparently-to")) && *p) {
  	    *b++ = ',', *b++ = ' ';
  	    p[lim] = '\0'; /* prevent overflow */
  	    b += Strcpy(b, p);
  	    lim = HDRSIZ - (b - buf) - 2;
  	}
  	/* Also append the Resent-From address if there is one. */
! 	if (lim > 0 && (p = header_field(n, "resent-from")) && *p) {
  	    *b++ = ',', *b++ = ' ';
  	    p[lim] = '\0'; /* prevent overflow */
  	    (void) strcpy(b, p);
--- 827,852 ----
  	 * The assumption that HDRSIZ is correct is unwise, but I know it
  	 * to be true for Mush.  Be forewarned if you call this routine.
  	 */
! 	if (lim > 0 && (p = real_header_field(n, "resent-to")) && *p) {
  	    *b++ = ',', *b++ = ' ';
  	    p[lim] = '\0'; /* prevent overflow */
  	    b += Strcpy(b, p);
  	    lim = HDRSIZ - (b - buf) - 2;
  	}
! 	if (lim > 0 && (p = real_header_field(n, "to")) && *p) {
  	    *b++ = ',', *b++ = ' ';
  	    p[lim] = '\0'; /* prevent overflow */
  	    b += Strcpy(b, p);
  	    lim = HDRSIZ - (b - buf) - 2;
  	}
! 	if (lim > 0 && (p = real_header_field(n, "apparently-to")) && *p) {
  	    *b++ = ',', *b++ = ' ';
  	    p[lim] = '\0'; /* prevent overflow */
  	    b += Strcpy(b, p);
  	    lim = HDRSIZ - (b - buf) - 2;
  	}
  	/* Also append the Resent-From address if there is one. */
! 	if (lim > 0 && (p = real_header_field(n, "resent-from")) && *p) {
  	    *b++ = ',', *b++ = ' ';
  	    p[lim] = '\0'; /* prevent overflow */
  	    (void) strcpy(b, p);
***************
*** 780,786 ****
  {
      register char *p;
      buf[0] = 0; /* make sure it's already null terminated */
!     if (!(p = header_field(n, "subject")))
  	return NULL;
      if (lcase_strncmp(p, "Re:", 3))
  	(void) strcpy(buf, "Re: ");
--- 881,887 ----
  {
      register char *p;
      buf[0] = 0; /* make sure it's already null terminated */
!     if (!(p = header_field(n,"subject")))
  	return NULL;
      if (lcase_strncmp(p, "Re:", 3))
  	(void) strcpy(buf, "Re: ");
***************
*** 793,799 ****
  {
      register char *p;
      buf[0] = 0; /* make sure it's already null terminated */
!     if (!(p = header_field(n, "cc")))
  	return NULL;
      fix_up_addr(p);
      if (!do_set(set_options, "metoo"))
--- 894,900 ----
  {
      register char *p;
      buf[0] = 0; /* make sure it's already null terminated */
!     if (!(p = real_header_field(n, "cc")))
  	return NULL;
      fix_up_addr(p);
      if (!do_set(set_options, "metoo"))
diff -rc --new-file orig/mush-7.2.5/init.c mush-7.2.5/init.c
*** orig/mush-7.2.5/init.c	Fri Oct 30 19:55:33 1992
--- mush-7.2.5/init.c	Mon Sep 13 10:56:28 1993
***************
*** 19,25 ****
--- 19,27 ----
      extern char		*getlogin();
      char		buf[MAXPATHLEN];
  #if defined(SYSV) && !defined(HPUX) && !defined(IRIX4)
+ #ifndef __linux__
      extern struct passwd *getpwuid();  /* sys-v forgot this in pwd.h! */
+ #endif
      struct utsname ourhost;
  #else
      char ourhost[128];
diff -rc --new-file orig/mush-7.2.5/lock.c mush-7.2.5/lock.c
*** orig/mush-7.2.5/lock.c	Fri Oct 30 19:55:34 1992
--- mush-7.2.5/lock.c	Fri Oct 15 12:54:32 1993
***************
*** 14,19 ****
--- 14,25 ----
  #include <sys/locking.h>
  #endif /* SYSV && !USG */
  
+ #ifdef __linux__
+ #undef USG
+ #undef SYSV
+ #define BSD
+ #endif
+ 
  #ifdef DOT_LOCK
  
  #ifndef DOLOCK_PATH
***************
*** 253,258 ****
--- 259,265 ----
  /*
   * Define some BSD names for the SYSV world
   */
+ #if !defined(LOCK_SH) && !defined(__linux__)
  #ifdef USG
  #define LOCK_SH F_RDLCK
  #define LOCK_EX F_WRLCK
***************
*** 263,268 ****
--- 270,276 ----
  #define LOCK_UN LK_UNLCK
  #endif /* USG */
  #define LOCK_NB 0	/* Always non-blocking in this case */
+ #endif /* !LOCK_SH && !__linux__ */
  
  #ifdef EWOULDBLOCK
  #undef EWOULDBLOCK
diff -rc --new-file orig/mush-7.2.5/mail.c mush-7.2.5/mail.c
*** orig/mush-7.2.5/mail.c	Fri Oct 30 19:55:36 1992
--- mush-7.2.5/mail.c	Wed Oct 27 18:10:47 1993
***************
*** 1076,1089 ****
  
  	tmpf = ed_fp;
  	msg[msg_cnt].m_offset = 0L;
! 	if (p = header_field(msg_cnt, "to")) {
  	    (void) strcpy(To, p);
  	    Cc[0] = Bcc[0] = 0;
! 	    if (p = header_field(msg_cnt, "cc"))
  		(void) strcpy(Cc, p);
! 	    if (p = header_field(msg_cnt, "bcc"))
  		(void) strcpy(Bcc, p);
! 	    if (p = header_field(msg_cnt, "fcc"))
  		next_file += find_files(p, names+next_file, size-next_file, 1);
  	} else
  	    *To = 0; /* Error caught below */
--- 1076,1089 ----
  
  	tmpf = ed_fp;
  	msg[msg_cnt].m_offset = 0L;
! 	if (p = real_header_field(msg_cnt, "to")) {
  	    (void) strcpy(To, p);
  	    Cc[0] = Bcc[0] = 0;
! 	    if (p = real_header_field(msg_cnt, "cc"))
  		(void) strcpy(Cc, p);
! 	    if (p = real_header_field(msg_cnt, "bcc"))
  		(void) strcpy(Bcc, p);
! 	    if (p = real_header_field(msg_cnt, "fcc"))
  		next_file += find_files(p, names+next_file, size-next_file, 1);
  	} else
  	    *To = 0; /* Error caught below */
diff -rc --new-file orig/mush-7.2.5/main.c mush-7.2.5/main.c
*** orig/mush-7.2.5/main.c	Fri Oct 30 19:55:37 1992
--- mush-7.2.5/main.c	Mon Sep 13 11:44:19 1993
***************
*** 333,338 ****
--- 333,339 ----
  {
      char cwd[MAXPATHLEN];
  
+     cwd[0] = '\0';
      if (GetCwd(cwd, MAXPATHLEN) == NULL) {
  	error("set_cwd: %s", cwd);
  	(void) un_set(&set_options, "cwd");
diff -rc --new-file orig/mush-7.2.5/makefile.linux mush-7.2.5/makefile.linux
*** orig/mush-7.2.5/makefile.linux	Thu Jan  1 01:00:00 1970
--- mush-7.2.5/makefile.linux	Sun Oct 17 18:34:50 1993
***************
*** 0 ****
--- 1,70 ----
+ # makefile.linux	(c) copyright 1991	(Dan Heller)
+ #
+ HDRS= mush.h config.h-dist strings.h bindings.h options.h version.h glob.h pop.h
+ 
+ SRCS= main.c init.c misc.c mail.c hdrs.c execute.c commands.c print.c dates.c \
+       signals.c setopts.c msgs.c pick.c sort.c expr.c folders.c \
+       loop.c viewopts.c curses.c curs_io.c bind.c file.c strings.c \
+       lock.c macros.c options.c addrs.c malloc.c glob.c command2.c \
+       pop.c pmush.c xcreat.c
+ OBJS= main.o init.o misc.o mail.o hdrs.o execute.o commands.o print.o file.o \
+       signals.o setopts.o msgs.o pick.o sort.o expr.o strings.o \
+       folders.o dates.o loop.o viewopts.o curses.o curs_io.o bind.o \
+       lock.o macros.o options.o addrs.o malloc.o glob.o command2.o \
+       pop.o pmush.o xcreat.o
+ 
+ HELP_FILES= README README-7.0 README-7.1 README-7.2.0 README-7.2.2 \
+ 	README-7.2.4 mush.1 cmd_help Mushrc Mailrc Gnurc \
+ 	sample.mushrc advanced.mushrc digestify
+ 
+ MAKES= makefile.bsd makefile.xenix makefile.sys.v makefile.hpux makefile.sun
+ 
+ # See the README for changes needed to compile under Ultrix.
+ # In particular, you may need -DSIGRET=void and/or -ltermcap.
+ CFLAGS= -g -fwritable-strings -DSYSV -DUSG -DCURSES -DSIGRET=void
+ LDFLAGS= -g -static
+ LINTFLAGS= -bxah -Dlint -DCURSES -DBSD -D_BSD_SOURCE
+ LIBS= -lcurses -ltermcap
+ OTHERLIBS=
+ # Use some variant of this one if you #define MMDF in config.h
+ #OTHERLIBS=/usr/src/mmdf/lib/libmmdf.a
+ 
+ mush: $(OBJS)
+ 	@echo loading...
+ 	@cc $(LDFLAGS) $(OBJS) $(LIBS) $(OTHERLIBS) -o mush
+ 
+ $(OBJS): config.h mush.h
+ loop.o: version.h
+ 
+ tape:
+ 	@tar cv $(MAKES) $(HDRS) $(SRCS) $(HELP_FILES)
+ 
+ tar:
+ 	@tar fcv MUSH $(MAKES) $(HDRS) $(SRCS) $(HELP_FILES)
+ 
+ tarmail:
+ 	tar fcv - $(MAKES) $(HDRS) $(SRCS) $(HELP_FILES) | \
+ 	compress | btoa > mush.tarmail
+ 
+ lint:
+ 	lint $(LINTFLAGS) $(SRCS)
+ 
+ clean:
+ 	rm -f *.o core mush
+ 
+ BINDIR= /usr/bin
+ LIBDIR= /usr/lib
+ MRCDIR= /usr/lib
+ MANDIR= /usr/man/man1
+ MANEXT= 1
+ 
+ install: mush
+ 	mv mush $(BINDIR)
+ 	strip $(BINDIR)/mush
+ 	chmod 0755 $(BINDIR)/mush
+ 	cp mush.1 $(MANDIR)/mush.$(MANEXT)
+ 	chmod 0644 $(MANDIR)/mush.$(MANEXT)
+ 	cp cmd_help $(LIBDIR)
+ 	chmod 0644 $(LIBDIR)/cmd_help
+ 	cp Mushrc $(MRCDIR)/Mushrc
+ 	chmod 0644 $(MRCDIR)/Mushrc
diff -rc --new-file orig/mush-7.2.5/makefile.svr4 mush-7.2.5/makefile.svr4
*** orig/mush-7.2.5/makefile.svr4	Thu Jan  1 01:00:00 1970
--- mush-7.2.5/makefile.svr4	Sat Sep 11 20:36:54 1993
***************
*** 0 ****
--- 1,62 ----
+ # Mush makefile for system V.4.  Note: SIGRET should return void for normal
+ # sys-v, but Att PC users should *not* have it defined.  See the README!!
+ #
+ HDRS1= mush.h config.h
+ HDRS2= strings.h options.h
+ HDRS3= bindings.h glob.h
+ HDRS4= version.h
+ SRCS1= commands.c dates.c execute.c expr.c folders.c \
+ 	hdrs.c init.c loop.c mail.c main.c misc.c msgs.c pick.c \
+ 	print.c setopts.c signals.c sort.c viewopts.c options.c lock.c
+ SRCS2= bind.c curs_io.c curses.c file.c strings.c macros.c \
+ 	addrs.c malloc.c glob.c command2.c
+ 
+ OBJS1= commands.o dates.o execute.o expr.o folders.o \
+ 	hdrs.o init.o loop.o mail.o main.o misc.o msgs.o pick.o \
+ 	print.o setopts.o signals.o sort.o viewopts.o options.o lock.o
+ OBJS2= bind.o curs_io.o curses.o file.o strings.o macros.o \
+ 	addrs.o malloc.o glob.o command2.o
+ 
+ HELP= README README-7.0 README-7.1 README-7.2.0 README-7.2.2 mush.1 \
+ 	cmd_help Mushrc Mailrc Gnurc sample.mushrc advanced.mushrc digestify
+ 
+ # Sun OS systems who wish to compile with sys-v options:
+ # CC= /usr/5bin/cc
+ # CFLAGS= 	-O -DSYSV -DCURSES -DUSG -DDIRECTORY
+ # LIBS= -L/usr/5lib -lcurses
+ 
+ # IRIX 3.2 systems (SGI Iris workstations) should add -DDIRECTORY to CFLAGS
+ # SCO UNIX 3.2 should add -DDIRECTORY -DSELECT and should avoid library -lx
+ 
+ CFLAGS= 	-O -DSYSV -DUSG -DDIRECTORY -DSELECT -DCURSES -DREGCMP -DSIGRET=void
+ LDFLAGS=
+ LIBS= 		-lcurses -lsocket -lnsl -lgen $$LDPATH -lmalloc
+ OTHERLIBS=
+ # Use some variant of this one if you #define MMDF in config.h
+ #OTHERLIBS=/usr/src/mmdf/lib/libmmdf.a
+ PROG=		mush
+ 
+ $(PROG): $(OBJS1) $(OBJS2)
+ 	@echo loading...
+ 	@$(CC) $(LDFLAGS) $(OBJS1) $(OBJS2) -o $(PROG) $(LIBS) $(OTHERLIBS)
+ 
+ $(OBJS1): $(HDRS1) $(HDRS2)
+ $(OBJS2): $(HDRS1) $(HDRS2) $(HDRS3)
+ loop.o: version.h
+ 
+ BINDIR= /usr/local/bin
+ LIBDIR= /usr/local/lib
+ MRCDIR= /usr/local/lib
+ MANDIR= /usr/local/man/man1
+ MANEXT= 1
+ 
+ install: mush
+ 	cp mush $(BINDIR)
+ 	strip $(BINDIR)/mush
+ 	chmod 0755 $(BINDIR)/mush
+ 	cp mush.1 $(MANDIR)/mush.$(MANEXT)
+ 	chmod 0644 $(MANDIR)/mush.$(MANEXT)
+ 	cp cmd_help $(LIBDIR)
+ 	chmod 0644 $(LIBDIR)/cmd_help
+ 	cp Mushrc $(MRCDIR)/Mushrc
+ 	chmod 0644 $(MRCDIR)/Mushrc
diff -rc --new-file orig/mush-7.2.5/msgs.c mush-7.2.5/msgs.c
*** orig/mush-7.2.5/msgs.c	Fri Oct 30 19:55:39 1992
--- mush-7.2.5/msgs.c	Fri Oct 15 12:43:53 1993
***************
*** 171,177 ****
  	}
  
  	if (ison(flags, UPDATE_STATUS))
! 	    if (!strncmp(line, "Status:", 7) || !strncmp(line, "Priority:", 9))
  		continue; /* ignore "Status" and "Priority" lines */
  	    else if (!on_hdr) {
  		int i, write_priority = 0;
--- 171,177 ----
  	}
  
  	if (ison(flags, UPDATE_STATUS))
! 	    if (!lcase_strncmp(line, "Status:", 7) || !lcase_strncmp(line, "Priority:", 9))
  		continue; /* ignore "Status" and "Priority" lines */
  	    else if (!on_hdr) {
  		int i, write_priority = 0;
***************
*** 516,522 ****
--- 516,524 ----
  	struct utimbuf times[1];
  	(void) fflush(mail_fp); /* just in case */
  	times[0].modtime = time(&times[0].actime) - 2;
+ #ifndef __linux__
  	times[0].ausec = times[0].modusec = 0;
+ #endif /* !__linux__ */
  #else /* !POSIX_UTIME */
  	long times[2];
  	(void) fflush(mail_fp); /* just in case */
***************
*** 744,757 ****
  
      path[0] = '\0';
      while (fgets(buf, sizeof buf, fp)) {
! 	if (strncmp(buf, ">From ", 6))
  	    break;
  	p = buf + 6;
  
  	(void) sscanf(p, "%s", user);
  
  	while (p = index(p+1, 'r')) {
! 	    if (!strncmp(p, "remote from ", 12)) {
  		char *p2 = path+strlen(path);
  		skipspaces(12);
  		(void) sscanf(p, "%s", p2); /* add the new machine to current path */
--- 746,759 ----
  
      path[0] = '\0';
      while (fgets(buf, sizeof buf, fp)) {
! 	if (lcase_strncmp(buf, ">From ", 6))
  	    break;
  	p = buf + 6;
  
  	(void) sscanf(p, "%s", user);
  
  	while (p = index(p+1, 'r')) {
! 	    if (!lcase_strncmp(p, "remote from ", 12)) {
  		char *p2 = path+strlen(path);
  		skipspaces(12);
  		(void) sscanf(p, "%s", p2); /* add the new machine to current path */
***************
*** 922,935 ****
  			    strdup(msg[cnt].m_date_recv, p);
  		    } else
  #endif /* MMDF */
! 		    if (!strncmp(buf, "Date:", 5))
  			strdup(msg[cnt].m_date_sent, parse_date(p+5));
  		    else if (!msg[cnt].m_date_sent &&
! 			    !strncmp(buf, "Resent-Date:", 12))
  			msg[cnt].m_date_sent = savestr(parse_date(p+12));
! 		    else if (!strncmp(buf, "Content-Type:", 13))
  			turnon(msg[cnt].m_flags, METAMAIL);
! 		    else if (!strncmp(buf, "Priority:", 9)) {
  			for (p += 9 ; *p != '\n'; p++) {
  			    if (!isalpha(*p) || upper(*p) > 'A' + MAX_PRIORITY)
  				continue;
--- 924,937 ----
  			    strdup(msg[cnt].m_date_recv, p);
  		    } else
  #endif /* MMDF */
! 		    if (!lcase_strncmp(buf, "Date:", 5))
  			strdup(msg[cnt].m_date_sent, parse_date(p+5));
  		    else if (!msg[cnt].m_date_sent &&
! 			    !lcase_strncmp(buf, "Resent-Date:", 12))
  			msg[cnt].m_date_sent = savestr(parse_date(p+12));
! 		    else if (!lcase_strncmp(buf, "Content-Type:", 13))
  			turnon(msg[cnt].m_flags, METAMAIL);
! 		    else if (!lcase_strncmp(buf, "Priority:", 9)) {
  			for (p += 9 ; *p != '\n'; p++) {
  			    if (!isalpha(*p) || upper(*p) > 'A' + MAX_PRIORITY)
  				continue;
***************
*** 937,943 ****
  				M_PRIORITY(upper(*p) - 'A' + 1));
  			}
  		    } else if (get_status &&
! 			    !(get_status = strncmp(p, "Status:", 7))) {
  			/* new mail should not have a Status: field! */
  			turnon(msg[cnt].m_flags, OLD);
  			for (p += 7 ; *p != '\n'; p++) {
--- 939,945 ----
  				M_PRIORITY(upper(*p) - 'A' + 1));
  			}
  		    } else if (get_status &&
! 			    !(get_status = lcase_strncmp(p, "Status:", 7))) {
  			/* new mail should not have a Status: field! */
  			turnon(msg[cnt].m_flags, OLD);
  			for (p += 7 ; *p != '\n'; p++) {
diff -rc --new-file orig/mush-7.2.5/mush.1 mush-7.2.5/mush.1
*** orig/mush-7.2.5/mush.1	Fri Oct 30 19:55:03 1992
--- mush-7.2.5/mush.1	Wed Oct 27 18:07:40 1993
***************
*** 3249,3255 ****
  .B home
  variable descriptions for more information.
  .TP
! .BR sort " [\-i] [[\-r] \-a | \-d | \-l | \-p | \-R | \-s | \-S]"
  This command sorts messages according to author, date, status or subject
  (with or without considering the \*QRe:\ \*U, in replied messages).
  In addition, the messages can be sorted in reverse order (same arguments).
--- 3249,3255 ----
  .B home
  variable descriptions for more information.
  .TP
! .BR sort " [\-i] [[\-r] \-a \-t | \-d | \-l | \-p | \-R | \-s | \-S]"
  This command sorts messages according to author, date, status or subject
  (with or without considering the \*QRe:\ \*U, in replied messages).
  In addition, the messages can be sorted in reverse order (same arguments).
***************
*** 3261,3266 ****
--- 3261,3267 ----
  \-i	ignore case in alphabetical sorts
  \-r	reverse sort order of next option
  \-a	sort by author (alphabetical)
+ \-t	sort by target (alphabetical)
  \-d	sort by date
  \-l	sort by length of message
  \-p	sort by message priority
diff -rc --new-file orig/mush-7.2.5/mush.h mush-7.2.5/mush.h
*** orig/mush-7.2.5/mush.h	Fri Oct 30 19:55:40 1992
--- mush-7.2.5/mush.h	Wed Oct 27 17:55:45 1993
***************
*** 2,7 ****
--- 2,11 ----
  
  #include "config.h"
  
+ #if __STDC__
+ # include <unistd.h>
+ #endif
+ 
  #ifdef CURSES
  
  #ifdef USG
***************
*** 31,37 ****
  #else /* CURSES */
  #include <stdio.h>
  #if defined(SYSV) && defined(USG) || defined(AIX)
! #include <termio.h>
  #endif /* SYSV && USG */
  #endif /* CURSES */
  
--- 35,45 ----
  #else /* CURSES */
  #include <stdio.h>
  #if defined(SYSV) && defined(USG) || defined(AIX)
! # ifdef __linux__
! #   include <termios.h>
! # else
! #   include <termio.h>
! # endif
  #endif /* SYSV && USG */
  #endif /* CURSES */
  
***************
*** 87,97 ****
  #	    include <sys/select.h>
  #	endif /* M_UNIX */
  #	include <fcntl.h>
  #    endif /* SYSV */
  #endif /* SUNTOOL */
  
  #ifdef POSIX_UTIME
! #include <sys/utime.h>
  #endif /* POSIX_UTIME */
  #include <sys/stat.h>
  #include <sys/file.h>
--- 95,112 ----
  #	    include <sys/select.h>
  #	endif /* M_UNIX */
  #	include <fcntl.h>
+ #	ifndef __linux__
+ #	  undef TIOCGLTC
+ #	endif
  #    endif /* SYSV */
  #endif /* SUNTOOL */
  
  #ifdef POSIX_UTIME
! # ifdef __linux__
! #   include <utime.h>
! # else
! #   include <sys/utime.h>
! # endif
  #endif /* POSIX_UTIME */
  #include <sys/stat.h>
  #include <sys/file.h>
***************
*** 173,182 ****
  #endif /* nocrmode */
  
  unsigned char vmin, vtime;
! #define sg_erase  c_cc[2]
  #define sg_flags  c_lflag
! #define sg_kill   c_cc[3]
  #define sg_ospeed c_cflag
  #define gtty(fd, SGTTYbuf)	ioctl(fd, TCGETA, SGTTYbuf)
  #undef stty
  #define stty(fd, SGTTYbuf)	ioctl(fd, TCSETAW, SGTTYbuf)
--- 188,203 ----
  #endif /* nocrmode */
  
  unsigned char vmin, vtime;
! #define sg_erase  c_cc[VERASE]
  #define sg_flags  c_lflag
! #define sg_kill   c_cc[VKILL]
  #define sg_ospeed c_cflag
+ #ifdef __linux__
+ # undef TCGETA
+ # undef TCSETAW
+ # define TCGETA TCGETS
+ # define TCSETAW TCSETSW
+ #endif
  #define gtty(fd, SGTTYbuf)	ioctl(fd, TCGETA, SGTTYbuf)
  #undef stty
  #define stty(fd, SGTTYbuf)	ioctl(fd, TCSETAW, SGTTYbuf)
***************
*** 187,200 ****
  #define cbrkoff()  \
  	(_tty.sg_flags |= ICANON,_tty.c_cc[VMIN] = vmin,_tty.c_iflag |= ICRNL, \
  		_tty.c_cc[VTIME] = vtime, stty(0, &_tty))
! #define savetty()  \
  	(void) gtty(0, &_tty), vtime = _tty.c_cc[VTIME], vmin = _tty.c_cc[VMIN]
! #define cbreak()   cbrkon()
! #define nocbreak() cbrkoff()
  
  /* If curses isn't defined, declare our 'tty' and macros for echo/cbreak */
  #ifndef CURSES
! typedef struct termio SGTTY;
  #define echom()    echon()
  #define noechom()  echoff()
  #define crmode()   cbrkon()
--- 208,238 ----
  #define cbrkoff()  \
  	(_tty.sg_flags |= ICANON,_tty.c_cc[VMIN] = vmin,_tty.c_iflag |= ICRNL, \
  		_tty.c_cc[VTIME] = vtime, stty(0, &_tty))
! 
! #ifdef __linux__
! # undef savetty
! # undef cbreak
! # undef nocbreak
! #endif
! 
! #ifndef savetty
! # define savetty()  \
  	(void) gtty(0, &_tty), vtime = _tty.c_cc[VTIME], vmin = _tty.c_cc[VMIN]
! #endif
! #ifndef cbreak
! # define cbreak()   cbrkon()
! #endif
! #ifndef nocbreak
! # define nocbreak() cbrkoff()
! #endif
  
  /* If curses isn't defined, declare our 'tty' and macros for echo/cbreak */
  #ifndef CURSES
! #ifdef __linux__
!   typedef struct termios SGTTY;
! #else
!   typedef struct termio SGTTY;
! #endif
  #define echom()    echon()
  #define noechom()  echoff()
  #define crmode()   cbrkon()
***************
*** 403,408 ****
--- 441,448 ----
  #define HELP_TEXT   ULBIT(25) /* create textsw frame for paging help messages */
  #define CORRUPTED   ULBIT(26) /* error loading new mail has occurred */
  
+ #define DONT_CHECK  (DO_SHELL|IS_PIPE|IGN_SIGS|IS_GETTING|READ_ONLY|REDIRECT|CNTD_CMD|IS_SENDING|IN_MACRO)
+ 
  /* flags to control composition */
  #define VERBOSE		ULBIT(0)  /* verbose flag for sendmail */
  #define INCLUDE		ULBIT(1)  /* include msg in response */
***************
*** 446,451 ****
--- 486,498 ----
      int    m_lines;	/* number of lines in msg */
      char   *m_date_recv;/* Date user received msg (see dates.c for fmt) */
      char   *m_date_sent;/* Date author sent msg (see dates.c for fmt) */
+     char   *m_source;	/* Cached From: or Reply-To: field */
+     char   *m_target;	/* Cached To: or Newsgroups: field */
+     char   *m_subject;	/* Cached Subject: field */
+     char   *m_from;	/* Cached Reply-To: or From: field */
+     char   *m_addr;	/* Cached Reply-To: or From: field */
+     char   *m_name;	/* Cached Reply-To: or From: field */
+     char   m_author;	/* if any of the 3 preceding ones has been inited */
  } msg[MAXMSGS];
  
  struct options {
***************
*** 526,532 ****
      *cc_to(),     	/* when responding, return str which is the cc-list */
      *compose_hdr(),	/* passes hdr_format to format_hdr() for displays */
      *format_hdr(),	/* returns a formatted line describing passed msg # */
!     *header_field(),    /* the line in msg described by arg (message header) */
      *reply_to(),	/* who do we reply to when responding */
      *subject_to(),      /* when responding, return str which is the subject */
  
--- 573,580 ----
      *cc_to(),     	/* when responding, return str which is the cc-list */
      *compose_hdr(),	/* passes hdr_format to format_hdr() for displays */
      *format_hdr(),	/* returns a formatted line describing passed msg # */
!     *real_header_field(),/* the line in msg described by arg (message header) */
!     *header_field(),    /* like the real_ version, but cached or extended */
      *reply_to(),	/* who do we reply to when responding */
      *subject_to(),      /* when responding, return str which is the subject */
  
***************
*** 589,597 ****
  #ifdef TIOCGLTC
  struct ltchars ltchars;			/* tty character settings */
  #endif /* TIOCGLTC */
! #if defined(BSD) && !defined(AIX) /* (TIOCGETC) */
  struct tchars  tchars;			/* more tty character settings */
! #endif /* BSD && !AIX (TIOCGETC) */
  
  #ifdef CURSES
  
--- 637,645 ----
  #ifdef TIOCGLTC
  struct ltchars ltchars;			/* tty character settings */
  #endif /* TIOCGLTC */
! #if defined(BSD) && !defined(AIX)
  struct tchars  tchars;			/* more tty character settings */
! #endif /* BSD && !AIX */
  
  #ifdef CURSES
  
diff -rc --new-file orig/mush-7.2.5/pick.c mush-7.2.5/pick.c
*** orig/mush-7.2.5/pick.c	Fri Oct 30 19:55:41 1992
--- mush-7.2.5/pick.c	Wed Oct 27 17:21:38 1993
***************
*** 370,376 ****
  		    if (!(p = header_field(n, "subject")))
  			break;
  		} else if (search_from) {
! 		    if (!(p = header_field(n, "from"))) {
  			/*
  			 * Check for MSG_SEPARATOR here?  Maybe not...
  			 */
--- 370,376 ----
  		    if (!(p = header_field(n, "subject")))
  			break;
  		} else if (search_from) {
! 		    if (!(p = header_field(n, "source"))) {
  			/*
  			 * Check for MSG_SEPARATOR here?  Maybe not...
  			 */
***************
*** 384,394 ****
  			    *p2 = 0;
  		    }
  		} else if (search_to) {
! 		    if (!(p = header_field(n, "to")) &&
! 		        !(p = header_field(n, "apparently-to")))
  			break;
  		} else if (*search_hdr) {
! 		    if (!(p = header_field(n, search_hdr)))
  			break;
  		}
  		if (icase)
--- 384,393 ----
  			    *p2 = 0;
  		    }
  		} else if (search_to) {
! 		    if (!(p = header_field(n, "target")))
  			break;
  		} else if (*search_hdr) {
! 		    if (!(p = real_header_field(n, search_hdr)))
  			break;
  		}
  		if (icase)
diff -rc --new-file orig/mush-7.2.5/pmush.c mush-7.2.5/pmush.c
*** orig/mush-7.2.5/pmush.c	Fri Oct 30 19:56:16 1992
--- mush-7.2.5/pmush.c	Sat Sep 11 20:42:58 1993
***************
*** 9,17 ****
  	variable POP3_SUPPORT is defined.
  **************************************************************************/
  
  #ifdef POP3_SUPPORT
  
- #include "config.h"
  #include "mush.h"
  #include "pop.h"
  
--- 9,18 ----
  	variable POP3_SUPPORT is defined.
  **************************************************************************/
  
+ #include "config.h"
+ 
  #ifdef POP3_SUPPORT
  
  #include "mush.h"
  #include "pop.h"
  
***************
*** 203,225 ****
  	    close(open(mailbox, O_WRONLY | O_CREAT | O_EXCL, 0600));
  	}
      }
!     if (!(mfstream = fopen(mailbox, "a"))) {
! 	perror("Error opening mailbox in loadmail");
  	pop_close(postinfo);
  	return;
      }
      for (i = 1; i <= msgcount; i++) {	/* Load new messages */
  	msgptr = pop_retrieve(postinfo, i);
! 	dateline = date(msgptr);
! 	fromline = from_line(msgptr);
! 	if (fprintf(mfstream, "\nFrom %s %s\n%s", fromline, dateline, msgptr)
! 		< (strlen(fromline) + strlen(dateline) + strlen(msgptr))) {
! 	    fprintf(stderr, "Error writing mailbox file\n");
! 	    pop_close(postinfo);
! 	    cleanup(-1);
  	}
- 	free(dateline);
- 	free(fromline);
  	free(msgptr);
  	if (pop_delete(postinfo, i)) {
  	    fprintf(stderr, "Error deleting message from post office: %s\n",
--- 204,236 ----
  	    close(open(mailbox, O_WRONLY | O_CREAT | O_EXCL, 0600));
  	}
      }
!     if ((mfstream = fopen(mailbox, "a")) == NULL) {
! 	perror(mailbox);
  	pop_close(postinfo);
  	return;
      }
      for (i = 1; i <= msgcount; i++) {	/* Load new messages */
  	msgptr = pop_retrieve(postinfo, i);
! 	if (msgptr == NULL) break;
! 	if (strncmp(msgptr,"From ",5) == 0) {
! 	    if (fputs(msgptr,mfstream) < 0) {
! 		perror(mailbox);
! 		pop_close(postinfo);
! 		cleanup(-1);
! 	    }
! 	}
! 	else {
! 	  dateline = date(msgptr);
! 	  fromline = from_line(msgptr);
! 	  if (fprintf(mfstream, "\nFrom %s %s\n%s", fromline, dateline, msgptr)
! 		  < (strlen(fromline) + strlen(dateline) + strlen(msgptr))) {
! 	      perror(mailbox);
! 	      pop_close(postinfo);
! 	      cleanup(-1);
! 	  }
! 	  free(dateline);
! 	  free(fromline);
  	}
  	free(msgptr);
  	if (pop_delete(postinfo, i)) {
  	    fprintf(stderr, "Error deleting message from post office: %s\n",
***************
*** 227,233 ****
  	}
      }
      if (fclose(mfstream) == EOF) {
! 	perror("Error closing mailbox file in loadmail");
  	pop_close(postinfo);
  	return;
      }
--- 238,244 ----
  	}
      }
      if (fclose(mfstream) == EOF) {
! 	perror(mailbox);
  	pop_close(postinfo);
  	return;
      }
diff -rc --new-file orig/mush-7.2.5/pop.c mush-7.2.5/pop.c
*** orig/mush-7.2.5/pop.c	Fri Oct 30 19:56:14 1992
--- mush-7.2.5/pop.c	Mon Sep 13 11:12:40 1993
***************
*** 6,11 ****
--- 6,13 ----
   * August 13, 1991
   */
  
+ #include "config.h"
+ 
  #ifdef POP3_SUPPORT
  
  #include <sys/types.h>
***************
*** 47,52 ****
--- 49,57 ----
  extern char *
  strstr( /* char *, char * */ );
  
+ extern char *
+ index( /* char *, char */);
+ 
  #include <netdb.h>
  #include <errno.h>
  #include <stdio.h>
***************
*** 178,212 ****
  #endif
      if (!host) {
  	host = getenv("MAILHOST");
! 	if (!host) {
! 	    strcpy(pop_error, "Could not determine POP server");
! 	    return (0);
! 	}
!     }
!     /* Determine the password */
! #ifdef KERBEROS
! #define DONT_NEED_PASSWORD (! (flags & POP_NO_KERBEROS))
! #else
! #define DONT_NEED_PASSWORD 0
! #endif
! 
!     /* Modified to return password if possible -- Bart */
!     if ((!password || !*password) && (!DONT_NEED_PASSWORD)) {
! 	if (!(flags & POP_NO_GETPASS)) {
! 	    char *p = getpass("Enter POP password:");
! 	    if (p && password)
! 		(void) strcpy(password, p);
! 	    password = p;
! 	}
! 	if (!password) {
! 	    strcpy(pop_error, "Could not determine POP password");
! 	    return (0);
! 	}
      }
-     if (password)
- 	flags |= POP_NO_KERBEROS;
-     else
- 	password = username;
  
      sock = socket_connection(host, flags);
      if (sock == -1)
--- 183,191 ----
  #endif
      if (!host) {
  	host = getenv("MAILHOST");
! 	if (host == NULL || host[0] == '\0')
! 	    host = "mailhost";
      }
  
      sock = socket_connection(host, flags);
      if (sock == -1)
***************
*** 233,250 ****
  		"Username too long; recompile pop.c with larger ERROR_MAX");
  	return (0);
      }
!     sprintf(pop_error, "USER %s", username);
  
      if (sendline(server, pop_error) || getok(server)) {
  	return (0);
      }
      if (strlen(password) > ERROR_MAX - 6) {
  	pop_close(server);
  	strcpy(pop_error,
  		"Password too long; recompile pop.c with larger ERROR_MAX");
  	return (0);
      }
!     sprintf(pop_error, "PASS %s", password);
  
      if (sendline(server, pop_error) || getok(server)) {
  	return (0);
--- 212,255 ----
  		"Username too long; recompile pop.c with larger ERROR_MAX");
  	return (0);
      }
!     sprintf(pop_error, "USER \"%s\"", username);
  
      if (sendline(server, pop_error) || getok(server)) {
  	return (0);
      }
+ 
+     /* Determine the password */
+ #ifdef KERBEROS
+ #define DONT_NEED_PASSWORD (! (flags & POP_NO_KERBEROS))
+ #else
+ #define DONT_NEED_PASSWORD 0
+ #endif
+ 
+     /* Modified to return password if possible -- Bart */
+     if ((!password || !*password) && (!DONT_NEED_PASSWORD)) {
+ 	if (!(flags & POP_NO_GETPASS)) {
+ 	    char *p = getpass("Password: ");
+ 	    if (p && password)
+ 		(void) strcpy(password, p);
+ 	    password = p;
+ 	}
+ 	if (!password) {
+ 	    strcpy(pop_error, "Could not determine POP password");
+ 	    return (0);
+ 	}
+     }
+     if (password)
+ 	flags |= POP_NO_KERBEROS;
+     else
+ 	password = username;
+ 
      if (strlen(password) > ERROR_MAX - 6) {
  	pop_close(server);
  	strcpy(pop_error,
  		"Password too long; recompile pop.c with larger ERROR_MAX");
  	return (0);
      }
!     sprintf(pop_error, "PASS \"%s\"", password);
  
      if (sendline(server, pop_error) || getok(server)) {
  	return (0);
***************
*** 882,888 ****
      int ret;
  
      cp = buf;
!     while ((ret = write(fd, cp, nbytes)) > 0) {
  	cp += ret;
  	nbytes -= ret;
      }
--- 887,893 ----
      int ret;
  
      cp = buf;
!     while (nbytes > 0 && (ret = write(fd, cp, nbytes)) > 0) {
  	cp += ret;
  	nbytes -= ret;
      }
***************
*** 969,985 ****
   * 	Changes made to the maildrop since the session was started (or
   * 	since the last pop_reset) may be lost.
   */
  void 
  pop_close(server)
  PopServer server;
  {
-     sendline(server, "RSET");
-     sendline(server, "QUIT");
  
!     close(server->file);
!     free((char *) server);
  
!     return;
  }
  
  #endif /* POP3_SUPPORT */
--- 974,996 ----
   * 	Changes made to the maildrop since the session was started (or
   * 	since the last pop_reset) may be lost.
   */
+ 
+ unsigned pop_closing = 0;
+ 
  void 
  pop_close(server)
  PopServer server;
  {
  
!     if (pop_closing == 0) {
! 	pop_closing = 1;
! 
! 	sendline(server, "RSET");
! 	sendline(server, "QUIT");
  
! 	close(server->file);
! 	free((char *) server);
!     }
  }
  
  #endif /* POP3_SUPPORT */
diff -rc --new-file orig/mush-7.2.5/signals.c mush-7.2.5/signals.c
*** orig/mush-7.2.5/signals.c	Fri Oct 30 19:55:42 1992
--- mush-7.2.5/signals.c	Sat Oct 16 19:57:00 1993
***************
*** 8,13 ****
--- 8,14 ----
  
  static int was_stopped;
  
+ #ifndef __linux__
  #ifndef SYSV
  extern char *sys_siglist[];
  #else
***************
*** 34,40 ****
  /* SIGCLD */	"death of a child",
  /* SIGPWR */	"power-fail restart"
  };
! #endif /* SYSV */
  
  SIGRET
  intrpt(sig)
--- 35,42 ----
  /* SIGCLD */	"death of a child",
  /* SIGPWR */	"power-fail restart"
  };
! #endif /* !SYSV */
! #endif /* !__linux__ */
  
  SIGRET
  intrpt(sig)
***************
*** 425,431 ****
      if (last_check < 0)
  	last_check = time((long *)0);
      
!     if (istool || time((long *)0) - last_check > time_out) {
  	popchkmail();
  	last_check = time((long *)0);
      }
--- 427,434 ----
      if (last_check < 0)
  	last_check = time((long *)0);
      
!     if (isoff(glob_flags,DONT_CHECK)
! 		&& (istool || time((long *)0) - last_check > time_out)) {
  	popchkmail();
  	last_check = time((long *)0);
      }
diff -rc --new-file orig/mush-7.2.5/sort.c mush-7.2.5/sort.c
*** orig/mush-7.2.5/sort.c	Mon Oct 22 03:25:03 1990
--- mush-7.2.5/sort.c	Wed Oct 27 18:04:05 1993
***************
*** 40,45 ****
--- 40,46 ----
  		case 'l': /* sort by length in bytes */
  		case 'S': /* sort by message status */
  		case 'p': /* sort by message priority */
+ 		case 't': /* sort by addressee */
  		    /* skip consecutive repeats of the same flag */
  		    if (depth < 1 || subsort[depth-1] != argv[0][n])
  			subsort[depth++] = argv[0][n];
***************
*** 164,175 ****
  
  author_cmp(msg1, msg2)
  register struct msg *msg1, *msg2;
  {
      char buf1[HDRSIZ], buf2[HDRSIZ];
      int retval;
  
!     (void) reply_to(msg1 - msg, 0, buf1); /* "0" for "author only" */
!     (void) reply_to(msg2 - msg, 0, buf2);
      Debug("author: msg %d: %s, msg %d: %s\n", msg1-msg, buf1, msg2-msg, buf2);
      if (ignore_case)
  	retval = lcase_strncmp(buf1, buf2, -1) * order;
--- 165,177 ----
  
  author_cmp(msg1, msg2)
  register struct msg *msg1, *msg2;
+ #if 1
  {
      char buf1[HDRSIZ], buf2[HDRSIZ];
      int retval;
  
!     (void) author_to(msg1 - msg, buf1);
!     (void) author_to(msg2 - msg, buf2);
      Debug("author: msg %d: %s, msg %d: %s\n", msg1-msg, buf1, msg2-msg, buf2);
      if (ignore_case)
  	retval = lcase_strncmp(buf1, buf2, -1) * order;
***************
*** 177,182 ****
--- 179,204 ----
  	retval = strcmp(buf1, buf2) * order;
      return retval ? retval : msg_cmp(msg1, msg2);
  }
+ #else
+ {
+     char buf1[HDRSIZ], buf2[HDRSIZ], *p;
+     int retval;
+ 
+     if (!(p = header_field(msg1 - msg, "source")))
+ 	p = "";
+     (void) strcpy(buf1, p);
+     if (!(p = header_field(msg2 - msg, "source")))
+ 	p = "";
+     (void) strcpy(buf2, p);
+     Debug("authors: (%d): \"%s\" (%d): \"%s\"\n",
+ 	msg1-msg, buf1, msg2-msg, buf2);
+     if (ignore_case)
+ 	retval = lcase_strncmp(buf1, buf2, -1) * order;
+     else
+ 	retval = strcmp(buf1, buf2) * order;
+     return retval ? retval : msg_cmp(msg1, msg2);
+ }
+ #endif
  
  /* compare messages according to size (length) */
  size_cmp(msg1, msg2)
***************
*** 249,254 ****
--- 271,300 ----
      return retval ? retval : msg_cmp(msg1, msg2);
  }
  
+ /*
+  * compare addressee strings from two messages.
+  */
+ addressee_cmp(msg1, msg2)
+ register struct msg *msg1, *msg2;
+ {
+     char buf1[HDRSIZ], buf2[HDRSIZ], *p;
+     int retval;
+ 
+     if (!(p = header_field(msg1 - msg, "target")))
+ 	p = "";
+     (void) strcpy(buf1, p);
+     if (!(p = header_field(msg2 - msg, "target")))
+ 	p = "";
+     (void) strcpy(buf2, p);
+     Debug("addressees: (%d): \"%s\" (%d): \"%s\"\n",
+ 	msg1-msg, buf1, msg2-msg, buf2);
+     if (ignore_case)
+ 	retval = lcase_strncmp(buf1, buf2, -1) * order;
+     else
+ 	retval = strcmp(buf1, buf2) * order;
+     return retval ? retval : msg_cmp(msg1, msg2);
+ }
+ 
  date_cmp(msg1, msg2)
  register struct msg *msg1, *msg2;
  {
***************
*** 306,311 ****
--- 352,358 ----
  	when 'R': retval = subj_with_re(msg1, msg2);
  	when 'l': retval = size_cmp(msg1, msg2); /* length compare */
  	when 'p': retval = pri_cmp(msg1, msg2);
+ 	when 't': retval = addressee_cmp(msg1, msg2);
  	otherwise: retval = status_cmp(msg1, msg2);
      }
      depth = sv_depth;
diff -rc --new-file orig/mush-7.2.5/xcreat.c mush-7.2.5/xcreat.c
*** orig/mush-7.2.5/xcreat.c	Fri Oct 30 19:56:16 1992
--- mush-7.2.5/xcreat.c	Mon Sep 13 12:17:18 1993
***************
*** 157,171 ****
      int j = -2, i;
  
      q = rindex(name, '/');
!     if (q)
! 	i = q - name;
!     else {
! 	i = 0;	/* Creating in the current directory */
!     }
      p = strncpy(buf, name, i);
      if (unique(p, p + i, mode))
  	j = myrename(p, name);	/* try and rename it, fails if nonexclusive */
-     free(p);
      return j;
  }
  
--- 157,166 ----
      int j = -2, i;
  
      q = rindex(name, '/');
!     i = (q == 0) ? 0 : q-name+1;
      p = strncpy(buf, name, i);
      if (unique(p, p + i, mode))
  	j = myrename(p, name);	/* try and rename it, fails if nonexclusive */
      return j;
  }
  
Diffs to build pine (Washington University) mailer for LinuxELF
(gcc-2.7.0, libc-5.1.4)
‹ƒfõ/pine3.91-LinuxELF.difÝX[wâ8~Æ¿¢6älã€
†\ÉÐèif¸ä=Ý³Û{cÐ¶/¬/M˜�ýï[%0$!dæìË:9È*•J¥ª¯J%Û|:-`Á=VÑoŒ"wÍE±Þ¶‹–f9œyQ±k~eSî°
“Öá^üÐê¼?Ä­hšv”ØL×÷ oE`” \©•j¹ÆÍÍ¹’Ïç_·ffhFðcì`\TK—UãœD](ww ÆUá
òÔ\ÃÝ�Ž÷PÍdAHV sšëÖj©àF,Œ ?¬�ÞAëóhPoÚ?·ÃÚÉi.ÝWOàNËGÍûAÔ¯MØo,øºüÈÇ-“?Ü×GjÅ8Šîƒp�÷�ú(L›�Ö‡D¤$ª'Jþ…Y8§¼?éÍê47Î$´OPÀµ"Ú`×´æ#æýÑ-ÚÇ€Ä�ëÖqÎ"ÎÁALi`”ÊÕJ¹zñZ`1{ 0ª¥ë-(®K²!P„NÈuú�zG{kó ð×pOÕ[ãSÈQO£±q—Á_j�°†–éI…+	
bTE0lÎÎ<Óeá­¢Ñ˜ã{3ð´!Ô€¦"Ûîª‚½àÎÇ!sP½y±úA„ºä_%$Ç=ÜÒ™šSÕ­¼]âV´ÐÝwlé¹á,„ïÁ5¹3f²ãž˜éÄ€Šk˜‘i@J·	™Lñ<?bB�ÙØYÂYQŠÜ3iœ¶ä­ÒÒùµˆRÙJ�,ŠzíŽÐï?ôƒJ‹´”‹ÜE�4œøê-©0‰9ª/iÿ°Äî8‡Œ´Ñ¤Ž2;y6ÄäW˜[€%±œc3ŠK›°`c7ÇDZ
ÌÈç¸.-ðw¹ºfü=0&’zKœ’ê£6g”n�Ãw	@n!Ÿç*à2Ó€±”~°¢eŽŠp�-Ãcc\ò¾å’m'Î
òêùÅ+ã<t0Ò+F‰€%ÂUF†(ÂY{›Àò`ÈXÎ´„‡£Àš£IÃÂý
:ìŒˆoŠo¶�'ìZ4�XNÐÓ(!¥×àï[L¼Eç¥ÀvPL
Wi‰ûäÇÂ×9JÀñ-ÓÁ¦áxÆ(ÎùoÌÇ¥{­OC¸ê:3l³K´Â	’IÜC¼À|À�?�Ö,ð³1
¬Pä^ mÔÀZ¬P±º–¿X¥L)Â—í ààh¬úá÷cÑºæ~¯kÆÌ'ÜS=žAÅ Ä—¯/Y6¢cöf‹Ùó‚,þ^
Äf¹g9±Íà;�EöDŸ¿MÓ¬hµ`{4žO4�= = T¢tÚ?cÌ-ÜË”©15u±´w…�¸<´ô9V‰,kn¢K¬`µˆrˆŽg<ãùžöº‚òùOxèyæ?TXwÐS©âòêÿª¸üŸ×‘‹SÏ>»ì‡�±Ë™ÅLÂ¢¥‹jù¦j?VŽ‚Åž¬ÃÑ+œóõy“Tè˜õNs�F§Ýê�:íw*üj¡�ÓF1ÿ•,.–©î1
¢î£ó‰®Ò¨th¾\³àP"ME§¿‚[^6è~•4£ÓQŸ‹7‘èÍm¶ÐçÈúØ¯nù8IÚHÇHxÂ¬�xv=øhxë6ÊX%\U+—‡¢ù±€—|e\gòr˜%#¬s_áÊ�øŽ8Šl6‰g3îÍ­Y~è×2m¦ä³©d‰ÑóUQ�*Úv¼_Vòé(Z�ÈhMthÍN»÷ñ3¶÷ýa›ÚûïÆ�~o4èw”|šý#mÂ%�¬9îAœ£|˜x°
¥h€Ðjt›¨ŠˆN}@’ƒX�A½‡}	Lç‘žØ’Ö®e.”ü>e‹ þûv§Ecfaæ@œ™^È±™˜!·¨å¡oøË�ÑK<�²@÷eæ³|wá‡¢oópá˜+|Î”
÷ñÅA¿c#Áè?™dð¸�=þ€Ð})†'`¸Û;Q0u”.^ÄàvöáäÒ(Üà"`rÈ&—ÈŸÞ
GƒVÎ¾.L;dÿÂ{$dƒS:ÆG­A·Q¿'8"
‰6â/`9ô…
¿ÿë¾÷íôí•‡)âµ3Ò}‡v«R¬L‘”¡,¹©6d…€¥µ´s²S „.°‡X¨ú‹»h–9!Û«8fuc‚'½î±—SÐÏ¾ï÷†wRP¹Z>¯VJ‡Ý¿/à .®
Æ9äeCtk°y´)h/Es<ÐBè,ÞPi=Eëß�ÚÝöß$9"åìÐ	°´  •d[PNk½ûøÃZœÖ]ÌWijvCÇ0owë÷Íö@Žéú¦pBéíF?=Bá�$ÌëvRÉôuBÁ{Ã–á4—W‹˜™H°n"1ÑEÝ(¡›¤b’.)«ö>Ó¦†¿G¿Ü·j_N�ðåg®�Cçdbz»TŸÃ—H;ø«Q)?»\O`l—aex.½Œ²=‡3M¥\À£N6„3ú+žiôÀïcÌÕ–~Ë÷¦|&¿£hG>t÷ÍÊÔdåVw|ßîµ
H?'¢üwNòŸØƒNË�<3{ü¾ý¹Õ|i¶>åÌÆ:÷h
v×Î½öS«
;
—/Åe@6iÃ§9zÆf±‹àÛÇSyiò(WV!ÂÀýšR�hÎCºús¼�…`ž xô<²ð‡úÏ­ñ§z{4þØk÷{@Ÿw¢9£èN¢ÓóEÿŒN‰<2þi!iàvÚ¸<Òý%38V`~ÃÒÑœ8¸³—�#¾Ò”Å•W6âë÷¾á%ƒÏÌˆÙ:|ÄŠ „Ó>é6óéòjbÇ�#ð§pO2aÊ–@ßC1†›	I
ÁÇa�gª…V%" h
DS„ÛC¶}#÷>vEåœoQ²;`ìZãÏ=âSÉ�€K™±É¢ö�9´ñ�¾Ñ˜¼>`¡1p™é¡ÁCµªü—ÐŸ&ÕBegin3
Title:		pine391.tgz          
Version:	3.91        
Entered-date:   10/29/1994
Description:    Pine Mail System.  Includes the pico editor.  Now has the
		capability to read and post news via built-in nntp.  Very 
		easy to use, recommended for beginning AND advanced users.
Keywords:       mail reader news editor
Author:         Pine is the work of Mike Seibel, Mark Crispin, Steve Hubert,
		Sheryl Erez, David Miller and Laurence Lundblade* at the 
		University of Washington Office of Computing and Communica-
		tions.
Maintained-by:  Author(s)
Primary-site:  	ftp.cac.washington.edu/pine/pine.tar.Z
Alternate-site: sunsite.unc.edu
Original-site:  ftp.cac.washington.edu/pine/pine.tar.Z
Platform:       Linux
Copying-policy: 
End
‹Æ´.pine391.tarì:pez¿l™ÈAF”HÂm‚
1q;ØqœÆ=¿ä8ù™„\ÖÒÊ’#k…v7Ž!QldOY¶.n×ë\§�L®7mi�N{ÃèçÑ˜gr<Ü&GÓ�k7#:G9&1ÄõûþWÇ�›i�¡Ó,Dûïÿï×ÿréò¸Š²ªÊJŽpø”Íy\åºÊÊ²²²µUÐæªÊ«*WI¾‚G‘d>Êq$*ŠòÁ}ÙøÿÑG‘¢k¾Nþ/_[�þ_W±î¦ÿ¿*ÿ‡D/ZóõðÙº‡8®¼¬ªbíMÿµþï	†×|
ü_±ü_^YþÐMÿõþ�½âÿ>�ò²/ðÿCàø‡ª¨ÿ+ªªª*×A,”¯]WVF¸²›þÿ�?·Z|„D,„8	™É!$ô ¹ùÜ|n>ÿO}o¯…[
­Wðó�¡£ßº5ÿQ­±Ðv´Žå�Ç,Ä£{?mÕŸ‚·þ<@zô?È%�î>f¡X‰+ãì!ð¯Ÿ†É>†{7pû„ÁïÃ—Äõóƒ\X¯ö+a¯Ã|ˆ�†€àÝ�œ_Œraa€‚!NØ/D¹¢FN¼bØ'‘�á}aq Ì‰ÄÜÀId—¨P’Q’‚=¡A.ÀïR4J‰!S§úóøGe;ºÚõµ‚…LºgQÓI÷{}H_y‘ýÂ:.`CS.T+6Çï{ &jîc®QÔÜvÍåÚ°Ú1úžåú�ú§�øë§ZÞv¼ê~ûåBè¯>éxòBZGex%/¢<. ùáÿà_Å—Œ7Þ ÿ{Æù¿�Ñþ�g<ñC³Äñì„ãÅ�UeöÒû${t||¨òoÀXÜ¥ÓÆÈdÞz˜A~H®7HüdÎÐ"¯›§¿M/N&÷BH©G=^ƒ¿Ë/LSKø¿aÊ�€”�²wàgâ]ˆÛŸ,!�¶D½)ÏP¢*K>Kâã;›»Ý©¶|˜¸5CŸ¤ûBbwÆ÷õþ^¥¬ºÎ×mzàš¡€êžAwø‰{³íué…_%“ßú@7!êÄè„²¨Ï¢o!äQ ’1è.cnÝ£Çâ˜�¶{Þ$4é�wÍÒƒ`eEß­²šª2­µL'ß€>Ø…‰ý÷‡¨�Ì@Ö¯s�ÝÙJ	ÿø¬ìFBç‡úc…mÍ}1>òèó©tÙðÎ.:¾Ô£O°qN'/žô\GZ?ö%«NÄgr”•Ts“ü0C›}@²ß`	Rnw©Û­ÐðO6Ù€0‘h-‡6/±Mæy†Y6A�´Eøûô–%00žj^räÙ'±ŸÞR4tÖùTs@"»´JltžD+†Rùâ‡>$ra¼æ‡ˆòÂ¾}·�ºMkù°5ðWYÏ 5÷L³§�è¿Ì¡Ÿúó�ÂØ=/€ÃO™ª‡¯&Adù.ýÜ¤öDaF|,1ºe8óÇHüçOPjQ¹-ñ—Yùjˆµè¾“yøŸ¹;–§Ç"XÐ¦ÐÇÑ ;4eª«ÏØr´ë³w!Q»:áÑ+ß ÍK-IˆÔ1áôîî½êG{NÑÚI�åŸ¬…"­öl ][»Úµ=öÑóŽ±gqpúÊ´GSl]úIøºô{s‹GŸló»y�Ü2Ë5êüq'QÚµz»Öl¥>«nv)÷ÅkhU–o¬ý�{™+f®É/•O$*(¾ºÅî×6/ô«[œC[Šrwf§Þ¸?¹Å¹5~5©|›Ê>&ÌìîÎTäg"o¿V„ê�™Z¦õ;´3­Û-`¦D;âƒ [3ùÄPªz§¿ºn¡²ÌÔGþ©–�âNÖƒ%©°· |õL¾37”¯]k±�ž�U2Ò,¢k]Që
ZcuI�¶ÇÖ®Æ¢éÈÒ¿|BÛ3›AÐô'Ë	­Í¥Ý¡zìÌ»CÍE¶¹¾þ¡
y©¹1sµØZõ”k¿LSÓ¢@dëO½GÈQû0]X”
A?ãå±£IäÅÌr—|Û¸víÊƒ/å—
iÓ†Ó3!p•Š”Ö9Ã®´ÿºÀ—þcÓ±Œs­ÝP´ÖZ]ïRìxý[KiàeŠþÆ»_,úÝZ’IäkmVÚaÓê­Õu.åiÙ—Ï/{v€ü°pÑûèeÇ&²ú1*qÈ¶Cÿ7L°·æ$XùÄ¥W3»ô\«…@�)Õ
¨|uÙ
.ðÇ�D>KÓ²l6™=ú¬!
/ÌÊe&NƒK®Pß‚8oµCÒ.$òýŽãuÎs†:íùòb|qòí ¶ÚjGnG™ÒŸÈ¥r8)§ï§8ý‡úñöÑ	Ç3àj«œ1áS³eéÿj¶þ×À‰§çèoä“·ÞŽò6¦ÕÀœ1zKÕ·R:¬ÈÒÁÅt(€Ì * üoë¯äüvdÚéŸ§ìh…_kƒÒâqÚvejkx=¥rÖcêo+Ÿ(?ï8Þµ°ú§òzõ½qÇ‹fWOÄ?ÏWìCg$\æ\ðù7byñÏ+¹cÍ–ºêŒÑƒÔ×ª¯*¯«Ó×±aùÑiÃ9§,§B9^­½olçµÑó‡k^AÙëÒò@-¥yÔ¦ŸÀøûÁû§8^˜Vß7Ô·±œH¥3”¨yó9]XR ÛŒ1›™¨÷Æk¾�yÑXCŽzjÕ2ü£_©£Ë£xÍs©OÃDœdþjÕs7¦¯yóË47Ç™*çÕão�åÆúÿ:µ…,fëŸe0fª{dbá¸¶ß¬MË¨›É0—É©ÕàÀ`ï1L¥ÀüÐsañÉ&BŠO!¿™âé1OR[ÆÄm¸¯úä¡
Óv«Úú’í‰eÆÚ‚õÝ…™öü`€®LÎ%YœM'ÑîžZÒ
°§U¾7å3[øè>®]�	mtn— 9>gþ‰pÁr2Iõ¸üšÇ	É´G#·�wŠ2×P›ÏÃºq&k]¸ò°1Ó�D30ÛEØ#·`˜“A‰†}âaóU1>9C?ð	Ì •Ý@&ý³ÞÔÙÇ[�Ú.—º²|×b¿ºË©Ö¹üjëâ¡Í×MGéù5YjhÂ¥ÄòDÅÞ(ßß/D¹Qö–s74s¾5ä]:GÞg ïó�Í/ïR&/Çä]
òrsåÅãYwØÇ‰~®YEJIþ@4(ËB˜‹Ñþ ì¹Å0Ê�ëaÇ.åAìÙÁKØÒËb�@¯ˆ*yƒ|ˆS$ÁÀ�†å}ªÇŽzxùÐQˆŠÌE¢A1Jò=Á°Àñ ˆ'è9>š…÷¥üQË�uÇvr+cM±µÅ¨Ö� �r%œÄïÇÓ‡Åï¢¥òa
ùB>¬Èyx•hTË('ƒ,œ?R4‚²�ßFñ+sX¢2ˆÏ	d! ÇgÓ„·$Fñ$#ˆÇ�J§<V”Ú„ˆ•o„Àà;xÔ±C„˜Ù/î()"„B(£�[°j>±%¸å!è"‰ó	¡`P|\x#Ä‡÷q€$€•£@Ì|ùé¶Pn¨e“í�Vö)’ôgé–b`àm6¯}LÛp2ßó¥A�¿ØZ�†öe QgØ^[á%Y(æBðâ°C'€&È–9Ì`K©³Çq½à*N�£¦PÈÒ/,Êœ$„ð•f`™}Œ„¢…¿l(#QBÛxBØ'™ªSpÁ×+dã”r\;Ä)&—á¶ôj&×$¨ 3…gÊ-}3ÑVj¢jtYƒ"Ï‘z¥/(EBü |Cµ�à�„Òö�ŠK3ØC½¦&¤Åi E�EÞ7De0#-QÊ†ºM¥i�ŸãCŽñ…Þ`O
ÑY²M
�0(³ÈNû+AóÇ6µMðG)@A
…
�Ô8ëÐ8íõè‘äJPJNP*¦’”pa¡%£ÉÄK‚�¼‹"W!r¿¸_àzxï¾>êƒèŽð†KÓŠtQèõ)h`tc`·):5bË(Ì™)ƒ©j ÔÍ‡’eÞ nŸq;FG�g> OTØ)°>°>m’”ÓÀ¦,À¦”5æÂmb)Žvkd¾c³bæ'Ãdù^´’"bØGO•�£f<€¦óO3=ÆÊúãTDƒSÊ/†Bâ@&&ƒæ÷óÁßbx8�ÁG"¡ GJ@FàÐÓ*‰åÂœ0!¸AúVÔ‚^ËQ1„2Áä!ör°_�h.AÀ¯hèhÛ¶¨ac
±ŽX[l[luì1Ä ùPÌé\j�Y�ªIÂcŠö
”‹:Ì¨¡ú@÷%(Lº>ôTpH^’�VîGÏ¯ì°8 ŠQq€ÒSu{a:
#
Ufy0F!ù_R¦ajõYn¤l
‘ÊÀH¾›‡¬Jg,Åb0Š,Âv…�MË�ºtÊe‚…sò€hLN¡ Ä„JûH˜#8(EÙûétE/ 80¼9ÇäÄ„ç}¾ 1f ¬�FÔg—0ô`"˜úa&àh9†P„¨E¡8ELKk8�ä£d R…øˆ(N®HNfáÿ`í#É<‹ß~Ñôƒ]h$¢3{�âÅIq@¢~‚€.‚ÄpI–“è‚£G þ\ZÑë	&û538‚‚ãÍ‰5)d#£S%]„q­ {Ã,®`áÆ#µ.†^\-‹«q¥GçTt¤O8ƒ.)¹Ï\Ëj-¶òsêT}|ã0Q®¨S¸¥€Æ„F—‚
b?Ä„Ãøu{es;Rxß°í9z,g=ëÛ´ÚÅÉ)sËíLÜFÏÙ­�Yˆ¾áU¼þù;¼10átqˆ\I÷NÒÝEhùóô’î]‹6ÍË¨ ìª‰Þ3Ya;Yž|6øIÍm_å¶5«îÙññê«Ž‘ðo!ÎWï™�uÁ>öô–÷»ôï>‹ô.ØT¨3–iØ™U»]±r­Ó©YŸZS–ÔöÅ<}¤Kÿ÷[ÎÄ¢Ì½ŽGÿè1ºlª‡Ÿ¢n[®{Ö£»Á+¬YË5¤¨¸Ž·9£—å¥“y�QY¾un†V!´NF��á3š”WLæ¹à«„B.†Ö„ü­L{3|³hI§B·àGÖ´�ä”^ôPêjM€8FÐ¸‡»ã3NÇÈ"lÞŸ±;F„f|æ6ÇÈáYÂÆ9{éšíõ;|gÍ6ú�—v—îd€5ÚõOØ…ôkðpÜ1’Oé×ì¤ƒ·`ÿ.‰ºKæœUÔ,€í³\|ø®š'ÂþúQ¨Æ†ã›/}ÏèRgV¹gã×F'b®±M9êäªC³—¾›†«Ù©ãvvÐL
QžL²ñË°Mîœ;¸áZ¢—}/Ý”Ø“>[HÆì'ZÒg	?ñÛYg[m:Þ’èíÍ„0fw§î�ªÀEúË^Øþ2LpFù¹ÑsŽ‘Ø¯’IcÓýqúüÇ8ûØcÓ»vÈY~V�>¡Ûã-06æzóò¤SÉ�Ÿ´Vß£¸«?Sn×ß´&2ì7|ðM+½È(¹œGoå‚øŒE±'Þ1ô™�_?Æ@¢€~×Å?»5öýy¡²ò_ë´Ûv/Y*»Žý#¼‘Du³UÉU=Öø„-~ÀJ”_˜z„a9ÈmƒÒ@º;Éö²§w
,�0uëdfÒ½… HL<¤»‘4ð0Q†Hwñˆ’+@|˜à‚˜Ù
y¾ˆtˆLú¶ LZÍ>@m#íÞI6	f‰ØDJ)æÈJRó@‘ÿã+èÿf]þÈº€µ'ó*†Œ‹æ¼�ÐÊ¡­m©¾F£…†Ø\«4Óû+üUŸ›½–LÆ·B¤B�±1ÞWÇ>…^õÝøëødÓJD½ÜTh‘o}º©�U¹ñqhNè¹W¦À³…–!á5[S!Y#w�É&;eØiÃKÇÞ÷NŽÎUÚýˆ3@¬Vûôä^uòÌrfùb¢�žwŒ|`âO LxMw¬éøé"rÞ±Fhz´ÜÑ	%�v{ŒAn¢ƒ
¶ùG·ÐÑ­ÖÖ$•C{ÛÛ [£ú¶êŸ~„w¯…ÚsøÙ¶C¯øOü¶i»] ÕhVß1´WëýoñâKå°cÓ¨%ÛÈQ†Ð:ÙäDu‹1Ïšœ²6ÌâgÊâ£ØYÿâ‡V œ¥ß[JÈQtàQôø
~ÕEµ8$­7ý… F¼w†éêDÆ3Ø˜GEXà’Ã¯„BN¼º©;‹€Í‚gvÿ†?�æ>+w:Ž/Z©½ªÝ¾åŒ…L-Ð²-ukIyºaå”îö´áuG«þ8‡u6)/§E ±4;ïúH ¼8
íÅ£¢ë® ˜<ñš?e‡™ZjØªßo¡Õ^=“¸}Î<\~Y[†‹q!W!ý”<ŽãyTþ»‡š_ÛZÒª_@ÏŸv¡€…ñSeˆ¦¼žâ×e0L—žcÉÔõ
«‹inù&þ•ø©©¾¤:½*Ç^Â?%ü“+Ÿyô)Ã›Æ!ržþ“ÕxB¨ëÅÆñ1ãºúHó�™xcÖÚ­Z&nî¶»úšG+ØHmð~¥fÌxóßà¥Öí09—ŸÏ¢Ù‘SR½cG¾ç—÷Ê&f_Bå>ùÁ•·Ô×âºÅrJûCô1ƒR~¦NçÒ‚%toÆ™"Öq7žaÇ¯&é]û'sù¤NÇÇË&Ô÷L>êkPtKõô¡»‹
^£çä˜šþ9þ2�.eJ¥ÌçÁ:ºúG/+÷ªËP¨gÞA%–d¯Ìš7çàwÎ*j×ýT^R¤ßX-Òò�;ØÖ˜µÖÎƒüà7ÉãÔ‰íü¸põ-' º? s°‘aÕ,Ëqão‹Ò—(Õ+‹`»³¢¨ôAiY`rf0ôo— €—\‘7‹5=è£+txÁ~SÂ¬Ðæ–§ÿZÉ›R­Èûßìýy`TÕù8ŒßI&É$Ì`Ø!a‰†l¬�I†$("D’8‰@0¹—E³á$Êå:š¶j­K+E[kmkëR\€6µŠŠ–ŠUTÔƒ6*Æ‘yŸç9ç.3	¶ŸÏïû¾ÿü¾èÍ<gßŸóœsž¥—¯ Ï�gæ[i€õÚÖtì|ˆþµÅ<ÈÉR˜¡9—Ñmêr4ŽÀ¥w!J*SFâÈ°"ç™Ùì"ù÷ùdâ7xÉÖtRLí5•»²¢&YÄ·e–8·G¦ô/…�>´ÿ{Ó8°ÊÉrJã9É‡~dõ\;Ô^7Àaœf»i¥d
µ{×žøôØ+ÿÀ…h)5õ$»·oêÏØ"Ž4á†%h9ï9\ïÌìø0¿°§„ÀÁ2-C�>2ê¯í¬JÄÃ¬}Jÿ,‚±ÑF}+,>ëšŠûo3ïpdu	¾÷n°¯ÂhŒÛlðÀÍ�´fBõÍËµ4,/õ�Ô†´|">‘NuÜUAiKÈã§0Èõ)iÉ!Å]›IŽ¹PÝö@<£k“×·1àµ¼8üï¼üÛ}<þ
òš
ÊIâw1éìxŽ Ó®at4QŸÉéñ#˜Ù�´•ä¸%¢ÇjÑ›9éü7�tv4ÇŸØ´ü�½–Õg 9üXâa#ÍM^oÛt’üŸð·ýQ-=›‹4™Ø„´ó4weL²Iý‡R<‡¤oÐ!¬´á)šÂøi^‡ajjq4v!Wm¶ý­ù4µ£'Ù <”ï9�ÃwÌÿAH &ö‡Ùò»P~�BŽXà?¾lâùHºÜ„––hú¥DQ°—¼Î*‘Œ…eQ3Âž .šÿ¢‹åoLGž”ÚÜ{ÊŠšJ”Fû÷a'™
œyßüžsÇX€ü‰Ã�¼ý·q,VêÉ>Q€U,TÇ|Žˆ°DyE”ºH¤
­S‰òºòa�ïÊ±}g
Ôöï•§æ«#è3Iãa‚V%	âÐhÚz½jŽ¸Zèz‚j›ý„^ÛFœÐHJ>+üH›#	gü×þõCCñÖUÚžSc#xŽøiÈœÚñžÕ;¼¯Þq4"?“Ri¾b/‰?�Ô¶¥Fí›ÈÿÑiŸÑ¨ä(ñ¿ˆ_(`“|ÞÌ†dÁ(B+KÆ0ö¬ŸÄ`ÕYÿ:´þý­+õkîã|“m<FoeC‰sÒw»1rÃ2ç$KGA¾TÅå)„Ýò‚DåzÕœO¨L\k×BŽ©]”¼DWê›]YÎIVéQX¬9�'Lâ/µÜ‚£vmÔÔÀ„HEg³òBÜ-}Õp… ®òãñÀ§Ö~ZËÈÜ~ï™ ˆX¨4úäM®{¬‘ü§ò}Hì*¹­A#�Y)¼-^­5û°5Eþóã±¸ý§BkÕË>c›cLû’ÚEþèm5°’º¾BÄ-ÿÍ ŽIÔqÄöÓÑVoG3üž–	x¦òÂ¸–'Ó¸Våk7¶�ö?Ea»“úïhÝö{�\Á÷êXæÛ€¾|ÿ'Ô¡Ðþƒˆ¯ú!Mõ§EÝƒ™u}Âôé˜KŒýÖq×”h"8¤hmÝ60Ó©îƒö½B¸�Cü¿ÅèñÛa«	ÏóQÔw¼¿™oô±þFšÉŠ®¬Á¸£ ºbþ�cÃþUom¦":…¥ß;fžÙÈ«K>­mmÂíº/øÐ‰žPÈÇ'ƒåd2n%®¼`¹ÖyghÃ\AŠyÇ;_Ë¤b:ÏÆ?Š…ö©%ïÿOp§�Íž�asRÂPÀù<†æÀÈµ[ØzìÆý§{Óñóì`$È«d
v‡ŽÉ­œ2Dž°>ÑY”£ñQÃÙ�/
ÅÌ¥^'þ¤ˆ=J�»–E‡vÚ£—J_‘³U˜úß7«�Ï>5a�¾,ÆBÃfá›§ßKµ·†í_êR8žªÃŽ;uÇ€Bì~¯ºã_t¤‡a_
«Å„µÀÇ“ÌŽkû¨;Äù:ŠW‚ÇiˆŸö2öð±¦{´B�~d$Åø‘qªŸ�`óŠñ”v½dG°¥ê/‚ª›ï\ùyy#¶ÈËÊØ�Û‘'iRÇ]§¾
…`¥ýbçAÁÛf¥ÿ$è¸<¥¿Ôßeá��
­Çà£{Ï·x^´ãe“QŠ×wm�’†Ý[D$~ì8ì68
ÔÚdkŠ¬ü!Ú õõwÁÃÜ1ô#gŸU²{<1˜§©Mxï
>$¶¨¤"õs†6.¶1*¸1~ú!æÕ�Ëýd_³®¡$jÒwá4Ÿ;ƒõ¹ÓçT‡%™²,ÚžÇ±ë`X‡ú4ºE['—³�­0ñ?Ó~xµ¶>4Þ 7x‹¡–¢Ç ú\ï(Dk(´©ÒüJõŽÆ¾q4Ö±³BmO‘úwwÄA�²ód÷ˆC %‘ÙvD7Ë�,×Ú™ú7¥E¡uïS8!þº˜=³è\-ÚµÝ‚¨=+ˆ—«Fr¢`êÚfc{e—4\¡ë9
hŒâx7Õ�o;ÁR•Ï/v@f¯Ô¥Û+7á½*±ã«@óÏ†ï'CtÂ
PÆÇÝz*³iJJ=ÊllI!MÉ³°Šä6œ’!iŠqÃÉ)"?ÒÙ™0~#r‰6½Êt×¯OGGã?5E¹ªëG÷1VÈ‰KÔë6uýŒzu4ÞþŸgàÿ„6[Ò_Ÿx)ÚÄ»~›x£#éÛËÆ†Ó·Eê)T;*b–€¯Ìz-�]§üèàŸÄaïÄDuÚ>ì³]4ìWÕïQÎðåWô0Yìž8aýD|¤.«Ü€—›Š7–j—"øgºqo’6^_Z5F¿Ñ(Øtc9cMs4’
|Ô–}–Ð
}Ê›òw;�émyù»7Ÿ[äÄ¹4mˆŽ©u˜®®jæ÷Új&òè=H8&ò!O"õŠM¦_”M‚µ0€× czßçIã®.��³W�}ƒÜn¹ÿÞzˆÌß¨vÔÒt¦cªØ_Í¸—.‰ÍKÄ÷‡µÝt„å‹ÈÒâ­p²+Sñ}(Õš1êÐ«ðª£+ÙÝ^eqrè�6’Â`CoEá)^Ó˜óŸë«ôŸ�õ{ƒ^1•t7eÓªÒˆ·áZféa2óëRÔ]W
|°}.h_|ðC+¿“I°ëw—c¯ÔäU-§Ý×9nÅ«£ñÛEÈ§8vWv·c‹W½¼‰O{É�­öÿm6,“ðÈy‘ÓæÖÌ¼Buõ×Øë*¦Ž¦/b/R˜[kÀ-�PhðæÏp;Ï]ÛP3$`'€ŒŒ‘¿‰&B¦¹yWfhgôRù«h*ËóÊÖ/¡¾¬à�ÖÔMÄ^ýuiX5)�ß®³Y(çžÖ¢Èm?³NYé±{h^×NÛQÚB¡]¹Ý;s;•ìN¯ê*äM"úW†þeŸm_N‚_€‚rOïZæ™t¬}g®ºó]Ì3lÃé¥w!¾|1Î¹�£ñèù;‚€E%(¢ÊÃ6ø>£Lf-¤|' »ñb‹µÏ$t‹«¶
áhæ5¡™bGN¥'Lv�èŸ(ÿÙ*¼9ìÎS÷~
Á‚˜i‹èª¨¯¸jÓ2ÈñœêÝiéäˆ¡Û°N sÝõŽÆˆØ¾çLìlv_†iÇ€3‹œ.Œ1:.òø‡ñs(Â8¼¢¼yœÇðÁ´P¢±øàÌ¥èw£s8—’ß¡Û[ 5ø��/áþØW~C)¿YPwªŸ‹œV,¾>¶¯ú%Q„ÌhÊ|9r0vÆÖ§3¾‹ƒ¯c¿u†’hâ×uY3œ’›ÏÒ‘,ÖL¼Ï‹¢X31\<eNß™^ì#ýý¦ôÒ©Ý, Ep4ýá\(Ô^!ÿÉn•
¤­�ä‡^ W&ñR{ú
&âXóÌ½Ïæ/bˆ´ÒÝR‡sêÁëS—Žâ§RGã=˜?ç1ŸÎÈ¢Àó” Lö!N¨°hhÑEôœ%47é€ØË®�Ë«Ö�ã9D~�k·úù`œÜ@–¸”Äùæ«hú÷<R)ùêÛvšøïÑiÿO¦7Š•s‹$LJo_õ}ø’Q_‰ÛŠxƒzý`¾ÈÊYYUóiÿ_$.Ô�ºµR�b‰½&ÛœÆ2í·Ž;ïÒî«.º±éÃ7ÎùìŒ¨Íñ¬-Oýb9!6ði¯ÒËãû|ÝÐeÒ¾ª;¼ý|,Äãâ/Þ·ïaW¦÷!¼Yn¿#âe7ÖœÈ¢ö¾ÃûwÚ£PûG°¤#ðÄ½ÈV4TßŠŽu[‘TÖ›„Äm¡B „”âe�£~’ËÅB±&¹–‹l`Vq¥\ä-Toèàs^tÃø|›¥êÌ ¯öIßEöëÏ…¡þØrÖ«¸Åáï®èÌÆÑ¾+zgfhW¿ÌÆ£ÒY-HuxižÝ#Ô±Á,eZVŒ¸at½òSôbÏ{½'ßwoÈ¯þmi
Õ
hÍº2$¬�©^	Æxi%‡Ù°sšéì�ÙêÎƒ�-y©—{Ú ·ùª¥{¾JíšÀÑE^©@»E¦~ñP¿ÔÕ?�uécK|å»·äÿ³-QK²g®©Ç´øúÛä‚3ê._×?±1¢ªàLàœEJ€%~W?ÂGÿ�ú“YÂ�.qÒ¾Ž&áÛP¨cJ¾Îî“_¯€©íÍTÓÙ5uÃ‚tæGÉlŽ‚¿:
©//ÅK×³¦),=vrÔŸV‹7m‡cdU©ö[YÅ��c„H¾¼3It~èa²ß6<Bâ–k;•{ÄËwî¥Àf:ÃÊV²Ï¯u^Þ’P¤žú[h­ŒH‰ÏAŒàÓ6ìYãtÜu{4ò´ØûxSWj�žnGà¢v]° î qû$oœüÒ‡²Ëa{ÓIqkÃ-·40è‹
ª
ú,ò[	º;uÄ4Ìs‹ßæ+µg‹Ô¶—Ck‘&.R(µ+ð’Ó³Æ^=ê³+J©íÞi½2#ÇónÕ×©Õ+´/
Û�SßÄz‰ÑÁ‚¤üçÝ«¦óüTÜ¦RÞTÖØåŒ#—ÑªÉmEXªº!‰ã4'”Mmz@Ë#±áª©’s¡\«¶ßg\ÁeôÔ&á…'•¤dÛ½êé£Ø×gæºòƒ"ÎzÕOÀ[©µ³òNÅ‹:gÇ•AU„!Íîž|jiiƒâÃXP`ZÐA	õ4¦‘^
ÕKYw”qõdw{²Ui(–èUË™§Æˆó_m„”£4Ü;�˜J}-ð¥EY£FH…î´ŽZêYÓ½ÕÚÔ%}¥tC}a•5E�áQ™¸l¾%ùFêš%ÁÚ¤¢Š©Ô)#™à<>œÙ¦dÛ=ÙÎú¨\t­³cas3M›„Àá(Šž×Üœ‰¿3ÂÞëÜJ¶Ó‹ÍQÑËÓ-õWjU	ÖÄ…d„x7l=¢Í§\„¨¾4§Ô-šµú‚kë·­QPÛNÀ{Q[=¬üåŒàab×’aë™»ŽzÏÐË�u{ªÅ ¿&ÃÂôªw:ÙÅ¢5p!$©°,—¥3…JR^EêW1âVð}´|¸ƒ´´G˜ÖhA^ÓÉ´}ÛÈ¡�
W	âD6uoÃ©ccŽZrœ-¢’›Ûp`“ÀÝ'´e«‚ ­Ð¯ôJ’¿æ}F¯SÇ!°atyì ‡¢:¬J�š!¨ùTÂT‚
9â´<kž–ˆR¿¿àhü•ƒ½†ëµšƒF¯�Özmí<œ›�é¦}¡µí�óGjý7‰*·Üaê¿DÞ»]tUôÇ+Y÷ÕÚä_Q÷½ð#ÝGUj|À”“JÁY˜Ú'ôšCµ›ð}>P«BµQHfEÆ”:åïÂV`peÂØ­`‚¡ZäŒýQLC9eFà8óZ]žé„Ù[):¢9>L|(}�”‚+³;be">P'‰ÎvB\ÖÔ„èu÷´¦_†õG_Ù�Ô!eM'±ç|µ=b-(�°üñÁÑX'´®!¬½IÃ€P{†Èþýam<Ç©;ú›sP…E_O§ñ…ýpÇ`\L6åßÐpÖ„M]=È³%ý…ÐÚŽkLû5®é)à™ÚÒ±ˆðW¬sWÃ	gYç¶-·©Ñ
‡Ó0œ*]
¢Ë$;$í¯¿±ÛÀ÷ø&m¨U4ó9-Q Ö.ˆœöÍ‚ïÈÙ„¬”xJ
)#‰Wæ!â¾I<4á;j�þÊu^À©ïyS8KQ‘Åõ)äSËc 'ˆy“Ÿó@œ•Ðq$°�¸K�ç¥,í0ØGõ‘fÀ±mZjcÚôý"98Ÿžþ¤š¯Î‰çoò!)]¡'ìˆ›x»¨Ô‡ÎRõ^¤=3»üo-ÆÇ4¬�Wýå!šÁgÐÙ°�ª%¦é¾¼”QT<d£µb½9êñ,äJ µ”g°!–½«]eonvìÅº°HË÷À.Žg1OHƒ #q~ÎBN¶yÚj^FŸKõ%Pm[Óêà…:,ä•èÐSÖ^2v-Ý±�ZËE>uä¢þ“U��NjÈônD>Ž ²Ä³Áaoìl^ Ÿm†÷Š�—ñ!Öv4FnòÇ5¤Ÿ8«Že’E¬dY¦²™¢±6›Ó²¸�‹U�Úzw(1Ð8šÿoDÙ”Ð®ÔÄXä¾=mpß†ë(±iïs6@ñ	†ˆú}>UKƒ5^ÐuÎd|ïr†	rGÒ·V__*m1éÄi_FàgL%naù`àæY0�›ŽŠ‹ayŽÝw\™GÏ)`É ã¯
BüÈå�\Ä�ø'UcÌ€ŒZ›ŽJÏ©=¸×tcM}•UUÛ§º»×³¥Ù^)1îJ”fš&�x
’îšX�{Â´Y)ÕîœòÒ
%†\‹pG®ÞgN£¿šŽÖ$jC²Xn=ø)Ê­ÉÛÍ¹øþ;SÀÒ¸„÷.7Ÿ_VÎ°æû£–Ãp­yÒ§ƒìò½Ââ#¦EL±*I¡cÁÒÇ"¹kYýð�i¨ÅÏañ°7w¤šu2´Ñ-¢·Öô±Q\÷Í\ë…K)lgÆ¸ÞúlŒñ-ô‘.ˆÝŒË›pbAÅ® ÔÓÜ'|	B3ÙEÂW\ÈA×¡]×f1Æ¹øÅéŠÅÌ��¯…” dQ,½&¹ôË µ¥¯ú‘G6.ëAÐ¹%áóS»"[Èù&LëOŠVóó i©½êùp"—¨&#Dnz
Ó±ƒâ
Tüà>êØË.ôŠ:²YzKonÔ)Øz^Q|‡eeh5ÿ*,ÏPüöC£ ¥�®1ô(Æûec•s»ºƒ
„,uËL«­öÊˆO4‘F•q‹æöpžì©ù´Â-ïì›¢#Ó”úpÍ;j
”¼ß&Î‘¤Ò˜¼Ç× �n¾O]Ly²K–³�³x{¼ÝCµ…ÝÍñl'{¯‘©!/ßT�ƒõY¬Šç�ið„ºB4•Ã<6õY9ƒÌ|è_÷"”èPr»=T/4ÉÇþŒ±,’8s…î\2Öq Óï&Ü–(ù­Éøû«–®îì‚vç‚qÔ%r§ñDÙ×zb÷R:÷2¯XpÕy”Cm9üÆy¨ïtR2™Ì:–±oóÕ[0†&–Ôh�Ô×ÝeøÏ�Ë¤;IÐÐM^š|…dS±
KLrÈ<�ª0ßÍ'þ¥•Õ°�¶J•emÂ1#
Cqi3õR7,òª®+pwroÇ~knæ‡$WYˆù°€†ùp¾>lv*“g££ãzCgó©´Ì·Žew‡]â¸
Ëîešl—Æ—¢Ý÷x=Æ}r@z\õOŸ²	ar‹|sÊµ&G¢i~T…�§îÃÅ•ÝÃ‰+~ß2Ëô~Í)„úÒ=$~ë£1ÇˆÆŒóã:nj´°!µ�€“åó¿†0OýÈÃzl4ë©¸Ì¬ùG
ó�|™OÙ«eyª,žÊ =G{‘{
}[ÊÆ�oj‹.£ÇôWBÚá½Ó&iôrdz| ƒ9ÇðK]H~iXG'Gè°sì�ó.TOÍaý

‹m¨‡µû)%
ëw›8¯úÌýÑ¾³×Š@�0D!Åóú·¤t¥O²I±$åöÕ®E“ZîË‘A¯µ¹+c¼Mì·óÈ,KÃõã/Ø2Æ¥à°õ™|ä"û#þº#VøÝ„ 4ŽKKtv�¶ÙˆÛ=RO½ÈÆVGwµëÁWJ¥FŽàÄŠ4V>Ñá�Øožc$ü'üÒƒ‘3…p~!r&“O³Ú¹Ûÿé…Z=ßÕÝEÓ+¼—þûú3¡°:_åùJuœoÔ�Õ§µû?Ö¨©§"êÃygè
Ô]½¹x=Is•nÛŒÝ\DpSÝ(^R†$I‘DŽÇŽ3¸UW¢KE®-°�B˜Ñ—éw‚¨�êš©©@q‹.NÖ7[Ú-„*&_{2´–óJc€àJ)‚ëÏ@µ²ÅúQ¸`mk,‰^=9gö°…“Ò"`fH‘Ûÿ¶4ÔŒM¯ÓÞÿ&VLõ©²h¥I@i�Ç€(~¢3ýEPnÇLí7SKxi…[ùúå«w?C',ˆ�ˆ¹»Åþ‚"dÍ­f¾Bµ Î2Œ,Ž¦u(
ÃXOàˆ]”Œwp´Â©³»éCd?rãÌR8Ñ#£ã/‰RZóü×!»¦@Ç gž­ÕéSŸzÛ$ÆÀÎîtÕ…#é>%_½í÷Ä’…D	QD¡úÞ