		Release Notes for C-INTERCAL

			DISCREDITS

This package is an implementation of the language INTERCAL designed by Don
Woods and James Lyon, who have since spent more than twenty years trying to
live it down.

This implementation was created by Eric S. Raymond <esr@snark.thyrsus.com>
during a fit of lunacy from which he has since mostly recovered.  It has
been considerably hacked upon and improved by Steve Swales, Michael Ernst,
Louis Howell, Brian Raiter, and others.  For detailed credits see NEWS.

			FILES

The compiler itself is in the src directory.  Setting a symbol in the
makefile will allow you to install it and its libraries and support files
in a directory of your choice.  The doc directory contains (surprise!)
documentation, and pit contains various examples of INTERCAL source code,
writhing in agony.

The files included are:

README			-- this file
BUGS			-- current bug and to-do list
NEWS			-- info on features and fixes new in this release
intercal.el		-- elisp for editing INTERCAL code under GNU Emacs

doc/README		-- historical notes on the docs
doc/intercal.mm		-- the manual in groffable form
doc/THEORY		-- some notes on the internals of the INTERCAL compiler

Makefile.in		-- makefile for the INTERCAL compiler
lexer.l			-- the lexical analyzer specification (in LEX)
ick.y			-- the grammar specification (in YACC)
ick.h			-- compilation types and defines
perpetrate.c		-- main routine for compiler
feh.c			-- INTERCAL-to-C code generator
feh.h			-- interface to INTERCAL-to-C code generator
fiddle.c		-- the INTERCAL operators
lose.[ch]		-- INTERCAL compile- and run-time error handling
ick-wrap.c		-- the driver for generated C-from-INTERCAL code
arrgghh.c		-- option argument parsing for generated programs
abcess.h		-- interface to functions linked with programs
cesspool.c		-- the INTERCAL runtime support code
numerals.c		-- numerals table for INTERCAL input
sizes.h			-- variables defining the numeric base

pit/*			-- sample INTERCAL code; see pit/CATALOG

		HOW TO GET STARTED

You want a man page?  Man pages are for wimps.  To compile an INTERCAL
program `foo.i' to executable code, just do

	ick foo.i

There's a -c option that leaves the generated `foo.c' in place for inspection
(suppressing compilation to machine code), a -d option that enables verbose
parse reporting from the yacc/bison parser, a -t option that requires strict
INTERCAL-72 compliance (rejecting COME FROM and the extensions for bases other
than two), a -b option that disables the INTERCAL-72 random-bug feature,
and an -O option that enables the (hah!) optimizer.  Invoking ick -?
prints a usage message.  Other than that, yer on yer own.

Another switch affects C-INTERCAL's runtime behavior.  The `-C'
option forces output in "clockface" mode, for superstitious users who
believe writing "IV" upside-down offends IVPITER and would rather
see IIII.

Every INTERCAL runtime also accepts certain options at runtime (code by 
Steve Swales).  These include [+/-]help, [+/-]traditional, and [+/-]wimpmode. 
The help option (with either + or -) triggers a 'usage' message. The
+traditional option is presently a no-op.

Steve writes: "The wimpmode option is the most interesting. I found myself
always running my test programs with filters on both ends to work around the
'nifty' INTERCAL number representations. This was so painful that I decided it
would be LESS painful (and a lot less code) if I added a 'wimp' option.  With
the +wimpmode option, the user is subjected to a humiliating message about what
a wimp he or she is to use this mode, but after that is allowed to use
conventional numerical notation.  While such a mode doubtless violates to some
extent the INTERCAL philosophy, the fact that a 'unbutcher' command has been
posted clearly indicates the need for it. Anyway... if you don't like it, don't
use it... the default is -wimpmode (i.e. NOT wimp mode)."

			SPREADING THE BLAME

There is an INTERCAL Resource Page at http://www.catb.org/intercal

The latest version of INTERCAL is also kept available at the
Retrocomputing Museun, http://www.catb.org/retro.

There is, in addition, an occasionally active USENET newsgroup devoted to the
language: alt.lang.intercal.

			NOTES ON THE LINUX BUILD

At the top of ick.h are two defines that you may need to remove if you
are using lex instead of flex.

Many lexes export a yylineno variable, an undocumented feature that is
not in flex (by default). If your build fails because of redecleration
of yylineno, comment out the define of YYLINENO_BY_HAND.

Some lexes also supply a yyrestart function to begin parsing a second
file, while others automatically restart after seeing an EOF. (This is
the case with flex.) If your build fails at link time because
yyrestart is not defined, comment out the define of USE_YYRESTART.

If you are using gcc in an non-ANSI environment, such as SunOS, it is
strongly recommended that you add "-Wno-unused -Wimplicit" to the gcc
command in the makefile. If you are in an ANSI environment and are
using the current versions of gcc, flex, and bison, C-INTERCAL should
build with no warnings.

				LICENSING

C-INTERCAL is now distributed under the General Public License,
except for the C skeleton file which is explicitly *not* GPLed
in order to avoid the (possibly mythical) "license virus" effect.
See the file COPYING for details on the General Public License.

				APOCALYPSE

INTERCAL is fully Y2K-compliant.  Indeed, it is Y2K-obsequious, and
loves nothing better than to be punished by relays of leather-clad and 
spike-heeled calendricists.  Bite me and go buy your own shotgun.
