[ksh93-integration-discuss] Re: [ast-users] AT&T Software Technology ast software download update

Felix Schulte felix.schulte at gmail.com
Mon Apr 2 07:09:37 PDT 2007


On 3/30/07, Glenn Fowler <gsf at research.att.com> wrote:
>
> the AT&T Software Technology ast 2007-03-28 source and binary release
> has been posted to the download site
>         http://www.research.att.com/sw/download/
> the notes and changes link has details on the release
>
> included is the ast-ksh package which contains the latest ksh93
> source for the ksh93 solaris integration project
>
> -- Glenn Fowler -- AT&T Research, Florham Park NJ --
patch diff from 20070111 to 20070328 attached
-- 
      _        Felix Schulte
    _|_|_     mailto:felix.schulte at gmail.com
    (0 0)
ooO--(_)--Ooo
-------------- next part --------------
diff -r -N -u ksh93_2007_01_11/lib/package/ast-ksh.html ksh93_2007_03_28/lib/package/ast-ksh.html
--- ksh93_2007_01_11/lib/package/ast-ksh.html	2007-01-12 10:54:36.000000000 +0100
+++ ksh93_2007_03_28/lib/package/ast-ksh.html	2007-03-29 19:07:08.000000000 +0200
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <HTML>
 <HEAD>
-<META name="generator" content="mm2html (AT&T Labs Research) 2006-10-31">
+<META name="generator" content="mm2html (AT&T Labs Research) 2007-02-09">
 <META name="description" content="ast-ksh package">
 <META name="keywords" content="software, package">
 <TITLE> ast-ksh package </TITLE>
@@ -22,7 +22,7 @@
 <TABLE align=center border=0 bordercolor=white cellpadding=0 cellspacing=0 frame=void rules=none width=99% >
 <TBODY>
 <TR><TD align=left>
-<A href="#ksh93">ksh93</A>&nbsp;&nbsp;</TD><TD align=left>&nbsp;&nbsp;libast&nbsp;&nbsp;</TD><TD align=left>&nbsp;&nbsp;libcmd&nbsp;&nbsp;</TD><TD align=left>&nbsp;&nbsp;libdll</TD></TR>
+<A href="#ksh93">ksh93</A>&nbsp;&nbsp;</TD><TD align=left>&nbsp;&nbsp;libast&nbsp;&nbsp;</TD><TD align=left>&nbsp;&nbsp;libcmd&nbsp;&nbsp;</TD><TD align=left>&nbsp;&nbsp;libdll&nbsp;&nbsp;</TD><TD align=left>&nbsp;&nbsp;libsum</TD></TR>
 </TBODY></TABLE></TD></TR></TBODY></TABLE>
 <P>
 This package is a superset of the following package: ksh; you won't need this if you download ast-ksh.
@@ -179,6 +179,7 @@
 <TD align=left><A href="#ksh93 changes">ksh93</A></TD>
 <TD align=left><A href="#libast changes">libast</A></TD>
 <TD align=left><A href="#libcmd changes">libcmd</A></TD>
+<TD align=left><A href="#libsum changes">libsum</A></TD>
 <TD align=left><A href="#libdll changes">libdll</A></TD>
 </TR></TABLE>
 </FONT></B>
@@ -192,6 +193,33 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="ksh93 changes">ksh93 changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
+07-03-08  --- Release ksh93s+  ---
+07-03-08  A bug in which set +o output command line options has been fixed.
+07-03-08  A bug in which an error in read (for example, an invalid variable
+	  name), could leave the terminal in raw mode has been fixed.
+07-03-06  A bug in which read could core dump when specified with an array
+	  variable with a subscript that is an arithmetic expression has
+	  been fixed.
+07-03-06  Several serious bugs with the restricted shell were reported and
+	  fixed.
+07-03-02  If a job is stopped, and subsequently restarted with a CONT
+	  signal and exits normally, ksh93 was incorrectly exiting with
+	  the exit status of the stop signal number.
+07-02-26  M-^L added to emacs mode to clear the screen.
+07-02-26  A bug in which setting a variable readonly in a subshell would
+	  cause an unset error when the subshell completed has been fixed. 
+07-02-19  The format with printf uses the new = flag to center the output.
+07-02-19  A bug in which ksh93 did not allow multibyte characters in
+	  identifier names has been fixed.
+07-02-19  A bug introduced in ksh93 that causes global compound variable
+	  definitions inside functions to exit with "no parent" has been fixed.
+07-02-19  A bug in which using compound commands in process redirection
+	  arguments would give syntax errors &lt;(...) and &gt;(...) has been fixed.
+07-01-29  A bug which caused the shell to core dump which can occur when a
+	  built-in exits without closing files that it opens has been fixed.
+07-01-26  A bug in which ~(E) in patterns containing &nbsp;that are not inside ()
+	  has been fixed.
+
 06-12-29  --- Release ksh93s  ---
 06-12-29  A bug in which the value of IFS could be changed after a command
 	  substitution has been fixed. 
@@ -1624,6 +1652,30 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libast changes">libast changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
+07-03-28 misc/optget.c: fix l10n --?-
+07-03-25 features/common: fix { ast_std.h ast_map.h stdint.h } logic
+07-03-21 error.h: move from error_info to (*_error_data_)
+07-03-21 option.h: move from opt_info to (*_opt_data_)
+07-03-19 regex/regdecomp.c: fix REX_ONECHAR escapes and add REX_KMP
+07-03-11 tm/tmxscan.c,regex/regnexec.c: fix strict-alias transgressions
+07-02-27 comp/conf.sh: handle native getconf invalid numeric values
+07-02-21 comp/conf.sh,comp/conf.tab: handle SSIZE_MAX vs _POSIX_SSIZE_MAX
+07-02-20 sfio/sfvprintf.c: handle SF_WCWIDTH justification
+07-02-14 features/common: cover &lt;stdint.h&gt;, move to int_(bits)_t
+07-02-14 include/int.h: drop
+07-02-14 include/sfio.h: add SF_WCWIDTH
+07-02-12 comp/conf.sh: fix CONF_LIMIT bug that missed ULONG_MAX etc.
+07-02-12 comp/conf.tab: *LONGLONG* =&gt; *LLONG* to match posix
+07-02-12 features/float: *LONGLONG* =&gt; *LLONG* to match posix
+07-02-12 port/astconf.c: handle CONF_LIMITS_DEF with no deferral
+07-02-12 stdio/vasprintf.c: add trailing '&nbsp;' -- doh
+07-02-04 string/fmtelapsed.c: fix naive multi month/year logic
+07-02-02 misc/optget.c: add --??posix for getopts(1)/getopt(3)
+07-01-26 string/chresc.c: use mbchar()
+07-01-26 misc/optget.c: handle "o:-:" usage for old-style long options
+07-01-22 sfio/sfdisc.c,sfpool.c: handle push on streams with pending peek
+07-01-22 include/sfio.h: mv Sfieee_t to sfio/sfhdr.h
+07-01-17 tm/tmxfmt.c: fix terminating nil logic which clobbered size-1
 07-01-11 misc/stk.c: a 2 day marathon bug fix (can we release now dr ek?)
 07-01-05 comp/spawnveg.c: posix_spawnattr_setflags(POSIX_SPAWN_SETPGROUP)
 07-01-05 misc/error.c: fix multibyte vs. printable logic
@@ -3022,6 +3074,18 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libcmd changes">libcmd changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
+07-03-28 date.c: add --unelepsed=scale, -U: fmtelapsed() =&gt; strelapsed()
+07-03-25 wclib.h: iswspace() requires &lt;wctype.h&gt;!
+07-03-11 tty.c: add sysV --line-number, -l
+07-02-26 Makefile: sumlib.o: direct extract from +lsum (vcodex someday)
+07-02-24 Makefile: tweak cmdext.h action for --mam bootstrap
+07-02-09 Makefile: { cmdext.h cmdlist.h } depend on *.c list!
+07-02-09 Makefile: +lsum to bring in static -lsum (no dynamic right now)
+07-02-07 cksum.c: move from src/cmd/std with ftwalk =&gt; fts
+07-02-07 getconf.c: handle /bin == /usr/bin in defer logic
+07-01-26 chmod.c: don't FTS_FOLLOW if !FTS_PHYSICAL
+07-01-23 cut.c: Cut_t variable dimension list&#0091;&#0093; must be last member
+07-01-22 uname.c: fix -h typo that clobbered astconf() state -- ouch
 07-01-02 fmt.c: fix buffer splice off by one bug -- what else
 06-11-23 cmd.h: because of proto cmdinit cannot be a function like macro
 06-11-21 cp.c: fix 06-10-31 const dot&#0091;&#0093; readonly assignment
@@ -3230,6 +3294,20 @@
 
 </PRE>
 <P>
+<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libsum changes">libsum changes</A></H3></FONT></FONT></CENTER>
+<PRE>
+
+05-02-14 sumlib.c: split into sum-*.c
+	 sum-sha2.c: add SHA { 256 384 512 }
+04-02-29 Makefile: compile with $(CC.PIC) for codexlib/sum $(CC.DLL)
+03-12-16 add { crc prng } generic methods and maps&#0091;&#0093; to these methods
+03-12-16 sum.h,sumlib.c: add sumdata()
+03-09-29 sumlib.c: fix FNV to use ^ instead of +
+03-04-28 sumlib.c: drop md5 `zeroize' for performance
+	 sumlib.c: add FIPS 180-1 SHA-1
+
+</PRE>
+<P>
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libdll changes">libdll changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
@@ -3280,7 +3358,7 @@
 <TR>
 <TD align=left></TD>
 <TD align=center></TD>
-<TD align=right>January 12, 2007</TD>
+<TD align=right>March 29, 2007</TD>
 </TR>
 </TABLE>
 <P>
diff -r -N -u ksh93_2007_01_11/lib/package/ast-ksh.pkg ksh93_2007_03_28/lib/package/ast-ksh.pkg
--- ksh93_2007_01_11/lib/package/ast-ksh.pkg	2005-02-10 10:00:52.000000000 +0100
+++ ksh93_2007_03_28/lib/package/ast-ksh.pkg	2007-02-23 19:05:30.000000000 +0100
@@ -1,4 +1,4 @@
-ast-ksh :PACKAGE: ksh93 libast libcmd libdll
+ast-ksh :PACKAGE: ksh93 libast libcmd libsum libdll
 
 :COVERS: ksh
 
diff -r -N -u ksh93_2007_01_11/lib/package/ast-ksh.README ksh93_2007_03_28/lib/package/ast-ksh.README
--- ksh93_2007_01_11/lib/package/ast-ksh.README	2007-01-12 10:54:35.000000000 +0100
+++ ksh93_2007_03_28/lib/package/ast-ksh.README	2007-03-29 19:07:08.000000000 +0200
@@ -92,6 +92,33 @@
 
 :::::::: ksh93 ::::::::
 
+07-03-08  --- Release ksh93s+  ---
+07-03-08  A bug in which set +o output command line options has been fixed.
+07-03-08  A bug in which an error in read (for example, an invalid variable
+	  name), could leave the terminal in raw mode has been fixed.
+07-03-06  A bug in which read could core dump when specified with an array
+	  variable with a subscript that is an arithmetic expression has
+	  been fixed.
+07-03-06  Several serious bugs with the restricted shell were reported and
+	  fixed.
+07-03-02  If a job is stopped, and subsequently restarted with a CONT
+	  signal and exits normally, ksh93 was incorrectly exiting with
+	  the exit status of the stop signal number.
+07-02-26  M-^L added to emacs mode to clear the screen.
+07-02-26  A bug in which setting a variable readonly in a subshell would
+	  cause an unset error when the subshell completed has been fixed. 
+07-02-19  The format with printf uses the new = flag to center the output.
+07-02-19  A bug in which ksh93 did not allow multibyte characters in
+	  identifier names has been fixed.
+07-02-19  A bug introduced in ksh93 that causes global compound variable
+	  definitions inside functions to exit with "no parent" has been fixed.
+07-02-19  A bug in which using compound commands in process redirection
+	  arguments would give syntax errors <(...) and >(...) has been fixed.
+07-01-29  A bug which caused the shell to core dump which can occur when a
+	  built-in exits without closing files that it opens has been fixed.
+07-01-26  A bug in which ~(E) in patterns containing \ that are not inside ()
+	  has been fixed.
+
 06-12-29  --- Release ksh93s  ---
 06-12-29  A bug in which the value of IFS could be changed after a command
 	  substitution has been fixed. 
@@ -1521,6 +1548,30 @@
 
 :::::::: libast ::::::::
 
+07-03-28 misc/optget.c: fix l10n --?-
+07-03-25 features/common: fix { ast_std.h ast_map.h stdint.h } logic
+07-03-21 error.h: move from error_info to (*_error_data_)
+07-03-21 option.h: move from opt_info to (*_opt_data_)
+07-03-19 regex/regdecomp.c: fix REX_ONECHAR escapes and add REX_KMP
+07-03-11 tm/tmxscan.c,regex/regnexec.c: fix strict-alias transgressions
+07-02-27 comp/conf.sh: handle native getconf invalid numeric values
+07-02-21 comp/conf.sh,comp/conf.tab: handle SSIZE_MAX vs _POSIX_SSIZE_MAX
+07-02-20 sfio/sfvprintf.c: handle SF_WCWIDTH justification
+07-02-14 features/common: cover <stdint.h>, move to int_(bits)_t
+07-02-14 include/int.h: drop
+07-02-14 include/sfio.h: add SF_WCWIDTH
+07-02-12 comp/conf.sh: fix CONF_LIMIT bug that missed ULONG_MAX etc.
+07-02-12 comp/conf.tab: *LONGLONG* => *LLONG* to match posix
+07-02-12 features/float: *LONGLONG* => *LLONG* to match posix
+07-02-12 port/astconf.c: handle CONF_LIMITS_DEF with no deferral
+07-02-12 stdio/vasprintf.c: add trailing '\0' -- doh
+07-02-04 string/fmtelapsed.c: fix naive multi month/year logic
+07-02-02 misc/optget.c: add --??posix for getopts(1)/getopt(3)
+07-01-26 string/chresc.c: use mbchar()
+07-01-26 misc/optget.c: handle "o:-:" usage for old-style long options
+07-01-22 sfio/sfdisc.c,sfpool.c: handle push on streams with pending peek
+07-01-22 include/sfio.h: mv Sfieee_t to sfio/sfhdr.h
+07-01-17 tm/tmxfmt.c: fix terminating nil logic which clobbered size-1
 07-01-11 misc/stk.c: a 2 day marathon bug fix (can we release now dr ek?)
 07-01-05 comp/spawnveg.c: posix_spawnattr_setflags(POSIX_SPAWN_SETPGROUP)
 07-01-05 misc/error.c: fix multibyte vs. printable logic
@@ -2916,6 +2967,18 @@
 
 :::::::: libcmd ::::::::
 
+07-03-28 date.c: add --unelepsed=scale, -U: fmtelapsed() => strelapsed()
+07-03-25 wclib.h: iswspace() requires <wctype.h>!
+07-03-11 tty.c: add sysV --line-number, -l
+07-02-26 Makefile: sumlib.o: direct extract from +lsum (vcodex someday)
+07-02-24 Makefile: tweak cmdext.h action for --mam bootstrap
+07-02-09 Makefile: { cmdext.h cmdlist.h } depend on *.c list!
+07-02-09 Makefile: +lsum to bring in static -lsum (no dynamic right now)
+07-02-07 cksum.c: move from src/cmd/std with ftwalk => fts
+07-02-07 getconf.c: handle /bin == /usr/bin in defer logic
+07-01-26 chmod.c: don't FTS_FOLLOW if !FTS_PHYSICAL
+07-01-23 cut.c: Cut_t variable dimension list[] must be last member
+07-01-22 uname.c: fix -h typo that clobbered astconf() state -- ouch
 07-01-02 fmt.c: fix buffer splice off by one bug -- what else
 06-11-23 cmd.h: because of proto cmdinit cannot be a function like macro
 06-11-21 cp.c: fix 06-10-31 const dot[] readonly assignment
@@ -3122,6 +3185,17 @@
 95-02-14 fix mkdir -p symlink bug
 	 fix mkdir '/' skip bug that went one too far
 
+:::::::: libsum ::::::::
+
+05-02-14 sumlib.c: split into sum-*.c
+	 sum-sha2.c: add SHA { 256 384 512 }
+04-02-29 Makefile: compile with $(CC.PIC) for codexlib/sum $(CC.DLL)
+03-12-16 add { crc prng } generic methods and maps[] to these methods
+03-12-16 sum.h,sumlib.c: add sumdata()
+03-09-29 sumlib.c: fix FNV to use ^ instead of +
+03-04-28 sumlib.c: drop md5 `zeroize' for performance
+	 sumlib.c: add FIPS 180-1 SHA-1
+
 :::::::: libdll ::::::::
 
 06-10-11 dllscan.c: check sfstruse() return values -- doh
