[comp.sources.bugs] MH 6.7 Updates - part 02/14

mh@beanie.ICS.UCI.EDU (John Romine) (04/14/90)

These are patches for MH 6.6 to bring it up to the current release MH
6.7.  If you can FTP, you should instead retrieve the current release
(from ics.uci.edu [128.195.1.1] in pub/mh).  See the announcement in
comp.mail.mh for all the details.  A document descibing the changes
from MH 6.6 can also be found in comp.mail.mh.

There are fourteen parts to these patches; you *must* have all the
parts to compile MH.  It will not work if you try to compile an
intermediate version.

Save this message, extract the file below and apply it with "patch -p"
from the top of your MH source tree:

	cd mh-6.6/
	patch -p < MH.6.6.n

If you have modified your source tree, you'll have to merge your local
changes in after you apply these patches to the original sources.

/JLR

: This is a shar archive.  Extract with sh, not csh.
: This archive ends with exit, so do not worry about trailing junk.
echo 'Extracting MH.6.6.1'
sed 's/^X//' > MH.6.6.1 << '+ END-OF-FILE MH.6.6.1'
XPrereq: patch.0
X*** Patchlevel.orig	Thu Apr 12 15:55:16 1990
X--- Patchlevel	Thu Apr 12 15:55:18 1990
X***************
X*** 1 ****
X! MH.6.6 patch.0
X--- 1 ----
X! MH.6.6 patch.1
X*** ../mh-6.6.0/./conf/config/MailAliases	Thu Oct 29 14:54:52 1987
X--- ./conf/config/MailAliases	Thu Apr  5 16:05:25 1990
X***************
X*** 2,5 ****
X  ; This file is almost empty as MH now supports personal aliases.
X
X! @BEGIN: BBOARDS
X  <@(MHETCPATH)/BBoardAliases
X--- 2,6 ----
X  ; This file is almost empty as MH now supports personal aliases.
X+ ; @(#)$Id: MailAliases,v 1.3 90/04/05 15:40:57 sources Exp $
X
X! @BEGIN: BBSERVER
X  <@(MHETCPATH)/BBoardAliases
X***************
X*** 6,8 ****
X
X! @END: BBOARDS
X  ;everyone: *
X--- 7,9 ----
X
X! @END: BBSERVER
X  ;everyone: *
X*** ../mh-6.6.0/./conf/config/config.c	Thu Oct 29 14:54:54 1987
X--- ./conf/config/config.c	Sat Mar 17 09:55:54 1990
X***************
X*** 11,18 ****
X--- 11,23 ----
X  #include <stdio.h>
X
X
X+ #if	defined(__STDC__) && !defined(__HIGHC__)
X+ #define	binpath(file) "@(MHBINPATH)/"#file
X+ #define	etcpath(file) "@(MHETCPATH)/"#file
X+ #else
X  #define binpath(file) "@(MHBINPATH)/file"
X  #define etcpath(file) "@(MHETCPATH)/file"
X+ #endif
X
X
X  @(MHCONFIG)
X*** ../mh-6.6.0/./conf/config/mts.c	Fri Nov 17 15:44:15 1989
X--- ./conf/config/mts.c	Mon Apr  2 14:27:18 1990
X***************
X*** 3,11 ****
X  /* LINTLIBRARY */
X
X  #undef	NETWORK
X! #if	defined(BSD41A) || defined(BSD42)
X  #define	NETWORK
X! #endif	not (defined(BSD41A) || defined(BSD42))
X
X  #include "../h/strings.h"
X  #include <ctype.h>
X--- 3,11 ----
X  /* LINTLIBRARY */
X
X  #undef	NETWORK
X! #if	defined(BSD41A) || defined(BSD42) || defined(SOCKETS)
X  #define	NETWORK
X! #endif	not (defined(BSD41A) || defined(BSD42) || defined(SOCKETS))
X
X  #include "../h/strings.h"
X  #include <ctype.h>
X***************
X*** 12,20 ****
X  #include <stdio.h>
X  #include "mts.h"
X  #ifdef	NETWORK
X! #ifdef	BSD42
X  #include <netdb.h>
X! #endif	BSD42
X  #else	not NETWORK
X  #ifndef SYS5
X  #include <whoami.h>
X--- 12,20 ----
X  #include <stdio.h>
X  #include "mts.h"
X  #ifdef	NETWORK
X! #if	defined(BSD42) || defined(SOCKETS)
X  #include <netdb.h>
X! #endif	BSD42 or SOCKETS
X  #else	not NETWORK
X  #ifndef SYS5
X  #include <whoami.h>
X***************
X*** 202,207 ****
X--- 202,210 ----
X      "popbbuser", &popbbuser,
X      "popbblist", &popbblist,
X  #endif	BPOP
X+ #ifdef	NNTP
X+     "nntphost", &popbbhost,
X+ #endif	NNTP
X
X      "maildelivery", &maildelivery,
X
X***************
X*** 265,271 ****
X  /*  */
X
X  #define	QUOTE	'\\'
X- #define	grot(x)	case 'x': *bp = '\x'; break
X
X  static char *tailor_value (s)
X  register char   *s;
X--- 268,273 ----
X***************
X*** 280,289 ****
X  	    *bp = *s;
X  	else
X  	    switch (*++s) {
X! 		grot (b);
X! 		grot (f);
X! 		grot (n);
X! 		grot (t);
X
X  		case NULL: s--;
X  		case QUOTE:
X--- 282,293 ----
X  	    *bp = *s;
X  	else
X  	    switch (*++s) {
X! #define	grot(y,z) case y: *bp = z; break;
X! 		grot ('b', '\b');
X! 		grot ('f', '\f');
X! 		grot ('n', '\n');
X! 		grot ('t', '\t');
X! #undef	grot
X
X  		case NULL: s--;
X  		case QUOTE:
X***************
X*** 317,328 ****
X  #ifdef	BSD41A
X      char  *myname;
X  #endif	BSD41A
X! #ifdef	BSD42
X      register struct hostent *hp;
X! #endif	BSD42
X! #ifdef	SYS5
X      struct utsname name;
X! #endif	SYS5
X      static char buffer[BUFSIZ] = "";
X
X      if (buffer[0])
X--- 321,332 ----
X  #ifdef	BSD41A
X      char  *myname;
X  #endif	BSD41A
X! #if	defined(BSD42) || defined(SOCKETS)
X      register struct hostent *hp;
X! #endif	BSD42 or SOCKETS
X! #if	defined(SYS5) && !defined(NETWORK)
X      struct utsname name;
X! #endif	SYS5 and not NETWORK
X      static char buffer[BUFSIZ] = "";
X
X      if (buffer[0])
X***************
X*** 345,351 ****
X  	free (myname);
X      }
X  #endif	BSD41A
X! #ifdef	BSD42
X      (void) gethostname (buffer, sizeof buffer);
X  #ifndef	BIND
X      sethostent (1);
X--- 349,355 ----
X  	free (myname);
X      }
X  #endif	BSD41A
X! #if	defined(BSD42) || defined(SOCKETS)
X      (void) gethostname (buffer, sizeof buffer);
X  #ifndef	BIND
X      sethostent (1);
X***************
X*** 352,358 ****
X  #endif
X      if (hp = gethostbyname (buffer))
X  	(void) strcpy (buffer, hp -> h_name);
X! #endif	BSD42
X  #else	not NETWORK
X  #ifndef	SYS5
X      (void) strcpy (buffer, SystemName ());
X--- 356,362 ----
X  #endif
X      if (hp = gethostbyname (buffer))
X  	(void) strcpy (buffer, hp -> h_name);
X! #endif	BSD42 or SOCKETS
X  #else	not NETWORK
X  #ifndef	SYS5
X      (void) strcpy (buffer, SystemName ());
X***************
X*** 369,377 ****
X  /*  */
X
X  char *SystemName () {
X! #ifdef	SYS5
X      struct utsname name;
X! #endif	SYS5
X      static char buffer[BUFSIZ] = "";
X
X      if (buffer[0])
X--- 373,381 ----
X  /*  */
X
X  char *SystemName () {
X! #if	defined(SYS5) && !defined(NETWORK)
X      struct utsname name;
X! #endif	SYS5 and not NETWORK
X      static char buffer[BUFSIZ] = "";
X
X      if (buffer[0])
X***************
X*** 384,395 ****
X  #ifdef	sysname
X      (void) strcpy (buffer, sysname);
X  #else	sysname
X! #ifndef	SYS5
X      (void) gethostname (buffer, sizeof buffer);
X! #else   SYS5
X      (void) uname (&name);
X      (void) strcpy (buffer, name.nodename);
X  #endif  SYS5
X  #endif	sysname
X
X      return buffer;
X--- 388,401 ----
X  #ifdef	sysname
X      (void) strcpy (buffer, sysname);
X  #else	sysname
X! #if	!defined(SYS5) || defined(NETWORK)
X      (void) gethostname (buffer, sizeof buffer);
X! #else	SYS5 and not NETWORK
X! #ifdef	SYS5
X      (void) uname (&name);
X      (void) strcpy (buffer, name.nodename);
X  #endif  SYS5
X+ #endif  SYS5 and not NETWORK
X  #endif	sysname
X
X      return buffer;
X***************
X*** 463,469 ****
X      if ((pw = getpwuid (getuid ())) == NULL
X  	    || pw -> pw_name == NULL
X  	    || *pw -> pw_name == NULL) {
X! 	(void) strcpy (username, "intruder");
X  	(void) sprintf (fullname, "The Unknown User-ID (%d)", getuid ());
X  	return username;
X      }
X--- 469,475 ----
X      if ((pw = getpwuid (getuid ())) == NULL
X  	    || pw -> pw_name == NULL
X  	    || *pw -> pw_name == NULL) {
X! 	(void) strcpy (username, "unknown");
X  	(void) sprintf (fullname, "The Unknown User-ID (%d)", getuid ());
X  	return username;
X      }
X***************
X*** 478,483 ****
X--- 484,497 ----
X  	for (cp = username; *np && *np != '>'; *cp++ = *np++)
X  	    continue;
X  	*cp = NULL;
X+     }
X+     /*
X+      *  If the fullname contains any .'s, quote it
X+      */
X+     if (index(fullname, '.')) {
X+ 	  char tmp[BUFSIZ];
X+       sprintf (tmp, "\"%s\"", fullname);
X+       strcpy (fullname, tmp);
X      }
X      if (MMailids == 0 || *np == NULL) {
X  	(void) strcpy (username, pw -> pw_name);
X*** ../mh-6.6.0/./conf/MH	Thu Oct 29 14:54:50 1987
X--- ./conf/MH	Fri Apr  6 09:44:34 1990
X***************
X*** 1,11 ****
X! bin	/usr/new/mh
X! bboards	off
X! etc	/usr/new/lib/mh
X  mail	/usr/spool/mail
X! manuals	new
X! mts	sendmail/smtp
X! options	BSD42 BERK TTYD DUMB
X! options	MHE NETWORK BIND RPATHS
X! options	SBACKUP='"\\043"'
X! pop	off
X! ldoptions -ns -O
X--- 1,9 ----
X! # @(#)$Id: MH,v 1.7 90/04/06 09:44:31 sources Exp $
X! # a 4.2BSD VAX system running SendMail
X! bin	/usr/local
X! bboards	on
X! etc	/usr/local/lib/mh
X  mail	/usr/spool/mail
X! manuals	local
X! mts	sendmail
X! options	BSD42
X*** /dev/null	Thu Apr 12 15:37:43 1990
X--- ./conf/doc/mh-format.rf	Thu Apr  5 16:04:32 1990
X***************
X*** 0 ****
X--- 1,458 ----
X+ .\"	@(MHWARNING)
X+ .\" @(#)$Id: mh-format.rf,v 1.26 90/04/05 15:09:13 sources Exp $
X+ .SC MH\-FORMAT 5
X+ .NA
X+ mh\-format \- format file for MH message system
X+ .SY
X+ some \fIMH\fR commands
X+ .DE
X+ Several \fIMH\fR commands utilize either a \fIformat\fR string or a
X+ \fIformat\fR file during their execution.
X+ For example,
X+ \fIscan\fR\0(1) uses a format string which directs it how to generate the
X+ scan listing for each message;
X+ \fIrepl\fR\0(1) uses a format file which directs it how to generate the
X+ reply to a message, and so on.
X+
X+ Format strings are designed to be efficiently parsed by \fIMH\fR which
X+ means they are not necessarily simple to write and understand.
X+ This means that novice, casual, or even advanced users of \fIMH\fR should
X+ not have to deal with them.
X+ Some canned scan listing formats are in
X+ @(MHETCPATH)/scan.time, @(MHETCPATH)/scan.size, and @(MHETCPATH)/scan.timely.
X+ Look in @(MHETCPATH) for other \fIscan\fR and \fIrepl\fR format files
X+ which may have been written at your site.
X+
X+ It suffices to have your local \fIMH\fR expert actually write new format
X+ commands or modify existing ones.
X+ This manual section explains how to do that.
X+ Note: familiarity with the C \fIprintf\fR routine is assumed.
X+
X+ A format string consists of ordinary text, and special
X+ multi\-character \fIescape\fR sequences which begin with `%'.
X+ When specifying a format string,
X+ the usual C backslash characters are honored:
X+ `\\b', `\\f', `\\n', `\\r', and `\\t'.
X+ Continuation lines in format files end with `\\' followed
X+ by the newline character.
X+ .\" talk about syntax first, then semantics
X+ There are three types of \fIescape\fR sequences:
X+ header \fIcomponents\fR, built\-in \fIfunctions\fR, and, flow \fIcontrol\fR.
X+
X+ A \fIcomponent\fR escape is specified as `%{\fIcomponent\fR\^}',
X+ and exists for each header found in the message being processed.
X+ For example `%{date}' refers to the \*(lqDate:\*(rq field of the appropriate
X+ message.
X+ All component escapes have a string value.
X+ Normally, component values are compressed by
X+ converting any control characters (tab and newline included) to spaces,
X+ then eliding any leading or multiple spaces.
X+ However,
X+ commands may give different interpretations to some component escapes;
X+ be sure to refer to each command's manual entry for complete details.
X+
X+ A \fIfunction\fR escape is specified as `%(\fIfunction\fR\^)'.
X+ All functions are built\-in, and most have a string or numeric value.
X+
X+ .ne 7
X+ A \fIcontrol\fR escape is one of: `%<', `%|', or `%>'.
X+ These form one of four conditional execution constructs with the
X+ following syntax:
X+ .sp 1
X+ .nf
X+ 	%<(\fIfunction\fR\^)Command-String%>
X+ 	%<{\fIcomponent\fR\^}Command-String%>
X+ 	%<(\fIfunction\fR\^)Then-Command-String%|Else-Command-String%>
X+ 	%<{\fIcomponent\fR\^}Then-Command-String%|Else-Command-String%>
X+ .fi
X+ .sp
X+ These constructs may be nested without ambiguity.
X+
X+ In the first two forms of the construct,
X+ if the function or component value is non\-zero (for integer\-valued escapes),
X+ or non\-empty (for string\-valued escapes),
X+ then everything up to the corresponding `%>'
X+ is interpreted, otherwise, skip to the corresponding '%>' and
X+ start interpreting again.
X+
X+ In the second two forms of the construct,
X+ the first command string is interpreted
X+ if the function or component value is non\-zero or non\-null,
X+ and the second command string is interpreted otherwise.  Only one
X+ of the command strings will be interpreted.
X+ Interpreting the '%|' control escape causes
X+ a skip to the corresponding '%>'.
X+
X+ .ne 10
X+ Most functions expect an argument of a particular type:
X+ .sp 1
X+ .nf
X+ .ta +\w'Argument 'u +\w'An optional component, 'u
X+ \fIArgument\fR	\fIDescription\fR	\fIExample Syntax\fR
X+ literal	A literal number,	%(\fIfunc\fR 1234)
X+ 	or string	%(\fIfunc\fR text string)
X+ comp	Any header component	%(\fIfunc\fR\^{\fIin-reply-to\fR\^})
X+ date	A date component	%(\fIfunc\fR\^{\fIdate\fR\^})
X+ addr	An address component	%(\fIfunc\fR\^{\fIfrom\fR\^})
X+ expr	An optional component,	%(\fIfunc\fR\^(\fIfunc2\fR\^))
X+ 	function or control,	%(\fIfunc\fR %<{\fIreply-to\fR\^}%|%{\fIfrom\fR\^}%>)
X+ 	perhaps nested	%(\fIfunc\fR\^(\fIfunc2\fR\^{\fIcomp\fR\^}))
X+ .re
X+ .fi
X+
X+ The types \fIdate\fR and \fIaddr\fR have the same syntax
X+ as \fIcomp\fR, but require that the header
X+ component be a date string, or address string, respectively.
X+
X+ All arguments except those of type \fIexpr\fR are required.
X+ For the \fIexpr\fR argument type,
X+ the leading `%' must be omitted for component and function escape arguments,
X+ and must be present (with a leading space) for control escape arguments.
X+
X+ The evaluation of format strings
X+ is based on a simple machine with an
X+ integer register \fInum\fR, and a text string register \fIstr\fR.
X+ When a function escape is processed,
X+ if it accepts an optional \fIexpr\fR argument which is not present,
X+ it reads the current value of either \fInum\fR or \fIstr\fR as appropriate.
X+
X+ .\" return values
X+ Component escapes write the value of their message header in \fIstr\fR.
X+ Function escapes write their return value in
X+ \fInum\fR for functions returning \fIinteger\fR or \fIboolean\fR values,
X+ and in \fIstr\fR for functions returning string values.
X+ (The \fIboolean\fR type is a subset of integers with usual
X+ values 0=false and 1=true.)
X+
X+ All component escapes, and those
X+ function escapes which return an \fIinteger\fR or \fIstring\fR value,
X+ pass this value back to their caller
X+ in addition to setting \fIstr\fR or \fInum\fR.
X+ These escapes will print out this value
X+ unless called as part of an argument to another escape sequence.
X+ Function escapes which return a \fIboolean\fR value do pass this value
X+ back to their caller, but will never print out the value.
X+
X+ .nf
X+ .ta \w'Formataddr 'u +\w'Argument 'u +\w'Rboolean 'u
X+ \fIFunction\fR	\fIArgument\fR	\fIReturn\fR	\fIDescription\fR
X+ msg		integer	message number
X+ cur		integer	message is current
X+ size		integer	size of message
X+ strlen		integer	length of \fIstr\fR
X+ width		integer	output buffer size in bytes
X+ charleft		integer	bytes left in output buffer
X+ timenow		integer	seconds since the UNIX epoch
X+ me		string	the user's mailbox
X+ eq	literal	boolean	\fInum\fR == \fIarg\fR
X+ ne	literal	boolean	\fInum\fR != \fIarg\fR
X+ gt	literal	boolean	\fInum\fR > \fIarg\fR
X+ match	literal	boolean	\fIstr\fR contains \fIarg\fR
X+ amatch	literal	boolean	\fIstr\fR starts with \fIarg\fR
X+ plus	literal	integer	\fIarg\fR plus \fInum\fR
X+ minus	literal	integer	\fIarg\fR minus \fInum\fR
X+ divide	literal	integer	\fInum\fR divided by \fIarg\fR
X+ num	literal	integer	Set \fInum\fR to \fIarg\fR
X+ lit 	literal	string	Set \fIstr\fR to \fIarg\fR
X+ .\" dat	literal	int	?
X+ nonzero	expr	boolean	\fInum\fR is non\-zero
X+ zero	expr	boolean	\fInum\fR is zero
X+ null	expr	boolean	\fIstr\fR is empty
X+ nonnull	expr	boolean	\fIstr\fR is non\-empty
X+ void	expr		Set \fIstr\fR or \fInum\fR
X+ comp	comp	string	Set \fIstr\fR to component text
X+ compval	comp	integer	\fInum\fR set to \*(lq\fBatoi\fR(\fIstr\fR\^)\*(rq
X+ .\" compflag	comp	integer	Set \fInum\fR to component flags bits
X+ trim	expr		trim trailing white\-space from \fIstr\fR
X+ putstr	expr		print \fIstr\fR
X+ putstrf	expr		print \fIstr\fR in a fixed width
X+ putnum	expr		print \fInum\fR
X+ putnumf	expr		print \fInum\fR in a fixed width
X+ .re
X+ .fi
X+
X+ These functions require a date component as an argument:
X+ .sp 1
X+ .nf
X+ .ta \w'Formataddr 'u +\w'Argument 'u +\w'Rboolean 'u
X+ \fIFunction\fR	\fIArgument\fR	\fIReturn\fR	\fIDescription\fR
X+ sec	date	integer	seconds of the minute
X+ min	date	integer	minutes of the hour
X+ hour	date	integer	hours of the day (0-23)
X+ wday	date	integer	day of the week (Sun=0)
X+ day	date	string	day of the week (abbrev.)
X+ weekday	date	string	day of the week
X+ sday	date	integer	day of the week known?
X+ 			(0=implicit,\-1=unknown)
X+ mday	date	integer	day of the month
X+ yday	date	integer	day of the year
X+ mon	date	integer	month of the year
X+ month	date	string	month of the year (abbrev.)
X+ lmonth	date	string	month of the year
X+ year	date	integer	year of the century
X+ zone	date	integer	timezone in hours
X+ tzone	date	string	timezone string
X+ szone	date	integer	timezone explicit?
X+ 			(0=implicit,\-1=unknown)
X+ date2local	date		coerce date to local timezone
X+ date2gmt	date		coerce date to GMT
X+ dst	date	integer	daylight savings in effect?
X+ clock	date	integer	seconds since the UNIX epoch
X+ rclock	date	integer	seconds prior to current time
X+ tws	date	string	official 822 rendering
X+ pretty	date	string	user\-friendly rendering
X+ nodate	date	integer	\fIstr\fR not a date string
X+ .re
X+ .fi
X+
X+ .ne 12
X+ These functions require an address component as an argument.
X+ The return value of functions noted with `*' pertain only to
X+ the first address present in the header component.
X+ .sp 1
X+ .nf
X+ .ta \w'Formataddr 'u +\w'Argument 'u +\w'Rboolean 'u
X+ \fIFunction\fR	\fIArgument\fR	\fIReturn\fR	\fIDescription\fR
X+ proper	addr	string	official 822 rendering
X+ friendly	addr	string	user\-friendly rendering
X+ pers	addr	string	the personal name*
X+ note	addr	string	commentary text*
X+ mbox	addr	string	the local mailbox*
X+ mymbox	addr	integer	the user's addresses? (0=no,1=yes)
X+ host	addr	string	the host domain*
X+ nohost	addr	integer	no host was present*
X+ type	addr	integer	host type* (0=local,1=network,
X+ 			\-1=uucp,2=unknown)
X+ path	addr	string	any leading host route*
X+ ingrp	addr	integer	address was inside a group*
X+ gname	addr	string	name of group*
X+ formataddr	expr		append \fIarg\fR to \fIstr\fR as a
X+ 			(comma separated) address list
X+ putaddr	literal		print \fIstr\fR address list with
X+ 			\fIarg\fR as optional label;
X+ 			get line width from \fInum\fR
X+ .re
X+ .fi
X+
X+ When escapes are nested, evaluation is done from inner-most to outer-most.
X+ The outer-most escape must begin with `%'; the inner escapes must not.
X+ For example,
X+
X+ .ti +.5i
X+ %<(mymbox{from} To: %{to}%>
X+
X+ writes the value of the header component \*(lqFrom:\*(rq to \fIstr\fR;
X+ then (\fImymbox\fR\^) reads \fIstr\fR
X+ and writes its result to \fInum\fR;
X+ then the control escape evaluates \fInum\fR.  If \fInum\fR is
X+ non-zero, the string \*(lqTo: \*(rq is printed followed by
X+ the value of the header component \*(lqTo:\*(rq.
X+
X+ A minor explanation of (\fImymbox\fR\^{\fIcomp\fR\^}) is in order.
X+ In general, it checks each of the addresses in the header component
X+ \*(lq\fIcomp\fR\*(rq
X+ against the user's mailbox name and any \fIAlternate-Mailboxes\fR.
X+ It returns true if any address matches, however, it
X+ also returns true if the \*(lq\fIcomp\fR\*(rq header is not present
X+ in the message.  If needed, the (\fInull\fR\^) function can be
X+ used to explicitly test for this condition.
X+
X+ When a function or component escape is interpreted and the result
X+ will be immediately printed,
X+ an optional field width can be
X+ specified to print the field in exactly a given number of characters.
X+ For example, a numeric escape like %4(\fIsize\fR\^) will print at most 4
X+ digits of the message size; overflow will be indicated by a `?' in the
X+ first position (like `?234').
X+ A string escape like %4(\fIme\fR\^) will print the first 4 characters and
X+ truncate at the end.
X+ Short fields are padded at the right with the fill character (normally,
X+ a blank).  If the field width argument begins with a leading zero,
X+ then the fill character is set to a zero.
X+
X+ As above,
X+ the functions (\fIputnumf\fR\^) and (\fIputstrf\fR\^) print their result in
X+ exactly the number of characters specified by their leading field width
X+ argument.
X+ For example,
X+ %06(\fIputnumf\fR\^(\fIsize\fR\^)) will print the message size
X+ in a field six characters wide filled with leading zeros;
X+ %14(\fIputstrf\^\fR{\fIfrom\^\fR}) will print
X+ the \*(lqFrom:\*(rq header component in fourteen characters with
X+ trailing spaces added as needed.
X+ For \fIputstrf\fR,
X+ using a negative value for the field width causes right-justification
X+ of the string within the field,
X+ with padding on the left up to the field width.
X+ The functions (\fIputnum\fR\^) and (\fIputstr\fR\^) print their result in
X+ the minimum number of characters required, and ignore any leading
X+ field width argument.
X+
X+ The available output width is kept in an internal register; any output past
X+ this width will be truncated.
X+
X+ With all this in mind,
X+ here's the default format string for \fIscan\fR.
X+ It's been divided into several pieces for readability.
X+ The first part is:
X+
X+ .ti +.5i
X+ %4(putnumf(msg))%<(cur)+%| %>%<{replied}\-%| %>
X+
X+ which says that the message number should be printed in four digits,
X+ if the message is the current message then a `+' else a space should be
X+ printed,
X+ and if a \*(lqReplied:\*(rq field is present then a `\-' else a space should
X+ be printed.
X+ Next:
X+
X+ .ti +.5i
X+ %02(putnumf(mon{date}))/%02(putnumf(mday{date}))
X+
X+ the month and date are printed in two digits (zero filled) separated by
X+ a slash.
X+ Next,
X+
X+ .ti +.5i
X+ %<{date} %|*>
X+
X+ If a \*(lqDate:\*(rq field was present,
X+ then a space is printed, otherwise a `*'.
X+ Next,
X+
X+ .ti +.5i
X+ %<(mymbox{from})To:%14(putstrf(friendly{to}))
X+
X+ if the message is from me,
X+ print `To:' followed by a \*(lquser\-friendly\*(rq rendering of the
X+ first address in the \*(lqTo:\*(rq field.
X+ Continuing,
X+
X+ .ti +.5i
X+ %|%17(putstrf(friendly{from}))%>
X+
X+ if the message isn't from me,
X+ then the print the \*(lqFrom:\*(rq address is printed.
X+ And finally,
X+
X+ .ti +.5i
X+ %{subject}%<{body}<<%{body}%>
X+
X+ the subject and initial body (if any) are printed.
X+
X+ For a more complicated example, next consider
X+ the default \fIreplcomps\fR format file.
X+
X+ .ti +.5i
X+ %(lit)%(formataddr %<{reply-to}%|
X+
X+ This clears \fIstr\fR and formats the \*(lqReply-To:\*(rq header
X+ if present.  If not present, the else clause is executed:
X+
X+ .ti +.5i
X+ %<{from}%|%<{sender}%|%<{return-path}%>%>%>%>)\\
X+
X+ This formats the
X+ \*(lqFrom:\*(rq, \*(lqSender:\*(rq and \*(lqReturn-Path:\*(rq
X+ headers, stopping as soon as one of them is present.  Next:
X+
X+ .ti +.5i
X+ %<(nonnull)%(void(width))%(putaddr To: )\\n%>\\
X+
X+ If the \fIformataddr\fR result is non\-null, it is printed as
X+ an address (with line folding if needed) in a field \fIwidth\fR
X+ wide with a leading label of \*(lqTo: \*(rq.
X+
X+ .ti +.5i
X+ %(lit)%(formataddr{to})%(formataddr{cc})%(formataddr(me))\\
X+
X+ \fIstr\fR is cleared, and the
X+ \*(lqTo:\*(rq and \*(lqCc:\*(rq headers, along with the user's
X+ address
X+ (depending on what was specified with
X+ the \*(lq\-cc\*(rq switch to \fIrepl\fR\^) are formatted.
X+
X+ .ti +.5i
X+ %<(nonnull)%(void(width))%(putaddr cc: )\\n%>\\
X+
X+ If the result is non\-null, it is printed as above with a
X+ leading label of \*(lqcc: \*(rq.
X+
X+ .ti +.5i
X+ %<{fcc}Fcc: %{fcc}\\n%>\\
X+
X+ If a \*(lq\-fcc\ folder\*(rq switch was given to \fIrepl\fR
X+ (see \fIrepl\fR\0(1) for more details about %{\fIfcc\fR\^}),
X+ an \*(lqFcc:\*(rq header is output.
X+
X+ .ti +.5i
X+ %<{subject}Subject: Re: %{subject}\\n%>\\
X+
X+ If a subject component was present,
X+ a suitable reply subject is output.
X+
X+ .nf
X+ .ti +.5i
X+ %<{date}In-reply-to: Your message of "\\
X+ .ti +.5i
X+ %<(nodate{date})%{date}%|%(tws{date})%>."%<{message-id}
X+ .ti +.5i
X+              %{message-id}%>\\n%>\\
X+ .ti +.5i
X+ --------
X+ .fi
X+
X+ If a date component was present,
X+ an \*(lqIn-Reply-To:\*(rq header is output with the preface
X+ \*(lqYour message of \*(rq.  If the date was parseable, it is
X+ output in official format, otherwise it is output as\-is.
X+ The message-id is included if present.
X+ As with all plain\-text,
X+ the row of dashes are output as\-is.
X+
X+ This last part is a good example for a little more elaboration.
X+ Here's that part again in pseudo\-code:
X+ .sp 1
X+ .nf
X+ .in +.5i
X+ .ta .5i 1i 1.5i 2i
X+ if (comp_exists(date))  then
X+ 	print (\*(lqIn-reply-to: Your message of \\\*(lq\*(rq)
X+ 	if (not_date_string(date.value) then
X+ 		print (date.value)
X+ 	else
X+ 		print (rfc822(date.value))
X+ 	endif
X+ 	print (\*(lq\\\*(rq\*(rq)
X+ 	if (comp_exists(message-id)) then
X+ 		print (\*(lq\\n\\t\*(rq)
X+ 		print (message-id.value)
X+ 	endif
X+ 	print (\*(lq\\n\*(rq)
X+ endif
X+ .re
X+ .in -.5i
X+ .fi
X+ .sp 1
X+ Although this seems complicated,
X+ in point of fact,
X+ this method is flexible enough to extract individual fields and print them in
X+ any format the user desires.
X+ .Fi
X+ None
X+ .Pr
X+ None
X+ .Sa
X+ scan(1), repl(1), ap(8), dp(8)
X+ .De
X+ None
X+ .Co
X+ None
X+ .Hi
X+ This software was contributed for MH 6.3.  Prior to this, output
X+ format specifications were much easier to write, but considerably
X+ less flexible.
X+ .Bu
X+ On hosts where \fIMH\fR was configured with the BERK option,
X+ address parsing is not enabled.
X+ .En
X*** ../mh-6.6.0/./conf/doc/tmac.h	Thu Oct 29 14:55:34 1987
X--- ./conf/doc/tmac.h	Thu Apr  5 16:04:04 1990
X***************
X*** 1,4 ****
X--- 1,5 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: tmac.h,v 1.5 90/04/05 15:40:17 sources Exp $
X  .\"    Try to keep only one copy of the documentation around
X  .\"    by re-defining macros and so forth.
X  .\"
X***************
X*** 6,12 ****
X  .\"    I pity the fool who tampers with the next line...
X  .ds ZZ -man
X  .de SC					\" Title section
X! .TH \\$1 \\$2 MH [mh.6]
X  ..
X  .de NA					\" Name section
X  .SH NAME
X--- 7,13 ----
X  .\"    I pity the fool who tampers with the next line...
X  .ds ZZ -man
X  .de SC					\" Title section
X! .TH \\$1 \\$2 @(MHCENTERFOOT) @(MHLEFTFOOT)
X  ..
X  .de NA					\" Name section
X  .SH NAME
X*** ../mh-6.6.0/./conf/doc/ali.rf	Thu Oct 29 14:55:01 1987
X--- ./conf/doc/ali.rf	Thu Apr  5 16:04:34 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: ali.rf,v 1.6 90/04/05 15:09:39 sources Exp $
X  .SC ALI 1
X***************
X*** 28,29 ****
X--- 29,32 ----
X
X+ The file specified by the profile entry \*(lqAliasfile:\*(rq and any
X+ additional alias files given by the `\-alias aliasfile' switch will be read.
X  Each \fIalias\fR is processed as described in \fImh\-alias\fR\0(5).
X***************
X*** 34,36 ****
X  .Pr
X! None
X  .Sa
X--- 37,41 ----
X  .Pr
X! ^Path:~^To determine the user's MH directory
X! .Ps
X! ^Aliasfile:~^For a default alias file
X  .Sa
X*** ../mh-6.6.0/./conf/doc/msh.rf	Thu Oct 29 14:55:24 1987
X--- ./conf/doc/msh.rf	Thu Apr  5 16:04:57 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: msh.rf,v 1.8 90/04/05 15:13:40 sources Exp $
X  .SC MSH 1
X***************
X*** 215,216 ****
X--- 216,220 ----
X  both the shell and \fImsh\fR.
X+
X+ \fIsortm\fR always uses \*(lq\-noverbose\*(rq and
X+ if \*(lq\-textfield\ field\*(lq is used, \*(lq\-limit 0\*(rq.
X
X*** ../mh-6.6.0/./conf/doc/anno.rf	Fri Nov 17 15:44:16 1989
X--- ./conf/doc/anno.rf	Thu Apr  5 16:04:24 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: anno.rf,v 2.4 90/04/05 15:08:00 sources Exp $
X  .SC ANNO 1
X***************
X*** 9,10 ****
X--- 10,12 ----
X  \%[\-inplace] \%[\-noinplace]
X+ \%[\-date] \%[\-nodate]
X  \%[\-text\ body]
X***************
X*** 25,26 ****
X--- 27,30 ----
X
X+ The `\-nodate' switch inhibits the date annotation,
X+ leaving only the body annotation.
X  The `\-inplace' switch causes annotation to be done in place in order
X***************
X*** 48,49 ****
X--- 52,55 ----
X  `\-noinplace'
X+ .Ds
X+ `\-date'
X  .Co
X*** ../mh-6.6.0/./conf/doc/ap.rf	Thu Oct 29 14:55:02 1987
X--- ./conf/doc/ap.rf	Thu Apr  5 16:04:38 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: ap.rf,v 1.6 90/04/05 15:10:21 sources Exp $
X  .SC AP 8
X***************
X*** 30,36 ****
X  In addition to the standard escapes,
X! \fIscan\fR also recognizes the following additional escape:
X  .nf
X! .ta \w'escape  'u
X! \fIescape\fR	\fIsubstitution\fR
X! error	a diagnostic if the parse failed
X  .re
X--- 31,38 ----
X  In addition to the standard escapes,
X! \fIap\fR also recognizes the following additional escape:
X! .sp 1
X  .nf
X! .ta \w'Escape  'u +\w'Returns  'u
X! \fIEscape\fR	\fIReturns\fR	\fIDescription\fR
X! error	string	A diagnostic if the parse failed
X  .re
X*** ../mh-6.6.0/./conf/doc/bbaka.rf	Thu Oct 29 14:55:02 1987
X--- ./conf/doc/bbaka.rf	Thu Apr  5 16:04:42 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: bbaka.rf,v 1.5 90/04/05 15:11:03 sources Exp $
X  .SC BBAKA 8
X*** ../mh-6.6.0/./conf/doc/bbc.rf	Thu Oct 29 14:55:03 1987
X--- ./conf/doc/bbc.rf	Thu Apr  5 16:04:23 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: bbc.rf,v 2.4 90/04/05 15:07:52 sources Exp $
X  .SC BBC 1
X***************
X*** 19,20 ****
X--- 20,24 ----
X  @END: BPOP
X+ @BEGIN: NNTP
X+ \%[\-host\ host]
X+ @END: NNTP
X  \%[\-help]
X***************
X*** 118,119 ****
X--- 122,132 ----
X  @END: BPOP
X+ @BEGIN: NNTP
X+
X+ If the local host is configured as an NNTP BBoards client,
X+ or if the `\-host\ host' switch is given,
X+ then \fIbbc\fR will query the NNTP service host
X+ as to the status of the BBoards.
X+ For NNTP BBoards clients,
X+ the `\-user\ user' and the `\-rpop' switches are ignored.
X+ @END: NNTP
X
X*** ../mh-6.6.0/./conf/doc/bbexp.rf	Thu Oct 29 14:55:03 1987
X--- ./conf/doc/bbexp.rf	Thu Apr  5 16:04:42 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: bbexp.rf,v 1.5 90/04/05 15:11:10 sources Exp $
X  .SC BBEXP 8
X*** ../mh-6.6.0/./conf/doc/bbl.rf	Thu Oct 29 14:55:03 1987
X--- ./conf/doc/bbl.rf	Thu Apr  5 16:04:43 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: bbl.rf,v 1.5 90/04/05 15:11:17 sources Exp $
X  .SC BBL 1
X*** ../mh-6.6.0/./conf/doc/bbleader.rf	Thu Oct 29 14:55:05 1987
X--- ./conf/doc/bbleader.rf	Thu Apr  5 16:04:44 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: bbleader.rf,v 1.5 90/04/05 15:11:34 sources Exp $
X  .SC BBLEADER 1
X*** ../mh-6.6.0/./conf/doc/bboards.rf	Thu Oct 29 14:55:05 1987
X--- ./conf/doc/bboards.rf	Thu Apr  5 16:04:44 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: bboards.rf,v 1.5 90/04/05 15:11:40 sources Exp $
X  .SC BBOARDS 1
X*** ../mh-6.6.0/./conf/doc/bboards5.rf	Thu Oct 29 14:55:06 1987
X--- ./conf/doc/bboards5.rf	Thu Apr  5 16:04:45 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: bboards5.rf,v 1.5 90/04/05 15:11:49 sources Exp $
X  .SC BBOARDS 5
X*** ../mh-6.6.0/./conf/doc/bboards8.rf	Thu Oct 29 14:55:06 1987
X--- ./conf/doc/bboards8.rf	Thu Apr  5 16:04:45 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: bboards8.rf,v 1.5 90/04/05 15:11:57 sources Exp $
X  .SC BBOARDS 8
X*** ../mh-6.6.0/./conf/doc/bbtar.rf	Thu Oct 29 14:55:07 1987
X--- ./conf/doc/bbtar.rf	Thu Apr  5 16:04:46 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: bbtar.rf,v 1.5 90/04/05 15:12:03 sources Exp $
X  .SC BBTAR 8
X*** ../mh-6.6.0/./conf/doc/burst.rf	Thu Oct 29 14:55:07 1987
X--- ./conf/doc/burst.rf	Thu Apr  5 16:04:47 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: burst.rf,v 1.5 90/04/05 15:12:10 sources Exp $
X  .SC BURST 1
X*** ../mh-6.6.0/./conf/doc/comp.rf	Thu Oct 29 14:55:08 1987
X--- ./conf/doc/comp.rf	Thu Apr  5 16:04:47 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: comp.rf,v 1.5 90/04/05 15:12:17 sources Exp $
X  .SC COMP 1
X*** ../mh-6.6.0/./conf/doc/conflict.rf	Thu Oct 29 14:55:08 1987
X--- ./conf/doc/conflict.rf	Thu Apr  5 16:04:48 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: conflict.rf,v 1.5 90/04/05 15:12:24 sources Exp $
X  .SC CONFLICT 8
X*** ../mh-6.6.0/./conf/doc/dist.rf	Thu Oct 29 14:55:09 1987
X--- ./conf/doc/dist.rf	Thu Apr  5 16:04:49 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: dist.rf,v 1.5 90/04/05 15:12:30 sources Exp $
X  .SC DIST 1
X*** ../mh-6.6.0/./conf/doc/dp.rf	Thu Oct 29 14:55:09 1987
X--- ./conf/doc/dp.rf	Thu Apr  5 16:04:30 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: dp.rf,v 1.6 90/04/05 15:08:58 sources Exp $
X  .SC DP 8
X***************
X*** 32,33 ****
X--- 33,35 ----
X
X+ .nf
X  .ti +.5i
X***************
X*** 34,35 ****
X--- 36,38 ----
X  %<(nodate{text})error: %{text}%|%(putstr(pretty{text}))%>
X+ .fi
X
X*** ../mh-6.6.0/./conf/doc/folder.rf	Thu Oct 29 14:55:10 1987
X--- ./conf/doc/folder.rf	Thu Apr  5 16:04:49 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: folder.rf,v 1.5 90/04/05 15:12:37 sources Exp $
X  .SC FOLDER 1
X*** ../mh-6.6.0/./conf/doc/forw.rf	Thu Oct 29 14:55:10 1987
X--- ./conf/doc/forw.rf	Thu Apr  5 16:04:29 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: forw.rf,v 1.9 90/04/05 15:08:44 sources Exp $
X  .SC FORW 1
X***************
X*** 109,111 ****
X
X! Each forwarded message is separated with an encapsulation delimiter so that
X  when received, the message is suitable for bursting by \fIburst\fR\0(1).
X--- 110,115 ----
X
X! Each forwarded message is separated with an encapsulation delimiter
X! and
X! dashes in the first column of the forwarded messages will be prepended
X! with `\-\ ' so that
X  when received, the message is suitable for bursting by \fIburst\fR\0(1).
X***************
X*** 132,135 ****
X  The `\-digest\ list', `\-issue\ number', and `\-volume\ number' switches
X! implement a digest facility for \fIMH\fR.
X! See the \fIMH\fR user's manual for more information.
X  .Fi
X--- 136,151 ----
X  The `\-digest\ list', `\-issue\ number', and `\-volume\ number' switches
X! implement a digest facility for \fIMH\fR.  Specifying these switches
X! enables and/or overloads the following escapes:
X! .sp 1
X! .nf
X! .ta \w'Component  'u +\w'Escape  'u +\w'Returns  'u
X! \fIType\fR	\fIEscape\fR	\fIReturns\fR	\fIDescription\fR
X! \fIcomponent\fR	\fIdigest\fR	string	Argument to `\-digest'
X! \fIfunction\fR	\fIcur\fR	integer	Argument to `\-volume'
X! \fIfunction\fR	\fImsg\fR	integer	Argument to `\-issue'
X! .re
X! .fi
X!
X! Consult the \fBAdvanced Features\fR section of
X! the \fIMH\fR User's Manual for more information on making digests.
X  .Fi
X***************
X*** 162,164 ****
X  .br
X! comp(1), dist(1), repl(1), send(1), whatnow(1)
X  .De
X--- 178,180 ----
X  .br
X! comp(1), dist(1), repl(1), send(1), whatnow(1), mh\-format(5)
X  .De
X*** ../mh-6.6.0/./conf/doc/mh.rf	Thu Oct 29 14:55:20 1987
X--- ./conf/doc/mh.rf	Thu Apr  5 16:04:30 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: mh.rf,v 1.9 90/04/05 15:08:50 sources Exp $
X  .if '\*(ZZ'-man' \{\
X***************
X*** 148,149 ****
X--- 149,151 ----
X  ^bbc (1)~^\- check on BBoards
X+ @BEGIN: BBSERVER
X  ^bbl (1)~^\- manage a BBoard
X***************
X*** 150,151 ****
X--- 152,154 ----
X  ^bbleader (1)~^\- responsiblities of a BBoard\-leader
X+ @END: BBSERVER
X  ^bboards (1)~^\- the UCI BBoards facility
X***************
X*** 213,219 ****
X  .Sa
X! \fIThe Rand \fIMH\fR Message Handling System: User's Manual\fR,
X  .br
X! \fIThe Rand \fIMH\fR Message Handling System: Tutorial\fR,
X  .br
X! \fIThe Rand \fIMH\fR Message Handling System: The UCI BBoards Facility\fR,
X  .br
X--- 216,222 ----
X  .Sa
X! \fIThe RAND \fIMH\fR Message Handling System: User's Manual\fR,
X  .br
X! \fIThe RAND \fIMH\fR Message Handling System: Tutorial\fR,
X  .br
X! \fIThe RAND \fIMH\fR Message Handling System: The UCI BBoards Facility\fR,
X  .br
X***************
X*** 222,223 ****
X--- 225,280 ----
X  .br
X+ .Bu
X+ If problems are encountered with an \fIMH\fR program,
X+ the problems should be reported to the local maintainers of \fIMH\fR.
X+ When doing this,
X+ the name of the program should be reported,
X+ along with the version information for the program.
X+ .br
X+ To find out what version of an \fIMH\fR program is being run,
X+ invoke the program with the `\-help' switch.
X+ In addition to listing the syntax of the command,
X+ the program will list information pertaining to its version.
X+ This information includes the version of \fIMH\fR,
X+ the host it was generated on,
X+ and the date the program was loaded.
X+ A second line of information,
X+ found on versions of \fIMH\fR after #5.380 include \fIMH\fR configuration
X+ options.
X+ For example,
X+
X+ .nf
X+ .in +.5i
X+ version: MH 6.1 #1[UCI] (glacier) of Wed Nov  6 01:13:53 PST 1985
X+ options: [BSD42] [MHE] [NETWORK] [SENDMTS] [MMDFII] [SMTP] [POP]
X+ .in -.5i
X+ .fi
X+
X+ The `6.1 #1[UCI]' indicates that the program is from the UCI \fIMH.6.1\fR
X+ version of \fIMH\fR.
X+ The program was generated on the host `glacier' on
X+ `Wed Nov  6 01:13:53 PST 1985'.
X+ It's usually a good idea to send the output of the `\-help' switch along
X+ with your report.
X+
X+ If there is no local \fIMH\fR maintainer,
X+ try the address \fBBug-MH\fR.
X+ If that fails, use the Internet mailbox \fBBug-MH@ICS.UCI.EDU\fR.
X+ .Fi
X+ ^$HOME/\&.mh\(ruprofile~^The user profile
X+ .Pr
X+ ^Path:~^To determine the user's MH directory
X+ .\" .Ps
X+ .\" for each additional profile entry
X+ .\" .Sa
X+ .\" the see\-also's go here
X+ .\" .De
X+ .\" the first default goes here
X+ .\" .Ds
X+ .\" for each additional default
X+ .\" .Co
X+ .\" context changes go here
X+ .\" You can also have
X+ .\" .Hh \- the helpful hints section
X+ .\" .Hi \- the history section
X+ .\" .Bu \- the bugs section
X  .En
X*** ../mh-6.6.0/./conf/doc/mark.rf	Thu Oct 29 14:55:12 1987
X--- ./conf/doc/mark.rf	Thu Apr  5 16:04:50 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: mark.rf,v 1.5 90/04/05 15:12:51 sources Exp $
X  .SC MARK 1
X*** ../mh-6.6.0/./conf/doc/mf.rf	Thu Oct 29 14:55:13 1987
X--- ./conf/doc/mf.rf	Thu Apr  5 16:04:51 1990
X***************
X*** 1,2 ****
X--- 1,3 ----
X  .\"	@(MHWARNING)
X+ .\" @(#)$Id: mf.rf,v 1.5 90/04/05 15:12:57 sources Exp $
X  .SC MF 1
+ END-OF-FILE MH.6.6.1
chmod 'u=rw,g=r,o=r' 'MH.6.6.1'
echo '	-rw-r--r--  1 mh          36893 Apr 13 13:53 MH.6.6.1        (as sent)'
echo -n '	'
/bin/ls -l MH.6.6.1
exit 0