--- /dev/null
+ CUPL and CORC for UNIX
+ by Eric S. Raymond <esr@thyrsus.com>
+
+This directory contains sources for cupl, a UNIX implementation of CUPL, the
+Cornell University Programming Language. It also interprets CORC, the
+Cornell Computing Language, the immediate ancestor of CUPL.
+
+CUPL was an early (1966) teaching language implemented as a batch compiler on
+the IBM/360 at Cornell University. It was descended from an earlier (1962)
+experimental language called CORC (CORnell Compiler), which was in turn derived
+from PL/1.
+
+CUPL has only one scalar type, a long floating-point real corresponding to C
+double. It supports vector and matrix aggregates, and has operations
+specialized for matrix calculations.
+
+CORC is a near-subset of CUPL. There are some minor differences in keywords.
+In CORC, the statement GO TO <block> is equivalent to CUPL's GO TO <block> END.
+
+The cupl implementation is a Retrocomputing Museum project. The
+Retrocomputing Museum <http://www.catb.org/retro/retromuseum.html>
+revives long-dead languages for the benefit of students and historians
+of programming-language design. CUPL was chosen as a representative
+of a significant class of mid-1960s teaching languages.
+
+Files:
+
+ Documentation files
+
+README -- this file
+cupl.doc -- transcription of the original CUPL documentation
+corc.doc -- transcription of the original CORC documentation
+cupl.xml -- description and discussion of the language
+cupl.spec -- project history is in this RPM spec file
+
+ Source files
+
+Makefile -- project makefile
+cupl.y -- the YACC grammar
+cupl.l -- the LEX lexical-analyzer description
+cupl.h -- fundamental types and defines
+tokdump.c -- token-dumper code (used for debugging)
+interpret.c -- parse tree interpretation
+execute.c -- actual execution
+monitor.c -- runtime support
+main.c -- cupl's main sequence
+
+ CUPL samples
+(These are all the non-pathological program examples from the CUPL manual)
+
+test/cubic.cupl -- iterative solution to X**3 * 3*X + 1 = 0
+test/fancyquad.cupl -- third, fanciest version of quadratic solver
+test/poly11.cupl -- sum for k = 1 to 11 of k!x**k, plus 1
+test/power.cupl -- compute the sum as k goes from 1 to n of k!/x**k
+test/prime.cupl -- test a number for primality
+test/quadratic.cupl -- solve multiple quadratic equations
+test/random.cupl -- print 10 pseudo-random numbers
+test/rise.cupl -- compare iterated +, doubling, squaring, and *
+test/simplequad.cupl -- simplest version of quadratic equation solver
+test/squares.cupl -- print a table of squares
+test/sum.cupl -- compute sum of presented data
+
+ CORC samples
+(These are all the complete program examples from the CORC manual)
+
+test/factorial.corc -- compute the factorial function
+test/powercorc.corc -- compute the sum of a power series
+test/quadcorc.corc -- solve multiple quadratic equations
+test/sumsquares.corc -- compute sums of first n integers and squares
+test/title.corc -- illustate use of NOTE, TITLE, and WRITE
+
+For each .cupl or .corc file, there is a corresponding test file used for
+regression-testing of the interpreter. The interpreter should pass
+all these tests.
+
+ Other test files
+MAKEREGRESS -- generate regression test loads for the front end
+REGRESS -- perform regression test on the front end
+
+ Known problems and bugs:
+
+* The code chrestomathy in the CUPL manual didn't include any matrix algebra
+ examples. Because of this, the matrix algebra facilities are incomplete.
+ ALLOCATE, INV and DET are not implemented. Neither are subscript/slice
+ references or assignments. Nor are matrix WRITEs or READs. Nor are the
+ implemented matrix facilities at all well-tested.
+
+* For true verismilitude, a program listing should be output before results.
+ This is trickier to do in C than it sounds; the lexer doesn't know about
+ line boundaries.
+
+* GOTO blabel END always goes to the end of the current PERFORM block, even
+ if the label is that of an enclosing block.
+
+* Because the cupl interpreter also interprets CORC, the CUPL keywords
+ BEGIN, DEC, DECREASE, EQL, GEQ, GTR, INC, INCREASE, INT, LSS, NEQ, NOTE,
+ REPEAT, TITLE, UNTIL, and $ are also reserved words in CORC.
+
+Send comments, bug reports, and fixes to esr@thyrsus.com. Also see my
+home page at http://www.catb.org/~esr for updates and other related
+resources.
+