diff -r -N -u ksh93_2007_01_11/lib/package/ast-ksh.ver ksh93_2007_03_28/lib/package/ast-ksh.ver
--- ksh93_2007_01_11/lib/package/ast-ksh.ver	2007-01-12 10:54:34.000000000 +0100
+++ ksh93_2007_03_28/lib/package/ast-ksh.ver	2007-03-28 18:39:59.000000000 +0200
@@ -1 +1 @@
-ast-ksh 2007-01-11 2007-01-11 1
+ast-ksh 2007-03-28 2007-03-28 1
diff -r -N -u ksh93_2007_01_11/lib/package/ksh.ver ksh93_2007_03_28/lib/package/ksh.ver
--- ksh93_2007_01_11/lib/package/ksh.ver	2007-01-12 10:54:33.000000000 +0100
+++ ksh93_2007_03_28/lib/package/ksh.ver	2007-03-29 19:07:07.000000000 +0200
@@ -1 +1 @@
-ksh 2007-01-11 2007-01-11 1
+ksh 2007-03-28 2007-03-28 1
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/cd_pwd.c ksh93_2007_03_28/src/cmd/ksh93/bltins/cd_pwd.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/cd_pwd.c	2003-04-17 17:05:14.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/cd_pwd.c	2007-02-27 08:16:23.000000000 +0100
@@ -102,8 +102,8 @@
 #if _WINIX
 	if(*dir != '/' && (dir[1]!=':'))
 #else
-#endif /* _WINIX */
 	if(*dir != '/')
+#endif /* _WINIX */
 	{
 #ifdef PATH_BFPATH
 		if(!(cdpath = (Pathcomp_t*)shp->cdpathlist) && (dp=(CDPNOD)->nvalue.cp))
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/getopts.c ksh93_2007_03_28/src/cmd/ksh93/bltins/getopts.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/getopts.c	2006-08-11 19:36:23.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/getopts.c	2007-02-14 09:17:46.000000000 +0100
@@ -175,7 +175,7 @@
 	{
 		Sfdouble_t d;
 		d = opt_info.number;
-		nv_putval(np, (char*)&d, NV_INTEGER|NV_DOUBLE|NV_LONG|NV_RDONLY);
+		nv_putval(np, (char*)&d, NV_LDOUBLE|NV_RDONLY);
 	}
 	nv_close(np);
 	sh_popcontext(&buff);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/print.c ksh93_2007_03_28/src/cmd/ksh93/bltins/print.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/print.c	2006-10-13 22:16:05.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/print.c	2007-02-14 08:54:57.000000000 +0100
@@ -523,8 +523,8 @@
 	char*		lastchar = "";
 	register int	neg = 0;
 	Sfdouble_t	d;
-	Sfdouble_t	longmin = LDBL_LONGLONG_MIN;
-	Sfdouble_t	longmax = LDBL_LONGLONG_MAX;
+	Sfdouble_t	longmin = LDBL_LLONG_MIN;
+	Sfdouble_t	longmax = LDBL_LLONG_MAX;
 	int		format = fe->fmt;
 	int		n;
 	int		fold = fe->base;
@@ -599,14 +599,14 @@
 			np = nv_open(argp,sh.var_tree,NV_VARNAME|NV_NOASSIGN|NV_NOARRAY);
 			nv_unset(np);
 			nv_onattr(np,NV_INTEGER);
-			if (np->nvalue.lp = new_of(long,0))
+			if (np->nvalue.lp = new_of(int32_t,0))
 				*np->nvalue.lp = 0;
 			nv_setsize(np,10);
-			if(sizeof(int)==sizeof(long))
+			if(sizeof(int)==sizeof(int32_t))
 				value->ip = (int*)np->nvalue.lp;
 			else
 			{
-				long sl = 1;
+				int32_t sl = 1;
 				value->ip = (int*)(((char*)np->nvalue.lp) + (*((char*)&sl) ? 0 : sizeof(int)));
 			}
 			nv_close(np);
@@ -645,7 +645,7 @@
 		case 'X':
 		case 'u':
 		case 'U':
-			longmax = LDBL_ULONGLONG_MAX;
+			longmax = LDBL_ULLONG_MAX;
 		case '.':
 			if(fe->size==2 && strchr("bcsqHPRQTZ",*fe->form))
 			{
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/read.c ksh93_2007_03_28/src/cmd/ksh93/bltins/read.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/read.c	2006-12-19 20:19:01.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/read.c	2007-03-08 23:16:47.000000000 +0100
@@ -183,36 +183,11 @@
 	struct	checkpt		buff;
 	if(!(iop=shp->sftable[fd]) && !(iop=sh_iostream(fd)))
 		return(1);
-	if(flags>>D_FLAG)	/* delimiter not new-line or fixed size read */
-	{
-		if(flags&(N_FLAG|NN_FLAG))
-			size = ((unsigned)flags)>>D_FLAG;
-		else
-			delim = ((unsigned)flags)>>D_FLAG;
-		if(shp->fdstatus[fd]&IOTTY)
-			tty_raw(fd,1);
-	}
-	if(!(flags&(N_FLAG|NN_FLAG)))
-	{
-		/* set up state table based on IFS */
-		ifs = nv_getval(np=nv_scoped(IFSNOD));
-		if((flags&R_FLAG) && shp->ifstable['\\']==S_ESC)
-			shp->ifstable['\\'] = 0;
-		else if(!(flags&R_FLAG) && shp->ifstable['\\']==0)
-			shp->ifstable['\\'] = S_ESC;
-		shp->ifstable[delim] = S_NL;
-		if(delim!='\n')
-		{
-			shp->ifstable['\n'] = 0;
-			nv_putval(np, ifs, NV_RDONLY);
-		}
-		shp->ifstable[0] = S_EOF;
-	}
 	if(names && (name = *names))
 	{
 		if(val= strchr(name,'?'))
 			*val = 0;
-		np = nv_open(name,shp->var_tree,NV_NOASSIGN|NV_VARNAME);
+		np = nv_open(name,shp->var_tree,NV_NOASSIGN|NV_VARNAME|NV_ARRAY);
 		if((flags&V_FLAG) && shp->ed_context)
 			((struct edit*)shp->ed_context)->e_default = np;
 		if(flags&A_FLAG)
@@ -235,6 +210,32 @@
 		else
 			np = REPLYNOD;
 	}
+	if(flags>>D_FLAG)	/* delimiter not new-line or fixed size read */
+	{
+		if(flags&(N_FLAG|NN_FLAG))
+			size = ((unsigned)flags)>>D_FLAG;
+		else
+			delim = ((unsigned)flags)>>D_FLAG;
+		if(shp->fdstatus[fd]&IOTTY)
+			tty_raw(fd,1);
+	}
+	if(!(flags&(N_FLAG|NN_FLAG)))
+	{
+		Namval_t *mp;
+		/* set up state table based on IFS */
+		ifs = nv_getval(mp=nv_scoped(IFSNOD));
+		if((flags&R_FLAG) && shp->ifstable['\\']==S_ESC)
+			shp->ifstable['\\'] = 0;
+		else if(!(flags&R_FLAG) && shp->ifstable['\\']==0)
+			shp->ifstable['\\'] = S_ESC;
+		shp->ifstable[delim] = S_NL;
+		if(delim!='\n')
+		{
+			shp->ifstable['\n'] = 0;
+			nv_putval(mp, ifs, NV_RDONLY);
+		}
+		shp->ifstable[0] = S_EOF;
+	}
 	sfclrerr(iop);
 	if(np->nvfun && np->nvfun->disc->readf)
 		return((* np->nvfun->disc->readf)(np,iop,delim,np->nvfun));
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/shopen.c ksh93_2007_03_28/src/cmd/ksh93/bltins/shopen.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/shopen.c	2006-10-13 05:58:32.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/shopen.c	2007-03-20 20:08:28.000000000 +0100
@@ -17,15 +17,17 @@
 *                  David Korn <dgk at research.att.com>                   *
 *                                                                      *
 ***********************************************************************/
+#pragma prototyped
 
 static const char id[] = "\n@(#)$Id: open (AT&T Research) 1998-07-07 $\0\n";
 
-#include	<sys/stat.h>
-#include	<fcntl.h>
 #include	<shell.h>
 #include	<option.h>
 #include	<stk.h>
 #include	<tm.h>
+#ifndef SH_DICT
+#   define SH_DICT     "libshell"
+#endif
 
 /*
  * time formatting related 
@@ -52,7 +54,7 @@
 	char *last;
 	if(val)
 	{
-		time_t t;
+		int32_t t;
 		if(flag&NV_INTEGER)
 		{
 			if(flag&NV_LONG)
@@ -61,9 +63,11 @@
 				t = *(double*)val;
 		}
 		else
+		{
 			t = tmdate(val, &last, (time_t*)0);
-		if(*last)
-			errormsg(SH_DICT,ERROR_exit(1),"%s: invalid date/time string",val);
+			if(*last)
+				errormsg(SH_DICT,ERROR_exit(1),"%s: invalid date/time string",val);
+		}
 		nv_putv(np,(char*)&t,NV_INTEGER,nfp);
 	}
 	else
@@ -121,7 +125,7 @@
 {
 	if(val)
 	{
-		mode_t mode;
+		int32_t mode;
 		char *last;
 		if(flag&NV_INTEGER)
 		{
@@ -131,9 +135,11 @@
 				mode = *(double*)val;
 		}
 		else
+		{
 			mode = strperm(val, &last,0);
-		if(*last)
-			errormsg(SH_DICT,ERROR_exit(1),"%s: invalid mode string",val);
+			if(*last)
+				errormsg(SH_DICT,ERROR_exit(1),"%s: invalid mode string",val);
+		}
 		nv_putv(np,(char*)&mode,NV_INTEGER,nfp);
 	}
 	else
@@ -238,6 +244,7 @@
 	if(!(nq=nodes[n]))
 	{
 		nodes[n] = nq = sh_newnode(fp,np);
+		nfp->last = "";
 	}
 	if(name[len]==0)
 		return(nq);
@@ -328,7 +335,7 @@
 	if(!outfile)
 		return((char*)0);
 	sfputc(out,0);
-	return((char*)out->data);
+	return((char*)out->_data);
 }
 
 static char *get_classval(Namval_t* np, Namfun_t* nfp)
@@ -359,7 +366,7 @@
 	fieldcreate
 };
 
-static mkclass(Namval_t *np, Shclass_t *sp)
+static int mkclass(Namval_t *np, Shclass_t *sp)
 {
 	struct dcclass *tcp = newof(NULL,struct dcclass,1,sp->nelem*sizeof(Namval_t*)); 
 	if(!tcp)
@@ -377,29 +384,29 @@
  */
 static struct stat *Sp;
 
+struct filedata
+{
+	struct stat	statb;
+	int		fd;
+	char		*name;
+};
+
 static Shfield_t filefield[] =
 {
 	{ "atime", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_atime), sizeof(Sp->st_atime), make_time},
 	{ "ctime", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_ctime), sizeof(Sp->st_ctime), make_time},
 	{ "dev",   NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_dev),sizeof(Sp->st_dev)},
-	{ "fd",    NV_INTEGER|NV_RDONLY, sizeof(struct stat), 		sizeof(int)},
+	{ "fd",    NV_INTEGER|NV_RDONLY, offsetof(struct filedata,fd), 		sizeof(int)},
 	{ "gid",   NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_gid), sizeof(Sp->st_gid)},
 	{ "ino",   NV_LONG|NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_ino), sizeof(Sp->st_ino)},
-	{ "name",   NV_RDONLY, sizeof(struct stat)+sizeof(int), 	-1 },
-	{ "nlink", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_nlink), sizeof(Sp->st_nlink)},
 	{ "mode",  NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_mode), sizeof(Sp->st_mode), make_mode},
 	{ "mtime", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_mtime), sizeof(Sp->st_mtime), make_time},
+	{ "name",   NV_RDONLY, offsetof(struct filedata,name), 	-1 },
+	{ "nlink", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_nlink), sizeof(Sp->st_nlink)},
 	{ "size",  NV_LONG|NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_size), sizeof(Sp->st_size)},
 	{ "uid",   NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_uid), sizeof(Sp->st_uid)}
 };
 
