Hamilton LaboratoriesHamilton C shell 2012

Recent changes

Oregon Coast

These are the most recent changes, listed chronologically. The complete release notes going back to the first 2.0 release on Windows in July 1992 are also available.

Hamilton C shell(tm) for Windows(R)  Release Notes 5.2.g
Copyright (c) 1989-2017 by Hamilton Laboratories.  All rights reserved.

Change Summary

   Jun 2009    4.0   New 32-bit and 64-bit builds for Windows 7, Vista
                     and earlier versions of Windows using Microsoft
                     Visual Studio 2008.  New ``...`` line-at-a-time
                     command substitution.

   Jul 2010    4.1   Full Unicode / UTF-8 versions of many of the
                     utilities, an improved su, support for Windows 7
                     elevation and code-signing of the .msi install
                     file and all the .exe files.

   Oct 2011    5.0   Better support for Windows conventions regarding
                     ACLs in mv, cp and chmod.  New splitstring and
                     findinclude samples added.  Much improved su
                     (superuser) utility for Windows 7.

   Aug 2012    5.1   Brand new documentation.

   Sep 2014    5.2   Improved documentation with better navigation,
                     additional topics, including using with Cygwin,
                     and a new random utility.

Fix Level 5.1.a Changes:

851.  Login.csh had a huge mistake in trying to set cdpath to include all
    the *:\"Program Files" directories.  This was very slow if you have
    network drives.  The default cdpath is now just your home directory
    and the desktop directories.  The comments in both login.csh and
    startup.csh have also been updated.

852.  Improvements to the formatting of the user guide including switching
    from Palatino (serif) to Verdana (sans serif) font, using bordered text
    instead of images for the keys on the keyboard (e.g., in the page
    on command line editing), highlighting keywords, command names, etc.,
    with a border and a light blue background and using larger fixed pitch
    font in many of the tables.

Fix Level 5.1.b Changes:

853. sort now has additional options:  -R to normalize line ends,
    -s stable sort and -v verbose output from a -c check sort.  Check
    sorts with -c always reported the input was ordered even if it wasn't;
    that's fixed.

854. filebox -h had a typo.  Use -i to specify an initial directory, not
    -d.  Also, the -e option now follows the same syntax as -f and is
    automatically added to the head of the list of filters.

855. dirbox now uses the new resizable dialog box, the options have been
    reduced to only those that make sense when choosing a file or directory
    and the -i initial path option now works.  If a non-existent path is
    typed into the edit box, the OK button is greyed.

856. Path hashing is now turned on before running startup.csh and login.csh.
    This was causing a problem with the default login.csh script, which
    saved and restored the state but ended up causing login copies to
    run with path hashing turned off.

857. The undocumented -t (text), -b (binary) and -u (unicode) file test
    operators added at 2.3.e have been removed.

858. The -x (executable) and -z (zero length) file test operators weren't
    thread-safe.  They didn't properly setup and release the current
    directories when calling Win32 file operations.  The could fail if
    another thread changed the process directories, e.g.:

       cd .. &; calc -x hello.exe

859. New -t (timestamp) and -s (size) file operators have been added.

    -t returns a string of the form "YYYY-MM-DD hh:mm:ss", e.g.,
    "2012-11-25 14:25:04".  If the path doesn't exist or doesn't have
    a timestamp (as, e.g., is the case for C:\) -t returns null;
    this is not an error.  The -t operator allows times to be compared
    or pattern-matched.  For example

       foreach i ( * ) if (-t $i =~ "2012*") echo $i changed in 2012; end
       if (-t $a > -t $b) echo $a is newer than $b

    -s returns the size in bytes.  If the path doesn't exist or is a
    directory, -s returns null; this is not an error.

Fix Level 5.1.c Changes:

860. sort didn't parse short records properly.  If a key specified a
    character offset that was past the end of a particular record,
    comparisons of that record were unpredictable.  That's fixed.

861. The -l (logging) option for mv, cp and rm had a bug that caused
    them to spew garbage ANSI sequences resulting in black on black

