groff over them and checks that no warnings are emitted.
 .B \-annotate
 switch is given, each message being forwarded will
 be annotated with the lines:
-
-     Forwarded:\ date
-     Forwarded:\ addrs
-
+.PP
+.RS 5
+.nf
+Forwarded:\ date
+Forwarded:\ addrs
+.fi
+.RE
+.PP
 where each address list contains as many lines as required.  This
 annotation will be done only if the message is sent directly from
 .BR forw .
 .BR \-mime ,
 and
 .B \-digest
-switches is bypassed, and the usual leading and trailing
-'Forwarded Message' delimiters are not added.
+switches is bypassed, and the usual leading and
+trailing 'Forwarded Message' delimiters are not added.
 The same caveats apply to this option as to the
 .B \-build
 switch.
 
 .PP
 .RS 5
 .nf
-\*(<<inc\*(>> date
+<<inc>> date
 <scan line for first message>
 <scan line for second message>
 <etc.>
 
 .IR text ]
 .RB [ \-cc
 .I addrs
-...]
+\&...]
 .RB [ \-from
 .IR addr ]
 .RB [ \-subject
 .RB [ \-snoop ]
 %nmhendpop%
 .RI [ users
-... ]
+\&... ]
 .RB [ \-version ]
 .RB [ \-help ]
 
 
 .IR text ]
 .RB [ \-cc
 .I addrs
-...]
+\&...]
 .RB [ \-from
 .IR addr ]
 .RB [ \-subject
 .B mhmail
 will not send the message.  You can use the switch
 .B \-body
-\*(lr\*(rq to force an empty message.
+\*(lq\*(rq to force an empty message.
 .PP
 Normally, addresses appearing as arguments are put in the \*(lqTo:\*(rq
 field.  If the
 
 different machines,
 .B mhshow
 will look for the environment variable
-.BE $MHSHOW .
+.BR $MHSHOW .
 If present, this specifies the name of an additional
 user profile which should be read.  Hence, when a user logs in on a
 particular display device, this environment variable should be set to
 
 be used to store the content.  This information should be specified
 as the attribute \*(lqname=filename\*(rq in the \*(lqContent-Type\*(rq header
 for the content you are storing.  For security reasons, this filename
-will be ignored if it begins with the character '/', '.', '|', or
-'!', or if it contains the character '%'.  For the sake of security,
+will be ignored if it begins with the character '/', '.', '|', or '!',
+or if it contains the character '%'.  For the sake of security,
 this switch is not the default, and it is recommended that you do
 NOT put the
 .B \-auto
 different machines,
 .B mhstore
 will look for the environment variable
-.BE $MHSTORE .
+.BR $MHSTORE .
 If present, this specifies the name of an additional
 user profile which should be read.  Hence, when a user logs in on a
 particular machine, this environment variable should be set to
 
 .RB [ \-snoop ]
 %nmhendpop%
 .RI [ users
-... ]
+\&... ]
 .RB [ \-version ]
 .RB [ \-help ]
 .ad
 
 .SH CONTEXT
 If a folder is given, it will become the current folder.  The first
 message packed will become the current message.
-.En
 
 .RS 5
 .nf
 .ta \w'15+- 'u +\w'07/\|05x 'u +\w'Dcrocker  'u
-15+    10/\|05 crocker nned\0\0\*(<<Last week I asked some of
-16\-   10/\|05 crocker message id format\0\0\*(<<I recommend
+15+    10/\|05 crocker nned\0\0<<Last week I asked some of
+16\-   10/\|05 crocker message id format\0\0\<<I recommend
 18     10/\|06 brien   Re: Exit status from mkdir
 19     10/\|07*brien   \*(lqscan\*(rq listing format in nmh
 .fi
 
--- /dev/null
+#!/bin/sh
+######################################################
+#
+# Test that the manpages don't have any syntax errors
+# as detected by groff.
+#
+######################################################
+
+# First find out whether we have a groff on the path:
+
+# portable implementation of 'which' utility
+findprog()
+{
+  FOUND=
+  PROG="$1"
+  IFS_SAVE="$IFS"
+  IFS=:
+  for D in $PATH; do
+    if [ -z "$D" ]; then
+      D=.
+    fi
+    if [ -f "$D/$PROG" ] && [ -x "$D/$PROG" ]; then
+      printf '%s\n' "$D/$PROG"
+      break
+    fi
+  done
+  IFS="$IFS_SAVE"
+}
+
+if [ -z "$(findprog groff)" ]; then
+  echo "Test $0 SKIP (missing groff)"
+  exit 120
+fi
+
+cd $MH_TEST_DIR/share/man
+
+# groff will still exit with status zero even if warnings
+# were emitted, so we have to jump through hoops to
+# find out if any were emitted.
+
+expected=$MH_TEST_DIR/$$.expected
+actual=$MH_TEST_DIR/$$.actual
+
+# There aren't any expected warnings at the moment but
+# this mechanism does let us add them if necessary later.
+rm -f "$expected" "$actual"
+touch "$expected" "$actual"
+
+for manpage in man?/*.?; do
+  groff -Tutf8 -mandoc -wmac "$manpage" > /dev/null 2>>"$actual"
+done
+
+diff -u "$expected" "$actual"