-struct filedata
-{
-	struct stat	statb;
-	int		fd;
-	char		*name;
-};
-
 static Shclass_t Fileclass =
 {
 	sizeof(filefield)/sizeof(*filefield),
@@ -410,7 +417,35 @@
 
 #define letterbit(bit)	(1<<((bit)-'a'))
 
-static const char sh_optopen[] = "abceirwm:[mode] var file";
+static const char sh_optopen[] =
+"[-?\n@(#)$Id: open (AT&T Labs Research) 2007-03-11 $\n]"
+"[-author?David Korn <dgk at research.att.com>]"
+"[-license?http://www.opensource.org/licenses/cpl1.0.txt]"
+"[+NAME? open - create a shell variable correspnding to a file]"
+"[+DESCRIPTION?\bopen\b creates the compound variable \avar\a correspinding "
+	"to the file given by the pathname \afile\a.  The elements of \avar\a "
+	"are the names of elements in the \astat\a structure with the \bst_\b "
+	"prefix removed.]"
+"[+?If the \b-r\b and/or \b-w\b mode is specified, then \afile\a is opened and "
+	"the variable \avar\a\b.fd\b is the file descriptor.]"
+"[a:append?Open for append.]"
+"[b:binary?Open in binary mode.]"
+"[c:create?Open for create.]"
+"[i:inherit?Open without the close-on-exec bit set.]"
+"[r:read?Open with read access.]"
+"[w:write?Open with write access.]"
+"[m:mode]:[mode:=rwrwrw?Open with access mode \amode\a.]"
+"[x:exclusive?Open exclusive.]"
+"\n"
+"\nvar file\n"
+"\n"
+"[+EXIT STATUS?]{"
+        "[+0?Success.]"
+        "[+>0?An error occurred.]"
+"}"
+"[+SEE ALSO?\bstat\b(2)]"
+;
+
 
 extern int b_open(int argc, char *argv[], void *extra)
 {
@@ -439,7 +474,7 @@
 		oflag |= O_TEXT;
 #endif
 		break;
-	    case 'e':
+	    case 'x':
 		oflag |= O_EXCL;
 		break;
 	    case 'c':
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/typeset.c ksh93_2007_03_28/src/cmd/ksh93/bltins/typeset.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/typeset.c	2007-01-12 01:02:47.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/typeset.c	2007-03-22 17:19:09.000000000 +0100
@@ -45,6 +45,7 @@
 struct tdata
 {
 	Shell_t 	*sh;
+	Namval_t	*tp;
 	Sfio_t  	*outfile;
 	char    	*prefix;
 	int     	aflag;
@@ -52,7 +53,6 @@
 	int     	scanmask;
 	Dt_t 		*scanroot;
 	char    	**argnam;
-	Namval_t	*tp;
 };
 
 
@@ -339,9 +339,11 @@
 {
 	register char *name;
 	char *last = 0;
-	int nvflags=(flag&(NV_ARRAY|NV_NOARRAY|NV_NOSCOPE|NV_VARNAME|NV_IDENT|NV_ASSIGN));
+	int nvflags=(flag&(NV_ARRAY|NV_NOARRAY|NV_VARNAME|NV_IDENT|NV_ASSIGN));
 	int r=0, ref=0;
 	Shell_t *shp =tp->sh;
+	if(!sh.prefix)
+		nvflags |= NV_NOSCOPE;
 	flag &= ~(NV_NOARRAY|NV_NOSCOPE|NV_VARNAME|NV_IDENT);
 	if(argv[1])
 	{
@@ -490,7 +492,15 @@
 			if(ref)
 			{
 				if(tp->aflag=='-')
-					nv_setref(np);
+				{
+					Dt_t *hp=0;
+					if(nv_isattr(np,NV_PARAM) && shp->st.prevst)
+					{
+						if(!(hp=(Dt_t*)shp->st.prevst->save_tree))
+							hp = dtvnext(shp->var_tree);
+					}
+					nv_setref(np,hp,NV_VARNAME);
+				}
 				else
 					nv_unref(np);
 			}
@@ -870,10 +880,10 @@
 		sfputc(file,flag);
 		if(flag != '\n')
 		{
-			if(nv_isref(np) && np->nvenv)
+			if(nv_isref(np) && nv_refsub(np))
 			{
 				sfputr(file,sh_fmtq(cp),-1);
-				sfprintf(file,"[%s]\n", sh_fmtq(np->nvenv));
+				sfprintf(file,"[%s]\n", sh_fmtq(nv_refsub(np)));
 			}
 			else
 				sfputr(file,sh_fmtq(cp),'\n');
@@ -921,7 +931,7 @@
 	tp->outfile = file;
 	if(flag&NV_INTEGER)
 		tp->scanmask |= (NV_DOUBLE|NV_EXPNOTE);
-	namec = nv_scan(root,nullscan,(void*)0,tp->scanmask,flag);
+	namec = nv_scan(root,nullscan,(void*)tp,tp->scanmask,flag);
 	argv = tp->argnam  = (char**)stakalloc((namec+1)*sizeof(char*));
 	namec = nv_scan(root, pushname, (void*)tp, tp->scanmask, flag);
 	if(mbcoll())
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/data/builtins.c ksh93_2007_03_28/src/cmd/ksh93/data/builtins.c
--- ksh93_2007_01_11/src/cmd/ksh93/data/builtins.c	2006-12-19 20:16:28.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/data/builtins.c	2007-03-27 20:07:41.000000000 +0200
@@ -21,6 +21,7 @@
 
 #include	<shell.h>
 #include	<signal.h>
+#include	"defs.h"
 #include	"shtable.h"
 #include	"ulimit.h"
 #include	"name.h"
@@ -36,13 +37,17 @@
 #   define bltin(x)	0
 #endif
 
-#if SHOPT_CMDLIB_DIR
-#   undef  SHOPT_CMDLIB_BLTIN
-#   define SHOPT_CMDLIB_BLTIN	1
-#   define BDIR		SH_CMDLIB_DIR "/"
-#else
-#   define BDIR
+#ifndef SH_CMDLIB_DIR
+#	define SH_CMDLIB_DIR	"/opt/ast/bin"
+#endif
+#if defined(SHOPT_CMDLIB_DIR) && !defined(SHOPT_CMDLIB_HDR)
+#	define SHOPT_CMDLIB_HDR	<cmdlist.h>
 #endif
+#define Q(f)		#f	/* libpp cpp workaround -- fixed 2005-04-11 */
+#define CMDLIST(f)	SH_CMDLIB_DIR "/" Q(f), NV_BLTIN|NV_NOFREE, bltin(f),
+
+#undef	basename
+#undef	dirname
 
 /*
  * The order up through "[" is significant
@@ -62,6 +67,7 @@
 	"test",		NV_BLTIN|BLT_ENV|NV_NOFREE,	bltin(test),
 	"[",		NV_BLTIN|BLT_ENV,		bltin(test),
 	"let",		NV_BLTIN|BLT_ENV,		bltin(let),
+	"export",	NV_BLTIN|BLT_SPC|BLT_DCL,	bltin(readonly),
 #if SHOPT_BASH
 	"local",	NV_BLTIN|BLT_ENV|BLT_SPC|BLT_DCL,bltin(typeset),
 #endif
@@ -72,7 +78,6 @@
 	"alias",	NV_BLTIN|BLT_SPC|BLT_DCL,	bltin(alias),
 	"hash",		NV_BLTIN|BLT_SPC|BLT_DCL,	bltin(alias),
 	"exit",		NV_BLTIN|BLT_ENV|BLT_SPC,	bltin(return),
-	"export",	NV_BLTIN|BLT_SPC|BLT_DCL,	bltin(readonly),
 	"eval",		NV_BLTIN|BLT_ENV|BLT_SPC|BLT_EXIT,bltin(eval),
 	"fc",		NV_BLTIN|BLT_ENV|BLT_EXIT,	bltin(hist),
 	"hist",		NV_BLTIN|BLT_ENV|BLT_EXIT,	bltin(hist),
@@ -100,7 +105,7 @@
 	"jobs",		NV_BLTIN|BLT_ENV,		bltin(jobs),
 #endif	/* JOBS */
 	"false",	NV_BLTIN|BLT_ENV,		bltin(false),
-	"/bin/getconf",	NV_BLTIN|BLT_ENV,		bltin(getconf),
+SH_CMDLIB_DIR "/getconf",NV_BLTIN|BLT_ENV,		bltin(getconf),
 	"getopts",	NV_BLTIN|BLT_ENV,		bltin(getopts),
 	"print",	NV_BLTIN|BLT_ENV,		bltin(print),
 	"printf",	NV_BLTIN|NV_NOFREE,		bltin(printf),
@@ -120,25 +125,21 @@
 	"wait",		NV_BLTIN|BLT_ENV|BLT_EXIT,	bltin(wait),
 	"type",		NV_BLTIN|BLT_ENV,		bltin(whence),
 	"whence",	NV_BLTIN|BLT_ENV,		bltin(whence),
-#if SHOPT_CMDLIB_BLTIN
-#define Q(f)		#f	/* libpp cpp workaround -- fixed 2005-04-11 */
-#define CMDLIST(f)	BDIR Q(f), NV_BLTIN|NV_NOFREE, bltin(f),
-#include <cmdlist.h>
-#undef	CMDLIST
-#undef	Q
+#ifdef SHOPT_CMDLIB_HDR
+#include SHOPT_CMDLIB_HDR
 #else
-	"/bin/basename",NV_BLTIN|NV_NOFREE,		bltin(basename),
-	"/bin/chmod",	NV_BLTIN|NV_NOFREE,		bltin(chmod),
-	"/bin/dirname",	NV_BLTIN|NV_NOFREE,		bltin(dirname),
-	"/bin/head",	NV_BLTIN|NV_NOFREE,		bltin(head),
-	"/bin/mkdir",	NV_BLTIN|NV_NOFREE,		bltin(mkdir),
-	"/bin/logname",	NV_BLTIN|NV_NOFREE,		bltin(logname),
-	"/bin/cat",	NV_BLTIN|NV_NOFREE,		bltin(cat),
-	"/bin/cmp",	NV_BLTIN|NV_NOFREE,		bltin(cmp),
-	"/bin/cut",	NV_BLTIN|NV_NOFREE,		bltin(cut),
-	"/bin/uname",	NV_BLTIN|NV_NOFREE,		bltin(uname),
-	"/bin/wc",	NV_BLTIN|NV_NOFREE,		bltin(wc),
-	"/bin/sync",	NV_BLTIN|NV_NOFREE,		bltin(sync),
+	CMDLIST(basename)
+	CMDLIST(chmod)
+	CMDLIST(dirname)
+	CMDLIST(head)
+	CMDLIST(mkdir)
+	CMDLIST(logname)
+	CMDLIST(cat)
+	CMDLIST(cmp)
+	CMDLIST(cut)
+	CMDLIST(uname)
+	CMDLIST(wc)
+	CMDLIST(sync)
 #endif
 	"",		0, 0 
 };
@@ -1170,6 +1171,9 @@
 		"the collating element \aname\a.]"
 	"[+-?The escape sequence \b\\x{\b\ahex\a\b}\b expands to the "
 		"character corresponding to the hexidecimal value \ahex\a.]"
+	"[+-?The format modifier flag \b=\b can be used to center a field to "
+		"a specified width.  When the output is a terminal, the "
+		"character width is used rather than the number of bytes.]"
 	"[+-?Each of the integral format specifiers can have a third "
 		"modifier after width and precision that specifies the "
 		"base of the conversion from 2 to 64.  In this case the "
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/edit/emacs.c ksh93_2007_03_28/src/cmd/ksh93/edit/emacs.c
--- ksh93_2007_01_11/src/cmd/ksh93/edit/emacs.c	2006-11-29 23:12:00.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/edit/emacs.c	2007-02-27 02:53:00.000000000 +0100
@@ -63,6 +63,7 @@
 
 #include	<ast.h>
 #include	<ctype.h>
+#include	"FEATURE/cmds"
 #if KSHELL
 #   include	"defs.h"
 #endif	/* KSHELL */
@@ -989,6 +990,12 @@
 			draw(ep,UPDATE);
 			return(-1);
 
+#ifdef _cmd_tput
+		case cntl('L'): /* clear screen */
+			sh_trap("tput clear", 0);
+			draw(ep,REFRESH);
+			return(-1);
+#endif
 		case '[':	/* feature not in book */
 			switch(i=ed_getchar(ep->ed,1))
 			{
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/features/math.sh ksh93_2007_03_28/src/cmd/ksh93/features/math.sh
--- ksh93_2007_01_11/src/cmd/ksh93/features/math.sh	2007-01-04 23:03:11.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/features/math.sh	2007-02-06 20:17:30.000000000 +0100
@@ -20,7 +20,7 @@
 : generate the ksh math builtin table
 : include math.tab
 
-# @(#)math.sh (AT&T Research) 2007-01-04
+# @(#)math.sh (AT&T Research) 2007-02-02
 
 command=$0
 iffeflags="-n -v -F ast_standards.h"
@@ -51,23 +51,19 @@
 
 eval `iffe $iffeflags -c "$cc" - typ long.double : lib $tests $iffehdrs $iffelibs 2>&$stderr`
 lib=
-mac=
 for name in $names
 do	eval x='$'_lib_${name}l y='$'_lib_${name}
 	case $x in
 	1)	lib="$lib,${name}l" ;;
-	'')	mac="$mac,${name}l" ;;
 	esac
 	case $y in
 	1)	case $x in
 		'')	lib="$lib,${name}" ;;
 		esac
 		;;
-	'')	mac="$mac,${name}" ;;
 	esac
 done
