xref: /titanic_44/usr/src/lib/libshell/common/RELEASE88 (revision da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968)
1*da2e3ebdSchinThis is a list of changes that have been made since the 11/16/88 version
2*da2e3ebdSchinof ksh.
3*da2e3ebdSchin
4*da2e3ebdSchin1.  New features in 12/28/93
5*da2e3ebdSchin    a.	Associative arrays.  The new version of ksh supports both
6*da2e3ebdSchin        associate arrays and the older indexed arrays with the same
7*da2e3ebdSchin	array syntax.  A new -A option of typeset is used to declare
8*da2e3ebdSchin	an array to be associative.  As with indexed arrays, $name is
9*da2e3ebdSchin	equivalent to ${name[0]}.  The prefix operator ! was added
10*da2e3ebdSchin	to the parameter expansion syntax to expand to the list of
11*da2e3ebdSchin	indices.  For example, ${!name[@]} expands to the list of array
12*da2e3ebdSchin	indices for variable name.
13*da2e3ebdSchin
14*da2e3ebdSchin    b.	Several additions have been made to shell arithmetic:
15*da2e3ebdSchin	1.  The shell now performs floating point arithmetic.  The
16*da2e3ebdSchin	    typeset options -F and -E have been added for floating
17*da2e3ebdSchin	    point and scientific notation respectively.
18*da2e3ebdSchin	2.  The prefix and postfix ++ and -- operators.
19*da2e3ebdSchin	3.  The comma and ?: operators.
20*da2e3ebdSchin	4.  The math library functions.
21*da2e3ebdSchin	5.  An arithmetic for statement of the form
22*da2e3ebdSchin		for ((expr1; expr2; expr3))
23*da2e3ebdSchin		do	...
24*da2e3ebdSchin		done
25*da2e3ebdSchin	6.  Integer arithmetic extended up to base 64.
26*da2e3ebdSchin
27*da2e3ebdSchin    c.  Some additions to the macro expansion syntax have been made
28*da2e3ebdSchin	to specify substrings and sub-arrays:
29*da2e3ebdSchin	1.  ${name:expr} expands to the substring of ${name} starting at
30*da2e3ebdSchin	    the character position defined by arithmetic expression expr.
31*da2e3ebdSchin	2.  ${name:expr1:expr2} expands to the substring of ${name} starting
32*da2e3ebdSchin	    at expr1 and consisting of at most expr2 characters.
33*da2e3ebdSchin	3.  ${name[@]:expr} expands to the values of ${name[@]} starting at
34*da2e3ebdSchin	    the element defined by arithmetic expression expr.
35*da2e3ebdSchin	4.  ${name[@]:expr1:expr2} expands to at most expr2 values of
36*da2e3ebdSchin	    ${name} starting at expr1.
37*da2e3ebdSchin	5.  ${@:expr} expands the positional parameters starting at expr.
38*da2e3ebdSchin	6.  ${@:expr1:expr2} expands to at most expr2 positional parameters
39*da2e3ebdSchin	    starting at expr1.
40*da2e3ebdSchin	7.  ${!name} expands to the name of the variable named by name.
41*da2e3ebdSchin	    It will expand to name unless name is reference variable.
42*da2e3ebdSchin	8.  ${!name[sub]} expands to the name of the subscript of the
43*da2e3ebdSchin	    given variable.  If sub is @ or * the list of subscripts
44*da2e3ebdSchin	    is generated.
45*da2e3ebdSchin	9.  ${!prefix*} and ${!prefix@} expand to the list of variable
46*da2e3ebdSchin	    names beginning with prefix.
47*da2e3ebdSchin	10. The substring operators, # and % can be now be applied
48*da2e3ebdSchin	    with aggregates (@ or *) and are applied to each.
49*da2e3ebdSchin	11. ${name/pattern/string} expands to the value of name with
50*da2e3ebdSchin	    the first occurrence of pattern replaced by string.
51*da2e3ebdSchin	    With aggregates (@ or *) this operation is applied to each.
52*da2e3ebdSchin	12. ${name/#pattern/string} Same as above but the pattern
53*da2e3ebdSchin	    to be replaced must match at the beginning.
54*da2e3ebdSchin	13. ${name/%pattern/string} Same as above but the pattern
55*da2e3ebdSchin	    to be replaced must match at the end.
56*da2e3ebdSchin	14. ${name//pattern/string} expands to the value of name with
57*da2e3ebdSchin	    the each occurrence of pattern replaced by string.
58*da2e3ebdSchin	    With aggregates (@ or *) this operation is applied to each.
59*da2e3ebdSchin
60*da2e3ebdSchin    d.  The name space for variables has been extended.  The character '.'
61*da2e3ebdSchin	can be used at the beginning of a name, and to separate identifiers
62*da2e3ebdSchin	within a name.  However, to create a name of the form, foo.bar,
63*da2e3ebdSchin	the variable foo must exist. The namespace starting with .sh
64*da2e3ebdSchin	is reserved for shell implementation variables.  Exported
65*da2e3ebdSchin	variable cannot contain a '.'.
66*da2e3ebdSchin
67*da2e3ebdSchin    e.  Compound assignments.  The assignment syntax, varname=value,
68*da2e3ebdSchin	has been extended to allow assignments of the form
69*da2e3ebdSchin	varname=(assignment_list).  As elsewhere in the shell
70*da2e3ebdSchin	spaces or tabs are optional around the parentheses, and
71*da2e3ebdSchin	no space is permitted between the varname and the =.  The
72*da2e3ebdSchin	assignment_list can be one of the following:
73*da2e3ebdSchin	1.  A list of words.  In this case each word is expanded as
74*da2e3ebdSchin	    in a for list and the resulting items become elements
75*da2e3ebdSchin	    of the indexed array varname.
76*da2e3ebdSchin	2.  A list of subscript assignments in the form
77*da2e3ebdSchin	    [subscript]=value.  In this, these elements become
78*da2e3ebdSchin	    elements of the associative array varname.
79*da2e3ebdSchin	3.  A list of assignments; simple or compound.  In this
80*da2e3ebdSchin	    case, each assignment is made to varname.name, where
81*da2e3ebdSchin	    name is the name of the enclosed assignment.
82*da2e3ebdSchin	4.  Assignments in the form of readonly or typeset
83*da2e3ebdSchin	    statements.  In this case each assignment is made as
84*da2e3ebdSchin	    in 3 above, and the attributes are given to the
85*da2e3ebdSchin	    corresponding variable.
86*da2e3ebdSchin	In case 3 and 4 above, the value of "$varname" after
87*da2e3ebdSchin	the above assignment is (assignment_list), where the
88*da2e3ebdSchin	assignment_list produced would reproduce all of the
89*da2e3ebdSchin	variables under varname.*.
90*da2e3ebdSchin
91*da2e3ebdSchin    f.  Function names of the form variable.action (called discipline
92*da2e3ebdSchin	functions) can be defined where variable is any valid variable
93*da2e3ebdSchin	name and action is get, set, or unset.  The function variable.get
94*da2e3ebdSchin	is invoked each time the variable is referenced.  The set
95*da2e3ebdSchin	discipline is invoked each time the variable is assigned to.
96*da2e3ebdSchin	The unset discipline is invoked when a variable is unset.
97*da2e3ebdSchin	The new variables .sh.name, .sh.subscript, and .sh.value are
98*da2e3ebdSchin	defined inside the function body.  Other shell extensions
99*da2e3ebdSchin	may have their own set of discipline functions.
100*da2e3ebdSchin
101*da2e3ebdSchin    g.	The compound command !, which negates the return value of the
102*da2e3ebdSchin	following pipeline, has been added.
103*da2e3ebdSchin
104*da2e3ebdSchin    h.	On systems that support dynamic loading with dlopen(), it is
105*da2e3ebdSchin	now possible to add built-in commands at runtime with the
106*da2e3ebdSchin	a builtin command named builtin.
107*da2e3ebdSchin
108*da2e3ebdSchin    i.	The following builtins have been added:
109*da2e3ebdSchin	1.  command name [ ... ]
110*da2e3ebdSchin	2.  sleep [decimal-seconds]
111*da2e3ebdSchin	3.  builtin [-ds] [-f file] [name...]
112*da2e3ebdSchin	4.  getconf name [pathname]
113*da2e3ebdSchin	5.  disown [job...]
114*da2e3ebdSchin
115*da2e3ebdSchin    j.	An addition format for literal strings, $'....' can
116*da2e3ebdSchin	be used where ever literal strings are valid.  The string
117*da2e3ebdSchin	inside the single quotes will be converted using the ANSI-C
118*da2e3ebdSchin	escape conventions.  Additionally, the escape sequence \E
119*da2e3ebdSchin	expands to the escape character (default \033) whenever ANSI-C
120*da2e3ebdSchin	escape sequences are recognized.
121*da2e3ebdSchin
122*da2e3ebdSchin    k.  A typeset -n option has been added which causes the value of a
123*da2e3ebdSchin	variable to be treated as a reference to another variable so that
124*da2e3ebdSchin	variables can be indirectly named.  For example, if $1 contains
125*da2e3ebdSchin	the name of a variable, then typeset -n foo=$1 causes the variable
126*da2e3ebdSchin	foo to be synonymous with the variable whose name is $1.  A builtin
127*da2e3ebdSchin	alias, nameref='typeset -n' has been added to aid mnemonics.
128*da2e3ebdSchin	Reference names cannot contain a '.'.  Whenever that portion of
129*da2e3ebdSchin	a variable up to the first '.' matches a reference name, the
130*da2e3ebdSchin	reference value is substituted.  For example, with nameref foo=.top,
131*da2e3ebdSchin	then ${foo.bar} is equivalent to ${.top.bar}.  When used as the
132*da2e3ebdSchin	index of a for or select loop, each assignment causes a
133*da2e3ebdSchin	new name reference to occur.
134*da2e3ebdSchin
135*da2e3ebdSchin    l.	The KEYBD trap has been added which is triggered when a key
136*da2e3ebdSchin	or escape sequence is typed while reading from the keyboard
137*da2e3ebdSchin	in an edit mode.  This, combined with some new variables
138*da2e3ebdSchin	makes it possible to program your key bindings in ksh.
139*da2e3ebdSchin
140*da2e3ebdSchin    m.	New variables have been added:
141*da2e3ebdSchin	1.  FIGNORE defines a set of file names to be ignored in each
142*da2e3ebdSchin	    directory when performing pathname expansion, replacing
143*da2e3ebdSchin	    the rule that requires that a leading . be matched explicitly.
144*da2e3ebdSchin	2.  Variable sh.edchar contains the value of the keyboard character
145*da2e3ebdSchin	    that has been entered when processing a KEYBD trap.  If the value
146*da2e3ebdSchin	    is changed as part of the trap action, then the new value replaces
147*da2e3ebdSchin	    the key or keys that caused the trap.
148*da2e3ebdSchin	3.  Variable sh.edcol is set to the character position of the cursor
149*da2e3ebdSchin	    within the input buffer during a KEYBD trap.
150*da2e3ebdSchin	4.  Variable sh.edmode is set to the escape character when in vi
151*da2e3ebdSchin	    insert mode.
152*da2e3ebdSchin	5.  Variable sh.edtext is set to the contents of the input buffer
153*da2e3ebdSchin	    during a KEYBD trap.
154*da2e3ebdSchin	6.  HISTEDIT is checked before FCEDIT.  FCEDIT is obsolete.
155*da2e3ebdSchin	7.  HISTCMD is the number of the current command in the history
156*da2e3ebdSchin	    file.
157*da2e3ebdSchin	8.  Variable .sh.version is set to the version string for
158*da2e3ebdSchin	    this shell.
159*da2e3ebdSchin	9.  Variable .sh.name is set to the name of the variable
160*da2e3ebdSchin	    that that was referenced or assigned to when executing a get
161*da2e3ebdSchin	    or set discipline function.
162*da2e3ebdSchin	10. Variable .sh.subscript is set to the subscript for the variable
163*da2e3ebdSchin	    that was referenced or assign to when executing a get or
164*da2e3ebdSchin	    set discipline function.
165*da2e3ebdSchin	11. Variable .sh.value is set to the new value for the variable
166*da2e3ebdSchin	    that was assigned to when executing the set discipline function.
167*da2e3ebdSchin
168*da2e3ebdSchin    n.	New invocation and set -o options have been added:
169*da2e3ebdSchin	1.  set -o notify (or set -b) causes background completion messages
170*da2e3ebdSchin	    to be displayed as soon as the job completes.
171*da2e3ebdSchin	2.  There is a compile time option named KIA which enables
172*da2e3ebdSchin	    creation of a relational database for commands, variables
173*da2e3ebdSchin	    and functions defined and referenced by a script.  The
174*da2e3ebdSchin	    option -I <filename>, causes the database to be generated
175*da2e3ebdSchin	    in <filename>.  The database format can be queried via
176*da2e3ebdSchin	    the cql command.
177*da2e3ebdSchin    o.	ksh93 can read and evaluate pre-compiled scripts generated by
178*da2e3ebdSchin	a separate program called shcomp.
179*da2e3ebdSchin    p.  More work on internationalization has been added:
180*da2e3ebdSchin	1.  The decimal point character is processed per locale
181*da2e3ebdSchin	2.  A $  can be placed in front of each string to indicate
182*da2e3ebdSchin	    that the string needs translation but is otherwise ignored.
183*da2e3ebdSchin	    This means that if a message catalog of all $"..." strings
184*da2e3ebdSchin	    is generated, then a program such as print $"hello world"
185*da2e3ebdSchin	    could display "bonjour monde" in the french locale.
186*da2e3ebdSchin    q.	Backreferences have been added to pattern matching.  The sequence
187*da2e3ebdSchin	\d, where d is a digit from 1-9, matches the same string as
188*da2e3ebdSchin	the d-th previous parenthesis group.  Backreferences
189*da2e3ebdSchin	can be used within patterns, and within replacement strings
190*da2e3ebdSchin	with any of the ${name/...} operators.
191*da2e3ebdSchin
192*da2e3ebdSchin2.  Changes made in 12/28/93
193*da2e3ebdSchin    a.	The output format of many commands has changed as follows:
194*da2e3ebdSchin	1.  System error messages are displayed whenever a failure
195*da2e3ebdSchin	    is caused by a system call.
196*da2e3ebdSchin	2.  The exit status has changed in many cases:
197*da2e3ebdSchin	    a.	USAGE messages cause an exit status of 2.
198*da2e3ebdSchin	    b.	Commands not found cause exit - 127.
199*da2e3ebdSchin	    c.	Command found, but not executable - 126.
200*da2e3ebdSchin	    d.	Terminated because of signal -	256+sig
201*da2e3ebdSchin	3.  The output of values from built-ins that contain special
202*da2e3ebdSchin	    characters are quoted in a manner that then can be re-input.
203*da2e3ebdSchin	4.  The trace output puts quotes around the output so that it
204*da2e3ebdSchin	    can be reused as input.
205*da2e3ebdSchin	5.  The output for trap is in a format that can be reinput the
206*da2e3ebdSchin	    the shell to restore the traps.
207*da2e3ebdSchin	6.  kill -l lists the signal names without numbers as
208*da2e3ebdSchin	    required by the POSIX standard.
209*da2e3ebdSchin
210*da2e3ebdSchin    b.	The following changes have been made to shell functions:
211*da2e3ebdSchin	1.  The semantics of functions declared with name() has changed
212*da2e3ebdSchin	    to conform with the IEEE-POSIX 1003.2 standard.  In particular,
213*da2e3ebdSchin	    these functions are executed in a dot script environment rather
214*da2e3ebdSchin	    than a separated function environment so that there are no
215*da2e3ebdSchin	    local variables and no scoping for traps.
216*da2e3ebdSchin	2.  Functions declared as function name, preserve the old ksh
217*da2e3ebdSchin	    semantics can be also used as the first argument to the dot (.)
218*da2e3ebdSchin	    command to have them executed in a dot script environment.
219*da2e3ebdSchin
220*da2e3ebdSchin    c.	The command search rules have changed as follows:
221*da2e3ebdSchin	1.  Special built-ins (those with a dagger in front of them) are
222*da2e3ebdSchin	    executed first.
223*da2e3ebdSchin	2.  Functions are executed next.
224*da2e3ebdSchin	3.  Other built-ins that do not require an executable version
225*da2e3ebdSchin	    (for example cd and read) come next.
226*da2e3ebdSchin	4.  If the command name contains a slash, the pathname corresponding
227*da2e3ebdSchin	    to the command name is executed.
228*da2e3ebdSchin	5.  If name corresponds to a previously encountered pathname
229*da2e3ebdSchin	    on the PATH variable, the corresponding command is executed.
230*da2e3ebdSchin	6.  If the command name does not contain a slash, then the PATH
231*da2e3ebdSchin	    variable is used to find an executable by that name.  If
232*da2e3ebdSchin	    the directory that the command is found is also contained in
233*da2e3ebdSchin	    the FPATH variable, then the command treated as a function.
234*da2e3ebdSchin	    If the shell has a built-in version of the command corresponding
235*da2e3ebdSchin	    to this command, then the built-in version of this command
236*da2e3ebdSchin	    is executed.  Otherwise, the shell remembers that pathname
237*da2e3ebdSchin	    corresponding to this command name and executes this pathname.
238*da2e3ebdSchin	7.  If the name is not found on PATH, then the directories in
239*da2e3ebdSchin	    FPATH are searched.  If found, then the command is executed
240*da2e3ebdSchin	    as a function.
241*da2e3ebdSchin
242*da2e3ebdSchin    d.	Built-in commands options now conform to the IEEE-POSIX 1003.2
243*da2e3ebdSchin	conventions with some additions.  In particular,
244*da2e3ebdSchin		name -?
245*da2e3ebdSchin	will now print a Usage line for name, except for true, false,
246*da2e3ebdSchin	colon, login, newgrp, echo, [, and command.
247*da2e3ebdSchin
248*da2e3ebdSchin    e.	Tilde expansion is now performed as part of the word expansions.
249*da2e3ebdSchin	The effect of this is that if word begins with ~ in ${name op word},
250*da2e3ebdSchin	it will be expanded unless escaped.
251*da2e3ebdSchin
252*da2e3ebdSchin    f.  Pathname expansion is no longer performed on redirection words
253*da2e3ebdSchin	unless the shell is interactive.
254*da2e3ebdSchin
255*da2e3ebdSchin    g.	Changes to shell and options:
256*da2e3ebdSchin	1.  The -n option has been enhanced to produce more warning and
257*da2e3ebdSchin	    portability messages.
258*da2e3ebdSchin	2.  The -C option is equivalent to -o noclobber.  Files are
259*da2e3ebdSchin	    created with O_EXCL when -C is on.
260*da2e3ebdSchin
261*da2e3ebdSchin    h.	The following changes have been made to [[...]]:
262*da2e3ebdSchin	1.  A string by itself is equivalent to -n string.
263*da2e3ebdSchin	2.  -e has been added as equivalent to -a.
264*da2e3ebdSchin	3.  == has been added as equivalent =.
265*da2e3ebdSchin	4.  -a and = are now considered obsolete.
266*da2e3ebdSchin	5.  Arithmetic comparisons are now considered obsolete.
267*da2e3ebdSchin
268*da2e3ebdSchin    i.	kill has been changed as follows:
269*da2e3ebdSchin	1.  Signal names can be upper case or lower case.
270*da2e3ebdSchin	2.  Numerical arguments to kill -l cause the given signal names to
271*da2e3ebdSchin	    be displayed.
272*da2e3ebdSchin	3.  String arguments to kill -l cause the given signal numbers to
273*da2e3ebdSchin	    be displayed.
274*da2e3ebdSchin	4.  Synopsis changed for getopts conformance.
275*da2e3ebdSchin
276*da2e3ebdSchin    j.	print has a -f format option which is equivalent to
277*da2e3ebdSchin	the IEEE POSIX printf.  Both print -f format, and
278*da2e3ebdSchin	printf have the following extensions from IEEE POSIX:
279*da2e3ebdSchin	1.  Floating point formats are supported.
280*da2e3ebdSchin	2.  Size and precision specifications can be *.
281*da2e3ebdSchin	3.  The %d option can take an argument after precision to
282*da2e3ebdSchin	    specify the base that the number will be displayed.
283*da2e3ebdSchin	4.  A %q format can be used to output a string quoted so
284*da2e3ebdSchin	    that it can be re-input to the shell.
285*da2e3ebdSchin	5.  A %P format can be used to output the shell pattern which
286*da2e3ebdSchin	    corresponds to the give extended regular expression.
287*da2e3ebdSchin	6.  For numerical fields, the arguments can be arithmetic
288*da2e3ebdSchin	    expressions which will be evaluated.
289*da2e3ebdSchin	7.  The %n format works as described in ANSI-C.
290*da2e3ebdSchin
291*da2e3ebdSchin    k.	The following changes have been made to fc:
292*da2e3ebdSchin	1.  It has been renamed hist.  fc is now a predefined alias.
293*da2e3ebdSchin	2.  hist uses ${HISTEDIT:-$FCEDIT}.  FCEDIT is obsolete.
294*da2e3ebdSchin	3.  A new -s option is equivalent to the obsolete -e -.
295*da2e3ebdSchin	4.  If the first argument refers to a command earlier than the
296*da2e3ebdSchin	    first accessible command, it now implies the first accessible
297*da2e3ebdSchin	    command, so that hist -l 1 lists all accessible history commands.
298*da2e3ebdSchin
299*da2e3ebdSchin    l.	The dot command (.) has changed as follows:
300*da2e3ebdSchin	1.  The argument can be the name of a function declared as
301*da2e3ebdSchin	    function name.  The function will execute without creating a
302*da2e3ebdSchin	    new scope.
303*da2e3ebdSchin	2.  If there are arguments to the given script or function,
304*da2e3ebdSchin	    the positional parameters are restored to their original
305*da2e3ebdSchin	    value when . completes.
306*da2e3ebdSchin
307*da2e3ebdSchin    m.  The read built-in has been changed as follows:
308*da2e3ebdSchin    	1.  A -A option to read has been added to allow the fields to be
309*da2e3ebdSchin	    read into an indexed array.
310*da2e3ebdSchin	2.  A -t n option has been added which causes read to
311*da2e3ebdSchin	    timeout after n seconds when reading from a slow device.
312*da2e3ebdSchin	3.  A -d char option has been added which causes the read
313*da2e3ebdSchin	    to terminate at char rather than at new-line.
314*da2e3ebdSchin
315*da2e3ebdSchin    n.	The trap command has been changed as follows:
316*da2e3ebdSchin	1.  Trap names can be either upper case or lower case.
317*da2e3ebdSchin	2.  Trap -p cause only the specified trap values to be displayed.
318*da2e3ebdSchin	3.  The value of trap in a subshell will be the value in the parent
319*da2e3ebdSchin	    shell until a call to trap which changes the trap settings has
320*da2e3ebdSchin	    been made.  Thus, savetraps=$(trap) works as required by the
321*da2e3ebdSchin	    POSIX standard.
322*da2e3ebdSchin
323*da2e3ebdSchin    o.  The exec command has been extended as follows:
324*da2e3ebdSchin	1.  The -c option clears the environment first.
325*da2e3ebdSchin	2.  The -a name option sets argv[0] to name for the program.
326*da2e3ebdSchin
327*da2e3ebdSchin    p.	true and false are built-ins, not aliases to built-ins.
328*da2e3ebdSchin
329*da2e3ebdSchin    q.	test has been modified to conform to the IEEE-POSIX 1003.2
330*da2e3ebdSchin	standard when there are three or less arguments.
331*da2e3ebdSchin
332*da2e3ebdSchin    r.	umask -S option displays the mask in a symbolic format.
333*da2e3ebdSchin
334*da2e3ebdSchin    s.	wait now returns the correct exit status of any previous
335*da2e3ebdSchin	background job that has not been waited for, not just
336*da2e3ebdSchin	the most recent one.
337*da2e3ebdSchin
338*da2e3ebdSchin    t.  The whence built-in has an option -a which causes all
339*da2e3ebdSchin	uses for the given command name to be reported.
340*da2e3ebdSchin
341*da2e3ebdSchin    u.  unalias has -a option to clear all the aliases.
342*da2e3ebdSchin
343*da2e3ebdSchin    v.	The times built-in command has been removed.  The time
344*da2e3ebdSchin	reserved word, without a command, gives time cumulative
345*da2e3ebdSchin	time for the shell and its children.  A built-in alias
346*da2e3ebdSchin	for times should enable scripts using times to continue
347*da2e3ebdSchin	to run.
348*da2e3ebdSchin
349*da2e3ebdSchin    w.	Command substitution and arithmetic substitution will now be
350*da2e3ebdSchin	performed for PS1, ENV, and PS4 evaluation in addition to
351*da2e3ebdSchin	parameter expansion.
352*da2e3ebdSchin
353*da2e3ebdSchin    x.  The SECONDS variable now displays elapsed time in floating
354*da2e3ebdSchin	point seconds with 3 places after the decimal point by
355*da2e3ebdSchin	default.
356*da2e3ebdSchin
357*da2e3ebdSchin    y.  The getopts built-in now handles the complete libast optget
358*da2e3ebdSchin	functionality.  If any errors have occurred with getopts
359*da2e3ebdSchin	when it has reached the end of arguments, then the Usage
360*da2e3ebdSchin	message will be generated from the option string and the
361*da2e3ebdSchin	exit status from getopts will be 2 rather than 1.  The
362*da2e3ebdSchin	usage message will be stored in the OPTARG variable if
363*da2e3ebdSchin	the option string contains a leading colon; otherwise
364*da2e3ebdSchin	it will be printed on standard error automatically.
365*da2e3ebdSchin
366*da2e3ebdSchin    z.	THE ENV file is only processed for interactive shell
367*da2e3ebdSchin	invocations.  In addition, the -x attributes for
368*da2e3ebdSchin	aliases and functions is ignored.
369*da2e3ebdSchin
370*da2e3ebdSchin    aa. The built-in edit modes have been changed as follows:
371*da2e3ebdSchin	1. The pathname completion and pathname listing options
372*da2e3ebdSchin	   now perform command completion and command listing
373*da2e3ebdSchin	   when applied to a word in the command position.
374*da2e3ebdSchin	2. In emacs mode ^N as the first related command after
375*da2e3ebdSchin	   the prompt will move to the next command relative to the
376*da2e3ebdSchin	   last known history position.
377*da2e3ebdSchin	3. In emacs mode, successive kill and delete commands will
378*da2e3ebdSchin	   accumulate their data in the kill buffer, by appending or
379*da2e3ebdSchin	   prepending as appropriate.  This mode will be reset by any
380*da2e3ebdSchin	   command not adding something to the kill buffer.
381*da2e3ebdSchin	4. The control-T of emacs mode has been changed to behave like
382*da2e3ebdSchin	   control-T in gnu-emacs.
383*da2e3ebdSchin    bb. The TMOUT variable also sets a limit for select timeouts
384*da2e3ebdSchin	and default timeouts for read.
385*da2e3ebdSchin
386*da2e3ebdSchin
387*da2e3ebdSchin4.  The source code has undergone significant modification.
388*da2e3ebdSchin    a.	Much of the code has been rewritten,  In many cases this has
389*da2e3ebdSchin	resulted in significant performance improvement.
390*da2e3ebdSchin
391*da2e3ebdSchin    b.  The code is organized differently.  See the README files
392*da2e3ebdSchin	for more details.
393*da2e3ebdSchin
394*da2e3ebdSchin    c.	Most configuration parameters now get generated using
395*da2e3ebdSchin	the FEATURE mechanism of nmake.  Other options are set
396*da2e3ebdSchin	in the OPTIONS file.
397*da2e3ebdSchin
398*da2e3ebdSchin    c.	The are several new compile time options. See the README
399*da2e3ebdSchin	file for details.  Some of the old ones have been removed.
400*da2e3ebdSchin
401*da2e3ebdSchin    d.	The install script is a Mamfile that is generated by
402*da2e3ebdSchin	nmake and processed by a script that comes with the
403*da2e3ebdSchin	distribution.
404*da2e3ebdSchin
405*da2e3ebdSchin    e.	There are far fewer global names.  This should make it
406*da2e3ebdSchin	must easier to add built-in commands without worrying
407*da2e3ebdSchin	about conflicts.
408*da2e3ebdSchin
409*da2e3ebdSchin    f.	The code uses the sfio library which makes it possible
410*da2e3ebdSchin	to mix with stdio.
411*da2e3ebdSchin
412*da2e3ebdSchin    g.	The code is written in ANSI C with full prototypes.
413*da2e3ebdSchin	The code is based on the IEEE POSIX 1003.1 standard.
414*da2e3ebdSchin	The code can be compiled with K&R C and with C++ by
415*da2e3ebdSchin	using the ANSI cpp that comes with nmake or running
416*da2e3ebdSchin	the code through the proto filter before pre-processing.
417*da2e3ebdSchin	This happens automatically with our shipping system.
418*da2e3ebdSchin
419*da2e3ebdSchin    h.  There is a programming interface for capturing references
420*da2e3ebdSchin	and assignment to shell variables.  It is also possible
421*da2e3ebdSchin	to intercept variable creation and supply the array processing
422*da2e3ebdSchin	function for that variable.  See nval.3 for a description.
423