Hamilton C shell(tm) for Windows NT(tm)  Release Notes 2.0.m
Copyright (c) 1989-1992 by Hamilton Laboratories.  All rights reserved.


Change Summary

The basic release history for the C shell has been:

   Dec 1988    1.0   First release, running on OS/2 1.0.
   Jan 1989    1.01  Cleanup and final release for OS/2 1.0.
   Feb 1989    1.02  First release for OS/2 1.1 (Presentation Manager).
   Mar 1989    1.03  Cleanup and base release for OS/2 1.1.
   Aug 1989    1.04  Command line editing and filename and command
                     completion added.
   Mar 1990    1.05  Support for OS/2 1.2, HPFS and long filenames added
                     along with many important utilities including grep,
                     diff, head, tail, sed, etc.
   Feb 1991    1.06  Support for user-defined screen colors, inheritable
                     local variables, higher performance, etc.
   Jul 1992    2.0   32-bit release for Windows NT.

Along the way, Hamilton C shell has grown from about 35,000 lines of C
to almost 90,000 lines.  All of it has been created from scratch by
Hamilton Laboratories.  Not one line was ported from or written on anything
but OS/2 or Windows NT.

This document will contain a detailed summary of all the changes made
along the way from one release to another, beginning with the initial 2.0
release for NT.  Changes which only affect certain builds (e.g., OS/2) are
so indicated.

Changes are presented chronologically, so if you're updating from a previous
release, you'll want to jump in somewhere in the middle to start reading.

At the very end of this document is a short list of the known bugs and
limitations.  You'll also find contact information in case you encounter a
problem or have a suggestion.


Fix Level 2.0 Changes:

1.  Initial product release for Windows NT.


Fix Level 2.0.a Changes:

2.  [OS/2]  The 2.0 version of ls wasn't adding up allocated sizes of
    directories properly when using the -Lw options.


Fix Level 2.0.b Changes:

3.  [OS/2] The OS/2 shell can now be run when escaping to the command line from
    the OS/2 1.x and 2.0 installation disks.

4.  Final cleanup and first release of the C shell on the MIPS processor.

5.  [NT] Trying to run a .bat or .cmd file started cmd.exe, but didn't actually
    run the script.  It does now.

6.  [NT/x86]  A codegen error in the compiler caused :s/.../.../ operations
    to trash the heap, causing the C shell to crash randomly.

7.  [NT] A minor bug in the common routines used to read number pad keystrokes
    was fixed.

8.  [NT] A number of bugs in tar.exe that caused it problems opening new tar
    files and setting or reporting timestamps on files extracted from or listed
    in a tar file were fixed.

9.  [NT] More no longer fails with a complaint that it can't scroll or fill the
    console if, e.g., you go to the end of a file, page down and then search
    backward for text that's not found.  The console api's were erroneously
    reporting failures when in fact they worked fine.


Fix Level 2.0.c Changes:

10. [NT] The common screen painting library used by the shell and a number of
    the utilities would sometimes set the cursor incorrectly if scrolling was
    involved.  It should now be correct.

11. [NT] cut.exe couldn't read files specified on the command line.  It can
    now.

12. The di (diff interative) alias for diff -b! (merged diff using color,
    ignoring white space differences) has been added to startup.csh and the
    definition for the mi (more interactive) alias has been fixed for NT.

13. [NT] ver.csh was added to the bin directory.

