[ksh93-integration-discuss] Re: "getconf" and standard selection via |__xpg6|/|__xpg4| ...

Felix Schulte felix.schulte at gmail.com
Sun Dec 10 01:05:06 PST 2006


On 12/5/06, Glenn Fowler <gsf at research.att.com> wrote:
>
> I'm not going to code the getconf builtin to use the hidden
> sun __xpg* process global vars
>
> the code is table driven and I adjusted the table to defer to the getconf on $PATH
> all vars known to be different between the { default xpg4 xpg6 } getconf variants
>
> new alpha tarballs posted at www.research.att.com/sw/download/alpha:
>
>         INIT.2006-12-04.tgz
>         INIT.2006-12-04.md5
>         ast-ksh.2006-12-04.tgz
>         ast-ksh.2006-12-04.md5
>
> -- Glenn Fowler -- AT&T Research, Florham Park NJ --
patch diff from 20061031 to 20061204 attached
-- 
      _        Felix Schulte
    _|_|_     mailto:felix.schulte at gmail.com
    (0 0)
ooO--(_)--Ooo
-------------- next part --------------
diff -r -N -u ksh93_2006_10_31/lib/package/ast-ksh.html ksh93_2006_12_04/lib/package/ast-ksh.html
--- ksh93_2006_10_31/lib/package/ast-ksh.html	2006-11-02 20:54:15.000000000 +0100
+++ ksh93_2006_12_04/lib/package/ast-ksh.html	2006-12-05 08:32:50.000000000 +0100
@@ -192,7 +192,14 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="ksh93 changes">ksh93 changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
-06-10-30  --- Release ksh93s-  ---
+06-11-20  --- Release ksh93s  ---
+06-11-20  A bug in which "${foo&#0091;@&#0093;:1}}" expands a null argument (instead of
+	  no argument), when foo&#0091;0&#0093; is not empty has been fixed. 
+06-11-16  The discipline functions have been modified to allow each subscript
+	  to act independently.  Currently the discipline function will not
+	  be called when called from a discipline function of the same variable.
+06-11-14  A bug which could cause a core dump if a file descriptor for
+	  an internal file was closed from with a subshell has been fixed.
 06-10-30  The redirections &lt;# pattern, and &lt;## pattern have been added.
 	  Both seek forward to the beginning of the next line that contains
 	  the pattern.  The &lt;## form copies the skipped portion to standard
@@ -1421,7 +1428,7 @@
 95-04-31  The expansion of "$@" was incorrect when $1 was the null
 	  string.
 95-04-31  A bug which could incorrectly report a syntax error in
-	  a backquoted expression when a $ was preceded by 
+	  a backquoted expression when a $ was preceded by \\
 	  has been fixed.
 95-04-31  A bug which prevented the shell from exiting after
 	  reporting an error when failing to open a script
@@ -1608,6 +1615,19 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libast changes">libast changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
+06-12-04 sfio/sfcvt.c: fix (int) vs. (long) cast mismatches
+06-12-01 comp/conf.tab: add changes to cover solaris { bin xpg4 xpg6 }
+06-12-01 regex/reginit.c: adjust { SRE KRE } escaped (){}*? inside &#0091;...&#0093;
+06-12-01 sfio/sfcvt.c: add signbit/copysign tests
+06-11-22 comp/spawnveg.c: fix _real_vfork logic to work with 3d
+06-11-20 features/common: bias _ast_int8_t "long long" before "__int64"
+06-11-20 string/strperm.c: fix X to work with all ops (not just +)
+06-11-15 astconf.c,conf.tab: add CONF_DEFER_* for variable constants
+06-11-11 port/astconf.c: validate path arg w.r.t. underlying calls
+06-11-11 comp/conf.sh: fix S CONF_STANDARD bug, add D to defer to native
+06-11-11 comp/conf.tab: add D to defer to native
+06-11-01 include/vmalloc.h: avoid VM_FLAGS sys/v*.h clash
+06-11-01 include/ast.h: add FMT_PARAM for fmtquote()
 06-10-31 disc/sfdcseekable.c: add SFSK_DISCARD for seekable window control
 06-10-31 comp/spawnveg.c,features/lib: handle posix_spawn exit status 127
 06-10-30 features/lib: fix posix_spawn() fork() prototype conflicts
@@ -1714,7 +1734,7 @@
 	 magic.tab: ammend bsd db magic
 05-05-23 regex: REX_NEST (?%&#0091;D.&#0093;&#0091;E.&#0093;&#0091;L.&#0093;&#0091;Q.&#0093;&#0091;oc&#0093;...)
 05-05-21 regex: state.fold&#0091;&#0093; is now locale specific -- doh
-05-05-19 regex: add REX_NEST (?%lt;&gt;&#0091;&#0093;""...) %(...) nested match
+05-05-19 regex: add REX_NEST (?%\\()&lt;&gt;&#0091;&#0093;""...) %(...) nested match
 05-05-15 recfmt.h: add recstr() reclen() fmtrec()
 05-05-13 optget.c: allow boolean options to take numeric values
 05-05-12 recfmt.c: add to recfmt.h, adjust Recfmt_t encodings
@@ -2973,7 +2993,7 @@
 95-01-01 add this RELEASE file
 	 fix strperm() to properly handle "644 file"
 	 fix tokline() to return last '&nbsp;' terminated line in string
-	 fix tokscan() to properly handle  splice
+	 fix tokscan() to properly handle \\n splice
 	 add fmtesc() to complement stresc()
 	 add LS_NUMBER to fmtls()
 	 drop spurious optusage() ' '
@@ -2983,6 +3003,12 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libcmd changes">libcmd changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
+06-11-23 cmd.h: because of proto cmdinit cannot be a function like macro
+06-11-21 cp.c: fix 06-10-31 const dot&#0091;&#0093; readonly assignment
+06-11-15 cp.c: fix 06-10-31 ln -s enoent bug
+06-11-11 getconf.c: let astconf() handle "undefined" vs. ""
+06-11-11 getconf.c: fix deferred getconf path search
+06-11-11 fmt.c: handle two char { \t } in --usage ouput
 06-10-31 global edit to eliminate most non-const static data0
 06-10-31 use &lt;cmd.h&gt; for all b_*() implementations; drop &lt;cmdlib.h&gt; 
 06-10-31 cmd.h: add CMD_ prefix to { BUILTIN DYNAMIC STANDALONE } 
@@ -3234,7 +3260,7 @@
 <TR>
 <TD align=left></TD>
 <TD align=center></TD>
-<TD align=right>November 02, 2006</TD>
+<TD align=right>December 05, 2006</TD>
 </TR>
 </TABLE>
 <P>
diff -r -N -u ksh93_2006_10_31/lib/package/ast-ksh.README ksh93_2006_12_04/lib/package/ast-ksh.README
--- ksh93_2006_10_31/lib/package/ast-ksh.README	2006-11-02 20:53:59.000000000 +0100
+++ ksh93_2006_12_04/lib/package/ast-ksh.README	2006-12-05 08:32:50.000000000 +0100
@@ -92,7 +92,14 @@
 
 :::::::: ksh93 ::::::::
 
-06-10-30  --- Release ksh93s-  ---
+06-11-20  --- Release ksh93s  ---
+06-11-20  A bug in which "${foo[@]:1}}" expands a null argument (instead of
+	  no argument), when foo[0] is not empty has been fixed. 
+06-11-16  The discipline functions have been modified to allow each subscript
+	  to act independently.  Currently the discipline function will not
+	  be called when called from a discipline function of the same variable.
+06-11-14  A bug which could cause a core dump if a file descriptor for
+	  an internal file was closed from with a subshell has been fixed.
 06-10-30  The redirections <# pattern, and <## pattern have been added.
 	  Both seek forward to the beginning of the next line that contains
 	  the pattern.  The <## form copies the skipped portion to standard
@@ -1505,6 +1512,19 @@
 
 :::::::: libast ::::::::
 
+06-12-04 sfio/sfcvt.c: fix (int) vs. (long) cast mismatches
+06-12-01 comp/conf.tab: add changes to cover solaris { bin xpg4 xpg6 }
+06-12-01 regex/reginit.c: adjust { SRE KRE } escaped (){}*? inside [...]
+06-12-01 sfio/sfcvt.c: add signbit/copysign tests
+06-11-22 comp/spawnveg.c: fix _real_vfork logic to work with 3d
+06-11-20 features/common: bias _ast_int8_t "long long" before "__int64"
+06-11-20 string/strperm.c: fix X to work with all ops (not just +)
+06-11-15 astconf.c,conf.tab: add CONF_DEFER_* for variable constants
+06-11-11 port/astconf.c: validate path arg w.r.t. underlying calls
+06-11-11 comp/conf.sh: fix S CONF_STANDARD bug, add D to defer to native
+06-11-11 comp/conf.tab: add D to defer to native
+06-11-01 include/vmalloc.h: avoid VM_FLAGS sys/v*.h clash
+06-11-01 include/ast.h: add FMT_PARAM for fmtquote()
 06-10-31 disc/sfdcseekable.c: add SFSK_DISCARD for seekable window control
 06-10-31 comp/spawnveg.c,features/lib: handle posix_spawn exit status 127
 06-10-30 features/lib: fix posix_spawn() fork() prototype conflicts
@@ -2877,6 +2897,12 @@
 
 :::::::: libcmd ::::::::
 
+06-11-23 cmd.h: because of proto cmdinit cannot be a function like macro
+06-11-21 cp.c: fix 06-10-31 const dot[] readonly assignment
+06-11-15 cp.c: fix 06-10-31 ln -s enoent bug
+06-11-11 getconf.c: let astconf() handle "undefined" vs. ""
+06-11-11 getconf.c: fix deferred getconf path search
+06-11-11 fmt.c: handle two char { \t \n } in --usage ouput
 06-10-31 global edit to eliminate most non-const static data0
 06-10-31 use <cmd.h> for all b_*() implementations; drop <cmdlib.h> 
 06-10-31 cmd.h: add CMD_ prefix to { BUILTIN DYNAMIC STANDALONE } 
diff -r -N -u ksh93_2006_10_31/lib/package/ast-ksh.ver ksh93_2006_12_04/lib/package/ast-ksh.ver
--- ksh93_2006_10_31/lib/package/ast-ksh.ver	2006-10-30 19:09:26.000000000 +0100
+++ ksh93_2006_12_04/lib/package/ast-ksh.ver	2006-12-05 08:32:49.000000000 +0100
@@ -1 +1 @@
-ast-ksh 2006-10-31 2006-10-31 1
+ast-ksh 2006-12-04 2006-12-04 1
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/data/math.tab ksh93_2006_12_04/src/cmd/ksh93/data/math.tab
--- ksh93_2006_10_31/src/cmd/ksh93/data/math.tab	2006-10-19 08:00:14.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/data/math.tab	2006-11-12 07:45:40.000000000 +0100
@@ -52,8 +52,8 @@
 f 2 remainder
 f 1 rint
 f 1 round
-f 1 scanb
-f 1 scanbn
+f 2 scalb
+f 2 scalbn
 i 1 signbit
 f 1 sin
 f 1 sinh
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/data/strdata.c ksh93_2006_12_04/src/cmd/ksh93/data/strdata.c
--- ksh93_2006_10_31/src/cmd/ksh93/data/strdata.c	2006-10-24 15:56:39.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/data/strdata.c	2006-12-04 23:28:02.000000000 +0100
@@ -22,7 +22,7 @@
  * data for string evaluator library
  */
 
-#include	"FEATURE/isoc"
+#include	<ast_standards.h>
 #include	"FEATURE/options"
 #include	"streval.h"
 
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/edit/completion.c ksh93_2006_12_04/src/cmd/ksh93/edit/completion.c
--- ksh93_2006_10_31/src/cmd/ksh93/edit/completion.c	2006-08-14 15:49:19.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/edit/completion.c	2006-11-20 17:47:36.000000000 +0100
@@ -131,6 +131,10 @@
 			if(!inquote)
 				bp = cp;
 			break;
+		    case '~':
+			if(*cp=='(')
+				break;
+			/* fall through */
 		    default:
 			if(c && c==endchar)
 				return(xp);
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/edit/emacs.c ksh93_2006_12_04/src/cmd/ksh93/edit/emacs.c
--- ksh93_2006_10_31/src/cmd/ksh93/edit/emacs.c	2006-06-23 22:47:45.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/edit/emacs.c	2006-11-29 23:12:00.000000000 +0100
@@ -329,7 +329,7 @@
 			continue;
 #endif	/* u370 */
 		case '\t':
-			if(cur>0 && cur>=eol  && ep->ed->sh->nextprompt)
+			if(cur>0  && ep->ed->sh->nextprompt)
 			{
 				if(ep->ed->e_tabcount==0)
 				{
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/edit/vi.c ksh93_2006_12_04/src/cmd/ksh93/edit/vi.c
--- ksh93_2006_10_31/src/cmd/ksh93/edit/vi.c	2006-08-14 15:49:19.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/edit/vi.c	2006-11-29 23:13:44.000000000 +0100
@@ -1474,7 +1474,7 @@
 			return;
 
 		case '\t':		/** command completion **/
-			if(mode!=SEARCH && last_virt>=0 && cur_virt>=last_virt && (vp->ed->e_tabcount|| !isblank(cur_virt)) && vp->ed->sh->nextprompt)
+			if(mode!=SEARCH && last_virt>=0 && (vp->ed->e_tabcount|| !isblank(cur_virt)) && vp->ed->sh->nextprompt)
 			{
 				if(vp->ed->e_tabcount==0)
 				{
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/features/isoc ksh93_2006_12_04/src/cmd/ksh93/features/isoc
--- ksh93_2006_10_31/src/cmd/ksh93/features/isoc	2006-10-24 15:55:39.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/features/isoc	1970-01-01 01:00:00.000000000 +0100
@@ -1,9 +0,0 @@
-if tst note{ -D_ISOC99_SOURCE cooperates with <stdlib.h> and <math.h> }end -D_ISOC99_SOURCE compile{
-		#include <stdlib.h>
-		#include <math.h>
-	}end {
-		#ifndef _ISOC99_SOURCE
-		#define _ISOC99_SOURCE		1
-		#endif
-	}
-endif
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/features/math.sh ksh93_2006_12_04/src/cmd/ksh93/features/math.sh
--- ksh93_2006_10_31/src/cmd/ksh93/features/math.sh	2006-10-26 18:39:12.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/features/math.sh	2006-12-04 23:28:59.000000000 +0100
@@ -19,29 +19,18 @@
 ########################################################################
 : generate the ksh math builtin table
 : include math.tab
-: include FEATURE/isoc
 
-# @(#)math.sh (AT&T Research) 2006-10-26
+# @(#)math.sh (AT&T Research) 2006-12-04
 
 command=$0
-iffeflags="-n -v"
+iffeflags="-n -v -F ast_standards.h"
 iffehdrs="math.h ieeefp.h"
-ifferefs=""
 iffelibs="-lm"
 table=/dev/null
 
 eval $1
 shift
-while	:
-do	case $# in
-	0)	break ;;
-	esac
-	case $1 in
-	*.tab)	table=$1 ;;
-	*/isoc)	ifferefs=`sed -e '1,/-D/d' -e '/#define/!d' -e 's/#define.\([^        ]*\).*/-D\1/' $1` ;;
-	esac
-	shift
-done
+table=$1
 
 names=
 tests=
@@ -60,7 +49,7 @@
 
 : check the math library
 
-eval `iffe $iffeflags -c "$cc" - lib $tests $iffehdrs $ifferefs $iffelibs 2>&$stderr`
+eval `iffe $iffeflags -c "$cc" - lib $tests $iffehdrs $iffelibs 2>&$stderr`
 tests=
 for name in $names
 do	eval x='$'_lib_${name}l y='$'_lib_${name}
@@ -69,7 +58,7 @@
 	*:1)	tests="$tests,${name}" ;;
 	esac
 done
-eval `iffe $iffeflags -c "$cc" - dat $tests $iffehdrs $ifferefs $iffelibs 2>&$stderr`
+eval `iffe $iffeflags -c "$cc" - dat $tests $iffehdrs $iffelibs 2>&$stderr`
 tests=
 for name in $names
 do	eval x='$'_dat_${name}l y='$'_dat_${name}
@@ -78,7 +67,7 @@
 	*:1)	tests="$tests,${name}" ;;
 	esac
 done
-eval `iffe $iffeflags -c "$cc" - npt $tests $iffehdrs $ifferefs 2>&$stderr`
+eval `iffe $iffeflags -c "$cc" - npt $tests $iffehdrs 2>&$stderr`
 tests=
 for name in $names
 do	eval x='$'_lib_${name}l y='$'_lib_${name}
@@ -89,7 +78,7 @@
 	'')	tests="$tests,${name}" ;;
 	esac
 done
-eval `iffe $iffeflags -c "$cc" - mac $tests $iffehdrs $ifferefs 2>&$stderr`
+eval `iffe $iffeflags -c "$cc" - mac $tests $iffehdrs 2>&$stderr`
 
 cat <<!
 #pragma prototyped
@@ -99,6 +88,8 @@
 typedef Sfdouble_t (*Math_f)(Sfdouble_t,...);
 
 !
+echo "#include <ast_standards.h>"
+echo "#include <math.h>"
 case $_hdr_ieeefp in
 1)	echo "#include <ieeefp.h>"
 	echo
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/include/name.h ksh93_2006_12_04/src/cmd/ksh93/include/name.h
--- ksh93_2006_10_31/src/cmd/ksh93/include/name.h	2006-09-12 22:40:04.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/include/name.h	2006-11-13 22:07:05.000000000 +0100
@@ -65,6 +65,8 @@
 #define ARRAY_FILL	(8L<<ARRAY_BITS)	/* used with nv_putsub() */
 #define ARRAY_NOCLONE	(16L<<ARRAY_BITS)	/* do not clone array disc */
 #define ARRAY_NOCHILD   (32L<<ARRAY_BITS)	/* skip compound arrays */
+#define ARRAY_SETSUB	(64L<<ARRAY_BITS)	/* set subscript */
+#define NV_ASETSUB	8			/* set subscript */
 
 /* These flags are used as options to array_get() */
 #define ARRAY_ASSIGN	0
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/include/version.h ksh93_2006_12_04/src/cmd/ksh93/include/version.h
--- ksh93_2006_10_31/src/cmd/ksh93/include/version.h	2006-08-21 16:45:02.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/include/version.h	2006-11-17 19:46:51.000000000 +0100
@@ -17,4 +17,4 @@
 *                  David Korn <dgk at research.att.com>                   *
 *                                                                      *
 ***********************************************************************/
-#define SH_RELEASE	"1993-12-28 s-"
+#define SH_RELEASE	"1993-12-28 s"
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/Mamfile ksh93_2006_12_04/src/cmd/ksh93/Mamfile
--- ksh93_2006_10_31/src/cmd/ksh93/Mamfile	2006-11-03 03:05:02.000000000 +0100
+++ ksh93_2006_12_04/src/cmd/ksh93/Mamfile	2006-12-05 23:38:29.000000000 +0100
@@ -46,6 +46,11 @@
 make ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
 make ${PACKAGE_ast_INCLUDE}/ast_map.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_map.h dontcare
+make ${PACKAGE_ast_INCLUDE}/endian.h implicit
+make ${PACKAGE_ast_INCLUDE}/bytesex.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
+done ${PACKAGE_ast_INCLUDE}/bytesex.h dontcare
+done ${PACKAGE_ast_INCLUDE}/endian.h dontcare
 done ${PACKAGE_ast_INCLUDE}/ast_common.h dontcare
 make ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
 make ${PACKAGE_ast_INCLUDE}/regex.h implicit