-eval `iffe $iffeflags -c "$cc" - dat,npt $lib $iffehdrs $iffelibs 2>&$stderr`
-eval `iffe $iffeflags -c "$cc" - mac $mac $iffehdrs 2>&$stderr`
+eval `iffe $iffeflags -c "$cc" - dat,npt,mac $lib $iffehdrs $iffelibs 2>&$stderr`
 
 cat <<!
 #pragma prototyped
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/features/poll ksh93_2007_03_28/src/cmd/ksh93/features/poll
--- ksh93_2007_01_11/src/cmd/ksh93/features/poll	2006-12-10 10:27:00.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/features/poll	2007-03-20 22:33:33.000000000 +0100
@@ -60,6 +60,7 @@
 }end
 tst	socketpair_devfd note{ /dev/fd/N handles socketpair() }end execute{
 	#include <ast.h>
+	#include <fs3d.h>
 	#include <sys/types.h>
 	#include <sys/socket.h>
 	int main()
@@ -67,6 +68,7 @@
 		int		devfd;
 		int		n;
 		int		sfd[2];
+		fs3d(FS3D_OFF);
 		close(0);
 		open("/dev/null", O_RDONLY);
 		if ((n = open("/dev/fd/0", O_RDONLY)) < 0)
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/builtins.h ksh93_2007_03_28/src/cmd/ksh93/include/builtins.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/builtins.h	2004-01-14 21:33:18.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/builtins.h	2007-03-27 20:09:44.000000000 +0200
@@ -38,8 +38,9 @@
 #define SYSTEST		(sh.bltin_cmds+10)
 #define SYSBRACKET	(sh.bltin_cmds+11)
 #define SYSLET		(sh.bltin_cmds+12)
+#define SYSEXPORT	(sh.bltin_cmds+13)
 #if SHOPT_BASH
-#   define SYSLOCAL	(sh.bltin_cmds+13)
+#   define SYSLOCAL	(sh.bltin_cmds+14)
 #else
 #   define SYSLOCAL	0
 #endif
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/defs.h ksh93_2007_03_28/src/cmd/ksh93/include/defs.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/defs.h	2007-01-12 00:43:17.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/defs.h	2007-03-27 20:14:45.000000000 +0200
@@ -69,9 +69,9 @@
 	int		execbrk;
 	int		loopcnt;
 	int		firstline;
-	long		optindex;
-	long		optnum;
-	long		tmout;		/* value for TMOUT */ 
+	int32_t		optindex;
+	int32_t		optnum;
+	int32_t		tmout;		/* value for TMOUT */ 
 	short		optchar;
 	short		opterror;
 	int		ioset;
@@ -133,7 +133,7 @@
 	pid_t		pid;		/* process id of shell */ \
 	pid_t		bckpid;		/* background process id */ \
 	pid_t		cpid; \
-	long		ppid;		/* parent process id of shell */ \
+	int32_t		ppid;		/* parent process id of shell */ \
 	int		topfd; \
 	int		sigmax;		/* maximum number of signals */ \
 	int		savesig; \
@@ -192,6 +192,7 @@
 	void		*jmpbuffer; \
 	void		*mktype; \
 	Sfio_t		*strbuf; \
+	Dt_t		*last_root; \
 	char		ifstable[256]; \
 	Shopt_t		offoptions;
 
@@ -209,6 +210,10 @@
 #define SH_DICT		(void*)e_dict
 #endif
 
+#ifndef SH_CMDLIB_DIR
+#define SH_CMDLIB_DIR	"/opt/ast/bin"
+#endif
+
 /* states */
 /* low numbered states are same as options */
 #define SH_NOFORK	0	/* set when fork not necessary, not a state */
@@ -356,11 +361,11 @@
 #define	sh_onstate(x)	(sh.st.states |= sh_state(x))
 #define	sh_offstate(x)	(sh.st.states &= ~sh_state(x))
 #define	sh_getstate()	(sh.st.states)
-#define	sh_setstate(x)	(sh.st.states = x)
+#define	sh_setstate(x)	(sh.st.states = (x))
 
 #define sh_sigcheck() do{if(sh.trapnote&SH_SIGSET)sh_exit(SH_EXITSIG);} while(0)
 
-extern time_t		sh_mailchk;
+extern int32_t		sh_mailchk;
 extern const char	e_dict[];
 
 /* sh_printopts() mode flags -- set --[no]option by default */
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/edit.h ksh93_2007_03_28/src/cmd/ksh93/include/edit.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/edit.h	2006-12-19 15:41:39.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/edit.h	2007-02-14 08:56:39.000000000 +0100
@@ -129,7 +129,7 @@
 	char	e_inmacro;	/* processing macro expansion */
 #if KSHELL
 	char	e_vi_insert[2];	/* for sh_keytrap */
-	long	e_col;		/* for sh_keytrap */
+	int32_t e_col;		/* for sh_keytrap */
 #else
 	char	e_prbuff[PRSIZE]; /* prompt buffer */
 #endif /* KSHELL */
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/fault.h ksh93_2007_03_28/src/cmd/ksh93/include/fault.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/fault.h	2003-12-19 17:05:05.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/fault.h	2007-03-22 20:54:19.000000000 +0100
@@ -94,7 +94,7 @@
 	int		mode;
 	struct openlist	*olist;
 #if (ERROR_VERSION >= 20030214L)
-	struct Error_context_s err;
+	Error_context_t err;
 #else
 	struct errorcontext err;
 #endif
@@ -103,7 +103,7 @@
 #define sh_pushcontext(bp,n)	( (bp)->mode=(n) , (bp)->olist=0,  \
 				  (bp)->topfd=sh.topfd, (bp)->prev=sh.jmplist, \
 				  (bp)->err = *ERROR_CONTEXT_BASE, \
-					sh.jmplist = (sigjmp_buf*)(bp) \
+					sh.jmplist = (sigjmp_buf*)(&(bp)->buff) \
 				)
 #define sh_popcontext(bp)	(sh.jmplist=(bp)->prev, errorpop(&((bp)->err)))
 
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/fcin.h ksh93_2007_03_28/src/cmd/ksh93/include/fcin.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/fcin.h	2003-02-26 04:29:14.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/fcin.h	2007-03-23 09:14:01.000000000 +0100
@@ -37,6 +37,7 @@
 	unsigned char	*fcptr;		/* pointer to next input char */
 	unsigned char	fcchar;		/* saved character */
 	void (*fcfun)(Sfio_t*,const char*,int);	/* advance function */
+	int		fcleft;		/* for multibyte boundary */
 	Sfoff_t		fcoff;		/* offset for last read */
 } Fcin_t;
 
@@ -54,6 +55,7 @@
 extern int		fcfopen(Sfio_t*);
 extern int		fcclose(void);
 void			fcnotify(void(*)(Sfio_t*,const char*,int));
+extern int		fcmbstate(const char*,int*,int*);
 
 extern Fcin_t		_Fcin;		/* used by macros */
 
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/history.h ksh93_2007_03_28/src/cmd/ksh93/include/history.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/history.h	2003-03-21 18:35:49.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/history.h	2007-02-15 11:00:45.000000000 +0100
@@ -26,7 +26,6 @@
  */
 
 #include	<ast.h>
-#include	<sfio.h>
 
 #define HIST_CHAR	'!'
 #define HIST_VERSION	1		/* history file format version no. */
@@ -36,7 +35,7 @@
 	Sfdisc_t	histdisc;	/* discipline for history */
 	Sfio_t		*histfp;	/* history file stream pointer */
 	char		*histname;	/* name of history file */
-	long		histind;	/* current command number index */
+	int32_t		histind;	/* current command number index */
 	int		histsize;	/* number of accessible history lines */
 #ifdef _HIST_PRIVATE
 	_HIST_PRIVATE
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/io.h ksh93_2007_03_28/src/cmd/ksh93/include/io.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/io.h	2005-11-23 16:53:38.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/io.h	2007-03-05 15:26:03.000000000 +0100
@@ -75,7 +75,6 @@
    __EXPORT__
 #endif
 extern Sfio_t 	*sh_iostream(int);
-struct ionod;
 extern int	sh_redirect(struct ionod*,int);
 extern void 	sh_iosave(int,int);
 extern void 	sh_iounsave(void);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/lexstates.h ksh93_2007_03_28/src/cmd/ksh93/include/lexstates.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/lexstates.h	2007-01-05 23:23:56.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/lexstates.h	2007-03-14 17:01:46.000000000 +0100
@@ -79,6 +79,8 @@
 #define ST_QNEST	10
 #define ST_NONE		11
 
+#include "FEATURE/locale"
+
 #if _hdr_wchar
 #   include <wchar.h>
 #   if _hdr_wctype
@@ -102,13 +104,19 @@
 #   define isblank(x)      ((x)==' '||(x)=='\t')
 #endif
 
+#undef LEN
 #if SHOPT_MULTIBYTE
+    static int NXT, LEN;
 #   define isaname(c)	((c)>0xff?isalpha(c): sh_lexstates[ST_NAME][(c)]==0)
 #   define isaletter(c)	((c)>0xff?isalpha(c): sh_lexstates[ST_DOL][(c)]==S_ALP && (c)!='.')
 #else
+#   undef mbwide
+#   define mbwide()	(0)
+#   define LEN		1
 #   define isaname(c)	(sh_lexstates[ST_NAME][c]==0)
 #   define isaletter(c)	(sh_lexstates[ST_DOL][c]==S_ALP && (c)!='.')
 #endif
+#define STATE(s,c)  	(mbwide()?(c=fcmbstate(s,&NXT,&LEN),NXT):s[c=fcget()])
 #define isadigit(c)	(sh_lexstates[ST_DOL][c]==S_DIG)
 #define isastchar(c)	((c)=='@' || (c)=='*')
 #define isexp(c)	(sh_lexstates[ST_MACRO][c]==S_PAT||(c)=='$'||(c)=='`')
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/name.h ksh93_2007_03_28/src/cmd/ksh93/include/name.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/name.h	2006-11-13 22:07:05.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/name.h	2007-03-05 14:52:11.000000000 +0100
@@ -35,22 +35,23 @@
 /* Nodes can have all kinds of values */
 union Value
 {
-	const char	*cp;
-	int		*ip;
-	char		c;
-	int		i;
-	unsigned	u;
-	long		*lp;
-	Sflong_t	*llp;	/* for long long arithmetic */
-	short		s;
-	double		*dp;	/* for floating point arithmetic */
-	Sfdouble_t	*ldp;	/* for long floating point arithmetic */
-	struct Namarray	*array;	/* for array node */
-	struct Namval	*np;	/* for Namval_t node */
-	union Value	*up;	/* for indirect node */
-	struct Ufunction *rp;	/* shell user defined functions */
-	struct Namfun	*funp;	/* discipline pointer */
-	int (*bfp)(int,char*[],void*);/* builtin entry point function pointer */
+	const char		*cp;
+	int			*ip;
+	char			c;
+	int			i;
+	unsigned int		u;
+	int32_t			*lp;
+	Sflong_t		*llp;	/* for long long arithmetic */
+	int16_t			s;
+	double			*dp;	/* for floating point arithmetic */
+	Sfdouble_t		*ldp;	/* for long floating point arithmetic */
+	struct Namarray		*array;	/* for array node */
+	struct Namval		*np;	/* for Namval_t node */
+	union Value		*up;	/* for indirect node */
+	struct Ufunction 	*rp;	/* shell user defined functions */
+	struct Namfun		*funp;	/* discipline pointer */
+	struct Namref		*nrp;	/* name reference */
+	int			(*bfp)(int,char*[],void*);/* builtin entry point function pointer */
 };
 
 #include	"nval.h"
@@ -74,6 +75,14 @@
 #define ARRAY_DELETE	2
 
 
+struct Namref
+{
+	Namval_t	*np;
+	Namval_t	*table;
+	Dt_t		*root;
+	char		*sub;
+};
+
 /* This describes a user shell function node */
 struct Ufunction
 {
@@ -84,6 +93,10 @@
 	char	*fname;			/* file name where function defined */
 };
 
+#ifndef ARG_RAW
+    struct argnod;
+#endif /* !ARG_RAW */
+
 /* attributes of Namval_t items */
 
 /* The following attributes are for internal use */
@@ -120,8 +133,11 @@
 
 #define nv_setattr(n,f)	((n)->nvflag = (f))
 #define nv_context(n)	((void*)(n)->nvfun)		/* for builtins */
-#define nv_table(n)	((Namval_t*)((n)->nvfun))	/* for references */
-#define nv_refnode(n)	((Namval_t*)((n)->nvalue.np))	/* for references */
+/* The following are for name references */
+#define nv_refnode(n)	((n)->nvalue.nrp->np)
+#define nv_reftree(n)	((n)->nvalue.nrp->root)
+#define nv_reftable(n)	((n)->nvalue.nrp->table)
+#define nv_refsub(n)	((n)->nvalue.nrp->sub)
 #if SHOPT_OO
 #   define nv_class(np)		(nv_isattr(np,NV_REF|NV_IMPORT)?0:(Namval_t*)((np)->nvenv))
 #endif /* SHOPT_OO */
@@ -141,7 +157,6 @@
 extern int		array_maxindex(Namval_t*);
 extern char 		*nv_endsubscript(Namval_t*, char*, int);
 extern Namfun_t 	*nv_cover(Namval_t*);
-struct argnod;		/* struct not declared yet */
 extern Namarr_t 	*nv_arrayptr(Namval_t*);
 extern int		nv_setnotify(Namval_t*,char **);
 extern int		nv_unsetnotify(Namval_t*,char **);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/nval.h ksh93_2007_03_28/src/cmd/ksh93/include/nval.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/nval.h	2006-09-08 05:18:52.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/include/nval.h	2007-03-21 16:37:54.000000000 +0100
@@ -46,6 +46,7 @@
 typedef struct Namarray Namarr_t;
 typedef struct Nambltin Nambltin_t;
 typedef struct Namtype Namtype_t;
+
 /*
  * This defines the template for nodes that have their own assignment
  * and or lookup functions
@@ -188,6 +189,16 @@
 
 #define NV_PUBLIC	(~(NV_NOSCOPE|NV_ASSIGN|NV_IDENT|NV_VARNAME|NV_NOADD))
 
+/* numeric types */
+#define NV_INT16	(NV_SHORT|NV_INTEGER)
+#define NV_UINT16	(NV_UNSIGN|NV_SHORT|NV_INTEGER)
+#define NV_INT32	(NV_INTEGER)
+#define NV_UNT32	(NV_UNSIGN|NV_INTEGER)
+#define NV_INT64	(NV_LONG|NV_INTEGER)
+#define NV_UINT64	(NV_UNSIGN|NV_LONG|NV_INTEGER)
+#define NV_FLOAT	(NV_SHORT|NV_DOUBLE|NV_INTEGER)
+#define NV_LDOUBLE	(NV_LONG|NV_DOUBLE|NV_INTEGER)
+
 /* name-value pair macros */
 #define nv_isattr(np,f)		((np)->nvflag & (f))
 #define nv_onattr(n,f)		((n)->nvflag |= (f))
@@ -243,8 +254,8 @@
 extern void		*nv_context(Namval_t*);
 extern Namval_t		*nv_create(const char*, Dt_t*, int,Namfun_t*);
 extern Dt_t		*nv_dict(Namval_t*);
-extern Sfdouble_t 	nv_getn(Namval_t*, Namfun_t*);
-extern Sfdouble_t 	nv_getnum(Namval_t*);
+extern Sfdouble_t	nv_getn(Namval_t*, Namfun_t*);
+extern Sfdouble_t	nv_getnum(Namval_t*);
 extern char 		*nv_getv(Namval_t*, Namfun_t*);
 extern char 		*nv_getval(Namval_t*);
 extern Namfun_t		*nv_hasdisc(Namval_t*, const Namdisc_t*);
@@ -257,7 +268,7 @@
 extern int		nv_scan(Dt_t*,void(*)(Namval_t*,void*),void*,int,int);
 extern Namval_t		*nv_scoped(Namval_t*);
 extern char 		*nv_setdisc(Namval_t*,const char*,Namval_t*,Namfun_t*);
-extern void		nv_setref(Namval_t*);
+extern void		nv_setref(Namval_t*, Dt_t*,int);
 extern int		nv_settype(Namval_t*, Namval_t*, int);
 extern void 		nv_setvec(Namval_t*,int,int,char*[]);
 extern void		nv_setvtree(Namval_t*);
@@ -267,6 +278,7 @@
 extern Namval_t		*nv_search(const char *, Dt_t*, int);
 extern void		nv_unscope(void);
 extern char		*nv_name(Namval_t*);
+extern Namval_t		*nv_type(Namval_t*);
 extern const Namdisc_t	*nv_discfun(int);
 
 #ifdef _DLL
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/streval.h ksh93_2007_03_28/src/cmd/ksh93/include/streval.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/streval.h	2006-10-13 17:44:24.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/include/streval.h	2007-02-12 17:55:26.000000000 +0100
@@ -33,34 +33,34 @@
 #endif
 
 #if _ast_fltmax_double
-#define LDBL_LONGLONG_MAX	DBL_LONGLONG_MAX
-#define LDBL_ULONGLONG_MAX	DBL_ULONGLONG_MAX
-#define LDBL_LONGLONG_MIN	DBL_LONGLONG_MIN
+#define LDBL_LLONG_MAX		DBL_LLONG_MAX
+#define LDBL_ULLONG_MAX		DBL_ULLONG_MAX
+#define LDBL_LLONG_MIN		DBL_LLONG_MIN
 #endif
 
-#ifndef LDBL_LONGLONG_MAX
+#ifndef LDBL_LLONG_MAX
 #   ifdef LLONG_MAX