Fix Level 5.2 Changes:

862. The random and xor utilities have been added.

863. The periodic demo version popup appeared when it shouldn't have.
    That's fixed.

864. A bug in the code that executes a compiled set indexed variable
    to a string literal statement was fixed.  It was grabbing the literal
    without making its own copy.  It worked if the compiled statement was
    only executed once, but not if it ever got re-executed, e.g., in a
    loop or a compiled procedure.  When you later tried to access the
    value in the variable, you hit a null pointer.  For example:

      for i = 1 to 2 do
         set x[0] = x
      echo $x  # failed with a null pointer

865. Passing a null string as a parameter to a procedure caused the
    shell to hang.  During evaluation, the null string caused a linked
    list to be built with a loop in it.  This is fixed.

      proc p( a )
         echo $a
      set x =
      @ p( x )  # hung

866.  Aliases have been added to the default startup.csh script for vim
    and gvim, using env to delete the SHELL variable before starting the
    Vim editors.  Vim only knows how to use cmd.exe when "shelling out"
    using the :!  commmands.  If the SHELL variable is defined, Vim uses
    it, but assumes it points to cmd.exe.  

867. Aliases for su and sudo in the default startup.csh script now use
    the env utility to delete the LAYER environment variable before
    invoking su.exe.  This avoids the prompt in the new window appearing
    as "[2] 1 C%".  Also, the LAYER variable is now defined as all caps
    in startup.csh.

868.  A bug in the evaluation of indexed variables caused the shell to
    misinterpret a binary int as a float, causing this to fail.  It's
    now fixed.

      set v = 1 2
      @ v[1] *= 3

869.  If the env -N (new screen) option is specified, env no longer waits
    for the child unless -w is also specified.

870.  The chunk size used by the split utility was calculated as a 32-bit
    signed number, meaning the largest chunk size was 2GB.  Split now
    uses 64-bit unsigned arithmetic, allowing a maximum chunk size of
    roughly 17 exabytes.  (An exabyte is 10**18 bytes.)

871.  The hypertext user guide has been revised with better navigation and
    additional topics.

872.  An uninitialized variable randomly caused sed to crash in branches
    to forward references.  That's fixed.

Fix Level 5.2.a Changes:

873.  mv now sets the security descriptors on the output via inheritance from
    the directory it's moved to.

874.  The mouse wheel is now disabled by default in more on startup but can be
    toggled with the w command.

875.  getopt now preserves switchchars.

876.  A bug in the common error message routine that was intended to report a
    garbled color specification, e.g., "setenv DIRECTORIES = normal", has
    been fixed.

877.  sed will now compare \r\n equal to \n.

Fix Level 5.2.b Changes:

878.  More wouldn't correctly match anything at the end of a line.  That's

Fix Level 5.2.c Changes:

879.  The C shell allowed UNC (\\machine\resource\path) names on the cdpath
    but would crash if you attempted to "cd +c" to one of them.  That's fixed.

Fix Level 5.2.d Changes:

880.  The vectormath.csh sample script has been added.

881.  A bug that caused the C shell to crash randomly when a thread exited,
    caused by failing to lock a shared variable, has been fixed.

882.  A bug that caused the C shell to crash if an argument to a user-
    defined procedure had the same name as a builtin variable has been

Fix Level 5.2.e Changes:

881.  If a here document (using <<) contained a substitution plus a left
    bracket followed immediately by a double quote, the result contained
    a spurious circumflex.  That's fixed.

Fix Level 5.2.f Changes:

882.  The same mistake that caused random crash in thread exit fixed at
    one place in the code at 5.2.d also appeared in two other places, now

Fix Level 5.2.g Changes:

883.  A new -x command line option has been added to the C shell for
    compatibility with GNU tcsh and make. The first argument word is
    taken as the command, to be parsed as a string.  The remaining
    arguments are placed in the shell argv variable.

884.  Additional work chasing the bug described at 881.

885.  Fixed broken links to the User Guide home page in the navigation
    panels on the online man pages for the utilities and samples.