NEW IN THIS RELEASE
+ 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 Knith. He found a bug in the type-propagation logic.
+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
NEWS -- info on features and fixes new in this release
intercal.el -- elisp for editing INTERCAL code under GNU Emacs
-doc/READ.ME -- historical notes on the docs
+doc/README -- historical notes on the docs
doc/intercal.mm -- the manual in groffable form
doc/THEORY -- some notes on the internals of the INTERCAL compiler
+++ /dev/null
-This directory contains the documentation (such as it is) for INTERCAL.
-
-READ.ME
- This file.
-
-intercal.mm:
- Masters for the INTERCAL manual (needs pic to render illos)
- This has been carefully proofread against the original paper
- version.
-
-THEORY
- Implementation notes on the C-INTERCAL implementation.
-
-chip.spec:
- Christian Brunschen's spec sheet for the INTERCAL chip.
-
-Note 1: The TeX version we formerly distributed has been dropped. The
-combination of groff and pic does an effective job of rendering the
-illustrations and is easier to maintain.
-
-Note 2: The supplemental reference manual, ick.txt, has been merged
-into the intercal manual. (It is still possible to generate the
-original; see the Makefile.)
-
-Note 3: The flat-ASCII directly transcribed from the paper original is
-also gone. You can regenerate something very close to it with `make
-original.txt'. The differences will be (a) page breaks may fall in
-different places, (b) the circuit diagrams present in the paper
-version but absent in the ASCII transcription are instead poorly
-approximated with ASCII boxology, (c) every "butchered Roman numeral"
-is preceded and followed by a line break, (d) the hanging-indent list
-of Princeton compiler options has all marks above each description,
-rather than to its left.
-
-The aim of these changes was to reduce to one the number of manual masters that
-need to be maintained.
--- /dev/null
+This directory contains the documentation (such as it is) for INTERCAL.
+
+READ.ME
+ This file.
+
+intercal.mm:
+ Masters for the INTERCAL manual (needs pic to render illos)
+ This has been carefully proofread against the original paper
+ version.
+
+THEORY
+ Implementation notes on the C-INTERCAL implementation.
+
+chip.spec:
+ Christian Brunschen's spec sheet for the INTERCAL chip.
+
+Note 1: The TeX version we formerly distributed has been dropped. The
+combination of groff and pic does an effective job of rendering the
+illustrations and is easier to maintain.
+
+Note 2: The supplemental reference manual, ick.txt, has been merged
+into the intercal manual. (It is still possible to generate the
+original; see the Makefile.)
+
+Note 3: The flat-ASCII directly transcribed from the paper original is
+also gone. You can regenerate something very close to it with `make
+original.txt'. The differences will be (a) page breaks may fall in
+different places, (b) the circuit diagrams present in the paper
+version but absent in the ASCII transcription are instead poorly
+approximated with ASCII boxology, (c) every "butchered Roman numeral"
+is preceded and followed by a line break, (d) the hanging-indent list
+of Princeton compiler options has all marks above each description,
+rather than to its left.
+
+The aim of these changes was to reduce to one the number of manual masters that
+need to be maintained.
#include "fiddle.h"
#include "sizes.h"
+#include "lose.h"
+#include <stdio.h>
unsigned int mingle(register unsigned int r, register unsigned int s)
{
if (Base == 2) {
+ if (r>0xffff || s>0xffff)
+ lose(E533, lineno, (char *)NULL);
r = ((r & 0x0000ff00) << 8) | (r & 0x000000ff);
r = ((r & 0x00f000f0) << 4) | (r & 0x000f000f);
r = ((r & 0x0c0c0c0c) << 2) | (r & 0x03030303);
$D
$E
+#define OK(d) !abstained[d]
+
int main(int argc, char *argv[])
{
int skipto = 0;
(make-intercal-abbrev intercal-ab-abbrev "ABSTAINING" "ABSTAIN FROM")
(make-intercal-abbrev intercal-rei-abbrev "REINSTATING" "REINSTATE")
(make-intercal-abbrev intercal-gi-abbrev "GIVING UP" "GIVE UP")
-(make-intercal-abbrev intercal-rea-abbrev "READING IN" "READ IN")
-(make-intercal-abbrev intercal-wr-abbrev "WRITING OUT" "WRITE OUT")
+(make-intercal-abbrev intercal-rea-abbrev "READING OUT" "READ OUT")
+(make-intercal-abbrev intercal-wr-abbrev "WRITING IN" "WRITE IN")
(make-intercal-abbrev intercal-co-abbrev "COMING FROM" "COME FROM")
(defun intercal-do-abbrev ()
ab ABSTAIN co COME FROM fo FORGET
gi GIVE UP ig IGNORE ne NEXT
-rea READ IN rei REINSTATE rem REMEMBER
+rea READ OUT rei REINSTATE rem REMEMBER
res RESUME ret RETRIEVE st STASH
-wr WRITE OUT pl PLEASE
+wr WRITE IN pl PLEASE
Carriage return takes you to the first tab stop (code indent level).
Certain other single keys are bound to things which may or may not be useful.
+++ /dev/null
-Name: intercal
-Version: 0.22
-Release: 1
-URL: http://www.catb.org/~esr/intercal/
-Source: intercal-0.22.tar.gz
-License: GPL
-Group: Development/Languages
-Summary: the language that kills the weak and drives mad the strong
-
-%description
-An implementation of the language INTERCAL, legendary for
-its perversity and horribleness (this version adds COME FROM
-for extra flavor). Comes with language manual and examples
-including possibly the entire extant body of INTERCAL code.
-Now supports i18n and l14n (to Ancient Roman locale only)
-Now with fix patch by Donald Knuth.
-
-%prep
-%setup -q
-
-%build
-configure --prefix=/usr
-make
-
-%install
-rm -fr /usr/share/intercal-0.22/*
-make install
-
-%files
-/usr/bin/ick
-/usr/lib/libick.a
-/usr/include/intercal-0.22/lose.h
-/usr/include/intercal-0.22/abcess.h
-/usr/include/intercal-0.22/fiddle.h
-/usr/share/intercal-0.22/ick-wrap.c
-/usr/share/intercal-0.22/
-%doc README BUGS NEWS
--- /dev/null
+Name: intercal
+Version: @PACKAGE_VERSION@
+Release: 1
+URL: http://www.catb.org/~esr/intercal/
+Source: intercal-@PACKAGE_VERSION@.tar.gz
+License: GPL
+Group: Development/Languages
+Summary: the language that kills the weak and drives mad the strong
+BuildRoot: %{_tmppath}/%{name}-root
+
+%description
+An implementation of the language INTERCAL, legendary for
+its perversity and horribleness (this version adds COME FROM
+for extra flavor). Comes with language manual and examples
+including possibly the entire extant body of INTERCAL code.
+Now supports i18n and l14n (to Ancient Roman locale only)
+Now with fix patch by Donald Knuth.
+
+%prep
+%setup -q
+
+%build
+configure --prefix=/usr
+make
+
+%clean
+[ "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"
+
+%install
+[ "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"
+mkdir -p "$RPM_BUILD_ROOT"%{_bindir}
+cp ick "$RPM_BUILD_ROOT"%{_bindir}
+mkdir -p "$RPM_BUILD_ROOT"%{_libdir}
+cp libick.a "$RPM_BUILD_ROOT"%{_libdir}
+mkdir -p "$RPM_BUILD_ROOT"%{_includedir}/intercal-@PACKAGE_VERSION@
+cp lose.h abcess.h fiddle.h "$RPM_BUILD_ROOT"%{_includedir}/intercal-@PACKAGE_VERSION@
+
+%files
+%doc README BUGS NEWS
+%{_bindir}/ick
+%{_libdir}/libick.a
+%{_includedir}/intercal-@PACKAGE_VERSION@/lose.h
+%{_includedir}/intercal-@PACKAGE_VERSION@/abcess.h
+%{_includedir}/intercal-@PACKAGE_VERSION@/fiddle.h
+
+%changelog
+* Wed Dec 31 2003 Eric S. Raymond <esr@snark.thyrsus.com> 0.24-1
+- Non-root users can now build RPMs.
+
+# The following sets edit modes for GNU EMACS
+# Local Variables:
+# mode:rpm-spec
+# End:
+
+
+++ /dev/null
- PLEASE ABSTAIN FROM (1)
-(1) DON KNUTH'S IMPLEMENTATION OF TPK IN INTERCAL
- (C) MARCH 2003
- REFERENCE --- THE EARLY HISTORY OF PROGRAMMING
- LANGUAGES, BY D E KNUTH AND L TRABB PARDO
-
- NOTA BENE: THE INPUT AND OUTPUT DATA ARE SCALED
- DECIMAL NUMBERS WITH SIX DIGITS TO THE RIGHT OF
- THE DECIMAL POINT; THUS AN INPUT OF
- THREE ONE FOUR ONE FIVE NINE THREE
- DENOTES 3.141593, AND THAT VALUE WOULD BE OUTPUT AS
- ______
- MMMCXLMDXCIII
-
- VARIABLE NAMES AND SUBROUTINE NAMES USE THE CLASSIC
- 5-BIT TELEPRINTER CODE IN LETTER-SHIFT MODE, NAMELY
- / E @ A : S I U 1/4 D R J N F C K T Z L W H Y P Q O B G " M X V $
- (WHICH ALAN TURING ADVISED EVERY PROGRAMMER TO LEARN)
-
- DO GIVE UP
--- /dev/null
+I have made my TPK program available on
+ http://www-cs-faculty.stanford.edu/~knuth/programs.html
+and I have no objection if you or other people with INTERCAL sites
+add it to their collection. If you have time to check it out
+(at least a little), I think you'll see that it introduces a few
+new hacks that work only on INTERCAL, including DON'T RESUME #1
+and REINSTATE NEXTING. Also a way to avoid simple branching by using
+an array: Suppose you want to set x<-y if and only if z is true.
+Then keep x in ;X SUB#1 and "shadow x" in ;X SUB#2 and convert
+z to .Z = 1 if true, 2 if false; then set ;X SUB .Z <- y (no branching).
+If you have time to look at only a little bit of the program,
+I recommend the last two subroutines, "CMP" (which is teleprinter
+code for 23438) and "TIX" (29904). Someday I'll publish clues about
+what is going on, in my Fun and Games book; the code is filled with
+jokes that only a true hacker can appreciate.... and I think I've
+used every non-newfangled feature of the language.
--- /dev/null
+ PLEASE ABSTAIN FROM (29733)
+(29733) DON KNUTH'S IMPLEMENTATION OF TPK IN INTERCAL
+ (C) MARCH 2003
+ REFERENCE --- THE EARLY HISTORY OF PROGRAMMING
+ LANGUAGES, BY D E KNUTH AND L TRABB PARDO
+
+ NOTA BENE: THE INPUT AND OUTPUT DATA ARE SCALED
+ DECIMAL NUMBERS WITH SIX DIGITS TO THE RIGHT OF
+ THE DECIMAL POINT; THUS AN INPUT OF
+ THREE ONE FOUR ONE FIVE NINE THREE
+ DENOTES 3.141593, AND THAT VALUE WOULD BE OUTPUT AS
+ ______
+ MMMCXLMDXCIII
+
+ PLEASE NOTE THAT VARIABLE NAMES AND SUBROUTINE NAMES USE
+ THE 5-BIT TELEPRINTER CODE IN LETTER-SHIFT MODE, NAMELY
+ / E @ A : S I U 1/4 D R J N F C K T Z L W H Y P Q O B G " M X V $
+ (WHICH ALAN TURING ADVISED EVERY PROGRAMMER TO LEARN)
+
+ PLEASE (6534) NEXT
+ DO ;3 <- #11 BY #2
+ DO ;29 <- #2
+ PLEASE DO .6 <- #0
+ DO (1) NEXT
+(1) PLEASE DO FORGET #1
+ DO WRITE IN :1
+ DO (22919) NEXT
+ PLEASE .1 <- .6
+ PLEASE DO (1020) NEXT
+ DO .11 <- .1
+ DO ;3 SUB .11 #1 <- ;1 SUB #1
+ DO ;3 SUB .11 #2 <- ;1 SUB #2
+ DO .1 <- #10
+ DO (29904) NEXT
+ DO (1) NEXT
+ DO REINSTATE NEXTING
+ PLEASE DO (2) NEXT
+(2) DO FORGET #1
+ DO .984 <- #0
+ PLEASE .1 <- .6
+ PLEASE DO (1020) NEXT
+ DO .11 <- .1
+ DO ;29 SUB #1 <- ;3 SUB .11 #1
+ DO ;29 SUB #2 <- ;3 SUB .11 #2
+ PLEASE DO (13) NEXT
+ DO (15478) NEXT
+ DO (15320) NEXT
+ DO :2 <- #6528$#32544
+ PLEASE DO (23438) NEXT
+ DO :1 <- #31640$#20792
+ DO READ OUT .6 + :1
+ DO REMEMBER :1
+ DO .1 <- #0
+ DO ABSTAIN FROM (711)
+ PLEASE DO (29904) NEXT
+ DO (2) NEXT
+ DO GIVE UP
+
+ PLEASE USE THE FOLLOWING FUNCTION, WHICH SETS ;1 <- F(;X)
+ WHERE ;29 AND ;1 ARE EXTENDED FIXED-POINT NUMBERS
+ (THAT IS, THEY ARE VECTORS WITH TWO COMPONENTS,
+ #1=INTEGER PART, #2=FRACTION PART)
+(13) DO STASH ;2
+ DO ;1 SUB #1 <- ;29 SUB #1
+ DO ;1 SUB #2 <- ;29 SUB #2
+ PLEASE STASH ;1
+ PLEASE DO ;2 SUB #1 <- ;29 SUB #1
+ DO ;2 SUB #2 <- ;29 SUB #2
+ DO (30300) NEXT
+ DO (30300) NEXT
+ DO ;2 SUB #1 <- #5
+ DO ;2 SUB #2 <- #0
+ PLEASE DO (30300) NEXT
+ PLEASE DO ;2 SUB #1 <- ;1 SUB #1
+ DO ;2 SUB #2 <- ;1 SUB #2
+ PLEASE RETRIEVE ;1
+ DO (30499) NEXT
+ PLEASE DO (30218) NEXT
+ DO (29987) NEXT
+ DO RETRIEVE ;2
+ PLEASE RESUME #1
+
+ DO NOTHING BUT BASIC SUBROUTINES FROM HERE ON
+ -------------
+ FIRST THERE ARE ROUTINES FOR EXTENDED ARITHMETIC
+ (DOUBLE DOUBLE PRECISION), WHICH CONSISTS OF
+ TWO 32-BIT NUMBERS WITH A BINARY POINT BETWEEN THEM
+
+ TO GET STARTED, DO (INI) FIRST; IT DEFINES BASIC ARRAYS
+(6534) DO ;1 <- #2
+ DO ;2 <- #2
+ PLEASE RESUME #1
+
+ DON'T FORGET TO TEST FOR OVERFLOW AFTER A SERIES OF
+ EXTENDED ARITHMETIC OPERATIONS ... THE (OVC) ROUTINE
+ SETS ;1 TO THE MAX VALUE IF .OV IS 1
+(15320) PLEASE DO (2000) NEXT
+ DO ;1 SUB #1 <- #65535$#65535
+ DO ;1 SUB #2 <- #65535$#65535
+ PLEASE RESUME #1
+(2000) PLEASE DO (2001) NEXT
+ PLEASE RESUME #2
+(2001) DO RESUME '?.984$#1'~#3
+
+ DOING (ADY) NEXT SETS ;1 <- ;1+;2+.C~2 AND .C <- CARRY+1
+ DOING (ADZ) NEXT SETS ;1 <- ;1+;2 AND .C <- CARRY+1
+(17699) PLEASE .14 <- #1
+(21785) DO STASH :1 + :2 + :3 + :4
+ DO :1 <- ;1 SUB #2
+ PLEASE DO :2 <- .14~#2
+ PLEASE DO (1509) NEXT
+ DO .14 <- :4~#2
+ DO :1 <- :3
+ PLEASE DO :2 <- ;2 SUB #2
+ DO (1509) NEXT
+ DO ;1 SUB #2 <- :3
+ DO :1 <- ;1 SUB #1
+ DO :2 <- "V.14$':4~#2'"~#1
+ DO (1509) NEXT
+ DO .14 <- :4
+ DO :1 <- :3
+ DO :2 <- ;2 SUB #1
+ DO (1509) NEXT
+ DO ;1 SUB #1 <- :3
+ DO .14 <- '?:4$.14'~#6
+ PLEASE RETRIEVE :1 + :2 + :3 + :4
+ PLEASE RESUME #1
+
+ DOING (ADX) NEXT SETS ;1 <- ;1+;2 AND TRACKS OVERFLOW
+ DOING (ABX) NEXT SETS ;1 <- ABS(;1)
+(29987) PLEASE STASH .14
+ DO (17699) NEXT
+ DO .984 <- "V.984$'.14~#2'"~#1
+ PLEASE RETRIEVE .14
+(30499) DO RESUME #1
+
+ DOING (SUX) NEXT SETS ;1 <- ;1-;2 AND TRACKS OVERFLOW
+(29925) PLEASE STASH ;2 + .14
+ DO ;2 SUB #1 <- '"?'";2 SUB #1"~"#65535$#0"'$#65535"~"#0$#65535"'$
+ '"?'";2 SUB #1"~"#0$#65535"'$#65535"~"#0$#65535"'
+ DO ;2 SUB #2 <- '"?'";2 SUB #2"~"#65535$#0"'$#65535"~"#0$#65535"'$
+ '"?'";2 SUB #2"~"#0$#65535"'$#65535"~"#0$#65535"'
+ DO .14 <- #2
+ DO (21785) NEXT
+ PLEASE DO .984 <- "V.984$'.14~#1'"~#1
+ PLEASE RETRIEVE ;2 + .14
+ DO RESUME #1
+
+ DOING (SHY) NEXT SETS ;2 <- :3 * 2^16 AND CLOBBERS :3
+(22149) DO ;2 SUB #1 <- :3 ~ '#65280$#65280'
+ DO :3 <- '"':3~#43690'$#0"~"#65535$#1"' $
+ '"':3~#21845'$#0"~"#65535$#1"'
+ PLEASE :3 <- ":3~'#511$#1'" $ ":3~'#1$#511'"
+ PLEASE :3 <- ":3~'#1023$#3'" $ ":3~'#3$#1023'"
+ DO ;2 SUB #2 <- ":3~'#4095$#15'" $ ":3~'#15$#4095'"
+ PLEASE RESUME #1
+
+ DOING (MLY) NEXT SETS ;1 <- :1 * :2 / 2^32
+(22108) PLEASE STASH :1 + :2 + :3 + ;2 + .14
+ DO :1 <- :1 ~ #65535
+ DO :2 <- :2 ~ #65535
+ DO (1540) NEXT
+ DO ;1 SUB #2 <- :3
+ DO ;1 SUB #1 <- #0
+ PLEASE RETRIEVE :1
+ PLEASE STASH :1
+ DO :1 <- :1 ~ '#65280$#65280'
+ DO (1540) NEXT
+ DO (22149) NEXT
+ DO (17699) NEXT
+ PLEASE RETRIEVE :1 + :2
+ PLEASE STASH :1 + :2
+ DO :1 <- :1 ~ #65535
+ DO :2 <- :2 ~ '#65280$#65280'
+ DO (1540) NEXT
+ DO (22149) NEXT
+ DO (17699) NEXT
+ PLEASE RETRIEVE :1
+ PLEASE STASH :1
+ DO :1 <- :1 ~ '#65280$#65280'
+ DO (1540) NEXT
+ DO ;2 SUB #2 <- #0
+ DO ;2 SUB #1 <- :3
+ DO (17699) NEXT
+ PLEASE RETRIEVE :1 + :2 + :3 + ;2 + .14
+ PLEASE RESUME #1
+
+ DOING (MLZ) NEXT SETS ;1 <- ;1 + (:1 * :2 / 2^32), TRACKING OVERFLOW
+(18012) PLEASE STASH ;1 + ;2
+ DO (22108) NEXT
+ PLEASE ;2 SUB #1 <- ;1 SUB #1
+ PLEASE ;2 SUB #2 <- ;1 SUB #2
+ PLEASE RETRIEVE ;1
+ DO (29987) NEXT
+ PLEASE RETRIEVE ;2
+ PLEASE RESUME #1
+
+ DOING (MLX) NEXT SETS ;1 <- ;1*;2 AND TRACKS OVERFLOW
+(30300) PLEASE STASH :1 + :2 + :3 + :4 + ;1 + ;2
+ DO :1 <- ;1 SUB #2
+ DO :2 <- ;2 SUB #2
+ DO (22108) NEXT
+ DO :1 <- ;1 SUB #1
+ DO :2 <- ';1 SUB #2' ~ '#32768$#0'
+ DO (1500) NEXT
+ PLEASE RETRIEVE ;1
+ DO :4 <- ;1 SUB #2
+ DO :1 <- ;1 SUB #1
+ DO :2 <- ;2 SUB #1
+ DO (22108) NEXT
+ PLEASE DO .984 <- "V.984$' "';1 SUB #1'~';1 SUB #1'" ~#1'" ~ #1
+ DO ;1 SUB #1 <- ;1 SUB #2
+ DO ;1 SUB #2 <- :3
+ DO :2 <- ;2 SUB #2
+ DO (18012) NEXT
+ DO :1 <- :4
+ DO :2 <- ;2 SUB #1
+ DO (18012) NEXT
+ PLEASE RETRIEVE :1 + :2 + :3 + :4 + ;2
+ PLEASE RESUME #1
+
+ DOING (RTX) NEXT SETS ;1 <- SQRT(;1)
+(30218) PLEASE STASH .6 + ;2 + ;3 + ;4 + :1 + :2 + .1 + .2 + .3 + .14 + .984
+ DO ;4 <- #2
+ DO ;3 <- #2
+ DO .6 <- #1
+ DO ;3 SUB #1 <- #0
+ DO ;3 SUB #2 <- #0
+ DO ;4 SUB #1 <- #65535$#65535
+ DO ;4 SUB #2 <- ;4 SUB #1
+ DO :1 <- ;1 SUB #1
+ DO :2 <- ;1 SUB #2
+ PLEASE (2003) NEXT
+(2002) DO ;2 SUB #1 <- ;1 SUB #1
+ DO ;2 SUB #2 <- ;1 SUB #2
+ DO (17699) NEXT
+ DO ;2 SUB #1 <- ;1 SUB #1
+ DO ;2 SUB #2 <- ;1 SUB #2
+ DO (17699) NEXT
+ PLEASE DO ;2 SUB #1 <- #0
+ PLEASE DO ;2 SUB #2 <- .2
+ DO (17699) NEXT
+ PLEASE DO ;2 SUB #2 <- .3
+ DO (29925) NEXT
+ PLEASE DO ;3 SUB #1 <- ;1 SUB #1
+ PLEASE DO ;3 SUB #2 <- ;1 SUB #2
+ PLEASE DO ;1 SUB #1 <- ;4 SUB #1
+ PLEASE DO ;1 SUB #2 <- ;4 SUB #2
+ DO ;2 SUB #1 <- ;1 SUB #1
+ DO ;2 SUB #2 <- ;1 SUB #2
+ DO (17699) NEXT
+ DO ;2 SUB #1 <- #0
+ PLEASE DO ;2 SUB #2 <- "?#1$.3"~#1
+ DO (17699) NEXT
+ PLEASE DO ;4 SUB #1 <- ;1 SUB #1
+ PLEASE DO ;4 SUB #2 <- ;1 SUB #2
+ DO .1 <- ":1 ~ '#21845$#0'" $
+ '"?':1~"#10922$#1"' $ '"?':1~#1'$':2~"#32768$#0"'"~#1'" ~#21845'
+ DO .2 <- ":1 ~ '#0$#21845'" $
+ '"? ':1~"#0$#10923"' $ '"?':1~#1'$':2~"#0$#32768"'"~#1'" ~#21845'
+ DO :1 <- .1 $ .2
+ DO .1 <- ":2 ~ '#21845$#0'" $
+ '"&':2~"#10922$#1"' $ #65534" ~ #21845'
+ DO .2 <- ":2 ~ '#0$#21845'" $
+ '"&':2~"#0$#10923"' $ #65534" ~ #21845'
+ DO :2 <- .1 $ .2
+(2003) DO .2 <- :1 ~ '#32768$#32768'
+ DO ;1 SUB #1 <- ;3 SUB #1
+ DO ;1 SUB #2 <- ;3 SUB #2
+ DO ;2 SUB #1 <- ;4 SUB #1
+ DO ;2 SUB #2 <- ;4 SUB #2
+ DO .14 <- #2
+ DO (21785) NEXT
+ DO .3 <- ' " '"';1 SUB #1'~';1 SUB #1'"~#1' $
+ '"';1 SUB #2'~';1 SUB #2'"~#1' " $ .2' ~ #15
+ DO .3 <- '&"'.3~.3'~#1" $ .14' ~ #2
+ PLEASE DO (2004) NEXT
+ DO ;1 SUB #1 <- ;3 SUB #1
+ DO ;1 SUB #2 <- ;3 SUB #2
+ DO (2005) NEXT
+(2004) DO (2006) NEXT
+(2005) PLEASE FORGET #1
+ PLEASE DO .1 <- #49
+ DO (29904) NEXT
+ DO (2002) NEXT
+ PLEASE REINSTATE NEXTING
+ DO ;2 SUB #1 <- ;4 SUB #1
+ DO ;2 SUB #2 <- ;4 SUB #2
+ DO ;1 SUB #1 <- #0
+ DO ;1 SUB #2 <- #0
+ DO (29925) NEXT
+ DO ;2 SUB #1 <- #0
+ DO ;2 SUB #2 <- "?.3$#1"~#1
+ DO (29925) NEXT
+ PLEASE RETRIEVE .6 + ;2 + ;3 + ;4 + :1 + :2 + .1 + .2 + .3 + .14 + .984
+ PLEASE RESUME #50
+(2006) PLEASE RESUME "?.3$#2"~#3
+
+ DOING (UNP) NEXT SETS ;1 <- :1 / 1000000
+ (WHICH IS ESSENTIALLY DECIMAL TO BINARY CONVERSION)
+(22919) PLEASE STASH :1 + :2 + :3 + :4 + .3
+ DO :2 <- #784 $ #904
+ PLEASE DO (1550) NEXT
+ PLEASE DO ;1 SUB #1 <- :3
+ DO :1 <- :3
+ DO (1540) NEXT
+ DO RETRIEVE :1
+ PLEASE STASH :1
+ DO :2 <- :3
+ PLEASE DO (1510) NEXT
+ PLEASE DO :4 <- #32768 $ #0
+ DO ;2 SUB #1 <- #0
+ DO ;2 SUB #2 <- #0
+ DO :1 <- :3
+ PLEASE DO (2008) NEXT
+(2007) DON'T RESUME #1
+ DO :2 <- #0$#1024
+ DO :1 <- :3
+ PLEASE (1510) NEXT
+ DO :1 <- :3
+ DO REMEMBER :1
+ DO .3 <- :4~#1
+ DO (2009) NEXT
+ DO :4 <- :4~'#65535$#65534'
+(2008) DO :2 <- :1
+ PLEASE DO (1500) NEXT
+ DO :1 <- :3
+ DO :2 <- #784 $ #904
+ PLEASE (23438) NEXT
+ DO :2 <- #48576
+ PLEASE DO (1500) NEXT
+ DO .3 <- :3~'#0$#1024'
+ DO :2 <- ;2 SUB '"?.3$#1"~#3'
+ DO :2 <- "'V":2~'#65535$#0'"$":4~'#65535$#0'"' ~ '#0$#65535'" $
+ "'V":2~'#0$#65535'"$":4~'#0$#65535'"' ~ '#0$#65535'"
+ PLEASE DO ;2 SUB '"?.3$#1"~#3' <- :2
+ PLEASE DO (2007) NEXT
+ DO ;1 SUB #2 <- ;2 SUB #2
+ PLEASE REMEMBER :1
+ PLEASE ABSTAIN FROM (2007)
+ PLEASE RETRIEVE :1 + :2 + :3 + :4 + .3
+ PLEASE RESUME #34
+(2009) PLEASE DO (2006) NEXT
+ DO REINSTATE (2007)
+ PLEASE FORGET #2
+ DO (2008) NEXT
+
+ DOING (PAK) NEXT SETS :1 <- 1000000 * ;1, TRACKING OVERFLOW
+ (WHICH IS ESSENTIALLY BINARY TO DECIMAL CONVERSION)
+(15478) PLEASE STASH ;1 + ;2 + :2 + :3 + :4
+ DO ;2 SUB #1 <- #784 $ #904
+ DO ;2 SUB #2 <- #0
+ DO (30300) NEXT
+ DO :1 <- ;1 SUB #1
+ DO :2 <- ';1 SUB #2' ~ '#32768$#0'
+ DO (1509) NEXT
+ DO .984 <- "V.984$':4~#2'"~#1
+ PLEASE RETRIEVE ;1 + ;2 + :2 + :3 + :4
+ PLEASE RESUME #1
+
+ DON'T STOP READING YET: TWO IMPORTANT UTILITY ROUTINES REMAIN
+
+ ---------- UTILITIES ----------------------------------------
+
+ DOING (CMP) NEXT IMMOBILIZES :1 IF :1 < :2
+ HERE I USE A SLICK TRICK FROM THE ORIGINAL INTERCAL DIVISION ROUTINE
+(23438) PLEASE STASH .3 + :1
+ DO :1 <- ' "? ':1~"#65535$#0"' $ ':2~"#65535$#0"' " ~ "#0$#65535"' $
+ ' "? ':1~"#0$#65535"' $ ':2~"#0$#65535"' " ~ "#0$#65535"'
+ DO .3 <- ':2~:1' ~
+ " ' "? '"?:1~:1"~"#65535$#0"' $ #32768"~"#0$#65535" '
+ $ '"?:1~:1"~"#0$#65535"' "
+ PLEASE RETRIEVE :1
+ DO (2010) NEXT
+ DO (2011) NEXT
+(2010) DO (2006) NEXT
+ PLEASE IGNORE :1
+(2011) DO RETRIEVE .3
+ DO RESUME #2
+
+ DOING (TIX) NEXT IS INTENDED TO SIMPLIFY LOOPS ON THE VARIABLE .I
+ IF .I = .1, NEXTING IS TURNED OFF
+ OTHERWISE .I IS INCREASED BY +1 OR -1, WHERE THE
+ INCREMENT IS -1 IF (UP) HAS JUST BEEN ABSTAINED FROM
+(29904) PLEASE STASH .1 + .2 + .3 + .4
+ DO .3 <- "'"?.6$.1"~#21845' ~ '"?.6$.1"~#21845'" ~ #1
+ DO (2012) NEXT
+ PLEASE ABSTAIN FROM NEXTING
+ PLEASE RETRIEVE .1 + .2 + .3 + .4
+ PLEASE RESUME #1
+(2012) DO (2006) NEXT
+ DO .1 <- .6
+(711) DO (2013) NEXT
+ PLEASE REINSTATE (711)
+ DO .2 <- #1
+ DO (1010) NEXT
+ DO .6 <- .3
+ DO (2014) NEXT
+(2013) DO (1020) NEXT
+ DO .6 <- .1
+(2014) PLEASE RETRIEVE .1 + .2 + .3 + .4
+ DO RESUME #3
+
+ PLEASE NOTIFY THE AUTHOR IF YOU'VE BEEN ABLE TO
+ UNDERSTAND ALL OF THIS; BUT PLEASE DON'T SEND EMAIL
+
+ FINAL PUZZLE: WHAT IS SO INTERESTING ABOUT 885205232?
+++ /dev/null
-#!/bin/sh
-
-version=$1
-
-cat <<EOF
-Name: intercal
-Version: ${version}
-Release: 1
-URL: http://www.catb.org/~esr/intercal/
-Source: intercal-${version}.tar.gz
-License: GPL
-Group: Development/Languages
-Summary: the language that kills the weak and drives mad the strong
-
-%description
-An implementation of the language INTERCAL, legendary for
-its perversity and horribleness (this version adds COME FROM
-for extra flavor). Comes with language manual and examples
-including possibly the entire extant body of INTERCAL code.
-Now supports i18n and l14n (to Ancient Roman locale only)
-Now with fix patch by Donald Knuth.
-
-%prep
-%setup -q
-
-%build
-configure --prefix=/usr
-make
-
-%install
-rm -fr /usr/share/intercal-${version}/*
-make install
-
-%files
-/usr/bin/ick
-/usr/lib/libick.a
-/usr/include/intercal-${version}/lose.h
-/usr/include/intercal-${version}/abcess.h
-/usr/include/intercal-${version}/fiddle.h
-/usr/share/intercal-${version}/ick-wrap.c
-/usr/share/intercal-${version}/
-%doc README BUGS NEWS
-EOF
-#find pit -type f -print | sed -e "/^/s//\/usr\/share\/intercal-${version}\//" -e '/RCS/d'
-
-