-#	define LDBL_LONGLONG_MAX	((Sfdouble_t)LLONG_MAX)
+#	define LDBL_LLONG_MAX	((Sfdouble_t)LLONG_MAX)
 #   else
-#	ifdef LONGLONG_MAX
-#	   define LDBL_LONGLONG_MAX	((Sfdouble_t)LONGLONG_MAX)
+#	ifdef LLONG_MAX
+#	   define LDBL_LLONG_MAX	((Sfdouble_t)LLONG_MAX)
 #	else
-#	   define LDBL_LONGLONG_MAX	((Sfdouble_t)((((Sflong_t)1) << (8*sizeof(Sflong_t)-1)) -1 ))
+#	   define LDBL_LLONG_MAX	((Sfdouble_t)((((Sflong_t)1) << (8*sizeof(Sflong_t)-1)) -1 ))
 #	endif
 #   endif
 #endif
-#ifndef LDBL_ULONGLONG_MAX
+#ifndef LDBL_ULLONG_MAX
 #   ifdef ULLONG_MAX
-#	define LDBL_ULONGLONG_MAX	((Sfdouble_t)ULLONG_MAX)
+#	define LDBL_ULLONG_MAX		((Sfdouble_t)ULLONG_MAX)
 #   else
-#	define LDBL_ULONGLONG_MAX	(2.*((Sfdouble_t)LDBL_LONGLONG_MAX))
+#	define LDBL_ULLONG_MAX		(2.*((Sfdouble_t)LDBL_LLONG_MAX))
 #   endif
 #endif
-#ifndef LDBL_LONGLONG_MIN
+#ifndef LDBL_LLONG_MIN
 #   ifdef LLONG_MIN
-#	define LDBL_LONGLONG_MIN	((Sfdouble_t)LLONG_MIN)
+#	define LDBL_LLONG_MIN		((Sfdouble_t)LLONG_MIN)
 #   else
-#	define LDBL_LONGLONG_MIN	(-LDBL_LONGLONG_MAX)
+#	define LDBL_LLONG_MIN		(-LDBL_LLONG_MAX)
 #   endif
 #endif
 #ifndef LDBL_DIG
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/version.h ksh93_2007_03_28/src/cmd/ksh93/include/version.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/version.h	2006-11-17 19:46:51.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/version.h	2007-03-06 18:35:34.000000000 +0100
@@ -17,4 +17,4 @@
 *                  David Korn <dgk at research.att.com>                   *
 *                                                                      *
 ***********************************************************************/
-#define SH_RELEASE	"1993-12-28 s"
+#define SH_RELEASE	"1993-12-28 s+"
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/Makefile ksh93_2007_03_28/src/cmd/ksh93/Makefile
--- ksh93_2007_01_11/src/cmd/ksh93/Makefile	2006-10-18 20:20:32.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/Makefile	2007-03-25 05:47:28.000000000 +0200
@@ -6,6 +6,7 @@
 VERSION = 1.1
 LICENSE = since=1982,author=dgk
 CATALOG = libshell
+ERROR_CONTEXT_T == Error_context_t /* workaround until switch from errorpush()/errorpop() => errorctx() */
 
 /*
  * set these variables to 1 to enable, 0 to disable, null to probe
@@ -16,8 +17,8 @@
 SHOPT_ACCTFILE ==  		/* per user accounting info */
 SHOPT_BASH ==			/* bash compatibility code */
 SHOPT_BRACEPAT == 1		/* C-shell {...,...} expansions (, required) */
-SHOPT_CMDLIB_BLTIN == 0		/* all -lcmd commands builtin */
-SHOPT_CMDLIB_DIR ==		/* SHOPT_CMDLIB_BLTIN prefix SH_CMDLIB_DIR */
+SHOPT_CMDLIB_HDR ==		/* -lcmd builtin list: <cmdlist.h> */
+SHOPT_CMDLIB_DIR ==		/* SHOPT_CMDLIB_HDR prefix SH_CMDLIB_DIR + <cmdlist.h> */
 SHOPT_CRNL ==			/* accept <cr><nl> for <nl> */
 SHOPT_DYNAMIC == 1		/* dynamic loading for builtins */
 SHOPT_ECHOPRINT ==		/* make echo equivalent to print */
@@ -76,7 +77,7 @@
 
 KSHELL == 1			/* this is ksh */
 
-SH_CMDLIB_DIR == "/opt/ast/bin"	/* SHOPT_CMDLIB_DIR dir prefix */
+SH_CMDLIB_DIR ==		/* SHOPT_CMDLIB_DIR dir prefix */
 SH_DICT ==			/* message catalog */
 DEBUG ==			/* debugging purposes only */
 
@@ -96,18 +97,18 @@
 	LDFLAGS  += $(CC.LD.LAZY) $(CC.LD.NORECORD)
 end
 
-if ! "$(-mam:N=static*)"
-	if CC.HOSTTYPE == "sol([789]|[1-9][0-9]).*"
-		LIBS_opt += +lsocket -lnsl
-	elif CC.HOSTTYPE != "sgi.mips*"
-		LIBS_opt += +lsocket +lnsl
-	end
+if "$(-mam:N=static*)"
+	LIBS_opt += -lsocket -lnsl
+elif CC.HOSTTYPE == "sol?([789]|[1-9][0-9]).*"
+	LIBS_opt += +lsocket -lnsl
+elif CC.HOSTTYPE != "sgi.mips*"
+	LIBS_opt += +lsocket +lnsl
 end
 if CC.HOSTTYPE == "linux.sparc"
 	/* the linux.sparc linker still has some problems */
 	LIBS_opt += -ldll
 end
-LIBS_opt += -lsecdb +lintl -ldl
+LIBS_opt += -lsecdb -ldl
 if CC.HOSTTYPE == "sol.*"
 	LIBS_opt += +lw
 end
@@ -184,8 +185,9 @@
 	echo ";" >> $(<)
 end
 
-:: math.tab syscall.s mamexec mamstate.c deparse.c shopen.c $(DOCFILES) \
-	bash.c bash_pre_rc.sh hexpand.c mkservice.c
+:: math.tab syscall.s mamexec mamstate.c deparse.c $(DOCFILES) \
+	bash.c bash_pre_rc.sh hexpand.c mkservice.c \
+	shopen.mk shopen.c
 
 :: shtests \
 	alias.sh append.sh arith.sh arrays.sh attributes.sh basic.sh \
@@ -222,8 +224,9 @@
 	mkdir $tmp
 	for i in *.sh
 	do	tst=$tmp/shcomp-${i%.sh}.ksh
-		shcomp $i > $tst
-		SHELL=$(*:O=1:P=A) $(*:O=1:P=A) $(*:O=3:B) $tst
+		if	$(*:O=4) $i > $tst
+		then	SHELL=$(*:O=1:P=A) $(*:O=1:P=A) $(*:O=3:B) $tst
+		fi
 		rm -f $tst
 	done
 	rm -rf $tmp
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/Mamfile ksh93_2007_03_28/src/cmd/ksh93/Mamfile
--- ksh93_2007_01_11/src/cmd/ksh93/Mamfile	2007-01-12 10:54:39.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/Mamfile	2007-03-29 19:07:09.000000000 +0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-01-11
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
 setv INSTALLROOT ../../..
 setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
 setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
@@ -140,7 +140,7 @@
 done sh/pmain.c
 meta pmain.o %.c>%.o sh/pmain.c pmain
 prev sh/pmain.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_DYNAMIC -D_BLD_shell -D_PACKAGE_ast -c sh/pmain.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_DYNAMIC -D_BLD_shell -D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t -c sh/pmain.c
 done pmain.o generated
 make libshell.a archive
 make shell.req
@@ -152,7 +152,7 @@
 exec - case "" in
 exec - *?)	echo " " ;;
 exec - esac
-exec - for i in shell dll cmd ast m jobs i secdb intl dl
+exec - for i in shell dll cmd ast m jobs i socket nsl secdb dl
 exec - do	case $i in
 exec - 	"shell"|shell)
 exec - 		;;
@@ -187,11 +187,12 @@
 done +ljobs dontcare virtual
 make +li
 done +li dontcare virtual
+make ${mam_libsocket}
+done ${mam_libsocket} dontcare virtual
+bind -lnsl dontcare
 make ${mam_libsecdb}
 done ${mam_libsecdb} dontcare virtual
-make +lintl
-done +lintl dontcare virtual
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/time
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/time
 make ${PACKAGE_ast_INCLUDE}/times.h implicit
 make ${PACKAGE_ast_INCLUDE}/ast_time.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_time.h dontcare
@@ -208,9 +209,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/dynamic
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/dynamic
 make ${PACKAGE_ast_INCLUDE}/fs3d.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast_fs.h implicit
 prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
@@ -223,9 +224,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/options
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/options
 done FEATURE/options dontcare generated
 prev ${PACKAGE_ast_INCLUDE}/option.h implicit
 done include/builtins.h
@@ -246,9 +247,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/sigfeatures
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/sigfeatures
 done FEATURE/sigfeatures dontcare generated
 make FEATURE/setjmp implicit
 meta FEATURE/setjmp features/%>FEATURE/% features/setjmp setjmp
@@ -257,9 +258,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/setjmp
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/setjmp
 done FEATURE/setjmp dontcare generated
 prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
 prev ${PACKAGE_ast_INCLUDE}/error.h implicit
@@ -267,7 +268,6 @@
 done ${PACKAGE_ast_INCLUDE}/sig.h dontcare
 done include/fault.h
 make include/history.h implicit
-prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done include/history.h
 prev ${PACKAGE_ast_INCLUDE}/cdt.h implicit
@@ -279,7 +279,7 @@
 done bltins/alarm.c
 meta alarm.o %.c>%.o bltins/alarm.c alarm
 prev bltins/alarm.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/alarm.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/alarm.c
 done alarm.o generated
 make cd_pwd.o
 make bltins/cd_pwd.c
@@ -299,9 +299,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : def acct
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : def acct
 done FEATURE/acct dontcare generated
 prev include/nval.h implicit
 prev FEATURE/options implicit
@@ -317,7 +317,7 @@
 done bltins/cd_pwd.c
 meta cd_pwd.o %.c>%.o bltins/cd_pwd.c cd_pwd
 prev bltins/cd_pwd.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/cd_pwd.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/cd_pwd.c
 done cd_pwd.o generated
 make cflow.o
 make bltins/cflow.c
@@ -332,7 +332,7 @@
 done bltins/cflow.c
 meta cflow.o %.c>%.o bltins/cflow.c cflow
 prev bltins/cflow.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/cflow.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/cflow.c
 done cflow.o generated
 make deparse.o
 make sh/deparse.c
@@ -345,7 +345,7 @@
 done sh/deparse.c
 meta deparse.o %.c>%.o sh/deparse.c deparse
 prev sh/deparse.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/deparse.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/deparse.c
 done deparse.o generated
 make getopts.o
 make bltins/getopts.c
@@ -357,7 +357,7 @@
 done bltins/getopts.c
 meta getopts.o %.c>%.o bltins/getopts.c getopts
 prev bltins/getopts.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/getopts.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/getopts.c
 done getopts.o generated
 make hist.o
 make bltins/hist.c
@@ -372,9 +372,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/ttys
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/ttys
 done FEATURE/ttys dontcare generated
 done include/terminal.h dontcare
 prev FEATURE/setjmp implicit
@@ -386,9 +386,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/locale
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/locale
 done FEATURE/locale dontcare generated
 prev FEATURE/options implicit
 done include/edit.h dontcare
@@ -407,7 +407,7 @@
 done bltins/hist.c
 meta hist.o %.c>%.o bltins/hist.c hist
 prev bltins/hist.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -c bltins/hist.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DERROR_CONTEXT_T=Error_context_t -DSHOPT_DYNAMIC -c bltins/hist.c
 done hist.o generated
 make misc.o
 make bltins/misc.c
@@ -428,7 +428,7 @@
 done bltins/misc.c
 meta misc.o %.c>%.o bltins/misc.c misc
 prev bltins/misc.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_ESH -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c bltins/misc.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_ESH -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c bltins/misc.c
 done misc.o generated
 make print.o
 make bltins/print.c
@@ -466,7 +466,7 @@
 done bltins/print.c
 meta print.o %.c>%.o bltins/print.c print
 prev bltins/print.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DSHOPT_PFSH -DSHOPT_ESH -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c bltins/print.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DSHOPT_PFSH -DSHOPT_ESH -DKSHELL -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c bltins/print.c
 done print.o generated
 make read.o
 make bltins/read.c
@@ -490,6 +490,7 @@
 prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_wchar.h dontcare
 done ${PACKAGE_ast_INCLUDE}/wchar.h dontcare
+prev FEATURE/locale implicit
 done include/lexstates.h
 prev include/variables.h implicit
 prev include/defs.h implicit
@@ -498,7 +499,7 @@
 done bltins/read.c
 meta read.o %.c>%.o bltins/read.c read
 prev bltins/read.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -c bltins/read.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c bltins/read.c
 done read.o generated
 make sleep.o
 make bltins/sleep.c
@@ -509,9 +510,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/poll
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/poll
 done FEATURE/poll generated
 prev FEATURE/time implicit
 prev include/builtins.h implicit
@@ -520,7 +521,7 @@
 done bltins/sleep.c
 meta sleep.o %.c>%.o bltins/sleep.c sleep
 prev bltins/sleep.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/sleep.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/sleep.c
 done sleep.o generated
 make trap.o
 make bltins/trap.c
@@ -530,7 +531,7 @@
 done bltins/trap.c
 meta trap.o %.c>%.o bltins/trap.c trap
 prev bltins/trap.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/trap.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c bltins/trap.c
 done trap.o generated
 make test.o
 make bltins/test.c
@@ -543,9 +544,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/externs
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/externs
 done FEATURE/externs generated
 prev include/builtins.h implicit
 prev include/test.h implicit
@@ -557,7 +558,7 @@
 done bltins/test.c
 meta test.o %.c>%.o bltins/test.c test
 prev bltins/test.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/test.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/test.c
 done test.o generated
 make typeset.o
 make bltins/typeset.c
@@ -572,7 +573,7 @@
 done bltins/typeset.c
 meta typeset.o %.c>%.o bltins/typeset.c typeset
 prev bltins/typeset.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_DYNAMIC -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_ESH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -c bltins/typeset.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_DYNAMIC -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_ESH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -c bltins/typeset.c
 done typeset.o generated
 make ulimit.o
 make bltins/ulimit.c
@@ -584,9 +585,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/rlimits
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/rlimits
 done FEATURE/rlimits dontcare generated
 prev FEATURE/time implicit
 done include/ulimit.h
@@ -599,7 +600,7 @@
 done bltins/ulimit.c
 meta ulimit.o %.c>%.o bltins/ulimit.c ulimit
 prev bltins/ulimit.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_DYNAMIC -c bltins/ulimit.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c bltins/ulimit.c
 done ulimit.o generated
 make umask.o
 make bltins/umask.c
@@ -612,7 +613,7 @@
 done bltins/umask.c
 meta umask.o %.c>%.o bltins/umask.c umask
 prev bltins/umask.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_DYNAMIC -c bltins/umask.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c bltins/umask.c
 done umask.o generated
 make whence.o
 make bltins/whence.c
