				Notes on Clam
				-------------

	Clam is NOT a Tcsh clone, really. It just feels like it. So it
does some things differently than Tcsh, Csh, or Sh. For example-

    Variables:	Clam uses internal variables to toggle the behaviour of
		some features. On startup, all environment variables are
		copied and their export flags are set. Whenever one of these
		internal variables are changed, this change is reflected in
		its environmental counterpart. The PATH, TERM, and TERMCAP
		variables are always exported and cannot be removed from
		internal or environment variable lists.

    The Path: 	One reason why Clam uses internal variable copies is to allow
		it to place a `builtin directory' somewhere on your path.
		This directory is specified by `~#'. On startup, Clam prepends
		the builtin directory to the start of its copy of PATH. Try
		`list' when you are in Clam. It should show a line like
		`PATH= ~# /bin /usr/bin', meaning the builtin directory
		is searched first before /bin and /usr/bin. You can alter
		the path, of course, but don't leave out ~#, unless you
		don't want builtins. Note that if you export PATH, the
		~# will be stripped from the environment copy.

    Aliases:	Aliases have a more Bourne shell syntax than Tcsh. For
		example, "alias ls 'ls -l $*' " aliases ls, with $* having
		the normal shell meaning. Of course, $1 $2 etc are
		available as well.

   Assignment:	Variables are assigned as per Bourne shell, but the `=' sign
		need not be right next to the variable. This means that
		`chmem =25000 clam' is interpreted as a variable assignment.
		To get around this, do ` chmem "=25000" clam ', the double
		quotes preventing expansion of the `='.

See the included .login and .clamrc for examples of the above.


Changes to get Clam running under Minix
---------------------------------------

	Since Clam is a UCB shell at heart, I have made many changes to
get it up under Minix. These are all in #ifdef's and #ifndef's, so that
eventually Clam will compile under any system with the appropriate defines.

	The changes come under the following headings:

    * Job Control- Control of foreground & background process under UCB
      Unix depends on signals not available under Minix, so there is no
      job control with Minix Clam.

    * Scripts- At the moment, most of the Clam script functions (such as
      `while','for',`repeat' etc. have not been written. I have removed
      the code that references them to reduce Clam's memory requirement.

    * Clam uses hashing of the executables on the path to find and execute
      programs faster. Unfortunately, it used too much stack under Minix
      and kept crashing, so I took it out. There was no noticeable
      difference in performance!
   
   * Several of the array sizes in `header.h' were reduced to cut the
     memory needed. Also executables like `/usr/local/bin/vi' are
     declared for my own system. You might like to change these.

   * Minix headers don't seem to declare function types, so extra
     declarations occur in the source. Also some of the structs used
     by Minix are different to normal Unix (e.g the FILE struct), so
     some of the variable declarations were altered.

   * The code that uses symbolic links has been cut out.


If you're used to Csh or Tcsh, you should find Clam easy to use. If not,
read the manual `Clam.1'. Clam starts by executing the commands in `.clamrc',
and then `.login' if it is the login shell, so I've included the two files
that I use.
