[ksh93-integration-discuss] ksh alpha source

Felix Schulte felix.schulte at gmail.com
Thu Jun 1 10:10:53 PDT 2006


On 6/1/06, Martin Schaffstall <martin.schaffstall at googlemail.com> wrote:
> On 5/31/06, Glenn Fowler <gsf at research.att.com> wrote:
> >
> > dgk and I rolled in most of the patches from the last few months
> > we're posting alpha source to catch glaring errors/omissions
> > before a wider post
> >
> >   http://www.research.att.com/~gsf/download/alpha/INIT.2006-05-30.md5
> >   http://www.research.att.com/~gsf/download/alpha/INIT.2006-05-30.tgz
> >   http://www.research.att.com/~gsf/download/alpha/ast-ksh.2006-05-30.md5
> >   http://www.research.att.com/~gsf/download/alpha/ast-ksh.2006-05-30.tgz
>
> Can anyone post a diff for the changes between 2006-02-14 and this
> source drop, pls?
patch diff attached
-- 
      _        Felix Schulte
    _|_|_     mailto:felix.schulte at gmail.com
    (0 0)
ooO--(_)--Ooo
-------------- next part --------------
diff -r -N -u ksh93_2006_02_14/lib/package/ast-ksh.html ksh93_2006_05_30/lib/package/ast-ksh.html
--- ksh93_2006_02_14/lib/package/ast-ksh.html	2006-02-16 04:33:50.000000000 +0100
+++ ksh93_2006_05_30/lib/package/ast-ksh.html	2006-05-31 05:25:22.000000000 +0200
@@ -192,6 +192,34 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="ksh93 changes">ksh93 changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
+06-05-19  --- Release ksh93r+  ---
+06-05-19  Modified arithmetic so that conversions to strings default to
+	  the maximum number of precision digits.
+06-05-16  Bug fixes for multibyte locales. 
+06-05-10  The =~ operator was added to &#0091;&#0091;...&#0093;&#0093; and  &#0091;&#0091; string ~= ERE &#0093;&#0093;
+	  is equivalent to &#0091;&#0091; string == ~(E)ERE &#0093;&#0093;.
+06-05-10  Modified emacs and vi mode so that entering a TAB after a partial
+	  TAB conpletion, generates a listing of possible completions.
+06-04-25  A bug in the vi edit mode which could cause the shell to core dump
+	  when switching from emacs mode.
+06-04-17  A bug in which using LANG or LC_ in assignment lists with builtins
+	  did not restore the localed correctly has been fixed.
+06-04-04  A bug in which discipline functions could not be added to variables
+	  whose names started with .sh has been fixed.
+06-03-28  The -s option to typeset was added to modify -i to indicate short
+	  integers.
+06-03-28  A bug in which variables assignment lists before functions
+	  defined with function name were not passed on the functions
+	  invoked by this function has been fixed. 
+06-03-28  A bug in which name references defined within a function defined
+	  with function  name could not be used with compound variables has
+	  been fixed.
+06-03-27  A bug in which read &lt;&amp;p (print &gt;&amp;p) would cause the coprocess input
+	  (output) pipe to close before reading from (after writing to)
+          it has been fixed.
+06-02-28  A bug in which stopping a job created with the hist builtin command
+	  would create a job that could not be restarted has been fixed.  
+
 06-01-24  --- Release ksh93r  ---
 06-01-24  A bug in which running commands with standard output closed would
 	  not work as expected has been fixed.
@@ -1496,6 +1524,9 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libast changes">libast changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
+06-05-09 comp/comf.sh: add native getconf -a names to the mix
+06-04-28 misc/optget.c: add solaris long option name compatibility
+06-03-09 string/strmatch.c: add REG_ADVANCE =&gt; REG_* flags
 06-02-14 comp/iconv.c: fix uwin iconv_list() /reg/ generator
 06-02-10 port/astconf.c: relax standard prefix filter
 06-02-08 sfrd.c,sfsync.c: lock logic bug fix
@@ -2798,6 +2829,8 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libcmd changes">libcmd changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
+06-05-09 uname.c: add -o; change -a to match linux
+06-05-03 date.c: add --last -L to list last of multiple time args
 06-02-14 tail.c: fix -f bug that lost fast stream data
 06-02-11 getconf.c: exit 1 if name invalid -- duh
 06-01-28 cp.c,rm.c: fix astquery() 'q' to return and not exit()
@@ -3018,7 +3051,7 @@
 <TR>
 <TD align=left></TD>
 <TD align=center></TD>
-<TD align=right>February 15, 2006</TD>
+<TD align=right>May 30, 2006</TD>
 </TR>
 </TABLE>
 <P>
diff -r -N -u ksh93_2006_02_14/lib/package/ast-ksh.README ksh93_2006_05_30/lib/package/ast-ksh.README
--- ksh93_2006_02_14/lib/package/ast-ksh.README	2006-02-16 04:33:44.000000000 +0100
+++ ksh93_2006_05_30/lib/package/ast-ksh.README	2006-05-31 05:25:16.000000000 +0200
@@ -89,6 +89,34 @@
 
 :::::::: ksh93 ::::::::
 
+06-05-19  --- Release ksh93r+  ---
+06-05-19  Modified arithmetic so that conversions to strings default to
+	  the maximum number of precision digits.
+06-05-16  Bug fixes for multibyte locales. 
+06-05-10  The =~ operator was added to [[...]] and  [[ string ~= ERE ]]
+	  is equivalent to [[ string == ~(E)ERE ]].
+06-05-10  Modified emacs and vi mode so that entering a TAB after a partial
+	  TAB conpletion, generates a listing of possible completions.
+06-04-25  A bug in the vi edit mode which could cause the shell to core dump
+	  when switching from emacs mode.
+06-04-17  A bug in which using LANG or LC_ in assignment lists with builtins
+	  did not restore the localed correctly has been fixed.
+06-04-04  A bug in which discipline functions could not be added to variables
+	  whose names started with .sh has been fixed.
+06-03-28  The -s option to typeset was added to modify -i to indicate short
+	  integers.
+06-03-28  A bug in which variables assignment lists before functions
+	  defined with function name were not passed on the functions
+	  invoked by this function has been fixed. 
+06-03-28  A bug in which name references defined within a function defined
+	  with function  name could not be used with compound variables has
+	  been fixed.
+06-03-27  A bug in which read <&p (print >&p) would cause the coprocess input
+	  (output) pipe to close before reading from (after writing to)
+          it has been fixed.
+06-02-28  A bug in which stopping a job created with the hist builtin command
+	  would create a job that could not be restarted has been fixed.  
+
 06-01-24  --- Release ksh93r  ---
 06-01-24  A bug in which running commands with standard output closed would
 	  not work as expected has been fixed.
@@ -1390,6 +1418,9 @@
 
 :::::::: libast ::::::::
 
+06-05-09 comp/comf.sh: add native getconf -a names to the mix
+06-04-28 misc/optget.c: add solaris long option name compatibility
+06-03-09 string/strmatch.c: add REG_ADVANCE => REG_* flags
 06-02-14 comp/iconv.c: fix uwin iconv_list() /reg/ generator
 06-02-10 port/astconf.c: relax standard prefix filter
 06-02-08 sfrd.c,sfsync.c: lock logic bug fix
@@ -2689,6 +2720,8 @@
 
 :::::::: libcmd ::::::::
 
+06-05-09 uname.c: add -o; change -a to match linux
+06-05-03 date.c: add --last -L to list last of multiple time args
 06-02-14 tail.c: fix -f bug that lost fast stream data
 06-02-11 getconf.c: exit 1 if name invalid -- duh
 06-01-28 cp.c,rm.c: fix astquery() 'q' to return and not exit()
diff -r -N -u ksh93_2006_02_14/lib/package/ast-ksh.ver ksh93_2006_05_30/lib/package/ast-ksh.ver
--- ksh93_2006_02_14/lib/package/ast-ksh.ver	2006-02-14 06:12:32.000000000 +0100
+++ ksh93_2006_05_30/lib/package/ast-ksh.ver	2006-05-31 05:25:14.000000000 +0200
@@ -1 +1 @@
-ast-ksh 2006-02-14 2006-02-14 1
+ast-ksh 2006-05-30 2006-05-30 1
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/bltins/alarm.c ksh93_2006_05_30/src/cmd/ksh93/bltins/alarm.c
--- ksh93_2006_02_14/src/cmd/ksh93/bltins/alarm.c	2002-11-11 18:25:18.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/bltins/alarm.c	2006-03-28 22:13:02.000000000 +0200
@@ -23,7 +23,6 @@
  *
  *   David Korn
  *   AT&T Labs
- *   research!dgk
  *
  */
 
@@ -260,7 +259,7 @@
 	}
 	if(argc!=2)
 		errormsg(SH_DICT,ERROR_usage(2),optusage((char*)0));
-	np = nv_open(argv[0],shp->var_tree,NV_ARRAY|NV_VARNAME|NV_NOASSIGN);
+	np = nv_open(argv[0],shp->var_tree,NV_NOARRAY|NV_VARNAME|NV_NOASSIGN);
 	if(!nv_isnull(np))
 		nv_unset(np);
 	nv_setattr(np, NV_INTEGER|NV_DOUBLE);
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/bltins/hist.c ksh93_2006_05_30/src/cmd/ksh93/bltins/hist.c
--- ksh93_2006_02_14/src/cmd/ksh93/bltins/hist.c	2005-09-05 18:03:01.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/bltins/hist.c	2006-03-01 15:41:13.000000000 +0100
@@ -263,10 +263,10 @@
 		char buff[IOBSIZE+1];
 		Sfio_t *iop = sfnew(NIL(Sfio_t*),buff,IOBSIZE,fdo,SF_READ);
 		/* read in and run the command */
-		if(shp->dot_depth++ > HIST_RECURSE)
+		if(shp->hist_depth++ > HIST_RECURSE)
 			errormsg(SH_DICT,ERROR_exit(1),e_toodeep,"history");
 		sh_eval(iop,1);
