]> thyrsus.com Git - intercal.git/commitdiff
More adaptations for the shipper release machinery.
authorEric S. Raymond <esr@thyrsus.com>
Sun, 28 Nov 2010 22:47:16 +0000 (17:47 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Sun, 28 Nov 2010 22:47:16 +0000 (17:47 -0500)
control is the control file for shipper. It needs to see short-form news
from which to generate Freshmeat announcements and notification email, so
we move NEWS to HISTORY and start NEWS is format it can handle.

HISTORY [new file with mode: 0644]
NEWS
README
buildaux/Makefile.am
control [new file with mode: 0644]

diff --git a/HISTORY b/HISTORY
new file mode 100644 (file)
index 0000000..de386e5
--- /dev/null
+++ b/HISTORY
@@ -0,0 +1,1011 @@
+This is the long-form history of the project.  For the short form used
+to generate release announcements, see NEWS.
+
+== Release 0.29 (by Alex Smith, Eric S. Raymond) ==
+
+=== Changes by Eric S. Raymond ===
+
+1.  There is now a compiler regression-test suite, invoked through the test 
+    production in the pit makefile.
+
+2.  There are two new compiler error messages, E990 and E994.
+
+3.  A new program for the pit: Brendan Gregg's guess game.
+
+4.  The floating-point library is now automatically included if
+    a program NEXTs to labels in the range 5000-5999.  Internally,
+    line-range to system library mappings are no longer hardcoded but
+    rather declared as an array of associations that can be easily
+    modified.
+
+5.  The source now uses explicit bool, rather than using int everywhere.
+
+6.  README, HISTORY, and BUGS are now mastered in asciidoc for easier
+    web-page generation.
+
+=== Bugs reported and changes patched by Arvid Norlander ===
+
+7.  Fixed a typo in the perpet.c version of the help information.
+
+8.  Fixed the CREATE statement to work on 64-bit architectures.
+
+9.  The availability of variable argument list mechanisms is now determined
+    automatically by the configure script, rather than relying on the old
+    method of checking which usually gets the wrong answer with modern
+    compilers, leading to build failures on many modern systems (previously
+    this was patched just for DJGPP, the patch now applies to all operating
+    systems and platforms). This bug is known to have affected the build on
+    DOS, FreeBSD and Mac OS X, and possibly affects other platforms. (also
+    reported independently by Elliott Hird)
+
+10. Fixed some nonsense in the -@ help screen that was generated by an errant
+    search-and-replace.
+
+11. Made several changes to bring the new Befunge-98 interface code (see
+    below) in line with changes in the Befunge-98 interpreter in use.
+
+12. Added consts and statics in the code, hopefully to make bugs easier to
+    notice.
+
+13. Refactored main(). It needed it, badly.
+
+=== Bugs reported by Elliott Hird ===
+
+14. Fixed the configure script to work with the default Debian shell dash.
+    (also reported independently by Debian)
+
+15. Actually fixed unlambda.i; the fix was meant to be in 0.28, and is
+    described in its changelog, but for some reason never made it to
+    the distributed tarball.
+
+16. The -F option again works. (AIS: I accidentally broke it in the preceding
+    version, making it basically a no-op by mistake.)
+
+17. The build now succeeds (with warnings) when lex or yacc are missing,
+    rather than failing with mysterious error messages that seem to have
+    nothing to do with the problems. (The success is made possible by using
+    the prebuilt versions; see change 11 of version 0.26, this is finishing
+    what that started.)
+
+=== Bugs reported, changes requested, and patches by Joris Huizer ===
+
+18. The [xoritself] optimiser idiom has been generalised to handle some
+    situations where the redundant XOR operands are on different grouping
+    levels; this helps to optimise some heavily inlined greater-than tests.
+
+19. Fixed unary operators applied to constants (AIS: it seems that my patch to
+    solve this issue earlier was itself buggy).
+
+20. The -g option now causes optimisation of the output compiled C to be
+    turned off, and adds comments to the output file the same way -c does.
+
+21. Added more optimiser idioms: [cxorand16], [cxorand32], [cfoldintoorinand],
+    [or16and], [xor16and], [lshift32half], [rshiftoutofneg], [andoutofneg];
+    also generalised the idiom-matching code to compare 16-bit and 32-bit
+    constants as equal if they have the same value, and fixed some typos in
+    the current 16-bit complement idioms.
+
+22. ABSTAINING or REINSTATING are now a lot more efficient, taking an amount
+    of time proportional to the number of commands effected, rather than the
+    number of commands in the program. (AIS: I implemented this with the
+    algorithm in the patch Joris provided, but with different code, to make it
+    easier to maintain.)
+
+=== Changes by Stefan O'Rear ===
+
+23. Added INTERCAL syntax highlighting information for vim. Why should Emacs
+    have all the fun?
+
+=== Changes reported by Phantom Hoover ===
+
+24. Fixed a nasty documentation typo.
+
+=== Changes reported by the Debian autobuilders and Joey Hess ===
+
+25. The build of the optimiser idioms is now split over many files, to reduce
+    the memory usage of gcc when it tries to compile the giant output C file.
+    This was a problem on ia64. (The ulimit method of preventing thrashing has
+    been removed, as this method works better; likewise, the optimiser
+    optimisation now works again.)
+
+=== Changes by Alex Smith ===
+
+26. The build system has been completely redone, again; it now uses automake
+    as well as a much newer version of autoconf. This means that there is now
+    one build system that works the same way on all systems, and that all
+    sorts of clever tricks like out-of-tree builds, a self-rebuilding build
+    system, and building the distribution directly from the Makefile, are
+    possible. As a side effect, the directory structure looks somewhat
+    different to how it looked in previous versions; src, doc, etc and pit are
+    still there, but now there's prebuilt instead of temp, an extra directory
+    buildaux, and bin, lib and include have disappeared.
+
+27. The distribution now comes in compressed pax format. (Before anyone
+    complains that they have no idea what that is, or that I'm using something
+    strange and nonstandard, I'd like to point out that tar is no longer part
+    of POSIX, but that pax is. (See man 5 tar on a recent Linux system for
+    details of the whole mess.)  Luckily, pax is forward-compatible with tar
+    so tar readers should be able to read it just fine, if you can't get your
+    hands on a pax reader.)
+
+28. convickt can now produce its output as INTERCAL initialisation of a tail
+    array. (This doesn't auto-offset between the different characters; it is
+    therefore mostly useful for producing Baudot arrays for CLC-INTERCAL-style
+    IO.)
+
+29. The function clock_gettime is now supported by the yuk profiler as an
+    alternative method of getting a high-resolution clock for profiling (it
+    is available on at least Linux).
+
+30. The profiler now autodetects the same profiling mechanism at compile
+    time and at run time. (It was getting confused as to what mechanism it was
+    using, causing some really weird bugs.)
+
+31. Added support for computed CREATE (the computation is done at create-time,
+    rather than when the unknown statement is encountered); partly because
+    this was rather easy, but mostly because it can be used to simulate a
+    computed NEXT, thus making the example expansion library compunex (which I
+    forgot to mention in the 0.28 release notes) redundant. Because it was
+    deprecated when I added it, compunex is now doubly deprecated, and anyone
+    tempted to use it should use computed CREATE instead. (I have always
+    maintained that if computed NEXT were ever added to C-INTERCAL, it would
+    be deprecated on arrival; the computed CREATE method implements all
+    features of NEXT, anyway, rather than the small subset COMPUNEX could
+    manage.)
+
+32. Plugged a couple of small memory leaks; however, there are still several
+    much bigger memory leaks that could do with being fixed.
+
+33. Added support for CREATING operators, with similar syntax to the CREATION
+    of commands.  This requires the -ea options to be set to work properly.
+
+34. More file extensions are now supported by the external calls system. The
+    .c99 extension indicates a C99 (rather than C89) file; all .c99 files are
+    preprocessed as C99, and if any C99 files are used the final compilation
+    which compiles and links everything will be done as C99 rather than C89
+    (this causes no problems for C-INTERCAL's output which is both legal C89
+    and legal C99). Also, libraries can be linked in; to link in the maths
+    library for instance (i.e. pass -lm to gcc), write libm.a as a filename at
+    the end of the command line. (The file's real name is libm.a; if a
+    filename is in lib*.a format, then ick will look in the normal library
+    locations instead of the current directory.) Other .a files can be linked
+    in from the current directory.
+
+35. Fixed the handling of division by zero in the syslibc expansion library.
+    (The Revamped Manual states 'In all cases, division by 0 returns 0'.)
+
+36. Made several changes to the documentation, including fixes for some rather
+    nasty typos (two of the worst were specifying variables as IGNORED by
+    default, and stating that select acts like OR in TriIntercal!).
+
+37. Fixed a bug in the external calls system that made it impossible to write
+    a COME FROM in more than one file at a time whilst still having the
+    resulting program work reliably.
+
+38. Added support for external calls to Befunge-98 programs; however, this
+    distribution does not ship with a Funge-98 interpreter, so in order to use
+    this feature you will first have to compile a Funge-98 interpreter into a
+    library for use with C-INTERCAL (see README.txt or the Revamped Manual for
+    information on this). Also added a test program for this to the pit.
+
+39. Fixed some bugs in the go-away command in interfunge.i.
+
+40. Fixed many bugs in the optimiser, and added a fuzz-tester ("make fuzz") for
+    the optimiser which has a chance at finding any new optimiser bugs that may
+    be introduced, or any that the maintainers don't know about.
+
+== Release 0.28 (by Alex Smith) 1 Apr 2008 ==
+
+=== Patches, suggestions and bugs found by Joris Huizer ===
+
+1.  Fixed a typo in the [noopxor] optimiser idiom.
+
+2.  Added a [redundantdoublenot] optimiser idiom (a generalisation of Joris'
+    suggestion of and code for [triplenot]).
+
+3.  Fixed a typo that caused the flow optimiser to optimise some errors into
+    non-erroring code.
+
+4.  Fixed the [lshift16] optimiser idiom; previously it was giving incorrect
+    values in some cases where the bits being selected from the original
+    number weren't contiguous.
+
+5.  There is now no longer a segfault when the unusual option combination -f
+    (without specifying -O) is used.
+
+6.  It is again possible to recompile more than one source file at a time.
+
+7.  The flow optimiser now recognises that comments can be reinstated in
+    programs where they can be reinstated.
+
+=== Changes by Alex Smith ===
+
+8.  Fixed some typos in the documentation.
+
+9.  Applying an infix unary operator to a constant (as in &#26) now returns
+    the correct value; previously it returned the unary operator applied to a
+    sequence number that was 0 for the first unique constant that was the
+    argument of a unary operator, 1 for the second unique constant, and so
+    on. (This was a bug in the parser.)
+
+10. Added doc/THEORY.txt back in. (It seems that it went missing some time
+    between 1.26 and 0.27.) Updated it to describe the current compiler.
+
+11. Turned off optimisation of the optimiser, and also placed a 128MB limit on
+    the data segment and virtual memory it was allowed to use. This is to
+    prevent Linux thrashing and/or invoking the dreaded oom-killer when
+    recompiling idiotism.c. (This happened only rarely, but it happened to me
+    twice, each time making my computer unusable for about half an hour.
+    Therefore, a fix to prevent the situation happening again was added,
+    assuming your computer has at least 128MB free memory and disk space.) As
+    a bonus, the build process is now considerably faster, because the
+    optimisation of the optimiser was the slowest step of the process.
+
+12. Internally, all symbols that are visible globally are now name-mangled (by
+    using the prefix ick_). This allows other files to be linked with files
+    compiled from INTERCAL without namespace collisions. This does not include
+    symbols that are only useful in multithreading (as INTERCAL's
+    multithreading model is incompatible with other programs), only for the
+    debugger (because linking yuk into a program causes all sorts of chaos if
+    non-INTERCAL programs are involved), or only used by the compiler (which
+    hopefully should never be linked to another program that isn't
+    specifically designed to be linked to it).
+
+13. Thoroughly delinted the code, using Splint; the code is now annotated to
+    show Splint what is being done where (and all the non-obvious annotations
+    are explained so that humans can figure out what is going on as well);
+    over 800 warnings have been fixed, including some which identified bugs in
+    the original program (many of which were to do with edge cases involving
+    unusually long strings, and some of which were buffer overflows). All
+    comments from /*@ to @*/ are mine, and are annotations for Splint.
+
+14. Implemented external calls, which allow multiple INTERCAL programs to be
+    linked to each other, and/or to C programs, via the -e option and NEXT /
+    COME FROM / NEXT FROM / FORGET / RESUME statements. See the manual for
+    more details. (Note that external calls require you to use gcc, GNU cpp,
+    and GNU ld, because they rely on features of those programs to work.)
+
+15. Two other new compiler options have been added: -E (don't link system
+    library), and -w (enable +printflow debugging even for non-multithread
+    programs). +printflow has been enhanced to show what's going on in
+    externally-called programs to some extent, too.
+
+16. Added a version of the INTERCAL system library written in C, as
+    pit/lib/syslibc.c. A new compiler feature allows the inclusion of such
+    expansion libraries via the command line; to include this library, you
+    would write the command line as ick -eE yourprogram.i syslibc (possibly
+    adding other options than -eE). The main advantage of the C-based system
+    library is speed; also, note that an implemented-in-a-faster-language-
+    than-INTERCAL system library existed in the Princeton compiler (which is
+    possibly how the INTERCAL version managed to stay buggy for decades
+    without anyone noticing), so this is another case of catching up with
+    historically available features. (The feature is also somewhat reminicent
+    of CLC-INTERCAL's 'preloads', but is implemented differently, and is
+    useful for different things, as it doesn't affect the compiler.)
+    Expansion libraries are included via -e, like non-INTERCAL programs are,
+    but are distinguished by not having an extension.
+
+17. The handling of syntax errors has been improved; many lines that
+    previously caused E017 at compile time are now correctly interpreted as
+    run-time errors. The only way to cause E017 nowadays is to write a
+    constant out of the onespot range, and the manual description of the error
+    has been changed accordingly. (Note that I caused several regressions
+    while implementing this; I hope they're all fixed now, but there may be
+    some left. Please report any remaining parsing problems caused by this;
+    they mostly manifest as either the line after a comment being corrupted or
+    ignored, or as the line before a comment being taken to be part of the
+    comment.)
+
+18. A new 'just-in-case' compilation method is used for syntax errors. If a
+    syntax error is encountered at compile-time, and contains just capital
+    letters with no other meaning (i.e. they don't form keywords and none of
+    them is the letter V), variables, and expressions, and there are no two
+    consecutive expressions or variables involved (i.e. they are separated by
+    keywords), the compiler will compile it anyway, just in case it happens to
+    gain a meaning later (see the next changelog entry). This is sort of the
+    converse of the way CLC-INTERCAL goes about compiling things that don't
+    have a meaning yet (it uses a 'just-too-late' compiler which waits for the
+    offending statement to error out, then recompiles it to see if it's gained
+    a meaning in the meantime), and this difference in handling typifies the
+    difference between the compilers quite well.
+
+19. Implemented the CREATE statement, because I could (see point 18). This
+    allows new syntax to be created at runtime. CLC-INTERCAL also has a CREATE
+    statement, but its syntax is totally different (it specifies the bytecode
+    for the command, whereas C-INTERCAL's CREATE statement allows you to
+    specify what the new command does in INTERCAL itself.)  A function call
+    ick_create is also available; it's usable from externally-called programs
+    and from expansion libraries, and means that INTERCAL commands can now be
+    defined to do things which were previously well out of INTERCAL's
+    reach. This makes expansion libraries act even more like CLC-INTERCAL
+    preloads.
+
+20. Fixed a strange bug in yuk when the basename of the INTERCAL program was
+    the same as that of a shell builtin or command on the user's path.
+
+21. Programs accept a new option +instapipe that causes output to be output
+    immediately, even if not followed by a newline, by flushing the output
+    after every character. This is most useful with binary output into pipes,
+    and occasionally useful for getting the output to very slow programs
+    faster.
+
+22. Fixed an error in an optimiser idiom that could optimise erroring code
+    involving mingles into non-erroring code (which is of course incorrect);
+    also edited unlambda.i in the pit, which was taking advantage of this
+    error (and erroring out if optimisation was turned off).
+
+23. Fixed a bug with the ON THE WAY TO line number displayed when COME FROMs
+    are involved that I accidentally introduced in 0.25.
+
+=== Changes from elsewhere ===
+
+24. Added yet another nontrivial INTERCAL program to the pit; interfunge.i
+    (written by Jeffrey Lee) is a Befunge-93 interpreter written in INTERCAL.
+    (It appears to conform to the standard (I actually ran it against a
+    testsuite, and it passed); its only pecularities, apart from the language
+    in which it's written, appear to be the need for a blank line at the end
+    of the program, but no blank lines earlier (because INTERCAL can't sense
+    EOF, although there are plans to change that), the restriction to 80x25 is
+    enforced (this seems to be an implied requirement in the standard, but
+    most Befunge-93 interpreters don't enforce it), and numeric output is in
+    Roman numerals (what did you expect?).)
+
+== Release 0.27 (by Alex Smith) 22 Dec 2007 ==
+
+1.  Joris Huizer pointed out that the manual nowhere says that a GIVE UP line
+    can't be abstained from by line number. This was probably a mistake in the
+    INTERCAL-72 manual, but the behaviour specified by the original manual is
+    now implemented; after all, it wouldn't do to violate the original de facto
+    standard. (Note that if a GIVE UP line is abstained by line number, there
+    is then no way to reinstate it; also, if the -X switch for CLC-INTERCAL
+    compatibility is used, ABSTAINING FROM a GIVE UP line by line number is
+    also silently ignored.)
+
+2.  Rewrote the optimizer in a language (OIL) invented specifically for the
+    purpose; the set of optimizer idioms is now in idiotism.oil, and translated
+    into C and linked with the rest of the compiler at metacompile time (that
+    is, when the compiler itself is being compiled). It contains many of the
+    same idioms, but some have been generalised or reduced into smaller parts
+    and some new ones were added. Documentation for OIL has been added as part
+    of the documentation for the distribution as a whole.
+
+3.  Joris Huizer submitted a patch to fix a memory allocation bug which
+    occasionally caused memory corruption when a program had a number of
+    commands that was 1 less than a multiple of 256.
+
+4.  Completely redid the autoconfiguration. The install should now progress
+    with less user interaction than before. As a bonus, if you have a range of
+    GNU utilities including make, sed, tr, and bash (and possibly others), it's
+    now possible to compile using 'sh configdj.sh' followed by 'make' under
+    DJGPP. (To be specific, some settings that previously sometimes had to be
+    set by the user, such as whether lex provided yylineno and yyrestart, are
+    now either detected by config.sh or no longer relevant. Other settings that
+    were not previously detected, such as what extension executables have, are
+    now detected so that the config script works on DJGPP as well, now;
+    compiling the config script on a non-DJGPP system seems to result in a
+    script that fails on DJGPP, and likewise compiling the script on DJGPP
+    seems to result on a script that fails on other systems, so both scripts
+    are provided. The autoconfigurer now also adapts coopt.sh so that -F works
+    on DJGPP too, sort of (or else detects that it won't work and disables it).
+
+5.  Improved the action of 'make install', so that it actually installs
+    everything in the right place. It works under DJGPP, now, too, as long as
+    you have the programs installed that allow configdj.sh and make to work.
+
+6.  Fixed a bug involving COME FROM in multithreaded programs; now, if a line
+    COMEs FROM itself (either because this is written explicitly or because it
+    is a computed COME FROM computing to its own line number), the loop this
+    creates doesn't block all the other threads in the program.
+
+7.  Added support for statement WHILE statement, with similar semantics to CLC-
+    INTERCAL. (The second statement is repeated for as long as the first
+    statement is executing; NEXTing to the statement nexts to the first
+    statement and doesn't set off the loop, and COMING or NEXTING FROM the
+    first statement leaves the loop running until the NEXT FROM returns.) With
+    the current implementation, strange things happen if the same WHILE is
+    simultaneously run by multiple threads, although I decided to work out
+    exactly what the rules were anyway and document them, so those strange
+    things are now official.
+
+8.  Fixed some weird bugs in the multithreader that could cause segfaults in
+    several situations involving backtracking; it's kind of surprising that
+    they didn't turn up sooner.
+
+9.  Prevented a segfault in some situations where a syntax error was the
+    target of a noncomputed COME FROM or NEXT FROM.
+
+10. CALCULATING now includes array dimensioning. (There previously was no
+    gerund for this situation; the original manual doesn't say what to do but
+    implies that this is a special case of calculate.)
+
+11. Made operand overloading interact more sensibly with multithreading.
+    Previously, overloading information was shared between all threads, but the
+    stashes for operand overloading were separate in each thread. Now, the
+    overloading is not shared between threads, except when they are woven by a
+    WHILE statement.
+
+12. There's no longer a need to set or modify copyloc in the makefile by hand;
+    COPYING.txt is now found the same way as syslib and the skeleton. It's also
+    now copied out of the distribution to the same place as the other data
+    files when installing, preventing the need to keep the original
+    installation directory around.
+
+13. The compiler now actually looks for a temporary directory to place a file
+    in when creating a temporary file; this was meant to be fixed in 1.26, but
+    the fix didn't actually work.
+
+14. Added a new program to the pit: an Unlambda interpreter written by Oerjan
+    Johansen in 2001, and also a commented version as documentation.
+
+15. Section 23 of the release notes for version 0.26 is wrong; I was obviously
+    confused when I wrote them because they were speaking nonsense.  For the
+    record: no, there is nothing special about NEXT in connection with
+    backtracking.  It should have said "NEXT", not "choicepoint".  Instead of
+    rewriting history, this changelog entry is added as a fix.
+
+16. Added an entirely new set of documentation, the Revamped Manual, which is
+    available in a wide range of formats and documents recent language changes,
+    as well as many other things INTERCAL. The Revised Manual has been
+    preserved, but it seems unlikely to be updated in the near future (it is
+    still well worth a read anyway).
+
+17. For compatibility, the COMMENT gerund can now be spelt COMMENTS or
+    COMMENTING.
+
+18. Corrected the Emacs INTERCAL mode to work with more recent versions of
+    Emacs than it previously worked with, hopefully without sacrificing too
+    much backward compatibility.
+
+19. Added a conversion program 'convickt'; it can convert between the Latin-1,
+    Baudot and EBCDIC character sets used by CLC-INTERCAL (Latin-1 is also
+    accepted by C-INTERCAL, so this gives a practical way to run CLC-INTERCAL
+    programs in unusual character sets on C-INTERCAL), and can also attempt to
+    convert into the 'Atari character set' (which uses $ instead of the cent
+    sign, ? instead of yen, and so on for the other characters that differ
+    between C-INTERCAL and CLC-INTERCAL).
+
+20. Reorganised the Makefile and environment variable system for finding
+    locations to make more logical sense; various definitions and environment
+    variables now do what their name suggests rather than something completely
+    different, a situation which confused the programmers previously.  The new
+    version should be better at finding files that it needs, and also cuts
+    down on the amount of useless copying that the Makefile did (such copying
+    is now only done if the destination file doesn't already exist or is out
+    of date).
+
+21. Fixed some problems in the PIC-INTERCAL code: one problem with finding the
+    correct location for the skeleton, and some code duplication between the
+    two header files. Also clarified one of the comments.
+
+22. Added support for CLC-INTERCAL-style Baudot I/O (generalised array I/O is
+    currently unimplemented, though). This has a two minor differences to the
+    CLC-INTERCAL version: unrecognised characters, instead of causing an
+    error, become 0 when WRITING IN (except that tabs are translated to single
+    spaces) and ASCII code 26 when READING OUT. (Baudot characters not in
+    ASCII will be translated to Latin-1; there are more of these than might be
+    expected, because the CLC-INTERCAL extended Baudot is being used).
+
+23. The man pages and some fixes for the documentation Makefile from the
+    Debian package were copied into the main distribution. The man page was
+    written originally by Mark W. Eichin and later modified by Joey Hess (and
+    was further modified by me prior to placing it in the distribution); the
+    Makefile fixes are due to Joey Hess. Strangely, many of the changes I made
+    to the Makefile for this version have much the same effect as fixes that
+    the Debian package maintainers had come up with earlier; a new Makefile
+    variable ick_specific_subdir has been added to hopefully make the Debian
+    maintainer's job easier (it allows elimination of versioned
+    subdirectories, replacing them with versionless subdirectories).
+
+24. Added a new test program to the pit, tests/ignorret.i, that demonstrates
+    how the interaction between IGNORE and RETRIEVE is different between
+    C-INTERCAL, CLC-INTERCAL, and J-INTERCAL, and documentation showing the
+    results on each version.
+
+  Release 1.26 (by Alex Smith) [a bugfix of 0.26]  3 Sep 2007
+
+1.  Fixed an optimizer bug (thanks to Joris Huizer for pointing it out),
+    relating to active-bits deduction in some expressions involving select.
+
+2.  Fixed a bug in the flow optimizer that caused it to occasionally confuse
+    ABSTAIN with REINSTATE when gerunds were used.
+
+3.  Simplified the compilation of INTERCAL files to .exe under DJGPP, to avoid
+    some temporary files (hopefully solving some problems users may be having
+    with finding which directory the temporary files are in under DJGPP);
+    when under DJGPP a temporary file other than .c or .exe is needed, the
+    compiler now looks for a directory reserved for temporary files to place it
+    in rather than just using the current directory.
+
+4.  The original INTERCAL manual specifies that GIVE UP cannot be REINSTATED
+    or ABSTAINED FROM; this is now implemented, by taking only the original
+    DO/DO NOT status into account when executing a GIVE UP statement.
+
+5.  Dealt with problems with what happens with the 'original' stdin (this
+    information was previously lost, making it hard for the debugger to accept
+    input because it had no obvious place to accept it from), and removed the
+    previous hacky workarounds for this problem (which were my fault).
+
+6.  Made several improvements to the documentation, especially with respect to
+    installing and running under DJGPP.
+
+7.  Modified the version number scheme, so that minor revisions and bugfixes
+    now increment the major version number rather than the minor version number
+    (it was getting a little bored stuck at 0). The next major release will be
+    version 0.27.
+
+== Release 0.26 (by Alex Smith)  1 Apr 2007 ==
+
+1.  Fixed a few bugs in the previous release (some bugfixed by Joris Huizer).
+
+2.  Ported to DJGPP. The compiler now works on both POSIX and DJGPP systems.
+
+3.  Reorganized the directory structure.
+
+4.  Added support for cross-compiling to the PIC microcontroller.
+
+5.  Added a simple test program for PIC cross-compilation.
+
+6.  Improved further searching for skeletons and executables.
+
+7.  Delinted some of the code, and turned up the default gcc warning level.
+
+8.  Reformatted some of the documentation.
+
+9.  Renamed and split files; all files used in the build now have 8.3
+    filenames, to prevent any problems using DJGPP on 8.3 systems. The
+    optimizer was split from the code degeneration into dekludge.c (optimizer)
+    and feh2.c (degeneration), because feh.c was getting too large.
+
+10. The text documentation (README, COPYING, NEWS, and BUGS) was renamed to
+    end .txt (again for DJGPP compatibility); formatting changes were made to
+    README in addition to the addition of extra readme information.
+
+11. Included precompiled-to-C versions of the parser and the lexer so that
+    DJGPP (or I suppose, POSIX if you hacked the makefile) implementations
+    without bison or flex could still compile the rest of C-INTERCAL and give
+    a running program.
+
+12. Fixed a bug involving optimization of Tri-INTERCAL programs.
+
+13. Added to the lexer, so that it supports CLC-INTERCAL syntax for operators
+    that were already present in C-INTERCAL, as long as they don't conflict
+    with C-INTERCAL syntax. (Using the -X switch will support CLC-INTERCAL
+    syntax for operators that were already present in C-INTERCAL even if they
+    conflict with C-INTERCAL syntax.) For the symbols present in the
+    CLC-INTERCAL character set but not in ASCII, ISO-8859-1 is supported as an
+    encoding as well as UTF-8 (to increase the chance that CLC-INTERCAL
+    programs will run without modification); it was meant to be supported to
+    some extent before, but seemed not to be working.
+
+14. Added the COMMENT gerund, with the same semantics as in CLC-INTERCAL.
+
+15. Added COME FROM gerund. This suffers from the same restrictions as
+    computed COME FROM, in that it can't be used in PIC programs and causes
+    the program to end up substantially less efficient.
+
+16. Added support for prefix as well as infix unary operators. The rule is
+    that any number of prefix unary operators, but only one infix unary
+    operator, is allowed on each group, variable, and/or mesh. (Previously,
+    only infix operators were supported, and then only one per mesh.)
+
+17. Added positional precedences to the parser. INTERCAL still doesn't have
+    operator precedences (that would be completely contrary to the spirit of
+    INTERCAL) but it now has rules for deciding on the meaning of previously
+    ambiguous expressions. Chains of select and mingle operations right-
+    associate, and when a unary operator could legitimately be in either a
+    prefix or infix position, the infix position is assumed (although remember
+    that only one infix operator is allowed for each group, variable, and/or
+    mesh).
+
+18. Added the not character as a synonym for NOT.
+
+19. Added operand overloading, for onespot and twospot variables. This uses
+    the slat operator in almost, but not quite, the same way as
+    CLC-INTERCAL. Note that the width of unary operations will mostly depend
+    on the type a variable appears to have in an expression, rather than on
+    its actual bitwidth (if a onespot is overloaded to a twospot or vice
+    versa). Note that meshes won't change as the result of operand overloading
+    unless the -v option is used (an error will be generated instead).
+
+20. Added an option for generalised assignments. With the -v option,
+    expressions (rather than just variables) can appear on the left of an
+    assignment. Any meshes on the left of an assignment (even if in apparently
+    inoccuous positions) may change value as a result. (Note that such
+    assignments aren't always possible.) If the left-hand-side of an
+    expression is anything other than simply a variable or a constant, the
+    compiler will try to change the values of meshes and non-ignored variables
+    in the expression to make it fit. (In bases other than 2, it will nearly
+    always fail.) Unlike CLC-INTERCAL, assigning to a mesh only changes that
+    mesh, not line labels or other uses of the number.
+
+21. Restricted the compiler to just one input file at a time (it used to break
+    if this wasn't done anyway).
+
+22. Fixed a nonportability involving stdin and stdout in cesspool.c.
+
+23. Added support for the NEXT FROM command, with the same semantics as COME
+    FROM (including computed NEXT FROM and NEXT FROM gerund), except that it
+    saves the line that was NEXTed FROM on the choicepoint stack.
+
+24. Fixed a bug where the yuk debugger accessed unallocated memory.
+
+== Release 0.25 (by Alex Smith)  21 Jun 2006 ==
+
+1. Added support for computed ABSTAIN and TRY AGAIN.
+
+2. Added support for computed COME FROM.
+
+3. Added support for multithread programs. This includes ONCE and AGAIN,
+which also work in singlethread programs.
+
+4. Expanded intercal.el to support Font Lock and some utilities for
+   generating INTERCAL-style constants. It also works with the
+   compilation routines of Emacs to compile INTERCAL programs without
+   the need for make. Degenerated C code now has a mode line to help
+   with Emacs compatibility.
+
+5. Added a rudimentary debugger and profiler for singlethread programs. The
+   debugger's features include useful things like 'write out INTERCAL expression
+   in simpler terms' (which is only possible if -O is on). The profiler works
+   much like gcov, counting the length of time spent in and number of executions
+   of each command in the code.
+
+6. Changed searching for includes, libraries, syslib, skeleton. This
+   is so that non-root users, or people who want to evaluate ick, can
+   do so more simply. The compiler will search for the above files in
+   the directory they should have been installed in, the current
+   directory, and the directory in which ick's executable resides (in
+   that order). Skeleton problems, in particular, seem to have been a
+   major problem for unfamiliar users trying out ick.
+
+7. Added several new test programs to the Pit.
+
+8. Greatly expanded the original optimizer (which optimizes
+   expressions). It can now recognize most of the idioms in syslib,
+   and many idioms in other Pit programs. Also added a new optimizer,
+   to try to optimize program flow, which is important because
+   otherwise INTERCAL wouldn't have any rudimentary optimizers.  There
+   is also the -F optimizer, which I hope will become infamous. It
+   creates object code which is close to maximally fast in some
+   specialized situations, at the expense of compile time (compilation
+   can take a very long time when -F is active) and object file
+   size. I suggest checking its effect on primes.i.
+
+9. Fixed the grammar (again) in a spark/ears situation involving array
+   subscripts, after proving that the previous fixes weren't adequate.
+
+10. Added support for backtracking (MAYBE, GO AHEAD, GO BACK). Note
+    that it is possible for multithreading, backtracking, computed
+    ABSTAIN, and computed COME FROM to all be used simultaneously in
+    the same program, to help maximize obfuscation.
+
+11. Added an option (-l) for generating warnings. To prevent this
+    actually being useful, it is designed to generate far too many
+    warnings, which all have to be trawled through to find the
+    important ones, and has no way to turn the unimportant ones off.
+
+12. Added the +printflow and +mystery options for executing INTERCAL programs.
+    Note that it is not entirely obvious what either of them do (+printflow is a
+    debugging aid, but the output is somewhat obfuscated, and I am not going to
+    explain what +mystery does in this document).
+
+== Release 0.24  (by Eric S. Raymond) 31 Dec 2003 ==
+
+1. RPMs can now be built by non-root users.
+
+== Release 0.23  (by Eric S. Raymond) 9 Mar 2003 ==
+
+1. More fixes by Don Knuth.  He found a bug in the type-propagation logic.
+
+== Release 0.22  (by Eric S. Raymond) 4 Mar 2003 ==
+
+1. Incorporated a minor fix patch from Donald Knuth.  Yes, *the*
+Donald Knuth.  Seems he found a weakness in the code for handling
+comments, and fixed it to do multiline comments properly.  He also made
+some improvements to intercal.el, and contributed a test program.
+
+2. Updated build machinery.  This package now uses GNU autoconf.
+
+== Release 0.21 (by Eric S. Raymond) 30 July 2002 ==
+
+1. Jonathan Nieder sent a grammar fix for BLR's old bug #5 (a bad spark-ears
+   interaction.)
+
+2. Latin-1 support and makefile fixes from Magnus Bodin.
+
+== Release 0.20 (by Eric S. Raymond) 16 September 1999 ==
+
+  (The following changes are due to John Cowan <cowan@ccil.org>)
+
+1. In addition to Latin-1, UTF-8 is now acceptable in source code as well.
+   All the numerous currency symbols of Unicode (ISO 10646) can be used as
+   big-money alternatives in their UTF-8 format.  Indeed, a random mixture of
+   Latin-1 and UTF-8 also works fine; this seems very much in the spirit of
+   Intercal.
+
+2. Intercal has now been localized for the Ancient Roman as well as the
+   Posix/C locale.  You may input numbers in Latin and write Intercal programs
+   using Latin keywords.  See lexer.l for a list of equivalences.
+
+3. The Makefile in the pit directory now works like a real Makefile, and
+   won't compile anything that's already been compiled.
+
+== Release 0.19 (by Eric S. Raymond) 16 August 1998 ==
+
+1. Fixed a code-generation error in assignments from tail and hybrid
+   variables. (Error pointed out by Malcom Ryan.)
+
+== Release 0.18 (by Eric S. Raymond) 29 April 1998 ==
+
+(The following changes are due to John Cowan <cowan@ccil.org>)
+
+1. The source code is now POSIXly correct.  By making the POSIX
+   variable in the Makefile undefined, you can restore the use of
+   <varargs.h>, but otherwise <stdarg.h> is now used.
+
+2. Latin-1 (ISO 8859-1) is now the standard input charset of C-INTERCAL.
+   This means that the change operator (0xA2) has returned as an alternative to
+   big money ($).  Furthermore, the quid (0xA3) and zlotnik (0xA4) are also
+   acceptable.  For those using Latin-9 (ISO 8859-15), the euro (0xA4) will also
+   work.  ("Euro", like "ampersand", cannot be sillified further.)
+   New names have been added to intercal.mm.
+
+3. A fortiori, input of Volap\"uk digits may now be in Latin-1 or TeX format.
+
+4. Yacc is now deprecated in favor of bison; some old yaccs don't do proper
+   error recovery, and lines like "DO ~ ERROR" failed at compile time.
+
+5. Some minor portability bugs on systems where ptr_diff is not the same
+   as int were removed by casting expressions of the form (ptr - ptr) to int.
+
+== Release 0.17 (by Eric S. Raymond) 27 Feb 1998 ==
+
+Incorporates a minor bug fix by Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>.
+
+== Release 0.16 (by Brian Raiter and Eric S. Raymond) 26 May 1997 ==
+
+This is the 25th-anniversary release of INTERCAL.  This language, conceived
+in irony a quarter century ago today, has outlasted many more serious and
+high-minded essays in computer language design.  This fact should give us
+pause to reflect, or possibly frighten the crap out of us.  Or both.
+
+1. Corrected manual bugs.
+
+2. Fixed over-enthusiastic install production in the Makefile.
+
+3. DO PLEASE is no longer accepted (Brian Raiter pointed out that the
+   manual does not sanction it).
+
+4. Fixed various bugs in the optimizer.
+
+5. Incorporated fixes made by William Walter Patterson for bugs that
+   appeared when multiple files are given on the command line.
+
+(The following changes are due to Brian Raiter)
+
+6. The system library is now available for TriINTERCAL (all bases, 3 to 7).
+   The compiler has been updated to use the right library automagically.
+
+7. The error 774 feature has been brought into conformance with the
+   Princeton compiler. The odds are now a flat 10% (but still 0% with -b).
+
+8. The compiler has been modified to allocate memory dynamically, and
+   the hard-coded limits on program size and number of variables has
+   been removed. Programs are now only limited by the amount of
+   available memory.
+
+9. Array output now fflushes after outputting newlines.
+
+10. Two minor bug fixes: one in wimpmode input, which was clamping
+    input to the signed integer range, and one in politesse checking.
+    The latter was causing programs to be recognized as impolite only
+    if their ratio was less that one-sixth, not one-fifth. (Fixing this
+    also necessitated adding a few PLEASEs to pit/rot13.i.)
+
+11. Several new programs have been tossed into the pit.
+
+== Release 0.15 (by Eric S. Raymond) 20 Jun 1996 ==
+
+1. Switched the INTERCAL manual master to mgm in order to be able to handle
+   section crossreferences properly.  The manual has now been carefully
+   proofread against the paper version by ESR and seems to match.  It's
+   also been independently proofread for typos by Brian Raiter.
+
+2. The optimizer now does complete analysis and evaluation of constant
+   expressions at compile time.
+
+3. Added optimization templates for ~, |, &, ^ expressions.  Also added
+   |, &, ^ idioms to the system library, and documented them.
+
+(The following changes are due to Brian Raiter)
+
+4. Every one of the INTERCAL-72 messages is now emitted when appropriate.
+   including the previously un-emitted E000, E197, and E200 (and see below).
+
+5. A close reading (while proofing) of the sections of the manual on
+   error messages seems to indicate that splatted lines were only
+   splatted in the default listing printed after a successful
+   compile. (This seems to be a standard feature of IBM compilers; I
+   remember that RPG did this as well.) My understanding of the manual is
+   when the syntactically offensive line is encountered at runtime, it is
+   printed as error E000. I have modified the code to do this.
+
+6. I have fixed INTERCAL in order to add another bug. Namely, I have
+   implemented the BUG/NOBUG option in the Princeton compiler. By
+   default, there is a chance that INTERCAL will randomly insert error
+   E774 into your executable. (The odds are 1/128 per statement, not
+   counting COME FROMs. Is there any way to find out what the
+   Princeton compiler's odds were?) The new option -b turns this
+   feature off.
+
+7. The new file pit/lib/numio.i contains routines for wimpmode I/O.
+   These routines are documented in the file pit/lib/numio.doc.
+   It is my earnest hope that C-INTERCAL programmers everywhere will
+   flock to these handy routines, and C-INTERCAL users will thus no
+   longer need to fear that they might succumb to the foul and awful
+   temptation to use the dastardly +wimpmode option.
+
+== Release 0.14 (by Eric S. Raymond) 9 Jun 1996 ==
+
+1. The documentation has been reorganized and cleaned up (you can now
+   format either a C-INTERCAL or INTERCAL-72 manual from the same master).
+   The diagrams in the paper original have been transcribed as pic figures.
+   See doc/READ.ME for details.
+
+2. Yet more code.  The pit now includes a second random-number generator,
+   a ROT13 filter, and even two programs in TriINTERCAL!
+
+3. Louis Howell's corrected system library is now included.
+
+4. The distribution is now formally GPLed.
+
+== Release 0.13 (by Eric S. Raymond) 5 Jun 1996 ==
+
+1. I folded in patches by Brian Raiter <breadbox@muppetlabs.com> that port
+   this code to Linux, ANSIfies it, and enables it to use flex.  Note: This
+   version has been tested on Linux and SunOS but not yet elsewhere.
+
+2. Another piece of nontrivial INTERCAL code has been found!  (Doubtless
+   hell is freezing over even as I write.)  We've added to the pit the
+   `beer' program by Matt DiMeo <mdimeo@brooktree.com>, courtesy of the
+   infamous Beer List (URL:http://www.ionet.net/~timtroyr/funhouse/beer.html).
+
+== Release 0.12 (by Eric S. Raymond) 22 Mar 1995 ==
+
+1. The code now compiles and runs under Linux, using bison and lex.  It does
+   *not* yet work with flex;  C.P. Osborne's patches for 0.11 turned out not
+   to be sufficient (at least for flex 2.4.6 under Linux using the -l option).
+   See the BUGS list.
+
+2. Note 3 under 0.11 was incorrect.  We're in conformance after all.
+
+3. The politesse check is a little smarter about programs too small to
+   conform to the 1/5-to-1/3 criterion.  All the pit programs have been
+   checked for conformance.  Also, the politesse error message now tells
+   you the offending program's line count.
+
+== Release 0.11 (by Eric S. Raymond) 24 Sep 1994 ==
+
+1. Incorporated changes by Jan-Pieter Cornet <cornet@OTech.fgg.EUR.nl> for
+   magical inclusion of the system library.  These address an outstanding bug
+
+   2. (SS) The `system library' should be precompiled and `linked' to user
+      written code, at least optionally.  Doing this with the current compiler
+      presents a few problems.
+
+   which has accordingly been removed from the BUGS file.  They also fix a
+   previously unknown bug; due to a minor oversight in the lexer, it was not
+   possible to ABSTAIN FROM WRITING IN or READING OUT.  Jan also contributed
+   a test program that demonstrates gerund abstention.
+
+2. Despite the obvious appeal of the idea, and much discussion on
+   alt.lang.intercal, I decided *not* to add Klingon; maintaining two parallel
+   grammars just so the compiler could support SVO and OSV languages would be
+   too painful.  There was also a minor mess near case-sensitivity in the
+   digits.  The workaround kluges I was offered instead failed to satisfy.
+
+3. We fess up to a violation of the INTERCAL-72 standard.  That implementation,
+   instead of accepting an entire multiple-digit number per line of input,
+   expected one digit per *card image* (input line).  It is unclear how
+   INTERCAL-72 programs ever managed to input more than one number.
+
+4. Added patches by C.P.Osborne <boris@ibmpcug.co.uk> to make the lexer work
+   using flex, for Linux and BSD/386 support.  I didn't use his error-reporting
+   patch, though; instead, I changed the parser to catch errors at logical-line
+   level.  I also kept the N in `RESUBNIT'; this is a carefully preserved
+   feature of INTERCAL-72.
+
+5. Volapuk digits are now recognized on input.  TO DO: Recognize Volapuk
+   keywords, including gerunds.
+
+== Release 0.10 (by Eric S. Raymond) 9 Sep 1994 ==
+
+1. It is now possible to undo a line-number abstention with a gerund
+   reinstatement, or undo a gerund abstention with a line-number
+   reinstatement.  In previous versions, gerund abstention/reinstatements and
+   line-number abstention/reinstatements were independent of each other.
+
+2. After release 0.5, I wrote in the TO DO list as follows:
+
+   2. (ESR) Input format internationalization -- allow WRITE IN input digits in
+   major languages such as Nahuatl, Tagalog, Sanskrit, and Basque.
+
+   The twisted loons in the alt.folklore.computers crowd loved this idea,
+   and I actually got sent digit lists for Nahuatl, Tagalog, Sanskrit, and
+   Basque -- also, Kwakiutl, Georgian, Ojibwe, and Albanian.  I've left
+   out Albanian (didn't want to keep track of the dipthong diacritical)
+   and Ojibwe (no zero digit).  So: Nahuatl, Tagalog, Sanskrit, Basque,
+   Georgian, and Kwakiutl are now supported in addition to English.
+
+3. The THEORY document has been significantly revised.
+
+== Release 0.9 (by Eric S. Raymond) 5 Mar 1993 ==
+
+1. An embarrassing port bug in the INTERCAL skeleton has been fixed
+
+2. Jamie Zawinski's suggestion for an improved E333 error message has
+   been accepted.
+
+3. Added and improved documentation for pit programs.
+
+4. The install production in the Makefile now puts lose.h in place
+   as well as cesspool.h.
+
+5. You can now set the C compiler to be used as a back end by INTERCAL
+   by setting the environment variable CC.  The default is cc.
+
+== Release 0.8 (many hacks on 0.7 by Eric Raymond) 21 Jan 1992 ==
+
+1. A previously undocumented `feature' of the Princeton compiler,
+   revealed by Don Woods, is now emulated.  If fewer than 1/5 or more
+   than 1/3 of a program's statements contain the qualifier `PLEASE', the
+   program is rejected with an entertaining error message.  Programs in pit
+   have been hacked to pass the politesse test.
+
+2. The `sample' program now works correctly, thanks to Louis Howell.  Also,
+   he has contributed new programs to calculate pi and to search for prime
+   numbers.
+
+3. An intercal mode for GNU Emacs is included.  It helps programmers deal with
+   the new politesse check by randomly expanding the abbrev "do" to DO PLEASE
+   or PLEASE DO about 1/4 of the time.
+
+4. Improvements in code generation for NEXT/RESUME.
+
+5. Fixes to the optimizer; it handles the results of optimized MINGLEs
+   correctly now.  Also, added a rewrite rule that checks for the
+   equality-test idiom using XOR.
+
+6. The original error messages from the Princeton compiler have been restored.
+
+The documentation has been updated to reflect these changes.
+
+== Release 0.7 (by Louis Howell) 21 Dec 1991 ==
+
+In addition to bug fixes, new features in this version include arrays,
+character I/O, modified (hopefully improved!) semantics for the COME
+FROM statement, extensions to bases other than 2, new INTERCAL programs,
+and new documentation.
+
+== Release 0.6 (by Steve Swales) 5 Jan 1991 ==
+
+1. Restored Princeton documentation (courtesy of Michael Ernst).
+
+2. Added -@ usage option to ick.
+
+3. Added [+/-]help, [+/-]traditional, and [+/-]wimpmode options for
+generated programs; [+/-]traditional is a no-op at this point.
+
+4. Various bug fixes, esp. in lexical analysis.
+
+== Release 0.5 (ESR's second pre-release) 5 Jun 1990 ==
+
+1. As a convenience to all you junior birdmen out there, `NINER' is accepted as
+   a synonym for `NINE' in INTERCAL input.
+
+2. The COME FROM statement is now compiled.
+
+== Release 0.3 (ESR's original pre-release) ==
+
+The resurrection of INTERCAL from its grave took place on 12 May 1990
+when ESR released 0.3 on an unsuspecting USENET.
diff --git a/NEWS b/NEWS
index 326c66e437d5dfdfbec2d01bc4ed2c9b77bc29be..734ffb9531e8f0f39c7ea5b2b1eb17c7eecd29ec 100644 (file)
--- a/NEWS
+++ b/NEWS
-= New In This Release =
+       This is the short-form history of the project,
+       used mainly for generating release announcements  
+       via shipper. For the long form, see the file HISTORY.
 
-== Release 0.29 (by Alex Smith, Eric S. Raymond) ==
+* 0.29: 2010-11-28
+  The first merged release from ESR and Alex Smith, with encouragement from
+  Donald Knuth. The compiler new has a regression-test suite. More error
+  checks (E990 and E004) hace been added. A new program, guess.i, writhes 
+  in the pit.
 
-=== Changes by Eric S. Raymond ===
-
-1.  There is now a compiler regression-test suite, invoked through the test 
-    production in the pit makefile.
-
-2.  There are two new compiler error messages, E990 and E994.
-
-3.  A new program for the pit: Brendan Gregg's guess game.
-
-4.  The floating-point library is now automatically included if
-    a program NEXTs to labels in the range 5000-5999.  Internally,
-    line-range to system library mappings are no longer hardcoded but
-    rather declared as an array of associations that can be easily
-    modified.
-
-5.  The source now uses explicit bool, rather than using int everywhere.
-
-6.  README, NEWS, and BUGS are now mastered in asciidoc for easier
-    web-page generation.
-
-=== Bugs reported and changes patched by Arvid Norlander ===
-
-7.  Fixed a typo in the perpet.c version of the help information.
-
-8.  Fixed the CREATE statement to work on 64-bit architectures.
-
-9.  The availability of variable argument list mechanisms is now determined
-    automatically by the configure script, rather than relying on the old
-    method of checking which usually gets the wrong answer with modern
-    compilers, leading to build failures on many modern systems (previously
-    this was patched just for DJGPP, the patch now applies to all operating
-    systems and platforms). This bug is known to have affected the build on
-    DOS, FreeBSD and Mac OS X, and possibly affects other platforms. (also
-    reported independently by Elliott Hird)
-
-10. Fixed some nonsense in the -@ help screen that was generated by an errant
-    search-and-replace.
-
-11. Made several changes to bring the new Befunge-98 interface code (see
-    below) in line with changes in the Befunge-98 interpreter in use.
-
-12. Added consts and statics in the code, hopefully to make bugs easier to
-    notice.
-
-13. Refactored main(). It needed it, badly.
-
-=== Bugs reported by Elliott Hird ===
-
-14. Fixed the configure script to work with the default Debian shell dash.
-    (also reported independently by Debian)
-
-15. Actually fixed unlambda.i; the fix was meant to be in 0.28, and is
-    described in its changelog, but for some reason never made it to
-    the distributed tarball.
-
-16. The -F option again works. (AIS: I accidentally broke it in the preceding
-    version, making it basically a no-op by mistake.)
-
-17. The build now succeeds (with warnings) when lex or yacc are missing,
-    rather than failing with mysterious error messages that seem to have
-    nothing to do with the problems. (The success is made possible by using
-    the prebuilt versions; see change 11 of version 0.26, this is finishing
-    what that started.)
-
-=== Bugs reported, changes requested, and patches by Joris Huizer ===
-
-18. The [xoritself] optimiser idiom has been generalised to handle some
-    situations where the redundant XOR operands are on different grouping
-    levels; this helps to optimise some heavily inlined greater-than tests.
-
-19. Fixed unary operators applied to constants (AIS: it seems that my patch to
-    solve this issue earlier was itself buggy).
-
-20. The -g option now causes optimisation of the output compiled C to be
-    turned off, and adds comments to the output file the same way -c does.
-
-21. Added more optimiser idioms: [cxorand16], [cxorand32], [cfoldintoorinand],
-    [or16and], [xor16and], [lshift32half], [rshiftoutofneg], [andoutofneg];
-    also generalised the idiom-matching code to compare 16-bit and 32-bit
-    constants as equal if they have the same value, and fixed some typos in
-    the current 16-bit complement idioms.
-
-22. ABSTAINING or REINSTATING are now a lot more efficient, taking an amount
-    of time proportional to the number of commands effected, rather than the
-    number of commands in the program. (AIS: I implemented this with the
-    algorithm in the patch Joris provided, but with different code, to make it
-    easier to maintain.)
-
-=== Changes by Stefan O'Rear ===
-
-23. Added INTERCAL syntax highlighting information for vim. Why should Emacs
-    have all the fun?
-
-=== Changes reported by Phantom Hoover ===
-
-24. Fixed a nasty documentation typo.
-
-=== Changes reported by the Debian autobuilders and Joey Hess ===
-
-25. The build of the optimiser idioms is now split over many files, to reduce
-    the memory usage of gcc when it tries to compile the giant output C file.
-    This was a problem on ia64. (The ulimit method of preventing thrashing has
-    been removed, as this method works better; likewise, the optimiser
-    optimisation now works again.)
-
-=== Changes by Alex Smith ===
-
-26. The build system has been completely redone, again; it now uses automake
-    as well as a much newer version of autoconf. This means that there is now
-    one build system that works the same way on all systems, and that all
-    sorts of clever tricks like out-of-tree builds, a self-rebuilding build
-    system, and building the distribution directly from the Makefile, are
-    possible. As a side effect, the directory structure looks somewhat
-    different to how it looked in previous versions; src, doc, etc and pit are
-    still there, but now there's prebuilt instead of temp, an extra directory
-    buildaux, and bin, lib and include have disappeared.
-
-27. The distribution now comes in compressed pax format. (Before anyone
-    complains that they have no idea what that is, or that I'm using something
-    strange and nonstandard, I'd like to point out that tar is no longer part
-    of POSIX, but that pax is. (See man 5 tar on a recent Linux system for
-    details of the whole mess.)  Luckily, pax is forward-compatible with tar
-    so tar readers should be able to read it just fine, if you can't get your
-    hands on a pax reader.)
-
-28. convickt can now produce its output as INTERCAL initialisation of a tail
-    array. (This doesn't auto-offset between the different characters; it is
-    therefore mostly useful for producing Baudot arrays for CLC-INTERCAL-style
-    IO.)
-
-29. The function clock_gettime is now supported by the yuk profiler as an
-    alternative method of getting a high-resolution clock for profiling (it
-    is available on at least Linux).
-
-30. The profiler now autodetects the same profiling mechanism at compile
-    time and at run time. (It was getting confused as to what mechanism it was
-    using, causing some really weird bugs.)
-
-31. Added support for computed CREATE (the computation is done at create-time,
-    rather than when the unknown statement is encountered); partly because
-    this was rather easy, but mostly because it can be used to simulate a
-    computed NEXT, thus making the example expansion library compunex (which I
-    forgot to mention in the 0.28 release notes) redundant. Because it was
-    deprecated when I added it, compunex is now doubly deprecated, and anyone
-    tempted to use it should use computed CREATE instead. (I have always
-    maintained that if computed NEXT were ever added to C-INTERCAL, it would
-    be deprecated on arrival; the computed CREATE method implements all
-    features of NEXT, anyway, rather than the small subset COMPUNEX could
-    manage.)
-
-32. Plugged a couple of small memory leaks; however, there are still several
-    much bigger memory leaks that could do with being fixed.
-
-33. Added support for CREATING operators, with similar syntax to the CREATION
-    of commands.  This requires the -ea options to be set to work properly.
-
-34. More file extensions are now supported by the external calls system. The
-    .c99 extension indicates a C99 (rather than C89) file; all .c99 files are
-    preprocessed as C99, and if any C99 files are used the final compilation
-    which compiles and links everything will be done as C99 rather than C89
-    (this causes no problems for C-INTERCAL's output which is both legal C89
-    and legal C99). Also, libraries can be linked in; to link in the maths
-    library for instance (i.e. pass -lm to gcc), write libm.a as a filename at
-    the end of the command line. (The file's real name is libm.a; if a
-    filename is in lib*.a format, then ick will look in the normal library
-    locations instead of the current directory.) Other .a files can be linked
-    in from the current directory.
-
-35. Fixed the handling of division by zero in the syslibc expansion library.
-    (The Revamped Manual states 'In all cases, division by 0 returns 0'.)
-
-36. Made several changes to the documentation, including fixes for some rather
-    nasty typos (two of the worst were specifying variables as IGNORED by
-    default, and stating that select acts like OR in TriIntercal!).
-
-37. Fixed a bug in the external calls system that made it impossible to write
-    a COME FROM in more than one file at a time whilst still having the
-    resulting program work reliably.
-
-38. Added support for external calls to Befunge-98 programs; however, this
-    distribution does not ship with a Funge-98 interpreter, so in order to use
-    this feature you will first have to compile a Funge-98 interpreter into a
-    library for use with C-INTERCAL (see README.txt or the Revamped Manual for
-    information on this). Also added a test program for this to the pit.
-
-39. Fixed some bugs in the go-away command in interfunge.i.
-
-40. Fixed many bugs in the optimiser, and added a fuzz-tester ("make fuzz") for
-    the optimiser which has a chance at finding any new optimiser bugs that may
-    be introduced, or any that the maintainers don't know about.
-
-== Release 0.28 (by Alex Smith) 1 Apr 2008 ==
-
-=== Patches, suggestions and bugs found by Joris Huizer ===
-
-1.  Fixed a typo in the [noopxor] optimiser idiom.
-
-2.  Added a [redundantdoublenot] optimiser idiom (a generalisation of Joris'
-    suggestion of and code for [triplenot]).
-
-3.  Fixed a typo that caused the flow optimiser to optimise some errors into
-    non-erroring code.
-
-4.  Fixed the [lshift16] optimiser idiom; previously it was giving incorrect
-    values in some cases where the bits being selected from the original
-    number weren't contiguous.
-
-5.  There is now no longer a segfault when the unusual option combination -f
-    (without specifying -O) is used.
-
-6.  It is again possible to recompile more than one source file at a time.
-
-7.  The flow optimiser now recognises that comments can be reinstated in
-    programs where they can be reinstated.
-
-=== Changes by Alex Smith ===
-
-8.  Fixed some typos in the documentation.
-
-9.  Applying an infix unary operator to a constant (as in &#26) now returns
-    the correct value; previously it returned the unary operator applied to a
-    sequence number that was 0 for the first unique constant that was the
-    argument of a unary operator, 1 for the second unique constant, and so
-    on. (This was a bug in the parser.)
-
-10. Added doc/THEORY.txt back in. (It seems that it went missing some time
-    between 1.26 and 0.27.) Updated it to describe the current compiler.
-
-11. Turned off optimisation of the optimiser, and also placed a 128MB limit on
-    the data segment and virtual memory it was allowed to use. This is to
-    prevent Linux thrashing and/or invoking the dreaded oom-killer when
-    recompiling idiotism.c. (This happened only rarely, but it happened to me
-    twice, each time making my computer unusable for about half an hour.
-    Therefore, a fix to prevent the situation happening again was added,
-    assuming your computer has at least 128MB free memory and disk space.) As
-    a bonus, the build process is now considerably faster, because the
-    optimisation of the optimiser was the slowest step of the process.
-
-12. Internally, all symbols that are visible globally are now name-mangled (by
-    using the prefix ick_). This allows other files to be linked with files
-    compiled from INTERCAL without namespace collisions. This does not include
-    symbols that are only useful in multithreading (as INTERCAL's
-    multithreading model is incompatible with other programs), only for the
-    debugger (because linking yuk into a program causes all sorts of chaos if
-    non-INTERCAL programs are involved), or only used by the compiler (which
-    hopefully should never be linked to another program that isn't
-    specifically designed to be linked to it).
-
-13. Thoroughly delinted the code, using Splint; the code is now annotated to
-    show Splint what is being done where (and all the non-obvious annotations
-    are explained so that humans can figure out what is going on as well);
-    over 800 warnings have been fixed, including some which identified bugs in
-    the original program (many of which were to do with edge cases involving
-    unusually long strings, and some of which were buffer overflows). All
-    comments from /*@ to @*/ are mine, and are annotations for Splint.
-
-14. Implemented external calls, which allow multiple INTERCAL programs to be
-    linked to each other, and/or to C programs, via the -e option and NEXT /
-    COME FROM / NEXT FROM / FORGET / RESUME statements. See the manual for
-    more details. (Note that external calls require you to use gcc, GNU cpp,
-    and GNU ld, because they rely on features of those programs to work.)
-
-15. Two other new compiler options have been added: -E (don't link system
-    library), and -w (enable +printflow debugging even for non-multithread
-    programs). +printflow has been enhanced to show what's going on in
-    externally-called programs to some extent, too.
-
-16. Added a version of the INTERCAL system library written in C, as
-    pit/lib/syslibc.c. A new compiler feature allows the inclusion of such
-    expansion libraries via the command line; to include this library, you
-    would write the command line as ick -eE yourprogram.i syslibc (possibly
-    adding other options than -eE). The main advantage of the C-based system
-    library is speed; also, note that an implemented-in-a-faster-language-
-    than-INTERCAL system library existed in the Princeton compiler (which is
-    possibly how the INTERCAL version managed to stay buggy for decades
-    without anyone noticing), so this is another case of catching up with
-    historically available features. (The feature is also somewhat reminicent
-    of CLC-INTERCAL's 'preloads', but is implemented differently, and is
-    useful for different things, as it doesn't affect the compiler.)
-    Expansion libraries are included via -e, like non-INTERCAL programs are,
-    but are distinguished by not having an extension.
-
-17. The handling of syntax errors has been improved; many lines that
-    previously caused E017 at compile time are now correctly interpreted as
-    run-time errors. The only way to cause E017 nowadays is to write a
-    constant out of the onespot range, and the manual description of the error
-    has been changed accordingly. (Note that I caused several regressions
-    while implementing this; I hope they're all fixed now, but there may be
-    some left. Please report any remaining parsing problems caused by this;
-    they mostly manifest as either the line after a comment being corrupted or
-    ignored, or as the line before a comment being taken to be part of the
-    comment.)
-
-18. A new 'just-in-case' compilation method is used for syntax errors. If a
-    syntax error is encountered at compile-time, and contains just capital
-    letters with no other meaning (i.e. they don't form keywords and none of
-    them is the letter V), variables, and expressions, and there are no two
-    consecutive expressions or variables involved (i.e. they are separated by
-    keywords), the compiler will compile it anyway, just in case it happens to
-    gain a meaning later (see the next changelog entry). This is sort of the
-    converse of the way CLC-INTERCAL goes about compiling things that don't
-    have a meaning yet (it uses a 'just-too-late' compiler which waits for the
-    offending statement to error out, then recompiles it to see if it's gained
-    a meaning in the meantime), and this difference in handling typifies the
-    difference between the compilers quite well.
-
-19. Implemented the CREATE statement, because I could (see point 18). This
-    allows new syntax to be created at runtime. CLC-INTERCAL also has a CREATE
-    statement, but its syntax is totally different (it specifies the bytecode
-    for the command, whereas C-INTERCAL's CREATE statement allows you to
-    specify what the new command does in INTERCAL itself.)  A function call
-    ick_create is also available; it's usable from externally-called programs
-    and from expansion libraries, and means that INTERCAL commands can now be
-    defined to do things which were previously well out of INTERCAL's
-    reach. This makes expansion libraries act even more like CLC-INTERCAL
-    preloads.
-
-20. Fixed a strange bug in yuk when the basename of the INTERCAL program was
-    the same as that of a shell builtin or command on the user's path.
-
-21. Programs accept a new option +instapipe that causes output to be output
-    immediately, even if not followed by a newline, by flushing the output
-    after every character. This is most useful with binary output into pipes,
-    and occasionally useful for getting the output to very slow programs
-    faster.
-
-22. Fixed an error in an optimiser idiom that could optimise erroring code
-    involving mingles into non-erroring code (which is of course incorrect);
-    also edited unlambda.i in the pit, which was taking advantage of this
-    error (and erroring out if optimisation was turned off).
-
-23. Fixed a bug with the ON THE WAY TO line number displayed when COME FROMs
-    are involved that I accidentally introduced in 0.25.
-
-=== Changes from elsewhere ===
-
-24. Added yet another nontrivial INTERCAL program to the pit; interfunge.i
-    (written by Jeffrey Lee) is a Befunge-93 interpreter written in INTERCAL.
-    (It appears to conform to the standard (I actually ran it against a
-    testsuite, and it passed); its only pecularities, apart from the language
-    in which it's written, appear to be the need for a blank line at the end
-    of the program, but no blank lines earlier (because INTERCAL can't sense
-    EOF, although there are plans to change that), the restriction to 80x25 is
-    enforced (this seems to be an implied requirement in the standard, but
-    most Befunge-93 interpreters don't enforce it), and numeric output is in
-    Roman numerals (what did you expect?).)
-
-== Release 0.27 (by Alex Smith) 22 Dec 2007 ==
-
-1.  Joris Huizer pointed out that the manual nowhere says that a GIVE UP line
-    can't be abstained from by line number. This was probably a mistake in the
-    INTERCAL-72 manual, but the behaviour specified by the original manual is
-    now implemented; after all, it wouldn't do to violate the original de facto
-    standard. (Note that if a GIVE UP line is abstained by line number, there
-    is then no way to reinstate it; also, if the -X switch for CLC-INTERCAL
-    compatibility is used, ABSTAINING FROM a GIVE UP line by line number is
-    also silently ignored.)
-
-2.  Rewrote the optimizer in a language (OIL) invented specifically for the
-    purpose; the set of optimizer idioms is now in idiotism.oil, and translated
-    into C and linked with the rest of the compiler at metacompile time (that
-    is, when the compiler itself is being compiled). It contains many of the
-    same idioms, but some have been generalised or reduced into smaller parts
-    and some new ones were added. Documentation for OIL has been added as part
-    of the documentation for the distribution as a whole.
-
-3.  Joris Huizer submitted a patch to fix a memory allocation bug which
-    occasionally caused memory corruption when a program had a number of
-    commands that was 1 less than a multiple of 256.
-
-4.  Completely redid the autoconfiguration. The install should now progress
-    with less user interaction than before. As a bonus, if you have a range of
-    GNU utilities including make, sed, tr, and bash (and possibly others), it's
-    now possible to compile using 'sh configdj.sh' followed by 'make' under
-    DJGPP. (To be specific, some settings that previously sometimes had to be
-    set by the user, such as whether lex provided yylineno and yyrestart, are
-    now either detected by config.sh or no longer relevant. Other settings that
-    were not previously detected, such as what extension executables have, are
-    now detected so that the config script works on DJGPP as well, now;
-    compiling the config script on a non-DJGPP system seems to result in a
-    script that fails on DJGPP, and likewise compiling the script on DJGPP
-    seems to result on a script that fails on other systems, so both scripts
-    are provided. The autoconfigurer now also adapts coopt.sh so that -F works
-    on DJGPP too, sort of (or else detects that it won't work and disables it).
-
-5.  Improved the action of 'make install', so that it actually installs
-    everything in the right place. It works under DJGPP, now, too, as long as
-    you have the programs installed that allow configdj.sh and make to work.
-
-6.  Fixed a bug involving COME FROM in multithreaded programs; now, if a line
-    COMEs FROM itself (either because this is written explicitly or because it
-    is a computed COME FROM computing to its own line number), the loop this
-    creates doesn't block all the other threads in the program.
-
-7.  Added support for statement WHILE statement, with similar semantics to CLC-
-    INTERCAL. (The second statement is repeated for as long as the first
-    statement is executing; NEXTing to the statement nexts to the first
-    statement and doesn't set off the loop, and COMING or NEXTING FROM the
-    first statement leaves the loop running until the NEXT FROM returns.) With
-    the current implementation, strange things happen if the same WHILE is
-    simultaneously run by multiple threads, although I decided to work out
-    exactly what the rules were anyway and document them, so those strange
-    things are now official.
-
-8.  Fixed some weird bugs in the multithreader that could cause segfaults in
-    several situations involving backtracking; it's kind of surprising that
-    they didn't turn up sooner.
-
-9.  Prevented a segfault in some situations where a syntax error was the
-    target of a noncomputed COME FROM or NEXT FROM.
-
-10. CALCULATING now includes array dimensioning. (There previously was no
-    gerund for this situation; the original manual doesn't say what to do but
-    implies that this is a special case of calculate.)
-
-11. Made operand overloading interact more sensibly with multithreading.
-    Previously, overloading information was shared between all threads, but the
-    stashes for operand overloading were separate in each thread. Now, the
-    overloading is not shared between threads, except when they are woven by a
-    WHILE statement.
-
-12. There's no longer a need to set or modify copyloc in the makefile by hand;
-    COPYING.txt is now found the same way as syslib and the skeleton. It's also
-    now copied out of the distribution to the same place as the other data
-    files when installing, preventing the need to keep the original
-    installation directory around.
-
-13. The compiler now actually looks for a temporary directory to place a file
-    in when creating a temporary file; this was meant to be fixed in 1.26, but
-    the fix didn't actually work.
-
-14. Added a new program to the pit: an Unlambda interpreter written by Oerjan
-    Johansen in 2001, and also a commented version as documentation.
-
-15. Section 23 of the release notes for version 0.26 is wrong; I was obviously
-    confused when I wrote them because they were speaking nonsense.  For the
-    record: no, there is nothing special about NEXT in connection with
-    backtracking.  It should have said "NEXT", not "choicepoint".  Instead of
-    rewriting history, this changelog entry is added as a fix.
-
-16. Added an entirely new set of documentation, the Revamped Manual, which is
-    available in a wide range of formats and documents recent language changes,
-    as well as many other things INTERCAL. The Revised Manual has been
-    preserved, but it seems unlikely to be updated in the near future (it is
-    still well worth a read anyway).
-
-17. For compatibility, the COMMENT gerund can now be spelt COMMENTS or
-    COMMENTING.
-
-18. Corrected the Emacs INTERCAL mode to work with more recent versions of
-    Emacs than it previously worked with, hopefully without sacrificing too
-    much backward compatibility.
-
-19. Added a conversion program 'convickt'; it can convert between the Latin-1,
-    Baudot and EBCDIC character sets used by CLC-INTERCAL (Latin-1 is also
-    accepted by C-INTERCAL, so this gives a practical way to run CLC-INTERCAL
-    programs in unusual character sets on C-INTERCAL), and can also attempt to
-    convert into the 'Atari character set' (which uses $ instead of the cent
-    sign, ? instead of yen, and so on for the other characters that differ
-    between C-INTERCAL and CLC-INTERCAL).
-
-20. Reorganised the Makefile and environment variable system for finding
-    locations to make more logical sense; various definitions and environment
-    variables now do what their name suggests rather than something completely
-    different, a situation which confused the programmers previously.  The new
-    version should be better at finding files that it needs, and also cuts
-    down on the amount of useless copying that the Makefile did (such copying
-    is now only done if the destination file doesn't already exist or is out
-    of date).
-
-21. Fixed some problems in the PIC-INTERCAL code: one problem with finding the
-    correct location for the skeleton, and some code duplication between the
-    two header files. Also clarified one of the comments.
-
-22. Added support for CLC-INTERCAL-style Baudot I/O (generalised array I/O is
-    currently unimplemented, though). This has a two minor differences to the
-    CLC-INTERCAL version: unrecognised characters, instead of causing an
-    error, become 0 when WRITING IN (except that tabs are translated to single
-    spaces) and ASCII code 26 when READING OUT. (Baudot characters not in
-    ASCII will be translated to Latin-1; there are more of these than might be
-    expected, because the CLC-INTERCAL extended Baudot is being used).
-
-23. The man pages and some fixes for the documentation Makefile from the
-    Debian package were copied into the main distribution. The man page was
-    written originally by Mark W. Eichin and later modified by Joey Hess (and
-    was further modified by me prior to placing it in the distribution); the
-    Makefile fixes are due to Joey Hess. Strangely, many of the changes I made
-    to the Makefile for this version have much the same effect as fixes that
-    the Debian package maintainers had come up with earlier; a new Makefile
-    variable ick_specific_subdir has been added to hopefully make the Debian
-    maintainer's job easier (it allows elimination of versioned
-    subdirectories, replacing them with versionless subdirectories).
-
-24. Added a new test program to the pit, tests/ignorret.i, that demonstrates
-    how the interaction between IGNORE and RETRIEVE is different between
-    C-INTERCAL, CLC-INTERCAL, and J-INTERCAL, and documentation showing the
-    results on each version.
-
-  Release 1.26 (by Alex Smith) [a bugfix of 0.26]  3 Sep 2007
-
-1.  Fixed an optimizer bug (thanks to Joris Huizer for pointing it out),
-    relating to active-bits deduction in some expressions involving select.
-
-2.  Fixed a bug in the flow optimizer that caused it to occasionally confuse
-    ABSTAIN with REINSTATE when gerunds were used.
-
-3.  Simplified the compilation of INTERCAL files to .exe under DJGPP, to avoid
-    some temporary files (hopefully solving some problems users may be having
-    with finding which directory the temporary files are in under DJGPP);
-    when under DJGPP a temporary file other than .c or .exe is needed, the
-    compiler now looks for a directory reserved for temporary files to place it
-    in rather than just using the current directory.
-
-4.  The original INTERCAL manual specifies that GIVE UP cannot be REINSTATED
-    or ABSTAINED FROM; this is now implemented, by taking only the original
-    DO/DO NOT status into account when executing a GIVE UP statement.
-
-5.  Dealt with problems with what happens with the 'original' stdin (this
-    information was previously lost, making it hard for the debugger to accept
-    input because it had no obvious place to accept it from), and removed the
-    previous hacky workarounds for this problem (which were my fault).
-
-6.  Made several improvements to the documentation, especially with respect to
-    installing and running under DJGPP.
-
-7.  Modified the version number scheme, so that minor revisions and bugfixes
-    now increment the major version number rather than the minor version number
-    (it was getting a little bored stuck at 0). The next major release will be
-    version 0.27.
-
-== Release 0.26 (by Alex Smith)  1 Apr 2007 ==
-
-1.  Fixed a few bugs in the previous release (some bugfixed by Joris Huizer).
-
-2.  Ported to DJGPP. The compiler now works on both POSIX and DJGPP systems.
-
-3.  Reorganized the directory structure.
-
-4.  Added support for cross-compiling to the PIC microcontroller.
-
-5.  Added a simple test program for PIC cross-compilation.
-
-6.  Improved further searching for skeletons and executables.
-
-7.  Delinted some of the code, and turned up the default gcc warning level.
-
-8.  Reformatted some of the documentation.
-
-9.  Renamed and split files; all files used in the build now have 8.3
-    filenames, to prevent any problems using DJGPP on 8.3 systems. The
-    optimizer was split from the code degeneration into dekludge.c (optimizer)
-    and feh2.c (degeneration), because feh.c was getting too large.
-
-10. The text documentation (README, COPYING, NEWS, and BUGS) was renamed to
-    end .txt (again for DJGPP compatibility); formatting changes were made to
-    README in addition to the addition of extra readme information.
-
-11. Included precompiled-to-C versions of the parser and the lexer so that
-    DJGPP (or I suppose, POSIX if you hacked the makefile) implementations
-    without bison or flex could still compile the rest of C-INTERCAL and give
-    a running program.
-
-12. Fixed a bug involving optimization of Tri-INTERCAL programs.
-
-13. Added to the lexer, so that it supports CLC-INTERCAL syntax for operators
-    that were already present in C-INTERCAL, as long as they don't conflict
-    with C-INTERCAL syntax. (Using the -X switch will support CLC-INTERCAL
-    syntax for operators that were already present in C-INTERCAL even if they
-    conflict with C-INTERCAL syntax.) For the symbols present in the
-    CLC-INTERCAL character set but not in ASCII, ISO-8859-1 is supported as an
-    encoding as well as UTF-8 (to increase the chance that CLC-INTERCAL
-    programs will run without modification); it was meant to be supported to
-    some extent before, but seemed not to be working.
-
-14. Added the COMMENT gerund, with the same semantics as in CLC-INTERCAL.
-
-15. Added COME FROM gerund. This suffers from the same restrictions as
-    computed COME FROM, in that it can't be used in PIC programs and causes
-    the program to end up substantially less efficient.
-
-16. Added support for prefix as well as infix unary operators. The rule is
-    that any number of prefix unary operators, but only one infix unary
-    operator, is allowed on each group, variable, and/or mesh. (Previously,
-    only infix operators were supported, and then only one per mesh.)
-
-17. Added positional precedences to the parser. INTERCAL still doesn't have
-    operator precedences (that would be completely contrary to the spirit of
-    INTERCAL) but it now has rules for deciding on the meaning of previously
-    ambiguous expressions. Chains of select and mingle operations right-
-    associate, and when a unary operator could legitimately be in either a
-    prefix or infix position, the infix position is assumed (although remember
-    that only one infix operator is allowed for each group, variable, and/or
-    mesh).
-
-18. Added the not character as a synonym for NOT.
-
-19. Added operand overloading, for onespot and twospot variables. This uses
-    the slat operator in almost, but not quite, the same way as
-    CLC-INTERCAL. Note that the width of unary operations will mostly depend
-    on the type a variable appears to have in an expression, rather than on
-    its actual bitwidth (if a onespot is overloaded to a twospot or vice
-    versa). Note that meshes won't change as the result of operand overloading
-    unless the -v option is used (an error will be generated instead).
-
-20. Added an option for generalised assignments. With the -v option,
-    expressions (rather than just variables) can appear on the left of an
-    assignment. Any meshes on the left of an assignment (even if in apparently
-    inoccuous positions) may change value as a result. (Note that such
-    assignments aren't always possible.) If the left-hand-side of an
-    expression is anything other than simply a variable or a constant, the
-    compiler will try to change the values of meshes and non-ignored variables
-    in the expression to make it fit. (In bases other than 2, it will nearly
-    always fail.) Unlike CLC-INTERCAL, assigning to a mesh only changes that
-    mesh, not line labels or other uses of the number.
-
-21. Restricted the compiler to just one input file at a time (it used to break
-    if this wasn't done anyway).
-
-22. Fixed a nonportability involving stdin and stdout in cesspool.c.
-
-23. Added support for the NEXT FROM command, with the same semantics as COME
-    FROM (including computed NEXT FROM and NEXT FROM gerund), except that it
-    saves the line that was NEXTed FROM on the choicepoint stack.
-
-24. Fixed a bug where the yuk debugger accessed unallocated memory.
-
-== Release 0.25 (by Alex Smith)  21 Jun 2006 ==
-
-1. Added support for computed ABSTAIN and TRY AGAIN.
-
-2. Added support for computed COME FROM.
-
-3. Added support for multithread programs. This includes ONCE and AGAIN,
-which also work in singlethread programs.
-
-4. Expanded intercal.el to support Font Lock and some utilities for
-   generating INTERCAL-style constants. It also works with the
-   compilation routines of Emacs to compile INTERCAL programs without
-   the need for make. Degenerated C code now has a mode line to help
-   with Emacs compatibility.
-
-5. Added a rudimentary debugger and profiler for singlethread programs. The
-   debugger's features include useful things like 'write out INTERCAL expression
-   in simpler terms' (which is only possible if -O is on). The profiler works
-   much like gcov, counting the length of time spent in and number of executions
-   of each command in the code.
-
-6. Changed searching for includes, libraries, syslib, skeleton. This
-   is so that non-root users, or people who want to evaluate ick, can
-   do so more simply. The compiler will search for the above files in
-   the directory they should have been installed in, the current
-   directory, and the directory in which ick's executable resides (in
-   that order). Skeleton problems, in particular, seem to have been a
-   major problem for unfamiliar users trying out ick.
-
-7. Added several new test programs to the Pit.
-
-8. Greatly expanded the original optimizer (which optimizes
-   expressions). It can now recognize most of the idioms in syslib,
-   and many idioms in other Pit programs. Also added a new optimizer,
-   to try to optimize program flow, which is important because
-   otherwise INTERCAL wouldn't have any rudimentary optimizers.  There
-   is also the -F optimizer, which I hope will become infamous. It
-   creates object code which is close to maximally fast in some
-   specialized situations, at the expense of compile time (compilation
-   can take a very long time when -F is active) and object file
-   size. I suggest checking its effect on primes.i.
-
-9. Fixed the grammar (again) in a spark/ears situation involving array
-   subscripts, after proving that the previous fixes weren't adequate.
-
-10. Added support for backtracking (MAYBE, GO AHEAD, GO BACK). Note
-    that it is possible for multithreading, backtracking, computed
-    ABSTAIN, and computed COME FROM to all be used simultaneously in
-    the same program, to help maximize obfuscation.
-
-11. Added an option (-l) for generating warnings. To prevent this
-    actually being useful, it is designed to generate far too many
-    warnings, which all have to be trawled through to find the
-    important ones, and has no way to turn the unimportant ones off.
-
-12. Added the +printflow and +mystery options for executing INTERCAL programs.
-    Note that it is not entirely obvious what either of them do (+printflow is a
-    debugging aid, but the output is somewhat obfuscated, and I am not going to
-    explain what +mystery does in this document).
-
-== Release 0.24  (by Eric S. Raymond) 31 Dec 2003 ==
-
-1. RPMs can now be built by non-root users.
-
-== Release 0.23  (by Eric S. Raymond) 9 Mar 2003 ==
-
-1. More fixes by Don Knuth.  He found a bug in the type-propagation logic.
-
-== Release 0.22  (by Eric S. Raymond) 4 Mar 2003 ==
-
-1. Incorporated a minor fix patch from Donald Knuth.  Yes, *the*
-Donald Knuth.  Seems he found a weakness in the code for handling
-comments, and fixed it to do multiline comments properly.  He also made
-some improvements to intercal.el, and contributed a test program.
-
-2. Updated build machinery.  This package now uses GNU autoconf.
-
-== Release 0.21 (by Eric S. Raymond) 30 July 2002 ==
-
-1. Jonathan Nieder sent a grammar fix for BLR's old bug #5 (a bad spark-ears
-   interaction.)
-
-2. Latin-1 support and makefile fixes from Magnus Bodin.
-
-== Release 0.20 (by Eric S. Raymond) 16 September 1999 ==
-
-  (The following changes are due to John Cowan <cowan@ccil.org>)
-
-1. In addition to Latin-1, UTF-8 is now acceptable in source code as well.
-   All the numerous currency symbols of Unicode (ISO 10646) can be used as
-   big-money alternatives in their UTF-8 format.  Indeed, a random mixture of
-   Latin-1 and UTF-8 also works fine; this seems very much in the spirit of
-   Intercal.
-
-2. Intercal has now been localized for the Ancient Roman as well as the
-   Posix/C locale.  You may input numbers in Latin and write Intercal programs
-   using Latin keywords.  See lexer.l for a list of equivalences.
-
-3. The Makefile in the pit directory now works like a real Makefile, and
-   won't compile anything that's already been compiled.
-
-== Release 0.19 (by Eric S. Raymond) 16 August 1998 ==
-
-1. Fixed a code-generation error in assignments from tail and hybrid
-   variables. (Error pointed out by Malcom Ryan.)
-
-== Release 0.18 (by Eric S. Raymond) 29 April 1998 ==
-
-(The following changes are due to John Cowan <cowan@ccil.org>)
-
-1. The source code is now POSIXly correct.  By making the POSIX
-   variable in the Makefile undefined, you can restore the use of
-   <varargs.h>, but otherwise <stdarg.h> is now used.
-
-2. Latin-1 (ISO 8859-1) is now the standard input charset of C-INTERCAL.
-   This means that the change operator (0xA2) has returned as an alternative to
-   big money ($).  Furthermore, the quid (0xA3) and zlotnik (0xA4) are also
-   acceptable.  For those using Latin-9 (ISO 8859-15), the euro (0xA4) will also
-   work.  ("Euro", like "ampersand", cannot be sillified further.)
-   New names have been added to intercal.mm.
-
-3. A fortiori, input of Volap\"uk digits may now be in Latin-1 or TeX format.
-
-4. Yacc is now deprecated in favor of bison; some old yaccs don't do proper
-   error recovery, and lines like "DO ~ ERROR" failed at compile time.
-
-5. Some minor portability bugs on systems where ptr_diff is not the same
-   as int were removed by casting expressions of the form (ptr - ptr) to int.
-
-== Release 0.17 (by Eric S. Raymond) 27 Feb 1998 ==
-
-Incorporates a minor bug fix by Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>.
-
-== Release 0.16 (by Brian Raiter and Eric S. Raymond) 26 May 1997 ==
-
-This is the 25th-anniversary release of INTERCAL.  This language, conceived
-in irony a quarter century ago today, has outlasted many more serious and
-high-minded essays in computer language design.  This fact should give us
-pause to reflect, or possibly frighten the crap out of us.  Or both.
-
-1. Corrected manual bugs.
-
-2. Fixed over-enthusiastic install production in the Makefile.
-
-3. DO PLEASE is no longer accepted (Brian Raiter pointed out that the
-   manual does not sanction it).
-
-4. Fixed various bugs in the optimizer.
-
-5. Incorporated fixes made by William Walter Patterson for bugs that
-   appeared when multiple files are given on the command line.
-
-(The following changes are due to Brian Raiter)
-
-6. The system library is now available for TriINTERCAL (all bases, 3 to 7).
-   The compiler has been updated to use the right library automagically.
-
-7. The error 774 feature has been brought into conformance with the
-   Princeton compiler. The odds are now a flat 10% (but still 0% with -b).
-
-8. The compiler has been modified to allocate memory dynamically, and
-   the hard-coded limits on program size and number of variables has
-   been removed. Programs are now only limited by the amount of
-   available memory.
-
-9. Array output now fflushes after outputting newlines.
-
-10. Two minor bug fixes: one in wimpmode input, which was clamping
-    input to the signed integer range, and one in politesse checking.
-    The latter was causing programs to be recognized as impolite only
-    if their ratio was less that one-sixth, not one-fifth. (Fixing this
-    also necessitated adding a few PLEASEs to pit/rot13.i.)
-
-11. Several new programs have been tossed into the pit.
-
-== Release 0.15 (by Eric S. Raymond) 20 Jun 1996 ==
-
-1. Switched the INTERCAL manual master to mgm in order to be able to handle
-   section crossreferences properly.  The manual has now been carefully
-   proofread against the paper version by ESR and seems to match.  It's
-   also been independently proofread for typos by Brian Raiter.
-
-2. The optimizer now does complete analysis and evaluation of constant
-   expressions at compile time.
-
-3. Added optimization templates for ~, |, &, ^ expressions.  Also added
-   |, &, ^ idioms to the system library, and documented them.
-
-(The following changes are due to Brian Raiter)
-
-4. Every one of the INTERCAL-72 messages is now emitted when appropriate.
-   including the previously un-emitted E000, E197, and E200 (and see below).
-
-5. A close reading (while proofing) of the sections of the manual on
-   error messages seems to indicate that splatted lines were only
-   splatted in the default listing printed after a successful
-   compile. (This seems to be a standard feature of IBM compilers; I
-   remember that RPG did this as well.) My understanding of the manual is
-   when the syntactically offensive line is encountered at runtime, it is
-   printed as error E000. I have modified the code to do this.
-
-6. I have fixed INTERCAL in order to add another bug. Namely, I have
-   implemented the BUG/NOBUG option in the Princeton compiler. By
-   default, there is a chance that INTERCAL will randomly insert error
-   E774 into your executable. (The odds are 1/128 per statement, not
-   counting COME FROMs. Is there any way to find out what the
-   Princeton compiler's odds were?) The new option -b turns this
-   feature off.
-
-7. The new file pit/lib/numio.i contains routines for wimpmode I/O.
-   These routines are documented in the file pit/lib/numio.doc.
-   It is my earnest hope that C-INTERCAL programmers everywhere will
-   flock to these handy routines, and C-INTERCAL users will thus no
-   longer need to fear that they might succumb to the foul and awful
-   temptation to use the dastardly +wimpmode option.
-
-== Release 0.14 (by Eric S. Raymond) 9 Jun 1996 ==
-
-1. The documentation has been reorganized and cleaned up (you can now
-   format either a C-INTERCAL or INTERCAL-72 manual from the same master).
-   The diagrams in the paper original have been transcribed as pic figures.
-   See doc/READ.ME for details.
-
-2. Yet more code.  The pit now includes a second random-number generator,
-   a ROT13 filter, and even two programs in TriINTERCAL!
-
-3. Louis Howell's corrected system library is now included.
-
-4. The distribution is now formally GPLed.
-
-== Release 0.13 (by Eric S. Raymond) 5 Jun 1996 ==
-
-1. I folded in patches by Brian Raiter <breadbox@muppetlabs.com> that port
-   this code to Linux, ANSIfies it, and enables it to use flex.  Note: This
-   version has been tested on Linux and SunOS but not yet elsewhere.
-
-2. Another piece of nontrivial INTERCAL code has been found!  (Doubtless
-   hell is freezing over even as I write.)  We've added to the pit the
-   `beer' program by Matt DiMeo <mdimeo@brooktree.com>, courtesy of the
-   infamous Beer List (URL:http://www.ionet.net/~timtroyr/funhouse/beer.html).
-
-== Release 0.12 (by Eric S. Raymond) 22 Mar 1995 ==
-
-1. The code now compiles and runs under Linux, using bison and lex.  It does
-   *not* yet work with flex;  C.P. Osborne's patches for 0.11 turned out not
-   to be sufficient (at least for flex 2.4.6 under Linux using the -l option).
-   See the BUGS list.
-
-2. Note 3 under 0.11 was incorrect.  We're in conformance after all.
-
-3. The politesse check is a little smarter about programs too small to
-   conform to the 1/5-to-1/3 criterion.  All the pit programs have been
-   checked for conformance.  Also, the politesse error message now tells
-   you the offending program's line count.
-
-== Release 0.11 (by Eric S. Raymond) 24 Sep 1994 ==
-
-1. Incorporated changes by Jan-Pieter Cornet <cornet@OTech.fgg.EUR.nl> for
-   magical inclusion of the system library.  These address an outstanding bug
-
-   2. (SS) The `system library' should be precompiled and `linked' to user
-      written code, at least optionally.  Doing this with the current compiler
-      presents a few problems.
-
-   which has accordingly been removed from the BUGS file.  They also fix a
-   previously unknown bug; due to a minor oversight in the lexer, it was not
-   possible to ABSTAIN FROM WRITING IN or READING OUT.  Jan also contributed
-   a test program that demonstrates gerund abstention.
-
-2. Despite the obvious appeal of the idea, and much discussion on
-   alt.lang.intercal, I decided *not* to add Klingon; maintaining two parallel
-   grammars just so the compiler could support SVO and OSV languages would be
-   too painful.  There was also a minor mess near case-sensitivity in the
-   digits.  The workaround kluges I was offered instead failed to satisfy.
-
-3. We fess up to a violation of the INTERCAL-72 standard.  That implementation,
-   instead of accepting an entire multiple-digit number per line of input,
-   expected one digit per *card image* (input line).  It is unclear how
-   INTERCAL-72 programs ever managed to input more than one number.
-
-4. Added patches by C.P.Osborne <boris@ibmpcug.co.uk> to make the lexer work
-   using flex, for Linux and BSD/386 support.  I didn't use his error-reporting
-   patch, though; instead, I changed the parser to catch errors at logical-line
-   level.  I also kept the N in `RESUBNIT'; this is a carefully preserved
-   feature of INTERCAL-72.
-
-5. Volapuk digits are now recognized on input.  TO DO: Recognize Volapuk
-   keywords, including gerunds.
-
-== Release 0.10 (by Eric S. Raymond) 9 Sep 1994 ==
-
-1. It is now possible to undo a line-number abstention with a gerund
-   reinstatement, or undo a gerund abstention with a line-number
-   reinstatement.  In previous versions, gerund abstention/reinstatements and
-   line-number abstention/reinstatements were independent of each other.
-
-2. After release 0.5, I wrote in the TO DO list as follows:
-
-   2. (ESR) Input format internationalization -- allow WRITE IN input digits in
-   major languages such as Nahuatl, Tagalog, Sanskrit, and Basque.
-
-   The twisted loons in the alt.folklore.computers crowd loved this idea,
-   and I actually got sent digit lists for Nahuatl, Tagalog, Sanskrit, and
-   Basque -- also, Kwakiutl, Georgian, Ojibwe, and Albanian.  I've left
-   out Albanian (didn't want to keep track of the dipthong diacritical)
-   and Ojibwe (no zero digit).  So: Nahuatl, Tagalog, Sanskrit, Basque,
-   Georgian, and Kwakiutl are now supported in addition to English.
-
-3. The THEORY document has been significantly revised.
-
-== Release 0.9 (by Eric S. Raymond) 5 Mar 1993 ==
-
-1. An embarrassing port bug in the INTERCAL skeleton has been fixed
-
-2. Jamie Zawinski's suggestion for an improved E333 error message has
-   been accepted.
-
-3. Added and improved documentation for pit programs.
-
-4. The install production in the Makefile now puts lose.h in place
-   as well as cesspool.h.
-
-5. You can now set the C compiler to be used as a back end by INTERCAL
-   by setting the environment variable CC.  The default is cc.
-
-== Release 0.8 (many hacks on 0.7 by Eric Raymond) 21 Jan 1992 ==
-
-1. A previously undocumented `feature' of the Princeton compiler,
-   revealed by Don Woods, is now emulated.  If fewer than 1/5 or more
-   than 1/3 of a program's statements contain the qualifier `PLEASE', the
-   program is rejected with an entertaining error message.  Programs in pit
-   have been hacked to pass the politesse test.
-
-2. The `sample' program now works correctly, thanks to Louis Howell.  Also,
-   he has contributed new programs to calculate pi and to search for prime
-   numbers.
-
-3. An intercal mode for GNU Emacs is included.  It helps programmers deal with
-   the new politesse check by randomly expanding the abbrev "do" to DO PLEASE
-   or PLEASE DO about 1/4 of the time.
-
-4. Improvements in code generation for NEXT/RESUME.
-
-5. Fixes to the optimizer; it handles the results of optimized MINGLEs
-   correctly now.  Also, added a rewrite rule that checks for the
-   equality-test idiom using XOR.
-
-6. The original error messages from the Princeton compiler have been restored.
-
-The documentation has been updated to reflect these changes.
-
-== Release 0.7 (by Louis Howell) 21 Dec 1991 ==
-
-In addition to bug fixes, new features in this version include arrays,
-character I/O, modified (hopefully improved!) semantics for the COME
-FROM statement, extensions to bases other than 2, new INTERCAL programs,
-and new documentation.
-
-== Release 0.6 (by Steve Swales) 5 Jan 1991 ==
-
-1. Restored Princeton documentation (courtesy of Michael Ernst).
-
-2. Added -@ usage option to ick.
-
-3. Added [+/-]help, [+/-]traditional, and [+/-]wimpmode options for
-generated programs; [+/-]traditional is a no-op at this point.
-
-4. Various bug fixes, esp. in lexical analysis.
-
-== Release 0.5 (ESR's second pre-release) 5 Jun 1990 ==
-
-1. As a convenience to all you junior birdmen out there, `NINER' is accepted as
-   a synonym for `NINE' in INTERCAL input.
-
-2. The COME FROM statement is now compiled.
-
-== Release 0.3 (ESR's original pre-release) ==
-
-The resurrection of INTERCAL from its grave took place on 12 May 1990
-when ESR released 0.3 on an unsuspecting USENET.
diff --git a/README b/README
index 30cd36d9beda439f428ddd77befdf311b901c0cc..fcfb962543b61b9b0e8fbe7c75dee8a52ed30833 100644 (file)
--- a/README
+++ b/README
@@ -27,6 +27,7 @@ The files included are:
 |README                 | this file
 |BUGS                   | current bug and to-do list
 |NEWS                   | info on features and fixes new in this release
+|HISTORY                | Longer-form history of the code tree
 |COPYING                | copyright and licence information
 |MANIFEST               | a list of all files in the distribution
 |doc/READ.ME            | historical notes on the docs
index 8f8268be39e49d3d356d337ca5c6c8545b9268fb..1873a2fec24ebb17e73fbff50938071cbb664400 100644 (file)
@@ -131,8 +131,8 @@ EXTRA_DIST = pit etc BUGS src/abcessh.in src/feh.h src/fiddle.h src/ick_ec.h \
              src/sizes.h src/uncommon.h src/yuk.h src/parser.y src/lexer.l \
              doc/Makefile doc/fdl-1-2.txi doc/fix83.pl doc/fixtoc.pl \
              doc/ickstyle.css doc/ick.txt doc/intercal.mm doc/READ.ME \
-             doc/THEORY.txt doc/tidy.cfg parser.c parser.h \
-             lexer.c doc/ick.txi doc/ick.txt doc/chipspec.txt NEWS README \
+             doc/THEORY.txt doc/tidy.cfg parser.c parser.h lexer.c control \
+             doc/ick.txi doc/ick.txt doc/chipspec.txt HISTORY NEWS README \
              buildaux/buildconfig buildaux/buildconfig.ac \
              buildaux/depcomp buildaux/hostmak.in buildaux/install-sh \
              buildaux/missing buildaux/ylwrap buildaux/bconfigh.in
diff --git a/control b/control
new file mode 100644 (file)
index 0000000..196cca5
--- /dev/null
+++ b/control
@@ -0,0 +1,18 @@
+# Not a real Debian control file, though the syntax is upward-compatible.
+# It's project metadata for the shipper tool
+
+Package: intercal
+
+Description: a compiler for the INTERCAL language
+ INTERCAL is the original esoteric language, a farrago of features
+ that will test the mettle of any programmer and bend the minds of
+ most. The INTERCAL suite includes not just a compiler and debugger
+ for the language but most of the code ever written for it as well.
+
+Homepage: http://www.catb.org/~esr/intercal
+XBS-Gitorious-URL: http://gitorious.org/intercal
+XBS-Project-Tag-List: language, retrocomputing, parody, hacker culture
+Destinations: mailto:mam@theory.stanford.edu
+             mailto:ais523@bham.ac.uk, 
+             mailto:design@adastragames.com, 
+             mailto:albaugh@employees.org