@@ -62,29 +67,18 @@
 done ${PACKAGE_ast_INCLUDE}/ast_limits.h dontcare
 make ${PACKAGE_ast_INCLUDE}/ast_fcntl.h implicit
 make ${PACKAGE_ast_INCLUDE}/ast_fs.h implicit
-make error?--?old?ethernet?address?at?wrong?offset implicit
-done error?--?old?ethernet?address?at?wrong?offset dontcare virtual
 done ${PACKAGE_ast_INCLUDE}/ast_fs.h dontcare
 done ${PACKAGE_ast_INCLUDE}/ast_fcntl.h dontcare
 make ${PACKAGE_ast_INCLUDE}/ast_getopt.h implicit
 prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_getopt.h dontcare
 make ${PACKAGE_ast_INCLUDE}/ast_sys.h implicit
-make ${PACKAGE_ast_INCLUDE}/re_comp.h implicit
-prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-done ${PACKAGE_ast_INCLUDE}/re_comp.h dontcare
 make ${PACKAGE_ast_INCLUDE}/getopt.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast_getopt.h implicit
 prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
 done ${PACKAGE_ast_INCLUDE}/getopt.h dontcare
-make ${PACKAGE_ast_INCLUDE}/stdio.h implicit
-make ${PACKAGE_ast_INCLUDE}/ast_stdio.h implicit
-make ${PACKAGE_ast_INCLUDE}/sfio_s.h implicit
-done ${PACKAGE_ast_INCLUDE}/sfio_s.h dontcare
-prev ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
-done ${PACKAGE_ast_INCLUDE}/ast_stdio.h dontcare
-done ${PACKAGE_ast_INCLUDE}/stdio.h dontcare
-prev ${PACKAGE_ast_INCLUDE}/getopt.h implicit
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_sys.h dontcare
 make ${PACKAGE_ast_INCLUDE}/ast_lib.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_lib.h dontcare
@@ -98,7 +92,8 @@
 prev ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
 done ${PACKAGE_ast_INCLUDE}/vmalloc.h dontcare
 make ${PACKAGE_ast_INCLUDE}/sfio.h implicit
-prev ${PACKAGE_ast_INCLUDE}/sfio_s.h implicit
+make ${PACKAGE_ast_INCLUDE}/sfio_s.h implicit
+done ${PACKAGE_ast_INCLUDE}/sfio_s.h dontcare
 prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
 done ${PACKAGE_ast_INCLUDE}/sfio.h dontcare
@@ -187,6 +182,7 @@
 bind -lcmd
 bind -last
 bind -lm dontcare
+bind -ldl dontcare
 make +ljobs
 done +ljobs dontcare virtual
 make +li
@@ -195,9 +191,7 @@
 done ${mam_libsecdb} dontcare virtual
 make +lintl
 done +lintl dontcare virtual
-make ${mam_libdl}
-done ${mam_libdl} dontcare virtual
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libast}  : run features/time
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/time
 make ${PACKAGE_ast_INCLUDE}/times.h implicit
 make ${PACKAGE_ast_INCLUDE}/ast_time.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_time.h dontcare
@@ -216,8 +210,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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/dynamic
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/dynamic
 make ${PACKAGE_ast_INCLUDE}/fs3d.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast_fs.h implicit
 prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
@@ -232,8 +225,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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/options
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/options
 done FEATURE/options dontcare generated
 prev ${PACKAGE_ast_INCLUDE}/option.h implicit
 done include/builtins.h
@@ -256,8 +248,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/sigfeatures
 done FEATURE/sigfeatures dontcare generated
 make FEATURE/setjmp implicit
 meta FEATURE/setjmp features/%>FEATURE/% features/setjmp setjmp
@@ -268,8 +259,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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/setjmp
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/setjmp
 done FEATURE/setjmp dontcare generated
 prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
 prev ${PACKAGE_ast_INCLUDE}/error.h implicit
@@ -293,6 +283,7 @@
 done alarm.o generated
 make cd_pwd.o
 make bltins/cd_pwd.c
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
 make ${PACKAGE_ast_INCLUDE}/ls.h implicit
 make ${PACKAGE_ast_INCLUDE}/ast_mode.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_mode.h dontcare
@@ -310,8 +301,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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}  : def acct
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : def acct
 done FEATURE/acct dontcare generated
 prev include/nval.h implicit
 prev FEATURE/options implicit
@@ -384,8 +374,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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/ttys
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/ttys
 done FEATURE/ttys dontcare generated
 done include/terminal.h dontcare
 prev FEATURE/setjmp implicit
@@ -399,8 +388,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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/locale
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/locale
 done FEATURE/locale dontcare generated
 prev FEATURE/options implicit
 done include/edit.h dontcare
@@ -462,6 +450,8 @@
 done ${PACKAGE_ast_INCLUDE}/tmx.h
 make include/streval.h implicit
 make ${PACKAGE_ast_INCLUDE}/ast_float.h implicit
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_float.h dontcare
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
@@ -508,10 +498,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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/poll
-make cell_sys_headers.h implicit
-done cell_sys_headers.h dontcare virtual
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/poll
 done FEATURE/poll generated
 prev FEATURE/time implicit
 prev include/builtins.h implicit
@@ -545,8 +532,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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/externs
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/externs
 done FEATURE/externs generated
 prev include/builtins.h implicit
 prev include/test.h implicit
@@ -587,8 +573,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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/rlimits
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/rlimits
 done FEATURE/rlimits dontcare generated
 prev FEATURE/time implicit
 done include/ulimit.h
@@ -654,8 +639,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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}  : def execargs
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : def execargs
 done FEATURE/execargs generated
 make FEATURE/pstat implicit
 meta FEATURE/pstat >FEATURE/%  pstat
@@ -664,8 +648,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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}  : def pstat
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : def pstat
 done FEATURE/pstat generated
 prev FEATURE/time implicit
 make include/timeout.h implicit
@@ -746,7 +729,13 @@
 prev include/path.h implicit
 prev include/lexstates.h implicit
 make ${PACKAGE_ast_INCLUDE}/ast_wchar.h implicit
-prev ${PACKAGE_ast_INCLUDE}/stdio.h implicit
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
+make ${PACKAGE_ast_INCLUDE}/stdio.h implicit
+make ${PACKAGE_ast_INCLUDE}/ast_stdio.h implicit
+prev ${PACKAGE_ast_INCLUDE}/sfio_s.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
+done ${PACKAGE_ast_INCLUDE}/ast_stdio.h dontcare
+done ${PACKAGE_ast_INCLUDE}/stdio.h dontcare
 prev ${PACKAGE_ast_INCLUDE}/stdio.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
 done ${PACKAGE_ast_INCLUDE}/ast_wchar.h
@@ -786,8 +775,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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/cmds
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/cmds
 done FEATURE/cmds generated
 prev FEATURE/time implicit
 prev FEATURE/options implicit
@@ -903,7 +891,7 @@
 done init.o generated
 make io.o
 make sh/io.c
-prev ${PACKAGE_ast_INCLUDE}/stdio.h implicit
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
 prev FEATURE/poll implicit
 prev FEATURE/dynamic implicit
 prev FEATURE/externs implicit
@@ -1197,18 +1185,6 @@
 make FEATURE/math implicit
 meta FEATURE/math features/%.sh>FEATURE/% features/math.sh math
 make features/math.sh
-make FEATURE/isoc implicit
-meta FEATURE/isoc features/%>FEATURE/% features/isoc isoc
-make features/isoc
-done features/isoc
-prev shell.req
-prev +ljobs
-prev +li
-prev ${mam_libsecdb}
-prev +lintl
-prev ${mam_libdl}
-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/isoc
-done FEATURE/isoc generated
 make data/math.tab implicit
 done data/math.tab
 done features/math.sh dontcare
@@ -1217,12 +1193,13 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-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/math.sh FEATURE/isoc data/math.tab
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '  ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libdl} ${mam_libast}  : run features/math.sh data/math.tab
+make ${PACKAGE_ast_INCLUDE}/ast_standards.h implicit
+done ${PACKAGE_ast_INCLUDE}/ast_standards.h dontcare
 done FEATURE/math generated
 prev include/streval.h implicit
 prev FEATURE/options implicit
-prev FEATURE/isoc implicit
+prev ${PACKAGE_ast_INCLUDE}/ast_standards.h implicit
 done data/strdata.c
 meta strdata.o %.c>%.o data/strdata.c strdata
 prev data/strdata.c
@@ -1370,8 +1347,7 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o ksh pmain.o ${mam_libshell} ${mam_libast}
+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -Wl,-z,origin -Wl,-R,\$ORIGIN/../lib -o ksh pmain.o ${mam_libshell} ${mam_libdl} ${mam_libast}
 done ksh generated
 make shcomp
 make shcomp.o
@@ -1392,10 +1368,9 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
 setv CC.DLL -UCC.DLL
 setv SH_DICT -DSH_DICT="\"libshell\""
-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o shcomp shcomp.o ${mam_libshell} ${mam_libast}
+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -Wl,-z,origin -Wl,-R,\$ORIGIN/../lib -o shcomp shcomp.o ${mam_libshell} ${mam_libdl} ${mam_libast}
 done shcomp generated
 make suid_exec
 make suid_exec.o
@@ -1417,9 +1392,8 @@
 prev +li
 prev ${mam_libsecdb}
 prev +lintl
-prev ${mam_libdl}
 setv CC.DLL -UCC.DLL
-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L${INSTALLROOT}/lib} -o suid_exec suid_exec.o ${mam_libast} ${mam_libast}
+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -Wl,-z,origin -Wl,-R,\$ORIGIN/../lib -o suid_exec suid_exec.o ${mam_libast} ${mam_libdl} ${mam_libast}
 done suid_exec generated
 make shell
 prev libshell.a archive
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/RELEASE ksh93_2006_12_04/src/cmd/ksh93/RELEASE
--- ksh93_2006_10_31/src/cmd/ksh93/RELEASE	2006-10-31 03:11:18.000000000 +0100
+++ ksh93_2006_12_04/src/cmd/ksh93/RELEASE	2006-11-21 21:44:02.000000000 +0100
@@ -1,4 +1,11 @@
-06-10-30  --- Release ksh93s-  ---
+06-11-20  --- Release ksh93s  ---
+06-11-20  A bug in which "${foo[@]:1}}" expands a null argument (instead of
+	  no argument), when foo[0] is not empty has been fixed. 
+06-11-16  The discipline functions have been modified to allow each subscript
+	  to act independently.  Currently the discipline function will not
+	  be called when called from a discipline function of the same variable.
+06-11-14  A bug which could cause a core dump if a file descriptor for
+	  an internal file was closed from with a subshell has been fixed.
 06-10-30  The redirections <# pattern, and <## pattern have been added.
 	  Both seek forward to the beginning of the next line that contains
 	  the pattern.  The <## form copies the skipped portion to standard
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/sh/array.c ksh93_2006_12_04/src/cmd/ksh93/sh/array.c
--- ksh93_2006_10_31/src/cmd/ksh93/sh/array.c	2006-10-12 03:35:40.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/sh/array.c	2006-11-16 21:48:47.000000000 +0100
@@ -164,8 +164,6 @@
 		if(!(ap->header.nelem&ARRAY_SCAN) && ap->cur >= ap->maxi)
 			ap = array_grow(np, ap, (int)ap->cur);
 		if(ap->cur>=ap->maxi)
-			errormsg(SH_DICT,ERROR_exit(1),e_subscript, nv_name(np));
-		if(ap->cur >= ap->maxi)
 			errormsg(SH_DICT,ERROR_exit(1),e_subscript,nv_name(np));
 		up = &(ap->val[ap->cur]);
 		if(up->np && array_isbit(ap->bits,ap->cur))
@@ -373,7 +371,7 @@
 		ap->header.fun = 0;
 		if((ap->val[0].cp=np->nvalue.cp))
 			i++;
-		else if(np->nvfun)
+		else if(nv_hasdisc(np,&array_disc))
 		{
 			Namval_t *mp;
 			int offset = staktell();
@@ -644,6 +642,11 @@
 	if(sp)
 	{
 		union Value *up;
+		if(mode&ARRAY_SETSUB)
+		{
+			(*ap->header.fun)(np, sp, NV_ASETSUB);
+			return(np);
+		}
 		up = (union Value*)(*ap->header.fun)(np, sp, (mode&ARRAY_ADD)?NV_AADD:0);
 		if(up && !up->cp && (mode&ARRAY_ADD) && (mode&ARRAY_FILL))
 		{
@@ -797,8 +800,11 @@
 			}
 		}
 		return(NIL(void*));
+	    case NV_ASETSUB:
+		ap->cur = (Namval_t*)sp;
+		/* FALL THROUGH*/
 	    case NV_ACURRENT:
-			return((void*)ap->cur);
+		return((void*)ap->cur);
 	    case NV_ANAME:
 		if(ap->cur)
 			return((void*)nv_name(ap->cur));
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/sh/io.c ksh93_2006_12_04/src/cmd/ksh93/sh/io.c
--- ksh93_2006_10_31/src/cmd/ksh93/sh/io.c	2006-11-01 17:23:50.000000000 +0100
+++ ksh93_2006_12_04/src/cmd/ksh93/sh/io.c	2006-11-17 23:20:44.000000000 +0100
@@ -252,7 +252,10 @@
 			if(status&IOTTY)
 				dp->readf = slowread;
 			else if(status&IONOSEEK)
+			{
 				dp->readf = piperead;
+				sfset(iop, SF_IOINTR,1);
+			}
 			else
 				dp->readf = 0;
 			dp->seekf = 0;
@@ -572,10 +575,12 @@
 static int io_patseek(regex_t *rp, Sfio_t* sp, int flags)
 {
 	char	*cp, *match;
-	int	r, close_exec = sh.fdstatus[sffileno(sp)]&IOCLEX;
-	int	s=(PIPE_BUF>SF_BUFSIZE?SF_BUFSIZE:PIPE_BUF);
+	int	r, fd=sffileno(sp), close_exec = sh.fdstatus[fd]&IOCLEX;
+	int	was_share,s=(PIPE_BUF>SF_BUFSIZE?SF_BUFSIZE:PIPE_BUF);
 	size_t	n,m;
 	sh.fdstatus[sffileno(sp)] |= IOCLEX;
+	if(fd==0)
+		was_share = sfset(sp,SF_SHARE,1);
 	while((cp=sfreserve(sp, -s, SF_LOCKR)) || (cp=sfreserve(sp,SF_UNBOUND, SF_LOCKR)))
 	{
 		m = n = sfvalue(sp);
@@ -599,6 +604,8 @@
 	}
 	if(!close_exec)
 		sh.fdstatus[sffileno(sp)] &= ~IOCLEX;
+	if(fd==0 && !(was_share&SF_SHARE))
+		sfset(sp, SF_SHARE,0);
 	return(0);
 }
 
@@ -1394,7 +1401,7 @@
 	if(!(sh.fdstatus[sffileno(iop)]&IOCLEX) && (sfset(iop,0,0)&SF_SHARE))
 		size = ed_read(sh.ed_context, fd, (char*)buff, size,0);
 	else
-		size = read(fd, (char*)buff, size);
+		size = sfrd(iop,buff,size,handle);
 	return(size);
 }
 /*
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/sh/macro.c ksh93_2006_12_04/src/cmd/ksh93/sh/macro.c
--- ksh93_2006_10_31/src/cmd/ksh93/sh/macro.c	2006-10-27 20:47:03.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/sh/macro.c	2006-11-29 15:32:12.000000000 +0100
@@ -1087,7 +1087,9 @@
 		}
 		else
 #endif  /* SHOPT_FILESCAN */
-		np = nv_open(id,sh.var_tree,flag);
+		if(sh.argaddr)
+			flag &= ~NV_NOADD;
+		np = nv_open(id,sh.var_tree,flag|NV_NOFAIL);
 		ap = np?nv_arrayptr(np):0;
 		if(type)
 		{
@@ -1236,9 +1238,6 @@
 			c = ':';
 		}
 	}
-	/* check for quoted @ */
-	if(mode=='@' && mp->quote && !v && c!='-')
-		mp->quoted-=2;
 	if(type)
 	{
 		if(!isbracechar(c))
@@ -1446,6 +1445,9 @@
 		if(v || c=='/' && offset>=0)
 			stakseek(offset);
 	}
+	/* check for quoted @ */
+	if(mode=='@' && mp->quote && !v && c!='-')
+		mp->quoted-=2;
 retry2:
 	if(v && (!nulflg || *v ) && c!='+')
 	{
@@ -1595,10 +1597,20 @@
 			mac_error(np);
 		}
 	}
