On 6/29/07, Glenn Fowler <gsf at research.att.com> wrote:
>
> the AT&T Software Technology ast 2007-06-28 source release
> has been posted to the download site
>         http://www.research.att.com/sw/download/
> the notes and changes link has details on the release
>
> this is a final source release (not beta) and includes the
> final release for ksh93s+
>
> thanks to all who contributed bug reports and test cases
>
> 2007-06-28 binary packages will be posted in two weeks
patch diff from 20070515 to 20070628 attached
-- 
      _        Felix Schulte
    _|_|_     mailto:felix.schulte at gmail.com
    (0 0)
ooO--(_)--Ooo
-------------- next part --------------
diff -r -N -u ksh93_2007_05_15/lib/package/ast-ksh.html 
ksh93_2007_06_28/lib/package/ast-ksh.html
--- ksh93_2007_05_15/lib/package/ast-ksh.html   2007-05-16 05:16:01.000000000 
+0200
+++ ksh93_2007_06_28/lib/package/ast-ksh.html   2007-06-29 07:09:07.000000000 
+0200
@@ -193,17 +193,31 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="ksh93 
changes">ksh93 changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
-07-05-15  --- Release ksh93s+  ---
+07-06-28  --- Release ksh93s+  ---
+07-06-25  In vi insert mode, ksh no longer emits a backspace character
+         before the carraige return when the newline is entered. 
+07-06-25  A bug in which pipefail would cause a command to return 0
+         when the pipeline was the last command and the failure happened
+         on a component other than the last has been fixed.
+07-06-25  A bug in the expansion of ${var/pattern/rep} when pattern or rep
+         contained a left parenthesis in single quotes has been fixed.
+07-06-18  The braces for a subscripted variable with ${var&#0091;sub&#0093;} 
are now
+         optional when inside &#0091;&#0091;...&#0093;&#0093;, ((...)) or as a 
subscript.
+07-05-28  A bug in brace expansion in which single and double quotes did
+          not treat the comma as a literal character has been fixed.
+07-05-24  The -p option of whence now disables -v.
+07-05-23  Several bug fixes in compound variables and arrays of arrays
+         have been made.
 07-05-15  A bug in which the %B format of printf was affected  by the
          locale has been fixed.
 07-05-14  A bug in which &nbsp;was not removed in the replacement pattern with
          ${var/pattern/rep} when it was not followed by &nbsp;or a digit has
          been fixed.
-07-05-10  A bug in which ksh -R file core dumped if no script was sepcifed
+07-05-10  A bug in which ksh -R file core dumped if no script was specified
          has been fixed.  it not displays an error message.
 07-05-07  Added additional Solaris signals to signal table.
 07-04-30  A bug in which a pipeline with command substitution inside a
-         function could cause a pipline that invokes this function to
+         function could cause a pipeline that invokes this function to
          hang when the pipefail option is on has been fixed.
 07-04-30  Added -q to whence.
 07-04-18  A small memory leak with each redirection of a non-builtin has
@@ -1666,6 +1680,7 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libast 
changes">libast changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
+07-05-21 tm/tmxfmt.c,tmxscan.c: %F =&gt; %L (TM_DEFAULT); %F =&gt; %Y-%m-%d
 07-05-15 sfio/sfvprintf.c: %h? and SFFMT_SHORT =&gt; raw bytes
 07-05-09 features/signal.c,features/siglist: use kill -l &amp; strsignal()
 07-04-25 misc/optctx.c: add for opt_info switching
@@ -3106,6 +3121,8 @@
 <P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libcmd 
changes">libcmd changes</A></H3></FONT></FONT></CENTER>
 <PRE>
 
+07-05-20 cmd.h: handle msvc's balk at if(0)0=0;
+07-05-20 cksum.c: #include &lt;modex.h&gt;
 07-05-11 cmd.h: add _CMD_CONTEXT_OK() to verify &gt;= 20070511 context
 07-05-09 fds.c: handle ipv6 sockets
 07-05-09 cmd.h: &lt;shbltin.h&gt; : cmdquit() =&gt; sh_checksig(context)
@@ -3396,7 +3413,7 @@
 <TR>
 <TD align=left></TD>
 <TD align=center></TD>
-<TD align=right>May 15, 2007</TD>
+<TD align=right>June 29, 2007</TD>
 </TR>
 </TABLE>
 <P>
diff -r -N -u ksh93_2007_05_15/lib/package/ast-ksh.README 
ksh93_2007_06_28/lib/package/ast-ksh.README
--- ksh93_2007_05_15/lib/package/ast-ksh.README 2007-05-16 05:16:00.000000000 
+0200
+++ ksh93_2007_06_28/lib/package/ast-ksh.README 2007-06-29 07:09:07.000000000 
+0200
@@ -92,17 +92,31 @@
 
 :::::::: ksh93 ::::::::
 
-07-05-15  --- Release ksh93s+  ---
+07-06-28  --- Release ksh93s+  ---
+07-06-25  In vi insert mode, ksh no longer emits a backspace character
+         before the carraige return when the newline is entered. 
+07-06-25  A bug in which pipefail would cause a command to return 0
+         when the pipeline was the last command and the failure happened
+         on a component other than the last has been fixed.
+07-06-25  A bug in the expansion of ${var/pattern/rep} when pattern or rep
+         contained a left parenthesis in single quotes has been fixed.
+07-06-18  The braces for a subscripted variable with ${var[sub]} are now
+         optional when inside [[...]], ((...)) or as a subscript.
+07-05-28  A bug in brace expansion in which single and double quotes did
+          not treat the comma as a literal character has been fixed.
+07-05-24  The -p option of whence now disables -v.
+07-05-23  Several bug fixes in compound variables and arrays of arrays
+         have been made.
 07-05-15  A bug in which the %B format of printf was affected  by the
          locale has been fixed.
 07-05-14  A bug in which \ was not removed in the replacement pattern with
          ${var/pattern/rep} when it was not followed by \ or a digit has
          been fixed.
-07-05-10  A bug in which ksh -R file core dumped if no script was sepcifed
+07-05-10  A bug in which ksh -R file core dumped if no script was specified
          has been fixed.  it not displays an error message.
 07-05-07  Added additional Solaris signals to signal table.
 07-04-30  A bug in which a pipeline with command substitution inside a
-         function could cause a pipline that invokes this function to
+         function could cause a pipeline that invokes this function to
          hang when the pipefail option is on has been fixed.
 07-04-30  Added -q to whence.
 07-04-18  A small memory leak with each redirection of a non-builtin has
@@ -1562,6 +1576,7 @@
 
 :::::::: libast ::::::::
 
+07-05-21 tm/tmxfmt.c,tmxscan.c: %F => %L (TM_DEFAULT); %F => %Y-%m-%d
 07-05-15 sfio/sfvprintf.c: %h? and SFFMT_SHORT => raw bytes
 07-05-09 features/signal.c,features/siglist: use kill -l & strsignal()
 07-04-25 misc/optctx.c: add for opt_info switching
@@ -2999,6 +3014,8 @@
 
 :::::::: libcmd ::::::::
 
+07-05-20 cmd.h: handle msvc's balk at if(0)0=0;
+07-05-20 cksum.c: #include <modex.h>
 07-05-11 cmd.h: add _CMD_CONTEXT_OK() to verify >= 20070511 context
 07-05-09 fds.c: handle ipv6 sockets
 07-05-09 cmd.h: <shbltin.h> : cmdquit() => sh_checksig(context)
diff -r -N -u ksh93_2007_05_15/lib/package/ast-ksh.ver 
ksh93_2007_06_28/lib/package/ast-ksh.ver
--- ksh93_2007_05_15/lib/package/ast-ksh.ver    2007-05-15 07:49:57.000000000 
+0200
+++ ksh93_2007_06_28/lib/package/ast-ksh.ver    2007-06-28 22:08:31.000000000 
+0200
@@ -1 +1 @@
-ast-ksh 2007-05-15 2007-05-15 1
+ast-ksh 2007-06-28 2007-06-28 1
diff -r -N -u ksh93_2007_05_15/lib/package/ksh.ver 
ksh93_2007_06_28/lib/package/ksh.ver
--- ksh93_2007_05_15/lib/package/ksh.ver        2007-03-29 19:07:07.000000000 
+0200
+++ ksh93_2007_06_28/lib/package/ksh.ver        2007-06-29 07:09:06.000000000 
+0200
@@ -1 +1 @@
-ksh 2007-03-28 2007-03-28 1
+ksh 2007-06-28 2007-06-28 1
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/bltins/whence.c 
ksh93_2007_06_28/src/cmd/ksh93/bltins/whence.c
--- ksh93_2007_05_15/src/cmd/ksh93/bltins/whence.c      2007-04-24 
22:12:48.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/bltins/whence.c      2007-05-24 
14:55:12.000000000 +0200
@@ -112,6 +112,7 @@
                break;
            case 'p':
                flags |= P_FLAG;
+               flags &= ~V_FLAG;
                break;
            case 'q':
                flags |= Q_FLAG;
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/data/builtins.c 
ksh93_2007_06_28/src/cmd/ksh93/data/builtins.c
--- ksh93_2007_05_15/src/cmd/ksh93/data/builtins.c      2007-05-15 
05:07:06.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/data/builtins.c      2007-05-24 
14:54:05.000000000 +0200
@@ -1802,7 +1802,7 @@
 "[a?Displays all uses for each \aname\a rather than the first.]"
 "[f?Do not check for functions.]"
 "[p?Do not check to see if \aname\a is a reserved word, a built-in, "
-       "an alias, or a function.]"
+       "an alias, or a function.  This turns off the \b-v\b option.]"
 "[q?Quiet mode. Returns 0 if all arguments are built-ins, functions, or are "
        "programs found on the path.]"
 "[v?For each name you specify, the shell displays a line that indicates "
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/data/lexstates.c 
ksh93_2007_06_28/src/cmd/ksh93/data/lexstates.c
--- ksh93_2007_05_15/src/cmd/ksh93/data/lexstates.c     2006-08-11 
21:00:24.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/data/lexstates.c     2007-05-24 
18:17:21.000000000 +0200
@@ -360,7 +360,7 @@
        0,      0,      0,      0,      0,      0,      0,      0,
        0,      0,      0,      0,      0,      0,      0,      0,
        0,      0,      S_QUOTE,0,      S_DOL,  0,      S_PAT,  S_LIT,
-       S_PAT,  S_PAT,  S_PAT,  0,      0,      0,      0,      S_SLASH,
+       S_PAT,  S_PAT,  S_PAT,  0,      S_COM,  0,      0,      S_SLASH,
        0,      S_DIG,  S_DIG,  S_DIG,  S_DIG,  S_DIG,  S_DIG,  S_DIG,
        S_DIG,  S_DIG,  S_COLON,0,      0,      S_EQ,   0,      S_PAT,
        0,      0,      0,      0,      0,      0,      0,      0,
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/edit/vi.c 
ksh93_2007_06_28/src/cmd/ksh93/edit/vi.c
--- ksh93_2007_05_15/src/cmd/ksh93/edit/vi.c    2007-01-08 18:25:48.000000000 
+0100
+++ ksh93_2007_06_28/src/cmd/ksh93/edit/vi.c    2007-06-26 04:52:48.000000000 
+0200
@@ -1472,6 +1472,7 @@
                        if( mode != SEARCH )
                                save_last(vp);
                        refresh(vp,INPUT);
+                       last_phys++;
                        return;
 
                case '\t':              /** command completion **/
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/include/argnod.h 
ksh93_2007_06_28/src/cmd/ksh93/include/argnod.h
--- ksh93_2007_05_15/src/cmd/ksh93/include/argnod.h     2006-07-19 
20:58:17.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/include/argnod.h     2007-06-18 
17:44:19.000000000 +0200
@@ -123,6 +123,7 @@
 #define ARG_OPTIMIZE   0x200   /* try to optimize */
 #define ARG_NOGLOB     0x400   /* no file name expansion */
 #define ARG_LET                0x800   /* processing let command arguments */
+#define ARG_ARRAYOK    0x1000  /* $x[sub] ==> ${x[sub]} */
 
 extern char            **sh_argbuild(int*,const struct comnod*,int);
 extern struct dolnod   *sh_argcreate(char*[]);
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/include/jobs.h 
ksh93_2007_06_28/src/cmd/ksh93/include/jobs.h
--- ksh93_2007_05_15/src/cmd/ksh93/include/jobs.h       2007-04-10 
23:07:19.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/include/jobs.h       2007-05-17 
23:47:17.000000000 +0200
@@ -64,6 +64,7 @@
        pid_t           p_fgrp;         /* process group when stopped */
        short           p_job;          /* job number of process */
        unsigned short  p_exit;         /* exit value or signal number */
+       unsigned short  p_exitmin;      /* minimum exit value for xargs */
        unsigned short  p_flag;         /* flags - see below */
        int             p_env;          /* subshell environment number */
 #ifdef JOBS
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/Makefile 
ksh93_2007_06_28/src/cmd/ksh93/Makefile
--- ksh93_2007_05_15/src/cmd/ksh93/Makefile     2007-05-15 19:05:05.000000000 
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/Makefile     2007-06-26 21:43:34.000000000 
+0200
@@ -104,7 +104,7 @@
 elif CC.HOSTTYPE != "sgi.mips*"
        LIBS_opt += +lsocket +lnsl
 end
-if CC.HOSTTYPE == "linux.sparc"
+if CC.HOSTTYPE == "linux.sparc*"
        /* the linux.sparc linker still has some problems */
        LIBS_opt += -ldll
 end
@@ -153,7 +153,7 @@
        trestore.c waitevent.c xec.c env.c $(DATAFILES) $(FILES_opt) \
        -lcmd -last -lm
 
-"sol*.i386" :NOOPTIMIZE: main.c
+"sol*.i386*" :NOOPTIMIZE: main.c
 "win32*" :NOOPTIMIZE: trestore.c
 
 if CC.HOSTTYPE == "win32*"
@@ -190,9 +190,9 @@
        shopen.mk shopen.c
 
 :: shtests \
-       alias.sh append.sh arith.sh arrays.sh attributes.sh basic.sh \
-       bracket.sh builtins.sh case.sh comvar.sh coprocess.sh exit.sh \
-       expand.sh functions.sh glob.sh grep.sh heredoc.sh io.sh \
+       alias.sh append.sh arith.sh arrays.sh arrays2.sh attributes.sh \
+       basic.sh bracket.sh builtins.sh case.sh comvar.sh coprocess.sh \
+       exit.sh expand.sh functions.sh glob.sh grep.sh heredoc.sh io.sh \
        nameref.sh options.sh path.sh quoting.sh quoting2.sh restricted.sh \
        return.sh select.sh substring.sh tilde.sh variables.sh 
 
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/Mamfile 
ksh93_2007_06_28/src/cmd/ksh93/Mamfile
--- ksh93_2007_05_15/src/cmd/ksh93/Mamfile      2007-05-16 05:16:02.000000000 
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/Mamfile      2007-06-29 07:09:09.000000000 
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-06-21
 setv INSTALLROOT ../../..
 setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
 setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/RELEASE 
ksh93_2007_06_28/src/cmd/ksh93/RELEASE
--- ksh93_2007_05_15/src/cmd/ksh93/RELEASE      2007-05-16 04:40:29.000000000 
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/RELEASE      2007-06-29 05:39:32.000000000 
+0200
@@ -1,14 +1,28 @@
-07-05-15  --- Release ksh93s+  ---
+07-06-28  --- Release ksh93s+  ---
+07-06-25  In vi insert mode, ksh no longer emits a backspace character
+         before the carraige return when the newline is entered. 
+07-06-25  A bug in which pipefail would cause a command to return 0
+         when the pipeline was the last command and the failure happened
+         on a component other than the last has been fixed.
+07-06-25  A bug in the expansion of ${var/pattern/rep} when pattern or rep
+         contained a left parenthesis in single quotes has been fixed.
+07-06-18  The braces for a subscripted variable with ${var[sub]} are now
+         optional when inside [[...]], ((...)) or as a subscript.
+07-05-28  A bug in brace expansion in which single and double quotes did
+          not treat the comma as a literal character has been fixed.
+07-05-24  The -p option of whence now disables -v.
+07-05-23  Several bug fixes in compound variables and arrays of arrays
+         have been made.
 07-05-15  A bug in which the %B format of printf was affected  by the
          locale has been fixed.
 07-05-14  A bug in which \ was not removed in the replacement pattern with
          ${var/pattern/rep} when it was not followed by \ or a digit has
          been fixed.
-07-05-10  A bug in which ksh -R file core dumped if no script was sepcifed
+07-05-10  A bug in which ksh -R file core dumped if no script was specified
          has been fixed.  it not displays an error message.
 07-05-07  Added additional Solaris signals to signal table.
 07-04-30  A bug in which a pipeline with command substitution inside a
-         function could cause a pipline that invokes this function to
+         function could cause a pipeline that invokes this function to
          hang when the pipefail option is on has been fixed.
 07-04-30  Added -q to whence.
 07-04-18  A small memory leak with each redirection of a non-builtin has
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/array.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/array.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/array.c   2007-03-15 21:58:02.000000000 
+0100
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/array.c   2007-05-24 01:19:53.000000000 
+0200
@@ -37,8 +37,7 @@
 #define array_clrbit(cp, n)    (cp[(n)/CHAR_BIT] &= ~(1<<(((n)&(CHAR_BIT-1)))))
 #define array_isbit(cp, n)     (cp[(n)/CHAR_BIT] & 1<<(((n)&(CHAR_BIT-1))))
 #define NV_CHILD               NV_EXPORT
-
-static char Empty[] = "";
+#define Empty                  ((char*)(e_sptbnl+3))
 
 struct index_array
 {
@@ -81,10 +80,12 @@
  *   but <= ARRAY_MAX) is returned.
  *
  */
-static int     arsize(register int maxi)
+static int     arsize(struct index_array *ap, register int maxi)
 {
-       register int i = roundof(maxi,ARRAY_INCR);
-       return (i>ARRAY_MAX?ARRAY_MAX:i);
+       if(ap && maxi < 2*ap->maxi)
+               maxi = 2*ap->maxi;
+       maxi = roundof(maxi,ARRAY_INCR);
+       return (maxi>ARRAY_MAX?ARRAY_MAX:maxi);
 }
 
 static struct index_array *array_grow(Namval_t*, struct index_array*,int);
@@ -323,6 +324,8 @@
                Namfun_t *nfp;
                if(nfp = nv_disc(np,(Namfun_t*)ap,NV_POP))
                        free((void*)nfp);
+               if(np->nvalue.cp==Empty)
+                       np->nvalue.cp = 0;
        }
 }
 
