home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / SHELLS / sh73.lzh / DOC / changelog.sh next >
Text File  |  1998-05-26  |  87KB  |  1,602 lines

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