"And yet it was a very clever pudding to invent."
"What did you mean it to be made of?" Alice asked, hoping to cheer him
up, for the poor Knight seemed quite low-spirited about it.
"It began with blotting-paper," the Knight answered with a
groan.
"That wouldn't be very nice, I'm afraid--"
"Not very nice alone," he interrupted, quite eagerly, "but
you've no idea what a difference it makes, mixing it with other
things--such as gunpowder and sealing-wax."
This section describes the use of ick, the C-INTERCAL compiler. Information specific to the other known INTERCAL compilers appears in the following sections. These sections are less useful, since the other compilers are no longer available, but they are retained to provide a sense of history, and because any information regarding INTERCAL is really too scarce to discard.
The C-INTERCAL compiler uses ASCII rather than EBCDIC. We follow the
Atari implementation (see section 11) by (a)
using big money ($
) as the mingle operator in place of
change (¢
), and (b) using what (?
) as
the XOR operator in place of bookworm
(V
<backspace>-
). The
original forms are still supported, in a manner of speaking: change
may be encoded via the Latin-1 character 0xA2, and the trigraph
V
0x08 -
may be used to represent bookworm.
To compile an INTERCAL program foo.i to executable code, just do
ick foo.i
There's a -c option that leaves the generated C code 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 random-bug feature (error 774), and an -O
option that enables the (hah!) optimizer. Invoking ick
-? prints a usage message.
Another compilation 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 C-INTERCAL runtime also accepts certain options at runtime. 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 explains: "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 an '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)."
A feature of INTERCAL-72 not documented in the original manual was
that it required a certain level of politesse from the programmer. If
fewer than 1/5th of the program statements included the
PLEASE
qualifier, the program would be rejected as
insufficiently polite. If more than 1/3rd of them included
PLEASE
, the program would be rejected as excessively
polite.
This check has been implemented in C-INTERCAL. To assist programmers
in coping with it, the intercal.el emacs mode included with the
distribution randomly expands "do " in entered source to
PLEASE DO
1/4th of the time.
The language recognized by the C-INTERCAL compiler includes several extensions made with an eye to international usage.
Firstly, numerical input is recognized in any of the following languages: English, Sanskrit, Basque, Tagalog, Nahuatl, Georgian, Kwakiutl, and Volapük.
Secondly, the interleave operator, normally written as either change
(¢
) or big money ($
) can instead be
written, using the Latin-1 character set, as quid
(£
) or zlotnik (¤
).