-	else if(sh_isoption(SH_NOUNSET) && (!np  || nv_isnull(np)))
+	else if(sh_isoption(SH_NOUNSET) && (!np  || nv_isnull(np) || (nv_isarray(np) && !np->nvalue.cp)))
 	{
 		if(np)
+		{
+			if(nv_isarray(np))
+			{
+				sfprintf(sh.strbuf,"%s[%s]\0",nv_name(np),nv_getsub(np));
+				id = nv_getsub(np);
+				id = sfstruse(sh.strbuf);
+			}
+			else
+				id = nv_name(np);
 			nv_close(np);
+		}
 		errormsg(SH_DICT,ERROR_exit(1),e_notset,id);
 	}
 	if(np)
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/sh/main.c ksh93_2006_12_04/src/cmd/ksh93/sh/main.c
--- ksh93_2006_10_31/src/cmd/ksh93/sh/main.c	2005-03-31 21:26:23.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/sh/main.c	2006-11-14 23:23:46.000000000 +0100
@@ -384,7 +384,13 @@
 	{
 		if(fno > 0)
 		{
-			fno = sh_iomovefd(fno);
+			int r;
+			if(fno < 10 && ((r=sh_fcntl(fno,F_DUPFD,10))>=10))
+			{
+				shp->fdstatus[r] = shp->fdstatus[fno];
+				sh_close(fno);
+				fno = r;
+			}
 			fcntl(fno,F_SETFD,FD_CLOEXEC);
 			shp->fdstatus[fno] |= IOCLEX;
 			iop = sh_iostream(fno);
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/sh/name.c ksh93_2006_12_04/src/cmd/ksh93/sh/name.c
--- ksh93_2006_10_31/src/cmd/ksh93/sh/name.c	2006-10-11 22:22:20.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/sh/name.c	2006-11-29 21:59:36.000000000 +0100
@@ -35,6 +35,8 @@
 #include	"FEATURE/externs"
 #include	"streval.h"
 
+static char	*savesub = 0;
+
 #if !_lib_pathnative && _lib_uwin_path
 
 #define _lib_pathnative		1
@@ -315,7 +317,7 @@
 			char *sub=0;
 			int append = 0;
 			if(nv_isarray(np))
-				sub = nv_getsub(np);
+				sub = savesub;
 			if(cp=strchr(sp,'='))
 			{
 				if(cp[-1]=='+')
@@ -531,23 +533,29 @@
 			{
 				if(!np)
 					return(np);
-				if(c=='[')
+				if(c=='[' || (c=='.' && nv_isarray(np)))
 				{
-					int n = mode|nv_isarray(np);
-					if(!mode && (flags&NV_ARRAY) && ((c=sp[1])=='*' || c=='@') && sp[2]==']')
+					int n = 0;
+					if(c=='[')
 					{
-						/* not implemented yet */
-						dp->last = cp;
-						return(np);
-					}
-					if(n&&(flags&NV_ARRAY))
-						n |= ARRAY_FILL;
-					cp = nv_endsubscript(np,sp,n);
+						n = mode|nv_isarray(np);
+						if(!mode && (flags&NV_ARRAY) && ((c=sp[1])=='*' || c=='@') && sp[2]==']')
+						{
+							/* not implemented yet */
+							dp->last = cp;
+							return(np);
+						}
+						if(n&&(flags&NV_ARRAY))
+							n |= ARRAY_FILL;
+						cp = nv_endsubscript(np,sp,n);
+					}
+					else
+						cp = sp;
 					if((c = *cp)=='.' || c=='[' || (n&ARRAY_FILL))
 
 					{
 						int m = cp-sp;
-						char *sub = nv_getsub(np);
+						char *sub = m?nv_getsub(np):0;
 						if(!sub)
 							sub = "0";
 						n = strlen(sub)+2;
@@ -575,7 +583,9 @@
 							m = sp-name;
 							name = stack_extend(name, cp-1, r);
 							sp = (char*)name + m;
+							*sp = '[';
 							memcpy(sp+1,sub,n-2);
+							sp[n-1] = ']';
 							cp = sp+n;
 							
 						}
@@ -758,8 +768,12 @@
 		}
 		else
 		{
+			char *sub=0;
+			if(sh_isoption(SH_XTRACE) && nv_isarray(np))
+				sub = nv_getsub(np);
 			c = msg==e_aliname? 0: (append | (flags&NV_EXPORT)); 
 			nv_putval(np, cp, c);
+			savesub = sub;
 		}
 		nv_onattr(np, flags&NV_ATTRIBUTES);
 	}
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/sh/nvdisc.c ksh93_2006_12_04/src/cmd/ksh93/sh/nvdisc.c
--- ksh93_2006_10_31/src/cmd/ksh93/sh/nvdisc.c	2006-08-23 23:47:07.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/sh/nvdisc.c	2006-12-04 21:53:11.000000000 +0100
@@ -176,6 +176,55 @@
 	Namval_t	*disc[4];
 };
 
+struct blocked
+{
+	struct blocked	*next;
+	Namval_t	*np;
+	int		flags;
+	void		*sub;
+	int		isub;
+};
+
+static struct blocked	*blist;
+
+#define isblocked(bp,type)	((bp)->flags & (1<<(type)))
+#define block(bp,type)		((bp)->flags |= (1<<(type)))
+#define unblock(bp,type)	((bp)->flags &= ~(1<<(type)))
+
+/*
+ * returns pointer to blocking structure
+ */
+static struct blocked *block_info(Namval_t *np, struct blocked *pp)
+{
+	register struct blocked	*bp;
+	void			*sub=0;
+	int			isub=0;
+	if(nv_isarray(np) && (isub=nv_aindex(np)) < 0)
+		sub = nv_associative(np,(const char*)0,NV_ACURRENT);
+	for(bp=blist ; bp; bp=bp->next)
+	{
+		if(bp->np==np && bp->sub==sub && bp->isub==isub)
+			return(bp);
+	}
+	if(pp)
+	{
+		pp->np = np;
+		pp->flags = 0;
+		pp->isub = isub;
+		pp->sub = sub;
+		pp->next = blist;
+		blist = pp;
+	}
+	return(pp);
+}
+
+static void block_done(struct blocked *bp)
+{
+	blist = bp = bp->next;
+	if(bp && (bp->isub>=0 || bp->sub))
+		nv_putsub(bp->np, bp->sub,(bp->isub<0?0:bp->isub)|ARRAY_SETSUB);
+}
+
 /*
  * free discipline if no more discipline functions
  */
@@ -201,34 +250,41 @@
  */
 static void	assign(Namval_t *np,const char* val,int flags,Namfun_t *handle)
 {
-	register struct vardisc *vp = (struct vardisc*)handle;
-	register Namval_t *nq, **disc;
-	disc =  &(vp->disc[(flags&NV_APPEND)?APPEND:ASSIGN]);
-	if(val || *disc==BLOCKED)
+	int		type = (flags&NV_APPEND)?APPEND:ASSIGN;
+	register	struct vardisc *vp = (struct vardisc*)handle;
+	register	Namval_t *nq =  vp->disc[type];
+	struct blocked	block, *bp = block_info(np, &block);
+	Namval_t	node;
+	if(val || isblocked(bp,type))
 	{
-		if(!(nq= *disc) || nq==BLOCKED)
+		if(!nq || isblocked(bp,type))
 		{
 			nv_putv(np,val,flags,handle);
-			return;
+			goto done;
+		}
+		node = *SH_VALNOD;
+		if(!nv_isnull(SH_VALNOD))
+		{
+			nv_onattr(SH_VALNOD,NV_NOFREE);
+			nv_unset(SH_VALNOD);
 		}
 		if(flags&NV_INTEGER)
 			nv_onattr(SH_VALNOD,(flags&(NV_INTEGER|NV_LONG|NV_DOUBLE|NV_EXPNOTE|NV_SHORT)));
 		nv_putval(SH_VALNOD, val, (flags&NV_INTEGER)?flags:NV_NOFREE);
 	}
 	else
-		disc =  &(vp->disc[UNASSIGN]);
-	if((nq= *disc) && nq!=BLOCKED)
+		nq =  vp->disc[type=UNASSIGN];
+	if(nq && !isblocked(bp,type))
 	{
-		Namval_t *nq1, **disc1;
-		*disc=BLOCKED;
-		if ((flags&NV_APPEND) && (disc1= &(vp->disc[LOOKUP])) && (nq1= *disc1) && nq1!=BLOCKED)
-			*disc1=BLOCKED;
+		int bflag;
+		block(bp,type);
+		if (type==APPEND && (bflag= !isblocked(bp,LOOKUP)))
+			block(bp,LOOKUP);
 		sh_fun(nq,np,(char**)0);
-		if((flags&NV_APPEND) && disc1 && nq1 && nq1!=BLOCKED)
-			*disc1=nq1;
-		if(*disc==BLOCKED)
-			*disc=nq;
-		else if(!*disc)
+		unblock(bp,type);
+		if(bflag)
+			unblock(bp,LOOKUP);
+		if(!vp->disc[type])
 			chktfree(np,vp);
 	}
 	if(val)
@@ -249,20 +305,23 @@
 		if(cp)
 			nv_putv(np,cp,flags|NV_RDONLY,handle);
 		nv_unset(SH_VALNOD);
+		/* restore everything but the nvlink field */
+		memcpy(&SH_VALNOD->nvname,  &node.nvname, sizeof(node)-sizeof(node.nvlink));
 	}
 	else if(sh_isstate(SH_INIT))
 	{
 		/* don't free functions during reinitialization */
 		nv_putv(np,val,flags,handle);
 	}
-	else if(!nq || nq!=BLOCKED)
+	else if(!nq || !isblocked(bp,type))
 	{
 		Dt_t *root = sh_subfuntree(1);
 		int n;
 		Namarr_t *ap;
+		block(bp,type);
 		nv_putv(np, val, flags, handle);
 		if(nv_isarray(np) && (ap=nv_arrayptr(np)) && ap->nelem>0)
-			return;
+			goto done;
 		for(n=0; n < sizeof(vp->disc)/sizeof(*vp->disc); n++)
 		{
 			if((nq=vp->disc[n]) && !nv_isattr(nq,NV_NOFREE))
@@ -271,10 +330,14 @@
 				dtdelete(root,nq);
 			}
 		}
+		unblock(bp,type);
 		nv_disc(np,handle,NV_POP);
 		if(!handle->nofree)
 			free(handle);
 	}
+done:
+	if(bp== &block)
+		block_done(bp);
 }
 
 /*
@@ -283,22 +346,37 @@
  */
 static char*	lookup(Namval_t *np, Namfun_t *handle)
 {
-	register struct vardisc *vp = (struct vardisc*)handle;
-	register Namval_t *nq;
-	register char *cp=0;
-	if((nq=vp->disc[LOOKUP]) &&  nq!=BLOCKED)
+	register struct vardisc	*vp = (struct vardisc*)handle;
+	struct blocked		block, *bp = block_info(np, &block);
+	register Namval_t	*nq = vp->disc[LOOKUP];
+	register char		*cp=0;
+	Namval_t		node;
+	if(nq && !isblocked(bp,LOOKUP))
 	{
-		nv_unset(SH_VALNOD);
-		vp->disc[LOOKUP]=BLOCKED;
+		node = *SH_VALNOD;
+		if(!nv_isnull(SH_VALNOD))
+		{
+			nv_onattr(SH_VALNOD,NV_NOFREE);
+			nv_unset(SH_VALNOD);
+		}
+		block(bp,LOOKUP);
 		sh_fun(nq,np,(char**)0);
-		if(vp->disc[LOOKUP]==BLOCKED)
-			vp->disc[LOOKUP]=nq;
-		else if(!vp->disc[LOOKUP])
+		unblock(bp,LOOKUP);
+		if(!vp->disc[LOOKUP])
 			chktfree(np,vp);
 		cp = nv_getval(SH_VALNOD);
+		if(!nv_isnull(&node))
+		{
+			if(cp)
+				cp = strdup(cp);
+			/* restore everything but the nvlink field */
+			memcpy(&SH_VALNOD->nvname,  &node.nvname, sizeof(node)-sizeof(node.nvlink));
+		}
 	}
 	if(!cp)
 		cp = nv_getv(np,handle);
+	if(bp== &block)
+		block_done(bp);
 	return(cp);
 }
 
@@ -385,9 +463,10 @@
 		vp->disc[type] = action;
 	else
 	{
+		struct blocked *bp;
 		action = vp->disc[type];
 		vp->disc[type] = 0;
-		if(action!=BLOCKED)
+		if(!(bp=block_info(np,(struct blocked*)0)) || !isblocked(bp,UNASSIGN))
 			chktfree(np,vp);
 	}
 	return(action?(char*)action:empty);
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/sh/parse.c ksh93_2006_12_04/src/cmd/ksh93/sh/parse.c
--- ksh93_2006_10_31/src/cmd/ksh93/sh/parse.c	2006-10-24 04:19:26.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/sh/parse.c	2006-11-29 15:32:12.000000000 +0100
@@ -1348,6 +1348,7 @@
 	{
 		iovname=shlex.arg->argval+1;
 		token= sh_lex();
+		iof = 0;
 	}
 	switch(token&0xff)
 	{
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/sh/xec.c ksh93_2006_12_04/src/cmd/ksh93/sh/xec.c
--- ksh93_2006_10_31/src/cmd/ksh93/sh/xec.c	2006-10-12 16:19:07.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/sh/xec.c	2006-11-29 21:18:59.000000000 +0100
@@ -839,7 +839,10 @@
 							if(item->strm)
 							{
 								sfclrlock(item->strm);
-								sfclose(item->strm);
+								if(item->strm == sh.hist_ptr->histfp)
+									hist_close(sh.hist_ptr);
+								else
+									sfclose(item->strm);
 							}
 						}
 						/* failure on special built-ins fatal */
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/tests/arrays.sh ksh93_2006_12_04/src/cmd/ksh93/tests/arrays.sh
--- ksh93_2006_10_31/src/cmd/ksh93/tests/arrays.sh	2006-06-28 19:34:09.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/tests/arrays.sh	2006-11-20 17:48:41.000000000 +0100
@@ -371,4 +371,8 @@
 [[ $(typeset | grep foo$) == *associative* ]] || err_exit 'array lost associative attribute'
 [[ ! ${foo[@]}  ]] || err_exit 'array not empty'
 [[ ! ${!foo[@]}  ]] || err_exit 'array names not empty'
+unset foo
+foo=bar
+set -- "${foo[@]:1}"
+(( $# == 0 )) || err_exit '${foo[@]:1} should not have any values'
 exit $((Errors))
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/tests/basic.sh ksh93_2006_12_04/src/cmd/ksh93/tests/basic.sh
--- ksh93_2006_10_31/src/cmd/ksh93/tests/basic.sh	2006-10-02 23:25:17.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/tests/basic.sh	2006-12-04 17:38:27.000000000 +0100
@@ -272,17 +272,18 @@
 	return 1
 }
 optbug ||  err_exit 'array size optimzation bug'
+wait # not running --pipefile which would interfere with subsequent tests
+: $(jobs -p) # required to clear jobs for next jobs -p (interactive side effect)
 sleep 20 &
-if	[[ $(jobs -p) != *$!* ]]
+if	[[ $(jobs -p) != $! ]]
 then	err_exit 'jobs -p not reporting a background job' 
 fi
 sleep 20 &
 foo()
 {
 	set -- $(jobs -p)
-	(( $# == 2 )) || err_exit 'both jobs not reported'
+	(( $# == 2 )) || err_exit "$# jobs not reported -- 2 expected"
 }
-: $(jobs -p)
 foo
 [[ $( (trap 'print alarm' ALRM; sleep 4) & sleep 2; kill -ALRM $!) == alarm ]] || err_exit 'ALRM signal not working'
 [[ $($SHELL -c 'trap "" HUP; $SHELL -c "(sleep 2;kill -HUP $$)& sleep 4;print done"') != done ]] && err_exit 'ignored traps not being ignored'
@@ -322,6 +323,10 @@
 exec 3> /dev/null
 print 'print foo "$@"' > /tmp/ksh$$x
 [[ $( print "(/tmp/ksh$$x bar)" | $SHELL 2>/dev/null) == 'foo bar' ]] || err_exit 'script pipe to shell fails'
+print "#! $SHELL" > /tmp/ksh$$x
+print 'print  -- $0' >> /tmp/ksh$$x
+chmod +x /tmp/ksh$$x
+[[ $(/tmp/ksh$$x) == /tmp/ksh$$x ]] || err_exit  "\$0 is $0 instead of /tmp/ksh$$x"
 rm -f /tmp/ksh$$x
 exec 3<&-
 exit $((Errors))
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/tests/builtins.sh ksh93_2006_12_04/src/cmd/ksh93/tests/builtins.sh
--- ksh93_2006_10_31/src/cmd/ksh93/tests/builtins.sh	2006-10-20 05:49:52.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/tests/builtins.sh	2006-11-23 07:37:36.000000000 +0100
@@ -324,7 +324,20 @@
 (( $? == 1 )) || err_exit "wait not saving exit value"
 wait $pid2
 (( $? == 127 )) || err_exit "subshell job known to parent"
-if	[[ $(foo=bar;foo=$foo exec -c $SHELL -c 'print $foo') != bar ]]
+set --noglob
+ifs=$IFS
+IFS=,
+set -- $(getconf LIBPATH)
+IFS=$ifs
+env=
+for v
+do	IFS=:
+	set -- $v
+	IFS=$ifs
+	env="$env $2=\"\$$2\""
+done
+set --glob
+if	[[ $(foo=bar; eval foo=\$foo $env exec -c \$SHELL -c \'print \$foo\') != bar ]]
 then	err_exit '"name=value exec -c ..." not working'
 fi
 $SHELL -c 'OPTIND=-1000000; getopts a opt -a' 2> /dev/null
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/tests/comvar.sh ksh93_2006_12_04/src/cmd/ksh93/tests/comvar.sh
--- ksh93_2006_10_31/src/cmd/ksh93/tests/comvar.sh	2006-06-28 19:34:23.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/tests/comvar.sh	2006-11-17 17:14:55.000000000 +0100
@@ -191,5 +191,7 @@
 localvar
 	(( (point.x*point.x + point.y*point.y) == 100 )) || err_exit "global compound variable not preserved"
 [[ $($SHELL -c 'foo=();foo.[x]=(y z); print ${foo.x[@]}') == 'y z' ]] 2> /dev/null || err_exit 'foo=( [x]=(y z)  not working'
+unset z
+( [[ ${z.foo.bar:-abc} == abc ]] 2> /dev/null) || err_exit ':- not working with compound variables'
 exit $((Errors))
 
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/tests/exit.sh ksh93_2006_12_04/src/cmd/ksh93/tests/exit.sh
--- ksh93_2006_10_31/src/cmd/ksh93/tests/exit.sh	2006-08-30 23:09:07.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/tests/exit.sh	2006-11-23 07:36:57.000000000 +0100
@@ -45,11 +45,16 @@
 PATH=$PATH \
 SHELL=$ABSSHELL \
 $(
-	IFS=:
+	set --noglob
+	ifs=$IFS
+	IFS=,
 	set -- $(getconf LIBPATH)
-	while (($#>1))
-	do	eval [[ \$$2 ]] && eval print -n \" \"\$2=\"\$$2\"
-		shift 2
+	IFS=$ifs
+	for v
+	do	IFS=:
+		set -- $v
+		IFS=$ifs
+		eval [[ \$$2 ]] && eval print -n \" \"\$2=\"\$$2\"
 	done
 ) \
 exec -c -a -ksh ${ABSHELL} -c "exit 1" 1>/dev/null 2>&1
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/tests/functions.sh ksh93_2006_12_04/src/cmd/ksh93/tests/functions.sh
--- ksh93_2006_10_31/src/cmd/ksh93/tests/functions.sh	2006-06-28 19:34:32.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/tests/functions.sh	2006-11-29 15:40:15.000000000 +0100
@@ -738,4 +738,21 @@
 unset foo bar
 [[ $(foo=hello g) == hellobam ]] || err_exit 'function exports not passed on'
 [[ $(bar=hello g) == bam ]] || err_exit 'function exports not overridden'
+unset -f foo
+function foo
+{
+	typeset line=$1
+	set +n
+	while	[[ $line ]]
+	do	if	[[ ! $varname ]]
+		then	varname=${line%% *}
+			line=${line##"$varname"?( )}
+			[[ $line ]] && continue
+		else	print ok
+			return
+		fi
+		varname=
+	done
+}
+[[ $(foo 'NUMBERED RECORDSIZE') == ok ]] || err_exit 'optimization error with undefined variable'
 exit $((Errors))
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/tests/io.sh ksh93_2006_12_04/src/cmd/ksh93/tests/io.sh
--- ksh93_2006_10_31/src/cmd/ksh93/tests/io.sh	2006-10-31 16:48:17.000000000 +0100
+++ ksh93_2006_12_04/src/cmd/ksh93/tests/io.sh	2006-11-14 21:34:23.000000000 +0100
@@ -99,6 +99,14 @@
 	print -r -- "$(cat in$$)"
 	cmp -s in$$ out$$'  2> /dev/null
 [[ $? == 0 ]] || err_exit 'builtin cat truncates files'
+cat >| script <<-\!
+print hello
+( exec 3<&- 4<&-)
+exec 3<&- 4<&-
+print world
+!
+chmod +x script
+[[ $( $SHELL ./script) == $'hello\nworld' ]] || err_exit 'closing 3 & 4 causes script to fail'
 cd ~- || err_exit "cd back failed"
 ( exec  > '' ) 2> /dev/null  && err_exit '> "" does not fail'
 unset x
@@ -217,6 +225,8 @@
 	[[  $REPLY == {39}(l) ]] || err_exit "<## pattern failed to position"
 	command exec 3<# *abc*
 	read -u3 && err_exit "not found pattern not positioning at eof"
+	cat /tmp/seek$$ | read -r <# *WWW*
+	[[ $REPLY == *WWWWW* ]] || err_exit '<# not working for pipes'
 else	err_exit "/tmp/seek$$: cannot open for reading"
 fi
 trap "" EXIT
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/tests/substring.sh ksh93_2006_12_04/src/cmd/ksh93/tests/substring.sh
--- ksh93_2006_10_31/src/cmd/ksh93/tests/substring.sh	2006-08-11 18:35:32.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/tests/substring.sh	2006-12-01 21:11:30.000000000 +0100
@@ -492,4 +492,9 @@
 if	[[ ax == @(a)* ]] && [[ ${.sh.match[1]:0:${#.sh.match[1]}}  != a ]] 
 then	err_exit '${.sh.match[1]:1:${#.sh.match[1]}} not expanding correctly'
 fi
+
+string='foo(d:\nt\box\something)bar'
+expected='d:\nt\box\something'
+[[ ${string/*\(+([!\)])\)*/\1} == "$expected" ]] || err_exit "substring expansion failed '${string/*\(+([!\)])\)*/\1}' returned -- '$expected' expected"
+
 exit $((Errors))
diff -r -N -u ksh93_2006_10_31/src/cmd/ksh93/tests/variables.sh ksh93_2006_12_04/src/cmd/ksh93/tests/variables.sh
--- ksh93_2006_10_31/src/cmd/ksh93/tests/variables.sh	2006-10-24 16:26:07.000000000 +0200
+++ ksh93_2006_12_04/src/cmd/ksh93/tests/variables.sh	2006-11-17 22:00:33.000000000 +0100
@@ -63,7 +63,7 @@
 if	[[ $OLDPWD != $old ]]
 then	err_exit OLDPWD variable not working
 fi
-cd $d || err_exit cd failed
+cd $old || err_exit cd failed
 # REPLY
 read <<-!
 	foobar
@@ -125,6 +125,7 @@
 foo=bar
 (
 	unset foo
+	set +u
 	if	[[ $foo != '' ]]
 	then	err_exit '$foo not null after unset in subsehll'
 	fi
@@ -145,6 +146,7 @@
 if	[[ ${*:0:1} != "$0" ]]
 then	err_exit '${@:0} not expanding correctly'
 fi
+ACCESS=0
 function COUNT.set
 {
         (( ACCESS++ ))
@@ -500,7 +502,6 @@
 	} 
 } 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'
-unset x
 x='a|b'
 IFS='|'
 set -- $x
@@ -515,4 +516,41 @@
 : & pid=$!
 ( : & )
 [[ $pid == $! ]] || err_exit '$! value not preserved across subshells'
+unset foo
+typeset -A foo
+function foo.set
+{
+	case ${.sh.subscript} in
+	bar)	if	((.sh.value > 1 ))
+	        then	.sh.value=5
+			foo[barrier_hit]=yes
+		fi
+		;;
+	barrier_hit)
+		if	[[ ${.sh.value} = yes ]]
+		then	foo[barrier_not_hit]=no
+		else	foo[barrier_not_hit]=yes
+		fi
+		;;
+	esac
+}
+foo[barrier_hit]=no 
+foo[bar]=1
+(( foo[bar] == 1 )) || err_exit 'foo[bar] should be 1'
+[[ ${foo[barrier_hit]} == no ]] || err_exit 'foo[barrier_hit] should be no'
+[[ ${foo[barrier_not_hit]} == yes ]] || err_exit 'foo[barrier_not_hit] should be yes'
+foo[barrier_hit]=no 
+foo[bar]=2
+(( foo[bar] == 5 )) || err_exit 'foo[bar] should be 5'
+[[ ${foo[barrier_hit]} == yes ]] || err_exit 'foo[barrier_hit] should be yes'
+[[ ${foo[barrier_not_hit]} == no ]] || err_exit 'foo[barrier_not_hit] should be no'
+unset x
+typeset -i x
+function x.set
+{
+	typeset sub=${.sh.subscript}
+	(( sub > 0 )) && (( x[sub-1]= x[sub-1] + .sh.value ))
+}
+x[0]=0 x[1]=1 x[2]=2 x[3]=3
+[[ ${x[@]} == '12 8 5 3' ]] || err_exit 'set discipline for indexed array not working correctly'
 exit $((Errors))
diff -r -N -u ksh93_2006_10_31/src/lib/libast/comp/conf.sh ksh93_2006_12_04/src/lib/libast/comp/conf.sh
--- ksh93_2006_10_31/src/lib/libast/comp/conf.sh	2006-10-25 17:17:18.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/comp/conf.sh	2006-11-18 08:46:03.000000000 +0100
@@ -21,7 +21,7 @@
 ########################################################################
 : generate getconf and limits info
 #
-# @(#)conf.sh (AT&T Research) 2006-10-25
+# @(#)conf.sh (AT&T Research) 2006-11-15
 #
 # this script generates these files from the table file in the first arg
 # the remaining args are the C compiler name and flags
@@ -201,6 +201,10 @@
 			*)	standards="$standards $standard"
 				;;
 			esac
+			case $name:$flags in
+			*:*S*)	;;
+			VERSION)flags="${flags}S" ;;
+			esac
 			case $name in
 			*VERSION*)key=${standard}${section} ;;
 			*)	  key= ;;
@@ -338,6 +342,7 @@
 while	read line
 do	flags=F
 	section=
+	underscore=
 	define=$line
 	IFS=_
 	set $line
@@ -399,7 +404,7 @@
 	case $flags in
 	*R*)	case $call in
 		SI)	;;
-		*)	flags=${flags}U ;;
+		*)	underscore=U ;;
 		esac
 		;;
 	*)	case " $standards " in
@@ -408,7 +413,9 @@
 		*" $standard "*)
 			case $call in
 			SI)	;;
-			*)	flags=${flags}PU ;;
+			*)	flags=${flags}P
+				underscore=U
+				;;
 			esac
 			shift
 			;;
