]> thyrsus.com Git - intercal.git/commitdiff
Ready to ship 0.23.
authorEric S. Raymond <esr@thyrsus.com>
Sun, 9 Mar 2003 21:34:24 +0000 (16:34 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Thu, 26 Aug 2010 00:34:41 +0000 (20:34 -0400)
13 files changed:
NEWS
README
doc/READ.ME [deleted file]
doc/README [new file with mode: 0644]
fiddle.c
ick-wrap.c
intercal.el
intercal.spec [deleted file]
intercal.spec.in [new file with mode: 0644]
pit/tests/knuth.i [deleted file]
pit/tpk.doc [new file with mode: 0644]
pit/tpk.i [new file with mode: 0644]
specgen.sh [deleted file]

diff --git a/NEWS b/NEWS
index 5e659d6cd52078827968e1616d004d1dc0b640ee..f5ff7e31d5a41eccc3f562b8ad3f9b3a5f68f040 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,12 @@
                        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
 
diff --git a/README b/README
index a87c0f898b48f90f791f9781d8176ae26c621dec..d5ef60de4690136c400c766808ae45203019b34c 100644 (file)
--- a/README
+++ b/README
@@ -26,7 +26,7 @@ BUGS                  -- current bug and to-do list
 NEWS                   -- info on features and fixes new in this release
 intercal.el            -- elisp for editing INTERCAL code under GNU Emacs
 
-doc/READ.ME            -- historical notes on the docs
+doc/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
 
diff --git a/doc/READ.ME b/doc/READ.ME
deleted file mode 100644 (file)
index fd507bf..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-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.
diff --git a/doc/README b/doc/README
new file mode 100644 (file)
index 0000000..fd507bf
--- /dev/null
@@ -0,0 +1,36 @@
+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.
index 7c18667a40306465622101dbe38dc5e7521b03fa..3938e05dd5ae28fad26cd0ab83c279e89a24ae83 100644 (file)
--- a/fiddle.c
+++ b/fiddle.c
@@ -23,10 +23,14 @@ LICENSE TERMS
 
 #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);
index 1234506fab40721e0d1cb9b410416ac9ecb55a0f..a5a6d6fc7a9eea797057dacccf4e0d467f9c85c4 100644 (file)
@@ -16,6 +16,8 @@ static int abstained[$B]$C;
 $D
 $E
 
+#define OK(d) !abstained[d]
+
 int main(int argc, char *argv[])
 {
     int skipto = 0;
index ae7a06bc24fcff1edcba753f12408a57f4b4ebec..210bf2cfb5b2758f7759868a9df31d91ef89c131 100644 (file)
@@ -92,8 +92,8 @@
 (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 ()
@@ -142,9 +142,9 @@ gerund if it occurs on a line with ABSTAIN or REINSTATE).
 
 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.  
diff --git a/intercal.spec b/intercal.spec
deleted file mode 100644 (file)
index 2355474..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-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
diff --git a/intercal.spec.in b/intercal.spec.in
new file mode 100644 (file)
index 0000000..f482290
--- /dev/null
@@ -0,0 +1,55 @@
+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:
+
+
diff --git a/pit/tests/knuth.i b/pit/tests/knuth.i
deleted file mode 100644 (file)
index 738e3d0..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-        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
diff --git a/pit/tpk.doc b/pit/tpk.doc
new file mode 100644 (file)
index 0000000..6fc1d88
--- /dev/null
@@ -0,0 +1,16 @@
+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.
diff --git a/pit/tpk.i b/pit/tpk.i
new file mode 100644 (file)
index 0000000..d5f3b36
--- /dev/null
+++ b/pit/tpk.i
@@ -0,0 +1,407 @@
+        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?
diff --git a/specgen.sh b/specgen.sh
deleted file mode 100755 (executable)
index 86694ef..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/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'
-
-