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,
+spike-heeled calendricists. Bite me and go buy your own shotgun.
+
+++ /dev/null
- 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:
-
-READ.ME -- 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/READ.ME -- historical notes on the docs
-doc/intercal.mm -- the manual in groffable form
-doc/THEORY -- some notes on the internals of the INTERCAL compiler
-
-src/Makefile -- makefile for the INTERCAL compiler
-src/lexer.l -- the lexical analyzer specification (in LEX)
-src/ick.y -- the grammar specification (in YACC)
-src/ick.h -- compilation types and defines
-src/perpetrate.c -- main routine for compiler
-src/feh.c -- INTERCAL-to-C code generator
-src/feh.h -- interface to INTERCAL-to-C code generator
-src/fiddle.c -- the INTERCAL operators
-src/lose.[ch] -- INTERCAL compile- and run-time error handling
-src/ick-wrap.c -- the driver for generated C-from-INTERCAL code
-src/arrgghh.c -- option argument parsing for generated programs
-src/abcess.h -- interface to functions linked with programs
-src/cesspool.c -- the INTERCAL runtime support code
-src/numerals.c -- numerals table for INTERCAL input
-src/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.ccil.org/intercal
-
-The latest version of INTERCAL is also kept available at the
-Retrocomputing Museun, http://www.ccil.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,
-spike-heeled calendricists. Bite me and go buy your own shotgun.
-
are represented by a change (\*(ct) and a sqiggle [sic] (~), respectively.
.if '\*c'y' \{\
(In C-INTERCAL's ASCII environment, EBCDIC \*(ct is replaced by a big
-money ($), but \*(ct can be used if encoded in Latin-1 as \e0xA2.) \}
+money ($), but \*(ct can be used if encoded in Latin-1 as \e0xA2
+or UTF-8 as 0xC2A2.) \}
.P
The interleave operator takes two 16-bit values and produces a 32-bit result
by alternating the bits of the operands. Thus, #65535\*(ct#0 has the 32-bit
.if '\*c'y' \{\
(In C-INTERCAL, \*(vb is replaced by what (?). The compiler recognizes
V<backspace>- as a valid equivalent, in case you are concerned about
-compatibility with the Princeton compiler.) \}
+compatibility with the Princeton compiler.
+In version 0.20 and later, the Unicode character U+2200 FOR ALL,
+which looks exactly like V<backspace>- or an upside-down `A'
+is also accepted in UTF-8 form.) \}
The operator is inserted between the spot, two-spot, mesh, or
what-have-you, and the integer, thus: .&123, #\*(vb123. Multiple unary
operators may not be concatenated, thus the form #\*(vb&123 is invalid. This
) by (a) replacing the change sign (\*(ct) with
big money ($) as the mingle operator, and (b) replacing the
bookworm (\*(vb) symbol with what (?) as the XOR operator.
+.P
+Version 0.18 and later versions accept the Latin-1 (ISO 8859-1)
+character set, which is a superset of ASCII. As a result,
+0xA2 (\*(ct), 0xA3 (quid), and 0xA4 (zlotnik) are accepted as mingle
+operators.
+.P
+Version 0.20 and later versions also accept UTF-8 as an alternative
+to Latin-1. The above three currency operators will be accepted in
+either Latin-1 or UTF-8 format. UTF-8 format is required if you
+wish to use any of EURO-CURRENCY SIGN, COLON SIGN (that's Costa Rican dinero,
+not the Intercal two-spot),
+CRUZEIRO SIGN, FRENCH FRANC SIGN, LIRA SIGN, MILL SIGN, NAIRA SIGN,
+PESETA SIGN, RUPEE SIGN, WON SIGN, NEW SHEQEL SIGN, DONG SIGN, EURO SIGN,
+BENGALI RUPEE MARK, BENGALI RUPEE SIGN, or THAI CURRENCY SYMBOL BAHT.
+(Isn't internationalization wonderful?)
+Furthermore, you can use the Intercal character FOR ALL to represent
+the what operator.
.H 2 "Usage and Compilation Options"
.P
To compile an INTERCAL program `foo.i' to executable code, just do
.P
This check has been implemented in C-INTERCAL. To assist programmers in
coping with it, the intercal.el mode included with the distribution randomly
-expands "do " in entered source to "PLEASE DO" 1/4th of the time. \}
+expands "do " in entered source to "PLEASE DO" 1/4th of the time.
+.H 2 "Localization: Ancient Roman"
+Version 0.18 and later versions of C-Intercal have been
+localized for Ancient Roman as well as English-speaking locales.
+This means that Latin-language keywords are accepted as equivalents
+for the English-based ones traditionally used.
+See src/lexer.l for details, as we do not propose to break
+Priscian's head (publicly expose our ignorance of Latin) here. \}
.if '\*c'y' \{\
.\" This is the same text as the ATARI NOTES at the end of the manual.
.H 1 "The Atari Implementation"
Begin3
Title: intercal
-Version: 0.18
-Entered-date: 27APR98
+Version: 0.20
+Entered-date: 17SEP99
Description: An implementation of the language INTERCAL, legendary for
its perversity and horribleness (this version adds COME FROM
for extra flavor). Comes with language manual and examples
including possibly the entire extant body of INTERCAL code.
+ Now supports i18n and l14n (to Ancient Roman locale only)
Keywords: language, compiler, retrocomputing, geek humor
Author: esr@snark.thyrsus.com (Eric S. Raymond)
Maintained-by: esr@snark.thyrsus.com (Eric S. Raymond)
Primary-site: locke.ccil.org /pub/esr
- 167K intercal-0.18.tar.gz
+ 167K intercal-0.20.tar.gz
Platforms: All
Copying-policy: GPL
End
# Torture-tester for the INTERCAL compiler
#
+ICK = ../src/ick -b
+
SOURCES = \
./sample.i \
./beer.i \
./count.3i \
./hail_mary.3i \
./icat.i \
+ ./tests/test1.i \
./tests/limits.i \
./tests/limits.3i \
- ./tests/test1.i \
./tests/test16bit.i \
./tests/testarray.i \
./tests/testcf.i \
./tests/testops.3i \
./tests/testops.5i \
./tests/testsplat.i \
+ ./tests/testi18n.i \
./pow.i \
./random.i \
./random2.i \
./lib/lib2.i \
./lib/numio.i \
./lib/syslib.i \
- ./lib/syslib.3i \
- ./lib/syslib.4i \
- ./lib/syslib.5i \
- ./lib/syslib.6i \
- ./lib/syslib.7i \
+ ./lib/syslib3.i \
+ ./lib/syslib4.i \
+ ./lib/syslib5.i \
+ ./lib/syslib6.i \
+ ./lib/syslib7.i \
./lib/plus.i \
./primes.i \
./life.i \
./iching2.i \
./hello.i \
./ins.i \
- ./yappp.i
+ ./yapp.i
TARGETS = \
./sample \
./count \
./hail_mary \
./icat \
- ./tests/limits \
./tests/test1 \
+ ./tests/limits \
+ ./tests/limits3 \
./tests/test16bit \
./tests/testarray \
./tests/testcf \
./tests/testlib2 \
./tests/test2 \
./tests/testops \
+ ./tests/testops \
./tests/testsplat \
+ ./tests/testi18n \
./pow \
./random \
./random2 \
./lib/lib2 \
./lib/numio \
./lib/syslib \
+ ./lib/syslib3 \
+ ./lib/syslib4 \
+ ./lib/syslib5 \
+ ./lib/syslib6 \
+ ./lib/syslib7 \
./lib/plus \
./primes \
./life \
./iching2 \
./hello \
./ins \
- ./yappp
+ ./yapp
+
+.SUFFIXES: .i .3i .4i .5i .6i .7i
+
+.i:
+ $(ICK) $<
+
+.3i:
+ $(ICK) $<
+
+.4i:
+ $(ICK) $<
-test:
- for x in $(SOURCES); do echo "Test-compiling $$x"; ../src/ick -b $$x; done
+.5i:
+ $(ICK) $<
-otest:
- for x in $(SOURCES); do echo "Test-compiling $$x"; ../src/ick -O -b $$x; done
+.6i:
+ $(ICK) $<
+
+.7i:
+ $(ICK) $<
+
+test: $(TARGETS)
+
+./lib/syslib3: ./lib/syslib.3i
+ cp ./lib/syslib.3i ./lib/syslib3.3i
+ $(ICK) ./lib/syslib3.3i
+
+./lib/syslib4: ./lib/syslib.4i
+ cp ./lib/syslib.4i ./lib/syslib4.4i
+ $(ICK) ./lib/syslib4.4i
+
+./lib/syslib5: ./lib/syslib.5i
+ cp ./lib/syslib.5i ./lib/syslib5.5i
+ $(ICK) ./lib/syslib5.5i
+
+./lib/syslib6: ./lib/syslib.6i
+ cp ./lib/syslib.6i ./lib/syslib6.6i
+ $(ICK) ./lib/syslib6.6i
+
+./lib/syslib7: ./lib/syslib.7i
+ cp ./lib/syslib.7i ./lib/syslib7.7i
+ $(ICK) ./lib/syslib7.7i
+
+./tests/limits3: ./tests/limits.3i
+ cp ./tests/limits.3i ./tests/limits3.3i
+ $(ICK) ./tests/limits3.3i
lines:
wc -l $(SOURCES)
clean:
- rm -f $(TARGETS) *.c *.o
-
-
+ rm -f $(TARGETS) *.c *.o lib/syslib?.?i tests/limits3.3i
%{
#include <stdio.h>
+#include <stdlib.h>
#include "sizes.h"
#include "ick.h"
#include "feh.h"
\; {return(HYBRID);}
\# {return(MESH);}
-\$ {return(MINGLE);}
-\xA2 {return(MINGLE);}
-\xA3 {return(MINGLE);}
-\xA4 {return(MINGLE);}
+\$ |
+\xA2 |
+\xA3 |
+\xA4 |
+\xC2\xA2 |
+\xC2\xA3 |
+\xC2\xA4 |
+\xE2\x82\xA0 |
+\xE2\x82\xA1 |
+\xE2\x82\xA2 |
+\xE2\x82\xA3 |
+\xE2\x82\xA4 |
+\xE2\x82\xA5 |
+\xE2\x82\xA6 |
+\xE2\x82\xA7 |
+\xE2\x82\xA8 |
+\xE2\x82\xA9 |
+\xE2\x82\xAA |
+\xE2\x82\xAB |
+\xE2\x82\xAC |
+\xE0\xA7\xB2 |
+\xE0\xA7\xB3 |
+\xE0\xB8\xBF {return(MINGLE);}
+
\~ {return(SELECT);}
\& {yylval.numval = AND; return(UNARY);}
V {yylval.numval = OR; return(UNARY);}
"V^H-" |
+\xE2\x88\x80 |
\? {yylval.numval = XOR; return(UNARY);}
\^ {yylval.numval = FIN; return(UNARY);}
@ {yylval.numval = WHIRL; return(UNARY);}
\({W}{D}\) {SETLINENO; yylval.numval = myatoi(yytext); return(LABEL);}
DO {SETLINENO; return(DO);}
+FAC {SETLINENO; return(DO);}
PLEASE {SETLINENO; politesse++; return(DO);}
+PLACET {SETLINENO; politesse++; return(DO);}
PLEASE{W}DO {SETLINENO; politesse++; return(DO);}
+PLACET{W}FACERE {SETLINENO; politesse++; return(DO);}
NOT {return(NOT);}
N\'T {return(NOT);}
+NON {return(NOT);}
\%{W}{D} {yylval.numval = myatoi(yytext);
if (yylval.numval && yylval.numval < 100)
else
lose(E017, yylineno, (char *)NULL);}
SUB {return(SUB);}
+MULTIPLICATUS{W}A |
BY {return(BY);}
\<- {return(GETS);}
+CALCULANDUM |
CALCULATING {yylval.numval = GETS; return(GERUND);}
+DEINDE |
NEXT {stbeginline = 0; return(NEXT);}
+PROXIMANDUM |
NEXTING {yylval.numval = NEXT; return(GERUND);}
+ALIENERE |
FORGET {return(FORGET);}
+ALIENENDUM |
FORGETTING {yylval.numval = FORGET; return(GERUND);}
+RECOLERE |
RESUME {return(RESUME);}
+RECOLERENDUM |
RESUMING {yylval.numval = RESUME; return(GERUND);}
+EXUERE |
STASH {return(STASH);}
+EXUENDUM |
STASHING {yylval.numval = STASH; return(GERUND);}
+INUERE |
RETRIEVE {return(RETRIEVE);}
+INUENDUM |
RETRIEVING {yylval.numval = RETRIEVE; return(GERUND);}
+DISSIMULARE |
IGNORE {return(IGNORE);}
+DISSIMULANDUM |
IGNORING {yylval.numval = IGNORE; return(GERUND);}
+MEMINISSE |
REMEMBER {return(REMEMBER);}
+MEMINISSENDUM |
REMEMBERING {yylval.numval = REMEMBER; return(GERUND);}
+ABSTINERE{W}A |
ABSTAIN{W}FROM {return(ABSTAIN);}
+ABSTINENDUM |
ABSTAINING {yylval.numval = ABSTAIN; return(GERUND);}
+REINSTARE |
REINSTATE {return(REINSTATE);}
+REINSTATANDUM |
REINSTATING {yylval.numval = REINSTATE; return(GERUND);}
+LEGERE{W}EX |
READ{W}OUT {return(READ_OUT);}
+LEGENDUM |
READING{W}OUT {yylval.numval = READ_OUT; return(GERUND);}
+SCRIBERE{W}IN |
WRITE{W}IN {return(WRITE_IN);}
+SCRIBENDUM |
WRITING{W}IN {yylval.numval = WRITE_IN; return(GERUND);}
+ADVENIRE{W}DE |
COME{W}FROM {stbeginline = -stbeginline; return(COME_FROM);}
+ADVENENDUM |
COMING{W}FROM {yylval.numval = COME_FROM; return(GERUND);}
+CONCEDERE |
+DESPERARE |
GIVE{W}UP {return(GIVE_UP);}
\+ {return(INTERSECTION);}
* Nahuatl, Tagalog, Sanskrit, Basque, Georgian, Kwakiutl, and
* Volap\"uk are now supported in addition to English.
*
- * As of release 0.18, Volap\"uk digits can be entered in either TeX or
- * Latin-1 format.
+ * As of release 0.18, Volap\"uk digits can be entered in either traditional
+ * Tex format, Latin-1, or UTF-8. Latin is also now a supported language,
+ * to fulfill the requirement for Ancient Roman localization.
*
LICENSE TERMS
Copyright (C) 1996 Eric S. Raymond
{ "LUL", 5 },
{ "M\\\"AL", 6 },
{ "M\0xC4L", 6 }, /* Latin-1 support */
+ { "M\0xA3\0xA4L", 6 }, /* UTF-8 support */
{ "VEL", 7 },
{ "J\\\"OL", 8 },
{ "J\0xD6L", 8 }, /* Latin-1 support */
+ { "J\0xA3\0x96L", 8 }, /* UTF-8 support */
{ "Z\\\"UL", 9 },
{ "Z\0xDCL", 9 }, /* Latin-1 support */
+ { "Z\0xA3\0x9CL", 9 }, /* UTF-8 support */
+/* Latin localization */
+ { "NIL", 0 },
+ { "NIHIL", 0 },
+ { "UNUS", 1 },
+ { "UNA", 1 },
+ { "UNUM", 1 },
+ { "DUO", 2 },
+ { "DUAE", 2 },
+ { "TRES", 3 },
+ { "QUATTUOR", 4 },
+ { "QUATUOR", 4 },
+ { "QUINQUE", 5 },
+ { "SEX", 6 },
+ { "SEPTEM", 7 },
+ { "OCTO", 8 },
+ { "NOVEM", 9 },
};
/* numeral.c ends here */
+++ /dev/null
-#
-# Torture-tester for the INTERCAL compiler
-#
-
-ICK = ../src/ick -b
-
-SOURCES = \
- ./sample.i \
- ./beer.i \
- ./bubble.i \
- ./count.3i \
- ./hail_mary.3i \
- ./icat.i \
- ./tests/test1.i \
- ./tests/limits.i \
- ./tests/limits.3i \
- ./tests/test16bit.i \
- ./tests/testarray.i \
- ./tests/testcf.i \
- ./tests/testlib2.i \
- ./tests/test2.i \
- ./tests/testops.3i \
- ./tests/testops.5i \
- ./tests/testsplat.i \
- ./tests/testi18n.i \
- ./pow.i \
- ./random.i \
- ./random2.i \
- ./rot13.i \
- ./rot13b.i \
- ./iogerunds.i \
- ./pi.i \
- ./lib/lib2.i \
- ./lib/numio.i \
- ./lib/syslib.i \
- ./lib/syslib3.i \
- ./lib/syslib4.i \
- ./lib/syslib5.i \
- ./lib/syslib6.i \
- ./lib/syslib7.i \
- ./lib/plus.i \
- ./primes.i \
- ./life.i \
- ./life2.i \
- ./sink.i \
- ./change.i \
- ./iching1.i \
- ./iching2.i \
- ./hello.i \
- ./ins.i \
- ./yapp.i
-
-TARGETS = \
- ./sample \
- ./beer \
- ./bubble \
- ./count \
- ./hail_mary \
- ./icat \
- ./tests/test1 \
- ./tests/limits \
- ./tests/limits3 \
- ./tests/test16bit \
- ./tests/testarray \
- ./tests/testcf \
- ./tests/testlib2 \
- ./tests/test2 \
- ./tests/testops \
- ./tests/testops \
- ./tests/testsplat \
- ./tests/testi18n \
- ./pow \
- ./random \
- ./random2 \
- ./rot13 \
- ./rot13b \
- ./iogerunds \
- ./pi \
- ./lib/lib2 \
- ./lib/numio \
- ./lib/syslib \
- ./lib/syslib3 \
- ./lib/syslib4 \
- ./lib/syslib5 \
- ./lib/syslib6 \
- ./lib/syslib7 \
- ./lib/plus \
- ./primes \
- ./life \
- ./life2 \
- ./sink \
- ./change \
- ./iching1 \
- ./iching2 \
- ./hello \
- ./ins \
- ./yapp
-
-.SUFFIXES: .i .3i .4i .5i .6i .7i
-
-.i:
- $(ICK) $<
-
-.3i:
- $(ICK) $<
-
-.4i:
- $(ICK) $<
-
-.5i:
- $(ICK) $<
-
-.6i:
- $(ICK) $<
-
-.7i:
- $(ICK) $<
-
-test: $(TARGETS)
-
-./lib/syslib3: ./lib/syslib.3i
- cp ./lib/syslib.3i ./lib/syslib3.3i
- $(ICK) ./lib/syslib3.3i
-
-./lib/syslib4: ./lib/syslib.4i
- cp ./lib/syslib.4i ./lib/syslib4.4i
- $(ICK) ./lib/syslib4.4i
-
-./lib/syslib5: ./lib/syslib.5i
- cp ./lib/syslib.5i ./lib/syslib5.5i
- $(ICK) ./lib/syslib5.5i
-
-./lib/syslib6: ./lib/syslib.6i
- cp ./lib/syslib.6i ./lib/syslib6.6i
- $(ICK) ./lib/syslib6.6i
-
-./lib/syslib7: ./lib/syslib.7i
- cp ./lib/syslib.7i ./lib/syslib7.7i
- $(ICK) ./lib/syslib7.7i
-
-./tests/limits3: ./tests/limits.3i
- cp ./tests/limits.3i ./tests/limits3.3i
- $(ICK) ./tests/limits3.3i
-
-lines:
- wc -l $(SOURCES)
-
-clean:
- rm -f $(TARGETS) *.c *.o lib/syslib?.?i tests/limits3.3i
<table width="100%" cellpadding=0><tr>
<td width="30%">Back to <a href="http://www.tuxedo.org/~esr">Eric's Home Page</a>
<td width="30%"align=center>Up to <a href="/~esr/sitemap.html">Site Map</a>
-<td width="30%" align=right>$Date: 1999-06-28 01:24:13 $
+<td width="30%" align=right>$Date: 1999-09-16 03:31:09 $
</tr></table>
<HR>
<H1 ALIGN=CENTER>This is the INTERCAL Resources Page.</H1>
<IMG SRC="../graphics/new.png" ALT="(NEW!)" WIDTH=25 HEIGHT=12>
-Just out! Now with internationalization, so the <strong>entire world</strong>
-can fall under its sinister spell, it's...<strong>INTERCAL 0.19</strong>!<P>
+Just out! the long-awaited. long=dreaded <strong>INTERCAL
+0.20</strong>. Yes -- it's the millennium edition!<P>
Beware! If you aren't a hard-core hacker, you'd best surf right back
where you came from <EM>now</EM>. Nothing but twisted technical yuks
<H2>Implementations</H2>
You can download the latest version of the <A
-HREF="http://www.tuxedo.org/~esr/intercal/intercal-0.19.tar.gz"> C-INTERCAL
+HREF="http://www.tuxedo.org/~esr/intercal/intercal-0.20.tar.gz"> C-INTERCAL
distribution</A> here (includes the manual and sample programs).
Requires either bison or yacc and flex or lex. Builds and runs nicely
under any ANSI/POSIX platform, including Linux and the free BSD
<table width="100%" cellpadding=0><tr>
<td width="30%">Back to <a href="http://www.tuxedo.org/~esr">Eric's Home Page</a>
<td width="30%"align=center>Up to <a href="/~esr/sitemap.html">Site Map</a>
-<td width="30%" align=right>$Date: 1999-06-28 01:24:13 $
+<td width="30%" align=right>$Date: 1999-09-16 03:31:09 $
</tr></table>
<P><ADDRESS>Eric S. Raymond <A HREF="mailto:esr@thyrsus.com"><esr@snark.thyrsus.com></A></ADDRESS>