@@ -421,7 +428,7 @@
 	'')	standard=$HOST
 		case $call in
 		SI)	;;
-		*)	flags=${flags}U ;;
+		*)	underscore=U ;;
 		esac
 		case $call in
 		CS|PC|SC)
@@ -457,11 +464,13 @@
 	'')	;;
 	CONFORMANCE|FS_3D|HOSTTYPE|LIBPATH|LIBPREFIX|LIBSUFFIX|PATH_ATTRIBUTES|PATH_RESOLVE|UNIVERSE)
 		;;
-	*)	
-		values=
+	*)	values=
 		script=
 		args=
 		headers=
+		case $name in
+		V[1-9]_*|V[1-9][0-9]_*)	underscore=VW ;;
+		esac
 		case $call in
 		CS|SI)	key=CS ;;
 		*)	key=$call ;;
@@ -477,6 +486,9 @@
 			'')	case $call in
 				SI)	flags=O$flags ;;
 				esac
+				case $underscore in
+				?*)	flags=${flags}${underscore} ;;
+				esac
 				old=QQ
 				case $name in
 				*VERSION*)old=${old}_${standard}${part} ;;
@@ -497,7 +509,7 @@
 				eval CONF_standard_${key}='$'standard
 				eval CONF_call_${key}='$'call
 				eval CONF_section_${key}='$'section
-				eval CONF_flags_${key}=D'$'flags
+				eval CONF_flags_${key}=d'$'flags
 				eval CONF_define_${key}='$'define
 				eval CONF_values_${key}='$'values
 				eval CONF_script_${key}='$'script
@@ -533,7 +545,7 @@
 					case $call in
 					SI)	flags=O$flags ;;
 					esac
-					eval CONF_flags_${key}=D'$'flags'$'CONF_flags_${key}
+					eval CONF_flags_${key}=d'$'flags'$'CONF_flags_${key}
 					;;
 				esac
 				old=QQ
@@ -634,27 +646,30 @@
 	case $call in
 	QQ)	call=XX
 		for c in SC PC CS
-		do	eval x='$'CONF_call_${c}_${name}
+		do	case $flags in
+			*S*)	case $section in
+				1)	eval x='$'CONF_call_${c}_${standard}_${name} ;;
+				*)	eval x='$'CONF_call_${c}_${standard}${section}_${name} ;;
+				esac
+				;;
+			*)	eval x='$'CONF_call_${c}_${name}
+				;;
+			esac
 			case $x in
 			?*)	call=$x
 				break
 				;;
 			esac
-			case $flags in
-			*S*)	eval x='$'CONF_call_${c}_${standard}_${name}
-				case $x in
-				?*)	call=$x
-					break
-					;;
-				esac
-				;;
-			esac
 		done
 		case $call in
 		XX)	for c in SC PC CS
 			do	echo "_${c}_${name}"
 				case $flags in
-				*S*)	echo "_${c}_${standard}_${name}" ;;
+				*S*)	case $section in
+					1)	echo "_${c}_${standard}_${name}" ;;
+					*)	echo "_${c}_${standard}${section}_${name}" ;;
+					esac
+					;;
 				esac
 			done
 			;;
@@ -669,7 +684,7 @@
 		;;
 	esac
 	case $flags in
-	*[ABCEGHIJQTVWYZabcdefghijklmnopqrstuvwxyz_123456789]*)
+	*[ABEGHIJQTYZabcefghijklmnopqrstuvwxyz_123456789]*)
 		echo "$command: $name: $flags: invalid flag(s)" >&2
 		exit 1
 		;;
@@ -686,7 +701,7 @@
 	case $call in
 	XX)	;;
 	*)	case $flags in
-		*D*)	conf_op=${define} ;;
+		*d*)	conf_op=${define} ;;
 		*O*)	conf_op=${call}_${name} ;;
 		*R*)	conf_op=_${standard}_${call}_${name} ;;
 		*S*)	conf_op=_${call}_${standard}_${name} ;;
@@ -700,8 +715,15 @@
 	*:*L*)	echo "${conf_name}"
 		echo "_${standard}_${conf_name}"
 		;;
+	*:*M*)	case $section in
+		1)	echo "_${standard}_${conf_name}" ;;
+		*)	echo "_${standard}${section}_${conf_name}" ;;
+		esac
+		;;
 	esac
-done | sort -u >> $tmp.q
+done > $tmp.q
+sort -u < $tmp.q > $tmp.t
+mv $tmp.t $tmp.q
 sort -u < $tmp.v > $tmp.t
 mv $tmp.t $tmp.v
 case $debug in
@@ -833,39 +855,37 @@
 	case $call in
 	QQ)	call=XX
 		for c in SC PC CS
-		do	eval x='$'CONF_call_${c}_${name}
+		do	case $flags in
+			*S*)	case $section in
+				1)	eval x='$'CONF_call_${c}_${standard}_${name} ;;
+				*)	eval x='$'CONF_call_${c}_${standard}${section}_${name} ;;
+				esac
+				;;
+			*)	eval x='$'CONF_call_${c}_${name}
+				;;
+			esac
 			case $x in
 			?*)	call=$x
 				break
 				;;
 			esac
-			case $flags in
-			*S*)	eval x='$'CONF_call_${c}_${standard}_${name}
-				case $x in
-				?*)	call=$x
-					break
-					;;
-				esac
-				;;
-			esac
 		done
 		case $call in
 		XX)	for c in SC PC CS
-			do	eval x='$'CONF_const__${c}_${name}
+			do	case $flags in
+				*S*)	case $section in
+					1)	eval x='$'CONF_const__${c}_${standard}_${name} ;;
+					*)	eval x='$'CONF_const__${c}_${standard}${section}_${name} ;;
+					esac
+					;;
+				*)	eval x='$'CONF_const__${c}_${name}
+					;;
+				esac
 				case $x in
 				1)	call=$c
 					break
 					;;
 				esac
-				case $flags in
-				*S*)	eval x='$'CONF_const__${c}_${standard}_${name}
-					case $x in
-					1)	call=$c
-						break
-						;;
-					esac
-					;;
-				esac
 			done
 			;;
 		esac
@@ -898,7 +918,7 @@
 		;;
 	esac
 	conf_op=-1
-	for s in _${call}_${name} _${call}_${standard}_${name} _${call}_${standard}${section}_${name} ${call}_${name}
+	for s in _${call}_${standard}${section}_${name} _${call}_${standard}_${name} _${call}_${section}_${name} _${call}_${name} ${call}_${name}
 	do	eval x='$'CONF_const_${s}
 		case $x in
 		1)	conf_op=${s}
@@ -909,6 +929,12 @@
 	conf_section=$section
 	conf_flags=0
 	case $flags in
+	*C*)	conf_flags="${conf_flags}|CONF_DEFER_CALL" ;;
+	esac
+	case $flags in
+	*D*)	conf_flags="${conf_flags}|CONF_DEFER_MM" ;;
+	esac
+	case $flags in
 	*F*)	conf_flags="${conf_flags}|CONF_FEATURE" ;;
 	esac
 	case $flags in
@@ -929,6 +955,12 @@
 	case $flags in
 	*U*)	conf_flags="${conf_flags}|CONF_UNDERSCORE" ;;
 	esac
+	case $flags in
+	*V*)	conf_flags="${conf_flags}|CONF_NOUNDERSCORE" ;;
+	esac
+	case $flags in
+	*W*)	conf_flags="${conf_flags}|CONF_PREFIX_ONLY" ;;
+	esac
 	case $shell in
 	ksh)	conf_flags=${conf_flags#0?} ;;
 	esac
@@ -1095,7 +1127,9 @@
 			esac
 			case $x in
 			1)	conf_minmax=$s
-				conf_flags="${conf_flags}|CONF_MINMAX_DEF"
+				case $flags in
+				*M*)	conf_flags="${conf_flags}|CONF_MINMAX_DEF" ;;
+				esac
 				break
 				;;
 			esac
@@ -1157,7 +1191,9 @@
 			esac
 			case $x in
 			?*)	conf_minmax=$x
-				conf_flags="${conf_flags}|CONF_MINMAX_DEF"
+				case $flags in
+				*M*)	conf_flags="${conf_flags}|CONF_MINMAX_DEF" ;;
+				esac
 				;;
 			esac
 			;;
@@ -1238,17 +1274,21 @@
 esac
 cat <<!
 
-#define CONF_FEATURE	(1<<0)
-#define CONF_LIMIT	(1<<1)
-#define CONF_LIMIT_DEF	(1<<2)
-#define CONF_MINMAX	(1<<3)
-#define CONF_MINMAX_DEF	(1<<4)
-#define CONF_NOSECTION	(1<<5)
-#define CONF_PREFIXED	(1<<6)
-#define CONF_STANDARD	(1<<7)
-#define CONF_STRING	(1<<8)
-#define CONF_UNDERSCORE	(1<<9)
-#define CONF_USER	(1<<10)
+#define CONF_DEFER_CALL		0x0001
+#define CONF_DEFER_MM		0x0002
+#define CONF_FEATURE		0x0004
+#define CONF_LIMIT		0x0008
+#define CONF_LIMIT_DEF		0x0010
+#define CONF_MINMAX		0x0020
+#define CONF_MINMAX_DEF		0x0040
+#define CONF_NOSECTION		0x0080
+#define CONF_NOUNDERSCORE	0x0100
+#define CONF_PREFIX_ONLY	0x0200
+#define CONF_PREFIXED		0x0400
+#define CONF_STANDARD		0x0800
+#define CONF_STRING		0x1000
+#define CONF_UNDERSCORE		0x2000
+#define CONF_USER		0x4000
 
 struct Conf_s; typedef struct Conf_s Conf_t;
 
diff -r -N -u ksh93_2006_10_31/src/lib/libast/comp/conf.tab ksh93_2006_12_04/src/lib/libast/comp/conf.tab
--- ksh93_2006_10_31/src/lib/libast/comp/conf.tab	2006-10-25 17:17:18.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/comp/conf.tab	2006-12-04 23:12:14.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # posix { getconf limits } macro table
 #
-# @(#)conf.tab (AT&T Research) 2006-10-25
+# @(#)conf.tab (AT&T Research) 2006-12-04
 #
 # name standard section call flags [ header ... ] [ value ... ]
 #
@@ -10,6 +10,8 @@
 # section:	section number in standard
 # call:		CS=confstr PC=pathconf SC=sysconf SI=sysinfo QQ=query XX=none
 # flags:	0	no flags
+#		C	defer call to native getconf(1)
+#		D	defer minmax to native getconf(1)
 #		F	unistd.h feature
 #		L	limits.h constant
 #		M	has _<standard><section>_<name> minmax value
@@ -18,6 +20,8 @@
 #		R	_<standard>_<call>_<section>_<name>
 #		S	_<call>_<standard><section>_<name>
 #		U	<standard><section>_<name> prefixed by underscore
+#		V	_ prefix not allowed
+#		W	standard required
 #		X	define even if native is dynamic (ast special)
 #
 # default names if <section> <= 1
@@ -33,24 +37,34 @@
 # the [NSU] flags modify the default names
 #
 
+ABI_AIO_XFER_MAX		C	QQ 1 L
+ABI_ASYNCHRONOUS_IO		C	QQ 1 L
+ABI_ASYNC_IO			C	QQ 1 L
+ADVISORY_INFO			POSIX	SC 1 FUW
 AIO_LISTIO_MAX			POSIX	SC 1 LMU	2
 AIO_MAX				POSIX	SC 1 LMU	1
 AIO_PRIO_DELTA_MAX		POSIX	SC 1 LMU
+ALLOC_SIZE_MIN			POSIX	PC 1 LUVW
+ARCHITECTURE			SVID	SI 1 0
 ARG_MAX				POSIX	SC 1 LMUX	NCARGS 4096
-ASYNCHRONOUS_IO			POSIX	SC 1 FU
-ASYNC_IO			POSIX	PC 1 FU
+ASYNCHRONOUS_IO			POSIX	SC 1 CDFUW
+ASYNC_IO			POSIX	PC 1 FUW
 ATEXIT_MAX			XOPEN	SC 1 LMU	32
+AUDIT				C	QQ 1 L
+AVAIL_PROCESSORS		C	QQ 1 L
 AVPHYS_PAGES			SUN	SC 1 0
+BARRIERS			POSIX	SC 1 FUW
 BC_BASE_MAX			POSIX	SC 2 LMN	99
 BC_DIM_MAX			POSIX	SC 2 LMN	2048
 BC_SCALE_MAX			POSIX	SC 2 LMN	99
 BC_STRING_MAX			POSIX	SC 2 LMN	1000
+BUSTYPES			SVID	SI 1 0
 CHARCLASS_NAME_MAX		XOPEN	XX 1 L		14
 CHAR_BIT			C	XX 1 L		8
 CHAR_MAX			C	XX 1 L
 CHAR_MIN			C	XX 1 L
-CHAR_TERM			POSIX	SC 2 FU
-CHILD_MAX			POSIX	SC 1 LMUX	6	cc{
+CHAR_TERM			POSIX	SC 2 FUW
+CHILD_MAX			POSIX	SC 1 CDLMUX	6	cc{
 	#if _lib_fork
 	#define child()		fork()
 	#else
@@ -73,27 +87,57 @@
 		return 0;
 	}
 }
-CHOWN_RESTRICTED		POSIX	PC 1 FU
+CHOWN_RESTRICTED		POSIX	PC 1 FUW
 CKPT				POSIX	SC 1 FU
 CLK_TCK				POSIX	SC 1 L		HZ 60
-CLOCKRES_MIN			POSIX	SC 1 MU		1
-COLL_WEIGHTS_MAX		POSIX	SC 2 LMN	2
-CRYPT				XOPEN	SC 1 FSU
+CLOCKRES_MIN			POSIX	SC 1 MUW	1
+CLOCKS_PER_SEC			C	QQ 1 L
+CLOCK_SELECTION			POSIX	SC 1 FUVW
+COLL_WEIGHTS_MAX		POSIX	SC 2 DLMN	2
+CPUTIME				POSIX	SC 1 FUW
+CPU_KEYBITS1			C	QQ 1 L
+CPU_VERSION			C	QQ 1 L
+CRYPT				XOPEN	SC 1 FSUW
 C_BIND				POSIX	SC 2 FU
 C_DEV				POSIX	SC 2 FU
-C_VERSION			POSIX	SC 2 FU
+C_VERSION			POSIX	SC 2 CDFU
+DATAKEYS_MAX			C	QQ 1 0
 DELAYTIMER_MAX			POSIX	SC 1 LMU	32
-ENH_I18N			XOPEN	SC 1 FSU
+ENH_I18N			XOPEN	SC 1 FSUW
+EQUIV_CLASS_MAX			C	QQ 1 L
+EXEC_INTERPRETER_LENGTH		C	QQ 1 L
 EXPR_NEST_MAX			POSIX	SC 2 LMN	32
 FCHR_MAX			SVID	SC 1 LMU	LONG_MAX 2147483647
 FILESIZEBITS			POSIX	PC 1 LMU	(8*sizeof(off_t)) 32