@@ -632,7 +633,7 @@
 done bltins/whence.c
 meta whence.o %.c>%.o bltins/whence.c whence
 prev bltins/whence.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/whence.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/whence.c
 done whence.o generated
 make main.o
 make sh/main.c
@@ -650,18 +651,18 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : def execargs
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : def execargs
 done FEATURE/execargs generated
 make FEATURE/pstat implicit
 meta FEATURE/pstat >FEATURE/%  pstat
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : def pstat
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : def pstat
 done FEATURE/pstat generated
 prev FEATURE/time implicit
 make include/timeout.h implicit
@@ -683,7 +684,7 @@
 done sh/main.c
 meta main.o %.c>%.o sh/main.c main
 prev sh/main.c
-exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${CCFLAGS.FORCE}?} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_BRACEPAT -D_PACKAGE_ast -DSHOPT_ESH -DSHOPT_KIA -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c sh/main.c
+exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${CCFLAGS.FORCE}?} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_BRACEPAT -D_PACKAGE_ast -DSHOPT_ESH -DSHOPT_KIA -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c sh/main.c
 done main.o generated
 make nvdisc.o
 make sh/nvdisc.c
@@ -694,11 +695,10 @@
 done sh/nvdisc.c
 meta nvdisc.o %.c>%.o sh/nvdisc.c nvdisc
 prev sh/nvdisc.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_NAMESPACE -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/nvdisc.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_NAMESPACE -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/nvdisc.c
 done nvdisc.o generated
 make arith.o
 make sh/arith.c
-prev FEATURE/locale implicit
 prev include/variables.h implicit
 prev include/streval.h implicit
 prev include/name.h implicit
@@ -707,7 +707,7 @@
 done sh/arith.c
 meta arith.o %.c>%.o sh/arith.c arith
 prev sh/arith.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -D_BLD_shell -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/arith.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/arith.c
 done arith.o generated
 make args.o
 make sh/args.c
@@ -722,7 +722,7 @@
 done sh/args.c
 meta args.o %.c>%.o sh/args.c args
 prev sh/args.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_OPTIMIZE -DSHOPT_RAWONLY -DSHOPT_HISTEXPAND -DSHOPT_PFSH -D_BLD_shell -DKSHELL -D_PACKAGE_ast -DSHOPT_KIA -DSHOPT_MULTIBYTE -DSHOPT_ESH -DSHOPT_VSH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -c sh/args.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_OPTIMIZE -DSHOPT_RAWONLY -DSHOPT_HISTEXPAND -DSHOPT_PFSH -D_BLD_shell -DKSHELL -D_PACKAGE_ast -DSHOPT_KIA -DSHOPT_MULTIBYTE -DSHOPT_ESH -DSHOPT_VSH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c sh/args.c
 done args.o generated
 make array.o
 make sh/array.c
@@ -732,7 +732,7 @@
 done sh/array.c
 meta array.o %.c>%.o sh/array.c array
 prev sh/array.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/array.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/array.c
 done array.o generated
 make completion.o
 make edit/completion.c
@@ -746,7 +746,7 @@
 done edit/completion.c
 meta completion.o %.c>%.o edit/completion.c completion
 prev edit/completion.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_ESH -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_VSH -DSHOPT_PFSH -D_BLD_shell -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -c edit/completion.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_ESH -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_VSH -DSHOPT_PFSH -D_BLD_shell -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c edit/completion.c
 done completion.o generated
 make defs.o
 make sh/defs.c
@@ -758,7 +758,7 @@
 done sh/defs.c
 meta defs.o %.c>%.o sh/defs.c defs
 prev sh/defs.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_DYNAMIC -c sh/defs.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c sh/defs.c
 done defs.o generated
 make edit.o
 make edit/edit.c
@@ -776,9 +776,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/cmds
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/cmds
 done FEATURE/cmds generated
 prev FEATURE/time implicit
 prev FEATURE/options implicit
@@ -787,7 +787,7 @@
 done edit/edit.c
 meta edit.o %.c>%.o edit/edit.c edit
 prev edit/edit.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_RAWONLY -DSHOPT_ESH -DSHOPT_VSH -DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DKSHELL -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -c edit/edit.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_RAWONLY -DSHOPT_ESH -DSHOPT_VSH -DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DKSHELL -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c edit/edit.c
 done edit.o generated
 make expand.o
 make sh/expand.c
@@ -816,7 +816,7 @@
 done sh/expand.c
 meta expand.o %.c>%.o sh/expand.c expand
 prev sh/expand.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_BRACEPAT -DSHOPT_SUID_EXEC -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/expand.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_BRACEPAT -DSHOPT_SUID_EXEC -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/expand.c
 done expand.o generated
 make fault.o
 make sh/fault.c
@@ -832,7 +832,7 @@
 done sh/fault.c
 meta fault.o %.c>%.o sh/fault.c fault
 prev sh/fault.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_KIA -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c sh/fault.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_KIA -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c sh/fault.c
 done fault.o generated
 make fcin.o
 make sh/fcin.c
@@ -843,7 +843,7 @@
 done sh/fcin.c
 meta fcin.o %.c>%.o sh/fcin.c fcin
 prev sh/fcin.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -c sh/fcin.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t -c sh/fcin.c
 done fcin.o generated
 make history.o
 make edit/history.c
@@ -862,13 +862,12 @@
 done edit/history.c
 meta history.o %.c>%.o edit/history.c history
 prev edit/history.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_VSH -DSHOPT_ESH -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DKSHELL -DSHOPT_PFSH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c edit/history.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_VSH -DSHOPT_ESH -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DKSHELL -DSHOPT_PFSH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c edit/history.c
 done history.o generated
 make init.o
 make sh/init.c
 make include/version.h implicit
 done include/version.h
-prev FEATURE/locale implicit
 prev include/lexstates.h implicit
 prev FEATURE/dynamic implicit
 prev FEATURE/time implicit
@@ -887,7 +886,7 @@
 done sh/init.c
 meta init.o %.c>%.o sh/init.c init
 prev sh/init.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_PFSH -DSHOPT_NAMESPACE -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DSHOPT_KIA -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_ESH -DSHOPT_VSH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -c sh/init.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_PFSH -DSHOPT_NAMESPACE -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DSHOPT_KIA -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_ESH -DSHOPT_VSH -DERROR_CONTEXT_T=Error_context_t -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -c sh/init.c
 done init.o generated
 make io.o
 make sh/io.c
@@ -910,7 +909,7 @@
 done sh/io.c
 meta io.o %.c>%.o sh/io.c io
 prev sh/io.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_RAWONLY -DSHOPT_VSH -DSHOPT_ESH -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -c sh/io.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_RAWONLY -DSHOPT_VSH -DSHOPT_ESH -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c sh/io.c
 done io.o generated
 make jobs.o
 make sh/jobs.c
@@ -927,7 +926,7 @@
 done sh/jobs.c
 meta jobs.o %.c>%.o sh/jobs.c jobs
 prev sh/jobs.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_VSH -DSHOPT_ESH -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -D_BLD_shell -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c sh/jobs.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_VSH -DSHOPT_ESH -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -D_BLD_shell -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c sh/jobs.c
 done jobs.o generated
 make lex.o
 make sh/lex.c
@@ -946,7 +945,7 @@
 done sh/lex.c
 meta lex.o %.c>%.o sh/lex.c lex
 prev sh/lex.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_KIA -D_BLD_shell -D_PACKAGE_ast -DSHOPT_PFSH -DKSHELL -DSHOPT_DYNAMIC -DSHOPT_HISTEXPAND -DSHOPT_ESH -c sh/lex.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_KIA -D_PACKAGE_ast -D_BLD_shell -DSHOPT_PFSH -DKSHELL -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_ESH -c sh/lex.c
 done lex.o generated
 make macro.o
 make sh/macro.c
@@ -963,7 +962,7 @@
 done sh/macro.c
 meta macro.o %.c>%.o sh/macro.c macro
 prev sh/macro.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_BRACEPAT -DKSHELL -DSHOPT_OPTIMIZE -DSHOPT_FILESCAN -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_SUID_EXEC -D_BLD_shell -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/macro.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_BRACEPAT -DKSHELL -DSHOPT_OPTIMIZE -DSHOPT_FILESCAN -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_SUID_EXEC -D_BLD_shell -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/macro.c
 done macro.o generated
 make name.o
 make sh/name.c
@@ -971,7 +970,6 @@
 prev include/shnodes.h implicit
 prev include/streval.h implicit
 prev FEATURE/externs implicit
-prev FEATURE/locale implicit
 prev include/timeout.h implicit
 prev include/lexstates.h implicit
 prev include/path.h implicit
@@ -980,7 +978,7 @@
 done sh/name.c
 meta name.o %.c>%.o sh/name.c name
 prev sh/name.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_OPTIMIZE -DSHOPT_MULTIBYTE -D_BLD_shell -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/name.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_OPTIMIZE -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/name.c
 done name.o generated
 make nvtree.o
 make sh/nvtree.c
@@ -990,7 +988,7 @@
 done sh/nvtree.c
 meta nvtree.o %.c>%.o sh/nvtree.c nvtree
 prev sh/nvtree.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -D_BLD_shell -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/nvtree.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -D_BLD_shell -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/nvtree.c
 done nvtree.o generated
 make parse.o
 make sh/parse.c
@@ -1006,7 +1004,7 @@
 done sh/parse.c
 meta parse.o %.c>%.o sh/parse.c parse
 prev sh/parse.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_NAMESPACE -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_ESH -DSHOPT_DYNAMIC -DSHOPT_HISTEXPAND -DKSHELL -c sh/parse.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_NAMESPACE -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_ESH -DERROR_CONTEXT_T=Error_context_t -DSHOPT_DYNAMIC -DSHOPT_HISTEXPAND -DKSHELL -c sh/parse.c
 done parse.o generated
 make path.o
 make sh/path.c
@@ -1028,7 +1026,7 @@
 done sh/path.c
 meta path.o %.c>%.o sh/path.c path
 prev sh/path.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSH_CMDLIB_DIR=\""/opt/ast/bin"\" -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_PFSH -DSHOPT_MULTIBYTE -DSHOPT_ESH -D_BLD_shell -DKSHELL -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c sh/path.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_PFSH -DSHOPT_MULTIBYTE -DSHOPT_ESH -D_BLD_shell -DKSHELL -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c sh/path.c
 done path.o generated
 make string.o
 make sh/string.c
@@ -1043,7 +1041,7 @@
 done sh/string.c
 meta string.o %.c>%.o sh/string.c string
 prev sh/string.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -DSHOPT_ESH -DSHOPT_PFSH -c sh/string.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_PFSH -c sh/string.c
 done string.o generated
 make streval.o
 make sh/streval.c
@@ -1054,7 +1052,7 @@
 done sh/streval.c
 meta streval.o %.c>%.o sh/streval.c streval
 prev sh/streval.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -D_PACKAGE_ast -c sh/streval.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t -c sh/streval.c
 done streval.o generated
 make subshell.o
 make sh/subshell.c
@@ -1070,7 +1068,7 @@
 done sh/subshell.c
 meta subshell.o %.c>%.o sh/subshell.c subshell
 prev sh/subshell.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/subshell.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DERROR_CONTEXT_T=Error_context_t -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/subshell.c
 done subshell.o generated
 make tdump.o
 make sh/tdump.c
@@ -1082,7 +1080,7 @@
 done sh/tdump.c
 meta tdump.o %.c>%.o sh/tdump.c tdump
 prev sh/tdump.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DKSHELL -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/tdump.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DKSHELL -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/tdump.c
 done tdump.o generated
 make timers.o
 make sh/timers.c
@@ -1096,7 +1094,7 @@
 done sh/timers.c
 meta timers.o %.c>%.o sh/timers.c timers
 prev sh/timers.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/timers.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/timers.c
 done timers.o generated
 make trestore.o
 make sh/trestore.c
@@ -1108,7 +1106,7 @@
 done sh/trestore.c
 meta trestore.o %.c>%.o sh/trestore.c trestore
 prev sh/trestore.c
-exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${CCFLAGS.FORCE}?} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DKSHELL -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/trestore.c
+exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${CCFLAGS.FORCE}?} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_BLD_shell -DKSHELL -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/trestore.c
 done trestore.o generated
 make waitevent.o
 make sh/waitevent.c
@@ -1116,7 +1114,7 @@
 done sh/waitevent.c
 meta waitevent.o %.c>%.o sh/waitevent.c waitevent
 prev sh/waitevent.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -D_PACKAGE_ast -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/waitevent.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/waitevent.c
 done waitevent.o generated
 make xec.o
 make sh/xec.c
@@ -1142,7 +1140,7 @@
 done sh/xec.c
 meta xec.o %.c>%.o sh/xec.c xec
 prev sh/xec.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DSHOPT_FILESCAN -DSHOPT_NAMESPACE -DSHOPT_OPTIMIZE -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/xec.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DSHOPT_FILESCAN -DSHOPT_NAMESPACE -DSHOPT_OPTIMIZE -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/xec.c
 done xec.o generated
 make env.o
 make sh/env.c
@@ -1178,7 +1176,7 @@
 done data/msg.c
 meta msg.o %.c>%.o data/msg.c msg
 prev data/msg.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_SUID_EXEC -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_KIA -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC  -c data/msg.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_SUID_EXEC -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_KIA -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t  -c data/msg.c
 done msg.o generated
 make strdata.o
 make data/strdata.c
@@ -1191,9 +1189,9 @@
 prev shell.req
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl}  : run features/math.sh data/math.tab
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libnsl}  : run features/math.sh data/math.tab
 make ${PACKAGE_ast_INCLUDE}/ast_standards.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_standards.h dontcare
 done FEATURE/math generated
@@ -1224,7 +1222,7 @@
 done data/keywords.c
 meta keywords.o %.c>%.o data/keywords.c keywords
 prev data/keywords.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_NAMESPACE -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_DYNAMIC  -c data/keywords.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_NAMESPACE -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t  -c data/keywords.c
 done keywords.o generated
 make options.o
 make data/options.c
@@ -1235,7 +1233,7 @@
 done data/options.c
 meta options.o %.c>%.o data/options.c options
 prev data/options.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_PFSH -DSHOPT_HISTEXPAND -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_DYNAMIC -DSHOPT_ESH  -c data/options.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_PFSH -DSHOPT_HISTEXPAND -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH  -c data/options.c
 done options.o generated
 make signals.o
 make data/signals.c
@@ -1245,7 +1243,7 @@
 done data/signals.c
 meta signals.o %.c>%.o data/signals.c signals
 prev data/signals.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast  -c data/signals.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t  -c data/signals.c
 done signals.o generated
 make aliases.o
 make data/aliases.c
@@ -1261,9 +1259,6 @@
 done aliases.o generated
 make builtins.o
 make data/builtins.c
-make ${PACKAGE_ast_INCLUDE}/cmdlist.h implicit
-prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-done ${PACKAGE_ast_INCLUDE}/cmdlist.h dontcare
 prev FEATURE/cmds implicit
 prev include/jobs.h implicit
 prev include/builtins.h implicit