-		shp->dot_depth--;
+		shp->hist_depth--;
 	}
 	else
 	{
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/bltins/print.c ksh93_2006_05_30/src/cmd/ksh93/bltins/print.c
--- ksh93_2006_02_14/src/cmd/ksh93/bltins/print.c	2006-01-23 18:25:03.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/bltins/print.c	2006-05-19 17:14:12.000000000 +0200
@@ -585,12 +585,12 @@
 		switch(format)
 		{
 		case 'p':
-			value->p = (char**)strtoll(argp,&lastchar,10);
+			value->p = (char**)strtol(argp,&lastchar,10);
 			break;
 		case 'n':
 		{
 			Namval_t *np;
-			np = nv_open(argp,sh.var_tree,NV_VARNAME|NV_NOASSIGN|NV_ARRAY);
+			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))
@@ -688,8 +688,15 @@
 		case 'A':
 		case 'E':
 		case 'G':
-			value->d = sh_strnum(*pp->nextarg,&lastchar,0);
 			fe->size = sizeof(value->d);
+			d = sh_strnum(*pp->nextarg,&lastchar,0);
+                        if(SFFMT_LDOUBLE)
+			{
+				value->ld = d;
+				fe->size = sizeof(value->ld);
+			}
+			else
+				value->d = d;
 			break;
 		case 'Q':
 			value->ll = (Sflong_t)strelapsed(*pp->nextarg,&lastchar,1);
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/bltins/typeset.c ksh93_2006_05_30/src/cmd/ksh93/bltins/typeset.c
--- ksh93_2006_02_14/src/cmd/ksh93/bltins/typeset.c	2005-02-13 07:23:16.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/bltins/typeset.c	2006-04-19 22:20:27.000000000 +0200
@@ -125,7 +125,7 @@
 
 int    b_alias(int argc,register char *argv[],void *extra)
 {
-	register unsigned flag = NV_ARRAY|NV_NOSCOPE|NV_ASSIGN;
+	register unsigned flag = NV_NOARRAY|NV_NOSCOPE|NV_ASSIGN;
 	register Dt_t *troot;
 	register int n;
 	struct tdata tdata;
@@ -189,7 +189,7 @@
 	struct tdata tdata;
 	Namtype_t *ntp = (Namtype_t*)extra;
 	Dt_t *troot;
-	int isfloat = 0;
+	int isfloat=0, shortint=0;
 	NOT_USED(argc);
 	memset((void*)&tdata,0,sizeof(tdata));
 	tdata.sh = ntp->shp;
@@ -268,6 +268,9 @@
 			case 'r':
 				flag |= NV_RDONLY;
 				break;
+			case 's':
+				shortint=1;
+				break;
 			case 't':
 				flag |= NV_TAGGED;
 				break;
@@ -306,12 +309,16 @@
 		errormsg(SH_DICT,ERROR_usage(2),"%s", optusage(NIL(char*)));
 	if(isfloat)
 		flag |= NV_INTEGER|NV_DOUBLE;
+	if(shortint)
+		flag |= NV_SHORT|NV_INTEGER;
 	if(tdata.sh->fn_depth)
 		flag |= NV_NOSCOPE;
 	if(flag&NV_TYPE)
 	{
 		int offset = staktell();
 		stakputs(NV_CLASS);
+		if(NV_CLASS[sizeof(NV_CLASS)-2]!='.')
+			stakputc('.');
 		stakputs(tdata.prefix);
 		stakputc(0);
 		tdata.tp = nv_open(stakptr(offset),tdata.sh->var_tree,NV_VARNAME|NV_NOARRAY|NV_NOASSIGN);
@@ -329,10 +336,10 @@
 {
 	register char *name;
 	char *last = 0;
-	int nvflags=(flag&(NV_NOARRAY|NV_NOSCOPE|NV_VARNAME|NV_IDENT|NV_ASSIGN));
+	int nvflags=(flag&(NV_ARRAY|NV_NOARRAY|NV_NOSCOPE|NV_VARNAME|NV_IDENT|NV_ASSIGN));
 	int r=0, ref=0;
 	Shell_t *shp =tp->sh;
-	flag &= ~(NV_ARRAY|NV_NOSCOPE|NV_VARNAME|NV_IDENT);
+	flag &= ~(NV_NOARRAY|NV_NOSCOPE|NV_VARNAME|NV_IDENT);
 	if(argv[1])
 	{
 		if(flag&NV_REF)
@@ -402,10 +409,13 @@
 				}
 				continue;
 			}
-			if(troot==shp->var_tree && (nvflags&NV_ARRAY))
-				nv_setarray(np,nv_associative);
 			if(tp->tp)
+			{
 				nv_settype(np,tp->tp,tp->aflag=='-'?0:NV_APPEND);
+				flag = (np->nvflag&NV_NOCHANGE);
+			}
+			if(troot==shp->var_tree && (nvflags&NV_ARRAY))
+				nv_setarray(np,nv_associative);
 			curflag = np->nvflag;
 			flag &= ~NV_ASSIGN;
 			if(last=strchr(name,'='))
@@ -476,7 +486,7 @@
 			nv_close(np);
 		}
 	}
-	else
+	else if(!sh.envlist)
 	{
 		if(tp->aflag)
 		{
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/data/builtins.c ksh93_2006_05_30/src/cmd/ksh93/data/builtins.c
--- ksh93_2006_02_14/src/cmd/ksh93/data/builtins.c	2005-12-07 23:27:43.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/data/builtins.c	2006-03-28 21:52:23.000000000 +0200
@@ -1575,13 +1575,15 @@
 "[f?Each of the options and \aname\as refers to a function.]"
 "[i]#?[base:=10?An integer. \abase\a represents the arithmetic base "
 	"from 2 to 64.]"
-"[l?Convert uppercase character to lowercase.  Unsets \b-u\b attribute.]"
+"[l?Convert uppercase character to lowercase.  Unsets \b-u\b attribute.  When"
+	"used with \b-i\b, \b-E\b, or \b-F\b indicates long variant.]"
 "[n?Name reference.  The value is the name of a variable that \aname\a "
 	"references.  \aname\a cannot contain a \b.\b.]"
 "[p?Causes the output to be in a format that can be used as input to the "
 	"shell to recreate the attributes for variables.]"
 "[r?Enables readonly.  Once enabled it cannot be disabled.  See "
 	"\breadonly\b(1).]"
+"[s?Used with \b-i\b to restrict integer size to short.]"
 "[t?When used with \b-f\b, enables tracing for each of the specified "
 	"functions.  Otherwise, \b-t\b is a user defined attribute and "
 	"has no meaning to the shell.]"
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/data/options.c ksh93_2006_05_30/src/cmd/ksh93/data/options.c
--- ksh93_2006_02_14/src/cmd/ksh93/data/options.c	2005-12-08 22:17:12.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/data/options.c	2006-03-28 21:54:53.000000000 +0200
@@ -118,12 +118,12 @@
 	{"-xexport",	NV_EXPORT},
 	{"-rreadonly",	NV_RDONLY},
 	{"-ttagged",	NV_TAGGED},
-	{"++long",	(NV_INTEGER|NV_DOUBLE|NV_LONG)},
+	{"-llong",	(NV_INTEGER|NV_DOUBLE|NV_LONG)},
 	{"-Eexponential",(NV_INTEGER|NV_DOUBLE|NV_EXPNOTE)},
 	{"-Ffloat",	(NV_INTEGER|NV_DOUBLE)},
-	{"++long",	(NV_INTEGER|NV_LONG)},
-	{"++short",	(NV_INTEGER|NV_SHORT)},
-	{"++unsigned",	(NV_INTEGER|NV_UNSIGN)},
+	{"-llong",	(NV_INTEGER|NV_LONG)},
+	{"-lshort",	(NV_INTEGER|NV_SHORT)},
+	{"-lunsigned",	(NV_INTEGER|NV_UNSIGN)},
 	{"-iinteger",	NV_INTEGER},
 	{"-Hfilename",	NV_HOST},
 	{"-bbinary",    NV_BINARY},
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/data/testops.c ksh93_2006_05_30/src/cmd/ksh93/data/testops.c
--- ksh93_2006_02_14/src/cmd/ksh93/data/testops.c	2003-03-25 21:21:25.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/data/testops.c	2006-05-08 23:06:23.000000000 +0200
@@ -48,6 +48,7 @@
 		"-ot",		TEST_OT,
 		"=",		TEST_SEQ,
 		"==",		TEST_SEQ,
+		"=~",           TEST_REP,
 		"<",		TEST_SLT,
 		">",		TEST_SGT,
 		"]]",		TEST_END,
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/edit/completion.c ksh93_2006_05_30/src/cmd/ksh93/edit/completion.c
--- ksh93_2006_02_14/src/cmd/ksh93/edit/completion.c	2005-07-25 23:44:17.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/edit/completion.c	2006-05-10 23:09:06.000000000 +0200
@@ -139,7 +139,8 @@
 	{
 		register int c;
 		char *last = out;
-		var = isaname(*out);
+		c =  *(unsigned char*)out;
+		var = isaname(c);
 		if(out>outbuff)
 		{
 			/* go to beginning of word */
@@ -160,7 +161,10 @@
 			{
 				c = *(unsigned char*)out;
 				if(c=='$' && var==1)
-					var= 2*isaletter(out[1]);
+				{
+					var = *((unsigned char*)&out[1]);
+					var= 2*isaletter(var);
+				}
 				else if(var==2)
 				{
 					if(c!='"')
@@ -236,7 +240,7 @@
 		register int size='x';
 		while(cp>outbuff && ((size=cp[-1])==' ' || size=='\t'))
 			cp--;
-		if(!var && !strchr(ap->argval,'/') && ((cp==outbuff || (strchr(";&|(",size)) && (cp==outbuff+1||size=='('||cp[-2]!='>') && *begin!='~' )))
+		if(!var && !strchr(ap->argval,'/') && (((cp==outbuff&&sh.nextprompt==1) || (strchr(";&|(",size)) && (cp==outbuff+1||size=='('||cp[-2]!='>') && *begin!='~' )))
 		{
 			cmd_completion=1;
 			sh_onstate(SH_COMPLETE);
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/edit/edit.c ksh93_2006_05_30/src/cmd/ksh93/edit/edit.c
--- ksh93_2006_02_14/src/cmd/ksh93/edit/edit.c	2006-02-09 06:19:13.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/edit/edit.c	2006-05-10 18:16:26.000000000 +0200
@@ -972,6 +972,8 @@
 		/*** map '\r' to '\n' ***/
 		if(c == '\r' && mode!=2)
 			c = '\n';
+		if(ep->e_tabcount && !(c=='\t'||c==ESC || c=='\\'))
+			ep->e_tabcount = 0;
 	}
 	else
 		siglongjmp(ep->e_env,(n==0?UEOF:UINTR));
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/edit/emacs.c ksh93_2006_05_30/src/cmd/ksh93/edit/emacs.c
--- ksh93_2006_02_14/src/cmd/ksh93/edit/emacs.c	2005-12-07 06:04:47.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/edit/emacs.c	2006-05-10 22:57:44.000000000 +0200
@@ -329,9 +329,18 @@
 		case '\t':
 			if(cur>0 && cur>=eol && out[cur-1]!='\t' && out[cur-1]!=' ' && ep->ed->sh->nextprompt)
 			{
-				ed_ungetchar(ep->ed,ESC);
-				ed_ungetchar(ep->ed,ESC);
-				continue;
+				if(ep->ed->e_tabcount==0)
+				{
+					ep->ed->e_tabcount=1;
+					ed_ungetchar(ep->ed,ESC);
+					goto do_escape;
+				}
+				else if(ep->ed->e_tabcount==1)
+				{
+					ed_ungetchar(ep->ed,'=');
+					goto do_escape;
+				}
+				ep->ed->e_tabcount = 0;
 			}
 		default:
 			if ((eol+1) >= (scend)) /*  will not fit on line */
@@ -578,6 +587,7 @@
 			draw(ep,REFRESH);
 			continue;
 		case cntl('[') :
+		do_escape:
 			adjust = escape(ep,out,oadjust);
 			continue;
 		case cntl('R') :
@@ -910,7 +920,15 @@
 		case '=':	/* escape = - list all matching file names */
 			ep->mark = cur;
 			if(ed_expand(ep->ed,(char*)out,&cur,&eol,i,count) < 0)
+			{
+				if(ep->ed->e_tabcount==1)
+				{
+					ep->ed->e_tabcount=2;
+					ed_ungetchar(ep->ed,cntl('\t'));
+					return(-1);
+				}
 				beep();
+			}
 			else if(i=='=')
 				draw(ep,REFRESH);
 			else
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/edit/vi.c ksh93_2006_05_30/src/cmd/ksh93/edit/vi.c
--- ksh93_2006_02_14/src/cmd/ksh93/edit/vi.c	2005-12-07 06:09:34.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/edit/vi.c	2006-05-10 18:21:50.000000000 +0200
@@ -239,6 +239,7 @@
 	if(!vp)
 	{
 		ed->e_vi = vp =  newof(0,Vi_t,1,0);
+		vp->lastline = (genchar*)malloc(MAXLINE*CHARSIZE);
 		vp->direction = -1;
 		vp->ed = ed;
 	}
@@ -387,10 +388,7 @@
 	window[0] = '\0';
 
 	if(!yankbuf)
-	{
 		yankbuf = (genchar*)malloc(MAXLINE*CHARSIZE);
-		vp->lastline = (genchar*)malloc(MAXLINE*CHARSIZE);
-	}
 	if( vp->last_cmd == '\0' )
 	{
 		/*** first time for this shell ***/
@@ -1478,8 +1476,19 @@
 		case '\t':		/** command completion **/
 			if(mode!=SEARCH && last_virt>=0 && cur_virt>=last_virt && !isblank(cur_virt) && vp->ed->sh->nextprompt)
 			{
-				ed_ungetchar(vp->ed,'\\');
-				goto escape;
+				if(vp->ed->e_tabcount==0)
+				{
+					ed_ungetchar(vp->ed,'\\');
+					vp->ed->e_tabcount=1;
+					goto escape;
+				}
+				else if(vp->ed->e_tabcount==1)
+				{
+					ed_ungetchar(vp->ed,'=');
+					vp->ed->e_tabcount = 0;
+					goto escape;
+				}
+				vp->ed->e_tabcount = 0;
 			}
 			/* FALL THRU*/
 		default:
@@ -2287,8 +2296,15 @@
 		i = last_virt;
 		++last_virt;
 		virtual[last_virt] = 0;
-		if( ed_expand(vp->ed,(char*)virtual, &cur_virt, &last_virt, c, vp->repeat_set?vp->repeat:-1) )
+		if(ed_expand(vp->ed,(char*)virtual, &cur_virt, &last_virt, c, vp->repeat_set?vp->repeat:-1)<0)
 		{
+			if(vp->ed->e_tabcount)
+			{
+				vp->ed->e_tabcount=2;
+				ed_ungetchar(vp->ed,'\t');
+				--last_virt;
+				return(APPEND);
+			}
 			last_virt = i;
 			ed_ringbell();
 		}
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/include/defs.h ksh93_2006_05_30/src/cmd/ksh93/include/defs.h
--- ksh93_2006_02_14/src/cmd/ksh93/include/defs.h	2005-12-07 06:15:34.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/include/defs.h	2006-04-26 22:55:28.000000000 +0200
@@ -150,6 +150,7 @@
 	struct dolnod	*arglist; \
 	int		fn_depth; \
 	int		dot_depth; \
+	int		hist_depth; \
 	int		xargmin; \
 	int		xargmax; \
 	int		xargexit; \
@@ -182,6 +183,7 @@
 	History_t	*hist_ptr; \
 	char		universe; \
 	void		*jmpbuffer; \
+	Sfio_t		*strbuf; \
 	char		ifstable[256]; \
 	Shopt_t		offoptions;
 
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/include/edit.h ksh93_2006_05_30/src/cmd/ksh93/include/edit.h
--- ksh93_2006_02_14/src/cmd/ksh93/include/edit.h	2005-12-06 22:59:10.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/include/edit.h	2006-05-10 17:21:33.000000000 +0200
@@ -109,6 +109,7 @@
 	int	e_lbuf[LOOKAHEAD];/* pointer to look-ahead buffer */
 	int	e_fd;		/* file descriptor */
 	int	e_ttyspeed;	/* line speed, also indicates tty parms are valid */
+	int	e_tabcount;
 #ifdef _hdr_utime
 	ino_t	e_tty_ino;
 	dev_t	e_tty_dev;
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/include/lexstates.h ksh93_2006_05_30/src/cmd/ksh93/include/lexstates.h
--- ksh93_2006_02_14/src/cmd/ksh93/include/lexstates.h	2003-03-21 18:35:53.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/include/lexstates.h	2006-04-26 23:36:56.000000000 +0200
@@ -79,8 +79,8 @@
 #define ST_NONE		11
 
 #if SHOPT_MULTIBYTE
-#   define isaname(c)	(((c)>=0x200) ||  sh_lexstates[ST_NAME][c]==0)
-#   define isaletter(c)	(((c)>=0x200) || sh_lexstates[ST_DOL][c]==S_ALP && (c)!='.')
+#   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
 #   define isaname(c)	(sh_lexstates[ST_NAME][c]==0)
 #   define isaletter(c)	(sh_lexstates[ST_DOL][c]==S_ALP && (c)!='.')
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/include/national.h ksh93_2006_05_30/src/cmd/ksh93/include/national.h
--- ksh93_2006_02_14/src/cmd/ksh93/include/national.h	2003-04-08 16:09:49.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/include/national.h	2006-04-19 23:26:17.000000000 +0200
@@ -29,7 +29,7 @@
 #if SHOPT_MULTIBYTE
 
 #   ifndef MARKER
-#	define MARKER		0x7fff	/* Must be invalid character */
+#	define MARKER		0xdfff	/* Must be invalid character */
 #   endif
 
     extern int sh_strchr(const char*,const char*);
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/include/nval.h ksh93_2006_05_30/src/cmd/ksh93/include/nval.h
--- ksh93_2006_02_14/src/cmd/ksh93/include/nval.h	2005-04-19 20:50:44.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/include/nval.h	2006-04-19 22:28:02.000000000 +0200
@@ -68,11 +68,12 @@
 struct Namfun
 {
 	const Namdisc_t	*disc;
-	short		nofree;
+	char		nofree;
+	char		funs;
 	unsigned short	dsize;
 	Namfun_t	*next;
-	Namval_t	*type;
 	char		*last;
+	Namval_t	*type;
 };
 
 struct Nambfun
@@ -89,6 +90,7 @@
 	Namfun_t	hdr;
 	long		nelem;				/* number of elements */
 	void	*(*fun)(Namval_t*,const char*,int);	/* associative arrays */
+	Namval_t	*parent;		/* for multi-dimenstional */
 };
 
 /* Passed as third argument to a builtin when  NV_BLTINOPT is set on node */
@@ -234,7 +236,7 @@
 extern Namval_t	*nv_opensub(Namval_t*);
 
 /* name-value pair function prototypes */
-extern int		nv_adddisc(Namval_t*, const char**names);
+extern int		nv_adddisc(Namval_t*, const char**names, Namval_t**);
 extern int		nv_clone(Namval_t*, Namval_t*, int);
 extern void 		nv_close(Namval_t*);
 extern void		*nv_context(Namval_t*);
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/include/test.h ksh93_2006_05_30/src/cmd/ksh93/include/test.h
--- ksh93_2006_02_14/src/cmd/ksh93/include/test.h	2001-03-12 00:25:00.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/include/test.h	2006-05-08 22:22:18.000000000 +0200
@@ -54,6 +54,7 @@
 #define TEST_SLT	15
 #define TEST_SGT	16
 #define TEST_END	8
+#define TEST_REP	20
 
 extern int test_unop(int, const char*);
 extern int test_inode(const char*, const char*);
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/include/version.h ksh93_2006_05_30/src/cmd/ksh93/include/version.h
--- ksh93_2006_02_14/src/cmd/ksh93/include/version.h	2005-12-07 17:39:08.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/include/version.h	2006-04-13 18:58:06.000000000 +0200
@@ -17,4 +17,4 @@
 *                  David Korn <dgk at research.att.com>                   *
 *                                                                      *
 ***********************************************************************/
-#define SH_RELEASE	"1993-12-28 r"
+#define SH_RELEASE	"1993-12-28 r+"
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/Makefile ksh93_2006_05_30/src/cmd/ksh93/Makefile
--- ksh93_2006_02_14/src/cmd/ksh93/Makefile	2006-02-16 04:50:42.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/Makefile	2006-05-18 16:19:41.000000000 +0200
@@ -99,10 +99,10 @@
 	LDFLAGS  += $(CC.LD.LAZY) $(CC.LD.NORECORD)
 end
 
-if ! "$(-mam:N=static*)" && CC.HOSTTYPE != "sgi.mips*"
+if ! "$(-mam:N=static*)"
 	if CC.HOSTTYPE == "sol([789]|[1-9][0-9]).*"
 		LIBS_opt += +lsocket -lnsl
-	else
+	elif CC.HOSTTYPE != "sgi.mips*"
 		LIBS_opt += +lsocket +lnsl
 	end
 end
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/Mamfile ksh93_2006_05_30/src/cmd/ksh93/Mamfile
--- ksh93_2006_02_14/src/cmd/ksh93/Mamfile	2006-02-16 04:52:31.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/Mamfile	2006-05-31 05:25:28.000000000 +0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.1 2006-01-21
+info mam static 00000 1994-07-17 make (AT&T Research) 5.1 2006-05-09
 setv INSTALLROOT ../../..
 setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
 setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
@@ -151,7 +151,7 @@
 done ${PACKAGE_ast_INCLUDE}/cmd.h dontcare
 done include/shell.h
 done sh/pmain.c
-meta pmain.o %.c>%.o sh/pmain.c pmain
+meta pmain.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c sh/pmain.c
 done pmain.o generated
@@ -187,7 +187,7 @@
 make alarm.o
 make bltins/alarm.c
 make FEATURE/time implicit
-meta FEATURE/time features/%>FEATURE/% features/time time
+meta FEATURE/time features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/time time
 make features/time
 done features/time
 prev shell.req
@@ -216,7 +216,7 @@
 make include/builtins.h implicit
 prev include/shtable.h implicit
 make FEATURE/dynamic implicit
-meta FEATURE/dynamic features/%>FEATURE/% features/dynamic dynamic
+meta FEATURE/dynamic features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/dynamic dynamic
 make features/dynamic
 done features/dynamic
 prev shell.req
@@ -232,7 +232,7 @@
 done ${PACKAGE_ast_INCLUDE}/fs3d.h dontcare
 done FEATURE/dynamic dontcare generated
 make FEATURE/options implicit
-meta FEATURE/options features/%>FEATURE/% features/options options
+meta FEATURE/options features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/options options
 make features/options
 done features/options
 prev shell.req
@@ -256,7 +256,7 @@
 done include/argnod.h
 make include/fault.h implicit
 make FEATURE/sigfeatures implicit
-meta FEATURE/sigfeatures features/%>FEATURE/% features/sigfeatures sigfeatures
+meta FEATURE/sigfeatures features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/sigfeatures sigfeatures
 make features/sigfeatures
 done features/sigfeatures
 prev shell.req
@@ -268,7 +268,7 @@
 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_libast} : run features/sigfeatures
 done FEATURE/sigfeatures dontcare generated
 make FEATURE/setjmp implicit
-meta FEATURE/setjmp features/%>FEATURE/% features/setjmp setjmp
+meta FEATURE/setjmp features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/setjmp setjmp
 make features/setjmp
 done features/setjmp
 prev shell.req
@@ -295,7 +295,7 @@
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done include/defs.h
 done bltins/alarm.c
-meta alarm.o %.c>%.o bltins/alarm.c alarm
+meta alarm.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c bltins/alarm.c
 done alarm.o generated
@@ -327,7 +327,7 @@
 prev ${PACKAGE_ast_INCLUDE}/stak.h implicit
 prev include/defs.h implicit
 done bltins/cd_pwd.c
-meta cd_pwd.o %.c>%.o bltins/cd_pwd.c cd_pwd
+meta cd_pwd.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/cd_pwd.c
 done cd_pwd.o generated
@@ -342,7 +342,7 @@
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 prev include/defs.h implicit
 done bltins/cflow.c
-meta cflow.o %.c>%.o bltins/cflow.c cflow
+meta cflow.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c bltins/cflow.c
 done cflow.o generated
@@ -355,7 +355,7 @@
 prev include/shnodes.h implicit
 prev include/defs.h implicit
 done sh/deparse.c
-meta deparse.o %.c>%.o sh/deparse.c deparse
+meta deparse.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c sh/deparse.c
 done deparse.o generated
@@ -367,7 +367,7 @@
 prev include/variables.h implicit
 prev include/defs.h implicit
 done bltins/getopts.c
-meta getopts.o %.c>%.o bltins/getopts.c getopts
+meta getopts.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c bltins/getopts.c
 done getopts.o generated
@@ -378,7 +378,7 @@
 done include/national.h dontcare
 make include/terminal.h implicit
 make FEATURE/ttys implicit
-meta FEATURE/ttys features/%>FEATURE/% features/ttys ttys
+meta FEATURE/ttys features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/ttys ttys
 make features/ttys
 done features/ttys
 prev shell.req
@@ -393,7 +393,7 @@
 prev FEATURE/setjmp implicit
 prev ${PACKAGE_ast_INCLUDE}/sig.h implicit
 make FEATURE/locale implicit
-meta FEATURE/locale features/%>FEATURE/% features/locale locale
+meta FEATURE/locale features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/locale locale
 make features/locale
 done features/locale
 prev shell.req
@@ -419,7 +419,7 @@
 prev ${PACKAGE_ast_INCLUDE}/stak.h implicit
 prev include/defs.h implicit
 done bltins/hist.c
-meta hist.o %.c>%.o bltins/hist.c hist
+meta hist.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_DYNAMIC -c bltins/hist.c
 done hist.o generated
@@ -440,7 +440,7 @@
 prev include/variables.h implicit
 prev include/defs.h implicit
 done bltins/misc.c
-meta misc.o %.c>%.o bltins/misc.c misc
+meta misc.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c bltins/misc.c
 done misc.o generated
@@ -471,7 +471,7 @@
 prev ${PACKAGE_ast_INCLUDE}/error.h implicit
 prev include/defs.h implicit
 done bltins/print.c
-meta print.o %.c>%.o bltins/print.c print
+meta print.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c bltins/print.c
 done print.o generated
@@ -490,14 +490,14 @@
 prev ${PACKAGE_ast_INCLUDE}/error.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done bltins/read.c
-meta read.o %.c>%.o bltins/read.c read
+meta read.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_DYNAMIC -c bltins/read.c
 done read.o generated
 make sleep.o
 make bltins/sleep.c
 make FEATURE/poll implicit
-meta FEATURE/poll features/%>FEATURE/% features/poll poll
+meta FEATURE/poll features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/poll poll
 make features/poll
 done features/poll
 prev shell.req
@@ -515,7 +515,7 @@
 prev ${PACKAGE_ast_INCLUDE}/error.h implicit
 prev include/defs.h implicit
 done bltins/sleep.c
-meta sleep.o %.c>%.o bltins/sleep.c sleep
+meta sleep.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c bltins/sleep.c
 done sleep.o generated
@@ -525,7 +525,7 @@
 prev include/jobs.h implicit
 prev include/defs.h implicit
 done bltins/trap.c
-meta trap.o %.c>%.o bltins/trap.c trap
+meta trap.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c bltins/trap.c
 done trap.o generated
@@ -540,7 +540,7 @@
 prev ${PACKAGE_ast_INCLUDE}/tm.h implicit
 prev FEATURE/poll implicit
 make FEATURE/externs implicit
-meta FEATURE/externs features/%>FEATURE/% features/externs externs
+meta FEATURE/externs features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/externs externs
 make features/externs
 done features/externs
 prev shell.req
@@ -559,7 +559,7 @@
 prev ${PACKAGE_ast_INCLUDE}/error.h implicit
 prev include/defs.h implicit
 done bltins/test.c
-meta test.o %.c>%.o bltins/test.c test
+meta test.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c bltins/test.c
 done test.o generated
@@ -574,7 +574,7 @@
 prev ${PACKAGE_ast_INCLUDE}/error.h implicit
 prev include/defs.h implicit
 done bltins/typeset.c
-meta typeset.o %.c>%.o bltins/typeset.c typeset
+meta typeset.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -c bltins/typeset.c
 done typeset.o generated
@@ -582,7 +582,7 @@
 make bltins/ulimit.c
 make include/ulimit.h implicit
 make FEATURE/rlimits implicit
-meta FEATURE/rlimits features/%>FEATURE/% features/rlimits rlimits
+meta FEATURE/rlimits features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/rlimits rlimits
 make features/rlimits
 done features/rlimits
 prev shell.req
@@ -602,7 +602,7 @@
 prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done bltins/ulimit.c
-meta ulimit.o %.c>%.o bltins/ulimit.c ulimit
+meta ulimit.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/bltins/ulimit.c ulimit
 prev bltins/ulimit.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DSHOPT_OO -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_DYNAMIC -c bltins/ulimit.c
 done ulimit.o generated
@@ -615,7 +615,7 @@
 prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done bltins/umask.c
-meta umask.o %.c>%.o bltins/umask.c umask
+meta umask.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c bltins/umask.c
 done umask.o generated
@@ -635,7 +635,7 @@
 prev ${PACKAGE_ast_INCLUDE}/error.h implicit
 prev include/defs.h implicit
 done bltins/whence.c
-meta whence.o %.c>%.o bltins/whence.c whence
+meta whence.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/whence.c
 done whence.o generated
@@ -688,7 +688,7 @@
 prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done sh/main.c
-meta main.o %.c>%.o sh/main.c main
+meta main.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c sh/main.c
 done main.o generated
@@ -699,7 +699,7 @@
 prev include/variables.h implicit
 prev include/defs.h implicit
 done sh/nvdisc.c
-meta nvdisc.o %.c>%.o sh/nvdisc.c nvdisc
+meta nvdisc.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c sh/nvdisc.c
 done nvdisc.o generated
@@ -712,7 +712,7 @@
 prev include/lexstates.h implicit
 prev include/defs.h implicit
 done sh/arith.c
-meta arith.o %.c>%.o sh/arith.c arith
+meta arith.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -D_BLD_shell -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/arith.c
 done arith.o generated
@@ -726,7 +726,7 @@
 prev include/path.h implicit
 prev include/defs.h implicit
 done sh/args.c
-meta args.o %.c>%.o sh/args.c args
+meta args.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -DSHOPT_OO -DSHOPT_ESH -c sh/args.c
 done args.o generated
@@ -736,7 +736,7 @@
 prev ${PACKAGE_ast_INCLUDE}/stak.h implicit
 prev include/defs.h implicit
 done sh/array.c
-meta array.o %.c>%.o sh/array.c array
+meta array.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/sh/array.c array
 prev sh/array.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_APPEND -DSHOPT_OO -D_BLD_shell -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/array.c
 done array.o generated
@@ -749,7 +749,7 @@
 prev include/lexstates.h implicit
 prev include/defs.h implicit
 done edit/completion.c
-meta completion.o %.c>%.o edit/completion.c completion
+meta completion.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c edit/completion.c
 done completion.o generated
@@ -761,7 +761,7 @@
 prev include/jobs.h implicit
 prev include/defs.h implicit
 done sh/defs.c
-meta defs.o %.c>%.o sh/defs.c defs
+meta defs.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c sh/defs.c
 done defs.o generated
@@ -779,7 +779,7 @@
 prev ${PACKAGE_ast_INCLUDE}/ccode.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done edit/edit.c
-meta edit.o %.c>%.o edit/edit.c edit
+meta edit.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c edit/edit.c
 done edit.o generated
@@ -808,7 +808,7 @@
 prev include/variables.h implicit
 prev include/defs.h implicit
 done sh/expand.c
-meta expand.o %.c>%.o sh/expand.c expand
+meta expand.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c sh/expand.c
 done expand.o generated
@@ -824,7 +824,7 @@
 prev include/fcin.h implicit
 prev include/defs.h implicit
 done sh/fault.c
-meta fault.o %.c>%.o sh/fault.c fault
+meta fault.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c sh/fault.c
 done fault.o generated
@@ -835,7 +835,7 @@
 prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done sh/fcin.c
-meta fcin.o %.c>%.o sh/fcin.c fcin
+meta fcin.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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
 done fcin.o generated
@@ -854,7 +854,7 @@
 prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done edit/history.c
-meta history.o %.c>%.o edit/history.c history
+meta history.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c edit/history.c
 done history.o generated
@@ -886,7 +886,7 @@
 prev ${PACKAGE_ast_INCLUDE}/stak.h implicit
 prev include/defs.h implicit
 done sh/init.c
-meta init.o %.c>%.o sh/init.c init
+meta init.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -c sh/init.c
 done init.o generated
@@ -912,7 +912,7 @@
 prev include/fcin.h implicit
 prev include/defs.h implicit
 done sh/io.c
-meta io.o %.c>%.o sh/io.c io
+meta io.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c sh/io.c
 done io.o generated
@@ -929,7 +929,7 @@
 done ${PACKAGE_ast_INCLUDE}/wait.h
 prev include/defs.h implicit
 done sh/jobs.c
-meta jobs.o %.c>%.o sh/jobs.c jobs
+meta jobs.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c sh/jobs.c
 done jobs.o generated
@@ -948,7 +948,7 @@
 prev ${PACKAGE_ast_INCLUDE}/stak.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done sh/lex.c
-meta lex.o %.c>%.o sh/lex.c lex
+meta lex.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/sh/lex.c lex
 prev sh/lex.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_APPEND -DSHOPT_OO -DSHOPT_MULTIBYTE -DSHOPT_KIA -D_BLD_shell -D_PACKAGE_ast -DSHOPT_PFSH -DKSHELL -DSHOPT_DYNAMIC -DSHOPT_HISTEXPAND -DSHOPT_ESH -c sh/lex.c
 done lex.o generated
@@ -964,7 +964,7 @@
 prev include/fcin.h implicit
 prev include/defs.h implicit
 done sh/macro.c
-meta macro.o %.c>%.o sh/macro.c macro
+meta macro.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/sh/macro.c macro
 prev sh/macro.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_BRACEPAT -DKSHELL -DSHOPT_COMPOUND_ARRAY -DSHOPT_OO -DSHOPT_FILESCAN -DSHOPT_MULTIBYTE -DSHOPT_SUID_EXEC -D_BLD_shell -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/macro.c
 done macro.o generated
@@ -980,7 +980,7 @@
 prev include/variables.h implicit
 prev include/defs.h implicit
 done sh/name.c
-meta name.o %.c>%.o sh/name.c name
+meta name.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/sh/name.c name
 prev sh/name.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_OPTIMIZE -DSHOPT_MULTIBYTE -DSHOPT_COMPOUND_ARRAY -D_BLD_shell -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_OO -DSHOPT_ESH -c sh/name.c
 done name.o generated
@@ -990,7 +990,7 @@
 prev include/name.h implicit
 prev include/defs.h implicit
 done sh/nvtree.c
-meta nvtree.o %.c>%.o sh/nvtree.c nvtree
+meta nvtree.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/sh/nvtree.c nvtree
 prev sh/nvtree.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_COMPOUND_ARRAY -D_PACKAGE_ast -DSHOPT_OO -D_BLD_shell -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/nvtree.c
 done nvtree.o generated
@@ -1006,7 +1006,7 @@
 prev include/shell.h implicit
 prev include/defs.h implicit
 done sh/parse.c
-meta parse.o %.c>%.o sh/parse.c parse
+meta parse.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/sh/parse.c parse
 prev sh/parse.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_NAMESPACE -DSHOPT_APPEND -DSHOPT_COMPOUND_ARRAY -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_ESH -DSHOPT_DYNAMIC -DSHOPT_OO -DSHOPT_HISTEXPAND -DKSHELL -c sh/parse.c
 done parse.o generated
@@ -1028,7 +1028,7 @@
 prev include/fcin.h implicit
 prev include/defs.h implicit
 done sh/path.c
-meta path.o %.c>%.o sh/path.c path
+meta path.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/sh/path.c path
 prev 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 -DSHOPT_OO -c sh/path.c
 done path.o generated
@@ -1040,9 +1040,10 @@
 prev ${PACKAGE_ast_INCLUDE}/ccode.h implicit
 prev ${PACKAGE_ast_INCLUDE}/stak.h implicit
 prev include/defs.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast_wchar.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done sh/string.c
-meta string.o %.c>%.o sh/string.c string
+meta string.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -DSHOPT_PFSH -c sh/string.c
 done string.o generated
@@ -1053,7 +1054,7 @@
 prev ${PACKAGE_ast_INCLUDE}/error.h implicit
 prev include/streval.h implicit
 done sh/streval.c
-meta streval.o %.c>%.o sh/streval.c streval
+meta streval.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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
 done streval.o generated
@@ -1069,7 +1070,7 @@
 prev ${PACKAGE_ast_INCLUDE}/ls.h implicit
 prev include/defs.h implicit
 done sh/subshell.c
-meta subshell.o %.c>%.o sh/subshell.c subshell
+meta subshell.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c sh/subshell.c
 done subshell.o generated
@@ -1081,7 +1082,7 @@
 prev include/defs.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ccode.h implicit
 done sh/tdump.c
-meta tdump.o %.c>%.o sh/tdump.c tdump
+meta tdump.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c sh/tdump.c
 done tdump.o generated
@@ -1095,7 +1096,7 @@
 prev ${PACKAGE_ast_INCLUDE}/sig.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done sh/timers.c
-meta timers.o %.c>%.o sh/timers.c timers
+meta timers.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/timers.c
 done timers.o generated
@@ -1107,7 +1108,7 @@
 prev include/defs.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ccode.h implicit
 done sh/trestore.c
-meta trestore.o %.c>%.o sh/trestore.c trestore
+meta trestore.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -c sh/trestore.c
 done trestore.o generated
@@ -1115,7 +1116,7 @@
 make sh/waitevent.c
 prev include/defs.h implicit
 done sh/waitevent.c
-meta waitevent.o %.c>%.o sh/waitevent.c waitevent
+meta waitevent.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/waitevent.c
 done waitevent.o generated
@@ -1141,7 +1142,7 @@
 prev include/fcin.h implicit
 prev include/defs.h implicit
 done sh/xec.c
-meta xec.o %.c>%.o sh/xec.c xec
+meta xec.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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_OO -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/xec.c
 done xec.o generated
@@ -1151,7 +1152,7 @@
 prev ${PACKAGE_ast_INCLUDE}/cdt.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done sh/env.c
-meta env.o %.c>%.o sh/env.c env
+meta env.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/sh/env.c env
 prev sh/env.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -c sh/env.c
 done env.o generated
@@ -1160,7 +1161,7 @@
 prev include/ulimit.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done data/limits.c
-meta limits.o %.c>%.o data/limits.c limits
+meta limits.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/data/limits.c limits
 prev data/limits.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast  -c data/limits.c
 done limits.o generated
@@ -1177,7 +1178,7 @@
 prev include/defs.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done data/msg.c
-meta msg.o %.c>%.o data/msg.c msg
+meta msg.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO  -c data/msg.c
 done msg.o generated
@@ -1185,7 +1186,7 @@
 make data/strdata.c
 prev include/streval.h implicit
 make FEATURE/math implicit
-meta FEATURE/math features/%>FEATURE/% features/math math
+meta FEATURE/math features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/math math
 make features/math
 done features/math
 prev shell.req
@@ -1198,7 +1199,7 @@
 done FEATURE/math generated
 prev FEATURE/options implicit
 done data/strdata.c
-meta strdata.o %.c>%.o data/strdata.c strdata
+meta strdata.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/data/strdata.c strdata
 prev data/strdata.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH  -c data/strdata.c
 done strdata.o generated
@@ -1208,7 +1209,7 @@
 prev include/shtable.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done data/testops.c
-meta testops.o %.c>%.o data/testops.c testops
+meta testops.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/data/testops.c testops
 prev data/testops.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DUSAGE_LICENSE=\""[-author?David Korn <dgk at research.att.com>][-copyright?Copyright (c) 1982-2006 AT&T Knowledge Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libshell]"\" -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH  -c data/testops.c
 done testops.o generated
@@ -1219,7 +1220,7 @@
 prev include/shell.h implicit
 prev include/shtable.h implicit
 done data/keywords.c
-meta keywords.o %.c>%.o data/keywords.c keywords
+meta keywords.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO  -c data/keywords.c
 done keywords.o generated
@@ -1230,7 +1231,7 @@
 prev FEATURE/options implicit
 prev include/defs.h implicit
 done data/options.c
-meta options.o %.c>%.o data/options.c options
+meta options.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/data/options.c options
 prev data/options.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_PFSH -DSHOPT_HISTEXPAND -DSHOPT_OO -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_DYNAMIC -DSHOPT_ESH  -c data/options.c
 done options.o generated
@@ -1240,7 +1241,7 @@
 prev include/shtable.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done data/signals.c
-meta signals.o %.c>%.o data/signals.c signals
+meta signals.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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
 done signals.o generated
@@ -1252,7 +1253,7 @@
 prev FEATURE/options implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done data/aliases.c
-meta aliases.o %.c>%.o data/aliases.c aliases
+meta aliases.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/data/aliases.c aliases
 prev data/aliases.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_OO -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH  -c data/aliases.c
 done aliases.o generated
@@ -1262,7 +1263,7 @@
 prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
 done ${PACKAGE_ast_INCLUDE}/cmdlist.h dontcare
 make FEATURE/cmds implicit
-meta FEATURE/cmds features/%>FEATURE/% features/cmds cmds
+meta FEATURE/cmds features/%>FEATURE/% ${PACKAGEROOT}/src/cmd/ksh93/features/cmds cmds
 make features/cmds
 done features/cmds
 prev shell.req
@@ -1281,7 +1282,7 @@
 prev include/shtable.h implicit
 prev include/shell.h implicit
 done data/builtins.c
-meta builtins.o %.c>%.o data/builtins.c builtins
+meta builtins.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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-2006 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_OO -DSHOPT_DYNAMIC  -c data/builtins.c
 done builtins.o generated
@@ -1294,7 +1295,7 @@
 prev FEATURE/options implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done data/variables.c
-meta variables.o %.c>%.o data/variables.c variables
+meta variables.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/data/variables.c variables
 prev data/variables.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_MULTIBYTE -DSHOPT_OO -D_BLD_shell -D_PACKAGE_ast -DSHOPT_DYNAMIC -DSHOPT_PFSH  -c data/variables.c
 done variables.o generated
@@ -1304,7 +1305,7 @@
 prev FEATURE/options implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done data/lexstates.c
-meta lexstates.o %.c>%.o data/lexstates.c lexstates
+meta lexstates.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/data/lexstates.c lexstates
 prev data/lexstates.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_BRACEPAT -DSHOPT_OO -DSHOPT_NAMESPACE -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH  -c data/lexstates.c
 done lexstates.o generated
@@ -1317,7 +1318,7 @@
 prev include/defs.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done edit/emacs.c
-meta emacs.o %.c>%.o edit/emacs.c emacs
+meta emacs.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c edit/emacs.c
 done emacs.o generated
@@ -1333,7 +1334,7 @@
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 prev include/defs.h implicit
 done edit/vi.c
-meta vi.o %.c>%.o edit/vi.c vi
+meta vi.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c edit/vi.c
 done vi.o generated
@@ -1342,7 +1343,7 @@
 prev include/edit.h implicit
 prev include/defs.h implicit
 done edit/hexpand.c
-meta hexpand.o %.c>%.o edit/hexpand.c hexpand
+meta hexpand.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/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 -DSHOPT_OO -c edit/hexpand.c
 done hexpand.o generated
@@ -1364,7 +1365,7 @@
 prev include/shnodes.h implicit
 prev include/shell.h implicit
 done sh/shcomp.c
-meta shcomp.o %.c>%.o sh/shcomp.c shcomp
+meta shcomp.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/sh/shcomp.c shcomp
 prev sh/shcomp.c
 setv CC.DLL -UCC.DLL
 setv SH_DICT -DSH_DICT="\"libshell\""
@@ -1391,7 +1392,7 @@
 prev FEATURE/externs implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
 done sh/suid_exec.c
-meta suid_exec.o %.c>%.o sh/suid_exec.c suid_exec
+meta suid_exec.o %.c>%.o ${PACKAGEROOT}/src/cmd/ksh93/sh/suid_exec.c suid_exec
 prev sh/suid_exec.c
 setv CC.DLL -UCC.DLL
 setv _BLD_shell -U_BLD_shell
@@ -1537,6 +1538,6 @@
 done tests/shtests
 exec - silent cmp 2>/dev/null -s ${INSTALLROOT}/bin/ksh ksh 2>/dev/null ||
 exec - echo "make install to run the tests on the latest ksh" >&2
-exec - cd ${PACKAGEROOT}/src/cmd/ksh93/tests
+exec - cd
 exec - SHELL=${INSTALLROOT}/bin/ksh ${INSTALLROOT}/bin/ksh shtests
 done test dontcare virtual
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/RELEASE ksh93_2006_05_30/src/cmd/ksh93/RELEASE
--- ksh93_2006_02_14/src/cmd/ksh93/RELEASE	2006-01-24 18:10:46.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/RELEASE	2006-05-22 22:05:25.000000000 +0200
@@ -1,3 +1,31 @@
+06-05-19  --- Release ksh93r+  ---
+06-05-19  Modified arithmetic so that conversions to strings default to
+	  the maximum number of precision digits.
+06-05-16  Bug fixes for multibyte locales. 
+06-05-10  The =~ operator was added to [[...]] and  [[ string ~= ERE ]]
+	  is equivalent to [[ string == ~(E)ERE ]].
+06-05-10  Modified emacs and vi mode so that entering a TAB after a partial
+	  TAB conpletion, generates a listing of possible completions.
+06-04-25  A bug in the vi edit mode which could cause the shell to core dump
+	  when switching from emacs mode.
+06-04-17  A bug in which using LANG or LC_ in assignment lists with builtins
+	  did not restore the localed correctly has been fixed.
+06-04-04  A bug in which discipline functions could not be added to variables
+	  whose names started with .sh has been fixed.
+06-03-28  The -s option to typeset was added to modify -i to indicate short
+	  integers.
+06-03-28  A bug in which variables assignment lists before functions
+	  defined with function name were not passed on the functions
+	  invoked by this function has been fixed. 
+06-03-28  A bug in which name references defined within a function defined
+	  with function  name could not be used with compound variables has
+	  been fixed.
+06-03-27  A bug in which read <&p (print >&p) would cause the coprocess input
+	  (output) pipe to close before reading from (after writing to)
+          it has been fixed.
+06-02-28  A bug in which stopping a job created with the hist builtin command
+	  would create a job that could not be restarted has been fixed.  
+
 06-01-24  --- Release ksh93r  ---
 06-01-24  A bug in which running commands with standard output closed would
 	  not work as expected has been fixed.
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/arith.c ksh93_2006_05_30/src/cmd/ksh93/sh/arith.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/arith.c	2005-02-08 02:45:47.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/arith.c	2006-05-22 21:58:44.000000000 +0200
@@ -202,7 +202,7 @@
 			if(c==GETDECIMAL(0) || c=='e' || c == 'E')
 			{
 				lvalue->isfloat=1;
-				r = strtod(val,&str);
+				r = strtold(val,&str);
 			}
 			else if(lastbase==10 && val[1])
 			{
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/init.c ksh93_2006_05_30/src/cmd/ksh93/sh/init.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/init.c	2005-09-15 23:12:32.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/init.c	2006-05-08 23:24:54.000000000 +0200
@@ -102,8 +102,6 @@
 {
 	Namfun_t	hdr;
 	Shell_t		*sh;
-	char		*bufptr;
-	int		maxbufsize;
 };
 
 struct rand
@@ -252,7 +250,7 @@
 #endif
 	if(!(flags&NV_RDONLY) && sh_isoption(SH_RESTRICTED))
 		errormsg(SH_DICT,ERROR_exit(1),e_restricted,nv_name(np));
-	if(name==(PATHNOD)->nvname)			
+	if(np==PATHNOD)			
 	{
 #ifndef PATH_BFPATH
 		shp->lastpath = 0;
@@ -262,7 +260,7 @@
 	if(val && !(flags&NV_RDONLY) && np->nvalue.cp && strcmp(val,np->nvalue.cp)==0)
 		 return;
 #ifdef PATH_BFPATH
-	if(shp->pathlist  && name==(FPATHNOD)->nvname)
+	if(shp->pathlist  && np==FPATHNOD)
 		shp->pathlist = (void*)path_unsetfpath((Pathcomp_t*)shp->pathlist);
 #endif
 	nv_putv(np, val, flags, fp);
@@ -270,9 +268,9 @@
 	if(shp->pathlist)
 	{
 		val = np->nvalue.cp;
-		if(name==(PATHNOD)->nvname)
+		if(np==PATHNOD)
 			pp = (void*)path_addpath((Pathcomp_t*)shp->pathlist,val,PATH_PATH);
-		else if(val && name==(FPATHNOD)->nvname)
+		else if(val && np==FPATHNOD)
 			pp = (void*)path_addpath((Pathcomp_t*)shp->pathlist,val,PATH_FPATH);
 		else
 			return;
@@ -508,20 +506,14 @@
 
 static char* get_seconds(register Namval_t* np, Namfun_t *fp)
 {
-	static char *bufptr;
-	static int maxbufsize;
 	register int places = nv_size(np);
 	struct tms tp;
 	double d, offset = (np->nvalue.dp?*np->nvalue.dp:0);
 	NOT_USED(fp);
 	timeofday(&tp);
 	d = dtime(&tp)- offset;
-	if(!bufptr)
-		bufptr = (char*)malloc(maxbufsize=places+20);
-	else if(places+20 > maxbufsize)
-		bufptr = (char*)realloc(bufptr,maxbufsize=places+20);
-	sfsprintf(bufptr,maxbufsize,"%.*f\0",places,d);
-	return(bufptr);
+	sfprintf(sh.strbuf,"%.*f",places,d);
+	return(sfstruse(sh.strbuf));
 }
 
 static Sfdouble_t nget_seconds(register Namval_t* np, Namfun_t *fp)
@@ -623,11 +615,10 @@
 
 static void put_lastarg(Namval_t* np,const char *val,int flags,Namfun_t *fp)
 {
-	char numbuf[20];
 	if(flags&NV_INTEGER)
 	{
-		sfsprintf(numbuf,sizeof(numbuf),"%.*g\0",12,*((double*)val));
-		val = numbuf;
+		sfprintf(sh.strbuf,"%.*g",12,*((double*)val));
+		val = sfstruse(sh.strbuf);
 	}
 	if(sh.lastarg && !nv_isattr(np,NV_NOFREE))
 		free((void*)sh.lastarg);
@@ -839,6 +830,8 @@
 	sh.arg_context = sh_argopen(&sh);
 	sh.lex_context = (void*)sh_lexopen(0,&sh,1);
 	sh.ed_context = (void*)ed_open(&sh);
+	sh.strbuf = sfstropen();
+	sfsetbuf(sh.strbuf,(char*)0,64);
 	sh_onstate(SH_INIT);
 	error_info.exit = sh_exit;
 	error_info.id = path_basename(argv[0]);
@@ -904,10 +897,10 @@
 		 * try using environment variable _ or argv[0]
 		 */
 		char *last, *cp=nv_getval(L_ARGNOD);
-		char path[50],buff[PATH_MAX+1];
+		char buff[PATH_MAX+1];
 		sh.shpath = 0;
-		sfsprintf(path,sizeof(path),"/proc/%d/exe\0",getpid());
-		if((n=readlink(path,buff,sizeof(buff)-1))>0)
+		sfprintf(sh.strbuf,"/proc/%d/exe",getpid());
+		if((n=readlink(sfstruse(sh.strbuf),buff,sizeof(buff)-1))>0)
 		{
 			buff[n] = 0;
 			sh.shpath = strdup(buff);
@@ -1254,7 +1247,7 @@
 	nv_stack(np, &NSPACE_init);
 #endif /* SHOPT_NAMESPACE */
 	np = nv_mount(DOTSHNOD, "type", dtopen(&_Nvdisc,Dtset));
-	nv_adddisc(DOTSHNOD, shdiscnames);
+	nv_adddisc(DOTSHNOD, shdiscnames, (Namval_t**)0);
 	return(ip);
 }
 
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/io.c ksh93_2006_05_30/src/cmd/ksh93/sh/io.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/io.c	2006-01-24 18:11:43.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/io.c	2006-03-29 17:12:33.000000000 +0200
@@ -681,9 +681,11 @@
 				else if(fd=='p' && fname[1]==0)
 				{
 					if(iof&IOPUT)
-						toclose = dupfd = sh.coutpipe;
+						dupfd = sh.coutpipe;
 					else
-						toclose = dupfd = sh.cpipe[0];
+						dupfd = sh.cpipe[0];
+					if(flag)
+						toclose = dupfd;
 				}
 				else
 				{
@@ -1935,6 +1937,23 @@
         return(old);
 }
 
+Sfio_t	*sh_fd2sfio(int fd)
+{
+	register int status;
+	Sfio_t *sp = sh.sftable[fd];
+	if(!sp  && (status = sh_iocheckfd(fd))!=IOCLOSE)
+	{
+		register int flags=0;
+		if(status&IOREAD)
+			flags |= SF_READ;
+		if(status&IOWRITE)
+			flags |= SF_WRITE;
+		sp = sfnew(NULL, NULL, -1, fd,flags);
+		sh.sftable[fd] = sp;
+	}
+	return(sp);
+}
+
 Sfio_t *sh_pathopen(const char *cp)
 {
 	int n;
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/jobs.c ksh93_2006_05_30/src/cmd/ksh93/sh/jobs.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/jobs.c	2006-01-23 17:57:38.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/jobs.c	2006-03-01 16:26:20.000000000 +0100
@@ -203,7 +203,7 @@
 	if(sig)
 		flags = WNOHANG|WUNTRACED|wcontinued;
 	else
-		flags = WUNTRACED;
+		flags = WUNTRACED|wcontinued;
 	sh.waitevent = 0;
 	oerrno = errno;
 	while(1)
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/lex.c ksh93_2006_05_30/src/cmd/ksh93/sh/lex.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/lex.c	2005-11-30 22:02:56.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/lex.c	2006-05-17 16:23:01.000000000 +0200
@@ -997,13 +997,19 @@
 				n = endchar();
 				if(c==RBRACT  && !(n==RBRACT || n==RPAREN))
 					continue;
-				else if((c==RBRACE||c==RPAREN) && n==RPAREN && fcpeek(0)==LPAREN)
+				if((c==RBRACE||c==RPAREN) && n==RPAREN)
 				{
-					if(c==RPAREN)
-						fcseek(1);
-					continue;
+					if(fcgetc(n)==LPAREN)
+					{
+						if(c!=RPAREN)
+							fcseek(-1);
+						continue;
+					}
+					if(n>0)
+						fcseek(-1);
+					n = RPAREN;
 				}
-				else if(c==';' && n!=';')
+				if(c==';' && n!=';')
 				{
 					if(lexd.warn && n==RBRACE)
 						errormsg(SH_DICT,ERROR_warn(0),e_lexusequote,shp->inlineno,c);
@@ -1596,6 +1602,28 @@
 	{
 		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);
 		}
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/macro.c ksh93_2006_05_30/src/cmd/ksh93/sh/macro.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/macro.c	2005-12-07 18:27:54.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/macro.c	2006-05-22 19:47:24.000000000 +0200
@@ -41,6 +41,8 @@
 #include	"shnodes.h"
 #include	"path.h"
 #include	"national.h"
+#include	<float.h>
+
 
 #undef STR_GROUP
 #ifndef STR_GROUP
@@ -266,6 +268,29 @@
 	cp = fcseek(0);
 	while(1)
 	{
+#if SHOPT_MULTIBYTE
+		if(mbwide())
+		{
+			do
+			{
+				ssize_t len;
+				switch(len = mbsize(cp))
+				{
+				    case -1:	/* illegal multi-byte char */
+				    case 0:
+				    case 1:
+					n=state[*(unsigned char*)cp++];
+					break;
+				    default:
+					/* use state of alpah character */
+					n=state['a'];
+					cp += len;
+				}
+			}
+			while(n == 0);
+		}
+		else
+#endif /* SHOPT_MULTIBYTE */
 		while((n=state[*(unsigned char*)cp++])==0);
 		if(n==S_NL || n==S_QUOTE || n==S_RBRA)
 			continue;
@@ -395,8 +420,35 @@
 		cp++;
 	while(1)
 	{
-		while((n=state[*(unsigned char*)cp++])==0);
-		c = (cp-1) - first;
+#if SHOPT_MULTIBYTE
+		if(mbwide())
+		{
+			ssize_t len;
+			do
+			{
+				switch(len = mbsize(sp))
+				{
+				    case -1:	/* illegal multi-byte char */
+				    case 0:
+					len = 1;
+				    case 1:
+					n = state[*(unsigned char*)cp++];
+					break;
+				    default:
+					/* treat as if alpha */
+					cp += len;
+					n=state['a'];
+				}
+			}
+			while(n == 0);
+			c = (cp-len) - first;
+		}
+		else
+#endif /* SHOPT_MULTIBYTE */
+		{
+			while((n=state[*(unsigned char*)cp++])==0);
+			c = (cp-1) - first;
+		}
 		switch(n)
 		{
 		    case S_ESC:
@@ -1581,7 +1633,6 @@
 		t = sh_dolparen();
 		if(t && t->tre.tretyp==TARITH)
 		{
-			char numbuf[20];
 			str =  t->ar.arexpr->argval;
 			fcsave(&save);
 			if(!(t->ar.arexpr->argflag&ARG_RAW))
@@ -1591,9 +1642,10 @@
 			stakset(savptr,savtop);
 			*mp = savemac;
 			if((Sflong_t)num==num)
-				sfsprintf(str=numbuf,sizeof(numbuf),"%lld\0",(Sflong_t)num);
+				sfprintf(sh.strbuf,"%lld",(Sflong_t)num);
 			else
-				sfsprintf(str=numbuf,sizeof(numbuf),"%.*Lg\0",12,num);
+				sfprintf(sh.strbuf,"%.*Lg",LDBL_DIG,num);
+			str = sfstruse(sh.strbuf);
 			mac_copy(mp,str,strlen(str));
 			sh.st.staklist = saveslp;
 			fcrestore(&save);
@@ -2175,7 +2227,8 @@
  */
 static void mac_error(Namval_t *np)
 {
-	nv_close(np);
+	if(np)
+		nv_close(np);
 	errormsg(SH_DICT,ERROR_exit(1),e_subst,fcfirst());
 }
 
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/name.c ksh93_2006_05_30/src/cmd/ksh93/sh/name.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/name.c	2006-02-08 16:46:25.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/name.c	2006-05-22 20:24:46.000000000 +0200
@@ -31,6 +31,7 @@
 #include	"timeout.h"
 #include	"FEATURE/locale"
 #include	"FEATURE/externs"
+#include	<float.h>
 
 #if !_lib_pathnative && _lib_uwin_path
 
@@ -381,7 +382,6 @@
 	Namfun_t		*fp=0;
 	long			mode, add=0;
 	int			copy=1,isref,top=0,noscope=(flags&NV_NOSCOPE);
-	Dt_t 			*funtree= 0;
 	if(root==sh.var_tree)
 	{
 		if(dtvnext(root))
@@ -389,8 +389,6 @@
 		else
 			flags &= ~NV_NOSCOPE;
 	}
-	else if(root==sh_subfuntree(1))
-		funtree = root;
 	if(!dp->disc)
 		copy = dp->nofree;
 	if(*cp=='.')
@@ -418,11 +416,6 @@
 				sp = (char*)name+c;
 				c = '.';
 			}
-			if(funtree)
-			{
-				root = sh.var_tree;
-				flags &= ~NV_NOSCOPE;
-			}
 		skip:
 		    case '+':
 		    case '=':
@@ -444,8 +437,8 @@
 						flags &= ~NV_NOSCOPE;
 					else if(nq)
 					{
-						if(nv_isnull(np) && c!='.')
-							np->nvfun=nv_cover(nq);
+						if(nv_isnull(np) && c!='.' && (np->nvfun=nv_cover(nq)))
+							np->nvname = nq->nvname;
 						flags |= NV_NOSCOPE;
 					}
 				}
@@ -484,6 +477,8 @@
 					sp = (char*)name + copy;
 					cp = sp+c;
 					c = *sp;
+					if(!noscope)
+						flags &= ~NV_NOSCOPE;
 				}
 				flags |= NV_NOREF;
 			}
@@ -504,7 +499,7 @@
 					if(c!='.')
 						return(np);
 				}
-				if(!funtree && (fp=np->nvfun))
+				if(fp=np->nvfun)
 				{
 					for(; fp; fp=fp->next)
 					{
@@ -524,11 +519,6 @@
 				}
 			}
 			while(c!='.');
-			if(funtree)
-			{
-				root = funtree;
-				flags |= noscope;
-			}
 			cp++;
 			break;
 		    default:
@@ -561,6 +551,8 @@
 	Namfun_t		fun;
 	int			append=0, copy=0;
 	const char		*msg = e_varname;
+	char			*fname = 0;
+	Dt_t			*funroot;
 
 	sh.last_table = sh.namespace;
 	if(!root)
@@ -569,11 +561,15 @@
 	{
 		flags |= NV_NOREF;
 		msg = e_funname;
-		if(sh.namespace && !strchr(name,'.'))
+		if((np=sh.namespace) || strchr(name,'.'))
 		{
-			name = cp = copystack(nv_name(sh.namespace),name,(const char*)0);
+			name = cp = copystack(np?nv_name(np):0,name,(const char*)0);
+			fname = strrchr(cp,'.');
+			*fname = 0;
+			funroot = root;
 			copy = 1;
 			flags &=  ~NV_IDENT;
+			root = sh.var_tree;
 		}
 	}
 	else if(!(flags&(NV_IDENT|NV_VARNAME|NV_ASSIGN)))
@@ -627,7 +623,15 @@
 	fun.disc = 0;
 	fun.nofree = copy;
 	np = nv_create(name, root, flags, &fun);
-	if(*(cp=fun.last)=='+' && cp[1]=='=')
+	cp = fun.last;
+	if(fname)
+	{
+		c = ((flags&NV_NOSCOPE)?HASH_NOSCOPE:0)|((flags&NV_NOADD)?0:NV_ADD);
+		*fname = '.';
+		np = nv_search(name, funroot, c);
+		*fname = 0;
+	}
+	if(*cp=='+' && cp[1]=='=')
 	{
 		append=NV_APPEND;
 		cp++;
@@ -700,7 +704,7 @@
 		{
 			nv_local=1;
 			nv_putv(np,sp,flags,np->nvfun);
-			if((flags&NV_EXPORT) || nv_isattr(np,NV_EXPORT))
+			if(sp && ((flags&NV_EXPORT) || nv_isattr(np,NV_EXPORT)))
 				sh_envput(sh.env,np);
 			return;
 		}
@@ -709,7 +713,7 @@
 	flags &= ~NV_NODISC;
 	if(flags&(NV_NOREF|NV_NOFREE))
 	{
-		if(!nv_isnull(np))
+		if(!nv_isnull(np) && np->nvalue.cp!=sp)
 			nv_unset(np);
 		nv_local=0;
 		np->nvalue.cp = (char*)sp;
@@ -785,6 +789,15 @@
 						else
 							ll = *((double*)sp);
 					}
+					else if(nv_isattr(np,NV_UNSIGN))
+					{
+						if(flags&NV_LONG)
+							ll = *((Sfulong_t*)sp);
+						else if(flags&NV_SHORT)
+							ll = *((unsigned short*)sp);
+						else
+							ll = *((unsigned long*)sp);
+					}
 					else
 					{
 						if(flags&NV_LONG)
@@ -819,6 +832,15 @@
 							ll = *((double*)sp);
 						l = (long)ll;
 					}
+					else if(nv_isattr(np,NV_UNSIGN))
+					{
+						if(flags&NV_LONG)
+							l = *((Sfulong_t*)sp);
+						else if(flags&NV_SHORT)
+							l = *((unsigned short*)sp);
+						else
+							l = *(unsigned long*)sp;
+					}
 					else
 					{
 						if(flags&NV_LONG)
@@ -861,7 +883,6 @@
 	else
 	{
 		const char *tofree=0;
-		char numbuf[40];
 		int offset;
 #if _lib_pathnative
 		char buff[PATH_MAX];
@@ -871,15 +892,15 @@
 			if(flags&NV_DOUBLE)
 			{
 				if(flags&NV_LONG)
-					sfsprintf(numbuf,sizeof(numbuf),"%.*Lg\0",12,*((Sfdouble_t*)sp));
+					sfprintf(sh.strbuf,"%.*Lg",LDBL_DIG,*((Sfdouble_t*)sp));
 				else
-					sfsprintf(numbuf,sizeof(numbuf),"%.*g\0",12,*((double*)sp));
+					sfprintf(sh.strbuf,"%.*g",DBL_DIG,*((double*)sp));
 			}
 			else if(flags&NV_LONG)
-				sfsprintf(numbuf,sizeof(numbuf),"%lld\0",*((Sflong_t*)sp));
+				sfprintf(sh.strbuf,"%lld\0",*((Sflong_t*)sp));
 			else
-				sfsprintf(numbuf,sizeof(numbuf),"%ld\0",*((long*)sp));
-			sp = numbuf;
+				sfprintf(sh.strbuf,"%ld\0",*((long*)sp));
+			sp = sfstruse(sh.strbuf);
 		}
 		if(nv_isattr(np, NV_HOST)==NV_HOST && sp)
 		{
@@ -1310,7 +1331,8 @@
 	newscope = dtopen(&_Nvdisc,Dtbag);
 	dtview(newscope,(Dt_t*)sh.var_tree);
 	sh.var_tree = (Dt_t*)newscope;
-	nv_setlist(envlist,NV_EXPORT|NV_NOSCOPE|NV_IDENT|NV_ASSIGN);
+	if(envlist)
+		nv_setlist(envlist,NV_EXPORT|NV_NOSCOPE|NV_IDENT|NV_ASSIGN);
 }
 
 /* 
@@ -1391,7 +1413,7 @@
 	if(is_afunction(np) && np->nvalue.ip)
 	{
 		register struct slnod *slp = (struct slnod*)(np->nvenv);
-		if(slp)
+		if(slp && !nv_isattr(np,NV_NOFREE))
 		{
 			/* free function definition */
 			register char *name=nv_name(np),*cp= strrchr(name,'.');
@@ -1641,44 +1663,48 @@
 		{
 			Sfdouble_t ld;
 			double d;
-			char *curbuf, *format;
-			long l = nv_size(np)+30;
-			curbuf = getbuf(l);
+			char *format;
 			if(nv_isattr(np,NV_LONG))
 			{
 				ld = *up->ldp;
 				if(nv_isattr (np,NV_EXPNOTE))
-					format = "%.*Lg\0";
+					format = "%.*Lg";
 				else
-					format = "%.*Lf\0";
-				sfsprintf(curbuf,l,format,nv_size(np),ld);
+					format = "%.*Lf";
+				sfprintf(sh.strbuf,format,nv_size(np),ld);
 			}
 			else
 			{
 				d = *up->dp;
 				if(nv_isattr (np,NV_EXPNOTE))
-					format = "%.*g\0";
+					format = "%.*g";
 				else
-					format = "%.*f\0";
-				sfsprintf(curbuf,l,format,nv_size(np),d);
+					format = "%.*f";
+				sfprintf(sh.strbuf,format,nv_size(np),d);
 			}
-			return(curbuf);
+			return(sfstruse(sh.strbuf));
+		}
+		else if(nv_isattr(np,NV_UNSIGN))
+		{
+	        	if(nv_isattr (np,NV_LONG))
+				ll = *(Sfulong_t*)up->llp;
+			else if(nv_isattr (np,NV_SHORT))
+				ll = (unsigned short)up->s;
+			else
+				ll = *(unsigned long*)(up->lp);
 		}
         	else if(nv_isattr (np,NV_LONG))
 			ll = *up->llp;
         	else if(nv_isattr (np,NV_SHORT))
 			ll = up->s;
-		else if(nv_isattr(np,NV_UNSIGN))
-			ll = (unsigned long)*(up->lp);
         	else
 			ll = *(up->lp);
 		if((numeric=nv_size(np))==10)
 		{
 			if(nv_isattr(np,NV_UNSIGN))
 			{
-				char *cp=fmtbuf(36);
-				sfsprintf(cp,36,"%I*u",sizeof(ll),ll);
-				return(cp);
+				sfprintf(sh.strbuf,"%I*u",sizeof(ll),ll);
+				return(sfstruse(sh.strbuf));
 			}
 			numeric = 0;
 		}
@@ -1698,6 +1724,13 @@
 		return(cp);
 	}
 #endif
+	if((numeric=nv_size(np)) && up->cp && up->cp[numeric])
+	{
+		char *cp = getbuf(numeric+1);
+		memcpy(cp,up->cp,numeric);
+		cp[numeric]=0;
+		return(cp);
+	}
 	return ((char*)up->cp);
 }
 
@@ -1983,7 +2016,8 @@
 		errormsg(SH_DICT,ERROR_exit(1),e_badref,nv_name(np));
 	if(!(cp=nv_getval(np)))
 		errormsg(SH_DICT,ERROR_exit(1),e_noref,nv_name(np));
-	ep = lastdot(cp);
+	if((ep = lastdot(cp)) && nv_isattr(np,NV_MINIMAL))
+		errormsg(SH_DICT,ERROR_exit(1),e_badref,nv_name(np));
 	if(nv_isattr(np,NV_PARAM))
 	{
 		if(sh.st.prevst && !(hp=(Dt_t*)sh.st.prevst->save_tree))
@@ -2143,11 +2177,9 @@
 
 char *nv_name(register Namval_t *np)
 {
-	register int len;
 	register Namval_t *table;
 	register Namfun_t *fp;
-	char *curbuf, *cp;
-	int inbuff;
+	char *cp;
 	if(is_abuiltin(np) || is_afunction(np))
 		return(np->nvname);
 	if(nv_istable(np))
@@ -2169,13 +2201,8 @@
 	if(!(table=sh.last_table) || *np->nvname=='.' || table==sh.namespace || np==table)
 		return(np->nvname);
 	cp = nv_name(table);
-	inbuff = (cp==getbuf(0));
-	len = strlen(cp) + strlen(np->nvname) + 2;
-	curbuf = getbuf(len);
-	if(inbuff)
-		cp = curbuf;
-	sfsprintf(curbuf,len,"%s.%s\0",cp,np->nvname);
-	return(curbuf);
+	sfprintf(sh.strbuf,"%s.%s",cp,np->nvname);
+	return(sfstruse(sh.strbuf));
 }
 
 Namval_t *nv_lastdict(void)
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/nvdisc.c ksh93_2006_05_30/src/cmd/ksh93/sh/nvdisc.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/nvdisc.c	2005-09-19 16:01:53.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/nvdisc.c	2006-04-26 22:49:01.000000000 +0200
@@ -28,13 +28,14 @@
 #include        "builtins.h"
 #include        "path.h"
 
+static const char *discnames[] = { "get", "set", "append", "unset", 0 };
+
 /*
  * call the next getval function in the chain
  */
 char *nv_getv(Namval_t *np, register Namfun_t *nfp)
 {
 	register Namfun_t	*fp;
-	static char numbuf[20];
 	register char *cp;
 	if((fp = nfp) != NIL(Namfun_t*) && !nv_local)
 		fp = nfp = nfp->next;
@@ -49,7 +50,10 @@
 	if(fp && fp->disc->getval)
 		cp = (*fp->disc->getval)(np,fp);
 	else if(fp && fp->disc->getnum)
-		sfsprintf(cp=numbuf,sizeof(numbuf),"%.*Lg\0",12,(*fp->disc->getnum)(np,fp));
+	{
+		sfprintf(sh.strbuf,"%.*Lg",12,(*fp->disc->getnum)(np,fp));
+		cp = sfstruse(sh.strbuf);
+	}
 	else
 	{
 		nv_local=1;
@@ -250,13 +254,16 @@
 		int n;
 		for(n=0; n < sizeof(vp->disc)/sizeof(*vp->disc); n++)
 		{
-			if(nq=vp->disc[n])
+			if((nq=vp->disc[n]) && !nv_isattr(nq,NV_NOFREE))
 			{
 				nv_unset(nq);
 				dtdelete(root,nq);
 			}
 		}
-		nv_unset(np);
+		nv_putv(np, val, flags, handle);
+		nv_disc(np,handle,NV_POP);
+		if(!handle->nofree)
+			free(handle);
 	}
 }
 
@@ -306,7 +313,6 @@
 	char *empty = "";
 	if(np == (Namval_t*)fp)
 	{
-		static const char *discnames[] = { "get", "set", "append", "unset", 0 };
 		register const char *name;
 		register int getname=0;
 		/* top level call, check for get/set */
@@ -437,7 +443,7 @@
 		for(i=0; vp->bnames[i]; i++)
 		{
 			register Namval_t *mp;
-			if(mp=vp->bltins[i])
+			if((mp=vp->bltins[i]) && !nv_isattr(mp,NV_NOFREE))
 			{
 				if(is_abuiltin(mp))
 				{
@@ -449,10 +455,10 @@
 			}
 		}
 		nv_disc(np,fp,NV_POP);
+		if(!fp->nofree)
+			free((void*)fp);
 			
 	}
-	if(!fp->nofree)
-		free((void*)fp);
 }
 
 static const Namdisc_t Nv_bdisc	= {   0, putdisc, 0, 0, setdisc };
@@ -470,7 +476,7 @@
 	return(nfp);
 }
 
-int nv_adddisc(Namval_t *np, const char **names)
+int nv_adddisc(Namval_t *np, const char **names, Namval_t **funs)
 {
 	register Nambfun_t *vp;
 	register int n=0;
@@ -483,7 +489,10 @@
 	if(!(vp = newof(NIL(Nambfun_t*),Nambfun_t,1,n*sizeof(Namval_t*))))
 		return(0);
 	vp->fun.dsize = sizeof(Nambfun_t)+n*sizeof(Namval_t*);
-	while(n>=0)
+	vp->fun.funs = 1;
+	if(funs)
+		memcpy((void*)vp->bltins, (void*)funs,n*sizeof(Namval_t*));
+	else while(n>=0)
 		vp->bltins[n--] = 0;
 	vp->fun.disc = &Nv_bdisc;
 	vp->bnames = names; 
@@ -680,28 +689,43 @@
 	return(nval);
 }
 
+static void clone_all_disc( Namval_t *np, Namval_t *mp, int flags)
+{
+	register Namfun_t *fp, **mfp = &mp->nvfun, *nfp;
+	for(fp=np->nvfun; fp;fp=fp->next)
+	{
+		if(fp->funs && (flags&NV_NODISC))
+			nfp = 0;
+		if(fp->disc && fp->disc->clonef)
+			nfp = (*fp->disc->clonef)(np,mp,flags,fp);
+		else
+			nfp = nv_clone_disc(fp);
+		if(!nfp)
+			continue;
+		nfp->next = 0;
+		*mfp = nfp;
+		mfp = &nfp->next;
+	}
+}
+
+/*
+ * clone <mp> from <np> flags can be one of the following
+ * NV_APPEND - append <np> onto <mp>
+ * NV_MOVE - move <np> to <mp>
+ * NV_NOFREE - mark the new node as nofree
+ * NV_NODISC - discplines with funs non-zero will not be copied
+ */
 int nv_clone(Namval_t *np, Namval_t *mp, int flags)
 {
 	Namfun_t *fp;
 	if(fp=np->nvfun)
 	{
-	        register Namfun_t **mfp = &mp->nvfun, *nfp;
 		if(flags&NV_MOVE)
 		{
 			mp->nvfun = fp;
 			goto skip;
 		}
-		while(fp)
-		{
-			if(fp->disc && fp->disc->clonef)
-				nfp = (*fp->disc->clonef)(np,mp,flags,fp);
-			else if(!(nfp = nv_clone_disc(fp)))
-				continue;
-			nfp->next = 0;
-			*mfp = nfp;
-			mfp = &nfp->next;
-	                fp = fp->next;
-		}
+		clone_all_disc(np, mp, flags);
 	}
 	if(flags&NV_APPEND)
 		return(1);
@@ -723,7 +747,7 @@
 	}
 	if(nv_isattr(np,NV_INTEGER))
 		mp->nvalue.ip = (int*)num_clone(np,(void*)np->nvalue.ip);
-	else if(flags)
+	else if(flags&NV_NOFREE)
 	        nv_onattr(np,NV_NOFREE);
 	return(1);
 }
@@ -748,7 +772,7 @@
 	if(!sh.subshell)
 		free((void*)dp);
 	if(val)
-		nv_clone(mp,np,1);
+		nv_clone(mp,np,NV_NOFREE);
 	np->nvalue.cp = 0;
 	nv_putval(np,val,flags);
 }
@@ -1119,3 +1143,29 @@
 	}
 	return(0);
 }
+
+/*
+ * This function turns variable <np>  to the type <tp>
+ */
+int nv_settype(Namval_t* np, Namval_t *tp, int flags)
+{
+	int isnull = nv_isnull(np);
+	char *val=0;
+	if(isnull)
+		flags &= ~NV_APPEND;
+	else
+	{
+		val = strdup(nv_getval(np));
+		if(!(flags&NV_APPEND))
+			_nv_unset(np, NV_RDONLY);
+	}
+	if(!nv_clone(tp,np,flags|NV_NOFREE))
+		return(0);
+	if(val)
+	{
+		nv_putval(np,val,NV_RDONLY);
+		free((void*)val);
+	}
+	return(0);
+}
+
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/nvtree.c ksh93_2006_05_30/src/cmd/ksh93/sh/nvtree.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/nvtree.c	2005-04-21 23:20:24.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/nvtree.c	2006-04-19 22:50:20.000000000 +0200
@@ -47,10 +47,18 @@
 char *nv_getvtree(Namval_t*, Namfun_t *);
 static void put_tree(Namval_t*, const char*, int,Namfun_t*);
 
-static Namval_t *create_tree(Namval_t *np,const char *name,int flag,Namfun_t *fp)
+static Namval_t *create_tree(Namval_t *np,const char *name,int flag,Namfun_t *dp)
 {
-	NOT_USED(name);
-	NOT_USED(fp);
+	register Namfun_t *fp=dp;
+	while(fp=fp->next)
+	{
+		if(fp->disc && fp->disc->createf)
+		{
+			if(np=(*fp->disc->createf)(np,name,flag,fp))
+				dp->last = fp->last;
+			return(np);
+		}
+	}
 	return((flag&NV_NOADD)?0:np);
 }
 
@@ -104,7 +112,7 @@
 	last=dp->data;
 	if(name[len-1]=='*' || name[len-1]=='@')
 		len -= 1;
-	memcpy(last,name,len);
+	name = memcpy(last,name,len);
 	last[len] = 0;
 	dp->len = len;
 	dp->root = sh.var_tree;
@@ -516,6 +524,8 @@
 #endif /* SHOPT_COMPOUND_ARRAY */
 	name = stakfreeze(1);
 	dir = nv_diropen(name);
+	if(subscript)
+		name[strlen(name)-1] = 0;
 	while(cp = nv_dirnext(dir))
 	{
 		stakseek(ARGVAL);
@@ -592,29 +602,3 @@
 	nv_stack(np, nfp);
 }
 
-/*
- * the following three functions are for creating types
- */
-
-int nv_settype(Namval_t* np, Namval_t *tp, int flags)
-{
-	int isnull = nv_isnull(np);
-	char *val=0;
-	if(isnull)
-		flags &= ~NV_APPEND;
-	else
-	{
-		val = strdup(nv_getval(np));
-		if(!(flags&NV_APPEND))
-			_nv_unset(np, NV_RDONLY);
-	}
-	if(!nv_clone(tp,np,flags|NV_NOFREE))
-		return(0);
-	if(val)
-	{
-		nv_putval(np,val,NV_RDONLY);
-		free((void*)val);
-	}
-	return(0);
-}
-
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/parse.c ksh93_2006_05_30/src/cmd/ksh93/sh/parse.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/parse.c	2005-11-30 23:16:13.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/parse.c	2006-05-08 23:02:47.000000000 +0200
@@ -1512,6 +1512,23 @@
 	return(t);
 }
 
+/*
+ * convert =~ into == ~(E)
+ */
+static void ere_match(void)
+{
+	Sfio_t *base, *iop = sfopen((Sfio_t*)0," ~(E)","s");
+	register int c;
+	while( fcgetc(c),(c==' ' || c=='\t'));
+	if(c)
+		fcseek(-1);
+	if(!(base=fcfile()))
+		base = sfopen(NIL(Sfio_t*),fcseek(0),"s");
+	fcclose();
+        sfstack(base,iop);
+        fcfopen(base);
+}
+
 static Shnode_t *test_primary(void)
 {
 	register struct argnod *arg;
@@ -1550,7 +1567,15 @@
 	    case 0:
 		arg = shlex.arg;
 		if((token=sh_lex())==TESTBINOP)
+		{
 			num = shlex.digits;
+			if(num==TEST_REP)
+			{
+				ere_match();
+				num = TEST_PEQ;
+			}
+
+		}
 		else if(token=='<')
 			num = TEST_SLT;
 		else if(token=='>')
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/string.c ksh93_2006_05_30/src/cmd/ksh93/sh/string.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/string.c	2005-09-01 07:23:48.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/string.c	2006-05-17 00:03:25.000000000 +0200
@@ -24,6 +24,7 @@
  */
 
 #include	<ast.h>
+#include	<ast_wchar.h>
 #include	"defs.h"
 #include	<stak.h>
 #include	<ctype.h>
@@ -36,8 +37,12 @@
 #define mbchar(p)	(*(unsigned char*)p++)
 #endif
 
+#if _hdr_wctype
+#   include <wctype.h>
+#endif
+
 #if !_lib_iswprint && !defined(iswprint)
-#   define iswprint(c)		((c&~0377) || isprint(c))
+#   define iswprint(c)		(((c)&~0377) || isprint(c))
 #endif
 
 
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh/xec.c ksh93_2006_05_30/src/cmd/ksh93/sh/xec.c
--- ksh93_2006_02_14/src/cmd/ksh93/sh/xec.c	2006-02-16 02:11:32.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/sh/xec.c	2006-04-26 22:53:27.000000000 +0200
@@ -1299,7 +1299,7 @@
 				args=sh_argbuild(&argn,tp,0);
 				nargs = argn;
 			}
-			np = nv_open(t->for_.fornam, sh.var_tree,NV_NOASSIGN|NV_ARRAY|NV_VARNAME|NV_NOREF);
+			np = nv_open(t->for_.fornam, sh.var_tree,NV_NOASSIGN|NV_NOARRAY|NV_VARNAME|NV_NOREF);
 			nameref = nv_isref(np)!=0;
 			sh.st.loopcnt++;
 			cp = *args;
@@ -1652,7 +1652,7 @@
 				stakputc('.');
 				stakputs(fname);
 				stakputc(0);
-				np = nv_open(stakptr(offset),sh.var_base,NV_NOASSIGN|NV_ARRAY|NV_VARNAME);
+				np = nv_open(stakptr(offset),sh.var_base,NV_NOASSIGN|NV_NOARRAY|NV_VARNAME);
 				offset = staktell();
 				sh.namespace = np;
 				if(!(root=nv_dict(np)))
@@ -1691,7 +1691,7 @@
 				int offset = staktell();
 				stakwrite(fname,cp-fname);
 				stakputc(0);
-				npv = nv_open(stakptr(offset),sh.var_tree,NV_NOASSIGN|NV_ARRAY|NV_VARNAME);
+				npv = nv_open(stakptr(offset),sh.var_tree,NV_NOASSIGN|NV_NOARRAY|NV_VARNAME);
 				offset = staktell();
 				stakputs(nv_name(npv));
 				stakputs(cp);
@@ -1709,7 +1709,7 @@
 				fname = stakptr(offset);
 			}
 #endif /* SHOPT_NAMESPACE */
-			np = nv_open(fname,sh_subfuntree(1),NV_NOASSIGN|NV_ARRAY|NV_VARNAME|NV_NOSCOPE);
+			np = nv_open(fname,sh_subfuntree(1),NV_NOASSIGN|NV_NOARRAY|NV_VARNAME|NV_NOSCOPE);
 			if(npv)
 			{
 				cp = nv_setdisc(npv,cp+1,np,(Namfun_t*)npv);
@@ -2105,6 +2105,19 @@
 }
 
 /*
+ * add exports from previous scope to the new scope
+ */
+static void  local_exports(register Namval_t *np, void *data)
+{
+	register Namval_t	*mp;
+	register char		*cp;
+	if(nv_isarray(np))
+		nv_putsub(np,NIL(char*),0);
+	if((cp = nv_getval(np)) && (mp = nv_search(nv_name(np), sh.var_tree, NV_ADD|HASH_NOSCOPE)) && nv_isnull(mp))
+		nv_putval(mp, cp, 0);
+}
+
+/*
  * This routine is used to execute the given function <fun> in a new scope
  * If <fun> is NULL, then arg points to a structure containing a pointer
  *  to a function that will be executed in the current environment.
@@ -2137,9 +2150,6 @@
 	{
 		fp = (struct funenv*)arg;
 		envlist = fp->env;
-#if 0
-		sh.st.firstline = (fp->node)->nvalue.rp->lineno;
-#endif
 	}
 	prevscope->save_tree = sh.var_tree;
 	nv_scope(envlist);
@@ -2148,6 +2158,7 @@
 		/* eliminate parent scope */
 		Dt_t *dt = dtview(sh.var_tree,0);
 		dtview(sh.var_tree,dtvnext(prevscope->save_tree));
+		nv_scan(prevscope->save_tree, local_exports,(void*)0,NV_EXPORT,NV_EXPORT|NV_NOSCOPE);
 	}
 	sh.st.save_tree = sh.var_tree;
 	if(!fun)
@@ -2728,15 +2739,15 @@
 		spawnpid = path_spawn(path,argv,arge,pp,(grp<<1)|1);
 		if(spawnpid < 0 && errno==ENOEXEC)
 		{
-			char devfd[14];
+			char *devfd;
 			int fd = open(path,O_RDONLY);
 			argv[-1] = argv[0];
 			argv[0] = path;
 			if(fd>=0)
 			{
 				struct stat statb;
-				sfsprintf(devfd,sizeof(devfd),"/dev/fd/%d\0",fd);
-				if(stat(devfd,&statb)>=0)
+				sfprintf(sh.strbuf,"/dev/fd/%d",fd);
+				if(stat(devfd=sfstruse(sh.strbuf),&statb)>=0)
 					argv[0] =  devfd;
 			}
 			if(!shp->shpath)
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/sh.1 ksh93_2006_05_30/src/cmd/ksh93/sh.1
--- ksh93_2006_02_14/src/cmd/ksh93/sh.1	2005-12-07 17:45:36.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/sh.1	2006-05-17 04:21:31.000000000 +0200
@@ -396,7 +396,7 @@
 the next subsequent list, if any,  is executed.
 .TP
 \f3if\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(OK \
-\f3elif\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(CK .\|.\|. \
+\f3;elif\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(CK .\|.\|. \
 \*(OK \f3;else\fP \f2list\^\fP \*(CK \f3;f\&i\fP
 The
 .I list\^
@@ -694,7 +694,7 @@
 .TP
 .B "fc=hist"
 .TP
-.B "float=\(fmtypeset \-E\(fm"
+.B "float=\(fmtypeset \-lE\(fm"
 .TP
 .B "functions=\(fmtypeset \-f\(fm"
 .TP
@@ -702,7 +702,7 @@
 .TP
 .B "history=\(fmhist \-l\(fm"
 .TP
-.B "integer=\(fmtypeset \-i\(fm"
+.B "integer=\(fmtypeset \-li\(fm"
 .TP
 .B "nameref=\(fmtypeset \-n\(fm"
 .TP
@@ -810,7 +810,7 @@
 can be replaced by the equivalent but faster
 \^\f3$(\^<file\^)\fP\^.
 The command substitution
-\^\f3$(\^\fP\f2n\^\fP\f3\<#\^)\fP
+\^\f3$(\^\fP\f2n\^\fP\f3<#\^)\fP
 will expand to the current byte offset for file descriptor
 .IR n .
 .SS Arithmetic Substitution.
@@ -936,7 +936,7 @@
 The value of all
 subscripts must be in the
 range of
-0 through 4095.
+0 through 1,048,575.
 Indexed arrays need not be declared.
 Any reference to a variable
 with a valid subscript is
@@ -2918,6 +2918,15 @@
 .B .sh.match
 array variable will contain the match and sub-pattern matches.
 .TP
+\f2string\fP \f3\(ap=\fP \f2ere\fP
+True if
+.I string\^
+matches the pattern
+.BI \(ap(E) ere\^
+where
+.I ere\^
+is an extended regular expression.
+.TP
 \f2string1\fP \f3<\fP \f2string2\fP
 True, if
 .I string1\^
@@ -4325,8 +4334,17 @@
 Command or file name completion as described above.
 .PP
 .TP 10
-.B ^I
-Command or file name completion as described above.
+.BI ^I " tab"
+Attempts command or file name completion as described above.
+If a partial completion occurs, repeating this will
+behave as if
+.B M-=
+were entered.
+If no match is found or entered after
+.IR space\^ ,
+a
+.I tab\^
+is inserted.
 .PP
 .TP 10
 .B M-=
@@ -4458,6 +4476,19 @@
 or
 .I kill
 character.
+.TP 10
+.BI ^I  " tab"
+Attempts command or file name completion as described above
+and returns to input mode.
+If a partial completion occurs, repeating this will
+behave as if
+.B =
+were entered from control mode.
+If no match is found or entered after
+.IR space\^ ,
+a
+.I tab\^
+is inserted.
 .RE
 .SS "\ \ \ \ \ Motion Edit Commands"
 .RS
@@ -4739,9 +4770,6 @@
 .TP 10
 .B \e 
 Command or file name completion as described above.
-.TP 10
-.B ^I 
-Command or file name completion as described above.
 .RE
 .SS "\ \ \ \ \ Other Edit Commands"
 .RS
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/tests/arith.sh ksh93_2006_05_30/src/cmd/ksh93/tests/arith.sh
--- ksh93_2006_02_14/src/cmd/ksh93/tests/arith.sh	2006-01-20 00:08:08.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/tests/arith.sh	2006-05-22 22:00:04.000000000 +0200
@@ -431,4 +431,8 @@
 [[ $((5||0)) == 1 ]] || err_exit '$((5||0))'" == $((5||0)) should be 1"
 $SHELL -c 'integer x=3 y=2; (( (y += x += 2) == 7  && x==5))' 2> /dev/null || err_exit '((y += x += 2)) not working' 
 $SHELL -c 'b=0; [[ $((b?a=1:b=9)) == 9 ]]' 2> /dev/null || err_exit 'b?a=1:b=9 not working'
+unset x
+(( x = 4*atan(1.0) ))
+[[ $x == "$((x))" ]] || err_exit  '$x !- $((x)) when x is pi'
+$SHELL -c  "[[  ${x//./} == {14,100}(\d) ]]" 2> /dev/null || err_exit 'pi has less than 14 significant places'
 exit $((Errors))
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/tests/attributes.sh ksh93_2006_05_30/src/cmd/ksh93/tests/attributes.sh
--- ksh93_2006_02_14/src/cmd/ksh93/tests/attributes.sh	2005-11-30 23:11:37.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/tests/attributes.sh	2006-05-01 02:57:04.000000000 +0200
@@ -195,4 +195,11 @@
 typeset -b var
 printf '12%Z34' | read -r -N 5 var
 [[ $var == MTIAMzQ= ]] || err_exit 'binary files with zeros not working'
+unset var
+if	command typeset -usi var=0xfffff 2> /dev/null
+then	(( $var == 0xffff )) || err_exit 'unsigned short integers not working'
+else	err_exit 'typeset -usi cannot be used for unsigned short'
+fi
+[[ $($SHELL -c 'unset foo;typeset -Z2 foo; print ${foo:-3}' 2> /dev/null) == 3 ]]  || err_exit  '${foo:-3} not 3 when typeset -Z2 field undefined'
+[[ $($SHELL -c 'unset foo;typeset -Z2 foo; print ${foo:=3}' 2> /dev/null) == 03 ]]  || err_exit  '${foo:=-3} not 3 when typeset -Z2 foo undefined'
 exit	$((Errors))
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/tests/bracket.sh ksh93_2006_05_30/src/cmd/ksh93/tests/bracket.sh
--- ksh93_2006_02_14/src/cmd/ksh93/tests/bracket.sh	2005-08-17 15:56:32.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/tests/bracket.sh	2006-05-18 14:59:06.000000000 +0200
@@ -227,4 +227,6 @@
 fi
 $SHELL -c 't=1234567890; [[ $t == @({10}(\d)) ]]' 2> /dev/null || err_exit ' @({10}(\d)) pattern not working'
 $SHELL -c 't=1234567890; [[ att_ == ~(E)(att|cus)_.* ]]' 2> /dev/null || err_exit ' ~(E)(att|cus)_* pattern not working'
+$SHELL -c 't=1234567890; [[ att_ =~ (att|cus)_.* ]]' 2> /dev/null || err_exit ' =~ ere not working'
+exit $((Errors))
 exit $((Errors))
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/tests/coprocess.sh ksh93_2006_05_30/src/cmd/ksh93/tests/coprocess.sh
--- ksh93_2006_02_14/src/cmd/ksh93/tests/coprocess.sh	2005-05-24 21:30:17.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/tests/coprocess.sh	2006-03-27 18:27:30.000000000 +0200
@@ -178,4 +178,18 @@
 exec 6>&-
 wait $pid
 (( (SECONDS-s) > 3 )) && err_exit  'time out because builtin keeps fd open'
+cat |& 
+pid=$!
+print foo >&p 2> /dev/null || err_exit 'first write of foo to coprocess failed'
+print foo >&p 2> /dev/null || err_exit 'second write of foo to coprocess failed'
+kill $pid
+wait $pid 2> /dev/null
+cat |& 
+pid=$!
+print -p foo
+print -p bar
+read <&p || err_exit 'first read from coprocess failed'
+read <&p || err_exit 'second read from coprocess failed'
+kill $pid
+wait $pid 2> /dev/null
 exit $((Errors))
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/tests/functions.sh ksh93_2006_05_30/src/cmd/ksh93/tests/functions.sh
--- ksh93_2006_02_14/src/cmd/ksh93/tests/functions.sh	2006-01-24 23:51:56.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/tests/functions.sh	2006-03-28 18:43:35.000000000 +0200
@@ -727,4 +727,15 @@
 	done
 }
 f || err_exit "typeset optimization bug"
+function f
+{
+	print -r -- "$foo$bar"
+}
+function g
+{
+	print -r -- $(bar=bam f)
+}
+unset foo bar
+[[ $(foo=hello g) == hellobam ]] || err_exit 'function exports not passed on'
+[[ $(bar=hello g) == bam ]] || err_exit 'function exports not overridden'
 exit $((Errors))
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/tests/nameref.sh ksh93_2006_05_30/src/cmd/ksh93/tests/nameref.sh
--- ksh93_2006_02_14/src/cmd/ksh93/tests/nameref.sh	2006-02-08 17:00:22.000000000 +0100
+++ ksh93_2006_05_30/src/cmd/ksh93/tests/nameref.sh	2006-05-03 06:14:02.000000000 +0200
@@ -197,4 +197,20 @@
 }
 ps=(a=1 b=2)
 [[ $(selfref ps) == *a=1* ]] ||  err_exit 'local nameref cannot reference global variable of the same name'
+function subref
+{
+	typeset -n foo=$1
+	print -r -- ${foo.a}
+}
+[[ $(subref ps) == 1 ]] ||  err_exit 'local nameref cannot reference global variable child'
+
+unset fun i
+foo=(x=hi)
+function fun
+{
+        nameref i=$1
+        print -r -- "${i.x}"
+}
+i=foo
+[[ $(fun $i) == hi ]] || err_exit 'nameref for compound variable with in function name of caller fails'
 exit $((Errors))
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/tests/tilde.sh ksh93_2006_05_30/src/cmd/ksh93/tests/tilde.sh
--- ksh93_2006_02_14/src/cmd/ksh93/tests/tilde.sh	2005-05-24 21:32:35.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/tests/tilde.sh	2005-08-19 21:54:51.000000000 +0200
@@ -81,4 +81,7 @@
 if	[[ $x != "$HOME:$HOME" ]]
 then	err_exit x=~:~ not $HOME:$HOME
 fi
+HOME=/
+[[ ~ == / ]] || err_exit '~ should be /'
+[[ ~/foo == /foo ]] || err_exit '~/foo should be /foo when ~==/'
 exit $((Errors))
diff -r -N -u ksh93_2006_02_14/src/cmd/ksh93/tests/variables.sh ksh93_2006_05_30/src/cmd/ksh93/tests/variables.sh
--- ksh93_2006_02_14/src/cmd/ksh93/tests/variables.sh	2005-05-24 21:32:40.000000000 +0200
+++ ksh93_2006_05_30/src/cmd/ksh93/tests/variables.sh	2006-04-04 22:47:23.000000000 +0200
@@ -492,4 +492,12 @@
 1)	 err_exit 'append discipline not implemented';;
 *)	 err_exit 'append discipline not working';;
 esac
+.sh.foobar=hello
+{
+	function .sh.foobar.get
+	{
+		.sh.value=world
+	} 
+} 2> /dev/null || err_exit "Can't add get discipline to .sh.foobar"
+[[ ${.sh.foobar} == world ]]  || err_exit 'get discipline for .sh.foobar not working'
 exit $((Errors))
diff -r -N -u ksh93_2006_02_14/src/lib/libast/comp/conf.sh ksh93_2006_05_30/src/lib/libast/comp/conf.sh
--- ksh93_2006_02_14/src/lib/libast/comp/conf.sh	2005-02-06 05:12:56.000000000 +0100
+++ ksh93_2006_05_30/src/lib/libast/comp/conf.sh	2006-05-18 16:41:21.000000000 +0200
@@ -21,7 +21,7 @@
 ########################################################################
 : generate conf info
 #
-# @(#)conf.sh (AT&T Research) 2005-02-04
+# @(#)conf.sh (AT&T Research) 2006-05-09
 #
 # this script generates these files from the table file in the first arg
 # the remaining args are the C compiler name and flags
@@ -261,13 +261,16 @@
 	-e '/^#[^0123456789]*1[ 	]*".*".*/!d' \
 	-e 's/^#[^0123456789]*1[ 	]*"\(.*\)".*/\1/' |
 sort -u > $tmp.f
+{
 sed \
 	-e '/^[ 	]*#[ 	]*define[ 	][ 	]*[ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*[CPS][CIS]_/!d' \
 	-e 's,^[ 	]*#[ 	]*define[ 	]*,,' \
 	-e '/^[^ 	]*[ 	][ 	]*[0123456789]/!d' \
 	-e 's,[ 	].*,,' \
 	-e '/^[S_]/!d' \
-	`cat $tmp.f` 2>/dev/null |
+	`cat $tmp.f` 2>/dev/null
+{ /bin/getconf -a || /usr/bin/getconf -a; } 2>/dev/null | sed 's,[= 	].*,,'
+} |
 sort -u > $tmp.v
 case $debug in
 -d2)	exit ;;
diff -r -N -u ksh93_2006_02_14/src/lib/libast/Mamfile ksh93_2006_05_30/src/lib/libast/Mamfile
--- ksh93_2006_02_14/src/lib/libast/Mamfile	2006-02-16 04:53:04.000000000 +0100
+++ ksh93_2006_05_30/src/lib/libast/Mamfile	2006-05-31 05:25:54.000000000 +0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.1 2006-01-21
+info mam static 00000 1994-07-17 make (AT&T Research) 5.1 2006-05-09
 setv INSTALLROOT ../../..
 setv PACKAGEROOT ../../../../..
 setv AR ar
@@ -36,19 +36,20 @@
 done ${PACKAGEROOT}/lib/package/ast.lic
 make include/ast_version.h
 done include/ast_version.h ignore
+prev include/ast_version.h
 make install
 make ast
 make libast.a archive
 make ast.req
 make FEATURE/standards
-meta FEATURE/standards features/%>FEATURE/% features/standards standards
+meta FEATURE/standards features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/standards standards
 make features/standards
 done features/standards
 exec - iffe -v -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/standards
 done FEATURE/standards generated
 make ast_common.h
 make FEATURE/common
-meta FEATURE/common features/%>FEATURE/% features/common common
+meta FEATURE/common features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/common common
 make features/common
 done features/common
 exec - iffe -v -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/common
@@ -57,13 +58,13 @@
 done ast_common.h generated
 make ast_limits.h
 make FEATURE/limits
-meta FEATURE/limits features/%.c>FEATURE/% features/limits.c limits
+meta FEATURE/limits features/%.c>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/limits.c limits
 make features/limits.c
 make conflim.h implicit
 make conf
 make comp/conf.sh
 done comp/conf.sh
-meta conf %.sh>% comp/conf.sh conf
+meta conf %.sh>% ${PACKAGEROOT}/src/lib/libast/comp/conf.sh conf
 prev comp/conf.sh
 exec - case static,port:$OPTIND:$RANDOM in
 exec - ?*:*:*|*::*|*:*:$RANDOM)
@@ -104,7 +105,7 @@
 make joint.conflib.h implicit joint
 make conflib.h implicit
 make FEATURE/wait implicit
-meta FEATURE/wait features/%>FEATURE/% features/wait wait
+meta FEATURE/wait features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/wait wait
 make features/wait
 done features/wait
 exec - iffe -v -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/wait
@@ -129,7 +130,7 @@
 done sysconf.c generated
 done joint.conflib.h virtual
 make FEATURE/param implicit
-meta FEATURE/param features/%.sh>FEATURE/% features/param.sh param
+meta FEATURE/param features/%.sh>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/param.sh param
 make features/param.sh
 done features/param.sh
 exec - iffe -v -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/param.sh
@@ -148,7 +149,7 @@
 done FEATURE/unistd.lcl generated
 prev FEATURE/common implicit
 make FEATURE/lib implicit
-meta FEATURE/lib features/%>FEATURE/% features/lib lib
+meta FEATURE/lib features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/lib lib
 make features/lib
 done features/lib
 exec - iffe -v -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/lib
@@ -160,7 +161,7 @@
 make std/stdio.h implicit
 make ast_stdio.h implicit
 make FEATURE/stdio
-meta FEATURE/stdio features/%>FEATURE/% features/stdio stdio
+meta FEATURE/stdio features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/stdio stdio
 make features/stdio
 done features/stdio
 exec - iffe -v -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/stdio
@@ -182,7 +183,7 @@
 prev ast_stdio.h
 make ast_nl_types.h
 make FEATURE/nl_types
-meta FEATURE/nl_types features/%>FEATURE/% features/nl_types nl_types
+meta FEATURE/nl_types features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/nl_types nl_types
 make features/nl_types
 done features/nl_types
 exec - iffe -v -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/nl_types
@@ -195,7 +196,7 @@
 done ast_nl_types.h generated
 make ast_wchar.h
 make FEATURE/wchar
-meta FEATURE/wchar features/%>FEATURE/% features/wchar wchar
+meta FEATURE/wchar features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/wchar wchar
 make features/wchar
 done features/wchar
 exec - iffe -v -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/wchar
@@ -267,10 +268,10 @@
 make include/ast_std.h implicit
 make ast_botch.h implicit
 make FEATURE/botch
-meta FEATURE/botch features/%.c>FEATURE/% features/botch.c botch
+meta FEATURE/botch features/%.c>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/botch.c botch
 make features/botch.c
 make FEATURE/types implicit
-meta FEATURE/types features/%>FEATURE/% features/types types
+meta FEATURE/types features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/types types
 make features/types
 done features/types
 prev ast.req
@@ -285,7 +286,7 @@
 done ast_botch.h dontcare generated
 make ast_unistd.h implicit
 make FEATURE/unistd
-meta FEATURE/unistd features/%.c>FEATURE/% features/unistd.c unistd
+meta FEATURE/unistd features/%.c>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/unistd.c unistd
 make features/unistd.c
 make confuni.h implicit
 done confuni.h
@@ -303,17 +304,17 @@
 done ast_unistd.h dontcare generated
 make ast_fcntl.h implicit
 make FEATURE/fcntl
-meta FEATURE/fcntl features/%.c>FEATURE/% features/fcntl.c fcntl
+meta FEATURE/fcntl features/%.c>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/fcntl.c fcntl
 make features/fcntl.c
 make FEATURE/tty implicit
-meta FEATURE/tty features/%>FEATURE/% features/tty tty
+meta FEATURE/tty features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/tty tty
 make features/tty
 done features/tty
 prev ast.req
 exec - iffe -v -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/tty
 done FEATURE/tty generated
 make FEATURE/fs implicit
-meta FEATURE/fs features/%>FEATURE/% features/fs fs
+meta FEATURE/fs features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/fs fs
 make features/fs
 done features/fs
 prev ast.req
@@ -333,7 +334,7 @@
 make include/ls.h implicit
 make ast_mode.h implicit
 make FEATURE/mode
-meta FEATURE/mode features/%.c>FEATURE/% features/mode.c mode
+meta FEATURE/mode features/%.c>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/mode.c mode
 make features/mode.c
 make include/modecanon.h implicit
 done include/modecanon.h
@@ -364,16 +365,16 @@
 done ast_types.h dontcare generated
 make ast_map.h implicit
 make FEATURE/map
-meta FEATURE/map features/%.c>FEATURE/% features/map.c map
+meta FEATURE/map features/%.c>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/map.c map
 make features/map.c
 make FEATURE/vmalloc implicit
-meta FEATURE/vmalloc features/%>FEATURE/% features/vmalloc vmalloc
+meta FEATURE/vmalloc features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/vmalloc vmalloc
 make features/vmalloc
 done features/vmalloc
 prev ast.req
 exec - iffe -v -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/vmalloc
 make FEATURE/mmap implicit
-meta FEATURE/mmap features/%>FEATURE/% features/mmap mmap
+meta FEATURE/mmap features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/mmap mmap
 make features/mmap
 done features/mmap
 prev ast.req
@@ -392,7 +393,7 @@
 prev std/limits.h implicit
 make ast_hdr.h implicit
 make FEATURE/hdr
-meta FEATURE/hdr features/%>FEATURE/% features/hdr hdr
+meta FEATURE/hdr features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/hdr hdr
 make features/hdr
 done features/hdr
 prev ast.req
@@ -417,7 +418,7 @@
 prev include/ast_version.h implicit
 done include/ast.h
 done misc/state.c
-meta state.o %.c>%.o misc/state.c state
+meta state.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/misc/state.c state
 prev misc/state.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c misc/state.c
 done state.o generated
@@ -438,7 +439,7 @@
 make std/dirent.h implicit
 make ast_dirent.h implicit
 make FEATURE/dirent
-meta FEATURE/dirent features/%>FEATURE/% features/dirent dirent
+meta FEATURE/dirent features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/dirent dirent
 make features/dirent
 done features/dirent
 prev ast.req
@@ -453,7 +454,7 @@
 prev include/ast.h implicit
 done dir/dirlib.h
 done dir/opendir.c
-meta opendir.o %.c>%.o dir/opendir.c opendir
+meta opendir.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/dir/opendir.c opendir
 prev dir/opendir.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Idir -Iinclude -Istd -D_PACKAGE_ast -c dir/opendir.c
 done opendir.o generated
@@ -461,7 +462,7 @@
 make dir/readdir.c
 prev dir/dirlib.h implicit
 done dir/readdir.c
-meta readdir.o %.c>%.o dir/readdir.c readdir
+meta readdir.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/dir/readdir.c readdir
 prev dir/readdir.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Idir -Iinclude -Istd -D_PACKAGE_ast -c dir/readdir.c
 done readdir.o generated
@@ -469,7 +470,7 @@
 make dir/rewinddir.c
 prev dir/dirlib.h implicit
 done dir/rewinddir.c
-meta rewinddir.o %.c>%.o dir/rewinddir.c rewinddir
+meta rewinddir.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/dir/rewinddir.c rewinddir
 prev dir/rewinddir.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Idir -Iinclude -Istd -D_PACKAGE_ast -c dir/rewinddir.c
 done rewinddir.o generated
@@ -477,7 +478,7 @@
 make dir/seekdir.c
 prev dir/dirlib.h implicit
 done dir/seekdir.c
-meta seekdir.o %.c>%.o dir/seekdir.c seekdir
+meta seekdir.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/dir/seekdir.c seekdir
 prev dir/seekdir.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Idir -Iinclude -Istd -D_PACKAGE_ast -c dir/seekdir.c
 done seekdir.o generated
@@ -485,7 +486,7 @@
 make dir/telldir.c
 prev dir/dirlib.h implicit
 done dir/telldir.c
-meta telldir.o %.c>%.o dir/telldir.c telldir
+meta telldir.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/dir/telldir.c telldir
 prev dir/telldir.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Idir -Iinclude -Istd -D_PACKAGE_ast -c dir/telldir.c
 done telldir.o generated
@@ -507,7 +508,7 @@
 done include/ast_dir.h dontcare
 prev include/ast.h implicit
 done misc/getcwd.c
-meta getcwd.o %.c>%.o misc/getcwd.c getcwd
+meta getcwd.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/misc/getcwd.c getcwd
 prev misc/getcwd.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Idir -Iinclude -Istd -D_PACKAGE_ast -c misc/getcwd.c
 done getcwd.o generated
@@ -529,7 +530,7 @@
 prev include/ast.h implicit
 done misc/findlib.h
 done misc/fastfind.c
-meta fastfind.o %.c>%.o misc/fastfind.c fastfind
+meta fastfind.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/misc/fastfind.c fastfind
 prev misc/fastfind.c
 exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${CCFLAGS.FORCE}?} -I. -Icomp -Imisc -Iinclude -Istd -D_PACKAGE_ast -c misc/fastfind.c
 done fastfind.o generated
@@ -543,7 +544,7 @@
 prev include/ast.h implicit
 done hash/hashlib.h
 done hash/hashalloc.c
-meta hashalloc.o %.c>%.o hash/hashalloc.c hashalloc
+meta hashalloc.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/hashalloc.c hashalloc
 prev hash/hashalloc.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/hashalloc.c
 done hashalloc.o generated
@@ -551,7 +552,7 @@
 make hash/hashdump.c
 prev hash/hashlib.h implicit
 done hash/hashdump.c
-meta hashdump.o %.c>%.o hash/hashdump.c hashdump
+meta hashdump.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/hashdump.c hashdump
 prev hash/hashdump.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/hashdump.c
 done hashdump.o generated
@@ -559,7 +560,7 @@
 make hash/hashfree.c
 prev hash/hashlib.h implicit
 done hash/hashfree.c
-meta hashfree.o %.c>%.o hash/hashfree.c hashfree
+meta hashfree.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/hashfree.c hashfree
 prev hash/hashfree.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/hashfree.c
 done hashfree.o generated
@@ -567,7 +568,7 @@
 make hash/hashlast.c
 prev hash/hashlib.h implicit
 done hash/hashlast.c
-meta hashlast.o %.c>%.o hash/hashlast.c hashlast
+meta hashlast.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/hashlast.c hashlast
 prev hash/hashlast.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/hashlast.c
 done hashlast.o generated
@@ -575,7 +576,7 @@
 make hash/hashlook.c
 prev hash/hashlib.h implicit
 done hash/hashlook.c
-meta hashlook.o %.c>%.o hash/hashlook.c hashlook
+meta hashlook.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/hashlook.c hashlook
 prev hash/hashlook.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/hashlook.c
 done hashlook.o generated
@@ -583,7 +584,7 @@
 make hash/hashscan.c
 prev hash/hashlib.h implicit
 done hash/hashscan.c
-meta hashscan.o %.c>%.o hash/hashscan.c hashscan
+meta hashscan.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/hashscan.c hashscan
 prev hash/hashscan.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/hashscan.c
 done hashscan.o generated
@@ -591,7 +592,7 @@
 make hash/hashsize.c
 prev hash/hashlib.h implicit
 done hash/hashsize.c
-meta hashsize.o %.c>%.o hash/hashsize.c hashsize
+meta hashsize.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/hashsize.c hashsize
 prev hash/hashsize.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/hashsize.c
 done hashsize.o generated
@@ -599,7 +600,7 @@
 make hash/hashview.c
 prev hash/hashlib.h implicit
 done hash/hashview.c
-meta hashview.o %.c>%.o hash/hashview.c hashview
+meta hashview.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/hashview.c hashview
 prev hash/hashview.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/hashview.c
 done hashview.o generated
@@ -607,7 +608,7 @@
 make hash/hashwalk.c
 prev hash/hashlib.h implicit
 done hash/hashwalk.c
-meta hashwalk.o %.c>%.o hash/hashwalk.c hashwalk
+meta hashwalk.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/hashwalk.c hashwalk
 prev hash/hashwalk.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/hashwalk.c
 done hashwalk.o generated
@@ -615,7 +616,7 @@
 make hash/memhash.c
 prev hash/hashlib.h implicit
 done hash/memhash.c
-meta memhash.o %.c>%.o hash/memhash.c memhash
+meta memhash.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/memhash.c memhash
 prev hash/memhash.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/memhash.c
 done memhash.o generated
@@ -623,7 +624,7 @@
 make hash/memsum.c
 prev hash/hashlib.h implicit
 done hash/memsum.c
-meta memsum.o %.c>%.o hash/memsum.c memsum
+meta memsum.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/memsum.c memsum
 prev hash/memsum.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/memsum.c
 done memsum.o generated
@@ -631,7 +632,7 @@
 make hash/strhash.c
 prev hash/hashlib.h implicit
 done hash/strhash.c
-meta strhash.o %.c>%.o hash/strhash.c strhash
+meta strhash.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/strhash.c strhash
 prev hash/strhash.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/strhash.c
 done strhash.o generated
@@ -641,7 +642,7 @@
 done include/hashkey.h
 prev include/ast.h implicit
 done hash/strkey.c
-meta strkey.o %.c>%.o hash/strkey.c strkey
+meta strkey.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/strkey.c strkey
 prev hash/strkey.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c hash/strkey.c
 done strkey.o generated
@@ -649,7 +650,7 @@
 make hash/strsum.c
 prev hash/hashlib.h implicit
 done hash/strsum.c
-meta strsum.o %.c>%.o hash/strsum.c strsum
+meta strsum.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/hash/strsum.c strsum
 prev hash/strsum.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Ihash -Iinclude -Istd -D_PACKAGE_ast -c hash/strsum.c
 done strsum.o generated
@@ -658,7 +659,7 @@
 make include/ccode.h implicit
 make ast_ccode.h implicit
 make FEATURE/ccode
-meta FEATURE/ccode features/%>FEATURE/% features/ccode ccode
+meta FEATURE/ccode features/%>FEATURE/% ${PACKAGEROOT}/src/lib/libast/features/ccode ccode
 make features/ccode
 done features/ccode
 prev ast.req
@@ -670,7 +671,7 @@
 done include/ccode.h
 prev include/ast.h implicit
 done string/stracmp.c
-meta stracmp.o %.c>%.o string/stracmp.c stracmp
+meta stracmp.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/stracmp.c stracmp
 prev string/stracmp.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/stracmp.c
 done stracmp.o generated
@@ -679,7 +680,7 @@
 prev include/ccode.h implicit
 prev include/ast.h implicit
 done string/strnacmp.c
-meta strnacmp.o %.c>%.o string/strnacmp.c strnacmp
+meta strnacmp.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/strnacmp.c strnacmp
 prev string/strnacmp.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/strnacmp.c
 done strnacmp.o generated
@@ -688,7 +689,7 @@
 prev include/ccode.h implicit
 prev include/ast.h implicit
 done string/ccmap.c
-meta ccmap.o %.c>%.o string/ccmap.c ccmap
+meta ccmap.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/ccmap.c ccmap
 prev string/ccmap.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/ccmap.c
 done ccmap.o generated
@@ -697,7 +698,7 @@
 prev include/ccode.h implicit
 prev include/ast.h implicit
 done string/ccmapid.c
-meta ccmapid.o %.c>%.o string/ccmapid.c ccmapid
+meta ccmapid.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/ccmapid.c ccmapid
 prev string/ccmapid.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/ccmapid.c
 done ccmapid.o generated
@@ -706,7 +707,7 @@
 prev include/ccode.h implicit
 prev include/ast.h implicit
 done string/ccnative.c
-meta ccnative.o %.c>%.o string/ccnative.c ccnative
+meta ccnative.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/ccnative.c ccnative
 prev string/ccnative.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/ccnative.c
 done ccnative.o generated
@@ -716,7 +717,7 @@
 prev include/ccode.h implicit
 prev include/ast.h implicit
 done string/chresc.c
-meta chresc.o %.c>%.o string/chresc.c chresc
+meta chresc.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/chresc.c chresc
 prev string/chresc.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/chresc.c
 done chresc.o generated
@@ -724,7 +725,7 @@
 make string/chrtoi.c
 prev include/ast.h implicit
 done string/chrtoi.c
-meta chrtoi.o %.c>%.o string/chrtoi.c chrtoi
+meta chrtoi.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/chrtoi.c chrtoi
 prev string/chrtoi.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/chrtoi.c
 done chrtoi.o generated
@@ -732,7 +733,7 @@
 make string/streval.c
 prev include/ast.h implicit
 done string/streval.c
-meta streval.o %.c>%.o string/streval.c streval
+meta streval.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/streval.c streval
 prev string/streval.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/streval.c
 done streval.o generated
@@ -740,7 +741,7 @@
 make string/strexpr.c
 prev include/ast.h implicit
 done string/strexpr.c
-meta strexpr.o %.c>%.o string/strexpr.c strexpr
+meta strexpr.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/strexpr.c strexpr
 prev string/strexpr.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/strexpr.c
 done strexpr.o generated
@@ -749,7 +750,7 @@
 prev include/regex.h implicit
 prev include/ast.h implicit
 done string/strmatch.c
-meta strmatch.o %.c>%.o string/strmatch.c strmatch
+meta strmatch.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/strmatch.c strmatch
 prev string/strmatch.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/strmatch.c
 done strmatch.o generated
@@ -757,7 +758,7 @@
 make string/strcopy.c
 prev include/ast.h implicit
 done string/strcopy.c
-meta strcopy.o %.c>%.o string/strcopy.c strcopy
+meta strcopy.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/strcopy.c strcopy
 prev string/strcopy.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c string/strcopy.c
 done strcopy.o generated
@@ -772,7 +773,7 @@
 prev include/ast.h implicit
 done string/modelib.h
 done string/modei.c
-meta modei.o %.c>%.o string/modei.c modei
+meta modei.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/modei.c modei
 prev string/modei.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Istring -Iinclude -Istd -D_PACKAGE_ast -c string/modei.c
 done modei.o generated
@@ -780,7 +781,7 @@
 make string/modex.c
 prev string/modelib.h implicit
 done string/modex.c
-meta modex.o %.c>%.o string/modex.c modex
+meta modex.o %.c>%.o ${PACKAGEROOT}/src/lib/libast/string/modex.c modex
 prev string/modex.c
 exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Istring -Iinclude -Istd -D_PACKAGE_ast -c string/modex.c