-FORT_DEV			POSIX	SC 2 FU
-FORT_RUN			POSIX	SC 2 FU
-FSYNC				POSIX	SC 1 FU		_lib_fsync
+FILE_LOCKING			POSIX	SC 1 FU
+FORT_DEV			POSIX	SC 2 FUW
+FORT_RUN			POSIX	SC 2 FUW
+FSYNC				POSIX	SC 1 CDFUW	_lib_fsync
+GETGR_R_SIZE_MAX		C	QQ 1 L
+GETPW_R_SIZE_MAX		C	QQ 1 L
+HOSTID				C	QQ 1 L
+HOSTNAME			SVID	SI 1 0
+HOST_NAME_MAX			POSIX	SC 1 LMU	255
+HW_PROVIDER			SVID	SI 1 0
+HW_SERIAL			C	QQ 1 L
+ILP32_OFF32			XBS5	SC 1 FU
+ILP32_OFF32_CFLAGS		XBS5	CS 1 FU
+ILP32_OFF32_LDFLAGS		XBS5	CS 1 FU
+ILP32_OFF32_LIBS		XBS5	CS 1 FU
+ILP32_OFF32_LINTFLAGS		XBS5	CS 1 FU
+ILP32_OFFBIG			XBS5	SC 1 FU
+ILP32_OFFBIG_CFLAGS		XBS5	CS 1 FU
+ILP32_OFFBIG_LDFLAGS		XBS5	CS 1 FU
+ILP32_OFFBIG_LIBS		XBS5	CS 1 FU
+ILP32_OFFBIG_LINTFLAGS		XBS5	CS 1 FU
+INITTAB_NAME			SVID	SI 1 0
 INT_MAX				C	XX 1 L		32767
 INT_MIN				C	XX 1 L		-32767
 IOV_MAX				XOPEN	SC 1 LMU	16
-JOB_CONTROL			POSIX	SC 1 FU		cc{
+IO_TYPE				C	QQ 1 L
+IPV6				POSIX	SC 1 FUW
+IP_SECOPTS			C	QQ 1 L
+JOB_CONTROL			POSIX	SC 1 FUW	cc{
 	#include "FEATURE/wait"
 	#if _ok_wif
 	int main()
@@ -125,6 +169,10 @@
 KERNEL_REGION_MAX		SCO	SC 1 0
 KERNEL_S5INODE			SCO	SC 1 0
 KERNEL_S5INODE_MAX		SCO	SC 1 0
+KERNEL_STAMP			SVID	SI 1 0
+KERN_POINTERS			C	QQ 1 L
+KERN_SIM			C	QQ 1 L
+LEGACY				XOPEN	SC 1 FU
 LFS_CFLAGS			POSIX	CS 1 MU		cc{ -D_LARGEFILE_SOURCE "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" -D_LARGEFILE64_SOURCE -64
 	#include <sys/types.h>
 	int
@@ -138,31 +186,50 @@
 		return 1;
 	}
 }
-LFS_LDFLAGS			POSIX	CS 1 MU		: LFS_CFLAGS
-LFS_LINTFLAGS			POSIX	CS 1 MU		: LFS_CFLAGS
-LFS_LIBS			POSIX	CS 1 MU
 LFS64_CFLAGS			POSIX	CS 1 MU		: LFS_CFLAGS
 LFS64_LDFLAGS			POSIX	CS 1 MU		: LFS_CFLAGS
-LFS64_LINTFLAGS			POSIX	CS 1 MU		: LFS_CFLAGS
 LFS64_LIBS			POSIX	CS 1 MU
+LFS64_LINTFLAGS			POSIX	CS 1 MU		: LFS_CFLAGS
+LFS_LDFLAGS			POSIX	CS 1 MU		: LFS_CFLAGS
+LFS_LIBS			POSIX	CS 1 MU
+LFS_LINTFLAGS			POSIX	CS 1 MU		: LFS_CFLAGS
 LINE_MAX			POSIX	SC 2 LMN	2048
 LINK_MAX			POSIX	PC 1 LMU	MAXLINK SHRT_MAX 8
-LOCALEDEF			POSIX	SC 1 FU
-LOCALEDEF			POSIX	SC 2 FU
+LOCALEDEF			POSIX	SC 1 FUW
+LOCALEDEF			POSIX	SC 2 FUW
+LOGIN_NAME_MAX			POSIX	SC 1 LMU
 LOGNAME_MAX			SVID	SC 1 MU		8
+LONGLONG_MAX			C	XX 1 L
+LONGLONG_MIN			C	XX 1 L
 LONG_BIT			XOPEN	XX 1 L		(8*sizeof(long)) 32
 LONG_MAX			C	XX 1 L		2147483647
 LONG_MIN			C	XX 1 L		-2147483647
-MAPPED_FILES			POSIX	SC 1 FU		_lib_mmap
+LP64_OFF64			XBS5	SC 1 FU
+LP64_OFF64_CFLAGS		XBS5	CS 1 FU
+LP64_OFF64_LDFLAGS		XBS5	CS 1 FU
+LP64_OFF64_LIBS			XBS5	CS 1 FU
+LP64_OFF64_LINTFLAGS		XBS5	CS 1 FU
+LPBIG_OFFBIG			XBS5	SC 1 FU
+LPBIG_OFFBIG_CFLAGS		XBS5	CS 1 FU
+LPBIG_OFFBIG_LDFLAGS		XBS5	CS 1 FU
+LPBIG_OFFBIG_LIBS		XBS5	CS 1 FU
+LPBIG_OFFBIG_LINTFLAGS		XBS5	CS 1 FU
+MACHINE				SVID	SI 1 0
+MAPPED_FILES			POSIX	SC 1 CDFUW	_lib_mmap
 MAX_CANON			POSIX	PC 1 LMU	CANBSIZ 255
 MAX_INPUT			POSIX	PC 1 LMU	MAX_CANON 255	
 MB_LEN_MAX			C	XX 1 L		1
-MEMLOCK				POSIX	SC 1 FU
-MEMLOCK_RANGE			POSIX	SC 1 FU
-MEMORY_PROTECTION		POSIX	SC 1 FU
-MESSAGE_PASSING			POSIX	SC 1 FU
+MCAS_OFFSET			C	QQ 1 L
+MEMLOCK				POSIX	SC 1 CDFUW
+MEMLOCK_RANGE			POSIX	SC 1 CDFUW
+MEMORY_PROTECTION		POSIX	SC 1 CDFUW
+MESSAGE_PASSING			POSIX	SC 1 CDFUW
+MMAP_FIXED_ALIGNMENT		C	QQ 1 L		_AST_PAGESIZE
+MONOTONIC_CLOCK			POSIX	SC 1 FUW
 MQ_OPEN_MAX			POSIX	SC 1 LMU	8
 MQ_PRIO_MAX			POSIX	SC 1 LMU	32
+MSEM_LOCKID			C	QQ 1 L
+MULTI_PROCESS			POSIX	SC 1 FU
 NACLS_MAX			SVID	SC 1 0
 NAME_MAX			POSIX	PC 1 LMU	14	cc{
 	int main()
@@ -211,7 +278,7 @@
 	}
 	#endif
 }