14. [NT] The common keyboard routines now recognize ctrl-H as the same as a
    backspace and ctrl-[ as an escape.


Fix Level 2.0.d Changes:

15. A long-standing bug in the shell's command line editing routines that
    could cause the screen to be painted incorrectly has been corrected.

16. [NT] A bug in the common seek logic used in tar, tail, and xd caused them
    to have problems reading files that came in over a pipe on stdin.  That
    problem has been fixed.  binedit, more, sed and tee used the same logic
    and were recompiled even though they were unaffected.

17. A long-standing, but usually benign bug in the more filter's ISAM
    mechanism was fixed.

18. The shell no longer complains under NT nor fails under OS/2 if one tries
    to edit a history reference (e.g., with !!:s/X/Y/) that's > 64K.

19. [OS/2] dskwrite now properly detects and autoformats any unformatted
    disks it's given as disks 2 or following when using dskwrite -ac.

20. The sizeof sample script has been improved to run a bit faster and to
    avoid problems running out of memory in the C shell if a big directory
    is being measured.


Fix Level 2.0.e Changes:

21. [NT] The common keyboard routines have been fixed to silently gobble up
    CapsLock keystrokes.  They were being passed through to the application.
    The shell, mv, cp, rm and more were affected.

22. [NT] The help screens for label, more and tar and for the internal
    commands hashstat, kill and ps have been edited to replace references
    to OS/2 with NT.

23. eval -h now indicates "success" as in its return value.  (It no longer
    causes a loop to exit.)

24. [NT] The C shell no longer litters the output generated by the setenv
    command with current directory variables such as "=C:".  Also, it now
    correctly reads all current directories out of the environment at
    startup.

25. [NT] The C shell now properly treats environmental variable names as
    case-insensitive.  (They're still case sensitive under OS/2.)  The set,
    unset and @ statements are case-sensitive (that's so you can still create
    shell variables that differ from environmental variables only by case)
    but the setenv and unsetenv statements and $var and other variable
    references first try case-sensitive, then case-insensitive variable
    lookups.


Fix Level 2.0.f Changes:

26. [NT] The NT version of the C shell can now determine, just as the OS/2
    version can, whether a child will run in the same or a different window.
    If it's a different window, the shell immediately prompts for a new
    command.

27. [NT] hlabel.exe now includes a warning in the help screen that setting the
    volume label is disabled under NT due to a kernel limitation.  Also, it
    properly gives an error message if you type "label a:foo".


Fix Level 2.0.g Changes:

28. [NT/x86] rm -x was broken in the 2.0.e build when we switched to the July
    SDK compiler; the optimizer generated bad code that we didn't spot.
    Rebuilding with optimization turned off with pragmas fixed the problem.


Fix Level 2.0.h Changes:

29. All the utilities have been cleaned up in preparation for the 32-bit
    release for OS/2 2.0.

30. binedit, chmod, dim, fgrep and head no longer routinely translate
    filenames to lower case, thus avoiding any problems with mixed-case
    filesystems.

31. [OS/2] more no longer has problems forward or backward searching across
    more than 32,000 lines.

32. When moreh [OS/2] or hmore [NT] recognizes that it's reading from a
    file, meaning it can use seeks to re-read any data it discards, it
    now buffers only a 100K window into the file.  That reduces swapping
    under OS/2 and dramatically improves heap performance under NT without
    sacrificing functionality.

33. [NT] The C shell now correctly recognizes that it must wait for DOS apps 
    to complete before prompting for another command.

34. [NT] The C shell now responds to Close events from the pull-down on its
    window.


Fix Level 2.0.i Changes:

35. [OS/2] markexe now understands how to mark 32-bit 2.0 applications.

36. The ts.csh script was broken when quoting rules inside a backquoted
    string were changed at release 1.06 but went unnoticed untill now.
    The fix was to delete the now superfluous escaped single quotes.

37. If filename completion matched a file with a ! in the name, it wouldn't
    always escape it.  Sometimes it'd just single quote it, causing it to
    be mistaken for a history reference.

38. des had a couple bugs.  Under NT, it would often fail with a divide by
    zero due to improper initialization.  And under both NT and OS/2, it
    didn't handle EOF if data was being read from stdin properly.  Both
    problems have been fixed.


Fix Level 2.0.j Changes:

39. [OS/2] Since there's no .. entry in the root of a FAT drive, cd .. there
    wouldn't work.  Instead, the C shell would try cd'ing to one of the CDPATH
    directories.  It now does the right thing.


Fix Level 2.0.k Changes:

40. [OS/2] The change to markexe at 2.0.i broke it, causing markexe to garble
    the .exe header.  It now works as it should.


Fix Level 2.0.L Changes:

41. [NT] Complete rebuild of everything for the October Beta version of NT.

42. [NT] Background children are now protected from ^C in a console window
    using the new CREATE_NEW_PROCESS_GROUP option to the CreateProcess api.
    Also, the kill command now uses, by default, the new GenerateConsole-
    CtrlEvent api call to send a ^Break to a child.  The advantage is that
    if the child is willing to accept it, links to any DLL's are closed
    properly.

43. [NT] Support for the new shutdown and logoff signal events has been
    added, allowing copies of the C shell to automatically exit when
    shutdown or logoff is selected from the Program Manager.

44. [NT] Support for the new LocalTime notion has been added to the date
    and ls utilities.

45. Additional work has been done on all the utilities and the shell in
    particular to prepare for a full 32-bit OS/2 2.0 release from one common
    source base.

46. [NT] The -s option to fgrep and grep didn't work.  It does now.

47. [OS/2] A number of bad semaphore races were inadvertently introduced
    when support for NT was added at release 2.0.  Apparently, they never
    caused problems (none were ever reported) but, in any event, they are
    fixed now.


Fix Level 2.0.m Changes:

48. [NT] The built-in sleep command no longer forgets to close its open
    thread handle.  Previously, after running sleep roughly 5000 times, it'd
    fail, claiming it couldn't start a new thread.

49. [NT] The -i (interactive) option for mv, cp and rm now works.

50. [NT] Minor changes were made to the shell to prepare it for the DEC
    Alpha version of NT.

51. [NT] Support for LocalTime has been added to the touch utility.

52. [NT] The NTVersion (NT Build number) and WinVersion built-in variables
    have been added and used in the ver.csh script.

53. A new -u (unbuffered) option has been added to the C shell to allow
    it to be used over a communications line.

54. First release of a demo version of the shell and all its utilities.
   


Known Bugs and Limitations

1.  The keyboard editing logic only checks to see if the cursor's been moved
    by a background process or thread when it reads the first keystroke.  That
    catches most situations, but if you begin typing a command and then some
    background activity starts writing to the screen or moving the cursor,
    the result can be a scrambled display.

2.  The C shell does not yet understand the special device names like CONIN$
    that NT supports.  The following statement won't work in this build
    but will in the next:

      cat < conin$

3.  To kill a Win3.x or NT GUI app, the -! option must be used, specifying
    that TerminateProcess should be called.  While certainly effective,
    TerminateProcess does not notify any DLL's that the process is
    exiting.



Thank you for using Hamilton C shell.


                  Douglas A. Hamilton
                  November 29, 1992

                  Hamilton Laboratories
                  13 Old Farm Road
                  Wayland, MA  01778-3117
                  USA

         phone:   508-358-5715
           FAX:   508-358-1113

   BIX Network:   hamilton
    CompuServe:   70034,2025
      MCI Mail:   389-0321
         Telex:   6503890321           
      Internet:   3890321@mcimail.com