@@ -1271,11 +1266,12 @@
 prev include/name.h implicit
 prev include/ulimit.h implicit
 prev include/shtable.h implicit
+prev include/defs.h implicit
 prev include/shell.h implicit
 done data/builtins.c
 meta builtins.o %.c>%.o data/builtins.c builtins
 prev data/builtins.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_KIA -DSHOPT_PFSH -DUSAGE_LICENSE=\""[-author?David Korn <dgk at research.att.com>][-copyright?Copyright (c) 1982-2007 AT&T Knowledge Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libshell]"\" -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSH_CMDLIB_DIR=\""/opt/ast/bin"\" -DSHOPT_CMDLIB_BLTIN=0 -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DKSHELL -DSHOPT_DYNAMIC  -c data/builtins.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_KIA -DSHOPT_PFSH -DUSAGE_LICENSE=\""[-author?David Korn <dgk at research.att.com>][-copyright?Copyright (c) 1982-2007 AT&T Knowledge Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libshell]"\" -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DKSHELL -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH  -c data/builtins.c
 done builtins.o generated
 make variables.o
 make data/variables.c
@@ -1289,7 +1285,7 @@
 done data/variables.c
 meta variables.o %.c>%.o data/variables.c variables
 prev data/variables.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -D_PACKAGE_ast -DSHOPT_ESH -DSHOPT_PFSH  -c data/variables.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_PFSH  -c data/variables.c
 done variables.o generated
 make lexstates.o
 make data/lexstates.c
@@ -1308,11 +1304,12 @@
 prev include/history.h implicit
 prev include/io.h implicit
 prev include/defs.h implicit
+prev FEATURE/cmds implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done edit/emacs.c
 meta emacs.o %.c>%.o edit/emacs.c emacs
 prev edit/emacs.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -c edit/emacs.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c edit/emacs.c
 done emacs.o generated
 make vi.o
 make edit/vi.c
@@ -1328,7 +1325,7 @@
 done edit/vi.c
 meta vi.o %.c>%.o edit/vi.c vi
 prev edit/vi.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_RAWONLY -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -c edit/vi.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_RAWONLY -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c edit/vi.c
 done vi.o generated
 make hexpand.o
 make edit/hexpand.c
@@ -1337,7 +1334,7 @@
 done edit/hexpand.c
 meta hexpand.o %.c>%.o edit/hexpand.c hexpand
 prev edit/hexpand.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_DYNAMIC -D_BLD_shell -c edit/hexpand.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_DYNAMIC -D_BLD_shell -DERROR_CONTEXT_T=Error_context_t -c edit/hexpand.c
 done hexpand.o generated
 exec - ${AR} cr libshell.a alarm.o cd_pwd.o cflow.o deparse.o getopts.o hist.o misc.o print.o read.o sleep.o trap.o test.o typeset.o ulimit.o umask.o whence.o main.o nvdisc.o arith.o args.o array.o completion.o defs.o edit.o expand.o fault.o fcin.o history.o init.o io.o
 exec - ${AR} cr libshell.a jobs.o lex.o macro.o name.o nvtree.o parse.o path.o string.o streval.o subshell.o tdump.o timers.o trestore.o waitevent.o xec.o env.o limits.o msg.o strdata.o testops.o keywords.o options.o signals.o aliases.o builtins.o variables.o lexstates.o emacs.o vi.o hexpand.o
@@ -1346,9 +1343,9 @@
 bind -lshell
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib}  -o ksh pmain.o ${mam_libshell} ${mam_libdl} ${mam_libast}
+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib}  -o ksh pmain.o ${mam_libshell} ${mam_libnsl} ${mam_libdl} ${mam_libast}
 done ksh generated
 make shcomp
 make shcomp.o
@@ -1362,16 +1359,16 @@
 setv SH_DICT -DSH_DICT="\"libshell\""
 setv _BLD_shell -U_BLD_shell
 setv _BLD_DLL -U_BLD_DLL
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE} -DSH_DICT=\""libshell"\" -DSHOPT_KIA -D_PACKAGE_ast -DSHOPT_DYNAMIC -DUSAGE_LICENSE=\""[-author?David Korn <dgk at research.att.com>][-copyright?Copyright (c) 1982-2007 AT&T Knowledge Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libshell]"\" -c sh/shcomp.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE} -DSH_DICT=\""libshell"\" -DSHOPT_KIA -D_PACKAGE_ast -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DUSAGE_LICENSE=\""[-author?David Korn <dgk at research.att.com>][-copyright?Copyright (c) 1982-2007 AT&T Knowledge Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libshell]"\" -c sh/shcomp.c
 done shcomp.o generated
 prev libshell.a archive
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
 setv CC.DLL -UCC.DLL
 setv SH_DICT -DSH_DICT="\"libshell\""
-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib}  -o shcomp shcomp.o ${mam_libshell} ${mam_libdl} ${mam_libast}
+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib}  -o shcomp shcomp.o ${mam_libshell} ${mam_libnsl} ${mam_libdl} ${mam_libast}
 done shcomp generated
 make suid_exec
 make suid_exec.o
@@ -1387,14 +1384,14 @@
 prev sh/suid_exec.c
 setv CC.DLL -UCC.DLL
 setv _BLD_shell -U_BLD_shell
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -c sh/suid_exec.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DERROR_CONTEXT_T=Error_context_t -D_PACKAGE_ast -c sh/suid_exec.c
 done suid_exec.o generated
 prev +ljobs
 prev +li
+prev ${mam_libsocket}
 prev ${mam_libsecdb}
-prev +lintl
 setv CC.DLL -UCC.DLL
-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib}  -o suid_exec suid_exec.o ${mam_libast} ${mam_libdl} ${mam_libast}
+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib}  -o suid_exec suid_exec.o ${mam_libast} ${mam_libnsl} ${mam_libdl} ${mam_libast}
 done suid_exec generated
 make shell
 prev libshell.a archive
@@ -1544,8 +1541,9 @@
 exec - mkdir $tmp
 exec - for i in *.sh
 exec - do	tst=$tmp/shcomp-${i%.sh}.ksh
-exec - 	shcomp $i > $tst
-exec - 	SHELL=${INSTALLROOT}/bin/ksh ${INSTALLROOT}/bin/ksh shtests $tst
+exec - 	if	shcomp $i > $tst
+exec - 	then	SHELL=${INSTALLROOT}/bin/ksh ${INSTALLROOT}/bin/ksh shtests $tst
+exec - 	fi
 exec - 	rm -f $tst
 exec - done
 exec - rm -rf $tmp
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/nval.3 ksh93_2007_03_28/src/cmd/ksh93/nval.3
--- ksh93_2007_01_11/src/cmd/ksh93/nval.3	2005-06-14 17:25:39.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/nval.3	2007-03-20 14:51:26.000000000 +0100
@@ -87,7 +87,7 @@
 int	nv_scan(Dt_t *\fIdict\fP, void(*\fIfn\fP)(Namval_t*,void*), void *\fIdata\fP, int \fImask\fP, int \fIflags\fP);
 Dt_t	nv_dict(Namval_t *\fInp\fP);
 void	nv_setvtree(Namval_t *\fInp\fP);
-void	nv_setref(Namval_t *\fInp\fP);
+void	nv_setref(Namval_t *\fInp\fP, Dt_t *\fIdp\fP, int \fIflags\fP);
 Namval_t	*nv_lastdict(void);
 .ft R
 .fi
@@ -601,7 +601,10 @@
 .PP
 The \f5nv_setref()\fP function makes the name-value pair \f5np\fP
 into a reference to the variable whose name is given by
-the value of \f5np\fP.
+the value of \f5np\fP.  The \f5nv_open()\fP open function is
+called with this name, the dictionary given by \f5dp\fP,
+and the \f5flags\fP argument.
+A \f5NULL\fP value causes the shell global variable dictionary to be searched.
 .PP
 The \f5nv_setvtree()\fP function makes the name-value pair \f5np\fP
 into a tree structured variable so that \f5nv_getval()\fP
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/README ksh93_2007_03_28/src/cmd/ksh93/README
--- ksh93_2007_01_11/src/cmd/ksh93/README	2003-03-14 04:39:10.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/README	2007-03-25 04:06:09.000000000 +0200
@@ -36,7 +36,7 @@
                      SH_CMDLIB_DIR nmake state variable can be used to
 		     specify a directory. 
     CMDLIB_DIR   off Sets CMDLIB_BLTIN=1 and provides a default value
-                     of "/opt/ast/bin/" for SH_CMDLIB_DIR.
+                     of "/opt/ast/bin" for SH_CMDLIB_DIR.
     COMPOUND_ARRAY
                  on  Allows all components of compound variables except the
                      first to be any string by enclosing in [...].  It also
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/RELEASE ksh93_2007_03_28/src/cmd/ksh93/RELEASE
--- ksh93_2007_01_11/src/cmd/ksh93/RELEASE	2006-12-29 16:53:04.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/RELEASE	2007-03-27 20:54:06.000000000 +0200
@@ -1,3 +1,30 @@
+07-03-08  --- Release ksh93s+  ---
+07-03-08  A bug in which set +o output command line options has been fixed.
+07-03-08  A bug in which an error in read (for example, an invalid variable
+	  name), could leave the terminal in raw mode has been fixed.
+07-03-06  A bug in which read could core dump when specified with an array
+	  variable with a subscript that is an arithmetic expression has
+	  been fixed.
+07-03-06  Several serious bugs with the restricted shell were reported and
+	  fixed.
+07-03-02  If a job is stopped, and subsequently restarted with a CONT
+	  signal and exits normally, ksh93 was incorrectly exiting with
+	  the exit status of the stop signal number.
+07-02-26  M-^L added to emacs mode to clear the screen.
+07-02-26  A bug in which setting a variable readonly in a subshell would
+	  cause an unset error when the subshell completed has been fixed. 
+07-02-19  The format with printf uses the new = flag to center the output.
+07-02-19  A bug in which ksh93 did not allow multibyte characters in
+	  identifier names has been fixed.
+07-02-19  A bug introduced in ksh93 that causes global compound variable
+	  definitions inside functions to exit with "no parent" has been fixed.
+07-02-19  A bug in which using compound commands in process redirection
+	  arguments would give syntax errors <(...) and >(...) has been fixed.
+07-01-29  A bug which caused the shell to core dump which can occur when a
+	  built-in exits without closing files that it opens has been fixed.
+07-01-26  A bug in which ~(E) in patterns containing \ that are not inside ()
+	  has been fixed.
+
 06-12-29  --- Release ksh93s  ---
 06-12-29  A bug in which the value of IFS could be changed after a command
 	  substitution has been fixed. 
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/args.c ksh93_2007_03_28/src/cmd/ksh93/sh/args.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/args.c	2006-10-06 03:13:26.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/args.c	2007-03-27 20:52:51.000000000 +0200
@@ -638,7 +638,6 @@
 		else if (value&(SH_BASHEXTRA|SH_BASHOPT))
 			continue;
 		on = !!is_option(&oflags,value);
-		value &= 0xff;
 		name = tp->sh_name;
 		if(name[0] == 'n' && name[1] == 'o' && name[2] != 't')
 		{
@@ -662,7 +661,7 @@
 					on?'-':'+',
 					name);
 		}
-		else if(value!=SH_INTERACTIVE && value!=SH_RESTRICTED && value!=SH_PFSH && is_option(&oflags,value))
+		else if(!(value&SH_COMMANDLINE) && is_option(&oflags,value&0xff))
 			sfprintf(sfstdout," %s%s%s",(mode&PRINT_SHOPT)?"":"--",on?"":"no",name);
 	}
 	if(!(mode&(PRINT_VERBOSE|PRINT_ALL)))