-NGROUPS_MAX			POSIX	SC 1 LMU	8	cc{
+NGROUPS_MAX			POSIX	SC 1 CDLMU	8	cc{
 	#if _lib_getgroups
 	int main()
 	{
@@ -230,15 +297,22 @@
 }
 NL_ARGMAX			XOPEN	XX 1 L		9
 NL_LANGMAX			XOPEN	XX 1 L		14
+NL_MAX				C	QQ 1 L
 NL_MSGMAX			XOPEN	XX 1 L		32767
 NL_NMAX				XOPEN	XX 1 L		1
 NL_SETMAX			XOPEN	XX 1 L		255
+NL_SPECMAX			C	QQ 1 L
 NL_TEXTMAX			XOPEN	XX 1 L		LINE_MAX
-NO_TRUNC			POSIX	PC 1 FU
+NO_TRUNC			POSIX	PC 1 FUW
 NPROCESSORS_CONF		SVID	SC 1 0
 NPROCESSORS_ONLN		SVID	SC 1 0
+NPROC_CONF			C	QQ 1 L
+NPROC_ONLN			C	QQ 1 L
+NSS_BUFLEN_GROUP		C	QQ 1 L
+NSS_BUFLEN_PASSWD		C	QQ 1 L
+NUM_PROCESSORS			C	QQ 1 L
 NZERO				XOPEN	XX 1 L		20
-OPEN_MAX			POSIX	SC 1 LMUX	16	cc{
+OPEN_MAX			POSIX	SC 1 CDLMUX	16	cc{
 	#if _lib_getdtablesize
 	extern int		getdtablesize(void);
 	int main()
@@ -266,6 +340,11 @@
 	#endif
 }
 OPEN_MAX_CEIL			AST	XX 1 L		OPEN_MAX
+OSREL_MAJ			C	QQ 1 L
+OSREL_MIN			C	QQ 1 L
+OSREL_PATCH			C	QQ 1 L
+OS_BASE				SVID	SI 1 0
+OS_PROVIDER			SVID	SI 1 0
 OS_VERSION			AES	SC 1 FSU
 PAGESIZE			POSIX	SC 1 MU		PAGESIZE PAGE_SIZE 4096	cc{
 	int main()
@@ -287,9 +366,15 @@
 	}
 }
 PAGE_SIZE			POSIX	SC 1 MU		_AST_PAGESIZE
-PASS_MAX			SVID	SC 1 LMU	8
-PATH				POSIX	CS 1 MU		"/bin:/usr/bin"
-PATH_MAX			POSIX	PC 1 LMUX	MAXPATHLEN 1024
+PASS_MAX			SVID	SC 1 CDLMU	8
+PATH				POSIX	CS 1 CMU	"/bin:/usr/bin"
+PATH_MAX			POSIX	PC 1 CDLMUX	MAXPATHLEN 1024
+PBS				POSIX	SC 2 FUW
+PBS_ACCOUNTING			POSIX	SC 2 FUW
+PBS_CHECKPOINT			POSIX	SC 2 FUW
+PBS_LOCATE			POSIX	SC 2 FUW
+PBS_MESSAGE			POSIX	SC 2 FUW
+PBS_TRACK			POSIX	SC 2 FUW
 PHYS_PAGES			SUN	SC 1 0
 PID_MAX				SVID	SC 1 LMU	30000	cc{
 	int main()
@@ -307,16 +392,43 @@
 		return 0;
 	}
 }
+PII				POSIX	SC 1 FU
+PII_INTERNET			POSIX	SC 1 FU
+PII_INTERNET_DGRAM		POSIX	SC 1 FU
+PII_INTERNET_STREAM		POSIX	SC 1 FU
+PII_OSI				POSIX	SC 1 FU
+PII_OSI_CLTS			POSIX	SC 1 FU
+PII_OSI_COTS			POSIX	SC 1 FU
+PII_OSI_M			POSIX	SC 1 FU
+PII_SOCKET			POSIX	SC 1 FU
+PII_XTI				POSIX	SC 1 FU
 PIPE_BUF			POSIX	PC 1 LMU	512
-PRIORITIZED_IO			POSIX	SC 1 FU
-PRIORITY_SCHEDULING		POSIX	SC 1 FU
-PRIO_IO				POSIX	PC 1 FU
-REALTIME_SIGNALS		POSIX	SC 1 FU
-REGEXP				POSIX	SC 1 FU
+POLL				POSIX	SC 1 FU
+PRIORITIZED_IO			POSIX	SC 1 FUW
+PRIORITY_SCHEDULING		POSIX	SC 1 CDFUW
+PRIO_IO				POSIX	PC 1 FUW
+PROC_RSRC_MGR			C	QQ 1 L
+PTHREAD_DESTRUCTOR_ITERATIONS	C	QQ 1 L
+PTHREAD_KEYS_MAX		C	QQ 1 L
+PTHREAD_STACK_MIN		C	QQ 1 L
+PTHREAD_THREADS_MAX		C	QQ 1 L
+RAW_SOCKETS			POSIX	SC 1 FUW
+READER_WRITER_LOCKS		POSIX	SC 1 FUW
+REALTIME			XOPEN	SC 1 FU
+REALTIME_SIGNALS		POSIX	SC 1 CDFUW
+REALTIME_THREADS		XOPEN	SC 1 FU
+REC_INCR_XFER_SIZE		POSIX	PC 1 LVW
+REC_MAX_XFER_SIZE		POSIX	PC 1 LVW
+REC_MIN_XFER_SIZE		POSIX	PC 1 LVW
+REC_XFER_ALIGN			POSIX	PC 1 LVW
+REENTRANT_FUNCTIONS		POSIX	SC 1 FU
+REGEXP				POSIX	SC 1 FUW
+REGEX_VERSION			POSIX	SC 1 F		20030916
+RELEASE				C	QQ 1 L
 RESOURCE_LIMITS			POSIX	SC 1 FU
 RE_DUP_MAX			POSIX	SC 2 LMN	255
 RTSIG_MAX			POSIX	SC 1 LMU	8
-SAVED_IDS			POSIX	SC 1 FU		cc{
+SAVED_IDS			POSIX	SC 1 FUW	cc{
 	#if _lib_setuid && !_lib_setreuid
 	int main()
 	{
@@ -327,7 +439,9 @@
 }
 SCHAR_MAX			C	XX 1 L		127
 SCHAR_MIN			C	XX 1 L		-127
-SEMAPHORES			POSIX	SC 1 FU
+SECURITY_CLASS			C	QQ 1 L
+SELECT				POSIX	SC 1 FU
+SEMAPHORES			POSIX	SC 1 CDFUW
 SEM_NSEMS_MAX			POSIX	SC 1 LMU	256
 SEM_VALUE_MAX			POSIX	SC 1 LMU	32767
 SH				AST	CS 1 MU		sh{
@@ -354,18 +468,28 @@
 	done
 	echo '"/bin/sh"'
 }
-SHARED_MEMORY_OBJECTS		POSIX	SC 1 FU
-SHM				XOPEN	SC 1 FSU
+SHARED_MEMORY_OBJECTS		POSIX	SC 1 CDFUW
+SHELL				POSIX	SC 1 FUVW
+SHM				XOPEN	SC 1 FSUW
 SHRT_MAX			C	XX 1 L		32767
 SHRT_MIN			C	XX 1 L		-32767
 SIGQUEUE_MAX			POSIX	SC 1 LMU	32
 SIGRT_MAX			SVID	SC 1 0
 SIGRT_MIN			SVID	SC 1 0
 SIZE_MAX			C	XX 1 LMX	UINT_MAX 65535
+SLVM_MAXNODES			C	QQ 1 L
+SOCK_MAXBUF			C	QQ 1 0
+SOFTPOWER			C	QQ 1 L
+SPAWN				POSIX	SC 1 FUW
+SPIN_LOCKS			POSIX	SC 1 FUW
+SPORADIC_SERVER			POSIX	SC 1 FUW
+SRPC_DOMAIN			C	QQ 1 0
+SS_REPL_MAX			POSIX	SC 1 FUW
 SSIZE_MAX			POSIX	XX 1 LMUX	INT_MAX 32767
 STD_BLK				SVID	SC 1 LMU	1024
 STREAM_MAX			POSIX	SC 1 LMU	OPEN_MAX 8
-SW_DEV				POSIX	SC 2 FU
+STREAMS				XOPEN	SC 1 FSUW
+SW_DEV				POSIX	SC 2 FUW
 SYMLINK_MAX			POSIX	PC 1 LMU	255	cc{
 	int main()
 	{
@@ -373,198 +497,81 @@
 		return 0;
 	}
 }
+SYMLINKS			POSIX	PC 2 FUW
 SYMLOOP_MAX			POSIX	SC 1 LMU	8
-SYNCHRONIZED_IO			POSIX	SC 1 FU
-SYNC_IO				POSIX	PC 1 FU
+SYNCHRONIZED_IO			POSIX	SC 1 CDFUW
+SYNC_IO				POSIX	PC 1 FUW
+SYSNAME				SVID	SI 1 0
 SYSPID_MAX			SVID	SC 1 LMU	2
-TIMERS				POSIX	SC 1 FU
+THREADS				POSIX	SC 1 CDFUW
+THREADS_PRIO_CEILING		POSIX	SC 1 FUW
+THREADS_PRIO_INHERIT		POSIX	SC 1 FUW
+THREAD_ATTR_STACKADDR		POSIX	SC 1 CDFUW
+THREAD_ATTR_STACKSIZE		POSIX	SC 1 CDFUW
+THREAD_CPUTIME			POSIX	SC 1 FUW
+THREAD_DESTRUCTOR_ITERATIONS	POSIX	SC 1 LMUW	PTHREAD_DESTRUCTOR_ITERATIONS 4
+THREAD_KEYS_MAX			POSIX	SC 1 LMUW	PTHREAD_KEYS_MAX 128
+THREAD_PRIORITY_SCHEDULING	POSIX	SC 1 CDFUW
+THREAD_PRIO_INHERIT		POSIX	SC 1 CDFUW
+THREAD_PRIO_PROTECT		POSIX	SC 1 CDFUW
+THREAD_PROCESS_SHARED		POSIX	SC 1 CDFUW
+THREAD_SAFE_FUNCTIONS		POSIX	SC 1 CDFUW
+THREAD_SPORADIC_SERVER		POSIX	SC 1 FUW
+THREAD_STACK_MIN		POSIX	SC 1 LUW	PTHREAD_STACK_MIN
+THREAD_THREADS_MAX		POSIX	SC 1 LMUW	PTHREAD_THREADS_MAX 64
+TIMEOUTS			POSIX	SC 1 FUW
+TIMERS				POSIX	SC 1 CDFUW
 TIMER_MAX			POSIX	SC 1 LMU	32
 TMP				AST	CS 1 MU		"/tmp"
 TMP_MAX				C	SC 1 LMU	33520641
-TZNAME_MAX			POSIX	SC 1 LMU	6
+TRACE				POSIX	SC 1 FUW
+TRACE_EVENT_FILTER		POSIX	SC 1 FUW
+TRACE_EVENT_NAME_MAX		POSIX	SC 1 FUVW
+TRACE_INHERIT			POSIX	SC 1 FUW
+TRACE_LOG			POSIX	SC 1 FUW
+TRACE_NAME_MAX			POSIX	SC 1 FUVW
+TRACE_SYS_MAX			POSIX	SC 1 FUVW
+TRACE_USER_EVENT_MAX		POSIX	SC 1 FUVW
+TTY_NAME_MAX			POSIX	SC 1 LMU	9
+TYPED_MEMORY_OBJECTS		POSIX	SC 1 FUW
+TZNAME_MAX			POSIX	SC 1 CDLMU	6
+T_IOV_MAX			C	QQ 1 0
 UCHAR_MAX			C	XX 1 L		255
+UCHAR_MIN			C	XX 1 L
 UID_MAX				SVID	SC 1 LMU	60002
 UINT_MAX			C	XX 1 L		65535
+UIO_MAXIOV			C	QQ 1 0
+ULONGLONG_MAX			C	XX 1 L
 ULONG_MAX			C	XX 1 L		4294967295
-UNIX				XOPEN	SC 1 FSU
-UPE				POSIX	SC 2 FU
+UNIX				XOPEN	SC 1 FSUW
+UPE				POSIX	SC 2 FUW
+USER_LIMIT			SVID	SI 1 0
 USHRT_MAX			C	XX 1 L		65535
-VDISABLE			POSIX	PC 1 FU
-VERSION				POSIX	SC 1 FU		200112
-VERSION				POSIX	SC 2 FU		200112
-VERSION				XOPEN	SC 1 FSU	600
+V6_ILP32_OFF32			POSIX	SC 1 W
+V6_ILP32_OFFBIG			POSIX	SC 1 W
+V6_LP64_OFF64			POSIX	SC 1 W
+V6_LPBIG_OFFBIG			POSIX	SC 1 W
+VDISABLE			POSIX	PC 1 FUW
+VERSION				POSIX	SC 1 CDFSU	200112
+VERSION				POSIX	SC 2 CDFSU	200112
+VERSION				XOPEN	SC 1 CDFSU	600
+VERSION				AST	XX 1 MS		_AST_VERSION
+VERSION				SVID	SI 1 S
+VERSION				XPG	SC 3 DFSU
+VERSION				XPG	SC 4 DFSU
+VERSION_88			C	XX 1 L
+VERSION_88			POSIX	SC 1 FSU
+VERSION_90			C	XX 1 L
+VERSION_90			POSIX	SC 1 FSU
+VERSION_93			C	XX 1 L
+VERSION_93			POSIX	SC 1 FSU
 WORD_BIT			XOPEN	XX 1 L		(8*sizeof(int))
-XCU_VERSION			XOPEN	SC 1 FSU
+XCU_VERSION			XOPEN	SC 1 CDFSU
 XPG2				XOPEN	XX 1 FU
 XPG3				XOPEN	XX 1 FU
 XPG4				XOPEN	XX 1 FU
 
-# confgen additions
-
-ABI_AIO_XFER_MAX		C	QQ 1 L
-ABI_ASYNCHRONOUS_IO		C	QQ 1 L
-ABI_ASYNC_IO			C	QQ 1 L
-ADVISORY_INFO			POSIX	SC 1 FU
-ALLOC_SIZE_MIN			POSIX	PC 1 L
-AUDIT				C	QQ 1 L
-AVAIL_PROCESSORS		C	QQ 1 L
-BARRIERS			POSIX	SC 1 FU
-CLOCKS_PER_SEC			C	QQ 1 L
-CPUTIME				POSIX	SC 1 FU
-CPU_KEYBITS1			C	QQ 1 L
-CPU_VERSION			C	QQ 1 L
-DATAKEYS_MAX			C	QQ 1 0
-EQUIV_CLASS_MAX			C	QQ 1 L
-EXEC_INTERPRETER_LENGTH		C	QQ 1 L
-FILE_LOCKING			POSIX	SC 1 FU
-GETGR_R_SIZE_MAX		C	QQ 1 L
-GETPW_R_SIZE_MAX		C	QQ 1 L
-HOSTID				C	QQ 1 L
-HOST_NAME_MAX			POSIX	SC 1 LMU	255
-HW_SERIAL			C	QQ 1 L
-ILP32_OFF32			XBS5	SC 1 FU
-ILP32_OFF32_CFLAGS		XBS5	CS 1 FU
-ILP32_OFF32_LDFLAGS		XBS5	CS 1 FU
-ILP32_OFF32_LIBS		XBS5	CS 1 FU
-ILP32_OFF32_LINTFLAGS		XBS5	CS 1 FU
-ILP32_OFFBIG			XBS5	SC 1 FU
-ILP32_OFFBIG_CFLAGS		XBS5	CS 1 FU
-ILP32_OFFBIG_LDFLAGS		XBS5	CS 1 FU
-ILP32_OFFBIG_LIBS		XBS5	CS 1 FU
-ILP32_OFFBIG_LINTFLAGS		XBS5	CS 1 FU
-IO_TYPE				C	QQ 1 L
-IPV6				POSIX	SC 1 FU
-IP_SECOPTS			C	QQ 1 L
-KERN_POINTERS			C	QQ 1 L
-KERN_SIM			C	QQ 1 L
-LEGACY				XOPEN	SC 1 FU
-LOGIN_NAME_MAX			POSIX	SC 1 LMU
-LONGLONG_MAX			C	XX 1 L
-LONGLONG_MIN			C	XX 1 L
-LP64_OFF64			XBS5	SC 1 FU
-LP64_OFF64_CFLAGS		XBS5	CS 1 FU
-LP64_OFF64_LDFLAGS		XBS5	CS 1 FU
-LP64_OFF64_LIBS			XBS5	CS 1 FU
-LP64_OFF64_LINTFLAGS		XBS5	CS 1 FU
-LPBIG_OFFBIG			XBS5	SC 1 FU
-LPBIG_OFFBIG_CFLAGS		XBS5	CS 1 FU
-LPBIG_OFFBIG_LDFLAGS		XBS5	CS 1 FU
-LPBIG_OFFBIG_LIBS		XBS5	CS 1 FU
-LPBIG_OFFBIG_LINTFLAGS		XBS5	CS 1 FU
-MCAS_OFFSET			C	QQ 1 L
-MMAP_FIXED_ALIGNMENT		C	QQ 1 L		_AST_PAGESIZE
-MONOTONIC_CLOCK			POSIX	SC 1 FU
-MSEM_LOCKID			C	QQ 1 L
-MULTI_PROCESS			POSIX	SC 1 FU
-NL_MAX				C	QQ 1 L
-NL_SPECMAX			C	QQ 1 L
-NPROC_CONF			C	QQ 1 L
-NPROC_ONLN			C	QQ 1 L
-NSS_BUFLEN_GROUP		C	QQ 1 L
-NSS_BUFLEN_PASSWD		C	QQ 1 L
-NUM_PROCESSORS			C	QQ 1 L
-OSREL_MAJ			C	QQ 1 L
-OSREL_MIN			C	QQ 1 L
-OSREL_PATCH			C	QQ 1 L
-PBS				POSIX	SC 2 FU
-PBS_ACCOUNTING			POSIX	SC 2 FU
-PBS_CHECKPOINT			POSIX	SC 2 FU
-PBS_LOCATE			POSIX	SC 2 FU
-PBS_MESSAGE			POSIX	SC 2 FU
-PBS_TRACK			POSIX	SC 2 FU
-PII				POSIX	SC 1 FU
-PII_INTERNET			POSIX	SC 1 FU
-PII_INTERNET_DGRAM		POSIX	SC 1 FU
-PII_INTERNET_STREAM		POSIX	SC 1 FU
-PII_OSI				POSIX	SC 1 FU
-PII_OSI_CLTS			POSIX	SC 1 FU
-PII_OSI_COTS			POSIX	SC 1 FU
-PII_OSI_M			POSIX	SC 1 FU
-PII_SOCKET			POSIX	SC 1 FU
-PII_XTI				POSIX	SC 1 FU
-POLL				POSIX	SC 1 FU
-PROC_RSRC_MGR			C	QQ 1 L
-PTHREAD_DESTRUCTOR_ITERATIONS	C	QQ 1 L
-PTHREAD_KEYS_MAX		C	QQ 1 L
-PTHREAD_STACK_MIN		C	QQ 1 L
-PTHREAD_THREADS_MAX		C	QQ 1 L
-RAW_SOCKETS			POSIX	SC 1 FU
-READER_WRITER_LOCKS		POSIX	SC 1 FU
-REALTIME			XOPEN	SC 1 FU
-REALTIME_THREADS		XOPEN	SC 1 FU
-REC_INCR_XFER_SIZE		POSIX	PC 1 L
-REC_MIN_XFER_SIZE		POSIX	PC 1 L
-REC_MAX_XFER_SIZE		POSIX	PC 1 L
-REC_XFER_ALIGN			POSIX	PC 1 L
-REENTRANT_FUNCTIONS		POSIX	SC 1 FU
-REGEX_VERSION			POSIX	SC 1 F		20030916
-RELEASE				C	QQ 1 L
-SECURITY_CLASS			C	QQ 1 L
-SELECT				POSIX	SC 1 FU
-SLVM_MAXNODES			C	QQ 1 L
-SOCK_MAXBUF			C	QQ 1 0
-SOFTPOWER			C	QQ 1 L
-SPAWN				POSIX	SC 1 FU
-SPIN_LOCKS			POSIX	SC 1 FU
-SPORADIC_SERVER			POSIX	SC 1 FU
-SRPC_DOMAIN			C	QQ 1 0
-THREADS				POSIX	SC 1 FU
-THREADS_PRIO_CEILING		POSIX	SC 1 FU
-THREADS_PRIO_INHERIT		POSIX	SC 1 FU
-THREAD_ATTR_STACKADDR		POSIX	SC 1 FU
-THREAD_ATTR_STACKSIZE		POSIX	SC 1 FU
-THREAD_CPUTIME			POSIX	SC 1 FU
-THREAD_DESTRUCTOR_ITERATIONS	POSIX	SC 1 LMU	PTHREAD_DESTRUCTOR_ITERATIONS 4
-THREAD_KEYS_MAX			POSIX	SC 1 LMU	PTHREAD_KEYS_MAX 128
-THREAD_PRIORITY_SCHEDULING	POSIX	SC 1 FU
-THREAD_PRIO_INHERIT		POSIX	SC 1 FU
-THREAD_PRIO_PROTECT		POSIX	SC 1 FU
-THREAD_PROCESS_SHARED		POSIX	SC 1 FU
-THREAD_SAFE_FUNCTIONS		POSIX	SC 1 FU
-THREAD_SPORADIC_SERVER		POSIX	SC 1 FU
-THREAD_STACK_MIN		POSIX	SC 1 LU		PTHREAD_STACK_MIN
-THREAD_THREADS_MAX		POSIX	SC 1 LMU	PTHREAD_THREADS_MAX 64
-TIMEOUTS			POSIX	SC 1 FU
-TRACE				POSIX	SC 1 FU
-TRACE_EVENT_FILTER		POSIX	SC 1 FU
-TRACE_INHERIT			POSIX	SC 1 FU
-TRACE_LOG			POSIX	SC 1 FU
-TTY_NAME_MAX			POSIX	SC 1 LMU	9
-TYPED_MEMORY_OBJECTS		POSIX	SC 1 FU
-T_IOV_MAX			C	QQ 1 0
-UCHAR_MIN			C	XX 1 L
-UIO_MAXIOV			C	QQ 1 0
-ULONGLONG_MAX			C	XX 1 L
-V6_ILP32_OFF32			POSIX	SC 1 FU
-V6_ILP32_OFFBIG			POSIX	SC 1 FU
-V6_LP64_OFF64			POSIX	SC 1 FU
-V6_LPBIG_OFFBIG			POSIX	SC 1 FU
-VERSION				XPG	SC 3 FU
-VERSION				XPG	SC 4 FU
-VERSION_88			POSIX	SC 1 FU
-VERSION_88			C	XX 1 L
-VERSION_90			POSIX	SC 1 FU
-VERSION_90			C	XX 1 L
-VERSION_93			POSIX	SC 1 FU
-VERSION_93			C	XX 1 L
-VERSION				AST	XX 1 MU		_AST_VERSION
-
-# sys/systeminfo sysinfo additions
-
-ARCHITECTURE			SVID	SI 1 0
-BUSTYPES			SVID	SI 1 0
-HOSTNAME			SVID	SI 1 0
-HW_PROVIDER			SVID	SI 1 0
-INITTAB_NAME			SVID	SI 1 0
-KERNEL_STAMP			SVID	SI 1 0
-MACHINE				SVID	SI 1 0
-OS_BASE				SVID	SI 1 0
-OS_PROVIDER			SVID	SI 1 0
-SYSNAME				SVID	SI 1 0
-USER_LIMIT			SVID	SI 1 0
-VERSION				SVID	SI 1 0
-
 # vendor prefixes
 
-VERSION				GNU		XX 1 0
-VERSION				TRUSTEDBSD	XX 1 0
+VERSION				GNU		XX 1 S
+VERSION				TRUSTEDBSD	XX 1 S
diff -r -N -u ksh93_2006_10_31/src/lib/libast/comp/spawnveg.c ksh93_2006_12_04/src/lib/libast/comp/spawnveg.c
--- ksh93_2006_10_31/src/lib/libast/comp/spawnveg.c	2006-11-03 01:04:06.000000000 +0100
+++ ksh93_2006_12_04/src/lib/libast/comp/spawnveg.c	2006-11-22 08:15:21.000000000 +0100
@@ -163,6 +163,10 @@
 #endif
 #endif
 
+#if 0
+	if (access(path, X_OK))
+		return -1;
+#endif
 	if (!envv)
 		envv = environ;
 #if _lib_spawnve
@@ -219,41 +223,19 @@
 #if _real_vfork
 	if (pid != -1 && (m = *exec_errno_ptr))
 	{
-		rid = -1;
-		n = errno;
-		while (waitpid(pid, NiL, 0) == -1)
-			if (errno == ECHILD)
-			{
-				if (m != ENOEXEC)
-					rid = pid;
-				break;
-			}
-			else if (errno != EINTR)
-				break;
-		pid = -1;
-		if (rid < 0)
-			n = m;
+		while (waitpid(pid, NiL, 0) == -1 && errno == EINTR);
+		rid = pid = -1;
+		n = m;
 	}
 #else
-	if (err[0] != -1)
+	if (pid != -1 && err[0] != -1)
 	{
 		close(err[1]);
-		if (read(err[0], &m, sizeof(m)) == sizeof(m))
+		if (read(err[0], &m, sizeof(m)) == sizeof(m) && m)
 		{
-			rid = -1;
-			n = errno;
-			while (waitpid(pid, NiL, 0) == -1)
-				if (errno == ECHILD)
-				{
-					if (m != ENOEXEC)
-						rid = pid;
-					break;
-				}
-				else if (errno != EINTR)
-					break;
-			pid = -1;
-			if (rid < 0)
-				n = m;
+			while (waitpid(pid, NiL, 0) == -1 && errno == EINTR);
+			rid = pid = -1;
+			n = m;
 		}
 		close(err[0]);
 	}
diff -r -N -u ksh93_2006_10_31/src/lib/libast/dir/dirlib.h ksh93_2006_12_04/src/lib/libast/dir/dirlib.h
--- ksh93_2006_10_31/src/lib/libast/dir/dirlib.h	2002-05-13 19:08:16.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/dir/dirlib.h	2006-11-21 21:26:21.000000000 +0100
@@ -33,7 +33,9 @@
 #if defined(__STDPP__directive) && defined(__STDPP__hide)
 __STDPP__directive pragma pp:hide getdents getdirentries
 #else
+#undef	getdents
 #define getdents	______getdents
+#undef	getdirentries
 #define getdirentries	______getdirentries
 #endif
 
@@ -76,11 +78,17 @@
 #if defined(__STDPP__directive) && defined(__STDPP__hide)
 __STDPP__directive pragma pp:hide DIR closedir opendir readdir seekdir telldir
 #else
+#undef	DIR
 #define DIR		______DIR
+#undef	closedir
 #define closedir	______closedir
+#undef	opendir
 #define opendir		______opendir
+#undef	readdir
 #define readdir		______readdir
+#undef	seekdir
 #define seekdir		______seekdir
+#undef	telldir
 #define telldir		______telldir
 #endif
 
diff -r -N -u ksh93_2006_10_31/src/lib/libast/features/common ksh93_2006_12_04/src/lib/libast/features/common
--- ksh93_2006_10_31/src/lib/libast/features/common	2006-09-28 19:52:10.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/features/common	2006-11-21 05:51:39.000000000 +0100
@@ -153,13 +153,13 @@
 	#define _ast_int8_str	"long"
 	#endif
 	#if N == 2
-	#define _ast_int8_t	__int64
-	#define _ast_int8_str	"__int64"
-	#endif
-	#if N == 3
 	#define _ast_int8_t	long long
 	#define _ast_int8_str	"long long"
 	#endif
+	#if N == 3
+	#define _ast_int8_t	__int64
+	#define _ast_int8_str	"__int64"
+	#endif
 	#if N == 4
 	#define _ast_int8_t	__int64_t
 	#define _ast_int8_str	"__int64_t"
diff -r -N -u ksh93_2006_10_31/src/lib/libast/features/float ksh93_2006_12_04/src/lib/libast/features/float
--- ksh93_2006_10_31/src/lib/libast/features/float	2006-06-27 18:50:37.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/features/float	2006-12-01 23:05:15.000000000 +0100
@@ -1,6 +1,6 @@
 set	prototyped
 hdr	float,limits,math,values
-lib	frexp,frexpl,ldexp,ldexpl,finite,finitel,isnan,isnanl <math.h> -lm
+lib	fpclassify,frexp,frexpl,ldexp,ldexpl,finite,finitel,isinf,isinfl,isnan,isnanl,signbit,copysign,copysignl <math.h> -lm
 
 tst	ast_no_um2fm note{ no unsigned intmax => floatmax cast }end nolink{
 	#include "FEATURE/common"
diff -r -N -u ksh93_2006_10_31/src/lib/libast/features/standards ksh93_2006_12_04/src/lib/libast/features/standards
--- ksh93_2006_10_31/src/lib/libast/features/standards	2006-10-23 20:18:45.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/features/standards	2006-12-05 05:44:53.000000000 +0100
@@ -8,6 +8,7 @@
 		#include <sys/types.h>
 		#include <sys/stat.h>
 		#include <stdlib.h>
+		#include <unistd.h>
 	}end {
 		#ifndef _ISOC99_SOURCE
 		#define _ISOC99_SOURCE	1
@@ -34,6 +35,8 @@
 		#define __EXTENSIONS__	1
 		#include <sys/types.h>
 		#include <sys/stat.h>
+		#include <stdlib.h>
+		#include <unistd.h>
 	}end {
 		#ifndef _POSIX_SOURCE
 		#define _POSIX_SOURCE	1
@@ -50,6 +53,8 @@
 		#define __EXTENSIONS__	1
 		#include <sys/types.h>
 		#include <sys/stat.h>
+		#include <stdlib.h>
+		#include <unistd.h>
 	}end {
 		#ifndef _XOPEN_SOURCE
 		#define _XOPEN_SOURCE	1
@@ -62,6 +67,8 @@
 		#define _XOPEN_SOURCE	1
 		#include <sys/types.h>
 		#include <sys/stat.h>
+		#include <stdlib.h>
+		#include <unistd.h>
 	}end {
 		#ifndef _XOPEN_SOURCE
 		#define _XOPEN_SOURCE	1
diff -r -N -u ksh93_2006_10_31/src/lib/libast/features/unistd.c ksh93_2006_12_04/src/lib/libast/features/unistd.c
--- ksh93_2006_10_31/src/lib/libast/features/unistd.c	2006-09-28 20:17:24.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/features/unistd.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,97 +0,0 @@
-/***********************************************************************
-*                                                                      *
-*               This software is part of the ast package               *
-*           Copyright (c) 1985-2006 AT&T Knowledge Ventures            *
-*                      and is licensed under the                       *
-*                  Common Public License, Version 1.0                  *
-*                      by AT&T Knowledge Ventures                      *
-*                                                                      *
-*                A copy of the License is available at                 *
-*            http://www.opensource.org/licenses/cpl1.0.txt             *
-*         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
-*                                                                      *
-*              Information and Software Systems Research               *
-*                            AT&T Research                             *
-*                           Florham Park NJ                            *
-*                                                                      *
-*                 Glenn Fowler <gsf at research.att.com>                  *
-*                  David Korn <dgk at research.att.com>                   *
-*                   Phong Vo <kpv at research.att.com>                    *
-*                                                                      *
-***********************************************************************/
-#pragma prototyped
-/*
- * Glenn Fowler
- * AT&T Bell Laboratories
- *
- * generate unistd.h definitions for posix conf function
- */
-
-#if defined(__STDPP__directive) && defined(__STDPP__hide)
-__STDPP__directive pragma pp:hide getpagesize getdtablesize
-#else
-#define getpagesize	______getpagesize
-#define getdtablesize	______getdtablesize
-#endif
-
-/*
- * we'd like as many symbols as possible defined
- * the standards push the vendors the other way
- * but don't provide guard that lets everything through
- * so each vendor adds their own guard
- * many now include something like <standards.h> to
- * get it straight in one place -- <sys/types.h> should
- * kick that in
- */
-
-#include "FEATURE/standards"
-#include "FEATURE/lib"
-
-#ifdef __sun
-#define _timespec	timespec
-#endif
-
-#include <sys/types.h>
-
-#undef	_SGIAPI
-#define _SGIAPI		1
-
-#if _hdr_limits
-#include <limits.h>
-#endif
-
-#undef	_SGIAPI
-#define _SGIAPI		0
-
-#include "FEATURE/lib"
-#include "FEATURE/common"
-
-#if _hdr_unistd
-#include <unistd.h>
-#endif
-
-#include "FEATURE/param"
-
-#if defined(__STDPP__directive) && defined(__STDPP__hide)
-__STDPP__directive pragma pp:nohide getpagesize getdtablesize
-#else
-#undef	getpagesize
-#undef	getdtablesize   
-#endif
-
-#include "conflib.h"
-
-int main()
-{
-#include "confuni.h"
-#if _dll_data_intercept
-	printf("\n#if _dll_data_intercept && ( _DLL_BLD || _BLD_DLL )\n");
-	printf("#undef	environ\n");
-	printf("#define environ (*_ast_dll._dll_environ)\n");
-	printf("struct _astdll { char*** _dll_environ; };\n");
-	printf("extern struct _astdll _ast_dll;\n");
-	printf("extern struct _astdll* _ast_getdll(void);\n");
-	printf("#endif\n");
-#endif
-	return 0;
-}
diff -r -N -u ksh93_2006_10_31/src/lib/libast/include/ast.h ksh93_2006_12_04/src/lib/libast/include/ast.h
--- ksh93_2006_10_31/src/lib/libast/include/ast.h	2006-10-11 18:22:39.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/include/ast.h	2006-11-15 23:06:04.000000000 +0100
@@ -164,6 +164,7 @@
 #define FMT_ESCAPED	0x02		/* already escaped		*/
 #define FMT_SHELL	0x04		/* escape $ ` too		*/
 #define FMT_WIDE	0x08		/* don't escape 8 bit chars	*/
+#define FMT_PARAM	0x10		/* disable FMT_SHELL ${$( quote	*/
 
 /*
  * multibyte macros
diff -r -N -u ksh93_2006_10_31/src/lib/libast/include/ast_version.h ksh93_2006_12_04/src/lib/libast/include/ast_version.h
--- ksh93_2006_10_31/src/lib/libast/include/ast_version.h	2006-10-06 07:58:39.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/include/ast_version.h	2006-11-15 23:06:23.000000000 +0100
@@ -25,4 +25,4 @@
  * AT&T Research
  */
 
-#define _AST_VERSION	20061004L
+#define _AST_VERSION	20061111L
diff -r -N -u ksh93_2006_10_31/src/lib/libast/include/vmalloc.h ksh93_2006_12_04/src/lib/libast/include/vmalloc.h
--- ksh93_2006_10_31/src/lib/libast/include/vmalloc.h	2004-04-07 14:55:17.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/include/vmalloc.h	2006-11-15 23:03:09.000000000 +0100
@@ -80,6 +80,8 @@
 #endif
 };
 
+#undef	VM_FLAGS			/* solaris sys kernel clash	*/
+
 #define VM_TRUST	0000001		/* forgo some security checks	*/
 #define VM_TRACE	0000002		/* generate trace 		*/
 #define VM_DBCHECK	0000004		/* check for boundary overwrite	*/
diff -r -N -u ksh93_2006_10_31/src/lib/libast/Makefile ksh93_2006_12_04/src/lib/libast/Makefile
--- ksh93_2006_10_31/src/lib/libast/Makefile	2006-10-20 23:18:04.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/Makefile	2006-11-27 19:55:43.000000000 +0100
@@ -252,7 +252,7 @@
 
 lc.h lctab.h :JOINT: lcgen lc.tab
 	$(*:O=1:C,^[^/],./&,) $(tmp).1 $(tmp).2 < $(*:O=2) # :P=E: in 2006
-	$(PROTO) -p $(PROTOFLAGS) $(tmp).1 > $(tmp).3
+	$(PROTO) -p $(PROTOFLAGS) $(tmp).1 $(PROTOINSTALL) > $(tmp).3
 	$(RM) -f $(tmp).1
 	if	$(CMP) -s $(tmp).3 $(<:O=1)
 	then	$(RM) $(tmp).3
@@ -269,14 +269,14 @@
 
 $(HEADEROPT:D=$(INCLUDEDIR):B:S) : $$(<:B:S) ast_lib.h
 	case $(CC.HOSTTYPE) in
-	win32.*)$(PROTO) -p $(PROTOFLAGS) $(*:O=1) > 1.$(tmp).x
+	win32.*)$(PROTO) -p $(PROTOFLAGS) $(*:O=1) $(PROTOINSTALL) > 1.$(tmp).x
 		if	$(CMP) -s $(<) 1.$(tmp).x
 		then	$(RM) -f 1.$(tmp).x
 		else	$(MV) 1.$(tmp).x $(<)
 		fi
 		;;
 	*)	$(SILENT) $(GREP) -l 'define[ 	][ 	]*_[hl][di][rb]_$(<:B)' $(*:O>1) > /dev/null || {
-		$(PROTO) -p $(PROTOFLAGS) $(*:O=1) > 1.$(tmp).x
+		$(PROTO) -p $(PROTOFLAGS) $(*:O=1) $(PROTOINSTALL) > 1.$(tmp).x
 		if	$(CMP) -s $(<) 1.$(tmp).x
 		then	$(RM) -f 1.$(tmp).x
 		else	$(MV) 1.$(tmp).x $(<)
diff -r -N -u ksh93_2006_10_31/src/lib/libast/Mamfile ksh93_2006_12_04/src/lib/libast/Mamfile
--- ksh93_2006_10_31/src/lib/libast/Mamfile	2006-11-03 03:05:32.000000000 +0100
+++ ksh93_2006_12_04/src/lib/libast/Mamfile	2006-12-05 23:38:31.000000000 +0100
@@ -138,11 +138,20 @@
 make features/param.sh
 done features/param.sh
 exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/param.sh
-make error?--?old?ethernet?address?at?wrong?offset implicit
-done error?--?old?ethernet?address?at?wrong?offset dontcare virtual
+make std/endian.h implicit
+make std/bytesex.h implicit
+make ast_common.h implicit
+prev FEATURE/common
+exec - sed '/define _def_map_ast/d' < FEATURE/common > 1.${COTEMP}.x
+exec - if	cmp 2>/dev/null -s ast_common.h 1.${COTEMP}.x
+exec - then	rm -f 1.${COTEMP}.x
+exec - else	mv 1.${COTEMP}.x ast_common.h
+exec - fi
+prev ast_map.h implicit
+done ast_common.h dontcare generated
+done std/bytesex.h dontcare
+done std/endian.h dontcare
 done FEATURE/param generated
-make comp/re_comp.h implicit
-done comp/re_comp.h dontcare
 make comp/getopt.h implicit
 make include/ast_getopt.h implicit
 done include/ast_getopt.h dontcare
@@ -151,7 +160,7 @@
 prev FEATURE/lib implicit
 prev FEATURE/standards implicit
 done features/limits.c
-exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude  ${LDFLAGS} '   run features/limits.c
+exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd  ${LDFLAGS} '   run features/limits.c
 done FEATURE/limits generated
 exec - cmp 2>/dev/null -s FEATURE/limits ast_limits.h || { rm -f ast_limits.h; silent test -d . || mkdir .; ${STDCP} FEATURE/limits ast_limits.h; }
 done ast_limits.h generated
@@ -165,15 +174,7 @@
 done include/sfio_s.h dontcare
 make include/ast_std.h implicit
 make include/regex.h implicit
-make ast_common.h implicit
-prev FEATURE/common
-exec - sed '/define _def_map_ast/d' < FEATURE/common > 1.${COTEMP}.x
-exec - if	cmp 2>/dev/null -s ast_common.h 1.${COTEMP}.x
-exec - then	rm -f 1.${COTEMP}.x
-exec - else	mv 1.${COTEMP}.x ast_common.h
-exec - fi
-prev ast_map.h implicit
-done ast_common.h dontcare generated
+prev ast_common.h implicit
 done include/regex.h dontcare
 prev ast_map.h implicit
 make ast_botch.h implicit
@@ -186,7 +187,7 @@
 done FEATURE/types generated
 prev FEATURE/lib implicit
 done features/botch.c
-exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I.  ${LDFLAGS} '   run features/botch.c
+exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  ${LDFLAGS} '   run features/botch.c
 done FEATURE/botch generated
 exec - cmp 2>/dev/null -s FEATURE/botch ast_botch.h || { rm -f ast_botch.h; silent test -d . || mkdir .; ${STDCP} FEATURE/botch ast_botch.h; }
 done ast_botch.h dontcare generated
@@ -209,7 +210,7 @@
 done FEATURE/fs generated
 prev FEATURE/lib implicit
 done features/fcntl.c
-exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude  ${LDFLAGS} '   run features/fcntl.c
+exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd  ${LDFLAGS} '   run features/fcntl.c
 make ast_fs.h implicit
 prev FEATURE/fs
 exec - cmp 2>/dev/null -s FEATURE/fs ast_fs.h || { rm -f ast_fs.h; silent test -d . || mkdir .; ${STDCP} FEATURE/fs ast_fs.h; }
@@ -225,10 +226,8 @@
 make features/sys
 done features/sys
 exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/sys
-make std/stdio.h implicit
-prev ast_stdio.h implicit
-done std/stdio.h dontcare
-prev comp/getopt.h implicit
+prev std/endian.h implicit
+prev std/endian.h implicit
 done FEATURE/sys generated
 exec - cmp 2>/dev/null -s FEATURE/sys ast_sys.h || { rm -f ast_sys.h; silent test -d . || mkdir .; ${STDCP} FEATURE/sys ast_sys.h; }
 done ast_sys.h dontcare generated
@@ -242,7 +241,7 @@
 exec - cmp 2>/dev/null -s FEATURE/stdio ast_stdio.h || { rm -f ast_stdio.h; silent test -d . || mkdir .; ${STDCP} FEATURE/stdio ast_stdio.h; }
 prev include/sfio_s.h implicit
 prev include/ast_std.h implicit
-done ast_stdio.h dontcare generated
+done ast_stdio.h generated
 make ast_nl_types.h
 make FEATURE/nl_types
 meta FEATURE/nl_types features/%>FEATURE/% features/nl_types nl_types
@@ -258,7 +257,10 @@
 make features/wchar
 done features/wchar
 exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS}   ${LDFLAGS} '   run features/wchar
