diff --git a/history.c b/history.c
index 1373b4f..4fe4c14 100644
--- a/history.c
+++ b/history.c
@@ -1,5 +1,5 @@
-/* $MirBSD: history.c,v 1.8 2004/05/24 19:56:09 tg Exp $ */
-/* $OpenBSD: history.c,v 1.22 2003/05/18 01:02:42 jsyn Exp $	*/
+/**	$MirBSD: history.c,v 1.9 2004/08/27 14:08:35 tg Stab $ */
+/*	$OpenBSD: history.c,v 1.24 2004/08/03 12:44:59 danh Exp $	*/
 
 /*
  * command history
@@ -87,6 +87,11 @@ c_fc(wp)
 	char *first = (char *) 0, *last = (char *) 0;
 	char **hfirst, **hlast, **hp;
 
+	if (!Flag(FTALKING_I)) {
+		bi_errorf("history functions not available");
+		return 1;
+	}
+
 	while ((optc = ksh_getopt(wp, &builtin_opt, "e:glnrs0,1,2,3,4,5,6,7,8,9,")) != EOF)
 		switch (optc) {
 		  case 'e':
diff --git a/ksh.1tbl b/ksh.1tbl
index c683f1d..aabb17c 100644
--- a/ksh.1tbl
+++ b/ksh.1tbl
@@ -1,5 +1,5 @@
-.\" $MirBSD: ksh.1tbl,v 1.27 2004/08/10 20:43:20 tg Exp $
-.\" $OpenBSD: ksh.1tbl,v 1.70 2004/05/09 06:07:42 otto Exp $
+.\" $MirBSD: ksh.1tbl,v 1.28 2004/08/27 14:08:35 tg Stab $
+.\" $OpenBSD: ksh.1tbl,v 1.72 2004/08/07 16:46:58 millert Exp $
 .\"
 .\" Copyright (c) 1980, 1990, 1993
 .\"     The Regents of the University of California.  All rights reserved.
@@ -42,11 +42,15 @@
 .Nm
 .Op Fl +abCefhiklmnprsuvxX
 .Op Fl +o Ar option
-.Oo [ Fl c Ar command-string [
-.Xo Ar command-name ] No \&| Fl s No \&|
-.Ar file No ]\ \&
-.Xc
+.Xo
+.Bk -words
+.Oo Oo Fl c Ar command-string
+.Op Ar command-name
+.Li \&| Fl s
+.Li \&| Ar file Oc
+.Ek
 .Op Ar argument ... Oc
+.Xc
 .Sh DESCRIPTION
 .Nm
 is a command interpreter intended for both interactive and shell
@@ -85,11 +89,15 @@ of a file the shell reads commands from.
 If there are no non-option
 arguments, the shell reads commands from the standard input.
 The name of
-the shell (i.e., the contents of $0) is determined as follows: if the
+the shell (i.e., the contents of
+.Va $0 )
+is determined as follows: if the
 .Fl c
 option is used and there is a non-option argument, it is used as the name;
 if commands are being read from a file, the file is used as the name;
-otherwise, the name the shell was called with (i.e., argv[0]) is used.
+otherwise, the name the shell was called with (i.e.,
+.Li argv[0] )
+is used.
 .Pp
 A shell is
 .Dq interactive
@@ -109,7 +117,7 @@ and
 parameters).
 For non-interactive shells, the
 .Ic trackall
-option is on by default (see
+option is on by default (see the
 .Ic set
 command below).
 .Pp
@@ -180,7 +188,8 @@ is processed.
 Clearing the privileged option causes the shell to set
 its effective user ID (group ID) to its real user ID (group ID).
 .Pp
-If the basename of the name the shell is called with (i.e., argv[0])
+If the basename of the name the shell is called with (i.e.,
+.Li argv[0] )
 starts with
 .Ql -
 or if the
@@ -563,7 +572,7 @@ if no
 .Ar list
 is executed, the exit status is zero.
 .It Xo Ic for Ar name No [
-.Ic in Ar word Ar ... term Ns ]
+.Ic in Ar word ... term Ns ]
 .Ic do Ar list Ic done
 .Xc
 For each
@@ -575,7 +584,11 @@ is set to the word and
 is executed.
 If
 .Ic in
-is not used to specify a word list, the positional parameters ($1, $2, etc.\&)
+is not used to specify a word list, the positional parameters
+.Po
+.Va $1 , $2 ,
+etc.\&
+.Pc
 are used instead.
 For historical reasons, open and close braces may be used instead of
 .Ic do
@@ -624,7 +637,7 @@ that is executed; if no non-conditional
 .Ar list
 is executed, the exit status is zero.
 .It Xo Ic select Ar name No [
-.Ic in Ar word Ar ... term Ns ]
+.Ic in Ar word ... term Ns ]
 .Ic do Ar list Ic done
 .Xc
 The
@@ -662,8 +675,10 @@ is read, an interrupt is received, or a
 .Ic break
 statement is executed inside the loop.
 If
-.Ic in Ar word Ar ...
-is omitted, the positional parameters are used (i.e., $1, $2, etc.).
+.Ic in Ar word ...\&
+is omitted, the positional parameters are used (i.e.,
+.Va $1 , $2 ,
+etc.).
 For historical reasons, open and close braces may be used instead of
 .Ic do
 and
@@ -1246,7 +1261,9 @@ set directly using assignments:
 Process ID of the last background process started.
 If no background processes have been started, the parameter is not set.
 .It Ev \&#
-The number of positional parameters (i.e., $1, $2, etc.).
+The number of positional parameters (i.e.,
+.Va $1 , $2 ,
+etc.).
 .It Ev \&$
 The process ID of the shell, or the
 .Tn PID
@@ -1257,9 +1274,9 @@ use this mechanism for generating temporary file names; see
 .Xr mktemp 1
 instead.
 .It Ev \&-
-The concatenation of the current single letter options (see
+The concatenation of the current single letter options (see the
 .Ic set
-command below for list of options).
+command below for a list of options).
 .It Ev \&?
 The exit status of the last non-asynchronous command executed.
 If the last command was killed by a signal,
@@ -1267,7 +1284,7 @@ If the last command was killed by a signal,
 is set to 128 plus the signal number.
 .It Ev 0
 The name the shell was invoked with (i.e.,
-.Ic argv[0] ) ,
+.Li argv[0] ) ,
 or the
 .Ar command-name
 if it was invoked with the
@@ -1288,7 +1305,9 @@ or .-script.
 Further positional parameters may be accessed using
 .Ic ${ Ns Ar number Ns Ic \&} .
 .It Ev \&*
-All positional parameters (except parameter 0), i.e., $1, $2, $3...
+All positional parameters (except parameter 0); i.e.,
+.Va $1 , $2 , $3 ,
+\&...
 If used
 outside of double quotes, parameters are separate words (which are subjected
 to word splitting); if used within double quotes, parameters are separated
@@ -1350,11 +1369,11 @@ Currently set to the
 value as reported by
 .Xr stty 1
 if that value is non-zero.
-This parameter is used by the interactive line editing modes, and by
+This parameter is used by the interactive line editing modes, and by the
 .Ic select ,
 .Ic set Fl o
 and
-.Ic kill -l
+.Ic kill Fl l
 commands to format information columns.
 .It Ev EDITOR
 If the
@@ -1508,7 +1527,7 @@ The primary prompt for interactive shells.
 Parameter, command, and arithmetic
 substitutions are performed, and
 .Ql \&!
-is replaced with the current command number (see
+is replaced with the current command number (see the
 .Ic fc
 command below).
 A literal
@@ -1544,7 +1563,7 @@ statement when reading a menu selection.
 Default is
 .Dq \&#\&?\ \& .
 .It Ev PS4
-Used to prefix commands that are printed during execution tracing (see
+Used to prefix commands that are printed during execution tracing (see the
 .Ic set Fl x
 command below).
 Parameter, command, and arithmetic substitutions are performed
@@ -2353,7 +2372,7 @@ in
 .Pf non- Tn POSIX
 mode.
 To avoid problems, use the
-.Ic $(...)
+.Ic $(...)\&
 form of command substitution.
 .It
 .Ic kill -l
@@ -2455,7 +2474,7 @@ This construct is used in most shell scripts that use the old
 .Xr getopt 1
 command.
 .It
-Argument expansion of
+Argument expansion of the
 .Ic alias ,
 .Ic export ,
 .Ic readonly
@@ -2542,7 +2561,7 @@ cause a non-interactive shell to exit and parameter assignments that are
 specified before the command are kept after the command completes.
 Just to confuse things, if the
 .Ic posix
-option is turned off (see
+option is turned off (see the
 .Ic set
 command below), some special commands are very special in that no field
 splitting, file globbing, brace expansion, nor tilde expansion is performed
@@ -2679,11 +2698,11 @@ is assumed.
 This command is only available on systems which support job control (see
 .Sx Job control
 below for more information).
-.It Xo Ic bind Op Fl m
+.It Xo
+.Ic bind Op Fl m
 .Oo Ar key
 .Op Ns = Ns Ar editing-command
-.Ar ...
-.Oc
+.Ar ... Oc
 .Xc
 Set or view the current emacs command editing key bindings/macros (see
 .Sx Emacs editing mode
@@ -2738,7 +2757,7 @@ If the
 .Fl L
 option (logical path) is used or if the
 .Ic physical
-option (see
+option (see the
 .Ic set
 command below) isn't set, references to
 .Dq \&.\&.
@@ -3146,7 +3165,7 @@ If the
 .Fl L
 option is used or if the
 .Ic physical
-option (see
+option (see the
 .Ic set
 command below) isn't set, the logical path is printed (i.e., the path used to
 .Ic cd
@@ -3244,7 +3263,9 @@ scripts.
 .Op Fl \&-
 .Op Ar arg ...
 .Xc
-The set command can be used to set
+The
+.Ic set
+command can be used to set
 .Pq Ic \&-
 or clear
 .Pq Ic \&+
@@ -3452,7 +3473,7 @@ In vi command-line editing, do command and file name completion when escape
 .It Ic vi-show8
 Prefix characters with the eighth bit set with
 .Dq M\&- .
-If this option is not set, characters in the range 128-160 are printed as is,
+If this option is not set, characters in the range 128\-160 are printed as is,
 which may cause problems.
 .It Ic vi-tabcomplete
 In vi command-line editing, do command and file name completion when tab (^I)
@@ -3583,7 +3604,7 @@ is a socket.
 .It Fl o Ar option
 Shell
 .Ar option
-is set (see
+is set (see the
 .Ic set
 command above for a list of options).
 As a non-standard extension, if the option starts with a
@@ -3787,8 +3808,8 @@ is the name of a signal (e.g.,
 .Dv PIPE
 or
 .Dv ALRM )
-or the number of the signal (see
-.Ic kill -l
+or the number of the signal (see the
+.Ic kill Fl l
 command above).
 There are two special signals:
 .Dv EXIT
@@ -3799,7 +3820,7 @@ the shell to exit if the
 .Fl e
 or
 .Ic errexit
-option were see -- see
+option were see \(em see the
 .Ic set
 command above).
 .Dv EXIT
@@ -3978,7 +3999,7 @@ Parameters (or functions) are placed in the environment of
 any executed commands.
 Exported functions are not yet implemented.
 .El
-.It Xo Ic ulimit Op Fl acdfHlmnpsSt
+.It Xo Ic ulimit Op Fl acdfHlmnpsStv
 .Op Ar value
 .Xc
 Display or set process limits.
@@ -4012,7 +4033,7 @@ blocks on the size of core dumps.
 .It Fl d Ar n
 Impose a size limit of
 .Ar n
-kilobytes on the size of the data area.
+kibibytes on the size of the data area.
 .It Fl f Ar n
 Impose a size limit of
 .Ar n
@@ -4021,11 +4042,11 @@ size may be read).
 .It Fl l Ar n
 Impose a limit of
 .Ar n
-kilobytes on the amount of locked (wired) physical memory.
+kibibytes on the amount of locked (wired) physical memory.
 .It Fl m Ar n
 Impose a limit of
 .Ar n
-kilobytes on the amount of physical memory used.
+kibibytes on the amount of physical memory used.
 .It Fl n Ar n
 Impose a limit of
 .Ar n
@@ -4037,7 +4058,7 @@ processes that can be run by the user at any one time.
 .It Fl s Ar n
 Impose a size limit of
 .Ar n
-kilobytes on the size of the stack area.
+kibibytes on the size of the stack area.
 .It Fl t Ar n
 Impose a time limit of
 .Ar n
@@ -4048,6 +4069,10 @@ Impose a real time limit of
 .Ar n
 .Tn human
 seconds to be used by each process.
+.It Fl v Ar n
+Impose a limit of
+.Ar n
+kibibytes on the amount of virtual memory used.
 .El
 .Pp
 As far as
@@ -4197,7 +4222,7 @@ For interactive shells, this number is printed inside
 .Dq \&[..\&] ,
 followed by the process IDs of the processes in the job when an asynchronous
 command is run.
-A job may be referred to in
+A job may be referred to in the
 .Ic bg ,
 .Ic fg ,
 .Ic jobs ,
@@ -4694,15 +4719,17 @@ commands move in the opposite direction as the
 command.
 .It
 Commands which don't make sense in a single line editor are not available
-(e.g., screen movement command, ex-style
-.Ic \&:
+(e.g., screen movement commands,
+.Xr ex 1 Ns -style
+colon
+.Pq Ic \&:
 commands, etc.).
 .El
 .Pp
 Note that the ^X stands for control-X; also <esc>, <space> and <tab> are used
 for escape, space, and tab, respectively (no kidding).
 .Pp
-Like vi, there are two modes --
+Like vi, there are two modes \(em
 .Dq insert
 mode and
 .Dq command
@@ -5220,7 +5247,7 @@ can be obtained from \fBftp://ftp.cs.mun.ca/pub/pdksh\fR.
 .Pp
 By the way, the most frequently reported bug is:
 .Bd -literal -offset indent
-echo hi | read a; echo $a\ \ \ # Does not print hi
+$ echo hi | read a; echo $a   # Does not print hi
 .Ed
 .Pp
 The
diff --git a/main.c b/main.c
index afd2f7b..17431de 100644
--- a/main.c
+++ b/main.c
@@ -1,5 +1,5 @@
-/* $MirBSD: main.c,v 1.8 2004/05/24 19:56:16 tg Exp $ */
-/* $OpenBSD: main.c,v 1.26 2004/01/08 05:43:14 jmc Exp $	*/
+/**	$MirBSD: main.c,v 1.9 2004/08/27 14:08:35 tg Stab $ */
+/*	$OpenBSD: main.c,v 1.28 2004/08/23 14:56:32 millert Exp $	*/
 
 /*
  * startup, main loop, environments and error handling
@@ -734,7 +734,8 @@ quitenv()
 				 * Don't do it for SIGQUIT, since we'd
 				 * dump a core..
 				 */
