1*da2e3ebdSchinThis is a list of changes that have been made since the 12/28/93 version 2*da2e3ebdSchinof ksh. 3*da2e3ebdSchin 4*da2e3ebdSchin1. New features in 12/28/93b 5*da2e3ebdSchin a. If IFS contains two consecutive identical characters belonging 6*da2e3ebdSchin to the [:space:] class, then this character is treated as 7*da2e3ebdSchin a non-space delimiter so that each instance will delimit 8*da2e3ebdSchin a field. For example, IFS=$'\t\t' will cause two consecutive 9*da2e3ebdSchin tabs to delimit a null field. 10*da2e3ebdSchin b. The getopts command has a -a name option that specifies a 11*da2e3ebdSchin name that will be used for usage messages. 12*da2e3ebdSchin 13*da2e3ebdSchin2. New features in 12/28/93e 14*da2e3ebdSchin a. The math functions, atan2, hypot, fmod, and pow were added. 15*da2e3ebdSchin b. When a shared library is loaded, if the function lib_init() 16*da2e3ebdSchin is defined in the library, it is invoked the first time that 17*da2e3ebdSchin the library is loaded with builtin -f library. 18*da2e3ebdSchin 19*da2e3ebdSchin3. New features in 12/28/93f 20*da2e3ebdSchin a. Hostnames in addition to host addresses can be given in 21*da2e3ebdSchin /dev/tcp/host/port virtual file names. 22*da2e3ebdSchin b. File name completion and expansion now quotes special 23*da2e3ebdSchin characters in file names from both emacs and vi edit modes. 24*da2e3ebdSchin 25*da2e3ebdSchin4. New features in 12/28/93g 26*da2e3ebdSchin a. The pipefail option has been added. With pipefail 27*da2e3ebdSchin enabled, a pipeline will not complete until all 28*da2e3ebdSchin commands are complete, and the return value will 29*da2e3ebdSchin be that of the last command to fail, or zero if 30*da2e3ebdSchin all complete successfully. 31*da2e3ebdSchin b. When an executable is found on a given path, 32*da2e3ebdSchin the appropriate library path variable is prepended 33*da2e3ebdSchin with a corresponding library directory. 34*da2e3ebdSchin5. New features in 12/28/93h 35*da2e3ebdSchin a. The PATH search algorithm has been modified to look 36*da2e3ebdSchin for a file named .fpath in each bin directory and if 37*da2e3ebdSchin found, to search for functions in this directory if 38*da2e3ebdSchin it cannot find the command in that directory. 39*da2e3ebdSchin b. When performing pathname expansion, the shell checks 40*da2e3ebdSchin to see whether each directory it reads is case sensitive 41*da2e3ebdSchin or not, and performs the matching accordingly. 42*da2e3ebdSchin c. The %T format for printing formatted date/time. 43*da2e3ebdSchin6. New features in 12/28/93i 44*da2e3ebdSchin a. Most of the built-in commands and ksh itself are now 45*da2e3ebdSchin self documenting. Running command --man will produce 46*da2e3ebdSchin screen output. Running command --html produces the 47*da2e3ebdSchin man page in html format. 48*da2e3ebdSchin b. The getopts builtin can process command description 49*da2e3ebdSchin strings to produce man pages. 50*da2e3ebdSchin 51*da2e3ebdSchin7. Bugs fixed in 12/28/93a for default OPTIONS 52*da2e3ebdSchin a. An expansion bug which causes portions of a word after 53*da2e3ebdSchin a $((...)) expansion that contains a nested $var expansion 54*da2e3ebdSchin to be lost has been fixed. 55*da2e3ebdSchin b. A bug that caused a core dump when a script that did not 56*da2e3ebdSchin have PWD set and did a cd inside command substitution 57*da2e3ebdSchin has been fixed. 58*da2e3ebdSchin c. A bug which caused a core dump on some machines when 59*da2e3ebdSchin the LANG variable was assigned to has been fixed. 60*da2e3ebdSchin d. A bug which incorrectly handled set disciplines that 61*da2e3ebdSchin performed arithmetic evaluation when the discipline 62*da2e3ebdSchin was called from the arithmetic evaluator has been fixed. 63*da2e3ebdSchin e. A bug caused by an EXIT trap inside a function that 64*da2e3ebdSchin was executed in a subshell was fixed. 65*da2e3ebdSchin f. If foo is a function, and not a program, then command foo 66*da2e3ebdSchin now reports that foo isn't found rather than invoking foo. 67*da2e3ebdSchin g. The previous version incorrectly listed -A as an 68*da2e3ebdSchin invocation option. The -A option is only for set. 69*da2e3ebdSchin h. A bug was fixed which caused ksh to loop when execution trace 70*da2e3ebdSchin was enabled and the PS4 prompt required command substitution. 71*da2e3ebdSchin i. A bug which could cause the job control switch character 72*da2e3ebdSchin to be disabled when a script that enabled monitor mode 73*da2e3ebdSchin terminated was fixed. 74*da2e3ebdSchin j. A bug in the macro expansion global replacement operator //, 75*da2e3ebdSchin when the pattern began with a [ or +( has been fixed. 76*da2e3ebdSchin k. A bug which prevented ~ expansion from occurring when 77*da2e3ebdSchin it was terminated with a colon inside an assignment 78*da2e3ebdSchin has been fixed. 79*da2e3ebdSchin l. A bug in the dot command which prevented autoload functions 80*da2e3ebdSchin from working has been fixed. 81*da2e3ebdSchin m. A bug which caused a variable to be unset if the 82*da2e3ebdSchin its value were expanded inside a set discipline has 83*da2e3ebdSchin been fixed. 84*da2e3ebdSchin n. Whence -a now longer reports that a defined function 85*da2e3ebdSchin is undefined. 86*da2e3ebdSchin o. A bug on some systems in which $0 would be incorrect 87*da2e3ebdSchin in scripts invoked by name has been fixed. 88*da2e3ebdSchin p. Here documents with an empty body now work. 89*da2e3ebdSchin 1. A bug which disabled argument passing and resetting 90*da2e3ebdSchin of options for a script invoked by name inside a 91*da2e3ebdSchin function has been fixed. 92*da2e3ebdSchin r. A bug in which an EXIT trap set the caller of a function 93*da2e3ebdSchin would be executed if a command called inside a function 94*da2e3ebdSchin was not found has been fixed. 95*da2e3ebdSchin s. A bug which allowed a script to trap signals that are 96*da2e3ebdSchin ignored at the time that the shell was invoked has 97*da2e3ebdSchin been fixed. 98*da2e3ebdSchin t. A bug which caused 2<&1- when applied to a shell built-in 99*da2e3ebdSchin to leave standard input closed has been fixed. 100*da2e3ebdSchin u. A bug which caused the shell to incorrectly parse 101*da2e3ebdSchin $() command substitutions with nested case statements 102*da2e3ebdSchin has been fixed. 103*da2e3ebdSchin 104*da2e3ebdSchin8. Bugs fixed in 12/28/93b for default OPTIONS 105*da2e3ebdSchin a. A bug which caused unset RANDOM to dump core has been 106*da2e3ebdSchin fixed. 107*da2e3ebdSchin b. A bug which prevented return for terminating a profile 108*da2e3ebdSchin or ENV file has been fixed. 109*da2e3ebdSchin c. A bug which prevented standard input from being 110*da2e3ebdSchin directed to /dev/null for background jobs when 111*da2e3ebdSchin monitor mode was turned off has been fixed. 112*da2e3ebdSchin d. Statements of the form typeset -options var[expr]=value 113*da2e3ebdSchin did not perform substitutions on expr as expected. 114*da2e3ebdSchin e. A bug which prevented the shell from sending a HUP 115*da2e3ebdSchin signal to some background jobs that were not disowned 116*da2e3ebdSchin has been fixed. 117*da2e3ebdSchin f. A bug which allowed a script to trap signals that are 118*da2e3ebdSchin ignored at the time that the shell was invoked by exec 119*da2e3ebdSchin has been fixed. 120*da2e3ebdSchin g. A bug which could cause a core dump when a discipline 121*da2e3ebdSchin function was unset within a discipline was fixed. 122*da2e3ebdSchin h. The typeset builtin now accepts a first argument of 123*da2e3ebdSchin + or - for compatibility with ksh88. 124*da2e3ebdSchin i. For compatibility with ksh88, the results of expansions 125*da2e3ebdSchin of command arguments will treat the extended character 126*da2e3ebdSchin match characters ()|& as ordinary characters. 127*da2e3ebdSchin j. A bug which caused read to fail on a file that was 128*da2e3ebdSchin open for read/write with <> when the first operation 129*da2e3ebdSchin was print or printf has been fixed. 130*da2e3ebdSchin k. When a job is suspended, it is put on the top of 131*da2e3ebdSchin the job list as required by the POSIX standard. 132*da2e3ebdSchin l. The value of OPTARG when an option that required 133*da2e3ebdSchin an argument but didn't have one was incorrect in the 134*da2e3ebdSchin case the the option string began with a :. 135*da2e3ebdSchin m. A bug which caused the terminal to get into a bad 136*da2e3ebdSchin state with some KEYBD traps in vi-mode has been fixed. 137*da2e3ebdSchin n. A bug which caused an invalid trap to cause a script 138*da2e3ebdSchin to terminate, rather than just return an error, has 139*da2e3ebdSchin been fixed. 140*da2e3ebdSchin o. Backreferencing sub-expressions in patterns and replacement 141*da2e3ebdSchin strings now works. 142*da2e3ebdSchin p. A bug in chmod which caused the -R option to fail has 143*da2e3ebdSchin been fixed. 144*da2e3ebdSchin 145*da2e3ebdSchin9. Bugs fixed in 12/28/93c for default OPTIONS 146*da2e3ebdSchin a. The expansion of "$@" was incorrect when $1 was the null 147*da2e3ebdSchin string. 148*da2e3ebdSchin b. A bug which could incorrectly report a syntax error in 149*da2e3ebdSchin a backquoted expression when a $ was preceded by \\ 150*da2e3ebdSchin has been fixed. 151*da2e3ebdSchin c. A bug which prevented the shell from exiting after 152*da2e3ebdSchin reporting an error when failing to open a script 153*da2e3ebdSchin has been fixed. 154*da2e3ebdSchin d. A bug that could lead to memory corruption when a 155*da2e3ebdSchin large here document that required parameter or command 156*da2e3ebdSchin substitution was expanded has been fixed. 157*da2e3ebdSchin e. A bug that could cause a core dump on some systems 158*da2e3ebdSchin after ksh detected an error when reading a function 159*da2e3ebdSchin has been fixed. 160*da2e3ebdSchin f. A bug which could cause a coprocess to hang when 161*da2e3ebdSchin reading from a process that has terminated has been fixed. 162*da2e3ebdSchin g. A bug which caused a script to terminate when set -e 163*da2e3ebdSchin was on and the first command of and && or || list 164*da2e3ebdSchin failed has been fixed. 165*da2e3ebdSchin h. A bug with here documents inside $(...) when the delimiter 166*da2e3ebdSchin word is an identifier has been fixed. 167*da2e3ebdSchin i. A bug which caused $0 to display the wrong value when 168*da2e3ebdSchin a script was invoked as an argument to the . command 169*da2e3ebdSchin and the eval command has been fixed. 170*da2e3ebdSchin j. A bug that could cause the built-in sleep to hang 171*da2e3ebdSchin has been fixed. 172*da2e3ebdSchin k. A bug introduces in 12/28/93b which caused the backslash 173*da2e3ebdSchin to be removed when it was followed by digit inside double 174*da2e3ebdSchin quotes in some instances has been fixed. 175*da2e3ebdSchin l. A bug which could cause a core dump if ksh was invoked with 176*da2e3ebdSchin standard input closed has been fixed. 177*da2e3ebdSchin m. A bug which could cause a core dump if typeset -A was 178*da2e3ebdSchin specified for an existing variable has been fixed. 179*da2e3ebdSchin n. Variables that were unset but had attributes such as readonly 180*da2e3ebdSchin and export were not listed with readonly, export and typeset. 181*da2e3ebdSchin o. Several problems with signals have been fixed. 182*da2e3ebdSchin p. A bug which prevented ulimit -t from working has been fixed. 183*da2e3ebdSchin Also, a bug in which failed ulimits could cause a core dump 184*da2e3ebdSchin has also been fixed. 185*da2e3ebdSchin q. A bug in expansion of the form ${name/#pattern/string} and 186*da2e3ebdSchin ${name/%pattern/string} has been fixed. 187*da2e3ebdSchin r. A bug which caused read -r on a line that contained only 188*da2e3ebdSchin blanks to get a non-null value has been fixed. 189*da2e3ebdSchin s. A bug introduced in the 'a' point release in which 190*da2e3ebdSchin ${x='\\'} expanded to \ when x was unset has been fixed. 191*da2e3ebdSchin t. A bug which prevented a trap on EXIT from being executed 192*da2e3ebdSchin when the last command in a script was a function invocation 193*da2e3ebdSchin has been fixed. 194*da2e3ebdSchin u. A bug which caused an interactive shell ignore input when 195*da2e3ebdSchin standard error was redirected to a file with exec, 196*da2e3ebdSchin and then restored with exec 2>&1 has been fixed. 197*da2e3ebdSchin v. An interactive shell turns on monitor mode even when 198*da2e3ebdSchin standard error has been redirected to a file. 199*da2e3ebdSchin w. A bug which could cause standard input to be incorrectly 200*da2e3ebdSchin positioned for the last command of a script has been fixed. 201*da2e3ebdSchin y. A bug in the edit modes which allowed walking back in 202*da2e3ebdSchin the history file for more than HISTSIZE commands has 203*da2e3ebdSchin beed fixed. 204*da2e3ebdSchin z. A bug which could cause a core dump if variable TMPDIR was 205*da2e3ebdSchin changed between two command substitutions has been fixed. 206*da2e3ebdSchin aa. A bug which prevented a trap on EXIT from being cleared 207*da2e3ebdSchin has been fixed. 208*da2e3ebdSchin 209*da2e3ebdSchin10. Bugs fixed in 12/28/93d for default OPTIONS 210*da2e3ebdSchin a. The \ character was not handled correctly in replacement 211*da2e3ebdSchin patterns with ${x/pattern/replace}. 212*da2e3ebdSchin b. A bug with read in which the line did not end with 213*da2e3ebdSchin a new-line has been fixed. 214*da2e3ebdSchin c. A bug in file name generation which sometimes 215*da2e3ebdSchin appended a . for filenames that ended in / has 216*da2e3ebdSchin been fixed. 217*da2e3ebdSchin d. If a process is waited for after a status has 218*da2e3ebdSchin been returned by a previous wait, wait now 219*da2e3ebdSchin returns 127. 220*da2e3ebdSchin e. A bug with hist (fc) -e which prevented a command 221*da2e3ebdSchin to re-executed after it had been edited has been fixed. 222*da2e3ebdSchin f. A bug which prevented quoting from removing the meaning 223*da2e3ebdSchin of unary test operators has been fixed. 224*da2e3ebdSchin 225*da2e3ebdSchin11. Bugs fixed in 12/28/93e for default OPTIONS 226*da2e3ebdSchin a. Empty command substitutions of the form $() now work. 227*da2e3ebdSchin b. whence -v foo now gives the correct result after calling 228*da2e3ebdSchin builtin -d foo. 229*da2e3ebdSchin c. A bug in right to left arithmetic assignment for which 230*da2e3ebdSchin the arithmetic expression (( y = x = 1.5 )) did not 231*da2e3ebdSchin yield 1 for y when x was declared typeset -i was fixed. 232*da2e3ebdSchin d. printf has been fixed to handle format containing \0 233*da2e3ebdSchin and/or \0145 correctly. In addition, characters following 234*da2e3ebdSchin %b in the format string are no longer displayed when 235*da2e3ebdSchin the operand contains \c. 236*da2e3ebdSchin e. A bug in printf that could cause the %E format to 237*da2e3ebdSchin produce unnormalized results has been fixed. 238*da2e3ebdSchin f. A bug which causes some arithmetic expressions to be 239*da2e3ebdSchin incorrectly evaluated as integer expressions rather 240*da2e3ebdSchin that floating point has been fixed. 241*da2e3ebdSchin g. Functions defined inside a subshell no longer remain 242*da2e3ebdSchin defined when the subshell completes. 243*da2e3ebdSchin h. The error message from sh -c ';echo foo' has been 244*da2e3ebdSchin corrected. 245*da2e3ebdSchin i. The format for umask -S has been changed to agree 246*da2e3ebdSchin with the specification in the POSIX standard. 247*da2e3ebdSchin j. A bug that caused side effects in subscript evaluation 248*da2e3ebdSchin when tracing was enabled for subscripts using ++ or -- 249*da2e3ebdSchin has been fixed. 250*da2e3ebdSchin k. To conform to the Posix standard getopts has been changed 251*da2e3ebdSchin so that the option char is set to ? when it returns with 252*da2e3ebdSchin a non-zero exit status. 253*da2e3ebdSchin l. The handling of \} inside ${name...} has been fixed so 254*da2e3ebdSchin that the \ quotes the }. 255*da2e3ebdSchin m. A bug that caused the read builtin to resume execution 256*da2e3ebdSchin after processing a trap has been fixed. 257*da2e3ebdSchin n. [[ -s file ]] has been fixed so that if file is open 258*da2e3ebdSchin by ksh, it is flushed first. 259*da2e3ebdSchin o. In some cases attributes and sizes for non exported 260*da2e3ebdSchin variables weren't being reset before running a script. 261*da2e3ebdSchin p. The value of TMOUT was affected by changes make to 262*da2e3ebdSchin it in a subshell. 263*da2e3ebdSchin q. The jobs command did not reflect changes make by 264*da2e3ebdSchin sending the CONT signal to a command. 265*da2e3ebdSchin r. The error message for ksh -o unknown was incorrect. 266*da2e3ebdSchin s. Functions invoked as name=value name, did not use 267*da2e3ebdSchin values from the calling scope when evaluating value. 268*da2e3ebdSchin t. A bug in which the shell would reexecute previously 269*da2e3ebdSchin executed code when a shell script or coprocess was 270*da2e3ebdSchin run in the background has been fixed. 271*da2e3ebdSchin u. A bug in which an empty here-document would leave 272*da2e3ebdSchin a file descriptor open has been fixed. 273*da2e3ebdSchin v. A bug in which $(set -A array ...) would leave a 274*da2e3ebdSchin side effect has been fixed. 275*da2e3ebdSchin w. A discipline function for a global variable defined 276*da2e3ebdSchin within a function defined with the function keyword, 277*da2e3ebdSchin incorrectly created a local variable of the same name 278*da2e3ebdSchin and applied the discipline to it. 279*da2e3ebdSchin 280*da2e3ebdSchin12. Bugs fixed in 12/28/93f for default OPTIONS 281*da2e3ebdSchin a. A bug which would cause the secondary prompt to be 282*da2e3ebdSchin displayed when a user entered a literal carriage 283*da2e3ebdSchin return has been fixed. 284*da2e3ebdSchin b. I bug which caused ksh read -s name to core dump was 285*da2e3ebdSchin fixed. 286*da2e3ebdSchin c. I bug with the expansion of \} and \] inside double 287*da2e3ebdSchin quoted strings that also contained variable expansions 288*da2e3ebdSchin has been fixed 289*da2e3ebdSchin d. Changes in the 'e' point release caused autoload 290*da2e3ebdSchin functions invoked from within command substitution 291*da2e3ebdSchin to fail. This has been fixed. 292*da2e3ebdSchin e. A bug in the processing of here-documents that could 293*da2e3ebdSchin prevent variable substitution to occur after $(...) command 294*da2e3ebdSchin substitution for long here documents has been fixed. 295*da2e3ebdSchin f. A bug caused by a race condition that could cause SIGTERM 296*da2e3ebdSchin to be ignored by a child process has been fixed. 297*da2e3ebdSchin g. A bug which prevented the startup of a coprocess immediately 298*da2e3ebdSchin after killing a running coprocess has been fixed. 299*da2e3ebdSchin h. ulimit foobar, where foobar is not an arithmetic 300*da2e3ebdSchin expression, now gives an error message as it did with ksh88 301*da2e3ebdSchin instead of setting the file size limit to 0. 302*da2e3ebdSchin i. A bug which could cause an interactive shell to terminate when 303*da2e3ebdSchin the last process of a pipeline was a POSIX function was fixed. 304*da2e3ebdSchin j. A bug which could cause command substitution of a shell script 305*da2e3ebdSchin to core dump has been fixed. 306*da2e3ebdSchin k. A security hole was fixed in suid_exec. 307*da2e3ebdSchin l. Arithmetic functions such as pow() that take more than 308*da2e3ebdSchin one argument, did not work if arguments other than the 309*da2e3ebdSchin first contained parenthesized sub-expression. 310*da2e3ebdSchin m. The error message from a script containing an incomplete 311*da2e3ebdSchin arithmetic expression has been corrected. 312*da2e3ebdSchin n. A bug which caused a core dump on some machines when 313*da2e3ebdSchin the value of a name reference contained a positional 314*da2e3ebdSchin parameter and the name reference was not defined inside 315*da2e3ebdSchin a function has been fixed. 316*da2e3ebdSchin o. Arithmetic expressions now correctly handle hexidecimal 317*da2e3ebdSchin constants. 318*da2e3ebdSchin p. A bug in which integer variables could be expanded 319*da2e3ebdSchin with a leading 10# when declared with typeset -i 320*da2e3ebdSchin multiple times has been corrected. 321*da2e3ebdSchin q. A bug in which IFS wasn't correctly restored when 322*da2e3ebdSchin set within command substitution has been fixed. 323*da2e3ebdSchin r. The _ character is now considered as part of a word 324*da2e3ebdSchin with the M-f and M-b emacs directives as it was in ksh88. 325*da2e3ebdSchin 326*da2e3ebdSchin13. Bugs fixed in 12/28/93g for default OPTIONS 327*da2e3ebdSchin a. A bug in which a name reference could be created to 328*da2e3ebdSchin itself and later cause the shell to get into an infinite 329*da2e3ebdSchin loop has been fixed. 330*da2e3ebdSchin b. A bug in shcomp relating to compound variables was fixed. 331*da2e3ebdSchin c. A bug introduced in 'e' in which leading 0's in -Z 332*da2e3ebdSchin fields caused the value to be treated as octal for arithmetic 333*da2e3ebdSchin evaluation has been fixed. 334*da2e3ebdSchin d. A bug when a name reference with a shorter name than 335*da2e3ebdSchin the variable it references was the subject of a compound 336*da2e3ebdSchin assignment has been fixed. 337*da2e3ebdSchin e. A bug which in which assignment to array variables in 338*da2e3ebdSchin a subshell could effect the parent shell has been 339*da2e3ebdSchin fixed. 340*da2e3ebdSchin f. read name?prompt was putting a 0 byte at the end of the 341*da2e3ebdSchin prompt on standard error. 342*da2e3ebdSchin g. A bug in [[ string1 > string2 ]] when ksh was run with -x 343*da2e3ebdSchin has been fixed. 344*da2e3ebdSchin k. A bug in which the escape character was not processed 345*da2e3ebdSchin correctly inside {...} when brace expansion is enabled 346*da2e3ebdSchin has been fixed, for example {\$foo}. 347*da2e3ebdSchin l. A bug in line continuation in here-documents has been 348*da2e3ebdSchin fixed. 349*da2e3ebdSchin m. The default base when not specified with typeset -i is 350*da2e3ebdSchin 10 in accordance with the documentation. Previously, 351*da2e3ebdSchin the value was determined by the first assignment. 352*da2e3ebdSchin n. A parsing bug in which a # preceded alphanumeric 353*da2e3ebdSchin characters inside a command substitution caused 354*da2e3ebdSchin a syntax error to be reported has been fixed. 355*da2e3ebdSchin o. A bug in which a decimal constant represented as 10#ddd 356*da2e3ebdSchin where ddd was more than five digits generated a syntax 357*da2e3ebdSchin error has been fixed. 358*da2e3ebdSchin p. A bug in here document expansion in which ${...} expansions 359*da2e3ebdSchin were split across buffer boundaries has been fixed. 360*da2e3ebdSchin 361*da2e3ebdSchin14. Bugs fixed in 12/28/93h for default OPTIONS 362*da2e3ebdSchin a. I bug in shcomp for compilation of unary operators with [[...]] 363*da2e3ebdSchin has been fixed. 364*da2e3ebdSchin b. A bug in which the value of $? was changed when executing 365*da2e3ebdSchin a keyboard trap has been fixed. 366*da2e3ebdSchin c. The handling of SIGCHLD has been changed so that the 367*da2e3ebdSchin trap is not triggered while executing trap commands 368*da2e3ebdSchin to avoid recursive trap calls. 369*da2e3ebdSchin d. I bug in which a local variable in a function declared readonly 370*da2e3ebdSchin would generated an error when the function went out of 371*da2e3ebdSchin scope has been fixed. 372*da2e3ebdSchin e. I bug in which \<new_line> entered from the keyboard 373*da2e3ebdSchin with the KEYBD trap enabled has been fixed. 374*da2e3ebdSchin f. The error message for a misplaced ((, for example print ((3), 375*da2e3ebdSchin was often garbled and has been fixed. 376*da2e3ebdSchin g. I bug in the KEYBD trap in which escape sequences of the form 377*da2e3ebdSchin <ESC>[#~ were not being handled as a unit has been fixed. 378*da2e3ebdSchin h. A bug in which ksh would consider expressions like [[ (a) ]] 379*da2e3ebdSchin as syntax errors has been fixed. 380*da2e3ebdSchin i. A function defined as foo() without a function body 381*da2e3ebdSchin was not reported as a syntax error. 382*da2e3ebdSchin j. A bug in which ksh could run out of file descriptors when 383*da2e3ebdSchin a stream was repeatedly opened with exec and read from 384*da2e3ebdSchin has been fixed. 385*da2e3ebdSchin k. A bug introduced when fixing item n from the 'g' point 386*da2e3ebdSchin release has been fixed. 387*da2e3ebdSchin 388*da2e3ebdSchin15. Bugs fixed in 12/28/93i for default OPTIONS 389*da2e3ebdSchin a. A bug in which a script could terminate when getopts 390*da2e3ebdSchin encountered an error when invoked inside a function 391*da2e3ebdSchin has been fixed. 392*da2e3ebdSchin b. When a symbolic link was specified as the name of 393*da2e3ebdSchin the script to invoke by name, the value of $0 was 394*da2e3ebdSchin set to the real file name rather than the link name 395*da2e3ebdSchin in some cases and this has been fixed. 396*da2e3ebdSchin 397*da2e3ebdSchin16. Bug fixes for specific non-default option combinations. 398*da2e3ebdSchin a. More signal names have been added for Solaris 399*da2e3ebdSchin b. A bug fixed for the v directive in vi MULTIBYTE has been 400*da2e3ebdSchin fixed. 401*da2e3ebdSchin c. Code to for IFS handling of multibyte characters has 402*da2e3ebdSchin been added. 403*da2e3ebdSchin d. The displaying of multibyte strings in export, readonly, 404*da2e3ebdSchin typeset, and execution traces has been fixed. 405*da2e3ebdSchin e. A bug with type ahead and KEYBOARD traps with the 406*da2e3ebdSchin MULTIBYTE option set has been fixed. 407*da2e3ebdSchin f. The k-shell information abstraction database option, KIA, 408*da2e3ebdSchin has been revamped for the 'e' point release. 409*da2e3ebdSchin g. A bug in brace pattern expansions that caused expressions 410*da2e3ebdSchin such as {foo\,bar,bam} to expand incorrectly have been fixed. 411*da2e3ebdSchin h. On the U/WIN version for Window 95 and Windows NT, 412*da2e3ebdSchin when a directory beginning with a letter followed by 413*da2e3ebdSchin a colon is given to cd, it is assumed to be an absolute 414*da2e3ebdSchin directory. 415*da2e3ebdSchin i. There was a bug in the compile option that does not 416*da2e3ebdSchin use fork() in which the current option settings where 417*da2e3ebdSchin not propagated to sub-shells. 418*da2e3ebdSchin j. A bug in setting .sh.editchar during the KEYBD trap 419*da2e3ebdSchin for the MULTIBYTE option was fixed in release 'h'. 420*da2e3ebdSchin k. A bug in which the precision given as an argument 421*da2e3ebdSchin to printf was not working has been fixed. 422*da2e3ebdSchin 423*da2e3ebdSchin17. Other changes to 12/28/93[abcdefghi] 424*da2e3ebdSchin a. A couple of minor changes to make adding built-ins easier. 425*da2e3ebdSchin b. Variables inside functions are now statically scoped. 426*da2e3ebdSchin The previous behavior was never documented. 427*da2e3ebdSchin c. A few changes have been made to the name-value library 428*da2e3ebdSchin that affect built-ins that use disciplines. The 429*da2e3ebdSchin changes allow disciplines to be shared by variables 430*da2e3ebdSchin and should make it possible to add new disciplines 431*da2e3ebdSchin without recompilation. 432*da2e3ebdSchin d. The name-value library interface has undergone significant 433*da2e3ebdSchin change for this revision. See the new nval.3 man page. 434*da2e3ebdSchin e. Builtin functions can take a third argument which is 435*da2e3ebdSchin a void*. 436*da2e3ebdSchin f. The nv_scan() function can restrict the scope of a walk 437*da2e3ebdSchin to the top scope. Starting in 'f', nv_scan() has an 438*da2e3ebdSchin additional pointer argument that is passed to each invoked 439*da2e3ebdSchin function. 440*da2e3ebdSchin g. Starting with release 'f', an empty for list behave like 441*da2e3ebdSchin a for list with null expansions. It produces a warning 442*da2e3ebdSchin message with sh -n. 443*da2e3ebdSchin h. Starting with release 'f' the code has been modified to 444*da2e3ebdSchin work with EBCDIC as well as ASCII. 445*da2e3ebdSchin i. Starting with the release 'g', the name-value pair library 446*da2e3ebdSchin uses the cdt library rather than the hash library. 447*da2e3ebdSchin j. The sh_fun() function now takes third argument which 448*da2e3ebdSchin is an argument list for the invoked discipline function 449*da2e3ebdSchin or built-in. 450*da2e3ebdSchin k. A callback function can be installed which will give 451*da2e3ebdSchin notification of file duplications and file closes. 452*da2e3ebdSchin 453*da2e3ebdSchin18. Incompatibilities with 12/28/93 version. 454*da2e3ebdSchin None intentional. 455*da2e3ebdSchin 456