-prev std/stdio.h implicit
+prev std/endian.h implicit
+make std/stdio.h implicit
+prev ast_stdio.h implicit
+done std/stdio.h dontcare
 prev std/stdio.h implicit
 prev ast_common.h implicit
 done FEATURE/wchar generated
@@ -298,12 +300,14 @@
 exec - rm -f 1.${COTEMP}.*
 make astmath.exe
 make port/astmath.c
+prev std/endian.h implicit
+prev std/endian.h implicit
 done port/astmath.c
 exec - X=1
 exec - for N in 1 2 3 4 5 6
-exec - do	if	${CC} -DN=$N -DIS ${mam_cc_FLAGS} ${CCFLAGS}   -o astmath.exe port/astmath.c 2>/dev/null
+exec - do	if	${CC} -DN=$N -DIS ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  -o astmath.exe port/astmath.c 2>/dev/null
 exec - 	then	: implicit math function N=$N :
-exec - 	elif	${CC} -DN=$N -DIS ${mam_cc_FLAGS} ${CCFLAGS}   -o astmath.exe port/astmath.c -lm 2>/dev/null
+exec - 	elif	${CC} -DN=$N -DIS ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  -o astmath.exe port/astmath.c -lm 2>/dev/null
 exec - 	then	: math function N=$N requires -lm :
 exec - 		X=0
 exec - 		break
@@ -359,8 +363,6 @@
 prev FEATURE/param
 exec - cmp 2>/dev/null -s FEATURE/param ast_param.h || { rm -f ast_param.h; silent test -d . || mkdir .; ${STDCP} FEATURE/param ast_param.h; }
 done ast_param.h dontcare generated
-make ndir.h implicit
-done ndir.h dontcare virtual
 make std/dirent.h implicit
 make ast_dirent.h implicit
 make FEATURE/dirent
@@ -375,6 +377,9 @@
 prev include/ast_std.h implicit
 done ast_dirent.h dontcare generated
 done std/dirent.h dontcare
+make ndir.h implicit
+done ndir.h dontcare virtual
+prev std/dirent.h implicit
 make include/ls.h implicit
 make ast_mode.h implicit
 make FEATURE/mode
@@ -385,7 +390,7 @@
 prev FEATURE/param implicit
 done features/mode.c
 prev ast.req
-exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude  ${LDFLAGS} '   run features/mode.c
+exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -Istd  ${LDFLAGS} '   run features/mode.c
 done FEATURE/mode generated
 exec - cmp 2>/dev/null -s FEATURE/mode ast_mode.h || { rm -f ast_mode.h; silent test -d . || mkdir .; ${STDCP} FEATURE/mode ast_mode.h; }
 done ast_mode.h dontcare generated
@@ -462,6 +467,7 @@
 prev include/regex.h implicit
 prev include/ls.h implicit
 prev include/error.h implicit
+prev std/endian.h implicit
 make include/cdt.h implicit
 prev ast_common.h implicit
 prev include/ast_std.h implicit
@@ -911,7 +917,7 @@
 make port/lc.tab
 done port/lc.tab
 exec - ./lcgen ${COTEMP}.1 ${COTEMP}.2 < port/lc.tab
-exec - proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' ${COTEMP}.1 > ${COTEMP}.3
+exec - proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' ${COTEMP}.1  > ${COTEMP}.3
 exec - rm -f ${COTEMP}.1
 exec - if	cmp 2>/dev/null -s ${COTEMP}.3 lc.h
 exec - then	rm ${COTEMP}.3
@@ -1403,8 +1409,6 @@
 prev port/lclib.h implicit
 make vfork.h implicit
 done vfork.h dontcare virtual
-make cell_sys_headers.h implicit
-done cell_sys_headers.h dontcare virtual
 make std/wchar.h implicit
 prev ast_wchar.h implicit
 done std/wchar.h dontcare
@@ -2759,8 +2763,6 @@
 done process.h dontcare virtual
 prev include/wait.h implicit
 prev include/error.h implicit
-make spawn.h implicit
-done spawn.h dontcare virtual
 prev include/ast.h implicit
 done comp/spawnveg.c
 meta spawnveg.o %.c>%.o comp/spawnveg.c spawnveg
@@ -2879,6 +2881,8 @@
 make gross.o
 make comp/gross.c
 make comp/gross_sgi.h implicit
+make locale_attr.h implicit
+done locale_attr.h dontcare virtual
 done comp/gross_sgi.h dontcare
 make FEATURE/hack implicit
 meta FEATURE/hack features/%>FEATURE/% features/hack hack
@@ -2941,7 +2945,7 @@
 done comp/getpgrp.c
 meta getpgrp.o %.c>%.o comp/getpgrp.c getpgrp
 prev comp/getpgrp.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I.  -c comp/getpgrp.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  -c comp/getpgrp.c
 done getpgrp.o generated
 make setpgid.o
 make comp/setpgid.c
@@ -3264,7 +3268,7 @@
 done comp/basename.c
 meta basename.o %.c>%.o comp/basename.c basename
 prev comp/basename.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I.  -c comp/basename.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  -c comp/basename.c
 done basename.o generated
 make closelog.o
 make comp/closelog.c
@@ -3285,7 +3289,7 @@
 done comp/dirname.c
 meta dirname.o %.c>%.o comp/dirname.c dirname
 prev comp/dirname.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I.  -c comp/dirname.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  -c comp/dirname.c
 done dirname.o generated
 make fmtmsglib.o
 make comp/fmtmsglib.c
@@ -3379,7 +3383,8 @@
 make re_comp.o
 make comp/re_comp.c
 prev include/regex.h implicit
-prev comp/re_comp.h implicit
+make comp/re_comp.h implicit
+done comp/re_comp.h
 prev include/ast.h implicit
 done comp/re_comp.c
 meta re_comp.o %.c>%.o comp/re_comp.c re_comp
@@ -3469,7 +3474,7 @@
 done swab.o generated
 make syslog.o
 make comp/syslog.c
-prev std/stdio.h implicit
+prev std/endian.h implicit
 prev include/ls.h implicit
 prev include/tm.h implicit
 prev include/error.h implicit
@@ -4203,7 +4208,7 @@
 prev FEATURE/common implicit
 done features/sfinit.c
 prev ast.req
-exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I.  ${LDFLAGS} '   run features/sfinit.c
+exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  ${LDFLAGS} '   run features/sfinit.c
 done FEATURE/sfinit generated
 prev FEATURE/float implicit
 prev sfio/sfhdr.h implicit
@@ -5260,8 +5265,6 @@
 done astcopy.o generated
 make astconf.o
 make port/astconf.c
-make sys.s implicit
-done sys.s dontcare virtual
 make FEATURE/libpath implicit
 meta FEATURE/libpath features/%.sh>FEATURE/% features/libpath.sh libpath
 make features/libpath.sh
@@ -5330,7 +5333,7 @@
 done conftab.c
 meta conftab.o %.c>%.o conftab.c conftab
 prev conftab.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude  -c conftab.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd  -c conftab.c
 done conftab.o generated
 make aststatic.o
 make port/aststatic.c
@@ -5532,7 +5535,6 @@
 make malloc.o
 make vmalloc/malloc.c
 prev include/ast_windows.h implicit
-prev std/stdio.h implicit
 prev vmalloc/vmhdr.h implicit
 done vmalloc/malloc.c
 meta malloc.o %.c>%.o vmalloc/malloc.c malloc
@@ -5553,7 +5555,7 @@
 done uwin/a64l.c
 meta a64l.o %.c>%.o uwin/a64l.c a64l
 prev uwin/a64l.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd  -c uwin/a64l.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  -c uwin/a64l.c
 done a64l.o generated
 make acosh.o
 make uwin/acosh.c
@@ -5563,7 +5565,7 @@
 done uwin/acosh.c
 meta acosh.o %.c>%.o uwin/acosh.c acosh
 prev uwin/acosh.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/acosh.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/acosh.c
 done acosh.o generated
 make asinh.o
 make uwin/asinh.c
@@ -5572,7 +5574,7 @@
 done uwin/asinh.c
 meta asinh.o %.c>%.o uwin/asinh.c asinh
 prev uwin/asinh.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/asinh.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/asinh.c
 done asinh.o generated
 make atanh.o
 make uwin/atanh.c
@@ -5581,7 +5583,7 @@
 done uwin/atanh.c
 meta atanh.o %.c>%.o uwin/atanh.c atanh
 prev uwin/atanh.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/atanh.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/atanh.c
 done atanh.o generated
 make cbrt.o
 make uwin/cbrt.c
@@ -5590,7 +5592,7 @@
 done uwin/cbrt.c
 meta cbrt.o %.c>%.o uwin/cbrt.c cbrt
 prev uwin/cbrt.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/cbrt.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/cbrt.c
 done cbrt.o generated
 make crypt.o
 make uwin/crypt.c
@@ -5610,7 +5612,7 @@
 done uwin/erf.c
 meta erf.o %.c>%.o uwin/erf.c erf
 prev uwin/erf.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/erf.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/erf.c
 done erf.o generated
 make err.o
 make uwin/err.c