-				if (sig == SIGINT || sig == SIGTERM) {
+				if ((sig == SIGINT || sig == SIGTERM) &&
+				    getpgrp() == kshpid) {
 					setsig(&sigtraps[sig], SIG_DFL,
 						SS_RESTORE_CURR|SS_FORCE);
 					kill(0, sig);
diff --git a/sh.h b/sh.h
index 38adc53..a213dc5 100644
--- a/sh.h
+++ b/sh.h
@@ -1,5 +1,10 @@
-/* $MirBSD: sh.h,v 1.9 2004/05/24 19:56:17 tg Exp $ */
-/* $OpenBSD: sh.h,v 1.17 2004/05/10 16:28:47 pvalchev Exp $	*/
+/**	$MirBSD: sh.h,v 1.10 2004/08/27 14:08:36 tg Exp $ */
+/*	$OpenBSD: sh.h,v 1.18 2004/05/31 10:36:35 otto Exp $	*/
+
+/*
+ * Public Domain Bourne/Korn shell
+ */
+
 /* $From: sh.h,v 1.2 1994/05/19 18:32:40 michael Exp michael $ */
 
 #include "config.h"	/* system and option configuration info */
@@ -111,7 +116,6 @@ void *memmove ARGS((void *d, const void *s, size_t n));
 #endif /* HAVE_PROTOTYPES */
 
 #include <errno.h>
-extern int errno;
 
 #ifdef HAVE_FCNTL_H
 # include <fcntl.h>