Copyright (c) 1993-1994 by Xerox Corporation.  All rights reserved.

THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.

Permission is hereby granted to use or copy this program
for any purpose,  provided the above notices are retained on all copies.
Permission to modify the code and to distribute modified code is granted,
provided the above notices are retained, and a notice that the code was
modified is included with the above copyright notice.

Please send bug reports to Hans-J. Boehm (Hans_Boehm@hp.com or
boehm@acm.org).

This is a string packages that uses a tree-based representation.
See cord.h for a description of the functions provided.  Ec.h describes
"extensible cords", which are essentially output streams that write
to a cord.  These allow for efficient construction of cords without
requiring a bound on the size of a cord.

More details on the data structure can be found in

Boehm, Atkinson, and Plass, "Ropes: An Alternative to Strings",
Software Practice and Experience 25, 12, December 1995, pp. 1315-1330.

A fundamentally similar "rope" data structure is also part of SGI's standard
template library implementation, and its descendents, which include the
GNU C++ library.  That uses reference counting by default.
There is a short description of that data structure at
http://reality.sgi.com/boehm/ropeimpl.html .  (The more official location
http://www.sgi.com/tech/stl/ropeimpl.html is missing a figure.)

All of these are descendents of the "ropes" in Xerox Cedar.

de.c is a very dumb text editor that illustrates the use of cords.
It maintains a list of file versions.  Each version is simply a
cord representing the file contents.  Nonetheless, standard
editing operations are efficient, even on very large files.
(Its 3 line "user manual" can be obtained by invoking it without
arguments.  Note that ^R^N and ^R^P move the cursor by
almost a screen.  It does not understand tabs, which will show
up as highlighred "I"s.  Use the UNIX "expand" program first.)
To build the editor, type "make cord/de" in the gc directory.

This package assumes an ANSI C compiler such as gcc.  It will
not compile with an old-style K&R compiler.

Note that CORD_printf iand friends use C functions with variable numbers
of arguments in non-standard-conforming ways.  This code is known to
break on some platforms, notably PowerPC.  It should be possible to
build the remainder of the library (everything but cordprnt.c) on
any platform that supports the collector.
 