@@ -5630,7 +5632,7 @@
 done uwin/exp.c
 meta exp.o %.c>%.o uwin/exp.c exp
 prev uwin/exp.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/exp.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/exp.c
 done exp.o generated
 make exp__E.o
 make uwin/exp__E.c
@@ -5639,7 +5641,7 @@
 done uwin/exp__E.c
 meta exp__E.o %.c>%.o uwin/exp__E.c exp__E
 prev uwin/exp__E.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/exp__E.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/exp__E.c
 done exp__E.o generated
 make expm1.o
 make uwin/expm1.c
@@ -5648,7 +5650,7 @@
 done uwin/expm1.c
 meta expm1.o %.c>%.o uwin/expm1.c expm1
 prev uwin/expm1.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/expm1.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/expm1.c
 done expm1.o generated
 make gamma.o
 make uwin/gamma.c
@@ -5657,7 +5659,7 @@
 done uwin/gamma.c
 meta gamma.o %.c>%.o uwin/gamma.c gamma
 prev uwin/gamma.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/gamma.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/gamma.c
 done gamma.o generated
 make getpass.o
 make uwin/getpass.c
@@ -5675,7 +5677,7 @@
 done uwin/lgamma.c
 meta lgamma.o %.c>%.o uwin/lgamma.c lgamma
 prev uwin/lgamma.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/lgamma.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/lgamma.c
 done lgamma.o generated
 make log.o
 make uwin/log.c
@@ -5684,7 +5686,7 @@
 done uwin/log.c
 meta log.o %.c>%.o uwin/log.c log
 prev uwin/log.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/log.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/log.c
 done log.o generated
 make log1p.o
 make uwin/log1p.c
@@ -5693,7 +5695,7 @@
 done uwin/log1p.c
 meta log1p.o %.c>%.o uwin/log1p.c log1p
 prev uwin/log1p.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/log1p.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/log1p.c
 done log1p.o generated
 make log__L.o
 make uwin/log__L.c
@@ -5702,7 +5704,7 @@
 done uwin/log__L.c
 meta log__L.o %.c>%.o uwin/log__L.c log__L
 prev uwin/log__L.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/log__L.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/log__L.c
 done log__L.o generated
 make rand48.o
 make uwin/rand48.c
@@ -5710,7 +5712,7 @@
 done uwin/rand48.c
 meta rand48.o %.c>%.o uwin/rand48.c rand48
 prev uwin/rand48.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd  -c uwin/rand48.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  -c uwin/rand48.c
 done rand48.o generated
 make random.o
 make uwin/random.c
@@ -5718,18 +5720,14 @@
 done uwin/random.c
 meta random.o %.c>%.o uwin/random.c random
 prev uwin/random.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd  -c uwin/random.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  -c uwin/random.c
 done random.o generated
 make rcmd.o
 make uwin/rcmd.c
 prev std/nl_types.h implicit
 make uwin/rlib.h implicit
+prev std/endian.h implicit
 prev std/stdio.h implicit
-make std/endian.h implicit
-make std/bytesex.h implicit
-prev ast_common.h implicit
-done std/bytesex.h dontcare
-done std/endian.h dontcare
 prev std/stdio.h implicit
 prev include/ast_std.h implicit
 done uwin/rlib.h dontcare
@@ -5745,7 +5743,7 @@
 done uwin/rint.c
 meta rint.o %.c>%.o uwin/rint.c rint
 prev uwin/rint.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I.  -c uwin/rint.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd  -c uwin/rint.c
 done rint.o generated
 make support.o
 make uwin/support.c
@@ -5754,7 +5752,7 @@
 done uwin/support.c
 meta support.o %.c>%.o uwin/support.c support
 prev uwin/support.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin  -c uwin/support.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iuwin -Istd  -c uwin/support.c
 done support.o generated
 make sfstrtmp.o
 make disc/sfstrtmp.c
@@ -6879,18 +6877,17 @@
 done misc/magic.tab
 exec - test '' = 'misc/magic.tab' || ${STDCMP} 2>/dev/null -s misc/magic.tab ${INSTALLROOT}/lib/file/magic || { ${STDMV} ${INSTALLROOT}/lib/file/magic ${INSTALLROOT}/lib/file/magic.old 2>/dev/null || true; ${STDCP} misc/magic.tab ${INSTALLROOT}/lib/file/magic  		    		    ;}
 done ${INSTALLROOT}/lib/file/magic generated
-make ${INSTALLROOT}/include/ast/fmtmsg.h
 prev comp/fmtmsg.h
 prev ast_lib.h
 exec - case ${mam_cc_HOSTTYPE} in
-exec - win32.*)proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/fmtmsg.h > 1.${COTEMP}.x
+exec - win32.*)proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/fmtmsg.h  > 1.${COTEMP}.x
 exec - 	if	cmp 2>/dev/null -s ${INSTALLROOT}/include/ast/fmtmsg.h 1.${COTEMP}.x
 exec - 	then	rm -f 1.${COTEMP}.x
 exec - 	else	mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/fmtmsg.h
 exec - 	fi
 exec - 	;;
 exec - *)	silent grep -l 'define[ 	][ 	]*_[hl][di][rb]_fmtmsg' ast_lib.h > /dev/null || {
-exec - 	proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/fmtmsg.h > 1.${COTEMP}.x
+exec - 	proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/fmtmsg.h  > 1.${COTEMP}.x
 exec - 	if	cmp 2>/dev/null -s ${INSTALLROOT}/include/ast/fmtmsg.h 1.${COTEMP}.x
 exec - 	then	rm -f 1.${COTEMP}.x
 exec - 	else	mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/fmtmsg.h
@@ -6898,20 +6895,17 @@
 exec - 	}
 exec - 	;;
 exec - esac
-prev ${INSTALLROOT}/include/prototyped.h implicit
-done ${INSTALLROOT}/include/ast/fmtmsg.h generated
-make ${INSTALLROOT}/include/ast/libgen.h
 prev comp/libgen.h
 prev ast_lib.h
 exec - case ${mam_cc_HOSTTYPE} in
-exec - win32.*)proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/libgen.h > 1.${COTEMP}.x
+exec - win32.*)proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/libgen.h  > 1.${COTEMP}.x
 exec - 	if	cmp 2>/dev/null -s ${INSTALLROOT}/include/ast/libgen.h 1.${COTEMP}.x
 exec - 	then	rm -f 1.${COTEMP}.x
 exec - 	else	mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/libgen.h
 exec - 	fi
 exec - 	;;
 exec - *)	silent grep -l 'define[ 	][ 	]*_[hl][di][rb]_libgen' ast_lib.h > /dev/null || {
-exec - 	proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/libgen.h > 1.${COTEMP}.x
+exec - 	proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/libgen.h  > 1.${COTEMP}.x
 exec - 	if	cmp 2>/dev/null -s ${INSTALLROOT}/include/ast/libgen.h 1.${COTEMP}.x
 exec - 	then	rm -f 1.${COTEMP}.x
 exec - 	else	mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/libgen.h
@@ -6919,20 +6913,17 @@
 exec - 	}
 exec - 	;;
 exec - esac
-prev ${INSTALLROOT}/include/prototyped.h implicit
-done ${INSTALLROOT}/include/ast/libgen.h generated
-make ${INSTALLROOT}/include/ast/syslog.h
 prev comp/syslog.h
 prev ast_lib.h
 exec - case ${mam_cc_HOSTTYPE} in
-exec - win32.*)proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/syslog.h > 1.${COTEMP}.x
+exec - win32.*)proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/syslog.h  > 1.${COTEMP}.x
 exec - 	if	cmp 2>/dev/null -s ${INSTALLROOT}/include/ast/syslog.h 1.${COTEMP}.x
 exec - 	then	rm -f 1.${COTEMP}.x
 exec - 	else	mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/syslog.h
 exec - 	fi
 exec - 	;;
 exec - *)	silent grep -l 'define[ 	][ 	]*_[hl][di][rb]_syslog' ast_lib.h > /dev/null || {
-exec - 	proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/syslog.h > 1.${COTEMP}.x
+exec - 	proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' comp/syslog.h  > 1.${COTEMP}.x
 exec - 	if	cmp 2>/dev/null -s ${INSTALLROOT}/include/ast/syslog.h 1.${COTEMP}.x
 exec - 	then	rm -f 1.${COTEMP}.x
 exec - 	else	mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/syslog.h
@@ -6940,9 +6931,6 @@
 exec - 	}
 exec - 	;;
 exec - esac
-prev include/namval.h implicit
-prev ${INSTALLROOT}/include/prototyped.h implicit
-done ${INSTALLROOT}/include/ast/syslog.h generated
 make ${INSTALLROOT}/include/ast/prototyped.h
 prev ${INSTALLROOT}/include/ast
 exec - echo "#include <../prototyped.h>" > 1.${COTEMP}.x
diff -r -N -u ksh93_2006_10_31/src/lib/libast/port/astconf.c ksh93_2006_12_04/src/lib/libast/port/astconf.c
--- ksh93_2006_10_31/src/lib/libast/port/astconf.c	2006-10-25 19:29:18.000000000 +0200
+++ ksh93_2006_12_04/src/lib/libast/port/astconf.c	2006-11-18 13:08:38.000000000 +0100
@@ -26,7 +26,7 @@
  * extended to allow some features to be set per-process
  */
 
-static const char id[] = "\n@(#)$Id: getconf (AT&T Research) 2006-10-25 $\0\n";
+static const char id[] = "\n@(#)$Id: getconf (AT&T Research) 2006-11-15 $\0\n";
 
 #include "univlib.h"
 
@@ -93,6 +93,7 @@
 #endif
 
 static char	null[1];
+static char	root[2] = "/";
 
 typedef struct Feature_s
 {
@@ -102,7 +103,7 @@
 	char*		strict;
 	short		length;
 	short		standard;
-	short		flags;
+	unsigned short	flags;
 	short		op;
 } Feature_t;
 
@@ -110,7 +111,7 @@
 {
 	Conf_t*		conf;
 	const char*	name;
-	short		flags;
+	unsigned short	flags;
 	short		call;
 	short		standard;
 	short		section;
@@ -777,14 +778,14 @@
 #endif
 	look->name = name;
 #if DEBUG || DEBUG_astconf
-	error(-1, "astconf normal name=%s standard=%d section=%d call=%d flags=%04x elements=%d", look->name, look->standard, look->section, look->call, flags, conf_elements);
+	error(-2, "astconf normal name=%s standard=%d section=%d call=%d flags=%04x elements=%d", look->name, look->standard, look->section, look->call, flags, conf_elements);
 #endif
 	c = *((unsigned char*)name);
 	while (lo <= hi)
 	{
 		mid = lo + (hi - lo) / 2;
 #if DEBUG || DEBUG_astconf
-		error(-2, "astconf lookup name=%s mid=%s", name, mid->name);
+		error(-3, "astconf lookup name=%s mid=%s", name, mid->name);
 #endif
 		if (!(v = c - *((unsigned char*)mid->name)) && !(v = strcmp(name, mid->name)))
 		{
@@ -815,11 +816,11 @@
 	}
 	return 0;
  found:
-	if (look->call < 0 && look->standard >= 0)
+	if (look->call < 0 && look->standard >= 0 && (look->section <= 1 || (mid->flags & CONF_MINMAX)))
 		look->flags |= CONF_MINMAX;
 	look->conf = mid;
 #if DEBUG || DEBUG_astconf
-	error(-1, "astconf lookup name=%s standard=%d:%d section=%d:%d call=%d:%d", look->name, look->standard, mid->standard, look->section, mid->section, look->call, mid->call);
+	error(-2, "astconf lookup name=%s standard=%d:%d section=%d:%d call=%d:%d", look->name, look->standard, mid->standard, look->section, mid->section, look->call, mid->call);
 #endif
 	return 1;
 }
@@ -860,6 +861,7 @@
 	char*			call;
 	char*			f;
 	const char*		s;
+	int			i;
 	int			olderrno;
 	int			drop;
 	_ast_intmax_t		v;
@@ -871,23 +873,72 @@
 	olderrno = errno;
 	errno = 0;
 #if DEBUG || DEBUG_astconf
-	error(-1, "astconf print name=%s:%s standard=%d section=%d call=%s op=%d flags=|%s%s%s%s%s:|%s%s%s%s%s"
+	error(-1, "astconf name=%s:%s standard=%d section=%d call=%s op=%d flags=|%s%s%s%s%s:|%s%s%s%s%s%s%s%s%s%s"
 		, name , p->name, p->standard, p->section, prefix[p->call + CONF_call].name, p->op
 		, (flags & CONF_FEATURE) ? "FEATURE|" : ""
 		, (flags & CONF_LIMIT) ? "LIMIT|" : ""
 		, (flags & CONF_MINMAX) ? "MINMAX|" : ""
 		, (flags & CONF_PREFIXED) ? "PREFIXED|" : ""
 		, (flags & CONF_STRING) ? "STRING|" : ""
+		, (p->flags & CONF_DEFER_CALL) ? "DEFER_CALL|" : ""
+		, (p->flags & CONF_DEFER_MM) ? "DEFER_MM|" : ""
 		, (p->flags & CONF_FEATURE) ? "FEATURE|" : ""
 		, (p->flags & CONF_LIMIT_DEF) ? "LIMIT_DEF|" : (p->flags & CONF_LIMIT) ? "LIMIT|" : ""
 		, (p->flags & CONF_MINMAX_DEF) ? "MINMAX_DEF|" : (p->flags & CONF_MINMAX) ? "MINMAX|" : ""
+		, (p->flags & CONF_NOUNDERSCORE) ? "NOUNDERSCORE|" : ""
 		, (p->flags & CONF_PREFIXED) ? "PREFIXED|" : ""
+		, (p->flags & CONF_PREFIX_ONLY) ? "PREFIX_ONLY|" : ""
+		, (p->flags & CONF_STANDARD) ? "STANDARD|" : ""
 		, (p->flags & CONF_STRING) ? "STRING|" : ""
+		, (p->flags & CONF_UNDERSCORE) ? "UNDERSCORE|" : ""
 		);
 #endif
 	flags |= CONF_LIMIT_DEF|CONF_MINMAX_DEF;
+	if (conferror && name)
+	{
+		if ((p->flags & CONF_PREFIX_ONLY) && look->standard < 0)
+			goto bad;
+		if (!(flags & CONF_MINMAX) || !(p->flags & CONF_MINMAX))
+		{
+			switch (p->call)
+			{
+			case CONF_pathconf:
+				if (path == root)
+				{
+					(*conferror)(&state, &state, 2, "%s: path expected", name);
+					goto bad;
+				}
+				break;
+			default:
+				if (path != root)
+				{
+					(*conferror)(&state, &state, 2, "%s: path not expected", name);
+					goto bad;
+				}
+				break;
+			}
+#ifdef _pth_getconf
+			if (p->flags & CONF_DEFER_CALL)
+				goto bad;
+#endif
+		}
+		else
+		{
+			if (path != root)
+			{
+				(*conferror)(&state, &state, 2, "%s: path not expected", name);
+				goto bad;
+			}
+#ifdef _pth_getconf
+			if ((p->flags & CONF_DEFER_MM) || !(p->flags & CONF_MINMAX_DEF))
+				goto bad;
+#endif
+		}
+		if (look->standard >= 0 && (name[0] != '_' && ((p->flags & CONF_UNDERSCORE) || look->section <= 1) || name[0] == '_' && (p->flags & CONF_NOUNDERSCORE)) || look->standard < 0 && name[0] == '_')
+			goto bad;
+	}
 	s = 0;
-	switch ((p->op < 0 || (flags & CONF_MINMAX) && (p->flags & CONF_MINMAX_DEF)) ? 0 : p->call)
+	switch (i = (p->op < 0 || (flags & CONF_MINMAX) && (p->flags & CONF_MINMAX_DEF)) ? 0 : p->call)
 	{
 	case CONF_confstr:
 		call = "confstr";
@@ -948,6 +999,14 @@
 			listflags &= ~ASTCONF_system;
 		}
 	predef:
+		if (look->standard == CONF_AST)
+		{
+			if (streq(look->name, "VERSION"))
+			{
+				v = _AST_VERSION;
+				break;
+			}
+		}
 		if (!(listflags & ASTCONF_system))
 		{
 			if (flags & CONF_MINMAX)
@@ -978,7 +1037,9 @@
 			if ((p->flags & CONF_FEATURE) || !(p->flags & (CONF_LIMIT|CONF_MINMAX)))
 				flags &= ~(CONF_LIMIT_DEF|CONF_MINMAX_DEF);
 		}
-		else if (!(flags & CONF_PREFIXED))
+		else if (flags & CONF_PREFIXED)
+			flags &= ~(CONF_LIMIT_DEF|CONF_MINMAX_DEF);
+		else if (errno != EINVAL || !i)
 		{
 			if (!sp)
 			{
@@ -989,22 +1050,27 @@
 					else if (!(listflags & ASTCONF_system))
 						(*conferror)(&state, &state, 2, "%s: unknown name", p->name);
 				}
-				return (listflags & ASTCONF_error) ? (char*)0 : null;
+				goto bad;
+			}
+			else
+			{
+				flags &= ~(CONF_LIMIT_DEF|CONF_MINMAX_DEF);
+				flags |= CONF_ERROR;
 			}
-			flags &= ~(CONF_LIMIT_DEF|CONF_MINMAX_DEF);
-			flags |= CONF_ERROR;
 		}
-		else
-			flags &= ~(CONF_LIMIT_DEF|CONF_MINMAX_DEF);
 	}
 	errno = olderrno;
 	if ((listflags & ASTCONF_defined) && !(flags & (CONF_LIMIT_DEF|CONF_MINMAX_DEF)))
-		return null;
+		goto bad;
 	if ((drop = !sp) && !(sp = sfstropen()))
-		return null;
+		goto bad;
 	if (listflags & ASTCONF_table)
 	{
 		f = flg;
+		if (p->flags & CONF_DEFER_CALL)
+			*f++ = 'C';
+		if (p->flags & CONF_DEFER_MM)
+			*f++ = 'D';
 		if (p->flags & CONF_FEATURE)
 			*f++ = 'F';
 		if (p->flags & CONF_LIMIT)
@@ -1019,10 +1085,14 @@
 			*f++ = 'S';
 		if (p->flags & CONF_UNDERSCORE)
 			*f++ = 'U';
+		if (p->flags & CONF_NOUNDERSCORE)
+			*f++ = 'V';
+		if (p->flags & CONF_PREFIX_ONLY)
+			*f++ = 'W';
 		if (f == flg)
 			*f++ = 'X';
 		*f = 0;
-		sfprintf(sp, "%*s %*s %d %2s %4d %5s ", sizeof(p->name), p->name, sizeof(prefix[p->standard].name), prefix[p->standard].name, p->section, prefix[p->call + CONF_call].name, p->op, flg);
+		sfprintf(sp, "%*s %*s %d %2s %4d %6s ", sizeof(p->name), p->name, sizeof(prefix[p->standard].name), prefix[p->standard].name, p->section, prefix[p->call + CONF_call].name, p->op, flg);
 		if (p->flags & CONF_LIMIT_DEF)
 		{
 			if (p->limit.string)
@@ -1112,7 +1182,8 @@
 		sfclose(sp);
 		return call;
 	}
-	return null;
+ bad:
+	return (listflags & ASTCONF_error) ? (char*)0 : null;
 }
 
 /*
@@ -1128,7 +1199,7 @@
 	long		ops[2];
 
 #if DEBUG || DEBUG_astconf
-	error(-1, "astconf defer %s %s", _pth_getconf, operand);
+	error(-2, "astconf defer %s %s", _pth_