@@ -348,7 +351,7 @@
 {
        register struct index_array *ap;
        register int i=0;
-       register int newsize = arsize(maxi+1);
+       register int newsize = arsize(arp,maxi+1);
        if (maxi >= ARRAY_MAX)
                errormsg(SH_DICT,ERROR_exit(1),e_subscript, 
fmtbase((long)maxi,10,0));
        ap = new_of(struct index_array,(newsize-1)*sizeof(union 
Value*)+newsize/CHAR_BIT);
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/fault.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/fault.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/fault.c   2007-05-02 16:22:55.000000000 
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/fault.c   2007-05-29 02:30:35.000000000 
+0200
@@ -360,7 +360,12 @@
                int     sav_trapnote = sh.trapnote;
                sh.trapnote &= ~SH_SIGSET;
                if(sh.st.trap[SH_ERRTRAP])
-                       sh_trap(sh.st.trap[SH_ERRTRAP],0);
+               {
+                       trap = sh.st.trap[SH_ERRTRAP];
+                       sh.st.trap[SH_ERRTRAP] = 0;
+                       sh_trap(trap,0);
+                       sh.st.trap[SH_ERRTRAP] = trap;
+               }
                sh.trapnote = sav_trapnote;
                if(sh_isoption(SH_ERREXIT))
                {
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/io.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/io.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/io.c      2007-03-20 21:22:35.000000000 
+0100
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/io.c      2007-05-17 16:07:41.000000000 
+0200
@@ -458,6 +458,8 @@
        {
                Sfdisc_t *dp;
                sfset(iop,SF_MALLOC,1);
+               if(!(status&IOWRITE))
+                       sfset(iop,SF_IOCHECK,1);
                {
                        dp = newof(0,Sfdisc_t,1,0);
                        dp->exceptf = slowexcept;
@@ -1456,6 +1458,10 @@
                        return(0);
                n=1;
        }
+       else
+               n = 0;
+       if(sh.bltinfun && sh.bltindata.sigset)
+               return(-1);
        errno = 0;
        if(sh.trapnote&SH_SIGSET)
        {
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/jobs.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/jobs.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/jobs.c    2007-04-26 14:41:21.000000000 
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/jobs.c    2007-06-28 15:53:36.000000000 
+0200
@@ -229,6 +229,7 @@
                        pw = &dummy;
                        pw->p_exit = 0;
                        pw->p_pgrp = 0;
+                       pw->p_exitmin = 0;
                        if(job.toclear)
                                job_clear();
                        if(bck.count++ > sh.lim.child_max)
@@ -260,17 +261,14 @@
                                px->p_nxtjob = job.pwlist;
                                job.pwlist = px;
                        }
-                       pw->p_exit = WSTOPSIG(wstat);
                        pw->p_flag |= (P_NOTIFY|P_SIGNALLED|P_STOPPED);
+                       pw->p_exit = WSTOPSIG(wstat);
                        if(pw->p_pgrp && pw->p_pgrp==job.curpgid && 
sh_isstate(SH_STOPOK))
                                sh_fault(pw->p_exit); 
                        continue;
                }
                else if (WIFCONTINUED(wstat) && wcontinued)
-               {
                        pw->p_flag &= ~(P_NOTIFY|P_SIGNALLED|P_STOPPED);
-                       pw->p_exit = 0;
-               }
                else
 #endif /* SIGTSTP */
                {
@@ -303,7 +301,8 @@
                        else
                        {
                                pw->p_flag |= (P_DONE|P_NOTIFY);
-                               if(WEXITSTATUS(wstat) > pw->p_exit)
+                               pw->p_exit =  pw->p_exitmin;
+                               if(WEXITSTATUS(wstat) > pw->p_exitmin)
                                        pw->p_exit = WEXITSTATUS(wstat);
                        }
                        if(pw->p_pgrp==0)
@@ -1058,8 +1057,8 @@
        pw->p_env = sh.curenv;
        pw->p_pid = pid;
        pw->p_flag = P_EXITSAVE;
-       pw->p_exit = sh.xargexit;
-       sh.xargexit = 0;
+       pw->p_exitmin = sh.xargexit;
+       pw->p_exit = 0;
        if(sh_isstate(SH_MONITOR))
        {
                if(killpg(job.curpgid,0)<0 && errno==ESRCH)
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/lex.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/lex.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/lex.c     2007-03-21 19:24:38.000000000 
+0100
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/lex.c     2007-06-25 17:17:32.000000000 
+0200
@@ -686,7 +686,7 @@
                                mode = ST_NORM;
                                continue;
                        case S_LIT:
-                               if(oldmode()==ST_NONE)  /*  in ((...)) */
+                               if(oldmode()==ST_NONE && !lexd.noarg)   /*  in 
((...)) */
                                {
                                        if((c=fcpeek(0))==LPAREN || c==RPAREN 
|| c=='$' || c==LBRACE || c==RBRACE || c=='[' || c==']')
                                        {
@@ -804,7 +804,7 @@
                                if(shlex.kiafile)
                                        refvar(0);
 #endif /* SHOPT_KIA */
-                               if(lexd.warn && c==LBRACT)
+                               if(lexd.warn && c==LBRACT && !lex.intest && 
!lexd.arith && oldmode()!= ST_NESTED)
                                        
errormsg(SH_DICT,ERROR_warn(0),e_lexusebrace,shp->inlineno);
                                fcseek(-1);
                                mode = oldmode();
@@ -1153,6 +1153,11 @@
                        return(0);
        }
 breakloop:
+       if(lexd.nocopy)
+       {
+               lexd.balance = 0;
+               return(0);
+       }
        if(lexd.dolparen)
        {
                lexd.balance = 0;
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/macro.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/macro.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/macro.c   2007-05-14 17:08:10.000000000 
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/macro.c   2007-06-25 17:28:03.000000000 
+0200
@@ -43,6 +43,7 @@
 #include       "national.h"
 #include       "streval.h"
 
+
 #undef STR_GROUP
 #ifndef STR_GROUP
 #   define STR_GROUP   0
@@ -71,6 +72,7 @@
        char            arith;          /* set for ((...)) */
        char            let;            /* set when expanding let arguments */
        char            zeros;          /* strip leading zeros when set */
+       char            arrayok;        /* $x[] ok for arrays */
        void            *nvwalk;        /* for name space walking*/
 } Mac_t;
 
@@ -208,6 +210,7 @@
        mp->split = !(flag&ARG_ASSIGN);
        mp->assign = !mp->split;
        mp->pattern = mp->split && !(flag&ARG_NOGLOB) && 
!sh_isoption(SH_NOGLOB);
+       mp->arrayok = mp->arith || (flag&ARG_ARRAYOK);
        str = argp->argval;
        fcsopen(str);
        mp->fields = 0;
@@ -388,7 +391,7 @@
                arg->argchn.ap=0;
        if(!(sp=arg->argchn.cp))
        {
-               sh_macexpand(arg,NIL(struct argnod**),flags);
+               sh_macexpand(arg,NIL(struct argnod**),flags|ARG_ARRAYOK);
                sp = arg->argchn.cp;
                if(!(flags&ARG_OPTIMIZE) || !(arg->argflag&ARG_MAKE))
                        arg->argchn.cp = 0;
@@ -655,6 +658,17 @@
                                        --paren;
                        }
                        goto pattern;
+                   case S_COM:
+                       if(mp->pattern==4 && (mp->quote || mp->lit))
+                       {
+                               if(c)
+                               {
+                                       stakwrite(first,c);
+                                       first = fcseek(c);
+                               }
+                               stakputc(ESCAPE);
+                       }
+                       break;
                    case S_BRACE:
                        if(!(mp->quote || mp->lit))
                        {
@@ -880,13 +894,16 @@
        int xpattern = mp->pattern;
        int loc = staktell();
        int xarith = mp->arith;
+       int arrayok = mp->arrayok;
        mp->split = 0;
        mp->arith = 0;
        mp->pattern = flag?4:0;
+       mp->arrayok=1;
        copyto(mp,RBRACT,0);
        mp->pattern = xpattern;
        mp->split = split;
        mp->arith = xarith;
+       mp->arrayok = arrayok;
        return(loc);
 }
 
@@ -1035,7 +1052,7 @@
                        do
                                stakputc(c);
                        while(((c=fcget()),(c>0x7f||isaname(c)))||type && 
c=='.');
-                       while(c==LBRACT && type)
+                       while(c==LBRACT && (type||mp->arrayok))
                        {
                                sh.argaddr=0;
                                if((c=fcget(),isastchar(c)) && 
fcpeek(0)==RBRACT)
@@ -1107,7 +1124,7 @@
                ap = np?nv_arrayptr(np):0;
                if(type)
                {
-                       if(ap && isastchar(mode) && !(ap->nelem&ARRAY_SCAN))
+                       if(ap && (isastchar(mode)||type==M_TREE)  && 
!(ap->nelem&ARRAY_SCAN))
                                nv_putsub(np,NIL(char*),ARRAY_SCAN);
                        if(!isbracechar(c))
                                goto nosub;
@@ -1119,7 +1136,7 @@
                if((type==M_VNAME||type==M_SUBNAME)  && sh.argaddr && 
strcmp(nv_name(np),id))
                        sh.argaddr = 0;
                c = (type>M_BRACE && isastchar(mode));
-               if(np && (!c || !ap))
+               if(np && (type==M_TREE || !c || !ap))
                {
                        if(type==M_VNAME)
                        {
@@ -1129,11 +1146,7 @@
 #ifdef SHOPT_TYPEDEF
                        else if(type==M_TYPE)
                        {
-#if 0
                                Namval_t *nq = nv_type(np);
-#else
-                               Namval_t *nq = 0;
-#endif
                                type = M_BRACE;
                                if(nq)
                                        v = nv_name(nq);
@@ -1628,6 +1641,12 @@
                nv_close(np);
        return(1);
 nosub:
+       if(type==M_BRACE && sh_lexstates[ST_NORM][c]==S_BREAK)
+       {
+               fcseek(-1);
+               comsubst(mp,2);
+               return(1);
+       }
        if(type)
                mac_error(np);
        fcseek(-1);
@@ -1709,6 +1728,7 @@
                sh.inlineno = error_info.line+sh.st.firstline;
                t = (Shnode_t*)sh_parse(mp->shp, sp,SH_EOF|SH_NL);
                sh.inlineno = c;
+               type = 1;
        }
 #if KSHELL
        if(t)
@@ -1741,7 +1761,7 @@
                        sp = 
sfnew(NIL(Sfio_t*),(char*)malloc(IOBSIZE+1),IOBSIZE,fd,SF_READ|SF_MALLOC);
                }
                else
-                       sp = sh_subshell(t,sh_isstate(SH_ERREXIT),1);
+                       sp = sh_subshell(t,sh_isstate(SH_ERREXIT),type);
                fcrestore(&save);
        }
        else
@@ -2290,8 +2310,10 @@
        register int    c;
        while(c = *cp++)
        {
-               if(c==ESCAPE && (!rep || (*cp && !isadigit(*cp) && 
*cp!=ESCAPE)))
+               if(c==ESCAPE && (!rep || (*cp && strchr("&|()[]*?",*cp))))
+               {
                        c = *cp++;
+               }
                else if(!rep && c=='/')
                {
                        cp[-1] = 0;
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/name.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/name.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/name.c    2007-03-28 07:19:13.000000000 
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/name.c    2007-06-29 05:39:19.000000000 
+0200
@@ -34,6 +34,7 @@
 #include       "FEATURE/externs"
 #include       "streval.h"
 
+#define Empty  ((char*)(e_sptbnl+3))
 static char    *savesub = 0;
 
 #if !_lib_pathnative && _lib_uwin_path
@@ -60,9 +61,11 @@
 
 struct adata
 {
-       char    **argnam;
-       int     attsize;
-       char    *attval;
+       Shell_t         *sh;
+       Namval_t        *tp;
+       char            **argnam;
+       int             attsize;
+       char            *attval;
 };
 
 char           nv_local = 0;
@@ -192,7 +195,7 @@
                {
                        Namval_t *mp;
                        stakseek(0);
-                       if(*arg->argval==0 && arg->argchn.ap && 
!(arg->argflag&~(ARG_APPEND|ARG_QUOTED)))
+                       if(*arg->argval==0 && arg->argchn.ap && 
!(arg->argflag&~(ARG_APPEND|ARG_QUOTED|ARG_MESSAGE)))
                        {
                                int flag = (NV_VARNAME|NV_ARRAY|NV_ASSIGN);
                                struct fornod *fp=(struct 
fornod*)arg->argchn.ap;
@@ -213,7 +216,7 @@
                                        sh.prefix = prefix;
                                        if(np)
                                        {
-                                               if(!nv_isarray(np))
+                                               if(nv_isvtree(np) && 
!nv_isarray(np))
                                                {
                                                        stakputc('.');
                                                        stakputs(cp);
@@ -268,6 +271,18 @@
                                }
                                if(tp->tre.tretyp==TLST || !tp->com.comset || 
tp->com.comset->argval[0]!='[')
                                {
+                                       if(tp->tre.tretyp!=TLST && 
tp->com.comset && tp->com.comset->argval[0]==0 && tp->com.comset->argchn.ap)
+                                       {
+                                               if(prefix)
+                                                       cp = 
stakcopy(nv_name(np));
+                                               sh.prefix = cp;
+                                               
nv_setlist(tp->com.comset,flags);
+                                               sh.prefix = prefix;
+                                               
if(tp->com.comset->argval[1]!='[')
+                                                       nv_setvtree(np);
+                                               nv_close(np);
+                                               continue;
+                                       }
                                        if(*cp!='.' && *cp!='[' && 
strchr(cp,'['))
                                        {
                                                nv_close(np);
@@ -303,8 +318,10 @@
                        }
                        cp = arg->argval;
                }
+#if 0
                if(sh.prefix && *cp=='.' && cp[1]=='=')
                        cp++;
+#endif
                np = nv_open(cp,sh.var_tree,flags);
                if(!np->nvfun)
                {
@@ -502,7 +519,7 @@
                                        sh.argaddr = 0;
                                else if(flags&NV_NOREF)
                                {
-                                       if(c)
+                                       if(c && !(flags&NV_NOADD))
                                                nv_unref(np);
                                        return(np);
                                }
@@ -535,6 +552,8 @@
                                flags |= NV_NOREF;
                        }
                        sh.last_root = root;
+                       if(c=='.' && (cp[1]==0 ||  cp[1]=='=' || cp[1]=='+'))
+                               return(np);
                        do
                        {
                                if(!np)
@@ -570,8 +589,7 @@
                                        }
                                        else
                                                cp = sp;
-                                       if((c = *cp)=='.' || c=='[' || 
(n&ARRAY_FILL))
-
+                                       if((c = *cp)=='.' || (c=='[' && 
nv_isarray(np)) || (n&ARRAY_FILL))
                                        {
                                                int m = cp-sp;
                                                char *sub = m?nv_getsub(np):0;
@@ -611,14 +629,16 @@
                                        }
                                        else if(c==0 && mode && 
(n=nv_aindex(np))>0)
                                                
nv_putsub(np,(char*)0,n|ARRAY_FILL);
-                                       else if(n==0 && c==0)
+                                       else if(n==0 && (c==0 || (c=='[' && 
!nv_isarray(np))))
                                        {
                                                /* subscript must be 0*/
                                                cp[-1] = 0;
-                                               c = sh_arith(sp+1);
+                                               n = sh_arith(sp+1);
                                                cp[-1] = ']';
-                                               if(c)
+                                               if(n)
                                                        return(0);
+                                               if(c)
+                                                       sp = cp;
                                        }
                                        dp->last = cp;
                                        if(nv_isarray(np) && (c=='[' || c=='.' 
|| (flags&NV_ARRAY)))
@@ -628,8 +648,16 @@
                                                *sp = c;
                                                if(nq && nv_isnull(nq))
                                                        nq = 
nv_arraychild(np,nq,c);
-                                               if(!(np=nq))
-                                                       return(np);
+                                               if(nq)
+                                                       np = nq;
+                                               else if(memcmp(cp,"[0]",3))
+                                                       return(nq);
+                                               else
+                                               {
+                                                       /* ignore [0]  */
+                                                       dp->last = cp += 3;
+                                                       c = *cp;
+                                               }
                                        }
                                }
                                else if(nv_isarray(np))
@@ -771,10 +799,18 @@
                np = nv_search(name, funroot, c);
                *fname = 0;
        }
-       else if(*cp=='+' && cp[1]=='=')
+       else
        {
-               append=NV_APPEND;
-               cp++;
+               if(*cp=='.')
+               {
+                       append |= NV_NODISC;
+                       cp++;
+               }
+               if(*cp=='+' && cp[1]=='=')
+               {
+                       append |= NV_APPEND;
+                       cp++;
+               }
        }
        c = *cp;
 skip:
@@ -789,12 +825,14 @@
                }
                else
                {
-                       char *sub=0;
+                       char *sub=0, *prefix= sh.prefix;
+                       sh.prefix = 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;
+                       sh.prefix = prefix;
                }
                nv_onattr(np, flags&NV_ATTRIBUTES);
        }
@@ -845,7 +883,7 @@
        sh.argaddr = 0;
        if(sh.subshell && !nv_local)
                np = sh_assignok(np,1);
-       if(np->nvfun && !nv_isattr(np,NV_REF))
+       if(np->nvfun && !(flags&NV_NODISC) && !nv_isattr(np,NV_REF))
        {
                /* This function contains disc */
                if(!nv_local)
@@ -1327,6 +1365,8 @@
 {
        register int flag = np->nvflag;
        register struct adata *ap = (struct adata*)data;
+       ap->sh = &sh;
+       ap->tp = 0;
        if(!(flag&NV_EXPORT) || (flag&NV_FUNCT))
                return;
        flag &= 
(NV_RDONLY|NV_UTOL|NV_LTOU|NV_RJUST|NV_LJUST|NV_ZFILL|NV_INTEGER);
@@ -1354,6 +1394,8 @@
 {
        register char *value;
        register struct adata *ap = (struct adata*)data;
+       ap->sh = &sh;
+       ap->tp = 0;
        if(nv_isattr(np,NV_IMPORT))
        {
                if(np->nvenv)
@@ -1394,6 +1436,8 @@
        register int namec;
        register char *cp;
        struct adata data;
+       data.sh = &sh;
+       data.tp = 0;
        /* L_ARGNOD gets generated automatically as full path name of command */
        nv_offattr(L_ARGNOD,NV_EXPORT);
        data.attsize = 6;
@@ -1421,7 +1465,6 @@
        void    *scandata;
 };
 
-
 static int scanfilter(Dt_t *dict, void *arg, void *data)
 {
        register Namval_t *np = (Namval_t*)arg;
@@ -1430,7 +1473,7 @@
        NOT_USED(dict);
        if(sp->scanmask?(k&sp->scanmask)==sp->scanflags:(!sp->scanflags || 
(k&sp->scanflags)))
        {
-               if(!np->nvalue.cp && !nv_isattr(np,~NV_DEFAULT))
+               if(!np->nvalue.cp && !np->nvfun && !nv_isattr(np,~NV_DEFAULT))
                        return(0);
                if(sp->scanfn)
                {
@@ -1535,6 +1578,8 @@
        register Namval_t *np,*nq;
        for(np=(Namval_t*)dtfirst(root);np;np=nq)
        {
+               if(nv_isref(np))
+                       nv_unref(np);
                _nv_unset(np,flags);
                if(oroot && (nq=nv_search(nv_name(np),oroot,0)) && 
nv_isattr(nq,NV_EXPORT))
                        sh_envput(sh.env,nq);
@@ -1596,7 +1641,7 @@
                nv_local=0;
        }
        up = &np->nvalue;
-       if(up->cp)
+       if(up->cp && up->cp!=Empty)
        {
                if(!nv_isattr (np, NV_NOFREE))
                        free((void*)up->cp);
@@ -2156,7 +2201,7 @@
  */
 void nv_setref(register Namval_t *np, Dt_t *hp, int flags)
 {
-       register Namval_t *nq, *nr;
+       register Namval_t *nq, *nr=0;
        register char *ep,*cp;
        if(nv_isref(np))
                return;
@@ -2167,8 +2212,13 @@
        if((ep = lastdot(cp)) && nv_isattr(np,NV_MINIMAL))
                errormsg(SH_DICT,ERROR_exit(1),e_badref,nv_name(np));
        if(!hp)
+       {
                hp = sh.var_tree;
-       nr= nq = nv_open(cp, hp, flags|NV_NOREF);
+               if(!(nr = nq = nv_open(cp, hp, 
flags|NV_NOREF|NV_NOSCOPE|NV_NOADD|NV_NOFAIL)))
+                       hp = sh.var_base;
+       }
+       if(!nr)
+               nr= nq = nv_open(cp, hp, flags|NV_NOREF);
        while(nv_isref(nr))
        {
                sh.last_table = nv_reftable(nr);
@@ -2189,7 +2239,19 @@
 #if 0
                nv_endsubscript(nq,ep,NV_ADD);
 #endif
-               ep = nv_getsub(nq);
+               if(nv_isarray(nq))
+                       ep = nv_getsub(nq);
+               else
+               {
+                       int savtop = staktell();
+                       char *savptr = stakfreeze(0);
+                       stakputs(nv_name(nr));
+                       stakputs(ep-1);
+                       ep = stakfreeze(1);
+                       nq = nv_open(ep,hp,NV_ARRAY);
+                       stakset(savptr,savtop);
+                       ep = 0;
+               }
        }
        nv_unset(np);
        np->nvalue.nrp = newof(0,struct Namref,1,0);
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/nvdisc.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/nvdisc.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/nvdisc.c  2007-05-15 05:08:51.000000000 
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/nvdisc.c  2007-05-24 03:11:27.000000000 
+0200
@@ -1188,6 +1188,8 @@
                        return(tp->dict);
 #if 0
                np = nv_create(np,(const char*)0, NV_FIRST, (Namfun_t*)0);
+#else
+               break;
 #endif
        }
        return(sh.var_tree);
@@ -1239,12 +1241,18 @@
        return(0);
 }
 
+Namval_t *nv_type(Namval_t *np)
+{
+       return(0);
+}
+
 /*
  * This function turns variable <np>  to the type <tp>
  */
 int nv_settype(Namval_t* np, Namval_t *tp, int flags)
 {
        int isnull = nv_isnull(np);
+       int rdonly = nv_isattr(np,NV_RDONLY);
        char *val=0;
        if(isnull)
                flags &= ~NV_APPEND;
@@ -1256,6 +1264,8 @@
        }
        if(!nv_clone(tp,np,flags|NV_NOFREE))
                return(0);
+       if(!rdonly)
+               nv_offattr(np,NV_RDONLY);
        if(val)
        {
                nv_putval(np,val,NV_RDONLY);
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/nvtree.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/nvtree.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/nvtree.c  2007-05-14 22:35:54.000000000 
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/nvtree.c  2007-05-24 01:25:55.000000000 
+0200
@@ -31,6 +31,8 @@
 #include       "name.h"
 #include       "argnod.h"
 
+#define Empty  ((char*)(e_sptbnl+3))
+
 struct nvdir
 {
        Dt_t            *root;
@@ -399,10 +401,12 @@
                        if(fp = nv_stack(np,NIL(Namfun_t*)))
                                free((void*)fp);
                        np->nvfun = 0;
+                       return;
                }
-               return;
+               if(!np->nvalue.cp)
+                       return;
        }
-       if(nv_isnull(np))
+       if(nv_isnull(np) || np->nvalue.cp==Empty)
                return;
        if(special || nv_isarray(np))
        {
@@ -423,7 +427,9 @@
                return;
        if(special)
        {
+#if 0
                associative = 1;
+#endif
                sfnputc(wp->out,'\t',wp->indent);
        }
        else
@@ -440,6 +446,9 @@
                        sfnputc(wp->out,'\t',++wp->indent);
                }
        }
+       fp = np->nvfun;
+       if(*name=='.')
+               np->nvfun = 0;
        while(1)
        {
                char *fmtq,*ep;
@@ -470,6 +479,8 @@
                        break;
                sfnputc(wp->out,'\t',wp->indent);
        }
+       if(*name=='.')
+               np->nvfun = fp;
        if(isarray && !special)
        {
                sfnputc(wp->out,'\t',--wp->indent);
@@ -533,7 +544,7 @@
                                sfnputc(outfile,'\t',wp->indent);
                                nv_attribute(np,outfile,"typeset",1);
                                nv_close(np);
-                               sfputr(outfile,arg+m+(n?n+1:0),'=');
+                               sfputr(outfile,arg+m+(n?n:0),'=');
                                argv = genvalue(++argv,cp,cp-arg ,wp);
                                sfputc(outfile,'\n');
                        }
@@ -581,8 +592,9 @@
        char *subscript=0;
        void *dir;
        int n=0, noscope=(dlete&NV_NOSCOPE);
+       Namarr_t *arp = nv_arrayptr(np);
        stakputs(nv_name(np));
-       if(subscript = nv_getsub(np))
+       if(arp && !(arp->nelem&ARRAY_SCAN) && (subscript = nv_getsub(np)))
        {
                stakputc('[');
                stakputs(subscript);
@@ -641,8 +653,10 @@
        NOT_USED(fp);
        if(nv_isattr(np,NV_BINARY) &&  nv_isattr(np,NV_RAW))
                return(nv_getv(np,fp));
+#if 0
        if(nv_isattr(np,NV_ARRAY) && nv_arraychild(np,(Namval_t*)0,0)==np)
                return(nv_getv(np,fp));
+#endif
        return(walk_tree(np,0));
 }
 
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/parse.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/parse.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/parse.c   2006-11-29 15:32:12.000000000 
+0100
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/parse.c   2007-05-21 23:51:20.000000000 
+0200
@@ -298,6 +298,9 @@
            case LPAREN:
                t = sh_cmd(RPAREN,SH_NL|SH_EMPTY);
                break;
+           case LBRACE:
+               t = sh_cmd(RBRACE,SH_NL|SH_EMPTY);
+               break;
        }
        shlex.comsub = 0;
        if(!sp && (sp=fcfile()))
@@ -801,7 +804,18 @@
                        ap->argflag |= ARG_MESSAGE;
                        *settail = ap;
                        settail = &(ap->argnxt.ap);
-                       n = skipnl(0);
+                       while((n = skipnl(0))==0)
+                       {
+                               ap = (struct argnod*)stakseek(ARGVAL);
+                               ap->argflag= ARG_ASSIGN;
+                               sfprintf(stkstd,"[%d]=",index++);
+                               stakputs(shlex.arg->argval);
+                               ap = (struct argnod*)stakfreeze(1);
+                               ap->argnxt.ap = 0;
+                               ap->argflag = shlex.arg->argflag;
+                               *settail = ap;
+                               settail = &(ap->argnxt.ap);
+                       }
                }
        }
        else if(n)
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/subshell.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/subshell.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/subshell.c        2007-04-30 
17:29:04.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/subshell.c        2007-05-15 
23:38:02.000000000 +0200
@@ -367,7 +367,7 @@
        if(!shp->pwd)
                path_pwd(0);
        sp->bckpid = shp->bckpid;
-       if(!comsub || !sh_isoption(SH_SUBSHARE))
+       if(!comsub || (comsub==1 && !sh_isoption(SH_SUBSHARE)))
        {
                sp->shpwd = shp->pwd;
                sp->pwd = (shp->pwd?strdup(shp->pwd):0);
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/xec.c 
ksh93_2007_06_28/src/cmd/ksh93/sh/xec.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/xec.c     2007-05-02 23:52:12.000000000 
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/xec.c     2007-06-25 22:13:32.000000000 
+0200
@@ -1012,7 +1012,8 @@
                        int pipes[2];
                        no_fork = (execflg && !(type&(FAMP|FPOU)) &&
                                !sh.subshell && !sh.st.trapcom[0] && 
-                               !sh.st.trap[SH_ERRTRAP] && sh.fn_depth==0);
+                               !sh.st.trap[SH_ERRTRAP] && sh.fn_depth==0 &&
+                               !(pipejob && sh_isoption(SH_PIPEFAIL)));
                        if(sh.subshell)
                                sh_subtmpfile();
                        if(sh_isstate(SH_PROFILE) || sh.dot_depth)
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh.1 
ksh93_2007_06_28/src/cmd/ksh93/sh.1
--- ksh93_2007_05_15/src/cmd/ksh93/sh.1 2007-03-06 20:57:14.000000000 +0100
+++ ksh93_2007_06_28/src/cmd/ksh93/sh.1 2007-06-22 04:34:48.000000000 +0200
@@ -1107,8 +1107,10 @@
 .I parameter\^
 is followed by a letter, digit, or underscore
 that is not to be interpreted as part of its name,
-when the variable name contains a \fB\s+2.\s-2\fP,
-or when a variable is subscripted.
+when the variable name contains a \fB\s+2.\s-2\fP.
+The braces are also required when a variable is subscripted
+unless it is part of an Arithmetic Expression
+or a Conditional Expression.
 If
 .I parameter\^
 is one or more digits then it is a positional parameter.
@@ -6375,7 +6377,7 @@
 to fail or zero of no command has failed.
 .TP 8
 .B showme
-When enabled, simple commands or pipelines preceded by a a semicolon
+When enabled, simple commands or pipelines preceded by a semicolon
 .RB ( ; )
 will be displayed as if the
 .B xtrace
@@ -7086,6 +7088,11 @@
 .I name\^
 even if name is an alias, a function, or a reserved word.
 The
+.B \-p
+option turns off the
+.B \-v
+option.
+The
 .B \-a
 option
 is similar to the
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/arrays2.sh 
ksh93_2007_06_28/src/cmd/ksh93/tests/arrays2.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/arrays2.sh     1970-01-01 
01:00:00.000000000 +0100
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/arrays2.sh     2007-05-23 
16:37:02.000000000 +0200
@@ -0,0 +1,124 @@
+########################################################################
+#                                                                      #
+#               This software is part of the ast package               #
+#           Copyright (c) 1982-2007 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                            #
+#                                                                      #
+#                  David Korn <dgk at research.att.com>                   #
+#                                                                      #
+########################################################################
+function err_exit
+{
+       print -u2 -n "\t"
+       print -u2 -r ${Command}[$1]: "${@:2}"
+       let Errors+=1
+}
+alias err_exit='err_exit $LINENO'
+
+Command=${0##*/}
+integer Errors=0
+for    ((i=0; i < 4; i++ ))
+do     for     ((j=0; j < 5; j++ ))
+       do      a[i][j]=$i$j
+       done
+done
+for    ((i=0; i < 4; i++ ))
+do     for     ((j=0; j < 5; j++ ))
+       do      [[ ${a[i][j]} == "$i$j" ]] || err_exit "\${a[$i][$j]} != $i$j"
+       done
+done
+for    ((i=0; i < 4; i++ ))
+do     j=0;for k in ${a[...@]}
+       do      [[ $k == "$i$j" ]] || err_exit "\${a[...@]} != $i$j"
+               (( j++ ))
+       done
+done
+unset a
+a=(
+       ( 00 01 02 03 04 )
+       ( 10 11 12 13 14 15)
+       ( 20 21 22 23 24 )
+       ( 30 31 32 33 34 )
+)
+
+function check
+{
+       nameref a=$1
+       nameref b=a[2]
+       typeset c=$1
+       integer i j
+       for     ((i=0; i < 4; i++ ))
+       do      for     ((j=0; j < 5; j++ ))
+               do      [[ ${a[$i][$j]} == "$i$j" ]] || err_exit 
"\${$c[$i][$j]} != $i$j"
+               done
+       done
+       (( ${...@]} == 4 )) || err_exit "\${#...@]} not 4"
+       (( ${#a[...@]} == 5 )) || err_exit "\${#$c[...@]} not 5"
+       (( ${#a[...@]} == 6 )) || err_exit "\${#$c[...@]} not 6"
+       set -s -- ${...@]}
+       [[ $...@} == '0 1 2 3' ]] || err_exit "\${!...@]} not 0 1 2 3"
+       set -s -- ${!a[...@]}
+       [[ $...@} == '0 1 2 3 4' ]] || err_exit "\${!$c[...@]} not 0 1 2 3 4"
+       set -s -- ${!a[...@]}
+       [[ $...@} == '0 1 2 3 4 5' ]] || err_exit "\${!$c[...@]} not 0 1 2 3 4 
5"
+       [[ $a == 00 ]] || err_exit  "\$$c is not 00"
+       [[ ${a[0]} == 00 ]] || err_exit  "\${$a[0]} is not 00"
+       [[ ${a[0][0]} == 00 ]] || err_exit  "${a[0][0]} is not 00"
+       [[ ${a[0][0][0]} == 00 ]] || err_exit  "\${$c[0][0][0]} is not 00"
+       [[ ${a[0][0][1]} == '' ]] || err_exit  "\${$c[0][0][1]} is not empty"
+       [[ ${b[3]} == 23 ]] || err_exit "${!b}[3] not = 23"
+}
+
+check a
+
+exit
+unset a
+typeset -A a
+for    ((i=0; i < 4; i++ ))
+do     for     ((j=0; j < 5; j++ ))
+       do      a[$i][j]=$i$j
+       done
+done
+for    ((i=0; i < 4; i++ ))
+do     for     ((j=0; j < 5; j++ ))
+       do      [[ ${a[$i][j]} == "$i$j" ]] || err_exit "\${a[$i][$j]} == $i$j"
+       done
+done
+a[1][5]=15
+b=(
+       [0]=( 00 01 02 03 04 )
+       [1]=( 10 11 12 13 14 15)
+       [2]=( 20 21 22 23 24 )
+       [3]=( 30 31 32 33 34 )
+)
+check b
+[[ ${a[...@]} == "${b[...@]}" ]] || err_exit "a[1] not equal to b[1]"
+c=(
+       [0]=( [0]=00 [1]=01 [2]=02 [3]=03 [4]=04 )
+       [1]=( [0]=10 [1]=11 [2]=12 [3]=13 [4]=14 [5]=15)
+       [2]=( [0]=20 [1]=21 [2]=22 [3]=23 [4]=24 )
+       [3]=( [0]=30 [1]=31 [2]=32 [3]=33 [4]=34 )
+)
+check c
+typeset -A d
+d[0]=( [0]=00 [1]=01 [2]=02 [3]=03 [4]=04 )
+d[1]=( [0]=10 [1]=11 [2]=12 [3]=13 [4]=14 [5]=15)
+d[2]=( [0]=20 [1]=21 [2]=22 [3]=23 [4]=24 )
+d[3]=( [0]=30 [1]=31 [2]=32 [3]=33 [4]=34 )
+check d
+unset a b c d
+[[ ${a-set} ]] || err_exit "a is set after unset"
+[[ ${b-set} ]] || err_exit "b is set after unset"
+[[ ${c-set} ]] || err_exit "c is set after unset"
+[[ ${d-set} ]] || err_exit "c is set after unset"
+exit $((Errors))
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/arrays.sh 
ksh93_2007_06_28/src/cmd/ksh93/tests/arrays.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/arrays.sh      2007-01-04 
02:59:14.000000000 +0100
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/arrays.sh      2007-06-18 
19:28:47.000000000 +0200
@@ -378,4 +378,19 @@
 unset bar
 : ${_foo[bar=4]}
 (( bar == 4 )) || err_exit 'subscript of unset variable not evaluated'
+unset foo bar
+foo[5]=4
+bar[4]=3
+bar[0]=foo
+foo[0]=bam
+foo[4]=5
+[[ ${bar[${foo[5]}]} == 3 ]] || err_exit  'array subscript cannot be an array 
instance'
+[[ $bar[4] == 3 ]] || err_exit '$bar[x] != ${bar[x]} inside [[ ]]'
+(( $bar[4] == 3  )) || err_exit '$bar[x] != ${bar[x]} inside (( ))'
+[[ $bar[$foo[5]] == 3 ]]  || err_exit '$bar[foo[x]] != ${bar[foo[x]]} inside 
[[ ]]'
+(( $bar[$foo[5]] == 3  )) || err_exit '$bar[foo[x]] != ${bar[foo[x]]} inside 
(( ))'
+x=$bar[4]
+[[ $x == 4 ]] && err_exit '$bar[4] should not be an array in an assignment'
+x=${bar[$foo[5]]}
+(( $x == 3 )) || err_exit '${bar[$foo[sub]]} not working'
 exit $((Errors))
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/expand.sh 
ksh93_2007_06_28/src/cmd/ksh93/tests/expand.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/expand.sh      2006-08-23 
08:37:01.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/expand.sh      2007-05-29 
02:54:33.000000000 +0200
@@ -37,6 +37,8 @@
        'f{d,e,f}g'                             'fdg feg ffg' \
        '{l,n,m}xyz'                            'lxyz nxyz mxyz' \
        '{abc\,def}'                            '{abc,def}' \
+       '{"abc,def"}'                           '{abc,def}' \
+       "{'abc,def'}"                           '{abc,def}' \
        '{abc}'                                 '{abc}' \
        '\{a,b,c,d,e}'                          '{a,b,c,d,e}' \
        '{x,y,\{a,b,c}}'                        'x} y} {a} b} c}' \
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/functions.sh 
ksh93_2007_06_28/src/cmd/ksh93/tests/functions.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/functions.sh   2006-11-29 
15:40:15.000000000 +0100
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/functions.sh   2007-05-29 
02:57:19.000000000 +0200
@@ -755,4 +755,19 @@
        done
 }
 [[ $(foo 'NUMBERED RECORDSIZE') == ok ]] || err_exit 'optimization error with 
undefined variable'
+unset x
+x=$(
+       set -e
+       integer count=0
+       function err_f
+       {
+               if      ((count++==3))  
+               then    print failed
+               else    false
+               fi
+       }
+       trap 'err_f' ERR
+       false
+)
+[[ $x == failed ]] && err_exit 'ERR trap executed multiple times'
 exit $((Errors))
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/options.sh 
ksh93_2007_06_28/src/cmd/ksh93/tests/options.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/options.sh     2007-05-11 
22:42:25.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/options.sh     2007-06-25 
22:19:56.000000000 +0200
@@ -310,6 +310,7 @@
 false | true | true    && err_exit 'pipe with first not failing with pipefail'
 true | false | true    && err_exit 'pipe middle not failing with pipefail'
 true | true | false    && err_exit 'pipe last not failing with pipefail'
+$SHELL -c 'set -o pipefail; false | /bin/true;' && err_exit 'pipefail not 
returning failure with sh -c'
 $SHELL -c '[[ $- == *c* ]]' || err_exit  'option c not in $-'
 trap 'rm -f /tmp/.profile' EXIT
 > /tmp/.profile
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/restricted.sh 
ksh93_2007_06_28/src/cmd/ksh93/tests/restricted.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/restricted.sh  2007-03-06 
18:28:39.000000000 +0100
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/restricted.sh  2007-06-26 
09:01:51.000000000 +0200
@@ -72,7 +72,6 @@
 #! $SHELL
 print hello
 !
-cp script /tmp/dgk
 check_restricted 'script;:' ||  err_exit 'script with #! pathname should not 
run in restricted mode'
 check_restricted 'script' ||  err_exit 'script with #! pathname should not run 
in restricted mode even if last command in script'
 exit $((Errors))
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/substring.sh 
ksh93_2007_06_28/src/cmd/ksh93/tests/substring.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/substring.sh   2007-05-14 
16:55:20.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/substring.sh   2007-06-25 
17:14:35.000000000 +0200
@@ -170,6 +170,17 @@
 if     [[ ${xx//%28/abc\)} != 'abc)text%29' ]]
 then    err_exit '${xx//%28/abc\)} not working'
 fi
+xx='a:b'
+str='(){}[]*?|&^...@l'
+for ((i=0 ; i < ${#str}; i++))
+do      [[ $(eval print -r -- \${xx//:/\\${str:i:1}}) == "a${str:i:1}b" ]] || 
err_exit "substitution of \\${str:i:1}} failed"
+        [[ $(eval print -rn -- \${xx//:/\'${str:i:1}\'}) == "a${str:i:1}b" ]] 
|| err_exit "substitution of '${str:i:1}' failed"
+        [[ $(eval print -r -- \${xx//:/\"${str:i:1}\"}) == "a${str:i:1}b" ]] 
|| err_exit "substitution of \"${str:i:1}\" failed"
+done
+[[ ${xx//:/\\n} == 'a\nb' ]]  || err_exit "substituion of \\\\n failed"
+[[ ${xx//:/'\n'} == 'a\nb' ]] || err_exit "substituion of '\\n' failed"
+[[ ${xx//:/"\n"} ==  'a\nb' ]] || err_exit "substituion of \"\\n\" failed"
+[[ ${xx//:/$'\n'} ==  $'a\nb' ]] || err_exit "substituion of \$'\\n' failed"
 unset foo
 foo=one/two/three
 if     [[ ${foo//'/'/_} != one_two_three ]]
@@ -274,6 +285,10 @@
 a='\[abc @(*) def\]'
 b='[abc 123 def]'
 [[ ${b//$a/\1} == 123 ]] || err_exit "\${var/pattern} not working with \[ in 
pattern"
+unset foo
+foo='(win32.i386) '
+[[ ${foo/'('/'(x11-'} == '(x11-win32.i386) ' ]] || err_exit "\${var/pattern} 
not working with ' in pattern" 
+$SHELL -c $'v=\'$(hello)\'; [[ ${v//\'$(\'/-I\'$(\'} == -I"$v" ]]' 2> 
/dev/null || err_exit "\${var/pattern} not working with \$( as pattern"
 unset X
 $SHELL -c '[[ ! $...@]:0:300} ]]' 2> /dev/null || err_exit '$...@]:0:300} with 
X undefined fails'
 $SHELL -c '[[ ${@:0:300} == "$0" ]]' 2> /dev/null || err_exit '${@:0:300} with 
no arguments fails'
diff -r -N -u ksh93_2007_05_15/src/lib/libast/features/fs 
ksh93_2007_06_28/src/lib/libast/features/fs
--- ksh93_2007_05_15/src/lib/libast/features/fs 2006-09-21 06:41:53.000000000 
+0200
+++ ksh93_2007_06_28/src/lib/libast/features/fs 2007-05-24 17:28:16.000000000 
+0200
@@ -54,6 +54,7 @@
 }end
 
 header sys/stat.h
+header sys/mkdev.h
 
 extern chmod           int     (const char*, mode_t)
 extern fstat           int     (int, struct stat*)
diff -r -N -u ksh93_2007_05_15/src/lib/libast/Mamfile 
ksh93_2007_06_28/src/lib/libast/Mamfile
--- ksh93_2007_05_15/src/lib/libast/Mamfile     2007-05-16 05:16:04.000000000 
+0200
+++ ksh93_2007_06_28/src/lib/libast/Mamfile     2007-06-29 07:09:12.000000000 
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-06-21
 setv INSTALLROOT ../../..
 setv PACKAGEROOT ../../../../..
 setv AR ar
diff -r -N -u ksh93_2007_05_15/src/lib/libast/RELEASE 
ksh93_2007_06_28/src/lib/libast/RELEASE
--- ksh93_2007_05_15/src/lib/libast/RELEASE     2007-05-16 02:08:01.000000000 
+0200
+++ ksh93_2007_06_28/src/lib/libast/RELEASE     2007-05-21 19:30:43.000000000 
+0200
@@ -1,3 +1,4 @@
+07-05-21 tm/tmxfmt.c,tmxscan.c: %F => %L (TM_DEFAULT); %F => %Y-%m-%d
 07-05-15 sfio/sfvprintf.c: %h? and SFFMT_SHORT => raw bytes
 07-05-09 features/signal.c,features/siglist: use kill -l & strsignal()
 07-04-25 misc/optctx.c: add for opt_info switching
diff -r -N -u ksh93_2007_05_15/src/lib/libast/tm/tmxfmt.c 
ksh93_2007_06_28/src/lib/libast/tm/tmxfmt.c
--- ksh93_2007_05_15/src/lib/libast/tm/tmxfmt.c 2007-01-17 21:36:13.000000000 
+0100
+++ ksh93_2007_06_28/src/lib/libast/tm/tmxfmt.c 2007-05-21 19:27:32.000000000 
+0200
@@ -242,9 +242,8 @@
                case 'o':       /* OBSOLETE */
                        p = tm_info.deformat;
                        goto push;
-               case 'F':       /* TM_DEFAULT */
-               case 'O':       /* OBSOLETE */
-                       p = tm_info.format[TM_DEFAULT];
+               case 'F':       /* ISO 8601:2000 standard date format */
+                       p = "%Y-%m-%d";
                        goto push;
                case 'g':       /* %V 2 digit year */
                case 'G':       /* %V 4 digit year */
@@ -303,6 +302,10 @@
                        }
                        p = tm_info.format[TM_RECENT];
                        goto push;
+               case 'L':       /* TM_DEFAULT */
+               case 'O':       /* OBSOLETE */
+                       p = tm_info.format[TM_DEFAULT];
+                       goto push;
                case 'm':       /* month number */
                        cp = number(cp, ep, (long)(tp->tm_mon + 1), 2, width, 
pad);
                        continue;
diff -r -N -u ksh93_2007_05_15/src/lib/libast/tm/tmxscan.c 
ksh93_2007_06_28/src/lib/libast/tm/tmxscan.c
--- ksh93_2007_05_15/src/lib/libast/tm/tmxscan.c        2007-03-11 
12:43:11.000000000 +0100
+++ ksh93_2007_06_28/src/lib/libast/tm/tmxscan.c        2007-05-21 
19:30:12.000000000 +0200
@@ -262,6 +262,9 @@
                                        goto more;
                                }
                                continue;
+                       case 'F':
+                               p = "%Y-%m-%d";
+                               break;
                        case 'H':
                        case 'k':
                                NUMBER(2, 0, 23);
diff -r -N -u ksh93_2007_05_15/src/lib/libcmd/cksum.c 
ksh93_2007_06_28/src/lib/libcmd/cksum.c
--- ksh93_2007_05_15/src/lib/libcmd/cksum.c     2007-05-08 23:13:36.000000000 
+0200
+++ ksh93_2007_06_28/src/lib/libcmd/cksum.c     2007-05-20 20:57:02.000000000 
+0200
@@ -27,7 +27,7 @@
  */
 
 static const char usage[] =
-"[-?\n@(#)$Id: sum (AT&T Research) 2007-02-07 $\n]"
+"[-?\n@(#)$Id: sum (AT&T Research) 2007-05-20 $\n]"
 USAGE_LICENSE
 "[+NAME?cksum,md5sum,sum - print file checksum and block count]"
 "[+DESCRIPTION?\bsum\b lists the checksum, and for most methods the block"
@@ -106,6 +106,7 @@
 #include <cmd.h>
 #include <sum.h>
 #include <ls.h>
+#include <modex.h>
 #include <fts.h>
 #include <error.h>
 
diff -r -N -u ksh93_2007_05_15/src/lib/libcmd/cmd.h 
ksh93_2007_06_28/src/lib/libcmd/cmd.h
--- ksh93_2007_05_15/src/lib/libcmd/cmd.h       2007-05-11 21:32:56.000000000 
+0200
+++ ksh93_2007_06_28/src/lib/libcmd/cmd.h       2007-05-20 20:57:40.000000000 
+0200
@@ -141,7 +141,11 @@
 
 #define _CMD_CONTEXT_OK(p)     
(((Shbltin_t*)(p))->version>=20070511&&((Shbltin_t*)(p))->version<20350101)
 #undef cmdinit
+#ifdef _MSC_VER
+#define cmdinit(a,b,c,d,e)     do{if(_cmd_init(a,b,c,d,e))return -1;}while(0)
+#else
 #define cmdinit(a,b,c,d,e)     
do{if((c)&&!_CMD_CONTEXT_OK(c))c=0;if(_cmd_init(a,b,c,d,e))return -1;}while(0)
+#endif
 
 #if _BLD_cmd && defined(__EXPORT__)
 #define extern                 extern __EXPORT__
diff -r -N -u ksh93_2007_05_15/src/lib/libcmd/date.c 
ksh93_2007_06_28/src/lib/libcmd/date.c
--- ksh93_2007_05_15/src/lib/libcmd/date.c      2007-05-09 06:07:11.000000000 
+0200
+++ ksh93_2007_06_28/src/lib/libcmd/date.c      2007-05-21 19:32:32.000000000 
+0200
@@ -27,7 +27,7 @@
  */
 
 static const char usage[] =
-"[-?\n@(#)$Id: date (AT&T Research) 2007-03-28 $\n]"
+"[-?\n@(#)$Id: date (AT&T Research) 2007-05-21 $\n]"
 USAGE_LICENSE
 "[+NAME?date - set/list/convert dates]"
 "[+DESCRIPTION?\bdate\b sets the current date and time (with appropriate"
@@ -96,7 +96,7 @@
 "              [+e?blank padded day of month number]"
 "              [+E?unpadded day of month number]"
 "              [+f?locale default override date format]"
-"              [+F?locale default date format]"
+"              [+F?%ISO 8601:2000 standard date format; equivalent to Y-%m-%d]"
 "              [+g?\bls\b(1) \b-l\b recent date with \ahh:mm\a]"
 "              [+G?\bls\b(1) \b-l\b distant date with \ayyyy\a]"
 "              [+h?abbreviated month name]"
@@ -108,6 +108,7 @@
 "              [+k?\bdate\b(1) style date]"
 "              [+K?all numeric date; equivalent to \b%Y-%m-%d+%H:%M:%S\b]"
 "              [+l?\bls\b(1) \b-l\b date; equivalent to \b%Q/%g/%G/\b]"
+"              [+L?locale default date format]"
 "              [+m?month number]"
 "              [+M?minutes]"
 "              [+n?newline character]"
diff -r -N -u ksh93_2007_05_15/src/lib/libcmd/Mamfile 
ksh93_2007_06_28/src/lib/libcmd/Mamfile
--- ksh93_2007_05_15/src/lib/libcmd/Mamfile     2007-05-16 05:16:05.000000000 
+0200
+++ ksh93_2007_06_28/src/lib/libcmd/Mamfile     2007-06-29 07:09:13.000000000 
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-06-21
 setv INSTALLROOT ../../..
 setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
 setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
@@ -182,6 +182,13 @@
 prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
 done ${PACKAGE_ast_INCLUDE}/error.h
 prev ${PACKAGE_ast_INCLUDE}/fts.h implicit
+make ${PACKAGE_ast_INCLUDE}/modex.h implicit
+make ${PACKAGE_ast_INCLUDE}/modecanon.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/modecanon.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/ast_fs.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/modex.h
 prev ${PACKAGE_ast_INCLUDE}/ls.h implicit
 make ${PACKAGE_ast_INCLUDE}/sum.h implicit
 prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
diff -r -N -u ksh93_2007_05_15/src/lib/libcmd/RELEASE 
ksh93_2007_06_28/src/lib/libcmd/RELEASE
--- ksh93_2007_05_15/src/lib/libcmd/RELEASE     2007-05-11 21:32:32.000000000 
+0200
+++ ksh93_2007_06_28/src/lib/libcmd/RELEASE     2007-05-20 20:58:47.000000000 
+0200
@@ -1,3 +1,5 @@
+07-05-20 cmd.h: handle msvc's balk at if(0)0=0;
+07-05-20 cksum.c: #include <modex.h>
 07-05-11 cmd.h: add _CMD_CONTEXT_OK() to verify >= 20070511 context
 07-05-09 fds.c: handle ipv6 sockets
 07-05-09 cmd.h: <shbltin.h> : cmdquit() => sh_checksig(context)
diff -r -N -u ksh93_2007_05_15/src/lib/libdll/Mamfile 
ksh93_2007_06_28/src/lib/libdll/Mamfile
--- ksh93_2007_05_15/src/lib/libdll/Mamfile     2007-04-20 21:57:17.000000000 
+0200
+++ ksh93_2007_06_28/src/lib/libdll/Mamfile     2007-06-29 07:09:14.000000000 
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-06-21
 setv INSTALLROOT ../../..
 setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
 setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
diff -r -N -u ksh93_2007_05_15/src/lib/libsum/Mamfile 
ksh93_2007_06_28/src/lib/libsum/Mamfile
--- ksh93_2007_05_15/src/lib/libsum/Mamfile     2007-04-20 21:57:19.000000000 
+0200
+++ ksh93_2007_06_28/src/lib/libsum/Mamfile     2007-06-29 07:09:14.000000000 
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-06-21
 setv INSTALLROOT ../../..
 setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
 setv PACKAGE_ast_LIB ${INSTALLROOT}/lib

Reply via email to