Hamilton C shell is a language for interactively using Windows. Compared to the standard Command Prompt, it provides a vocabulary and grammar that allows much more complex activities to be described. Here are some of the major features.
Command line editing of enormous statements with arrow keys, filename completion and command completion.
User-definable function keys.
Fully recursive grammar. Statements can be arbitrarily nested or piped without concern for statement length or other arbitrary restrictions.
Procedures and aliases. The vocabulary of the language is meant to be extensible by the user.
Variables, arrays and expressions. Integer and floating point arithmetic, pattern matching facilities and various file system tests and editing operators provide an expressive grammar.
Threads and processes. Child threads and processes can be spawned to run commands asynchronously or in the background.
Command substitution. The output of one command can be stuffed back on the command line as arguments to another.
History. Past commands can be recalled and edited.
Advanced filename wildcarding.
An extensive vocabulary of powerful little utilities: “All the usual suspects” including grep, fgrep, head, tail, diff, sed, cron, tar, su, ls, mv, cp, rm, etc.
This C shell borrows its basic language concepts from the original and wildly popular C shell written by Bill Joy in the late 1970s at the University of California, Berkeley, as part of BSD UNIX project. But from there, it’s been adapted and extended in a number of way with modern compiler technology for Windows:
A modern top-down parser is used for better language recognition and performance.
It’s easier to use. The syntax and grammar have been made flexible and more consistent with other modern high level language conventions.
It knows about Windows, HPFS, NTFS, long filenames, environmental variables, networks, international character sets, and about all the various kinds of applications that Windows supports.
You can customize the C shell to give you as little or as much Windows versus UNIX/Linux behavior as you choose. For example, either \ or / can be used in a filename. Either - or / can be used as an option switch character for the utilities. You can decide whether typing cd with no destination directory means report the current directory Windows-style) or take you to the home directory, and so on. (The chapter on customizing the C shell is devoted to this topic.)
Threads are used extensively to achieve performance and functionality not possible in UNIX.
Feedback to the user, especially when reporting errors has been improved. If you encounter an error inside a complex script, you’ll even get a complete dump of the call stack showing how you got there.
Most users of Hamilton C shell are relatively technically oriented computer users. Often, they’re software developers. They have a business need for Windows system.
Peering over their shoulders, they typically have lots of windows open on the screen. Many of the windows are running copies of this shell. Some copies are transient, created to display with little snippets of information needed on the spur of the moment. Other copies of the shell would be used for more long-running projects: for example, getting a make working for a major application. A shell window is like any other application window but with a different paradigm. Instead of data, rows and columns of numbers or lines of text, the object being manipulated is the machine itself. A good shell tackles a different problem than icons and windows. Instead of the point-and-shoot immediacy of “do this single thing now,” a shell offers language and the ability to describe more customized or repetitive actions, e.g., identify a suitable set of files, perform some action against them and filter the results in some interesting way.