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. 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 descendants, which include the GNU C++ library. That uses reference counting by default. There is a short description of that data structure at http://www.sgi.com/tech/stl/ropeimpl.html . All of these are descendants of the "ropes" in Xerox Cedar. cord/tests/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 highlighted "I"s. Use the UNIX "expand" program first.) To build the editor, type "make de" in the gc directory. Note that CORD_printf and 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.