home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / SHELLS / shell.lzh / DOC / changelog.sh next >
Text File  |  1997-06-23  |  85KB  |  1,553 lines

  1. Fix    Date & Item
  2. ---    -----------
  3.  
  4. >>>>>> General release. Upload to os9archive.rtsi.com.
  5.  
  6. #69    06/21/97
  7.      - The '~username' construct did not work correctly, if a user name
  8.        contained the '_' symbol, the name part before the '_' was not unique,
  9.        and the '_' containing user name appeared in the password file after
  10.        the other, fixed.
  11.  
  12. <<<<<< Version 2.1, Edition 69.
  13.  
  14. >>>>>> Beta release produced for Kei Thomsen at Microware Germany.
  15.  
  16. #69b   05/17/97
  17.      - Mware installation scripts were no longer running under 'sh'! The
  18.        offensive line
  19.          ex isexec (unsplit /u0 ! zoo fu ! pax -ep -ef -purovf -)
  20.        contains a '(' symbol that 'shell' and 'mshell' consider as a surrogate
  21.        for a single quote but 'sh' (same as bash) takes as a subshell fork
  22.        request. Applied the following modification to 'sh' that is not
  23.        compatible to bash but should not cause problems while executing a
  24.        syntactically correct 'bash' script: The '(' is only taken as a
  25.        subshell fork request, if it is the first non-whitespace character in a
  26.        command; it is taken as a quote, otherwise.
  27.      - Appending to a device unable to seek, e.g.
  28.          echo 123 >>/nil
  29.        or
  30.          echo >+/nil
  31.        produced an error message. There is, however, no reason to consider
  32.        this as error condition ('shell' and 'bash' also do not); implemented
  33.        this feature.
  34.  
  35. <<<<<< Version 2.1, Edition 69beta.
  36.  
  37. >>>>>> Released for Microware.
  38. >>>>>> EFFO disk released.
  39.  
  40. #68    03/21/97
  41.      - Ctrl-E from keyboard sometimes sent signal 0 instead of 2 to the child
  42.        process, fixed.
  43.      - Reverse-incremental history search could only be left using one of the
  44.        arrow-left, arrow-right keys (normal and alternate settings); added
  45.        begin-of-line and end-of-line keys (normal and alternate settings) for
  46.        this purpose.
  47.      - If a built-in command such as 'set' or 'printenv' was preceded by an
  48.        initial assignment and redirected to a pipe, the dynamic pipe buffer
  49.        allocation did not work which could lead to a dead-lock; fixed.
  50.      - If an attempt was made to set a read-only shell variable, the
  51.        appropriate error message appeared but the variable was, nevertheless,
  52.        deleted. This bug appeared first in edition #66 when introducing
  53.        temporary variable assignments followed by a commmand.
  54.      - Introduced default shell variable PPID (parent process ID) that is
  55.        identical to ${~} and ${~1} - again to make 'sh' as compatible as
  56.        possible to big brother 'bash'.
  57.      - Introduced default shell variables PWD and OLDPWD. PWD is identical to
  58.        CWD (current working directory as set by 'cd' or 'cwd'), and OLDPWD is
  59.        identical to LWD (previous working directory as set by 'cd' or 'cwd').
  60.        PWD and OLDPWD are CWD's and LWD's counterparts in 'bash', the
  61.        variables CWD and LWD will be maintained for the sake of compatibility.
  62.  
  63. <<<<<< Version 2.1, Edition 68.
  64.  
  65. >>>>>> EFFO disk released.
  66.  
  67. #67    01/17/97
  68.      - Did you know that _gs_devn(path, buffer) requires a buffer of at least
  69.        42 (!) characters and not only 32 (as indicated in the manual), if the
  70.        first argument is an NFM path? This is why sh edition #65 and #66 did
  71.        no longer work, if invoked via chp and why the built-in command 'tty'
  72.        never worked on an NFM path. Fixed both.
  73.      - Added leading slash to the output of the built-in command
  74.        'tty [<port>]' to make it behaving similarly to the same command in
  75.        'bash'.
  76.      - Fork shells and other programs defined using the #!<prog> syntax are
  77.        now also searched in the directories contained in the PATH environment
  78.        variable, if not already in memory and not in current execution
  79.        directory.
  80.  
  81. <<<<<< Version 2.1, Edition 67.
  82.  
  83. >>>>>> EFFO disk released.
  84.  
  85. #66    12/30/96
  86.      - If an attempt was made to complete names in an NFS-mounted UNIX
  87.        directory without having sufficient user privileges to do so, 'sh'
  88.        could crash; fixed.
  89.      - Release incremented to V2.1.
  90.      - If a command was preceded by an initial assignment, e.g.
  91.          abc=123 sh -c 'echo $abc'
  92.        the variable was not made exportable and, therefore, not available in
  93.        the environment of the child process; fixed. The newly set variable may
  94.        now also shadow an already existing variable; the previous value and
  95.        all previous status settings (export, readonly etc.) are restored after
  96.        completion of the command. This construct is used by the X11 script
  97.        'xon' which can now be used to start an xterm client session under
  98.        OS-9 via rsh.
  99.      - If a built-in command such as 'set' or 'printenv' was called at a time
  100.        when more than 8k environment variables were available (long variable
  101.        names and/or long strings assigned to them), the pipe buffer was not
  102.        large enough leading to a dead-lock. This does not happen anymore,
  103.        since the pipe buffer size is adapted dynamically now.
  104.      - Expanded syntax of built-in commands 'export' and 'readonly'. These
  105.        commands may now be followed by an assignment. For example,
  106.          export MYTERM=vt220 USERLEVEL=power
  107.        causes the variables MYTERM and USERLEVEL to be set and made
  108.        exportable using a single command. It is entirely equivalent to
  109.          MYTERM=vt220 USERLEVEL=power
  110.          export MYTERM USERLEVEL
  111.        or
  112.          setenv MYTERM vt220
  113.          setenv USERLEVEL power
  114.      - Made 'printenv' a built-in command. This version excepts a single
  115.        argument or several ones, e.g.
  116.          printenv HOME USER
  117.        that are output, one per line, in the specified order. Unavailable
  118.        variables are silently ignored.
  119.      - Bus error no longer occurs, if EOF encountered while reading from here
  120.        document.
  121.      - Merging in append mode, e.g '2>>&3', did not work, fixed.
  122.      - Moved reserved path numbers (copy of standard paths and error message
  123.        file path) to _NFILE-4 to _NFILE-1. All remaining one-digit numbers
  124.        (3, 4, 5, 6, 7, 8, 9) are now available for user purposes and are
  125.        passed to a child process, if used.
  126.      - Improved error messages, if access of redirected files fails. 
  127.      - If a redirection error occurred, the $? variable did not contain the
  128.        appropriate error number, fixed.
  129.      - Increased maximum size of history buffer to 500.
  130.  
  131. <<<<<< Version 2.0, Edition 66.
  132.  
  133. >>>>>> EFFO disk released.
  134.  
  135. #65    10/13/96
  136.      - If two grave constructs on the same input line were not separated by
  137.        white space, e.g.
  138.          echo `pwd`:`pwd`
  139.        end of the grave expression was not correctly determined, fixed.
  140.      - Implemented reverse-incremental history search (default key is Ctrl-r,
  141.        termcap capability identifier is 'kQ'). This 'sh' command line edit
  142.        function is similar to its implementation in 'Emacs' and 'bash': Browse
  143.        through the history lines from most recent to least recent entry. The
  144.        enter key executes the retrieved history line; left-arrow, right-arrow
  145.        and backspace are used to copy it to the command line; any other key
  146.        discards the history selection and resumes command line editing. A more
  147.        detailed description has been added to the manual.
  148.      - A shell script may now contain the backspace character - 'sh' no longer
  149.        considers such files as binary files.
  150.      - Implemented environment variable CDPATH. It may contain a colon
  151.        separated list of directories to search when the argument to 'cd' is
  152.        not found in the current directory (same as in 'bash').
  153.  
  154. <<<<<< Version 2.0, Edition 65.
  155.  
  156. >>>>>> EFFO disk released.
  157.  
  158. #64    08/21/96
  159.      - Implemented test options '-h' and '-L' (test whether argument is
  160.        the name of an existing symbolic link). This test always returns
  161.        false; it is provided for the sake of compatibility only.
  162.      - The first digit of the resized stack size (#<stack>) was not always
  163.        considered, fixed.
  164.      - Implemented 'select' language construct and PS3 environment variable
  165.        (same as in 'bash'). Added related paragraphs to the manual.
  166.  
  167. <<<<<< Version 2.0, Edition 64.
  168.  
  169. #63    07/01/96
  170.      - Any explicitly specified prefix './' in a command name is now silently
  171.        replaced by '$CWD/'. The command
  172.          sh ./script
  173.        can, therefore, be used to start the shell script 'script' from the
  174.        current data directory even without specifying the '.' in the PATH
  175.        environment variable. This feature was already available but has been
  176.        lost somewhere between edition 52 and 62.
  177.      - Sub-shell expressions '(...)' erroneously have been executed without
  178.        the '-x' flag set. Therefore, the script
  179.          list ill=egal; list /dd/startup
  180.        correctly aborted after the first command, but the script
  181.          (list ill=egal; list /dd/startup)
  182.        did not. Fixed this problem by defining the '-x' flag in sub-shell
  183.        expressions by default as required.
  184.      - If file or command name completion fails and the template string
  185.        contains at least one slash ('/') that is not the first character,
  186.        template matching is retried after conversion to upper case (for NFS).
  187.      - Command completion is now also enabled, if the word to be completed is
  188.        the first word after the concurrent or sequential execution symbol
  189.        ('&' or ';') and there is exactly one space between the symbol and
  190.        the word.
  191.      - Any language construct element such as 'do' or 'for' and the built-in
  192.        command 'test' were not allowed as a case pattern, fixed.
  193.  
  194. >>>>>> EFFO disk released.
  195.  
  196. <<<<<< Version 2.0, Edition 63.
  197.  
  198. #62    06/18/96
  199.      - The non-interactive script syntax of 'sh' is now so similar to 'bash'
  200.        that it is justified to add a 'bash'-specific book to the bibliography
  201.        at the end of the 'sh' manual.
  202.      - A non-interactive shell script now correctly aborts after evaluating
  203.        ${varname:?message}, if $varname is not defined or $varname has
  204.        zero length.
  205.      - A non-interactive shell script now correctly aborts after evaluating
  206.        ${varname?message}, if $varname is not defined.
  207.      - Introduced the colon (:) in all four string substitution operators
  208.        ${varname:-word}, ${varname:=word}, ${varname:?message} and
  209.        ${varname:+word}. The colon optionally changes the behavior of the
  210.        string substitution in such a way that the value of $varname is only
  211.        returned, if $varname exists and has not zero length. Without the
  212.        colon, $varname is also returned, if it exists but has zero length
  213.        (same as in 'bash').
  214.      - Introduced string operator ${#varname} that returns the string length
  215.        of $varname, if $varname is defined, or an empty string, if $varname is
  216.        undefined (same as in 'bash').
  217.      - Command completion is now also enabled, if the word to be completed is
  218.        the first word after one of the two pipe symbols ('!' or '|') and there
  219.        is exactly one space between the pipe symbol and the word.
  220.      - The end-of-word search of the delete-word command (default Esc-D) was
  221.        the same as in upper-char-word (default Esc-U) and friends, i.e.
  222.        end-of-word was defined as the first re-occurrence of an alphanumeric
  223.        character and not as the first occurrence of a non-alphanumeric
  224.        character. The algorithm is now the same as in the word-forward
  225.        command (default Esc-F), i.e. all characters beginning from the current
  226.        cursor position to the first subsequent non-alphanumeric character are
  227.        deleted.
  228.  
  229. >>>>>> Released for MGR window manager 2.1.0b1.
  230.  
  231. <<<<<< Version 2.0, Edition 62.
  232.  
  233. #61    06/09/96
  234.      - One or more newlines may now occur between a function header, e.g.
  235.        'func()', and the subsequent brace ('{'), same as in 'bash'.
  236.      - If a number higher than the highest integer number was entered, 'sh'
  237.        silently truncated the number to the 31 LSBs. An appropriate error
  238.        message is now output.
  239.      - The size of the stack resizer string space was not correctly checked.
  240.        As a result, utter chaos could occur when an attempt was made to set
  241.        the stack to a number of more than 10 digits in length. The problem
  242.        became apparent when people tried to remove sticky modules (modules
  243.        that have the ghost bit set) from memory by entering something like
  244.          <any command> #100000000000000000
  245.        which now works as expected. By the way, <any command> must be a
  246.        binary program to be forked. If <any command> is a shell built-in
  247.        command (such as 'echo'), no memory is allocated and, in consequence,
  248.        no sticky module is removed.
  249.      - The arguments of the source command ('.') temporarily become sh's
  250.        arguments (so that they are available in the $1, $2 .. $n shell
  251.        variable). $0 is temporarily set to the name of the sourced file and
  252.        $# is set to the number of arguments. The behavior is now the same as
  253.        in 'bash'.
  254.      - Introduced command line argument '-w' to enable DCD line watching:
  255.        If 'sh' is a login shell and standard input path allows for installing
  256.        DCD loss signal using _ss_dcoff(), 'sh' installs SIGHUP. If this signal
  257.        is received, 'sh' recursively kills all child processes and then exits
  258.        returning error E_HANGUP (220).
  259.      - If a child dies with SIGHUP or error E_HANGUP (error 220) and sh is
  260.        interactive, sh no longer writes an error message but immediately exits
  261.        and returns SIGHUP or E_HANGUP, respectively.
  262.      - In 'bash', the language construct elements 'fi' and 'done' can be
  263.        followed by a redirection symbol in which case all output from the
  264.        preceding expression is redirected, implemented this feature.
  265.        Unfortunately, there is still a difference between 'bash' and 'sh'
  266.        for OS-9: if one or more commands within the then/fi or do/done block
  267.        also redirect an output path, 'bash' lets them override the block
  268.        setting but 'sh' for OS-9 does not.
  269.      - Made allocation of internal command line string dynamic. This prevents
  270.        'sh' from exiting with bus error, if its command line is *very* long.
  271.  
  272. <<<<<< Version 2.0, Edition 60.
  273.  
  274. >>>>>> EFFO disk released.
  275.  
  276. #60    05/05/96
  277.      - Introduced option -C that, if set, disallows overwriting a file by
  278.        redirected output. This option not only makes 'sh' more compatible to
  279.        'bash' but also allows to simulate the redirection behavior of 'shell'.
  280.      - Blank evaluation of grave constructs was not always performed.
  281.      - If a shell procedure was started with a quoted argument, the $1
  282.        variable did not contain all arguments.
  283.      - Words in debug output are now quoted with double-quotes; this makes
  284.        it possible to differentiate between a single word containing
  285.        whitespace and a word list.
  286.      - A syntax error in a command passed using the '-c' command line option
  287.        was correctly analysed and a correct message written to screen, but the
  288.        line in error was not displayed, fixed.
  289.      - If the last line of a shell script contained a background command, the
  290.        shell returned with error 210 (bad page address), since the assembly
  291.        interface to os9exec() erroneously called munlink() with a NULL
  292.        pointer. As a consequence, any calling shell procedure that had not the
  293.        '-nx' option set, was interrupted prematurely. Removed the munlink()
  294.        call, since it is not needed in our modlinkp-free version of os9exec().
  295.      - If a large number of words had been found during name completion,
  296.        it could take several seconds to return the memory to the system when
  297.        the words were no longer needed: made this MUCH faster.
  298.      - Made history line completion more flexible: i) Completion search starts
  299.        at current history line and ii) current history line is set to the
  300.        match line, if search was successful.
  301.      - Command completion in PATH and execution directory (-g option) can now
  302.        be interrupted (helpful, if one of the PATH dirs or exec dir is very 
  303.        large or mounted via NFS and the TAB key was hit inadvertently as first
  304.        character in an empty input line.
  305.      - Display of commands found after command completion (TAB twice) can now
  306.        be interrupted. 
  307.      - Empty brackets '(  )' erroneously started an interactive shell. This no
  308.        longer happens, since 'sh' now does the same thing 'bash' and other
  309.        shells do: the sub-shell is forked with the -c option (exit after
  310.        reading and executing one command).
  311.      - A nonsense error message occurred, if sub-shell brackets were not
  312.        closed. Sub-shells were not correctly disassembled in functions.
  313.      - A syntax error in the command line was correctly analysed and a correct
  314.        message written to screen, but the line in error was not displayed,
  315.        fixed.
  316.  
  317. <<<<<< Version 2.0, Edition 60.
  318.  
  319. >>>>>> EFFO disk released.
  320.  
  321. #59    04/17/96
  322.      - The ')' bracket now closes a list similarly to ';' as it was always
  323.        the case in the original Bourne shell and in 'bash'. It is now possible
  324.        to write
  325.          if ( test -d /dd/CMDS ) then echo Exec dir found ; fi
  326.        all in one line (although there is really no reason to start a
  327.        sub-shell for the evaluation of the test command). Such constructs can
  328.        be found in UNIX makefiles.
  329.      - If 'sh' was started with arguments, e.g.
  330.          sh copy from to
  331.        and the first argument was an executable memory module ('copy' in
  332.        the example) but also another file in the PATH list or in the current
  333.        execution directory, the memory module was not considered. Under these
  334.        conditions, 'dsave' was unable to copy a file named 'copy' but tried to
  335.        execute the file as procedure, although 'copy' was available in memory.
  336.  
  337. <<<<<< Version 2.0, Edition 59.
  338.  
  339. #58    03/24/96
  340.      - Updated manual section 6.5. on shell variables accordingly.
  341.      - The Internal Field Separator IFS is now correctly handled for word
  342.        splitting after expansion and to split the input line of the 'read'
  343.        command into words.
  344.      - If the $* argument variable is expanded within double quotes, the
  345.        first character of the Internal Field Separator IFS is used to separate
  346.        arguments.
  347.      - If the $@ argument variable is expanded within double quotes, a
  348.        separate word is created for every argument.
  349.      - Removed the error check for line-feed characters in shell scripts,
  350.        since 'sh' for OS-9 now accepts both the Unix and the OS-9 line
  351.        delimiter in most cases. Line-feed does not yet work in here documents,
  352.        and in shell scripts that use specific OS-9 features. In case of syntax
  353.        error, the line in error is not yet correctly displayed, if line-feed
  354.        delimited. 
  355.  
  356. <<<<<< Version 2.0, Edition 58.
  357.  
  358. #57    03/23/96
  359.      - Improved error message for non-interactively evaluated grave
  360.        constructs.
  361.      - Made the shell variable interpretation more similar to the way 'bash'
  362.        (and also the UNIX Bourne shell) does it: If a shell variable contains
  363.        white space, e.g.
  364.          cmd='mfree -e'
  365.        blank interpretation is implicitly done after interpretation of the
  366.        shell variable so that the single word components are available
  367.        separately. The above command can, therefore, directly be executed:
  368.          $cmd
  369.        Earlier versions of 'sh' for OS-9 displayed the error message
  370.          mfree -e: invalid path name
  371.        because the entire string (including the space between the two words)
  372.        was regarded as file name. The newly implemented blank interpretation
  373.        also takes place when loop variables are evaluated, e.g. the following
  374.        loop
  375.          a='1 2 3'
  376.          b='4'5'6'
  377.          for i in $a $b
  378.          do
  379.            echo $i
  380.          done
  381.        is now executed six times as in 'bash' and not two times as in earlier
  382.        'sh' versions.
  383.      - Made the 'read' command more similar to the way it is implemented in
  384.        'bash':
  385.        1. If a single variable is to be read, white space is maintained, e.g.
  386.        # read a
  387.            1234    5678
  388.        # echo "$a"
  389.            1234    5678
  390.        2. If more than one input variable is specified, whitespace is squeezed,
  391.        e.g.
  392.        # read a b
  393.            1234    5678
  394.        # echo "$a" "$b"
  395.        1234 5678
  396.        Section 8.30. of the manual now contains a correct description of all
  397.        implementation details of the 'read' command. 
  398.      - The input buffer of the 'read' command in no longer limited in size but
  399.        is allocated dynamically (same as normal line input buffer).
  400.      - If the Bourne-shell comment symbol '#' was the first word in a line
  401.        and followed by a number, it was not recognized as comment but as stack
  402.        resizer, although this is also not a legal syntax in 'shell'. 
  403.      - The built-in 'read' now accepts input from a pipe; this makes it
  404.        possible to realize a simple string parser, e.g.
  405.          # echo arg1 arg2 | read a b
  406.          # echo $a
  407.          arg1
  408.          # echo $b
  409.          arg2
  410.      - All intermediate pipes are now correctly closed - even if the pipe
  411.        symbol is (incorrectly) placed between a command and a shell built-in
  412.        that is not able to receive input from a pipe.
  413.      - Memory was not always correctly returned after executing F$Fork, fixed.
  414.  
  415. <<<<<< Version 2.0, Edition 57.
  416.  
  417. #56    03/17/96
  418.      - String space for grave expression is now allocated dynamically.
  419.      - Errors during grave evaluation did not necessarily stop the parser,
  420.        fixed.
  421.      - Unbalanced quotes in a grave construct could lead to an endless loop.
  422.        An appropriate error message is now written (same as in non-interactive
  423.        mode) and 'sh' no longer hangs.
  424.      - Replaced character macros by appropriate functions (another step
  425.        towards 8-bit compatibility - but still far away!). 
  426.      - If an 'sh' procedure was called from system() without intermediate
  427.        shell, e.g. system("procedure arg1 arg2"), $0 as seen from the
  428.        procedure contained the entire string except just the procedure's name,
  429.        fixed.
  430.  
  431. >>>>>> EFFO disk released.
  432.  
  433. >>>>>> Released for MGR window manager, drop-in release V2.0.1.
  434.  
  435. <<<<<< Version 2.0, Edition 56.
  436.  
  437. #55    02/18/96
  438.      - Now! Grave constructs (`...`) are executed internally without 
  439.        necessarily forking an intermediate shell. In consequence, shell
  440.        functions, aliases, scripts etc. can be executed in a grave construct.
  441.        Removed this item from todo list.
  442.      - Made 'sh' smaller by about 500 Byte: we now have our own os9exec() that
  443.        does not need modloadp() nor getenv(). In consequence, an interactively
  444.        modified PATH setting is also considered during evaluation of a grave
  445.        (`...`) construct.
  446.      - If an attempt is made to kill a process by specifying the name of a
  447.        module that is running more than once, the question whether to kill all
  448.        processes now also contains the device names of the first three I/O
  449.        paths of the affected process IDs.
  450.      - A concurrently running 'sh' task could hang, if a built-in command 
  451.        was redirected to a named pipe and the size of the output data
  452.        exceeded the default pipe buffer size (usually 90 Byte). A
  453.        mechanism similar to the one already implemented for unnamed pipes
  454.        now also protects named pipes from such unwanted behavior.
  455.      - Modified sh's own termcap library in such a way that the TERMCAP
  456.        environment variable is taken from the current set of exported
  457.        variables. Any modification of the TERMCAP environment variable may,
  458.        therefore, made available to the current 'sh', if TERM is set to the
  459.        terminal type that is described in the modified TERMCAP string.
  460.      - If an attempt is made to kill a process by specifying the name of a
  461.        module that is running more than once, the question whether to kill all
  462.        processes now also contains the affected process IDs.
  463.  
  464. >>>>>> EFFO disk released.
  465.  
  466. <<<<<< Version 2.0, Edition 55.
  467.  
  468. #54    01/31/96
  469.      - Incremented version and edition.
  470.      - Implemented Mware's condensed I/O redirection syntax, e.g. "<>>>".
  471.        Removed this item from the list of incompatibilities to the Mware
  472.        shell, expanded related manual section.
  473.      - Implemented 'kill <name>' syntax to kill a process by its module name.
  474.        If the module is running more than once, a message is displayed so that
  475.        either all processes or none may be killed. Expanded manual section
  476.        accordingly.
  477.      - The prompt string (PS1) may now contain '\n' to indicate a new line.
  478.      - The at symbol ('@') is now also treated as start-of-filename character
  479.        for TAB file name completion. Helpful for completion of emacs script
  480.        names.
  481.      - The error message file is only opened when 'sh' is interactive or when
  482.        required.
  483.      - Linked patched version of termlib.l that references '/dd/SYS/termcap'
  484.        instead of '/dd/sys/termcap' so that it can also be used on systems
  485.        where /dd is mounted on a file server that distinguishes character case
  486.        in a file name.
  487.      - Not only the exclamation mark ('!') but also the caret symbol ('^') can
  488.        now be used to invert the sense of a character class in a regular
  489.        expression. For example, the two expressions
  490.          [!a-z]*
  491.        and
  492.          [^a-z]*
  493.        both match any files that do not begin with a lower case character. 
  494.      - Optimized global expression matcher. Merged several functions into
  495.        one single module so that more functions can be inlined.
  496.  
  497. <<<<<< Version 1.8, Edition 54.
  498.  
  499. >>>>>> EFFO disk released.
  500.  
  501. #53  - 01/08/96
  502.      - Expanded automatic script execution: The following rules apply:
  503.        First character(s) of script       Executor
  504.                   #                          sh
  505.                   @                          zsh       (new)
  506.                   -                          shell
  507.                   *                          shell
  508.                   ~*                         cfp       (new!)
  509.                   #!<prog>                   <prog>
  510.        The cfp-hack (~*) works quite well: Just include '~*' as the first
  511.        line into a cfp-script; the script may then be called by entering its
  512.        name as if it were a command. 'sh' will take care to fork 'cfp' and to
  513.        pass the script name as argument.
  514.      - 'sh' now behaves more similarly to 'shell' when standard input path
  515.        is redirected to a pipe:
  516.        1. When the pipe becomes empty, 'sh' no longer exits.
  517.        2. Prompt is displayed.
  518.        3. EOF is safely received when the process at the other side of the
  519.           pipe has exited.
  520.      - The above changes made it necessary to introduce a special mode when
  521.        'sh' has been forked by 'cfp':
  522.        1. 'logout' is not printed, if EOF is received.
  523.        2. No prompt is displayed.
  524.      - A bug in the expression matcher prevented quoted case templates that
  525.        contained a non-alpha character such as the underline symbol ('_') from
  526.        being correctly recognized, fixed.
  527.      - If a fully qualified script file had the execution attribute set,
  528.        its name was incorrectly appended to the name of the current execution
  529.        directory (e.g. '/dd/CMDS//dd/MYDIR/script') instead of being used
  530.        unmodified. Fixed this bug that also affected fully qualified script
  531.        files on an NFS device, even if they had the execution attribute NOT
  532.        set.
  533.      - Renamed 'changelog' to 'changelog.sh' so that it can go into a general
  534.        DOC directory without name conflicts with other changelog files. 
  535.      - Optimized command line editing using termcap's 'ce' entry, if
  536.        available. Browsing through history with the cursor up/down keys is now
  537.        much quicker on vt100 and other terminals.  
  538.      - Implemented $(<command>) evaluation syntax. 'ksh' uses this syntax
  539.        instead of the grave `<command>` syntax, but the behavior is identical.
  540.      - 'sh' no longer writes silly messages such as 'nowhere found', if a
  541.        shell script contains non-ASCII characters such as German umlauts etc.,
  542.        since 8-bit characters between 0xc0 and 0xff are now also accepted.
  543.        If, however, processed by 'sh', the sign bit of the 8-bit character is
  544.        lost.
  545.      - If a signal with a large number (>4424) was sent to sh, a bus error
  546.        occurred; this no longer happens. 
  547.      - The parser was not always correctly reset after error processing, e.g.
  548.          # for i in 1 2 3
  549.          > echo
  550.          Word unexpected
  551.          # for i in 1 2 3
  552.          for: nowhere found
  553.        This irregular behavior has been fixed.
  554.      - The 'cls' function did not always work when executing a shell script,
  555.        fixed.
  556.      - Irrespective of whether logged out by 'Esc', aborted with SIGHUP,
  557.        SIGTERM or SIGTERMOLD, or by typing 'logout', the command 'logout' is
  558.        now always pushed onto history stack. An additional comment is added
  559.        to identify which one of the logout mechanisms was used. Only in case
  560.        the user regularly logged out by typing 'logout' (may also be aliased),
  561.        a comment is not appended. 
  562.      - Renamed example script 'backup' to 'xcopy'.
  563.      - Modified debug output in trace mode.
  564.  
  565. <<<<<< Version 1.8, Edition 53.
  566.  
  567. >>>>>> Released for MGR window manager, final release V2.0.
  568.  
  569. #52  - 08/07/95
  570.      - If '-l' option is set, EOF can now be entered by hitting twice the
  571.        end-of-file character (normally Escape) at beginning of an input line.
  572.        EOF entered at prompt level causes 'sh' to logout; EOF entered in
  573.        'read' command causes the 'read' command to abort, to return false and
  574.        to leave the input variable unchanged.
  575.      - Here documents in functions now work - removed item from 'To do' list.
  576.        Temporary files for such here documents persist until the function is
  577.        removed (overwritten or deleted using 'set -f <name>). In addition, 
  578.        'sh' implicitly deletes all functions before exiting, so that all
  579.        temporary files are safely removed.
  580.      - Enabled keyboard abort and keyboard interrupt when waiting for input
  581.        in built-in command 'read' (only if cursor at beginning of line).
  582.        Suppressed display of signal name, if '-i' option is not set, e.g.
  583.        during script execution. 
  584.  
  585. >>>>>> EFFO disk released.
  586.  
  587. >>>>>> Released for MGR window manager 2.0b_p11.
  588.  
  589. <<<<<< Version 1.8, Edition 52.
  590.  
  591. #51  - 07/24/95
  592.      - Introduced '-f=<profile>' command line option to enable reading of a
  593.        user-defined profile file. It is processed last, i.e. after '~/.login',
  594.        '/dd/sys/profile' and '~/.profile' so that settings in these files may
  595.        be overwritten.
  596.      - Introduced '-r' command line option to suppress processing of default
  597.        profile files ('~/.login', '/dd/sys/profile', '~/.profile',
  598.        '/dd/sys/sh.logout' and '~/.logout' ).
  599.      - Strings that have been read using the 'read' command are now also
  600.        pushed onto the history stack.
  601.      - When 'sh' resumed execution after having forked a program that modified
  602.        the current keyboard mode, e.g. using the 'ke' termcap entry, the
  603.        keyboard mode was not updated appropriately, fixed.
  604.      - Commands in parentheses are now expanded before being processed.
  605.      - Arguments to the 'break' and 'continue' command were omitted from the
  606.        related description in the manual, added.
  607.      - When a 'break' or a 'continue' command appeared in nested for, while
  608.        and until loops and command execution resumed not at the outer loop,
  609.        the word list of the 'break' or 'continue' command was corrupted
  610.        resulting in bus error or other fatal problems. Fixed this bug that
  611.        was due to a conceptual problem in the rewind mechanism of the
  612.        execution stack.
  613.      - Introduced unsettable read-only variable SH_VERSION containing sh's
  614.        edition number.
  615.      - When Ctrl-C or Ctrl-E were hit during the built-in command 'read', the
  616.        message strings "Cancel" or "Interrupt", respectively, were written
  617.        twice, fixed.
  618.      - The '$HOME/.sh_history' file was not always correctly read, if the
  619.        -h=<lines> option was specified in addition to the HISTORY environment
  620.        variable, fixed.
  621.      - Improved error handling of the command line argument parser. This also
  622.        provides correct return values of the 'set <option>' built-in command.
  623.      - Implemented language construct element '!' (not) that may appear after
  624.        'if', 'elif', 'while', 'until', '||' and '&&'. For example, the command
  625.        sequence
  626.          if condition
  627.          then
  628.            :
  629.          else
  630.            command
  631.          fi
  632.        can now be written as
  633.          if ! condition
  634.          then
  635.            command
  636.          fi
  637.        The syntax is equal to the syntax implemented in 'bash' and is intended
  638.        for better readibility of the script code. Expanded descriptions
  639.        of the 'if', 'elif', 'while', 'until', '||' and '&&' constructs in the
  640.        manual and added new paragraph describing the '!' language construct
  641.        element.
  642.      - Display of variables and functions ('set' command) can now be
  643.        interrupted.
  644.      - Interactive loops could no longer be interrupted, fixed.
  645.      - Modified effect of the '-i' option: Shell error messages are now only
  646.        printed, if this option is set. This is the default in an interactive
  647.        'sh' session. During execution of an 'sh' script, by default this
  648.        option is not set so that shell error messages are suppressed.
  649.      - Break/continue level was corrupted after function execution as part
  650.        of an 'if' construct, fixed.
  651.      - Display of alias and history lists can now be interrupted. Pending
  652.        interrupts are now always processed before entering the line editor.
  653.      - Improved error message, if execution fails: When an invalid path name
  654.        is specified, 'sh' no longer writes "not found" but the correct error
  655.        message "invalid name".
  656.  
  657. <<<<<< Version 1.8, Edition 51.
  658.  
  659. >>>>>> EFFO disk released.
  660.  
  661. #50  - 06/27/95
  662.      - Rewritten the argument parser so that the entire command line is
  663.        always treated as if it had been entered as an interactive command.
  664.        In consequence, any legal 'sh' command line can now be passed to the
  665.        C library function system(), if the SHELL environment variable is
  666.        set to 'sh'. This includes grave constructs as well as shell variables
  667.        etc.
  668.      - Improved termcap sequence to erase edit line from cursor to end of
  669.        line.
  670.      - The SHELL environment variable is no longer considered by 'sh'!
  671.        Procedure shell is 'sh', if not specified otherwise ('*' or '-' as
  672.        first character in a script or using the '#!<prog>' syntax).
  673.      - Sorry! Although I did my very best, I was unable to keep my promise
  674.        to let sh not exceed 64 kByte in size. I will, of course, continue to
  675.        keep it as small as possible.
  676.      - Reworked the debug option: debugging may now be specified either using
  677.        the '-[n]d' option (as before) that enables all trace modes or using
  678.        the newly available '-[n]d=<mode>' option syntax to separately enable
  679.        or disable a specific trace mode. The argument <mode> may be one of
  680.        'args', 'evalg', 'fork', 'grave', 'insert', 'match', 'search' or
  681.        'trace'. In addition, the SHDEBUG environment variable is now set
  682.        accordingly whenever debug mode changes so that all subsequent shells
  683.        are set, by default, to the same debug mode as the parent shell. It is,
  684.        however, also possible to explicitly set SHDEBUG to another value.
  685.        Values and significance of the <mode> strings are explained in the
  686.        manual.  
  687.      - Redefined the 'kS' termcap capability (default Ctrl-G) that was used to
  688.        clear the history buffer and to reset the terminal's SCF options. Now,
  689.        it only resets the terminal options and no longer affects the history
  690.        buffer. The history buffer can be cleared by entering the
  691.          history 1
  692.          history <num>
  693.        command sequence.
  694.      - Implemented two new modes to the 'history' command: when 'history read'
  695.        is entered, the file '$HOME/.sh_history' is read in the same way as
  696.        when 'sh' starts. The current contents of the history buffer are
  697.        written to '$HOME/.sh_history' when 'history save' is entered (same as
  698.        at logout). In addition, 'history' now writes a usage message, if '-?'
  699.        or an invalid argument is entered.
  700.      - Every time the size of the history buffer is redefined, the environment
  701.        variable HISTORY is now updated implicitly. Changing the value of
  702.        HISTORY using the
  703.          setenv HISTORY <num>
  704.        command does not influence the current history buffer size, but the new
  705.        value is taken as default buffer size in any subsequently started
  706.        interactive 'sh' session. Added related paragraph to the manual.
  707.      - Made 'pd' even more similar to the way Mware does it. This was required
  708.        for a file manager that has DT_RBF descriptors but, actually, refuses
  709.        to do many things RBF does. Unfortunately, Mware's pd works with it...
  710.      - Mware's comment symbol '*' (if at beginning of a line) was not
  711.        re-enabled after execution of a case...esac block. Normally, it is only
  712.        disabled when parsing a case construct to allow for wildcard case match
  713.        conditions, since they often start at the beginning of a line. 
  714.  
  715. <<<<<< Version 1.8, Edition 50.
  716.  
  717. >>>>>> EFFO disk released.
  718.  
  719. #49  - 06/19/95
  720.      - The '$-' variable did not always reflect the currently set options
  721.        correctly.
  722.      - Empty strings could lead to a bus error during function search, fixed.
  723.      - The rest of a line in error was not always discarded completely as it
  724.        should.
  725.      - The first line of a multi-line block (such as 'do...done') was not
  726.        allowed to have a reserved syntax element at any position in the line
  727.        and not only as first word as it should, fixed.
  728.      - Implemented 'w' command that waits for any one child process to
  729.        terminate (compatibility to the Mware shell).
  730.      - Added error check to the 'wait' command: an error message is produced,
  731.        if the specified process id is not a child process.
  732.      - Implemented history line completion: if the first character of an input
  733.        line is the exclamation mark ('!') followed by a match string and the
  734.        completion key is entered, the most recent history line that matches
  735.        the string is inserted. History line completion never reports more than
  736.        one match, even if there are less recent entries that also match. In
  737.        contrast to the other completion modes, history line completion is not
  738.        limited to words - the entire history line including any white space is
  739.        inserted. If the exclamation mark is followed by a number, the history
  740.        line at this line number is taken. This makes it now possible to easily
  741.        recall and edit a less recent history line - many people asked for this
  742.        feature.
  743.      - The 'echo' command wrote a zero character when an empty backslash
  744.        expression was specified, fixed.
  745.      - Command name completion improved: Matching strings are still ordered
  746.        alphabetically but the groups appear now in the same order as they
  747.        would be considered for execution. In addition, the display of the list
  748.        with matching words can now be interrupted.
  749.      - Added '-m' option to the built-in command 'test' that returns true, if
  750.        the argument is an existing memory module. Note that this does not
  751.        imply that a process can link to it.
  752.      - Modified getwd() so that it is more compatible with the way Mware does
  753.        it.
  754.      - Subdirectories of PATH directories were not searched for executable
  755.        files, fixed. Added '[search]' output to debug mode.
  756.      - The 'version l(anguage)' command erroneously did not display ')' as a
  757.        legal language construct element. The manual only contained a
  758.        description of ')' as part of the 'case' syntax; '(<command>)' was
  759.        not explained in the manual. Fixed both.
  760.      - Name completion is now also set to command name completion, if the
  761.        character before the word to be completed is a grave ('`') symbol.
  762.      - Modified error string "neither in PATH dirs nor in exec dir found",
  763.        since it would be correct to say that the name could not be found as
  764.        alias, function, built-in command, memory module, file in a PATH dir or
  765.        file in exec dir but this would probably provide confusion rather than
  766.        explanation. So we simply say "nowhere found".
  767.      - Fixing the below bug also removed another problem from the name
  768.        completion function that could cause memory leakage. 
  769.      - Fixed a nasty bug that could produce a bus error when TAB name
  770.        completion was attempted, more than one match were found, and a 
  771.        character was then entered that caused 'sh' to quit line editing (such 
  772.        as CR or Interrupt).
  773.      - Added escape sequence '\a' (alert) to built-in command 'echo' that lets
  774.        the terminal beep (0x07).
  775.      - First argument in shell scripts again was 'sh' instead of procedure
  776.        name. This already fixed bug was re-introduced when making 'sh'
  777.        compatible to Mware's 'login'.
  778.      - Empty strings in error and other messages are now displayed as
  779.        '<empty>'.
  780.      - Improved check whether one of the arguments to the 'read' command
  781.        specifies an invalid variable name.
  782.      - The 'clear screen' keycap sequence (Ctrl-G, kS) now restores the
  783.        initial terminal setting in addition to saving and clearing the history
  784.        buffer. Helpful when 'sh' has forked a program that did not restore the
  785.        terminal settings appropriately. The description of this keycap
  786.        sequence was omitted in the manual, added. 
  787.      - Expanded file name completion to a more general name completion:
  788.        1. If the first word in a line is being completed, commands are
  789.        matched. A command can be an alias, a shell function, a built-in
  790.        command, an executable program in the module directory or, optionally
  791.        (-g) a file in one of the execution directories (PATH variable or exec
  792.        dir).
  793.        2. If the first character of the word to be completed is a '$'
  794.        character, shell variables are matched (variable name completion).
  795.        3. If the first character of the word to be completed is a '~'
  796.        character, user names are matched (user name completion).
  797.        4. If none of the above applies, file names are matched (file name
  798.        completion). Modified the manual accordingly.
  799.      - Unsuccessful history match strings are now written to history buffer
  800.        so that they may be retried after editing.
  801.      - A bus error occurred when a history match was attempted but the
  802.        history buffer did not contain at least one valid entry, fixed.
  803.      - Made 'sh' about 2 kByte smaller by splitting C library modules into
  804.        smaller ones.
  805.      - Parentheses could not be used in test syntax, fixed. Added description
  806.        of such parentheses to the manual.
  807.      - In functions, the $# variable erroneously also considered the
  808.        function's name, i.e. it contained 1 when a function was called without
  809.        arguments. Now, it only contains the number of passed arguments as
  810.        required.
  811.      - Empty strings were passed to functions and programs, fixed.
  812.  
  813. <<<<<< Version 1.8, Edition 49.
  814.  
  815. >>>>>> EFFO disk released.
  816.  
  817. #48  - 06/07/95
  818.      - Made error message in case of test syntax error more verbose; in
  819.        addition, the line in error is now displayed and the offensive token
  820.        is marked.
  821.      - Unary test operators in string comparisons such as
  822.          opt=-x
  823.          if [ $opt = -x ]
  824.          then
  825.            echo hit
  826.          fi
  827.        were not accepted, since the syntax checker did not allow more than
  828.        one syntax element after the unary operator. This has been fixed: if
  829.        an unary operator is immediately followed by a '=' or '!=' syntax
  830.        element, the string comparison has priority.
  831.      - The "-?" string was taken as part of a wild card expression and global
  832.        match was attempted. This did not result in a user-noticeable bug, but
  833.        unnecessarily slowed down execution speed.
  834.      - When an alias was entered that specified a built-in command such as
  835.        'alias h history' and the standard output was redirected into a pipe,
  836.        the pipe's buffer size was not adjusted as it should so that 'sh' could
  837.        hang, fixed.
  838.      - If TOP's 'logon' is not available, Mware's 'login' is used to execute
  839.        the built-in command 'logon'.
  840.      - Alias expansion was enabled when searching for a case match string,
  841.        fixed.
  842.      - Improved syntax error message further.
  843.      - The built-in command 'chd' looped endlessly, if the new directory did
  844.        not have a correct OS-9 file structure with '.' and '..' entries in the
  845.        root level; a work-around is now provided.
  846.      - Made backslash processing in single and double quotes more similar to
  847.        'bash'.
  848.      - The syntax error message now contains the relative line number and the
  849.        line in error, if 'sh' is not interactive.
  850.      - Added '-p' option to the 'test' command; true if <arg> is an existing
  851.        path and is a named pipe.
  852.      - Did you know that
  853.          access("name", S_IWRITE);
  854.        does an
  855.          open("name", S_IWRITE);
  856.        which implicitly updates the date of the file's last modification?
  857.        This is the reason why
  858.          test -w name
  859.        unexpectedly also touched the file. Now, access() is no longer used so
  860.        that the last modification date remains unaltered after testing whether
  861.        a file has write access or not.
  862.      - When 'sh' was used in conjunction with the Mware 'login' instead of
  863.        the UNIX-compatible 'logon', 'sh' could not cope with the fact that
  864.        'login' passes the unprocessed password entry to the shell irrespective
  865.        of whether it contains white space or not. Added several workarounds
  866.        for this purpose.
  867.      - Break/continue level was corrupted after function execution, fixed.
  868.      - When 'unset' was entered with more than one argument and one of the
  869.        arguments specified a non-existing variable, 'unset' returned but did
  870.        not consider any remaining arguments as it should. Added '-?' usage
  871.        option to 'unset' and 'unsetenv'.
  872.      - Not any form of a regular expression was correctly considered during
  873.        TAB file name completion.
  874.      - Implemented selective stack checker so that a recursion such as in
  875.          func() {
  876.            func
  877.          }
  878.          func
  879.        no longer leads to a bus error but lets sh write an appropriate error
  880.        message and recover gracefully.
  881.      - The function re-assembler sent several spaces and carriage returns to
  882.        standard error path instead of standard output path.
  883.      - Repaired the 'case' syntax scanner and 'case' function re-assembler.
  884.        Several match conditions can now be or-ed together. Added example
  885.        function 'delfunc' to the list of shell scripts.
  886.      - The '[' symbol (alternative for 'test') was erroneously taken as part
  887.        of a regular expression and global match was attempted. This did not
  888.        result in a user-noticeable bug, but unnecessarily slowed down
  889.        execution speed.
  890.      - Added '[match]' output for debugging purposes.
  891.      - Enhanced syntax of 'setuid' command: argument may now be one of both
  892.        group.user number or user name, added '-?' option. 
  893.      - File name completion now also works on pipe devices.
  894.  
  895. <<<<<< Version 1.8, Edition 48.
  896.  
  897. >>>>>> EFFO disk released.
  898.  
  899. #47  - 05/13/95
  900.      - An incorrect error was returned, if redirection to a file failed during
  901.        script execution.
  902.      - The dot ('.') is no longer a valid part of a shell variable name;
  903.        therefore, a suffix can now be appended to a shell variable without
  904.        enclosing the variable's name into braces (with respect to this,
  905.        'sh' now behaves exactly like 'bash'). For the sake of compatibility,
  906.        however, variables with a dot-containing name are still accepted and
  907.        can be set using 'setenv' and '<var>=<value>' but can only be recalled,
  908.        if their name is included in braces '${name.dot}'. 
  909.      - The 'unset' command generated an error, if an attempt was made to unset
  910.        a non-existing variable. This was incorrect.
  911.      - Redirection to a file in directory '/tmp' is silently done to
  912.        '/dd/tmp'.
  913.      - When the 'Clear screen' key (kc) was entered during interactive input
  914.        of a here document, the wrong prompt was shown; fixed. 
  915.      - The EOF mark of a here document may now contain virtually all available
  916.        characters (except, of course, white space), as sometimes used in sh
  917.        scripts from GNU software (e.g. '!GROK!HERE!' etc.).
  918.      - History search symbols and aliased words were erroneously evaluated
  919.        in here documents, fixed.
  920.      - If 'fi' is followed by a redirection symbol, 'sh' no longer crashes
  921.        with a bus error.
  922.      - The 'for i do' syntax (loop through all command line arguments)
  923.        required a new line between 'i' and 'do', fixed. The 'for i in <list>'
  924.        syntax always requires a new line before 'do' (same as 'bash').
  925.      - Before forking a shell for script execution, the SHELL environment
  926.        variable is now temporarily set to the shell that is used for script
  927.        execution.
  928.      - 'set -h=<history>' could lead to a bus error, fixed.
  929.      - The current keycap setting may now be inspected using the 'version
  930.        [k]eycaps' command.
  931.      - Improved usage message.
  932.      - Terminal editing may now be made non-blocking ('-nb' option), i.e.
  933.        sh's standard input device may be used as output by another program
  934.        even while sh interactively waits for the next character to be entered.
  935.        Default is blocking (the default SCF behavior).
  936.      - The escape character (0x1b) is now accepted in a shell script. 
  937.      - Expanded paragraph on debugging: added a list that explains the various
  938.        debug messages.
  939.      - Warning, if 'read' specifies an illegal variable name.
  940.      - 'NO CARRIER' did no longer work, fixed.
  941.      - Improved selection mechanism to check whether a file can be used as
  942.        executable program or procedure file or whether it must be skipped.
  943.      - Improved error message, if input comes from binary file.
  944.      - Fixed a bug that caused quotes and double-quotes to disappear in
  945.        `...` constructs.
  946.      - Not only shell arguments ($0, $1, etc.) but also globals (wild cards,
  947.        regular expressions) in grave constructs are now evaluated before the
  948.        `...` string is executed.
  949.  
  950. <<<<<< Version 1.8, Edition 47.
  951.  
  952. >>>>>> Released for MGR window manager 2.0b.
  953.  
  954. #46  - 04/15/95
  955.      - Release number incremented, version number is now 1.8.
  956.      - Shell arguments ($0, $1, etc.) in grave constructs are now correctly
  957.        evaluated before the `...` string is executed. Happily removed this
  958.        topic from 'To do' list.
  959.      - Function disassembling as part of the 'set' command caused a bus error
  960.        when any one of the redirection symbols was encountered. Fixed another
  961.        bug that caused I/O merging (e.g. 2>&1) to be disassembled incorrectly.
  962.      - Added paragraph on debugging to the manual.
  963.      - The name of the currently running shell module is now used to evaluate
  964.        grave constructs and no longer the shell that is specified in the SHELL
  965.        environment variable.
  966.      - The manual has now a paragraph (4.3.) that gives a detailed description
  967.        of all available line editing commands.
  968.      - Added 'abandon line' edit command. The current edit line is copied into
  969.        paste buffer, the string "* Abandon *", a carriage return and a new
  970.        prompt are written to screen, and the current edit line is cleared.
  971.        Expanded related paragraph in the manual.
  972.      - When 'sh' was in Mware mode, here documents were not closed, fixed.
  973.      - When a syntax error was detected while 'sh' was in '-nx' mode (ignore
  974.        errors) command execution was blocked, fixed.
  975.      - When 'suspend <signal>' was executed all other signals were blocked.
  976.        Only the specified signal is now blocked, commands for other signals
  977.        that have been installed using the 'trap' command are still executed.
  978.      - Made 'pd' and 'pwd' shell built-in commands.
  979.      - The shell built-in 'exit' without an argument always returned 0 and
  980.        not the exit status of the last command executed as it should, fixed.
  981.      - The command 'cd -' is now equivalent to 'cd $LWD', i.e. the most
  982.        recent directory is made the current directory (same as in 'bash').
  983.      - When standard output was redirected to an already existing file that
  984.        was longer than the newly written output, the old file length was
  985.        maintained, fixed. This bug was inserted during implementation of the
  986.        'umask' built-in command.
  987.      - Actually, 'sh' uses only very few C library functions from the cio trap
  988.        handler so that the cio-free version is only 4 kByte smaller than the
  989.        cio version but requires about 16 kByte more static memory at run-time.
  990.        It is, therefore, decided to distribute the cio-free version only.
  991.        This facilitates distribution, gives complete OS-9 V3.0 compatibility
  992.        and saves system memory, especially if sh is running more than once.
  993.        In addition, sh may now be forked directly from sysgo without appending
  994.        the cio trap handler to the OS9Boot file.
  995.      - Increased maximum number of aliases to 100.
  996.      - A strange error message ("File not found") was written, if the end mark
  997.        of a here document was not found. A correct error message is now
  998.        written instead.
  999.      - TAB file name completion no longer requires a first character to be
  1000.        entered, so that <TAB><TAB> after a space displays all files in the
  1001.        current directory. If more than 100 files are available, the user is
  1002.        given the possibility to suppress the display. 
  1003.      - Improved deletion mechanism for temporary files that are created for
  1004.        here documents (yes, again!). Temporary files for quoted here documents
  1005.        are now also deleted correctly.
  1006.      - Improved error message in case a here file cannot be opened.
  1007.      - 'test -t <arg1>' required a path name as argument and did not work when
  1008.        a path number was specified, fixed. 
  1009.      - Written script 'backup' that is based on
  1010.          cd $destination
  1011.          (cd $source && tar c - *) | tar x - 
  1012.        and added to the collection of shell scripts in the SCRIPTS directory.
  1013.      - Some Mware script files contain the (questionable) syntax
  1014.          <command> & ;* <comment>
  1015.        that was not tolerated by sh. It is now considered valid, if not in
  1016.        Bourne mode, but only during script file execution. The same applies
  1017.        to nonsense such as ';;;' or '&&&' which is now accepted in Mware
  1018.        mode scripts, but not interactively.
  1019.      - Improved error description in case of syntax error (small changelog
  1020.        entry but important enhancement).
  1021.      - Implemented built-in command 'umask', added related paragraph to the
  1022.        manual. 
  1023.  
  1024. #45  - 03/19/95
  1025.      - Escaped dollar within double quotes is now taken literally and the
  1026.        escape character is omitted as it should.
  1027.      - Backslash processing for octal and hexadecimal numbers did not always
  1028.        work as expected; fixed and expanded the related paragraph in the
  1029.        manual.
  1030.      - The backslash character in single quotes was not ignored, fixed.
  1031.      - Added 'nohist' argument to the 'logout' command. It prevents 'sh', if
  1032.        specified, from saving the current contents of the history buffer
  1033.        to '$(HOME)/.sh_history'.
  1034.      - When a test command was evaluated to be false and the related 'fi'
  1035.        command was reached, the $? return variable was not reset, fixed.
  1036.      - If a command could not be executed, the $? return variable erroneously
  1037.        was set to 0 and not to the appropriate error number, fixed.
  1038.      - Aliasing did not work, if the alias was not a straight command. The
  1039.        following lines, for example,
  1040.          alias mkdir makdir
  1041.          if [ ! -d /dd/DIR ]; then mkdir /dd/DIR; fi
  1042.        now work without problem.
  1043.      - The closing grave must no longer be at the end of a word so that
  1044.        assignments such as val="`echo 123`" now work (such expressions can
  1045.        sometimes be found in makefiles from operating systems other than
  1046.        OS-9).
  1047.      - 'sh -c' without further arguments caused endless loop, fixed.
  1048.      - If sh is executing a script, the $0 argument variable no longer
  1049.        erroneously contains 'sh' but the name of the script.
  1050.      - The result from a grave construct is now (internally) quoted when
  1051.        assigned to a shell variable so that it may contain carriage returns.
  1052.        The 'set' and 'show' commands now indicate such carriage returns by
  1053.        displaying '\n'; other non-printables are also escaped. 
  1054.  
  1055. <<<<<< Version 1.7, Edition 44.
  1056.  
  1057. >>>>>> EFFO disk released.
  1058.  
  1059. #44  - 02/05/95
  1060.      - Added termcap entries 'ks' (start keypad transmit mode) and 'ke' (end
  1061.        keypad transmit mode). The 'ks' string is sent when sh enters
  1062.        interactive mode after the TERM variable is set or modified. The 'ke'
  1063.        string is sent before sh is finishing.
  1064.      - When sh was started with the -c option, return code was not always
  1065.        correct, fixed. 
  1066.      - The termcap data base is now only searched when sh goes for the first
  1067.        time into interactive mode (and, of course, when TERM changes). This
  1068.        avoids irrelevant error messages when TERM is only set in '.login',
  1069.        '/dd/SYS/profile' or '.profile'.
  1070.      - The dot command did not try the unprefixed file name in case PATH was
  1071.        undefined or did not contain the '.' entry.
  1072.      - Error message that TERM is not defined or not found appeared also in a
  1073.        non-interactive shell session, fixed.
  1074.      - Basic09 I-code is now correctly executed through 'Runb'.
  1075.      - Yeap! The asterisk at start of line and after semicolon is now treated
  1076.        as comment as in the Mware shell. In addition, an internal flag is set
  1077.        to Mware mode. Every subsequent occurrence of the '>>' symbol is then
  1078.        no longer recognized as append mode but as redirection of the error
  1079.        output path. The internal flag is reset to Bourne mode when the normal
  1080.        comment symbol '#' is encountered. Apart from less important
  1081.        differences, 'sh' and 'shell' are now COMPATIBLE!
  1082.  
  1083. #43    01/23/95
  1084.      - Input lines could be corrupted due to a pointer problem that was
  1085.        introduced when the word buffer was made dynamic, fixed. 
  1086.      - Removed the restriction that the TERM environment variable cannot be
  1087.        unset.
  1088.      - More than one option could not be specified in the command line, fixed.
  1089.        The same argument parser is now used for command line options and for
  1090.        the 'set' built-in command.
  1091.      - Any built-in command can now be interrupted using keyboard abort and
  1092.        quit (helpful for never ending loops etc.).
  1093.      - The name of a non-existing file in the -e=<file> option caused a bus
  1094.        error, fixed.
  1095.      - The -s option can no longer be set when in interactive mode.
  1096.      - Shell built-in commands in error stopped script execution in any case,
  1097.        irrespective of the '-x' flag setting, fixed.  
  1098.      - When a binary file was specified in a situation where a script file was
  1099.        expected, utter chaos could result; this is now intercepted.
  1100.      - Under rare conditions, sh could write the nonsense message "Signal #0
  1101.        received', fixed.
  1102.      - Built-in shell commands such as 'chd' and 'echo' are no longer
  1103.        case-sensitive except, of course, the 'NO CARRIER' hack.
  1104.      - The '.' and '..' directory entries are no longer considered when a '.'
  1105.        or '..' search string is followed by a wildcard or regular expression.
  1106.        In other words, 'dir .*' now lists only the files whose name starts
  1107.        with the '.' character (as it was always the case in the Mware shell).
  1108.      - 'sh <cmd>' did not work, if <cmd> was an executable program in the
  1109.        current working directory, fixed.
  1110.      - The '$?' return value incorrectly contained -1 when a program failed to
  1111.        execute, it now contains the program's exit code. 
  1112.      - Adapted 'unset' and 'unsetenv' to make them as compatible as possible
  1113.        to the original Bourne shell, to 'csh' and 'bash'.
  1114.      - Directory for temporary files is now silently created, if not yet
  1115.        available.
  1116.      - Unused temporary files are now removed more efficiently.
  1117.      - Reworked the input parser. Word buffer is now also allocated
  1118.        dynamically so that the length of both input line and input word
  1119.        is no longer limited by anything else than by the system's memory
  1120.        size (was necessary for very long TERMCAP environment variables).
  1121.      - An empty EMSG_FILE string could cause trouble, fixed.
  1122.      - Backslash processing was not disabled when collecting from a grave
  1123.        construct, fixed. Corrected 'which' script appropriately.
  1124.      - Introduced additional variable flag that prevents globally needed
  1125.        variables such as 'SHELL', 'TERM' etc. from being deleted. 
  1126.      - The first entry of the directory stack can no longer be removed. it is
  1127.        set to the initial current working directory. 
  1128.      - Fixed a nasty bug that caused an endless loop when a local procedure
  1129.        file had the same name as an executable in the current execution
  1130.        directory.
  1131.      - Removed all buffered I/O so that the size of the cio-free version
  1132.        'sh_nocio' decreased to about 59 kByte.
  1133.      - Added environment variable 'SHDEBUG' which, if set, forces '-d' 
  1134.        option to be set on all dependent sh calls. Added more output
  1135.        to the '-d' option.
  1136.  
  1137. <<<<<< Version 1.7, Edition 42.
  1138.  
  1139. >>>>>> EFFO disk released.
  1140.  
  1141. #42    01/14/95
  1142.      - Added 'strcmp.doc' to the distribution and replaced 'strcmp' by an
  1143.        updated version (thanks Martin!).
  1144.      - Reduced requirement for static storage from about 12 to about 10 kByte.
  1145.      - The string or part of string that has been cut with any of 'Clear to
  1146.        end of line', 'Delete current line' or 'Word delete' is now saved to a
  1147.        cut buffer from where it can be retrieved using the newly available
  1148.        'Paste' command. It is set to Ctrl-Y by default but can be assigned to
  1149.        any other string using the 'Ki' termcap entry.
  1150.      - Changed SIGTERM from 10 to 36 (OS-9 V3.0).
  1151.      - Another step towards 'tcsh'/'bash' compatibility: Added shell built-in
  1152.        commands 'dirs', 'popd [+n]' and 'pushd [+n] | [dir]', (thanks to
  1153.        Wolfgang for all the helpful proposals!).
  1154.      - TAB in a `...` construct caused bus error, fixed.
  1155.      - Added shell built-in command 'suspend [<signal>]'.
  1156.      - The key code for 'Delete current line' was no longer set to ^X by
  1157.        default, fixed.
  1158.      - Added SYS directory that contains a newly provided example password
  1159.        file and the files 'dot.login' and 'dot.profile' from the SCRIPTS
  1160.        directory.
  1161.      - Reworked help and error messages for shell built-in commands (again!).
  1162.      - Added shell built-in commands 'builtin', 'enable' and 'tty'.
  1163.      - Reduced maximum number of history lines to 100.
  1164.      - Alias expansion accepted not only white space but also all other
  1165.        non-alpha and non-number characters in front of the search string,
  1166.        fixed. 
  1167.      - Introduced '-y' option: If standard input path is not a TTY, standard
  1168.        output and standard error paths are examined. The first of them being
  1169.        a TTY is used as input path for the entire shell session. This feature
  1170.        is required for sh-scripts that are started from the Mware shell and
  1171.        use the read command, e.g. for installation purposes. Added
  1172.        'install.shell' and 'readvar' to the collection of shell scripts.
  1173.      - Reworked the 'read' command so that all line editing features are also
  1174.        available when the command is part of a shell script. 
  1175.  
  1176. #41    01/02/95
  1177.      - Improved syntax, error handling and help messages of the built-in
  1178.        functions 'setpr' and 'setstack'.
  1179.      - Expanded the doc paragraphs that deal with shell functions.
  1180.      - 'return' without argument led to a bus error, fixed (zero is now
  1181.        returned in such case).
  1182.      - If the output of a shell built-in command is redirected into a pipe,
  1183.        its size has no longer default length (512 Bytes) but is set to 
  1184.        8192 Bytes. In consequence, output from 'alias', 'history', 'set' etc.
  1185.        may now be sent through a pipe, e.g. 'alias | grep <search>' or
  1186.        'history | more'.
  1187.      - Reworked sh's output paths: in principle, messages and infos such
  1188.        as 'alias', 'history', 'set' etc. will go to stdout, error messages
  1189.        will go to stderr.
  1190.      - An uninitialized string pointer variable could lead to a bus error 
  1191.        when working with here files, fixed.
  1192.      - Keyboard mode is now also correctly reset when stdout and/or stderr
  1193.        is redirected. 
  1194.      - The '#!<prog>' construct may now contain white space between '!'
  1195.        and <prog>.
  1196.      - TAB file name completion now also works with names of redirected files
  1197.        (starting with any of '-+<>').
  1198.      - Improved the algorithm that inserts 'set ' at the beginning of an
  1199.        input line when Mware style options are entered.
  1200.      - OS-9 V3.0 uses '_$temp$_<xxxx>' as template for the names of temporary
  1201.        files where <xxxx> is a hexadecimal number. Unfortunately, any shell
  1202.        program that supports shell variables will look up the shell variables
  1203.        'temp' and '_<xxxx>' when such a file name is entered. The lookup
  1204.        function needed, therefore, a major hack: Whenever the shell variable
  1205.        'temp' is evaluated and the next character of the input stream is a
  1206.        '$', the string '$temp$' is returned unprocessed. The above procedure
  1207.        would, of course, not be necessary for normal terminal input, since the
  1208.        '$' character can be entered explicitly when preceded with a backslash
  1209.        ('_\$temp\$_<xxxx>'); it is, however, required for the cfp program when
  1210.        SHELL is set to 'sh'.
  1211.      - Added ${~n} variables that contain the grandparent process IDs. The
  1212.        expression '${~0}' is equivalent to '$$', and the expression '${~1}'
  1213.        is equivalent to '${~}'.
  1214.  
  1215. <<<<<< Version 1.7, Edition 40.
  1216.  
  1217. >>>>>> EFFO disk released.
  1218.  
  1219. #40    12/04/94
  1220.      - Incremented version number to 1.7.
  1221.      - A dummy write to standard output path is now executed every time the
  1222.        option section of the standard input path is changed. This ensures that
  1223.        keyboard abort and keyboard interrupt are always re-enabled (even if
  1224.        the program has not yet produced any output).
  1225.      - If the 'kL' termcap entry is not available, it is taken from the
  1226.        terminal descriptor's option section (del) and is no longer set to
  1227.        Ctrl-X by default.
  1228.      - Multiple options could not be entered using the 'set' command, fixed.
  1229.      - Procedure files may now indicate explicitly the shell (or any other)
  1230.        program for processing using the '#!<prog>' syntax. If a fully
  1231.        qualified name is specified (e.g. #!/bin/sh) and cannot be found, the
  1232.        basename is tried ('sh' in the example). 
  1233.      - When a signal with a number > 9 was received, an attempt was made to
  1234.        execute a trap command although signals with a number > 9 could not
  1235.        be trapped. This could result in bus error or other strange behavior,
  1236.        fixed. Set the highest number of signals that may be trapped to 63.
  1237.      - Finally, they convinced me: Shell options may now also be redefined
  1238.        using Mware's '-<opt>' syntax in addition to sh's 'set -<opt>'. Note
  1239.        that '-' is not (and will never be) a syntax element; it is merely
  1240.        replaced by 'set -', if it is the first character in an input line and
  1241.        the input line does not contain any other characters than the possible
  1242.        option characters of the Mware shell. History and alias procedures are
  1243.        not affected from this replacement. Added 'argsandopts' script to the
  1244.        script collection. Since the cfp program now works, the 'Known
  1245.        problems' paragraph could entirely be removed from the manual.
  1246.      - If a procedure file has '-' as its first character, 'shell' and not
  1247.        'sh' is forked for execution (same as '*'). 
  1248.      - Fixed a conceptual problem of the '-b' test: the argument is now
  1249.        expected to be the name of a device descriptor that is linked to and
  1250.        whose device type is tested. If the name starts with a slash or has
  1251.        a second slash, the descriptor name is extracted before linking.
  1252.        Modified the related 'tests' script.
  1253.      - Input buffer length of 'read <var>' command increased to 256 Byte. 
  1254.      - Modified 'find' script so that chd is avoided - the 'basename' tool
  1255.        is very useful.
  1256.      - Removed all formatted output so that a version that does not require
  1257.        the cio trap handler is only about 6 kByte bigger. This cio-free version
  1258.        is now part of the distribution ('sh_nocio'); it needs about 10 kByte
  1259.        less static memory so that in standalone systems that normally have no
  1260.        more than a single shell running the overall memory requirements can be
  1261.        reduced by about 20 kByte. The cio-free version is also intended for
  1262.        OS-9 3.0 systems that otherwise would not need to load the cio trap
  1263.        handler into memory.
  1264.      - The tilde character is now handled correctly when part of a file name
  1265.        that is subjected to TAB file name completion. The tilde-slash sequence
  1266.        is replaced by the current HOME directory. When tilde preceds a user's
  1267.        name (e.g. '~user/') the entire expression is replaced by this user's
  1268.        home directory. This behavior is equivalent to the already implemented
  1269.        tilde syntax of the input line parser.
  1270.      - Split 'History' paragraph from 'sh.doc' into this 'changelog' file.
  1271.  
  1272. #39    11/06/94
  1273.      - A slash that has been added by the TAB command is now removed, if EOR
  1274.        is entered immediately after the TAB file name completion.
  1275.      - Added 'cQ' and 'cI' termcap entries for normal cursor and special
  1276.        cursor style, respectively, to indicate whether in insert or
  1277.        overwrite mode. Expanded related section in the manual.
  1278.      - Added 'dirbasedemo' script to exemplify the use of the contributed
  1279.        'basename' and 'dirname' programs.
  1280.      - A '.sh_history' file with zero length caused problems, fixed.
  1281.      - Added 'find' script that uses the strcmp program.
  1282.      - Added binary programs 'basename', 'dirname', and 'strcmp' kindly
  1283.        contributed by M.C. Gregorie (thanks Martin!) to the distribution. 
  1284.        Expanded 'Getting started' paragraph in this manual accordingly.
  1285.      - If any key code entry in the termcap library uses the same character
  1286.        as the current xon or xoff character, the latter is now disabled.
  1287.      - Added alternate default termcap entries for Arrow-up (^P), Arrow-down
  1288.        (^N), Arrow-left (^B) and Arrow-right (^F). These codes are recognized
  1289.        in addition to the current termcap setting, if not used otherwise.
  1290.      - Introduced default environment variables CDD (Current Data Directory
  1291.        Disk Device) and CDL (Current Data Directory Level). The latter only
  1292.        contains the name of the current directory level and not the entire
  1293.        tree. These two variables are primarily intended to cope with OS-9 V3.0
  1294.        MWOS file names when displaying them as part of the prompt. The PS1
  1295.        environment variable can, for example, be set to the expression
  1296.        '<$HOST/$USER/sh@>$CDD/-/$CDL:' so that the prompt no longer occupies
  1297.        two third of a standard terminal input line.
  1298.      - The '$`' (dollar-backquote) sequence (not a legal syntax element
  1299.        anyway) caused a bus error, fixed.
  1300.      - The shell variables '$:', '$.' and '$,' are now always updated before
  1301.        being evaluated. Expanded related paragraph in the doc file. Added
  1302.        example script 'prio'.
  1303.      - Redirection to '/dev/null' is silently replaced by '/nil'.
  1304.      - Renamed 'ks' and 'xs' termcap entries to 'hs' and 'hx' since the 'ks'
  1305.        and 'xs' termcap codes have already been defined for other purposes and
  1306.        are documented as such in the OS-9 manual .
  1307.      - Added appropriate handling for 'ks' and 'xs' termcap entries (required
  1308.        to enable sending of special keys on HP terminals).
  1309.  
  1310. #38    10/22/94
  1311.      - Added alternate character to move the cursor to the end of the input
  1312.        line. It is set to Cntrl-E by default, but may be redefined using the
  1313.        'kA' termcap variable.
  1314.      - Added 'unalias' function.
  1315.      - Modified TAB file name completion: If the string is not unique and TAB
  1316.        is hit a second time, the list of files is no longer inserted into the
  1317.        input line but only displayed on screen. Prompt and input line are
  1318.        redisplayed below this list. 
  1319.      - Added word-delete, uppercase, lowercase, capitalize, next-word and
  1320.        previous-word commands with the default key sequences Esc-d, Esc-u,
  1321.        Esc-l, Esc-c, Esc-f and Esc-b, respectively. These commands do not
  1322.        set the -l option; they may, therefore, not be executed in an empty
  1323.        input line (which anyway would not make sense). Termcap redefinition
  1324.        strings are kX, kU, kY, kC, kF and kB, respectively.
  1325.      - If any key code entry in the termcap library uses the same character as
  1326.        the current keyboard quit or interrupt character, the latter is now
  1327.        disabled (e.g. needed for Cntrl-E).
  1328.      - Added alternate character to move the cursor to the start of the input
  1329.        line. It is set to Cntrl-A by default, but may be redefined using the
  1330.        'ka' termcap variable.
  1331.  
  1332. #37    10/20/94
  1333.      - The history file '.sh_history' may now also contain LF instead of CR.
  1334.        Intended for compatibility with UNIX files, e.g. if HOME is assigned to
  1335.        a UNIX directory via NFS. NOTE: sh always writes CR-delimited lines.
  1336.        This LF/CR remapping facility is NOT implemented for '.profile', here
  1337.        files etc.
  1338.      - When an input word was too long, an appropriate message was written but
  1339.        sh looped endlessly - fixed. 
  1340.      - Input line buffer is now allocated dynamically, initial size is 2048
  1341.        Byte. Every time more buffer is needed, its size is incremented by 1024
  1342.        Byte. Allocated local variable space dynamically in highly recursive
  1343.        functions. Added example script 'longline'.
  1344.  
  1345. #36    09/30/94
  1346.        A nonsense pid was written, if a background process could not be
  1347.        started, fixed.
  1348.  
  1349. <<<<<< Version 1.6, Edition 35.
  1350.  
  1351. >>>>>> EFFO disk released.
  1352.  
  1353. #35    09/19/94
  1354.        Keyboard arrow codes that start with the escape character are now
  1355.        possible. If at least one escaped arrow code is read from the termcap
  1356.        setting, the -l option (require 'logout' to logout) is implicitly set.
  1357.        Removed the related sentence from the 'Known Problems' paragraph. 
  1358.  
  1359. #34    09/18/94
  1360.        Made a number of fixes related to error handling and error output:
  1361.      - Unified use of upper and lower case in error messages.
  1362.      - Syntax errors and other internal errors now always cause error #1.
  1363.      - OS errors let sh always return the appropriate OS error number.
  1364.      - Fixed a bug in the -e=<errorfile> option execution.
  1365.  
  1366. #33    09/16/94
  1367.      - A line that contained an undefined argument variable was not executed,
  1368.        fixed.
  1369.      - Shell functions appear now to be stable. Added related paragraph to the
  1370.        doc file. Added example script 'funcdemo'.
  1371.      - Whenever the TERM environment variable is modified, the internal
  1372.        termcap settings are updated.
  1373.      - Split the 'version <help>' output into several columns.
  1374.      - Made 'cls' a built-in command.
  1375.      - TAB file name completion even more expanded: The bell rings if an
  1376.        attempt is made to expand a non-unique prefix. If under that condition
  1377.        another TAB is entered, all files with matching names are inserted into
  1378.        the current input line.
  1379.      - TAB file name completion expanded: SPACE is appended, if valid file
  1380.        name; slash is appended, if valid directory name. If the argument to
  1381.        the 'chd' command ends with a slash, the slash is silently ignored.
  1382.      
  1383. <<<<<< Version 1.6, Edition 32.
  1384.       
  1385. >>>>>> EFFO disk released.
  1386.  
  1387. #32    08/28/94
  1388.      - Long variables (>90 Bytes) could not be piped, increased pipe size to
  1389.        512.
  1390.      - The 'version' command may now have an argument (commands, language,
  1391.        test).
  1392.      - There was a strange problem with undefined shell variables and shell
  1393.        arguments in conjunction with the 'test <var>' syntax, fixed.
  1394.      - An empty string in the grave construct (``) caused a bus error, fixed.
  1395.      - Added test function '-x' to test whether a file exists in the current
  1396.        execution directory and has the execution bit set. 
  1397.      - Added test function '-b' to test whether the argument is an existing
  1398.        'block' device, RBF/NFS (class 1), SBF (class 3), CDFM (class 5).
  1399.      - Fixed a problem with the 'n>&m' I/O redirection syntax when used in
  1400.        conjunction with pipes. Added a description of the 'n>&m' syntax to
  1401.        the doc file. Added demo file 'mergedemo' to the collection of sh
  1402.        scripts.
  1403.  
  1404. #31    07/23/94
  1405.      - Not only space but also equal sign is now treated as start-of-filename
  1406.        character for TAB file name completion. Helpful for 'copy file
  1407.        -w=to_be_expanded'.
  1408.      - Another step towards 100% compatibility with the Mware shell: the
  1409.        exclamation mark is also accepted as pipe symbol, if not first
  1410.        character of an input line and if not part of the 'test' syntax.
  1411.  
  1412. #30    06/12/94
  1413.      - After every 'chd' command, the CWD environment variable is now updated
  1414.        from RBF; this also includes correct handling of upper and lower case
  1415.        characters.
  1416.      - Adapted all sources so that they are accepted by GNU C 2.5.8 -
  1417.        the sh binary is now about 14 kByte smaller!
  1418.  
  1419. #29    06/05/94
  1420.        The local '.profile' file was evaluated before '/dd/sys/profile' was,
  1421.        but it must be the other way round. Fixed.
  1422.  
  1423. <<<<<< Version 1.6, Edition 23.
  1424.       
  1425. >>>>>> EFFO disk released.
  1426.  
  1427. #28    05/20/94
  1428.      - If 'cd' or 'chd' were entered twice with the same string argument, the
  1429.        environment variables CWD and LWD contained the same string. This no
  1430.        longer happens; LWD is only updated, if the current data directory
  1431.        really changes.
  1432.      - A binary program could not be executed when located in the current
  1433.        execution directory and this directory was not specified at the
  1434.        beginning of the PATH variable. Fixed. When a procedure file had the
  1435.        execute attribute set and was specified with the fully qualified file
  1436.        name, sh recursively forked itself until all available memory was
  1437.        exhausted. Fixed. Added a paragraph to the doc file (see PATH
  1438.        environment variable) that explains where and at what order sh is
  1439.        searching for files to be executed.
  1440.      - If the '#' symbol (comment symbol or stack resizer) was followed by
  1441.        a new line, the next line was ignored. Fixed. 
  1442.  
  1443. #27    05/02/94
  1444.      - Finally ..., sh now expands a single name - if unique - when the TAB
  1445.        key is hit. The cursor must be at the end of the input string, the
  1446.        first part of the file name may have wild card or regular expression
  1447.        characters. Both directory and file names may match. If there is more
  1448.        than one match, the input string is expanded with the first common
  1449.        characters of the matching file names. 
  1450.      - Clear screen is now a built-in command. Ctrl-L is defined by default
  1451.        for this purpose; alternatively, the termcap entry 'kc' may be
  1452.        specified. The screen is cleared, the appropriate prompt and the
  1453.        current input string are written to the screen's first line.   
  1454.  
  1455. #26    05/01/94
  1456.        The content of the history buffer is now saved to $HOME/.sh_history
  1457.        when sh exits and is restored when sh is restarted with the same
  1458.        setting of the $HOME environment variable. To prevent the history
  1459.        buffer from useless (and confusing) strings, only input from the
  1460.        terminal is written to the history buffer; input from files such as
  1461.        '.login' or '.profile' is no longer considered.
  1462.  
  1463. #25    04/19/94
  1464.        Under very rare conditions, sh showed a strange behavior (failing to
  1465.        execute, modifying command strings). After specifying an additional
  1466.        stack space of 4 kByte, this no longer happened. Total stack size
  1467.        is now about 20 kByte, static storage about 14 kByte.
  1468.  
  1469. #24    01/08/94
  1470.      - The grave eval command didn't work, if the environment variable SHELL
  1471.        was set to a shell that does not have the '-c' option. Fixed.
  1472.      - The 'setstack <stack>' command now works correctly. The unit kByte is
  1473.        always assumed, irrespective of whether the number is suffixed with a
  1474.        'k' (upper or lower case). The same applies now to the '#' execution
  1475.        modifier as well. In conclusion, 'procs #100', 'procs #100k', 'procs
  1476.        #100K', and 'setstack 100; procs' behave identically. The latter,
  1477.        however, permanently sets the default stack to 100 kByte.
  1478.  
  1479. #23    11/06/93
  1480.        When sh was used as a fork shell (dsave, make etc.), or 'sh <prog>' was
  1481.        entered at shell prompt level, sh's exit status was always 0,
  1482.        irrespective of whether the call was successful or not. This irregular
  1483.        behavior (that was also different from Mware's shell) has been fixed.
  1484.        The exit status of the forked program or of the executed procedure file
  1485.        is now returned.
  1486.  
  1487. #22    10/21/93
  1488.      - The kill command can be used not only to kill a process but also to send
  1489.        any other signal; the '-signal=<sig>' syntax was always available for
  1490.        this purpose. The '-<sig>' syntax was added for convenience, and the
  1491.        help text (sent when 'kill' is entered without arguments) expanded
  1492.        accordingly.
  1493.      - When 'NO CARRIER' is entered at prompt level, sh will logout. Intended
  1494.        to correctly handle a situation when the carrier is lost in a modem
  1495.        connection but the serial interface is not able to detect changes in the
  1496.        DCD line.
  1497.  
  1498. #21    08/24/93
  1499.      - The built-in echo function has now a usage (-?) option; in addition, the
  1500.        -b option is available to suppress backslash processing (useful for
  1501.        'echo $TERMCAP').
  1502.      - If started non-interactively, the -x flag is set implicitly (same as
  1503.        Mware shell).
  1504.      - If the dot '.' is included in the PATH environment variable, (for
  1505.        example .:/dd/CMDS:/dd/bin), files on the current data directory that
  1506.        match the shell input string are executed (executables and procedure
  1507.        file).
  1508.  
  1509. #20    08/03/93
  1510.        Modules that have another module name than file name may now be executed
  1511.        just by typing the file name (as it was always possible using Mware's
  1512.        good old shell).
  1513.  
  1514. #19    04/17/93
  1515.      - Calling sh with an argument that is a fully-qualified executable file
  1516.        (e.g. 'sh /n0/host/h0/cmds/prog') now works.
  1517.      - An RBF device that has not the format-inhibit flag set can be written to
  1518.        using the >/device@ syntax. Very dangerous but helpful for tar output
  1519.        etc.
  1520.        Assumption: a person who knows the @-suffix also knows the danger of
  1521.        using it for writing. Hard disks are, normally, format-protected so that
  1522.        they may not be overwritten using this feature.
  1523.      - The ^T (transpose) EMacs feature is now available in sh line editing
  1524.        mode; helpful for lsit, laod etc. 
  1525.      - The SHELL environment variable is also used - and can be modified -
  1526.        within the current sh session. Try 'setenv SHELL shell' prior to making
  1527.        a cfp call!
  1528.  
  1529. #18    03/22/93
  1530.     -  passing a non-existing pid to kill results in a correct error message.
  1531.     - 'kill abc' no longer kills process 0 but aborts with a correct error
  1532.        message.
  1533.  
  1534. #17    02/02/93
  1535.        Directory names are no longer automatically set to upper case so that
  1536.        the CWD and LWD shell variables now work correctly with NFS file names
  1537.        imported from UNIX hosts.
  1538.  
  1539. <<<<<< Edition 22.
  1540.       
  1541. >>>>>> Internal release.
  1542.  
  1543. #16    10/12/92
  1544.        Maximum number of history lines increased to 1000.
  1545.        Maximum number of alias definitions increased to 50.
  1546.        Input string length expanded to 1024 chars.
  1547.  
  1548. #15    12/05/91
  1549.        sh's owner is always 1.0 so that 'setuid 0.0' from a non-super user
  1550.        won't work.
  1551.  
  1552. ------------------------------------------------------------------------------
  1553.