@@ -757,7 +756,7 @@
 #if _pipe_socketpair && !_socketpair_devfd
 #   define sh_pipe	arg_pipe
 /*
- * create a real pipe (not a socked) and print message on failure
+ * create a real pipe (not a socket) and print message on failure
  */
 static int	arg_pipe(register int pv[])
 {
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/arith.c ksh93_2007_03_28/src/cmd/ksh93/sh/arith.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/arith.c	2006-10-11 22:26:21.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/arith.c	2007-03-14 17:02:22.000000000 +0100
@@ -30,10 +30,9 @@
 #include	"name.h"
 #include	"streval.h"
 #include	"variables.h"
-#include	"FEATURE/locale"
 
-#ifndef LONGLONG_MAX
-#define LONGLONG_MAX	LONG_MAX
+#ifndef LLONG_MAX
+#define LLONG_MAX	LONG_MAX
 #endif
 
 static Sfdouble_t	Zero, NaN, Inf;
@@ -41,14 +40,14 @@
 {
 	{ 0 },
 	"Inf",
-	NV_NOFREE|NV_INTEGER|NV_DOUBLE|NV_LONG,NV_RDONLY
+	NV_NOFREE|NV_LDOUBLE,NV_RDONLY
 };
 
 static Namval_t NaNnod =
 {
 	{ 0 },
 	"NaN",
-	NV_NOFREE|NV_INTEGER|NV_DOUBLE|NV_LONG,NV_RDONLY
+	NV_NOFREE|NV_LDOUBLE,NV_RDONLY
 };
 
 static Namval_t *scope(register Namval_t *np,register struct lval *lvalue,int assign)
@@ -76,7 +75,7 @@
 		{
 			while(nv_isref(mp))
 			{
-				sub = mp->nvenv;
+				sub = nv_refsub(mp);
 				mp = nv_refnode(mp);
 			}
 			np = mp;
@@ -104,16 +103,18 @@
 	    {
 		register Namval_t *np = (Namval_t*)(lvalue->value);
 		np = scope(np,lvalue,1);
-		nv_putval(np, (char*)&n, NV_INTEGER|NV_DOUBLE|NV_LONG);
+		nv_putval(np, (char*)&n, NV_LDOUBLE);
 		r=nv_getnum(np);
 		break;
 	    }
 	    case LOOKUP:
 	    {
 		register int c = *str;
+		register char *xp=str;
 		lvalue->value = (char*)0;
 		if(c=='.')
-			c = str[1];
+			str++;
+		c = mbchar(str);
 		if(isaletter(c))
 		{
 			register Namval_t *np;
@@ -121,7 +122,8 @@
 			char *cp;
 			while(1)
 			{
-				while(c= *++str, isaname(c));
+				while(xp=str, c=mbchar(str), isaname(c));
+				str = xp;
 				if(c!='.')
 					break;
 				dot=1;
@@ -181,7 +183,11 @@
 						}
 					}
 					else
-						while(c= *++str, isaname(c));
+					{
+						str++;
+						while(xp=str, c=mbchar(str), isaname(c));
+						str = xp;
+					}
 				}
 				*str = 0;
 				if(strcmp(*ptr,"Inf")==0)
@@ -232,7 +238,7 @@
 		}
 		else
 		{
-			char	lastbase=0, *val = str, oerrno = errno;
+			char	lastbase=0, *val = xp, oerrno = errno;
 			errno = 0;
 			r = strtonll(val,&str, &lastbase,-1);
 			if(*str=='8' || *str=='9')
@@ -250,7 +256,7 @@
 				if(*val==0 || *val=='.' || *val=='x' || *val=='X')
 					val--;
 			}
-			if(r==LONGLONG_MAX && errno)
+			if(r==LLONG_MAX && errno)
 				c='e';
 			else
 				c = *str;
@@ -323,7 +329,11 @@
 	register Sfdouble_t d;
 	char base=0, *last;
 	if(*str==0)
+	{
+		if(ptr)
+			*ptr = (char*)str;
 		return(0);
+	}
 	errno = 0;
 	d = strtonll(str,&last,&base,-1);
 	if(*last || errno)
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/array.c ksh93_2007_03_28/src/cmd/ksh93/sh/array.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/array.c	2006-11-16 21:48:47.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/array.c	2007-03-15 21:58:02.000000000 +0100
@@ -33,9 +33,9 @@
 
 #define NUMSIZE	(4+(ARRAY_MAX>999)+(ARRAY_MAX>9999)+(ARRAY_MAX>99999))
 #define is_associative(ap)	array_assoc((Namarr_t*)(ap))
-#define array_setbit(cp, n)	(cp[(n)/CHAR_BIT] |= 2<<(((n)&(CHAR_BIT-1))))
-#define array_clrbit(cp, n)	(cp[(n)/CHAR_BIT] &= ~(2<<(((n)&(CHAR_BIT-1)))))
-#define array_isbit(cp, n)	(cp[(n)/CHAR_BIT] & 2<<(((n)&(CHAR_BIT-1))))
+#define array_setbit(cp, n)	(cp[(n)/CHAR_BIT] |= 1<<(((n)&(CHAR_BIT-1))))
+#define array_clrbit(cp, n)	(cp[(n)/CHAR_BIT] &= ~(1<<(((n)&(CHAR_BIT-1)))))
+#define array_isbit(cp, n)	(cp[(n)/CHAR_BIT] & 1<<(((n)&(CHAR_BIT-1))))
 #define NV_CHILD		NV_EXPORT
 
 static char Empty[] = "";
@@ -238,7 +238,7 @@
 		else if(nv_isattr(np,NV_INTEGER))
 		{
 			Sfdouble_t d= nv_getnum(np);
-			nv_putval(mp,(char*)&d,NV_LONG|NV_DOUBLE|NV_INTEGER);
+			nv_putval(mp,(char*)&d,NV_LDOUBLE);
 		}
 		else
 			nv_putval(mp,nv_getval(np),NV_RDONLY);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/defs.c ksh93_2007_03_28/src/cmd/ksh93/sh/defs.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/defs.c	2006-06-12 17:42:16.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/defs.c	2007-02-14 08:59:16.000000000 +0100
@@ -43,5 +43,5 @@
 char *sh_lexstates[ST_NONE] = {0};
 
 struct jobs	job = {0};
-time_t		sh_mailchk = 600;
+int32_t		sh_mailchk = 600;
 
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/fault.c ksh93_2007_03_28/src/cmd/ksh93/sh/fault.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/fault.c	2006-08-05 05:31:04.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/fault.c	2007-02-14 08:59:55.000000000 +0100
@@ -71,12 +71,12 @@
 	if(sig==SIGWINCH)
 	{
 		int rows=0, cols=0;
-		long v;
+		int32_t v;
 		astwinsize(2,&rows,&cols);
 		if(v = cols)
-			nv_putval(COLUMNS, (char*)&v, NV_INTEGER);
+			nv_putval(COLUMNS, (char*)&v, NV_INT32);
 		if(v = rows)
-			nv_putval(LINES, (char*)&v, NV_INTEGER);
+			nv_putval(LINES, (char*)&v, NV_INT32);
 	}
 #endif  /* SIGWINCH */
 	if(sh.savesig)
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/fcin.c ksh93_2007_03_28/src/cmd/ksh93/sh/fcin.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/fcin.c	2006-02-09 06:19:29.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/fcin.c	2007-03-01 07:58:58.000000000 +0100
@@ -121,6 +121,7 @@
 	if(_Fcin.fcchar)
 		*_Fcin.fclast = _Fcin.fcchar;
 	_Fcin.fclast = 0;
+	_Fcin.fcleft = 0;
 	return(fcfill());
 }
 
@@ -148,3 +149,63 @@
 	_Fcin = *fp;
 }
 
+struct Extra
+{
+	unsigned char	buff[2*MB_LEN_MAX];
+	unsigned char	*next;
+};
+
+int fcmbstate(const char *state, int *s, int *len)
+{
+	static struct Extra	extra;
+	register int		i, c, n;
+	if(_Fcin.fcleft)
+	{
+		if((c = mbsize(extra.next)) < 0)
+			c = 1;
+		if((_Fcin.fcleft -= c) <=0)
+		{
+			_Fcin.fcptr = (unsigned char*)fcfirst() - _Fcin.fcleft; 
+			_Fcin.fcleft = 0;
+		}
+		*len = c;
+		if(c==1)
+			*s = state[*extra.next++];
+		else if(c==0)
+			_Fcin.fcleft = 0;
+		else
+		{
+			c = mbchar(extra.next);
+			*s = state['a'];
+		}
+		return(c);
+	}
+	switch(*len = mbsize(_Fcin.fcptr))
+	{
+	    case -1:
+		if(_Fcin._fcfile && (n=(_Fcin.fclast-_Fcin.fcptr)) < MB_LEN_MAX)
+		{
+			memcmp(extra.buff, _Fcin.fcptr, n);
+			_Fcin.fcptr = _Fcin.fclast;
+			for(i=n; i < MB_LEN_MAX+n; i++)
+			{
+				if((extra.buff[i] = fcgetc(c))==0)
+					break;
+			}
+			_Fcin.fcleft = n;
+			extra.next = extra.buff;
+			return(fcmbstate(state,s,len));
+		}
+		*len = 1;
+		/* fall through */
+	    case 0:
+	    case 1:
+		*s = state[c=fcget()];
+		break;
+	    default:
+		c = mbchar(_Fcin.fcptr);
+		*s = state['a'];
+	}
+	return(c);
+} 
+
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/init.c ksh93_2007_03_28/src/cmd/ksh93/sh/init.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/init.c	2007-01-12 08:35:51.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/init.c	2007-03-14 17:02:29.000000000 +0100
@@ -44,7 +44,6 @@
 #include	"FEATURE/time"
 #include	"FEATURE/dynamic"
 #include	"lexstates.h"
-#include	"FEATURE/locale"
 #include	"version.h"
 
 #if SHOPT_MULTIBYTE
@@ -79,7 +78,7 @@
 {
 	Namfun_t	hdr;
 	Shell_t		*sh;
-	long		rand_last;
+	int32_t		rand_last;
 };
 
 struct ifs
@@ -1269,7 +1268,7 @@
 #endif /* _hdr_locale */
 	(PPIDNOD)->nvalue.lp = (&shp->ppid);
 	(TMOUTNOD)->nvalue.lp = (&shp->st.tmout);
-	(MCHKNOD)->nvalue.lp = (long*)(&sh_mailchk);
+	(MCHKNOD)->nvalue.lp = (&sh_mailchk);
 	(OPTINDNOD)->nvalue.lp = (&shp->st.optindex);
 	/* set up the seconds clock */
 	shp->alias_tree = inittree(shp,shtab_aliases);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/io.c ksh93_2007_03_28/src/cmd/ksh93/sh/io.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/io.c	2006-12-11 20:27:10.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/io.c	2007-03-20 21:22:35.000000000 +0100
@@ -656,7 +656,7 @@
 		}
 #endif
 	}
-	if (fd > 0)
+	if (fd >= 0)
 	{
 		if((mode=sh_iocheckfd(fd))==IOCLOSE)
 			return(-1);
@@ -975,6 +975,8 @@
 			}
 			else if(iof&IORDW)
 			{
+				if(sh_isoption(SH_RESTRICTED))
+					errormsg(SH_DICT,ERROR_exit(1),e_restricted,fname);
 				io_op[2] = '>';
 				o_mode = O_RDWR|O_CREAT;
 				goto openit;
@@ -1145,7 +1147,7 @@
 			{
 				if(np)
 				{
-					long v;
+					int32_t v;
 					fn = fd;
 					if(fd<10)
 					{
@@ -1156,9 +1158,9 @@
 						fd = fn;
 					}
 					nv_unset(np);
-					nv_onattr(np,NV_INTEGER);
+					nv_onattr(np,NV_INT32);
 					v = fn;
-					nv_putval(np,(void*)&v, NV_INTEGER);
+					nv_putval(np,(char*)&v, NV_INT32);
 					sh_iocheckfd(fd);
 				}
 				else
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/jobs.c ksh93_2007_03_28/src/cmd/ksh93/sh/jobs.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/jobs.c	2006-10-25 02:55:22.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/jobs.c	2007-03-03 02:42:46.000000000 +0100
@@ -271,7 +271,10 @@
 			continue;
 		}
 		else if (WIFCONTINUED(wstat) && wcontinued)
+		{
 			pw->p_flag &= ~(P_NOTIFY|P_SIGNALLED|P_STOPPED);
+			pw->p_exit = 0;
+		}
 		else
 #endif /* SIGTSTP */
 		{
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/lex.c ksh93_2007_03_28/src/cmd/ksh93/sh/lex.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/lex.c	2007-01-05 23:24:09.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/lex.c	2007-03-21 19:24:38.000000000 +0100
@@ -302,38 +302,6 @@
 #define sh_lex	lextoken
 #endif
 
-#if SHOPT_MULTIBYTE
-static int mb_stateskip(const char *state, int *c, int *len)
-{
-	int curChar, lexState;
-	lexState = 0;
-	do
-	{
-		switch(*len = mbsize(_Fcin.fcptr))
-		{
-		    case -1: /* bogus multiByte char - parse as bytes? */
-		    case 0: /* NULL byte */
-		    case 1:
-                                lexState = state[curChar=fcget()];
-                                break;
-		    default:
-			 /*
-			 * None of the state tables contain entries
-			 * for multibyte characters.  However, they
-			 * should be treated the same as any other
-			 * alpha character, so we'll use the state
-			 * which would normally be assigned to the
-			 * 'a' character.
-			 */
-			curChar = mbchar(_Fcin.fcptr);
-			lexState = state['a'];
-		}
-	}
-	while(lexState == 0);
-	*c = curChar;
-	return(lexState);
-}
-#endif /* SHOPT_MULTIBYTE */
 /*
  * Get the next word and put it on the top of the stak
  * A pointer to the current word is stored in shlex.arg
@@ -346,12 +314,10 @@
 	register int	n, c, mode=ST_BEGIN, wordflags=0;
 	register Lex_t *lp = (Lex_t*)shp->lex_context;
 	int		inlevel=lexd.level, assignment=0, ingrave=0;
+	Sfio_t *sp;
 #if SHOPT_MULTIBYTE
-	int LEN;
-#else
-#	define LEN	1
+	LEN=1;
 #endif /* SHOPT_MULTIBYTE */
-	Sfio_t *sp;
 	if(lexd.paren)
 	{
 		lexd.paren = 0;
@@ -398,17 +364,7 @@
 	{
 		/* skip over characters in the current state */
 		state = sh_lexstates[mode];
-#if SHOPT_MULTIBYTE
-		LEN=1;
-		if(mbwide())
-		{
-			int curchar;
-			n = mb_stateskip(state, &curchar, &LEN);
-			c = curchar;
-		}
-		else
-#endif /* SHOPT_MULTIBYTE */
-		while((n = state[c=fcget()])==0);
+		while((n=STATE(state,c))==0);
 		switch(n)
 		{
 			case S_BREAK:
@@ -602,7 +558,11 @@
 					else if(c!='<' && c!='>')
 						n = 0;
 					else if(n==LPAREN)
+					{
 						c  |= SYMLPAR;
+						lex.reservok = 1;
+						lex.skipword = 0;
+					}
 					else if(n=='|')
 						c  |= SYMPIPE;
 					else if(c=='<' && n=='>')
@@ -1656,30 +1616,8 @@
 	{
 		if(n!=S_NL)
 		{
-#if SHOPT_MULTIBYTE
-			if(mbwide())
-			{
-				do
-				{
-					switch(mbsize(_Fcin.fcptr))
-					{
-					    case -1:    /* bogus multiByte char - parse as bytes? */
-					    case 0:     /* NULL byte */
-					    case 1:
-						n = state[fcget()];
-						break;
-					    default:
-						/* treat as alpha */
-						mbchar(_Fcin.fcptr);
-						n = state['a'];
-					}
-				}
-				while(n == 0);
-			}
-			else
-#endif /* SHOPT_MULTIBYTE */
 			/* skip over regular characters */
-			while((n=state[fcget()])==0);
+			while((n=STATE(state,c))==0);
 		}
 		if(n==S_EOF || !(c=fcget()))
 		{
@@ -2065,7 +2003,7 @@
 					}
 					*--dp = 0;
 #if ERROR_VERSION >= 20000317L
-					msg = ERROR_translate(0,0,error_info.id,ep);
+					msg = ERROR_translate(0,error_info.id,0,ep);
 #else
 #   if ERROR_VERSION >= 20000101L
 					msg = ERROR_translate(error_info.id,ep);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/macro.c ksh93_2007_03_28/src/cmd/ksh93/sh/macro.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/macro.c	2006-12-18 17:45:48.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/macro.c	2007-02-20 17:21:07.000000000 +0100
@@ -48,6 +48,10 @@
 #   define STR_GROUP	0
 #endif
 
+#if !SHOPT_MULTIBYTE
+#define mbchar(p)       (*(unsigned char*)p++)
+#endif
+
 static int	_c_;
 typedef struct  _mac_
 {
@@ -407,6 +411,7 @@
 	int		oldquote = mp->quote;
 	int		ansi_c = 0;
 	int		paren = 0;
+	int		ere = 0;
 	int		brace = 0;
 	Sfio_t		*sp = mp->sp;
 	mp->sp = NIL(Sfio_t*);
@@ -502,7 +507,7 @@
 			{
 				/* preserve \digit for pattern matching */
 				/* also \alpha for extended patterns */
-				if(!mp->lit && !mp->quote && (n==S_DIG || (paren && sh_lexstates[ST_DOL][*(unsigned char*)cp]==S_ALP)))
+				if(!mp->lit && !mp->quote && (n==S_DIG || ((paren+ere) && sh_lexstates[ST_DOL][*(unsigned char*)cp]==S_ALP)))
 					break;
 				/* followed by file expansion */
 				if(!mp->lit && (n==S_ESC || (!mp->quote && 
@@ -637,7 +642,15 @@
 			{
 				mp->patfound = mp->pattern;
 				if((n=cp[-1])==LPAREN)
+				{
 					paren++;
+					if((cp-first)>1 && cp[-2]=='~')
+					{
+						char *p = cp;
+						while((c=mbchar(p)) && c!=RPAREN && c!='E');
+						ere = c=='E';
+					}
+				}
 				else if(n==RPAREN)
 					--paren;
 			}
@@ -919,7 +932,8 @@
 	mp->zer