Index: /trunk/source/doc/README
===================================================================
--- /trunk/source/doc/README	(revision 16309)
+++ /trunk/source/doc/README	(revision 16309)
@@ -0,0 +1,6 @@
+See http://ccl.clozure.com/docs for preformatted versions of
+the documentation.
+
+http://trac.clozure.com/ccldoc describes how to obtain and
+format the documentation source.
+
Index: unk/source/doc/ccl-documentation.html
===================================================================
--- /trunk/source/doc/ccl-documentation.html	(revision 16308)
+++ 	(revision )
@@ -1,35932 +1,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-    <title>Clozure CL Documentation</title>
-    <meta name="generator" content="DocBook XSL Stylesheets V1.76.1" />
-    <link rel="home" href="#idp27345824" title="Clozure CL Documentation" />
-    <link rel="next" href="#about-ccl" title="ChapterÂ 1.Â About Clozure CL" />
-  </head>
-  <body>
-    <div xml:lang="en" class="book" title="Clozure CL Documentation" lang="en">
-      <div class="titlepage">
-        <div>
-          <div>
-            <h1 class="title"><a id="idp27345824"></a>Clozure CL Documentation</h1>
-          </div>
-        </div>
-        <hr />
-      </div>
-      <div class="toc">
-        <dl>
-          <dt>
-            <span class="chapter">
-              <a href="#about-ccl">1. About Clozure CL</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#introduction-to-ccl">1.1. Introduction to Clozure CL</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#installing">2. Obtaining, Installing, and Running Clozure CL</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#releases">2.1. Releases and System Requirements</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#obtaining-ccl">2.2. Obtaining Clozure CL</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#command-line-setup">2.3. Command Line Set Up</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Personal-Customization-with-the-Init-File">2.4. Personal Customization with the Init File</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Command-Line-Options">2.5. Command Line Options</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Using-CCL-with-GNU-Emacs-and-SLIME">2.6. Using Clozure CL with GNU Emacs and SLIME</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Example-Programs">2.7. Example Programs</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#building-ccl-from-source">3. Building Clozure CL from its Source Code</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#building-definitions">3.1. Building Definitions</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Setting-Up-to-Build">3.2. Setting Up to Build</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Kernel-build-prerequisites">3.3. Kernel Build Prerequisites</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Building-Everything">3.4. Building Everything</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Building-the-kernel">3.5. Building the Kernel</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Building-the-heap-image">3.6. Building the Heap Image</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#using-ccl">4. Using Clozure CL</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#using-ccl-introduction">4.1. Introduction</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Trace">4.2. Trace</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Advising">4.3. Advising</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Directory">4.4. Directory</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Unicode">4.5. Unicode</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Pathanmes">4.6. Pathnames</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Memory-Mapped-Files">4.7. Memory-mapped Files</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Static_Variables">4.8. Static Variables</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Saving-Applications">4.9. Saving Applications</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#concatenating-fasl-files">4.10. Concatenating FASL Files</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#floating-point">4.11. Floating Point Numbers</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#watched-objects">4.12. Watched Objects</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#code-coverage">4.13. Code Coverage</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#other-extensions">4.14. Other Extensions</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#ccl-ide">5. The Clozure CL IDE</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#ccl-ide-introduction">5.1. Introduction</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#building-ccl-ide">5.2. Building the IDE</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#running-ccl-ide">5.3. Running the IDE</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#ccl-ide-features">5.4. IDE Features</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#ide-source-code">5.5. IDE Sources</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#application-builder">5.6. The Application Builder</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#HemlockProgramming">6. Hemlock Programming</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingIntroduction">6.1. Introduction</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingRepresentationOfText">6.2. Representation of Text</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingBuffers">6.3. Buffers</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingAlteringAndSearchingText">6.4. Altering and Searching Text</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingTheCurrentEnvironment">6.5. The Current Environment</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingHemlockVariables">6.6. Hemlock Variables</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingCommands">6.7. Commands</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingModes">6.8. Modes</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingCharacterAttributes">6.9. Character Attributes</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingControllingTheDisplay">6.10. Controlling the Display</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingLogicalKeyEvents">6.11. Logical Key-Events</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingEchoArea">6.12. The Echo Area</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingFiles">6.13. Files</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingHemlockSLispEnvironment">6.14. Hemlock's Lisp Environment</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingHighLevelTextPrimitives">6.15. High-Level Text Primitives</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingUtilities">6.16. Utilities</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#HemlockProgrammingMiscellaneous">6.17. Miscellaneous</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Programming-with-Threads">7. Programming with Threads</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#Threads-overview">7.1. Threads Overview</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Intentionally--Missing-Functionality">7.2. (Intentionally) Missing Functionality</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Implementation-Decisions-and-Open-Questions">7.3. Implementation Decisions and Open Questions</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Porting-Code-from-the-Old-Thread-Model">7.4. Porting Code from the Old Thread Model</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Background-Terminal-Input">7.5. Background Terminal Input</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#The-Threads-which-CCL-Uses-for-Its-Own-Purposes">7.6. The Threads which Clozure CL Uses for Its Own Purposes</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Threads-Dictionary">7.7. Threads Dictionary</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Programming-with-Sockets">8. Programming with Sockets</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#Sockets-Overview">8.1. Overview</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Sockets-Dictionary">8.2. Sockets Dictionary</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Running-Other-Programs-as-Subprocesses">9. Running Other Programs as Subprocesses</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#Subprocess-Overview">9.1. Overview</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Subprocess-Examples">9.2. Examples</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Limitations-and-known-bugs">9.3. Limitations and known bugs</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#External-Program-Dictionary">9.4. External-Program Dictionary</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Streams">10. Streams</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#CCL-Stream-Extensions">10.1. Stream Extensions</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Creating-Your-Own-Stream-Classes-with-Gray-Streams">10.2. Creating Your Own Stream Classes with Gray Streams</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#idp42645856">10.3. Lisp Standard Streams and OS Standard Streams</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Writing-Portable-Extensions-to-the-Object-System-using-the-MetaObject-Protocol">11. Writing Portable Extensions to the Object System  using the MetaObject Protocol</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#MOP-Overview">11.1. Overview</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#MOP-Implementation-status">11.2. Implementation status</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Concurrency-issues">11.3. Concurrency issues</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Profiling">12. Profiling</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#Profiling-Using-the-Linux-oprofile-system-level-profiler">12.1. Using the Linux oprofile system-level profiler</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Profiling-Using-Apples-CHUD-metering-tools">12.2. Using Apple's CHUD metering tools</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#The-Foreign-Function-Interface">13. The Foreign-Function Interface</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#Specifying-And-Using-Foreign-Types">13.1. Specifying And Using Foreign Types</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Foreign-Function-Calls">13.2. Foreign Function Calls</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Referencing-and-Using-Foreign-Memory-Addresses">13.3. Referencing and Using Foreign Memory Addresses</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#The-Interface-Database">13.4. The Interface Database</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Using-Interface-Directories">13.5. Using Interface Directories</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Using-Shared-Libraries">13.6. Using Shared Libraries</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#The-Interface-Translator">13.7. The Interface Translator</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Case-sensitivity-of-foreign-names-in-CCL">13.8. Case-sensitivity of foreign names in <code class="literal">CCL</code></a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Reading-Foreign-Names">13.9. Reading Foreign Names</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Tutorial--Using-Basic-Calls-and-Types">13.10. Tutorial: Using Basic Calls and Types</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Tutorial--Allocating-Foreign-Data-on-the-Lisp-Heap">13.11. Tutorial: Allocating Foreign Data on the Lisp Heap </a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Foreign-Function-Interface-Dictionary">13.12. The Foreign-Function-Interface Dictionary</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#The-Objective-C-Bridge">14. The Objective-C Bridge</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#Objective-C-Changes-1.2">14.1. Changes in 1.2</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Using-Objective-C-Classes">14.2. Using Objective-C Classes</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Instantiating-Objective-C-Objects">14.3. Instantiating Objective-C Objects</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Calling-Objective-C-Methods">14.4. Calling Objective-C Methods</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Defining-Objective-C-Classes">14.5. Defining Objective-C Classes</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Defining-Objective-C-Methods">14.6. Defining Objective-C Methods</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Loading-Objc-Frameworks">14.7. Loading Frameworks</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#How-Objective-C-Names-are-Mapped-to-Lisp-Symbols">14.8. How Objective-C Names are Mapped to Lisp Symbols</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Platform-specific-notes">15. Platform-specific notes</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#Platform-specific-overview">15.1. Overview</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Unix-Posix-Darwin-Features">15.2. Unix/Posix/Darwin Features</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Cocoa-Programming-in-CCL">15.3. Cocoa Programming in Clozure CL</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Building-an-Application-Bundle">15.4. Building an Application Bundle</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Recommended-Reading">15.5. Recommended Reading</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Operating-System-Dictionary">15.6. Operating-System Dictionary</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Understanding-and-Configuring-the-Garbage-Collector">16. Understanding and Configuring the Garbage Collector</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#Heap-space-allocation">16.1. Heap space allocation</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#The-Ephemeral-GC">16.2. The Ephemeral GC</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#GC-Page-reclamation-policy">16.3. GC Page reclamation policy</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#iPure--areas-are-read-only--paged-from-image-file">16.4. "Pure" areas are read-only, paged from image file</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Weak-References">16.5. Weak References</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Weak-References-Dictionary">16.6. Weak References Dictionary</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Garbage-Collection-Dictionary">16.7. Garbage-Collection Dictionary</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Implementation-Details-of-CCL">17. Implementation Details of Clozure CL</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#Threads-and-exceptions">17.1. Threads and exceptions</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Register-usage-and-tagging">17.2. Register usage and tagging</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Heap-Allocation">17.3. Heap Allocation</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#GC-details">17.4. GC details</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#The-ephemeral-GC">17.5. The ephemeral GC</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Fasl-files">17.6. Fasl files</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#The-Objective-C-Bridge--1-">17.7. The Objective-C Bridge</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Modifying-CCL">18. Modifying Clozure CL</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#Contributing-Code-Back-to-the-CCL-Project">18.1. Contributing Code Back to the Clozure CL Project</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Using-CCL-in--development--and-in--user--mode">18.2. Using Clozure CL in "development" and in  "user" mode</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#kernel-debugger">18.3. The Kernel Debugger</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Using-AltiVec-in-CCL-LAP-functions">18.4. Using AltiVec in Clozure CL LAP functions</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#Development-Mode-Dictionary">18.5. Development-Mode Dictionary</a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="chapter">
-              <a href="#Questions-and-Answers">19. Questions and Answers</a>
-            </span>
-          </dt>
-          <dd>
-            <dl>
-              <dt>
-                <span class="sect1">
-                  <a href="#How-can-I-do-nonblocking--aka--unbuffered--and--raw---IO-">19.1. How can I do nonblocking (aka "unbuffered" and "raw") IO?</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#I-m-using-the-graphics-demos--Why-doesn-t-the-menubar-change-">19.2. I'm using the graphics demos. Why doesn't the menubar
-      change?</a>
-                </span>
-              </dt>
-              <dt>
-                <span class="sect1">
-                  <a href="#I-m-using-Slime-and-Cocoa--Why-doesn-t--standard-output--seem-to-work-">19.3. I'm using Slime and Cocoa. Why doesn't *standard-output*
-      seem to work? </a>
-                </span>
-              </dt>
-            </dl>
-          </dd>
-          <dt>
-            <span class="glossary">
-              <a href="#glossary">Glossary of Terms</a>
-            </span>
-          </dt>
-          <dt>
-            <span class="index">
-              <a href="#Symbol-Index">Symbol Index</a>
-            </span>
-          </dt>
-        </dl>
-      </div>
-      <div class="list-of-tables">
-        <p>
-          <strong>List of Tables</strong>
-        </p>
-        <dl>
-          <dt>3.1. <a href="#Platform-specific-filename-conventions">Platform-specific filename conventions</a></dt>
-          <dt>4.1. <a href="#Line-Termination-Table">Line Termination Keywords</a></dt>
-        </dl>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="about-ccl"></a>ChapterÂ 1.Â About Clozure CL</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#introduction-to-ccl">1.1. Introduction to Clozure CL</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="introduction-to-ccl"></a>1.1.Â Introduction to Clozure CL</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL is a fast, mature, open source Common Lisp
-      implementation that runs on Linux, Mac OS X, FreeBSD, and Windows.
-      Clozure CL was forked from Macintosh Common Lisp (MCL) in 1998
-      and the development has been entirely separate since.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">When it was forked from MCL in 1998, the new Lisp was named
-      OpenMCL. Subsequently, Clozure renamed its Lisp to Clozure CL, partly
-      because its ancestor MCL has been released as open
-      source. Clozure thought it might be confusing for users if there
-      were two independent open-source projects with such similar
-      names. The new name also reflects Clozure CL's current status as the
-      flagship product of Clozure Associates.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Furthermore, the new name refers to Clozure CL's ancestry: in its
-      early years, MCL was known as Coral Common Lisp, or "CCL". For
-      years the package that contains most of Clozure CL's
-      implementation-specific symbols has been named "CCL", an acronym
-      that once stood for the name of the Lisp product. It seems
-      fitting that "CCL" once again stands for the name of the
-      product.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Some commands and source files may still refer to "OpenMCL"
-      instead of Clozure CL.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL compiles to native code and supports multithreading
-      using native OS threads. It includes a foreign-function interface,
-      and supports both Lisp code that calls external code, and external
-      code that calls Lisp code. Clozure CL can create standalone executables
-      on all supported platforms.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">On Mac OS X, Clozure CL supports building GUI applications that
-      use OS X's native Cocoa frameworks, and the OS X distributions
-      include an IDE written with Cocoa, and distributed with complete
-      sources.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">On all supported platforms, Clozure CL can run as a command-line
-      process, or as an inferior Emacs process using either SLIME or
-      ILISP.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Features of Clozure CL include</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>Very fast compilation speed.</p>
-              </li>
-              <li class="listitem">
-                <p>A fast, precise, compacting, generational
-      garbage collector written in hand-optimized C. The sizes of the
-      generations are fully configurable. Typically, a generation can
-      be collected in a millisecond on modern
-      systems.</p>
-              </li>
-              <li class="listitem">
-                <p>Fast execution speed, competitive with other
-      Common Lisp implementations on most
-      benchmarks.</p>
-              </li>
-              <li class="listitem">
-                <p>Robust and stable. Customers report that their
-      CPU-intensive, multi-threaded applications run for extended
-      periods on Clozure CL without difficulty.</p>
-              </li>
-              <li class="listitem">
-                <p>Full native OS threads on all platforms. Threads
-      are automatically distributed across multiple cores. The API
-      includes support for shared memory, locking, and blocking for OS
-      operations such as I/O.</p>
-              </li>
-              <li class="listitem">
-                <p>Full Unicode support.</p>
-              </li>
-              <li class="listitem">
-                <p>Full SLIME integration.</p>
-              </li>
-              <li class="listitem">
-                <p>An IDE on Mac OS X, fully integrated with
-      the Macintosh window system and User Interface
-      standards.</p>
-              </li>
-              <li class="listitem">
-                <p>Excellent debugging facilities. The names of all
-      local variables are available in a backtrace.</p>
-              </li>
-              <li class="listitem">
-                <p>A complete, mature foreign function interface,
-      including a powerful bridge to Objective-C and Cocoa on Mac OS
-      X.</p>
-              </li>
-              <li class="listitem">
-                <p>Many extensions including: files mapped to
-      Common Lisp vectors for fast file I/O; thread-local hash tables
-      and streams to eliminate locking overhead; cons hashing support;
-      and much more</p>
-              </li>
-              <li class="listitem">
-                <p>Very efficient use of memory</p>
-              </li>
-            </ul>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Although it's an open-source project, available free of
-      charge under a liberal license, Clozure CL is also a fully-supported
-      product of Clozure Associates. Clozure continues to extend,
-      improve, and develop Clozure CL in response to customer and user
-      needs, and offers full support and development services for
-      Clozure CL.</p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="installing"></a>ChapterÂ 2.Â Obtaining, Installing, and Running Clozure CL</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#releases">2.1. Releases and System Requirements</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#ports32vs64">2.1.1. 32- vs 64-bit versions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#x86sse2">2.1.2. 32-bit x86 versions require SSE2</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#linuxppc">2.1.3. LinuxPPC</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#linuxx86">2.1.4. Linux x86</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#linuxarm">2.1.5. Linux ARM v7</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#freebsdx86">2.1.6. FreeBSD x86</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#macosx">2.1.7. Mac OS X x86</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#windows">2.1.8. Microsoft Windows</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#obtaining-ccl">2.2. Obtaining Clozure CL</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#obtaining-the-mac-way">2.2.1. The Mac Way</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#obtaining-via-tarballs">2.2.2. Tarballs</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#obtaining-via-svn">2.2.3. Getting Clozure CL with Subversion</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Rebuilding-CCL-From-Sources">2.2.4. Rebuilding Clozure CL From Sources</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#command-line-setup">2.3. Command Line Set Up</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#The-ccl-Shell-Script">2.3.1. The ccl Shell Script</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Invocation">2.3.2. Invocation</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Personal-Customization-with-the-Init-File">2.4. Personal Customization with the Init File</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Command-Line-Options">2.5. Command Line Options</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Using-CCL-with-GNU-Emacs-and-SLIME">2.6. Using Clozure CL with GNU Emacs and SLIME</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Example-Programs">2.7. Example Programs</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="releases"></a>2.1.Â Releases and System Requirements</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">As of this writing, Clozure CL 1.7 is the latest release; it was
-    made in August 2011.  For up-to-date information about releases,
-    please see <a class="ulink" href="http://ccl.clozure.com/" target="_top">http://ccl.clozure.com/</a>.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL 1.7 runs on the following platforms:</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>Linux (x86, x86-64, ppc32, ppc64, armv7)</p>
-              </li>
-              <li class="listitem">
-                <p>Mac OS X 10.5 and later (x86, x86-64)</p>
-              </li>
-              <li class="listitem">
-                <p>FreeBSD 6.x and later (x86, x86-64)</p>
-              </li>
-              <li class="listitem">
-                <p>Solaris (x86, x86-64)</p>
-              </li>
-              <li class="listitem">
-                <p>Microsoft Windows XP and later (x86, x86-64)</p>
-              </li>
-            </ul>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="ports32vs64"></a>2.1.1.Â 32- vs 64-bit versions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Naturally, 64-bit versions of Clozure CL require 64-bit processors, 
-      for example, a G5 or Core 2.  Some early Intel-based Macintoshes
-      used processors that don't support
-      64-bit operation, so the 64-bit Clozure CL will not run on them, although
-      the 32-bit Clozure CL will.
-      </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="x86sse2"></a>2.1.2.Â 32-bit x86 versions require SSE2</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The 32-bit x86 versions of Clozure CL depend on the presence of the SSE2 instructions.
-      Most x86 processors manufactured and sold in the last several years support SSE2 (all Apple Intel-based Macs do, for instance),
-      but there are some exceptions.
-      The <a class="ulink" href="http://en.wikipedia.org/wiki/SSE2" target="_top">Wikipedia article on SSE2</a> lists processor models that support SSE2
-      (and also mentions some of the more notable exceptions).
-      </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="linuxppc"></a>2.1.3.Â LinuxPPC</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL requires version 2.2.13 (or later) of the Linux
-      kernel and version 2.1.3 (or later) of the GNU C library (glibc)
-      at a bare minimum.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="linuxx86"></a>2.1.4.Â Linux x86</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-	Because of the nature of Linux distributions, it's difficult
-	to give precise version number requirements.  In general, a
-	"fairly modern" (no more than 2 or three years old) kernel and
-	C library are more likely to work well than older
-	versions.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="linuxarm"></a>2.1.5.Â Linux ARM v7</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The Linux ARM port is relatively new and is still a work-in-progress.
-      Clozure CL
-needs some features (such as hardware floating-point, locking and
-memory-serialization primitives) that are only found in chips
-that implement architecture version 7 (ARMv7); technically, it needs
-the ARMv7 "application profile", which is sometimes called ARMv7a.
-
-In practice, <span class="emphasis"><em>most</em></span> ARM consumer devices released in the last few
-years implement ARMv7, but there are exceptions, and it is 
-not practical to enumerate all of the ARM devices that CCL should
-run on.
-      </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-In addition to hardware issues, Clozure CL expects Linux to run in little-endian
-mode and expects software to follow "soft float" calling conventions.
-The latter has to do with how C functions accept floating-point arguments
-and return floating-point values.
-
-      </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="freebsdx86"></a>2.1.6.Â FreeBSD x86</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL should run on
-    FreeBSD 6.x and 7.x.
-    FreeBSD 7 users will need to install the "compat6x" package in order to use
-    the distributed Clozure CL kernel, which is built on a FreeBSD 6.x system.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="macosx"></a>2.1.7.Â Mac OS X x86</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"> Clozure CL 1.7 runs on Mac OS X (x86) versions 10.5 and later, including 10.7 (Lion),
-      </p>
-            <p xmlns="http://www.w3.org/1999/xhtml"> Clozure CL 1.6 runs on Mac OS X PPC as well as x86 processors.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="windows"></a>2.1.8.Â Microsoft Windows</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-      For Clozure CL versions prior to 1.7, the 32-bit executable does not run under 64-bit Windows.
-    </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="obtaining-ccl"></a>2.2.Â Obtaining Clozure CL</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">There are three ways to obtain Clozure CL.  For Mac OS X,
-    there are disk images that can be used to install Clozure CL in
-    the usual Macintosh way. For other OSes, Subversion is the best
-    way to obtain Clozure CL.  Mac OS X users can also use Subversion
-    if they prefer. Tarballs are available for those who prefer them,
-    but if you have Subversion installed, it is simpler and more
-    flexible to use Subversion than tarballs.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml"> There are three popular ways to use Clozure CL: as a
-      stand-alone double-clickable application (Mac OS X only), as a
-      command-line application, or with Emacs and SLIME.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The following sections describe these options.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="obtaining-the-mac-way"></a>2.2.1.Â The Mac Way</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">If you are using Mac OS X then you can install and use
-         Clozure CL in the usual Macintosh way.  Download and mount a
-         disk image, then drag the ccl folder to the Applications folder
-	 or wherever you wish.
-         After that you can double-click the Clozure CL application found
-	 inside the ccl directory.  The disk images for version 1.7 are available at
-         <a class="ulink" href="ftp://clozure.com/pub/release/1.7/" target="_top">ftp://clozure.com/pub/release/1.7/</a> </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">So that Clozure CL can locate its source code, and for other
-        reasons explained in
-        <a class="xref" href="#Predefined-Logical-Hosts" title="4.6.2.Â Predefined Logical Hosts">SectionÂ 4.6.2, âPredefined Logical Hostsâ</a>, you keep the
-        Clozure CL application
-        in the <code class="literal">ccl</code> directory.  If you use a shell,
-        you can set the value of the
-        <em class="varname">CCL_DEFAULT_DIRECTORY</em> environment variable
-        to explicitly indicate the location of
-        the <code class="literal">ccl</code> directory. If you choose to do
-        that, then the <code class="literal">ccl</code> directory and the Clozure CL
-        application can each be in any location you find
-        convenient.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="obtaining-via-tarballs"></a>2.2.2.Â Tarballs</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Tarball distributions of Clozure CL release version 1.7 are available at
-      <a class="ulink" href="ftp://clozure.com/pub/release/1.7/" target="_top">ftp://clozure.com/pub/release/1.7/</a>.
-      Download and extract
-      one on your local disk.  Then edit the Clozure CL shell script to set
-      the value of <em class="varname">CCL_DEFAULT_DIRECTORY</em> and start
-      up the appropriate Clozure CL kernel. See <a class="xref" href="#The-ccl-Shell-Script" title="2.3.1.Â The ccl Shell Script">SectionÂ 2.3.1, âThe ccl Shell Scriptâ</a> for more information about the
-      Clozure CL shell scripts.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="obtaining-via-svn"></a>2.2.3.Â Getting Clozure CL with Subversion</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">It is very easy to download and configure Clozure CL to obtain sources from the Subversion repository.
-      This is the preferred way to get either the
-      latest, or a specific version of Clozure CL, unless you prefer
-      the Mac Way.  Subversion is a source code control system that is
-      in wide use.  Many OSes come with Subversion
-      pre-installed. A complete, buildable and runnable set of Clozure CL
-      sources and binaries can be retrieved with a single Subversion command.
-      </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
-              <h3 class="title">Note</h3>
-              <p>Unless stated otherwise, examples in this chapter are given for Mac OS X in particular
-        or Unix-based host environments in general.
-        </p>
-              <p>For Windows, special care must be taken to install a working development environment.
-        For more information see the Clozure CL Wiki at URL: <a class="ulink" href="http://trac.clozure.com/ccl/wiki/WindowsNotes" target="_top">http://trac.clozure.com/ccl/wiki/WindowsNotes</a>
-        </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Checking-Subversion-Installation"></a>2.2.3.1.Â Checking Subversion Installation</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">Make sure that Subversion is installed on your system.  Bring up a command
-      line shell and type:
-        </p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-shell&gt; svn
-        </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml"> 
-        If Subversion is installed, you will see something like:
-        </p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-Type 'svn help' for usage
-        </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-        If Subversion is not installed, you will see something
-        like:
-        </p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
--bash: svn: command not found
-        </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-        If Subversion is not installed, you'll need to figure out how
-        to install it on your OS. You can find information about
-        obtaining and installing Subversion at
-        the <a class="ulink" href="http://subversion.tigris.org" target="_top">Subversion
-        web page</a>.</p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Downloading-CCL"></a>2.2.3.2.Â Downloading Clozure CL Using Subversion</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">Before you download Clozure CL you should consider:
-      Do you want to run the most recent source code, or the current stable release version?
-      If you don't know how to answer this question, then you probably want the release version.
-      </p>
-              <div class="sect4" lang="en" xml:lang="en">
-                <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                  <div>
-                    <div>
-                      <h5 class="title"><a id="Downloading-CCL-Trunk"></a>2.2.3.2.1.Â Downloading the Trunk</h5>
-                    </div>
-                  </div>
-                </div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Day-to-day development of Clozure CL takes place in an area
-      of the Subversion repository known as "the trunk".  At most times,
-      the trunk is perfectly usable, but occasionally it can be unstable
-      or totally broken.
-      If you wish to live on the bleeding edge, download sources from the trunk.
-      </p>
-                <p xmlns="http://www.w3.org/1999/xhtml"> For example, the following command will fetch a copy of the trunk
-      for Mac OS X (Darwin) with x86 processors (both 32- and 64-bit versions):
-      </p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">svn co http://svn.clozure.com/publicsvn/openmcl/trunk/darwinx86/ccl
-         </pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	  To get a trunk Clozure CL for another platform, replace
-	  "darwinx86" with one of the following names (all versions
-	  include both 32- and 64-bit binaries):
-	</p>
-                <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                  <ul class="itemizedlist" type="disc">
-                    <li class="listitem">
-                      <p>darwinx86</p>
-                    </li>
-                    <li class="listitem">
-                      <p>linuxx86</p>
-                    </li>
-                    <li class="listitem">
-                      <p>freebsdx86</p>
-                    </li>
-                    <li class="listitem">
-                      <p>solarisx86</p>
-                    </li>
-                    <li class="listitem">
-                      <p>windows</p>
-                    </li>
-                    <li class="listitem">
-                      <p>linuxppc</p>
-                    </li>
-                    <li class="listitem">
-                      <p>darwinppc</p>
-                    </li>
-                  </ul>
-                </div>
-              </div>
-              <div class="sect4" lang="en" xml:lang="en">
-                <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                  <div>
-                    <div>
-                      <h5 class="title"><a id="Downloading-CCL-Release"></a>2.2.3.2.2.Â Downloading a Release Version</h5>
-                    </div>
-                  </div>
-                </div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Release versions of Clozure CL are intended to be stable.  While
-	bugs will be fixed in the release branches, enhancements
-	and new features will go into the trunk.
-        If you wish to run the stable release,
-        the following command will fetch a copy of the release version 1.7
-	for Mac OS X (Darwin) with x86 processors (both 32- and 64-bit versions):
-        </p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">svn co http://svn.clozure.com/publicsvn/openmcl/release/1.7/darwinx86/ccl
-          </pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">To get the release version of Clozure CL  for another platform,
-	replace "darwinx86" with one of the following names:
-        </p>
-                <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                  <ul class="itemizedlist" type="disc">
-                    <li class="listitem">
-                      <p>darwinx86</p>
-                    </li>
-                    <li class="listitem">
-                      <p>linuxx86</p>
-                    </li>
-                    <li class="listitem">
-                      <p>freebsdx86</p>
-                    </li>
-                    <li class="listitem">
-                      <p>solarisx86</p>
-                    </li>
-                    <li class="listitem">
-                      <p>windows</p>
-                    </li>
-                    <li class="listitem">
-                      <p>linuxppc</p>
-                    </li>
-                    <li class="listitem">
-                      <p>darwinppc</p>
-                    </li>
-                  </ul>
-                </div>
-                <p xmlns="http://www.w3.org/1999/xhtml">These distributions contain complete sources and
-        binaries. They use Subversion's "externals" features to share
-        common sources; the majority of source code is the same across
-        all versions.</p>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Rebuilding-CCL-From-Sources"></a>2.2.4.Â Rebuilding Clozure CL From Sources</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">This section explains how to peform a "full rebuild" of Clozure CL from a source distribution.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">After downloading Clozure CL sources, you should rebuild Clozure CL as described here.
-    At the start of a full rebuild, object files in the <code class="literal">ccl</code> directory are deleted,
-    which causes the build script to recompile the runtime kernel (C code) and high-level sources (Lisp),
-    then save a new heap image.
-    Doing a full rebuild helps to ensure that your local installation will run properly for your host OS environment.
-    </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In an interactive shell, a command sequence like the following will rebuild Clozure CL in place:
-
-    </p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-joe&gt; cd <em class="replaceable"><code>/path/to/installed/ccl</code></em>
-joe:ccl&gt; ./<em class="replaceable"><code>kernel-filename</code></em> --no-init
-Welcome to Clozure Common Lisp Version [...]
-? (rebuild-ccl :full t)
-&lt;...lots of compilation output...&gt;
-? (quit)
-joe:ccl&gt;
-    </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-    </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Replace <em class="replaceable"><code>/path/to/installed/ccl</code></em> with the path of the <code class="literal">ccl</code> directory
-    that you downloaded.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Replace <em class="replaceable"><code>kernel-filename</code></em> with the filename of the Lisp kernel program.
-    To find the filename of a Lisp kernel image for your particular platform, see <a class="xref" href="#filename_conventions" title="3.1.1.Â Platform-specific filename conventions">SectionÂ 3.1.1, âPlatform-specific filename conventionsâ</a>.
-    </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Specifying the <code class="literal">--no-init</code> option ensures that personal initializations do not interfere
-    with rebuilding Clozure CL.
-    </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The rest of this section covers the following topics in brief:
-    </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-                    <a class="link" href="#Rebuilding-CCL-Requirements" title="2.2.4.1.Â Software Requirements for Building Clozure CL">Software prerequisites</a>
-                  </p>
-                </li>
-                <li class="listitem">
-                  <p>
-                    <a class="link" href="#When-Rebuild-CCL" title="2.2.4.2.Â When to Rebuild Clozure CL From Sources">When to run the build process</a>
-                  </p>
-                </li>
-                <li class="listitem">
-                  <p>
-                    <a class="link" href="#Rebuild-CCL-Overview" title="2.2.4.3.Â Rebuilding Clozure CL Using REBUILD-CCL">Using <code class="literal">ccl-rebuild</code></a>
-                  </p>
-                </li>
-                <li class="listitem">
-                  <p>
-                    <a class="link" href="#Rebuild-Process-Steps-Summary" title="2.2.4.4.Â Summary of the Build Process Steps">What happens during the full rebuild process</a>
-                  </p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-    </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
-              <h3 class="title">Note</h3>
-              <p>This section does <span class="emphasis"><em>not</em></span> provide comprehensive documentation on the build process.
-    Please refer to <a class="xref" href="#building-ccl-from-source" title="ChapterÂ 3.Â Building Clozure CL from its Source Code">ChapterÂ 3, <em>Building Clozure CL from its Source Code</em></a> for more information.
-    Those more detailed instructions are used mainly by developers who maintain, customize, and/or port Clozure CL.
-    If you are customizing Clozure CL, or if you run into some exceptional situation,
-    you may need to perform the individual build steps.
-    </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Rebuilding-CCL-Requirements"></a>2.2.4.1.Â Software Requirements for Building Clozure CL</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">In order to build Clozure CL you must have a working system and development environment.
-    There are different requirements and setup procedures for each platform, but the main requirement is to have
-    a C compiler and a few other utilities:
-    GNU <code class="literal">gcc</code> or <code class="literal">cc</code> with <code class="literal">ld</code> and <code class="literal">as</code>;
-    <code class="literal">make</code>; and <code class="literal">m4</code>.
-    Please refer to <a class="xref" href="#building-ccl-from-source" title="ChapterÂ 3.Â Building Clozure CL from its Source Code">ChapterÂ 3, <em>Building Clozure CL from its Source Code</em></a> for details.
-    </p>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
-                <h3 class="title">Note</h3>
-                <p>If you don't have the prerequisite C compiler toolchain installed, <code class="literal">rebuild-ccl</code> will not work.
-    See <a class="xref" href="#Kernel-build-prerequisites" title="3.3.Â Kernel Build Prerequisites">SectionÂ 3.3, âKernel Build Prerequisitesâ</a> for additional details.
-    </p>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">Most distributions of Linux have all or most of the required development tools either pre-installed
-    or readily available.
-    On Debian-based Linux you can download and install the essential build tools using the package manager.
-    For example: </p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">apt-get install build-essential</pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-    (You may need to install C header files separately.)
-    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">For Mac OS X, Xcode 4 is available from the App Store.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">For Windows, install Cygwin and the MinGW toolchain for the 32- or 64-bit OS.
-    More information about installing Clozure CL on Windows is available in the Clozure CL Wiki
-    at URL: <a class="ulink" href="http://trac.clozure.com/ccl/wiki/WindowsNotes" target="_top">http://trac.clozure.com/ccl/wiki/WindowsNotes</a>
-    </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="When-Rebuild-CCL"></a>2.2.4.2.Â When to Rebuild Clozure CL From Sources</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">The most common scenario that requires a full rebuild is the standard installation after downloading the source tree.
-    Users and application developers (who otherwise have no special build requirements)
-    will generally need to run the full rebuild process just once
-    for any given installation on a particular host system.
-    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">Another common scenario is installing a patch update:
-    You can use Subversion (<code class="literal">svn update</code>) to download a more recent set of source files.
-    (Be sure to download sources from the same path and branch in the source repository.)
-    Then run a full rebuild to create new kernel and heap images.
-    If you are running Clozure CL from the trunk, you may need to update sources and run the full rebuild more often.
-    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">Another reason to do a full rebuild is to ensure that Clozure CL will run properly in the host OS environment.
-    This may be necessary, for example, when the target OS version
-    is not identical to the one where the pre-built kernel was generated.
-    The Lisp kernel uses some functionality defined in standard platform-provided libraries.
-    On some platforms, applications (such as the Lisp kernel) are built in
-    such a way as to depend on the specific versions of these libraries that were
-    present at build time, and may not run on systems that have older or newer versions
-    of these libraries.
-    If you're affected by this, the simplest workaround is to build the Lisp kernel
-    on the machine(s) that you intend to run it on and use that locally-built kernel instead of one distributed via Subversion.
-    </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Rebuild-CCL-Overview"></a>2.2.4.3.Â Rebuilding Clozure CL Using REBUILD-CCL</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">Once the checkout is complete, and provided that you have a working development setup,
-    you can build Clozure CL by running the Lisp kernel (an OS-native executable program)
-    and running <span class="function"><strong>REBUILD-CCL</strong></span> in Lisp.
-    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">For example, to build a 64-bit Clozure CL on Mac OS X: 
-
-    </p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-joe:ccl&gt; ./dx86cl64 --no-init
-Welcome to Clozure Common Lisp Version 1.7  (DarwinX8664)!
-? (rebuild-ccl :full t)
-Rebuilding Clozure Common Lisp using Version 1.7  (DarwinX8664)
-;Building lisp-kernel ...
-;Kernel built successfully.
-;Compiling &lt;...&gt;
-;Loading &lt;...&gt;
-
-&lt;...lots of compilation output...&gt;
-
-;Wrote bootstrapping image: #P"/Users/joe/ccl/x86-boot64.image"
-;Wrote heap image: #P"/Users/joe/ccl/dx86cl64.image"
-NIL
-? (quit)
-joe:ccl&gt;
-    </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">If the build fails for any reason, the kernel and/or heap image files may be missing or corrupted.
-    To recover, delete the image files and update the source directory from Subversion.
-    For example:
-
-    </p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-joe:ccl&gt; rm dx86cl*
-joe:ccl&gt; svn update
-&lt;... lots of Subversion output...&gt;
-joe:ccl&gt; ./dx86cl64 --no-init
-Welcome to Clozure Common Lisp Version 1.7  (DarwinX8664)!
-? (rebuild-ccl :full t)
-&lt;... lots of compilation output...&gt;
-? (quit)
-joe:ccl&gt; 
-
-    </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">Once the full rebuild is completed, you can run the new Lisp kernel from the command shell.
-    However, running the OS- and processor-specific executable directly is not recommended
-    for day-to-day use.
-    Clozure CL includes the <code class="literal">ccl</code> and <code class="literal">ccl64</code> command shell scripts.
-    For details on configuring a shell script for your environment, see <a class="xref" href="#The-ccl-Shell-Script" title="2.3.1.Â The ccl Shell Script">SectionÂ 2.3.1, âThe ccl Shell Scriptâ</a>.
-    </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Rebuild-Process-Steps-Summary"></a>2.2.4.4.Â Summary of the Build Process Steps</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">Should the build fail, your first concern should be to confirm that all requirements are in place:
-    the C compiler, utilities, and OS header files;
-    source files for the trunk or release branch you want to build;
-    and the Lisp kernel and heap image files.
-    For assistance with trouble-shooting, here is an outline of the full build process,
-    with links to the more detailed instructions in <a class="xref" href="#building-ccl-from-source" title="ChapterÂ 3.Â Building Clozure CL from its Source Code">ChapterÂ 3, <em>Building Clozure CL from its Source Code</em></a>.
-    </p>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                <ul class="itemizedlist" type="disc">
-                  <li class="listitem">
-                    <p>Build the Lisp kernel (<a class="xref" href="#Building-the-kernel" title="3.5.Â Building the Kernel">SectionÂ 3.5, âBuilding the Kernelâ</a>)</p>
-                  </li>
-                  <li class="listitem">
-                    <p>Build the heap image (<a class="xref" href="#Building-the-heap-image" title="3.6.Â Building the Heap Image">SectionÂ 3.6, âBuilding the Heap Imageâ</a>)</p>
-                    <div class="itemizedlist">
-                      <ul class="itemizedlist" type="circle">
-                        <li class="listitem">
-                          <p>Create a bootstrapping heap image (<a class="xref" href="#Generating-a-bootstrapping-image" title="3.6.2.Â Generating a bootstrapping image">SectionÂ 3.6.2, âGenerating a bootstrapping imageâ</a>)</p>
-                        </li>
-                        <li class="listitem">
-                          <p>Compile Lisp code to generate fasl files (<a class="xref" href="#Generating-fasl-files" title="3.6.3.Â Generating fasl files">SectionÂ 3.6.3, âGenerating fasl filesâ</a>)</p>
-                        </li>
-                        <li class="listitem">
-                          <p>Build a full image from bootstrapping image
-        (<a class="xref" href="#Building-a-full-image-from-a-bootstrapping-image" title="3.6.4.Â Building a full image from a bootstrapping image">SectionÂ 3.6.4, âBuilding a full image from a bootstrapping imageâ</a>)</p>
-                          <div class="itemizedlist">
-                            <ul class="itemizedlist" type="square">
-                              <li class="listitem">
-                                <p>Run new kernel with new bootstrapping image</p>
-                              </li>
-                              <li class="listitem">
-                                <p>Load Lisp code</p>
-                              </li>
-                              <li class="listitem">
-                                <p>Save a new full heap image</p>
-                              </li>
-                            </ul>
-                          </div>
-                        </li>
-                      </ul>
-                    </div>
-                  </li>
-                </ul>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-    </p>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="command-line-setup"></a>2.3.Â Command Line Set Up</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Sometimes it's convenient to use Clozure CL from a Unix
-      shell command line.  This is especially true when using Clozure CL
-      as a way to run Common Lisp utilities.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="The-ccl-Shell-Script"></a>2.3.1.Â The ccl Shell Script</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL needs to be able to find the
-        <code class="literal">ccl</code> directory in order to support features
-        such as <code class="literal">require</code> and
-        <code class="literal">provide</code>, access to foreign interface
-        information (see <a class="link" href="#The-Interface-Database" title="13.4.Â The Interface Database">The
-        Interface Database</a>) and the Lisp build process (see
-        <a class="link" href="#Building-CCL">Building Clozure CL from its Source
-        Code</a>). Specifically, it needs to set up logical
-        pathname translations for the <code class="literal">"ccl:"</code>
-        logical host.  If this logical host isn't defined (or isn't
-        defined correctly), some things might work, some things might
-        not, and it'll generally be hard to invoke and use Clozure CL
-        productively.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL uses the value of the environment variable
-        <code class="literal">CCL_DEFAULT_DIRECTORY</code> to determine the
-        filesystem location of the <code class="literal">ccl</code> directory;
-        the ccl shell script is intended to provide a way to
-        invoke Clozure CL with that environment variable set
-        correctly.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">There are two versions of the shell script:
-        <code class="literal">"ccl/scripts/ccl"</code> is used to invoke
-        32-bit implementations of Clozure CL and
-        <code class="literal">"ccl/scripts/ccl64"</code> is used to invoke
-        64-bit implementations.
-        Install one script or the other or both as needed.
-      </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">To use the script:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>Copy the script to a directory that is on your
-	  <em class="varname">PATH</em>.  This is often
-	  <code class="literal">/usr/local/bin</code> or
-	  <code class="literal">~/bin</code>.  It is better to do this than to
-	  add <code class="literal">ccl/scripts</code> to your
-	  <em class="varname">PATH</em>, because the script needs to be edited,
-	  and editing it in-place means that Subversion sees the script as
-	  modified..</p>
-                </li>
-                <li class="listitem">
-                  <p>Edit the definition of
-            <code class="literal">CCL_DEFAULT_DIRECTORY</code> near the
-            beginning of the shell script so that it refers to
-            your <code class="literal">ccl</code> directory.  Alternately, set
-            the value of the <code class="literal">CCL_DEFAULT_DIRECTORY</code>
-            environment variable
-            wherever you usually set per-user environment variables, in your
-            <code class="literal">.cshrc</code>, <code class="literal">.tcshrc</code>,
-            <code class="literal">.bashrc</code>, <code class="literal">.bash_profile</code>,
-            or <code class="literal">.MacOSX/environment.plist</code> script,
-            or system-wide in <code class="literal">/etc/profile</code> or <code class="literal">/etc/bashrc</code>.
-            When the ccl script runs, if the process environment contains
-            a definition of <code class="literal">CCL_DEFAULT_DIRECTORY</code>, the ccl
-            script will not override it.
-	  </p>
-                </li>
-                <li class="listitem">
-                  <p>Ensure that the shell script is executable, for
-            example:</p>
-                  <p>
-                    <code class="literal">$ chmod +x
-            ~/ccl/ccl/scripts/ccl64</code>
-                  </p>
-                  <p>This command grants execute permission to the named
-            script. If you are using a 32-bit platform, substitute
-            "ccl" in place of "ccl64".
-            </p>
-                  <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
-                    <h3 class="title">Warning</h3>
-                    <p>The above command won't work if you are not the
-	            owner of the installed copy of Clozure CL. In that case,
-	            you can use the "sudo" command like this:</p>
-                    <p>
-                      <code class="literal">$ sudo chmod +x
-                  ~/ccl/ccl/scripts/ccl64</code>
-                    </p>
-                    <p>Give your password when prompted.</p>
-                    <p>If the "sudo" command doesn't work, then you are
-                not an administrator on the system you're using, and you
-                don't have the appropriate "sudo" permissions. In that
-                case you'll need to get help from the system's
-                administrator.</p>
-                  </div>
-                </li>
-              </ol>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Note that most people won't need both
-      <code class="literal">ccl</code> and <code class="literal">ccl64</code> scripts.
-      You only need both if you sometimes run 32-bit Clozure CL and
-      sometimes run 64-bit Clozure CL.  You can rename the script that
-      you use to whatever you want.  For example, if you are on a
-      64-bit system, and you only use Clozure CL in 64-bit mode, then
-      you can rename  <code class="literal">ccl64</code> to
-      <code class="literal">ccl</code> so that you only need to type
-      "<code class="literal">ccl</code>" to run it.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Once this is done, it should be possible to invoke Clozure CL
-        by typing <code class="literal">ccl</code>
-        or <code class="literal">ccl64</code> at a shell prompt:
-
-      </p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-shell&gt; ccl
-Welcome to Clozure Common Lisp Version 1.7  (DarwinX8632)!
-?
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-      </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The ccl shell script passes all of its arguments to the
-      Clozure CL kernel.  See <a class="xref" href="#Invocation" title="2.3.2.Â Invocation">SectionÂ 2.3.2, âInvocationâ</a> for more
-      information about command-line arguments.
-      </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Assuming the shell script is configured and invoked properly, Clozure CL
-      should be able to initialize the <code class="literal">"ccl:"</code>
-      logical host so that its translations refer to the
-      <code class="literal">"ccl"</code> directory. To test this, you can call
-      <code class="literal">probe-file</code> in Clozure CL's read-eval-print
-      loop:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (probe-file "ccl:level-1;level-1.lisp")  ;returns the physical pathname of the file
-#P"/Users/joe/my_lisp_stuff/ccl/level-1/level-1.lisp"
-      </pre>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Invocation"></a>2.3.2.Â Invocation</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Assuming that the shell script is properly installed, it can be used to invoke Clozure CL from a shell prompt:
-	    </p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">shell&gt; <em class="replaceable"><code>ccl</code></em> <em class="replaceable"><code>[args ...]</code></em></pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-            By convention
-	    <code class="literal">ccl</code> runs a 32-bit session;
-	    <code class="literal">ccl64</code> runs a 64-bit session.
-            However, the name of the installed script(s) and the implementation that is invoked are customizable,
-            as described in <a class="xref" href="#The-ccl-Shell-Script" title="2.3.1.Â The ccl Shell Script">SectionÂ 2.3.1, âThe ccl Shell Scriptâ</a>.
-	  </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">For details about command-line options see
-          <a class="xref" href="#Command-Line-Options" title="2.5.Â Command Line Options">SectionÂ 2.5, âCommand Line Optionsâ</a>.
-          </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Personal-Customization-with-the-Init-File"></a>2.4.Â Personal Customization with the Init File</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">By default Clozure CL tries to load the file
-      <code class="literal">"home:ccl-init.lisp"</code> or the compiled
-      <code class="literal">"home:ccl-init.fasl"</code> upon starting up.
-      Clozure CL does this by executing <code class="literal">(load
-      "home:ccl-init")</code>.  If it's unable to load the file
-      (for example because the file doesn't exist), Clozure CL doesn't
-      signal an error or warning, it just completes its startup
-      normally.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      On Unix systems, if <code class="literal">"ccl-init.lisp"</code> is not
-      present, Clozure CL will look for <code class="literal">".ccl-init.lisp"</code>
-      (post 1.2 versions only).
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The <code class="literal">"home:"</code> prefix to the filename is a
-      Common Lisp logical host, which Clozure CL initializes to refer to
-      your home directory. Clozure CL therefore looks for either of the
-      files
-      <code class="literal">~/ccl-init.lisp</code> or
-      <code class="literal">~/ccl-init.fasl</code>.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Because the init file is loaded the same way as normal Lisp
-      code is, you can put anything you want in it.  For example, you
-      can change the working directory, and load packages that you use
-      frequently.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">To suppress the loading of this init-file, invoke Clozure CL with the
-      <code class="literal">--no-init</code> option.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Command-Line-Options"></a>2.5.Â Command Line Options</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">When using Clozure CL from the command line, the following
-      options may be used to modify its behavior.  The exact set of
-      Clozure CL command-line arguments may vary per platform and
-      slowly changes over time.  The current set of command line
-      options may be retrieved by using the
-      <code class="literal">--help</code> option.</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p><code class="literal">-h</code> (or
-	      <code class="literal">--help</code>).  Provides a definitive (if
-	      somewhat terse) summary of the command line options
-	      accepted by the Clozure CL implementation and then
-	      exits.</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-V</code> (or
-	      <code class="literal">--version</code>).  Prints the version of
-	      Clozure CL then exits.  The version string is the same value
-	      that is returned by
-	      <span class="function"><strong>LISP-IMPLEMENTATION-VERSION</strong></span>.</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-K</code>
-	      <em class="parameter"><code>character-encoding-name</code></em> (or
-	      <code class="literal">--terminal-encoding</code>
-	      <em class="parameter"><code>character-encoding-name</code></em>).
-	      Specifies the character encoding to use for
-	      <em class="varname">*TERMINAL-IO*</em> (see <a class="xref" href="#Character-Encodings" title="4.5.4.Â Character Encodings">SectionÂ 4.5.4, âCharacter Encodingsâ</a>).  Specifically, the
-	      <em class="parameter"><code>character-encoding-name</code></em> string
-	      is uppercased and interned in the KEYWORD package. If an
-	      encoding named by that keyword exists,
-	      <em class="varname">CCL:*TERMINAL-CHARACTER-ENCODING-NAME*</em> is set to the name
-	      of that encoding.   <em class="varname">CCL:*TERMINAL-CHARACTER-ENCODING-NAME*</em> defaults to <code class="literal">NIL</code>, which
-	      is a synonym for <code class="literal">:ISO-8859-1</code>.</p>
-                <p>For example:
-	      </p>
-                <pre class="programlisting">
-shell&gt; ccl -K utf-8
-	      </pre>
-                <p>
-	      has the effect of making the standard CL streams use
-	      <code class="literal">:UTF-8</code> as their character
-	      encoding.</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-n</code> (or
-	      <code class="literal">--no-init</code>). If this option is given, the
-	      init file is not loaded.  This is useful if Clozure CL is being
-	      invoked by a shell script that should not be affected by
-	      whatever customizations a user might have in place.</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-e</code> <em class="parameter"><code>form</code></em>
-	      (or <code class="literal">--eval</code>). An expression is read (via
-	      <span class="function"><strong>READ-FROM-STRING</strong></span>) from the string
-	      <em class="parameter"><code>form</code></em> and evaluated. If
-	      <em class="parameter"><code>form</code></em> contains shell metacharacters,
-	      it may be necessary to escape or quote them to prevent the
-	      shell from interpreting them.</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-l</code> <em class="parameter"><code>path</code></em>
-	      (or <code class="literal">--load</code>
-	      <em class="parameter"><code>path</code></em>). Loads file specified by
-	      <em class="parameter"><code>path</code></em>.</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-T</code> <em class="parameter"><code>n</code></em> (or
-	      <code class="literal">--set-lisp-heap-gc-threshold</code>
-	      <em class="parameter"><code>n</code></em>).  Sets the Lisp gc threshold to
-	      <em class="parameter"><code>n</code></em>. (see <a class="xref" href="#GC-Page-reclamation-policy" title="16.3.Â GC Page reclamation policy">SectionÂ 16.3, âGC Page reclamation policyâ</a></p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-Q</code> (or
-	      <code class="literal">--quiet</code>). Suppresses printing of
-	      heralds and prompts when the <code class="literal">--batch</code>
-	      command line option is specified.</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-R</code> <em class="parameter"><code>n</code></em> (or
-	      <code class="literal">--heap-reserve</code>). Reserves
-	      <em class="parameter"><code>n</code></em> bytes for heap expansion.  The
-	      default is <code class="literal"> 549755813888</code>.  (see <a class="xref" href="#Heap-space-allocation" title="16.1.Â Heap space allocation">SectionÂ 16.1, âHeap space allocationâ</a>)</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-S</code> <em class="parameter"><code>n</code></em> (or
-	      <code class="literal">--stack-size</code> <em class="parameter"><code>n</code></em>). Sets the size of the
-	      initial control stack to <em class="parameter"><code>n</code></em>. (see <a class="xref" href="#Thread-Stack-Sizes" title="7.3.1.Â Thread Stack Sizes">SectionÂ 7.3.1, âThread Stack Sizesâ</a>)</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-Z</code> <em class="parameter"><code>n</code></em> (or
-	      <code class="literal">--thread-stack-size</code>
-	      <em class="parameter"><code>n</code></em>). Sets the size of the first
-	      thread's stack to <em class="parameter"><code>n</code></em>. (see <a class="xref" href="#Thread-Stack-Sizes" title="7.3.1.Â Thread Stack Sizes">SectionÂ 7.3.1, âThread Stack Sizesâ</a>)</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-b</code> (or <code class="literal">--batch</code>). Execute in "batch mode". End-of-file
-	      from <em class="varname">*STANDARD-INPUT*</em> causes Clozure CL to exit, as do attempts to
-	      enter a break loop.</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">--no-sigtrap</code> An obscure option for running under GDB.</p>
-              </li>
-              <li class="listitem">
-                <p><code class="literal">-I</code>
-	      <em class="parameter"><code>image-name</code></em> (or
-	      <code class="literal">--image-name</code>
-	      <em class="parameter"><code>image-name</code></em>). Specifies the image
-	      name for the kernel to load.  Defaults to the kernel name
-	      with ".image" appended.</p>
-              </li>
-            </ul>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The <code class="literal">--load</code> and
-      <code class="literal">--eval</code> options can each be provided
-      multiple times.  They're executed in the order specified on
-      the command line, after the init file (if there is one) is
-      loaded and before the toplevel read-eval-print loop is
-      entered.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-	Finally, any arguments following the pseudo-argument
-	<code class="literal">--</code> are not processed, and are made
-	available to Lisp as the value of
-	<code class="literal">ccl:*unprocessed-command-line-arguments*</code>.
-      </p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Using-CCL-with-GNU-Emacs-and-SLIME"></a>2.6.Â Using Clozure CL with GNU Emacs and SLIME</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      SLIME (see  <a class="ulink" href="http://common-lisp.net/project/slime/" target="_top">
-      the SLIME web page</a>) is an Emacs mode for interacting with
-      Common Lisp systems.  Clozure CL is well-supported by SLIME.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      See the <a class="ulink" href="http://trac.clozure.com/ccl/wiki/InstallingSlime" target="_top">
-      InstallingSlime</a> topic on the Clozure CL wiki for some tips
-      on how to get SLIME running with Clozure CL.
-    </p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Example-Programs"></a>2.7.Â Example Programs</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">A number (ok, a <span class="emphasis"><em>small</em></span> number), of
-    example programs are distributed in the "ccl:examples;" directory
-    of the source distribution. See the README-OPENMCL-EXAMPLES text
-    file in that directory for information about prerequisites and
-    usage.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Some of the example programs are derived from C examples
-      in textbooks, etc.; in those cases, the original author and work
-      are cited in the source code.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Unless the original author or contributor claims other
-      rights, you're free to incorporate any of this example code or
-      derivative thereof in any of your own works without
-      restriction. In doing so, you agree that the code was provided
-      "as is", and that no other party is legally or otherwise
-      responsible for any consequences of your decision to use
-      it.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If you've developed Clozure CL examples that you'd like to see
-      added to the distribution, please send mail to the Clozure CL mailing
-      lists. Any such contributions would be welcome and appreciated
-      (as would bug fixes and improvements to the existing
-      examples.)</p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="building-ccl-from-source"></a>ChapterÂ 3.Â Building Clozure CL from its Source Code</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#building-definitions">3.1. Building Definitions</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#filename_conventions">3.1.1. Platform-specific filename conventions</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Setting-Up-to-Build">3.2. Setting Up to Build</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Kernel-build-prerequisites">3.3. Kernel Build Prerequisites</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Building-Everything">3.4. Building Everything</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Building-the-kernel">3.5. Building the Kernel</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#kernel-build-command">3.5.1. Using "make" to build the lisp kernel</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Building-the-heap-image">3.6. Building the Heap Image</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Development-cycle">3.6.1. Development cycle</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Generating-a-bootstrapping-image">3.6.2. Generating a bootstrapping image</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Generating-fasl-files">3.6.3. Generating fasl files</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Building-a-full-image-from-a-bootstrapping-image">3.6.4. Building a full image from a bootstrapping image</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-          </dl>
-        </div>
-        <a xmlns="http://www.w3.org/1999/xhtml" id="Building-CCL"></a>
-        <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL, like many other Lisp implementations, consists of a
-    kernel and a heap image.  The kernel is an ordinary C program, and
-    is built with a C compiler.  It provides very basic and
-    fundamental facilities, such as memory management, garbage
-    collection, and bootstrapping.  All the higher-level features are
-    written in Lisp, and compiled into the heap image.  Both parts are
-    needed to have a working Lisp implementation; neither the kernel
-    nor the heap image can stand alone.</p>
-        <p xmlns="http://www.w3.org/1999/xhtml">You may already know that, when you have a C compiler which
-    is written in C, you need a working C compiler to build the
-    compiler. Similarly, the Clozure CL heap image includes a Lisp
-    compiler, which is written in Lisp. You therefore need a working
-    Lisp compiler in order to build the Lisp heap image.</p>
-        <p xmlns="http://www.w3.org/1999/xhtml">Where will you get a working Lisp compiler?  No worries; you
-    can use a precompiled copy of a (slightly older and compatible)
-    version of Clozure CL. This section explains how to do all this.</p>
-        <p xmlns="http://www.w3.org/1999/xhtml">In principle it should be possible to use another
-    implementation of Common Lisp as the host compiler, rather than an
-    older Clozure CL; this would be a challenging and experimental way to
-    build, and is not described here.</p>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="building-definitions"></a>3.1.Â Building Definitions</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The following terms are used in subsequent sections; it
-      may be helpful to refer to these definitions.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml"><a id="idp32987648" class="indexterm"></a><a class="glossterm" href="#fasl-file"><em class="glossterm">fasl
-        files</em></a> are the object files produced
-      by <code class="literal">compile-file</code>.  fasl files store the
-      machine code associated with function definitions and the
-      external representation of other lisp objects in a compact,
-      machine-readable form. fasl is short for
-      â<code class="literal">FAS</code>t
-      <code class="literal">L</code>oadingâ. Clozure CL uses different pathname
-      types (extensions) to name fasl files on different platforms;
-      see
-      <a class="xref" href="#Platform-specific-filename-conventions" title="TableÂ 3.1.Â Platform-specific filename conventions">TableÂ 3.1, âPlatform-specific filename conventionsâ</a> </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The <a id="idp37195952" class="indexterm"></a> <a class="glossterm" href="#lisp_kernel"><em class="glossterm">Lisp
-        kernel</em></a> is a C program with a fair amount of
-      platform-specific assembly language code. Its basic job is to
-      map a lisp heap image into memory, transfer control to some
-      compiled lisp code that the image contains, handle any
-      exceptions that occur during the execution of that lisp code,
-      and provide various other forms of runtime support for that
-      code. Clozure CL uses different filenames to name the lisp kernel
-      files on different platforms; see
-      <a class="xref" href="#Platform-specific-filename-conventions" title="TableÂ 3.1.Â Platform-specific filename conventions">TableÂ 3.1, âPlatform-specific filename conventionsâ</a>.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">A <a id="idp33162496" class="indexterm"></a> <a class="glossterm" href="#lisp_image"><em class="glossterm">heap
-        image</em></a> is a file that can be quickly mapped into a
-      process's address space. Conceptually, it's not too different
-      from an executable file or shared library in the OS's native
-      format (ELF or Mach-O/dyld format); for historical reasons,
-      Clozure CL's own heap images are in their own (fairly simple)
-      format. The term <code class="literal">full heap image</code> refers to a
-      heap image file that contains all of the code and data that
-      comprise Clozure CL. Clozure CL uses different filenames to name the
-      standard full heap image files on different platforms; see
-      <a class="xref" href="#Platform-specific-filename-conventions" title="TableÂ 3.1.Â Platform-specific filename conventions">TableÂ 3.1, âPlatform-specific filename conventionsâ</a>.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">A <a id="idp34144896" class="indexterm"></a> bootstrapping image is a minimal
-      heap image used in the process of building Clozure CL itself.  The
-      bootstrapping image contains just enough code to load the rest
-      of Clozure CL from fasl files.  It may help to think of the
-      bootstrapping image as the egg and the full heap image as the
-      chicken. Clozure CL uses different filenames to name the standard
-      bootstrapping image files on different platforms; see
-      <a class="xref" href="#Platform-specific-filename-conventions" title="TableÂ 3.1.Â Platform-specific filename conventions">TableÂ 3.1, âPlatform-specific filename conventionsâ</a>
-      .</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Each supported platform (and possibly a few
-      as-yet-unsupported ones) has a uniquely named subdirectory of
-      <code class="literal">ccl/lisp-kernel/</code>; each such
-      <a id="idp33861728" class="indexterm"></a>
-      contains a Makefile and may contain some auxiliary files (linker
-      scripts, etc.) that are used to build the lisp kernel on a
-      particular platform.The platform-specific name of the kernel
-      build directory is described in
-      <a class="xref" href="#Platform-specific-filename-conventions" title="TableÂ 3.1.Â Platform-specific filename conventions">TableÂ 3.1, âPlatform-specific filename conventionsâ</a>.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="filename_conventions"></a>3.1.1.Â Platform-specific filename conventions</h3>
-                </div>
-              </div>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="table">
-              <a id="Platform-specific-filename-conventions"></a>
-              <p class="title">
-                <strong>TableÂ 3.1.Â Platform-specific filename conventions</strong>
-              </p>
-              <div class="table-contents">
-                <table summary="Platform-specific filename conventions" border="1">
-                  <colgroup>
-                    <col />
-                    <col />
-                    <col />
-                    <col />
-                    <col />
-                    <col />
-                  </colgroup>
-                  <thead>
-                    <tr>
-                      <th>Platform</th>
-                      <th>kernel</th>
-                      <th>full-image</th>
-                      <th>boot-image</th>
-                      <th>fasl extension</th>
-                      <th>kernel-build directory</th>
-                    </tr>
-                  </thead>
-                  <tbody>
-                    <tr>
-                      <td>DarwinPPC32</td>
-                      <td>dppccl</td>
-                      <td>dppccl.image</td>
-                      <td>ppc-boot.image</td>
-                      <td>.dfsl</td>
-                      <td>darwinppc</td>
-                    </tr>
-                    <tr>
-                      <td>LinuxPPC32</td>
-                      <td>ppccl</td>
-                      <td>ppccl.image</td>
-                      <td>ppc-boot</td>
-                      <td>.pfsl</td>
-                      <td>linuxppc</td>
-                    </tr>
-                    <tr>
-                      <td>DarwinPPC64</td>
-                      <td>dppccl64</td>
-                      <td>dppccl64.image</td>
-                      <td>ppc-boot64.image</td>
-                      <td>.d64fsl</td>
-                      <td>darwinppc64</td>
-                    </tr>
-                    <tr>
-                      <td>LinuxPPC64</td>
-                      <td>ppccl64</td>
-                      <td>ppccl64.image</td>
-                      <td>ppc-boot64</td>
-                      <td>.p64fsl</td>
-                      <td>linuxppc64</td>
-                    </tr>
-                    <tr>
-                      <td>LinuxX8664</td>
-                      <td>lx86cl64</td>
-                      <td>lx86cl64.image</td>
-                      <td>x86-boot64</td>
-                      <td>.lx64fsl</td>
-                      <td>linuxx8664</td>
-                    </tr>
-                    <tr>
-                      <td>LinuxX8632</td>
-                      <td>lx86cl</td>
-                      <td>lx86cl.image</td>
-                      <td>x86-boot32</td>
-                      <td>.lx32fsl</td>
-                      <td>linuxx8632</td>
-                    </tr>
-                    <tr>
-                      <td>DarwinX8664</td>
-                      <td>dx86cl64</td>
-                      <td>dx86cl64.image</td>
-                      <td>x86-boot64.image</td>
-                      <td>.dx64fsl</td>
-                      <td>darwinx8664</td>
-                    </tr>
-                    <tr>
-                      <td>DarwinX8632</td>
-                      <td>dx86cl</td>
-                      <td>dx86cl.image</td>
-                      <td>x86-boot32.image</td>
-                      <td>.dx32fsl</td>
-                      <td>darwinx8632</td>
-                    </tr>
-                    <tr>
-                      <td>FreeBSDX8664</td>
-                      <td>fx86cl64</td>
-                      <td>fx86cl64.image</td>
-                      <td>fx86-boot64</td>
-                      <td>.fx64fsl</td>
-                      <td>freebsdx8664</td>
-                    </tr>
-                    <tr>
-                      <td>FreeBSDX8632</td>
-                      <td>fx86cl</td>
-                      <td>fx86cl.image</td>
-                      <td>fx86-boot32</td>
-                      <td>.fx32fsl</td>
-                      <td>freebsdx8632</td>
-                    </tr>
-                    <tr>
-                      <td>SolarisX64</td>
-                      <td>sx86cl64</td>
-                      <td>sx86cl64.image</td>
-                      <td>sx86-boot64</td>
-                      <td>.sx64fsl</td>
-                      <td>solarisx64</td>
-                    </tr>
-                    <tr>
-                      <td>SolarisX86</td>
-                      <td>sx86cl</td>
-                      <td>sx86cl.image</td>
-                      <td>sx86-boot32</td>
-                      <td>.sx32fsl</td>
-                      <td>solarisx86</td>
-                    </tr>
-                    <tr>
-                      <td>Win64</td>
-                      <td>wx86cl64.exe</td>
-                      <td>sx86cl64.image</td>
-                      <td>wx86-boot64.image</td>
-                      <td>.wx64fsl</td>
-                      <td>win64</td>
-                    </tr>
-                    <tr>
-                      <td>Win32</td>
-                      <td>wx86cl.exe</td>
-                      <td>wx86cl.image</td>
-                      <td>wx86-boot32.image</td>
-                      <td>.wx32fsl</td>
-                      <td>win32</td>
-                    </tr>
-                  </tbody>
-                </table>
-              </div>
-            </div>
-            <br xmlns="http://www.w3.org/1999/xhtml" class="table-break" />
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Setting-Up-to-Build"></a>3.2.Â Setting Up to Build</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">At a given time, there are generally two versions of Clozure CL that
-    you might want to use (and therefore might want to build from
-      source):</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>The released version</p>
-              </li>
-              <li class="listitem">
-                <p>The development version, called the "trunk", which
-      may contain both interesting new features and interesting new bugs
-      </p>
-              </li>
-            </ul>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">All versions are available for download from svn.clozure.com via
-    the Subversion source control system.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      For example, to get a released version (1.7 in this example),
-      use a command like:
-      </p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">svn co http://svn.clozure.com/publicsvn/openmcl/release/1.7/<em class="replaceable"><code>xxx</code></em>/ccl</pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      To get the trunk version, use:
-      </p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">svn co http://svn.clozure.com/publicsvn/openmcl/trunk/<em class="replaceable"><code>xxx</code></em>/ccl</pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      Change the <span class="emphasis"><em><code class="literal">xxx</code></em></span> to one of the following names:
-      <code class="literal">darwinx86</code>,
-      <code class="literal">linuxx86</code>,
-      <code class="literal">freebsdx86</code>,
-      <code class="literal">solarisx86</code>,
-      <code class="literal">windows</code>,
-      <code class="literal">linuxppc</code>,
-      or 
-      <code class="literal">darwinppc</code>.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      Tarball distributions of released versions are also available for download via ftp from:
-      <a class="ulink" href="ftp://clozure.com/pub/release/" target="_top">ftp://clozure.com/pub/release/</a>.
-      For additional information about availability of source and distributions see the
-      <a class="ulink" href="http://trac.clozure.com/ccl/" target="_top">Clozure CL Trac</a>.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Subversion client programs are pre-installed on Mac OS X 10.5 and
-      later and are typically either pre-installed or readily available
-      on Linux and FreeBSD platforms.  The <a class="ulink" href="http://subversion.tigris.org" target="_top">Subversion web page</a> contains links to Subversion client programs
-      for many platforms.
-      Users of Mac OS X 10.4 or later can also
-      install Subversion clients via Fink or MacPorts.
-      On Debian Linux (and on related Linux distros such as Ubuntu) run
-      <code class="literal">apt-get install subversion</code> or equivalent in the command-line or interactive package manager.
-    </p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Kernel-build-prerequisites"></a>3.3.Â Kernel Build Prerequisites</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The Clozure CL kernel can be built with the following widely
-          available tools:</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>cc or gcc â the GNU C compiler</p>
-              </li>
-              <li class="listitem">
-                <p>ld â the GNU linker</p>
-              </li>
-              <li class="listitem">
-                <p>m4 or gm4 â the GNU m4 macro processor</p>
-              </li>
-              <li class="listitem">
-                <p>as â the GNU assembler (version 2.10.1 or later)</p>
-              </li>
-              <li class="listitem">
-                <p>make â either GNU make or, on FreeBSD, the default BSD make program</p>
-              </li>
-            </ul>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml"> In general, the more recent the versions of those
-          tools, the better; some versions of gcc 3.x on Linux have
-          difficulty compiling some of the kernel source code correctly
-          (so gcc 4.0 should be used, if possible.)  On Mac OS X, the
-          versions of the tools distributed with Xcode should work fine;
-          on Linux, the versions of the tools installed with the OS (or
-          available through its package management system) should work
-          fine if they're "recent enough".  On FreeBSD, the installed
-          version of the <code class="literal">m4</code> program doesn't support
-          some features that the kernel build process depends on; the
-          GNU version of the m4 macroprocessor (called
-          <code class="literal">gm4</code> on FreeBSD) should be installed.
-        </p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
-            <h3 class="title">Note</h3>
-            <p>In order to build the lisp kernel on Mac OS X
-        10.6 Snow Leopard, you must install the optional 10.4
-        support when installing Xcode.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Building-Everything"></a>3.4.Â Building Everything</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">You now have everything you need.  Start up
-      Clozure CL with the <code class="literal">-n</code> or <code class="literal">--no-init</code>
-      option to avoid potential interference from code in your init file,
-      and evaluate the following form to bring your Lisp system
-      up to date.</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (ccl:rebuild-ccl :full t)
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">That call to the function <code class="literal">rebuild-ccl</code>
-      performs the following steps:</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>Deletes all fasl files and other object files in the
-	      <code class="literal">ccl</code> directory tree</p>
-              </li>
-              <li class="listitem">
-                <p>Runs an external process that does a
-	      <code class="literal">make</code> in the current platform's kernel
-	      build directory to create a new kernel.  
-             This step can only work if the C compiler and related
-             tools are installed; see <a class="xref" href="#Kernel-build-prerequisites" title="3.3.Â Kernel Build Prerequisites">SectionÂ 3.3, âKernel Build Prerequisitesâ</a>. 
-           </p>
-              </li>
-              <li class="listitem">
-                <p>Does <code class="literal">(compile-ccl t)</code> in the running
-	      lisp, to produce a set of fasl files from the âhigher
-	      levelâ lisp sources.</p>
-              </li>
-              <li class="listitem">
-                <p>Does <code class="literal">(xload-level-0 :force)</code> in the
-	      running lisp, to compile the lisp sources in the
-	      âccl:level-0;â directory into fasl files and
-	      then create a bootstrapping image from those fasl
-	      files.</p>
-              </li>
-              <li class="listitem">
-                <p>Runs another external process, which causes the newly
-	      compiled lisp kernel to load the new bootstrapping image.
-	      The bootstrapping image then loads the âhigher
-	      levelâ fasl files and a new copy of the platform's
-	      full heap image is then saved.</p>
-              </li>
-            </ul>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">If all goes well, it'll all happen without user
-      intervention and with some simple progress messages.  If
-      anything goes wrong during execution of either of the external
-      processes, the process output is displayed as part of a lisp
-      error message.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">rebuild-ccl</code> is essentially just a short
-      cut for running all the individual steps involved in rebuilding
-      the system.  You can also execute these steps individually, as
-      described below.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Building-the-kernel"></a>3.5.Â Building the Kernel</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The Lisp kernel is the executable that you run to use
-      Lisp.  It doesn't actually contain the entire Lisp
-      implementation; rather, it loads a heap image which contains the
-      specificsâthe "library", as it might be called if this was a C
-      program.  The kernel also provides runtime support to the heap
-      image, such as garbage collection, memory allocation, exception
-      handling, and the OS interface.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The Lisp kernel file has different names on different
-      platforms. See
-      <a class="xref" href="#Platform-specific-filename-conventions" title="TableÂ 3.1.Â Platform-specific filename conventions">TableÂ 3.1, âPlatform-specific filename conventionsâ</a>. On all
-      platforms the lisp kernel sources reside
-      in <code class="literal">ccl/lisp-kernel</code>.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">This section gives directions on how to rebuild the Lisp
-      kernel from its source code.  Most Clozure CL users will rarely
-      have to do this.  You probably will only need to do it if you are
-      attempting to port Clozure CL to a new architecture or extend or enhance
-      its kernel in some way.  As mentioned above, this step happens
-      automatically when you do
-      </p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (rebuild-ccl :full t)
-      </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-    </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="kernel-build-command"></a>3.5.1.Â Using "make" to build the lisp kernel</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">With those tools in place, do:
-        </p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-shell&gt; cd ccl/lisp-kernel/<em class="replaceable"><code>PLATFORM</code></em>
-shell&gt; make
-	    </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-	  </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">That'll assemble several assembly language source files,
-        compile several C source files, and link
-        ../../<em class="replaceable"><code>the kernel</code></em>.
-	  </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Building-the-heap-image"></a>3.6.Â Building the Heap Image</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The initial heap image is loaded by the Lisp kernel, and
-      provides most of the language implementation The heap image
-      captures the entire state of a running Lisp (except for external
-      resources, such as open files and TCP sockets).  After it is
-      loaded, the contents of the new Lisp process's memory are
-      exactly the same as those of the old Lisp process when the image
-      was created.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The heap image is how we get around the fact that we can't
-      run Lisp code until we have a working Lisp implementation, and
-      we can't make our Lisp implementation work until we can run Lisp
-      code.  Since the heap image already contains a fully-working
-      implementation, all we need to do is load it into memory and
-      start using it.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If you're building a new version of Clozure CL, you need to
-      build a new heap image.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">(You might also wish to build a heap image if you have a
-      large program that is very complicated or time-consuming to
-      load, so that you will be able to load it once, save an image,
-      and thenceforth never have to load it again. At any time, a heap
-      image capturing the entire memory state of a running Lisp can be
-      created by calling the function
-      <code class="literal">ccl:save-application</code>.)</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Development-cycle"></a>3.6.1.Â Development cycle</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Creating a new Clozure CL full heap image consists of the
-        following steps:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>Using your existing Clozure CL, create a
-            bootstrapping image</p>
-                </li>
-                <li class="listitem">
-                  <p>Using your existing Clozure CL, recompile your
-            updated Clozure CL sources</p>
-                </li>
-                <li class="listitem">
-                  <p>Invoke Clozure CL with the bootstrapping image
-            you just created (rather than with the existing full heap
-            image).</p>
-                </li>
-              </ol>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">When you invoke Clozure CL with the bootstrapping image, it
-	    starts up, loads all of the Clozure CL fasl files, and saves out a
-	    new full heap image.  Voila.  You've created a new heap
-	    image.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">A few points worth noting:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>There's a circular dependency between the full heap
-	        image and the bootstrapping image, in that each is used to
-	        build the other.</p>
-                </li>
-                <li class="listitem">
-                  <p>There are some minor implementation
-	        differences, but the environment in effect after the
-	        bootstrapping image has loaded its fasl files is essentially
-	        equivalent to the environment provided by the full heap
-	        image; the latter loads a lot faster and is easier to
-	        distribute, of course.</p>
-                </li>
-                <li class="listitem">
-                  <p>If the full heap image doesn't work (because
-	        of an OS compatibilty problem or other bug), it's very likely
-	        that the bootstrapping image will suffer the same
-	        problems.</p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Given a bootstrapping image and a set of up-to-date fasl
-        files, the development cycle usually involves editing lisp
-        sources (or updating those sources via <code class="literal">svn update</code>),
-        recompiling modified files, and using the bootstrapping image
-        to produce a new heap image.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Generating-a-bootstrapping-image"></a>3.6.2.Â Generating a bootstrapping image</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The bootstrapping image isn't provided in Clozure CL
-        distributions. It can be built from the source code provided
-        in distributions (using a lisp image and kernel provided in
-        those distributions) using the procedure described
-        below.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The bootstrapping image is built by invoking a special
-        utility inside a running Clozure CL heap image to load files
-        contained in the <code class="literal">ccl/level-0</code> directory. The
-        bootstrapping image loads several dozen fasl files.  After
-        it's done so, it saves a heap image via
-        <code class="literal">save-application</code>. This process is called
-        "cross-dumping".</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Given a source distribution, a lisp kernel, and a heap
-        image, one can produce a bootstrapping image by first invoking
-        Clozure CL from the shell:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-shell&gt; ccl
-Welcome to Clozure CL .... !
-?
-	  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">then calling <code class="literal">ccl:xload-level-0</code> at the
-	    lisp prompt:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (ccl:xload-level-0)
-	  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">This function compiles the lisp sources in the <code class="literal">ccl/level-0</code>
-        directory if they're newer than the corresponding fasl files
-        and then loads the resulting fasl files into a simulated lisp
-        heap contained in data structures inside the running
-        lisp. That simulated heap image is then written to
-        disk.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">xload-level-0</code> should be called
-        whenever your existing boot image is out-of-date with respect
-        to the source files in <code class="literal">ccl:level-0;</code>
-        â For example:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (ccl:xload-level-0 :force)
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">forces recompilation of the level-0 sources.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Generating-fasl-files"></a>3.6.3.Â Generating fasl files</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"> Calling:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (ccl:compile-ccl)
-	  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">at the lisp prompt compiles any fasl files that are
-	    out-of-date with respect to the corresponding lisp sources;
-	    <code class="literal">(ccl:compile-ccl t)</code> forces
-	    recompilation. <code class="literal">ccl:compile-ccl</code> reloads
-	    newly-compiled versions of some files;
-	    <code class="literal">ccl:xcompile-ccl</code> is analogous, but skips
-	    this reloading step.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Unless there are bootstrapping considerations involved, it
-        usually doesn't matter whether these files are reloaded after
-        they're recompiled.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Calling <code class="literal">compile-ccl</code> or
-        <code class="literal">xcompile-ccl</code> in an environment where fasl
-        files don't yet exist may produce warnings to that effect
-        whenever files are <code class="literal">require</code>d during
-        compilation; those warnings can be safely ignored. Depending
-        on the maturity of the Clozure CL release, calling
-        <code class="literal">compile-ccl</code> or
-        <code class="literal">xcompile-ccl</code> may also produce several
-        warnings about undefined functions, etc. They should be
-        cleaned up at some point.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Building-a-full-image-from-a-bootstrapping-image"></a>3.6.4.Â Building a full image from a bootstrapping image</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">To build a full image from a bootstrapping image, just
-	    invoke the kernel with the bootstrapping image as an
-	    argument</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-$ cd ccl                        # wherever your ccl directory is
-$ ./<em class="replaceable"><code>KERNEL</code></em> --image-name <em class="replaceable"><code>BOOT_IMAGE</code></em> --no-init
-	  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">Where <em class="replaceable"><code>KERNEL</code></em> and
-        <em class="replaceable"><code>BOOT_IMAGE</code></em> are the names of
-        the kernel and boot image appropriate to the platform you are
-        running on.  See <a class="xref" href="#Platform-specific-filename-conventions" title="TableÂ 3.1.Â Platform-specific filename conventions">TableÂ 3.1, âPlatform-specific filename conventionsâ</a></p>
-            <p xmlns="http://www.w3.org/1999/xhtml">That should load a few dozen fasl files (printing a
-        message as each file is loaded.) If all of these files
-        successfully load, the lisp will print a prompt. You should be
-        able to do essentially everything in that environment that you
-        can in the environment provided by a "real" heap image. If
-        you're confident that things loaded OK, you can save that
-        image:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (ccl:save-application "<em class="replaceable"><code>image_name</code></em>") ; Overwriting the existing heap image
-	  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">Where <em class="replaceable"><code>image_name</code></em> is the name of
-        the full heap image for your platform. See
-        <a class="xref" href="#Platform-specific-filename-conventions" title="TableÂ 3.1.Â Platform-specific filename conventions">TableÂ 3.1, âPlatform-specific filename conventionsâ</a>.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If things go wrong in the early stages of the loading
-        sequence, errors are often difficult to debug; until a fair
-        amount of code (CLOS, the CL condition system, streams, the
-        reader, the read-eval-print loop) is loaded, it's generally
-        not possible for the lisp to report an error.  Errors that
-        occur during these early stages ("the cold load") sometimes
-        cause the lisp kernel debugger (see ) to be invoked; it's
-        primitive, but can sometimes help one to get oriented.</p>
-          </div>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="using-ccl"></a>ChapterÂ 4.Â Using Clozure CL</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#using-ccl-introduction">4.1. Introduction</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Trace">4.2. Trace</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Advising">4.3. Advising</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Directory">4.4. Directory</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Unicode">4.5. Unicode</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#unicode-characters">4.5.1. Characters</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#External-Formats">4.5.2. External Formats</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Line-Termination-Keywords">4.5.3. Line Termination Keywords</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Character-Encodings">4.5.4. Character Encodings</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Pathanmes">4.6. Pathnames</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#pathname-tilde-expansion">4.6.1. Pathname Expansion</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Predefined-Logical-Hosts">4.6.2. Predefined Logical Hosts</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#pathname-namestrings">4.6.3. Pathname Namestrings</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#pathnames-on-darwin">4.6.4. OS X (Darwin)</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#pathnames-on-linux">4.6.5. Linux</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#pathnames-on-freebsd">4.6.6. FreeBSD</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Memory-Mapped-Files">4.7. Memory-mapped Files</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Static_Variables">4.8. Static Variables</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Saving-Applications">4.9. Saving Applications</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#concatenating-fasl-files">4.10. Concatenating FASL Files</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#floating-point">4.11. Floating Point Numbers</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#watched-objects">4.12. Watched Objects</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#watched-watch">4.12.1. WATCH</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#watched-unwatch">4.12.2. UNWATCH</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#watched-write-to-watched-object">4.12.3. WRITE-TO-WATCHED-OBJECT</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#watch-notes">4.12.4. Notes</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#watch-examples">4.12.5. Examples</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#code-coverage">4.13. Code Coverage</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#code-coverage-overview">4.13.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#code-coverage-limitations">4.13.2. Limitations</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#code-coverage-usage">4.13.3. Usage</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#code-coverage-functions-and-variables">4.13.4. Functions and Variables</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#code-coverage-interpreting-code-coloring">4.13.5. Interpreting Code Coloring</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#other-extensions">4.14. Other Extensions</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="using-ccl-introduction"></a>4.1.Â Introduction</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The Common Lisp standard allows considerable latitude in the
-      details of an implementation, and each particular Common Lisp
-      system has some idiosyncrasies. This chapter describes ordinary
-      user-level features of Clozure CL, including features that may be
-      part of the Common Lisp standard, but which may have quirks or
-      details in the Clozure CL implementation that are not described by
-      the standard. It also describes extensions to the standard; that
-      is, features of Clozure CL that are not part of the Common Lisp
-      standard at all.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Trace"></a>4.2.Â Trace</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      Clozure CL's tracing facility is invoked by an extended version of the Common Lisp
-      <em class="varname">trace</em> macro.  Extensions allow tracing of methods, as well as finer control
-      over tracing actions.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp34163072" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="trace"></a>TRACE</em> {<em class="replaceable"><code>keyword</code></em>
-        <em class="replaceable"><code>global-value</code></em>}* {<em class="replaceable"><code>spec</code></em> |
-        (<em class="replaceable"><code>spec</code></em> {<em class="replaceable"><code>keyword</code></em>
-        <em class="replaceable"><code>local-value</code></em>}*)}* [Macro]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      The <em class="varname">trace</em> macro encapsulates the functions named by
-      <em class="replaceable"><code>spec</code></em>s, causing trace actions to take place on entry and
-      exit from each function.  The default actions print a message on function entry and
-      exit. <em class="replaceable"><code>Keyword</code></em>/<em class="replaceable"><code>value</code></em> options
-      can be used to specify changes in the default behavior.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      Invoking <em class="varname">(trace)</em> without arguments returns a list of functions being traced.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      A <em class="replaceable"><code>spec</code></em> is either a symbol that is the name of a function, or an
-      expression of the form <em class="varname">(setf <em class="replaceable"><code>symbol</code></em>)</em>, or a
-      specific method of a generic function in the form <em class="varname">(:method
-        <em class="replaceable"><code>gf-name</code></em> {<em class="replaceable"><code>qualifier</code></em>}*
-        ({<em class="replaceable"><code>specializer</code></em>}*))</em>, where a
-      <em class="replaceable"><code>specializer</code></em> can be the name of a class or an <em class="varname">EQL</em>
-      specializer.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      A <em class="replaceable"><code>spec</code></em> can also be a string naming a package, or equivalently a
-      list <em class="varname">(:package <em class="replaceable"><code>package-name</code></em>)</em>, in order to
-      request that all functions in the package to be traced.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      By default, whenever a traced function is entered or exited, a short message is
-      printed on <em class="varname">*trace-output*</em> showing the arguments on entry and
-      values on exit.  Options specified as key/value pairs can be used to modify this
-      behavior.  Options preceding the function <em class="replaceable"><code>spec</code></em>s apply to
-      all the functions being traced.  Options specified along with a
-      <em class="replaceable"><code>spec</code></em> apply to that spec only and override any
-      global options. The following options are supported:
-    </p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-            <dl>
-              <dt>
-                <span class="term">
-                  <em class="varname">:methods {T | nil}</em>
-                </span>
-              </dt>
-              <dd>
-                <p> If true, and if applied to a <em class="replaceable"><code>spec</code></em> naming a generic
-	        function, arranges to trace all the methods of the generic function in addition to the
-	        generic function itself.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:inside <em class="replaceable"><code>outside-spec</code></em>
-	        | ({<em class="replaceable"><code>outside-spec</code></em>}*)</em>
-                </span>
-              </dt>
-              <dd>
-                <p>Inhibits all trace actions unless the current
-	        invocation of the function being traced is inside one of the
-	        <em class="replaceable"><code>outside-spec</code></em>'s, i.e. unless a function named by one of the
-	        <em class="replaceable"><code>outside-spec</code></em>'s is currently on the stack.
-	        <em class="replaceable"><code>outside-spec</code></em> can name a function, a
-	        method, or a package, as above.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term"><em class="varname">:if <em class="replaceable"><code>form</code></em></em>, </span>
-                <span class="term">
-                  <em class="varname">:condition <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p> Evaluates <em class="replaceable"><code>form</code></em> whenever the function being traced is
-	        about to be entered, and inhibits all trace actions if <em class="replaceable"><code>form</code></em>
-	        returns nil. The form may reference the lexical variable <em class="varname">ccl::args</em>,
-	        which is a list of the arguments in this call. <em class="varname">:condition</em> is just a
-	        synonym for <em class="varname">:if</em>, though if both are specified, both must return non-nil.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:before-if <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p> Evaluates <em class="replaceable"><code>form</code></em> whenever the function being traced is
-	        about to be entered, and inhibits the entry trace actions if
-	        <em class="replaceable"><code>form</code></em> returns nil.  The form may reference the lexical variable
-	        <em class="varname">ccl::args</em>, which is a list of the arguments in this call. If both
-	        <em class="varname">:if</em> and <em class="varname">:before-if</em> are specified, both must return
-	        non-nil in order for the before entry actions to happen.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:after-if <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p> Evaluates <em class="replaceable"><code>form</code></em> whenever the function being traced has
-	        just exited, and inhibits the exit trace actions if <em class="replaceable"><code>form</code></em>
-	        returns nil.  The form may reference the lexical variable <em class="varname">ccl::vals</em>,
-	        which is a list of values returned by this call. If both <em class="varname">:if</em> and
-	        <em class="varname">:after-if</em> are specified, both must return non-nil in order for the
-	        after exit actions to happen.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:print-before <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p> Evaluates <em class="replaceable"><code>form</code></em> whenever the function being traced is
-	        about to be entered, and prints the result before printing the standard entry message.
-	        The form may reference the lexical variable <em class="varname">ccl::args</em>, which is a list
-	        of the arguments in this call.  To see multiple forms, use <em class="varname">values</em>:
-	        <em class="varname">:print-before (values (one-thing) (another-thing))</em>.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:print-after <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p> Evaluates <em class="replaceable"><code>form</code></em> whenever the function being traced has
-	        just exited, and prints the result after printing the standard exit message.  The form may
-	        reference the lexical variable <em class="varname">ccl::vals</em>, which is a list of values
-	        returned by this call. To see multiple forms, use <em class="varname">values</em>:
-	        <em class="varname">:print-after (values (one-thing) (another-thing))</em>.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:print <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p>Equivalent to <em class="varname">:print-before <em class="replaceable"><code>form</code></em> :print-after <em class="replaceable"><code>form</code></em></em>.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:eval-before <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p>Evaluates <em class="replaceable"><code>form</code></em> whenever the function being traced is
-	        about to be entered.  The form may reference the lexical variable
-	        <em class="varname">ccl::args</em>, which is a list of the arguments in this call.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:eval-after <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p>Evaluates <em class="replaceable"><code>form</code></em> whenever the function being has just
-	        exited.  The form may reference the lexical variable <em class="varname">ccl::vals</em>, which
-	        is a list of values returned by this call.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:eval <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p>Equivalent to <em class="varname">:eval-before <em class="replaceable"><code>form</code></em>
-	          :eval-after <em class="replaceable"><code>form</code></em></em>.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:break-before <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p>Evaluates <em class="replaceable"><code>form</code></em> whenever the function being traced is
-	        about to be entered, and if the result is non-nil, enters a debugger break loop.  The form
-	        may reference the lexical variable <em class="varname">ccl::args</em>, which is a list of the
-	        arguments in this call.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:break-after <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p>Evaluates <em class="replaceable"><code>form</code></em> whenever the function being traced has
-	        just exited, and if the result is non-nil, enters a debugger break loop. The form may
-	        reference the lexical variable <em class="varname">ccl::vals</em>, which is a list of values
-	        returned by this call.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:break <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p>Equivalent to <em class="varname">:break-before <em class="replaceable"><code>form</code></em> :break-after <em class="replaceable"><code>form</code></em></em>.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term"><em class="varname">:backtrace-before <em class="replaceable"><code>form</code></em></em>, </span>
-                <span class="term">
-                  <em class="varname">:backtrace <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p>Evaluates <em class="replaceable"><code>form</code></em> whenever the function being traced is
-	        about to be entered.  The form may reference the lexical variable
-	        <em class="varname">ccl::args</em>, which is a list of the arguments in this call. The value
-	        returned by <em class="replaceable"><code>form</code></em> is intepreted as follows:
-	      </p>
-                <div class="variablelist">
-                  <dl>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">nil</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>does nothing</p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">:detailed</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>prints a detailed backtrace to
-	              <em class="varname">*trace-output*</em>.</p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">(:detailed <em class="replaceable"><code>integer</code></em>)</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>prints the top <em class="replaceable"><code>integer</code></em> frames of detailed
-	              backtrace to <em class="varname">*trace-output*</em>.
-	          </p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="replaceable">
-                          <code>integer</code>
-                        </em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>prints top <em class="replaceable"><code>integer</code></em> frames of a terse
-	              backtrace to <em class="varname">*trace-output*</em>.
-	          </p>
-                    </dd>
-                    <dt>
-                      <span class="term">anything else</span>
-                    </dt>
-                    <dd>
-                      <p>prints a terse backtrace to <em class="varname">*trace-output*</em>.
-	          </p>
-                    </dd>
-                  </dl>
-                </div>
-                <p>
-	        Note that unlike with the other options, <em class="varname">:backtrace</em> is equivalent to
-	        <em class="varname">:backtrace-before</em> only, not both before and after, since it's usually
-	        not helpful to print the same backtrace both before and after the function call.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">:backtrace-after <em class="replaceable"><code>form</code></em></em>
-                </span>
-              </dt>
-              <dd>
-                <p>Evaluates <em class="replaceable"><code>form</code></em> whenever the function being traced has
-	        just exited.  The form may reference the lexical variable <em class="varname">ccl::vals</em>,
-	        which is a list of values returned by this call. The value returned by
-	        <em class="replaceable"><code>form</code></em> is intepreted as follows:
-	      </p>
-                <div class="variablelist">
-                  <dl>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">nil</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>does nothing</p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">:detailed</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>prints a detailed backtrace to
-	              <em class="varname">*trace-output*</em>.</p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">(:detailed <em class="replaceable"><code>integer</code></em>)</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>prints the top <em class="replaceable"><code>integer</code></em> frames of detailed
-	              backtrace to <em class="varname">*trace-output*</em>.
-	          </p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="replaceable">
-                          <code>integer</code>
-                        </em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>prints top <em class="replaceable"><code>integer</code></em> frames of a terse
-	              backtrace to <em class="varname">*trace-output*</em>.
-	          </p>
-                    </dd>
-                    <dt>
-                      <span class="term">anything else</span>
-                    </dt>
-                    <dd>
-                      <p>prints a terse backtrace to <em class="varname">*trace-output*</em>.
-	          </p>
-                    </dd>
-                  </dl>
-                </div>
-              </dd>
-              <dt>
-                <span class="term"><em class="varname">:before</em> <em class="replaceable"><code>action</code></em></span>
-              </dt>
-              <dd>
-                <p>specifies the action to be taken just before the traced function is entered.  <em class="replaceable"><code>action</code></em> is one of:</p>
-                <div class="variablelist">
-                  <dl>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">:print</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>The default, prints a short indented message showing the function name and the invocation arguments</p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">:break</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>Equivalent to <em class="varname">:before :print :break-before t</em></p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">:backtrace</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>Equivalent to <em class="varname">:before :print :backtrace-before t</em></p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="replaceable">
-                          <code>function</code>
-                        </em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>
-                  Any other value is interpreted as a function to call on entry instead of
-                  printing the standard entry message.  It is called with its first
-                  argument being the name of the function being traced, the remaining
-                  arguments being all the arguments to the function being traced, and
-                  <em class="varname">ccl:*trace-level*</em> bound to the current nesting level
-                  of trace actions. </p>
-                    </dd>
-                  </dl>
-                </div>
-              </dd>
-              <dt>
-                <span class="term"><em class="varname">:after</em> <em class="replaceable"><code>action</code></em></span>
-              </dt>
-              <dd>
-                <p>specifies the action to be taken just after the traced function exits.  <em class="replaceable"><code>action</code></em> is one of:</p>
-                <div class="variablelist">
-                  <dl>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">:print</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>The default, prints a short indented message showing the function name and the
-	              returned values </p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">:break</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>Equivalent to <em class="varname">:after :print :break-after t</em></p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="varname">:backtrace</em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>Equivalent to <em class="varname">:after :print :backtrace-after t</em></p>
-                    </dd>
-                    <dt>
-                      <span class="term">
-                        <em class="replaceable">
-                          <code>function</code>
-                        </em>
-                      </span>
-                    </dt>
-                    <dd>
-                      <p>Any other value is interpreted as a function to
-	              call on exit instead of printing the standard exit
-	              message.  It is called with its first argument being
-	              the name of the function being traced, the
-	              remaining arguments being all the values returned by the function
-	              being traced, and ccl:*trace-level* bound to the current
-	              nesting level of trace actions.
-	            </p>
-                    </dd>
-                  </dl>
-                </div>
-              </dd>
-            </dl>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp38171696" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="trace-level"></a>CCL:*TRACE-LEVEL*</em>    [Variable]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Variable bound to the current nesting level during execution of before and after trace actions.  The default printing actions use it to determine the amount of indentation.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp38174896" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="trace-max-indent"></a>CCL:*TRACE-MAX-INDENT*</em>    [Variable]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The default before and after print actions will not indent by more than the value of <em class="varname">ccl:*trace-max-indent*</em> regardless of the current trace level.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp38178368" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="trace-function"></a>CCL:TRACE-FUNCTION</em> <em class="replaceable"><code>spec</code></em> <em class="varname">&amp;key</em> {<em class="replaceable"><code>keyword</code></em> <em class="replaceable"><code>value</code></em>}*    [Function]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      This is a functional version of the TRACE macro.  <em class="replaceable"><code>spec</code></em> and
-      <em class="replaceable"><code>keyword</code></em>s are as for TRACE, except that all arguments are evaluated.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp38184192" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="trace-print-level"></a>CCL:*TRACE-PRINT-LEVEL*</em>   [Variable]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The default print actions bind <em class="varname">CL:*PRINT-LEVEL*</em> to this value while
-      printing. Note that this rebinding is only in effect during the default entry and exit messages.
-      It does not apply to printing of <em class="varname">:print-before/:print-after</em> forms or any
-      explicit printing done by user code.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp38188352" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="trace-print-length"></a>CCL:*TRACE-PRINT-LENGTH*</em>    [Variable]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The default print actions bind <em class="varname">CL:*PRINT-LENGTH*</em> to this value while
-      printing. Note that this rebinding is only in effect during the default entry and exit messages.
-      It does not apply to printing of <em class="varname">:print-before/:print-after</em> forms or any
-      explicit printing done by user code.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp38192528" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="trace-bar-frequency"></a>CCL:*TRACE-BAR-FREQUENCY*</em>    [Variable]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">By default, this is nil. If non-nil it should be a integer,
-    and the default entry and exit messages will print a | instead of
-    space every this many levels of indentation.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Advising"></a>4.3.Â Advising</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-    The <code class="literal">advise</code> macro can be thought of as a more
-    general version of <code class="literal">trace</code>. It allows code that
-    you specify to run before, after, or around a given function, for
-    the purpose of changing the behavior of the function. Each piece
-    of added code is called a piece of advice. Each piece of advice
-    has a unique name, so that you can have multiple pieces of advice
-    on the same function, including multiple
-    <code class="literal">:before</code>, <code class="literal">:after</code>, and
-    <code class="literal">:around</code> pieces of advice.
-  </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-    The <code class="literal">:name</code> and <code class="literal">:when</code>
-    keywords serve to identify the piece of advice.  A later call to
-    <code class="literal">advise</code> with the same values of
-    <code class="literal">:name</code> and <code class="literal">:when</code> will replace
-    the existing piece of advice; a call with different values will not.
-  </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_advise"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>advise</strong></span> spec form <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> when name</code>
-            </div>
-            <div class="refentrytitle">
-	Add a piece of advice to the function or method specified by
-	spec according to
-	form.
-      </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38211984"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">spec</span></i>---
-	      A specification of the function on which to put the
-	      advice.  This is either a symbol that is the name of a
-	      function or generic function, or an expression of the
-	      form (setf <em xmlns="http://www.w3.org/1999/xhtml" class="replaceable"><code>symbol</code></em>), or a
-	      specific method of a generic function in the form
-	      (:method symbol {qualifiers} (specializer {specializer})).
-	    </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">form</span></i>---
-	      A form to execute before, after, or around the advised
-	      function. The form can refer to the variable arglist
-	      that is bound to the arguments with which the advised
-	      function was called. You can exit from form with
-	      (return).
-	    </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---
-	      A name that identifies the piece of advice.
-	    </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">when</span></i>---
-	      An argument that specifies when the piece of advice is
-	      run. There are three allowable values. The default is
-	      <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:before</code>, which specifies that form is
-	      executed before the advised function is called. Other
-	      possible values are <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:after</code>, which
-	      specifies that form is executed after the advised
-	      function is called, and <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:around</code>,
-	      which specifies that form is executed around the call to
-	      the advised function. Use <code xmlns="http://www.w3.org/1999/xhtml" class="literal">(:do-it)</code>
-	      within form to indicate invocation of the original
-	      definition.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38224768"></a>
-                <div class="header">Examples:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	The function <code class="literal">foo</code>, already defined, does
-	something with a list of numbers. The following code uses a
-	piece of advice to make foo return zero if any of its
-	arguments is not a number. Using :around advice, you can do
-	the following:
-	</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(advise foo (if (some #'(lambda (n) (not (numberp n))) arglist)
-	      0
-	      (:do-it))
-	:when :around :name :zero-if-not-nums)
-	</pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-      </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	To do the same thing using a :before piece of advice:
-	</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(advise foo (if (some #'(lambda (n) (not (numberp n))) arglist)
-	      (return 0))
-	:when :before :name :zero-if-not-nums)
-	</pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-      </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_unadvise"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>unadvise</strong></span> spec <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> when name</code>
-            </div>
-            <div class="refentrytitle">
-	Remove the piece or pieces of advice matching spec,
-	when, and name.
-      </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38236672"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	The unadvise macro removes the piece or pieces of advice
-	matching <code class="literal">spec</code>, <code class="literal">when</code>,
-	and <code class="literal">name</code>. When the value of
-	<code class="literal">spec</code> is t and the values of <code class="literal">when</code>
-	and <code class="literal">name</code> are nil, unadvise
-	removes every piece of advice; when <code class="literal">spec</code> is
-	t, the argument <code class="literal">when</code> is nil, and
-	<code class="literal">name</code> is non-nil, unadvise removes all
-	pieces of advice with the given name.
-      </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38244576"></a>
-                <div class="header">Arguments and Values:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	The arguments have the same meaning as in
-	<a class="xref" href="#m_advise" title="Macro ADVISE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">advise</b></a>.
-      </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_advisedp"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>advisedp</strong></span> spec <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> when name</code>
-            </div>
-            <div class="refentrytitle">
-	Return a list of the pieces of advice matching spec,
-	when, and name.
-      </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38253920"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	The advisedp macro returns a list of existing pieces of advice
-	that match <code class="literal">spec</code>, <code class="literal">when</code>,
-	and <code class="literal">name</code>. When the value of
-	<code class="literal">spec</code> is t and the values of
-	<code class="literal">when</code> and <code class="literal">name</code> are nil,
-	advisedp returns all existing pieces of advice.
-      </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38259616"></a>
-                <div class="header">Arguments and Values:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	The arguments have the same meaning as in
-	<a class="xref" href="#m_advise" title="Macro ADVISE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">advise</b></a>.
-      </p>
-              </div>
-            </div>
-          </p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Directory"></a>4.4.Â Directory</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL's <em class="varname">DIRECTORY</em> function accepts the following
-implementation-dependent keyword arguments:</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-            <dl>
-              <dt>
-                <span class="term"><em class="varname">:files</em> <em class="replaceable"><code>boolean</code></em></span>
-              </dt>
-              <dd>
-                <p> If true, includes regular (non-directory) files in DIRECTORY's output.  Defaults to T.</p>
-              </dd>
-              <dt>
-                <span class="term"><em class="varname">:directories</em> <em class="replaceable"><code>boolean</code></em></span>
-              </dt>
-              <dd>
-                <p> If true, includes directories in DIRECTORY's output.  Defaults to NIL.</p>
-              </dd>
-              <dt>
-                <span class="term"><em class="varname">:all</em> <em class="replaceable"><code>boolean</code></em></span>
-              </dt>
-              <dd>
-                <p> If true, includes files and directories whose names start with a dot character in DIRECTORY's output.  (Entries whose name is "." or ".." are never included.) Defaults to T.</p>
-              </dd>
-              <dt>
-                <span class="term"><em class="varname">:follow-links</em> <em class="replaceable"><code>boolean</code></em></span>
-              </dt>
-              <dd>
-                <p> If true, includes the TRUENAMEs of symbolic or hard links in DIRECTORY's output; if false, includes the link filenames without attempting to resolve them. Defaults to T.</p>
-                <p>Note that legacy HFS alias files are treated as plain files.</p>
-              </dd>
-            </dl>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Unicode"></a>4.5.Â Unicode</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">All characters and strings in Clozure CL fully support Unicode by
-    using UTF-32. There is only one <code class="literal">CHARACTER</code> type
-    and one <code class="literal">STRING</code> type in Clozure CL.  There has been a
-    lot of discussion about this decision which can be found by
-    searching the openmcl-devel archives at <a class="ulink" href="http://clozure.com/pipermail/openmcl-devel/" target="_top">http://clozure.com/pipermail/openmcl-devel/</a>.  Suffice it
-    to say that we decided that the simplicity and speed advantages of
-    only supporting UTF-32 outweigh the space disadvantage.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="unicode-characters"></a>4.5.1.Â Characters</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">There is one <code class="literal">CHARACTER</code> type in Clozure CL.
-    All <code class="literal">CHARACTER</code>s are
-    <code class="literal">BASE-CHAR</code>s.  <em class="varname">CHAR-CODE-LIMIT</em>
-    is now <code class="literal">#x110000</code>, which means that all Unicode
-    characters can be directly represented.  As of Unicode 5.0, only
-    about 100,000 of 1,114,112 possible <code class="literal">CHAR-CODE</code>s
-    are actually defined. The function <span class="function"><strong>CODE-CHAR</strong></span>
-    knows that certain ranges of code values (notably
-    <code class="literal">#xd800</code>-<code class="literal">#xddff</code>) will never be
-    valid character codes and will return <code class="literal">NIL</code> for
-    arguments in that range, but may return a
-    non-<code class="literal">NIL</code> value (an undefined/non-standard
-    <code class="literal">CHARACTER</code> object) for other unassigned code
-    values.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL supports character names of the form
-    <code class="literal">u+xxxx</code>âwhere <code class="literal">x</code> is a
-    sequence of one or more hex digits.  The value of the hex digits
-    denotes the code of the character.  The <code class="literal">+</code>
-    character is optional, so <code class="literal">#\u+0020</code>,
-    <code class="literal">#\U0020</code>, and <code class="literal">#\U+20</code> all
-    refer to the <code class="literal">#\Space</code> character.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Characters with codes in the range
-    <code class="literal">#xa0</code>-<code class="literal">#x7ff</code> also have
-    symbolic names These are the names from the Unicode standard with
-    spaces replaced by underscores.  So
-    <code class="literal">#\Greek_Capital_Letter_Epsilon</code> can be used to
-    refer to the character whose <span class="function"><strong>CHAR-CODE</strong></span> is
-    <code class="literal">#x395</code>.  To see the complete list of supported
-    character names, look just below the definition for
-    <span class="function"><strong>register-character-name</strong></span> in
-    <code class="literal">ccl:level-1;l1-reader.lisp</code>.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="External-Formats"></a>4.5.2.Â External Formats</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"><span class="function"><strong>OPEN</strong></span>, <span class="function"><strong>LOAD</strong></span>, and
-    <span class="function"><strong>COMPILE-FILE</strong></span> all take an
-    <code class="literal">:EXTERNAL-FORMAT</code> keyword argument.  The value
-    of <code class="literal">:EXTERNAL-FORMAT</code> can be
-    <code class="literal">:DEFAULT</code> (the default value), a line
-    termination keyword (see <a class="xref" href="#Line-Termination-Keywords" title="4.5.3.Â Line Termination Keywords">SectionÂ 4.5.3, âLine Termination Keywordsâ</a>), a character encoding
-    keyword (see <a class="xref" href="#Character-Encodings" title="4.5.4.Â Character Encodings">SectionÂ 4.5.4, âCharacter Encodingsâ</a>), an
-    external-format object created using
-    <span class="function"><strong>CCL::MAKE-EXTERNAL-FORMAT</strong></span> (see <a class="xref" href="#f_make-external-format" title="Function MAKE-EXTERNAL-FORMAT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-external-format</b></a>), or a plist with keys:
-    <code class="literal">:DOMAIN</code>, <code class="literal">:CHARACTER-ENCODING</code>
-    and <code class="literal">:LINE-TERMINATION</code>.  If
-    <em class="parameter"><code>argument</code></em> is a plist, the result of
-    <code class="literal">(APPLY #'MAKE-EXTERNAL-FORMAT
-    <em class="parameter"><code>argument</code></em>)</code> will be used.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If <code class="literal">:DEFAULT</code> is specified, then the value
-    of <em class="varname">CCL:*DEFAULT-EXTERNAL-FORMAT*</em> is used.  If
-    no line-termination is specified, then the value of
-    <em class="varname">CCL:*DEFAULT-LINE-TERMINATION*</em> is used, which
-    defaults to <code class="literal">:UNIX</code>.  If no character encoding is
-    specified, then
-    <em class="varname">CCL:*DEFAULT-FILE-CHARACTER-ENCODING*</em> is used
-    for file streams and
-    <em class="varname">CCL:*DEFAULT-SOCKET-CHARACTER-ENCODING*</em> is used
-    for socket streams.  The default, default character encoding is
-    <code class="literal">NIL</code> which is a synonym for
-    <code class="literal">:ISO-8859-1</code>.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Note that the set of keywords used to denote
-    CHARACTER-ENCODINGs and the set of keywords used to denote
-    line-termination conventions is disjoint: a keyword denotes at
-    most a character encoding or a line termination convention, but
-    never both.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">EXTERNAL-FORMATs are objects (structures) with two
-    read-only fields that can be accessed via the functions:
-    <span class="function"><strong>EXTERNAL-FORMAT-LINE-TERMINATION</strong></span> and
-    <span class="function"><strong>EXTERNAL-FORMAT-CHARACTER-ENCODING</strong></span>.</p>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_default-external-format"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code>CCL:*DEFAULT-EXTERNAL-FORMAT*</code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp38323728"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">The value of this variable is used when :EXTERNAL-FORMAT is
-	        unspecified or specified as :DEFAULT. It can
-	        meaningfully be given any value that can be used as an
-                external-format (except for the value :DEFAULT.)
-	      </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">The initial value of this variable
-	        in Clozure CL is <code class="literal">:UNIX</code>, which is equivalent to
-                <code class="literal">(:LINE-TERMINATION :UNIX)</code>, among other
-                things.  </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_default-line-termination"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code>CCL:*DEFAULT-LINE-TERMINATION*</code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp38331152"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">The value of this variable is used when an external-format
-                doesn't specify a line-termination convention (or specifies
-                it as :DEFAULT.) It can meaningfully be given any value 
-                that can be used as a line termination keyword 
-                (see <a class="xref" href="#Line-Termination-Keywords" title="4.5.3.Â Line Termination Keywords">SectionÂ 4.5.3, âLine Termination Keywordsâ</a>).
-	      </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">The initial value of this variable
-	        in Clozure CL is <code class="literal">:UNIX</code>.
-          </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_make-external-format"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-	  <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-external-format</strong></span>
-	  <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> domain character-encoding line-termination
-	  =&gt; external-format
-	</code>
-              </div>
-              <div class="refentrytitle">Either creates a new external format object, or
-	return an existing one with the same specified slot
-	values.</div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp38341024"></a>
-                  <div class="header">Arguments and Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">domain</span></i>---This is used to indicate where the external
-	      format is to be used.  Its value can be almost
-	      anything.  It defaults to <code xmlns="http://www.w3.org/1999/xhtml" class="literal">NIL</code>.
-	      There are two domains that have a pre-defined meaning in
-	      Clozure CL: <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:FILE</code> indicates
-	      encoding for a file in the file system and
-	      <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:SOCKET</code> indicates i/o to/from a
-	      socket.  The value of <em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>domain</code></em>
-	      affects the default values for
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>character-encoding</code></em> and
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>line-termination</code></em>.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">character-encoding</span></i>---A keyword that specifies the character encoding
-	      for the external format. <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#Character-Encodings" title="4.5.4.Â Character Encodings">SectionÂ 4.5.4, âCharacter Encodingsâ</a>.  Defaults to
-	      <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:DEFAULT</code> which means if
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>domain</code></em> is
-	      <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:FILE</code> use the value of the variable
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">CCL:*DEFAULT-FILE-CHARACTER-ENCODING*</em>
-	      and if <em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>domain</code></em> is
-	      <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:SOCKET</code>, use the value of the
-	      variable
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">CCL:*DEFAULT-SOCKET-CHARACTER-ENCODING*</em>.
-	      The initial value of both of these variables is
-	      <code xmlns="http://www.w3.org/1999/xhtml" class="literal">NIL</code>, which means the
-	      <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:ISO-8859-1</code> encoding.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">line-termination</span></i>---A keyword that indicates a line termination
-	      keyword <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#Line-Termination-Keywords" title="4.5.3.Â Line Termination Keywords">SectionÂ 4.5.3, âLine Termination Keywordsâ</a>.
-	      Defaults to <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:DEFAULT</code> which means
-	      use the value of the variable
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">CCL:*DEFAULT-LINE-TERMINATION*</em>.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">external-format</span></i>---An external-format object as described above.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40313632"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">Despite the function's name, it doesn't necessarily create a
-	new, unique EXTERNAL-FORMAT object: two calls to
-	MAKE-EXTERNAL-FORMAT with the same arguments made in the same
-	dynamic environment return the same (eq) object.
-	</p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Line-Termination-Keywords"></a>4.5.3.Â Line Termination Keywords</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Line termination keywords indicate which characters are used
-  to indicate the end of a line.  On input, the external line
-  termination characters are replaced by <code class="literal">#\Newline</code>
-  and on output, <code class="literal">#\Newline</code>s are converted to the
-  external line termination characters.</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="table">
-              <a id="Line-Termination-Table"></a>
-              <p class="title">
-                <strong>TableÂ 4.1.Â Line Termination Keywords</strong>
-              </p>
-              <div class="table-contents">
-                <table summary="Line Termination Keywords" border="1">
-                  <colgroup>
-                    <col />
-                    <col />
-                  </colgroup>
-                  <thead>
-                    <tr>
-                      <th align="left">keyword</th>
-                      <th align="left">character(s)</th>
-                    </tr>
-                  </thead>
-                  <tbody>
-                    <tr>
-                      <td align="left">
-                        <code class="literal">:UNIX</code>
-                      </td>
-                      <td align="left">
-                        <code class="literal">#\Linefeed</code>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td align="left">
-                        <code class="literal">:MACOS</code>
-                      </td>
-                      <td align="left">
-                        <code class="literal">#\Return</code>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td align="left">
-                        <code class="literal">:CR</code>
-                      </td>
-                      <td align="left">
-                        <code class="literal">#\Return</code>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td align="left">
-                        <code class="literal">:CRLF</code>
-                      </td>
-                      <td align="left">
-                        <code class="literal">#\Return #\Linefeed</code>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td align="left">
-                        <code class="literal">:CP/M</code>
-                      </td>
-                      <td align="left">
-                        <code class="literal">#\Return #\Linefeed</code>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td align="left">
-                        <code class="literal">:MSDOS</code>
-                      </td>
-                      <td align="left">
-                        <code class="literal">#\Return #\Linefeed</code>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td align="left">
-                        <code class="literal">:DOS</code>
-                      </td>
-                      <td align="left">
-                        <code class="literal">#\Return #\Linefeed</code>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td align="left">
-                        <code class="literal">:WINDOWS</code>
-                      </td>
-                      <td align="left">
-                        <code class="literal">#\Return #\Linefeed</code>
-                      </td>
-                    </tr>
-                    <tr>
-                      <td align="left">
-                        <code class="literal">:INFERRED</code>
-                      </td>
-                      <td align="left">see below</td>
-                    </tr>
-                    <tr>
-                      <td align="left">
-                        <code class="literal">:UNICODE</code>
-                      </td>
-                      <td align="left">
-                        <code class="literal">#\Line_Separator</code>
-                      </td>
-                    </tr>
-                  </tbody>
-                </table>
-              </div>
-            </div>
-            <br xmlns="http://www.w3.org/1999/xhtml" class="table-break" />
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">:INFERRED</code> means that a stream's
-  line-termination convention is determined by looking at the contents
-  of a file.  It is only useful for <code class="literal">FILE-STREAM</code>s
-  that're open for <code class="literal">:INPUT</code> or
-  <code class="literal">:IO</code>.  The first buffer full of data is examined,
-  and if a <code class="literal">#\Return</code> character occurs before any
-  <code class="literal">#\Linefeed</code> character, then the line termination
-  type is set to <code class="literal">:WINDOWS</code> if that
-  <code class="literal">#\Return</code> character is immediately followed by a
-  <code class="literal">#\Linefeed</code> character and to <code class="literal">:MACOS</code>
-  otherwise.  If a <code class="literal">#\Return</code> character isn't found in
-  the buffer or if <code class="literal">#\Return</code> is preceded by
-  <code class="literal">#\Linefeed</code>, the file's line terminationt type
-  is set to <code class="literal">:UNIX</code>.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Character-Encodings"></a>4.5.4.Â Character Encodings</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Internally, all characters and strings in Clozure CL are in
-    UTF-32.  Externally, files or socket streams may encode characters
-    in a wide variety of ways.  The International Organization for
-    Standardization, widely known as ISO, defines many of these
-    character encodings.  Clozure CL implements some of these encodings as
-    detailed below.  These encodings are part of the specification of
-    external formats <a class="xref" href="#External-Formats" title="4.5.2.Â External Formats">SectionÂ 4.5.2, âExternal Formatsâ</a>.  When reading
-    from a stream, characters are converted from the specified
-    external character encoding to UTF-32.  When writing to a stream,
-    characters are converted from UTF-32 to the specified character
-    encoding.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Internally, CHARACTER-ENCODINGs are objects (structures)
-    that are named by character encoding keywords (:ISO-8859-1,
-    :UTF-8, etc.).  The structures contain attributes of the encoding
-    and functions used to encode/decode external data, but unless
-    you're trying to define or debug an encoding there's little reason
-    to know much about the CHARACTER-ENCODING objects and it's usually
-    preferable to refer to a character encoding by its name.
-    </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-    </p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp40353728"></a>4.5.4.1.Â Encoding Problems</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">On output to streams with character encodings that can
-      encode the full range of Unicodeâand on input from any
-      streamâ"unencodable characters" are represented using the
-      Unicode #\Replacement_Character (= #\U+fffd); the presence of
-      such a character usually indicates that something got lost in
-      translation.  Either data wasn't encoded properly or there was a
-      bug in the decoding process.</p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp40355200"></a>4.5.4.2.Â Byte Order Marks</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">The endianness of a character encoding is sometimes
-      explicit, and sometimes not.  For example,
-      <code class="literal">:UTF-16BE</code> indicates big-endian, but
-      <code class="literal">:UTF-16</code> does not specify endianness.  A byte
-      order mark is a special character that may appear at the
-      beginning of a stream of encoded characters to specify the
-      endianness of a multi-byte character encoding.  (It may also be
-      used with UTF-8 character encodings, where it is simply used to
-      indicate that the encoding is UTF-8.)</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL writes a byte order mark as the first character
-      of a file or socket stream when the endianness of the character
-      encoding is not explicit.  Clozure CL also expects a byte order
-      mark on input from streams where the endianness is not
-      explicit. If a byte order mark is missing from input data, that
-      data is assumed to be in big-endian order.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">A byte order mark from a UTF-8 encoded input stream is not
-      treated specially and just appears as a normal character from
-      the input stream.  It is probably a good idea to skip over this
-      character.</p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp40359360"></a>4.5.4.3.Â <span class="function"><strong>DESCRIBE-CHARACTER-ENCODINGS</strong></span></h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">The set of character encodings supported by Clozure CL can be
-    retrieved by calling
-    <span class="function"><strong>CCL:DESCRIBE-CHARACTER-ENCODINGS</strong></span>.</p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_describe-character-encodings"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-	    <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>describe-character-encodings</strong></span>
-	  </code>
-                </div>
-                <div class="refentrytitle">Writes descriptions of defined character
-	  encodings to *terminal-io*.</div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp40366736"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">Writes descriptions of all defined character encodings
-	  to <em class="varname">*terminal-io*</em>.  These descriptions
-	  include the names of the encoding's aliases and a doc string
-	  which briefly describes each encoding's properties and
-	  intended use.</p>
-                  </div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp40368528"></a>
-                    <div class="header">See Also:</div>
-                    <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#Character-Encodings" title="4.5.4.Â Character Encodings">SectionÂ 4.5.4, âCharacter Encodingsâ</a>, <a class="xref" href="#External-Formats" title="4.5.2.Â External Formats">SectionÂ 4.5.2, âExternal Formatsâ</a>, <a class="xref" href="#Supported-Character-Encodings" title="4.5.4.4.Â Supported Character Encodings">SectionÂ 4.5.4.4, âSupported Character Encodingsâ</a></span>
-                  </div>
-                </div>
-              </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Supported-Character-Encodings"></a>4.5.4.4.Â Supported Character Encodings</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">The list of supported encodings is reproduced here.  Most
-     encodings have aliases, e.g. the encoding named
-     <code class="literal">:ISO-8859-1</code> can also be referred to by the
-     names <code class="literal">:LATIN1</code> and <code class="literal">:IBM819</code>,
-     among others.  Where possible, the keywordized name of an
-     encoding is equivalent to the preferred MIME charset name (and
-     the aliases are all registered IANA charset names.)</p>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-1</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which all character codes map to their Unicode
-       equivalents. Intended to support most characters used in most
-       Western European languages.</p>
-                    <p>Clozure CL uses ISO-8859-1 encoding for
-       <em class="varname">*TERMINAL-IO*</em> and for all streams whose
-       EXTERNAL-FORMAT isn't explicitly specified.  The default for
-       <em class="varname">*TERMINAL-IO*</em> can be set via the
-       <code class="literal">-K</code> command-line argument (see <a class="xref" href="#Command-Line-Options" title="2.5.Â Command Line Options">SectionÂ 2.5, âCommand Line Optionsâ</a>).
-       </p>
-                    <p>ISO-8859-1 just covers the first 256 Unicode code
-       points, where the first 128 code points are equivalent to
-       US-ASCII.  That should be pretty much equivalent to what
-       earliers versions of Clozure CL did that only supported 8-bit characters,
-       but it may not be optimal for users working in a particular
-       locale.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-1, :LATIN1, :L1,
-       :IBM819, :CP819, :CSISOLATIN1</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-2</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in most languages used in
-       Central/Eastern Europe.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-2, :LATIN2, :L2,
-       :CSISOLATIN2</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-3</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in most languages used in
-       Southern Europe.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-3, :LATIN3 :L3,
-       :CSISOLATIN3</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-4</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in most languages used in
-       Northern Europe.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-4, :LATIN4, :L4, :CSISOLATIN4</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-5</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in the Cyrillic
-       alphabet.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-5, :CYRILLIC, :CSISOLATINCYRILLIC,
-       :ISO-IR-144</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-6</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in the Arabic
-       alphabet.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-6, :ARABIC, :CSISOLATINARABIC,
-       :ISO-IR-127</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-7</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in the Greek
-       alphabet.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-7, :GREEK, :GREEK8, :CSISOLATINGREEK,
-       :ISO-IR-126, :ELOT_928, :ECMA-118</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-8</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in the Hebrew
-       alphabet.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-8, :HEBREW, :CSISOLATINHEBREW,
-       :ISO-IR-138</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-9</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#xcf map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in the Turkish
-       alphabet.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-9, :LATIN5, :CSISOLATIN5,
-       :ISO-IR-148</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-10</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in Nordic
-       alphabets.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-10, :LATIN6, :CSISOLATIN6,
-       :ISO-IR-157</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-11</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found the Thai
-       alphabet.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-13</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in Baltic
-       alphabets.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-14</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in Celtic
-       languages.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-14, :ISO-IR-199, :LATIN8, :L8,
-       :ISO-CELTIC</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-15</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in Western European languages
-       (including the Euro sign and some other characters missing from
-       ISO-8859-1.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-15, :LATIN9</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:ISO-8859-16</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x9f map to their Unicode equivalents and
-       other codes map to other Unicode character values.  Intended to
-       provide most characters found in Southeast European
-       languages.</p>
-                    <p>Aliases: <code class="literal">:ISO_8859-16, :ISO-IR-199, :LATIN8, :L8,
-       :ISO-CELTIC</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:MACINTOSH</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, fixed-width character encoding in
-       which codes #x00-#x7f map to their Unicode equivalents and
-       other codes map to other Unicode character values.
-       Traditionally used on Classic MacOS to encode characters used
-       in western languages.</p>
-                    <p>Aliases: <code class="literal">:MACOS-ROMAN, :MACOSROMAN, :MAC-ROMAN,
-       :MACROMAN</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:UCS-2</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>A 16-bit, fixed-length encoding in which
-       characters with CHAR-CODEs less than #x10000 can be encoded in
-       a single 16-bit word.  The endianness of the encoded data is
-       indicated by the endianness of a byte-order-mark character
-       (#u+feff) prepended to the data; in the absence of such a
-       character on input, the data is assumed to be in big-endian
-       order.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:UCS-2BE</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>A 16-bit, fixed-length encoding in which
-       characters with CHAR-CODEs less than #x10000 can be encoded in
-       a single 16-bit big-endian word. The encoded data is implicitly
-       big-endian; byte-order-mark characters are not interpreted on
-       input or prepended to output.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:UCS-2LE</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>A 16-bit, fixed-length encoding in which
-       characters with CHAR-CODEs less than #x10000 can be encoded in
-       a single 16-bit little-endian word. The encoded data is
-       implicitly little-endian; byte-order-mark characters are not
-       interpreted on input or prepended to output.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:US-ASCII</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 7-bit, fixed-width character encoding in
-       which all character codes map to their Unicode
-       equivalents. </p>
-                    <p>Aliases: <code class="literal">:CSASCII, :CP637, :IBM637, :US,
-       :ISO646-US, :ASCII, :ISO-IR-6</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:UTF-16</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>A 16-bit, variable-length encoding in which
-       characters with CHAR-CODEs less than #x10000 can be encoded in
-       a single 16-bit word and characters with larger codes can be
-       encoded in a pair of 16-bit words.  The endianness of the
-       encoded data is indicated by the endianness of a
-       byte-order-mark character (#u+feff) prepended to the data; in
-       the absence of such a character on input, the data is assumed
-       to be in big-endian order. Output is written in native
-       byte-order with a leading byte-order mark.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:UTF-16BE</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>A 16-bit, variable-length encoding in which
-       characters with CHAR-CODEs less than #x10000 can be encoded in
-       a single 16-bit big-endian word and characters with larger
-       codes can be encoded in a pair of 16-bit big-endian words.  The
-       endianness of the encoded data is implicit in the encoding;
-       byte-order-mark characters are not interpreted on input or
-       prepended to output.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:UTF-16LE</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>A 16-bit, variable-length encoding in which
-       characters with CHAR-CODEs less than #x10000 can be encoded in
-       a single 16-bit little-endian word and characters with larger
-       codes can be encoded in a pair of 16-bit little-endian words.
-       The endianness of the encoded data is implicit in the encoding;
-       byte-order-mark characters are not interpreted on input or
-       prepended to output.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:UTF-32</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>A 32-bit, fixed-length encoding in which all
-       Unicode characters can be encoded in a single 32-bit word.  The
-       endianness of the encoded data is indicated by the endianness
-       of a byte-order-mark character (#u+feff) prepended to the data;
-       in the absence of such a character on input, input data is
-       assumed to be in big-endian order.  Output is written in native
-       byte order with a leading byte-order mark.</p>
-                    <p>Alias: <code class="literal">:UTF-4</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:UTF-32BE</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>A 32-bit, fixed-length encoding in which all
-       Unicode characters encoded in a single 32-bit word. The encoded
-       data is implicitly big-endian; byte-order-mark characters are
-       not interpreted on input or prepended to
-       output.</p>
-                    <p>Alias: <code class="literal">:UCS-4BE</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:UTF-8</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, variable-length character encoding in
-       which characters with CHAR-CODEs in the range #x00-#x7f can be
-       encoded in a single octet; characters with larger code values
-       can be encoded in 2 to 4 bytes.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:UTF-32LE</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>A 32-bit, fixed-length encoding in which all
-       Unicode characters can encoded in a single 32-bit word. The
-       encoded data is implicitly little-endian; byte-order-mark
-       characters are not interpreted on input or prepended to
-       output.</p>
-                    <p>Alias: <code class="literal">:UCS-4LE</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:Windows-31j</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, variable-length character encoding in
-     which character code points in the range #x00-#x7f can be encoded
-     in a single octet; characters with larger code values can be
-     encoded in 2 bytes.</p>
-                    <p>Aliases: <code class="literal">:CP932, :CSWINDOWS31J</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:EUC-JP</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, variable-length character encoding in
-     which character code points in the range #x00-#x7f can be encoded
-     in a single octet; characters with larger code values can be
-     encoded in 2 bytes.</p>
-                    <p>Alias: <code class="literal">:EUCJP</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:GB2312</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, variable-length character encoding in which
-     character code points in the range #x00-#x80 can be encoded in a
-     single octet; characters with larger code values can be encoded
-     in 2 bytes.</p>
-                    <p>Alias: <code class="literal">:GB2312-80 :GB2312-1980 :EUC-CN :EUCCN</code></p>
-                  </dd>
-                  <dt>
-                    <span class="term">
-                      <code class="literal">:CP936</code>
-                    </span>
-                  </dt>
-                  <dd>
-                    <p>An 8-bit, variable-length character encoding in which
-     character code points in the range #x00-#x80 can be encoded in a
-     single octet; characters with larger code values can be encoded
-     in 2 bytes.</p>
-                    <p>Alias: <code class="literal">:GBK :MS936 :WINDOWS-936</code></p>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp40455248"></a>4.5.4.5.Â Encoding and Decoding Strings</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL provides functions to encode and decode strings
-to and from vectors of type (simple-array (unsigned-byte 8)).</p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="count-characters-in-octet-vector"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-	<span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>count-characters-in-octet-vector</strong></span>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>vector</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code><em class="varname">&amp;key</em></code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>start</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>end</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>external-format</code></em>
-    </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp40464320"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    Returns the number of characters that would be produced by
-    decoding <em class="varname">vector</em> (or the subsequence thereof
-    delimited by <em class="varname">start</em> and <em class="varname">end</em>)
-    according to <em class="varname">external-format</em>.
-  </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="decode-string-from-octets"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-	<span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>decode-string-from-octets</strong></span>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>vector</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code><em class="varname">&amp;key</em></code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>start</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>end</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>external-format</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>string</code></em>
-    </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp40475760"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    Decodes the octets in <em class="varname">vector</em> (or the subsequence
-    of it delimited by <em class="varname">start</em> and
-    <em class="varname">end</em>) into a string according
-    to <em class="varname">external-format</em>.
-  </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    If <em class="varname">string</em> is supplied, output will be written into it.
-    It must be large enough to hold the decoded characters.  If <em class="varname">
-    string</em> is not supplied, a new string will be allocated to
-    hold the decoded characters.
-  </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    Returns, as multiple values, the decoded string and the position in
-    <em class="varname">vector</em> where the decoding ended.
-  </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    Sequences of octets in <em class="varname">vector</em> that cannot be
-    decoded into characters according to
-    <em class="varname">external-format</em> will be decoded as
-    #\Replacement_Character.
-  </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="encode-string-to-octets"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-	<span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>encode-string-to-octets</strong></span>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>string</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code><em class="varname">&amp;key</em></code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>start</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>end</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>external-format</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>use-byte-order-mark</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>vector</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>vector-offset</code></em>
-    </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp40491824"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    Encodes <em class="varname">string</em> (or the substring delimited by
-    <em class="varname">start</em> and <em class="varname">end</em>)
-    into <em class="varname">external-format</em> and returns, as multiple
-    values, a vector of octets containing the encoded data and an integer
-    that specifies the offset into the vector where the encoded data ends.
-  </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    When <em class="varname">use-byte-order-mark</em> is true, a byte-order mark
-    will be included in the encoded data.
-  </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    If <em class="varname">vector</em> is supplied, output will be written
-    to it.  It must be of type (simple-array (unsigned-byte 8)) and be
-    large enough to hold the encoded data.  If it is not supplied, the function
-    will allocate a new vector.
-  </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    If <em class="varname">vector-offset</em> is supplied, data will be written
-    into the output vector starting at that offset.
-  </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    Characters in <em class="varname">string</em> that cannot be encoded
-    into <em class="varname">external-format</em> will be replaced with an
-    encoding-dependent replacement character
-    (#\Replacement_Character or #\Sub) before being encoded and written
-    into the output vector.
-  </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="string-size-in-octets"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-	<span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>string-size-in-octets</strong></span>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>string</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code><em class="varname">&amp;key</em></code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>start</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>end</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>external-format</code></em>
-	<em xmlns="http://www.w3.org/1999/xhtml" class="parameter"><code>use-byte-order-mark</code></em>
-    </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp40507456"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    Returns the number of octets required to encode
-    <em class="varname">string</em> (or the substring delimited by
-    <em class="varname">start</em> and <em class="varname">end</em>) into
-    <em class="varname">external-format</em>.
-  </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-    When <em class="varname">use-byte-order-mark</em> is true, the returned
-    size will include space for a byte-order marker.
-  </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Pathanmes"></a>4.6.Â Pathnames</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="pathname-tilde-expansion"></a>4.6.1.Â Pathname Expansion</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Leading tilde (~) characters in physical pathname namestrings
-        are expanded in the way that most shells do:</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">"~user/..."</code> can be used to refer to an absolute pathname rooted
-        at the home directory of the user named "user".</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">"~/..."</code> can be used to refer to an absolute pathname rooted at
-        the home directory of the current user.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Predefined-Logical-Hosts"></a>4.6.2.Â Predefined Logical Hosts</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL sets up logical pathname translations for logical hosts:  <code class="literal">ccl</code> and <code class="literal">home</code></p>
-            <a xmlns="http://www.w3.org/1999/xhtml" id="idp40518080" class="indexterm"></a>
-            <p xmlns="http://www.w3.org/1999/xhtml">The <code class="literal">CCL</code> logical host should point to the
-        <code class="literal">ccl</code> directory.  It is used for a variety of
-        purposes by Clozure CL including: locating Clozure CL source code,
-        <code class="literal">require</code> and <code class="literal">provide</code>, accessing
-        foreign function information, and the Clozure CL build process. It
-        is set to the value of the environment variable
-        <em class="varname">CCL_DEFAULT_DIRECTORY</em>, which is set by the
-        openmcl shell script <a class="xref" href="#The-ccl-Shell-Script" title="2.3.1.Â The ccl Shell Script">SectionÂ 2.3.1, âThe ccl Shell Scriptâ</a>.  If
-        <em class="varname">CCL_DEFAULT_DIRECTORY</em> is not set, then it is set
-        to the directory containing the current heap image.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="pathname-namestrings"></a>4.6.3.Â Pathname Namestrings</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-	The syntax of namestrings is implementation-defined in Common Lisp.
-	Portable programs cannot assume much of anything about them.  (See
-	section 19.1.1 of the Common Lisp standard for more information.)
-      </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-	When translating a namestring into a pathname object, most
-	implementations seem to follow the convention that a dot
-	character in the namestring separates the
-	<code class="literal">pathname-name</code> and
-	the <code class="literal">pathname-type</code>.  When there is more
-	than one dot in involved, or when dots appear at the beginning
-	or end of the namestrings, what to do is less clear: does
-	".emacs" describe a pathname whose name is
-	<code class="literal">nil</code> and whose type is <code class="literal">emacs</code>
-	or something else?  Similarly, given "a.b.c", the question
-	is which parts are parsed as the pathname name, and which are
-	parsed as the pathname type?
-      </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-	When generating a namestring from a pathname object (as happens,
-	for example, when printing a pathname), Clozure CL
-	tries to avoid some potential ambiguity by escaping characters
-	that might otherwise be used to separate pathname components.
-	The character used to quote or escape the separators is a
-	backlash on Unix systems, and a #\&gt; character on Windows.
-	So, for example, "a\\.b.c"
-	has name "a.b" and type "c", whereas "a.b\\.c" has name
-	"a" and type "b.c".
-      </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-	To get a native namestring suitable for passing to an
-	operating system command, use the function
-	<code class="literal">ccl:native-translated-namestring</code>.
-      </p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp40530432"></a>4.6.3.1.Â Working with native namestrings</h4>
-                  </div>
-                </div>
-              </div>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_native-translated-namestring"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>native-translated-namestring</strong></span> pathname-designator</code>
-                </div>
-                <div class="refentrytitle">
-	    Return a namestring that uses the conventions of the
-	    native operating system.
-	  </div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp40535968"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-	  This function returns a namestring that represents a pathname
-	  using the native conventions of the operating system.
-	  Any quoting or escaping of special characters will be removed.
-	</p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-	  For example, suppose that <em class="varname">p</em> is a pathname made
-	  by <code class="literal">(make-pathname :name "a.b" :type "c")</code>.
-	  Then, <code class="literal">(native-translated-namestring p)</code> evaluates
-	  to "a.b.c".  By contrast, <code class="literal">(namestring p)</code> evaluates
-	  to "a\\.b.c".
-	</p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="m_with-filename-cstrs"></a>
-                  <strong>[Macro]</strong>
-                  <br></br>
-                  <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>with-filename-cstrs</strong></span> ( {(var value)}* ) {form}*</code>
-                </div>
-                <div class="refentrytitle">
-	    Suitably encode strings to be used as filenames for foreign code.
-	  </div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp40544848"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-	  Executes <em class="varname">forms</em> in an environemt in which each
-	  <em class="varname">var</em> is bound to a stack-allocated foreign
-	  pointer which refers to a C-style string suitable for passing
-	  to foreign code which expects a filename argument.
-	</p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-	  For example, one might use this macro in the following way:
-  </p>
-                    <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(with-filename-cstrs ((s (native-translated-namestring pathname)))
-  (#_unlink s))
-  </pre>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-	</p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-	  Various operating systems have different conventions for how
-	  they expect native pathname strings to be encoded.  Darwin
-	  expects then to be decomposed UTF-8.  The Unicode variants
-	  to Windows file-handling functions expect UTF-16.  Other
-	  systems just treat them as opaque byte sequences.  This macro
-	  ensures that the correct encoding is used, whatever
-	  the host operating system.
-	</p>
-                  </div>
-                </div>
-              </p>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="pathnames-on-darwin"></a>4.6.4.Â OS X (Darwin)</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL assumes that pathname strings are decomposed UTF-8.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="pathnames-on-linux"></a>4.6.5.Â Linux</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Pathname strings are treated as null-terminated strings
-        coded in the encoding named by the value returned by the function
-      <em class="varname">CCL:PATHNAME-ENCODING-NAME</em>.  This value may be changed
-      with <em class="varname">SETF</em>.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="pathnames-on-freebsd"></a>4.6.6.Â FreeBSD</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Pathname strings are treated as null-terminated strings
-        encoded according to the current locale; a future release may
-        change this convention to use UTF-8.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Memory-Mapped-Files"></a>4.7.Â Memory-mapped Files</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">In release 1.2 and later, Clozure CL
-      supports <a class="glossterm" href="#memory_mapped_file"><em class="glossterm">memory-mapped
-        files</em></a>. On operating systems that support memory-mapped
-      files (including Mac OS X, Linux, and FreeBSD), the operating
-      system can arrange for a range of virtual memory addresses to
-      refer to the contents of an open file. As long as the file remains
-      open, programs can read values from the file by reading addresses
-      in the mapped range.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Using memory-mapped files may in some cases be more
-      efficient than reading the contents of a file into a data
-      structure in memory.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL provides the
-      functions <em class="varname">CCL:MAP-FILE-TO-IVECTOR</em>
-      and <em class="varname">CCL:MAP-FILE-TO-OCTET-VECTOR</em> to support
-      memory-mapping. These functions return vectors whose contents are
-      the contents of memory-mapped files. Reading an element of such a
-      vector returns data from the corresponding position in the
-      file.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Without memory-mapped files, a common idiom for reading the
-      contents of files might be something like this:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(let* ((stream (open pathname :direction :input :element-type '(unsigned-byte 8)))
-       (vector (make-array (file-size-to-vector-size stream)
-                           :element-type '(unsigned-byte 8))))
-  (read-sequence vector stream))
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Using a memory-mapped files has a result that is the same in
-      that, like the above example, it returns a vector whose contents are
-      the same as the contents of the file. It differs in that the above
-      example creates a new vector in memory and copies the file's
-      contents into it; using a memory-mapped file instead arranges for
-      the vector's elements to point to the file's contents on disk
-      directly, without copying them into memory first.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The vectors returned by <em class="varname">CCL:MAP-FILE-TO-IVECTOR</em>
-      and <em class="varname">CCL:MAP-FILE-TO-OCTET-VECTOR</em> are read-only; any
-      attempt to change an element of a vector returned by these
-      functions results in a memory-access error. Clozure CL does not
-      currently support writing data to memory-mapped files.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Vectors created by <em class="varname">CCL:MAP-FILE-TO-IVECTOR</em>
-      and <em class="varname">CCL:MAP-FILE-TO-OCTET-VECTOR</em> are required to
-      respect Clozure CL's limit on the total size of an array. That means
-      that you cannot use these functions to create a vector longer
-      than <em class="varname">ARRAY-TOTAL-SIZE-LIMIT</em>, even if the filesystem
-      supports file sizes that are larger. The value
-      of <em class="varname">ARRAY-TOTAL-SIZE-LIMIT</em> is <em class="varname">(EXPT 2 24)</em>
-      on 32-but platforms; and <em class="varname">(EXPT 2 56)</em> on 64-bit
-      platforms.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp40565760" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="map-file-to-ivector"></a>CCL:MAP-FILE-TO-IVECTOR</em>
-        <em class="parameter"><code>pathname</code></em>
-        <em class="parameter"><code>element-type</code></em>
-        [Function]</strong></span>
-    </p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-            <dl>
-              <dt>
-                <span class="term">
-                  <em class="varname">pathname</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The pathname of the file to be memory-mapped.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">element-type</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The element-type of the vector to be
-            created. Specified as
-            a <a class="glossterm" href="#type-specifier"><em class="glossterm">type-specifier</em></a>
-            that names a subtype of either <em class="varname">SIGNED-BYTE</em>
-            or <em class="varname">UNSIGNED-BYTE</em>.</p>
-              </dd>
-            </dl>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      The <em class="varname">map-file-to-ivector</em> function tries to
-      open the file at <em class="parameter"><code>pathname</code></em> for reading. If
-      successful, the function maps the file's contents to a range of
-      virtual addresses. If successful, it returns a read-only vector
-      whose element-type is given
-      by <em class="parameter"><code>element-type</code></em>, and whose contents are
-      the contents of the memory-mapped file.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The returned vector is
-      a <a class="glossterm" href="#displaced-array"><em class="glossterm">displaced-array</em></a>
-      whose element-type is <em class="varname">(UPGRADED-ARRAY-ELEMENT-TYPE
-        element-type)</em>. The target of the displaced array is a
-      vector of type <em class="varname">(SIMPLE-ARRAY element-type (*))</em> whose
-      elements are the contents of the memory-mapped file.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Because of alignment issues, the mapped file's contents
-      start a few bytes (4 bytes on 32-bit platforms, 8 bytes on
-      64-bit platforms) into the vector. The displaced array returned
-      by <em class="varname">CCL:MAP-FILE-TO-IVECTOR</em> hides this overhead, but
-      it's usually more efficient to operate on the underlying simple
-      1-dimensional array.  Given a displaced array (like the value
-      returned by <em class="varname">CCL:MAP-FILE-TO-IVECTOR</em>), the function
-      <em class="varname">ARRAY-DISPLACEMENT</em> returns the underlying array and
-      the displacement index in elements.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Currently, Clozure CL supports only read operations on
-      memory-mapped files. If you try to change the contents of an array
-      returned by <em class="varname">map-file-to-ivector</em>, Clozure CL signals
-      a memory error.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp40581696" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="unmap-ivector"></a>CCL:UNMAP-IVECTOR</em>
-        <em class="parameter"><code>displaced-array</code></em>
-        [Function]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If the argument is a displaced-array returned
-      by <em class="varname">map-file-to-ivector</em>, and if it has not yet
-      been unmapped by this function,
-      then <em class="varname">unmap-ivector</em> undoes the memory mapping,
-      closes the mapped file, and changes the displaced-array so that its
-      target is an empty vector (of length zero).</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp40585968" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="map-file-to-octet-vector"></a>CCL:MAP-FILE-TO-OCTET-VECTOR</em>
-        <em class="parameter"><code>pathname</code></em>
-        [Function]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">This function is a synonym for <em class="varname">(CCL:MAP-FILE-TO-IVECTOR
-        pathname '(UNSIGNED-BYTE 8))</em> It is provided as a convenience
-      for the common case of memory-mapping a file as a vector of
-      bytes.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp40589808" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="unmap-octet-vector"></a>CCL:UNMAP-OCTET-VECTOR</em>
-        <em class="parameter"><code>displaced-array</code></em>
-        [Function]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">This function is a synonym
-      for <em class="varname">(CCL:UNMAP-IVECTOR)</em></p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Static_Variables"></a>4.8.Â Static Variables</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL supports the definition
-      of <a class="glossterm" href="#static_variable"><em class="glossterm">static
-        variables</em></a>, whose values are the same across threads,
-      and which may not be dynamically bound. The value of a static
-      variable is thus the same across all threads; changing the value
-      in one thread changes it for all threads.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Attempting to dynamically rebind a static variable (for
-      instance, by using <em class="varname">LET</em>, or using the variable name as
-      a parameter in a <em class="varname">LAMBDA</em> form) signals an
-      error. Static variables are shared global resources; a dynamic
-      binding is private to a single thread.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Static variables therefore provide a simple way to share
-      mutable state across threads. They also provide a simple way to
-      introduce race conditions and obscure bugs into your code, since
-      every thread reads and writes the same instance of a given static
-      variable. You must take care, therefore, in how you change the
-      values of static variables, and use normal multithreaded
-      programming techniques, such as locks or semaphores, to protect
-      against race conditions.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">In Clozure CL, access to a static variable is usually faster than
-      access to a special variable that has not been declared
-      static.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp40598736" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="defstatic"></a>DEFSTATIC</em>
-        <em class="parameter"><code>var</code></em>
-        <em class="parameter"><code>value</code></em>
-        <em class="varname">&amp;key</em>
-        <em class="parameter"><code>doc-string</code></em>
-        [Macro]</strong></span>
-    </p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-            <dl>
-              <dt>
-                <span class="term">
-                  <em class="varname">var</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The name of the new static variable.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">value</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The initial value of the new static variable.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">doc-string</em>
-                </span>
-              </dt>
-              <dd>
-                <p>A documentation string that is assigned to the new
-            variable.</p>
-              </dd>
-            </dl>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Proclaims the
-      variable <a class="glossterm" href="#special_variable"><em class="glossterm">special</em></a>,
-      assigns the variable the supplied value, and assigns
-      the <em class="varname">doc-string</em> to the
-      variable's <em class="varname">VARIABLE</em> documentation. Marks the
-      variable static, preventing any attempt to dynamically rebind
-      it. Any attempt to dynamically rebind <em class="varname">var</em>
-      signals an error.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Saving-Applications"></a>4.9.Â Saving Applications</h2>
-              </div>
-            </div>
-          </div>
-          <a xmlns="http://www.w3.org/1999/xhtml" id="idp40612192" class="indexterm"></a>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL provides the
-      function <code class="literal">CCL:SAVE-APPLICATION</code>, which creates a file
-      containing an archived Lisp memory image.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL consists of a small executable called the
-      Lisp <a class="glossterm" href="#lisp_image"><em class="glossterm">kernel</em></a>, which
-      implements the very lowest level features of the Lisp system, and
-      an <a class="glossterm" href="#lisp_image"><em class="glossterm">image</em></a>, which
-      contains the in-memory representation of most of the Lisp system,
-      including functions, data structures, variables, and so on. When
-      you start Clozure CL, you are launching the kernel, which then locates
-      and reads an image file, restoring the archived image in
-      memory. Once the image is fully restored, the Lisp system is
-      running.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Using <code class="literal">CCL:SAVE-APPLICATION</code>, you can create a
-      file that contains a modified image, one that includes any changes
-      you've made to the running Lisp system. If you later pass your
-      image file to the Clozure CL kernel as a command-line parameter, it
-      then loads your image file instead of its default one, and Clozure CL
-      starts up with your modifications.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If this scenario seems to you like a convenient way to
-      create an application, that's just as intended. You can create an
-      application by modifying the running Lisp until it does what you
-      want, then use <code class="literal">CCL:SAVE-APPLICATION</code> to preserve your
-      changes and later load them for use.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">In fact, you can go further than that. You can replace
-      Clozure CL's <a class="glossterm" href="#toplevel_function"><em class="glossterm">toplevel
-        function</em></a> with your own, and then, when the image is
-      loaded, the Lisp system immediately performs your tasks rather
-      than the default tasks that make it a Lisp development system. If
-      you save an image in which you have done this, the resulting Lisp
-      system is your tool rather than a Lisp development system.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">You can go a step further still. You can
-      tell <code class="literal">CCL:SAVE-APPLICATION</code> to prepend the Lisp kernel
-      to the image file. Doing this makes the resulting image into a
-      self-contained executable binary. When you run the resulting file,
-      the Lisp kernel immediately loads the attached image file and runs
-      your saved system. The Lisp system that starts up can have any
-      behavior you choose. It can be a Lisp development system, but with
-      your customizations; or it can immediately perform some task of
-      your design, making it a specialized tool rather than a general
-      development system.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">In other words, you can develop any application you like by
-      interactively modifying Clozure CL until it does what you want, then
-      using <code class="literal">CCL:SAVE-APPLICATION</code> to preserve your changes
-      in an executable image.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">On Mac OS X,
-      the <a class="link" href="#application_builder">application builder</a>
-      uses <code class="literal">CCL:SAVE-APPLICATION</code> to create the executable
-      portion of the <a class="glossterm" href="#application_bundle"><em class="glossterm">application
-        bundle</em></a>. Double-clicking the application bundle runs
-      the executable image created
-      by <code class="literal">CCL:SAVE-APPLICATION</code>.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Also on Mac OS X, Clozure CL supports an object type
-      called <code class="literal">MACPTR</code>, which is the type of pointers into the
-      foreign (Mac OS) heap. Examples of
-      commonly-user <code class="literal">MACPTR</code> objects are Cocoa windows and
-      other dynamically-allocated Mac OS system objects.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Because a <code class="literal">MACPTR</code> object is a pointer into a
-      foreign heap that exists for the lifetime of the running Lisp
-      process, and because a saved image is used by loading it into a
-      brand new Lisp process, saved <code class="literal">MACPTR</code> objects cannot
-      be relied on to point to the same things when reconstituted from a
-      saved image. In fact, a restored <code class="literal">MACPTR</code> object might
-      point to anything at allâfor example an arbitrary location
-      in the middle of a block of code, or a completely nonexistent
-      virtual address.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For that reason, <code class="literal">CCL:SAVE-APPLICATION</code> converts
-      all <code class="literal">MACPTR</code> objects to <code class="literal">DEAD-MACPTR</code>
-      objects when writing them to an image
-      file. A <code class="literal">DEAD-MACPTR</code> is functionally identical to
-      a <code class="literal">MACPTR</code>, except that code that operates
-      on <code class="literal">MACPTR</code> objects distinguishes them
-      from <code class="literal">DEAD-MACPTR</code> objects and can handle them
-      appropriatelyâsignaling errors, for example.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">As of Clozure CL 1.2, there is one exception to the conversion
-      of <code class="literal">MACPTR</code> to <code class="literal">DEAD-MACPTR</code> objects:
-      a <code class="literal">MACPTR</code> object that points to the address 0 is not
-      converted, because address 0 can always be relied upon to refer to
-      the same thing.</p>
-          <a xmlns="http://www.w3.org/1999/xhtml" id="idp40638784" class="indexterm"></a>
-          <p xmlns="http://www.w3.org/1999/xhtml">As of Clozure CL 1.2, the constant <code class="literal">CCL:+NULL-PTR+</code>
-      refers to a <code class="literal">MACPTR</code> object that points to address 0.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">On all supported platforms, you can
-      use <code class="literal">CCL:SAVE-APPLICATION</code> to create a command-line
-      tool that runs the same way any command-line program
-      does. Alternatively, if you choose not to prepend the kernel, you
-      can save an image and then later run it by passing it as a
-      command-line parameter to the <code class="literal">ccl</code>
-      or <code class="literal">ccl64</code> script.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp40644448" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="save-application"></a>SAVE-APPLICATION</em>
-        <em class="parameter"><code>filename</code></em>
-        <em class="varname">&amp;key</em>
-        <em class="parameter"><code>toplevel-function</code></em>
-        <em class="parameter"><code>init-file</code></em>
-        <em class="parameter"><code>error-handler</code></em>
-        <em class="parameter"><code>application-class</code></em>
-        <em class="parameter"><code>clear-clos-caches</code></em>
-        <em class="parameter"><code>(purify t)</code></em>
-        <em class="parameter"><code>impurify</code></em>
-        <em class="parameter"><code>(mode #o644)</code></em>
-        <em class="parameter"><code>prepend-kernel</code></em>
-        <em class="parameter"><code>native</code></em>
-        [Function]</strong></span>
-    </p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-            <dl>
-              <dt>
-                <span class="term">
-                  <em class="varname">filename</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The pathname of the file to be created when Clozure CL
-            saves the application.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">toplevel-function</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The function to be executed after startup is
-            complete. The toplevel is a function of no arguments that
-            performs whatever actions the lisp system should perform
-            when launched with this image.</p>
-                <p>If this parameter is not supplied, Clozure CL uses its
-            default toplevel. The default toplevel runs
-            the <a class="glossterm" href="#REPL"><em class="glossterm">read-eval-print
-              loop</em></a>.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">init-file</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The pathname of a Lisp file to be loaded when the
-            image starts up. You can place initialization expressions in
-            this file, and use it to customize the behavior of the Lisp
-            system when it starts up.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">error-handler</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The error-handling mode for the saved image. The
-            supplied value determines what happens when an error is not
-            handled by the saved image. Valid values
-            are <code class="literal">:quit</code> (Lisp exits with an error
-            message); <code class="literal">:quit-quietly</code> (Lisp exits without an
-            error message); or <code class="literal">:listener</code> (Lisp enters a
-            break loop, enabling you to debug the problem by interacting
-            in a listener). If you don't supply this parameter, the
-            saved image uses the default error handler
-            (<code class="literal">:listener</code>).</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">application-class</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The CLOS class that represents the saved Lisp
-            application. Normally you don't need to supply this
-            parameter; <code class="literal">CCL:SAVE-APPLICATION</code> uses the
-            class <code class="literal">CCL:LISP-DEVELOPMENT-SYSTEM</code>. In some
-            cases you may choose to create a custom application class;
-            in that case, pass the name of the class as the value for
-            this parameter.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">clear-clos-caches</em>
-                </span>
-              </dt>
-              <dd>
-                <p>If true, ensures that CLOS caches are emptied before
-            saving the image. Normally you don't need to supply this
-            parameter, but if for some reason you want to ensure the
-            CLOS caches are clear when the image starts up, you can pass
-            any true value.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">purify</em>
-                </span>
-              </dt>
-              <dd>
-                <p>
-	    When true, calls (in effect) <code class="code">purify</code> before
-	    saving the heap image.  This moves certain objects that
-	    are unlikely to become garbage to a special memory area
-	    that is not scanned by the GC (since it is expected that
-	    the GC wouldn't find anything to collect).
-         </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">impurify</em>
-                </span>
-              </dt>
-              <dd>
-                <p>
-	    If true, calls (in effect) <code class="code">impurify</code> before
-	    saving the heap image.  (If both <code class="literal">:impurify</code>
-	    and <code class="literal">:purify</code> are true, first
-	    <code class="code">impurify</code> is done, and then <code class="code">purify</code>.)
-         </p>
-                <p>
-	   <code class="code">impurify</code> moves objects in certain special memory
-	   areas into the regular dynamic heap, where they will be scanned
-	   by the GC.
-	 </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">mode</em>
-                </span>
-              </dt>
-              <dd>
-                <p>
-	    A number specifying the mode (permission bits) of the output file.
-	  </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">prepend-kernel</em>
-                </span>
-              </dt>
-              <dd>
-                <p>Specifies the file to prepend to the saved heap
-	  image.  A value of <code class="literal">t</code> means to prepend
-	  the lisp kernel binary that the lisp started with.
-	  Otherwise, the value of <code class="literal">:prepend-kernel</code>
-	  should be a pathname designator for the file to be
-	  prepended.
-         </p>
-                <p>
-	   If the prepended file is execuatable, its execute
-	   mode bits will be copied to the output file.
-	 </p>
-                <p>
-	   This argument can be used to prepend any kind of file to
-	   the saved heap image.  This can be useful in some special
-	   cases.
-	 </p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">native</em>
-                </span>
-              </dt>
-              <dd>
-                <p>If true, saves the image as a native (ELF, Mach-O, PE)
-          shared library.  (On platforms where this isn't yet supported,
-          a warning is issued and the option is ignored.)
-         </p>
-              </dd>
-            </dl>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml"></p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="concatenating-fasl-files"></a>4.10.Â Concatenating FASL Files</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      Multiple fasl files can be concatenated into a single file.
-    </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_fasl-concatenate"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>fasl-concatenate</strong></span> out-file fasl-files <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> (:if-exists :error)</code>
-            </div>
-            <div class="refentrytitle">
-	Concatenate several fasl files, producing a single output file.
-      </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40692816"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">out-file</span></i>---
-	      Name of the file in which to store the concatenation.
-	    </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">fasl-files</span></i>---
-	      List of names of fasl files to concatenate.
-	    </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:if-exists</span></i>---
-	      As for <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>OPEN</strong></span>, defaults to <code xmlns="http://www.w3.org/1999/xhtml" class="literal">
-	      :error</code>
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40699984"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	Creates a fasl file which, when loaded, will have the same
-	effect as loading the individual input fasl files in the
-	specified order.  The single file might be easier to
-	distribute or install, and loading it may be at least a little
-	faster than loading the individual files (since it avoids the
-	overhead of opening and closing each file in succession.)
-      </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	The PATHNAME-TYPE of the output file and of each input file
-	defaults to the current platform's fasl file type (.dx64fsl or
-	whatever.)  If any of the input files has a different
-	type/extension an error will be signaled, but it doesn't
-	otherwise try too hard to verify that the input files are real
-	fasl files for the current platform.
-      </p>
-              </div>
-            </div>
-          </p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="floating-point"></a>4.11.Â Floating Point Numbers</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      In Clozure CL, the Common Lisp types short-float and single-float are
-      implemented as IEEE single precision values; double-float and
-      long-float are IEEE double precision values.  On 64-bit
-      platforms, single-floats are immediate values (like fixnums and
-      characters).
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-    Floating-point exceptions are generally enabled and detected.  By
-    default, threads start up with overflow, division-by-zero, and
-    invalid enabled, and the rounding mode is set to nearest. The
-    functions <em class="varname">SET-FPU-MODE</em> and
-    <em class="varname">GET-FPU-MODE</em> provide user control over
-    floating-point behavior.
-  </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_get-fpu-mode"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>get-fpu-mode</strong></span> <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> mode</code>
-            </div>
-            <div class="refentrytitle">
-	Return the state of exception-enable and rounding-mode control
-	flags for the current thread.
-      </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40710864"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">mode</span></i>---
-	      One of the keywords :rounding-mode, :overflow,
-	      :underflow, :division-by-zero, :invalid, :inexact.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40713680"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	If <em class="varname">mode</em> is supplied, returns the value of
-	the corresponding control flag for the current thread.
-      </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	Otherwise, returns a list of keyword/value pairs which
-	describe the floating-point exception-enable and rounding-mode
-	control flags for the current thread.
-      </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">rounding-mode</span></i>---
-	      One of :nearest, :zero, :positive, :negative
-	    </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">overflow, underflow, division-by-zero, invalid, inexact
-	  </span></i>---
-	      If true, the floating-point exception is signaled.
-	      If NIL, it is masked.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_set-fpu-mode"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>set-fpu-mode</strong></span> <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em>
-      rounding-mode overflow underflow division-by-zero
-      invalid inexact</code>
-            </div>
-            <div class="refentrytitle">
-	Set the state of exception-enable and rounding-mode control
-	flags for the current thread.
-      </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40725120"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">rounding-mode</span></i>---
-	      If supplied, must be one of :nearest, :zero, :positive, or
-	      :negative.
-	    </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">overflow, underflow, division-by-zero, invalid, inexact</span></i>---NIL to mask the exception, T to signal it.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40729456"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	Sets the current thread's exception-enable and rounding-mode
-	control flags to the indicated values for arguments that are
-	supplied, and preserves the values assoicated with those
-	that aren't supplied.
-      </p>
-              </div>
-            </div>
-          </p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="watched-objects"></a>4.12.Â Watched Objects</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-    As of release 1.4, Clozure CL provides a way for lisp objects to
-    be watched so that a condition will be signaled when a thread
-    attempts to write to the watched object. For a certain class of
-    bugs (someone is changing this value, but I don't know who), this
-    can be extremely helpful.
-  </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="watched-watch"></a>4.12.1.Â WATCH</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_watch"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>watch</strong></span> <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> object</code>
-              </div>
-              <div class="refentrytitle">
-	Monitor a lisp object for writes.
-      </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40738464"></a>
-                  <div class="header">Arguments and Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">object</span></i>---
-	      Any memory-allocated lisp object.
-	    </p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40741152"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-	The WATCH function arranges for the specified object to be
-	monitored for writes. This is accomplished by copying the
-	object to its own set of virtual memory pages, which are then
-	write-protected. This protection is enforced by the computer's
-	memory-management hardware; the write-protection does not slow
-	down reads at all.
-      </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-	When any write to the object is attempted, a
-	WRITE-TO-WATCHED-OBJECT condition will be signaled.
-      </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-	When called with no arguments, WATCH returns a freshly-consed
-	list of the objects currently being watched.
-      </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-	WATCH returns NIL if the object cannot be watched (typically
-	because the object is in a static or pure memory area).
-      </p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="watch-dwim"></a>
-                  <div class="header">DWIM:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      WATCH operates at a fairly low level; it is not possible to
-      avoid the details of the internal representation of objects.
-      Nevertheless, as a convenience, WATCHing a standard-instance,
-      a hash-table, or a multi-dimensional or non-simple CL array
-      will watch the underlying slot-vector, hash-table-vector, or
-      data-vector, respectively.
-      </p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="watch-discuss"></a>
-                  <div class="header">Discussion:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      WATCH can monitor any memory-allocated lisp object.
-    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      In Clozure CL, a memory-allocated object is either a cons cell
-      or a uvector.
-    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      WATCH operates on cons cells, not lists. In order to watch a
-      chain of cons cells, each cons cell must be watched
-      individually. Because each watched cons cell takes up its own
-      own virtual memory page (4 Kbytes), it's only feasible to watch
-      relatively short lists.
-    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      If a memory-allocated object isn't a cons cell, then it is a
-      vector-like object called a uvector. A uvector is a
-      memory-allocated lisp object whose first word is a header that
-      describes the object's type and the number of elements that it
-      contains.
-    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      So, a hash table is a uvector, as is a string, a standard
-      instance, a double-float, a CL array or vector, and so forth.
-    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Some CL objects, like strings and other simple vectors, map in a
-      straightforward way onto the uvector representation. It is easy
-      to understand what happens in such cases. The uvector index
-      corresponds directly to the vector index:
-    </p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-? (defvar *s* "xxxxx")
-*S*
-? (watch *s*)
-"xxxxx"
-? (setf (char *s* 3) #\o)
-&gt; Error: Write to watched uvector "xxxxx" at index 3
-&gt;        Faulting instruction: (movl (% eax) (@ -5 (% r15) (% rcx)))
-&gt; While executing: SET-CHAR, in process listener(1).
-&gt; Type :POP to abort, :R for a list of available restarts.
-&gt; Type :? for other options.
-
-    </pre>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      In the case of more complicated objects (e.g., a hash-table, a
-      standard-instance, a package, etc.), the elements of the uvector
-      are like slots in a structure. It's necessary to know which one
-      of those "slots" contains the data that will be changed when the
-      object is written to.
-    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      As mentioned above, watch knows about arrays, hash-tables, and
-      standard-instances, and will automatically watch the appropriate
-      data-containing element.
-    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      An example might make this clearer.
-    </p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-? (defclass foo ()
-    (slot-a slot-b slot-c))
-#&lt;STANDARD-CLASS FOO&gt;
-? (defvar *a-foo* (make-instance 'foo))
-*A-FOO*
-? (watch *a-foo*)
-#&lt;SLOT-VECTOR #xDB00D&gt;
-;;; Note that WATCH has watched the internal slot-vector object
-? (setf (slot-value *a-foo* 'slot-a) 'foo)
-&gt; Error: Write to watched uvector #&lt;SLOT-VECTOR #xDB00D&gt; at index 1
-&gt;        Faulting instruction: (movq (% rsi) (@ -5 (% r8) (% rdi)))
-&gt; While executing: %MAYBE-STD-SETF-SLOT-VALUE-USING-CLASS, in process listener(1).
-&gt; Type :POP to abort, :R for a list of available restarts.
-&gt; Type :? for other options.
-
-    </pre>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Looking at a backtrace would presumably show what object and
-      slot name were written.
-    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Note that even though the write was to slot-a, the uvector index
-      was 1 (not 0). This is because the first element of a
-      slot-vector is a pointer to the instance that owns the slots. We
-      can retrieve that to look at the object that was modified:
-    </p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-1 &gt; (uvref (write-to-watched-object-object *break-condition*) 0)
-#&lt;FOO #x30004113502D&gt;
-1 &gt; (describe *)
-#&lt;FOO #x30004113502D&gt;
-Class: #&lt;STANDARD-CLASS FOO&gt;
-Wrapper: #&lt;CLASS-WRAPPER FOO #x300041135EBD&gt;
-Instance slots
-SLOT-A: #&lt;Unbound&gt;
-SLOT-B: #&lt;Unbound&gt;
-SLOT-C: #&lt;Unbound&gt;
-1 &gt;
- 
-    </pre>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="watched-unwatch"></a>4.12.2.Â UNWATCH</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_unwatch"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>unwatch</strong></span> object</code>
-              </div>
-              <div class="refentrytitle">
-	Stop monitoring a lisp object for writes.
-      </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40762064"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-    The UNWATCH function ensures that the specified object is in
-    normal, non-monitored memory. If the object is not currently
-    being watched, UNWATCH does nothing and returns NIL. Otherwise,
-    the newly unwatched object is returned.
-  </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="watched-write-to-watched-object"></a>4.12.3.Â WRITE-TO-WATCHED-OBJECT</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="c_write-to-watched-object"></a>
-                <strong>[Condition]</strong>
-                <br></br>
-                <code>WRITE-TO-WATCHED-OBJECT</code>
-              </div>
-              <div class="refentrytitle">
-	Condition signaled when a write to a watched object is attempted.
-      </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40767856"></a>
-                  <div class="header">Discussion:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      This condition is signaled when a watched object is written
-      to. There are three slots of interest:
-    </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">object</span></i>---
-	    The actual object that was the destination of the write.
-	  </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">offset</span></i>---
-	    The byte offset from the tagged object pointer to the
-	    address of the write.
-	  </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">instruction</span></i>---
-	    The disassembled machine instruction that attempted the write.
-	  </p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40774288"></a>
-                  <div class="header">Restarts:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      A few restarts are provided: one will skip over the faulting
-      write instruction and proceed; another offers to unwatch the
-      object and continue.
-    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      There is also an emulate restart. In some common cases, the
-      faulting write instruction can be emulated, enabling the write
-      to be performed without having to unwatch the object (and
-      therefore let other threads potentially write to it). If the
-      faulting instruction isn't recognized, the emulate restart will
-      not be offered.
-    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="watch-notes"></a>4.12.4.Â Notes</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  Although some care has been taken to minimize potential problems
-  arising from watching and unwatching objects from multiple
-  threads, there may well be subtle race conditions present that
-  could cause bad behavior.
-</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  For example, suppose that a thread attempts to write to a watched
-  object. This causes the operating system to generate an
-  exception. The lisp kernel figures out what the exception is, and
-  calls back into lisp to signal the write-to-watched-object
-  condition and perhaps handle the error.
-</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  Now, as soon lisp code starts running again (for the callback),
-  it's possible that some other thread could unwatch the very
-  watched object that caused the exception, perhaps before we even
-  have a chance to signal the condition, much less respond to it.
-</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  Having the object unwatched out from underneath a handler may at
-  least confuse it, if not cause deeper trouble. Use caution with
-  unwatch.
-</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="watch-examples"></a>4.12.5.Â Examples</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  Here are a couple more examples in addition to the above examples
-  of watching a string and a standard-instance.
-</p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp40781184"></a>4.12.5.1.Â Fancy arrays</h4>
-                  </div>
-                </div>
-              </div>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-?  (defvar *f* (make-array '(2 3) :element-type 'double-float))
-*F*
-? (watch *f*)
-#(0.0D0 0.0D0 0.0D0 0.0D0 0.0D0 0.0D0)
-;;; Note that the above vector is the underlying data-vector for the array
-? (setf (aref *f* 1 2) pi)
-&gt; Error: Write to watched uvector #&lt;VECTOR 6 type DOUBLE-FLOAT, simple&gt; at index 5
-&gt;        Faulting instruction: (movq (% rax) (@ -5 (% r8) (% rdi)))
-&gt; While executing: ASET, in process listener(1).
-&gt; Type :POP to abort, :R for a list of available restarts.
-&gt; Type :? for other options.
-1 &gt; 
-  </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-    In this case, uvector index in the report is the row-major index
-    of the element that was written to.
-  </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp40783488"></a>4.12.5.2.Â Hash tables</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-    Hash tables are surprisingly complicated. The representation of a
-    hash table includes an element called a hash-table-vector. The
-    keys and values of the elements are stored pairwise in this
-    vector.
-  </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-    One problem with trying to monitor hash tables for writes is that
-    the underlying hash-table-vector is replaced with an entirely new
-    one when the hash table is rehashed. A previously-watched
-    hash-table-vector will not be the used by the hash table after
-    rehashing, and writes to the new vector will not be caught.
-  </p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (defvar *h* (make-hash-table))
-*H*
-? (setf (gethash 'noise *h*) 'feep)
-FEEP
-? (watch *h*)
-#&lt;HASH-TABLE-VECTOR #xDD00D&gt;
-;;; underlying hash-table-vector
-? (setf (gethash 'noise *h*) 'ding)
-&gt; Error: Write to watched uvector #&lt;HASH-TABLE-VECTOR #xDD00D&gt; at index 35
-&gt;        Faulting instruction: (lock)
-&gt;          (cmpxchgq (% rsi) (@ (% r8) (% rdx)))
-&gt; While executing: %STORE-NODE-CONDITIONAL, in process listener(1).
-&gt; Type :POP to abort, :R for a list of available restarts.
-&gt; Type :? for other options.
-;;; see what value is being replaced...
-1 &gt; (uvref (write-to-watched-object-object *break-condition*) 35)
-FEEP
-;;; backtrace shows useful context
-1 &gt; :b
-*(1A109F8) : 0 (%STORE-NODE-CONDITIONAL ???) NIL
- (1A10A50) : 1 (LOCK-FREE-PUTHASH NOISE #&lt;HASH-TABLE :TEST EQL size 1/60 #x30004117D47D&gt; DING) 653
- (1A10AC8) : 2 (CALL-CHECK-REGS PUTHASH NOISE #&lt;HASH-TABLE :TEST EQL size 1/60 #x30004117D47D&gt; DING) 229
- (1A10B00) : 3 (TOPLEVEL-EVAL (SETF (GETHASH # *H*) 'DING) NIL) 709
- ...
-  </pre>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp40787120"></a>4.12.5.3.Â Lists</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-    As previously mentioned, WATCH only watches individual cons cells.
-  </p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (defun watch-list (list)
-    (maplist #'watch list))
-WATCH-LIST
-? (defvar *l* (list 1 2 3))
-*L*
-? (watch-list *l*)
-((1 2 3) (2 3) (3))
-? (setf (nth 2 *l*) 'foo)
-&gt; Error: Write to the CAR of watched cons cell (3)
-&gt;        Faulting instruction: (movq (% rsi) (@ 5 (% rdi)))
-&gt; While executing: %SETNTH, in process listener(1).
-&gt; Type :POP to abort, :R for a list of available restarts.
-&gt; Type :? for other options.
-  </pre>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="code-coverage"></a>4.13.Â Code Coverage</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="code-coverage-overview"></a>4.13.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  In Clozure CL 1.4 and later, code coverage provides information
-  about which paths through generated code have been executed and
-  which haven't. For each source form, it can report one of three
-  possible outcomes:
-</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-      Not covered: this form was never entered.
-    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-      Partly covered: This form was entered, and some parts were
-      executed and some weren't.
-    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-      Fully covered: Every bit of code generated from this form was
-      executed.
-    </p>
-                </li>
-              </ul>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="code-coverage-limitations"></a>4.13.2.Â Limitations</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  While the information gathered for coverage of generated code is
-  complete and precise, the mapping back to source forms is of
-  necessity heuristic, and depends a great deal on the behavior of
-  macros and the path of the source forms through compiler
-  transforms. Source information is not recorded for variables, which
-  further limits the source mapping. In practice, there is often
-  enough information scattered about a partially covered function to
-  figure out which logical path through the code was taken and which
-  wasn't. If that doesn't work, you can try disassembling to see which
-  parts of the compiled code were not executed: in the disassembled
-  code there will be references to #&lt;CODE-NOTE [xxx] ...&gt; where xxx
-  is NIL if the code that follows was never executed and non-NIL if it
-  was.
-</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  Sometimes the situation can be improved by modifying macros to try
-  to preserve more of the input forms, rather than destructuring and
-  rebuilding them.
-</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  Because the code coverage information is associated with compiled
-  functions, code coverage information is not available for load-time toplevel
-  expressions.  You can work around this by creating a function and calling
-  it. I.e. instead of
-  </p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(progn
-  (do-this)
-  (setq that ...) ...))</pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  do:
-  </p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defun init-this-and-that ()
-  (do-this)
-  (setq that ...)  ...)
-(init-this-and-that)</pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-
-Then you can see the coverage information in the definition of
-<code class="literal">init-this-and-that</code>.
-</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="code-coverage-usage"></a>4.13.3.Â Usage</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  In order to gather code coverage information, you first have to
-  recompile all your code to include code coverage
-  instrumentation. Compiling files will generate code coverage
-  instrumentation if <code class="literal">CCL:*COMPILE-CODE-COVERAGE*</code>
-  is true:
-  </p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(setq ccl:*compile-code-coverage* t) 
-(recompile-all-your-files)</pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  The compilation process will be many times slower than normal, and
-  the fasl files will be many times bigger.
-</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  When you execute functions loaded from instrumented fasl files, they
-  will record coverage information every time they are executed. 
-  You can examine that information by calling <code class="literal">ccl:report-coverage</code>
-  or <code class="literal">ccl:coverage-statistics</code>.
-</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-   While recording coverage, you can collect incremental coverage deltas between any two points
-   in time.  You might do this while running a test suite, to record the coverage for
-   each test, for example:
-  </p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(ccl:reset-incremental-coverage)
-(loop with coverage = (make-hash-table)
-      for test in (tests-to-run)
-      do (run-test test)
-      do (setf (gethash test coverage) (ccl:get-incremental-coverage))
-      finally (return coverage))</pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">creates a hash table mapping a test to a representation of all coverage recorded while running the
-   test.  This hash table can then be passed to <code class="literal">ccl:report-coverage</code>, <code class="literal">ccl:incremental-coverage-svn-matches</code>
-   or <code class="literal">ccl:incremental-coverage-source-matches</code>.
-</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="code-coverage-functions-and-variables"></a>4.13.4.Â Functions and Variables</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-  The following functions can be used to manage the coverage data:
-</p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_report-coverage"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>report-coverage</strong></span> output-file <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em>
-    (tags nil) (external-format :default) (statistics t) (html t)
-    </code>
-              </div>
-              <div class="refentrytitle">Generate a code coverage report</div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40815232"></a>
-                  <div class="header">Arguments and Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">output-file</span></i>---
-          Pathname for the output index file.
-	</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">html</span></i>---
-	  If non-nil (the default), this will generate an HTML report, consisting of
-	  an index file in <em xmlns="http://www.w3.org/1999/xhtml" class="varname">output-file</em> and, in the same directory,
-          one html file for each instrumented source file that has been loaded in the
-          current session.
-	</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">tags</span></i>---
-	  If non-nil, this should be a hash table mapping arbitrary keys (tags) to incremental coverage deltas.  The
-          HTML report will show a list of tags, and allow selection of an arbitrary subset of them to show the
-          coloring and statistics for coverage by that subset.
-	</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">external-format</span></i>---
-	  Controls the external format of the html files.
-	</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">statistics</span></i>---
-	  If non-nil (the default), a comma-separated file is 
-	  generated with the summary of statistics. You can specify a
-	  filename for the statistics argument, otherwise
-	  "statistics.csv" is created in the directory of <em xmlns="http://www.w3.org/1999/xhtml" class="varname">output-file</em>.
-          See documentation of coverage-statistics below for a
-	  description of the values in the statistics file.
-	</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40825648"></a>
-                  <div class="header">Example:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      If you've loaded <code class="filename">foo.lx64fsl</code> and
-      <code class="filename">bar.lx64fsl</code>, and have run some tests, you could
-      do
-    </p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(REPORT-COVERAGE "/my/dir/coverage/report.html")
-    </pre>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-    and this would generate <code class="filename">report.html</code>,
-    <code class="filename">foo_lisp.html</code> and
-    <code class="filename">bar_lisp.html</code>, and
-    <code class="filename">statistics.csv</code> all in
-    <code class="filename">/my/dir/coverage/</code>.
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_reset-coverage"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>RESET-COVERAGE</code>
-              </div>
-              <div class="refentrytitle">
-      Resets all coverage data back to the "Not Executed" state
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40835152"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Resets all coverage data back to the "Not Executed" state
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_clear-coverage"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>CLEAR-COVERAGE</code>
-              </div>
-              <div class="refentrytitle">
-      Forget about all instrumented files that have been loaded.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40839744"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Gets rid of the information about which instrumented files have
-      been loaded, so <code class="literal">ccl:report-coverage</code> will not report any files,
-      and <code class="literal">ccl:save-coverage-in-file</code> will not save any info, until more
-      instrumented files are loaded.
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_save-coverage-in-file"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>save-coverage-in-file</strong></span> pathname
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Save all coverage into to a file so you can restore it later.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40847232"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Saves all coverage info in a file, so you can restore the
-      coverage state later. This allows you to combine multiple runs
-      or continue in a later session. Equivalent to
-      <code class="literal">(ccl:write-coverage-to-file (ccl:get-coverage) pathname)</code>.
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_restore-coverage-from-file"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>restore-coverage-from-file</strong></span> pathname
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Load coverage state from a file.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40854080"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Restores the coverage data previously saved with
-      ccl:save-coverage-in-file, for the set of instrumented fasls
-      that were loaded both at save and restore time. I.e. coverage
-      info is only restored for files that have been loaded in this
-      session. For example if in a previous session you had loaded
-      <code class="filename">"foo.lx86fsl"</code> and then saved the coverage info, in this session
-      you must load the same <code class="filename">"foo.lx86fsl"</code> before calling
-      <code class="literal">restore-coverage-from-file</code> in order to retrieve the stored
-      coverage info for "foo".  Equivalent to <code class="literal">(ccl:restore-coverage
-      (ccl:read-coverage-from-file pathname))</code>.
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_get-coverage"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>GET-COVERAGE</code>
-              </div>
-              <div class="refentrytitle">
-      Returns a snapshot of the current coverage data.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40861712"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Returns a snapshot of the current coverage data. A snapshot is a
-      copy of the current coverage state. It can be saved in a file
-      with <code class="literal">ccl:write-coverage-to-file</code>, reinstated back as the current
-      state with <code class="literal">ccl:restore-coverage</code>, or combined with other
-      snapshots with <code class="literal">ccl:combine-coverage</code>.
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_restore-coverage"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>restore-coverage</strong></span> snapshot
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Reinstalls a coverage snapshot as the current coverage state.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40869776"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Reinstalls a coverage snapshot as the current coverage state.
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_combine-coverage"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>combine-coverage</strong></span> snapshots
-     </code>
-              </div>
-              <div class="refentrytitle">
-      Combines multiple coverage snapshots into one.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40875888"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Takes a list of coverage snapshots and returns a new coverage snapshot
-      representing a union of all the coverage data.
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_write-coverage-to-file"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>write-coverage-to-file</strong></span> snapshot pathname
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Save a coverage snapshot in a file.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40881968"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Saves the coverage snapshot in a file. The snapshot can be
-      loaded back with <code class="literal">ccl:read-coverage-from-file</code> or loaded and
-      restored with <code class="literal">ccl:restore-coverage-from-file</code>. Note that the file
-      created is actually a lisp source file and can be compiled for
-      faster loading.
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_read-coverage-from-file"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>read-coverage-from-file</strong></span> pathname
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Return the coverage snapshot saved in a file.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40889472"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Returns the snapshot saved in pathname. Doesn't affect the
-      current coverage state. pathname can be the file previously
-      created with <code class="literal">ccl:write-coverage-to-file</code> or
-      <code class="literal">ccl:save-coverage-in-file</code>, or it can be the name of the fasl
-      created from compiling such a file.
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_coverage-statistics"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>coverage-statistics</strong></span>
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Returns a sequence of ccl:coverage-statistics objects, one per source file.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40897536"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Returns a sequence of <code class="literal">ccl:coverage-statistics</code> objects, one for each
-      source file, containing the same information as that written to
-      the statistics file by <code class="literal">ccl:report-coverage</code>. The following
-      accessors are defined for <code class="literal">ccl:coverage-statistics</code> objects:
-      </p>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                    <dl>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-source-file</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the name of the source file corresponding to this information
-	  </p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-expressions-total</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the total number of expressions
-	  </p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-expressions-entered</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the number of source expressions that have been entered
-	    (i.e. at least partially covered)
-	  </p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-expressions-covered</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the number of source expressions that were fully covered
-	  </p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-unreached-branches</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the number of conditionals with one branch taken and one not taken
-	  </p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-code-forms-total</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the total number of code forms. A code form is an
-	    expression in the final stage of compilation, after all
-	    macroexpansion and compiler transforms and simplification
-	  </p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-code-forms-covered</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the number of code forms that have been entered
-	  </p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-functions-total</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the total number of functions
-	  </p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-functions-fully-covered</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the number of functions that were fully covered
-	  </p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-functions-partly-covered</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the number of functions that were partly covered
-	  </p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <span class="function">
-                            <strong>coverage-functions-not-entered</strong>
-                          </span>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>
-	    the number of functions never entered
-	  </p>
-                      </dd>
-                    </dl>
-                  </div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_reset-incremental-coverage"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>reset-incremental-coverage</strong></span>
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Reset incremental coverage.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40927632"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Marks a starting point for recording incremental coverage.
-      Note that calling
-      this function does not affect regular coverage data (whereas calling
-      <code class="literal">ccl:reset-coverage</code> resets incremental coverage as well).
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_get-incremental-coverage"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>get-incremental-coverage</strong></span> <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> (reset t)
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Returns the delta of coverage since the last incremental reset.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40934864"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Returns the delta of coverage since the last reset of incremental coverage.
-     If <code class="literal">reset</code> is true (the default), it also resets incremental coverage
-     now, so that the next call to <code class="literal">get-incremental-coverage</code> will return
-     the delta from this point.
-     </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      Incremental coverage deltas are represented differently than the full coverage snapshots
-      returned by functions such as <code class="literal">ccl:get-coverage</code>.  Incremental
-      coverage uses an abbreviated format
-      and is missing some of the information in a full snapshot, and therefore cannot be passed to
-      functions documented to accept a <em class="varname">snapshot</em>, only to functions
-      specifically documented to accept incremental coverage deltas.
-     </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_incremental-coverage-source-matches"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>incremental-coverage-source-matches</strong></span> collection sources
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Find incremental coverage deltas intersecting source regions.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40944224"></a>
-                  <div class="header">Arguments and Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">collection</span></i>---
-          A hash table mapping arbitrary keys to incremental coverage deltas, or a sequence of
-          incremental coverage deltas.
-         </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">sources</span></i>---
-          A list of pathnames and/or source-notes, the latter representing a range within a file.
-         </p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40948608"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-     Given a hash table <code class="literal">collection</code> whose values are incremental coverage
-     deltas, return a list of all keys corresponding to those deltas that intersect any region
-     in <code class="literal">sources</code>.
-     </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-     For example if the deltas represent tests, then the returned value is a list of all tests
-     that cover some part of the source regions.
-     </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-     <code class="literal">collection</code> can also be a sequence of deltas, in which case a subsequence
-      of matching deltas is returned.  In particular you can test whether any particular delta
-      intersects the sources by passing it in as a single-element list.
-     </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_incremental-coverage-svn-matches"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>incremental-coverage-svn-matches</strong></span> collection <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> (directory (current-directory)) (revision :base)
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Find incremental coverage deltas matching changes from a particular subversion revision.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40958256"></a>
-                  <div class="header">Arguments and Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">collection</span></i>---
-          A hash table mapping arbitrary keys to incremental coverage deltas, or a sequence of
-          incremental coverage deltas.
-         </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">directory</span></i>---
-          The pathname of a subversion working directory.
-         </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">revision</span></i>---
-          The revision to compare to the working directory, an integer or another
-          value whose printed representation is suitable for passing as the
-          <code xmlns="http://www.w3.org/1999/xhtml" class="literal">--revision</code> argument
-          to <code xmlns="http://www.w3.org/1999/xhtml" class="filename">svn</code>.
-         </p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40965568"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-     Given a hash table <code class="literal">collection</code> whose values are incremental coverage
-     deltas, return a list of all keys corresponding to those deltas that intersect any changed
-     source in <code class="literal">directory</code> since revision <code class="literal">revision</code> in subversion.
-     </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-     For example if the deltas represent tests, then the returned value is a list of all tests
-     that might be affected by the changes.
-     </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-     <code class="literal">collection</code> can also be a sequence of deltas, in which case a subsequence
-      of matching deltas is returned.  In particular you can test whether any particular delta
-      is affected by the changes by passing it in as a single-element list.
-     </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_compile-code-coverage"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code><em xmlns="http://www.w3.org/1999/xhtml" class="varname">*compile-code-coverage*</em>
-    </code>
-              </div>
-              <div class="refentrytitle">
-      When true, instrument functions being compiled to collect code coverage information.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40975216"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      This variable controls whether functions are instrumented for
-      code coverage. Files compiled while this variable is true will
-      contain code coverage instrumentation.
-    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_without-compiling-code-coverage"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>without-compiling-code-coverage</strong></span>
-    </code>
-              </div>
-              <div class="refentrytitle">
-      Don't record code coverage for forms within the body.
-    </div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp40981440"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-      This macro arranges so that body doesn't record internal details
-      of code coverage. It will be considered totally covered if it's
-      entered at all. The Common Lisp macros <code class="literal">ASSERT</code> and <code class="literal">CHECK-TYPE</code> use
-      this macro.
-    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="code-coverage-interpreting-code-coloring"></a>4.13.5.Â Interpreting Code Coloring</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-
- The output of ccl:report-coverage consists of formatted source code, with coverage indicated by
- coloring.  Four colors are used: dark green for forms that compiled to code in which every single
- instruction was executed, light green for forms that have been entered but weren't totally covered, red
- for forms that were never entered, and the page background color for toplevel forms that weren't
- instrumented.
-
-</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
- The source coloring is applied from outside in.  So for example if you have
-
-  </p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(outer-form ... (inner-form ...) ...)
-  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-
- first the whole outer form is painted with whatever color expresses the outer form coverage, and then the
- inner form color is replaced with whatever color expresses the inner form coverage.  One consequence of
- this approach is that every part of the outer form that is not specifically inside some executable inner
- form will have the outer form's coverage color. If the syntax of outer form involves some non-executable
- forms, or forms that do not have coverage info of their own for whatever reason, then they will just
- inherit the color of the outer form, because they don't get repainted with a color of their own.
-</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
- One case in which this approach can be confusing is in the case of symbols.  As noted in the Limitations
- section, coverage information is not recorded for variables; hence the coloring of a variable does not
- convey information about whether the variable was evaluated or not -- that information is not available,
- and the variable just inherits the color of the form that contains it.
-</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="other-extensions"></a>4.14.Â Other Extensions</h2>
-              </div>
-            </div>
-          </div>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_quit"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>quit</strong></span> <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> (exit 0) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> error-handler
-    </code>
-            </div>
-            <div class="refentrytitle">
-      Cleanly exit the lisp.
-    </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40994832"></a>
-                <div class="header">Summary:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-      Cleanly exit from lisp.  If the exit argument is a value of type
-      (signed-byte 32), that value will be passed to the C library
-      function _exit() as the status code.  (A value of nil is treated
-      as a zero.)
-    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-      Alternatively, exit may be a function of no arguments;  this function
-      will be called instead of _exit() to exit the lisp.
-    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-      The error-handler argument, if supplied, must be a function of one
-      argument, the condition, that will be called if an error occurs when
-      preparing to quit.  The error-handler function should exit the lisp.
-    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_wait-for-signal"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>wait-for-signal</strong></span> s duration
-    </code>
-            </div>
-            <div class="refentrytitle">
-      Wait for a particular signal to be received.
-    </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41002272"></a>
-                <div class="header">Summary:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-      Wait for the signal with signal number s to be received, or until
-      duration seconds have elapsed.  If duration is nil, wait for an
-      indeterminate "very long time" (many years).
-    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-      If signal number s is outside the range of valid signals, or is
-      reserved by the lisp for its own use, an error is signaled.
-      (An error is always signaled on Windows systems.)
-    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_unwind-protect"></a>
-              <strong>[Special operator]</strong>
-              <br></br>
-              <code>
-      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>unwind-protect</strong></span> protected-form {cleanup-form}*
-    </code>
-            </div>
-            <div class="refentrytitle">
-      Ensure cleanup-forms are executed.
-    </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41009136"></a>
-                <div class="header">Summary:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-      In Clozure CL, the cleanup forms are always executed as if they were
-      wrapped with <a class="xref" href="#m_without-interrupts" title="Macro WITHOUT-INTERRUPTS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">without-interrupts</b></a>.
-      To allow interrupts, use
-      <a class="xref" href="#m_with-interrupts-enabled" title="Macro WITH-INTERRUPTS-ENABLED"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-interrupts-enabled</b></a>.
-    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_disassemble-verbose"></a>
-              <strong>[Variable]</strong>
-              <br></br>
-              <code>*disassemble-verbose*</code>
-            </div>
-            <div class="refentrytitle">
-      When true, display verbose disassembly output.
-    </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41014752"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-      When true, the output of <code class="literal">disassemble</code> may
-      include platform-dependent additional information.  For
-      instance, on the x86 ports, the output will include the x86
-      opcode bytes.
-    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-      The default value is <code class="literal">nil</code>.
-    </p>
-              </div>
-            </div>
-          </p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="ccl-ide"></a>ChapterÂ 5.Â The Clozure CL IDE</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#ccl-ide-introduction">5.1. Introduction</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#building-ccl-ide">5.2. Building the IDE</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#running-ccl-ide">5.3. Running the IDE</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#ccl-ide-features">5.4. IDE Features</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#ide-editor-windows">5.4.1. Editor Windows</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#ide-lisp-menu">5.4.2. The Lisp Menu</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#ide-tools-menu">5.4.3. The Tools Menu</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#ide-inspector-window">5.4.4. The Inspector Window</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#ide-source-code">5.5. IDE Sources</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#application-builder">5.6. The Application Builder</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#running-the-application-builder-from-command-line">5.6.1. Running the Application Builder From the Command
-      Line</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="ccl-ide-introduction"></a>5.1.Â Introduction</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL ships with the complete source code for an integrated
-    development environment written using Cocoa on Mac OS X. This
-    chapter describes how to build and use that environment,
-    referred to hereafter simply as "the IDE".</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The IDE provides a programmable text editor, listener
-      windows, an inspector for Lisp data structures, and a means of
-      easily building a Cocoa application in Lisp. In addition, its
-      source code provides an example of a fairly complex Cocoa
-      application written in Lisp.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The current version of the IDE has seen the addition of numerous
-    features and many bugfixes. Although it's by no means a finished product,
-    we hope it will prove more useful than previous versions, and we
-    plan additional work on the IDE for future releases.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="building-ccl-ide"></a>5.2.Â Building the IDE</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Building the Clozure CL IDE is now a very simple
-      process.</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-            <ol class="orderedlist" type="1">
-              <li class="listitem">
-                <p>In a shell session, cd to the ccl directory.</p>
-              </li>
-              <li class="listitem">
-                <p>Run ccl from the shell. The easiest way to do this is
-          generally to execute the ccl or ccl64 command.</p>
-              </li>
-              <li class="listitem">
-                <p>Evaluate the form <code class="code">(require :cocoa-application)</code></p>
-              </li>
-            </ol>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">For example, assuming that the Clozure CL distribution is
-      installed in "/usr/local/ccl", the following sequence of shell
-      interactions builds the IDE:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-oshirion:ccl mikel$ ccl64
-Welcome to Clozure Common Lisp Version 1.2-r9198M-trunk  (DarwinX8664)!
-? (require :cocoa-application)
-;Loading #P"ccl:cocoa-ide;fasls;cocoa-utils.dx64fsl.newest"...
-;Loading #P"ccl:cocoa-ide;fasls;cocoa-defaults.dx64fsl.newest"...
-
-[...many lines of "Compiling" and "Loading" omitted...]
-
-Saving application to /usr/local/ccl/Clozure CL.app/
-
-oshirion:ccl mikel$ 
-
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL compiles and loads the various subsystems that
-      make up the IDE, then constructs a Cocoa application bundle
-      named "Clozure CL.app" and saves the Lisp image into
-      it. Normally Clozure CL creates the application bundle in the root
-      directory of the Clozure CL distribution.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="running-ccl-ide"></a>5.3.Â Running the IDE</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">After it has been built, you can run the "Clozure CL.app"
-      application normally, by double-clicking its icon. When
-      launched, the IDE initially displays a
-      single <a class="glossterm" href="#listener_window"><em class="glossterm">listener
-        window</em></a> that you can use to interact with Lisp. You
-      can type Lisp expressions for evaluation at the prompt in the
-      listener window. You can also
-      use <a class="glossterm" href="#hemlock"><em class="glossterm">Hemlock</em></a> editing
-      commands to edit the text of expressions in the listener
-      window.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="ccl-ide-features"></a>5.4.Â IDE Features</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="ide-editor-windows"></a>5.4.1.Â Editor Windows</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">You can open an editor window either by choosing Open from
-        the File menu and then selecting a text file, or by choosing
-        New from the File menu. You can also evaluate the
-        expression <code class="code">(ed)</code> in the listener window; in that
-        case Clozure CL creates a new window as if you had chosen New from
-        the File menu.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Editor windows
-        implement <a class="glossterm" href="#hemlock"><em class="glossterm">Hemlock</em></a>
-        editing commands. You can use all the editing and customization
-        features of Hemlock within any editor window (including listener
-        windows).</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="ide-lisp-menu"></a>5.4.2.Â The Lisp Menu</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The Lisp menu provides several commands for interacting
-        with the running Lisp session, in addition to the ways you can
-        interact with it by evaluating expressions. You can evaluate a
-        selected range of text in any editing buffer. You can compile
-        and load the contents of editor windows (please note that in the
-        current version, Clozure CL compiles and loads the contents of the
-        file associated with an editor window; that means that if you
-        try to load or compile a window that has not been saved to a
-        file, the result is an error).</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">You can interrupt computations, trigger breaks, and select
-        restarts from the Lisp menu. You can also display a backtrace or
-        open the <a class="link" href="#section_inspector_window">Inspector
-          window</a>.</p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp38362144"></a>5.4.2.1.Â Checking for Updates</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">At the bottom of the Lisp menu is an item entitled
-        "Check for Updates". If your copy of Clozure CL came from the
-        Clozure Subversion server (which is the preferred source), and
-        if your internet connection is working, then you can select
-        this menu item to check for updates to your copy of
-        Clozure CL.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">When you select "Check for Updates", Clozure CL uses the svn
-        program to query the Clozure Subversion repository and
-        determine whether new updates to Clozure CL are available. (This
-        means that on Mac OS X versions earlier than 10.5, you must
-        ensure that the Subversion client software is installed before
-        using the "Check for Updates" feature. See
-        the <a class="ulink" href="http://www.wikihow.com/Install-Subversion-on-Mac-OS-X" target="_top">wikiHow
-        page</a> on installing Subversion for more information.)
-        If updates are available, Clozure CL automatically downloads and
-        installs them. After a successful download, Clozure CL rebuilds
-        itself, and then rebuilds the IDE on the newly-rebuilt
-        Lisp. Once this process is finished, you should quit the
-        running IDE and start the newly built one (which will be in
-        the same place that the old one was).</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">Normally, Clozure CL can install updates and rebuild itself
-        without any problems. Occasionally, an unforeseen problem
-        (such as a network outage, or a hardware failure) might
-        interrupt the self-rebuilding process, and leave your copy of
-        Clozure CL unusable. If you are expecting to update your copy of
-        Clozure CL frequently, it might be prudent to keep a backup copy of
-        your working environment ready in case of such
-        situtations. You can also always obtain a full, fresh copy of
-        Clozure CL from Clozure's repository..</p>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="ide-tools-menu"></a>5.4.3.Â The Tools Menu</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The tools menu provides access to the Apropos and
-        Processes windows. The Apropos window searches the running Lisp
-        image for symbols that match any text you enter. You can use the
-        Apropos window to quickly find function names and other useful
-        symbols. The Processes window lists all threads running in the
-        current Lisp session. If you double-click a process entry, Clozure CL
-        opens an <a class="link" href="#section_inspector_window">Inspector
-          window</a> on that process.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="ide-inspector-window"></a>5.4.4.Â The Inspector Window</h3>
-                </div>
-              </div>
-            </div>
-            <a xmlns="http://www.w3.org/1999/xhtml" id="section_inspector_window"></a>
-            <p xmlns="http://www.w3.org/1999/xhtml">The Inspector window displays information about a Lisp
-        value. The information displayed varies from the very simple, in
-        the case of a simple data value such as a character, to the
-        complex, in the case of structured data such as lists or CLOS
-        objects. The left-hand column of the window's display shows the
-        names of the object's attributes; the righthand column shows the
-        values associated with those attributes. You can inspect the
-        values in the righthand column by double-clicking them.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Inspecting a value in the righthand column changes the
-        Inspector window to display the double-clicked object. You can
-        quickly navigate the fields of structured data this way,
-        inspecting objects and the objects that they refer
-        to. Navigation buttons at the top left of the window enable you
-        to retrace your steps, backing up to return to previously-viewed
-        objects, and going forward again to objects you navigated into
-        previously.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">You can change the contents of a structured object by
-        evaluating expressions in a listener window. The refresh button
-        (marked with a curved arrow) updates the display of the
-        Inspector window, enabling you to quickly see the results of
-        changing a data structure.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="ide-source-code"></a>5.5.Â IDE Sources</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL builds the IDE from sources in the "objc-bridge" and
-      "cocoa-ide" directories in the Clozure CL distribution. The IDE as a
-      whole is a relatively complicated application, and is probably not
-      the best place to look when you are first trying to understand how
-      to build Cocoa applications. For that, you might benefit more from
-      the examples in the "examples/cocoa/" directory. Once you are
-      familiar with those examples, though, and have some experience
-      building your own application features using Cocoa and the
-      Objective-C bridge, you might browse through the IDE sources to
-      see how it implements its features.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The search path for Clozure CL's <code class="code">REQUIRE</code> feature
-      includes the "objc-bridge" and "cocoa-ide" directories. You can
-      load features defined in these directories by
-      using <code class="code">REQUIRE</code>. For example, if you want to use the
-      Cocoa features of Clozure CL from a terminal session (or from an Emacs
-      session using SLIME or ILISP), you can evaluate <code class="code">(require
-        :cocoa)</code>.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="application-builder"></a>5.6.Â The Application Builder</h2>
-              </div>
-            </div>
-          </div>
-          <a xmlns="http://www.w3.org/1999/xhtml" id="application_builder"></a>
-          <p xmlns="http://www.w3.org/1999/xhtml">One important feature of the IDE currently has no Cocoa user
-      interface: the application builder. The application builder
-      constructs a
-      Cocoa <a class="glossterm" href="#application_bundle"><em class="glossterm">application
-        bundle</em></a> that runs a Lisp image when double-clicked. You
-      can use the application builder to create Cocoa applications in
-      Lisp. These applications are exactly like Cocoa applications
-      created with XCode and Objective-C, except that they are written
-      in Lisp.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">To make the application builder available, evaluate the
-      expression <code class="code">(require :build-application)</code>. Clozure CL loads
-      the required subsystems, if necessary.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      <a id="idp35140992" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="build-application"></a>BUILD-APPLICATION</em> <em class="varname">&amp;key</em>
-        (<em class="parameter"><code>name</code></em> <em class="replaceable"><code>"MyApplication"</code></em>)
-        (<em class="parameter"><code>type-string</code></em> <em class="replaceable"><code>"APPL"</code></em>)
-        (<em class="parameter"><code>creator-string</code></em> <em class="replaceable"><code>"OMCL"</code></em>)
-        (<em class="parameter"><code>directory</code></em> <em class="replaceable"><code>(current-directory)</code></em>)
-        (<em class="parameter"><code>copy-ide-resources</code></em> <em class="replaceable"><code>t</code></em>)
-        (<em class="parameter"><code>info-plist</code></em> <em class="replaceable"><code>NIL</code></em>)
-        (<em class="parameter"><code>nibfiles</code></em> <em class="replaceable"><code>NIL</code></em>)
-        (<em class="parameter"><code>main-nib-name</code></em> <em class="replaceable"><code>NIL</code></em>)
-        (<em class="parameter"><code>application-class</code></em> <em class="replaceable"><code>'GUI::COCOA-APPLICATION</code></em>)
-        (<em class="parameter"><code>toplevel-function</code></em> <em class="replaceable"><code>NIL</code></em>)
-        [Function]</strong></span>
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      The <em class="varname">build-application</em> function constructs an
-      application bundle, populates it with the files needed to satisfy
-      Mac OS X that the bundle is a launchable application, and saves an
-      executable Lisp image to the proper subdirectory of the
-      bundle. Assuming that the saved Lisp image contains correct code,
-      a user can subsequently launch the resulting Cocoa application by
-      double-clicking its icon in the Finder, and the saved Lisp
-      environment runs.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The keyword arguments control various aspects of application
-      bundle as <code class="code">BUILD-APPLICATION</code> builds it.</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-            <dl>
-              <dt>
-                <span class="term">
-                  <em class="varname">name</em>
-                </span>
-              </dt>
-              <dd>
-                <p>Specifies the application name of the
-            bundle. <code class="code">BUILD-APPLICATION</code> creates an application
-            bundle whose name is given by this parameter, with the
-            extension ".app" appended. For example, using the default
-            value for this parameter results in a bundle named
-            "MyApplication.app".</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">type-string</em>
-                </span>
-              </dt>
-              <dd>
-                <p>Specifies type of bundle to create. You should normally
-            never need to change the default value, which Mac OS X uses to
-            identify application bundles.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">creator-string</em>
-                </span>
-              </dt>
-              <dd>
-                <p>Specifies the <a class="glossterm" href="#creator_code"><em class="glossterm">creator
-              code</em></a>, which uniquely identifies the application
-            under Mac OS X. The default creator code is that of Clozure CL. For
-            more information about reserving and assigning creator codes,
-            see
-            Apple's <a class="ulink" href="http://developer.apple.com/datatype/index.html" target="_top">developer
-              page</a> on the topic.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">directory</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The directory in which <code class="code">BUILD-APPLICATION</code>
-            creates the application bundle. By default, it creates the
-            bundle in the current working directory. Unless you
-            use <code class="code">CURRENT-DIRECTORY</code> to set the working
-            directory, the bundle may be created in some unexpected place,
-            so it's safest to specify a full pathname for this argument. A
-            typical value might be <code class="code">"/Users/foo/Desktop/"</code>
-            (assuming, of course, that your username is "foo").</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">copy-ide-resources</em>
-                </span>
-              </dt>
-              <dd>
-                <p>Whether to copy the resource files from the IDE's
-            application bundle. By
-            default, <code class="code">BUILD-APPLICATION</code> copies nibfiles
-            and other resources from the IDE to the newly-created
-            application bundle. This option is often useful when you
-            are developing a new application, because it enables your
-            built application to have a fully-functional user
-            interface even before you have finished designing one. By
-            default, the application uses the application menu and
-            other UI elements of the IDE until you specify
-            otherwise. Once your application's UI is fully
-            implemented, you may choose to pass <code class="literal">NIL</code>
-            for the value of this parameter, in which case the IDE
-            resources are not copied into your application
-            bundle.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">info-plist</em>
-                </span>
-              </dt>
-              <dd>
-                <p>A user-supplied NSDictionary object that defines the
-          contents of the Info.plist file to be written to the
-          application bundle. The default value
-          is <code class="literal">NIL</code>, which specifies that the
-          Info.plist from the IDE is to be used
-          if <em class="replaceable"><code>copy-ide-resources</code></em> is true,
-          and a new dictionary created with default values is to be
-          used otherwise. You can create a suitable NSDictionary
-          object using the
-          function <code class="literal">make-info-dict</code>. For details on
-          the parameters to this function, see its definition in
-          "ccl/cocoa-ide/builder-utilities.lisp".</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">nibfiles</em>
-                </span>
-              </dt>
-              <dd>
-                <p>A list of pathnames, where each pathname identifies
-            a <a class="glossterm" href="#nibfile"><em class="glossterm">nibfile</em></a> created
-            with
-            Apple's <a class="glossterm" href="#InterfaceBuilder"><em class="glossterm">InterfaceBuilder</em></a>
-            application. <code class="code">BUILD-APPLICATION</code> copies each
-            nibfile into the appropriate place in the application bundle,
-            enabling the application to load user-interface elements from
-            them as-needed. It is safest to provide full pathnames to the
-            nibfiles in the list. Each nibfile must be in ".nib" format,
-            not ".xib" format, in order that the application can load
-            it.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">main-nib-name</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The name of
-            the <a class="glossterm" href="#nibfile"><em class="glossterm">nibfile</em></a> to load
-            initially when launching. The user-interface defined in this
-            nibfile becomes the application's main interface. You must
-            supply the name of a suitable nibfile for this parameter, or
-            the resulting application uses the Clozure CL user
-            interface.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">application-class</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The name of the application's CLOS class. The default
-            value is the class provided by Clozure CL for graphical
-            applications. Supply the name of your application class if you
-            implement one. If not, Clozure CL uses the default class.</p>
-              </dd>
-              <dt>
-                <span class="term">
-                  <em class="varname">toplevel-function</em>
-                </span>
-              </dt>
-              <dd>
-                <p>The toplevel function that runs when the application
-            launches. Normally the default value, which is Clozure CL's
-            toplevel, works well, but in some cases you may wish to
-            customize the behavior of the application's toplevel. The best
-            source of information about writing your own toplevel is the
-            Clozure CL source code, especially the implementations
-            of <code class="code">TOPLEVEL-FUNCTION</code> in
-            "ccl/level-1/l1-application.lisp"</p>
-              </dd>
-            </dl>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml"><code class="code">BUILD-APPLICATION</code> creates a folder named
-      "<em class="replaceable"><code>name</code></em>.app" in the
-      directory <em class="replaceable"><code>directory</code></em>. Inside that
-      folder, it creates the "Contents" folder that Mac OS X
-      application bundles are expected to contain, and populates it
-      with the "MacOS" and "Resources" folders, and the "Info.plist"
-      and "PkgInfo" files that must be present in a working
-      application bundle. It takes the contents of the "Info.plist"
-      and "PkgInfo" files from the parameters
-      to <code class="code">BUILD-APPLICATION</code>. If <em class="replaceable"><code>copy-ide-resources</code></em>
-      is true then it copies the contents of the "Resources" folder
-      from the "Resources" folder of the running IDE.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The work needed to produce a running Cocoa application is
-    very minimal. In fact, if you
-    supply <code class="code">BUILD-APPLICATION</code> with a valid nibfile and
-    pathnames, it builds a running Cocoa application that displays
-    your UI. It doesn't need you to write any code at all to do
-    this. Of course, the resulting application doesn't do anything
-    apart from displaying the UI defined in the nibfile. If you want
-    your UI to accomplish anything, you need to write the code to
-    handle its events. But the path to a running application with your
-    UI in it is very short indeed.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Please note that <code class="code">BUILD-APPLICATION</code> is a work in
-    progress. It can easily build a working Cocoa application, but it
-    still has limitations that may in some cases prove
-    inconvenient. For example, in the current version it provides no
-    easy way to specify an application delegate different from the
-    default. If you find the current limitations
-    of <code class="code">BUILD-APPLICATION</code> too restrictive, and want to try
-    extending it for your use, you can find the source code for it in
-    "ccl/cocoa-ide/build-application.lisp". You can see the default
-    values used to populate the "Info.plist" file in
-    "ccl/cocoa-ide/builder-utilities.lisp".</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For more information on how to
-    use <code class="code">BUILD-APPLICATION</code>, see the Currency Converter
-    example in "ccl/examples/cocoa/currency-converter/".</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="running-the-application-builder-from-command-line"></a>5.6.1.Â Running the Application Builder From the Command
-      Line</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">It's possible to automate use of the application builder
-        by running a call to <code class="literal">CCL:BUILD-APPLICATION</code>
-        from the terminal command line. For example, the following
-        command, entered at a shell prompt in Mac OS X's Terminal
-        window, builds a working copy of the Clozure CL environment called
-        "Foo.app":</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-ccl -b -e "(require :cocoa)" -e "(require :build-application)" -e "(ccl::build-application :name \"Foo\")"
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">You can use the same method to automate building your
-      Lisp/Cocoa applications. Clozure CL handles each Lisp expressions
-      passed with a <code class="literal">-e</code> argument in order, so you
-      can simply evaluate a sequence of Lisp expressions as in the
-      above example to build your application, ending with a call
-      to <code class="literal">CCL:BUILD-APPLICATION</code>. The call
-      to <code class="literal">CCL:BUILD-APPLICATION</code> can process all the
-      same arguments as if you evaluated it in a Listener window in
-      the Clozure CL IDE.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Building a substantial Cocoa application (rather than just
-      reproducing the Lisp environment using defaults, as is done in
-      the above example) is likely to involve a relatively complicated
-      sequence of loading source files and perhaps evaluating Lisp
-      forms. You might be best served to place your command line in a
-      shell script that you can more easily edit and test.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">One potentially complicated issue concerns loading all
-        your Lisp source files in the right order. You might consider
-        using ASDF to define and load a system that includes all the
-        parts of your application before
-        calling <code class="literal">CCL:BUILD-APPLICATION</code>. ASDF is a
-        "another system-definition facility", a sort
-        of <code class="literal">make</code> for Lisp, and is included in the
-        Clozure CL distribution. You can read more about ASDF at the ASDF
-        <a class="ulink" href="http://common-lisp.net/project/asdf/" target="_top">home
-        page</a>.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Alternatively, you could use the standard features of
-        Common Lisp to load your application's files in the proper
-        order.</p>
-          </div>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="HemlockProgramming"></a>ChapterÂ 6.Â Hemlock Programming</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingIntroduction">6.1. Introduction</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingRepresentationOfText">6.2. Representation of Text</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Lines">6.2.1. Lines</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Marks">6.2.2. Marks</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Regions">6.2.3. Regions</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingBuffers">6.3. Buffers</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#CurrentBuffer">6.3.1. The Current Buffer</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#BufferFunctions">6.3.2. Buffer  Functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Modelines">6.3.3. Modelines</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingAlteringAndSearchingText">6.4. Altering and Searching Text</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#AlteringText">6.4.1. Altering Text</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#TextPredicates">6.4.2. Text Predicates</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#KillRing">6.4.3. Kill Ring</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#ActiveRegions">6.4.4. Active Regions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#SearchingAndReplacing">6.4.5. Searching and Replacing</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingTheCurrentEnvironment">6.5. The Current Environment</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#DifferentScopes">6.5.1. Different Scopes</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Shadowing">6.5.2. Shadowing</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingHemlockVariables">6.6. Hemlock Variables</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#VariableNames">6.6.1. Variable Names</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#VariableFunctions">6.6.2. Variable Functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Hooks">6.6.3. Hooks</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingCommands">6.7. Commands</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#HemlockProgrammingCommandsIntroduction">6.7.1. Introduction</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#CommandInterpreter">6.7.2. The Command Interpreter</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#CommandTypes">6.7.3. Command Types</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#CommandArguments">6.7.4. Command Arguments</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingModes">6.8. Modes</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#ModeHooks">6.8.1. Mode Hooks</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#MajorAndMinorModes">6.8.2. Major and Minor Modes</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#ModeFunctions">6.8.3. Mode Functions</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingCharacterAttributes">6.9. Character Attributes</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#HemlockProgrammingCharacterAttributesIntroduction">6.9.1. Introduction</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#CharacterAttributeNames">6.9.2. Character Attribute Names</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#CharacterAttributeFunctions">6.9.3. Character Attribute Functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#CharacterAttributeHooks">6.9.4. Character Attribute Hooks</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#SystemDefinedCharacterAttributes">6.9.5. System Defined Character Attributes</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingControllingTheDisplay">6.10. Controlling the Display</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Views">6.10.1. Views</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#CurrentView">6.10.2. The Current View</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#ViewFunctions">6.10.3. View Functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#CursorPositions">6.10.4. Cursor Positions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Redisplay">6.10.5. Redisplay</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingLogicalKeyEvents">6.11. Logical Key-Events</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#HemlockProgrammingLogicalKeyEventsIntroduction">6.11.1. Introduction</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#LogicalKeyEventFunctions">6.11.2. Logical Key-Event Functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#SystemDefinedLogicalKeyEvents">6.11.3. System Defined Logical Key-Events</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingEchoArea">6.12. The Echo Area</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#EchoAreaFunctions">6.12.1. Echo Area Functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#PromptingFunctions">6.12.2. Prompting Functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#ControlOfParsingBehavior">6.12.3. Control of Parsing Behavior</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#DefiningNewPromptingFunctions">6.12.4. Defining New Prompting Functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#SomeEchoAreaCommands">6.12.5. Some Echo Area Commands</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingFiles">6.13. Files</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#FileOptionsAndTypeHooks">6.13.1. File Options and Type Hooks</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#PathnamesAndBuffers">6.13.2. Pathnames and Buffers</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#FileGroups">6.13.3. File Groups</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#FileReadingAndWriting">6.13.4. File Reading and Writing</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingHemlockSLispEnvironment">6.14. Hemlock's Lisp Environment</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#EnteringAndLeavingTheEditor">6.14.1. Entering and Leaving the Editor</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#KeyboardInput">6.14.2. Keyboard Input</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#HemlockStreams">6.14.3. Hemlock Streams</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#InterfaceToTheErrorSystem">6.14.4. Interface to the Error System</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#DefinitionEditing">6.14.5. Definition Editing</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#EventScheduling">6.14.6. Event Scheduling</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Miscellaneous">6.14.7. Miscellaneous</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingHighLevelTextPrimitives">6.15. High-Level Text Primitives</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#IndentingText">6.15.1. Indenting Text</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#LispTextBuffers">6.15.2. Lisp Text Buffers</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#EnglishTextBuffers">6.15.3. English Text Buffers</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#LogicalPages">6.15.4. Logical Pages</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Filling">6.15.5. Filling</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingUtilities">6.16. Utilities</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#StringTableFunctions">6.16.1. String-table Functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#RingFunctions">6.16.2. Ring Functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#UndoingCommands">6.16.3. Undoing commands</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#HemlockProgrammingMiscellaneous">6.17. Miscellaneous</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#KeyEvents">6.17.1. Key-events</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingIntroduction"></a>6.1.Â Introduction</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-Hemlock is the text editor used in Clozure CL.  It was originally based on the <a class="ulink" href="http://www.cons.org/cmucl/hemlock/index.html" target="_top">CMU Hemlock editor</a>, but has since diverged from it in various ways.  We continue to call the editor part of our IDE <code class="code">Hemlock</code> to give credit where credit is due, but we make no attempt at source or API compatibility with the original Hemlock.
-        </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-Like the code, this documentation is based on the original Hemlock documentation, modified as necessary.
-        </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-Hemlock follows in the tradition of Emacs-compatible editors, with a rich set of extensible commands.  This document describes the API for implementing new commands.  The basic editor consists of a set of Lisp utility functions for manipulating buffers and the other data structures of the editor.  All user level commands are written in terms of these 
-functions. To find out how to define commands see <a class="link" href="#HemlockProgrammingCommands" title="6.7.Â Commands">Commands</a>.
-        </p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingRepresentationOfText"></a>6.2.Â Representation of Text</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-In Hemlock, text is represented as a sequence of lines.  Newline characters
-are never stored but are implicit between lines.  The
-implicit newline character is treated as the single character <code class="code">#\Newline</code> by the
-text primitives.
-        </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-Text is broken into lines when it is first introduced into Hemlock.  Text enters
-Hemlock from the outside world in two ways: reading a file, or pasting text
-from the system clipboard.  Hemlock uses heuristics <span class="bold"><strong>(which should be documented here!)</strong></span>
-to decide what newline convention to use to convert the incoming text into its internal
-representation as a sequence of lines.  Similarly it uses heuristics
-<span class="bold"><strong>(which should be documented here!)</strong></span> to convert the internal representation into
-a string with embedded newlines in order to write a file or paste a region into
-the clipboard.
-        </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Lines"></a>6.2.1.Â Lines</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-A <code class="code">line</code> is an object representing a sequence of characters with no line breaks.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_linep"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        linep line 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp35465104"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if line is a line object, otherwise nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line-string"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line-string line 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp35367376"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Given a line, this function returns as a simple string the characters
-in the line.  This is setf'able to set the line-string to any string
-that does not contain newline characters.  It is an error to
-destructively modify the result of line-string or to destructively
-modify any string after the line-string of some line has been set to
-that string.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line-previous"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line-previous line 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp35374032"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line-next"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line-next line 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp35380336"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Given a line, line-previous returns the previous line or nil if there
-is no previous line.  Similarly, line-next returns the line following
-line or nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line-buffer"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line-buffer line 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp37168032"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the buffer which contains this line. Since a
-line may not be associated with any buffer, in which case line-buffer
-returns nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line-length"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line-length line 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp37174496"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the number of characters in the line. This
-excludes the newline character at the end.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line-character"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line-character line index 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp37180912"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the character at position index within line. It
-is an error for index to be greater than the length of the line or
-less than zero.  If index is equal to the length of the line, this
-returns a #\newline character.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line-plist"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line-plist line 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp39086368"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the property-list for line. setf, getf, putf and
-remf can be used to change properties. This is typically used in
-conjunction with line-signature to cache information about the line's
-contents.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line-signature"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line-signature line 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp39092976"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns an object that serves as a signature for a
-line's contents. It is guaranteed that any modification of text on the
-line will result in the signature changing so that it is not eql to
-any previous value. The signature may change even when the text
-remains unmodified, but this does not happen often.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Marks"></a>6.2.2.Â Marks</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-A <code class="code">mark</code> indicates a specific position within the text represented by a
-line and a character position within that line.  Although a mark is
-sometimes loosely referred to as pointing to some character, it in
-fact points between characters.  If the charpos is zero, the previous
-character is the newline character separating the previous line from
-the mark's line. If the charpos is equal to the number of characters
-in the line, the next character is the newline character separating
-the current line from the next.  If the mark's line has no previous
-line, a mark with charpos of zero has no previous character; if the
-mark's line has no next line, a mark with charpos equal to the length of
-the line has no next character.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-This section discusses the very basic operations involving marks, but
-a lot of Hemlock programming is built on altering some text at a mark.
-For more extended uses of marks see <a class="link" href="#HemlockProgrammingAlteringAndSearchingText" title="6.4.Â Altering and Searching Text">Altering And Searching Text</a>.
-            </p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="MarksKindsOfMarks"></a>6.2.2.1.Â Kinds of Marks</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-A mark may have one of two lifetimes: temporary or permanent. Permanent
-marks remain valid after arbitrary operations on the text; temporary
-marks do not.  Temporary marks are used because less bookkeeping
-overhead is involved in their creation and use.  If a temporary mark
-is used after the text it points to has been modified results will be
-unpredictable. Permanent marks continue to point between the same two
-characters regardless of insertions and deletions made before or after
-them.
-                </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-There are two different kinds of permanent marks which differ only in
-their behavior when text is inserted at the position of the mark; text
-is inserted to the left of a left-inserting mark and to the right of
-right-inserting mark.
-                </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="MarksMarkFunctions"></a>6.2.2.2.Â Mark Functions</h4>
-                  </div>
-                </div>
-              </div>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_markp"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            markp mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39107664"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if mark is a mark object, otherwise nil.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_mark-line"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            mark-line mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39114240"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the line to which mark points.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_mark-charpos"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            mark-charpos mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39120624"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the character position <span class="emphasis"><em>in the line</em></span> of the character
-after mark, i.e. the number of characters before the mark in the mark's line.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_mark-buffer"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            mark-buffer mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39127648"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the buffer containing this mark.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_mark-absolute-position"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            mark-absolute-position mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39134160"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the character position <span class="emphasis"><em>in the buffer</em></span> of the character
-after the mark, i.e. the number of characters before the mark in the mark's
-buffer.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_mark-kind"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            mark-kind mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39141184"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns one of <code class="code">:right-inserting</code>, <code class="code">:left-inserting</code> or
-                            <code class="code">:temporary</code> depending on the mark's kind.  A corresponding setf form
-changes the mark's kind.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_previous-character"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            previous-character mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39149072"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_next-character"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            next-character mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39155488"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the character immediately before (after) the
-position of the mark, or nil if there is no previous (next) character.
-These characters may be set with setf when they exist; the setf
-methods for these forms signal errors when there is no previous or
-next character.
-                        </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="MarksMakingMarks"></a>6.2.2.3.Â Making Marks</h4>
-                  </div>
-                </div>
-              </div>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_mark"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            mark line charpos <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39163856"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a mark object that points to the charpos'th
-character of the line. Kind is the kind of mark to create, one
-of <code class="code">:temporary</code>, <code class="code">:left-inserting</code>, or <code class="code">:right-inserting</code>. The default is
-:temporary.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_copy-mark"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            copy-mark mark <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39172160"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a new mark pointing to the same position and of
-the same kind, or of kind kind if it is supplied.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_delete-mark"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            delete-mark mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39178784"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function deletes mark. Delete any permanent marks when you are
-finished using it.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="m_with-mark"></a>
-                  <strong>[Macro]</strong>
-                  <br></br>
-                  <code>
-                            with-mark ({(mark pos [kind])}*) {form}* 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39185408"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This macro binds to each variable mark a mark of kind kind, which
-defaults to <code class="code">:temporary</code>, pointing to the same position as the
-markpos. On exit from the scope the mark is deleted.  The value of the
-last form is the value returned.
-                        </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="MarksMovingMarks"></a>6.2.2.4.Â Moving Marks</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-These functions destructively modify marks to point to new positions.
-Other sections of this document describe mark moving routines specific
-to higher level text forms than characters and lines, such as words,
-sentences, paragraphs, Lisp forms, etc.
-                </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_move-to-position"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            move-to-position mark charpos <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> line 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39194832"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function changes the mark to point to the given character
-position on the line line. Line defaults to mark's line.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_move-to-absolute-position"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            move-to-absolute-position mark position 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39201568"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function changes the mark to point to the given character
-position in the buffer.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_move-mark"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            move-mark mark new-position 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39208080"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function moves mark to the same position as the
-mark new-position and returns it.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_line-start"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            line-start mark <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> line 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39215056"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_line-end"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            line-end mark <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> line 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39221936"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function changes mark to point to the beginning or the end of
-line and returns it. Line defaults to mark's line.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_buffer-start"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            buffer-start mark <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> buffer 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39228944"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_buffer-end"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            buffer-end mark <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> buffer 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39235824"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-These functions change mark to point to the beginning or end of
-buffer, which defaults to the buffer mark currently points into. If
-buffer is unsupplied, then it is an error for mark to be disassociated
-from any buffer.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_mark-before"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            mark-before mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39242544"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_mark-after"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            mark-after mark 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39249040"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-These functions change mark to point one character before or after the
-current position.  If there is no character before/after the current
-position, then they return nil and leave mark unmodified.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_character-offset"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            character-offset mark n 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39255664"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function changes mark to point n characters after (n before if n
-is negative) the current position.  If there are less than n
-characters after (before) the mark, then this returns nil and mark is
-unmodified.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_line-offset"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            line-offset mark n <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> charpos 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39262768"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function changes mark to point n lines after (n before if n is
-negative) the current position.  The character position of the
-resulting mark is (min (line-length resulting-line) (mark-charpos
-mark)) if charpos is unspecified, or (min (line-length resulting-line)
-charpos) if it is.  As with character-offset, if there are not n lines
-then nil is returned and mark is not modified.
-                        </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Regions"></a>6.2.3.Â Regions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-A <code class="code">region</code> is simply a pair of marks: a starting mark and an ending
-mark.  The text in a region consists of the characters following the
-starting mark and preceding the ending mark (keep in mind that a mark
-points between characters on a line, not at them).  By modifying the
-starting or ending mark in a region it is possible to produce regions
-with a start and end which are out of order or even in different
-buffers.  The use of such regions is undefined and may result in
-arbitrarily bad behavior.
-            </p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="RegionsRegionFunctions"></a>6.2.3.1.Â Region Functions</h4>
-                  </div>
-                </div>
-              </div>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_region"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            region start end 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39273456"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a region constructed from the marks start and
-end. It is an error for the marks to point to non-contiguous lines or
-for start to come after end.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_regionp"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            regionp region 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39280128"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if region is a region object, otherwise nil.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_make-empty-region"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            make-empty-region 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39286624"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a region with start and end marks pointing to
-the start of one empty line.  The start mark is a <code class="code">:right-inserting</code>
-mark, and the end is a <code class="code">:left-inserting</code> mark.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_copy-region"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            copy-region region 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39294064"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a region containing a copy of the text in the
-specified region. The resulting region is completely disjoint
-from region with respect to data references --- marks, lines, text, etc.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_region-to-string"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            region-to-string region 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39300688"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_string-to-region"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            string-to-region string 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39307104"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-These functions coerce regions to Lisp strings and vice versa.  Within
-the string, lines are delimited by newline characters.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_line-to-region"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            line-to-region line 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39313744"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a region containing all the characters on
-line. The first mark is <code class="code">:right-inserting</code> and the last is
-                            <code class="code">:left-inserting</code>.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_region-start"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            region-start region 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp39321216"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_region-end"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            region-end region 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43068816"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the start or end mark of region.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_region-bounds"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            region-bounds region 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43074448"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns as multiple-values the starting and ending marks
-of region.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_set-region-bounds"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            set-region-bounds region start end 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43080128"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function sets the start and end of region to start and end. It is
-an error for start to be after or in a different buffer from end.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_count-lines"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            count-lines region 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43085840"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the number of lines in the region, first and
-last lines inclusive.  A newline is associated with the line it
-follows, thus a region containing some number of non-newline
-characters followed by one newline is one line, but if a newline were
-added at the beginning, it would be two lines.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_count-characters"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            count-characters region 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43091728"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the number of characters in a given region. This
-counts line breaks as one character.
-                        </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingBuffers"></a>6.3.Â Buffers</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-A buffer is an object consisting of:
-            </p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-            <ol class="orderedlist" type="1">
-              <li class="listitem">
-                <p>
-A name.
-                    </p>
-              </li>
-              <li class="listitem">
-                <p>
-A piece of text.
-                    </p>
-              </li>
-              <li class="listitem">
-                <p>
-The insertion point.
-                    </p>
-              </li>
-              <li class="listitem">
-                <p>
-An associated file (optional).
-                    </p>
-              </li>
-              <li class="listitem">
-                <p>
-A write protect flag.
-                    </p>
-              </li>
-              <li class="listitem">
-                <p>
-Some <a class="link" href="#HemlockProgrammingHemlockVariables" title="6.6.Â Hemlock Variables">variables</a>.
-                    </p>
-              </li>
-              <li class="listitem">
-                <p>
-Some <a class="link" href="#HemlockProgrammingCommands" title="6.7.Â Commands">key bindings</a>.
-                    </p>
-              </li>
-              <li class="listitem">
-                <p>
-A collection of <a class="link" href="#HemlockProgrammingModes" title="6.8.Â Modes">modes</a>.
-		    </p>
-              </li>
-              <li class="listitem">
-                <p>
-A list of modeline fields (optional).
-                    </p>
-              </li>
-            </ol>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Because of the way Hemlock is currently integrated in Cocoa, all modifications
-to buffer contents must take place in the GUI thread.  Hemlock commands always
-run in the GUI thread, so most of the time you do not need to worry about it.
-If you are running code in another thread that needs to modify a buffer, you
-should perform that action using <code class="code">gui::execute-in-gui</code> or <code class="code">gui::queue-for-gui</code>.
-        </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-There are no intrinsic limitations on examining buffers from any thread,
-however, Hemlock currently does no locking, so you risk seeing the buffer
-in an inconsistent state if you look at it outside the GUI thread.
-        </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="CurrentBuffer"></a>6.3.1.Â The Current Buffer</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Hemlock has the concept of the "current buffer".  The current buffer
-is defined during Hemlock commands as the buffer of the hemlock view
-that received the key events that invoked the command.  Many hemlock
-function operate on the current buffer rather than taking an explicit
-buffer argument.  In effect, the current buffer is an implicit argument
-to many text manipulation functions.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-buffer"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43112208"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the current buffer, which, during command execution, is the
-buffer that is the target of the command.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-point"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-point 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43117872"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the buffer-point of the current buffer . This is
-such a common idiom in commands that it is defined despite its trivial
-implementation.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-point-collapsing-selection"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-point-collapsing-selection 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43123600"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the buffer-point of the current buffer, after first
-deactivating any active region.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-point-extending-selection"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-point-extending-selection 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43129280"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the buffer-point of the current buffer, after first
-making sure there is an active region - if the region is already active,
-keeps it active, otherwise it establishes a new (empty) region at point.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-point-for-insertion"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-point-for-insertion 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43135072"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function checks to see if the current buffer can be modified at its
-current point, and errors if not.  Otherwise, it deletes the current
-selection if any, and returns the current point.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-point-for-deletion"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-point-for-deletion 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43140832"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function checks to see if the current buffer can be modified at its
-current point and errors if not.  Otherwise, if there is a section
-in the current buffer, it deletes it and returns NIL.  If there is no
-selection, it returns the current point.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-point-unless-selection"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-point-unless-selection 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43146656"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function checks to see if the current buffer can be modified at its
-current point and errors if not.  Otherwise, if there's a selection in the
-current buffer, returns NIL.  If there is no selection, it returns the
-current point.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-mark"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-mark 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43152448"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the top of the current buffer's mark stack.
-There always is at least one mark at the beginning of the buffer's
-region, and all marks returned are right-inserting.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_pop-buffer-mark"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        pop-buffer-mark 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43158192"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function pops the current buffer's mark stack, returning the
-mark.  If the stack becomes empty, this pushes a new mark on the stack
-pointing to the buffer's start.  This always deactivates the current
-region (see <a class="link" href="#ActiveRegions" title="6.4.4.Â Active Regions">Active Regions</a>).
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_push-buffer-mark"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        push-buffer-mark mark <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> activate-region 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43164880"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function pushes mark into the current buffer's mark stack,
-ensuring that the mark is right-inserting. If mark does not point into
-the current buffer, this signals an error.  Optionally, the current
-region is made active, but this never deactivates the current region
-(see <a class="link" href="#ActiveRegions" title="6.4.4.Â Active Regions">Active Regions</a>).
-Mark is returned.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_push-new-buffer-mark"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        push-new-buffer-mark mark <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> activate-region 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43171616"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function pushes a new mark onto the mark stack, at the position of <code class="code">mark</code>.
-It's equivalent to calling <code class="code">push-buffer-mark</code> on <code class="code">(copy-mark mark)</code>.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_all-buffers"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        all-buffers 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43178384"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a list of all the buffer objects made with make-buffer.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_buffer-names"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code>
-                        *buffer-names* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43184016"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This variable holds a <a class="link" href="#StringTableFunctions" title="6.16.1.Â String-table Functions">string-table</a>
-mapping the name of a buffer to the corresponding buffer object.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="BufferFunctions"></a>6.3.2.Â Buffer  Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_make-buffer"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        make-buffer  name <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :modes :modeline-fields :delete-hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43191648"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_default_modeline_fields"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Default Modeline Fields 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43197168"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_make_buffer_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Make Buffer Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43202688"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-make-buffer creates and returns a buffer with the given name. If a
-buffer named name already exists, nil is returned. Modes is a list of
-modes which should be in effect in the buffer, major mode first,
-followed by any minor modes.  If this is omitted then the buffer is
-created with the list of modes contained in <a class="link" href="#hv_default_modes" title="Hemlock Variable Default Modes">
-Default Modes</a>. Modeline-fields is a list of modeline-field objects (see
-the  <a class="link" href="#Modelines" title="6.3.3.Â Modelines">Modelines</a> section)
-which may be nil. delete-hook is a list of delete hooks specific
-to this buffer, and delete-buffer invokes these along with Delete
-Buffer Hook.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Buffers created with make-buffer are entered into the list
-(all-buffers), and their names are inserted into the string-table
-*buffer-names*. When a buffer is created the hook Make Buffer Hook is
-invoked with the new buffer.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_bufferp"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        bufferp buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43210704"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns t if buffer is a buffer object, otherwise nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-name"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-name buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43216320"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_buffer_name_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Buffer Name Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43221840"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-buffer-name returns the name, which is a string, of the given buffer.
-The corresponding setf method invokes Buffer Name Hook with buffer
-and the new name and then sets the buffer's name.  When the user
-supplies a name for which a buffer already exists, the setf method
-signals an error.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-region buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43227680"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the buffer's region.  Note this is the region that contains all
-the text in a buffer, as opposed to the <a class="link" href="#f_current-region" title="Function current-region">current-region</a>.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This can be set with setf to replace the buffer's text.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-pathname"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-pathname buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43234432"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_buffer_pathname_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Buffer Pathname Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43239952"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-buffer-pathname returns the pathname of the file associated with the
-given buffer, or nil if it has no associated file.  This is the
-truename of the file as of the most recent time it was read or
-written.  There is a setf form to change the pathname.  When the
-pathname is changed the hook Buffer Pathname Hook is invoked with the
-buffer and new value.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-write-date"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-write-date buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43246736"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the write date for the file associated with the buffer in
-universal time format.  When this the buffer-pathname is set, use setf
-to set this to the corresponding write date, or to nil if the date is
-unknown or there is no file.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-point"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-point buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43253488"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the mark which is the current location within buffer. To move
-the point, use <a class="link" href="#f_move-mark" title="Function move-mark">move-mark</a> or <a class="link" href="#f_move-to-position" title="Function move-to-position">move-to-position</a>
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-mark"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-mark buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43261504"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the top of buffer's mark stack.  There always is
-at least one mark at the beginning of buffer's region, and all marks
-returned are right-inserting.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-start-mark"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-start-mark buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43268208"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-end-mark"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-end-mark buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43274656"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These functions return the start and end marks of buffer's region:
-</p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-(buffer-start-mark buffer )  &amp;lt;==&amp;gt;  (region-start (buffer-region buffer))
-
-</pre>
-                  <p xmlns="http://www.w3.org/1999/xhtml">and
-</p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-(buffer-end-mark buffer )  &amp;lt;==&amp;gt;  (region-end (buffer-region buffer))
-
-</pre>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-writable"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-writable buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43282784"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_buffer_writable_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Buffer Writable Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43289232"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if you can modify the buffer, nil if you
-cannot.  If a buffer is not writable, then any attempt to alter text
-in the buffer results in an error.  There is a setf method to change
-this value.  The setf method invokes the functions in Buffer Writable
-Hook on the buffer and new value before storing the new value.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-modified"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-modified buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43296080"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_buffer_modified_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Buffer Modified Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43302592"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-buffer-modified returns t if the buffer has been modified, nil if it
-hasn't.  This attribute is set whenever a text-altering operation is
-performed on a buffer.  There is a setf method to change this value.
-The setf method invokes the functions in Buffer Modified Hook with the
-buffer whenever the value of the modified flag changes.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_with-writable-buffer"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        with-writable-buffer (buffer) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43309888"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This macro executes forms with buffer's writable status set.  After
-forms execute, this resets the buffer's writable and modified status.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-signature"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-signature buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43316480"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns an arbitrary number which reflects the buffer's
-current signature. The result is eql to a previous result if and only if
-the buffer has not been modified between the calls.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-variables"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-variables buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43323136"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a <a class="link" href="#StringTableFunctions" title="6.16.1.Â String-table Functions">string-table</a> containing the names of
-the buffer's local <a class="link" href="#HemlockProgrammingHemlockVariables" title="6.6.Â Hemlock Variables">variables</a>.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-modes"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-modes buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43331152"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the list of the names of the modes active in
-buffer. The major mode is first, followed by any minor modes.  See
-the <a class="link" href="#HemlockProgrammingModes" title="6.8.Â Modes">Modes</a> chapter.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-delete-hook"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-delete-hook buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43338480"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the list of buffer specific functions
-delete-buffer invokes when deleting a buffer . This is setf-able.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_delete-buffer"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        delete-buffer  buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43345120"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_delete_buffer_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Delete Buffer Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43351632"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-delete-buffer removes buffer from <a class="link" href="#f_all-buffers" title="Function all-buffers">(all-buffers)</a> and its name
-from <a class="link" href="#v_buffer-names" title="Variable *buffer-names*">*buffer-names*</a>.  Before buffer is deleted, this invokes
-the functions on buffer returned by buffer-delete-hook and those found
-in Delete Buffer Hook. If buffer is the current-buffer, or if it is
-displayed in any view, then this function signals an error.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Modelines"></a>6.3.3.Â Modelines</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-A Buffer may specify a modeline, a line of text which is displayed
-across the bottom of a view to indicate status information.
-Modelines are described by a list of modeline-field objects which have
-individual update functions and are optionally fixed-width. These have
-an eql name for convenience in referencing and updating, but the name
-must be unique for all created modeline-field objects.  All modeline-field
-functions must take a buffer as an
-argument and return a string.  When displaying
-a modeline-field with a specified width, the result of the update
-function is either truncated or padded on the right to meet the
-constraint.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Whenever one of the following changes occurs, all of a buffer's
-modeline fields are updated:
-            </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-A buffer's major mode is set.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-One of a buffer's minor modes is turned on or off.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-A buffer  is renamed.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-A buffer's pathname changes.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-A buffer's modified status changes.
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-The policy is that whenever one of these changes occurs, it is
-guaranteed that the modeline will be updated before the next trip
-through redisplay.  Furthermore, since the system cannot know what
-modeline-field objects the user has added whose update functions rely
-on these values, or how he has changed Default Modeline Fields, we must
-update all the fields.  
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-The user should note that modelines can be updated at any time, so
-update functions should be careful to avoid needless delays (for
-example, waiting for a local area network to determine information).
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_make-modeline-field"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        make-modeline-field <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :name :width :function 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43369856"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a modeline-field object with name, width,
-and function. Width defaults to nil meaning that the field is variable
-width; otherwise, the programmer must supply this as a positive
-integer. Function must take a buffer as an arguments and
-return a string.  If name already names a modeline-field object,
-then this signals an error.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_modeline-field-name"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        modeline-field-name modeline-field 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43376736"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the name field of a modeline-field object.
-If this is set with setf, and the new name already names a
-modeline-field, then the setf method signals an error.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_modeline-field-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        modeline-field-p modeline-field 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43383456"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if its argument is a modeline-field object, nil
-otherwise.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_modeline-field"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        modeline-field name 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43390000"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This returns the modeline-field object named name. If none exists, this
-returns nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_modeline-field-function"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        modeline-field-function modeline-field 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43396608"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the function called when updating the modeline-field. When this
-is set with setf, the setf method updates modeline-field for all views
-on all buffers that contain the given field, so the next trip through
-redisplay will reflect the change.  All modeline-field functions must
-take a buffer as an argument and return a string.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_modeline-field-width"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        modeline-field-width modeline-field 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43403472"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the width to which modeline-field is constrained, or nil
-indicating that it is variable width.  When this is set with setf, the
-setf method updates all modeline-fields for all views on all buffers
-that contain the given field, so the next trip through redisplay will
-reflect the change.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-modeline-fields"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-modeline-fields buffer  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43410352"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns a copy of the list of buffer's modeline-field objects. This
-list can be destructively modified without affecting display of
-buffer's modeline, but modifying any particular field's components
-(for example, width or function) causes the changes to be reflected
-the next trip through redisplay in every modeline display that uses
-the modified modeline-field.  When this is set with setf, the setf
-method method updates all modeline-fields on all views on the buffer,
-so next trip through the redisplay will reflect the change.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-modeline-field-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-modeline-field-p buffer field 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43417472"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-If field, a modeline-field or the name of one, is in buffer's list of
-modeline-field objects, it is returned; otherwise, this returns nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_update-modeline-fields"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        update-modeline-fields buffer 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43424128"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Arranges so that the modeline display is updated with the latest values
-at the end of current command.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingAlteringAndSearchingText"></a>6.4.Â Altering and Searching Text</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-A note on marks and text alteration: :temporary marks are invalid
-after any change has been made to the buffer the mark points to; it is
-an error to use a temporary mark after such a change has been made.
-        </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-If text is deleted which has permanent marks pointing into it then
-they are left pointing to the position where the text was.
-        </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="AlteringText"></a>6.4.1.Â Altering Text</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_insert-character"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        insert-character mark character 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43434640"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_insert-string"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        insert-string mark string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43441104"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_insert-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        insert-region mark region 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43447568"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Inserts character, string or region at mark. <code class="code">insert-character</code> signals
-an error if character is not <code class="code">string-char-p</code>. If string or region is
-empty, and mark is in some buffer, then Hemlock leaves buffer-modified of
-mark's buffer unaffected.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_ninsert-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        ninsert-region mark region 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43455168"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Like <code class="code">insert-region</code>, inserts the region at the mark's position,
-destroying the source region.  This must be used with caution, since
-if anyone else can refer to the source region bad things will
-happen. In particular, one should make sure the region is not linked
-into any existing buffer.  If region is empty, and mark is in some
-buffer, then Hemlock leaves buffer-modified of mark's buffer unaffected.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_delete-characters"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        delete-characters mark n 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43462512"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This deletes n characters after the mark (or -n before if n is
-negative).  If n characters after (or -n before) the mark do not
-exist, then this returns nil; otherwise, it returns t. If n is zero,
-and mark is in some buffer, then Hemlock leaves buffer-modified of
-mark's buffer unaffected.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_delete-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        delete-region region  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43469248"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This deletes region. This is faster than delete-and-save-region
-(below) because no lines are copied. If region is empty and contained
-in some buffer's buffer-region, then Hemlock leaves buffer-modified of
-the buffer unaffected.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_delete-and-save-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        delete-and-save-region region  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43476064"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This deletes region and returns a region containing the original
-region's text. If region is empty and contained in some buffer's
-buffer-region, then Hemlock leaves buffer-modified of the buffer
-unaffected. In this case, this returns a distinct empty region.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_filter-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        filter-region function region 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43482800"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Destructively modifies region by replacing the text of each line with
-the result of the application of function to a string containing that
-text. Function must obey the following restrictions:
-                    </p>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-                    <ol class="orderedlist" type="1">
-                      <li class="listitem">
-                        <p>
-The argument may not be destructively modified.
-                            </p>
-                      </li>
-                      <li class="listitem">
-                        <p>
-The return value may not contain newline characters.
-                            </p>
-                      </li>
-                      <li class="listitem">
-                        <p>
-The return value may not be destructively modified after it is returned from function.
-                            </p>
-                      </li>
-                    </ol>
-                  </div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-The strings are passed in order.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Using this function, a region could be uppercased by doing:
-                        <code class="code">(filter-region #'string-upcase region)</code>
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="TextPredicates"></a>6.4.2.Â Text Predicates</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_start-line-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        start-line-p mark 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43496336"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns t if the mark points before the first character in a line, nil
-otherwise.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_end-line-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        end-line-p mark 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43502928"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns t if the mark points after the last character in a line and
-before the newline, nil otherwise.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-                        <code class="code">empty-line-p</code> mark [Function]
-Return t if the line which mark points to contains no characters.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_blank-line-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        blank-line-p line 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43510544"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns t if line contains only characters with a Whitespace attribute
-of 1.  See the <a class="link" href="#HemlockProgrammingCharacterAttributes" title="6.9.Â Character Attributes">Character Attributes</a>
-chapter for discussion of character attributes.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_blank-before-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        blank-before-p mark 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43517904"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_blank-after-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        blank-after-p mark 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43524352"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These functions test if all the characters preceding or following mark
-on the line it is on have a Whitespace attribute of 1.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_same-line-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        same-line-p mark1 mark2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43530928"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns t if mark1 and mark2 point to the same line, or nil otherwise; That is,
-</p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-(same-line-p a b) &amp;lt;==&amp;gt; (eq (mark-line a) (mark-line b))
-
-</pre>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mark_lt"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mark&lt; mark1 mark2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43538272"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mark_lt__eq"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mark&lt;= mark1 mark2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43544784"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mark_eq"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mark= mark1 mark2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43551232"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mark__eq"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mark/= mark1 mark2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43557680"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mark_gt__eq"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mark&gt;= mark1 mark2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43564192"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mark_gt"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mark&gt; mark1 mark2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43570704"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These predicates test the relative ordering of two marks in a piece of
-text, that is a mark is mark&gt; another if it points to a position after
-it. An error is signalled if the marks do not point into the same buffer,
-except that for such marks mark= is always false and mark/= is always true.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line_lt"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line&lt; line1 line2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43577520"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line_lt__eq"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line&lt;= line1 line2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43583968"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line_gt__eq"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line&gt;= line1 line2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43590416"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_line_gt"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        line&gt; line1 line2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43596928"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These predicates test the ordering of line1 and line2. An error is signalled
-if the lines are not in the same buffer.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_lines-related"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        lines-related line1 line2 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43603520"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if line1 and line2 are in the same buffer, nil
-nil otherwise.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_first-line-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        first-line-p mark 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43610064"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_last-line-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        last-line-p mark 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43616512"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-                        <code class="code">first-line-p</code> returns t if there is no line before the line mark is on,
-and nil otherwise. <code class="code">Last-line-p</code> similarly tests tests whether there is
-no line after mark.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="KillRing"></a>6.4.3.Â Kill Ring</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-There is a global <a class="link" href="#RingFunctions" title="6.16.2.Â Ring Functions">ring</a> of regions deleted from buffers.
-Some commands save affected regions on the kill ring before performing
-modifications.  You should consider making the command <a class="link" href="#UndoingCommands" title="6.16.3.Â Undoing commands">undoable</a>,
-but this is a simple way of achieving a less
-satisfactory means for the user to recover.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_kill-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        kill-region region  current-type 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43627520"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This kills region saving it in the kill ring. Current-type is either
-:kill-forward or :kill-backward. When the <a class="link" href="#f_last-command-type" title="Function last-command-type">last-command-type</a>
-is one of these, this adds region to the beginning or end,
-respectively, of the top of the kill ring. The result of calling this is
-undoable using the command Undo (see the Hemlock User's Manual). This
-sets last-command-type to current-type, and it interacts with
-kill-characters.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_kill-characters"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        kill-characters mark count 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43635152"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_character_deletion_threshold"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Character Deletion Threshold (initial value 5) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43641776"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-kill-characters kills count characters after mark if count is
-positive, otherwise before mark if count is negative.  When count is
-greater than or equal to Character Deletion Threshold, the killed
-characters are saved on the kill ring. This may be called multiple times
-contiguously (that is, without  <a class="link" href="#f_last-command-type" title="Function last-command-type">last-command-type</a> being set)
-to accumulate an effective count for purposes of comparison with the
-threshold.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This sets last-command-type, and it interacts with kill-region. When
-this adds a new region to the kill ring, it sets last-command-type to
-:kill-forward (if count is positive) or :kill-backward (if count is
-negative).  When last-command-type is :kill-forward or :kill-backward,
-this adds the killed characters to the beginning (if count is
-negative) or the end (if count is positive) of the top of the kill ring,
-and it sets last-command-type as if it added a new region to the
-kill ring. When the kill ring is unaffected, this sets
-last-command-type to :char-kill-forward or :char-kill-backward
-depending on whether count is positive or negative, respectively.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This returns mark if it deletes characters.  If there are not count
-characters in the appropriate direction, this returns nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="ActiveRegions"></a>6.4.4.Â Active Regions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Every buffer has a mark stack and a mark known as the point
-where most text altering nominally occurs.  Between the top of the
-mark stack, the current-mark, and the current-buffer's point, the
-current-point, is what is known as the current-region . Certain
-commands signal errors when the user tries to operate on the
-current-region without its having been activated.  If the user turns
-off this feature, then the current-region is effectively always
-active.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-When writing a command that marks a region of text, the programmer
-should make sure to activate the region.  This typically occurs
-naturally from the primitives that you use to mark regions, but
-sometimes you must explicitly activate the region.  These commands
-should be written this way, so they do not require the user to
-separately mark an area and then activate it.  Commands that modify
-regions do not have to worry about deactivating the region since
-modifying a buffer automatically deactivates the region.  Commands
-that insert text often activate the region ephemerally; that is, the
-region is active for the immediately following command, allowing the
-user wants to delete the region inserted, fill it, or whatever.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Once a marking command makes the region active, it remains active until:
-            </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-a command uses the region,
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-a command modifies the buffer,
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-a command changes the current window or buffer,
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-a command signals an editor-error,
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-or the user types C-g.
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_active_regions_enabled"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Active Regions Enabled (initial value t) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43660192"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-When this variable is non-nil, some primitives signal an editor-error
-if the region is not active.  This may be set to nil for more
-traditional Emacs region semantics.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_ephemerally-active-command-types"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code>
-                        *ephemerally-active-command-types* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43666912"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This is a list of <a class="link" href="#CommandTypes" title="6.7.3.Â Command Types">command types</a>, and its initial
-value is the list of :ephemerally-active and :unkill. When the
-previous command's type is one of these, the current-region is active
-for the currently executing command only, regardless of whether it
-does something to deactivate the region.  However, the current command
-may activate the region for future commands. :ephemerally-active is a
-default command type that may be used to ephemerally activate the
-region, and:unkill is the type used by two commands, Un-kill and
-Rotate Kill Ring (what users typically think of as C-y and M-y).
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_activate-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        activate-region 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43674704"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This makes the current-region active.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_deactivate-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        deactivate-region 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43681264"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-After invoking this the current-region is no longer active.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_region-active-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        region-active-p 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43687776"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns whether the current-region is active, including
-ephemerally. This ignores Active Regions Enabled.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_check-region-active"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        check-region-active 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43694400"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This signals an editor-error when active regions are enabled, and the
-current-region is not active.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-region <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> error-if-not-active deactivate-region 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43701504"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This returns a region formed with current-mark and current-point,
-optionally signaling an editor-error if the current region is not
-active. Error-if-not-active defaults to t. Each call returns a
-distinct region object.  Depending on deactivate-region (defaults to
-t), fetching the current region deactivates it.  Hemlock primitives
-are free to modify text regardless of whether the region is active, so
-a command that checks for this can deactivate the region whenever it
-is convenient.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="SearchingAndReplacing"></a>6.4.5.Â Searching and Replacing</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Before using any of these functions to do a character search, look at
-<a class="link" href="#HemlockProgrammingCharacterAttributes" title="6.9.Â Character Attributes">character attributes</a>.  They provide a facility similar to
-the syntax table in real Emacs.  Syntax tables are a powerful,
-general, and efficient mechanism for assigning meanings to characters
-in various modes.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_new-search-pattern"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        new-search-pattern kind direction pattern <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> result-search-pattern 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43711744"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns a search-pattern object which can be given to the find-pattern
-and replace-pattern functions. A search-pattern is a specification of
-a particular sort of search to do. direction is either :forward or
-:backward, indicating the direction to search in. kind specifies the
-kind of search pattern to make, and pattern is a thing which specifies
-what to search for.  The interpretation of pattern depends on the kind
-of pattern being made.  Currently defined kinds of search pattern are:
-                    </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:string-insensitive</span></i>---
-Does a case-insensitive string search for pattern
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:string-sensitive</span></i>---
-Does a case-sensitive string search for pattern.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:character</span></i>---
-Finds an occurrence of the character pattern. This is case sensitive.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:not-character</span></i>---
-Find a character which is not the character pattern.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:test</span></i>---
-Finds a character which satisfies the function pattern. This function may not be applied an any particular fashion, so it should depend only on what its argument is, and should have no side-effects.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:test-not</span></i>---
-Similar to :test, except it finds a character that fails the test.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:any</span></i>---
-Finds a character that is in the string pattern.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:not-any</span></i>---
-Finds a character that is not in the string pattern.
-                                </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-result-search-pattern, if supplied, is a search-pattern to
-destructively modify to produce the new pattern.  Where reasonable
-this should be supplied, since some kinds of search patterns may
-involve large data structures.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_search-pattern-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        search-pattern-p search-pattern 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43735696"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns t if search-pattern is a search-pattern object, otherwise nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_get-search-pattern"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        get-search-pattern string direction 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43742304"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-get-search-pattern interfaces to a default search string and pattern
-that search and replacing commands can use.  These commands then share
-a default when prompting for what to search or replace, and save on
-consing a search pattern each time they execute.  This uses Default
-Search Kind (see the  Hemlock  User's Manual) when updating the pattern
-object.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_last-search-string"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code>
-                        *last-search-string* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43749184"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the last string searched for, useful when prompting.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_find-pattern"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        find-pattern mark search-pattern 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43755776"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Find the next match of search-pattern starting at mark. If a match is
-found then mark is altered to point before the matched text and the
-number of characters matched is returned.  If no match is found then
-nil is returned and mark is not modified.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_replace-pattern"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        replace-pattern mark search-pattern replacement <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> n 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43763024"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Replace n matches of search-pattern with the string replacement
-starting at mark. If n is nil (the default) then replace all matches.
-A mark pointing before the last replacement done is returned.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingTheCurrentEnvironment"></a>6.5.Â The Current Environment</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="DifferentScopes"></a>6.5.1.Â Different Scopes</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-In Hemlock the "current" values of <a class="link" href="#HemlockProgrammingHemlockVariables" title="6.6.Â Hemlock Variables">variables</a>,
-<a class="link" href="#HemlockProgrammingCommands" title="6.7.Â Commands">key bindings</a> and
-<a class="link" href="#HemlockProgrammingCharacterAttributes" title="6.9.Â Character Attributes">character-attributes</a>
-depend on the <a class="link" href="#CurrentBuffer" title="6.3.1.Â The Current Buffer">current buffer</a>
-and the modes active in it.  There are three possible scopes for
-Hemlock values:
-            </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-              <dl>
-                <dt>
-                  <span class="term">buffer local</span>
-                </dt>
-                <dd>
-                  <p>
-The value is present only if the buffer it is local to is the current buffer.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">mode local</span>
-                </dt>
-                <dd>
-                  <p>
-The value is present only when the mode it is local to is active in the current buffer.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">global</span>
-                </dt>
-                <dd>
-                  <p>
-The value is always present unless shadowed by a buffer or mode local value.
-                        </p>
-                </dd>
-              </dl>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Shadowing"></a>6.5.2.Â Shadowing</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-It is possible that there are different values for the same thing in 
-in different scopes.  For example, there be might a global binding for a given
-variable and also a local binding in the current buffer.  Whenever there is a
-conflict, shadowing occurs, permitting only one of the values to be visible in
-the current environment.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-The process of resolving such a conflict can be described as a search
-down a list of places where the value might be defined, returning the
-first value found.  The order for the search is as follows:
-            </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>
-Local values in the current buffer.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-Mode local values in the minor modes of the current buffer, in order from the highest precedence mode to the lowest precedence mode.  The order of minor modes with equal precedences is undefined.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-Mode local values in the current buffer's major mode.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-Global values.
-                    </p>
-                </li>
-              </ol>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingHemlockVariables"></a>6.6.Â Hemlock Variables</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-Hemlock implements a system of variables separate from normal Lisp
-variables for the following reasons:
-        </p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-            <ol class="orderedlist" type="1">
-              <li class="listitem">
-                <p>
-Hemlock has different scoping rules which are useful in an editor.  Hemlock variables can be local to a <a class="link" href="#HemlockProgrammingBuffers" title="6.3.Â Buffers">buffer</a> or a <a class="link" href="#HemlockProgrammingModes" title="6.8.Â Modes">mode</a>.
-                </p>
-              </li>
-              <li class="listitem">
-                <p>
-Hemlock variables have <a class="link" href="#ModeHooks" title="6.8.1.Â Mode Hooks">hooks</a>, lists of functions called when someone sets the variable. See variable-value for the arguments Hemlock passes to these hook functions.
-                </p>
-              </li>
-              <li class="listitem">
-                <p>
-There is a database of variable names and documentation which makes it easier to find out what variables exist and what their values mean.
-                </p>
-              </li>
-            </ol>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="VariableNames"></a>6.6.1.Â Variable Names</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-To the user, a variable name is a case insensitive string.  This
-string is referred to as the string name of the variable. A string
-name is conventionally composed of words separated by spaces.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-In Lisp code a variable name is a symbol.  The name of this symbol is
-created by replacing any spaces in the string name with hyphens.  This
-symbol name is always interned in the Hemlock package.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_global-variable-names"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code>
-                        *global-variable-names* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43800400"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This variable holds a string-table of the names of all the global
-Hemlock variables. The value of each entry is the symbol name of the
-variable.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-variable-tables"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-variable-tables 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43807104"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a list of variable tables currently established,
-globally, in the current buffer, and by the modes of the
-current-buffer. This list is suitable for use with
-prompt-for-variable.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="VariableFunctions"></a>6.6.2.Â Variable Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-In the following descriptions name is the symbol name of the variable.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_defhvar"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        defhvar string-name documentation <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :mode :buffer :hooks :value 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43816080"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function defines a Hemlock variable. Functions that take a
-variable name signal an error when the variable is undefined.
-                    </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">string-name</span></i>---
-The string name of the variable to define.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">documentation</span></i>---
-The documentation string for the variable.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:mode, :buffer</span></i>---
-If buffer is supplied, the variable is local to that buffer.  If mode is supplied, it is local to that mode.  If neither is supplied, it is global.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:value</span></i>---
-This is the initial value for the variable, which defaults to nil.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:hooks</span></i>---
-This is the initial list of functions to call when someone sets the variable's value. These functions execute before Hemlock establishes the new value. See variable-value for the arguments passed to the hook functions.
-                                </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-If a variable with the same name already exists in the same place,
-then defhvar sets its hooks and value from hooks and value if the user
-supplies these keywords.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_variable-value"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        variable-value name <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind where 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43834288"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the value of a Hemlock variable in some place. The following values for kind are defined:
-                    </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:current</span></i>---
-Return the value present in the current environment, taking into consideration any mode or buffer local variables.  This is the default.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:global</span></i>---
-Return the global value.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:mode</span></i>---
-Return the value in the mode named where.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:buffer</span></i>---
-Return the value in the buffer where.
-                                </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-When set with setf, Hemlock sets the value of the specified variable
-and invokes the functions in its hook list with name, kind, where, and
-the new value.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_variable-documentation"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        variable-documentation name <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind where 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43850336"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_variable-hooks"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        variable-hooks name <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind where 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43857296"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_variable-name"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        variable-name name <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind where 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43864256"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These function return the documentation, hooks and string name of a
-Hemlock variable. The kind and where arguments are the same as for
-variable-value. The documentation and hook list may be set using setf.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_string-to-variable"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        string-to-variable string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43870992"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function converts a string into the corresponding variable symbol
-name. String need not be the name of an actual Hemlock variable.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_value"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        value name 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43877648"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_setv"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        setv name new-value 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43884160"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These macros get and set the current value of the Hemlock variable
-name. Name is not evaluated.  There is a setf form for <code class="code">value</code>.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_hlet"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        hlet ({(var value)}*){form}* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43891248"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This macro is very similar to let in effect; within its scope each of
-the Hemlock variables var have the respective values, but after the
-scope is exited by any means the binding is removed.  This does not
-cause any hooks to be invoked.  The value of the last form is
-returned.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_hemlock-bound-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        hemlock-bound-p name <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind where 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43898432"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns t if name is defined as a Hemlock variable in the place
-specified by kind and where, or nil otherwise.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_delete-variable"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        delete-variable name <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind where 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43905504"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_delete_variable_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Delete Variable Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43912016"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-delete-variable makes the Hemlock variable name no longer defined in
-the specified place. Kind and where have the same meanings as they do
-for variable-value, except that :current is not available, and the
-default for kind is :global
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-An error will be signaled if no such variable exists.  The hook,
-Delete Variable Hook is invoked with the same arguments before the
-variable is deleted.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Hooks"></a>6.6.3.Â Hooks</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Hemlock actions such as setting variables, changing buffers, changing
-windows, turning modes on and off, etc., often have hooks associated
-with them.  A hook is a list of functions called before the system
-performs the action.  The manual describes the object specific hooks
-with the rest of the operations defined on these objects.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Often hooks are stored in Hemlock variables, Delete Buffer Hook and
-Set Window Hook for example.  This leads to a minor point of confusion
-because these variables have hooks that the system executes when
-someone changes their values.  These hook functions Hemlock invokes
-when someone sets a variable are an example of a hook stored in an
-object instead of a Hemlock variable. These are all hooks for editor
-activity, but Hemlock keeps them in different kinds of locations.
-This is why some of the routines in this section have a special
-interpretation of the hook place argument.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_add-hook"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        add-hook place hook-fun 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43922448"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_remove-hook"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        remove-hook place hook-fun 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43928976"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These macros add or remove a hook function in some place. If hook-fun
-already exists in place, this call has no effect.  If place is a
-symbol, then it is a Hemlock variable; otherwise, it is a generalized
-variable or storage location.  Here are two examples:
-                    </p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-(add-hook delete-buffer-hook 'remove-buffer-from-menu)
-(add-hook (variable-hooks 'check-mail-interval)
-          'reschedule-mail-check)
-
-</pre>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_invoke-hook"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        invoke-hook place <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> args 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp43936896"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This macro calls all the functions in place. If place is a symbol,
-then it is a Hemlock variable; otherwise, it is a generalized
-variable.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingCommands"></a>6.7.Â Commands</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="HemlockProgrammingCommandsIntroduction"></a>6.7.1.Â Introduction</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-The way that the user tells Hemlock to do something is by invoking a
-command. Commands have three attributes:
-            </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-              <dl>
-                <dt>
-                  <span class="term">name</span>
-                </dt>
-                <dd>
-                  <p>
-A command's name provides a way to refer to it.  Command names are
-usually capitalized words separated by spaces, such as Forward Word.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">documentation</span>
-                </dt>
-                <dd>
-                  <p>
-The documentation for a command is used by on-line help facilities.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">function</span>
-                </dt>
-                <dd>
-                  <p>
-A command is implemented by a Lisp function, which is callable from Lisp.
-                        </p>
-                </dd>
-              </dl>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="DefiningCommands"></a>6.7.1.1.Â Defining Commands</h4>
-                  </div>
-                </div>
-              </div>
-              <p>
-                <div class="refentrytitle">
-                  <a id="v_command-names"></a>
-                  <strong>[Variable]</strong>
-                  <br></br>
-                  <code>
-                        *command-names* 
-                    </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43954176"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-Holds a <a class="link" href="#StringTableFunctions" title="6.16.1.Â String-table Functions">string-table</a> associating command names to command
-objects.  Whenever a new command is defined it is entered in this
-table.
-                    </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="m_defcommand"></a>
-                  <strong>[Macro]</strong>
-                  <br></br>
-                  <code>
-                                defcommand {command-name | (command-name function-name <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em>)} lambda-list command-doc {function-doc} {form}* 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43962192"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-Defines a command named name. defcommand creates a function to
-implement the command from the lambda-list and forms supplied.  The
-lambda-list must specify one required argument, see <a class="link" href="#CommandArguments" title="6.7.4.Â Command Arguments">below</a>,
-which by convention is typically named <code class="code">p</code>. If the caller does not specify
-function-name, defcommand creates the command name by replacing all
-spaces with hyphens and appending "-command".  Any keyword arguments
-are as for <code class="code">make-command</code>.  Command-doc becomes the command
-documentation for the command.  Function-doc, if present, becomes the
-documentation for the function and should primarily describe
-issues involved in calling the command as a function, such as what any
-additional arguments are. 
-                            </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_make-command"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                make-command name documentation function <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :transparent-p 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43971696"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-Defines a new command named name, with command documentation
-documentation and function function.  If :transparent-p is true,
-the command becomes <a class="link" href="#TransparentKeyBindings" title="6.7.2.5.Â Transparent Key Bindings">transparent</a>.
-The command in entered in the
-string-table <a class="link" href="#v_command-names" title="Variable *command-names*">*command-names*</a>, with the command object as its
-value.  Normally command implementors will use the defcommand macro,
-but this permits access to the command definition mechanism at a lower
-level, which is occasionally useful.
-                            </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_commandp"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                commandp command 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43980288"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-Returns t if command is a command object, otherwise nil.
-                            </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_command-documentation"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                command-documentation command 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43987136"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_command-function"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                command-function command 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp43993904"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_command-name"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                command-name command 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp44000672"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the documentation, function, or name for command. These may be
-set with setf.
-                            </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="CommandDocumentation"></a>6.7.1.2.Â Command Documentation</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-Command documentation is a description of what the command does when
-it is invoked as an extended command or from a key.  Command
-documentation may be either a string or a function.  If the
-documentation is a string then the first line should briefly summarize
-the command, with remaining lines filling the details.  Example:
-                    </p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-(defcommand "Forward Character" (p)
-  "Move the point forward one character.
-   With prefix argument move that many characters, with negative
-   argument go backwards."
-. . .)
-
-</pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-Command documentation may also be a function of one argument.  The
-function is called with either :short or :full, indicating that the
-function should return a short documentation string or do something
-to document the command fully.
-                    </p>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="CommandInterpreter"></a>6.7.2.Â The Command Interpreter</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-The command interpreter is the functionality invoked by the event
-handler to process key-events from the keyboard and dispatch to
-different commands on the basis of what the user types.  When the
-command interpreter executes a command, we say it invokes the command.  The
-command interpreter also provides facilities for communication between
-contiguously running commands, such as a last command type register.
-It also takes care of resetting communication mechanisms, clearing the
-echo area, displaying partial keys typed slowly by the user, etc.
-            </p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="ControllingTheCommandInterpreter"></a>6.7.2.1.Â Controlling The Command Interpreter</h4>
-                  </div>
-                </div>
-              </div>
-              <p>
-                <div class="refentrytitle">
-                  <a id="hv_command_abort_hook"></a>
-                  <strong>[Hemlock Variable]</strong>
-                  <br></br>
-                  <code>
-                        Command Abort Hook 
-                    </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp44014480"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-The command interpreter invokes the function in this variable whenever
-someone aborts a command (for example, if someone called
-editor-error).
-                    </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="EditorInput"></a>6.7.2.2.Â Editor Input</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-The canonical representation of editor input is a key-event structure.
-Users can bind commands to keys, which are
-non-empty sequences of key-events. A key-event consists of an
-identifying token known as a keysym and a field of bits representing
-modifiers.  Users define keysym names by supplying names that reflect
-the legends on their keyboard's keys. Users define modifier names
-similarly, but the system chooses the bit and mask for recognizing the
-modifier.  You can use keysym and modifier names to textually specify
-key-events and Hemlock keys in a #k syntax. The following are some
-examples:
-                    </p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-#k"C-u"
-#k"Control-u"
-#k"c-m-z"
-#k"control-x meta-d"
-#k"a"
-#k"A"
-#k"Linefeed"
-
-</pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-This is convenient for use within code and in init files
-containing <code class="code">bind-key</code> calls.
-                    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-The #k syntax is delimited by double quotes.  Within the
-double quotes, spaces separate multiple key-events.  A single
-key-event optionally starts with modifier names terminated by hyphens.
-Modifier names are alphabetic sequences of characters which the system
-uses case-insensitively. Following modifiers is a keysym name, which
-is case-insensitive if it consists of multiple characters, but if the
-name consists of only a single character, then it is case-sensitive.
-                    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-You can escape special characters---hyphen, double quote, open angle
-bracket, close angle bracket, and space---with a backslash, and you
-can specify a backslash by using two contiguously.  You can use angle
-brackets to enclose a keysym name with many special characters in it.
-Between angle brackets appearing in a keysym name position, there are
-only two special characters, the closing angle bracket and backslash.
-                    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-For more information on key-events see the <a class="link" href="#KeyEvents" title="6.17.1.Â Key-events">Key-events</a> section.
-                    </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="BindingCommandsToKeys"></a>6.7.2.3.Â Binding Commands to Keys</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-The command interpreter determines which command to invoke on the
-basis of <span class="emphasis"><em>key bindings</em></span>. A key binding is an association between a
-command and a sequence of key-events.  A sequence
-of key-events is called a key and is represented by a single key-event
-or a sequence (list or vector) of key-events.
-                    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-Since key bindings may be local to a mode or buffer, the <a class="link" href="#HemlockProgrammingTheCurrentEnvironment" title="6.5.Â The Current Environment">current
-environment</a> determines the set of key bindings in effect at
-any given time.  When the command interpreter tries to find the
-binding for a key, it first checks if there is a local binding in
-the <a class="link" href="#CurrentBuffer" title="6.3.1.Â The Current Buffer">current buffer</a>, then if there is a binding in each of the
-minor modes and the major <a class="link" href="#HemlockProgrammingModes" title="6.8.Â Modes">mode</a> for the current buffer, and
-finally checks to see if there is a global binding.  If no binding is
-found, then the command interpreter beeps or flashes the screen to
-indicate this.
-                    </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_bind-key"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                bind-key name key <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind where 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp44034352"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function associates command name and key in some environment. Key
-is either a key-event or a sequence of key-events.  There are three
-possible values of kind:
-                            </p>
-                    <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:global</span></i>---
-The default, make a global key binding.
-                                        </p>
-                    <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:mode</span></i>---
-Make a mode specific key binding in the mode whose name is where.
-                                        </p>
-                    <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:buffer</span></i>---
-Make a binding which is local to buffer where.
-                                        </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This processes key for <a class="link" href="#KeyTranslation" title="6.7.2.4.Â Key Translation">key translations</a> before establishing the
-binding.
-                            </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-If the key is some prefix of a key binding which already exists in the
-specified place, then the new one will override the old one,
-effectively deleting it.
-                            </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-                                <code class="code">do-alpha-key-events</code> is useful for setting up bindings in certain new modes.
-                            </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_command-bindings"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                command-bindings command 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp44050608"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a list of the places where command is bound.  A
-place is specified as a list of the key (always a vector), the kind of
-binding, and where (either the mode or buffer to which the binding is
-local, or nil if it is a global).
-                            </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_delete-key-binding"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                delete-key-binding key <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind where 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp44058032"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function removes the binding of key in some place. Key is either
-a key-event or a sequence of key-events. kind is the kind of binding
-to delete, one of :global(the default), :mode or :buffer. If kind is
-:mode, where is the mode name, and if kind is :buffer, then where is
-the buffer.
-                            </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function signals an error if key is unbound.
-                            </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This processes key for <a class="link" href="#KeyTranslation" title="6.7.2.4.Â Key Translation">key translations</a> before deleting the binding.
-                            </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_get-command"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                get-command key <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kind where 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp44067328"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the command bound to key, returning nil if it is
-unbound. Key is either a key-event or a sequence of key-events.  If
-key is an initial subsequence of some keys, then this returns the
-keyword :prefix. There are four cases of kind:
-                            </p>
-                    <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:current</span></i>---
-Return the current binding of key using the current buffer's search
-list.  If there are any transparent key bindings for key, then they
-are returned in a list as a second value.
-                                        </p>
-                    <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:global</span></i>---
-Return the global binding of key. This is the default.
-                                        </p>
-                    <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:mode</span></i>---
-Return the binding of key in the mode named where.
-                                        </p>
-                    <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:buffer</span></i>---
-Return the binding of key local to the buffer where.
-                                        </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This processes key for <a class="link" href="#KeyTranslation" title="6.7.2.4.Â Key Translation">key translations</a> before looking for any
-binding.
-                            </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_map-bindings"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                map-bindings function kind <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> where 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp44084608"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function maps over the key bindings in some place.  For each
-binding, this passes function the key and the command bound to
-it. Kind and where are the same as in bind-key. The key is not
-guaranteed to remain valid after a given iteration.
-                            </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="KeyTranslation"></a>6.7.2.4.Â Key Translation</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-Key translation is a process that the command interpreter applies to
-keys before doing anything else.  There are two kinds of key
-translations: substitution and bit-prefix. In either case, the command
-interpreter translates a key when a specified key-event sequence
-appears in a key.
-                    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-In a substitution translation, the system replaces the matched
-subsequence with another key-event sequence. Key translation is not
-recursively applied to the substituted key-events.
-                    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-In a bit-prefix translation, the system removes the matched
-subsequence and effectively sets the specified bits in the next
-key-event in the key.
-                    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-While translating a key, if the system encounters an incomplete final
-subsequence of key-events, it aborts the translation process.  This
-happens when those last key-events form a prefix of some
-translation. It also happens when they translate to a bit-prefix, but
-there is no following key-event to which the system can apply the
-indicated modifier. If there is a binding for this partially
-untranslated key, then the command interpreter will invoke that
-command; otherwise, it will wait for the user to type more key-events.
-                    </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_key-translation"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                                key-translation key 
-                            </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp44095840"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This form is setf-able and allows users to register key translations
-that the command interpreter will use as users type key-events.
-                            </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the key translation for key, returning nil if
-there is none. Key is either a key-event or a sequence of key-events.
-If key is a prefix of a translation, then this returns :prefix.
-                            </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-A key translation is either a key or modifier specification. The bits
-translations have a list form: (:bits {bit-name}*).
-                            </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-Whenever key appears as a subsequence of a key argument to the binding
-manipulation functions, that portion will be replaced with the
-translation.
-                            </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="TransparentKeyBindings"></a>6.7.2.5.Â Transparent Key Bindings</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-Key bindings local to a mode may be transparent. A transparent key
-binding does not shadow less local key bindings, but rather indicates
-that the bound command should be invoked before the first normal key
-binding.  Transparent key bindings are primarily useful for
-implementing minor modes such as auto fill and word
-abbreviation. There may be several transparent key bindings for a
-given key, in which case all of the transparent commands are invoked in the
-order they were found. If there no normal key binding for a key typed,
-then the command interpreter acts as though the key is unbound even if
-there are transparent key bindings.
-                    </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-The :transparent-p argument to <a class="link" href="#f_defmode" title="Function defmode">defmode</a> determines whether
-all the key bindings in a mode are transparent or not.  In addition
-a particular command may be declared to be transparent by the
-:transparent-p argument to defcommand and make-command.
-                    </p>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="CommandTypes"></a>6.7.3.Â Command Types</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-In many editors the behavior of a command depends on the kind of
-command invoked before it. Hemlock provides a mechanism to support
-this known as <code class="code">command type</code>.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_last-command-type"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        last-command-type 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44110704"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This returns the command type of the last command invoked. If this is
-set with setf, the supplied value becomes the value of
-last-command-type until the next command completes.  If the previous
-command did not set last-command-type, then its value is nil. Normally
-a command type is a keyword. The command type is not cleared after a
-command is invoked due to a transparent key binding.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="CommandArguments"></a>6.7.4.Â Command Arguments</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-There are three ways in which a command may be invoked: It may be
-bound to a key which has been typed, it may be invoked as an extended
-command, or it may be called as a Lisp function.  Ideally commands
-should be written in such a way that they will behave sensibly no
-matter which way they are invoked. The functions which implement
-commands must obey certain conventions about argument passing if the
-command is to function properly.
-            </p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="PrefixArgument"></a>6.7.4.1.Â The Prefix Argument</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-Whenever a command is invoked it is passed as its first argument what
-is known as the prefix argument. The prefix argument is always either
-an integer or nil. When a command uses this value it is usually as a
-repeat count, or some conceptually similar function.
-                </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_prefix-argument"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            prefix-argument 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp44121776"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the current value of the prefix argument.  When
-set with setf, the new value becomes the prefix argument for the next
-command.  If the prefix argument is not set by the previous command
-then the prefix argument for a command is nil. The prefix argument is
-not cleared after a command is invoked due to a transparent key
-binding.
-                        </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="LispArguments"></a>6.7.4.2.Â Lisp Arguments</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-It is often desirable to call commands from Lisp code, in which case
-arguments which would otherwise be prompted for are passed as optional
-arguments following the prefix argument.  A command should prompt for
-any arguments not supplied.
-                </p>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingModes"></a>6.8.Â Modes</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-A mode is a collection of Hemlock values which may be present in the
-<a class="link" href="#HemlockProgrammingTheCurrentEnvironment" title="6.5.Â The Current Environment">current environment</a> depending on the editing task at hand.
-An example of a typical mode is Lisp, for editing Lisp code.
-        </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="ModeHooks"></a>6.8.1.Â Mode Hooks</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-When a mode is added to or removed from a buffer, its mode hook is
-invoked.  The hook functions take two arguments, the buffer involved
-and t if the mode is being added or nil if it is being removed.  Mode
-hooks are typically used to make a mode do something additional to
-what it usually does.  One might, for example, make a Text mode hook
-that turned on auto-fill mode when you entered.
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="MajorAndMinorModes"></a>6.8.2.Â Major and Minor Modes</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-There are two kinds of modes, major modes and minor modes. A buffer
-always has exactly one major mode, but it may have any number of minor
-modes.  Major modes may have mode character attributes while minor
-modes may not.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-A major mode is usually used to change the environment in some major
-way, such as to install special commands for editing some language.
-Minor modes generally change some small attribute of the environment,
-such as whether lines are automatically broken when they get too long.
-A minor mode should work regardless of what major mode and minor modes
-are in effect.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_default_modes"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Default Modes (initial value '("Fundamental" "Save")) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44138464"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This variable contains a list of mode names which are instantiated in
-a buffer when no other information is available.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_mode-names"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code>
-                        *mode-names* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44145104"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Holds a string-table of the names of all the modes.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="c_illegal"></a>
-                <strong>[Command]</strong>
-                <br></br>
-                <code>
-                        Illegal 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44151664"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This is a useful command to bind in modes that wish to shadow global
-bindings by making them effectively illegal.  Also, although less
-likely, minor modes may shadow major mode bindings with this.  This
-command calls editor-error.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="ModeFunctions"></a>6.8.3.Â Mode Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_defmode"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        defmode name <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :setup-function :cleanup-function :major-p :precedence :transparent-p :documentation 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44160256"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function defines a new mode named name, and enters it in
-<a class="link" href="#v_mode-names" title="Variable *mode-names*">*mode-names*</a>.  If major-p is supplied and is not nil then
-the mode is a major mode; otherwise it is a minor mode.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Setup-function and cleanup-function are functions which are invoked
-with the buffer affected, after the mode is turned on, and before it
-is turned off, respectively.  These functions typically are used to
-make buffer-local key or variable bindings and to remove them when the
-mode is turned off.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Precedence is only meaningful for a minor mode.  The precedence of a
-minor mode determines the order in which it in a buffer's list of
-modes.  When searching for values in the current environment, minor
-modes are searched in order, so the precedence of a minor mode
-determines which value is found when there are several definitions.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Transparent-p determines whether key bindings local to the defined mode
-are transparent.  Transparent key bindings are invoked in addition to
-the first normal key binding found rather than shadowing less local
-key bindings.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Documentation is some introductory text about the mode.  Commands such
-as Describe Mode use this.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mode-documentation"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mode-documentation name 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44170336"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the documentation for the mode named name.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-major-mode"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-major-mode buffer 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44176912"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_buffer_major_mode_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Buffer Major Mode Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44183472"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-buffer-major-mode returns the name of buffer's major mode.  The major
-mode may be changed with setf; then Buffer Major Mode Hook is invoked
-with buffer and the new mode.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-minor-mode"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-minor-mode buffer name 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44190176"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_buffer_minor_mode_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Buffer Minor Mode Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44196736"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-buffer-minor-mode returns t if the minor mode name is active in
-buffer, nil otherwise. A minor mode may be turned on or off by using
-setf; then Buffer Minor Mode Hook is invoked with buffer, name and the
-new value.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mode-variables"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mode-variables name 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44203472"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the string-table of mode local variables.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mode-major-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mode-major-p name 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44210032"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns t if name is the name of a major mode, or nil if it is the
-name of a minor mode.  It is an error for name not to be the name of a
-mode.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingCharacterAttributes"></a>6.9.Â Character Attributes</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="HemlockProgrammingCharacterAttributesIntroduction"></a>6.9.1.Â Introduction</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Character attributes provide a global database of information about
-characters.  This facility is similar to, but more general than, the
-syntax tables of other editors such as Emacs. For example, you should
-use character attributes for commands that need information regarding
-whether a character is whitespace or not.  Use character attributes
-for these reasons:
-            </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>
-If this information is all in one place, then it is easy the
-change the behavior of the editor by changing the syntax table,
-much easier than it would be if character constants were wired
-into commands.
-                    </p>
-                </li>
-              </ol>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>
-This centralization of information avoids needless duplication of effort.
-                    </p>
-                </li>
-              </ol>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>
-The syntax table primitives are probably faster than anything that
-can be written above the primitive level.
-                    </p>
-                </li>
-              </ol>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Note that an essential part of the character attribute scheme is that
-character attributes are global and are there for the user to
-change. Information about characters which is internal to some set of
-commands (and which the user should not know about) should not be
-maintained as a character attribute.  For such uses various character
-searching abilities are provided by the function <a class="link" href="#f_find-pattern" title="Function find-pattern">find-pattern</a>.
-20).
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="CharacterAttributeNames"></a>6.9.2.Â Character Attribute Names</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-As for Hemlock variables, character attributes have a user visible
-string name, but are referred to in Lisp code as a symbol.  The string
-name, which is typically composed of capitalized words separated by
-spaces, is translated into a keyword by replacing all spaces with
-hyphens and interning this string in the keyword package.  The
-attribute named "Ada Syntax" would thus become :ada-syntax.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_character-attribute-names"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code>
-                        *character-attribute-names* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44230080"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Whenever a character attribute is defined, its name is entered in this
-<a class="link" href="#StringTableFunctions" title="6.16.1.Â String-table Functions">string-table</a>, with the corresponding keyword as the value.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="CharacterAttributeFunctions"></a>6.9.3.Â Character Attribute Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_defattribute"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        defattribute name documentation <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> type initial-value 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44239280"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function defines a new character attribute with name, a
-string.  Character attribute operations take attribute
-arguments as a keyword whose name is name uppercased with spaces
-replaced by hyphens.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Documentation describes the uses of the character attribute.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Type, which defaults to (mod 2), specifies what type the values of the
-character attribute are.  Values of a character attribute may be of
-any type which may be specified to make-array. Initial-value (default
-0) is the value which all characters will initially have for this
-attribute.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_character-attribute-name"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        character-attribute-name attribute 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44247344"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_character-attribute-documentation"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        character-attribute-documentation attribute 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44253968"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These functions return the name or documentation for attribute.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_character-attribute"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        character-attribute attribute character 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44260496"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_character_attribute_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Character Attribute Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44267088"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-character-attribute returns the value of attribute for character. This
-signals an error if attribute is undefined.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-setf will set a character's attributes.  This setf method invokes the
-functions in Character Attribute Hook on the attribute and character
-before it makes the change.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-If character is nil, then the value of the attribute for the beginning
-or end of the buffer can be accessed or set.  The buffer beginning and
-end thus become a sort of fictitious character, which simplifies the
-use of character attributes in many cases.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_character-attribute-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        character-attribute-p symbol 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44275072"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if symbolis the name of a character attribute,
-nil otherwise.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_shadow-attribute"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        shadow-attribute attribute character value mode 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44281712"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_shadow_attribute_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Shadow Attribute Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44288272"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function establishes value as the value of character's attribute
-attribute when in the mode mode.  Mode must be the name of a major
-mode. Shadow Attribute Hook is invoked with the same arguments when
-this function is called. If the value for an attribute is set while
-the value is shadowed, then only the shadowed value is affected, not
-the global one.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_unshadow-attribute"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        unshadow-attribute attribute character mode 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44295184"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_unshadow_attribute_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Unshadow Attribute Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44301680"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Make the value of attribute for character no longer be shadowed in
-mode. Unshadow Attribute Hook is invoked with the same arguments when
-this function is called.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_find-attribute"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        find-attribute mark attribute <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> test 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44308800"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_reverse-find-attribute"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        reverse-find-attribute mark attribute <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> test 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44315760"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These functions find the next (or previous) character with some value
-for the character attribute attribute starting at mark. They pass test
-one argument, the value of attribute for the character tested.  If the
-test succeeds, then these routines modify mark to point before (after
-for reverse-find-attribute) the character which satisfied the test.
-If no characters satisfy the test, then these return nil, and mark
-remains unmodified. Test defaults to <code class="code">#'not-zerop</code>. There is no guarantee
-that the test is applied in any particular fashion, so it should have
-no side effects and depend only on its argument.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_find-not-attribute"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        find-not-attribute mark attribute 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44323312"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_reverse-find-not-attribute"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        reverse-find-not-attribute mark attribute 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44329872"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These are equivalent to (find-attribute mark attribute #'zerop) and
-(reverse-find-attribute mark attribute #'zerop), respectively.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="CharacterAttributeHooks"></a>6.9.4.Â Character Attribute Hooks</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-It is often useful to use the character attribute mechanism as an
-abstract interface to other information about characters which in fact
-is stored elsewhere.  For example, some implementation of Hemlock
-might decide to define a Print Representation attribute which controls
-how a character is displayed on an output device.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-To make this easy to do, each attribute has a list of hook functions
-which are invoked with the attribute, character and new value whenever
-the current value changes for any reason.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_character-attribute-hooks"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        character-attribute-hooks attribute 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44339360"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Return the current hook list for attribute. This may be set with
-setf. The <a class="link" href="#m_add-hook" title="Macro add-hook">add-hook</a> and <a class="link" href="#m_remove-hook" title="Macro remove-hook">remove-hook</a> macros should be used to
-manipulate these lists.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="SystemDefinedCharacterAttributes"></a>6.9.5.Â System Defined Character Attributes</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-These are predefined in Hemlock:
-            </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-              <dl>
-                <dt>
-                  <span class="term">"Whitespace"</span>
-                </dt>
-                <dd>
-                  <p>
-A value of 1 indicates the character is whitespace.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">"Word Delimiter"</span>
-                </dt>
-                <dd>
-                  <p>
-A value of 1 indicates the character separates words (see the <a class="link" href="#EnglishTextBuffers" title="6.15.3.Â English Text Buffers">English Text Buffers</a> section).
-
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">"Space"</span>
-                </dt>
-                <dd>
-                  <p>
-This is like Whitespace, but it should not include Newline. Hemlock
-uses this primarily for handling indentation on a line.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">"Sentence Terminator"</span>
-                </dt>
-                <dd>
-                  <p>
-A value of 1 indicates these characters terminate sentences (see the <a class="link" href="#EnglishTextBuffers" title="6.15.3.Â English Text Buffers">English Text Buffers</a> section).
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">"Sentence Closing Char"</span>
-                </dt>
-                <dd>
-                  <p>
-A value of 1 indicates these delimiting characters, such as " or ),
-may follow a Sentence Terminator.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">"Paragraph Delimiter"</span>
-                </dt>
-                <dd>
-                  <p>
-A value of 1 indicates these characters delimit paragraphs when they
-begin a line (see the <a class="link" href="#EnglishTextBuffers" title="6.15.3.Â English Text Buffers">English Text Buffers</a> section).
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">"Page Delimiter"</span>
-                </dt>
-                <dd>
-                  <p>
-A value of 1 indicates this character separates <a class="link" href="#LogicalPages" title="6.15.4.Â Logical Pages">logical pages</a>
-when it begins a line.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">"Lisp Syntax"</span>
-                </dt>
-                <dd>
-                  <p>
-This uses symbol values from the following:
-                        </p>
-                </dd>
-              </dl>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-nil  These characters have no interesting properties.
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-:space  These characters act like whitespace and should not include Newline.
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-:newline  This is the Newline character.
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-:open-paren  This is ( character.
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-:close-paren  This is ) character.
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-:prefix  This is a character that is a part of any form it precedes for example, the single quote, '.
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-:string-quote  This is the character that quotes a string literal, ".
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-:char-quote  This is the character that escapes a single character, \.
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-:comment  This is the character that makes a comment with the rest of the line,;.
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-:constituent  These characters are constitute symbol names.
-                    </p>
-                </li>
-              </ul>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingControllingTheDisplay"></a>6.10.Â Controlling the Display</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Views"></a>6.10.1.Â Views</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-A <code class="code">hemlock-view</code> represents the GUI object(s) used to display the contents
-of a buffer.  Conceptually it consists of a text buffer, a
-modeline for semi-permanent status info, an echo area for transient
-status info, and a text input area for reading prompted
-input. (Currently the last two are conflated, i.e. text input happens
-in the echo area).
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-The API for working with hemlock-views is not fully
-defined yet.  If you need to work with views beyond what's listed
-here, you will probably need to get in the sources and find some
-internal functions to call.
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="CurrentView"></a>6.10.2.Â The Current View</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_current-view"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        current-view 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44387712"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-current-view returns the hemlock view which is the target of the
-currently executing command.  This is usually the frontmost hemlock
-window in the current application.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="ViewFunctions"></a>6.10.3.Â View Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_hemlock-view-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        hemlock-view-p object 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44395728"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if object is a hemlock view, otherwise nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_hemlock-view-buffer"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        hemlock-view-buffer view 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44402320"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the buffer which is displayed in the view.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="CursorPositions"></a>6.10.4.Â Cursor Positions</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mark-column"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mark-column mark 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44410224"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the X position at which mark would be displayed,
-supposing its line was displayed on an infinitely wide screen.  This
-takes into consideration strange characters such as tabs.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_move-to-column"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        move-to-column mark column <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> line 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44417344"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function is analogous to <a class="link" href="#f_move-to-position" title="Function move-to-position">move-to-position</a>, except that
-it moves mark to the position on line which corresponds to the
-specified column.  If the line would not reach to the specified column, then nil is
-returned and mark is not modified.  Note that since a character may be
-displayed on more than one column on the screen, several different
-values of column may cause mark to be moved to the same position.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Redisplay"></a>6.10.5.Â Redisplay</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-The display of the buffer contents on the screen is updated at the
-end of each command.  The following function can be used to control
-the scroll position of the buffer in the view.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_set-scroll-position"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        set-scroll-position how <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> what 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44427360"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Normally, after a command that changes the contents of the buffer
-or the selection (i.e. the active region), the event handler repositions
-the view so that the selection is visible, scrolling the buffer as
-necessary.  Calling this function tells the system to not do that,
-and instead to position the buffer in a particular way.  <code class="code">how</code> can
-be one of the following:
-                    </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:center-selection</span></i>---
-This causes the selection (or the point) to be centered in the visible area.  <code xmlns="http://www.w3.org/1999/xhtml" class="code">what</code> is ignored.
-
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:page-up</span></i>---
-This causes the previous page of the buffer to be shown <code xmlns="http://www.w3.org/1999/xhtml" class="code">what</code> is ignored.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:page-down</span></i>---
-This causes the next page of the buffer to be shown. <code xmlns="http://www.w3.org/1999/xhtml" class="code">what</code> is ignored.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:lines-up</span></i>---
- This causes <code xmlns="http://www.w3.org/1999/xhtml" class="code">what</code> previous lines to be scrolled in at the top. <code xmlns="http://www.w3.org/1999/xhtml" class="code">what</code> must be an integer.  
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:lines-down</span></i>---
-This causes <code xmlns="http://www.w3.org/1999/xhtml" class="code">what</code> next lines to be scrolled in at the bottom. <code xmlns="http://www.w3.org/1999/xhtml" class="code">what</code> must be an integer.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:line</span></i>---
- This causes the line containing <code xmlns="http://www.w3.org/1999/xhtml" class="code">what</code> to be scrolled to the top of the view. <code xmlns="http://www.w3.org/1999/xhtml" class="code">what</code> must be a mark.
-                                </p>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingLogicalKeyEvents"></a>6.11.Â Logical Key-Events</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="HemlockProgrammingLogicalKeyEventsIntroduction"></a>6.11.1.Â Introduction</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Some primitives such as <a class="link" href="#f_prompt-for-key" title="Function prompt-for-key">prompt-for-key</a> and commands such as
-Emacs query replace read key-events directly from the keyboard instead
-of using the command interpreter.  To encourage consistency between
-these commands and to make them portable and easy to customize, there
-is a mechanism for defininglogical key-events.  A logical key-event is
-a keyword which stands for some set of key-events.  The system
-globally interprets these key-events as indicators a particular
-action.  For example, the :help logical key-event represents the set of
-key-events that request help in a given Hemlock implementation. This
-mapping is a many-to-many mapping, not one-to-one, so a given logical
-key-event may have multiple corresponding actual key-events.  Also,
-any key-event may represent different logical key-events.
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="LogicalKeyEventFunctions"></a>6.11.2.Â Logical Key-Event Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_logical-key-event-names"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code>
-                        *logical-key-event-names* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44457104"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This variable holds a string-table mapping all logical key-event names
-to the keyword identifying the logical key-event.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_define-logical-key-event"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        define-logical-key-event string-name documentation 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44463792"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function defines a new logical key-event with name string-name.
-Logical key-event operations take logical key-events
-arguments as a keyword whose name is string-name uppercased with
-spaces replaced by hyphens.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Documentation describes the action indicated by the logical key-event.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_logical-key-event-key-events"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        logical-key-event-key-events keyword 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44471152"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the list of key-events representing the logical
-key-event keyword.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_logical-key-event-name"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        logical-key-event-name keyword 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44477824"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_logical-key-event-documentation"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        logical-key-event-documentation keyword 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44484368"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These functions return the string name and documentation given
-to define-logical-key-event for logical key-event keyword.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_logical-key-event-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        logical-key-event-p key-event keyword 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44491024"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if key-event is the logical key-event
-keyword. This is setf-able establishing or disestablishing key-events
-as particular logical key-events. It is a error for keyword to be an
-undefined logical key-event.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="SystemDefinedLogicalKeyEvents"></a>6.11.3.Â System Defined Logical Key-Events</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-There are many default logical key-events, some of which are used by
-functions documented in this manual.  If a command wants to read a
-single key-event command that fits one of these descriptions then the
-key-event read should be compared to the corresponding logical
-key-event instead of explicitly mentioning the particular key-event in
-the code.  In many cases you can use the <a class="link" href="#m_command-case" title="Macro command-case">command-case</a> macro.
-It makes logical key-events easy to use and takes care of prompting
-and displaying help messages.
-            </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>
-:abort Indicates the prompter should terminate its activity without performing any closing actions of convenience, for example.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-:yes Indicates the prompter should take the action under consideration.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-:no Indicates the prompter should NOT take the action under consideration.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-:do-all Indicates the prompter should repeat the action under consideration as many times as possible.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-:do-once Indicates the prompter should execute the action under consideration once and then exit.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-:help Indicates the prompter should display some help information.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-:confirm Indicates the prompter should take any input provided or use the default if the user entered nothing.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-:quote Indicates the prompter should take the following key-event as itself without any sort of command interpretation.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-:keep Indicates the prompter should preserve something.
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-:y Indicates a short positive response
-                    </p>
-                </li>
-                <li class="listitem">
-                  <p>
-:n Indicates a short negative response
-                    </p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Define a new logical key-event whenever:
-            </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>
-The key-event concerned represents a general class of actions, and
-several commands may want to take a similar action of this type.
-                    </p>
-                </li>
-              </ol>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>
-The exact key-event a command implementor chooses may generate
-violent taste disputes among users, and then the users can trivially
-change the command in their init files.
-                    </p>
-                </li>
-              </ol>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>
-You are using <code class="code">command-case</code> which prevents implementors from
-specifying non-standard characters for dispatching in otherwise
-possibly portable code, and you can define and set the logical
-key-event in a site dependent file where you can mention
-implementation dependent characters.
-                    </p>
-                </li>
-              </ol>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingEchoArea"></a>6.12.Â The Echo Area</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-Hemlock provides a number of facilities for displaying information and
-prompting the user for it.  Most of these work through a small area
-displayed at the bottom of the screen, called the Echo Area.
-        </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="EchoAreaFunctions"></a>6.12.1.Â Echo Area Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_clear-echo-area"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        clear-echo-area 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44522544"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Clears the echo area.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_message"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        message control-string <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> format-arguments 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44529488"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_loud-message"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        loud-message control-string <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> format-arguments 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44536448"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Displays a message in the echo area, replacing previous contents if any.
-loud-message is like message, but it also beeps.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_beep"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        beep 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44543072"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Gets the user's attention, typically by making a sound.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="PromptingFunctions"></a>6.12.2.Â Prompting Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Prompting functions can be used to obtain short one-line input from the user.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Cocoa note: Because of implementation restrictions, only one buffer at
-a time is allowed to read prompted input.  If a prompting function is
-invoked while a prompting operation is already in effect in another
-buffer, the attempt fails, telling the user "Buffer xxx is already
-waiting for input".
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Most of the prompting functions accept the following keyword arguments:
-            </p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-              <dl>
-                <dt>
-                  <span class="term">:must-exist</span>
-                </dt>
-                <dd>
-                  <p>
-If :must-exist has a non-nil value then the user is
-prompted until a valid response is obtained. If :must-exist is nil
-then return as a string whatever is input.  The default is t.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">:default</span>
-                </dt>
-                <dd>
-                  <p>
-If null input is given when the user is prompted then this
-value is returned. If no default is given then some input must be
-given before anything interesting will happen.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">:default-string</span>
-                </dt>
-                <dd>
-                  <p>
-If a :default is given then this is a string to be
-printed to indicate what the default is.  The default is some
-representation of the value for :default, for example for a buffer it
-is the name of the buffer.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">:prompt</span>
-                </dt>
-                <dd>
-                  <p>
-This is the prompt string to display.
-                        </p>
-                </dd>
-                <dt>
-                  <span class="term">:help</span>
-                </dt>
-                <dd>
-                  <p>
-This is similar to :prompt, except that it is displayed when the help
-command is typed during input.
-                        </p>
-                </dd>
-              </dl>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="blockquote">
-              <blockquote class="blockquote">
-                <p>This may also be a function.  When called with no arguments, it
-should either return a string which is the help text or perform some
-action to help the user, returning nil.
-            </p>
-              </blockquote>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-buffer"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-buffer <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help :must-exist :default :default-string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44564176"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Prompts with completion for a buffer name and returns the
-corresponding buffer.  If must-exist is nil, then it returns the input
-string if it is not a buffer name.  This refuses to accept the empty
-string as input when :default and :default-string are
-nil. :default-string may be used to supply a default buffer name
-when:default is nil, but when :must-exist is non-nil, it must name an
-already existing buffer.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-key-event"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-key-event <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44571488"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function prompts for a key-event returning immediately when the
-user types the next key-event.  <a class="link" href="#m_command-case" title="Macro command-case">command-case</a> is more useful
-for most purposes. When appropriate, use <a class="link" href="#HemlockProgrammingLogicalKeyEvents" title="6.11.Â Logical Key-Events">logical key-events</a>.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-key"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-key <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help :must-exist :default :default-string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44580080"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function prompts for a key, a vector of key-events, suitable for
-passing to any of the functions that manipulate <a class="link" href="#BindingCommandsToKeys" title="6.7.2.3.Â Binding Commands to Keys">key bindings</a>.
-If must-exist is true, then the key must be bound in the current
-environment, and the command currently bound is returned as the second
-value.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-file"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-file <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help :must-exist :default :default-string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44588048"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function prompts for an acceptable filename.  "Acceptable" means
-that it is a legal filename, and it exists if must-exist is
-non-nil. prompt-for-file returns a Common Lisp pathname.  If the file
-exists as entered, then this returns it, otherwise it is merged with
-default as by merge-pathnames.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-integer"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-integer <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help :must-exist :default :default-string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44595360"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function prompts for a possibly signed integer. If must-exist is
-nil, then prompt-for-integer returns the input as a string if it is
-not a valid integer.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-keyword"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-keyword string-tables <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help :must-exist :default :default-string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44602544"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function prompts for a keyword with completion, using the string
-tables in the list string-tables. If must-exist is non-nil, then the
-result must be an unambiguous prefix of a string in one of the
-string-tables, and the returns the complete string even if only a
-prefix of the full string was typed.  In addition, this returns the
-value of the corresponding entry in the string table as the second
-value.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-If must-exist is nil, then this function returns the string exactly as
-entered.  The difference between prompt-for-keyword with must-exist
-nil, and prompt-for-string, is the user may complete the input using
-the Complete Parse and Complete Field commands.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-expression"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-expression <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help :must-exist :default :default-string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44610672"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function reads a Lisp expression.  If must-exist is nil, and a
-read error occurs, then this returns the string typed.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-string"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-string <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help :default :default-string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44617792"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function prompts for a string; this cannot fail.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-variable"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-variable <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help :must-exist :default :default-string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44624864"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function prompts for a variable name.  If must-exist is non-nil,
-then the string must be a variable defined in the current environment,
-in which case the symbol name of the variable found is returned as the
-second value.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-y-or-n"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-y-or-n <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help :must-exist :default :default-string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44632096"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This prompts for logical key events :Y or :N, returning t or nil without waiting for
-confirmation.  When the user types a confirmation key, this returns
-default if it is supplied.  If must-exist is nil, this returns
-whatever key-event the user first types; however, if the user types
-one of the above key-events, this returns t or nil. This is analogous to
-the Common Lisp function y-or-n-p.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_prompt-for-yes-or-no"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        prompt-for-yes-or-no <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :prompt :help :must-exist :default :default-string 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44639504"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function is to prompt-for-y-or-n as yes-or-no-p is to
-y-or-n-p. "Yes" or "No" must be typed out in full and confirmation
-must be given.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_command-case"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        command-case ({key value}*){({({tag}*) | tag} help {form}*)}* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44646208"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This macro is analogous to the Common Lisp case macro. Commands such
-as Help use this to get a key-event, translate it to a
-character, and then to dispatch on the character to some case.  In
-addition to character dispatching, this supports <a class="link" href="#HemlockProgrammingLogicalKeyEvents" title="6.11.Â Logical Key-Events">logical key-events</a>
-by using the input key-event directly without translating it
-to a character.  Since the description of this macro is rather
-complex, first consider the following example:
-</p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-(defcommand "Save All Buffers" (p)
-  "Give the User a chance to save each modified buffer."
-  (dolist (b *buffer-list*)
-    (select-buffer-command () b)
-    (when (buffer-modified b)
-      (command-case (:prompt "Save this buffer: [Y] "
-			     :help "Save buffer, or do something else:")
-	((:yes :confirm)
-	 "Save this buffer and go on to the next."
-	 (save-file-command () b))
-	(:no "Skip saving this buffer, and go on to the next.")
-	((:exit #\p) "Punt this silly loop."
-	 (return nil))))))
-
-</pre>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-command-case prompts for a key-event and then executes the code in the
-first branch with a logical key-event or a character (called tags)
-matching the input.  Each character must be a standard-character, one
-that satisfies the Common Lisp standard-char-p predicate, and the
-dispatching mechanism compares the input key-event to any character
-tags by mapping the key-event to a character with
-ext:key-event-char. If the tag is a logical key-event, then the search
-for an appropriate case compares the key-event read with the tag
-using logical-key-event-p.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-All uses of command-case have two default cases, :help and :abort. You
-can override these easily by specifying your own branches that include
-these logical key-event tags.  The :help branch displays in a pop-up
-window the a description of the valid responses using the variously
-specified help strings. The :abort branch signals an editor-error.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-The key/value arguments control the prompting.  The following are valid values:
-                    </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:help</span></i>---
-The default :help case displays this string in a pop-up window.  In
-addition it formats a description of the valid input including each
-case's help string.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:prompt</span></i>---
-This is the prompt used when reading the key-event.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:bind</span></i>---
-This specifies a variable to which the prompting mechanism binds the
-input key-event. Any case may reference this variable.  If you wish
-to know what character corresponds to the key-event, use
-key-event-char.
-                                </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Instead of specifying a tag or list of tags, you may use t. This
-becomes the default branch, and its forms execute if no other branch
-is taken, including the default :help and :abort cases. This option has
-no helpstring, and the default :help case does not describe the default
-branch.  Every command-case has a default branch; if none is specified,
-the macro includes one that beep's and reprompt's (see below).
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Within the body of command-case, there is a defined reprompt macro. It
-causes the prompting mechanism and dispatching mechanism to
-immediately repeat without further execution in the current branch.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="ControlOfParsingBehavior"></a>6.12.3.Â Control of Parsing Behavior</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_beep_on_ambiguity"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Beep On Ambiguity (initial value t) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44666864"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-If this variable is true, then an attempt to complete a parse which is
-ambiguous will result in a "beep".
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="DefiningNewPromptingFunctions"></a>6.12.4.Â Defining New Prompting Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Prompting functionality is implemented by the function parse-for-something
-in cooperation with commands defined in "Echo Area" mode on the buffer associated
-with the echo area. You can implement new prompting functions by invoking
-parse-for-something with appropriate arguments.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_parse-for-something"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        parse-for-something <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44675952"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function enters a mode reading input from the user and echoing it in the echo area, and
-returns a value when done.  The input is managed by commands bound in "Echo Area" mode on the
-buffer associated with the echo area.  The following  keyword arguments are accepted:
-                    </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term"><code class="code">:verification-function</code></span></i>---
-This is invoked by the <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="#c_confirm_parse" title="Command Confirm Parse">Confirm Parse</a> command.  It does most of
-the work when parsing prompted input. Confirm Parse calls it
-with one argument, which is the string that the user typed so far.
-The function should return a list of values which are to be the result
-of the recursive edit, or nil indicating that the parse failed.  In order
-to return zero values, a non-nil second value may be returned along with
-a nil first value.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term"><code class="code">:string-tables</code></span></i>---
-This is the list of string-tables, if any, that pertain to this parse.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term"><code class="code">:value-must-exist</code></span></i>---
-This is referred to by the verification function, and possibly some of the
-commands.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term"><code class="code">:default</code></span></i>---
-The string representing the default object when prompting the user.
-Confirm Parse supplies this to the parse verification function when the
-user input is empty.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term"><code class="code">:default-string</code></span></i>---
-When prompting the user, if :default is not specified, Hemlock displays
-this string as a representation of the default object; for example,
-when prompting for a buffer, this argument would be a default buffer name.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term"><code class="code">:type</code></span></i>---
-The kind of parse, e.g. :file, :keyword, :string. This tells the completion
-commands how to do completion, with :string disabling completion.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term"><code class="code">:prompt</code></span></i>---
-The prompt to display to the user.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term"><code class="code">:help</code></span></i>---
-The help string or function being used for the current parse.
-                                </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="SomeEchoAreaCommands"></a>6.12.5.Â Some Echo Area Commands</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-These are some of the Echo Area commands that coordinate with the
-prompting routines. Hemlock binds other commands specific to the Echo
-Area, but they are uninteresting to mention here, such as deleting to
-the beginning of the line or deleting backwards a word.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="c_help_on_parse"></a>
-                <strong>[Command]</strong>
-                <br></br>
-                <code>
-                        Help On Parse (bound to Home, C-_ in Echo Area mode) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44703424"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Display the help text for the parse currently in progress.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="c_complete_keyword"></a>
-                <strong>[Command]</strong>
-                <br></br>
-                <code>
-                        Complete Keyword (bound to Escape in Echo Area mode) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44709968"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This attempts to complete the current region.
-It signals an editor-error if the input is ambiguous or incorrect.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="c_complete_field"></a>
-                <strong>[Command]</strong>
-                <br></br>
-                <code>
-                        Complete Field (bound to Space in Echo Area mode) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44716624"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Similar to <code class="code">Complete Keyword</code>, but only attempts to complete up to and
-including the first character in the keyword with a non-zero
-:parse-field-separator attribute. If there is no field separator then
-attempt to complete the entire keyword.  If it is not a keyword parse
-then just self-insert.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="c_confirm_parse"></a>
-                <strong>[Command]</strong>
-                <br></br>
-                <code>
-                        Confirm Parse (bound to Return in Echo Area mode) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44723888"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Call the verification function with the current input.  If it
-returns a non-nil value then that is returned as the value of the
-parse.  A parse may return a nil value if the verification function
-returns a non-nil second value.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingFiles"></a>6.13.Â Files</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-This chapter discusses ways to read and write files at various
-levels---at marks, into regions, and into buffers.  This also treats
-automatic mechanisms that affect the state of buffers in which files
-are read.
-        </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="FileOptionsAndTypeHooks"></a>6.13.1.Â File Options and Type Hooks</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-The user specifies file options with a special syntax on the first
-line of a file.  If the first line contains the string "-*-",
-then Hemlock interprets the text between the first such occurrence and
-the second, which must be contained in one line , as a list of
-"option: value" pairs separated by semicolons.  The following is a
-typical example:
-</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-;;; -*- Mode: Lisp, Editor; Package: Hemlock -*-
-
-</pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">See the Hemlock User's Manual for more details and predefined options.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-File type hooks are executed when Hemlock reads a file into a buffer
-based on the type of the pathname.  When the user specifies a Mode
-file option that turns on a major mode, Hemlock ignores type hooks.
-This mechanism is mostly used as a simple means for turning on some
-appropriate default major mode.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_define-file-option"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        define-file-option name (buffer value) {declaration}* {form}* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44736304"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This defines a new file option with the string
-name name. Buffer and value specify variable names for the buffer and the
-option value string, and forms are evaluated with these bound.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_define-file-type-hook"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        define-file-type-hook type-list (buffer type) {declaration}* {form}* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44743056"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This defines some code that process-file-options(below) executes when
-the file options fail to set a major mode.  This associates each type,
-a string, in type-list with a routine that binds buffer to the
-buffer the file is in and type to the type of the pathname.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_process-file-options"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        process-file-options buffer <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> pathname 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44750288"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This checks for file options in buffer and invokes handlers if there
-are any. Pathname defaults to buffer's pathname but may be nil. If
-there is no Mode file option that specifies a major mode, and pathname
-has a type, then this tries to invoke the appropriate file type
-hook. read-buffer-file calls this.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="PathnamesAndBuffers"></a>6.13.2.Â Pathnames and Buffers</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-There is no good way to uniquely identify buffer names and pathnames.
-However, Hemlock has one way of mapping pathnames to buffer names that
-should be used for consistency among customizations and primitives.
-Independent of this, Hemlock provides a means for consistently
-generating prompting defaults when asking the user for pathnames.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_pathname-to-buffer-name"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        pathname-to-buffer-name pathname 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44759280"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a string of the form "file-namestring directory-namestring".
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_pathname_defaults"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Pathname Defaults (initial value (pathname "gazonk.del")) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44765872"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_last_resort_pathname_defaults_function"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Last Resort Pathname Defaults Function 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44772528"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_last_resort_pathname_defaults"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Last Resort Pathname Defaults (initial value (pathname "gazonk")) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44779168"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These variables control the computation of default pathnames when
-needed for promting the user.  Pathname Defaults is a sticky
-default. See the Hemlock User's Manual for more details.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_buffer-default-pathname"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        buffer-default-pathname buffer 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44785872"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This returns Buffer Pathname if it is bound.  If it is not bound, and
-buffer's name is composed solely of alphnumeric characters, then
-return a pathname formed from buffer's name.  If buffer's name has
-other characters in it, then return the value of Last Resort Pathname
-Defaults Function called on buffer.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="FileGroups"></a>6.13.3.Â File Groups</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Currently Hemlock doesn't have support for file groups.
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="FileReadingAndWriting"></a>6.13.4.Â File Reading and Writing</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Common Lisp pathnames are used by the file primitives.  For probing,
-checking write dates, and so forth, all of the Common Lisp file
-functions are available.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_read-file"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        read-file pathname mark 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44796352"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This inserts the file named by pathname at mark.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_write-file"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        write-file region pathname <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> :keep-backup :append 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44803376"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_keep_backup_files"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Keep Backup Files (initial value nil) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44809904"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function writes the contents of region to the file named by
-pathname. This writes region using a stream as if it were opened with
-:if-exists supplied as :rename-and-delete.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-When keep-backup, which defaults to the value of Keep Backup Files, is
-non-nil, this opens the stream as if :if-exists were :rename. If
-append is non-nil, this writes the file as if it were opened
-with:if-exists supplied as :append.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This signals an error if both append and keep-backup are supplied as non-nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_write-buffer-file"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        write-buffer-file buffer pathname 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44817824"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_write_file_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Write File Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44824336"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_add_newline_at_eof_on_writing_file"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Add Newline at EOF on Writing File (initial value :ask-user) 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44830976"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-write-buffer-file writes buffer to the file named by pathname
-including the following:
-                    </p>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It assumes pathname is somehow related to buffer's pathname: if
-the buffer's write date is not the same as pathname's, then this
-prompts the user for confirmation before overwriting the file.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It consults Add Newline at EOF on Writing File (see Hemlock User's
-Manual for possible values) and interacts with the user if
-necessary.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It sets Pathname Defaults, and after using write-file,
-marks buffer unmodified.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It updates Buffer's pathname and write date.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It renames the buffer according to the new pathname if possible.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It invokes Write File Hook.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Write File Hook is a list of functions that take the newly written buffer as an argument.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_read-buffer-file"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        read-buffer-file pathname buffer 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44847136"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_read_file_hook"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Read File Hook 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44853584"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-read-buffer-file deletes buffer's region and uses read-file to read
-pathname into it, including the following:
-                    </p>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It sets buffer's write date to the file's write date if the file
-exists; otherwise, it messages that this is a new file and sets
-buffer's write date to nil.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It moves buffer's point to the beginning.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It sets buffer's unmodified status.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It sets buffer's pathname to the result of probing pathname if the
-file exists; otherwise, this function sets buffer's pathname to the
-result of merging pathname with default-directory.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It sets Pathname Defaults to the result of the previous item.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It processes the file options.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-It invokes Read File Hook.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Read File Hook is a list functions that take two arguments---the
-buffer read into and whether the file existed, t if so.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingHemlockSLispEnvironment"></a>6.14.Â Hemlock's Lisp Environment</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-This chapter is sort of a catch all for any functions and variables
-which concern Hemlock's interaction with the outside world.
-        </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="EnteringAndLeavingTheEditor"></a>6.14.1.Â Entering and Leaving the Editor</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_ed"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        ed <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> x 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44874960"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This a standard Common Lisp function.  If x is supplied and is a
-string or pathname, the file specified by x is visited in a hemlock
-view (opening a new window if necessary, otherwise bringing an
-existing window with the file to the front), and the hemlock view
-object is the return value from the function.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-If x is null, a new empty hemlock view is created and returned.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-If x is a symbol or a setf function name, it attempts to
-edit the definition of the name.  In this last case, the
-function returns without waiting for the operation to complete
-(for example, it might put up a non-modal dialog asking the
-user to select one of multiple definitions) and hence the
-return value is always NIL.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="KeyboardInput"></a>6.14.2.Â Keyboard Input</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="v_key-event-history"></a>
-                <strong>[Variable]</strong>
-                <br></br>
-                <code>
-                        *key-event-history* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44884416"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This is a Hemlock <a class="link" href="#RingFunctions" title="6.16.2.Â Ring Functions">ring buffer</a> that holds the last 60
-key-events received.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_last-key-event-typed"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        last-key-event-typed 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44891696"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the last key-event the user typed to invoke the current command.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_last-char-typed"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        last-char-typed 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44898304"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the character corresponding to the last key event typed.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="HemlockStreams"></a>6.14.3.Â Hemlock Streams</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-It is possible to create streams which output to or get input from a
-buffer. This mechanism is quite powerful and permits easy interfacing
-of Hemlock to Lisp.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Note that operations on these streams operate directly on buffers,
-therefore they have the same restrictions as described <a class="link" href="#HemlockProgrammingBuffers" title="6.3.Â Buffers">here</a>
-for interacting with buffers from outside of the GUI thread.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_make-hemlock-output-stream"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        make-hemlock-output-stream mark <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> buffered 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44908672"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a stream that inserts at mark all
-output directed to it.  It works best if mark is a left-inserting mark.
-Buffered controls whether the stream is buffered or not, and its valid values
-are the following keywords:
-                    </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:none</span></i>---
-No buffering is done.  This is the default.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:line</span></i>---
-The buffer is flushed whenever a newline is written or when it is
-explicitly done with force-output.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:full</span></i>---
-The stream is only brought up to date when it is explicitly
-done with force-output
-                                </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_hemlock-output-stream-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        hemlock-output-stream-p object 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44921872"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if object is a hemlock-output-stream object.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_make-hemlock-region-stream"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        make-hemlock-region-stream region 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44928560"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a stream from which the text in
-region can be read.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_hemlock-region-stream-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        hemlock-region-stream-p object 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44935216"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if object is a hemlock-region-stream object.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_with-input-from-region"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        with-input-from-region (var region) {declaration}* {form}* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44941904"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-While evaluating forms, binds var to a stream which returns input from region.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_with-output-to-mark"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        with-output-to-mark (var mark [buffered]) {declaration}* {form}* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44948544"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-During the evaluation of the forms, binds var to a stream which inserts
-output at the permanent mark.  Buffered has the same meaning as for
-make-hemlock-output-stream.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_with-pop-up-display"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        with-pop-up-display (var <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> height name) {declaration}* {form}* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44955712"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This macro executes forms in a context with var bound to a
-stream. Hemlock collects output to this stream and tries to pop up a
-display of the appropriate height containing all the output.  When
-height is supplied, Hemlock creates the pop-up display immediately,
-forcing output on line breaks.  This is useful for displaying information
-of temporary interest.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="InterfaceToTheErrorSystem"></a>6.14.4.Â Interface to the Error System</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Hemlock commands are executed from an event handler in the initial
-Cocoa thread.  They are executed within a
-ccl::with-standard-abort-handling form, which means cl:abort,
-ccl:abort-break, ccl:throw-cancel will abort the current command only
-and exit the event handler in an orderly fashion.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-In addition, for now, lisp errors during command execution dump a
-backtrace in the system console and are otherwise handled as if by
-                <code class="code">handle-lisp-errors</code> below, which means it is not possible to debug
-errors at the point of the error.  Once Clozure CL has better support
-for debugging errors in the initial Cocoa thread, better Hemlock error
-handling will be provided that will allow for some way to debug.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_editor-error"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        editor-error <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> args 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44966352"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function is called to report minor errors to the user.  These are
-errors that a normal user could encounter in the course of editing,
-such as a search failing or an attempt to delete past the end of the
-buffer. This function simply aborts the current command.  Any args
-specified are used to format an error message to be placed in the echo
-area.  This function never returns.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_handle-lisp-errors"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        handle-lisp-errors {form}* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44973264"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Within the body of this macro any Lisp errors that occur are handled
-by displaying an error message in a dialog and aborting the current
-command, leaving the error text in the echo area.  This macro should
-be wrapped around code which may get an error due to some action of
-the user --- for example, evaluating code fragments on the behalf of
-and supplied by the user.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="DefinitionEditing"></a>6.14.5.Â Definition Editing</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Hemlock provides commands for finding the definition of a function
-or variable and placing the user at the definition in a buffer. A
-function is provided to allow invoking this functionality outside
-of Hemlock.  Note that this function is unusual in that it is
-it is safe to call outside of the command interpreter, and in fact
-it can be called from any thread.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_edit-definition"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        edit-definition name 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44982208"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function tries to find the definition of <code class="code">name</code>, create
-or activate the window containing it, and scroll the view
-to show the definition.  If there are multiple definitions
-available, the user is given a choice of which one to
-use.  This function may return before the operation is complete.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="EventScheduling"></a>6.14.6.Â Event Scheduling</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-No Event Scheduling functionality is provided at this time.
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Miscellaneous"></a>6.14.7.Â Miscellaneous</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_in-lisp"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        in-lisp {form}* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44992560"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This evaluates forms inside handle-lisp-errors. It also binds
-*package* to the package named by Current Package if it is
-non-nil. Use this when evaluating Lisp code on behalf of the user.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_do-alpha-chars"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        do-alpha-chars (var kind [result]) {form}* 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp44999296"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This iterates over alphabetic characters in Common Lisp binding var to
-each character in order as specified under character relations in
-Common Lisp the Language. Kind is one of:lower, :upper, or :both. When
-the user supplies :both, lowercase characters are processed first.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingHighLevelTextPrimitives"></a>6.15.Â High-Level Text Primitives</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-This chapter discusses primitives that operate on higher level text
-forms than characters and words. For English text, there are functions
-that know about sentence and paragraph structures, and for Lisp
-sources, there are functions that understand this language. This
-chapter also describes mechanisms for organizing file sections into
-logical pages and for formatting text forms.
-        </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="IndentingText"></a>6.15.1.Â Indenting Text</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_indent_function"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Indent Function       (initial value tab-to-tab-stop)  
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45009680"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-The value of this variable determines how indentation is done, and it
-is a function which is passed a mark as its argument. The function
-should indent the line that the mark points to. The function may move
-the mark around on the line. The mark will be :left-inserting. The
-default simply inserts a tab character at the mark. A function for
-Lisp mode probably moves the mark to the beginning of the line,
-deletes horizontal whitespace, and computes some appropriate
-indentation for Lisp code.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_indent_with_tabs"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Indent with Tabs (initial value nil)     
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45016704"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_spaces_per_tab"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Spaces per Tab        (initial value 8)        
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45023248"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Indent with Tabs should be true if indenting should use tabs
-whenever possible. If nil, the default, it only uses spaces.
-Spaces per Tab defines the size of a tab.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_indent-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        indent-region         region   
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45029952"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_indent-region-for-commands"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        indent-region-for-commands    region   
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45036560"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-indent-region invokes the value of Indent Function on every line of
-region. indent-region-for-commands uses indent-region but first saves
-the region for the Undo command.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_delete-horizontal-space"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        delete-horizontal-space       mark     
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45043248"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This deletes all characters on either side of mark with a Space attribute (see <a class="link" href="#SystemDefinedCharacterAttributes" title="6.9.5.Â System Defined Character Attributes">System Defined Character Attributes</a>) of 1.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="LispTextBuffers"></a>6.15.2.Â Lisp Text Buffers</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Hemlock bases its Lisp primitives on parsing a block of the buffer and
-annotating lines as to what kind of Lisp syntax occurs on the line or
-what kind of form a mark might be in (for example, string, comment,
-list, etc.). These do not work well if the block of parsed forms is
-exceeded when moving marks around these forms, but the block that gets
-parsed is somewhat programmable.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-There is also a notion of a top level form which this documentation
-often uses synonymously with defun, meaning a Lisp form occurring in a
-source file delimited by parentheses with the opening parenthesis at
-the beginning of some line. The names of the functions include this
-inconsistency.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_pre-command-parse-check"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        pre-command-parse-check       mark for-sure    
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45053504"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_parse_start_function"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Parse Start Function  (initial value start-of-parse-block)     
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45060064"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_parse_end_function"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Parse End Function    (initial value end-of-parse-block)       
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45066624"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_minimum_lines_parsed"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Minimum Lines Parsed          (initial value 50)       
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45073104"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_maximum_lines_parsed"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Maximum Lines Parsed          (initial value 500)      
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45079648"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_defun_parse_goal"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Defun Parse Goal      (initial value 2)        
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45086192"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-pre-command-parse-check calls Parse Start Function and Parse End
-Function on mark to get two marks. It then parses all the lines
-between the marks including the complete lines they point into. When
-for-sure is non-nil, this parses the area regardless of any cached
-information about the lines. Every command that uses the following
-routines calls this before doing so.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-The default values of the start and end variables use Minimum Lines
-Parsed, Maximum Lines Parsed, and Defun Parse Goal to determine how
-big a region to parse. These two functions always include at least the
-minimum number of lines before and after the mark passed to them. They
-try to include Defun Parse Goal number of top level forms before and
-after the mark passed them, but these functions never return marks
-that include more than the maximum number of lines before or after the
-mark passed to them.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_form-offset"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        form-offset   mark count       
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45094048"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This tries to move mark count forms forward if positive or -count
-forms backwards if negative. Mark is always moved. If there were
-enough forms in the appropriate direction, this returns mark,
-otherwise nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_top-level-offset"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        top-level-offset      mark count       
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45100784"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This tries to move mark count top level forms forward if positive or
--count top level forms backwards if negative. If there were enough top
-level forms in the appropriate direction, this returns mark, otherwise
-nil. Mark is moved only if this is successful.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mark-top-level-form"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mark-top-level-form   mark1 mark2      
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45107568"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This moves mark1 and mark2 to the beginning and end, respectively, of
-the current or next top level form. Mark1 is used as a reference to
-start looking. The marks may be altered even if unsuccessful. If
-successful, return mark2, else nil. Mark2 is left at the beginning of
-the line following the top level form if possible, but if the last
-line has text after the closing parenthesis, this leaves the mark
-immediately after the form.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_defun-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        defun-region          mark     
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45114528"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This returns a region around the current or next defun with respect to
-mark. Mark is not used to form the region. If there is no appropriate
-top level form, this signals an editor-error. This calls
-pre-command-parse-check first.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_inside-defun-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        inside-defun-p        mark     
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45121296"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_start-defun-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        start-defun-p         mark     
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45127760"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These return, respectively, whether mark is inside a top level form or
-at the beginning of a line immediately before a character whose Lisp
-Syntax (see <a class="link" href="#SystemDefinedCharacterAttributes" title="6.9.5.Â System Defined Character Attributes">System Defined Character Attributes</a>) 
-value is :opening-paren.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_forward-up-list"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        forward-up-list       mark     
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45135216"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_backward-up-list"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        backward-up-list      mark     
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45141744"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Respectively, these move mark immediately past a character whose Lisp
-Syntax (see <a class="link" href="#SystemDefinedCharacterAttributes" title="6.9.5.Â System Defined Character Attributes">System Defined Character Attributes</a>) 
-value is :closing-paren or immediately before
-a character whose Lisp Syntax value is :opening-paren.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_valid-spot"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        valid-spot    mark forwardp    
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45149200"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This returns t or nil depending on whether the character indicated by
-mark is a valid spot. When forwardp is set, use the character after
-mark and vice versa. Valid spots exclude commented text, inside
-strings, and character quoting.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_defindent"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        defindent     name count       
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45155904"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This defines the function with name to have count special
-arguments. indent-for-lisp, the value of <a class="link" href="#hv_indent_function" title="Hemlock Variable Indent Function">Indent Function</a>
-in Lisp mode, uses this to specially indent these arguments. For
-example, do has two, with-open-file has one, etc. There are many of
-these defined by the system including definitions for special Hemlock
-forms. Name is a simple-string, case insensitive and purely textual
-(that is, not read by the Lisp reader); therefore, "with-a-mumble" is
-distinct from "mumble:with-a-mumble".
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="EnglishTextBuffers"></a>6.15.3.Â English Text Buffers</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-This section describes some routines that understand basic English
-language forms.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_word-offset"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        word-offset   mark count       
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45165472"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This moves mark count words forward (if positive) or backwards (if
-negative). If mark is in the middle of a word, that counts as one. If
-there were count (-count if negative) words in the appropriate
-direction, this returns mark, otherwise nil. This always moves mark. A
-word lies between two characters whose Word Delimiter attribute value
-is 1 (see <a class="link" href="#SystemDefinedCharacterAttributes" title="6.9.5.Â System Defined Character Attributes">System Defined Character Attributes</a>).
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_sentence-offset"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        sentence-offset       mark count       
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45173088"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This moves mark count sentences forward (if positive) or backwards (if negative). If mark is in the middle of a sentence, that counts as one. If there were count (-count if negative) sentences in the appropriate direction, this returns mark, otherwise nil. This always moves mark. 
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-A sentence ends with a character whose Sentence Terminator attribute
-is 1 followed by two spaces, a newline, or the end of the buffer. The
-terminating character is optionally followed by any number of
-characters whose Sentence Closing Char attribute is 1. A sentence
-begins after a previous sentence ends, at the beginning of a
-paragraph, or at the beginning of the buffer.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_paragraph-offset"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        paragraph-offset      mark count <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> prefix      
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45181184"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_paragraph_delimiter_function"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Paragraph Delimiter Function          (initial value )         
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45187824"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This moves mark count paragraphs forward (if positive) or backwards
-(if negative). If mark is in the middle of a paragraph, that counts as
-one. If there were count (-count if negative) paragraphs in the
-appropriate direction, this returns mark, otherwise nil. This only
-moves mark if there were enough paragraphs.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Paragraph Delimiter Function holds a function that takes a mark,
-typically at the beginning of a line, and returns whether or not the
-current line should break the paragraph. default-para-delim-function
-returns t if the next character, the first on the line, has a
-Paragraph Delimiter attribute value of 1. This is typically a space,
-for an indented paragraph, or a newline, for a block style. Some modes
-require a more complicated determinant; for example, Scribe modes adds
-some characters to the set and special cases certain formatting
-commands.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Prefix defaults to <a class="link" href="#hv_fill_prefix" title="Hemlock Variable Fill Prefix">Fill Prefix</a>, and the right
-prefix is necessary to correctly skip paragraphs. If prefix is
-non-nil, and a line begins with prefix, then the scanning process
-skips the prefix before invoking the Paragraph Delimiter
-Function. Note, when scanning for paragraph bounds, and prefix is
-non-nil, lines are potentially part of the paragraph regardless of
-whether they contain the prefix; only the result of invoking the
-delimiter function matters.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-The programmer should be aware of an idiom for finding the end of the
-current paragraph. Assume paragraphp is the result of moving mark one
-paragraph, then the following correctly determines whether there
-actually is a current paragraph:
-</p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-(or paragraphp
-  (and (last-line-p mark)
-       (end-line-p mark)
-       (not (blank-line-p (mark-line mark))))) 
-
-</pre>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-In this example mark is at the end of the last paragraph in the
-buffer, and there is no last newline character in the
-buffer. paragraph-offset would have returned nil since it could not
-skip any paragraphs since mark was at the end of the current and last
-paragraph. However, you still have found a current paragraph on which
-to operate. mark-paragraph understands this problem.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_mark-paragraph"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        mark-paragraph        mark1 mark2      
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45199536"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This marks the next or current paragraph, setting mark1 to the
-beginning and mark2 to the end. This uses <a class="link" href="#hv_fill_prefix" title="Hemlock Variable Fill Prefix">Fill Prefix</a>.
-Mark1 is always on the first line of the paragraph, regardless
-of whether the previous line is blank. Mark2 is typically at the
-beginning of the line after the line the paragraph ends on, this
-returns mark2 on success. If this cannot find a paragraph, then the
-marks are left unmoved, and nil is returned.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="LogicalPages"></a>6.15.4.Â Logical Pages</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Logical pages are not supported at this time.
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Filling"></a>6.15.5.Â Filling</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-Filling is an operation on text that breaks long lines at word
-boundaries before a given column and merges shorter lines together in
-an attempt to make each line roughly the specified length. This is
-different from justification which tries to add whitespace in awkward
-places to make each line exactly the same length. Hemlock's filling
-optionally inserts a specified string at the beginning of each
-line. Also, it eliminates extra whitespace between lines and words,
-but it knows two spaces follow sentences.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_fill_column"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Fill Column   (initial value 75)       
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45211312"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="hv_fill_prefix"></a>
-                <strong>[Hemlock Variable]</strong>
-                <br></br>
-                <code>
-                        Fill Prefix   (initial value nil)      
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45217840"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-These variables hold the default values of the prefix and column
-arguments to Hemlock's filling primitives. If Fill Prefix is nil, then
-there is no fill prefix.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_fill-region"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        fill-region   region <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> prefix column   
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45224960"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This deletes any blank lines in region and fills it according to
-prefix and column. Prefix and column default to Fill Prefix and Fill
-Column.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_fill-region-by-paragraphs"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        fill-region-by-paragraphs     region <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> prefix column   
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45232160"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This finds paragraphs within region and fills them
-with fill-region. This ignores blank lines between paragraphs. Prefix
-and column default to Fill Prefix and Fill Column.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingUtilities"></a>6.16.Â Utilities</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-This chapter describes a number of utilities for manipulating some
-types of objects Hemlock uses to record information. String-tables are
-used to store names of variables, commands, modes, and buffers. Ring
-lists can be used to provide a kill ring, recent command history, or
-other user-visible features.
-        </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="StringTableFunctions"></a>6.16.1.Â String-table Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-String tables are similar to Common Lisp hash tables in that they
-associate a value with an object. There are a few useful differences:
-in a string table the key is always a case insensitive string, and
-primitives are provided to facilitate keyword completion and
-recognition. Any type of string may be added to a string table, but
-the string table functions always return simple-string's.
-            </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-A string entry in one of these tables may be thought of as being
-separated into fields or keywords. The interface provides keyword
-completion and recognition which is primarily used to implement some
-Echo Area commands. These routines perform a prefix match on a
-field-by-field basis allowing the ambiguous specification of earlier
-fields while going on to enter later fields. While string tables may
-use any string-char as a separator, the use of characters other than
-space may make the Echo Area commands fail or work unexpectedly.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_make-string-table"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        make-string-table  		 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45244144"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function creates an empty string table that uses separator as the
-character, which must be a string-char, that distinguishes
-fields. Initial-contents specifies an initial set of strings and their
-values in the form of a dotted a-list, for example:
-</p>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-'(("Global" . t) ("Mode" . t) ("Buffer" . t))
-
-</pre>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_string-table-p"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        string-table-p  	string-table	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45251664"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns t if string-table is a string-table object,
-otherwise nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_string-table-separator"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        string-table-separator  	string-table	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45258208"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the separator character given to
-make-string-table.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_delete-string"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        delete-string  	string table	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45264816"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_clrstring"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        clrstring  	table	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45271328"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-delete-string removes any entry for string from the string-table
-table, returning t if there was an entry. clrstring removes all
-entries from table.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_getstring"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        getstring  	string table	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45277952"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns as multiple values, first the value
-corresponding to the string if it is found and nil if it isn't, and
-second t if it is found and nil if it isn't.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This may be set with setf to add a new entry or to store a new value
-for a string. It is an error to try to insert a string with more than
-one field separator character occurring contiguously.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_complete-string"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        complete-string  	string tables	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45285296"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This function completes string as far as possible over the list of
-tables, returning five values. It is an error for tables to have
-different separator characters. The five return values are as follows:
-                    </p>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-The maximal completion of the string or nil if there is none.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-An indication of the usefulness of the returned string:
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:none</span></i>---
-There is no completion of string.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:complete</span></i>---
-The completion is a valid entry, but other valid
-completions exist too. This occurs when the supplied string is an
-entry as well as initial substring of another entry.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:unique</span></i>---
-The completion is a valid entry and unique.
-                                </p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:ambiguous</span></i>---
-The completion is invalid; get-string would return nil
-and nil if given the returned string.
-                                </p>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-The value of the string when the completion is :unique or
-:complete, otherwise nil.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-An index, or nil, into the completion returned, indicating where
-the addition of a single field to string ends. The command Complete
-Field uses this when the completion contains the addition to string
-of more than one field.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                  <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                    <ul class="itemizedlist" type="disc">
-                      <li class="listitem">
-                        <p>
-An index to the separator following the first ambiguous field when
-the completion is :ambiguous or :complete, otherwise nil.
-                            </p>
-                      </li>
-                    </ul>
-                  </div>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_find-ambiguous"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        find-ambiguous  	string table	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45307968"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml"> </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_find-containing"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        find-containing  	string table	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45314496"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-find-ambiguous returns a list in alphabetical order of all the strings
-in table matching string. This considers an entry as matching if each
-field in string, taken in order, is an initial substring of the
-entry's fields; entry may have fields remaining.
-                    </p>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-find-containing is similar, but it ignores the order of the fields in
-string, returning all strings in table matching any permutation of the
-fields in string.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="m_do-strings"></a>
-                <strong>[Macro]</strong>
-                <br></br>
-                <code>
-                        do-strings  	(string-var value-var table result) declaration tag statement	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45321936"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-This macro iterates over the strings in table in alphabetical
-order. On each iteration, it binds string-var to an entry's string and
-value-var to an entry's value.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="RingFunctions"></a>6.16.2.Â Ring Functions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-There are various purposes in an editor for which a ring of values can
-be used, so Hemlock provides a general ring buffer type. It is used
-for maintaining a ring of  <a class="link" href="#KillRing" title="6.4.3.Â Kill Ring">killed regions</a>, a ring of
-<a class="link" href="#CurrentBuffer" title="6.3.1.Â The Current Buffer">marks</a>, or a ring of command strings which various
-modes and commands maintain as a history mechanism.
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_make-ring"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        make-ring  	length <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> delete-function	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45332528"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Makes an empty ring object capable of holding up to length Lisp
-objects. Delete-function is a function that each object is passed to
-before it falls off the end. Length must be greater than zero.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_ringp"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        ringp  	ring	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45339184"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns t if ring is a ring object, otherwise nil.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_ring-length"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        ring-length  	ring	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45345696"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns as multiple-values the number of elements which ring currently
-holds and the maximum number of elements which it may hold.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_ring-ref"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        ring-ref  	ring index	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45352352"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Returns the index'th item in the ring, where zero is the index of the
-most recently pushed. This may be set with setf.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_ring-push"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        ring-push  	object ring	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45358992"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Pushes object into ring, possibly causing the oldest item to go away.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_ring-pop"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        ring-pop  	ring	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45365584"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-Removes the most recently pushed object from ring and returns it. If
-the ring contains no elements then an error is signalled.
-                    </p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_rotate-ring"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-                        rotate-ring  	ring offset	 
-                    </code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp45372240"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">
-With a positive offset, rotates ring forward that many times. In a
-forward rotation the index of each element is reduced by one, except
-the one which initially had a zero index, which is made the last
-element. A negative offset rotates the ring the other way.
-                    </p>
-                </div>
-              </div>
-            </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="UndoingCommands"></a>6.16.3.Â Undoing commands</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-No API to the undo facility is provided at this time.
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="HemlockProgrammingMiscellaneous"></a>6.17.Â Miscellaneous</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-This chapter is somewhat of a catch-all for comments and features that
-don't fit well anywhere else.
-        </p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="KeyEvents"></a>6.17.1.Â Key-events</h3>
-                </div>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="KeyEventsIntroduction"></a>6.17.1.1.Â Introduction</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-The canonical representation of editor input is a key-event
-structure. Users can bind commands to keys, which
-are non-empty sequences of key-events. A key-event consists of
-an identifying token known as a keysym and a field of bits
-representing modifiers. Users define keysyms by supplying names
-that reflect the legends on their keyboard's keys.
-Users define modifier names similarly, but the system chooses the
-bit and mask for recognizing the modifier. You can
-use keysym and modifier names to textually specify key-events and
-Hemlock keys in a #k syntax. The following are some examples:
-</p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-#k"C-u"
-#k"Control-u"
-#k"c-m-z"
-#k"control-x meta-d"
-#k"a"
-#k"A"
-#k"Linefeed"
-
-</pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-                </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-This is convenient for use within code and in init files containing
-bind-key calls.
-                </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-The #k syntax is delimited by double quotes, but the system parses the
-contents rather than reading it as a Common Lisp string. Within the
-double quotes, spaces separate multiple key-events. A single key-event
-optionally starts with modifier names terminated by hyphens. Modifier
-names are alphabetic sequences of characters which the system uses
-case-insensitively. Following modifiers is a keysym name, which is
-case-insensitive if it consists of multiple characters, but if the
-name consists of only a single character, then it is case-sensitive.
-                </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-You can escape special characters --- hyphen, double quote, open angle
-bracket, close angle bracket, and space --- with a backslash, and you
-can specify a backslash by using two contiguously. You can use angle
-brackets to enclose a keysym name with many special characters in
-it. Between angle brackets appearing in a keysym name position, there
-are only two special characters, the closing angle bracket and
-backslash.
-                </p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="KeyEventsInterface"></a>6.17.1.2.Â Interface</h4>
-                  </div>
-                </div>
-              </div>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_define-keysym"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            define-keysym  	keysym preferred-name <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> other-names	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45391312"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function establishes a mapping from preferred-name to keysym for
-purposes of #k syntax. Other-names also map to keysym, but the system
-uses preferred-name when printing key-events. The names are
-case-insensitive simple-strings; however, if the string contains a
-single character, then it is used case-sensitively. Redefining a
-keysym or re-using names has undefined effects.
-                        </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-Keysym can be any object, but generally it is either an integer
-representing the window-system code for the event, or a keyword
-which allows the mapping of the keysym to its code to be defined
-separately.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_define-keysym-code"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            define-keysym-code keysym code 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45399008"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-Defines the window-system code for the key event which in Hemlock is
-represented by keysym.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_define-mouse-keysym"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            define-mouse-keysym  	button keysym name shifted-bit event-key	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45405776"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function defines keysym named name for key-events representing
-mouse click events. Shifted-bit is a defined modifier name that
-translate-mouse-key-event sets in the key-event it returns whenever
-the shift bit is set in an incoming event.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_name-keysym"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            name-keysym  	name	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45412672"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the keysym named name. If name is unknown, this
-returns nil.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_keysym-names"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            keysym-names  	keysym	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45419408"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the list of all names for keysym. If keysym is
-undefined, this returns nil.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_keysym-preferred-name"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            keysym-preferred-name  	keysym	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45426160"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This returns the preferred name for keysym, how it is typically
-printed. If keysym is undefined, this returns nil.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_define-key-event-modifier"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            define-key-event-modifier  	long-name short-name	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45433040"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This establishes long-name and short-name as modifier names for
-purposes of specifying key-events in #k syntax. The names are
-case-insensitive strings. If either name is already defined,
-this signals an error.
-                        </p>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-The system defines the following default modifiers (first the long
-name, then the short name):
-                        </p>
-                    <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                      <ul class="itemizedlist" type="disc">
-                        <li class="listitem">
-                          <p>
-"Hyper", "H"
-                                </p>
-                        </li>
-                        <li class="listitem">
-                          <p>
-"Super", "S"
-                                </p>
-                        </li>
-                        <li class="listitem">
-                          <p>
-"Meta", "M"
-                                </p>
-                        </li>
-                        <li class="listitem">
-                          <p>
-"Control", "C"
-                                </p>
-                        </li>
-                        <li class="listitem">
-                          <p>
-"Shift", "Shift"
-                                </p>
-                        </li>
-                        <li class="listitem">
-                          <p>
-"Lock", "Lock"
-                                </p>
-                        </li>
-                      </ul>
-                    </div>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="v_all-modifier-names"></a>
-                  <strong>[Variable]</strong>
-                  <br></br>
-                  <code>
-                            *all-modifier-names*  		 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45446816"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This variable holds all the defined modifier names.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_make-key-event-bits"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            make-key-event-bits  	<em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> modifier-names	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45453968"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns bits suitable for make-key-event from the
-supplied modifier-names. If any name is undefined, this signals an
-error.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_key-event-modifier-mask"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            key-event-modifier-mask  	modifier-name	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45460816"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a mask for modifier-name. This mask is suitable
-for use with key-event-bits. If modifier-name is undefined, this
-signals an error.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_key-event-bits-modifiers"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            key-event-bits-modifiers  	bits	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45467696"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This returns a list of key-event modifier names, one for each modifier
-set in bits.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_make-key-event"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            make-key-event  	object bits	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45474432"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns a key-event described by object with
-bits. Object is one of keysym, string, or key-event. When object is a
-key-event, this uses key-event-keysym. You can form bits with
-make-key-event-bits or key-event-modifier-mask.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_key-event-p"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            key-event-p  	object	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45481328"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns whether object is a key-event.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_key-event-bits"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            key-event-bits  	key-event	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45488032"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the bits field of a key-event.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_key-event-keysym"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            key-event-keysym  	key-event	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45494736"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the keysym field of a key-event.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_char-key-event"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            char-key-event  	character	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45501440"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the key-event associated with character. You can
-associate a key-event with a character by setf-ing this form.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_key-event-char"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            key-event-char  	key-event	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45508224"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns the character associated with key-event. You can
-associate a character with a key-event by setf'ing this form. The
-system defaultly translates key-events in some implementation
-dependent way for text insertion; for example, under an ASCII system,
-the key-event #k"C-h", as well as #k"backspace" would map to the
-Common Lisp character that causes a backspace.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_key-event-bit-p"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            key-event-bit-p  	key-event bit-name	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45515264"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This function returns whether key-event has the bit set named by
-bit-name. This signals an error if bit-name is undefined.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="m_do-alpha-key-events"></a>
-                  <strong>[Macro]</strong>
-                  <br></br>
-                  <code>
-                            do-alpha-key-events  	(var kind <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> result) form	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45522496"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This macro evaluates each form with var bound to a key-event
-representing an alphabetic character. Kind is one of :lower, :upper,
-or :both, and this binds var to each key-event in order a-z A-Z.
-When :both is specified, this processes lowercase letters
-first.
-                        </p>
-                  </div>
-                </div>
-              </p>
-              <p>
-                <div class="refentrytitle">
-                  <a id="f_pretty-key-string"></a>
-                  <strong>[Function]</strong>
-                  <br></br>
-                  <code>
-                            pretty-key-string  	key <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> stream long-names-p	 
-                        </code>
-                </div>
-                <div class="refentrytitle"></div>
-              </p>
-              <p>
-                <div>
-                  <div class="refsect1" lang="en" xml:lang="en">
-                    <a xmlns="http://www.w3.org/1999/xhtml" id="idp45529856"></a>
-                    <div class="header">Description:</div>
-                    <p xmlns="http://www.w3.org/1999/xhtml">
-This returns a string representing key, a key-event or vector of key-events, in a
-user-expected fashion. Long-names-p indicates whether
-modifiers should be described by their long or short name.
-                        </p>
-                  </div>
-                </div>
-              </p>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Programming-with-Threads"></a>ChapterÂ 7.Â Programming with Threads</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#Threads-overview">7.1. Threads Overview</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Intentionally--Missing-Functionality">7.2. (Intentionally) Missing Functionality</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Implementation-Decisions-and-Open-Questions">7.3. Implementation Decisions and Open Questions</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Thread-Stack-Sizes">7.3.1. Thread Stack Sizes</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#idp34094752">7.3.2.  As of August 2003:</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Porting-Code-from-the-Old-Thread-Model">7.4. Porting Code from the Old Thread Model</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Background-Terminal-Input">7.5. Background Terminal Input</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#backgrount-ti-overview">7.5.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#background-terminal-example">7.5.2. An example</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#A-more-elaborate-example-">7.5.3. A more elaborate example.</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Summary">7.5.4. Summary</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#The-Threads-which-CCL-Uses-for-Its-Own-Purposes">7.6. The Threads which Clozure CL Uses for Its Own Purposes</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Threads-Dictionary">7.7. Threads Dictionary</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Threads-overview"></a>7.1.Â Threads Overview</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL provides facilities which enable multiple threads
-      of execution (<span class="emphasis"><em>threads</em></span>, sometimes called
-      <span class="emphasis"><em>lightweight processes</em></span> or just
-      <span class="emphasis"><em>processes</em></span>, though the latter term shouldn't
-      be confused with the OS's notion of a process) within a lisp
-      session. This document describes those facilities and issues
-      related to multithreaded programming in Clozure CL.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Wherever possible, I'll try to use the term "thread" to
-      denote a lisp thread, even though many of the functions in the
-      API have the word "process" in their name. A
-      <span class="emphasis"><em>lisp-process</em></span> is a lisp object (of type
-      CCL:PROCESS) which is used to control and communicate with an
-      underlying <span class="emphasis"><em>native thread</em></span>. Sometimes, the
-      distinction between these two (quite different) objects can be
-      blurred; other times, it's important to maintain.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Lisp threads share the same address space, but maintain
-      their own execution context (stacks and registers) and their own
-      dynamic binding context.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Traditionally, Clozure CL's threads have been
-      <span class="emphasis"><em>cooperatively scheduled</em></span>: through a
-      combination of compiler and runtime support, the currently
-      executing lisp thread arranged to be interrupted at certain
-      discrete points in its execution (typically on entry to a
-      function and at the beginning of any looping construct). This
-      interrupt occurred several dozen times per second; in response,
-      a handler function might observe that the current thread had
-      used up its time slice and another function (<span class="emphasis"><em>the lisp
-        scheduler</em></span>) would be called to find some other thread
-      that was in a runnable state, suspend execution of the current
-      thread, and resume execution of the newly executed thread.  The
-      process of switching contexts between the outgoing and incoming
-      threads happened in some mixture of Lisp and assembly language
-      code; as far as the OS was concerned, there was one native
-      thread running in the Lisp image and its stack pointer and other
-      registers just happened to change from time to time.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Under Clozure CL's cooperative scheduling model, it was
-      possible (via the use of the CCL:WITHOUT-INTERRUPTS construct)
-      to defer handling of the periodic interrupt that invoked the
-      lisp scheduler; it was not uncommon to use WITHOUT-INTERRUPTS to
-      gain safe, exclusive access to global data structures. In some
-      code (including much of Clozure CL itself) this idiom was very
-      common: it was (justifiably) believed to be an efficient way of
-      inhibiting the execution of other threads for a short period of
-      time.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The timer interrupt that drove the cooperative scheduler
-      was only able to (pseudo-)preempt lisp code: if any thread
-      called a blocking OS I/O function, no other thread could be
-      scheduled until that thread resumed execution of lisp code. Lisp
-      library functions were generally attuned to this constraint, and
-      did a complicated mixture of polling and "timed blocking" in an
-      attempt to work around it. Needless to say, this code is
-      complicated and less efficient than it might be; it meant that
-      the lisp was a little busier than it should have been when it
-      was "doing nothing" (waiting for I/O to be possible.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For a variety of reasons - better utilization of CPU
-      resources on single and multiprocessor systems and better
-      integration with the OS in general - threads in Clozure CL 0.14 and
-      later are <span class="emphasis"><em>preemptively scheduled. </em></span>In this
-      model, lisp threads are native threads and all scheduling
-      decisions involving them are made by the OS kernel. (Those
-      decisions might involve scheduling multiple lisp threads
-      simultaneously on multiple processors on SMP systems.) This
-      change has a number of subtle effects:</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>it is possible for two (or more) lisp threads to be
-	      executing simultaneously, possibly trying to access and/or
-	      modify the same data structures. Such access really should
-	      have been coordinated through the use of synchronization
-	      objects regardless of the scheduling modeling effect;
-	      preemptively scheduled threads increase the chance of things
-	      going wrong at the wrong time and do not offer
-	      lightweight alternatives to the use of those synchronization
-	      objects.</p>
-              </li>
-              <li class="listitem">
-                <p>even on a single-processor system, a context switch
-	      can happen on any instruction boundary. Since (in general)
-	      other threads might allocate memory, this means that a GC can
-	      effectively take place at any instruction boundary. That's
-	      mostly an issue for the compiler and runtime system to be
-	      aware of, but it means that certain practices(such as trying
-	      to pass the address of a lisp object to foreign code)that
-	      were always discouraged are now discouraged
-	      ... vehemently.</p>
-              </li>
-              <li class="listitem">
-                <p>there is no simple and efficient way to "inhibit the
-	      scheduler"or otherwise gain exclusive access to the entire
-	      CPU.</p>
-              </li>
-              <li class="listitem">
-                <p>There are a variety of simple and efficient ways
-	      to synchronize access to particular data
-	      structures.</p>
-              </li>
-            </ul>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">As a broad generalization: code that's been aggressively
-      tuned to the constraints of the cooperative scheduler may need
-      to be redesigned to work well with the preemptive scheduler (and
-      code written to run under Clozure CL's interface to the native
-      scheduler may be less portable to other CL implementations, many
-      of which offer a cooperative scheduler and an API similar to
-      Clozure CL (&lt; 0.14) 's.) At the same time, there's a large
-      overlap in functionality in the two scheduling models, and it'll
-      hopefully be possible to write interesting and useful MP code
-      that's largely independent of the underlying scheduling
-      details.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The keyword :OPENMCL-NATIVE-THREADS is on *FEATURES* in
-      0.14 and later and can be used for conditionalization where
-      required.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Intentionally--Missing-Functionality"></a>7.2.Â (Intentionally) Missing Functionality</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Much of the functionality described above is similar to
-      that provided by Clozure CL's cooperative scheduler, some other
-      parts of which make no sense in a native threads
-      implementation.</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>PROCESS-RUN-REASONS and PROCESS-ARREST-REASONS were
-	      SETFable process attributes; each was just a list of
-	      arbitrary tokens. A thread was eligible for scheduling
-	      (roughly equivalent to being "enabled") if its arrest-reasons
-	      list was empty and its run-reasons list was not. I don't
-	      think that it's appropriate to encourage a programming style
-	      in which otherwise runnable threads are enabled and disabled
-	      on a regular basis (it's preferable for threads to wait for
-	      some sort of synchronization event to occur if they can't
-	      occupy their time productively.)</p>
-              </li>
-              <li class="listitem">
-                <p>There were a number of primitives for maintaining
-	      process queues;that's now the OS's job.</p>
-              </li>
-              <li class="listitem">
-                <p>Cooperative threads were based on coroutining
-	      primitives associated with objects of type
-	      STACK-GROUP. STACK-GROUPs no longerexist.</p>
-              </li>
-            </ul>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Implementation-Decisions-and-Open-Questions"></a>7.3.Â Implementation Decisions and Open Questions</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Thread-Stack-Sizes"></a>7.3.1.Â Thread Stack Sizes</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">When you use MAKE-PROCESS to create a thread, you can
-        specify a stack size. Clozure CL does not impose a limit on the stack
-        size you choose, but there is some evidence that choosing a
-        stack size larger than the operating system's limit can cause
-        excessive paging activity, at least on some operating
-        systems.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The maximum stack size is operating-system-dependent. You
-        can use shell commands to determine what it is on your
-        platform. In bash, use "ulimit -s -H" to find the limit; in
-        tcsh, use "limit -h s".</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">This issue does not affect programs that create threads
-        using the default stack size, which you can do either by
-        specifying no value for the :stack-size argument to
-        MAKE-PROCESS, or by specifying the value
-        CCL::*default-control-stack-size*.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If your program creates threads with a specified stack size,
-        and that size is larger than the OS-specified limit, you may want
-        to consider reducing the stack size in order to avoid possible
-        excessive paging activity.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="idp34094752"></a>7.3.2.Â  As of August 2003:</h3>
-                </div>
-              </div>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>It's not clear that exposing
-	        PROCESS-SUSPEND/PROCESS-RESUME is a good idea: it's not clear
-	        that they offer ways to win, and it's clear that they offer
-	        ways to lose.</p>
-                </li>
-                <li class="listitem">
-                  <p>It has traditionally been possible to reset and enable
-	        a process that's "exhausted" . (As used here, the
-	        term "exhausted" means that the process's initial function
-	        has run and returned and the underlying native thread has
-	        been deallocated.) One of the principal uses of PROCESS-RESET
-	        is to "recycle" threads; enabling an exhausted process
-	        involves creating a new native thread (and stacks and
-	        synchronization objects and ...),and this is the sort of
-	        overhead that such a recycling scheme is seeking to avoid. It
-	        might be worth trying to tighten things up and declare that
-	        it's an error to apply PROCESS-ENABLE to an exhausted thread
-	        (and to make PROCESS-ENABLE detect this error.)</p>
-                </li>
-                <li class="listitem">
-                  <p>When native threads that aren't created by Clozure CL
-	        first call into lisp, a "foreign process" is created, and
-	        that process is given its own set of initial bindings and set
-	        up to look mostly like a process that had been created by
-	        MAKE-PROCESS. The life cycle of a foreign process is
-	        certainly different from that of a lisp-created one: it
-	        doesn't make sense to reset/preset/enable a foreign process,
-	        and attempts to perform these operations should be
-	        detected and treated as errors.</p>
-                </li>
-              </ul>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Porting-Code-from-the-Old-Thread-Model"></a>7.4.Â Porting Code from the Old Thread Model</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Older versions of Clozure CL used what are often called
-      "user-mode threads", a less versatile threading model which does
-      not require specific support from the operating system.  This
-      section discusses how to port code which was written for that
-      mode.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">It's hard to give step-by-step instructions; there are certainly
-      a few things that one should look at carefully:</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>It's wise to be suspicious of most uses
-	      of WITHOUT-INTERRUPTS; there may be exceptions, but
-	      WITHOUT-INTERRUPTS is often used as shorthand for
-	      WITH-APPROPRIATE-LOCKING. Determining what type of locking
-	      is appropriate and writing the code to implement it is
-	      likely to be straightforward and simple most of the
-	      time.</p>
-              </li>
-              <li class="listitem">
-                <p>I've only seen one case where a process's "run reasons"
-	      were used to communicate information as well as to control
-	      execution; I don't think that this is a common idiom, but may
-	      be mistaken about that.
-	    </p>
-              </li>
-              <li class="listitem">
-                <p>It's certainly possible that programs written
-	      for cooperatively scheduled lisps that have run reliably for
-	      a long time have done so by accident: resource-contention
-	      issues tend to be timing-sensitive, and decoupling thread
-	      scheduling from lisp program execution affects timing. I know
-	      that there is or was code in both Clozure CL and commercial MCL
-	      that was written under the explicit assumption that certain
-	      sequences of open-coded operations were uninterruptable; it's
-	      certainly possible that the same assumptions have been made
-	      (explicitly or otherwise) by application developers.</p>
-              </li>
-            </ul>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Background-Terminal-Input"></a>7.5.Â Background Terminal Input</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="backgrount-ti-overview"></a>7.5.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-	    Unless and until Clozure CL provides alternatives (via window
-	    streams, telnet streams, or some other mechanism) all lisp
-	    processes share a common *TERMINAL-IO* stream (and therefore
-	    share *DEBUG-IO*, *QUERY-IO*, and other standard and
-	    internal interactive streams.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">It's anticipated that most lisp processes other than
-	    the "Initial" process run mostly in the background. If a
-	    background process writes to the output side of
-	    *TERMINAL-IO*, that may be a little messy and a little
-	    confusing to the user, but it shouldn't really be
-	    catastrophic. All I/O to Clozure CL's buffered streams goes
-	    thru a locking mechanism that prevents the worst kinds of
-	    resource-contention problems.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Although the problems associated with terminal output
-	    from multiple processes may be mostly cosmetic, the question
-	    of which process receives input from the terminal is likely
-	    to be a great deal more important. The stream locking
-	    mechanisms can make a confusing situation even worse:
-	    competing processes may "steal" terminal input from each
-	    other unless locks are held longer than they otherwise need
-	    to be, and locks can be held longer than they need to be (as
-	    when a process is merely waiting for input to become
-	    available on an underlying file descriptor).</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Even if background processes rarely need to
-	    intentionally read input from the terminal, they may still
-	    need to do so in response to errors or other unanticipated
-	    situations. There are tradeoffs involved in any solution to
-	    this problem. The protocol described below allows background
-	    processes which follow it to reliably prompt for and receive
-	    terminal input. Background processes which attempt to
-	    receive terminal input without following this protocol will
-	    likely hang indefinitely while attempting to do so. That's
-	    certainly a harsh tradeoff, but since attempts to read
-	    terminal input without following this protocol only worked
-	    some of the time anyway, it doesn't seem to be an
-	    unreasonable one.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In the solution described here (and introduced in
-	    Clozure CL 0.9), the internal stream used to provide terminal
-	    input is always locked by some process (the "owning"
-	    process.) The initial process (the process that typically
-	    runs the read-eval-print loop) owns that stream when it's
-	    first created. By using the macro WITH-TERMINAL-INPUT,
-	    background processes can temporarily obtain ownership of the
-	    terminal and relinquish ownership to the previous owner when
-	    they're done with it.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In Clozure CL, BREAK, ERROR, CERROR, Y-OR-N-P,
-	    YES-OR-NO-P, and CCL:GET-STRING- FROM-USER are all defined
-	    in terms of WITH-TERMINAL-INPUT, as are the :TTY
-	    user-interfaces to STEP and INSPECT.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="background-terminal-example"></a>7.5.2.Â An example</h3>
-                </div>
-              </div>
-            </div>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? Welcome to Clozure CL Version (Beta: linux) 0.9!
-?
-
-? (process-run-function "sleeper" #'(lambda () (sleep 5) (break "broken")))
-#&lt;PROCESS sleeper(1) [Enabled] #x3063B33E&gt;
-
-?
-;;
-;; Process sleeper(1) needs access to terminal input.
-;;
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">This example was run under ILISP; ILISP often gets confused if one
-	    tries to enter input and "point" doesn't follow a prompt.
-	    Entering a "simple" expression at this point gets it back in
-	    synch; that's otherwise not relevant to this example.</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-()
-NIL
-? (:y 1)
-;;
-;; process sleeper(1) now controls terminal input
-;;
-&gt; Break in process sleeper(1): broken
-&gt; While executing: #&lt;Anonymous Function #x3063B276&gt;
-&gt; Type :GO to continue, :POP to abort.
-&gt; If continued: Return from BREAK.
-Type :? for other options.
-1 &gt; :b
-(30C38E30) : 0 "Anonymous Function #x3063B276" 52
-(30C38E40) : 1 "Anonymous Function #x304984A6" 376
-(30C38E90) : 2 "RUN-PROCESS-INITIAL-FORM" 340
-(30C38EE0) : 3 "%RUN-STACK-GROUP-FUNCTION" 768
-1 &gt; :pop
-;;
-;; control of terminal input restored to process Initial(0)
-;;
-?
-      </pre>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="A-more-elaborate-example-"></a>7.5.3.Â A more elaborate example.</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">If a background process ("A") needs access to the terminal
-	    input stream and that stream is owned by another background process
-	    ("B"), process "A" announces that fact, then waits until
-	    the initial process regains control.</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? Welcome to Clozure CL Version (Beta: linux) 0.9!
-?
-
-? (process-run-function "sleep-60" #'(lambda () (sleep 60) (break "Huh?")))
-#&lt;PROCESS sleep-60(1) [Enabled] #x3063BF26&gt;
-
-? (process-run-function "sleep-5" #'(lambda () (sleep 5) (break "quicker")))
-#&lt;PROCESS sleep-5(2) [Enabled] #x3063D0A6&gt;
-
-?       ;;
-;; Process sleep-5(2) needs access to terminal input.
-;;
-()
-NIL
-
-? (:y 2)
-;;
-;; process sleep-5(2) now controls terminal input
-;;
-&gt; Break in process sleep-5(2): quicker
-&gt; While executing: #x3063CFDE&gt;
-&gt; Type :GO to continue, :POP to abort.
-&gt; If continued: Return from BREAK.
-Type :? for other options.
-1 &gt;     ;; Process sleep-60(1) will need terminal access when
-;; the initial process regains control of it.
-;;
-()
-NIL
-1 &gt; :pop
-;;
-;; Process sleep-60(1) needs access to terminal input.
-;;
-;;
-;; control of terminal input restored to process Initial(0)
-;;
-
-? (:y 1)
-;;
-;; process sleep-60(1) now controls terminal input
-;;
-&gt; Break in process sleep-60(1): Huh?
-&gt; While executing: #x3063BE5E&gt;
-&gt; Type :GO to continue, :POP to abort.
-&gt; If continued: Return from BREAK.
-Type :? for other options.
-1 &gt; :pop
-;;
-;; control of terminal input restored to process Initial(0)
-;;
-
-?
-      </pre>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Summary"></a>7.5.4.Â Summary</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">This scheme is certainly not bulletproof: imaginative
-	    use of PROCESS-INTERRUPT and similar functions might be able
-	    to defeat it and deadlock the lisp, and any scenario where
-	    several background processes are clamoring for access to the
-	    shared terminal input stream at the same time is likely to be
-	    confusing and chaotic. (An alternate scheme, where the input
-	    focus was magically granted to whatever thread the user was
-	    thinking about, was considered and rejected due to technical
-	    limitations.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The longer-term fix would probably involve using network or
-	    window-system streams to give each process unique instances of
-	    *TERMINAL-IO*.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Existing code that attempts to read from *TERMINAL-IO*
-        from a background process will need to be changed to use
-        WITH-TERMINAL-INPUT.  Since that code was probably not working
-        reliably in previous versions of Clozure CL, this requirement
-        doesn't seem to be too onerous.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Note that WITH-TERMINAL-INPUT both requests ownership of
-        the terminal input stream and promises to restore that
-        ownership to the initial process when it's done with it. An ad
-        hoc use of READ or READ-CHAR doesn't make this promise; this
-        is the rationale for the restriction on the :Y command.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="The-Threads-which-CCL-Uses-for-Its-Own-Purposes"></a>7.6.Â The Threads which Clozure CL Uses for Its Own Purposes</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      In the "tty world", Clozure CL starts out with 2 lisp-level threads:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? :proc
-1 : -&gt; listener     [Active]
-0 :    Initial      [Active]
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">If you look at a running Clozure CL with a debugging tool,
-      such as GDB, or Apple's Thread Viewer.app, you'll see an
-      additional kernel-level thread on Darwin; this is used by the
-      Mach exception-handling mechanism.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The initial thread, conveniently named "initial", is the
-      one that was created by the operating system when it launched
-      Clozure CL.  It maps the heap image into memory, does some
-      Lisp-level initialization, and, when the Cocoa IDE isn't being
-      used, creates the thread "listener", which runs the top-level
-      loop that reads input, evaluates it, and prints the
-      result.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">After the listener thread is created, the initial thread
-      does "housekeeping": it sits in a loop, sleeping most of the
-      time and waking up occasionally to do "periodic tasks".  These
-      tasks include forcing output on specified interactive streams,
-      checking for and handling control-C interrupts, etc.  Currently,
-      those tasks also include polling for the exit status of external
-      processes and handling some kinds of I/O to and from those
-      processes.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">In this environment, the initial thread does these
-      "housekeeping" activities as necessary, until
-      <code class="literal">ccl:quit</code> is called;
-      <code class="literal">quit</code>ting interrupts the initial thread, which
-      then ends all other threads in as orderly a fashion as possible
-      and calls the C function <code class="literal">#_exit</code>.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The short-term plan is to handle each external-process in
-      a dedicated thread; the worst-case behavior of the current
-      scheme can involve busy-waiting and excessive CPU utilization
-      while waiting for an external process to terminate in some
-      cases.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The Cocoa features use more threads.  Adding a Cocoa
-      listener creates two threads:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? :proc
-      3 : -&gt; Listener     [Active]
-      2 :    housekeeping  [Active]
-      1 :    listener     [Active]
-      0 :    Initial      [Active]
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">The Cocoa event loop has to run in the initial thread;
-      when the event loop starts up, it creates a new thread to do the
-      "housekeeping" tasks which the initial thread would do in the
-      terminal-only mode.  The initial thread then becomes the one to
-      receive all Cocoa events from the window server; it's the only
-      thread which can.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">It also creates one "Listener" (capital-L) thread for each
-      listener window, with a lifetime that lasts as long as the
-      thread does.  So, if you open a second listener, you'll see five
-      threads all together:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? :proc
-      4 : -&gt; Listener-2   [Active]
-      3 :    Listener     [Active]
-      2 :    housekeeping  [Active]
-      1 :    listener     [Active]
-      0 :    Initial      [Active]
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Unix signals, such as SIGINT (control-C), invoke a handler
-      installed by the Lisp kernel.  Although the OS doesn't make any
-      specific guarantee about which thread will receive the signal,
-      in practice, it seems to be the initial thread.  The handler
-      just sets a flag and returns; the housekeeping thread (which may
-      be the initial thread, if Cocoa's not being used) will check for
-      the flag and take whatever action is appropriate to the
-      signal.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">In the case of SIGINT, the action is to enter a break
-      loop, by calling on the thread being interrupted.  When there's
-      more than one Lisp listener active, it's not always clear what
-      thread that should be, since it really depends on the user's
-      intentions, which there's no way to divine programmatically.  To
-      make its best guess, the handler first checks whether the value
-      of <code class="literal">ccl:*interactive-abort-process*</code> is a
-      thread, and, if so, uses it.  If that fails, it chooses the
-      thread which currently "owns" the default terminal input stream;
-      see .</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">In the bleeding-edge version of the Cocoa support which is
-      based on Hemlock, an Emacs-like editor, each editor window has a
-      dedicated thread associated with it.  When a keypress event
-      comes in which affects that specific window the initial thread
-      sends it to the window's dedicated thread.  The dedicated thread
-      is responsible for trying to interpret keypresses as Hemlock
-      commands, applying those commands to the active buffer; it
-      repeats this in a loop, until the window closes.  The initial
-      thread handles all other events, such as mouse clicks and
-      drags.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">This thread-per-window scheme makes many things simpler,
-      including the process of entering a "recursive command loop" in
-      commands like "Incremental Search Forward", etc.  (It might be
-      possible to handle all Hemlock commands in the Cocoa event
-      thread, but these "recursive command loops" would have to
-      maintain a lot of context/state information; threads are a
-      straightforward way of maintaining that information.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Currently (August 2004), when a dedicated thread needs to
-      alter the contents of the buffer or the selection, it does so by
-      invoking methods in the initial thread, for synchronization
-      purposes, but this is probably overkill and will likely be
-      replaced by a more efficient scheme in the future.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The per-window thread could probably take more
-      responsibility for drawing and handling the screen than it
-      currently does; -something- needs to be done to buffer screen
-      updates a bit better in some cases: you don't need to see
-      everything that happens during something like indentation; you
-      do need to see the results...</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">When Hemlock is being used, listener windows are editor
-      windows, so in addition to each "Listener" thread, you should
-      also see a thread which handles Hemlock command
-      processing.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The Cocoa runtime may make additional threads in certain
-      special situations; these threads usually don't run lisp code,
-      and rarely if ever run much of it.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Threads-Dictionary"></a>7.7.Â Threads Dictionary</h2>
-              </div>
-            </div>
-          </div>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_all-processes"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>all-processes</strong></span> =&gt; result
-	    </code>
-            </div>
-            <div class="refentrytitle">Obtain a fresh list of all known Lisp
-	      threads.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp43046720"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---a list of all lisp processes (threads)
-		        known to Clozure CL.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp43049824"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns a list of all lisp processes (threads) known
-	      to Clozure CL as of
-	      the precise instant it's called. It's safe to traverse
-	      this list and to modify the cons cells that comprise that list
-	      (it's freshly consed.) Since other threads can create and kill
-	      threads at any time, there's generally no way to get an
-	      "accurate" list of all threads, and (generally) no
-	      sense in which such a list can be accurate.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp43051600"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist">
-                  <a class="xref" href="#v_current-process" title="Variable *CURRENT-PROCESS*">
-                    <b xmlns="http://www.w3.org/TR/xhtml1/transitional">*current-process*</b>
-                  </a>
-                </span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_make-process"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-process</strong></span>
-	      name &amp;key
-	      persistent priority class initargs stack-size vstack-size
-	      tstack-size initial-bindings use-standard-initial-bindings
-	      =&gt; process
-	    </code>
-            </div>
-            <div class="refentrytitle">Creates and returns a new process.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp43059904"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---a string, used to identify the process.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">persistent</span></i>---if true, requests that information about the process
-		        be retained by SAVE-APPLICATION so that an equivalent
-		        process can be restarted when a saved image is run.  The
-		        default is nil.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">priority</span></i>---ignored.  It
-		        shouldn't be ignored of course, but there are
-		        complications on some platforms.  The default is 0.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">class</span></i>---the class of process object to create;
-		        should be a subclass of CCL:PROCESS.  The default is
-		        CCL:PROCESS.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">initargs</span></i>---Any additional initargs to pass to MAKE-INSTANCE. The default is ().</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">stack-size</span></i>---the size, in bytes, of the newly-created process's
-		        control stack; used for foreign function calls and to save
-		        function return address context.  The default is
-		        CCL:*DEFAULT-CONTROL-STACK-SIZE*.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">vstack-size</span></i>---the size, in bytes, of the newly-created process's
-		        value stack; used for lisp function arguments, local
-		        variables, and other stack-allocated lisp objects.
-		        The default is CCL:*DEFAULT-VALUE-STACK-SIZE*.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">tstack-size</span></i>---the size, in bytes, of the newly-created process's
-		        temp stack; used for the allocation of dynamic-extent
-		        objects.  The default is CCL:*DEFAULT-TEMP-STACK-SIZE*.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">use-standard-initial-bindings</span></i>---when true, the global "standard initial
-		        bindings" are put into effect in the new thread before. See
-		        DEF-STANDARD-INITIAL-BINDING.  "standard" initial bindings
-		        are put into effect before any bindings specified by
-		        :initial-bindings are.  The default is t.
-
-                       <span xmlns="http://www.w3.org/1999/xhtml" class="strong"><strong>This option is deprecated: the correct
-                      behavior of many Clozure CL components depends on thread-local
-                      bindings of many special variables being in effect.</strong></span></p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">initial-bindings</span></i>---an alist of (<em xmlns="http://www.w3.org/1999/xhtml" class="varname">symbol</em> .
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">valueform</em>) pairs, which can be
-		        used to initialize special variable bindings in the new
-		        thread. Each <em xmlns="http://www.w3.org/1999/xhtml" class="varname">valueform</em> is used to
-		        compute the value of a new binding of
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">symbol</em> in the execution environment of
-		        the newly-created thread.  The default is nil.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---the newly-created process.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39806288"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Creates and returns a new lisp process (thread) with the
-	      specified attributes. <em class="varname">process</em> will not begin
-	      execution immediately; it will need to be
-	      <span class="emphasis"><em>preset</em></span> (given
-	      an initial function to run, as by
-	      <a class="xref" href="#f_process-preset" title="Function PROCESS-PRESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-preset</b></a>) and
-	      <span class="emphasis"><em>enabled</em></span>
-	      (allowed to execute, as by <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a>)
-	      before it's able to actually do anything.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">If <em class="varname">valueform</em> is a function, it is
-	      called, with no arguments, in the execution environment of the
-	      newly-created thread; the primary value it returns is used for
-	      the binding of the corresponding <em class="varname">symbol</em>.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Otherwise, <em class="varname">valueform</em> is evaluated in the
-	      execution
-	      environment of the newly-created thread, and the resulting value
-	      is used.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39812528"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_process-preset" title="Function PROCESS-PRESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-preset</b></a>, <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a>, <a class="xref" href="#f_process-run-function" title="Function PROCESS-RUN-FUNCTION"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-run-function</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-suspend"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-suspend</strong></span> process
-	      =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Suspends a specified process.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39332432"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a lisp process (thread).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---T if <em xmlns="http://www.w3.org/1999/xhtml" class="varname">process</em> had been runnable
-		        and is now suspended; NIL otherwise.  That is, T if
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">process</em>'s
-		        <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_process-suspend-count" title="Function PROCESS-SUSPEND-COUNT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend-count</b></a>
-		        transitioned from 0 to 1.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39338928"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Suspends <em class="varname">process</em>, preventing it from
-	      running, and stopping it if it was already running. This is a fairly
-	      expensive operation, because it involves a few
-	      calls to the OS.  It also risks creating deadlock if used
-	      improperly, for instance, if the process being suspended owns a
-	      lock or other resource which another process will wait for.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Each
-	      call to <span class="function"><strong>process-suspend</strong></span> must be reversed by
-	      a matching call to <a class="xref" href="#f_process-resume" title="Function PROCESS-RESUME"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-resume</b></a>
-	      before <em class="varname">process</em> is able to run.  What
-	      <span class="function"><strong>process-suspend</strong></span> actually does is increment
-	      the <a class="xref" href="#f_process-suspend-count" title="Function PROCESS-SUSPEND-COUNT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend-count</b></a> of
-	      <em class="varname">process</em>.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">A process can't suspend itself, though this once
-	    worked and this documentation claimed has claimed that it
-	    did.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39345536"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_process-resume" title="Function PROCESS-RESUME"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-resume</b></a>, <a class="xref" href="#f_process-suspend-count" title="Function PROCESS-SUSPEND-COUNT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend-count</b></a></span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39348528"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml"><span class="function"><strong>process-suspend</strong></span> was previously called
-	      <span class="function"><strong>process-disable</strong></span>.
-	      <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a>
-	      now names a function for which there is no
-	      obvious inverse, so <span class="function"><strong>process-disable</strong></span>
-	      is no longer
-	      defined.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-resume"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-resume</strong></span> process
-	      =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Resumes a specified process which had previously
-	      been suspended by process-suspend.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39608128"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a lisp process (thread).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---T if <em xmlns="http://www.w3.org/1999/xhtml" class="varname">process</em> had been suspended
-		        and is now runnable; NIL otherwise.  That is, T if
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">process</em>'s
-		        <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_process-suspend-count" title="Function PROCESS-SUSPEND-COUNT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend-count</b></a>
-		        transitioned from  to 0.
-		      </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39614576"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Undoes the effect of a previous call to
-	      <a class="xref" href="#f_process-suspend" title="Function PROCESS-SUSPEND"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend</b></a>; if
-	      all such calls are undone, makes the process runnable. Has no
-	      effect if the process is not suspended.  What
-	      <span class="function"><strong>process-resume</strong></span> actually does is decrement
-	      the <a class="xref" href="#f_process-suspend-count" title="Function PROCESS-SUSPEND-COUNT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend-count</b></a> of
-	      <em class="varname">process</em>, to a minimum of 0.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39618304"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_process-suspend" title="Function PROCESS-SUSPEND"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend</b></a>, <a class="xref" href="#f_process-suspend-count" title="Function PROCESS-SUSPEND-COUNT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend-count</b></a></span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39621296"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      This was previously called PROCESS-ENABLE;
-	      <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a> now does something slightly
-	      different.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-suspend-count"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-suspend-count</strong></span>
-	      process =&gt; result
-	    </code>
-            </div>
-            <div class="refentrytitle">Returns the number of currently-pending suspensions
-	      applicable to a given process.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39629104"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a lisp process (thread).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---The number of "outstanding"
-		        <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_process-suspend" title="Function PROCESS-SUSPEND"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend</b></a> calls on
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">process</em>, or NIL if
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">process</em> has expired.
-		      </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39492928"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">An "outstanding" <a class="xref" href="#f_process-suspend" title="Function PROCESS-SUSPEND"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend</b></a> call
-	      is one which has not yet been reversed by a call to
-	      <a class="xref" href="#f_process-resume" title="Function PROCESS-RESUME"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-resume</b></a>.  A process expires when
-	      its initial function returns, although it may later be
-	      reset.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">A process is <span class="emphasis"><em>runnable</em></span> when it has a
-	      <span class="function"><strong>process-suspend-count</strong></span> of 0, has been
-	      preset as by <a class="xref" href="#f_process-preset" title="Function PROCESS-PRESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-preset</b></a>, and has been
-	      enabled as by <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a>.  Newly-created
-	      processes have a <span class="function"><strong>process-suspend-count</strong></span> of
-	      0.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39498896"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_process-suspend" title="Function PROCESS-SUSPEND"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-suspend</b></a>, <a class="xref" href="#f_process-resume" title="Function PROCESS-RESUME"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-resume</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-preset"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-preset</strong></span>
-	      process function <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> args
-	      =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Sets the initial function and arguments of a specified
-	      process.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39508112"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a lisp process (thread).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">function</span></i>---a function, designated by itself or by a symbol
-		        which names it.
-		      </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">args</span></i>---a list of values, appropriate as arguments to
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">function</em>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---undefined.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39517104"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Typically used to initialize a newly-created or newly-reset
-	      process, setting things up so that when <em class="varname">process</em>
-	      becomes enabled, it will begin execution by
-	      applying <em class="varname">function</em> to <em class="varname">args</em>.
-	      <span class="function"><strong>process-preset</strong></span> does not enable
-	      <em class="varname">process</em>,
-	      although a process must be <span class="function"><strong>process-preset</strong></span>
-	      before it can be enabled.  Processes are normally enabled by
-	      <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a>.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39522384"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-process" title="Function MAKE-PROCESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-process</b></a>, <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a>, <a class="xref" href="#f_process-run-function" title="Function PROCESS-RUN-FUNCTION"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-run-function</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-enable"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-enable</strong></span>
-	      process <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> timeout
-	    </code>
-            </div>
-            <div class="refentrytitle">Begins executing the initial function of a specified
-	      process.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38965008"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a lisp process (thread).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">timeout</span></i>---a time interval in seconds.  May be any
-		        non-negative real number the <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>floor</strong></span> of
-		        which fits in 32 bits.  The default is 1.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---undefined.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38972352"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Tries to begin the execution of <em class="varname">process</em>.
-	      An error is signaled if <em class="varname">process</em> has never
-	      been <a class="xref" href="#f_process-preset" title="Function PROCESS-PRESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-preset</b></a>.  Otherwise,
-	      <em class="varname">process</em> invokes its initial function.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml"><span class="function"><strong>process-enable</strong></span> attempts to
-	      synchronize with <em class="varname">process</em>, which is presumed
-	      to be reset or in the act of resetting itself.  If this attempt
-	      is not successful within the time interval specified by
-	      <em class="varname">timeout</em>, a continuable error is signaled,
-	      which offers the opportunity to continue waiting.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">A process cannot meaningfully attempt to enable itself.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38978208"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-process" title="Function MAKE-PROCESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-process</b></a>, <a class="xref" href="#f_process-preset" title="Function PROCESS-PRESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-preset</b></a>, <a class="xref" href="#f_process-run-function" title="Function PROCESS-RUN-FUNCTION"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-run-function</b></a></span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38981888"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">It would be nice to have more discussion of what it means
-	      to synchronize with the process.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-run-function"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-run-function</strong></span>
-	      process-specifier function <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> args =&gt; process</code>
-            </div>
-            <div class="refentrytitle">Creates a process, presets it, and enables it.
-	    </div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38996176"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---a string, used to identify the process.
-		        Passed to <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-process</strong></span>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">function</span></i>---a function, designated by itself or by a symbol
-		        which names it.  Passed to
-		        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>preset-process</strong></span>.
-		      </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">persistent</span></i>---a boolean, passed to <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-process</strong></span>.
-		      </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">priority</span></i>---ignored.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">class</span></i>---a subclass of CCL:PROCESS.  Passed to
-		        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-process</strong></span>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">initargs</span></i>---a list of any additional initargs to pass to
-		        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-process</strong></span>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">stack-size</span></i>---a size, in bytes.  Passed to
-		        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-process</strong></span>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">vstack-size</span></i>---a size, in bytes.  Passed to
-		        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-process</strong></span>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">tstack-size</span></i>---a size, in bytes.  Passed to
-		        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-process</strong></span>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---the newly-created process.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39021328"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Creates a lisp process (thread) via
-	      <a class="xref" href="#f_make-process" title="Function MAKE-PROCESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-process</b></a>,
-	      presets it via <a class="xref" href="#f_process-preset" title="Function PROCESS-PRESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-preset</b></a>, and
-	      enables it via <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a>.  This means
-	      that <em class="varname">process</em> will immediately begin to
-	      execute.
-	      <span class="function"><strong>process-run-function</strong></span> is
-	      the simplest way to create and run a process.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39025552"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-process" title="Function MAKE-PROCESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-process</b></a>, <a class="xref" href="#f_process-preset" title="Function PROCESS-PRESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-preset</b></a>, <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-interrupt"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-interrupt</strong></span>
-	      process function <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> args =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Arranges for the target process to invoke a
-	      specified function at some point in the near future, and then
-	      return to what it was doing.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39035536"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a lisp process (thread).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">function</span></i>---a function.
-		      </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">args</span></i>---a list of values, appropriate as arguments to
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">function</em>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---the result of applying <em xmlns="http://www.w3.org/1999/xhtml" class="varname">function</em>
-		        to <em xmlns="http://www.w3.org/1999/xhtml" class="varname">args</em> if <em xmlns="http://www.w3.org/1999/xhtml" class="varname">process</em>
-		        is the <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>current-process</strong></span>, otherwise
-		        NIL.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39046640"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Arranges for <em class="varname">process</em>
-	      to apply <em class="varname">function</em> to <em class="varname">args</em> at
-	      some point in the near future (interrupting whatever
-	      <em class="varname">process</em>
-	      was doing.) If <em class="varname">function</em> returns normally,
-	      <em class="varname">process</em> resumes
-	      execution at the point at which it was interrupted.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml"><em class="varname">process</em> must be in an enabled state in
-	      order to respond
-	      to a <span class="function"><strong>process-interrupt</strong></span> request.  It's
-	      perfectly legal for a process to call
-	      <span class="function"><strong>process-interrupt</strong></span> on itself.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml"><span class="function"><strong>process-interrupt</strong></span>
-	      uses asynchronous POSIX signals to interrupt threads. If the
-	      thread being interrupted is executing lisp code, it can
-	      respond to the interrupt almost immediately (as soon as it
-	      has finished pseudo-atomic operations like consing and
-	      stack-frame initialization.)</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">If the interrupted thread is
-	      blocking in a system call, that system call is aborted by
-	      the signal and the interrupt is handled on return.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">It is
-	      still difficult to reliably interrupt arbitrary foreign code
-	      (that may be stateful or otherwise non-reentrant); the
-	      interrupt request is handled when such foreign code returns
-	      to or enters lisp.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39055584"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist">
-                  <a class="xref" href="#m_without-interrupts" title="Macro WITHOUT-INTERRUPTS">
-                    <b xmlns="http://www.w3.org/TR/xhtml1/transitional">without-interrupts</b>
-                  </a>
-                </span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39057888"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">It would probably be better for <em class="varname">result</em>
-	      to always be NIL, since the present behavior is inconsistent.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      <span class="function"><strong>Process-interrupt</strong></span> works by sending signals
-	      between threads, via the C function
-	      <span class="function"><strong>#_pthread_signal</strong></span>.  It could be argued
-	      that it should be done in one of several possible other ways
-	      under
-	      Darwin, to make it practical to asynchronously interrupt
-	      things which make heavy use of the Mach nanokernel.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_current-process"></a>
-              <strong>[Variable]</strong>
-              <br></br>
-              <code>*CURRENT-PROCESS*</code>
-            </div>
-            <div class="refentrytitle">Bound in each process, to that process
-	      itself.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41022528"></a>
-                <div class="header">Value Type:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">A lisp process (thread).</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41023888"></a>
-                <div class="header">Initial Value:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Bound separately in each process, to that process itself.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41025280"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Used when lisp code needs to find out what process it is
-	      executing in.  Shouldn't be set by user code.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41026720"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist">
-                  <a class="xref" href="#f_all-processes" title="Function ALL-PROCESSES">
-                    <b xmlns="http://www.w3.org/TR/xhtml1/transitional">all-processes</b>
-                  </a>
-                </span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-reset"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-reset</strong></span>
-	      process <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> kill-option =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Causes a specified process to cleanly exit from
-	      any ongoing computation.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41035152"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a lisp process (thread).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">kill-option</span></i>---an internal argument, must be nil.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---undefined.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41041904"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Causes <em class="varname">process</em> to cleanly exit
-	      from any ongoing computation and enter a state where it can be
-	      <a class="xref" href="#f_process-preset" title="Function PROCESS-PRESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-preset</b></a>. This
-	      is implemented by signaling a condition of type PROCESS-RESET;
-	      user-defined condition handlers should generally refrain from
-	      attempting to handle conditions of this type.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">The <em class="varname">kill-option</em> argument is for internal
-            use only and should not be specified by user code</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">A process can meaningfully reset itself.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">There is in general no way to know precisely when
-	      <em class="varname">process</em>
-	      has completed the act of resetting or killing itself; a process
-	      which has either entered the limbo of the reset state or exited
-	      has few ways of communicating either fact.
-	      <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a>
-	      can reliably determine when a process has entered
-	      the "limbo of the reset state", but can't predict how long the
-	      clean exit from ongoing computation might take: that depends on
-	      the behavior of <span class="function"><strong>unwind-protect</strong></span> cleanup
-	      forms, and of the OS scheduler.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Resetting a process other than
-	      <a class="xref" href="#v_current-process" title="Variable *CURRENT-PROCESS*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*current-process*</b></a> involves the
-	      use of <a class="xref" href="#f_process-interrupt" title="Function PROCESS-INTERRUPT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-interrupt</b></a>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41049984"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_process-kill" title="Function PROCESS-KILL"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-kill</b></a>, <a class="xref" href="#f_process-abort" title="Function PROCESS-ABORT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-abort</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-reset-and-enable"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-reset-and-enable</strong></span>
-	      process =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Reset and enable the specified process, which
-	    may not be the current process.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41058768"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a lisp process (thread), which
-		      may not be the current process.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---undefined.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41063744"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Equivalent to calling (process-reset process) and
-	      (process-enable process).
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41065168"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_process-reset" title="Function PROCESS-RESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-reset</b></a>, <a class="xref" href="#f_process-enable" title="Function PROCESS-ENABLE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-enable</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-kill"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-kill</strong></span> process
-	      =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Causes a specified process to cleanly exit from any
-	      ongoing computation, and then exit.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41073968"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a lisp process (thread).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---undefined.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41078912"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Causes <em class="varname">process</em> to cleanly exit
-	      from any ongoing computation, and then exit.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41080672"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_process-reset" title="Function PROCESS-RESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-reset</b></a>, <a class="xref" href="#f_process-abort" title="Function PROCESS-ABORT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-abort</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-abort"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-abort</strong></span> process
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> condition
-	      =&gt; NIL</code>
-            </div>
-            <div class="refentrytitle">Causes a specified process to process an abort
-	      condition, as if it had invoked
-	      abort.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41090640"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a lisp process (thread).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">condition</span></i>---a lisp condition.  The default is NIL.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41095600"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Entirely equivalent to calling
-	      (<a class="xref" href="#f_process-interrupt" title="Function PROCESS-INTERRUPT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-interrupt</b></a> <em class="varname">process</em>
-	      (<span class="function"><strong>lambda</strong></span> ()
-	      (<span class="function"><strong>abort</strong></span> <em class="varname">condition</em>))).
-	      Causes <em class="varname">process</em> to transfer control to the
-	      applicable handler or restart for <span class="function"><strong>abort</strong></span>.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">If <em class="varname">condition</em> is non-NIL,
-	      <span class="function"><strong>process-abort</strong></span> does not consider any
-	      handlers which are explicitly bound to conditions other than
-	      <em class="varname">condition</em>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41103216"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_process-reset" title="Function PROCESS-RESET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-reset</b></a>, <a class="xref" href="#f_process-kill" title="Function PROCESS-KILL"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-kill</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_ticks-per-second"></a>
-              <strong>[Variable]</strong>
-              <br></br>
-              <code>*TICKS-PER-SECOND*</code>
-            </div>
-            <div class="refentrytitle">Bound to the clock resolution of the OS
-	      scheduler.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41110240"></a>
-                <div class="header">Value Type:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">A positive integer.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41111584"></a>
-                <div class="header">Initial Value:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">The clock resolution of the OS scheduler.  Currently,
-	      both LinuxPPC and DarwinPPC yield an initial value of 100.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41113040"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">This value is ordinarily of marginal interest at best,
-	      but, for backward compatibility, some functions accept timeout
-	      values expressed in "ticks".  This value gives the number of
-	      ticks per second.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41114592"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist">
-                  <a class="xref" href="#f_process-wait-with-timeout" title="Function PROCESS-WAIT-WITH-TIMEOUT">
-                    <b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-wait-with-timeout</b>
-                  </a>
-                </span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-whostate"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-whostate</strong></span> process
-	      =&gt; whostate</code>
-            </div>
-            <div class="refentrytitle">Returns a string which describes the status of
-	      a specified process.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41127072"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">This information is primarily for the benefit of
-	      debugging tools.  <em class="varname">whostate</em> is a terse report
-	      on what <em class="varname">process</em> is doing, or not doing,
-	      and why.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">If the process is currently waiting in a call to
-	      <a class="xref" href="#f_process-wait" title="Function PROCESS-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-wait</b></a> or
-	      <a class="xref" href="#f_process-wait-with-timeout" title="Function PROCESS-WAIT-WITH-TIMEOUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-wait-with-timeout</b></a>, its
-	      <span class="function"><strong>process-whostate</strong></span> will be the value
-	      which was passed to that function as <em class="varname">whostate</em>.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41132112"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_process-wait" title="Function PROCESS-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-wait</b></a>, <a class="xref" href="#f_process-wait-with-timeout" title="Function PROCESS-WAIT-WITH-TIMEOUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-wait-with-timeout</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41135808"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">This should arguably be SETFable, but doesn't seem to
-	      ever have been.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-allow-schedule"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="function">
-                  <strong>process-allow-schedule</strong>
-                </span>
-              </code>
-            </div>
-            <div class="refentrytitle">Used for cooperative multitasking; probably never
-	      necessary.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41142768"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Advises the OS scheduler that the current thread has nothing
-	      useful to do and that it should try to find some other thread to
-	      schedule in its place. There's almost always a better
-	      alternative, such as waiting for some specific event to
-	      occur.  For example, you could use a lock or semaphore.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41144416"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41150160"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">This is a holdover from the days of cooperative
-	      multitasking.  All modern general-purpose operating systems use
-	      preemptive multitasking.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-wait"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-wait</strong></span>
-	      whostate function <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> args =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Causes the current lisp process (thread) to wait for
-	      a given
-	      predicate to return true.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41157888"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">whostate</span></i>---a string, which will be the value of
-		        <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_process-whostate" title="Function PROCESS-WHOSTATE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-whostate</b></a>
-		        while the process is waiting.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">function</span></i>---a function, designated by itself or by a symbol
-		        which names it.
-		      </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">args</span></i>---a list of values, appropriate as arguments to
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">function</em>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---NIL.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41167360"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Causes the current lisp process (thread) to repeatedly
-	      apply <em class="varname">function</em> to
-	      <em class="varname">args</em> until the call returns a true result, then
-	      returns NIL. After
-	      each failed call, yields the CPU as if by
-	      <a class="xref" href="#f_process-allow-schedule" title="Function PROCESS-ALLOW-SCHEDULE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-allow-schedule</b></a>.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      As with <a class="xref" href="#f_process-allow-schedule" title="Function PROCESS-ALLOW-SCHEDULE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-allow-schedule</b></a>, it's almost
-	      always more efficient to wait for some
-	      specific event to occur; this isn't exactly busy-waiting, but
-	      the OS scheduler can do a better job of scheduling if it's given
-	      the relevant information.  For example, you could use a lock
-	      or semaphore.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41171632"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_process-whostate" title="Function PROCESS-WHOSTATE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-whostate</b></a>, <a class="xref" href="#f_process-wait-with-timeout" title="Function PROCESS-WAIT-WITH-TIMEOUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-wait-with-timeout</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-wait-with-timeout"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-wait-with-timeout</strong></span>
-	      whostate ticks function args =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Causes the current thread to wait for a given
-	      predicate to return true, or for a timeout to expire.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41184640"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">whostate</span></i>---a string, which will be the value of
-		        <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_process-whostate" title="Function PROCESS-WHOSTATE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-whostate</b></a>
-		        while the process is waiting.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">ticks</span></i>---either a positive integer expressing a duration
-		        in "ticks" (see <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#v_ticks-per-second" title="Variable *TICKS-PER-SECOND*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*ticks-per-second*</b></a>),
-		        or NIL.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">function</span></i>---a function, designated by itself or by a symbol
-		        which names it.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">args</span></i>---a list of values, appropriate as arguments to
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">function</em>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---T if <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-wait-with-timeout</strong></span>
-		        returned because its <em xmlns="http://www.w3.org/1999/xhtml" class="varname">function</em> returned
-		        true, or NIL if it returned because the duration
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">ticks</em> has been exceeded.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41198240"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">If <em class="varname">ticks</em> is NIL, behaves exactly like
-	      <a class="xref" href="#f_process-wait" title="Function PROCESS-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-wait</b></a>, except for returning T.
-	      Otherwise, <em class="varname">function</em> will be tested repeatedly,
-	      in the same
-	      kind of test/yield loop as in <a class="xref" href="#f_process-wait" title="Function PROCESS-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-wait</b></a>
-	      until either <em class="varname">function</em> returns true,
-	      or the duration <em class="varname">ticks</em> has been exceeded.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml"> Having already read the descriptions of
-	      <a class="xref" href="#f_process-allow-schedule" title="Function PROCESS-ALLOW-SCHEDULE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-allow-schedule</b></a> and
-	      <a class="xref" href="#f_process-wait" title="Function PROCESS-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-wait</b></a>, the
-	      astute reader has no doubt anticipated the observation that
-	      better alternatives should be used whenever possible.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41204240"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#v_ticks-per-second" title="Variable *TICKS-PER-SECOND*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*ticks-per-second*</b></a>, <a class="xref" href="#f_process-whostate" title="Function PROCESS-WHOSTATE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-whostate</b></a>, <a class="xref" href="#f_process-wait" title="Function PROCESS-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-wait</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_without-interrupts"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>without-interrupts</strong></span>
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Evaluates its body in an environment in which
-	      process-interrupt requests are deferred.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41218288"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">body</span></i>---an implicit progn.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---the primary value returned by
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">body</em>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41223632"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Executes <em class="varname">body</em>
-	      in an environment in which <a class="xref" href="#f_process-interrupt" title="Function PROCESS-INTERRUPT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-interrupt</b></a>
-	      requests are
-	      deferred. As noted in the description of
-	      <a class="xref" href="#f_process-interrupt" title="Function PROCESS-INTERRUPT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-interrupt</b></a>, this has nothing to do
-	      with the
-	      scheduling of other threads; it may be necessary to inhibit
-	      <a class="xref" href="#f_process-interrupt" title="Function PROCESS-INTERRUPT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-interrupt</b></a> handling when
-	      (for instance) modifying some data
-	      structure (for which the current thread holds an appropriate lock)
-	      in some manner that's not reentrant.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41227440"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist">
-                  <a class="xref" href="#f_process-interrupt" title="Function PROCESS-INTERRUPT">
-                    <b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-interrupt</b>
-                  </a>
-                </span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_with-interrupts-enabled"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>with-interrupts-enabled</strong></span>
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Evaluates its body in an environment in which
-	      process-interrupt requests have immediate effect.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41236032"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">body</span></i>---an implicit progn.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---the primary value returned by
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">body</em>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41241376"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Executes <em class="varname">body</em>
-	      in an environment in which <a class="xref" href="#f_process-interrupt" title="Function PROCESS-INTERRUPT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-interrupt</b></a>
-	      requests have immediate effect.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_make-lock"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-lock</strong></span> <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em>
-	      name =&gt; lock</code>
-            </div>
-            <div class="refentrytitle">Creates and returns a lock object, which can
-	      be used for synchronization between threads.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41249952"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---any lisp object; saved as part of
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">lock</em>.  Typically a string or symbol
-		        which may appear in the <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_process-whostate" title="Function PROCESS-WHOSTATE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-whostate</b></a>s
-		        of threads which are waiting for <em xmlns="http://www.w3.org/1999/xhtml" class="varname">lock</em>.
-		      </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">lock</span></i>---a newly-allocated object of type CCL:LOCK.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41256288"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Creates and returns a lock object, which can
-	      be used to synchronize access to some shared resource.
-	      <em class="varname">lock</em> is
-	      initially in a "free" state; a lock can also be
-	      "owned" by a
-	      thread.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41258256"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#m_with-lock-grabbed" title="Macro WITH-LOCK-GRABBED"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-lock-grabbed</b></a>, <a class="xref" href="#f_grab-lock" title="Function GRAB-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">grab-lock</b></a>, <a class="xref" href="#f_release-lock" title="Function RELEASE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">release-lock</b></a>, <a class="xref" href="#f_try-lock" title="Function TRY-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">try-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_with-lock-grabbed"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>with-lock-grabbed</strong></span>
-	      (lock) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body</code>
-            </div>
-            <div class="refentrytitle">Waits until a given lock can be obtained, then
-	      evaluates its body with the lock held.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42058848"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">lock</span></i>---an object of type CCL:LOCK.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">body</span></i>---an implicit progn.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---the primary value returned by
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">body</em>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42066000"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Waits until <em class="varname">lock</em> is either free or
-	      owned by the calling
-	      thread, then executes <em class="varname">body</em> with the
-	      lock owned by the calling thread. If <em class="varname">lock</em>
-	      was free when <span class="function"><strong>with-lock-grabbed</strong></span> was called,
-	      it is restored to a free state after <em class="varname">body</em>
-	      is executed.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42069840"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_grab-lock" title="Function GRAB-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">grab-lock</b></a>, <a class="xref" href="#f_release-lock" title="Function RELEASE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">release-lock</b></a>, <a class="xref" href="#f_try-lock" title="Function TRY-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">try-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_grab-lock"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>grab-lock</strong></span> lock</code>
-            </div>
-            <div class="refentrytitle">Waits until a given lock can be obtained, then
-	      obtains it.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42083408"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">lock</span></i>---an object of type CCL:LOCK.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42086560"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Blocks until <em class="varname">lock</em> is owned by the
-	      calling thread.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">The macro <a class="xref" href="#m_with-lock-grabbed" title="Macro WITH-LOCK-GRABBED"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-lock-grabbed</b></a>
-	      <span class="emphasis"><em>could</em></span> be defined in
-	      terms of <span class="function"><strong>grab-lock</strong></span> and
-	      <a class="xref" href="#f_release-lock" title="Function RELEASE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">release-lock</b></a>, but it is actually
-	      implemented at a slightly lower level.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42091168"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#m_with-lock-grabbed" title="Macro WITH-LOCK-GRABBED"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-lock-grabbed</b></a>, <a class="xref" href="#f_release-lock" title="Function RELEASE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">release-lock</b></a>, <a class="xref" href="#f_try-lock" title="Function TRY-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">try-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_release-lock"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>release-lock</strong></span> lock</code>
-            </div>
-            <div class="refentrytitle">Relinquishes ownership of a given lock.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42104704"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">lock</span></i>---an object of type CCL:LOCK.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42107856"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Signals an error of type CCL:LOCK-NOT-OWNER if
-	      <em class="varname">lock</em>
-	      is not already owned by the calling thread; otherwise, undoes the
-	      effect of one previous 
-	      <a class="xref" href="#f_grab-lock" title="Function GRAB-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">grab-lock</b></a>.  If this means that
-	      <span class="function"><strong>release-lock</strong></span> has now been called on
-	      <em class="varname">lock</em> the same number of times as
-	      <a class="xref" href="#f_grab-lock" title="Function GRAB-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">grab-lock</b></a> has, <em class="varname">lock</em>
-	      becomes free.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42112496"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#m_with-lock-grabbed" title="Macro WITH-LOCK-GRABBED"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-lock-grabbed</b></a>, <a class="xref" href="#f_grab-lock" title="Function GRAB-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">grab-lock</b></a>, <a class="xref" href="#f_try-lock" title="Function TRY-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">try-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_try-lock"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>try-lock</strong></span> lock =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Obtains the given lock, but only if it is not
-	      necessary to wait for it.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42126080"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">lock</span></i>---an object of type CCL:LOCK.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---T if <em xmlns="http://www.w3.org/1999/xhtml" class="varname">lock</em> has been obtained,
-		        or NIL if it has not.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42131440"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Tests whether <em class="varname">lock</em>
-	      can be obtained without blocking - that is, either
-	      <em class="varname">lock</em> is already free, or it is already owned
-	      by <a class="xref" href="#v_current-process" title="Variable *CURRENT-PROCESS*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*current-process*</b></a>.  If it can,
-	      causes it to
-	      be owned by the calling lisp process (thread) and returns T.
-	      Otherwise, the lock
-	      is already owned by another thread and cannot be obtained without
-	      blocking; NIL is returned in this case.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42134496"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#m_with-lock-grabbed" title="Macro WITH-LOCK-GRABBED"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-lock-grabbed</b></a>, <a class="xref" href="#f_grab-lock" title="Function GRAB-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">grab-lock</b></a>, <a class="xref" href="#f_release-lock" title="Function RELEASE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">release-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_make-read-write-lock"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-read-write-lock</strong></span>
-	      =&gt; read-write-lock</code>
-            </div>
-            <div class="refentrytitle">Creates and returns a read-write lock, which can
-	      be used for synchronization between threads.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42148112"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">read-write-lock</span></i>---a newly-allocated object of type
-		        CCL:READ-WRITE-LOCK.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42151296"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Creates and returns an object of type CCL::READ-WRITE-LOCK.
-	      A read-write lock may, at any given time, belong to any number
-	      of lisp processes (threads) which act as "readers"; or, it may
-	      belong to at most one process which acts as a "writer".  A
-	      read-write lock may never be held by a reader at the same time as
-	      a writer.  Initially, <em class="varname">read-write-lock</em> has
-	      no readers and no writers.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42153456"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#m_with-read-lock" title="Macro WITH-READ-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-read-lock</b></a>, <a class="xref" href="#m_with-write-lock" title="Macro WITH-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-write-lock</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42159888"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">There probably should be some way to
-	      atomically "promote" a reader, making it a writer without
-	      releasing the lock, which could otherwise cause delay.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_with-read-lock"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>with-read-lock</strong></span>
-	      (read-write-lock) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Waits until a given lock is available for
-	      read-only access, then evaluates its body with the lock
-	      held.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42167648"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">read-write-lock</span></i>---an object of type
-		        CCL:READ-WRITE-LOCK.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">body</span></i>---an implicit progn.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---the primary value returned by
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">body</em>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42174752"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Waits until <em class="varname">read-write-lock</em> has no
-	      writer,
-	      ensures that <a class="xref" href="#v_current-process" title="Variable *CURRENT-PROCESS*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*current-process*</b></a> is a
-	      reader of it, then executes <em class="varname">body</em>.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">After executing <em class="varname">body</em>, if
-	      <a class="xref" href="#v_current-process" title="Variable *CURRENT-PROCESS*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*current-process*</b></a> was not a reader of
-	      <em class="varname">read-write-lock</em> before
-	      <span class="function"><strong>with-read-lock</strong></span> was called, the lock is
-	      released.  If it was already a reader, it remains one.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42180192"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#m_with-write-lock" title="Macro WITH-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-write-lock</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_with-write-lock"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>with-write-lock</strong></span>
-	      (read-write-lock) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body</code>
-            </div>
-            <div class="refentrytitle">Waits until the given lock is available for write
-	      access, then executes its body with the lock held.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42192896"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">read-write-lock</span></i>---an object of type
-		        CCL:READ-WRITE-LOCK.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">body</span></i>---an implicit progn.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---the primary value returned by
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">body</em>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42200000"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Waits until <em class="varname">read-write-lock</em> has no
-	      readers and no writer other than <a class="xref" href="#v_current-process" title="Variable *CURRENT-PROCESS*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*current-process*</b></a>,
-	      then ensures that <a class="xref" href="#v_current-process" title="Variable *CURRENT-PROCESS*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*current-process*</b></a> is the
-	      writer of it.  With the lock held, executes <em class="varname">body</em>.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">After executing <em class="varname">body</em>, if
-	      <a class="xref" href="#v_current-process" title="Variable *CURRENT-PROCESS*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*current-process*</b></a> was not the writer of
-	      <em class="varname">read-write-lock</em> before
-	      <span class="function"><strong>with-write-lock</strong></span> was called, the lock is
-	      released.  If it was already the writer, it remains the
-	      writer.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42206112"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#m_with-read-lock" title="Macro WITH-READ-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-read-lock</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_make-semaphore"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-semaphore</strong></span>
-	      =&gt; semaphore</code>
-            </div>
-            <div class="refentrytitle">Creates and returns a semaphore, which can be used
-	      for synchronization between threads.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42218336"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">semaphore</span></i>---a newly-allocated object of type CCL:SEMAPHORE.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42221440"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Creates and returns an object of type CCL:SEMAPHORE.
-	      A semaphore has an associated "count" which may be incremented
-	      and decremented atomically; incrementing it represents sending
-	      a signal, and decrementing it represents handling that signal.
-	      <em class="varname">semaphore</em> has an initial count of 0.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42223504"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_signal-semaphore" title="Function SIGNAL-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">signal-semaphore</b></a>, <a class="xref" href="#f_wait-on-semaphore" title="Function WAIT-ON-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">wait-on-semaphore</b></a>, <a class="xref" href="#f_timed-wait-on-semaphore" title="Function TIMED-WAIT-ON-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">timed-wait-on-semaphore</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_signal-semaphore"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>signal-semaphore</strong></span>
-	      semaphore =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Atomically increments the count of a given
-	      semaphore.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42236416"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">semaphore</span></i>---an object of type CCL:SEMAPHORE.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---an integer representing an error identifier
-		        which was returned by the underlying OS call.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42241440"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Atomically increments <em class="varname">semaphore</em>'s
-	      "count" by 1; this
-	      may enable a waiting thread to resume execution.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42243296"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_wait-on-semaphore" title="Function WAIT-ON-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">wait-on-semaphore</b></a>, <a class="xref" href="#f_timed-wait-on-semaphore" title="Function TIMED-WAIT-ON-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">timed-wait-on-semaphore</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42250432"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml"><em class="varname">result</em> should probably be interpreted
-	      and acted on by <span class="function"><strong>signal-semaphore</strong></span>, because
-	      it is not likely to be meaningful to a lisp program, and the
-	      most common cause of failure is a type error.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_wait-on-semaphore"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>wait-on-semaphore</strong></span>
-	      semaphore =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Waits until the given semaphore has a positive
-	      count which can be atomically decremented.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42258672"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">semaphore</span></i>---an object of type CCL:SEMAPHORE.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---an integer representing an error identifier
-		        which was returned by the underlying OS call.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42263696"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Waits until <em class="varname">semaphore</em>
-	      has a positive count that can be
-	      atomically decremented; this will succeed exactly once for each
-	      corresponding call to SIGNAL-SEMAPHORE.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42265632"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_signal-semaphore" title="Function SIGNAL-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">signal-semaphore</b></a>, <a class="xref" href="#f_timed-wait-on-semaphore" title="Function TIMED-WAIT-ON-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">timed-wait-on-semaphore</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42272768"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml"><em class="varname">result</em> should probably be interpreted
-	      and acted on by <span class="function"><strong>wait-on-semaphore</strong></span>, because
-	      it is not likely to be meaningful to a lisp program, and the
-	      most common cause of failure is a type error.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_timed-wait-on-semaphore"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>timed-wait-on-semaphore</strong></span>
-	      semaphore timeout =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Waits until the given semaphore has a positive
-	      count which can be atomically decremented, or until a timeout
-	      expires.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42281088"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">semaphore</span></i>---An object of type CCL:SEMAPHORE.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">timeout</span></i>---a time interval in seconds.  May be any
-		        non-negative real number the <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>floor</strong></span> of
-		        which fits in 32 bits.  The default is 1.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---T if <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>timed-wait-on-semaphore</strong></span>
-		        returned because it was able to decrement the count of
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">semaphore</em>; NIL if it returned because
-		        the duration <em xmlns="http://www.w3.org/1999/xhtml" class="varname">timeout</em> has been
-		        exceeded.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42290240"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Waits until <em class="varname">semaphore</em>
-	      has a positive count that can be
-	      atomically decremented, or until the duration
-	      <em class="varname">timeout</em> has
-	      elapsed.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42292560"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_wait-on-semaphore" title="Function WAIT-ON-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">wait-on-semaphore</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-input-wait"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-input-wait</strong></span>
-	      fd <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> timeout</code>
-            </div>
-            <div class="refentrytitle">Waits until input is available on a given
-	      file-descriptor.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42305200"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">fd</span></i>---a file descriptor, which is a non-negative integer
-		        used by the OS to refer to an open file, socket, or similar
-		        I/O connection.  See <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_stream-device" title="Generic Function CCL::STREAM-DEVICE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">ccl::stream-device</b></a>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">timeout</span></i>---either NIL or a time interval in milliseconds.  Must be a non-negative integer.  The default is NIL.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42310912"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Wait until input is available on <em class="varname">fd</em>.
-	      This uses the <span class="function"><strong>select()</strong></span> system call, and is
-	      generally a fairly
-	      efficient way of blocking while waiting for input. More
-	      accurately, <span class="function"><strong>process-input-wait</strong></span>
-	      waits until it's possible to read
-	      from fd without blocking, or until <em class="varname">timeout</em>, if
-	      it is not NIL, has been exceeded.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Note that it's possible to read without blocking if
-	      the file is at its end - although, of course, the read will
-	      return zero bytes.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42315344"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42320400"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      <span class="function"><strong>process-input-wait</strong></span> has a timeout parameter,
-	      and
-	      <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a> does not.  This
-	      inconsistency should probably be corrected.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_process-output-wait"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-output-wait</strong></span>
-	      fd  <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> timeout</code>
-            </div>
-            <div class="refentrytitle">Waits until output is possible on a given file
-	      descriptor.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42329264"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">fd</span></i>---a file descriptor, which is a non-negative integer
-		        used by the OS to refer to an open file, socket, or similar
-		        I/O connection.  See <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_stream-device" title="Generic Function CCL::STREAM-DEVICE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">ccl::stream-device</b></a>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">timeout</span></i>---either NIL or a time interval in milliseconds.  Must be a non-negative integer.  The default is NIL.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42334976"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Wait until output is possible on <em class="varname">fd</em> or until <em class="varname">timeout</em>, if
-	      it is not NIL, has been exceeded.
-	      This uses the <span class="function"><strong>select()</strong></span> system call, and is
-	      generally a fairly
-	      efficient way of blocking while waiting to output.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">If <span class="function"><strong>process-output-wait</strong></span> is called on
-	      a network socket which has not yet established a connection, it
-	      will wait until the connection is established.  This is an
-	      important use, often overlooked.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42339440"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a></span>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42344496"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a> has a timeout parameter,
-	      and
-	      <span class="function"><strong>process-output-wait</strong></span> does not.  This
-	      inconsistency should probably be corrected.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_with-terminal-input"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>with-terminal-input</strong></span>
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body =&gt; result</code>
-            </div>
-            <div class="refentrytitle">Executes its body in an environment with exclusive
-	      read access to the terminal.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42353376"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">body</span></i>---an implicit progn.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---the primary value returned by
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">body</em>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42358720"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Requests exclusive read access to the standard terminal
-	      stream, <em class="varname">*terminal-io*</em>.  Executes
-	      <em class="varname">body</em> in an environment with that access.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42360976"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#v_request-terminal-input-via-break" title="Variable *REQUEST-TERMINAL-INPUT-VIA-BREAK*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*request-terminal-input-via-break*</b></a>, <a class="xref" href="#cmd_y" title="Toplevel Command :Y"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">:y</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_request-terminal-input-via-break"></a>
-              <strong>[Variable]</strong>
-              <br></br>
-              <code>*REQUEST-TERMINAL-INPUT-VIA-BREAK*</code>
-            </div>
-            <div class="refentrytitle">Controls how attempts to obtain ownership of
-	      terminal input are made.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42371552"></a>
-                <div class="header">Value Type:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">A boolean.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42372896"></a>
-                <div class="header">Initial Value:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">NIL.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42374240"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Controls how attempts to obtain ownership of terminal input
-	      are made. When NIL, a message is printed on *TERMINAL-IO*;
-	      it's expected that the user will later yield
-	      control of the terminal via the :Y toplevel command. When T, a
-	      BREAK condition is signaled in the owning process; continuing from
-	      the break loop will yield the terminal to the requesting process
-	      (unless the :Y command was already used to do so in the break
-	      loop.)</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42376048"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a>, <a class="xref" href="#cmd_y" title="Toplevel Command :Y"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">:y</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="cmd_y"></a>
-              <strong>[Toplevel Command]</strong>
-              <br></br>
-              <code>(<span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>:y</strong></span> p)</code>
-            </div>
-            <div class="refentrytitle">Yields control of terminal input to a specified
-	      lisp process (thread).</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42388416"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">p</span></i>---a lisp process (thread), designated either by
-		        an integer which matches its
-		        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-serial-number</strong></span>,
-		        or by a string which is <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>equal</strong></span> to
-		        its <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>process-name</strong></span>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42393808"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">:Y is a toplevel command, not a function.  As such, it
-	      can only be used interactively, and only from the initial
-	      process.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">The command yields control of terminal input to the
-	      process <em class="varname">p</em>, which must have used
-	      <a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a> to request access to the
-	      terminal input stream.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42396752"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#m_with-terminal-input" title="Macro WITH-TERMINAL-INPUT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-terminal-input</b></a>, <a class="xref" href="#v_request-terminal-input-via-break" title="Variable *REQUEST-TERMINAL-INPUT-VIA-BREAK*"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">*request-terminal-input-via-break*</b></a>, <a class="xref" href="#f_make-lock" title="Function MAKE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-lock</b></a>, <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>, <a class="xref" href="#f_make-semaphore" title="Function MAKE-SEMAPHORE"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-semaphore</b></a>, <a class="xref" href="#f_process-input-wait" title="Function PROCESS-INPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-input-wait</b></a>, <a class="xref" href="#f_process-output-wait" title="Function PROCESS-OUTPUT-WAIT"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-output-wait</b></a></span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_join-process"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>join-process</strong></span> process
-	<em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> default =&gt; values</code>
-            </div>
-            <div class="refentrytitle">Waits for a specified process to complete and
-	returns the values that that process's initial function
-	returned.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42409456"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">process</span></i>---a process, typically created by <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_process-run-function" title="Function PROCESS-RUN-FUNCTION"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-run-function</b></a> or by <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_make-process" title="Function MAKE-PROCESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-process</b></a></p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">default</span></i>---A default value to be returned if the specified
-	      process doesn't exit normally.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">values</span></i>---The values returned by the specified process's
-	      initial function if that function returns, or the value
-	      of the default argument, otherwise.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42417360"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Waits for the specified process to terminate.  If the
-	process terminates "normally" (if its initial function
-	returns), returns the values that that initial function
-	returnes.  If the process does not terminate normally (e.g.,
-	if it's terminated via <a class="xref" href="#f_process-kill" title="Function PROCESS-KILL"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">process-kill</b></a> and a
-	default argument is provided, returns the value of that
-	default argument.  If the process doesn't terminate normally
-	and no default argument is provided, signals an error.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">A process can't successfully join itself, and only one
-	process can successfully receive notification of another process's
-	termination.</p>
-              </div>
-            </div>
-          </p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Programming-with-Sockets"></a>ChapterÂ 8.Â Programming with Sockets</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#Sockets-Overview">8.1. Overview</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Sockets-Dictionary">8.2. Sockets Dictionary</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Sockets-Overview"></a>8.1.Â Overview</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL supports the socket abstraction for
-      interprocess communication. A socket represents a connection to
-      another process, typically (but not necessarily) a TCP/IP
-      network connection to a client or server running on some other
-      machine on the network.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">IPv6 is supported by the :internet6 address family.
-      Applications should use the <a class="xref" href="#f_resolve-address" title="Function RESOLVE-ADDRESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">resolve-address</b></a>
-      function to translate host and port specifications to socket
-      addresses.  While host and port numbers can still be dealt with
-      separately, it is preferable to use <a class="xref" href="#c_socket-address" title="Class SOCKET-ADDRESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">socket-address</b></a> instances to specify socket
-      endpoints for unified parsing of string representations and
-      printing.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">All symbols mentioned in this chapter are exported from
-      the CCL package. As of version 0.13, these symbols are
-      additionally exported from the OPENMCL-SOCKET package.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL supports three types of sockets: TCP sockets, UDP
-      sockets, and Unix-domain sockets.  This should be enough for all
-      but the most esoteric network situations.  All sockets are
-      created by <a class="xref" href="#f_make-socket" title="Function MAKE-SOCKET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-socket</b></a>.  The type of socket
-      depends on the arguments to it, as follows:</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-            <dl>
-              <dt>
-                <span class="term">tcp-stream</span>
-              </dt>
-              <dd>
-                <p>A buffered bi-directional stream over a TCP/IP connection.
-	    tcp-stream is a subclass of stream, and you can read and write to it
-	    using all the usual stream functions. Created by (make-socket
-	    :address-family :internet :type :stream :connect :active ...) or by
-	    (accept-connection ...).</p>
-              </dd>
-              <dt>
-                <span class="term">file-socket-stream</span>
-              </dt>
-              <dd>
-                <p>A buffered bi-directional stream over a "UNIX domain"
-	    connection. file-socket-stream is a subclass of stream, and you can
-	    read and write to it using all the usual stream functions. Created
-	    by (make-socket :address-family :file :type :stream :connect :active
-	    ...) or by (accept-connection ...),</p>
-              </dd>
-              <dt>
-                <span class="term">listener-socket</span>
-              </dt>
-              <dd>
-                <p>A passive socket used to listen for incoming TCP/IP
-	    connections on a particular port. A listener-socket is not a stream.
-	    It doesn't support I/O. It can only be used to create new
-	    tcp-streams by accept-connection. Created by (make-socket :type
-	    :stream :connect :passive ...)</p>
-              </dd>
-              <dt>
-                <span class="term">file-listener-socket</span>
-              </dt>
-              <dd>
-                <p>A passive socket used to listen for incoming UNIX domain
-	    connections named by a file in the local filesystem. A
-	    listener-socket is not a stream. It doesn't support I/O. It can
-	    only be used to create new file-socket-streams by accept-connection.
-	    Created by (make-socket :address-family :file :type :stream :connect
-	    :passive ...)</p>
-              </dd>
-              <dt>
-                <span class="term">udp-socket</span>
-              </dt>
-              <dd>
-                <p>A socket representing a packet-based UDP/IP connection. A
-	    udp-socket supports I/O but it is not a stream. Instead, you must
-	    use the special functions send-to and receive-from to read and write
-	    to it. Created by (make-socket :type :datagram ...)</p>
-              </dd>
-            </dl>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Sockets-Dictionary"></a>8.2.Â Sockets Dictionary</h2>
-              </div>
-            </div>
-          </div>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_make-socket"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-socket</strong></span> <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em>
-	  address-family type connect eol format remote-address
-	  remote-host remote-port local-address local-host local-port
-	  local-filename remote-filename keepalive reuse-address
-	  nodelay broadcast linger backlog input-timeout
-	  output-timeout connect-timeout auto-close
-	  deadline</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36005824"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">address-family</span></i>---The address/protocol family of this
-		socket. Currently, :internet (the default), meaning
-		IPv4, :internet6, meaning IPv6, and :file, referring
-		to UNIX domain addresses, are supported.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">type</span></i>---One of :stream (the default) to request a
-		connection-oriented socket, or :datagram to request a
-		connectionless socket. The default is :stream.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">connect</span></i>---This argument is only relevant to sockets of type
-		:stream. One of :active (the default) to request a :passive
-		to request a file or TCP listener socket.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">eol</span></i>---This argument is currently ignored (it is accepted for
-		compatibility with Franz Allegro).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">format</span></i>---One of :text (the default), :binary, or :bivalent.
-		This argument is ignored for :stream sockets for now, as
-		:stream sockets are currently always bivalent (i.e. they
-		support both character and byte I/O). For :datagram sockets,
-		this argument is ignored (the format of a datagram socket
-		is always :binary).
-		</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">remote</span></i>---For TCP streams, it specifies the socket address
-		to connect to, specified as socket-address instance.
-		Ignored for listener sockets. For UDP sockets, it can
-		be used to specify a default address for subsequent calls
-		to send-to or receive-from.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">remote-host</span></i>---For TCP streams, it specifies the host to
-		connect to (in any format acceptable to resolve-address).
-		Ignored for listener sockets. For UDP sockets, it can be
-		used to specify a default host for subsequent calls to
-		send-to or receive-from.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">remote-port</span></i>---For TCP streams, it specifies the port to
-		connect to (in any format acceptable to resolve-address).
-		Ignored for listener sockets. For UDP sockets, it can be
-		used to specify a default port for subsequent calls to for
-		subsequent calls to send-to or receive-from.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">remote-filename</span></i>---For file-socket streams, it specifies the
-		name of a file in the local filesystem (e.g., NOT mounted
-		via NFS, AFP, SMB, ...) which names and controls access to a
-		UNIX-domain socket.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">local-address</span></i>---Allows you to specify a local address for a
-		listener or UDP socket, for the case where you want to
-		restrict connections to those coming to a specific local
-		address for security reasons.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">local-host</span></i>---Allows you to specify a local host address for a
-		listener or UDP socket, for the case where you want to
-		restrict connections to those coming to a specific local
-		address for security reasons.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">local-port</span></i>---Specify a local port for a socket. Most useful for
-		listener sockets, where it is the port on which the socket
-		will listen for connections.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">local-filename</span></i>---For file-listener-sockets, specifies the name
-		of a file in the local filesystem which is used to name a
-		UNIX-domain socket. The actual filesystem file should not
-		previously exist when the file-listener-socket is created;
-		its parent directory should exist and be writable by the
-		caller. The file used to name the socket will be deleted
-		when the file-listener-socket is closed.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">keepalive</span></i>---If true, enables the periodic transmission of
-		"keepalive" messages.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">reuse-address</span></i>---If true, allows the reuse of local ports in listener
-		sockets, overriding some TCP/IP protocol specifications. You
-		will need this if you are debugging a server..</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">nodelay</span></i>---If true, disables Nagle's algorithm, which tries
-		to minimize TCP packet fragmentation by introducing
-		transmission delays in the absence of replies. Try setting
-		this if you are using a protocol which involves sending a
-		steady stream of data with no replies and are seeing
-		significant degradations in throughput.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">broadcast</span></i>---If true, requests permission to broadcast datagrams on
-		a UDP socket.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">linger</span></i>---If specified and non-nil, should be the number of
-		seconds the OS is allowed to wait for data to be pushed
-		through when a close is done. Only relevant for TCP sockets.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">backlog</span></i>---For a listener socket, specifies the number of
-		connections which can be pending but not accepted. The
-		default is 5, which is also the maximum on some operating
-		systems.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">input-timeout</span></i>---The number of seconds before an input operation
-		times out.  Must be a real number between zero and one
-		million.  If an input operation takes longer than the
-		specified number of seconds, an
-		<code xmlns="http://www.w3.org/1999/xhtml" class="literal">input-timeout</code> error is signalled.
-		(see <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#Stream-Timeouts-And-Deadlines" title="10.1.4.Â Stream Timeouts and Deadlines">SectionÂ 10.1.4, âStream Timeouts and Deadlinesâ</a>)</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">output-timeout</span></i>---The number of seconds before an output operation
-		times out.  Must be a real number between zero and one
-		million.  If an output operation takes longer than the
-		specified number of seconds, an
-		<code xmlns="http://www.w3.org/1999/xhtml" class="literal">output-timeout</code> error is signalled.
-		(see <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#Stream-Timeouts-And-Deadlines" title="10.1.4.Â Stream Timeouts and Deadlines">SectionÂ 10.1.4, âStream Timeouts and Deadlinesâ</a>)</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">connect-timeout</span></i>---The number of seconds before a connection
-		attempt times out. [TODO: what are acceptable values?]
-		If a connection attempt takes longer than the
-		specified number of seconds, a
-		<code xmlns="http://www.w3.org/1999/xhtml" class="literal">socket-error</code> is signalled.  This
-		can be useful if the specified interval is shorter
-		than the interval that the OS's socket layer imposes,
-		which is sometimes a minute or two.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">auto-close</span></i>---When non-nil, any resulting socket stream will
-		be closed when the GC can prove that the stream is
-		unreferenced.  This is done via CCL's termination
-		mechanism [TODO add xref].</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">deadline</span></i>---Specifies an absolute time in
-		internal-time-units.  If an I/O operation on the
-		stream does not complete before the deadline then a
-		<code xmlns="http://www.w3.org/1999/xhtml" class="literal">COMMUNICATION-DEADLINE-EXPIRED</code>
-		error is signalled.  A deadline takes precedence over
-		any input/output timeouts that may be set.  (see <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#Stream-Timeouts-And-Deadlines" title="10.1.4.Â Stream Timeouts and Deadlines">SectionÂ 10.1.4, âStream Timeouts and Deadlinesâ</a>)</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40048064"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Creates and returns a new socket.  For :passive
-	  sockets, the :local-address, :local-port or :local-filename
-	  arguments are required, depending on the type of the socket.
-	  For :active sockets, either the :remote-address, the
-	  :remote-host and :remote-port, or the :remote-filename
-	  arguments must be present, depending on the socket
-	  type.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_accept-connection"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>accept-connection</strong></span>
-	  (socket listener-socket) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> wait</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp37066432"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The listener-socket to listen on.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">wait</span></i>---If true (the default), and there are no connections
-		waiting to be accepted, waits until one arrives. If false,
-		returns NIL immediately.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp37071504"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Extracts the first connection on the queue of pending
-	  connections, accepts it (i.e. completes the connection startup
-	  protocol) and returns a new tcp-stream or file-socket-stream
-	  representing the newly established connection. The tcp stream
-	  inherits any properties of the listener socket that are relevant
-	  (e.g. :keepalive, :nodelay, etc.) The original listener socket
-	  continues to be open listening for more connections, so you can
-	  call accept-connection on it again.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_resolve-address"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>resolve-address</strong></span> <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> host
-	  port socket-type connect address-family numeric-host-p
-	  numeric-service-p singlep errorp</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp37223168"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">host</span></i>---Specification of the host, as a string.  This
-		can be either a host name such as
-		"clozure.com" or any of the literal address
-		forms accepted by getaddrinfo().</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">port</span></i>---Specification of the port.  This
-		can be either a service name such as
-		"http" or a port number.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket-type</span></i>---Service type for port lookups, can be either
-		:stream for TCP services or :datagram for UDP.
-		Defaults to :stream.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">connect</span></i>---Specifies how the returned <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#c_socket-address" title="Class SOCKET-ADDRESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">socket-address</b></a> instances will be used.
-		If :active is passed, which is the default, the host
-		address will default to the address of the loopback
-		interface of the local host if not specified.  When
-		:passive is used, the host address will default to the
-		wildcard address for the given address family.  This
-		parameter has no effect if the :host parameter is
-		used.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">address-family</span></i>---Specifies the address family that should be
-		returned, can be specified as either :internet or
-		:internet6.  If it is specified, only addresses of
-		that family are returned.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">numeric-host-p</span></i>---If this argument is true, no host name lookups
-		will be performed for the host address.  A numeric
-		address literal must be passed in this case.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">numeric-port-p</span></i>---If this argument is true, no service name
-		lookups will be performed for the port address.  A
-		numeric port number must be passed in this
-		case.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">singlep</span></i>---If this argument is set to a true value, which
-		is the default, only the first matching address is
-		returned.  If it is passed as NIL, all matching
-		addresses are returned as a list.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">errorp</span></i>---If this argument is set to a true value, which
-		is the default, an error is signalled if the given
-		host and/or port combination did not yield any
-		matches.  If it is passed as NIL, the function returns
-		NIL if no addresses matched the supplied
-		arguments.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36354928"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Converts a host and/or port specification to one or
-	  more <a class="xref" href="#c_socket-address" title="Class SOCKET-ADDRESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">socket-address</b></a> instances.  This
-	  function uses the getaddrinfo() system function underneath
-	  which knows how to translate all standard address and port
-	  formats and appropriately orders adresses for hosts with
-	  multiple addresses.  It returns the best matching
-	  translation or, if the :singlep argument is passed as false,
-	  or all matching translations for the given parameter
-	  combination.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_dotted-to-ipaddr"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>dotted-to-ipaddr</strong></span>
-	  dotted <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> errorp</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36363168"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">dotted</span></i>---A string representing an IP address in the
-		"nn.nn.nn.nn" format</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">errorp</span></i>---If true (the default) an error is signaled if dotted
-		is invalid. If false, NIL is returned.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp37691104"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Converts a dotted-string representation of a host address to
-	  a 32-bit unsigned IP address.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_ipaddr-to-dotted"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>ipaddr-to-dotted</strong></span>
-	  ipaddr <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> values</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp37698528"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">ipaddr</span></i>---A 32-bit integer representing an IPv4 host
-		address</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">values</span></i>---If false (the default), returns a string in the form
-		"nn.nn.nn.nn". If true, returns four values
-		representing the four octets of the address as unsigned
-		8-bit integers.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36954608"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Converts a 32-bit unsigned IPv4 address into octets.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_ipaddr-to-hostname"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>ipaddr-to-hostname</strong></span>
-	  ipaddr <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> ignore-cache</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36961920"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">ipaddr</span></i>---a 32-bit integer representing an IPv4 host address</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">ignore-cache</span></i>---This argument is ignored (it is accepted for
-		compatibility with Franz Allegro)</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39743792"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Converts a 32-bit unsigned IPv4 address into a host name
-	  string</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_lookup-hostname"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>lookup-hostname</strong></span>
-	  host</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39750656"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">host</span></i>---Specifies the host. It can be either a host name
-		string such as "clozure.com", or a dotted address
-		string such as "192.168.0.1", or a 32-bit unsigned
-		IPv4 address such as 3232235521.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39815872"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Converts a host spec in any of the acceptable formats
-	  into a 32-bit unsigned IPv4 address.  IPv6-enabled
-	  applications should use the <a class="xref" href="#f_resolve-address" title="Function RESOLVE-ADDRESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">resolve-address</b></a> function instead.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_lookup-port"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>lookup-port</strong></span>
-	  port protocol</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39823456"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">port</span></i>---Specifies the port. It can be either a string,
-		such as "http" or a symbol, such as :http, or
-		an unsigned port number. Note that a string is
-		case-sensitive. A symbol is lowercased before
-		lookup.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">protocol</span></i>---Must be one of "tcp" or "udp".</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39354624"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Finds the port number for the specified port and protocol</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_receive-from"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>receive-from</strong></span>
-	  (socket udp-socket) size <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> buffer
-	  extract offset</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39361968"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket to read from</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">size</span></i>---Maximum number of bytes to read. If the packet is
-		larger than this, any extra bytes are discarded.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">buffer</span></i>---If specified, must be an octet vector
-		which will be used to read in the data. If not specified, a
-		new buffer will be created (of type determined by
-		socket-format).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">extract</span></i>---If true, the subsequence of the buffer corresponding
-		only to the data read in is extracted and returned as the
-		first value. If false (the default) the original buffer is
-		returned even if it is only partially filled.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">offset</span></i>---Specifies the start offset into the buffer at which
-		data is to be stored. The default is 0.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">want-socket-address-p</span></i>---Indicates that the address of the sender of the
-		data should be returned as a <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#c_socket-address" title="Class SOCKET-ADDRESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">socket-address</b></a> instance rather than as
-		separate host and port values.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40281856"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Reads a UDP packet from a socket. If no packets are
-	  available, waits for a packet to arrive.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">If :want-socket-address-p is NIL, which is the
-          default, four values are returned:</p>
-                <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-                  <ol class="orderedlist" type="1">
-                    <li class="listitem">
-                      <p>The buffer with the data</p>
-                    </li>
-                    <li class="listitem">
-                      <p>The number of bytes read</p>
-                    </li>
-                    <li class="listitem">
-                      <p>The 32-bit unsigned IPv4 address or the 16 byte
-	      IPv6 addresss of the sender of the data</p>
-                    </li>
-                    <li class="listitem">
-                      <p>The port number of the sender of the data</p>
-                    </li>
-                  </ol>
-                </div>
-                <p xmlns="http://www.w3.org/1999/xhtml">If :want-socket-address-p is true, three values are
-          returned:</p>
-                <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-                  <ol class="orderedlist" type="1">
-                    <li class="listitem">
-                      <p>The buffer with the data</p>
-                    </li>
-                    <li class="listitem">
-                      <p>The number of bytes read</p>
-                    </li>
-                    <li class="listitem">
-                      <p>The <a class="xref" href="#c_socket-address" title="Class SOCKET-ADDRESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">socket-address</b></a> instance of
-	      the sender of the data.</p>
-                    </li>
-                  </ol>
-                </div>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_send-to"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>send-to</strong></span> (socket udp-socket)
-	  buffer size <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> remote remote-host remote-port
-	  offset</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38590080"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket to write to</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">buffer</span></i>---A vector containing the data to send. It must be
-		an octet vector.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">size</span></i>---Number of octets to send</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">remote</span></i>---The remote address to send the packet to, as a
-		<a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#c_socket-address" title="Class SOCKET-ADDRESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">socket-address</b></a> instance. The
-		default is the remote address specified in the call to
-		make-socket.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">remote-host</span></i>---The host to send the packet to, in any format
-		acceptable to lookup-hostname. The default is the remote
-		host specified in the call to make-socket.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">remote-port</span></i>---The port to send the packet to, in any format
-		acceptable to lookup-port. The default is the remote port
-		specified in the call to make-socket.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">offset</span></i>---The offset in the buffer where the packet data starts</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp34843840"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Send a UDP packet over a socket.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_shutdown"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>shutdown</strong></span>
-	  socket <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> direction</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp34851200"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket to shut down (typically a tcp-stream)</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">direction</span></i>---One of :input to disallow further input, or :output to
-		disallow further output.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp34856064"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Shuts down part of a bidirectional connection. This is
-	  useful if e.g. you need to read responses after sending an
-	  end-of-file signal.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_socket-os-fd"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>socket-os-fd</strong></span>
-	  socket</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39640448"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39643584"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the native OS's representation of the socket, or
-	  NIL if the socket is closed. On Unix, this is the Unix 'file
-	  descriptor', a small non-negative integer. Note that it is
-	  rather dangerous to mess around with tcp-stream fd's, as there
-	  is all sorts of buffering and asynchronous I/O going on above the
-	  OS level. listener-socket and udp-socket fd's are safer to
-	  mess with directly as there is less magic going on.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_remote-host"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>remote-host</strong></span>
-	  socket</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36710928"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36714064"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the 32-bit unsigned IPv4 address of the remote host,
-	  or NIL if the socket is not connected.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_remote-port"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>remote-port</strong></span>
-	  socket</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36721040"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36889600"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the remote port number, or NIL if the socket is not
-	  connected.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_local-host"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>local-host</strong></span>
-	  socket</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36896464"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36899600"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns 32-bit unsigned IPv4 address or the 16 byte
-	  IPv6 address of the local host.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_local-port"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>local-port</strong></span>
-	  socket</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40236800"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40239936"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the local port number</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_socket-address-family"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>socket-address-family</strong></span>
-	  thing</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38685984"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">thing</span></i>---The socket or socket-address for which the
-		address family is to be queried.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38689088"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns :internet, :internet6 or :file, as appropriate.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_socket-address-host"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>socket-address-host</strong></span>
-	  socket-address</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38695952"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket-address</span></i>---The socket-address for which the
-		host address is to be queried.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40212192"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the host portion of the given socket-address.
-	  For :internet addresses, this is a 32-bit integer.  For
-	  :internet6 addresses, an array of 16 bytes returned.  For
-	  :file addresses, it is the file name string.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_socket-address-port"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>socket-address-port</strong></span>
-	  socket-address</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40219296"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket-address</span></i>---The socket-address for which the
-		port number is to be queried.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40222400"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the port number of the given socket-address.
-	  This function is available only for :internet and :internet6
-	  socket addresses.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_socket-connect"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>socket-connect</strong></span>
-	  socket</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38669712"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38672848"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns :active for tcp-stream, :passive for
-	  listener-socket, and NIL for udp-socket</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_socket-format"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>socket-format</strong></span>
-	  socket</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39660912"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39664048"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the socket format as specified by the :format
-	  argument to make-socket.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_socket-type"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>socket-type</strong></span>
-	  socket</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39670912"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39674048"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">returns :stream for tcp-stream and listener-socket, and
-	  :datagram for udp-socket.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="c_socket-address"></a>
-              <strong>[Class]</strong>
-              <br></br>
-              <code>SOCKET-ADDRESS</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp32797856"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Representation of a socket endpoint address.
-          Instances of this class are used to encapsulate the host and
-          port of an IP socket endpoint or the filename of a file
-          socket.  They can be created by applications from a possibly
-          symbolic address representation by the <a class="xref" href="#f_resolve-address" title="Function RESOLVE-ADDRESS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">resolve-address</b></a> function.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="c_socket-error"></a>
-              <strong>[Class]</strong>
-              <br></br>
-              <code>SOCKET-ERROR</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp32803872"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">The class of OS errors signaled by socket functions</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp32805184"></a>
-                <div class="header">Superclasses:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">simple-error</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_socket-error-code"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>socket-error-code</strong></span>
-	  socket-error</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39374336"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket-error</span></i>---the condition</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39377472"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">The OS error code of the error</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_socket-error-identifier"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>socket-error-identifier</strong></span>
-	  socket-error</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39540320"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket-error</span></i>---the condition</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39543456"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">A symbol representing the error code in a more
-	  OS-independent way.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">One of: :address-in-use :connection-aborted :no-buffer-space
-	  :connection-timed-out :connection-refused :host-unreachable
-	  :host-down :network-down :address-not-available :network-reset
-	  :connection-reset :shutdown :access-denied or :unknown.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_socket-error-situation"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>socket-error-situation</strong></span>
-	  socket-error</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39551056"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket-error</span></i>---the condition</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39554192"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">A string describing the context where the error happened. On
-	  Linux, this is the name of the system call which returned the
-	  error.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="o_close"></a>
-              <strong>[Method]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>close</strong></span>
-	  (socket socket) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> abort</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39405856"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">socket</span></i>---The socket to close</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">abort</span></i>---If false (the default), closes the socket in an
-		orderly fashion, finishing up any buffered pending I/O,
-		before closing the connection. If true, aborts/ignores
-		pending I/O. (For listener and udp sockets, this argument is
-		effectively ignored since there is never any buffered I/O to
-		clean up).</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39411072"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">The close generic function can be applied to sockets. It
-	  releases the operating system resources associated with the
-	  socket.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_with-open-socket"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>with-open-socket</strong></span>
-	  (var . make-socket-args) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39437856"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">var</span></i>---variable to bind</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">make-socket-args</span></i>---arguments suitable for passing to make-socket</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">body</span></i>---body to execute</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp39444544"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">executes body with var bound to the result of applying
-	  make-socket to make-socket-args. The socket gets closed on exit.</p>
-              </div>
-            </div>
-          </p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Running-Other-Programs-as-Subprocesses"></a>ChapterÂ 9.Â Running Other Programs as Subprocesses</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#Subprocess-Overview">9.1. Overview</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Subprocess-Examples">9.2. Examples</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Limitations-and-known-bugs">9.3. Limitations and known bugs</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#External-Program-Dictionary">9.4. External-Program Dictionary</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Subprocess-Overview"></a>9.1.Â Overview</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL provides primitives to run external Unix programs,
-      to select and connect Lisp streams to their input and output
-      sources, to (optionally) wait for their completion and to check
-      their execution and exit status.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">All of the global symbols described below are exported
-      from the CCL package.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">This implementation is modeled on - and uses some code
-      from - similar facilities in CMUCL.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Subprocess-Examples"></a>9.2.Â Examples</h2>
-              </div>
-            </div>
-          </div>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-;;; Capture the output of the "uname" program in a lisp string-stream
-;;; and return the generated string (which will contain a trailing
-;;; newline.)
-? (with-output-to-string (stream)
-    (run-program "uname" '("-r") :output stream))
-;;; Write a string to *STANDARD-OUTPUT*, the hard way.
-? (run-program "cat" () :input (make-string-input-stream "hello") :output t)
-;;; Find out that "ls" doesn't expand wildcards.
-? (run-program "ls" '("*.lisp") :output t)
-;;; Let the shell expand wildcards.
-? (run-program "sh" '("-c" "ls *.lisp") :output t)
-</pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">These last examples will only produce output if Clozure CL's
-      current directory contains .lisp files, of course.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Limitations-and-known-bugs"></a>9.3.Â Limitations and known bugs</h2>
-              </div>
-            </div>
-          </div>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>Clozure CL and the external process may get
-        confused about who owns which streams when input, output, or
-        error are specified as T and wait is specified as
-        NIL.</p>
-              </li>
-              <li class="listitem">
-                <p>External processes that need to talk to a
-        terminal device may not work properly; the environment (SLIME,
-        ILISP) under which Clozure CL is run can affect
-        this.</p>
-              </li>
-            </ul>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="External-Program-Dictionary"></a>9.4.Â External-Program Dictionary</h2>
-              </div>
-            </div>
-          </div>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_run-program"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>run-program</strong></span>
-	    program args <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> (wait t) pty sharing input
-	    if-input-does-not-exist output (if-output-exists :error) (error
-	    :output) (if-error-exists :error) status-hook
-	    external-format env (silently-ignore-catastrophic-failures
-            *silently-ignore-catastrophic-failure-in-run-program*)</code>
-            </div>
-            <div class="refentrytitle">Invokes an external program as an OS subprocess
-	    of lisp.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp33048384"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">program</span></i>---A string or pathname which denotes an executable file.
-		  The PATH environment variable is used to find programs whose
-		  name doesn't contain a directory component.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">args</span></i>---A list of simple-strings</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">wait</span></i>---Indicates whether or not run-program should wait for
-		  the EXTERNAL-PROCESS to complete or should return
-		  immediately.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">pty</span></i>---This option is accepted but currently ignored;
-		  it's intended to make it easier to run external programs
-		  that need to interact with a terminal device.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">sharing</span></i>---Sets a specific sharing mode
-                  (see <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#Stream-SHARING"><code class="literal">:SHARING</code></a>) for any streams created
-                  within RUN-PROGRAM when INPUT, OUTPUT or ERROR are requested
-                  to be a :STREAM.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">input</span></i>---Selects the input source used by the EXTERNAL-PROCESS.
-		  May be any of the following:<div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>NIL Specifies that a null input stream (e.g.,
-		      /dev/null) should be used.</p></li><li class="listitem"><p>T Specifies that the EXTERNAL-PROCESS should use
-		      the input source with which Clozure CL was invoked.</p></li><li class="listitem"><p>A string or pathname. Specifies that the
-		      EXTERNAL-PROCESS should receive its input from the named
-		      existing file.</p></li><li class="listitem"><p>:STREAM Creates a Lisp stream opened for character
-		      output. Any data written to this stream (accessible as
-		      the EXTERNAL-PROCESS-INPUT-STREAM of the
-		      EXTERNAL-PROCESS object) appears as input to the
-		      external process.</p></li><li class="listitem"><p>A stream. Specifies that the lisp stream should
-		      provide input to the EXTERNAL-PROCESS.</p></li></ul></div></p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">if-input-does-not-exist</span></i>---If the input argument specifies the name of an
-		  existing file, this argument is used as the
-		  if-does-not-exist argument to OPEN when that file is opened.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">output</span></i>---Specifies where standard output from the external
-		  process should be sent. Analogous to input above.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">if-output-exists</span></i>---If output is specified as a string or pathname, this
-		  argument is used as the if-exists argument to OPEN when that
-		  file is opened.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">error</span></i>---Specifies where error output from the external process
-		  should be sent. In addition to the values allowed for
-		  output, the keyword :OUTPUT can be used to indicate that
-		  error output should be sent where standard output goes.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">if-error-exists</span></i>---Analogous to if-output-exists.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">status-hook</span></i>---A user-defined function of one argument (the
-		  EXTERNAL-PROCESS structure.) This function is called
-		  whenever Clozure CL detects a change in the status of the
-		  EXTERNAL-PROCESS.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">external-format</span></i>---
-		    The external format (see <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#External-Formats" title="4.5.2.Â External Formats">SectionÂ 4.5.2, âExternal Formatsâ</a>) for all of the
-		    streams (input, output, and error) used to
-		    communicate with the external process.
-		  </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">env</span></i>---
-		    New OS environment variable bindings for the
-		    external process.  By default the external process
-		    inherits the environment of the running Lisp
-		    process.  Env is an association list with elements
-		    (&lt;Environment Variable
-		    Name&gt;Â .Â &lt;Value&gt;). Name and
-		    value are case sensitive strings. See <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#f_setenv" title="Function CCL::SETENV"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">ccl::setenv</b></a>.
-		  </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">&gt;silently-ignore-catastrophic-failures</span></i>---
-		    If NIL, signal an error if run-program is unable
-		    to start the program. If non-NIL, treat failure to
-		    start the same as failure from the program itself,
-		    by setting the status and exit-code
-		    fields. Default is
-		    *silently-ignore-catastrophic-failure-in-run-program*.
-		  </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36214896"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Runs the specified program in an external (Unix) process,
-	    returning an object of type EXTERNAL-PROCESS if successful.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">The implementation involves a lisp process/thread which
-            monitors the status of this external process and arranges for
-            the standard I/O descriptors for the external process to be
-            connected to the specified lisp streams.  Since this may require
-            the monitoring thread to do I/O on lisp streams in some cases,
-            streams provided as the values of the <code class="literal">:INPUT</code>,
-            <code class="literal">:OUTPUT</code>, and <code class="literal">:ERROR</code> arguments
-            should not be private to some other lisp thread.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_signal-external-process"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>signal-external-process</strong></span>
-	    proc signal-number <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> (error-if-exited t)</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp37211168"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">proc</span></i>---An EXTERNAL-PROCESS, as returned by RUN-PROGRAM.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">signal</span></i>---A small integer.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">error-if-exited</span></i>---A boolean, by default T.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp35452096"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Sends <em class="varname">signal</em> to the external process
-	      <em class="varname">proc</em>. (Typically, it would only be
-	      useful to call this function if the EXTERNAL-PROCESS was
-	      created with :WAIT NIL.)
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      If successful, the function returns T; otherwise, an
-	      error is signaled.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      However, if <em class="varname">error-if-exited</em> is nil,
-	      and the attempt to signal the external process fails
-	      because the external process has already exited, the
-	      function will return nil rather than signaling an error.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_external-process-id"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>external-process-id</strong></span>
-	    proc</code>
-            </div>
-            <div class="refentrytitle">Returns the "process ID" of an OS subprocess,
-	    a positive integer which identifies it.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp35740448"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">proc</span></i>---An EXTERNAL-PROCESS, as returned by RUN-PROGRAM.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp35743552"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the <span class="emphasis"><em>process id</em></span> assigned to
-	    the external process by the operating system. This is typically
-	    a positive, 16-bit number.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_external-process-input-stream"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>external-process-input-stream</strong></span>
-	    proc</code>
-            </div>
-            <div class="refentrytitle">Returns the lisp stream which is used to write
-	    input to a given OS subprocess, if it has one.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp37009312"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">proc</span></i>---An EXTERNAL-PROCESS, as returned by RUN-PROGRAM.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp37012416"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the stream created when the input argument to
-	    run-program is specified as :STREAM.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_external-process-output-stream"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>external-process-output-stream</strong></span>
-	    proc</code>
-            </div>
-            <div class="refentrytitle">Returns the lisp stream which is used to read
-	    output from an OS subprocess, if there is one.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp38641568"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">proc</span></i>---An EXTERNAL-PROCESS, as returned by RUN-PROGRAM.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp33081680"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the stream created when the output argument to
-	    run-program is specified as :STREAM.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_external-process-error-stream"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>external-process-error-stream</strong></span>
-	    proc</code>
-            </div>
-            <div class="refentrytitle">Returns the stream which is used to read
-	    "error" output from a given OS subprocess, if it has
-	    one.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36748640"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">proc</span></i>---An EXTERNAL-PROCESS, as returned by RUN-PROGRAM.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp36751744"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the stream created when the error argument to
-	    run-program is specified as :STREAM.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_external-process-status"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>external-process-status</strong></span>
-	    proc</code>
-            </div>
-            <div class="refentrytitle">Returns information about whether an OS
-	    subprocess is running; or, if not, why not; and what its
-	    result code was if it completed.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp33424960"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">proc</span></i>---An EXTERNAL-PROCESS, as returned by RUN-PROGRAM.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp33428064"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns, as multiple values, a keyword denoting the status
-	    of the external process (one of :running, :stopped, :signaled, or
-	    :exited), and the exit code or terminating signal if the first
-	    value is other than :running.</p>
-              </div>
-            </div>
-          </p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Streams"></a>ChapterÂ 10.Â Streams</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#CCL-Stream-Extensions">10.1. Stream Extensions</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#idp34169856">10.1.1. Stream External Format</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Additional-Open-Keywords">10.1.2. Additional keywords for OPEN and MAKE-SOCKET</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Basic-Versus-Fundamental-Streams">10.1.3. Basic Versus Fundamental Streams</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Stream-Timeouts-And-Deadlines">10.1.4. Stream Timeouts and Deadlines</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Open-File-Streams">10.1.5. Open File Streams</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Creating-Your-Own-Stream-Classes-with-Gray-Streams">10.2. Creating Your Own Stream Classes with Gray Streams</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Streams-Overview">10.2.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Extending-READ-SEQUENCE-and-WRITE-SEQUENCE">10.2.2. Extending READ-SEQUENCE and WRITE-SEQUENCE</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Multibyte-I-O">10.2.3. Multibyte I/O</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Gray-Streams-Dictionary">10.2.4. Gray Streams Dictionary</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#idp42645856">10.3. Lisp Standard Streams and OS Standard Streams</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="CCL-Stream-Extensions"></a>10.1.Â Stream Extensions</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="idp34169856"></a>10.1.1.Â Stream External Format</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"><span class="function"><strong>STREAM-EXTERNAL-FORMAT</strong></span> can be applied to
-    (and may return a non-null result for) open streams that are not
-    <code class="literal">FILE-STREAM</code>s.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><span class="function"><strong>(SETF STREAM-EXTERNAL-FORMAT)</strong></span> can be used to
-    change the external format of open streams created with <span class="function"><strong>
-    OPEN</strong></span> or <span class="function"><strong>MAKE-SOCKET</strong></span>.
-    </p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Additional-Open-Keywords"></a>10.1.2.Â Additional keywords for OPEN and MAKE-SOCKET</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"><span class="function"><strong>OPEN</strong></span> and
-      <span class="function"><strong>MAKE-SOCKET</strong></span> have each been extended to take
-      the additional keyword arguments: <code class="literal">:CLASS</code>,
-      <code class="literal">:SHARING</code>, and
-      <code class="literal">:BASIC</code>.</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-              <dl>
-                <dt>
-                  <span class="term">
-                    <code class="literal">:CLASS</code>
-                  </span>
-                </dt>
-                <dd>
-                  <p>A symbol that names the desired class of the stream.
-	  The specified class must inherit from
-	  <code class="literal">FILE-STREAM</code> for
-	  <span class="function"><strong>OPEN</strong></span>.</p>
-                </dd>
-                <dt>
-                  <a id="Stream-SHARING"></a>
-                  <span class="term">
-                    <code class="literal">:SHARING</code>
-                  </span>
-                </dt>
-                <dd>
-                  <p>Specifies how a stream can be used by multiple
-	  threads.  The possible values are:
-	  <code class="literal">:PRIVATE</code>, <code class="literal">:LOCK</code> and
-	  <code class="literal">:EXTERNAL</code>. <code class="literal">:PRIVATE</code> is
-	  the default.  <code class="literal">NIL</code> is also accepted as a
-	  synonym for <code class="literal">:EXTERNAL</code>.</p>
-                  <div class="variablelist">
-                    <dl>
-                      <dt>
-                        <span class="term">
-                          <code class="literal">:PRIVATE</code>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>Specifies that the stream can only be accessed
-		by the thread that first tries to do I/O to it; that
-                thread becomes the "owner" of the stream and
-                is not necessarily the same thread as the one which
-                created the stream.  This is the default.
-		(There was some discussion on openmcl-devel about the
-		idea of "transferring ownership" of a stream; this has
-		not yet been implemented.)  Attempts to do I/O on a
-		stream with :PRIVATE sharing from a thread other than
-		the stream's owner yield an error.</p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <code class="literal">:LOCK</code>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>Specifies that all access to the stream require
-		the calling thread to obtain a lock. There are
-		separate "read" and "write" locks for IO streams.
-		This makes it possible for instance, for one thread to
-		read from such a stream while another thread writes to
-		it.  (see also <a class="xref" href="#f_make-read-write-lock" title="Function MAKE-READ-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-read-write-lock</b></a>
-		<a class="xref" href="#m_with-read-lock" title="Macro WITH-READ-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-read-lock</b></a> <a class="xref" href="#m_with-write-lock" title="Macro WITH-WRITE-LOCK"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">with-write-lock</b></a>)</p>
-                      </dd>
-                      <dt>
-                        <span class="term">
-                          <code class="literal">:EXTERNAL</code>
-                        </span>
-                      </dt>
-                      <dd>
-                        <p>Specifies that I/O primitives enforce no access
-		protocol.  This may be appropriate for some types of
-		application which can control stream access via
-		application-level protocols.  Note that since even the
-		act of reading from a stream changes its internal
-		state (and simultaneous access from multiple threads
-		can therefore lead to corruption of that state), some
-		care must be taken in the design of such protocols.</p>
-                      </dd>
-                    </dl>
-                  </div>
-                </dd>
-                <dt>
-                  <span class="term">
-                    <code class="literal">:BASIC</code>
-                  </span>
-                </dt>
-                <dd>
-                  <p>A boolean that indicates whether or not the stream is
-	  a Gray stream, i.e. whether or not the stream is an instance
-	  of <code class="literal">FUNDAMENTAL-STREAM</code> or
-	  <code class="literal">CCL::BASIC-STREAM</code>(see <a class="xref" href="#Basic-Versus-Fundamental-Streams" title="10.1.3.Â Basic Versus Fundamental Streams">SectionÂ 10.1.3, âBasic Versus Fundamental Streamsâ</a>).  Defaults to
-	  <code class="literal">T</code>.</p>
-                </dd>
-              </dl>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Basic-Versus-Fundamental-Streams"></a>10.1.3.Â Basic Versus Fundamental Streams</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Gray streams (see <a class="xref" href="#Creating-Your-Own-Stream-Classes-with-Gray-Streams" title="10.2.Â Creating Your Own Stream Classes with Gray Streams">SectionÂ 10.2, âCreating Your Own Stream Classes with Gray Streamsâ</a>)
-      all inherit from <code class="literal">FUNDAMENTAL-STREAM</code> whereas
-      basic streams inherit from <code class="literal">CCL::BASIC-STREAM</code>.
-      The tradeoff between FUNDAMENTAL and BASIC streams is entirely
-      between flexibility and performance, potential or actual.  I/O
-      primitives can recognize BASIC-STREAMs and exploit knowledge of
-      implementation details. FUNDAMENTAL stream classes can be
-      subclassed and extended in a standard way (the Gray streams
-      protocol).</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">For existing stream classes (FILE-STREAMs, SOCKETs, and
-      the internal CCL::FD-STREAM classes used to implement file
-      streams and sockets), a lot of code can be shared between the
-      FUNDAMENTAL and BASIC implementations.  The biggest difference
-      should be that that code can be reached from I/O primitives like
-      READ-CHAR without going through some steps that're there to
-      support generality and extensibility, and skipping those steps
-      when that support isn't needed can improve I/O performance.
-      </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The Gray stream method
-      <span class="function"><strong>STREAM-READ-CHAR</strong></span> should work on appropriate
-      <code class="literal">BASIC-STREAM</code>s.  (There may still be cases
-      where such methods are undefined; such cases should be
-      considered bugs.)  It is not guaranteed that Gray stream methods
-      would ever be called by I/O primitives to read a character from
-      a <code class="literal">BASIC-STREAM</code>, though there are still cases
-      where this happens.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">A simple loop reading 2M characters from a text file runs
-      about 10X faster when the file is opened the new defaults
-      <code class="literal">(:SHARING :PRIVATE :BASIC T)</code> than it had
-      before these changes were made.  That sounds good, until one
-      realizes that the "equivalent" C loop can be about 10X faster
-      still ...</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Stream-Timeouts-And-Deadlines"></a>10.1.4.Â Stream Timeouts and Deadlines</h3>
-                </div>
-              </div>
-            </div>
-            <a xmlns="http://www.w3.org/1999/xhtml" id="idp39681072" class="indexterm"></a>
-            <a xmlns="http://www.w3.org/1999/xhtml" id="idp39682240" class="indexterm"></a>
-            <a xmlns="http://www.w3.org/1999/xhtml" id="idp39683408" class="indexterm"></a>
-            <a xmlns="http://www.w3.org/1999/xhtml" id="idp39684576" class="indexterm"></a>
-            <a xmlns="http://www.w3.org/1999/xhtml" id="idp39685744" class="indexterm"></a>
-            <a xmlns="http://www.w3.org/1999/xhtml" id="idp39686912" class="indexterm"></a>
-            <p xmlns="http://www.w3.org/1999/xhtml">A stream that is associated with a file descriptor has
-        attributes and accessors:
-        <span class="function"><strong>STREAM-INPUT-TIMEOUT</strong></span>,
-        <span class="function"><strong>STREAM-OUTPUT-TIMEOUT</strong></span>, and
-        <span class="function"><strong>STREAM-DEADLINE</strong></span>.  All three accessors have
-        corresponding <span class="function"><strong>SETF</strong></span> methods.
-        <span class="function"><strong>STREAM-INPUT-TIMEOUT</strong></span> and
-        <span class="function"><strong>STREAM-OUTPUT-TIMEOUT</strong></span> are specified in
-        seconds and can be any positive real number less than one million.
-        When a timeout is set and the corresponding I/O operation takes
-        longer than the specified interval, an error is signalled.  The
-        error is <code class="literal">INPUT-TIMEOUT</code> for input and
-        <code class="literal">OUTPUT-TIMEOUT</code> for output.
-        <code class="literal">STREAM-DEADLINE</code> specifies an absolute time in
-        internal-time-units.  If an I/O operation on the stream does not
-        complete before the deadline then a
-        <code class="literal">COMMUNICATION-DEADLINE-EXPIRED</code> error is
-        signalled.  A deadline takes precedence over any
-        input/output timeouts that may be set.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Open-File-Streams"></a>10.1.5.Â Open File Streams</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Historically, Clozure CL and MCL maintained a list of open
-        file streams in the value of
-        <code class="literal">CCL:*OPEN-FILE-STREAMS*</code>.  This functionality
-        has been replaced with the thread-safe function:
-        <code class="literal">CCL:OPEN-FILE-STREAMS</code> and its two helper
-        functions: <code class="literal">CCL:NOTE-OPEN-FILE-STREAM</code> and
-        <code class="literal">CCL:REMOVE-OPEN-FILE-STREAM</code>.  Maintaining
-        this list helps to ensure that streams get closed in an orderly
-        manner when the lisp exits.</p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_open-file-streams"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-	        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>open-file-streams</strong></span>
-	        =&gt; stream-list
-	      </code>
-              </div>
-              <div class="refentrytitle">Returns the list of file streams that are currently open.</div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42432352"></a>
-                  <div class="header">Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">stream-list</span></i>---A list of open file streams.  This is a copy of
-		          an internal list so it may be destructively
-		          modified without ill effect.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42435616"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">Returns a list of open file streams.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42436976"></a>
-                  <div class="header">See Also:</div>
-                  <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_note-open-file-stream" title="Function NOTE-OPEN-FILE-STREAM"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">note-open-file-stream</b></a>, <a class="xref" href="#f_remove-open-file-stream" title="Function REMOVE-OPEN-FILE-STREAM"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">remove-open-file-stream</b></a></span>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_note-open-file-stream"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-	        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>note-open-file-stream</strong></span>
-	        file-stream
-	      </code>
-              </div>
-              <div class="refentrytitle">Adds a file stream to the internal list of open
-	        file streams that is returned by
-	        note-open-file-stream.</div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42446672"></a>
-                  <div class="header">Arguments:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">file-stream</span></i>---A file stream.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42449808"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">Adds a file stream to the internal list of open
-	        file streams that is returned by
-	        <span class="function"><strong>open-file-streams</strong></span>.  This function is
-	        thread-safe.  It will usually only be called from custom
-	        stream code when a file-stream is created.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42452080"></a>
-                  <div class="header">See Also:</div>
-                  <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_open-file-streams" title="Function OPEN-FILE-STREAMS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">open-file-streams</b></a>, <a class="xref" href="#f_remove-open-file-stream" title="Function REMOVE-OPEN-FILE-STREAM"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">remove-open-file-stream</b></a></span>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_remove-open-file-stream"></a>
-                <strong>[Function]</strong>
-                <br></br>
-                <code>
-	        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>remove-open-file-stream</strong></span>
-	        file-stream
-	      </code>
-              </div>
-              <div class="refentrytitle">Removes file stream from the internal list of open
-	        file streams that is returned by
-	        open-file-streams.</div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42461824"></a>
-                  <div class="header">Arguments:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">file-stream</span></i>---A file stream.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42464960"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">Remove file stream from the internal list of open file
-	        streams that is returned by
-	        <span class="function"><strong>open-file-streams</strong></span>.  This function is
-	        thread-safe.  It will usually only be called from custom
-	        stream code when a file-stream is closed.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42467232"></a>
-                  <div class="header">See Also:</div>
-                  <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist"><a class="xref" href="#f_open-file-streams" title="Function OPEN-FILE-STREAMS"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">open-file-streams</b></a>, <a class="xref" href="#f_note-open-file-stream" title="Function NOTE-OPEN-FILE-STREAM"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">note-open-file-stream</b></a></span>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Creating-Your-Own-Stream-Classes-with-Gray-Streams"></a>10.2.Â Creating Your Own Stream Classes with Gray Streams</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Streams-Overview"></a>10.2.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">This sect1 is still being written and revised, because
-        it is woefully incomplete.  The dictionary section currently
-        only lists a couple functions.  Caveat lector.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Gray streams are an extension to Common Lisp.  They were
-        proposed for standardization by David Gray (the astute reader
-        now understands their name) quite some years ago, but not
-        accepted, because they had not been tried sufficiently to find
-        conceptual problems with them.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">They have since been implemented by quite a few modern
-        Lisp implementations.  However, they do indeed have some
-        inadequacies, and each implementation has addressed these in
-        different ways.  The situation today is that it's difficult to
-        even find out how to get started using Gray streams.  This is
-        why standards are important.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Here's a list of some classes which you might wish for
-        your new stream class to inherit from:</p>
-            <table xmlns="http://www.w3.org/1999/xhtml" border="0" summary="Simple list" class="simplelist">
-              <tr>
-                <td>fundamental-stream</td>
-              </tr>
-              <tr>
-                <td>fundamental-input-stream</td>
-              </tr>
-              <tr>
-                <td>fundamental-output-stream</td>
-              </tr>
-              <tr>
-                <td>fundamental-character-stream</td>
-              </tr>
-              <tr>
-                <td>fundamental-binary-stream</td>
-              </tr>
-              <tr>
-                <td>fundamental-character-input-stream</td>
-              </tr>
-              <tr>
-                <td>fundamental-character-output-stream</td>
-              </tr>
-              <tr>
-                <td>fundamental-binary-input-stream</td>
-              </tr>
-              <tr>
-                <td>fundamental-binary-output-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::buffered-stream-mixin</td>
-              </tr>
-              <tr>
-                <td>ccl::buffered-input-stream-mixin</td>
-              </tr>
-              <tr>
-                <td>ccl::buffered-output-stream-mixin</td>
-              </tr>
-              <tr>
-                <td>ccl::buffered-io-stream-mixin</td>
-              </tr>
-              <tr>
-                <td>ccl::buffered-character-input-stream-mixin</td>
-              </tr>
-              <tr>
-                <td>ccl::buffered-character-output-stream-mixin</td>
-              </tr>
-              <tr>
-                <td>ccl::buffered-character-io-stream-mixin</td>
-              </tr>
-              <tr>
-                <td>ccl::buffered-binary-input-stream-mixin</td>
-              </tr>
-              <tr>
-                <td>ccl::buffered-binary-output-stream-mixin</td>
-              </tr>
-              <tr>
-                <td>ccl::buffered-binary-io-stream-mixin</td>
-              </tr>
-              <tr>
-                <td>file-stream</td>
-              </tr>
-              <tr>
-                <td>file-input-stream</td>
-              </tr>
-              <tr>
-                <td>file-output-stream</td>
-              </tr>
-              <tr>
-                <td>file-io-stream</td>
-              </tr>
-              <tr>
-                <td>file-character-input-stream</td>
-              </tr>
-              <tr>
-                <td>file-character-output-stream</td>
-              </tr>
-              <tr>
-                <td>file-character-io-stream</td>
-              </tr>
-              <tr>
-                <td>file-binary-input-stream</td>
-              </tr>
-              <tr>
-                <td>file-binary-output-stream</td>
-              </tr>
-              <tr>
-                <td>file-binary-io-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::fd-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::fd-input-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::fd-output-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::fd-io-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::fd-character-input-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::fd-character-output-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::fd-character-io-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::fd-binary-input-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::fd-binary-output-stream</td>
-              </tr>
-              <tr>
-                <td>ccl::fd-binary-io-stream</td>
-              </tr>
-            </table>
-            <p xmlns="http://www.w3.org/1999/xhtml">All of these are defined in ccl/level-1/l1-streams.lisp,
-        except for the ccl:file-* ones, which are in
-        ccl/level-1/l1-sysio.lisp.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">According to the original Gray streams proposal, you
-        should inherit from the most specific of the fundamental-*
-        classes which applies.  Using Clozure CL, though, if you want
-        buffering for better performance, which, unless you know of some
-        reason you wouldn't, you do, you should instead inherit from the
-        appropriate ccl::buffered-* class The buffering you get this way
-        is exactly the same as the buffering which is used on ordinary,
-        non-Gray streams, and force-output will work properly on
-        it.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Notice that -mixin suffix in the names of all the
-        ccl::buffered-* classes?  The suffix means that this class is
-        not "complete" by itself; you still need to inherit from a
-        fundamental-* stream, even if you also inherit from a *-mixin
-        stream.  You might consider making your own class like this.
-        ....  Except that they do inherit from the fundamental-*
-        streams, that's weird.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If you want to be able to create an instance of your class
-        with the :class argument to (open) and (with-open-file), you
-        should make it inherit from one of the file-* classes.  If you
-        do this, it's not necessary to inherit from any of the other
-        classes (though it won't hurt anything), since the file-*
-        classes already do.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">When you inherit from the file-* classes, you can use
-        (call-next-method) in any of your methods to get the standard
-        behavior.  This is especially useful if you want to create a
-        class which performs some simple filtering operation, such as
-        changing everything to uppercase or to a different character
-        encoding.  If you do this, you will definitely need to
-        specialize ccl::select-stream-class.  Your method on
-        ccl::stream-select-class should accept an instance of the class,
-        but pay no attention to its contents, and return a symbol naming
-        the class to actually be instantiated.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If you need to make your functionality generic across all
-        the different types of stream, probably the best way to
-        implement it is to make it a mixin, define classes with all the
-        variants of input, output, io, character, and binary, which
-        inherit both from your mixin and from the appropriate other
-        class, then define a method on ccl::select-stream-class which
-        chooses from among those classes.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Note that some of these classes are internal to the CCL
-        package.  If you try to inherit from those ones without the
-        ccl:: prefix, you'll get an error which may confuse you, calling
-        them "forward-referenced classes".  That just means you used the
-        wrong symbol, so add the prefix.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Here's a list of some generic functions which you might
-        wish to specialize for your new stream class, and which ought to
-        be documented at some point.</p>
-            <table xmlns="http://www.w3.org/1999/xhtml" border="0" summary="Simple list" class="simplelist">
-              <tr>
-                <td>stream-direction stream =&gt;</td>
-              </tr>
-              <tr>
-                <td>stream-device stream direction =&gt;</td>
-              </tr>
-              <tr>
-                <td>stream-length stream <em class="varname">&amp;optional</em> new =&gt;</td>
-              </tr>
-              <tr>
-                <td>stream-position stream <em class="varname">&amp;optional</em> new =&gt;</td>
-              </tr>
-              <tr>
-                <td>streamp stream =&gt; boolean</td>
-              </tr>
-              <tr>
-                <td>stream-write-char output-stream char =&gt;</td>
-              </tr>
-              <tr>
-                <td>stream-write-entire-string output-stream string =&gt;</td>
-              </tr>
-              <tr>
-                <td>stream-read-char input-stream =&gt;</td>
-              </tr>
-              <tr>
-                <td>stream-unread-char input-stream char =&gt;</td>
-              </tr>
-              <tr>
-                <td>stream-force-output output-stream =&gt; nil</td>
-              </tr>
-              <tr>
-                <td>stream-maybe-force-output output-stream =&gt; nil</td>
-              </tr>
-              <tr>
-                <td>stream-finish-output output-stream =&gt; nil</td>
-              </tr>
-              <tr>
-                <td>stream-clear-output output-stream =&gt; nil</td>
-              </tr>
-              <tr>
-                <td>close stream <em class="varname">&amp;key</em> abort =&gt; boolean</td>
-              </tr>
-              <tr>
-                <td>stream-fresh-line stream =&gt; t</td>
-              </tr>
-              <tr>
-                <td>stream-line-length stream =&gt; length</td>
-              </tr>
-              <tr>
-                <td>interactive-stream-p stream =&gt; boolean</td>
-              </tr>
-              <tr>
-                <td>stream-clear-input input-stream =&gt; nil</td>
-              </tr>
-              <tr>
-                <td>stream-listen input-stream =&gt; boolean</td>
-              </tr>
-              <tr>
-                <td>stream-filename stream =&gt; string</td>
-              </tr>
-              <tr>
-                <td>ccl::select-stream-class instance in-p out-p char-p =&gt;
-	      class</td>
-              </tr>
-            </table>
-            <p xmlns="http://www.w3.org/1999/xhtml">The following functions are standard parts of Common Lisp, but
-        behave in special ways with regard to Gray streams.</p>
-            <table xmlns="http://www.w3.org/1999/xhtml" border="0" summary="Simple list" class="simplelist">
-              <tr>
-                <td>open-stream-p stream =&gt; generalized-boolean</td>
-              </tr>
-              <tr>
-                <td>input-stream-p stream =&gt; generalized-boolean</td>
-              </tr>
-              <tr>
-                <td>output-stream-p stream =&gt; generalized-boolean</td>
-              </tr>
-              <tr>
-                <td>stream-element-type stream =&gt;</td>
-              </tr>
-              <tr>
-                <td>stream-error-stream =&gt;</td>
-              </tr>
-              <tr>
-                <td>open</td>
-              </tr>
-              <tr>
-                <td>close</td>
-              </tr>
-              <tr>
-                <td>with-open-file</td>
-              </tr>
-            </table>
-            <p xmlns="http://www.w3.org/1999/xhtml">Specifically, (open) and (with-open-file) accept a new
-        keyword argument, :class, which may be a symbol naming a class;
-        the class itself; or an instance of it.  The class so given must
-        be a subtype of 'stream, and an instance of it with no
-        particular contents will be passed to ccl::select-stream-class
-        to determine what class to actually instantiate.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The following are standard, and do not behave specially
-        with regard to Gray streams, but probably should.</p>
-            <table xmlns="http://www.w3.org/1999/xhtml" border="0" summary="Simple list" class="simplelist">
-              <tr>
-                <td>stream-external-format</td>
-              </tr>
-            </table>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Extending-READ-SEQUENCE-and-WRITE-SEQUENCE"></a>10.2.2.Â Extending READ-SEQUENCE and WRITE-SEQUENCE</h3>
-                </div>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="extending-read-write-overview"></a>10.2.2.1.Â Overview</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">The "Gray Streams" API is based on an informal proposal that was
-	      made before ANSI CL adopted the READ-SEQUENCE and WRITE-SEQUENCE
-	      functions; as such, there is no "standard" way for the author of a Gray
-	      stream class to improve the performance of these functions by exploiting
-	      knowledge of the stream's internals (e.g., the buffering mechanism it
-	      uses.)</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">In the absence of any such knowledge, READ-SEQUENCE and
-	      WRITE-SEQUENCE are effectively just convenient shorthand for a
-	      loop which calls READ-CHAR/READ-BYTE/WRITE-CHAR/WRITE-BYTE as
-	      appropriate. The mechanism described below allows subclasses
-	      of FUNDAMENTAL-STREAM to define more specialized (and
-	      presumably more efficient) behavior.</p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Notes"></a>10.2.2.2.Â Notes</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">READ-SEQUENCE and WRITE-SEQUENCE do a certain amount of
-	      sanity-checking and normalization of their arguments before
-	      dispatching to one of the methods above. If an individual
-	      method can't do anything particularly clever, CALL-NEXT-METHOD
-	      can be used to handle the general case.</p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Example"></a>10.2.2.3.Â Example</h4>
-                  </div>
-                </div>
-              </div>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defclass my-string-input-stream (fundamental-character-input-stream)
-  ((string :initarg :string :accessor my-string-input-stream-string)
-   (index :initform 0 :accessor my-string-input-stream-index)
-   (length)))
-
-(defmethod stream-read-vector ((stream my-string-input-stream) vector start end)
-  (if (not (typep vector 'simple-base-string))
-      (call-next-method)
-      (with-slots (string index length)
-	      (do* ((outpos start (1+ outpos)))
-               ((or (= outpos end)
-                    (= index length))
-                outpos))
-        (setf (schar vector outpos)
-              (schar string index))
-        (incf index)))))
-	    </pre>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Multibyte-I-O"></a>10.2.3.Â Multibyte I/O</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">All heap-allocated objects in Clozure CL that cannot contain
-        pointers to lisp objects are represented as
-        <span class="emphasis"><em>ivectors</em></span>. Clozure CL provides low-level
-        functions, and , to efficiently transfer data between buffered
-        streams and ivectors. There's some overlap in functionality
-        between the functions described here and the ANSI CL
-        READ-SEQUENCE and WRITE-SEQUENCE functions.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">As used here, the term "octet" means roughly the same
-        thing as the term "8-bit byte". The functions described below
-        transfer a specified sequence of octets between a buffered
-        stream and an ivector, and don't really concern themselves with
-        higher-level issues (like whether that octet sequence is within
-        bounds or how it relates to the logical contents of the
-        ivector.) For these reasons, these functions are generally less
-        safe and more flexible than their ANSI counterparts.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Gray-Streams-Dictionary"></a>10.2.4.Â Gray Streams Dictionary</h3>
-                </div>
-              </div>
-            </div>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_stream-read-list"></a>
-                <strong>[Generic Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>stream-read-list</strong></span>
-	        stream list count</code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42537664"></a>
-                  <div class="header">Arguments and Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">stream</span></i>---a stream, presumably a fundamental-input-stream.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">list</span></i>---a list. When a STREAM-READ-LIST method is called by
-		          READ-SEQUENCE, this argument is guaranteed to be a proper
-		          list.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">count</span></i>---a non-negative integer. When a STREAM-READ-LIST method
-		          is called by READ-SEQUENCE, this argument is guaranteed not
-		          to be greater than the length of the list.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42544640"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">Should try to read up to count elements from stream into the
-	        list list, returning the number of elements actually read (which
-	        may be less than count in case of a premature end-of-file.)</p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_stream-write-list"></a>
-                <strong>[Generic Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>stream-write-list</strong></span>
-	        stream list count</code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42551744"></a>
-                  <div class="header">Arguments and Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">stream</span></i>---a stream, presumably a fundamental-output-stream.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">list</span></i>---a list. When a STREAM-WRITE-LIST method is called by
-		          WRITE-SEQUENCE, this argument is guaranteed to be a proper
-		          list.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">count</span></i>---a non-negative integer. When a STREAM-WRITE-LIST
-		          method is called by WRITE-SEQUENCE, this argument is
-		          guaranteed not to be greater than the length of the list.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42558720"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">should try to write the first count elements of list to
-	        stream. The return value of this method is ignored.</p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_stream-read-vector"></a>
-                <strong>[Generic Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>stream-read-vector</strong></span>
-	        stream vector start end</code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42565728"></a>
-                  <div class="header">Arguments and Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">stream</span></i>---a stream, presumably a fundamental-input-stream</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">vector</span></i>---a vector. When a STREAM-READ-VECTOR method is called
-		          by READ-SEQUENCE, this argument is guaranteed to be a simple
-		          one-dimensional array.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">start</span></i>---a non-negative integer. When a STREAM-READ-VECTOR
-		          method is called by READ-SEQUENCE, this argument is
-		          guaranteed to be no greater than end and not greater than
-		          the length of vector.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">end</span></i>---a non-negative integer. When a STREAM-READ-VECTOR
-		          method is called by READ-SEQUENCE, this argument is
-		          guaranteed to be no less than end and not greater than the
-		          length of vector.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42574752"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">should try to read successive elements from stream into
-	        vector, starting at element start (inclusive) and continuing
-	        through element end (exclusive.) Should return the index of the
-	        vector element beyond the last one stored into, which may be less
-	        than end in case of premature end-of-file.</p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_stream-write-vector"></a>
-                <strong>[Generic Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>stream-write-vector</strong></span>
-	        stream vector start end</code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42581968"></a>
-                  <div class="header">Arguments and Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">stream</span></i>---a stream, presumably a fundamental-output-stream</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">vector</span></i>---a vector. When a STREAM-WRITE-VECTOR method is called
-		          by WRITE-SEQUENCE, this argument is guaranteed to be a
-		          simple one-dimensional array.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">start</span></i>---a non-negative integer. When a STREAM-WRITE-VECTOR
-		          method is called by WRITE-SEQUENCE, this argument is
-		          guaranteed to be no greater than end and not greater than
-		          the length of vector.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">end</span></i>---a non-negative integer. When a STREAM-WRITE-VECTOR
-		          method is called by WRITE-SEQUENCE, this argument is
-		          guaranteed to be no less than end and not greater than the
-		          length of vector.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42591008"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">should try to write successive elements of vector to stream,
-	        starting at element start (inclusive) and continuing through
-	        element end (exclusive.)</p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_stream-device"></a>
-                <strong>[Generic Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>ccl::stream-device</strong></span>
-	        s direction</code>
-              </div>
-              <div class="refentrytitle">Returns the OS file descriptor associated with a
-	        given lisp stream.</div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42598176"></a>
-                  <div class="header">Method Signatures:</div>
-                  <div class="synopsis"><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>ccl::stream-device</strong></span> <i>
-	        (s stream) direction =&gt; fd</i></div>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42600368"></a>
-                  <div class="header">Arguments and Values:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">s</span></i>---a stream.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">direction</span></i>---either :INPUT or :OUTPUT.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">fd</span></i>---a file descriptor, which is a non-negative integer
-		          used by the OS to refer to an open file, socket, or similar
-		          I/O connection.  NIL if there is no file descriptor associated
-		          with <em xmlns="http://www.w3.org/1999/xhtml" class="varname">s</em> in the direction given by
-		          <em xmlns="http://www.w3.org/1999/xhtml" class="varname">direction</em>.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42608208"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">Returns the file descriptor associated with
-	        <em class="varname">s</em> in the direction given by
-	        <em class="varname">direction</em>.  It is necessary to specify
-	        <em class="varname">direction</em> because the input and output
-	        file descriptors may be different; the most common case is when
-	        one of them has been redirected by the Unix shell.</p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_stream-read-ivector"></a>
-                <strong>[Generic Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>stream-read-ivector</strong></span>
-	        stream ivector start-octet max-octets</code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42616560"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">Reads up to max-octets octets from stream into ivector,
-	        storing them at start-octet. Returns the number of octets actually
-	        read.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42618032"></a>
-                  <div class="header">Arguments:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">stream</span></i>---An input stream. The method defined on
-		          BUFFERED-INPUT-STREAMs requires that the size in octets of
-		          an instance of the stream's element type is 1.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">ivector</span></i>---Any ivector.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">start-octet</span></i>---A non-negative integer.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">max-octets</span></i>---A non-negative integer. The return value may be less
-		          than the value of this parameter if EOF was encountered.</p>
-                </div>
-              </div>
-            </p>
-            <p>
-              <div class="refentrytitle">
-                <a id="f_stream-write-ivector"></a>
-                <strong>[Generic Function]</strong>
-                <br></br>
-                <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>stream-write-ivector stream</strong></span>
-	        ivector start-octet max-octets</code>
-              </div>
-              <div class="refentrytitle"></div>
-            </p>
-            <p>
-              <div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42632352"></a>
-                  <div class="header">Description:</div>
-                  <p xmlns="http://www.w3.org/1999/xhtml">Writes max-octets octets to stream from ivector, starting at
-	        start-octet. Returns max-octets.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42633776"></a>
-                  <div class="header">Arguments:</div>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">stream</span></i>---An input stream. The method defined on
-		          BUFFERED-OUTPUT-STREAMs requires that the size in octets of
-		          an instance of the stream's element type is 1.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">ivector</span></i>---Any ivector</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">start-octet</span></i>---A non-negative integer.</p>
-                  <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">max-octet</span></i>---A non-negative integer.</p>
-                </div>
-                <div class="refsect1" lang="en" xml:lang="en">
-                  <a xmlns="http://www.w3.org/1999/xhtml" id="idp42642448"></a>
-                  <div class="header">Examples:</div>
-                  <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-;;; Write the contents of a (SIMPLE-ARRAY(UNSIGNED-BYTE 16) 3) 
-;;; to a character file stream. Read back the characters.
-(let* ((a (make-array 3 
-                      :element-type '(unsigned-byte 16)
-                      :initial-contents '(26725 27756 28449))))
-  (with-open-file (s "junk"
-                     :element-type 'character
-                     :direction :io
-                     :if-does-not-exist :create
-                     :if-exists :supersede)
-    ;; Write six octets (three elements).
-    (stream-write-ivector s a 0 6)
-    ;; Rewind, then read a line
-    (file-position s 0)
-    (read-line s)))
-
-;;; Write a vector of DOUBLE-FLOATs. Note that (to maintain
-;;; alignment) there are 4 octets of padding before the 0th 
-;;; element of a (VECTOR DOUBLE-FLOAT) on 32-bit platforms.
-;;; (Note that (= (- target::misc-dfloat-offset 
-;;;                  target::misc-data-offset) 4))
-(defun write-double-float-vector
-    (stream vector &amp;key (start 0) (end (length vector)))
-     (check-type vector (vector double-float))
-     (let* ((start-octet (+ (* start 8) 
-                            (- target::misc-dfloat-offset
-                               target::misc-data-offset)))
-	        (num-octets (* 8 (- end start))))
-       (stream-write-ivector stream vector start-octet num-octets)))
-          </pre>
-                </div>
-              </div>
-            </p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="idp42645856"></a>10.3.Â Lisp Standard Streams and OS Standard Streams</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      In normal interactive usage, the input and output sides of the
-      bidirectional stream <code class="literal">*terminal-io*</code> are hooked
-      up to the the operating system's standard input and standard
-      output.  The lisp streams <code class="literal">*standard-input*</code>,
-      <code class="literal">*standard-output*</code>, and
-      <code class="literal">*error-output*</code> are synonym streams for
-      <code class="literal">*terminal-io*</code>.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">
-      In batch mode, this arrangement is modified slightly.  The lisp
-      streams <code class="literal">*standard-input*</code>,
-      <code class="literal">*standard-output*</code>, and
-      <code class="literal">*standard-error*</code> correspond directly to the
-      operating system's standard input, standard output, and standard
-      error.  If the lisp can determine that it has access to an
-      operating system tty, then <code class="literal">*terminal-io*</code> will
-      be hooked up to that.  Otherwise, the input and output streams
-      of <code class="literal">*terminal-io*</code> will correspond to the
-      operating system's standard input and standard output.
-    </p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Writing-Portable-Extensions-to-the-Object-System-using-the-MetaObject-Protocol"></a>ChapterÂ 11.Â Writing Portable Extensions to the Object System  using the MetaObject Protocol</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#MOP-Overview">11.1. Overview</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#MOP-Implementation-status">11.2. Implementation status</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Concurrency-issues">11.3. Concurrency issues</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="MOP-Overview"></a>11.1.Â Overview</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL supports a fairly large subset of the
-      semi-standard MetaObject Protocol (MOP) for CLOS, as defined in
-      chapters 5 and 6 of "The Art Of The Metaobject Protocol",
-      (Kiczales et al, MIT Press 1991, ISBN 0-262-61074-4); this
-      specification is also available online at
-      http://www.alu.org/mop/index.html.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="MOP-Implementation-status"></a>11.2.Â Implementation status</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The keyword :openmcl-partial-mop is on *FEATURES* to
-      indicate the presence of this functionality.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">All of the symbols defined in the MOP specification
-      (whether implemented or not) are exported from the "CCL" package
-      and from an "OPENMCL-MOP" package.</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="informaltable">
-            <table border="1">
-              <colgroup>
-                <col align="center" class="col0" />
-                <col align="center" class="col1" />
-              </colgroup>
-              <thead>
-                <tr>
-                  <th align="center" valign="top">
-                    <p>construct</p>
-                  </th>
-                  <th align="center" valign="top">
-                    <p>status</p>
-                  </th>
-                </tr>
-              </thead>
-              <tbody>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>accessor-method-slot-definition</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>add-dependent</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>add-direct-method</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>add-direct-subclass</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>add-method</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>class-default-initargs</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>class-direct-default-initargs</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>class-direct-slots</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>class-direct-subclasses</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>class-direct-superclasses</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>class-finalized-p</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>class-prototype</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>class-slots</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>compute-applicable-methods</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>-</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>compute-applicable-methods-using-classes</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>-</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>compute-class-precedence-list</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>compute-direct-initargs</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>compute-discriminating-function</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>-</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>compute-effective-method</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>compute-effective-slot-definition</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>compute-slots</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>direct-slot-definition-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>effective-slot-definition-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>ensure-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>ensure-class-using-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>ensure-generic-function-using-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>eql-specializer-object</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>extract-lambda-list</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>extract-specializer-names</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>finalize-inheritance</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>find-method-combination</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>funcallable-standard-instance-access</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>generic-function-argument-precedence-order</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>generic-function-declarations</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>generic-function-lambda-list</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>generic-function-method-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>generic-function-method-combination</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>generic-function-methods</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>generic-function-name</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>intern-eql-specializer</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>make-method-lambda</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>-</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>map-dependents</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>method-function</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>method-generic-function</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>method-lambda-list</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>method-qualifiers</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>method-specializers</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>reader-method-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>remove-dependent</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>remove-direct-method</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>remove-direct-subclass</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>remove-method</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>set-funcallable-instance-function</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>-</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-boundp-using-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-definition-allocation</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-definition-initargs</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-definition-initform</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-definition-initfunction</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-definition-location</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-definition-name</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-definition-readers</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-definition-type</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-definition-writers</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-makunbound-using-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>slot-value-using-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>specializer-direct-generic-functions</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>specializer-direct-methods</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>standard-instance-access</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>update-dependent</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>validate-superclass</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-                <tr>
-                  <td align="center" valign="top">
-                    <p>writer-method-class</p>
-                  </td>
-                  <td align="center" valign="top">
-                    <p>+</p>
-                  </td>
-                </tr>
-              </tbody>
-            </table>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Note that those generic functions whose status is "-" in
-      the table above deal with the internals of generic function
-      dispatch and method invocation (the "Generic Function Invocation
-      Protocol".) Method functions are implemented a bit differently
-      in Clozure CL from what the MOP expects, and it's not yet clear if
-      or how this subprotocol can be well-supported.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Those constructs that are marked as "+" in the table above
-      are nominally implemented as the MOP document specifies
-      (deviations from the specification should be considered bugs;
-      please report them as such.) Note that some CLOS implementations
-      in widespread use (e.g., PCL) implement some things
-      (ENSURE-CLASS-USING-CLASS comes to mind) a bit differently from
-      what the MOP specifies.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Concurrency-issues"></a>11.3.Â Concurrency issues</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The entire CLOS class and generic function hierarchy is
-      effectively a (large, complicated) shared data structure; it's
-      not generally practical for a thread to request exclusive access
-      to all of CLOS, and the effects of volitional modification of
-      the CLOS hierarchy (via class redefinition, CHANGE-CLASS, etc) in
-      a multithreaded environment aren't always tractable.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Native threads exacerbate this problem (in that they
-      increase the opportunities for concurrent modification and
-      access.) The implementation should try to ensure that a thread's
-      view of any subset of the CLOS hierarchy is consistent (to the
-      extent that that's possible) and should try to ensure that
-      incidental modifications of the hierarchy (cache updates, etc.)
-      happen atomically; it's not generally possible for the
-      implementation to guarantee that a thread's view of things is
-      correct and current.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If you are loading code and defining classes in the most
-      usual way, which is to say, via the compiler, using only a
-      single thread, these issues are probably not going to affect you
-      much.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If, however, you are making finicky changes to the class
-      hierarchy while you're running multiple threads which manipulate
-      objects related to each other, more care is required.  Before
-      doing such a thing, you should know what you're doing and
-      already be aware of what precautions to take, without being
-      told.  That said, if you do it, you should seriously consider
-      what your application's critical data is, and use locks for
-      critical code sections.</p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Profiling"></a>ChapterÂ 12.Â Profiling</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#Profiling-Using-the-Linux-oprofile-system-level-profiler">12.1. Using the Linux oprofile system-level profiler</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Profiling-oprofile-generating-a-lisp-image-for-use-with-oprofile">12.1.1. Generating a lisp image for use with oprofile</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Profiling-oprofile-prerequisites">12.1.2. Prerequisites</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Profiling-oprofile-generating-elf-symbols-for-lisp-functions">12.1.3. Generating ELF symbols for Lisp functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Profiling-oprofile-example">12.1.4. Example</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Profiling-oprofile-Issues">12.1.5. Issues</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Profiling-Using-Apples-CHUD-metering-tools">12.2. Using Apple's CHUD metering tools</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Profiling-CHUD-prerequisites">12.2.1. Prerequisites</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#idp37858832">12.2.2. Generating a lisp image for use with Shark</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Profiling-CHUD-usage-synopsis">12.2.3. Usage synopsis</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Profiling-CHUD-profiling-configurations">12.2.4. Profiling "configurations"</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Profiling-CHUD-Reference">12.2.5. Reference</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Profiling-CHUD-Acknowledgments">12.2.6. Acknowledgement</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Profiling-Using-the-Linux-oprofile-system-level-profiler"></a>12.1.Â Using the Linux oprofile system-level profiler</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml"><a class="ulink" href="http://oprofile.sourceforge.net" target="_top"><code class="code">oprofile</code></a> is a
-    system-level profiler that's available for most modern Linux
-    distributions.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Use of oprofile and its companion programs isn't really documented
-    here; what is described is a way of generating symbolic information that
-    enables profiling summaries generated by the <code class="code">opreport</code> program
-    to identify lisp functions meaningfully.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Profiling-oprofile-generating-a-lisp-image-for-use-with-oprofile"></a>12.1.1.Â Generating a lisp image for use with oprofile</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Modern Linux uses the 'ELF" (Executable and Linking Format) object
-      file format; the oprofile tools can associate symbolic names with
-      addresses in a memory-mapped file if that file appears to be an ELF
-      object file and if it contains ELF symbol information that describes
-      those memory regions. So, the general idea is to make a lisp heap image
-      that looks enough like an ELF shared library to fool the
-      <code class="code">oprofile</code> tools (we don't actually load heap images via ELF
-      dynamic linking technology, but we can make it look like we did.)</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Profiling-oprofile-prerequisites"></a>12.1.2.Â Prerequisites</h3>
-                </div>
-              </div>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p><code class="code">oprofile</code> itself, which is almost certainly
-          available via your distribution's package management system if not
-          already preinstalled.</p>
-                </li>
-                <li class="listitem">
-                  <p><code class="code">libelf</code>, which provides utilities for reading and
-          writing ELF files (and is likewise likely preinstalled or readily
-          installable.) Somewhat confusingly, there are two libelf
-          implementations in widespread use on Linux, and different
-          distributions refer to them by different names (they may be
-          available as part of an 'elfutils' package.) The oprofile insterface
-          was designed to work with a libelf implementation whose version
-          number is currently around 147; the other (incompatible) libelf
-          implementation has a version number around 0.8. It may be necessary
-          to install the corresponding development package (-dev or -devel,
-          usuallly) in order to actually be able to use the libelf shared
-          library.</p>
-                </li>
-              </ul>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Profiling-oprofile-generating-elf-symbols-for-lisp-functions"></a>12.1.3.Â Generating ELF symbols for Lisp functions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">In order to create a lisp heap image which can be used for
-      <code class="code">oprofile</code>- based profiling, we need to:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>load any code that we want to profile</p>
-                </li>
-                <li class="listitem">
-                  <p>generate a file that contains ELF symbol information
-          describing the names and addresses of all lisp functions.</p>
-                  <p>This step involves doing (from within Clozure CL)</p>
-                  <pre class="programlisting">
-? (require "ELF")
-"ELF"
-("ELF")
-
-? (ccl::write-elf-symbols-to-file "home:elf-symbols")
-	    </pre>
-                  <p>The argument to CCL::WRITE-ELF-SYMBOLS-TO-FILE can be any
-          writable pathname. The function will do whatever's necessary to nail
-          lisp functions down in memory (so that they aren't moved by GC),
-          then write an ELF object file to the indicated pathname. This
-          typically takes a few seconds.</p>
-                </li>
-                <li class="listitem">
-                  <p>Generate a lisp heap image in which the ELF symbols generated
-          in the previous step are prepended.</p>
-                  <p>The function CCL:SAVE-APPLICATION provides a :PREPEND-KERNEL
-          argument, which is ordinarily used to save a standalone application
-          in which the kernel and heap image occupy a single file.
-          :PREPEND-KERNEL doesn't really care what it's prepending to the
-          image, and we can just as easily ask it to prepend the ELF symbol
-          file generated in the previous step.</p>
-                  <pre class="programlisting">
-? (save-application "somewhere/image-for-profiling"
-    :prepend-kernel "home:elf-symbols")
-	    </pre>
-                  <p>If you then run</p>
-                  <pre class="programlisting">
-shell&gt; ccl64 somewhare/image-for-profiling
-	    </pre>
-                  <p>any lisp code sampled by oprofile in that image will be
-          identified "symbolically" by <code class="code">opreport</code>.</p>
-                </li>
-              </ol>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Profiling-oprofile-example"></a>12.1.4.Â Example</h3>
-                </div>
-              </div>
-            </div>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-;;; Define some lisp functions that we want to profile and save
-;;; a profiling-enabled image.  In this case, we just want to 
-;;; define the FACTORIAL funcion, to keep things simple.
-? (defun fact (n) (if (zerop n) 1 (* n (fact (1- n)))))
-FACT
-? (require "ELF")
-"ELF"
-("ELF")
-? (ccl::write-elf-symbols-to-file "home:elf-symbols")
-"home:elf-symbols"
-? (save-application "home:profiled-ccl" :prepend-kernel "home:elf-symbols")
-
-;;; Setup oprofile with (mostly) default arguments.  This example was
-;;; run on a Fedora 8 system where an uncompressed 'vmlinux' kernel
-;;; image isn't readily available.
-
-;;; Note that use of 'opcontrol' generally requires root access, e.g.,
-;;; 'sudo' or equivalent:
-
-[~] gb@rinpoche&gt; sudo opcontrol --no-vmlinux --setup
-
-;;; Start the profiler
-
-[~] gb@rinpoche&gt; sudo opcontrol --start
-Using 2.6+ OProfile kernel interface.
-Using log file /var/lib/oprofile/samples/oprofiled.log
-Daemon started.
-Profiler running.
-
-;;; Start CCL with the "profiled-ccl" image created above.
-;;; Invoke "(FACT 10000)"
-
-[~] gb@rinpoche&gt; ccl64 profiled-ccl 
-Welcome to Clozure Common Lisp Version 1.2-r9198M-trunk  (LinuxX8664)!
-? (null (fact 10000))
-NIL
-? (quit)
-
-;;; We could stop the profiler (opcontrol --stop) here; instead,
-;;; we simply flush profiling data to disk, where 'opreport' can
-;;; find it.
-<span class="token"></span>
-[~] gb@rinpoche&gt; sudo opcontrol --dump
-
-;;; Ask opreport to show us where we were spending time in the
-;;; 'profiled-ccl' image.
-
-[~] gb@rinpoche&gt; opreport -l profiled-ccl | head
-CPU: Core 2, speed 1596 MHz (estimated)
-Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
-samples  %        symbol name
-6417     65.2466  &lt;Compiled-function.(:INTERNAL.MULTIPLY-UNSIGNED-BIGNUM-AND-1-DIGIT-FIXNUM.MULTIPLY-BIGNUM-AND-FIXNUM).(Non-Global)..0x30004002453F&gt;
-3211     32.6487  &lt;Compiled-function.%MULTIPLY-AND-ADD4.0x300040000AAF&gt;
-17        0.1729  &lt;Compiled-function.%%ONE-ARG-DCODE.0x3000401740AF&gt;
-11        0.1118  &lt;Compiled-function.%UNLOCK-RECURSIVE-LOCK-OBJECT.0x30004007F7DF&gt;
-10        0.1017  &lt;Compiled-function.AUTO-FLUSH-INTERACTIVE-STREAMS.0x3000404ED6AF&gt;
-7         0.0712  &lt;Compiled-function.%NANOSLEEP.0x30004040385F&gt;
-7         0.0712  &lt;Compiled-function.%ZERO-TRAILING-SIGN-DIGITS.0x300040030F3F&gt;
-	</pre>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Profiling-oprofile-Issues"></a>12.1.5.Â Issues</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">CCL::WRITE-ELF-SYMBOLS-TO-FILE currently only works on x86-64; it
-      certainly -could- be made to work on ppc32/ppc64 as well.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">So far, no one has been able to make oprofile/opreport options
-      that're supposed to generate call-stack info generate meaningful
-      call-stack info.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">As of a few months ago, there was an attempt to provide symbol
-      info for oprofile/opreport "on the fly", e.g., for use in JIT
-      compilation or other incremental compilation scenarios. That's obviously
-      more nearly The Right Thing, but it might be awhile before that
-      experimental code makes it into widespread use.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Profiling-Using-Apples-CHUD-metering-tools"></a>12.2.Â Using Apple's CHUD metering tools</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Apple's CHUD package provides libraries, kernel extensions, and a
-    set of graphical and command-line programs that can be used to measure
-    many aspects of application and system performance.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">One of these programs is the Shark application (often installed in
-    "/Developer/Applications/Performance Tools/Shark.app"), which provides a
-    graphical user interface for exploring and analyzing profiling results and
-    provides tools for creating "sampling configurations" (see below), among
-    other things. Use of Shark isn't really documented here (a Shark manual is
-    available at "Developer/Documentation/CHUD/Shark/ SharkUserGuide.pdf");
-    what is described is a way of providing information about Lisp function
-    names and addresses so that Shark can meaningly identify those functions
-    in its output.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Profiling-CHUD-prerequisites"></a>12.2.1.Â Prerequisites</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Apple's CHUD tools have been distributed with the last several
-      XCode releases. One way to determine whether or not the tools are
-      installed is to run:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">$ /usr/bin/shark -v</pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">in a terminal or Emacs shell buffer. If that returns output
-      like</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">shark 4.7.3 (365)</pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">then the CHUD package is installed. Output like</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">shark: Command not found.</pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">strongly suggests that it isn't ...</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="idp37858832"></a>12.2.2.Â Generating a lisp image for use with Shark</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Shark can only properly identify functions that're defined in a
-      shared library that's loaded by the target application. (Any other
-      functions will be identified by a hex address described as being in an
-      "Unknown Library"; the hex address is generally somewhat near the actual
-      function, but it's determined heuristically and isn't always
-      accurate.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">For those reasons, it's desirable to load the code that you wish
-      to profile in one lisp session, save a native (Mach-O library) image,
-      and invoke Shark in a new session which uses that native image. (It may
-      also be useful to load the CHUD-METERING module, which defines
-      CHUD:METER and friends.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"></p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Profiling-CHUD-usage-synopsis"></a>12.2.3.Â Usage synopsis</h3>
-                </div>
-              </div>
-            </div>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">[src/ccl-dev] gb@antinomial&gt; ccl64
-Welcome to Clozure Common Lisp Version 1.7-dev-r14624M-trunk  (DarwinX8664)!
-? (defun fact(n) (if (zerop n) 1 (* n (fact (1- n)))))
-FACT
-? (require "CHUD-METERING")
-"CHUD-METERING"
-("CHUD-METERING")
-? (save-application "ccl:dx86cl64.dylib" :native t)
-[src/ccl-dev] gb@antinomial&gt; ccl64 -I dx86cl64.dylib
-Welcome to Clozure Common Lisp Version 1.7-dev-r14624M-trunk  (DarwinX8664)!
-? (chud:meter (dotimes (i 1000) (fact 1000)))
-;;; Waiting for shark to process samples ...done.
-NIL</pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">and, a few seconds after the result is returned, a file whose name
-      is of the form "session_nnn.mshark" will open in Shark.app.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"></p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The fist time that CHUD:METER is used in a lisp session, it'll do
-      a few things to prepare subsequent profiling sessions. Those things
-      include:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>creating a directory to store files that are related to using
-          the CHUD tools in this lisp session. This directory is created in
-          the user's home directory and has a name of the form:</p>
-                  <pre class="programlisting">
-profiling-session-&lt;lisp-kernel&gt;-&lt;pid&gt;_&lt;mm&gt;-&lt;dd&gt;-&lt;yyyy&gt;_&lt;h&gt;.&lt;m&gt;.&lt;s&gt;
-	      </pre>
-                </li>
-                <li class="listitem">
-                  <p>run the shark program ("/usr/bin/shark") and wait until it's
-          ready to receive signals that control its operation.</p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">This startup activity typically takes a few seconds; after it's
-      been completed, subsequent use of CHUD:METER doesn't involve that
-      overhead. (See the discussion of :RESET below.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">After any startup activity is complete, CHUD:METER arranges to
-      send a "start profiling" signal to the running shark program, executes
-      the form, sends a "stop profiling" signal to the shark program, and
-      reads its diagnostic output, looking for the name of the ".mshark" file
-      it produces. If it's able to find this filename, it arranges for
-      "Shark.app" to open it.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Profiling-CHUD-profiling-configurations"></a>12.2.4.Â Profiling "configurations"</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">By default, a shark profiling session will:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>use "time based" sampling, to periodically interrupt the lisp
-          process and note the value of the program counter and at least a few
-          levels of call history.</p>
-                </li>
-                <li class="listitem">
-                  <p>do this sampling once every millisecond</p>
-                </li>
-                <li class="listitem">
-                  <p>run for up to 30 seconds, unless told to stop earlier.</p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">This is known as "the default configuration"; it's possible to use
-      items on the "Config" menu in the Shark application to create alternate
-      configurations which provide different kinds of profiling parameters and
-      to save these configurations in files for subsequent reuse. (The set of
-      things that CHUD knows how to monitor is large and interesting.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">You use alternate profiling configurations (created and "exported"
-      via Shark.app) with CHUD:METER, but the interface is a little
-      awkward.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Profiling-CHUD-Reference"></a>12.2.5.Â Reference</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"><a id="idp39733824" class="indexterm"></a>
-      <span class="command"><strong><em class="varname"><a id="chud_shark-config-file"></a>CHUD:*SHARK-CONFIG-FILE*</em>
-      [Variable]</strong></span></p>
-            <p xmlns="http://www.w3.org/1999/xhtml">When non-null, this should be the pathname of an alternate
-      profiling configuration file created by the "Config Editor" in
-      Shark.app.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><a id="idp39736640" class="indexterm"></a> <span class="command"><strong><em class="varname"><a id="chud_meter"></a>CHUD:METER</em> form <em class="varname">&amp;key</em> (reset nil)
-      (debug-output nil) [Macro]</strong></span></p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Executes FORM (an arbitrary lisp form) and returns whatever
-      result(s) it returns, with CHUD profiling enabled during the form's
-      execution. Tries to determine the name of the session file (*.mshark) to
-      which the shark program wrote profiling data and opens this file in the
-      Shark application.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Arguments:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-              <dl>
-                <dt>
-                  <span class="term">
-                    <em class="varname">debug-output</em>
-                  </span>
-                </dt>
-                <dd>
-                  <p>when non-nil, causes output generated by the shark program
-            to be echoed to *TERMINAL-IO*. For debugging.</p>
-                </dd>
-                <dt>
-                  <span class="term">
-                    <em class="varname">reset</em>
-                  </span>
-                </dt>
-                <dd>
-                  <p>when non-nil, terminates any running instance of the shark
-            program created by previous invocations of CHUD:METER in this lisp
-            session, generates a new .spatch file (describing the names and
-            addresses of lisp functions), and starts a new instance of the
-            shark program; if CHUD:*SHARK-CONFIG-FILE* is non-NIL when this
-            new instance is started, that instance is told to use the
-            specified config file for profiling (in lieu of the default
-            profiling configuration.)</p>
-                </dd>
-              </dl>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Profiling-CHUD-Acknowledgments"></a>12.2.6.Â Acknowledgement</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Both Dan Knapp and Hamilton Link have posted similar CHUD
-      interfaces to openmcl-devel in the past; Hamilton's also reported bugs
-      in the spatch mechanism to CHUD developers (and gotten those bugs
-      fixed.)</p>
-          </div>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="The-Foreign-Function-Interface"></a>ChapterÂ 13.Â The Foreign-Function Interface</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#Specifying-And-Using-Foreign-Types">13.1. Specifying And Using Foreign Types</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Overview-foreign-types">13.1.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Syntax-of-Foreign-Type-Specifiers">13.1.2. Syntax of Foreign Type Specifiers</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Foreign-Function-Calls">13.2. Foreign Function Calls</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Overview-foreign-calls">13.2.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Return-Conventions-for-C-Structures">13.2.2. Return Conventions for C Structures</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Referencing-and-Using-Foreign-Memory-Addresses">13.3. Referencing and Using Foreign Memory Addresses</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Overview-memory-addresses">13.3.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Foreign-Memory-Addresses-Dictionary">13.3.2. Foreign-Memory-Addresses Dictionary</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#The-Interface-Database">13.4. The Interface Database</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#interface-database-Overview">13.4.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Other-issues">13.4.2. Other issues:</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Using-Interface-Directories">13.5. Using Interface Directories</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Interface-Directory-Overview">13.5.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Creating-new-interface-directories">13.5.2. Creating new interface directories</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Using-Shared-Libraries">13.6. Using Shared Libraries</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Shared-Library-Overview">13.6.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Limitations-and-known-bugs--1-">13.6.2. Limitations and known bugs</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Darwin-Notes">13.6.3. &gt;Darwin Notes</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#The-Interface-Translator">13.7. The Interface Translator</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Interface-translator-overview">13.7.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Details--rebuilding-the-CDB-databases--step-by-step">13.7.2. Details: rebuilding the CDB databases, step by step</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Case-sensitivity-of-foreign-names-in-CCL">13.8. Case-sensitivity of foreign names in <code class="literal">CCL</code></a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Case-sensitivity-overview">13.8.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Foreign-constant-and-function-names">13.8.2. Foreign constant and function names</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Foreign-type--record--and-field-names">13.8.3. Foreign type, record, and field names</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Examples--1-">13.8.4. Examples</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Reading-Foreign-Names">13.9. Reading Foreign Names</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Tutorial--Using-Basic-Calls-and-Types">13.10. Tutorial: Using Basic Calls and Types</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Acknowledgement">13.10.1. Acknowledgement</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Tutorial--Allocating-Foreign-Data-on-the-Lisp-Heap">13.11. Tutorial: Allocating Foreign Data on the Lisp Heap </a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Acknowledgement--1-">13.11.1. Acknowledgement</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Foreign-Function-Interface-Dictionary">13.12. The Foreign-Function-Interface Dictionary</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Specifying-And-Using-Foreign-Types"></a>13.1.Â Specifying And Using Foreign Types</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Overview-foreign-types"></a>13.1.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> provides a fairly rich language for defining and
-        specifying foreign data types (this language is derived from
-        CMUCL's "alien type" system.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In practice, most foreign type definitions are
-        introduced into <code class="literal">CCL</code> via its interface database (see ),
-        though it's also possible to define foreign types
-        interactively and/or programmatically.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code>'s foreign type system is "evolving" (a polite word
-        for not-quite-complete): there are some inconsistencies
-        involving package usage, for instance. Symbols used in foreign
-        type specifiers <span class="emphasis"><em>should</em></span> be keywords, but
-        this convention isn't always enforced.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Foreign
-        type, record, and field names are case-sensitive; <code class="literal">CCL</code> uses
-        some escaping conventions (see ) to allow keywords to be used to
-        denote these names.</p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="type-annotations"></a>13.1.1.1.Â Type Annotations</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">As of version 1.2, <code class="literal">CCL</code> supports annotating the types of
-          foreign pointers on Mac OS X. Forms that create pointers to
-          foreign memoryâthat is, <code class="code">MACPTR</code>sâstore
-          with the <code class="code">MACPTR</code> object a type annotation that
-          identifies the foreign type of the object pointed
-          to. Calling <code class="code">PRINT-OBJECT</code> on a <code class="code">MACPTR</code>
-          attempts to print information about the identified foreign
-          type, including whether it was allocated on the heap or the
-          stack, and whether it's scheduled for automatic reclamation by
-          the garbage collector.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">Support for type annotation is not yet complete. In
-          particular, some uses of <code class="code">PREF</code>
-          and <code class="code">SLOT-VALUE</code> do ot yet take type annotations into
-          account, and neither do <code class="code">DESCRIBE</code>
-          and <code class="code">INSPECT</code>.</p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="foreign-type-classes"></a>13.1.1.2.Â Foreign Types as Classes</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">Some types of foreign pointers take advantage of the
-          support for type annotations, and pointers of these types
-          can be treated as instances of known classes. Specifically,
-          a pointer to an <code class="code">:&lt;NSR&gt;ect</code> is recognized
-          as an instance of the built-in
-          class <code class="code">NS:NS-RECT</code>, a pointer to
-          an <code class="code">&lt;NSS&gt;ize</code> is treated as an instance
-          of <code class="code">NS:NS-SIZE</code>, a pointer to
-          an <code class="code">&lt;NSP&gt;oint</code> is recognized as an
-          instance of <code class="code">NS:NS-POINT</code>, and a pointer to
-          an <code class="code">&lt;NSR&gt;ange</code> is recognized as an
-          instance of <code class="code">NS:NS-RANGE</code>.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">A few more obscure structure types also support this
-        mechanism, and it's possible that a future version will
-        support user definition of similar type mappings.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">This support for foreign types as classes provides the
-        following conveniences for each supported type:</p>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                <ul class="itemizedlist" type="disc">
-                  <li class="listitem">
-                    <p>a <code class="code">PRINT-OBJECT</code> method is defined</p>
-                  </li>
-                  <li class="listitem">
-                    <p>a foreign type name is created and treated as an alias
-          for the corresponding type. As an example, the
-          name <code class="code">:NS-RECT</code> is a name for the type that
-          corresponds to <code class="code">NS:NS-RECT</code>, and you can
-          use <code class="code">:NS-RECT</code> as a type designator
-          in <a class="link" href="#anchor_rlet"><code class="code">RLET</code></a> forms to
-          specify a structure of type <code class="code">NS-RECT</code>.</p>
-                  </li>
-                  <li class="listitem">
-                    <p>the class is integrated into the type system so that
-            <code class="code">(TYPEP R 'NS:NS-RECT)</code> is implemented with
-            fair efficiency.</p>
-                  </li>
-                  <li class="listitem">
-                    <p>inlined accessor and <code class="code">SETF</code> inverses are
-            defined for the structure type's fields.  In the case of
-            an <code class="code">&lt;NSR*gt;ect</code>, for example, the fields in
-            question are the fields of the embedded point and size, so
-            that <code class="code">NS:NS-RECT-X</code>, <code class="code">NS:NS-RECT-Y</code>, <code class="code">NS:NS-RECT-WIDTH</code>,
-            <code class="code">NS-RECT-HEIGHT</code> and <code class="code">SETF</code> inverses
-            are defined.  The accessors and setter functions typecheck
-            their arguments and the setters handle coercion to the
-            appropriate type of <code class="code">CGFLOAT</code> where
-            applicable.</p>
-                  </li>
-                  <li class="listitem">
-                    <p>an initialization function is defined; for
-            example,</p>
-                    <pre class="programlisting">
-(NS:INIT-NS-SIZE s w h)
-          </pre>
-                    <p>is roughly equivalent to</p>
-                    <pre class="programlisting">
-(SETF (NS:NS-SIZE-WIDTH s) w
-      (NS:NS-SIZE-HEIGHT s) h)
-          </pre>
-                    <p>but might be a little more efficient.</p>
-                  </li>
-                  <li class="listitem">
-                    <p>a creation function is defined; for
-            example</p>
-                    <pre class="programlisting">
-(NS:NS-MAKE-POINT x y)
-          </pre>
-                    <p>is functionally equivalent to</p>
-                    <pre class="programlisting">
-(LET ((P (MAKE-GCABLE-RECORD :NS-POINT)))
-  (NS:INIT-NS-POINT P X Y)
-  p)
-          </pre>
-                  </li>
-                  <li class="listitem">
-                    <p>a macro is defined which, like <code class="code">RLET</code>,
-            stack-allocates an instance of the foreign record type,
-            optionally initializes that instance, and executes a body
-            of code with a variable bound to that instance.</p>
-                    <p>For example,</p>
-                    <pre class="programlisting">
-(ns:with-ns-range (r loc len)
-  (format t "~&amp; range has location ~s, length ~s" 
-     (ns:ns-range-location r) (ns:ns-range-length r)))
-          </pre>
-                  </li>
-                  <li class="listitem">
-                    <p></p>
-                  </li>
-                </ul>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Syntax-of-Foreign-Type-Specifiers"></a>13.1.2.Â Syntax of Foreign Type Specifiers</h3>
-                </div>
-              </div>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>Some foreign types are builtin: keywords denote
-            primitive,builtin types such as the IEEE-double-float type
-            (denoted:DOUBLE-FLOAT), in much the same way as certain
-            symbols(CONS, FIXNUM,etc.) define primitive CL
-            types.</p>
-                </li>
-                <li class="listitem">
-                  <p>Constructors such as :SIGNED and :UNSIGNED can be
-            used to denote signed and unsigned integer subtypes
-            (analogous to the CL type specifiers SIGNED-BYTE and
-            UNSIGNED-BYTE.) :SIGNED is shorthand for(:SIGNED 32) and
-            :UNSIGNED is shorthand for (:UNSIGNED 32).</p>
-                </li>
-                <li class="listitem">
-                  <p>Aliases for other (perhaps more complicated) types
-            can be defined via CCL:DEF-FOREIGN-TYPE (sort of like
-            CL:DEFTYPE or the C typedef facility). The type :CHAR is
-            defined as an alias for (:SIGNED8) on some platforms, as
-            (:UNSIGNED 8) on others.</p>
-                </li>
-                <li class="listitem">
-                  <p>The construct (:STRUCT <span class="emphasis"><em>name</em></span>)
-	        can be used to refer to a named structure type; (:UNION
-	        <span class="emphasis"><em>name</em></span>)can be used to refer to a named
-	        union type. It isn't necessary to enumerate a structure or
-	        union type's fields in order to refer to the type.</p>
-                </li>
-                <li class="listitem">
-                  <p>If <span class="emphasis"><em>X</em></span> is a valid foreign type
-	        reference,then (:* <span class="emphasis"><em>X</em></span>) denotes the
-	        foreign type "pointer to<span class="emphasis"><em> X</em></span>". By
-	        convention, (:* T) denotes an anonymous pointer type,
-	        vaguely equivalent to "void*" in C.</p>
-                </li>
-                <li class="listitem">
-                  <p>If a fieldlist is a list of lists, each of whose CAR
-	        is a foreign field name (keyword) and whose CADR is a
-	        foreign type specifier, then (:STRUCT
-	        <span class="emphasis"><em>name</em></span> ,@fieldlist) is a definition of
-	        the structure type <span class="emphasis"><em>name</em></span>,
-	        and (:UNION<span class="emphasis"><em> name</em></span> ,@fieldlist) is a
-	        definition of the union type
-	        <span class="emphasis"><em>name</em></span>. Note that it's necessary
-	        to define a structure or union type in order to include
-	        that type in a structure, union, or array, but only
-	        necessary to "refer to" a structure or union type in order
-	        to define a type alias or a pointer type.</p>
-                </li>
-                <li class="listitem">
-                  <p>If <span class="emphasis"><em>X</em></span> is a defined foreign type
-	        , then (:array <span class="emphasis"><em>X</em></span> &amp;rest dims)
-	        denotes the foreign type "array of
-	        <span class="emphasis"><em>X</em></span>". Although multiple array dimensions
-	        are allowed by the :array constructor,
-	        only single-dimensioned arrays are (at all) well-supported
-	        in <code class="literal">CCL</code>.</p>
-                </li>
-              </ul>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Foreign-Function-Calls"></a>13.2.Â Foreign Function Calls</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Overview-foreign-calls"></a>13.2.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> provides a number of constructs for calling
-        foreign functions from Lisp code (all of them based on the
-        function CCL:%FF-CALL).  In many cases, <code class="literal">CCL</code>'s interface
-        translator (see ) provides information about the foreign
-        function's entrypoint name and argument and return types; this
-        enables the use of the #_ reader macro (described below),
-        which may be more concise and/or more readable than other
-        constructs.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> also provides a mechanism for defining
-        <span class="emphasis"><em>callbacks</em></span>: lisp functions which can be
-        called from foreign code.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">There's no supported way to directly pass lisp data to
-        foreign functions: scalar lisp data must be coerced to an
-        equivalent foreign representation, and lisp arrays (notably
-        strings) must be copied to non-GCed memory.</p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Type-Designators-for-Arguments-and-Return-Values"></a>13.2.1.1.Â Type Designators for Arguments and Return Values</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">The types of foreign argument and return values in foreign
-	      function calls and callbacks can be specified by any of the following
-          keywords:</p>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">:UNSIGNED-BYTE</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return value is of type (UNSIGNED-BYTE 8)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:SIGNED-BYTE</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return value is of type (SIGNED-BYTE 8)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:UNSIGNED-HALFWORD</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return value is of type (UNSIGNED-BYTE 16)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:SIGNED-HALFWORD</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return value is of type (SIGNED-BYTE 16)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:UNSIGNED-FULLWORD</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return value is of type (UNSIGNED-BYTE 32)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:SIGNED-FULLWORD</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return value is of type (SIGNED-BYTE 32)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:UNSIGNED-DOUBLEWORD</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return value is of type (UNSIGNED-BYTE 64)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:SIGNED-DOUBLEWORD</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return value is of type (SIGNED-BYTE 64)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:SINGLE-FLOAT</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return value is of type SINGLE-FLOAT</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:DOUBLE-FLOAT</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return value is of type DOUBLE-FLOAT</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:ADDRESS</span>
-                  </dt>
-                  <dd>
-                    <p>The argument/return values
-		        is <a class="link" href="#Referencing-and-Using-Foreign-Memory-Addresses" title="13.3.Â Referencing and Using Foreign Memory Addresses">a MACPTR</a>.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">:VOID</span>
-                  </dt>
-                  <dd>
-                    <p>or NIL Not valid as an argument type specifier; specifies
-		        that there is no meaningful return value</p>
-                  </dd>
-                </dl>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">On some platforms, a small positive integer
-          <span class="emphasis"><em>N</em></span> can also be used as an argument
-          specifier; it indicates that the corresponding argument is a
-          pointer to an <span class="emphasis"><em>N</em></span>-word structure or union
-          which should be passed by value to the foreign
-          function.  Exactly which foreign structures are passed
-	      by value and how is very dependent on the Application
-	      Binary Interface (ABI) of the platform; unless you're
-	      very familiar with ABI details (some of which are quite
-	      baroque), it's often easier to let higher-level constructs
-	      deal with these details.</p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="External-Entrypoints-and-Named-External-Entrypoints"></a>13.2.1.2.Â External Entrypoints and Named External Entrypoints</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">PowerPC machine instructions are always aligned on
-          32-bit boundaries, so the two least significant bits of the
-          first instruction ("entrypoint") of a foreign function are
-          always 0. <code class="literal">CCL</code> often represents an entrypoint address as
-          a fixnum that's binary-equivalent to the entrypoint address:
-          if<span class="emphasis"><em> E</em></span> is an entrypoint address expressed
-          as a signed 32-bit integer, then (ash <span class="emphasis"><em>E</em></span>
-          -2) is an equivalent fixnum representation of that
-          address. An entrypoint address can also be encapsulated in a
-          MACPTR (see FIXTHIS), but that's somewhat less efficient.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">Although it's possible to use fixnums or macptrs to
-          represent entrypoint addresses, it's somewhat cumbersome to
-          do so. <code class="literal">CCL</code> can cache the addresses of named external
-          functions in structure-like objects of type
-          CCL:EXTERNAL-ENTRY-POINT (sometimes abbreviated as EEP).
-          Through the use of LOAD-TIME-VALUE, compiled lisp functions
-          are able to reference EEPs as constants; the use of an
-          indirection allows <code class="literal">CCL</code> runtime system to ensure that the
-          EEP's address is current and correct.</p>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Return-Conventions-for-C-Structures"></a>13.2.2.Â Return Conventions for C Structures</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"> On some platforms, C functions that are defined to
-        return structures do so by reference: they actually
-        accept a first parameter of type "pointer to returned
-        struct/union" - which must be allocated by the caller - and
-        don't return a meaningful value.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><span class="emphasis"><em>Exactly</em></span> how a C function that's
-	    defined to return a foreign structure does so is dependent on
-	    the ABI (and on the size and composition of the structure/union
-	    in many cases.)</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Referencing-and-Using-Foreign-Memory-Addresses"></a>13.3.Â Referencing and Using Foreign Memory Addresses</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Overview-memory-addresses"></a>13.3.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Basics"></a>13.3.1.1.Â Basics</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">For a variety of technical reasons, it isn't generally
-          possible to directly reference arbitrary absolute addresses
-          (such as those returned by the C library function malloc(),
-          for instance) in <code class="literal">CCL</code>. In <code class="literal">CCL</code> (and in MCL), such
-          addresses need to be <span class="emphasis"><em>encapsulated</em></span> in
-          objects of type CCL:MACPTR; one can think of a MACPTR as
-          being a specialized type of structure whose sole purpose is
-          to provide a way of referring to an underlying "raw"
-          address.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">It's sometimes convenient to blur the distinction
-          between a MACPTR and the address it represents; it's
-          sometimes necessary to maintain that distinction. It's
-          important to remember that a MACPTR is (generally) a
-          first-class Lisp object in the same sense that a CONS cell
-          is: it'll get GCed when it's no longer possible to reference
-          it. The "lifetime" of a MACPTR doesn't generally have
-          anything to do with the lifetime of the block of memory its
-          address points to.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">It might be tempting to ask "How does one obtain the
-          address encapsulated by a MACPTR ?". The answer to that
-          question is that one doesn't do that (and there's no way to
-          do that): addresses aren't first-class objects, and there's
-          no way to refer to one.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">Two MACPTRs that encapsulate the same address are EQL
-          to each other.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">There are a small number of ways to directly create a
-          MACPTR (and there's a fair amount of syntactic sugar built
-          on top of of those primitives.) These primitives will be
-          discussed in greater detail below, but they include:</p>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                <ul class="itemizedlist" type="disc">
-                  <li class="listitem">
-                    <p>Creating a MACPTR with a specified address, usually
-	          via the function CCL:%INT-TO-PTR.</p>
-                  </li>
-                  <li class="listitem">
-                    <p>Referencing the return value of a foreign function
-	          call (see )that's specified to return an address.</p>
-                  </li>
-                  <li class="listitem">
-                    <p>Referencing a memory location that's specified to
-	          contain an address.</p>
-                  </li>
-                </ul>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">All of these primitive MACPTR-creating operations are
-          usually open-coded by the compiler; it has a fairly good
-          notion of what low-level operations "produce" MACPTRs and
-          which operations "consume" the addresses that the
-          encapsulate, and will usually optimize out the introduction
-          of intermediate MACPTRs in a simple expression.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">One consequence of the use of MACPTR objects to
-          encapsulate foreign addresses is that (naively)
-          <span class="emphasis"><em>every reference to a foreign address causes a
-            MACPTR to be allocated.</em></span></p>
-              <p xmlns="http://www.w3.org/1999/xhtml">Consider a code fragment like the following:</p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defun get-next-event ()
-  "get the next event from a hypothetical window system"
-  (loop
-     (let* ((event (#_get_next_window_system_event))) ; via an FF-CALL
-       (unless (null-event-p event)
-         (handle-event event)))))
-        </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">As this is written, each call to the (hypothetical)
-          foreign function #_get_next_window_system_event will return
-          a new MACPTR object.  Ignoring for the sake of argument the
-          question of whether this code fragment exhibits a good way
-          to poll for external events (it doesn't), it's not hard to
-          imagine that this loop could execute several million times
-          per second (producing several million MACPTRs per second.)
-          Clearly, the "naive" approach is impractical in many
-          cases.</p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Stack-allocation-of---and-destructive-operations-on---MACPTRs-"></a>13.3.1.2.Â Stack allocation ofâand destructive operations onâMACPTRs.</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">If certain conditions held in the environment in which
-	      GET-NEXT-EVENT ranânamely, if it was guaranteed that
-	      neither NULL-EVENT-P nor HANDLE-EVENT cached or otherwise
-	      retained their arguments (the "event" pointer)âthere'd be
-	      a few alternatives to the naive approach. One of those
-	      approaches would be to use the primitive function
-	      %SETF-MACPTR (described in greater detail below) to
-	      destructively modify a MACPTR (to change the value of the
-	      address it encapsulates.) The GET-NEXT-EVENT example could
-	      be re-written as:</p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defun get-next-event ()
-  (let* ((event (%int-to-ptr 0)))     ; create a MACPTR with address 0
-    (loop
-       (%setf-macptr event (#_get_next_window_system_event)) ; re-use it
-       (unless (null-event-p event)
-         (handle-event event)))))
-        </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">That version's a bit more realistic: it allocates a
-          single MACPTR outside if the loop, then changes its address
-          to point to the current address of the hypothetical event
-          structure on each loop iteration. If there are a million
-          loop iterations per call to GET-NEXT-EVENT, we're allocating
-          a million times fewer MACPTRs per call; that sounds like a
-          Good Thing.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">An Even Better Thing would be to advise the compiler
-          that the initial value (the null MACPTR) bound to the
-          variable event has dynamic extent (that value won't be
-          referenced once control leaves the extent of the binding of
-          that variable.) Common Lisp allows us to make such an
-          assertion via a DYNAMIC-EXTENT declaration; <code class="literal">CCL</code>'s
-          compiler can recognize the "primitive MACPTR-creating
-          operation" involved and can replace it with an equivalent
-          operation that stack-allocates the MACPTR object. If we're
-          not worried about the cost of allocating that MACPTR on
-          every iteration (the cost is small and there's no hidden GC
-          cost), we could move the binding back inside the
-          loop:</p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defun get-next-event ()
-  (loop
-     (let* ((event (%null-ptr))) ; (%NULL-PTR) is shorthand for (%INT-TO-PTR 0)
-       (declare (dynamic-extent event))
-       (%setf-macptr event (#_get_next_window_system_event))
-       (unless (null-event-p event)
-         (handle-event event)))))
-        </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">The idiom of binding one or more variables to
-          stack-allocated MACPTRs, then destructively modifying those
-          MACPTRs before executing a body of code is common enough
-          that <code class="literal">CCL</code> provides a macro (WITH-MACPTRS) that handles
-          all of the gory details. The following version of
-          GET-NEXT-EVENT is semantically equivalent to the previous
-          version, but hopefully a bit more concise:</p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defun get-next-event ()
-  (loop
-     (with-macptrs ((event (#_get_next_window_system_event)))
-       (unless (null-event-p event)
-         (handle-event event)))))
-        </pre>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Stack-allocated-memory--and-stack-allocated-pointers-to-it--"></a>13.3.1.3.Â Stack-allocated memory (and stack-allocated pointers to it.)</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">Fairly often, the blocks of foreign memory (obtained
-	      by malloc or something similar) have well-defined lifetimes
-	      (they can safely be freed at some point when it's known that
-	      they're no longer needed and it's known that they're no
-	      longer referenced.) A common idiom might be:</p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(with-macptrs (p (#_allocate_foreign_memory size))
-  (unwind-protect
-       (use-foreign-memory p)
-    (#_deallocate_foreign_memory p)))
-        </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">That's not unreasonable code, but it's fairly
-          expensive for a number of reasons: foreign functions calls
-          are themselves fairly expensive (as is UNWIND-PROTECT), and
-          most library routines for allocating and deallocating
-          foreign memory (things like malloc and free) can be fairly
-          expensive in their own right.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">In the idiomatic code above, both the MACPTR P and the
-          block of memory that's being allocated and freed have
-          dynamic extent and are therefore good candidates for stack
-          allocation. <code class="literal">CCL</code> provides the %STACK-BLOCK macro, which
-          executes a body of code with one or more variables bound to
-          stack-allocated MACPTRs which encapsulate the addresses of
-          stack-allocated blocks of foreign memory. Using
-          %STACK-BLOCK, the idiomatic code is:</p>
-              <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(%stack-block ((p size))
-              (use-foreign-memory p))
-        </pre>
-              <p xmlns="http://www.w3.org/1999/xhtml">which is a bit more efficient and a bit more concise
-          than the version presented earlier.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">%STACK-BLOCK is used as the basis for slightly
-          higher-level things like RLET. (See FIXTHIS for more information
-          about RLET.)</p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Caveats-"></a>13.3.1.4.Â Caveats</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">Reading from, writing to, allocating, and freeing
-          foreign memory are all potentially dangerous operations;
-          this is no less true when these operations are performed in
-          <code class="literal">CCL</code> than when they're done in C or some other
-          lower-level language. In addition, destructive operations on
-          Lisp objects be dangerous, as can stack allocation if it's
-          abused (if DYNAMIC-EXTENT declarations are violated.)
-          Correct use of the constructs and primitives described here
-          is reliable and safe; slightly incorrect use of these
-          constructs and primitives can crash <code class="literal">CCL</code>.</p>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Foreign-Memory-Addresses-Dictionary"></a>13.3.2.Â Foreign-Memory-Addresses Dictionary</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Unless otherwise noted, all of the symbols mentioned
-        below are exported from the CCL package.</p>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Scalar-memory-reference"></a>13.3.2.1.Â Scalar memory reference</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%get-signed-byte ptr &amp;optional (offset 0)</p>
-                    <p>%get-unsigned-byte ptr &amp;optional (offset 0)</p>
-                    <p>%get-signed-word ptr &amp;optional (offset 0)</p>
-                    <p>%get-unsigned-word ptr &amp;optional (offset 0)</p>
-                    <p>%get-signed-long ptr &amp;optional (offset 0)</p>
-                    <p>%get-unsigned-long ptr &amp;optional (offset 0)</p>
-                    <p>%%get-signed-longlong ptr &amp;optional (offset 0)</p>
-                    <p>%%get-unsigned-longlong ptr &amp;optional (offset 0)</p>
-                    <p>%get-ptr ptr &amp;optional (offset 0)</p>
-                    <p>%get-single-float ptr &amp;optional (offset 0)</p>
-                    <p>%get-double-float ptr &amp;optional (offset 0)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>References and returns the signed or unsigned 8-bit byte,
-		        signed or unsigned 16-bit word, signed or unsigned 32-bit long
-		        word, signed or unsigned 64-bit long long word, 32-bit address,
-		        32-bit single-float, or 64-bit double-float at the effective byte
-		        address formed by adding offset to the address encapsulated by
-		        ptr.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">ptr</span>
-                        </dt>
-                        <dd>
-                          <p>A MACPTR</p>
-                        </dd>
-                        <dt>
-                          <span class="term">offset</span>
-                        </dt>
-                        <dd>
-                          <p>A fixnum</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">All of the memory reference primitives described above can be</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">used with SETF.</p>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="iget-bit--Function-"></a>13.3.2.2.Â %get-bit [Function]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%get-bit ptr bit-offset</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>References and returns the bit-offsetth bit at the address
-		        encapsulated by ptr. (Bit 0 at a given address is the most
-		        significant bit of the byte at that address.) Can be used with
-		        SETF.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">ptr</span>
-                        </dt>
-                        <dd>
-                          <p>A MACPTR</p>
-                        </dd>
-                        <dt>
-                          <span class="term">bit-offset</span>
-                        </dt>
-                        <dd>
-                          <p>A fixnum</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="iget-bitfield--Function-"></a>13.3.2.3.Â %get-bitfield [Function]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%get-bitfield ptr bit-offset width</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>References and returns an unsigned integer composed from the
-		        width bits found bit-offset bits from the address encapsulated by
-		        ptr. (The least significant bit of the result is the value of
-		        (%get-bit ptr (1- (+ bit-offset width))). Can be used with SETF.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                  </dd>
-                  <dt>
-                    <span class="term">ptr</span>
-                  </dt>
-                  <dd>
-                    <p>A MACPTR</p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">bit-offset</span>
-                        </dt>
-                        <dd>
-                          <p>A fixnum</p>
-                        </dd>
-                        <dt>
-                          <span class="term">width</span>
-                        </dt>
-                        <dd>
-                          <p>A positive fixnum</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41384208"></a>13.3.2.4.Â %int-to-ptr [Function]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%int-to-ptr int</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Creates and returns a MACPTR whose address matches int.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">int</span>
-                        </dt>
-                        <dd>
-                          <p>An (unsigned-byte 32)</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41393136"></a>13.3.2.5.Â %inc-ptr [Function]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%inc-ptr ptr &amp;optional (delta 1)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Creates and returns a MACPTR whose address is the address of
-		        ptr plus delta. The idiom (%inc-ptr ptr 0) is sometimes used to
-		        copy a MACPTR, e.g., to create a new MACPTR encapsulating the same
-		        address as ptr.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">ptr</span>
-                        </dt>
-                        <dd>
-                          <p>A MACPTR</p>
-                        </dd>
-                        <dt>
-                          <span class="term">delta</span>
-                        </dt>
-                        <dd>
-                          <p>A fixnum</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41404128"></a>13.3.2.6.Â %ptr-to-int [Function]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%ptr-to-int ptr</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Returns the address encapsulated by ptr, as an
-		        (unsigned-byte 32).</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">ptr</span>
-                        </dt>
-                        <dd>
-                          <p>A MACPTR</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41413056"></a>13.3.2.7.Â %null-ptr [Macro]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%null-ptr</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Equivalent to (%int-to-ptr 0).</p>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41418000"></a>13.3.2.8.Â %null-ptr-p [Function]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%null-ptr-p ptr</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Returns T If ptr is a MACPTR encapsulating the address 0,
-		        NIL if ptr encapsulates some other address.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">ptr</span>
-                        </dt>
-                        <dd>
-                          <p>A MACPTR</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41427056"></a>13.3.2.9.Â %setf-macptr [Function]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%setf-macptr dest-ptr src-ptr</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Causes dest-ptr to encapsulate the same address that src-ptr
-		        does, then returns dest-ptr.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">dest-ptr</span>
-                        </dt>
-                        <dd>
-                          <p>A MACPTR</p>
-                        </dd>
-                        <dt>
-                          <span class="term">src-ptr</span>
-                        </dt>
-                        <dd>
-                          <p>A MACPTR</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41437904"></a>13.3.2.10.Â %incf-ptr [Macro]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%incf-ptr ptr &amp;optional (delta 1)</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Destructively modifies ptr, by adding delta to the address
-		        it encapsulates. Returns ptr.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">ptr</span>
-                        </dt>
-                        <dd>
-                          <p>A MACPTR</p>
-                        </dd>
-                        <dt>
-                          <span class="term">delta</span>
-                        </dt>
-                        <dd>
-                          <p>A fixnum</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41448752"></a>13.3.2.11.Â with-macptrs [Macro]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>with-macptrs (var expr)* &amp;body body</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Executes body in an environment in which each var is bound
-		        to a stack-allocated macptr which encapsulates the foreign address
-		        yielded by the corresponding expr. Returns whatever value(s) body
-		        returns.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">var</span>
-                        </dt>
-                        <dd>
-                          <p>A symbol (variable name)</p>
-                        </dd>
-                        <dt>
-                          <span class="term">expr</span>
-                        </dt>
-                        <dd>
-                          <p>A MACPTR-valued expression</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41459760"></a>13.3.2.12.Â %stack-block [Macro]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%stack-block (var expr)* &amp;body body</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Executes body in an environment in which each var is bound
-		        to a stack-allocated macptr which encapsulates the address of a
-		        stack-allocated region of size expr bytes. Returns whatever
-		        value(s) body returns.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">var</span>
-                        </dt>
-                        <dd>
-                          <p>A symbol (variable name)</p>
-                        </dd>
-                        <dt>
-                          <span class="term">expr</span>
-                        </dt>
-                        <dd>
-                          <p>An expression which should evaluate to a non-negative
-		              fixnum</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41470736"></a>13.3.2.13.Â make-cstring [Function]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>make-cstring string</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Allocates a block of memory (via malloc) of length (1+
-		        (length string)). Copies the string to this block and appends a
-		        trailing NUL byte; returns a MACPTR to the block.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">string</span>
-                        </dt>
-                        <dd>
-                          <p>A lisp string</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41479872"></a>13.3.2.14.Â with-cstrs [Macro]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>with-cstrs (var string)* &amp;body body</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Executes body in an environment in which each var is bound
-		        to a stack-allocated macptr which encapsulates the %address of a
-		        stack-allocated region of into which each string (and a trailing
-		        NUL byte) has been copied. Returns whatever value(s) body returns.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">var</span>
-                        </dt>
-                        <dd>
-                          <p>A symbol (variable name)</p>
-                        </dd>
-                        <dt>
-                          <span class="term">string</span>
-                        </dt>
-                        <dd>
-                          <p>An expression which should evaluate to a lisp string</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41490896"></a>13.3.2.15.Â with-encoded-cstrs [Macro]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>with-encoded-cstrs ENCODING-NAME (varI stringI)* &amp;body body</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Executes body in an environment in which each varI is
-		        bound to a macptr which encapsulates the %address of a
-		        stack-allocated region of into which each stringI (and a
-		        trailing NUL character) has been copied. Returns whatever
-		        value(s) body returns.</p>
-                    <p>ENCODING-NAME is a keyword constant that names a
-                character encoding. Each foreign string is encoded in the
-                named encoding. Each foreign string has dynamic
-                extent.</p>
-                    <p>WITH-ENCODED-CSTRS does not automatically prepend
-                byte-order marks to its output; the size of the terminating
-                #\NUL character depends on the number of octets per code unit
-                in the encoding.</p>
-                    <p>The expression</p>
-                    <pre class="programlisting">(ccl:with-cstrs ((x "x")) (#_puts x))</pre>
-                    <p>is functionally equivalent to</p>
-                    <pre class="programlisting">(ccl:with-encoded-cstrs :iso-8859-1 ((x "x")) (#_puts x))</pre>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p>Â </p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">varI</span>
-                        </dt>
-                        <dd>
-                          <p>A symbol (variable name)</p>
-                        </dd>
-                        <dt>
-                          <span class="term">stringI</span>
-                        </dt>
-                        <dd>
-                          <p>An expression which should evaluate to a lisp string</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp41505696"></a>13.3.2.16.Â %get-cstring [Function]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%get-cstring ptr</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Interprets ptr as a pointer to a (NUL -terminated) C string;
-		        returns an equivalent lisp string.</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <p></p>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">ptr</span>
-                        </dt>
-                        <dd>
-                          <p>A MACPTR</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="idp46380400"></a>13.3.2.17.Â %str-from-ptr [Function]</h4>
-                  </div>
-                </div>
-              </div>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-                <dl>
-                  <dt>
-                    <span class="term">Syntax</span>
-                  </dt>
-                  <dd>
-                    <p>%str-from-ptr ptr length</p>
-                  </dd>
-                  <dt>
-                    <span class="term">Description</span>
-                  </dt>
-                  <dd>
-                    <p>Returns a lisp string of length <em class="varname">length</em>,
-		        whose contents are initialized from the bytes at<em class="varname"> ptr.</em>
-		      </p>
-                  </dd>
-                  <dt>
-                    <span class="term">Arguments</span>
-                  </dt>
-                  <dd>
-                    <div class="variablelist">
-                      <dl>
-                        <dt>
-                          <span class="term">ptr</span>
-                        </dt>
-                        <dd>
-                          <p>A
-		                MACPTR</p>
-                        </dd>
-                        <dt>
-                          <span class="term">length</span>
-                        </dt>
-                        <dd>
-                          <p>a
-		                non-negative fixnum</p>
-                        </dd>
-                      </dl>
-                    </div>
-                  </dd>
-                </dl>
-              </div>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="The-Interface-Database"></a>13.4.Â The Interface Database</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="interface-database-Overview"></a>13.4.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> uses a set of database files which contain
-        foreign type, record, constant, and function definitions
-        derived from the operating system's header files, be that
-        Linux or Darwin.  An archive containing these database files
-        (and the shell scripts which were used in their creation) is
-        available; see the Distributions page for information about
-        obtaining current interface database files.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Not surprisingly, different platforms use different database files.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> defines reader macros that consult these databases:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>#$foo looks up the value of the constant definition of foo</p>
-                </li>
-                <li class="listitem">
-                  <p>#_foo looks up the foreign function definition for foo</p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">In both cases, the symbol foo is interned in the "OS"
-        package. The #$ reader macro has the side-effect of defining
-        foo as a constant (as if via DEFCONSTANT); the #_ reader macro
-        has the side effect of defining foo as a macro which will
-        expand into an (EXTERNAL-CALL form.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">It's important to remember that the side-effect happens
-        when the form containing the reader macro is
-        read. Macroexpansion functions that expand into forms which
-        contain instances of those reader macros don't do what one
-        might think that they do, unless the macros are expanded in
-        the same lisp session as the reader macro was read in.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In addition, references to foreign type,
-        structure/union, and field names (when used in the RREF/PREF
-        and RLET macros) will cause these database files to be
-        consulted.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Since the <code class="literal">CCL</code> sources contain instances of these
-        reader macros (and references to foreign record types and
-        fields), compiling <code class="literal">CCL</code> from those sources depends on the
-        ability to find and use (see <a class="xref" href="#Building-the-heap-image" title="3.6.Â Building the Heap Image">SectionÂ 3.6, âBuilding the Heap Imageâ</a>).</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Other-issues"></a>13.4.2.Â Other issues:</h3>
-                </div>
-              </div>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p><code class="literal">CCL</code> now preserves the case of external symbols in
-	        its database
-	        files. See <a class="link" href="#Case-sensitivity-of-foreign-names-in-CCL" title="13.8.Â Case-sensitivity of foreign names in CCL">Case-sensitivity
-	        of foreign names in <code class="literal">CCL</code></a> for information about
-	        case in foreign symbol names.</p>
-                </li>
-                <li class="listitem">
-                  <p>The Linux databases are derived from a somewhat
-	        arbitrary set of Linux header files. Linux is enough of a
-	        moving target that it may be difficult to define a standard,
-	        reference set of interfaces from which to derive a standard,
-	        reference set of database files.This seems to be less of
-	        an issue with Darwin and FreeBSD.</p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">For information about building the database files,
-	    see <a class="xref" href="#The-Interface-Translator" title="13.7.Â The Interface Translator">SectionÂ 13.7, âThe Interface Translatorâ</a>.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Using-Interface-Directories"></a>13.5.Â Using Interface Directories</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Interface-Directory-Overview"></a>13.5.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">As distributed, the "ccl:headers;" (for LinuxPPC)
-        directory is organized like:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-        headers/
-        headers/gl/
-        headers/gl/C/
-        headers/gl/C/populate.sh
-        headers/gl/constants.cdb
-        headers/gl/functions.cdb
-        headers/gl/records.cdb
-        headers/gl/objc-classes.cdb
-        headers/gl/objc-methods.cdb
-        headers/gl/types.cdb
-        headers/gnome/
-        headers/gnome/C/
-        headers/gnome/C/populate.sh
-        headers/gnome/constants.cdb
-        headers/gnome/functions.cdb
-        headers/gnome/records.cdb
-        headers/gnome/objc-classes.cdb
-        headers/gnome/objc-methods.cdb
-        headers/gnome/types.cdb
-        headers/gtk/
-        headers/gtk/C/
-        headers/gtk/C/populate.sh
-        headers/gtk/constants.cdb
-        headers/gtk/functions.cdb
-        headers/gtk/records.cdb
-        headers/gtk/objc-classes.cdb
-        headers/gtk/objc-methods.cdb
-        headers/gtk/types.cdb
-        headers/libc/
-        headers/libc/C/
-        headers/libc/C/populate.sh
-        headers/libc/constants.cdb
-        headers/libc/functions.cdb
-        headers/libc/records.cdb
-        headers/libc/objc-classes.cdb
-        headers/libc/objc-methods.cdb
-        headers/libc/types.cdb
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">e.g, as a set of parallel subdirectories, each with a
-        lowercase name and each of which contains a set of 6 database
-        files and a "C" subdirectory which contains a shell script
-        used in the database creation process.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">As one might assume, the database files in each of these
-        subdirectories contain foreign type, constant, and function
-        definitions - as well as Objective-C class and method info -that
-        correspond (roughly) to the information contained in the
-        header files associated with a "-dev" package in a Linux
-        distribution.  "libc" corresponds pretty closely to the
-        interfaces associated with "glibc/libc6" header files, "gl"
-        corresponds to an "openGL+GLUT" development package, "gtk"
-        and "gnome" contain interface information from the GTK+1.2 and
-        GNOME libraries, respectively.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">For Darwin, the "ccl:darwin-headers" directory contains
-        a "libc" subdirectory, whose contents roughly correspond to
-        those of "/usr/include" under Darwin, as well as
-        subdirectories corresponding to the MacOSX Carbon and Cocoa
-        frameworks.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">To see the precise set of .h files used to generate the
-        database files in a given interface directory, consult the
-        corresponding "populate.sh" shell script (in the interface
-        directory's "C" subdirectory.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The intent is that this initial set can be augmented to
-        meet local needs, and that this can be done in a fairly
-        incremental fashion: one needn't have unrelated header files
-        installed in order to generate interface databases for a
-        package of interest.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Hopefully, this scheme will also make it easier to
-        distribute patches and bug fixes.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> maintains a list of directories; when looking
-        for a foreign type, constant, function, or record definition,
-        it'll consult the database files in each directory on that
-        list. Initially, the list contains an entry for the "libc"
-        interface directory. <code class="literal">CCL</code> needs to be explicitly told to
-        look in other interface directories should it need to do
-        so.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Creating-new-interface-directories"></a>13.5.2.Â Creating new interface directories</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">This example refers to "ccl:headers;", which is
-        appropriate for LinuxPPC. The procedure's analogous under
-        Darwin, where the "ccl:darwin-headers;" directory would be
-        used instead.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">To create a new interface directory, "foo", and a set of
-        database files in that directory:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>Create a subdirectory of "ccl:headers;" named
-	        "foo".</p>
-                </li>
-                <li class="listitem">
-                  <p>Create a subdirectory of "ccl:headers;foo;" named
-	        "C".</p>
-                </li>
-                <li class="listitem">
-                  <p>Create a file in "ccl:headers;foo;C;" named
-	        "populate.sh".</p>
-                  <p>One way of accomplishing the above steps is:</p>
-                  <pre class="programlisting">
-            ? (close (open "ccl:headers;foo;C;populate.sh" :direction :output :
-                           if-does-not-exist :create :if-exists :overwrite))
-          </pre>
-                </li>
-                <li class="listitem">
-                  <p>Edit the file created above, using the "populate.sh"
-	        files in the distribution as guidelines.</p>
-                  <p>The file might wind up looking something like:</p>
-                  <pre class="programlisting">#/bin/sh
-            h-to-ffi.sh `foo-config -cflags` /usr/include/foo/foo.h</pre>
-                </li>
-              </ol>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Refer to <a class="xref" href="#The-Interface-Translator" title="13.7.Â The Interface Translator">SectionÂ 13.7, âThe Interface Translatorâ</a> for
-        information about running the interface translator and .ffi
-        parser.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Assuming that all went well, there should now be .cdb
-        files in "ccl:headers;foo;". You can then do
-        </p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-          ? (use-interface-dir :foo)
-	    </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml"> 
-	    whenever you need to
-        access the foreign type information in those database
-        files.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Using-Shared-Libraries"></a>13.6.Â Using Shared Libraries</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Shared-Library-Overview"></a>13.6.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> provides facilities to open and close shared
-        libraries.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">"Opening" a shared library, which is done with <a class="xref" href="#f_open-shared-library" title="Function OPEN-SHARED-LIBRARY"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">open-shared-library</b></a>, maps the library's code and
-        data into <code class="literal">CCL</code>'s address space and makes its exported
-        symbols accessible to <code class="literal">CCL</code>.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">"Closing" a shared library, which is done with <a class="xref" href="#f_close-shared-library" title="Function CLOSE-SHARED-LIBRARY"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">close-shared-library</b></a>, unmaps the library's code
-        and and removes the library's symbols from the global
-        namespace.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">A small number of shared libraries (including libc,
-        libm, libdl under Linux, and the "system" library under
-        Darwin) are opened by the lisp kernel and can't be
-        closed.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> uses data structures of type
-        EXTERNAL-ENTRY-POINT to map a foreign function name (string)
-        to that foreign function's <span class="emphasis"><em>current</em></span>
-        address. (A function's address may vary from session to
-        session as different versions of shared libraries may load at
-        different addresses; it may vary within a session for similar
-        reasons.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">An EXTERNAL-ENTRY-POINT whose address is known is said
-        to be <span class="emphasis"><em>resolved</em></span>. When an external entry
-        point is resolved, the shared library which defines that entry
-        point is noted; when a shared library is closed, the entry
-        points that it defines are made unresolved.  An
-        EXTERNAL-ENTRY-POINT must be in the resolved state in order to
-        be FF-CALLed; calling an unresolved entry point causes a "last
-        chance" attempt to resolve it. Attempting to resolve an
-        entrypoint that was defined in a closed library will cause an
-        attempt to reopen that library.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> keeps track of all libraries that have been
-        opened in a lisp session. When a saved application is first
-        started, an attempt is made to reopen all libraries that were
-        open when the image was saved, and an attempt is made to
-        resolve all entry points that had been referenced when the
-        image was saved. Either of these attempts can fail "quietly",
-        leaving some entry points in an unresolved state.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Linux shared libraries can be referred to either by a
-        string which describes their full pathname or by their
-        <span class="emphasis"><em>soname</em></span>, a shorter string that can be
-        defined when the library is created. The dynamic linker
-        mechanisms used in Linux make it possible (through a series of
-        filesystem links and other means) to refer to a library via
-        several names; the library's soname is often the most
-        appropriate identifier.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">so names are often less version-specific than other names
-        for libraries; a program that refers to a library by the name
-        "libc.so.6" is more portable than one which refers to
-        "libc-2.1.3.so" or to "libc-2.2.3.so", even though the latter
-        two names might each be platform-specific aliases of the
-        first.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">All of the global symbols described below are exported
-        from the CCL package.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Limitations-and-known-bugs--1-"></a>13.6.2.Â Limitations and known bugs</h3>
-                </div>
-              </div>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>Don't get me started.</p>
-                </li>
-                <li class="listitem">
-                  <p>The underlying functionality has a poor notion of
-	        dependency;it's not always possible to open libraries that
-	        depend on unopened libraries, but it's possible to close
-	        libraries on which other libraries depend. It
-	        <span class="emphasis"><em>may</em></span> be possible to generate
-	        more explicit dependency information by parsing the output
-	        of the Linux ldd and ldconfig programs.</p>
-                </li>
-              </ul>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Darwin-Notes"></a>13.6.3.Â &gt;Darwin Notes</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Darwin shared libraries come in two (basic) flavors:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>"dylibs" (which often have the extension".dylib") are
-	        primarily intended to be linked against at compile/link
-	        time. They can be loaded dynamically,<span class="emphasis"><em>but can't
-	        be unloaded</em></span>. Accordingly,OPEN-SHARED-LIBRARY
-	        can be used to open a .dylib-style library;calling
-	        CLOSE-SHARED-LIBRARY on the result of such a call produces
-	        a warning, and has no other effect. It appears that (due
-	        to an OS bug) attempts to open .dylib shared-libraries
-	        that are already open can cause memory corruption unless
-	        the full pathname of the .dylib file is specified on the
-	        first and all subsequent calls.</p>
-                </li>
-                <li class="listitem">
-                  <p>"bundles" are intended to serve as application
-	        extensions; they can be opened multiple times (creating
-	        multiple instances of the library!) and closed
-	        properly.</p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Thanks to Michael Klingbeil for getting both kinds of
-        Darwin shared libraries working in <code class="literal">CCL</code>.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="The-Interface-Translator"></a>13.7.Â The Interface Translator</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Interface-translator-overview"></a>13.7.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> uses an interface translation system based on the FFIGEN
-	    system, which is described at
-	    <a class="ulink" href="http://www.ccs.neu.edu/home/lth/ffigen/" target="_top">this page</a>
-	    The interface translator makes
-	    the constant, type, structure, and function definitions in a set of
-	    C-language header files available to lisp code.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The basic idea of the FFIGEN scheme is to use the C
-        compiler's frontend and parser to translate .h files into
-        semantically equivalent .ffi files, which represent the
-        definitions from the headers using a syntax based on
-        S-expressions.  Lisp code can then concentrate on the .ffi
-        representation, without having to concern itself with the
-        semantics of header file inclusion or the arcana of C
-        parsing.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The original FFIGEN system used a modified version of
-        the LCC C compiler to produce .ffi files. Since many OS
-        header files contain GCC-specific constructs, <code class="literal">CCL</code>'s
-        translation system uses a modified version of GCC (called,
-        somewhat confusingly, ffigen.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">See <a class="ulink" href="http://trac.clozure.com/openmcl/wiki/BuildFFIGEN" target="_top">
-	here</a> for information on building and installing ffigen.
-	</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">A component shell script called h-to-ffi.sh reads a
-        specified .h file (and optional preprocessor arguments) and writes
-         a (hopefully) equivalent .ffi file to standard output, calling 
-        the ffigen program with appropriate  arguments.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">For each interface directory (see FIXTHIS)
-        <span class="emphasis"><em>subdir</em></span> distributed with <code class="literal">CCL</code>, a shell
-        script (distributed with <code class="literal">CCL</code> as
-        "ccl:headers;<span class="emphasis"><em>subdir</em></span>;C;populate.sh"
-        (or some other platform-specific headers directory)
-        calls h-to-ffi.sh on a large number of the header
-        files in /usr/include (or some other <span class="emphasis"><em>system header
-          path</em></span>) and creates a parallel directory tree in
-        "ccl:headers;<span class="emphasis"><em>subdir</em></span>;C;<span class="emphasis"><em>system</em></span>;<span class="emphasis"><em>header</em></span>;<span class="emphasis"><em>path</em></span>;"
-        (or
-        "ccl:darwin-headers;<span class="emphasis"><em>subdir</em></span>;C;<span class="emphasis"><em>system</em></span>;<span class="emphasis"><em>header</em></span>;<span class="emphasis"><em>path</em></span>;", etc.),
-        populating that directory with .ffi files.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">A lisp function defined in "ccl:library;parse-ffi.lisp"
-        reads the .ffi files in a specified interface directory
-        <span class="emphasis"><em>subdir</em></span> and generates new versions of the
-        databases (files with the extension .cdb).</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The CDB databases are used by the #$ and #_ reader
-        macros and are used in the expansion of RREF, RLET, and
-        related macros.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Details--rebuilding-the-CDB-databases--step-by-step"></a>13.7.2.Â Details: rebuilding the CDB databases, step by step</h3>
-                </div>
-              </div>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>Ensure that the FFIGEN program is installed. See
-	        the"README" file generated during the FFIGEN build process for
-	        specific installation instructions.This example assumes
-	        LinuxPPC; for other platforms, substitute the appropriate
-		headers directory. </p>
-                </li>
-                <li class="listitem">
-                  <p>Edit the
-	        "ccl:headers;<span class="emphasis"><em>subdir</em></span>;C;populate.sh"shell
-	        script. When you're confident that the files
-	        and preprocessor options match your environment, cd to
-	        the"ccl:headers;<span class="emphasis"><em>subdir</em></span>;C;" directory
-	        and invoke ./populate.sh. Repeat this step until you're
-	        able to cleanly translate all files referenced in the shell
-	        script.</p>
-                </li>
-                <li class="listitem">
-                  <p>Run <code class="literal">CCL</code>:
-            </p>
-                  <pre class="programlisting">
-              ? (require "PARSE-FFI")
-              PARSE-FFI
-
-              ? (ccl::parse-standard-ffi-files :SUBDIR)
-              ;;; lots of output ... after a while, shiny new .cdb files should
-              ;;; appear in "ccl:headers;subdir;"
-          </pre>
-                  <p>It may be necessary to call CCL::PARSE-STANDARD-FFI-FILES
-                  twice, to ensure that forward-references are resolved </p>
-                </li>
-              </ol>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Case-sensitivity-of-foreign-names-in-CCL"></a>13.8.Â Case-sensitivity of foreign names in <code class="literal">CCL</code></h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Case-sensitivity-overview"></a>13.8.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">As of release 0.11, <code class="literal">CCL</code> addresses the fact that
-	    foreign type, constant, record, field, and function nams are
-	    case-sensitive and provides mechanisms to refer to these names
-	    via lisp symbols.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Previous versions of <code class="literal">CCL</code> have tried to ignore that
-        fact, under the belief that case conflicts were rare and that
-        many users (and implementors) would prefer not to deal with
-        case-related issues. The fact that some information in the
-        interface databases was incomplete or inaccessible because of
-        this policy made it clearer that the policy was untenable. I
-        can't claim that the approach described here is aesthetically
-        pleasing, but I can honestly say that it's less unpleasant
-        than other approaches that I'd thought of. I'd be interested
-        to hear alternate proposals.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The issues described here have to do with how lisp
-        symbols are used to denote foreign functions, constants,
-        types, records, and fields. It doesn't affect how other lisp
-        objects are sometimes used to denote foreign objects. For
-        instance, the first argument to the EXTERNAL-CALL macros is
-        now and has always been a case-sensitive string.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Foreign-constant-and-function-names"></a>13.8.2.Â Foreign constant and function names</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The primary way of referring to foreign constant and
-        function names in <code class="literal">CCL</code> is via the #$ and #_ reader
-        macros. These reader macro functions each read a symbol into
-        the "OS" package, look up its constant or function definition
-        in the interface database, and assign the value of the
-        constant to the symbol or install a macroexpansion function on
-        the symbol.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In order to observe case-sensitivity, the reader-macros
-        now read the symbol with (READTABLE-CASE :PRESERVE) in
-        effect.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">This means that it's necessary to type the foreign
-        constant or function name in correct case, but it isn't
-        necessary to use any special escaping constructs when writing
-        the variable name. For instance:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-        (#_read fd buf n) ; refers to foreign symbol "read"
-        (#_READ fd buf n) ; refers to foreign symbol "READ", which may
-        ; not exist ...
-        #$o_rdonly ; Probably doesn't exist
-        #$O_RDONLY ; Exists on most platforms
-      </pre>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Foreign-type--record--and-field-names"></a>13.8.3.Â Foreign type, record, and field names</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Constructs like RLET expect a foreign type or record
-	    name to be denoted by a symbol (typically a keyword); RREF
-	    (and PREF) expect an "accessor" form, typically a keyword
-	    formed by concatenating a foreign type or record name with a
-	    sequence of one or more foreign field names, separated by
-	    dots. These names are interned by the reader as other lisp
-	    symbols are, with an arbitrary value of READTABLE-CASE in
-	    effect (typically :UPCASE.) It seems like it would be very
-	    tedious to force users to manually escape (via vertical bar or
-	    backslash syntax) all lowercase characters in symbols used to
-	    specify foreign type, record, and field names (especially
-	    given that many traditional POSIX structure, type, and field
-	    names are entirely lowercase.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The approach taken by <code class="literal">CCL</code> is to allow the symbols
-        (keywords) used to denote foreign type, record, and field
-        names to contain angle brackets (<code class="literal">&lt;</code> and
-        <code class="literal">&gt;</code>). Such symbols are translated to
-	    foreign names via the following set of conventions:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>All instances of &lt; and &gt; in the symbol's pname
-	        are balanced and don't nest.</p>
-                </li>
-                <li class="listitem">
-                  <p>Any alphabetic characters in the symbol's pname
-	        that aren't enclosed in angle brackets are treated as
-	        lower-case,regardless of the value of READTABLE-CASE and
-	        regardless of the case in which they were written.</p>
-                </li>
-                <li class="listitem">
-                  <p>Alphabetic characters that appear within angle
-	        brackets are mapped to upper-case, again regardless of how
-	        they were written or interned.</p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">There may be many ways of "escaping" (with angle
-	    brackets) sequences of upper-case and non-lower-case
-	    characters in a symbol used to denote a foreign name. When
-	    translating in the other direction, <code class="literal">CCL</code> always escapes the
-	    longest sequence that starts with an upper-case character and
-	    doesn't contain a lower-case character.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">It's often preferable to use this canonical form of a
-        foreign type name.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The accessor forms used by PREF/RREF should be viewed as
-        a series of foreign type/record and field names; upper-case
-        sequences in the component names should be escaped with angle
-        brackets, but those sequences shouldn't span components. (More
-        simply, the separating dots shouldn't be enclosed, even if
-        both surrounding characters need to be.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Older POSIX code tends to use lower-case exclusively for
-        type, record, and field names; there are only a few cases in
-        the <code class="literal">CCL</code> sources where mixed-case names need to be
-        escaped.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Examples--1-"></a>13.8.4.Â Examples</h3>
-                </div>
-              </div>
-            </div>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-        ;;; Allocate a record of type "window".
-        (rlet ((w :window)) ...)
-        ;;; Allocate a record of type "Window", which is probably a
-        ;;;  different type
-        (rlet ((w :&lt;w&gt;indow)) ...)
-        ;;; This is equivalent to the last example
-        (rlet ((w :&lt;w&gt;INDOW)))
-      </pre>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Reading-Foreign-Names"></a>13.9.Â Reading Foreign Names</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code>
-      provides several reader macros to make it more convenient to
-      handle foreign type, function, variable, and constant
-      names. Each of these reader macros reads symbols preserving the
-      case of the source text, and selects an appropriate package in
-      which to intern the resulting symbol. These reader macros are
-      especially useful when your Lisp code interacts extensively with
-      a foreign libraryâfor example, when using Mac OS X's Cocoa
-      frameworks.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">These reader macros include "#_" to read foreign function
-      names, "#&amp;" to read foreign variable names (note that in
-      earlier versions of OpenMCL the reader macro "#?" was used for
-      this same purpose), "#$" to read foreign constant names, "#/" to
-      read the names of foreign Objective-C methods, and "#&gt;" to read
-      keywords that can be used as the names of types, records, and
-      accessors.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">All of these reader macros preserve the case of the text
-      that they read; beyond that similarity, each performs some
-      additional work, unique to each reader macro, to create symbols
-      suitable for a particular use. For example, the function,
-      variable, and constant reader macros intern the resulting symbol
-      in the "OS" package of the running platform, but the reader
-      macro for Objective-C method names interns symbols in the
-      "NEXTSTEP-FUNCTIONS" package.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">You are likely to see these reader macros used extensively
-      in Lisp code that works with foreign libraries; for example,
-      <code class="literal">CCL</code> IDE code, which defines numerous Objective-C classes
-      and methods, uses these reader macros extensively.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For more detailed descriptions of each of these reader
-      macros, see the Foreign-Function-Interface Dictionary
-      section.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Tutorial--Using-Basic-Calls-and-Types"></a>13.10.Â Tutorial: Using Basic Calls and Types</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">This tutorial is meant to cover the basics of <code class="literal">CCL</code> for
-      calling external C functions and passing data back and forth.
-      These basics will provide the foundation for more advanced
-      techniques which will allow access to the various external
-      libraries and toolkits.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The first step is to start with a simple C dynamic library
-      in order to actually observe what is actually passing between
-      <code class="literal">CCL</code> and C.  So, some C code is in order:</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Create the file typetest.c, and put the following code
-      into it:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-#include &lt;stdio.h&gt;
-
-void
-void_void_test(void)
-{
-    printf("Entered %s:\n", __FUNCTION__);
-    printf("Exited  %s:\n", __FUNCTION__);
-    fflush(stdout);
-}
-
-signed char
-sc_sc_test(signed char data)
-{
-    printf("Entered %s:\n", __FUNCTION__);
-    printf("Data In: %d\n", (signed int)data);
-    printf("Exited  %s:\n", __FUNCTION__);
-    fflush(stdout);
-    return data;
-}
-
-unsigned char
-uc_uc_test(unsigned char data)
-{
-    printf("Entered %s:\n", __FUNCTION__);
-    printf("Data In: %d\n", (signed int)data);
-    printf("Exited  %s:\n", __FUNCTION__);
-    fflush(stdout);
-    return data;
-}
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">This defines three functions.  If you're familiar with C,
-      notice that there's no <code class="literal">main()</code>, because we're
-      just building a library, not an executable.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The function <code class="literal">void_void_test()</code> doesn't
-      take any parameters, and doesn't return anything, but it prints
-      two lines to let us know it was called.
-      <code class="literal">sc_sc_test()</code> takes a signed char as a
-      parameter, prints it, and returns it.
-      <code class="literal">uc_uc_test()</code> does the same thing, but with an
-      unsigned char.  Their purpose is just to prove to us that we
-      really can call C functions, pass them values, and get values
-      back from them.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">This code is compiled into a dynamic library on OS X
-      10.3.4 with the command:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      gcc -dynamiclib -Wall -o libtypetest.dylib typetest.c \
-      -install_name ./libtypetest.dylib
-    </pre>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;">
-            <h3 class="title">Tip</h3>
-            <p>Users of 64-bit platforms may need to pass options such
-        as "-m64" to gcc, may need to give the output library a different
-        extension (such as ".so"), and may need to user slightly different
-        values for other options in order to create an equivalent test
-        library.</p>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The -dynamiclib tells gcc that we will be compiling this
-      into a dynamic library and not an executable binary program.
-      The output filename is "libtypetest.dylib".  Notice that we
-      chose a name which follows the normal OS X convention, being in
-      the form "libXXXXX.dylib", so that other programs can link to
-      the library.  <code class="literal">CCL</code> doesn't need it to be this way, but it is
-      a good idea to adhere to existing conventions.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The -install_name flag is primarily used when building OS
-      X "bundles".  In this case, we are not using it, so we put a
-      placeholder into it, "./libtypetest.dylib".  If we wanted to use
-      typetest in a bundle, the -install_name argument would be a
-      relative path from some "current" directory.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">After creating this library, the first step is to tell
-      <code class="literal">CCL</code> to open the dynamic library.  This is done by calling
-      .</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      Welcome to <code class="literal">CCL</code> Version (Beta: Darwin) 0.14.2-040506!
-
-      ? (open-shared-library "/Users/andewl/openmcl/libtypetest.dylib")
-      #&lt;SHLIB /Users/andewl/openmcl/libtypetest.dylib #x638EF3E&gt;
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">You should use an absolute path here; using a relative
-      one, such as just "libtypetest.dylib", would appear to work, but
-      there are subtle problems which occur after reloading it.  See
-      the Darwin notes on for details.  It would be a bad idea anyway,
-      because software should never rely on its starting directory
-      being anything in particular.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">This command returns a reference to the opened shared library, and
-      <code class="literal">CCL</code> also adds one to the global variable
-      <code class="literal">ccl::*shared-libraries*</code>:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      ? ccl::*shared-libraries*
-      (#&lt;SHLIB /Users/andewl/openmcl/libtypetest.dylib #x638EF3E&gt;
-       #&lt;SHLIB /usr/lib/libSystem.B.dylib #x606179E&gt;)
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Before we call anything, let's check that the individual
-      functions can actually be found by the system.  We don't have to
-      do this, but it helps to know how to find out whether this is
-      the problem, when something goes wrong.  We use <a class="xref" href="#m_external-call" title="Macro EXTERNAL-CALL"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">external-call</b></a>:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      ? (external "_void_void_test")
-      #&lt;EXTERNAL-ENTRY-POINT "_void_void_test" (#x000CFDF8) /Users/andewl/openmcl/libtypetest.dylib #x638EDF6&gt;
-
-      ? (external "_sc_sc_test")
-      #&lt;EXTERNAL-ENTRY-POINT "_sc_sc_test" (#x000CFE50) /Users/andewl/openmcl/libtypetest.dylib #x638EB3E&gt;
-
-      ? (external "_uc_uc_test")
-      #&lt;EXTERNAL-ENTRY-POINT "_uc_uc_test" (#x000CFED4) /Users/andewl/openmcl/libtypetest.dylib #x638E626&gt;
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Notice that the actual function names have been "mangled"
-      by the C linker.  The first function was named "void_void_test"
-      in typetest.c, but in libtypetest.dylib, it has an underscore (a
-      "_" symbol) before it: "_void_void_test".  So, this is the name
-      which you have to use.  The mangling - the way the name is
-      changed - may be different for other operating systems or other
-      versions, so you need to "just know" how it's done...</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Also, pay particular attention to the fact that a
-      hexadecimal value appears in the EXTERNAL-ENTRY-POINT.
-      (#x000CFDF8, for example - but what it is doesn't matter.)
-      These hex numbers mean that the function can be dereferenced.
-      Functions which aren't found will not have a hex number.  For
-      example:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      ? (external "functiondoesnotexist")
-      #&lt;EXTERNAL-ENTRY-POINT "functiondoesnotexist" {unresolved}  #x638E3F6&gt;
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">The "unresolved" tells us that <code class="literal">CCL</code> wasn't able to find this
-      function, which means you would get an error, "Can't resolve foreign
-      symbol," if you tried to call it.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">These external function references also are stored in a
-      hash table which is accessible through a global variable,
-      <code class="literal">ccl::*eeps*</code>.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">At this point, we are ready to try our first external
-      function call:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      ? (external-call "_void_void_test" :void)
-      Entered void_void_test:
-      Exited  void_void_test:
-      NIL
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">We used , which is is the normal mechanism for accessing
-      externally linked code.  The "_void_void_test" is the mangled
-      name of the external function.  The :void refers to the return
-      type of the function.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The next step is to try passing a value to C, and getting one
-      back:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      ? (external-call "_sc_sc_test" :signed-byte -128 :signed-byte)
-      Entered sc_sc_test:
-      Data In: -128
-      Exited  sc_sc_test:
-      -128
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">The first :signed-byte gives the type of the first
-      argument, and then -128 gives the value to pass for it.  The
-      second :signed-byte gives the return type.  The return type is
-      always given by the last argument to .</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Everything looks good.  Now, let's try a number outside
-      the range which fits in one byte:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      ? (external-call "_sc_sc_test" :signed-byte -567 :signed-byte)
-      Entered sc_sc_test:
-      Data In: -55
-      Exited  sc_sc_test:
-      -55
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Hmmmm.  A little odd.  Let's look at the unsigned stuff to
-      see how it reacts:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      ? (external-call "_uc_uc_test" :unsigned-byte 255 :unsigned-byte)
-      Entered uc_uc_test:
-      Data In: 255
-      Exited  uc_uc_test:
-      255
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">That looks okay.  Now, let's go outside the valid range again:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      ? (external-call "_uc_uc_test" :unsigned-byte 567 :unsigned-byte)
-      Entered uc_uc_test:
-      Data In: 55
-      Exited  uc_uc_test:
-      55
-
-      ? (external-call "_uc_uc_test" :unsigned-byte -567 :unsigned-byte)
-      Entered uc_uc_test:
-      Data In: 201
-      Exited  uc_uc_test:
-      201
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Since a signed byte can only hold values from -128 through 127, and
-      an unsigned one can only hold values from 0 through 255, any number
-      outside that range gets "clipped": only the low eight bits of it
-      are used.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">What is important to remember is that <span class="emphasis"><em>external
-        function calls have
-        very few safety checks.</em></span>
-      Data outside the valid range for its type will silently do
-      very strange things; pointers outside the valid range can very well
-      crash the system.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">That's it for our first example library.  If you're still
-      following along, let's add some more C code to look at the rest
-      of the primitive types.  Then we'll need to recompile the
-      dynamic library, load it again, and then we can see what
-      happens.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Add the following code to typetest.c:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-int
-si_si_test(int data)
-{
-    printf("Entered %s:\n", __FUNCTION__);
-    printf("Data In: %d\n", data);
-    printf("Exited  %s:\n", __FUNCTION__);
-    fflush(stdout);
-    return data;
-}
-
-long
-sl_sl_test(long data)
-{
-    printf("Entered %s:\n", __FUNCTION__);
-    printf("Data In: %ld\n", data);
-    printf("Exited  %s:\n", __FUNCTION__);
-    fflush(stdout);
-    return data;
-}
-
-long long
-sll_sll_test(long long data)
-{
-    printf("Entered %s:\n", __FUNCTION__);
-    printf("Data In: %lld\n", data);
-    printf("Exited  %s:\n", __FUNCTION__);
-    fflush(stdout);
-    return data;
-}
-
-float
-f_f_test(float data)
-{
-    printf("Entered %s:\n", __FUNCTION__);
-    printf("Data In: %e\n", data);
-    printf("Exited  %s:\n", __FUNCTION__);
-    fflush(stdout);
-    return data;
-}
-
-double
-d_d_test(double data)
-{
-    printf("Entered %s:\n", __FUNCTION__);
-    printf("Data In: %e\n", data);
-    printf("Exited  %s:\n", __FUNCTION__);
-    fflush(stdout);
-    return data;
-}
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">The command line to compile the dynamic library is the same as before:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      gcc -dynamiclib -Wall -o libtypetest.dylib typetest.c \
-      -install_name ./libtypetest.dylib
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Now, restart <code class="literal">CCL</code>.  This step is required because
-      <code class="literal">CCL</code> cannot close and reload a dynamic library on OS
-      X.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Have you restarted?  Okay, try out the new code:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      Welcome to <code class="literal">CCL</code> Version (Beta: Darwin) 0.14.2-040506!
-
-      ? (open-shared-library "/Users/andewl/openmcl/libtypetest.dylib")
-      #&lt;SHLIB /Users/andewl/openmcl/libtypetest.dylib #x638EF3E&gt;
-
-      ? (external-call "_si_si_test" :signed-fullword -178965 :signed-fullword)
-      Entered si_si_test:
-      Data In: -178965
-      Exited  si_si_test:
-      -178965
-
-      ? ;; long is the same size as int on 32-bit machines.
-      (external-call "_sl_sl_test" :signed-fullword -178965 :signed-fullword)
-      Entered sl_sl_test:
-      Data In: -178965
-      Exited  sl_sl_test:
-      -178965
-
-      ? (external-call "_sll_sll_test"
-      :signed-doubleword -973891578912 :signed-doubleword)
-      Entered sll_sll_test:
-      Data In: -973891578912
-      Exited  sll_sll_test:
-      -973891578912
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Okay, everything seems to be acting as expected.  However,
-      just to remind you that most of this stuff has no safety net,
-      here's what happens if somebody mistakes
-      <code class="literal">sl_sl_test()</code> for
-      <code class="literal">sll_sll_test()</code>, thinking that a long is
-      actually a doubleword:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      ? (external-call "_sl_sl_test"
-      :signed-doubleword -973891578912 :signed-doubleword)
-      Entered sl_sl_test:
-      Data In: -227
-      Exited  sl_sl_test:
-      -974957576192
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Ouch.  The C function changes the value with no warning
-      that something is wrong.  Even worse, it manages to pass the
-      original value back to <code class="literal">CCL</code>, which hides the fact that
-      something is wrong.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Finally, let's take a look at doing this with
-      floating-point numbers.</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-
-      Welcome to <code class="literal">CCL</code> Version (Beta: Darwin) 0.14.2-040506!
-
-      ? (open-shared-library "/Users/andewl/openmcl/libtypetest.dylib")
-      #&lt;SHLIB /Users/andewl/openmcl/libtypetest.dylib #x638EF3E&gt;
-
-      ? (external-call "_f_f_test" :single-float -1.256791e+11 :single-float)
-      Entered f_f_test:
-      Data In: -1.256791e+11
-      Exited  f_f_test:
-      -1.256791E+11
-
-      ? (external-call "_d_d_test" :double-float -1.256791d+290 :double-float)
-      Entered d_d_test:
-      Data In: -1.256791e+290
-      Exited  d_d_test:
-      -1.256791D+290
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Notice that the number ends with "...e+11" for the single-float,
-      and "...d+290" for the
-      double-float.  Lisp has both of these float types itself, and the
-      d instead of the e is how you specify which to create.  If
-      you tried to pass :double-float 1.0e2 to external-call, Lisp would
-      be nice enough to notice and give you a type error.  Don't get the
-      :double-float wrong, though, because then there's no protection.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Congratulations!  You now know how to call external C functions from
-      within <code class="literal">CCL</code>, and pass numbers back and forth.  Now that the basic
-      mechanics of calling and passing work, the next step is to examine how
-      to pass more complex data structures around.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Acknowledgement"></a>13.10.1.Â Acknowledgement</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">This chapter was generously contributed by Andrew
-	    P. Lentvorski Jr.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Tutorial--Allocating-Foreign-Data-on-the-Lisp-Heap"></a>13.11.Â Tutorial: Allocating Foreign Data on the Lisp Heap </h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Not every foreign function is so marvelously easy to use
-      as the ones we saw in the last section.  Some functions require
-      you to allocate a C struct, fill it with your own
-      information, and pass in a pointer to that struct.  Some of them
-      require you to allocate an empty struct that they will fill in
-      so that you can read the information out of it.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">There are generally two ways to allocate foreign data.  The
-    first way is to allocate it on the stack; the RLET macro is one way to do this.
-    This is analogous to using automatic variables in C.  In the
-    jargon of Common Lisp, data allocated this way is said to have
-    dynamic extent.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The other way to heap-allocate the foreign data.  This is
-    analogous to calling malloc in C.  Again in the jargon of Common
-    Lisp, heap-allocated data is said to have indefinite extent. If a
-    function heap-allocates some data, that data remains valid even
-    after the function itself exits.  This is useful for data which
-    may need to be passed between multiple C calls or multiple
-    threads. Also, some data may be too large to copy multiple times
-    or may be too large to allocate on the stack.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The big disadvantage to allocating data on the heap is
-      that it must be explicitly deallocatedâyou need to "free" it
-      when you're done with it.  Normal Lisp objects, even those with indefinite
-      extent, are deallocated by the garbage collector when it can prove
-      that they're no longer referenced.  Foreign data, though, is outside the
-      GC's ken:  it has no way to know whether a blob of foreign data is still
-      referenced by foreign code or not. It is thus up to the programmer
-      to manage it manually, just as one
-      does in C with malloc and free.
-    </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">What that means is that, if you allocate something and
-      then lose track of the pointer to it, there's no way to ever
-      free that memory.  That's what's called a memory leak, and if
-      your program leaks enough memory it will eventually use up all
-      of it!  So, you need to be careful to not lose your
-      pointers.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">That disadvantage, though, is also an advantage for using
-      foreign functions.  Since the garbage collector doesn't know
-      about this memory, it will never move it around.  External C
-      code needs this, because it doesn't know how to follow it to
-      where it moved, the way that Lisp code does.  If you allocate
-      data manually, you can pass it to foreign code and know that no
-      matter what that code needs to do with it, it will be able to,
-      until you deallocate it.  Of course, you'd better be sure it's
-      done before you do.  Otherwise, your program will be unstable
-      and might crash sometime in the future, and you'll have trouble
-      figuring out what caused the trouble, because there won't be
-      anything pointing back and saying "you deallocated this too
-      soon."</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">And, so, on to the code...</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">As in the last tutorial, our first step
-      is to create a local dynamic library in order to help show
-      what is actually going on between <code class="literal">CCL</code> and C.  So, create the file
-      ptrtest.c, with the following code:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-#include &lt;stdio.h&gt;
-
-void reverse_int_array(int * data, unsigned int dataobjs)
-{
-    int i, t;
-    
-    for(i=0; i&lt;dataobjs/2; i++)
-        {
-            t = *(data+i);
-            *(data+i) = *(data+dataobjs-1-i);
-            *(data+dataobjs-1-i) = t;
-        }
-}
-
-void reverse_int_ptr_array(int **ptrs, unsigned int ptrobjs)
-{
-    int *t;
-    int i;
-    
-    for(i=0; i&lt;ptrobjs/2; i++)
-        {
-            t = *(ptrs+i);
-            *(ptrs+i) = *(ptrs+ptrobjs-1-i);
-            *(ptrs+ptrobjs-1-i) = t;
-        }
-}
-
-void
-reverse_int_ptr_ptrtest(int **ptrs)
-{
-    reverse_int_ptr_array(ptrs, 2);
-    
-    reverse_int_array(*(ptrs+0), 4);
-    reverse_int_array(*(ptrs+1), 4);
-}
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">This defines three functions.
-      <code class="literal">reverse_int_array</code> takes a pointer to an array
-      of <code class="literal">int</code>s, and a count telling how many items
-      are in the array, and loops through it putting the elements in
-      reverse.  <code class="literal">reverse_int_ptr_array</code> does the same
-      thing, but with an array of pointers to <code class="literal">int</code>s.
-      It only reverses the order the pointers are in; each pointer
-      still points to the same thing.
-      <code class="literal">reverse_int_ptr_ptrtest</code> takes an array of
-      pointers to arrays of <code class="literal">int</code>s.  (With me?)  It
-      doesn't need to be told their sizes; it just assumes that the
-      array of pointers has two items, and that both of those are
-      arrays which have four items.  It reverses the array of
-      pointers, then it reverses each of the two arrays of
-      <code class="literal">int</code>s.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Now, compile ptrtest.c into a dynamic library using the
-      command:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      gcc -dynamiclib -Wall -o libptrtest.dylib ptrtest.c -install_name ./libptrtest.dylib
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">The function <code class="literal">make-heap-ivector</code> is the
-      primary tool for allocating objects in heap memory.  It
-      allocates a fixed-size <code class="literal">CCL</code> object in heap memory.  It
-      returns both an array reference, which can be used directly from
-      <code class="literal">CCL</code>, and a <code class="literal">macptr</code>, which can be used to
-      access the underlying memory directly.  For example:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? ;; Create an array of 3 4-byte-long integers
-      (multiple-value-bind (la lap)
-          (make-heap-ivector 3 '(unsigned-byte 32))
-        (setq a la)
-        (setq ap lap))
-      ;Compiler warnings :
-      ;   Undeclared free variable A, in an anonymous lambda form.
-      ;   Undeclared free variable AP, in an anonymous lambda form.
-      #&lt;A Mac Pointer #x10217C&gt;
-
-      ? a
-      #(1396 2578 97862649)
-
-      ? ap
-      #&lt;A Mac Pointer #x10217C&gt;
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">It's important to realize that the contents of the
-      <code class="literal">ivector</code> we've just created haven't been
-      initialized, so their values are unpredictable, and you should
-      be sure not to read from them before you set them, to avoid
-      confusing results.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">At this point, <code class="literal">a</code> references an object
-      which works just like a normal array.  You can refer to any item
-      of it with the standard <code class="literal">aref</code> function, and
-      set them by combining that with <code class="literal">setf</code>.  As
-      noted above, the <code class="literal">ivector</code>'s contents haven't
-      been initialized, so that's the next order of business:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? a
-      #(1396 2578 97862649)
-
-      ? (aref a 2)
-      97862649
-
-      ? (setf (aref a 0) 3)
-      3
-
-      ? (setf (aref a 1) 4)
-      4
-
-      ? (setf (aref a 2) 5)
-      5
-
-      ? a
-      #(3 4 5)
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">In addition, the <code class="literal">macptr</code> allows direct
-      access to the same memory:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? (setq *byte-length-of-long* 4)
-      4
-
-      ? (%get-signed-long ap (* 2 *byte-length-of-long*))
-      5
-
-      ? (%get-signed-long ap (* 0 *byte-length-of-long*))
-      3
-
-      ? (setf (%get-signed-long ap (* 0 *byte-length-of-long*)) 6)
-      6
-
-      ? (setf (%get-signed-long ap (* 2 *byte-length-of-long*)) 7)
-      7
-
-      ? ;; Show that a actually got changed through ap
-      a
-      #(6 4 7)
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">So far, there is nothing about this object that could not
-      be done much better with standard Lisp.  However, the
-      <code class="literal">macptr</code> can be used to pass this chunk of
-      memory off to a C function.  Let's use the C code to reverse the
-      elements in the array:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? ;; Insert the full path to your copy of libptrtest.dylib
-      (open-shared-library "/Users/andrewl/openmcl/openmcl/gtk/libptrtest.dylib")
-      #&lt;SHLIB /Users/andrewl/openmcl/openmcl/gtk/libptrtest.dylib #x639D1E6&gt;
-
-      ? a
-      #(6 4 7)
-
-      ? ap
-      #&lt;A Mac Pointer #x10217C&gt;
-
-      ? (external-call "_reverse_int_array" :address ap :unsigned-int (length a) :address)
-      #&lt;A Mac Pointer #x10217C&gt;
-
-      ? a
-      #(7 4 6)
-
-      ? ap
-      #&lt;A Mac Pointer #x10217C&gt;
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">The array gets passed correctly to the C function,
-      <code class="literal">reverse_int_array</code>.  The C function reverses
-      the contents of the array in-place; that is, it doesn't make a
-      new array, just keeps the same one and reverses what's in it.
-      Finally, the C function passes control back to <code class="literal">CCL</code>.  Since
-      the allocated array memory has been directly modified, <code class="literal">CCL</code>
-      reflects those changes directly in the array as well.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">There is one final bit of housekeeping to deal with.
-      Before moving on, the memory needs to be deallocated:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? (dispose-heap-ivector a ap)
-      NIL
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">The <code class="literal">dispose-heap-ivector</code> macro actually
-      deallocates the ivector, releasing its memory into the heap for
-      something else to use.  Both <code class="literal">a</code> and <code class="literal">ap</code>
-      now have undefined values.
-      </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">When do you call <code class="literal">dispose-heap-ivector</code>?
-      Anytime after you know the ivector will never be used again, but
-      no sooner.  If you have a lot of ivectors, say, in a hash table,
-      you need to make sure that when whatever you were doing with the
-      hash table is done, those ivectors all get freed.  Unless
-      there's still something somewhere else which refers to them, of
-      course!  Exactly what strategy to take depends on the situation,
-      so just try to keep things simple unless you know better.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The simplest situation is when you have things set up so
-      that a Lisp object "encapsulates" a pointer to foreign data,
-      taking care of all the details of using it.  In this case, you
-      don't want those two things to have different lifetimes: You
-      want to make sure your Lisp object exists as long as the foreign
-      data does, and no longer; and you want to make sure the foreign
-      data doesn't get deallocated while your Lisp object still refers
-      to it.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If you're willing to accept a few limitations, you can
-      make this easy.  First, you can't let foreign code keep a
-      permanent pointer to the memory; it has to always finish what
-      it's doing, then return, and not refer to that memory again.
-      Second, you can't let any Lisp code that isn't part of your
-      encapsulating "wrapper" refer to the pointer directly.  Third,
-      nothing, either foreign code or Lisp code, should explicitly
-      deallocate the memory.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If you can make sure all of these are true, you can at
-      least ensure that the foreign pointer is deallocated when the
-      encapsulating object is about to become garbage, by using
-      <code class="literal">CCL</code>'s nonstandard "termination" mechanism, which is
-      essentially the same as what Java and other languages call
-      "finalization".</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Termination is a way of asking the garbage collector to
-      let you know when it's about to destroy an object which isn't
-      used anymore.  Before destroying the object, it calls a function
-      which you write, called a terminator.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">So, you can use termination to find out when a particular
-      <code class="literal">macptr</code> is about to become garbage.  That's
-      not quite as helpful as it might seem: It's not exactly the same
-      thing as knowing that the block of memory it points to is
-      unreferenced.  For example, there could be another
-      <code class="literal">macptr</code> somewhere to the same block; or, if
-      it's a struct, there could be a <code class="literal">macptr</code> to one
-      of its fields.  Most problematically, if the address of that
-      memory has been passed to foreign code, it's sometimes hard to
-      know whether that code has kept the pointer.  Most foreign
-      functions don't, but it's not hard to think of
-      exceptions.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">You can use code such as this to make all this happen:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      (defclass wrapper (whatever)
-        ((element-type :initarg :element-type)
-         (element-count :initarg :element-count)
-         (ivector)
-         (macptr)))
-
-      (defmethod initialize-instance ((wrapper wrapper) <em class="varname">&amp;rest</em> initargs)
-        (declare (ignore initargs))
-        (call-next-method)
-        (ccl:terminate-when-unreachable wrapper)
-        (with-slots (ivector macptr element-type element-count) wrapper
-          (multiple-value-bind (new-ivector new-macptr)
-              (make-heap-ivector element-count element-type)
-            (setq ivector new-ivector
-                  macptr new-macptr))))
-
-      (defmethod ccl:terminate ((wrapper wrapper))
-        (with-slots (ivector macptr) wrapper
-          (when ivector
-            (dispose-heap-ivector ivector macptr)
-            (setq ivector nil
-                  macptr nil))))
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">The <code class="literal">ccl:terminate</code> method will be called
-      on some arbitrary thread sometime (hopefully soon) after the GC
-      has decided that there are no strong references to an object
-      which has been the argument of a
-      <code class="literal">ccl:terminate-when-unreachable</code> call.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If it makes sense to say that the foreign object should
-      live as long as there's Lisp code that references it (through
-      the encapsulating object) and no longer, this is one way of doing
-      that.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Now we've covered passing basic types back and forth with
-      C, and we've done the same with pointers.  You may think this is
-      all...  but we've only done pointers to basic types.  Join us
-      next time for pointers... to pointers.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Acknowledgement--1-"></a>13.11.1.Â Acknowledgement</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Much of this chapter was generously contributed by
-	    Andrew P. Lentvorski Jr.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Foreign-Function-Interface-Dictionary"></a>13.12.Â The Foreign-Function-Interface Dictionary</h2>
-              </div>
-            </div>
-          </div>
-          <p>
-            <div class="refentrytitle">
-              <a id="rm_sharpsign-underscore"></a>
-              <strong>[Reader Macro]</strong>
-              <br></br>
-              <code>#_</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46614704"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Reads a symbol from the current input stream, with *PACKAGE*
-	      bound to the "OS" package and with readtable-case preserved.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Does a lookup on that symbol in <a class="link" href="#The-Interface-Database" title="13.4.Â The Interface Database">the <code class="literal">CCL</code> interface
-	        database</a>, signalling an error if no foreign function
-	      information can be found for the symbol in any active <a class="link" href="#Using-Interface-Directories" title="13.5.Â Using Interface Directories">interface
-	        directory</a>.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Notes the foreign function information, including the foreign
-	      function's return type, the number and type of the foreign
-	      function's required arguments, and an indication of whether or
-	      not the function accepts additional arguments (via e.g., the
-	      "varargs" mechanism in C).</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Defines a macroexpansion function on the symbol, which expand
-	      macro calls involving the symbol into EXTERNAL-CALL forms where
-	      foreign argument type specifiers for required arguments and the
-	      return value specifer are provided from the information in the
-	      database.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the symbol.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">The effect of these steps is that it's possible to call
-	      foreign functions that take fixed numbers of arguments by simply
-	      providing argument values, as in:</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">(#_isatty fd)
-          (#_read fd buf n)</pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">and to call foreign functions that take variable numbers of
-	      arguments by specifying the types of non-required args, as in:</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">(with-cstrs ((format-string "the answer is: %d"))
-          (#_printf format-string :int answer))</pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">You can query whether a given name is defined in the
-          interface databases by appending the '?' character to the reader
-          macro; for example:</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-          CL-USER&gt; #_?printf
-          T
-          CL-USER&gt; #_?foo
-          NIL
-        </pre>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="rm_sharpsign-ampersand"></a>
-              <strong>[Reader Macro]</strong>
-              <br></br>
-              <code>#&amp;</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46627456"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">In <code class="literal">CCL</code> 1.2 and later, the #&amp; reader macro can be used to
-	      access foreign variables; this functionality depends on the presence of
-	      "vars.cdb" files in the interface database. The current behavior
-	      of the #&amp; reader macro is to:</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Read a symbol from the current input stream, with *PACKAGE*
-	      bound to the "OS" package and with readtable-case preserved.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Use that symbol's pname to access the <code class="literal">CCL</code> interface
-	      database, signalling an error if no appropriate foreign variable
-	      information can be found with that name in any active interface
-	      directory.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Use type information recorded in the database to construct a
-	      form which can be used to access the foreign variable, and return
-	      that form.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Please note that the set of foreign variables declared in header files
-	      may or may not match the set of foreign variables exported from
-	      libraries (we're generally talking about C and Unix here ...). When
-	      they do match, the form constructed by the #&amp; reader macro manages the
-	      details of resolving and tracking changes to the foreign variable's
-	      address.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Future extensions (via prefix arguments to the reader macro) may
-	      offer additional behavior; it might be convenient (for instance) to be
-	      able to access the address of a foreign variable without dereferencing
-	      that address.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Foreign variables in C code tend to be platform- and
-	      package-specific (the canonical example - "errno" - is typically
-	      not a variable when threads are involved. )</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">In LinuxPPC, </p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">? #&amp;stderr</pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">returns a pointer to the stdio error stream ("stderr" is a
-	      macro under OSX/Darwin).</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">On both LinuxPPC and DarwinPPC, </p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">? #&amp;sys_errlist</pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">returns a pointer to a C array of C error message strings.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">You can query whether a given name is defined in the
-          interface databases by appending the '?' character to the reader
-          macro; for example:</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-          CL-USER&gt; #&amp;?sys_errlist
-          T
-          CL-USER&gt; #&amp;?foo
-          NIL
-        </pre>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="rm_sharpsign-dollarsign"></a>
-              <strong>[Reader Macro]</strong>
-              <br></br>
-              <code>#$</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46641568"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">In <code class="literal">CCL</code> 0.14.2 and later, the #? reader macro can be used
-	      to access foreign constants; this functionality depends on the
-	      presence of "constants.cdb" files in the interface
-	      database. The current behavior of the #$ reader macro is
-	      to:</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Read a symbol from the current input stream, with
-	      *PACKAGE* bound to the "OS" package and with
-	      readtable-case preserved.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Use that symbol's pname to access the <code class="literal">CCL</code> interface
-	      database, signalling an error if no appropriate foreign constant
-	      information can be found with that name in any active interface
-	      directory.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Use type information recorded in the database to construct a
-	      form which can be used to access the foreign constant, and return
-	      that form.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Please note that the set of foreign constants declared in
-	      header files may or may not match the set of foreign constants
-	      exported from libraries. When they do match, the form
-	      constructed by the #$ reader macro manages the details of
-	      resolving and tracking changes to the foreign constant's
-	      address.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">You can query whether a given name is defined in the
-          interface databases by appending the '?' character to the reader
-          macro; for example:</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-          CL-USER&gt; #$?SO_KEEPALIVE
-          T
-          CL-USER&gt; #$?foo
-          NIL
-        </pre>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="rm_sharpsign-slash"></a>
-              <strong>[Reader Macro]</strong>
-              <br></br>
-              <code>#/</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46651456"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">In <code class="literal">CCL</code> 1.2 and later, the #/ reader macro can be used to
-	      access foreign functions on the Darwin platform. The current
-	      behavior of the #/ reader macro is to:</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Read a symbol from the current input stream, with
-	      *PACKAGE* bound to the "NEXTSTEP-FUNCTIONS" package, with
-	      readtable-case preserved, and with any colons included.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Do limited sanity-checking on the resulting symbol; for
-          example, any name that contains at least one colon is required
-          also to end with a colon, to conform to Objective-C
-          method-naming conventions.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Export the resulting symbol from the "NEXTSTEP-FUNCTIONS"
-          package and return it.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">For example, reading "#/alloc" interns and returns
-          NEXTSTEP-FUNCTIONS:|alloc|. Reading "#/initWithFrame:" interns
-          and returns NEXTSTEP-FUNCTIONS:|initWithFrame:|.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">A symbol read using this macro can be used as an operand
-          in most places where an Objective-C message name can be used, such as
-          in the (OBJ:@SELECTOR ...) construct.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Please note: the reader macro is not rigorous about
-          enforcing Objective-C method-naming conventions. Despite the
-          simple checking done by the reader macro, it may still be
-          possible to use it to construct invalid names.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">The act of interning a new symbol in the
-          NEXTSTEP-FUNCTIONS package triggers an interface database lookup
-          of Objective-C methods with the corresponding message name.  If any
-          such information is found, a special type of dispatching
-          function is created and initialized and the new symbol is given
-          the newly-created dispatching function as its function
-          definition.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">The dispatching knows how to call declared Objective-C methods
-          defined on the message. In many cases, all methods have the same
-          foreign type signature, and the dispatching function merely
-          passes any arguments that it receives to a function that does an
-          Objective-C message send with the indicated foreign argument and return
-          types. In other cases, where different Objective-C messages have
-          different type signatures, the dispatching function tries to
-          choose a function that handles the right type signature based on
-          the class of the dispatching function's first argument.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">If new information about Objective-C methods is introduced
-          (e.g., by using additional interface files or as Objective-C
-          methods are defined from lisp), the dispatch function is
-          reinitialized to recognize newly-introduced foreign type
-          signatures.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">The argument and result coercion that the bridge has
-          traditionally supported is supported by the new mechanism (e.g.,
-          :&lt;BOOL&gt; arguments can be specified as lisp booleans and :&lt;BOOL&gt;
-          results are returned as lisp boolean values, and an argument
-          value of NIL is coerced to a null pointer if the corresponding
-          argument type is :ID.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Some Objective-C methods accept variable numbers of
-          arguments; the foreign types of non-required arguments are
-          determined by the lisp types of those arguments (e.g., integers
-          are passed as integers, floats as floats, pointers as pointers,
-          record types by reference.)</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Examples:</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-          ;;; #/alloc is a known message.
-          ? #'#/alloc
-          #&lt;OBJC-DISPATCH-FUNCTION NEXTSTEP-FUNCTIONS:|alloc| #x300040E94EBF&gt;
-          ;;; Sadly, #/foo is not ...
-          ? #'#/foo
-          &gt; Error: Undefined function: NEXTSTEP-FUNCTIONS:|foo|
-
-          ;;; We can send an "init" message to a newly-allocated instance of
-          ;;; "NSObject" by:
-
-          (send (send ns:ns-object 'alloc) 'init)
-
-          ;;; or by
-
-          (#/init (#/alloc ns:ns-object))
-        </pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">Objective-C methods that "return" structures return them
-          as garbage-collectable pointers when called via dispatch
-          functions.  For example, if "my-window" is an NS:NS-WINDOW
-          instance, then</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-          (#/frame my-window)
-        </pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">returns a garbage-collectable pointer to a structure that
-          describes that window's frame rectangle. This convention means
-          that there's no need to use SLET or special structure-returning
-          message send syntax; keep in mind, though, that #_malloc,
-          #_free, and the GC are all involved in the creation and eventual
-          destruction of structure-typed return values. In some programs
-          these operations may have an impact on performance.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="rm_sharpsign-greaterthan"></a>
-              <strong>[Reader Macro]</strong>
-              <br></br>
-              <code>#&gt;</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46668144"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">In <code class="literal">CCL</code> 1.2 and later, the #&gt; reader macro reads
-          the following text as a keyword, preserving the case of the
-          text. For example:</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-          CL-USER&gt; #&gt;FooBar
-          :&lt;F&gt;OO&lt;B&gt;AR
-        </pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">The resulting keyword can be used as the name of foreign
-          types, records, and accessors.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_close-shared-library"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>close-shared-library</strong></span> library <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em>
-	      completely</code>
-            </div>
-            <div class="refentrytitle">Stops using a shared library, informing the operating
-	      system that it can be unloaded if appropriate.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46677088"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">library</span></i>---either an object of type SHLIB, or a string which
-		        designates one by its so-name.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">completely</span></i>---a boolean.  The default is T.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46681424"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">If <em class="varname">completely</em> is T, sets the
-	      reference count of <em class="varname">library</em> to 0.  Otherwise,
-	      decrements it by 1.  In either case, if the reference count
-	      becomes 0, <span class="function"><strong>close-shared-library</strong></span>
-	      frees all memory resources consumed <em class="varname">library</em>
-	      and
-	      causes any EXTERNAL-ENTRY-POINTs known to be defined by it to
-	      become unresolved.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_defcallback"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>defcallback</strong></span> name
-	      ({arg-type-specifier var}* <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> result-type-specifier)
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46690544"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---A symbol which can be made into a special variable</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">arg-type-specifer</span></i>---One of the foreign argument-type keywords,
-		        described above, or an equivalent <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="#Specifying-And-Using-Foreign-Types" title="13.1.Â Specifying And Using Foreign Types">foreign
-		          type specifier</a>.  In addition, if the keyword
-		        :WITHOUT-INTERRUPTS is specified, the callback will be
-		        executed with lisp interrupts disabled if the
-		        corresponding var is non-NIL. If :WITHOUT-INTERRUPTS
-		        is specified more than once, the rightmost instance
-		        wins.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">var</span></i>---A symbol (lisp variable), which will be bound to a
-		        value of the specified type.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">body</span></i>---A sequence of lisp forms, which should return a value
-		        which can be coerced to the specified result-type.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46699104"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Proclaims <em class="varname">name</em>
-	      to be a special variable; sets its value to a
-	      MACPTR which, when called by foreign code, calls a lisp function
-	      which expects foreign arguments of the specified types and which
-	      returns a foreign value of the specified result type. Any argument
-	      variables which correspond to foreign arguments of type :ADDRESS
-	      are bound to stack-allocated MACPTRs.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">If <em class="varname">name</em>
-	      is already a callback function pointer, its value is
-	      not changed; instead, it's arranged
-	      that an
-	      updated version of the lisp callback function will be called.
-	      This feature allows for callback functions to be redefined
-	      incrementally, just like Lisp functions are.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml"><span class="function"><strong>defcallback</strong></span>
-	      returns the callback pointer, e.g., the
-	      value of <em class="varname">name</em>.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_def-foreign-type"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>def-foreign-type</strong></span> name foreign-type-spec
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46708640"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---NIL or a keyword; the keyword may contain
-		        <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="#Case-sensitivity-of-foreign-names-in-CCL" title="13.8.Â Case-sensitivity of foreign names in CCL">escaping constructs</a>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">foreign-type-spec</span></i>---A foreign type specifier, whose syntax is (loosely)
-		        defined above.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46713584"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">If name is non-NIL, defines name to be an alias for the
-	      foreign type specified by foreign-type-spec. If foreign-type-spec
-	      is a named structure or union type, additionally defines that
-	      structure or union type.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">If name is NIL, foreign-type-spec must be a named foreign
-	      struct or union definition, in which case the foreign structure
-	      or
-	      union definition is put in effect.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Note that there are two separate namespaces for foreign
-	      type names, one for the names of ordinary types and one for
-	      the names of structs and unions.  Which one
-	      <em class="varname">name</em> refers to depends on
-	      <em class="varname">foreign-type-spec</em> in the obvious manner.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_external"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>external</strong></span> name =&gt; entry
-	    </code>
-            </div>
-            <div class="refentrytitle">Resolves a reference to an external symbol which
-	      is defined in a shared library.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46722288"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---
-		        a simple-string which names an external symbol.
-		        Case-sensitive.
-		      </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">entry</span></i>---
-		        an object of type EXTERNAL-ENTRY-POINT which maintains
-		        the address of the foreign symbol named by
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">name</em>.
-		      </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46727152"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">If there is already an EXTERNAL-ENTRY-POINT for
-	      the symbol named by <em class="varname">name</em>, finds it and
-	      returns it.  If not, creates one and returns it.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Tries to resolve the entry point to a memory address,
-	      and identify the containing library.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Be aware that under Darwin, external functions which
-	      are callable from C have underscores prepended to their names,
-	      as in "_fopen".</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_external-call"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>external-call</strong></span> name
-	      {arg-type-specifier arg}* <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> result-type-specifier
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46735456"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---A lisp string. See external, above.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">arg-type-specifer</span></i>---One of the foreign argument-type keywords, described
-		        above, or an equivalent <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="#Specifying-And-Using-Foreign-Types" title="13.1.Â Specifying And Using Foreign Types">foreign
-		          type specifier</a>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">arg</span></i>---A lisp value of type indicated by the corresponding
-		        arg-type-specifier</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result-type-specifier</span></i>---One of the foreign argument-type keywords, described
-		        above, or an equivalent <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="#Specifying-And-Using-Foreign-Types" title="13.1.Â Specifying And Using Foreign Types">foreign
-		          type specifier</a>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46744288"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Calls the foreign function at the address obtained by
-	      resolving the external-entry-point associated with name, passing
-	      the values of each arg as a foreign argument of type indicated by
-	      the corresponding arg-type-specifier. Returns the foreign function
-	      result (coerced to a Lisp object of type indicated by
-	      result-type-specifier), or NIL if result-type-specifer is :VOID or
-	      NIL</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_Pff-call"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>%ff-call</strong></span> entrypoint
-	      {arg-type-keyword arg}* <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> result-type-keyword
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46751424"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">entrypoint</span></i>---A fixnum or MACPTR</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">arg-type-keyword</span></i>---One of the foreign argument-type keywords, described
-		        above</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">arg</span></i>---A lisp value of type indicated by the corresponding
-		        arg-type-keyword</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result-type-keyword</span></i>---One of the foreign argument-type keywords, described
-		        above</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46758976"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Calls the foreign function at address entrypoint passing the
-	      values of each arg as a foreign argument of type indicated by the
-	      corresponding arg-type-keyword. Returns the foreign function
-	      result (coerced to a Lisp object of type indicated by
-	      result-type-keyword), or NIL if result-type-keyword is :VOID or
-	      NIL</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_ff-call"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>ff-call</strong></span> entrypoint
-	      {arg-type-specifier arg}* <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> result-type-specifier
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46766048"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">entrypoint</span></i>---A fixnum or MACPTR</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">arg-type-specifer</span></i>---One of the foreign argument-type keywords, described
-		        above, or an equivalent <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="#Specifying-And-Using-Foreign-Types" title="13.1.Â Specifying And Using Foreign Types">foreign
-		          type specifier</a>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">arg</span></i>---A lisp value of type indicated by the corresponding
-		        arg-type-specifier</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result-type-specifier</span></i>---One of the foreign argument-type keywords, described
-		        above, or an equivalent <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="#Specifying-And-Using-Foreign-Types" title="13.1.Â Specifying And Using Foreign Types">foreign
-		          type specifier</a>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46774880"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Calls the foreign function at address entrypoint passing the
-	      values of each arg as a foreign argument of type indicated by the
-	      corresponding arg-type-specifier. Returns the foreign function
-	      result (coerced to a Lisp object of type indicated by
-	      result-type-specifier), or NIL if result-type-specifer is :VOID or
-	      NIL</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_foreign-symbol-address"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>foreign-symbol-address</strong></span> name
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46781568"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---A lisp string.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46784256"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Tries to resolve the address of the foreign symbol
-	      name. If successful, returns that address encapsulated in
-	      <a class="link" href="#Referencing-and-Using-Foreign-Memory-Addresses" title="13.3.Â Referencing and Using Foreign Memory Addresses">a
-	        MACPTR</a>, else returns NIL.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_foreign-symbol-entry"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>foreign-symbol-entry</strong></span> name
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46791344"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---A lisp string.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46794032"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Tries to resolve the address of the foreign symbol name. If
-	      successful, returns a fixnum representation of that address, else
-	      returns NIL.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_free"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>free</strong></span> ptr
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46800528"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">ptr</span></i>---A <code xmlns="http://www.w3.org/1999/xhtml" class="code">MACPTR</code> that points to a block of
-		      foreign, heap-allocated memory.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46803680"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">In <code class="literal">CCL</code> 1.2 and later, the <code class="code">CCL:FREE</code>
-          function invokes the foreign <code class="code">free</code> function from
-          the platform's standard C library to deallocate a block of
-          foreign memory.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Previous versions of <code class="literal">CCL</code> implemented this function,
-          but it was not exported.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">If the argument to <code class="code">CCL:FREE</code> is a gcable
-        pointer (for example, an object returned
-        by <code class="code">MAKE-GCABLE-RECORD</code>)
-        then <code class="code">CCL:FREE</code> informs the garbage collector that
-        the foreign memory has been deallocated before calling the
-        foreign <code class="code">free</code> function.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_make-heap-ivector"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-heap-ivector</strong></span> element-count element-type
-	      =&gt; vector macptr size
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46814832"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">element-count</span></i>---A positive integer.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">element-type</span></i>---A type specifier.
-		      
-		      </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">vector</span></i>---A lisp vector.  The initial contents are
-		      undefined.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">mactpr</span></i>---A pointer to the first byte of data stored
-		      in the vector.
-		      </p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">size</span></i>---The size of the returned vector in octets.
-		      </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46823840"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	An "ivector" is a one-dimensional array that's specialized to
-	a numeric or character element type.
-	</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	  <code class="code">MAKE-HEAP-IVECTOR</code> allocates an ivector in
-	  foreign memory.  The GC will never move this vector, and
-	  will in fact not pay any attention to it at all.  The
-	  returned pointer to it can therefore be passed safely to
-	  foreign code.
-	</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	  The vector must be explicitly deallocated with
-	  <code class="code">DISPOSE-HEAP-IVECTOR</code>.
-	</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_makegcable--record"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-gcable-record</strong></span> typespec
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> initforms =&gt; result
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46832432"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">typespec</span></i>---A foreign type specifier, or a keyword which is used
-		        as the name of a foreign struct or union.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">initforms</span></i>---If the type denoted by <em xmlns="http://www.w3.org/1999/xhtml" class="varname">typespec</em>
-		        is scalar, a single value appropriate for that type;
-		        otherwise, a list of alternating field names and
-		        values appropriate for the types of those fields.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---
-		        A <span xmlns="http://www.w3.org/1999/xhtml" class="type"><strong>macptr</strong></span> which encapsulates the address of a
-		        newly-allocated record on the foreign heap. The foreign
-		        object returned by <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-gcable-record</strong></span>
-		        is freed when the garbage collector determines that
-		        the <code xmlns="http://www.w3.org/1999/xhtml" class="code">MACPTR</code> object that describes it is
-		        unreachable.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46840528"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Allocates a block of foreign memory suitable to hold the foreign
-	      type described by <code class="code">typespec</code>, in the same manner
-	      as <a class="link" href="#anchor_make-record">MAKE-RECORD</a>. In
-	      addition, <code class="code">MAKE-GCABLE-RECORD</code> marks the
-	      returned object gcable; in other words, it informs the garbage
-	      collector that it may reclaim the object when it becomes
-	      unreachable.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">In all other respects, <code class="code">MAKE-GCABLE-RECORD</code> works
-          the same way
-          as <a class="link" href="#anchor_make-record">MAKE-RECORD</a></p>
-                <p xmlns="http://www.w3.org/1999/xhtml"> When using gcable pointers, it's important to remember the
-          distinction between a <code class="code">MACPTR</code> object (which is a
-          lisp object, more or less like any other) and the block of
-          foreign memory that the <code class="code">MACPTR</code> object points to.
-          If a gcable <code class="code">MACPTR</code> object is the only thing in the
-          world (lisp world or foreign world) that references the
-          underlying block of foreign memory, then freeing the foreign
-          memory when it becomes impossible to reference it is convenient
-          and sane.  If other lisp <code class="code">MACPTR</code>s reference the
-          underlying block of foreign memory or if the address of that
-          foreign memory is passed to and retained by foreign code, having
-          the GC free the memory may have unpleasant consequences if those
-          other references are used.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Take care, therefore, not to create a gcable record unless
-          you are sure that the returned <code class="code">MACPTR</code> will be the
-          only reference to the allocated memory that will ever be
-          used.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_make-record"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-record</strong></span> typespec
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> initforms =&gt; result
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46855200"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">typespec</span></i>---A foreign type specifier, or a keyword which is used
-		        as the name of a foreign struct or union.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">initforms</span></i>---If the type denoted by <em xmlns="http://www.w3.org/1999/xhtml" class="varname">typespec</em>
-		        is scalar, a single value appropriate for that type;
-		        otherwise, a list of alternating field names and
-		        values appropriate for the types of those fields.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">result</span></i>---
-		        A <span xmlns="http://www.w3.org/1999/xhtml" class="type"><strong>macptr</strong></span> which encapsulates the address of a
-		        newly-allocated record on the foreign heap.
-		      </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46862160"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Expands into code which allocates and initializes
-	      an instance of the type 
-	      denoted by <em class="varname">typespec</em>, on the foreign
-	      heap.  The record is allocated using the C function
-	      <span class="function"><strong>malloc</strong></span>, and the user of
-	      <span class="function"><strong>make-record</strong></span> must explicitly call
-	      the function <span class="function"><strong>CCL:FREE</strong></span> to deallocate the
-	      record, when it is no longer needed.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      If <em class="varname">initforms</em> is provided, its value
-	      or values are used in the initialization.  When the type
-	      is a scalar, <em class="varname">initforms</em> is either a single
-	      value which can be coerced to that type, or no value, in which
-	      case binary 0 is used.  When the type is a <span class="type"><strong>struct</strong></span>,
-	      <em class="varname">initforms</em> is a list, giving field names
-	      and the values for each.  Each field is treated in the same way
-	      as a scalar is: If a value for it is given, it must be
-	      coerceable to the field's type; if not, binary 0 is used.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      When the type is an array, <em class="varname">initforms</em> may
-	      not be provided, because <span class="function"><strong>make-record</strong></span>
-	      cannot initialize its values.  <span class="function"><strong>make-record</strong></span>
-	      is also unable to initialize fields of a <span class="type"><strong>struct</strong></span>
-	      which are themselves
-	      <span class="type"><strong>struct</strong></span>s.  The user of
-	      <span class="function"><strong>make-record</strong></span> should set these values
-	      by another means.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      A possibly-significant limitation is that it must be possible to
-	      find the foreign type at the time the macro is expanded;
-	      <span class="function"><strong>make-record</strong></span> signals an error if this is
-	      not the case.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46872912"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      It is inconvenient that <span class="function"><strong>make-record</strong></span> is a
-	      macro, because this means that <em class="varname">typespec</em>
-	      cannot be a variable; it must be an immediate value.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      If it weren't for this requirement,
-	      <span class="function"><strong>make-record</strong></span> could be a function.  However,
-	      that would mean that any stand-alone application using it would
-	      have to include a copy of the interface database
-	      (see <a class="xref" href="#The-Interface-Database" title="13.4.Â The Interface Database">SectionÂ 13.4, âThe Interface Databaseâ</a>), which is undesirable
-	      because it's large.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_open-shared-library"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>open-shared-library</strong></span> name =&gt; library
-	    </code>
-            </div>
-            <div class="refentrytitle">Asks the operating system to load a shared library
-	      for CCL to use.</div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46882928"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---A SIMPLE-STRING which is presumed to be the so-name of
-		        or a filesystem path to the library.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">library</span></i>---An object of type SHLIB which describes the
-		        library denoted by <em xmlns="http://www.w3.org/1999/xhtml" class="varname">name</em>.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46887744"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">If the library denoted by <em class="varname">name</em> can
-	      be loaded by the
-	      operating system, returns an object of type SHLIB that describes
-	      the library; if the library is already open, increments a
-	      reference count. If the library can't be loaded, signals a
-	      SIMPLE-ERROR which contains an often-cryptic message from the
-	      operating system.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46889616"></a>
-                <div class="header">Examples:</div>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">;;; Try to do something simple.
-          ? (open-shared-library "libgtk.so")
-          &gt; Error: Error opening shared library "libgtk.so": /usr/lib/libgtk.so: undefined symbol: gdk_threads_mutex
-          &gt; While executing: OPEN-SHARED-LIBRARY
-
-          ;;; Grovel around, curse, and try to find out where "gdk_threads_mutex"
-          ;;; might be defined. Then try again:
-
-          ? (open-shared-library "libgdk.so")
-          #&lt;SHLIB libgdk.so #x3046DBB6&gt;
-
-          ? (open-shared-library "libgtk.so")
-          #&lt;SHLIB libgtk.so #x3046DC86&gt;
-
-          ;;; Reference an external symbol defined in one of those libraries.
-
-          ? (external "gtk_main")
-          #&lt;EXTERNAL-ENTRY-POINT "gtk_main" (#x012C3004) libgtk.so #x3046FE46&gt;
-
-          ;;; Close those libraries.
-
-          ? (close-shared-library "libgtk.so")
-          T
-
-          ? (close-shared-library "libgdk.so")
-          T
-
-          ;;; Reference the external symbol again.
-
-          ? (external "gtk_main")
-          #&lt;EXTERNAL-ENTRY-POINT "gtk_main" {unresolved} libgtk.so #x3046FE46&gt;</pre>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46892096"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">It would be helpful to describe what an soname is and give
-	      examples of one.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Does the SHLIB still get returned if the library is
-	      already open?</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_pref"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>pref</strong></span> ptr accessor-form
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46898992"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">ptr</span></i>---<a xmlns="http://www.w3.org/1999/xhtml" class="link" href="#Referencing-and-Using-Foreign-Memory-Addresses" title="13.3.Â Referencing and Using Foreign Memory Addresses">a MACPTR</a>.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">accessor-form</span></i>---a keyword which names a foreign type or record, as
-		        described in <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#Foreign-type--record--and-field-names" title="13.8.3.Â Foreign type, record, and field names">SectionÂ 13.8.3, âForeign type, record, and field namesâ</a>.
-		      </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46904304"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">References an instance of a foreign type (or a component of
-	      a foreign type) accessible via ptr.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Expands into code which references the indicated scalar type
-	      or component, or returns a pointer to a composite type.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">PREF can be used with SETF.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">RREF is a deprecated alternative to PREF. It accepts a
-	      :STORAGE keyword and rather loudly ignores it.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_Preference-external-entry-point"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>%reference-external-entry-point</strong></span> eep
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46912160"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">eep</span></i>---An EXTERNAL-ENTRY-POINT, as obtained by the EXTERNAL
-		        macro.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46914928"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Tries to resolve the address of the EXTERNAL-ENTRY-POINT
-	      eep; returns a fixnum representation of that address if
-	      successful, else signals an error.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_rlet"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>rlet</strong></span> (var typespec <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> initforms)*
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46923456"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">var</span></i>---A symbol (a lisp variable)</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">typespec</span></i>---A foreign type specifier or foreign record name.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">initforms</span></i>---As described above, for
-		        <a xmlns="http://www.w3.org/1999/xhtml" class="xref" href="#m_make-record" title="Macro MAKE-RECORD"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-record</b></a></p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46929584"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Executes <em class="varname">body</em>
-	      in an environment in which each var is bound
-	      to <a class="link" href="#Referencing-and-Using-Foreign-Memory-Addresses" title="13.3.Â Referencing and Using Foreign Memory Addresses">a MACPTR</a> encapsulating the
-	      address of a stack-allocated foreign memory block, allocated and
-	      initialized from typespec and initforms as per
-	      <a class="xref" href="#m_make-record" title="Macro MAKE-RECORD"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">make-record</b></a>.
-	      Returns whatever value(s) <em class="varname">body</em>
-	      returns.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Record fields that aren't explicitly initialized have
-	      unspecified contents.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_rletz"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>rletz</strong></span> (var typespec <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em> initforms)*
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46939296"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">var</span></i>---A symbol (a lisp variable)</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">typespec</span></i>---A foreign type specifier or foreign record name.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">initforms</span></i>---As described above, for ccl:make-record</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46945056"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Executes body in an environment in which each var is
-	      bound to <a class="link" href="#Referencing-and-Using-Foreign-Memory-Addresses" title="13.3.Â Referencing and Using Foreign Memory Addresses">a
-	        MACPTR</a> encapsulating the address of a stack-allocated
-	      foreign memory block, allocated and initialized from
-	      typespec and initforms as ccl:make-record.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns whatever value(s) body returns.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Unlike rlet, record fields that aren't explicitly
-	      initialized are set to binary 0.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_terminate-when-unreachable"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>terminate-when-unreachable</strong></span> object
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46953136"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">object</span></i>---A CLOS object of a class for which there exists
-		        a method of the generic function
-		        <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>ccl:terminate</strong></span>.
-		      </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46956560"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      The "termination" mechanism is a way to have the garbage
-	      collector run a function right before an object is about to
-	      become garbage.  It is very similar to the "finalization"
-	      mechanism which Java has.  It is not standard Common Lisp,
-	      although other Lisp implementations have similar features.
-	      It is useful when there is some sort of special cleanup,
-	      deallocation, or releasing of resources which needs to happen
-	      when a certain object is no longer being used.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      When the garbage collector discovers that an object is no
-	      longer referred to anywhere in the program, it deallocates
-	      that object, freeing its memory.  However, if
-	      <span class="function"><strong>ccl:terminate-when-unreachable</strong></span> has been
-	      called on the object at any time, the garbage collector first
-	      invokes the generic function <span class="function"><strong>ccl:terminate</strong></span>,
-	      passing it the object as a parameter.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Therefore, to make termination do something useful, you need to
-	      define a method on <span class="function"><strong>ccl:terminate</strong></span>.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Because calling
-	      <span class="function"><strong>ccl:terminate-when-unreachable</strong></span> only
-	      affects a single object, rather than all objects of its
-	      class, you
-	      may wish to put a call to it in the
-	      <span class="function"><strong>initialize-instance</strong></span> method of a
-	      class.  Of course, this is only appropriate if you do in fact
-	      want to use termination for all objects of a given class.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46963312"></a>
-                <div class="header">Example:</div>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-          (defclass resource-wrapper ()
-            ((resource :accessor resource)))
-
-          (defmethod initialize-instance :after ((x resource-wrapper) &amp;rest initargs)
-             (ccl:terminate-when-unreachable x))
-
-          (defmethod ccl:terminate ((x resource-wrapper))
-             (when (resource x)
-                (deallocate (resource x))))</pre>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46965072"></a>
-                <div class="header">See Also:</div>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="simplelist">
-                  <a class="xref" href="#Tutorial--Allocating-Foreign-Data-on-the-Lisp-Heap" title="13.11.Â Tutorial: Allocating Foreign Data on the Lisp Heap">SectionÂ 13.11, âTutorial: Allocating Foreign Data on the Lisp Heap â</a>
-                </span>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_unuse-interface-dir"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>unuse-interface-dir</strong></span> dir-id
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46972256"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">dir-id</span></i>---A keyword whose pname, mapped to lower case, names a
-		        subdirectory of "ccl:headers;" (or
-		        "ccl:darwin-headers;")</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46975088"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Tells <code class="literal">CCL</code> to remove the interface directory denoted by
-	      dir-id from the list of interface directories which are
-	      consulted for
-	      foreign type and function information. Returns T if the directory
-	      was on the search list, NIL otherwise.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_use-interface-dir"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	      <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>use-interface-dir</strong></span> dir-id
-	    </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46982304"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">dir-id</span></i>---A keyword whose pname, mapped to lower case, names a
-		        subdirectory of "ccl:headers;" (or
-		        "ccl:darwin-headers;")</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46985136"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Tells <code class="literal">CCL</code> to add the interface directory denoted by
-	      dir-id to the list of interface directories which it consults for
-	      foreign type and function information. Arranges that that
-	      directory is searched before any others.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Note that <span class="function"><strong>use-interface-dir</strong></span>
-	      merely adds an entry
-	      to a search list.
-	      If the named directory doesn't exist in the file system
-	      or doesn't
-	      contain a set of database files, a runtime error may occur
-	      when <code class="literal">CCL</code>
-	      tries to open some database file in that directory, and it
-	      will try to
-	      open such a database file whenever it needs to find any
-	      foreign type or
-	      function information. <a class="xref" href="#f_unuse-interface-dir" title="Function UNUSE-INTERFACE-DIR"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">unuse-interface-dir</b></a>
-	      may come in
-	      handy in that case.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp46989728"></a>
-                <div class="header">Examples:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">One typically wants interface information to be
-	      available at compile-time (or, in many cases, at read-time).
-	      A typical idiom would be:</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">(eval-when (:compile-toplevel :execute)
-          (use-interface-dir :GTK))</pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">Using the :GTK interface directory makes available
-	      information on
-	      foreign types, functions, and constants.  It's generally
-	      necessary to
-	      load foreign libraries before actually calling the
-	      foreign code, which for GTK can be done like this:</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">(load-gtk-libraries)</pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">It should now be possible to do things like:</p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">(#_gtk_widget_destroy w)</pre>
-              </div>
-            </div>
-          </p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="The-Objective-C-Bridge"></a>ChapterÂ 14.Â The Objective-C Bridge</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#Objective-C-Changes-1.2">14.1. Changes in 1.2</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Using-Objective-C-Classes">14.2. Using Objective-C Classes</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Instantiating-Objective-C-Objects">14.3. Instantiating Objective-C Objects</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Calling-Objective-C-Methods">14.4. Calling Objective-C Methods</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Type-Coercion-for-ObjC-Method-Calls">14.4.1. Type Coercion for Objective-C Method Calls</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Methods-which-Return-Structures">14.4.2. Methods which Return Structures</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Variable-Arity-Messages">14.4.3. Variable-Arity Messages</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Optimization">14.4.4. Optimization</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Defining-Objective-C-Classes">14.5. Defining Objective-C Classes</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Defining-classes-with-foreign-slots">14.5.1. Defining classes with foreign slots</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Defining-classes-with-Lisp-slots">14.5.2. Defining classes with Lisp slots</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Defining-Objective-C-Methods">14.6. Defining Objective-C Methods</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Using-define-objc-method">14.6.1. Using <code class="literal">define-objc-method</code></a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Using-objc-defmethod">14.6.2. Using <code class="literal">objc:defmethod</code></a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Method-Redefinition-Constraints">14.6.3. Method Redefinition Constraints</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Loading-Objc-Frameworks">14.7. Loading Frameworks</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#How-Objective-C-Names-are-Mapped-to-Lisp-Symbols">14.8. How Objective-C Names are Mapped to Lisp Symbols</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <p xmlns="http://www.w3.org/1999/xhtml">Mac OS X APIs use a language called Objective-C, which is
-    approximately C with some object-oriented extensions modeled on
-    Smalltalk.  The Objective-C bridge makes it possible to work with
-    Objective-C objects and classes from Lisp, and to define classes
-    in Lisp which can be used by Objective-C.</p>
-        <p xmlns="http://www.w3.org/1999/xhtml">The ultimate purpose of the Objective-C and Cocoa bridges is
-    to make Cocoa (the standard user-interface framework on Mac OS X)
-    as easy as possible to use from Clozure CL, in order to support the
-    development of GUI applications and IDEs on Mac OS X (and on any
-    platform that supports Objective-C, such as GNUStep).  The
-    eventual goal, which is much closer than it used to be, is
-    complete integration of Cocoa into CLOS.</p>
-        <p xmlns="http://www.w3.org/1999/xhtml">The current release provides Lisp-like syntax and naming
-    conventions for the basic Objective-C operations, with automatic type
-    processing and messages checked for validity at compile-time.  It
-    also provides some convenience facilities for working with
-    Cocoa.</p>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Objective-C-Changes-1.2"></a>14.1.Â Changes in 1.2</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Version 1.2 of Clozure CL exports most of the useful symbols
-    described in this chapter; in previous releases, most of them were
-    private in the <code class="literal">CCL</code> package.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">There are several new reader macros that make it much more
-    convenient than before to refer to several classes of symbols used
-    with the Objective-C bridge. For a full description of these
-    reader-macros, see
-    the <a class="link" href="#Foreign-Function-Interface-Dictionary" title="13.12.Â The Foreign-Function-Interface Dictionary">Foreign-Function-Interface
-    Dictionary</a>, especially the entries at the beginning,
-    describing reader macros.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">As in previous releases, 32-bit versions of Clozure CL use 32-bit
-    floats and integers in data structures that describe geometry,
-    font sizes and metrics, and so on. 64-bit versions of Clozure CL use
-    64-bit values where appropriate.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The Objective-C bridge defines the
-      type <code class="literal">NS:CGFLOAT</code> as the Lisp type of the preferred
-      floating-point type on the current platform, and defines the
-      constant <code class="literal">NS:+CGFLOAT+</code>.  On DarwinPPC32, the foreign
-      types <code class="literal">:cgfloat</code>, <code class="literal">:&lt;NSUI&gt;nteger</code>,
-      and
-      <code class="literal">:&lt;NSI&gt;nteger</code> are defined by the Objective-C
-      bridge (as 32-bit float, 32-bit unsigned integer, and 32-bit
-      signed integer, respectively); these types are defined as 64-bit
-      variants in the 64-bit interfaces.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Every Objective-C class is now properly named, either with a
-      name exported from the <code class="literal">NS</code> package (in the case of a
-      predefined class declared in the interface files) or with the
-      name provided in the <code class="literal">DEFCLASS</code> form (with <code class="literal">:METACLASS</code>
-      <code class="literal">NS:+NS-OBJECT</code>) which defines the class from Lisp.
-      The class's Lisp name is now proclaimed to be a "static"
-      variable (as if by <code class="literal">DEFSTATIC</code>, as described in the
-      <a class="link" href="#Static_Variables" title="4.8.Â Static Variables">"Static Variables"
-      section</a>) and given the class object as its value.  In
-      other words:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(send (find-class 'ns:ns-application) 'shared-application)
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">and</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(send ns:ns-application 'shared-application)
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">are equivalent.  (Since it's not legal to bind a "static"
-  variable, it may be necessary to rename some things so that
-  unrelated variables whose names coincidentally conflict with
-  Objective-C class names don't do so.)</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Using-Objective-C-Classes"></a>14.2.Â Using Objective-C Classes</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The class of most standard CLOS classes is named
-      STANDARD-CLASS. In the Objective-C object model, each class is
-      an instance of a (usually unique) metaclass, which is itself an
-      instance of a "base" metaclass (often the metaclass of the class
-      named "NSObject".) So, the Objective-C class named "NSWindow"
-      and the Objective-C class "NSArray" are (sole) instances of
-      their distinct metaclasses whose names are also "NSWindow" and
-      "NSArray", respectively. (In the Objective-C world, it's much
-      more common and useful to specialize class behavior such as
-      instance allocation.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">When Clozure CL first loads foreign libraries containing
-      Objective-C classes, it identifies the classes they contain. The
-      foreign class name, such as "NSWindow", is mapped to an external
-      symbol in the "NS" package via the bridge's translation rules,
-      such as NS:NS-WINDOW.  A similar transformation happens to the
-      metaclass name, with a "+" prepended, yielding something like
-      NS:+NS-WINDOW.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">These classes are integrated into CLOS such that the
-      metaclass is an instance of the class OBJC:OBJC-METACLASS and
-      the class
-      is an instance of the metaclass. SLOT-DESCRIPTION metaobjects are
-      created for each instance variable, and the class and metaclass go
-      through something very similar to the "standard" CLOS class
-      initialization protocol (with a difference being that these classes
-      have already been allocated.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Performing all this initialization, which is done when you
-      (require "COCOA"), currently takes several
-      seconds; it could conceivably be sped up some, but it's never likely
-      to be fast.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">When the process is complete, CLOS is aware of several hundred
-      new Objective-C classes and their metaclasses. Clozure CL's runtime system can
-      reliably recognize MACPTRs to Objective-C classes as being CLASS objects, and
-      can (fairly reliably but heuristically) recognize instances of those
-      classes (though there are complicating factors here; see below.)
-      SLOT-VALUE can be used to access (and, with care, set) instance
-      variables in Objective-C instances. To see this, do:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? (require "COCOA")
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">and, after waiting a bit longer for a Cocoa listener window to
-      appear, activate that Cocoa listener and do:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">? (describe (ccl::send ccl::*NSApp* 'key-window))
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">This sends a message asking for the key window, which is the window
-      that has the input focus (often the frontmost), and then describes
-      it. As we can see, NS:NS-WINDOWs have lots of interesting slots.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Instantiating-Objective-C-Objects"></a>14.3.Â Instantiating Objective-C Objects</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Making an instance of an Objective-C class (whether the class in
-      question is predefined or defined by the application) involves
-      calling MAKE-INSTANCE with the class and a set of initargs as
-      arguments.  As with STANDARD-CLASS, making an instance involves
-      initializing (with INITIALIZE-INSTANCE) an object allocated with
-      ALLOCATE-INSTANCE.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For example, you can create an ns:ns-number like this:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? (make-instance 'ns:ns-number :init-with-int 42)
-      #&lt;NS-CF-NUMBER 42 (#x85962210)&gt;
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">It's worth looking at how this would be done if you were
-      writing in Objective C:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      [[NSNumber alloc] initWithInt: 42]
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Allocating an instance of an Objective-C class involves sending the
-      class an "alloc" message, and then using those initargs that
-      <span class="emphasis"><em>don't</em></span> correspond to slot initargs as the
-      "init" message to be sent to the newly-allocated instance.  So, the
-      example above could have been done more verbosely as:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? (defvar *n* (ccl::send (find-class 'ns:ns-number) 'alloc))
-      *N*
-
-      ? (setq *n* (ccl::send *n* :init-with-int 42))
-      #&lt;NS-CF-NUMBER 42 (#x16D340)&gt;
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">That setq is important; this is a case where init
-      decides to replace the object and return the new one, instead
-      of modifying the existing one.
-      In fact, if you leave out the setq and
-      then try to view the value of *N*, Clozure CL will freeze.  There's
-      little reason to ever do it this way; this is just to show
-      what's going on.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">You've seen that an Objective-C initialization method doesn't have to
-      return the same object it was passed.  In fact, it doesn't have
-      to return any object at all; in this case, the initialization fails
-      and make-instance returns nil.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">In some special cases, such as loading an ns:ns-window-controller
-      from a .nib file, it may be necessary for you to pass the
-      instance itself as one of the parameters to the initialization
-      method.  It goes like this:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      ? (defvar *controller*
-      (make-instance 'ns:ns-window-controller))
-      *CONTROLLER*
-
-      ? (setq *controller*
-      (ccl::send *controller*
-      :init-with-window-nib-name #@"DataWindow"
-      :owner *controller*))
-      #&lt;NS-WINDOW-CONTROLLER &lt;NSWindowController: 0x1fb520&gt; (#x1FB520)&gt;
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">This example calls (make-instance) with no initargs.  When you
-      do this, the object is only allocated, and not initialized.  It
-      then sends the "init" message to do the initialization by hand.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">There is an alternative API for instantiating Objective-C
-      classes. You can
-      call <code class="literal">OBJC:MAKE-OBJC-INSTANCE</code>, passing it the
-      name of the Objective-C class as a string. In previous
-      releases, <code class="literal">OBJC:MAKE-OBJC-INSTANCE</code> could be
-      more efficient than <code class="literal">OBJC:MAKE-INSTANCE</code> in
-      cases where the class did not define any Lisp slots; this is no
-      longer the case. You can now
-      regard <code class="literal">OBJC:MAKE-OBJC-INSTANCE</code> as completely
-      equivalent to <code class="literal">OBJC:MAKE-INSTANCE</code>, except that
-      you can pass a string for the classname, which may be convenient
-      in the case that the classname is in some way unusual.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Calling-Objective-C-Methods"></a>14.4.Â Calling Objective-C Methods</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">In Objective-C, methods are called "messages", and there's
-      a special syntax to send a message to an object:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      [w alphaValue]
-      [w setAlphaValue: 0.5]
-      [v mouse: p inRect: r]
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">The first line sends the method "alphaValue" to the object
-      <code class="literal">w</code>, with no parameters.  The second line sends
-      the method "setAlphaValue", with the parameter 0.5.  The third
-      line sends the method "mouse:inRect:" - yes, all one long word -
-      with the parameters <code class="literal">p</code> and
-      <code class="literal">r</code>.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">In Lisp, these same three lines are:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      (send w 'alpha-value)
-      (send w :set-alpha-value 0.5)
-      (send v :mouse p :in-rect r)
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Notice that when a method has no parameters, its name is an ordinary
-      symbol (it doesn't matter what package the symbol is in, as
-      only its name is checked).  When a method has parameters,
-      each part of its name is a keyword, and the keywords alternate
-      with the values.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">These two lines break those rules, and both  will
-      result in error messages:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-      (send w :alpha-value)
-      (send w 'set-alpha-value 0.5)
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Instead of (send), you can also invoke (send-super), with the
-      same interface.  It has roughly the same purpose as CLOS's
-      (call-next-method); when you use (send-super), the message is
-      handled by the superclass.  This can be used to get at the
-      original implementation of a method when it is shadowed by a
-      method in your subclass.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Type-Coercion-for-ObjC-Method-Calls"></a>14.4.1.Â Type Coercion for Objective-C Method Calls</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL's FFI handles many common conversions between
-        Lisp and foreign data, such as unboxing floating-point args
-        and boxing floating-point results.  The bridge adds a few more
-        automatic conversions:</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">NIL is equivalent to (%NULL-PTR) for any message
-        argument that requires a pointer.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">T/NIL are equivalent to #$YES/#$NO for any boolean argument.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">A #$YES/#$NO returned by any method that returns BOOL
-        will be automatically converted to T/NIL.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Methods-which-Return-Structures"></a>14.4.2.Â Methods which Return Structures</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Some Cocoa methods return small structures, such as
-        those used to represent points, rects, sizes and ranges. When
-        writing in Objective C, the compiler hides the implementation
-        details.  Unfortunately, in Lisp we must be slightly more
-        aware of them.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Methods which return structures are called in a special
-        way; the caller allocates space for the result, and passes a
-        pointer to it as an extra argument to the method.  This is
-        called a Structure Return, or STRET.  Don't look at me; I
-        don't name these things.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Here's a simple use of this in Objective C.  The first line
-	    sends the "bounds" message to v1, which returns a rectangle.
-	    The second line sends the "setBounds" message to v2, passing
-	    that same rectangle as a parameter.</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-        NSRect r = [v1 bounds];
-        [v2 setBounds r];
-	  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">In Lisp, we must explicitly allocate the memory, which
-        is done most easily and safely with <a class="xref" href="#m_rlet" title="Macro RLET"><b xmlns="http://www.w3.org/TR/xhtml1/transitional">rlet</b></a>.
-        We do it like this:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(rlet ((r :&lt;NSR&gt;ect))
-          (send/stret r v1 'bounds)
-          (send v2 :set-bounds r))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">The rlet allocates the storage (but doesn't initialize
-        it), and makes sure that it will be deallocated when we're
-        done.  It binds the variable r to refer to it.  The call to
-        <code class="literal">send/stret</code> is just like an ordinary call to
-        <code class="literal">send</code>, except that r is passed as an extra,
-        first parameter.  The third line, which calls
-        <code class="literal">send</code>, does not need to do anything special,
-        because there's nothing complicated about passing a structure
-        as a parameter.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In order to make STRETs easier to use, the bridge
-	    provides two conveniences.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">First, you can use the macros <code class="literal">slet</code>
-        and <code class="literal">slet*</code> to allocate and initialize local
-        variables to foreign structures in one step.  The example
-        above could have been written more tersely as:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(slet ((r (send v1 'bounds)))
-      (send v2 :set-bounds r))
-	  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">Second, when one call to <code class="literal">send</code> is made
-        inside another, the inner one has an implicit
-        <code class="literal">slet</code> around it.  So, one could in fact
-        just write:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(send v1 :set-bounds (send v2 'bounds))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">There are also several pseudo-functions provided for convenience
-        by the Objective-C compiler, to make objects of specific types. The
-        following are currently supported by the bridge: NS-MAKE-POINT,
-        NS-MAKE-RANGE, NS-MAKE-RECT, and NS-MAKE-SIZE.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">These pseudo-functions can be used within an SLET initform:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(slet ((p (ns-make-point 100.0 200.0)))
-      (send w :set-frame-origin p))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">Or within a call to <code class="literal">send</code>:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(send w :set-origin (ns-make-point 100.0 200.0))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">However, since these aren't real functions, a call like the
-        following won't work:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(setq p (ns-make-point 100.0 200.0))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">To extract fields from these objects, there are also some
-        convenience macros: NS-MAX-RANGE, NS-MIN-X,
-        NS-MIN-Y, NS-MAX-X, NS-MAX-Y, NS-MID-X, NS-MID-Y,
-        NS-HEIGHT, and NS-WIDTH.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Note that there is also a <code class="literal">send-super/stret</code>
-        for use within methods.  Like <code class="literal">send-super</code>,
-        it ignores any shadowing methods in a subclass, and calls the
-        version of a method which belongs to its superclass.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Variable-Arity-Messages"></a>14.4.3.Â Variable-Arity Messages</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-        There are a few messages in Cocoa which take variable numbers
-        of arguments. Perhaps the most common examples involve
-        formatted strings:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-[NSClass stringWithFormat: "%f %f" x y]
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">In Lisp, this would be written:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(send (find-class 'ns:ns-string)
-      :string-with-format #@"%f %f"
-      (:double-float x :double-float y))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">Note that it's necessary to specify the foreign types of the
-        variables (in this example, :double-float), because the
-        compiler has no general way of knowing these types.  (You
-        might think that it could parse the format string, but this
-        would only work for format strings which are not determined
-        at runtime.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Because the Objective-C runtime system does not provide any information
-        on which messages are variable arity, they must be explicitly
-        declared. The standard variable arity messages in Cocoa are
-        predeclared by the bridge.  If you need to declare a new
-        variable arity message, use
-        (DEFINE-VARIABLE-ARITY-MESSAGE "myVariableArityMessage:").</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Optimization"></a>14.4.4.Â Optimization</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The bridge works fairly hard to optimize message sends,
-        when it has enough information to do so.  There are two cases
-        when it does.  In either, a message send should be nearly as
-        efficient as when writing in Objective C.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The first case is when both the message and the
-        receiver's class are known at compile-time. In general, the
-        only way the receiver's class is known is if you declare it,
-        which you can do with either a DECLARE or a THE form.  For
-        example:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(send (the ns:ns-window w) 'center)
-	  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">Note that there is no way in Objective-C to name the class of a
-        class.  Thus the bridge provides a declaration, @METACLASS.
-        The type of an instance of "NSColor" is ns:ns-color.  The type
-        of the <span class="emphasis"><em>class</em></span> "NSColor" is (@metaclass
-        ns:ns-color):</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(let ((c (find-class 'ns:ns-color)))
-  (declare ((ccl::@metaclass ns:ns-color) c))
-  (send c 'white-color))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">The other case that allows optimization is when only
-        the message is known at compile-time, but its type signature
-        is unique. Of the more-than-6000 messages currently provided
-        by Cocoa, only about 50 of them have nonunique type
-        signatures.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">An example of a message with a type signature that is
-        not unique is SET.  It returns VOID for NSColor, but ID for
-        NSSet.  In order to optimize sends of messages with nonunique
-        type signatures, the class of the receiver must be declared at
-        compile-time.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If the type signature is nonunique or the message is
-        unknown at compile-time, then a slower runtime call must be
-        used.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">When the receiver's class is unknown, the bridge's
-        ability to optimize relies on a type-signature table which it
-        maintains.  When first loaded, the bridge initializes this
-        table by scanning every method of every Objective-C class.  When new
-        methods are defined later, the table must be updated.  This
-        happens automatically when you define methods in Lisp.  After
-        any other major change, such as loading an external framework,
-        you should rebuild the table:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (update-type-signatures)
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">Because <code class="literal">send</code> and its relatives
-        <code class="literal">send-super</code>, <code class="literal">send/stret</code>,
-        and <code class="literal">send-super/stret</code> are macros, they
-        cannot be <code class="literal">funcall</code>ed,
-        <code class="literal">apply</code>ed, or passed as arguments to
-        functions.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">To work around this, there are function equivalents to
-        them: <code class="literal">%send</code>,
-        <code class="literal">%send-super</code>,
-        <code class="literal">%send/stret</code>, and
-        <code class="literal">%send-super/stret</code>.  However, these
-        functions should be used only when the macros will not do,
-        because they are unable to optimize.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Defining-Objective-C-Classes"></a>14.5.Â Defining Objective-C Classes</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">You can define your own foreign classes, which can then be
-      passed to foreign functions; the methods which you implement in
-      Lisp will be made available to the foreign code as
-      callbacks.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">You can also define subclasses of existing classes,
-      implementing your subclass in Lisp even though the parent class
-      was in Objective C.  One such subclass is CCL::NS-LISP-STRING.
-      It is also particularly useful to make subclasses of
-      NS-WINDOW-CONTROLLER.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">We can use the MOP to define new Objective-C classes, but
-      we have to do something a little funny: the :METACLASS that we'd
-      want to use in a DEFCLASS option generally doesn't exist until
-      we've created the class (recall that Objective-C classes have, for the
-      sake of argument, unique and private metaclasses.) We can sort
-      of sleaze our way around this by specifying a known Objective-C
-      metaclass object name as the value of the DEFCLASS :METACLASS
-      object; the metaclass of the root class NS:NS-OBJECT,
-      NS:+NS-OBJECT, makes a good choice. To make a subclass of
-      NS:NS-WINDOW (that, for simplicity's sake, doesn't define any
-      new slots), we could do:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defclass example-window (ns:ns-window)
-  ()
-  (:metaclass ns:+ns-object))
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">That'll create a new Objective-C class named EXAMPLE-WINDOW whose
-      metaclass is the class named +EXAMPLE-WINDOW. The class will be
-      an object of type OBJC:OBJC-CLASS, and the metaclass will be of
-      type OBJC:OBJC-METACLASS.  EXAMPLE-WINDOW will be a subclass of
-      NS-WINDOW.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Defining-classes-with-foreign-slots"></a>14.5.1.Â Defining classes with foreign slots</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">If a slot specification in an Objective-C class
-        definition contains the keyword :FOREIGN-TYPE, the slot will
-        be a "foreign slot" (i.e. an Objective-C instance variable). Be aware
-        that it is an error to redefine an Objective-C class so that its
-        foreign slots change in any way, and Clozure CL doesn't do
-        anything consistent when you try to.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The value of the :FOREIGN-TYPE initarg should be a
-        foreign type specifier. For example, if we wanted (for some
-        reason) to define a subclass of NS:NS-WINDOW that kept track
-        of the number of key events it had received (and needed an
-        instance variable to keep that information in), we could
-        say:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defclass key-event-counting-window (ns:ns-window)
-  ((key-event-count :foreign-type :int
-                    :initform 0
-                    :accessor window-key-event-count))
-  (:metaclass ns:+ns-object))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">Foreign slots are always SLOT-BOUNDP, and the initform
-        above is redundant: foreign slots are initialized to binary
-        0.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Defining-classes-with-Lisp-slots"></a>14.5.2.Â Defining classes with Lisp slots</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">A slot specification in an Objective-C class definition that
-        doesn't contain the :FOREIGN-TYPE initarg defines a
-        pretty-much normal lisp slot that'll happen to be associated
-        with "an instance of a foreign class". For instance:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defclass hemlock-buffer-string (ns:ns-string)
-  ((hemlock-buffer :type hi::hemlock-buffer
-                   :initform hi::%make-hemlock-buffer
-                   :accessor string-hemlock-buffer))
-  (:metaclass ns:+ns-object))
-	  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">As one might expect, this has memory-management
-        implications: we have to maintain an association between a
-        MACPTR and a set of lisp objects (its slots) as long as the
-        Objective-C instance exists, and we have to ensure that the Objective-C
-        instance exists (does not have its -dealloc method called)
-        while lisp is trying to think of it as a first-class object
-        that can't be "deallocated" while it's still possible to
-        reference it. Associating one or more lisp objects with a
-        foreign instance is something that's often very useful; if you
-        were to do this "by hand", you'd have to face many of the same
-        memory-management issues.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Defining-Objective-C-Methods"></a>14.6.Â Defining Objective-C Methods</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">In Objective-C, unlike in CLOS, every method belongs to some
-      particular class.  This is probably not a strange concept to
-      you, because C++ and Java do the same thing.  When you use Lisp
-      to define Objective-C methods, it is only possible to define methods
-      belonging to Objective-C classes which have been defined in
-      Lisp.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">You can use either of two different macros to define methods
-      on Objective-C classes. <code class="literal">define-objc-method</code>
-      accepts a two-element list containing a message selector name
-      and a class name, and a body. <code class="literal">objc:defmethod</code>
-      superficially resembles the normal
-      CLOS <code class="literal">defmethod</code>, but creates methods on
-      Objective-C classes with the same restrictions as those created
-      by <code class="literal">define-objc-method</code>.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Using-define-objc-method"></a>14.6.1.Â Using <code class="literal">define-objc-method</code></h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">As described in the
-        section <a class="link" href="#Calling-Objective-C-Methods" title="14.4.Â Calling Objective-C Methods">Calling
-        Objective-C Methods</a>, the names of Objective-C methods
-        are broken into pieces, each piece followed by a parameter.
-        The types of all parameters must be explicitly
-        declared.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Consider a few examples, meant to illustrate the use
-        of <code class="literal">define-objc-method</code>. Let us define a
-        class to use in them:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defclass data-window-controller (ns:ns-window-controller)
-  ((window :foreign-type :id :accessor window)
-   (data :initform nil :accessor data))
-  (:metaclass ns:+ns-object))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">There's nothing special about this class.  It inherits from
-        <code class="literal">ns:ns-window-controller</code>.  It has two slots:
-        <code class="literal">window</code> is a foreign slot, stored in the Objective-C
-        world; and <code class="literal">data</code> is an ordinary slot, stored
-        in the Lisp world.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Here is an example of how to define a method which takes no
-        arguments:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(define-objc-method ((:id get-window)
-                     data-window-controller)
-    (window self))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">The return type of this method is the foreign type :id,
-        which is used for all Objective-C objects.  The name of the
-        method is
-        <code class="literal">get-window</code>.  The body of the method is the
-        single line <code class="literal">(window self)</code>.  The
-        variable <code class="literal">self</code> is bound, within the body, to
-        the instance that is receiving the message.  The call
-        to <code class="literal">window</code> uses the CLOS accessor to get the
-        value of the window field.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Here's an example that takes a parameter.  Notice that the
-        name of the method without a parameter was an ordinary symbol,
-        but with a parameter, it's a keyword:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(define-objc-method ((:id :init-with-multiplier (:int multiplier))
-                     data-window-controller)
-  (setf (data self) (make-array 100))
-  (dotimes (i 100)
-    (setf (aref (data self) i)
-          (* i multiplier)))
-  self)
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">To Objective-C code that uses the class, the name of this
-        method is <code class="literal">initWithMultiplier:</code>.  The name of
-        the parameter is
-        <code class="literal">multiplier</code>, and its type
-        is <code class="literal">:int</code>.  The body of the method does some
-        meaningless things.  Then it returns
-        <code class="literal">self</code>, because this is an initialization
-        method.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Here's an example with more than one parameter:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(define-objc-method ((:id :init-with-multiplier (:int multiplier)
-                          :and-addend (:int addend))
-                     data-window-controller)
-  (setf (data self) (make-array size))
-  (dotimes (i 100)
-    (setf (aref (data self) i)
-          (+ (* i multiplier)
-             addend)))
-  self)
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">To Objective-C, the name of this method is
-        <code class="literal">initWithMultiplier:andAddend:</code>.  Both
-        parameters are of type <code class="literal">:int</code>; the first is
-        named <code class="literal">multiplier</code>, and the second
-        is <code class="literal">addend</code>.  Again, the method returns
-        <code class="literal">self</code>.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Here is a method that does not return any value, a so-called
-        "void method".  Where our other methods
-        said <code class="literal">:id</code>, this one
-        says <code class="literal">:void</code> for the return type:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(define-objc-method ((:void :take-action (:id sender))
-                     data-window-controller)
-  (declare (ignore sender))
-  (dotimes (i 100)
-    (setf (aref (data self) i)
-          (- (aref (data self) i)))))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">This method would be called <code class="literal">takeAction:</code>
-        in Objective-C.  The convention for methods that are going to be
-        used as Cocoa actions is that they take one parameter, which is
-        the object responsible for triggering the action.  However, this
-        method doesn't actually need to use that parameter, so it
-        explicitly ignores it to avoid a compiler warning.  As promised,
-        the method doesn't return any value.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">There is also an alternate syntax, illustrated here.  The
-        following two method definitions are equivalent:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(define-objc-method ("applicationShouldTerminate:"
-                     "LispApplicationDelegate")
-    (:id sender :&lt;BOOL&gt;)
-    (declare (ignore sender))
-    nil)
-  
-(define-objc-method ((:&lt;BOOL&gt;
-                        :application-should-terminate sender)
-                       lisp-application-delegate)
-    (declare (ignore sender))
-    nil)
-      </pre>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Using-objc-defmethod"></a>14.6.2.Â Using <code class="literal">objc:defmethod</code></h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The macro <code class="literal">OBJC:DEFMETHOD</code> can be used to
-        define Objective-C methods.  It looks superficially like
-        <code class="literal">CL:DEFMETHOD</code> in some respects.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Its syntax is</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(OBC:DEFMETHOD name-and-result-type 
-               ((receiver-arg-and-class) <em class="varname">&amp;rest</em> other-args) 
-      <em class="varname">&amp;body</em> body)
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">name-and-result-type</code> is either an
-        Objective-C message name, for methods that return a value of
-        type <code class="literal">:ID</code>, or a list containing an
-        Objective-C message name and a foreign type specifier for
-        methods with a different foreign result type.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">receiver-arg-and-class</code> is a two-element
-        list whose first element is a variable name and whose second
-        element is the Lisp name of an Objective-C class or metaclass.
-        The receiver variable name can be any bindable lisp variable
-        name, but <code class="literal">SELF</code> might be a reasonable
-        choice.  The receiver variable is declared to be "unsettable";
-        i.e., it is an error to try to change the value of the
-        receiver in the body of the method definition.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">other-args</code> are either variable names
-            (denoting parameters of type <code class="literal">:ID</code>) or
-            2-element lists whose first element is a variable name and
-            whose second element is a foreign type specifier.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Consider this example:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(objc:defmethod (#/characterAtIndex: :unichar)
-    ((self hemlock-buffer-string) (index :&lt;NSUI&gt;nteger))
-  ...)
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">The method <code class="literal">characterAtIndex:</code>, when
-        invoked on an object of
-        class <code class="literal">HEMLOCK-BUFFER-STRING</code> with an
-        additional argument of
-        type <code class="literal">:&lt;NSU&gt;integer</code> returns a value of
-        type
-        <code class="literal">:unichar</code>.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Arguments that wind up as some pointer type other
-        than <code class="literal">:ID</code> (e.g. pointers, records passed by
-        value) are represented as typed foreign pointers, so that the
-        higher-level, type-checking accessors can be used on arguments
-        of
-        type <code class="literal">:ns-rect</code>, <code class="literal">:ns-point</code>,
-        and so on.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Within the body of methods defined
-        via <code class="literal">OBJC:DEFMETHOD</code>, the local function
-        <code class="literal">CL:CALL-NEXT-METHOD</code> is defined.  It isn't
-        quite as general as <code class="literal">CL:CALL-NEXT-METHOD</code> is
-        when used in a CLOS method, but it has some of the same
-        semantics.  It accepts as many arguments as are present in the
-        containing method's <code class="literal">other-args</code> list and
-        invokes version of the containing method that would have been
-        invoked on instances of the receiver's class's superclass with
-        the receiver and other provided arguments.  (The idiom of
-        passing the current method's arguments to the next method is
-        common enough that the <code class="literal">CALL-NEXT-METHOD</code> in
-        <code class="literal">OBJC:DEFMETHODs</code> should probably do this if
-        it receives no arguments.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">A method defined via <code class="literal">OBJC:DEFMETHOD</code>
-        that returns a structure "by value" can do so by returning a
-        record created via <code class="literal">MAKE-GCABLE-RECORD</code>, by
-        returning the value returned
-        via <code class="literal">CALL-NEXT-METHOD</code>, or by other similar
-        means. Behind the scenes, there may be a pre-allocated
-        instance of the record type (used to support native
-        structure-return conventions), and any value returned by the
-        method body will be copied to this internal record instance.
-        Within the body of a method defined
-        with <code class="literal">OBJC:DEFMETHOD</code> that's declared to
-        return a structure type, the local macro
-        <code class="literal">OBJC:RETURNING-FOREIGN-STRUCT</code> can be used
-        to access the internal structure. For example:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(objc:defmethod (#/reallyTinyRectangleAtPoint: :ns-rect) 
-  ((self really-tiny-view) (where :ns-point))
-  (objc:returning-foreign-struct (r)
-    (ns:init-ns-rect r (ns:ns-point-x where) (ns:ns-point-y where)
-                        single-float-epsilon single-float-epsilon)
-    r))
-       </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">If the <code class="literal">OBJC:DEFMETHOD</code> creates a new
-       method, then it displays a message to that effect. These
-       messages may be helpful in catching errors in the names of
-       method definitions. In addition, if
-       a <code class="literal">OBJC:DEFMETHOD</code> form redefines a method in
-       a way that changes its type signature, Clozure CL signals a
-       continuable error.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Method-Redefinition-Constraints"></a>14.6.3.Â Method Redefinition Constraints</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Objective C was not designed, as Lisp was, with runtime
-        redefinition in mind.  So, there are a few constraints about
-        how and when you can replace the definition of an Objective C
-        method.  Currently, if you break these rules, nothing will
-        collapse, but the behavior will be confusing; so
-        don't.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Objective C methods can be redefined at runtime, but
-        their signatures shouldn't change.  That is, the types of the
-        arguments and the return type have to stay the same.  The
-        reason for this is that changing the signature changes the
-        selector which is used to call the method.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">When a method has already been defined in one class, and
-        you define it in a subclass, shadowing the original method,
-        they must both have the same type signature.  There is no such
-        constraint, though, if the two classes aren't related and the
-        methods just happen to have the same name.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Loading-Objc-Frameworks"></a>14.7.Â Loading Frameworks</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">On Mac OS X, a framework is a structured directory
-      containing one or more shared libraries along with metadata such
-      as C and Objective-C header files. In some cases, frameworks may
-      also contain additional items such as executables.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Loading a framework means opening the shared libraries and
-      processing any declarations so that Clozure CL can subsequently call
-      its entry points and use its data structures. Clozure CL provides the
-      function <code class="literal">OBJC:LOAD-FRAMEWORK</code> for this
-      purpose.</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(OBJC:LOAD-FRAMEWORK framework-name interface-dir)
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">framework-name</code> is a string that names the
-    framework (for example, "Foundation", or "Cocoa"),
-    and <code class="literal">interface-dir</code> is a keyword that names the
-    set of interface databases associated with the named framework
-    (for example, <code class="literal">:foundation</code>,
-    or <code class="literal">:cocoa</code>).</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Assuming that interface databases for the named frameworks
-    exist on the standard search
-    path, <code class="literal">OBJC:LOAD-FRAMEWORK</code> finds and initializes
-    the framework bundle by searching OS X's standard framework search
-    paths. Loading the named framework may create new Objective-C
-    classes and methods, add foreign type descriptions and entry
-    points, and adjust Clozure CL's dispatch functions.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If interface databases don't exist for a framework you want
-    to use, you will need to create them. For more information about
-    creating interface databases,
-    see <a class="link" href="#Creating-new-interface-directories" title="13.5.2.Â Creating new interface directories">Creating
-    new interface directories</a>.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="How-Objective-C-Names-are-Mapped-to-Lisp-Symbols"></a>14.8.Â How Objective-C Names are Mapped to Lisp Symbols</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">There is a standard set of naming conventions for Cocoa
-      classes, messages, etc.  As long as they are followed, the
-      bridge is fairly good at automatically translating between Objective-C
-      and Lisp names.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For example, "NSOpenGLView" becomes ns:ns-opengl-view;
-      "NSURLHandleClient" becomes ns:ns-url-handle-client; and
-      "nextEventMatchingMask:untilDate:inMode:dequeue:" becomes
-      (:next-event-matching-mask :until-date :in-mode :dequeue).  What
-      a mouthful.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">To see how a given Objective-C or Lisp name will be translated by
-      the bridge, you can use the following functions:</p>
-          <table xmlns="http://www.w3.org/1999/xhtml" border="0" summary="Simple list" class="simplelist">
-            <tr>
-              <td>(ccl::objc-to-lisp-classname string)</td>
-            </tr>
-            <tr>
-              <td>(ccl::lisp-to-objc-classname symbol)</td>
-            </tr>
-            <tr>
-              <td>(ccl::objc-to-lisp-message string)</td>
-            </tr>
-            <tr>
-              <td>(ccl::lisp-to-objc-message string)</td>
-            </tr>
-            <tr>
-              <td>(ccl::objc-to-lisp-init string)</td>
-            </tr>
-            <tr>
-              <td>(ccl::lisp-to-objc-init keyword-list)</td>
-            </tr>
-          </table>
-          <p xmlns="http://www.w3.org/1999/xhtml">Of course, there will always be exceptions to any naming
-      convention.  Please tell us on the mailing lists if you come
-      across any name translation problems that seem to be bugs.
-      Otherwise, the bridge provides two ways of dealing with
-      exceptions:</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">First, you can pass a string as the class name of
-      MAKE-OBJC-INSTANCE and as the message to SEND.  These strings
-      will be directly interpreted as Objective-C names, with no
-      translation. This is useful for a one-time exception.  For
-      example:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(ccl::make-objc-instance "WiErDclass")
-(ccl::send o "WiErDmEsSaGe:WithARG:" x y)
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Alternatively, you can define a special translation rule
-      for your exception.  This is useful for an exceptional name that
-      you need to use throughout your code.  Some examples:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(ccl::define-classname-translation "WiErDclass" wierd-class)
-(ccl::define-message-translation "WiErDmEsSaGe:WithARG:" (:weird-message :with-arg))
-(ccl::define-init-translation "WiErDiNiT:WITHOPTION:" (:weird-init :option))
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">The normal rule in Objective-C names is that each word begins with a
-      capital letter (except possibly the first).  Using this rule
-      literally, "NSWindow" would be translated as N-S-WINDOW, which
-      seems wrong.  "NS" is a special word in Objective-C that should not be
-      broken at each capital letter. Likewise "URL", "PDF", "OpenGL",
-      etc. Most common special words used in Cocoa are already defined
-      in the bridge, but you can define new ones as follows:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(ccl::define-special-objc-word "QuickDraw")
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">Note that message keywords in a SEND such as (SEND V
-      :MOUSE P :IN-RECT R) may look like the keyword arguments in a
-      Lisp function call, but they really aren't. All keywords must be
-      present and the order is significant. Neither (:IN-RECT :MOUSE)
-      nor (:MOUSE) translate to "mouse:inRect:"</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Also, as a special exception, an "init" prefix is optional
-      in the initializer keywords, so (MAKE-OBJC-INSTANCE 'NS-NUMBER
-      :INIT-WITH-FLOAT 2.7) can also be expressed as
-      (MAKE-OBJC-INSTANCE 'NS-NUMBER :WITH-FLOAT 2.7)</p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Platform-specific-notes"></a>ChapterÂ 15.Â Platform-specific notes</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#Platform-specific-overview">15.1. Overview</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#differences-between-32-bit-and-64-bit-implementations">15.1.1. Differences Between 32-bit and 64-bit implementations</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#File-system-case">15.1.2. File-system case</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Line-Termination-Characters">15.1.3. Line Termination Characters</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Single-precision-trig---transcendental-functions">15.1.4. Single-precision trig &amp; transcendental functions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Shared-libraries">15.1.5. Shared libraries</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Unix-Posix-Darwin-Features">15.2. Unix/Posix/Darwin Features</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Cocoa-Programming-in-CCL">15.3. Cocoa Programming in Clozure CL</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#The-Command-Line-and-the-Window-System">15.3.1. The Command Line and the Window System</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Writing--and-reading--Cocoa-code">15.3.2. Writing (and reading) Cocoa code</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#The-Application-Kit-and-Multiple-Threads">15.3.3. The Application Kit and Multiple Threads</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Acknowledgement--2-">15.3.4. Acknowledgement</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Building-an-Application-Bundle">15.4. Building an Application Bundle</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Recommended-Reading">15.5. Recommended Reading</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Operating-System-Dictionary">15.6. Operating-System Dictionary</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Platform-specific-overview"></a>15.1.Â Overview</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml"> The documentation and whatever experience you may have in
-      using Clozure CL under Linux should also apply to using it under
-      Darwin/MacOS X and FreeBSD. There are some differences between
-      the platforms, and these differences are sometimes exposed in
-      the implementation.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="differences-between-32-bit-and-64-bit-implementations"></a>15.1.1.Â Differences Between 32-bit and 64-bit implementations</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Fixnums on 32-bit systems are 30 bits long, and are in the
-	  range -536870912 through 536870911.  Fixnums on 64-bit
-	  systems are 61 bits long, and are in the range
-	  -1152921504606846976 through 1152921504606846975. (see <a class="xref" href="#Tagging-scheme" title="17.2.4.Â Tagging scheme">SectionÂ 17.2.4, âTagging schemeâ</a>)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Since we have much larger fixnums on 64-bit systems,
-	    <em class="varname">INTERNAL-TIME-UNITS-PER-SECOND</em> is 1000000
-	    on 64-bit systems but remains 1000 on 32-bit systems.  This
-	    enables much finer grained timing on 64-bit systems.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="File-system-case"></a>15.1.2.Â File-system case</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Darwin and MacOS X use HFS+ file systems by default;
-	    HFS+ file systems are usually case-insensitive. Most of
-	    Clozure CL's filesystem and pathname code assumes that the
-	    underlying filesystem is case-sensitive; this assumption
-	    extends to functions like EQUAL, which assumes that #p"FOO"
-	    and #p"foo" denote different, un-EQUAL filenames. Since
-	    Darwin/MacOS X can also use UFS and NFS filesystems, the
-	    opposite assumption would be no more correct than the one
-	    that's currently made.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Whatever the best solution to this problem turns out to
-        be, there are some practical considerations. Doing:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (save-application "DPPCCL")
-	  </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">on 32-bit DarwinPPC has the unfortunate side-effect of
-        trying to overwrite the Darwin Clozure CL kernel, "dppccl", on a
-        case-insensitive filesystem.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">To work around this, the Darwin Clozure CL kernel expects
-        the default heap image file name to be the kernel's own
-        filename with the string ".image" appended, so the idiom would
-        be:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (save-application "dppccl.image")
-	  </pre>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Line-Termination-Characters"></a>15.1.3.Â Line Termination Characters</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">MacOSX effectively supports two distinct line-termination
-	    conventions. Programs in its Darwin substrate follow the Unix
-	    convention of recognizing #\LineFeed as a line terminator; traditional
-	    MacOS programs use #\Return for this purpose.  Many modern
-	    GUI programs try to support several different line-termination
-	    conventions (on the theory that the user shouldn't be too concerned
-	    about what conventions are used an that it probably doesn't matter.
-	    Sometimes this is true, other times ... not so much.
-	  </p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL follows the Unix convention on both Darwin and
-        LinuxPPC, but offers some support for reading and writing
-        files that use other conventions (including traditional MacOS
-        conventions) as well.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">This support (and anything like it) is by nature
-	    heuristic: it can successfully hide the distinction between
-	    newline conventions much of the time, but could mistakenly
-	    change the meaning of otherwise correct programs (typically
-	    when files contain both #\Return and #\Linefeed characters or
-	    when files contain mixtures of text and binary data.) Because
-	    of this concern, the default settings of some of the variables
-	    that control newline translation and interpretation are
-	    somewhat conservative.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Although the issue of multiple newline conventions
-	    primarily affects MacOSX users, the functionality described
-	    here is available under LinuxPPC as well (and may occasionally
-	    be useful there.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">None of this addresses issues
-	    related to the third newline convention ("CRLF") in widespread
-	    use (since that convention isn't native to any platform on
-	    which Clozure CL currently runs). If Clozure CL is ever ported to
-	    such a platform, that issue might be revisited.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Note that some MacOS programs (including some versions
-	    of commercial MCL) may use HFS file type information to
-	    recognize TEXT and other file types and so may fail to
-	    recognize files created with Clozure CL or other Darwin
-	    applications (regardless of line termination issues.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Unless otherwise noted, the symbols mentioned in this
-	    documentation are exported from the CCL package.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Single-precision-trig---transcendental-functions"></a>15.1.4.Â Single-precision trig &amp; transcendental functions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">
-	    Despite what Darwin's man pages say, early versions of its math library
-	    (up to and including at least OSX 10.2 (Jaguar) don't implement
-	    single-precision variants of the transcendental and trig functions
-	    (#_sinf, #_atanf, etc.) Clozure CL worked around this by coercing
-	    single-precision args to double-precision, calling the
-	    double-precision version of the math library function, and coercing
-	    the result back to a SINGLE-FLOAT. These steps can introduce rounding
-	    errors (and potentially overflow conditions) that might not be present
-	    or as severe if true 32-bit variants were available.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Shared-libraries"></a>15.1.5.Â Shared libraries</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Darwin/MacOS X distinguishes between "shared libraries"
-        and "bundles" or "extensions"; Linux and FreeBSD don't. In
-        Darwin, "shared libraries" have the file type "dylib" : the
-        expectation is that this class of file is linked against when
-        executable files are created and loaded by the OS when the
-        executable is launched. The latter class -
-        "bundles/extensions" - are expected to be loaded into and
-        unloaded from a running application, via a mechanism like the
-        one used by Clozure CL's OPEN-SHARED-LIBRARY function.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Unix-Posix-Darwin-Features"></a>15.2.Â Unix/Posix/Darwin Features</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL has several convenience functions which allow you
-      to make Posix (portable Unix) calls without having to use the
-      foreign-function interface.  Each of these corresponds directly
-      to a single Posix function call, as it might be made in C.
-      There is no attempt to make these calls correspond to Lisp
-      idioms, such as <code class="literal">setf</code>.  This means that their
-      behavior is simple and predictable.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For working with environment variables, there are
-      CCL::GETENV and CCL::SETENV.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For working with user and group IDs, there are
-      CCL::GETUID, CCL::SETUID, and CCL::SETGID.  To find the home
-      directory of an arbitrary user, as set in the user database
-      (/etc/passwd), there is CCL::GET-USER-HOME-DIR.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For process IDs, there is CCL::GETPID.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For the <code class="literal">system()</code> function, there is
-      CCL::OS-COMMAND.  Ordinarily, it is better - both more efficient
-      and more predictable - to use the features described in <a class="xref" href="#Running-Other-Programs-as-Subprocesses" title="ChapterÂ 9.Â Running Other Programs as Subprocesses">ChapterÂ 9, <em>Running Other Programs as Subprocesses</em></a>.  However,
-      sometimes you may want to specifically ask the shell to invoke a
-      command for you.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Cocoa-Programming-in-CCL"></a>15.3.Â Cocoa Programming in Clozure CL</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Cocoa is one of Apple's APIs for GUI programming; for most
-      purposes, development is considerably faster with Cocoa than
-      with the alternatives.  You should have a little familiarity
-      with it, to better understand this section.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">A small sample Cocoa program can be invoked by evaluating
-      (REQUIRE 'TINY) and then (CCL::TINY-SETUP). This program
-      provides a simple example of using several of the bridge's
-      capabilities.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The Tiny demo creates Cocoa objects dynamically, at
-      runtime, which is always an option.  However, for large
-      applications, it is usually more convenient to create your
-      objects with Apple Interface Builder, and store them in .nib
-      files to be loaded when needed.  Both approaches can be freely
-      mixed in a single program.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="The-Command-Line-and-the-Window-System"></a>15.3.1.Â The Command Line and the Window System</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL is ordinarily a command-line application (it
-        doesn't have a connection to the OSX Window server, doesn't
-        have its own menubar or dock icon, etc.) By opening some
-        libraries and jumping through some hoops, it's able to sort of
-        transform itself into a full-fledged GUI application (while
-        retaining its original TTY-based listener.) The general idea
-        is that this hybrid environment can be used to test and
-        protoype UI ideas and the resulting application can eventually
-        be fully transformed into a bundled, double-clickable
-        application. This is to some degree possible, but there needs
-        to be a bit more infrastructure in place before many people
-        would find it easy.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Cocoa applications use the NSLog function to write
-        informational/warning/error messages to the application's
-        standard output stream. When launched by the Finder, a GUI
-        application's standard output is diverted to a logging
-        facility that can be monitored with the Console application
-        (found in /Applications/Utilities/Console.app).  In the hybrid
-        environment, the application's standard output stream is
-        usually the initial listener's standard output stream. With
-        two different buffered stream mechanisms trying to write to
-        the same underlying Unix file descriptor, it's not uncommon to
-        see NSLog output mixed with lisp output on the initial
-        listener.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Writing--and-reading--Cocoa-code"></a>15.3.2.Â Writing (and reading) Cocoa code</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The
-	    syntax of the constructs used to define Cocoa classes and
-	    methods has changed a bit (it was never documented outside of
-	    the source code and never too well documented at all), largely
-	    as the result of functionality offered by Randall Beer's
-	    bridge; the âstandard name-mapping conventionsâ
-	    referenced below are described in his CocoaBridgeDoc.txt file,
-	    as are the constructs used to invoke (âsend messages
-	    toâ) Cocoa methods.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">All of the symbols described below are currently internal to
-        the CCL package.</p>
-            <table xmlns="http://www.w3.org/1999/xhtml" border="0" summary="Simple list" class="simplelist">
-              <tr>
-                <td>
-                  <a class="xref" href="#m_class" title="Macro CCL::@CLASS">
-                    <b xmlns="http://www.w3.org/TR/xhtml1/transitional">ccl::@class</b>
-                  </a>
-                </td>
-              </tr>
-              <tr>
-                <td>
-                  <a class="xref" href="#m_selector" title="Macro CCL::@SELECTOR">
-                    <b xmlns="http://www.w3.org/TR/xhtml1/transitional">ccl::@selector</b>
-                  </a>
-                </td>
-              </tr>
-              <tr>
-                <td>
-                  <a class="xref" href="#m_define-objc-method" title="Macro CCL::DEFINE-OBJC-METHOD">
-                    <b xmlns="http://www.w3.org/TR/xhtml1/transitional">ccl::define-objc-method</b>
-                  </a>
-                </td>
-              </tr>
-              <tr>
-                <td>
-                  <a class="xref" href="#m_define-objc-class-method" title="Macro CCL::DEFINE-OBJC-CLASS-METHOD">
-                    <b xmlns="http://www.w3.org/TR/xhtml1/transitional">ccl::define-objc-class-method</b>
-                  </a>
-                </td>
-              </tr>
-            </table>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="The-Application-Kit-and-Multiple-Threads"></a>15.3.3.Â The Application Kit and Multiple Threads</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The Cocoa API is broken into several pieces.  The
-        Application Kit, affectionately called AppKit, is the one
-        which deals with window management, drawing, and handling
-        events.  AppKit really wants all these things to be done by a
-        "distinguished thread".  creation, and drawing to take place
-        on a distinguished thread.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Apple has published some guidelines which discuss these
-        issues in some detail; see the Apple Multithreading
-        Documentation, and in particular the guidelines on Using the
-        Application Kit from Multiple Threads.  The upshot is that
-        there can sometimes be unexpected behavior when objects are
-        created in threads other than the distinguished event thread;
-        eg, the event thread sometimes starts performing operations on
-        objects that haven't been fully initialized.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">It's
-        certainly more convenient to do certain types of exploratory
-        programming by typing things into a listener or evaluating a
-        âdefunâ in an Emacs buffer; it may sometimes be
-        necessary to be aware of this issue while doing so.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Each thread in the Cocoa runtime system is expected to
-        maintain a current âautorelease poolâ (an instance
-        of the NSAutoreleasePool class); newly created objects are
-        often added to the current autorelease pool (via the
-        -autorelease method), and periodically the current autorelease
-        pool is sent a â-releaseâ message, which causes it
-        to send â-releaseâ messages to all of the objects
-        that have been added to it.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If the current thread doesn't have a current autorelease
-        pool, the attempt to autorelease any object will result in a
-        severe-looking warning being written via NSLog. The event
-        thread maintains an autorelease pool (it releases the current
-        pool after each event is processed and creates a new one for
-        the next event), so code that only runs in that thread should
-        never provoke any of these severe-looking NSLog
-        messages.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">To try to suppress these messages (and
-        still participate in the Cocoa memory management scheme), each
-        listener thread (the initial listener and any created via the
-        âNew Listenerâ command in the IDE) is given a
-        default autorelease pool; there are REPL colon-commands for
-        manipulating the current listener's âtoplevel
-        autorelease poolâ.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In the current scheme, every time that Cocoa calls lisp
-        code, a lisp error handler is established which maps any lisp
-        conditions to ObjC exceptions and arranges that this exception
-        is raised when the callback to lisp returns. Whenever lisp
-        code invokes a Cocoa method, it does so with an ObjC exception
-        handler in place; this handler maps ObjC exceptions to lisp
-        conditions and signals those conditions.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Any
-        unhandled lisp error or ObjC exception that occurs during the
-        execution of the distinguished event thread's event loop
-        causes a message to be NSLog'ed and the event loop to (try to)
-        continue execution. Any error that occurs in other threads is
-        handled at the point of the outermost Cocoa method
-        invocation. (Note that the error is not necessarily
-        âhandledâ in the dynamic context in which it
-        occurs.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Both of these behaviors could possibly be improved; both of them
-        seem to be substantial improvements over previous behaviors (where,
-        for instance, a misspelled message name typically terminated the
-        application.)</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Acknowledgement--2-"></a>15.3.4.Â Acknowledgement</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The Cocoa bridge was originally developed, and
-        generously contributed by, Randall Beer.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Building-an-Application-Bundle"></a>15.4.Â Building an Application Bundle</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">You may have noticed that (require "COCOA") takes a long
-      time to load.  It is possible to avoid this by saving a Lisp
-      heap image which has everything already loaded.  There is an
-      example file which allows you to do this,
-      "ccl/examples/cocoa-application.lisp", by producing a
-      double-clickable application which runs your program.  First,
-      load your own program.  Then, do:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (require "COCOA-APPLICATION")
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">When it finishes, you should be able to double-click the Clozure CL icon
-      in the ccl directory, to quickly start your program.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The OS may have already decided that Clozure CL.app isn't a valid
-      executable bundle, and therefore won't let you double-click it.
-      If this happens to you, to force it to reconsider, just update the
-      last-modified time of the bundle.  In Terminal:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">&gt; touch Clozure CL.app
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">When an image which had contained ObjC classes (which are also
-      CLOS classes) is re-launched, those classes are "revived": all
-      preexisting classes have their addresses updated destructively, so that
-      existing subclass/superclass/metaclass relationships are maintained.
-      It's not possible (and may never be) to preserve foreign
-      instances across SAVE-APPLICATION. (It may be the case that NSArchiver
-      and NSCoder and related classes offer some approximation of that.)</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Recommended-Reading"></a>15.5.Â Recommended Reading</h2>
-              </div>
-            </div>
-          </div>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-            <dl>
-              <dt>
-                <span class="term">
-	      <a class="ulink" href="http://developer.apple.com/technologies/mac/cocoa.html" target="_top">Mac OS X - Cocoa</a>
-	    , </span>
-                <span class="term">
-              <a class="ulink" href="http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Cocoa.html" target="_top">
-                Cocoa Core Competencies
-              </a>
-            , </span>
-                <span class="term">
-              <a class="ulink" href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html" target="_top">
-                Cocoa Fundamentals Guide
-              </a>
-            </span>
-              </dt>
-              <dd>
-                <p>
-	        These are top-level pages pertaining to Cocoa in Apple's Mac OS X Developer Library.
-	        If you are unfamiliar with Cocoa, these links are good places to start.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-              <a class="ulink" href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html" target="_top">
-                The Objective-C Programming Language
-              </a>
-            , </span>
-                <span class="term">
-              <a class="ulink" href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html" target="_top">
-                Objective-C Runtime Programming Guide
-              </a>
-            </span>
-              </dt>
-              <dd>
-                <p>These provide a conceptual overview and programming guide to Objective-C the language and runtime, respectively.</p>
-              </dd>
-              <dt>
-                <span class="term">
-              <a class="ulink" href="http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html" target="_top">
-                Objective-C Runtime Reference
-              </a>
-	    </span>
-              </dt>
-              <dd>
-                <p>
-	        This is one of the two most important Cocoa references; it
-	        covers all of the basics, except for GUI programming.  This is
-	        a reference, not a tutorial.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-	      <a class="ulink" href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/index.html" target="_top">Application Kit Framework Reference</a>
-	    </span>
-              </dt>
-              <dd>
-                <p>
-	        This is the other very important Cocoa reference; it covers GUI programming with Cocoa / Application Kit Framework
-	        in considerable depth.  This is a reference, not a tutorial.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-              <a class="ulink" href="http://developer.apple.com/library/mac/navigation/" target="_top">Mac OS X Developer Library</a>
-	    </span>
-              </dt>
-              <dd>
-                <p>
-	        This is the top page for Mac OS X developer documentation.
-	        Go here to find the documentation on any other Mac OS X API.
-	        Also go here if you need general guidance about OS X, Carbon,
-	        Cocoa, Core Foundation, or Objective-C.
-	      </p>
-              </dd>
-              <dt>
-                <span class="term">
-              <a class="ulink" href="http://developer.apple.com/" target="_top">Resources for Apple Developers</a>
-	    </span>
-              </dt>
-              <dd>
-                <p>
-                This is the top page for all Apple developer documentation.
-              </p>
-              </dd>
-            </dl>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Operating-System-Dictionary"></a>15.6.Â Operating-System Dictionary</h2>
-              </div>
-            </div>
-          </div>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_getenv"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>getenv</strong></span> name =&gt; value</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp43033856"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---a string which is the name of an existing
-		        environment variable;
-		        case-sensitive</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">value</span></i>---if there is an environment variable named
-		        <em xmlns="http://www.w3.org/1999/xhtml" class="varname">name</em>, its value, as a string; if there
-		        is not, NIL</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp43039248"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Looks up the value of the environment variable named by
-	      <em class="varname">name</em>, in the OS environment.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_setenv"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>setenv</strong></span> name value =&gt; errno</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40114016"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name</span></i>---a string which is the name of a new or existing
-		        environment variable;
-		        case-sensitive</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">value</span></i>---a string, to be the new value of the
-		        environment variable
-		        named by <em xmlns="http://www.w3.org/1999/xhtml" class="varname">name</em></p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">errno</span></i>---zero if the function call completes successfully;
-		        otherwise, a platform-dependent integer which describes
-		        the problem</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40121216"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Sets the value of the environment variable named by
-	      <em class="varname">name</em>, in the OS environment.  If there is
-	      no such environment
-	      variable, creates it.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_current-directory-name"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>current-directory-name</strong></span>
-	      =&gt; path</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40128672"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">path</span></i>---a string, an absolute pathname in Posix format - with
-		        directory components separated by slashes</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40131904"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Looks up the current working directory of the Clozure CL process;
-	      unless it has been changed, this is the directory Clozure CL was
-	      started in.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_getuid"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>getuid</strong></span> =&gt; uid</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40138960"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">uid</span></i>---a non-negative integer, identifying a specific user
-		        account as defined in the OS user database</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40142192"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Returns the ("real") user ID of the current user.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_setuid"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>setuid</strong></span> uid =&gt; errno</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40149056"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">uid</span></i>---a non-negative integer, identifying a specific user
-		        account as defined in the OS user database</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">errno</span></i>---zero if the function call completes successfully;
-		        otherwise, a platform-dependent integer which describes
-		        the problem</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40154208"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Attempts to change the current user ID (both "real" and
-	      "effective"); fails unless
-	      the Clozure CL process has super-user privileges or the ID
-	      given is that of the current user.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_setgid"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>setgid</strong></span> gid =&gt; errno</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41816336"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">gid</span></i>---a non-negative integer, identifying a specific
-		        group as defined in the OS user database</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">errno</span></i>---zero if the function call completes successfully;
-		        otherwise, a platform-dependent integer which describes
-		        the problem</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41821472"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Attempts to change the current group ID (both "real" and
-	      "effective"); fails unless
-	      the Clozure CL process has super-user privileges or the ID
-	      given is that of a group to which the current user belongs.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_getpid"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>getpid</strong></span> =&gt; pid</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41828592"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">pid</span></i>---a non-negative integer, identifying an OS process</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41831696"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Returns the ID of the Clozure CL OS process.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_get-user-home-dir"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>get-user-home-dir</strong></span> 
-	      uid =&gt; path</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41838560"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">uid</span></i>---a non-negative integer, identifying a specific user
-		        account as defined in the OS user database</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">path</span></i>---a string, an absolute pathname in Posix format - with
-		        directory components separated by slashes; or NIL</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41843680"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Looks up and returns the defined home directory of the user
-	      identified by <em class="varname">uid</em>.  This value comes from the
-	      OS user database, not from the <em class="varname">$HOME</em>
-	      environment variable.  Returns NIL if there is no user with
-	      the ID <em class="varname">uid</em>.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_os-command"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>os-command</strong></span> command-line
-	      =&gt; exit-code</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41851952"></a>
-                <div class="header">Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">command-line</span></i>---a string, obeying all the whitespace and
-	            escaping
-	            conventions required by the user's default system shell</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">exit-code</span></i>---a non-negative integer, returned as the exit
-	            code of a subprocess; zero indicates success</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41945648"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      Invokes the Posix function <span class="function"><strong>system()</strong></span>, which
-	      invokes the user's default system shell (such as
-	      sh or tcsh) as a new process, and has that shell execute
-	      <em class="varname">command-line</em>.
-	    </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      If the shell was able to find the command specified in
-	      <em class="varname">command-line</em>, then <em class="varname">exit-code</em>
-	      is the exit code of that command.  If not, it is the exit
-	      code of the shell itself.
-	    </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41949696"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      By convention, an exit code of 0 indicates success.  There are
-	      also other conventions; unfortunately, they are OS-specific, and
-	      the portable macros to decode their meaning are implemented
-	      by the system headers as C preprocessor macros.  This means
-	      that there is no good, automated way to make them available
-	      to Lisp.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_class"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>@class</strong></span> class-name</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41956944"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">class-name</span></i>---a string which denotes an existing class name, or a
-		        symbol which can be mapped to such a string via the standard
-		        name-mapping conventions for class names</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41960240"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Used to refer to a known ObjC class by name. (Via the use
-	      LOAD-TIME-VALUE, the results of a class-name -&gt; class lookup
-	      are cached.)</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	      <span class="function"><strong>@class</strong></span> is obsolete as of late 2004, because
-	      find-class now works on ObjC classes.  It is described here
-	      only because some old code still uses it.
-	    </p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_selector"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>@selector</strong></span> string</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41968576"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">string</span></i>---a string constant, used to canonically refer to an
-		        ObjC method selector</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41971680"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Used to refer to an ObjC method selector (method name). Uses
-	      LOAD-TIME-VALUE to cache the result of a string -&gt; selector
-	      lookup.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_objc-defmethod"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>objc:defmethod</strong></span>
-	      name-and-result-type ((receiver-arg-and-class) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;rest</em>
-	      other-args) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41979568"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">name-and-result-type</span></i>---either an Objective-C message name, for methods
-                that return a value of type <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:ID</code>, or
-                a list containing an Objective-C message name and a
-                foreign type specifier for methods with a different
-                foreign result type.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">receiver-arg-and-class</span></i>---a two-element list whose first element is a
-                variable name and whose second element is the Lisp
-                name of an Objective-C class or metaclass.  The
-                receiver variable name can be any bindable lisp
-                variable name, but <code xmlns="http://www.w3.org/1999/xhtml" class="literal">SELF</code> might be a
-                reasonable choice.  The receiver variable is declared
-                to be "unsettable"; i.e., it is an error to try to
-                change the value of the receiver in the body of the
-                method definition.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">other-args</span></i>---either variable names (denoting parameters of
-            type <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:ID</code>) or 2-element lists whose
-            first element is a variable name and whose second element
-            is a foreign type specifier.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41989280"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Defines an Objective-C-callable method which implements
-	        the specified message selector for instances of the existing
-	        named Objective-C class.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">For a detailed description of the features and
-          restrictions of the <code class="literal">OBJC:DEFMETHOD</code> macro,
-          see the
-          section <a class="link" href="#Using-objc-defmethod" title="14.6.2.Â Using objc:defmethod">Using <code class="literal">objc:defmethod</code></a>.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_define-objc-method"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>define-objc-method</strong></span>
-	        (selector class-name) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41999168"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">selector</span></i>---either a string which represents the name of the
-		          selector or a list which describes the method's return
-		          type, selector components, and argument types (see below.)
-		          If the first form is used, then the first form in the body
-		          must be a list which describes the selector's argument
-		          types and return value type, as per DEFCALLBACK.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">class-name</span></i>---either a string which names an existing ObjC class
-		          name or a list symbol which can map to such a string via the
-		          standard name-mapping conventions for class names. (Note
-		          that the "canonical" lisp class name is such a
-		          symbol)</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42658576"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Defines an ObjC-callable method which implements the
-	        specified message selector for instances of the existing ObjC
-	        class class-name.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="m_define-objc-class-method"></a>
-              <strong>[Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>define-objc-class-method</strong></span>
-	        (selector class-name) <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42666160"></a>
-                <div class="header">Arguments and Values:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">As per DEFINE-OBJC-METHOD</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42667520"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Like DEFINE-OBJC-METHOD, only used to define methods on the
-	        <span class="emphasis"><em>class</em></span> named by class-name and on its
-	        subclasses.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">For both DEFINE-OBJC-METHOD and DEFINE-OBJC-CLASS-METHOD, the
-	        "selector" argument can be a list whose first element is a
-	        foreign type specifier for the method's return value type and whose
-	        subsequent elements are either:</p>
-                <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                  <ul class="itemizedlist" type="disc">
-                    <li class="listitem">
-                      <p>a non-keyword symbol, which can be mapped to a selector string
-		        for a parameterless method according to the standard name-mapping
-		        conventions for method selectors.</p>
-                    </li>
-                    <li class="listitem">
-                      <p>a list of alternating keywords and variable/type specifiers,
-		        where the set of keywords can be mapped to a selector string for a
-		        parameterized method according to the standard name-mapping
-		        conventions for method selectors and each variable/type-specifier is
-		        either a variable name (denoting a value of type :ID) or a list whose
-		        CAR is a variable name and whose CADR is the corresponding
-		        argument's foreign type specifier.</p>
-                    </li>
-                  </ul>
-                </div>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_alternate-line-terminator"></a>
-              <strong>[Variable]</strong>
-              <br></br>
-              <code>CCL:*ALTERNATE-LINE-TERMINATOR*</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42676688"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">This variable is currently only used by the standard reader macro
-	        function for #\; (single-line comments); that function reads successive
-	        characters until EOF, a #\NewLine is read, or a character EQL to the
-	        value of *alternate-line-terminator* is read. In Clozure CL for Darwin, the
-	        value of this variable is initially #\Return ; in Clozure CL for other OSes,
-	        it's initially NIL.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Their default treatment by the #\; reader macro is the primary way
-	        in which #\Return and #\Linefeed differ syntactically; by extending the
-	        #\; reader macro to (conditionally) treat #\Return as a
-	        comment-terminator, that distinction is eliminated. This seems to make
-	        LOAD and COMPILE-FILE insensitive to line-termination issues in many
-	        cases. It could fail in the (hopefully rare) case where a LF-terminated
-	        (Unix) text file contains embedded #\Return characters, and this
-	        mechanism isn't adequate to handle cases where newlines are embedded
-	        in string constants or other tokens (and presumably should be translated
-	        from an external convention to the external one) : it doesn't change
-	        what READ-CHAR or READ-LINE "see", and that may be necessary to
-	        handle some more complicated cases.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="c_ns-lisp-string"></a>
-              <strong>[Class]</strong>
-              <br></br>
-              <code>CCL::NS-LISP-STRING</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42683584"></a>
-                <div class="header">Superclasses:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">NS:NS-STRING</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42684928"></a>
-                <div class="header">Initargs:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">:string</span></i>---
-		          a Lisp string which is to be the content of
-		          the newly-created ns-lisp-string.
-		        </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42688160"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	        This class
-	        implements the interface of an NSString, which means that it can
-	        be passed to any Cocoa or Core Foundation function which expects
-	        one.
-	      </p>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	        The string itself is stored on the Lisp heap, which
-	        means that its memory management is automatic.  However, the
-	        ns-lisp-string object itself is a foreign
-	        object (that is, it has an objc metaclass), and resides on the
-	        foreign heap.  Therefore, it is necessary to explicitly free
-	        it, by sending a dealloc message.
-	      </p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42690480"></a>
-                <div class="header">Examples:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	        You can create an ns-lisp-string with
-	        <span class="function"><strong>make-instance</strong></span>, just like
-	        any normal Lisp class:
-	      </p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">? (defvar *the-string*
-     (make-instance 'ccl::ns-lisp-string
-                    :string "Hello, Cocoa."))
-</pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	        When you are done with the string, you must explicitly
-	        deallocate it:
-	      </p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">? (ccl::send *the-string* 'dealloc)</pre>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	        You may wish to use an <span class="function"><strong>unwind-protect</strong></span>
-	        form to ensure that this happens:
-	      </p>
-                <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">(let (*the-string*)
-  (unwind-protect (progn (setq *the-string*
-                               (make-instance 'ccl::ns-lisp-string
-                                              :string "Hello, Cocoa."))
-                         (format t "~&amp;The string is ~D characters long.~%"
-                                 (ccl::send *the-string* 'length)))
-    (when *the-string*
-      (ccl::send *the-string* 'dealloc))))
-</pre>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42696832"></a>
-                <div class="header">Notes:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">
-	        Currently, ns-lisp-string is defined in
-	        the file ccl/examples/cocoa-backtrace.lisp, which is a
-	        rather awkward place.  It was probably not originally meant
-	        as a public utility at all.  It would be good if it were
-	        moved someplace else.  Use at your own risk.
-	      </p>
-              </div>
-            </div>
-          </p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Understanding-and-Configuring-the-Garbage-Collector"></a>ChapterÂ 16.Â Understanding and Configuring the Garbage Collector</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#Heap-space-allocation">16.1. Heap space allocation</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#The-Ephemeral-GC">16.2. The Ephemeral GC</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#GC-Page-reclamation-policy">16.3. GC Page reclamation policy</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#iPure--areas-are-read-only--paged-from-image-file">16.4. "Pure" areas are read-only, paged from image file</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Weak-References">16.5. Weak References</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Weak-References-Dictionary">16.6. Weak References Dictionary</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Garbage-Collection-Dictionary">16.7. Garbage-Collection Dictionary</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Heap-space-allocation"></a>16.1.Â Heap space allocation</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Release 0.10 or later of <code class="literal">CCL</code> uses a different memory
-      management scheme than previous versions did. Those earlier
-      versions would allocate a block of memory (of specified size) at
-      startup and would allocate lisp objects within that block. When
-      that block filled with live (non-GCed) objects, the lisp would
-      signal a "heap full" condition. The heap size imposed a limit on
-      the size of the largest object that could be allocated.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The new strategy involves reserving a very large (2GB on
-      DarwinPPC32, 1GB on LinuxPPC, "very large" on 64-bit
-      implementations) block at startup and consuming (and
-      relinquishing) its contents as the size of the live lisp heap
-      data grows and shrinks. After the initial heap image loads and
-      after each full GC, the lisp kernel will try to ensure that a
-      specified amount (the "lisp-heap-gc-threshold") of free memory
-      is available. The initial value of this kernel variable is 16MB
-      on 32-bit implementations and 32MB on 64-bit implementations ;
-      it can be manipulated from Lisp (see below.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The large reserved memory block consumes very little in
-      the way of system resources; memory that's actually committed to
-      the lisp heap (live data and the "threshold" area where
-      allocation takes place) consumes finite resources (physical
-      memory and swap space). The lisp's consumption of those
-      resources is proportional to its actual memory usage, which is
-      generally a good thing.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">This scheme is much more flexible than the old one, but it
-      may also increase the possibility that those resources can
-      become exhausted.  Neither the new scheme nor the old handles
-      that situation gracefully; under the old scheme, a program that
-      consumes lots of memory may have run into an artificial limit on
-      heap size before exhausting virtual memory.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The -R or âheap-reserve command-line option can be
-      use to limit the size of the reserved block and therefore bound
-      heap expansion. Running</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-&gt; openmcl --heap-reserve 8M
-</pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">would provide an execution environment that's very similar to
-that provided by earlier <code class="literal">CCL</code> versions.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="The-Ephemeral-GC"></a>16.2.Â The Ephemeral GC</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">For many programs, the following observations are true to
-      a very large degree:</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-            <ol class="orderedlist" type="1">
-              <li class="listitem">
-                <p>Most heap-allocated objects have very short lifetimes ("are
-	  ephemeral"): they become inaccessible soon after they're created.</p>
-              </li>
-              <li class="listitem">
-                <p>Most non-ephemeral objects have very long lifetimes: it's
-	  rarely productive for the GC to consider reclaiming them, since
-	  it's rarely able to do so. (An object that has survived a large
-	  number of GCs is likely to survive the next one. That's not always
-	  true of course, but it's a reasonable heuristic.)</p>
-              </li>
-              <li class="listitem">
-                <p>It's relatively rare for an old object to be destructively
-	  modified (via SETF) so that it points to a new one, therefore most
-	  references to newly-created objects can be found in the stacks and
-	  registers of active threads. It's not generally necessary to scan
-	  the entire heap to find references to new objects (or to prove that
-	  such references don't exists), though it is necessary to keep
-	  track of the (hopefully exceptional) cases where old objects are
-	  modified to point at new ones.</p>
-              </li>
-            </ol>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">"Ephemeral" (or "generational") garbage collectors try to
-      exploit these observations: by concentrating on frequently
-      reclaiming newly-created objects quickly, it's less often
-      necessary to do more expensive GCs of the entire heap in order
-      to reclaim unreferenced memory.  In some environments, the
-      pauses associated with such full GCs can be noticeable and
-      disruptive, and minimizing the frequency (and sometimes the
-      duration) of these pauses is probably the EGC's primary goal
-      (though there may be other benefits, such as increased locality
-      of reference and better paging behavior.) The EGC generally
-      leads to slightly longer execution times (and slightly higher,
-      amortized GC time), but there are cases where it can improve
-      overall performance as well; the nature and degree of its impact
-      on performance is highly application-dependent.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Most EGC strategies (including the one employed by
-      <code class="literal">CCL</code>) logically or physically divide memory into one or more
-      areas of relatively young objects ("generations") and one or
-      more areas of old objects.  Objects that have survived one or
-      more GCs as members of a young generation are promoted (or
-      "tenured") into an older generation, where they may or may not
-      survive long enough to be promoted to the next generation and
-      eventually may become "old" objects that can only be reclaimed
-      if a full GC proves that there are no live references to them.
-      This filtering process isn't perfect - a certain amount of
-      premature tenuring may take place - but it usually works very
-      well in practice.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">It's important to note that a GC of the youngest
-      generation is typically very fast (perhaps a few milliseconds on
-      a modern CPU, depending on various factors), <code class="literal">CCL</code>'s EGC is
-      not concurrent and doesn't offer realtime guarantees.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code>'s EGC maintains three ephemeral generations; all
-      newly created objects are created as members of the youngest
-      generation. Each generation has an associated
-      <span class="emphasis"><em>threshold</em></span>, which indicates the number of
-      bytes in it and all younger generations that can be allocated
-      before a GC is triggered. These GCs will involve the target
-      generation and all younger ones (and may therefore cause some
-      premature tenuring); since the older generations have larger
-      thresholds, they're GCed less frequently and most short-lived
-      objects that make it into an older generation tend not to
-      survive there very long.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The EGC can be <span class="emphasis"><em>enabled</em></span> or
-      <span class="emphasis"><em>disabled</em></span> under program control; under some
-      circumstances, it may be enabled but
-      <span class="emphasis"><em>inactive</em></span> (because a full GC is imminent.)
-      Since it may be hard to know or predict the consing behavior of
-      other threads, the distinction between the "active" and
-      "inactive" state isn't very meaningful, especially when native
-      threads are involved.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="GC-Page-reclamation-policy"></a>16.3.Â GC Page reclamation policy</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">After a full GC finishes, it'll try to ensure that at
-      least (LISP-HEAP-GC-THRESHOLD) of virtual memory are available;
-      objects will be allocated in this block of memory until it fills
-      up, the GC is triggered, and the process repeats itself.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Many programs reach near stasis in terms of the amount of
-      logical memory that's in use after full GC (or run for long
-      periods of time in a nearly static state), so the logical
-      address range used for consing after the Nth full GC is likely
-      to be nearly or entirely identical to the address range used by
-      the N+1th full GC.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">By default (and traditionally in <code class="literal">CCL</code>), the GC's policy
-      is to "release" the pages in this address range: to advise the
-      virtual memory system that the pages contain garbage and any
-      physical pages associated with them don't need to be swapped out
-      to disk before being reused and to (re-)map the logical address
-      range so that the pages will be zero-filled by the virtual
-      memory system when they're next accessed.  This policy is
-      intended to reduce the load on the VM system and keep <code class="literal">CCL</code>'s
-      working set to a minimum.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For some programs (especially those that cons at a very
-      high rate), the default policy may be less than ideal: releasing
-      pages that are going to be needed almost immediately - and
-      zero-fill-faulting them back in, lazily - incurs unnecessary
-      overhead. (There's a false economy associated with minimizing
-      the size of the working set if it's just going to shoot back up
-      again until the next GC.) A policy of "retaining" pages between
-      GCs might work better in such an environment.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Functions described below give the user some control over
-      this behavior. An adaptive, feedback-mediated approach might
-      yield a better solution.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="iPure--areas-are-read-only--paged-from-image-file"></a>16.4.Â "Pure" areas are read-only, paged from image file</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">SAVE-APPLICATION identifies code vectors and the pnames of
-      interned symbols and copies these objects to a "pure" area of
-      the image file it creates. (The "pure" area accounts for most of
-      what the ROOM function reports as "static" space.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">When the resulting image file is loaded, the pure area of
-      the file is now memory-mapped with read-only access. Code and
-      pure data are paged in from the image file as needed (and don't
-      compete for global virtual memory resources with other memory
-      areas.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Code-vectors and interned symbol pnames are immutable : it
-      is an error to try to change the contents of such an
-      object. Previously, that error would have manifested itself in
-      some random way. In the new scheme, it'll manifest itself as an
-      "unhandled exception" error in the Lisp kernel. The kernel could
-      probably be made to detect a spurious, accidental write to
-      read-only space and signal a lisp error in that case, but it
-      doesn't yet do so.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The image file should be opened and/or mapped in some mode
-      which disallows writing to the memory-mapped regions of the file
-      from other processes. I'm not sure of how to do that; writing to
-      the file when it's mapped by <code class="literal">CCL</code> can have unpredictable and
-      unpleasant results.  SAVE-APPLICATION will delete its output
-      file's directory entry and create a new file; one may need to
-      exercise care when using file system utilities (like tar, for
-      instance) that might overwrite an existing image file.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Weak-References"></a>16.5.Â Weak References</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">In general, a "weak reference" is a reference to an object
-      which does not prevent the object from being garbage-collected.
-      For example, suppose that you want to keep a list of all the
-      objects of a certain type.  If you don't take special steps, the
-      fact that you have a list of them will mean that the objects are
-      always "live", because you can always reference them through the
-      list.  Therefore, they will never be garbage-collected, and
-      their memory will never be reclaimed, even if they are
-      referenced nowhere else in the program.  If you don't want this
-      behavior, you need weak references.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml"><code class="literal">CCL</code> supports weak references with two kinds of objects:
-      weak hash tables and populations.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Weak hash tables are created with the standard Common Lisp
-      function <code class="literal">make-hash-table</code>, which is extended
-      to accept the keyword argument <code class="literal">:weak</code>.  Hash
-      tables may be weak with respect to either their keys or their
-      values.  To make a hash table with weak keys, invoke
-      <code class="literal">make-hash-table</code> with the option :weak t, or,
-      equivalently, :weak :key.  To make one with weak values, use
-      :weak :value.  When the key is weak, the equality test must be
-      #'eq (because it wouldn't make sense otherwise).</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">When garbage-collection occurs, key-value pairs are
-      removed from the hash table if there are no non-weak references to
-      the weak element of the pair (key or value).</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">In general, weak-key hash tables are useful when you want
-      to use the hash to store some extra information about the
-      objects you look up in it, while weak-value hash tables are
-      useful when you want to use the hash as an index for looking up
-      objects.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">A population encapsulates an object, causing certain
-      reference from the object to be considered weak.  <code class="literal">CCL</code> supports
-      two kinds of populations: lists, in which case the encapsulated
-      object is a list of elements, which are spliced out of the list
-      when there are no non-weak references to the element; and alists,
-      in which case the encapsulated object is a list of conses which
-      are spliced out of the list if there are no non-weak references
-      to the car of the cons.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If you are experimenting with weak references
-      interactively, remember that an object is not dead if it was
-      returned by one of the last three interactively-evaluated
-      expressions, because of the variables <code class="literal">*</code>,
-      <code class="literal">**</code>, and <code class="literal">***</code>.  The easy
-      workaround is to evaluate some meaningless expression before
-      invoking <code class="literal">gc</code>, to get the object out of the
-      REPL variables.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Weak-References-Dictionary"></a>16.6.Â Weak References Dictionary</h2>
-              </div>
-            </div>
-          </div>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_make-population"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>make-population</strong></span> <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;key</em> type initial-contents</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41939280"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">type</span></i>---The type of population, one of <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:LIST</code> (the default) or <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:ALIST</code></p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">initial-contents</span></i>--- A sequence of elements (or conses, for <code xmlns="http://www.w3.org/1999/xhtml" class="literal">:alist</code>) to be used to initialize the
-              population. The sequence itself (and the conses in case of an
-              alist) is not stored in the population, a new list or alist is created to hold the elements.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42949856"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Creates a new population of the specified type.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_population-type"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>population-type</strong></span> population</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42956720"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">returns the type of <code class="literal">population</code>, one of <code class="literal">:LIST</code> or <code class="literal">:ALIST</code></p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_population-contents"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>population-contents</strong></span> population</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41600128"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">returns the list encapsulated in <code class="literal">population</code>.
-        Note that as long as there is a direct (non-weak) reference to this
-        list, it will not be modified by the garbage collector.  Therefore it is
-        safe to traverse the list, and even modify it, no different from any
-        other list. If you want the elements to become garbage-collectable
-        again, you must stop refering to the list directly.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_setf_population-contents"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>(setf (<span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>population-contents</strong></span> population) contents)</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41608352"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Sets the list encapsulated in <code class="literal">population</code> to
-        <code class="literal">contents</code>.  <code class="literal">Contents</code> is not copied,
-        it is used directly.</p>
-              </div>
-            </div>
-          </p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Garbage-Collection-Dictionary"></a>16.7.Â Garbage-Collection Dictionary</h2>
-              </div>
-            </div>
-          </div>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_gc"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="function">
-                  <strong>gc</strong>
-                </span>
-              </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42702912"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Causes a full GC to occur as soon as possible. Returns NIL.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_lisp-heap-gc-threshold"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="function">
-                  <strong>lisp-heap-gc-threshold</strong>
-                </span>
-              </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42709664"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns the value of the kernel variable that specifies the
-	  amount of free space to leave in the heap after full GC.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_set-lisp-heap-gc-threshold"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	    <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>set-lisp-heap-gc-threshold</strong></span> new-threshold
-	  </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40168096"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">new-threshold</span></i>---The requested new lisp-heap-gc-threshold.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40171200"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Sets the value of the kernel variable that specifies the
-	  amount of free space to leave in the heap after full GC to
-	  new-value, which should be a non-negative fixnum. Returns the
-	  value of that kernel variable (which may be somewhat larger than
-	  what was specified).</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_use-lisp-heap-gc-threshold"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-	    <span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>use-lisp-heap-gc-threshold</strong></span>
-	  </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp40178608"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Tries to grow or shrink lisp's heap space, so that the
-	  free space is (approximately) equal to the current heap threshold.
-	  Returns NIL</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_egc"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>egc</strong></span> arg</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41661872"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">arg</span></i>---a generalized boolean</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41665008"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Enables the EGC if arg is non-nil, disables the EGC
-	  otherwise. Returns the previous enabled status. Although this
-	  function is thread-safe (in the sense that calls to it are
-	  serialized), it doesn't make a whole lot of sense to be
-	  turning the EGC on and off from multiple threads ...</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_egc-enabled-p"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="function">
-                  <strong>egc-enabled-p</strong>
-                </span>
-              </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41672016"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns T if the EGC was enabled at the time of the call,
-	  NIL otherwise.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_egc-active-p"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="function">
-                  <strong>egc-active-p</strong>
-                </span>
-              </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42823920"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns T if the EGC was active at the time of the call, NIL
-	  otherwise. Since this is generally a volatile piece of
-	  information, it's not clear whether this function serves a
-	  useful purpose when native threads are involved.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_egc-configuration"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="function">
-                  <strong>egc-configuration</strong>
-                </span>
-              </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42830880"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns, as multiple values, the sizes in kilobytes of the
-	  thresholds associated with the youngest ephemeral generation, the
-	  middle ephemeral generation, and the oldest ephemeral generation</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_configure-gcc"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>configure-egc</strong></span>
-	  generation-0-size generation-1-size
-	  generation-2-size</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42837920"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">generation-0-size</span></i>---the requested threshold size of the youngest
-		generation, in kilobytes</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">generation-1-size</span></i>---the requested threshold size of the middle generation,
-		in kilobytes</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">generation-2-size</span></i>---the requested threshold size of the oldest generation,
-		in kilobytes</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42844544"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Puts the indicated threshold sizes in effect.
-          Each threshold indicates the total size that may be allocated
-          in that and all younger generations before a GC is triggered.
-          Disables EGC while setting the values.
-	  (The provided threshold sizes are rounded up to a multiple of
-	  64Kbytes in <code class="literal">CCL</code> 0.14 and to a multiple of 32KBytes in earlier
-	  versions.)</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_gc-retain-pages"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>gc-retain-pages</strong></span> arg</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42852432"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">arg</span></i>---a generalized boolean</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42855568"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Tries to influence the GC to retain/recycle the pages
-	  allocated between GCs if arg is true, and to release them
-	  otherwise. This is generally a tradeoff between paging and other
-	  VM considerations.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_gc-retaining-pages"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="function">
-                  <strong>gc-retaining-pages</strong>
-                </span>
-              </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42862496"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns T if the GC tries to retain pages between full GCs
-	  and NIL if it's trying to release them to improve VM paging
-	  performance.</p>
-              </div>
-            </div>
-          </p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Implementation-Details-of-CCL"></a>ChapterÂ 17.Â Implementation Details of Clozure CL</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#Threads-and-exceptions">17.1. Threads and exceptions</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#The-Thread-Context-Record">17.1.1. The Thread Context Record</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Exception-contexts-comma---and-exception-handling-in-general">17.1.2. Exception contexts, and exception-handling in general</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Threads-comma---exceptions-comma---and-the-GC">17.1.3. Threads, exceptions, and the GC</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#PC-lusering">17.1.4. PC-lusering</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Register-usage-and-tagging">17.2. Register usage and tagging</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Register-usage-and-tagging-overview">17.2.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#pc-locatives-on-the-PPC">17.2.2. pc-locatives on the PPC</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Register-and-stack-usage-conventions">17.2.3. Register and stack usage conventions</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Tagging-scheme">17.2.4. Tagging scheme</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Heap-Allocation">17.3. Heap Allocation</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Per-thread-object-allocation">17.3.1. Per-thread object allocation</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Allocation-of-reserved-heap-segments">17.3.2. Allocation of reserved heap segments</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Heap-growth">17.3.3. Heap growth</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#GC-details">17.4. GC details</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Mark-phase">17.4.1. Mark phase</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Relocation-phase">17.4.2. Relocation phase</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Forwarding-phase">17.4.3. Forwarding phase</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Compact-phase">17.4.4. Compact phase</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#The-ephemeral-GC">17.5. The ephemeral GC</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Fasl-files">17.6. Fasl files</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#The-Objective-C-Bridge--1-">17.7. The Objective-C Bridge</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#How-CCL-Recognizes-Objective-C-Objects">17.7.1. How Clozure CL Recognizes Objective-C Objects</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#idp46319312">17.7.2. Recommended Reading</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-          </dl>
-        </div>
-        <p xmlns="http://www.w3.org/1999/xhtml">This chapter describes many aspects of OpenMCL's
-    implementation as of (roughly) version 1.1. Details vary a bit
-    between the three architectures (PPC32, PPC64, and x86-64)
-    currently supported and those details change over time, so the
-    definitive reference is the source code (especially some files in
-    the ccl/compiler/ directory whose names contain the string "arch"
-    and some files in the ccl/lisp-kernel/ directory whose names
-    contain the string "constants".) Hopefully, this chapter will make
-    it easier for someone who's interested to read and understand the
-    contents of those files.</p>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Threads-and-exceptions"></a>17.1.Â Threads and exceptions</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL's threads are "native" (meaning that they're
-        scheduled and controlled by the operating system.)  Most of the
-        implications of this are discussed elsewhere; this section tries
-        to describe how threads look from the lisp kernel's perspective
-        (and especially from the GC's point of view.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL's runtime system tries to use machine-level
-        exception mechanisms (conditional traps when available,
-        illegal instructions, memory access protection in some cases)
-        to detect and handle exceptional situations.  These situations
-        include some TYPE-ERRORs and PROGRAM-ERRORS (notably
-        wrong-number-of-args errors), and also include cases like "not
-        being able to allocate memory without GCing or obtaining more
-        memory from the OS."  The general idea is that it's usually
-        faster to pay (very occasional) exception-processing overhead
-        and figure out what's going on in an exception handler than it
-        is to maintain enough state and context to handle an
-        exceptional case via a lighter-weight mechanism when that
-        exceptional case (by definition) rarely occurs.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Some emulated execution environments (the Rosetta PPC
-        emulator on x86 versions of Mac OS X) don't provide accurate
-        exception information to exception handling functions. Clozure CL
-        can't run in such environments.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="The-Thread-Context-Record"></a>17.1.1.Â The Thread Context Record</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">When a lisp thread is first created (or when a thread
-          created by foreign code first calls back to lisp), a data
-          structure called a Thread Context Record (or TCR) is
-          allocated and initialized.  On modern versions of Linux and
-          FreeBSD, the allocation actually happens via a set of
-          thread-local-storage ABI extensions, so a thread's TCR is
-          created when the thread is created and dies when the thread
-          dies.  (The World's Most Advanced Operating Systemâas
-          Apple's marketing literature refers to Darwinâis not
-          very advanced in this regard, and I know of no reason to
-          assume that advances will be made in this area anytime
-          soon.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">A TCR contains a few dozen fields (and is therefore a
-          few hundred bytes in size.)  The fields are mostly
-          thread-specific information about the thread's stacks'
-          locations and sizes, information about the underlying (POSIX)
-          thread, and information about the thread's dynamic binding
-          history and pending CATCH/UNWIND-PROTECTs.  Some of this
-          information could be kept in individual machine registers
-          while the thread is running (and the PPC - which has more
-          registers available - keeps a few things in registers that the
-          X86-64 has to access via the TCR), but it's important to
-          remember that the information is thread-specific and can't
-          (for instance) be kept in a fixed global memory
-          location.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">When lisp code is running, the current thread's TCR is
-          kept in a register.  On PPC platforms, a general purpose
-          register is used; on x86-64, an (otherwise nearly useless)
-          segment register works well (prevents the expenditure of a
-          more generally useful general- purpose register for this
-          purpose.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The address of a TCR is aligned in memory in such a way
-          that a FIXNUM can be used to represent it.  The lisp function
-          CCL::%CURRENT-TCR returns the calling thread's TCR as a
-          fixnum; actual value of the TCR's address is 4 or 8 times the
-          value of this fixnum.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">When the lisp kernel initializes a new TCR, it's added
-          to a global list maintained by the kernel; when a thread
-          exits, its TCR is removed from this list.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">When a thread calls foreign code, lisp stack pointers
-          are saved in its TCR, lisp registers (at least those whose
-          value should be preserved across the call) are saved on the
-          thread's value stack, and (on x86-64) RSP is switched to the
-          control stack.  A field in the TCR (tcr.valence) is then set
-          to indicate that the thread is running foreign code, foreign
-          argument registers are loaded from a frame on the foreign
-          stack, and the foreign function is called. (That's a little
-          oversimplified and possibly inaccurate, but the important
-          things to note are that the thread "stops following lisp
-          stack and register usage conventions" and that it advertises
-          the fact that it's done so.  Similar transitions in a
-          thread's state ("valence") occur when it enters or exits an
-          exception handler (which is sort of an OS/hardware-mandated
-          foreign function call where the OS thoughtfully saves the
-          thread's register state for it beforehand.)</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Exception-contexts-comma---and-exception-handling-in-general"></a>17.1.2.Â Exception contexts, and exception-handling in general</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Unix-like OSes tend to refer to exceptions as "signals";
-          the same general mechanism ("signal handling") is used to
-          process both asynchronous OS-level events (such as the result
-          of the keyboard driver noticing that ^C or ^Z has been
-          pressed) and synchronous hardware-level events (like trying to
-          execute an illegal instruction or access protected memory.)
-          It makes some sense to defer ("block") handling of
-          asynchronous signals so that some critical code sequences
-          complete without interruption; since it's generally not
-          possible for a thread to proceed after a synchronous exception
-          unless and until its state is modified by an exception
-          handler, it makes no sense to talk about blocking synchronous
-          signals (though some OSes will let you do so and doing so can
-          have mysterious effects.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">On OSX/Darwin, the POSIX signal handling facilities
-          coexist with lower-level Mach-based exception handling
-          facilities.  Unfortunately, the way that this is implemented
-          interacts poorly with debugging tools: GDB will generally stop
-          whenever the target program encounters a Mach-level exception
-          and offers no way to proceed from that point (and let the
-          program's POSIX signal handler try to handle the exception);
-          Apple's CrashReporter program has had a similar issue and,
-          depending on how it's configured, may bombard the user with
-          alert dialogs which falsely claim that an application has
-          crashed (when in fact the application in question has
-          routinely handled a routine exception.)  On Darwin/OSX,
-          Clozure CL uses Mach thread-level exception handling facilities
-          which run before GDB or CrashReporter get a chance to confuse
-          themselves; Clozure CL's Mach exception handling tries to force
-          the thread which received a synchronous exception to invoke a
-          signal handling function ("as if" signal handling worked more
-          usefully under Darwin.)  Mach exception handlers run in a
-          dedicated thread (which basically does nothing but wait for
-          exception messages from the lisp kernel, obtain and modify
-          information about the state of threads in which exceptions
-          have occurred, and reply to the exception messages with an
-          indication that the exception has been handled.  The reply
-          from a thread-level exception handler keeps the exception from
-          being reported to GDB or CrashReporter and avoids the problems
-          related to those programs.  Since Clozure CL's Mach exception
-          handler doesn't claim to handle debugging-related exceptions
-          (from breakpoints or single-step operations), it's possible to
-          use GDB to debug Clozure CL.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">On platforms where signal handling and debugging don't
-          get in each other's way, a signal handler is entered with
-          all signals blocked.  (This behavior is specified in the
-          call to the sigaction() function which established the
-          signal handler.)  The signal handler receives three
-          arguments from the OS kernel; the first is an integer that
-          identifies the signal, the second is a pointer to an object
-          of type "siginfo_t", which may or may not contain a few
-          fields that would help to identify the cause of the
-          exception, and the third argument is a pointer to a data
-          structure (called a "ucontext" or something similar), which
-          contains machine-dependent information about the state of
-          the thread at the time that the exception/signal occurred.
-          While asynchronous signals are blocked, the signal handler
-          stores the pointer to its third argument (the "signal
-          context") in a field in the current thread's TCR, sets some
-          bits in another TCR field to indicate that the thread is now
-          waiting to handle an exception, unblocks asynchronous
-          signals, and waits for a global exception lock that
-          serializes exception processing.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">On Darwin, the Mach exception thread creates a signal
-          context (and maybe a siginfo_t structure), stores the signal
-          context in the thread's TCR, sets the TCR field which describes
-          the thread's state, and arranges that the thread resume
-          execution at its signal handling function (with a signal
-          handler, possibly NULL siginfo_t, and signal context as
-          arguments.  When the thread resumes, it waits for the global
-          exception lock.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">On x86-64 platforms where signal handing can be used to
-          handle synchronous exceptions, there's an additional
-          complication: the OS kernel ordinarily allocates the signal
-          context and siginfo structures on the stack of the thread
-          that received the signal; in practice, that means "wherever
-          RSP is pointing."  Clozure CL's
-          <a class="xref" href="#Register-and-stack-usage-conventions" title="17.2.3.Â Register and stack usage conventions">SectionÂ 17.2.3, âRegister and stack usage conventionsâ</a>
-          require that the thread's value stackâwhere RSP is
-          usually pointing while lisp code is runningâcontain
-          only "nodes" (properly tagged lisp objects), and scribbling
-          a signal context all over the value stack would violate this
-          requirement.  To maintain consistency, the sigaltstack()
-          mechanism is used to cause the signal to be delivered on
-          (and the signal context and siginfo to be allocated on) a
-          special stack area (the last few pages of the thread's
-          control stack, in practice).  When the signal handler runs,
-          it (carefully) copies the signal context and siginfo to the
-          thread's control stack and makes RSP point into that stack
-          before invoking the "real" signal handler. The effect of
-          this hack is that the "real" signal handler always runs on
-          the thread's control stack.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Once the exception handler has obtained the global
-          exception lock, it uses the values of the signal number,
-          siginfo_t, and signal context arguments to determine the
-          (logical) cause of the exception.  Some exceptions may be
-          caused by factors that should generate lisp errors or other
-          serious conditions (stack overflow); if this is the case, the
-          kernel code may release the global exception lock and call out
-          to lisp code.  (The lisp code in question may need to repeat
-          some of the exception decoding process; in particular, it
-          needs to be able to interpret register values in the signal
-          context that it receives as an argument.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In some cases, the lisp kernel exception handler may not
-          be able to recover from the exception (this is currently true
-          of some types of memory-access fault and is also true of traps
-          or illegal instructions that occur during foreign code
-          execution.  In such cases, the kernel exception handler
-          reports the exception as "unhandled", and the kernel debugger
-          is invoked.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If the kernel exception handler identifies the
-          exception's cause as being a transient out-of-memory condition
-          (indicating that the current thread needs more memory to cons
-          in), it tries to make that memory available.  In some cases,
-          doing so involves invoking the GC.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Threads-comma---exceptions-comma---and-the-GC"></a>17.1.3.Â Threads, exceptions, and the GC</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL's GC is not concurrent: when the GC is invoked in
-          response to an exception in a particular thread, all other
-          lisp threads must stop until the GC's work is done.  The
-          thread that triggered the GC iterates over the global TCR
-          list, sending each other thread a distinguished "suspend"
-          signal, then iterates over the list again, waiting for a
-          per-thread semaphore that indicates that the thread has
-          received the "suspend" signal and responded appropriately.
-          Once all other threads have acknowledged the request to
-          suspend themselves, the GC thread can run the GC proper (after
-          doing any necessary <a class="xref" href="#PC-lusering" title="17.1.4.Â PC-lusering">SectionÂ 17.1.4, âPC-luseringâ</a>.)  Once the
-          GC's completed its work, the thread that invoked the GC
-          iterates over the global TCR list, raising a per-thread
-          "resume" semaphore for each other thread.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The signal handler for the asynchronous "suspend" signal
-          is entered with all asynchronous signals blocked.  It saves
-          its signal-context argument in a TCR slot, raises the tcr's
-          "suspend" semaphore, then waits on the TCR's "resume"
-          semaphore.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The GC thread has access to the signal contexts of all
-          TCRs (including its own) at the time when the thread received
-          an exception or acknowledged a request to suspend itself.
-          This information (and information about stack areas in the TCR
-          itself) allows the GC to identify the "stack locations and
-          register contents" that are elements of the GC's root
-          set.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="PC-lusering"></a>17.1.4.Â PC-lusering</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">It's not quite accurate to say that Clozure CL's compiler
-          and runtime follow precise stack and register usage
-          conventions at all times; there are a few exceptions:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>On both PPC and x86-64 platforms, consing isn't
-	          fully atomic.It takes at least a few instructions to
-	          allocate an object in memory(and slap a header on it if
-	          necessary); if a thread is interrupted in the middle of
-	          that instruction sequence, the new object may or may
-	          not have been created or fully initialized at the point in
-	          time that the interrupt occurred.  (There are actually a
-	          few different states of partial initialization)</p>
-                </li>
-                <li class="listitem">
-                  <p>On the PPC, the common act of building a lisp
-	          control stack frame involves allocating a four-word frame
-	          and storing three register values into that frame.  (The
-	          fourth word - the back pointer to the previous frame - is
-	          automatically set when the frame is allocated.)  The
-	          previous contents of those three words are unknown (there
-	          might have been a foreign stack frame at the same address a
-	          few instructions earlier),so interrupting a thread that's
-	          in the process of initializing a PPC control stack frame
-	          isn't GC-safe.</p>
-                </li>
-                <li class="listitem">
-                  <p>There are similar problems with the initialization
-	          of temp stackframes on the PPC.  (Allocation and
-	          initialization doesn't happen atomically, and the newly
-	          allocated stack memory may have undefined contents.)</p>
-                </li>
-                <li class="listitem">
-                  <p><a class="xref" href="#The-ephemeral-GC" title="17.5.Â The ephemeral GC">SectionÂ 17.5, âThe ephemeral GCâ</a>'s write barrier
-	          has to be implemented atomically (i.e.,both an
-	          intergenerational store and the update of a
-	          corresponding reference bit has to happen without
-	          interruption, or neither of these events can
-	          happen.)</p>
-                </li>
-                <li class="listitem">
-                  <p>There are a few more similar cases.</p>
-                </li>
-              </ul>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Fortunately, the number of these non-atomic instruction
-          sequences is small, and fortunately it's fairly easy for the
-          interrupting thread to recognize when the interrupted thread
-          is in the middle of such a sequence.  When this is detected,
-          the interrupting thread modifies the state of the interrupted
-          thread (modifying its PC and other registers) so that it is no
-          longer in the middle of such a sequence (it's either backed
-          out of it or the remaining instructions are emulated.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">This works because (a) many of the troublesome
-          instruction sequences are PPC-specific and it's relatively
-          easy to partially disassemble the instructions surrounding the
-          interrupted thread's PC on the PPC and (b) those instruction
-          sequences are heavily stylized and intended to be easily
-          recognized.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Register-usage-and-tagging"></a>17.2.Â Register usage and tagging</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Register-usage-and-tagging-overview"></a>17.2.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Regardless of other details of its implementation, a
-	      garbage collector's job is to partition the set of all
-	      heap-allocated lisp objects (CONSes, STRINGs, INSTANCEs, etc.)
-	      into two subsets.  The first subset contains all objects that
-	      are transitively referenced from a small set of "root" objects
-	      (the contents of the stacks and registers of all active
-	      threads at the time the GC occurs and the values of some
-	      global variables.)  The second subset contains everything
-	      else: those lisp objects that are not transitively reachable
-	      from the roots are garbage, and the memory occupied by garbage
-	      objects can be reclaimed (since the GC has just proven that
- 	      it's impossible to reference them.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The set of live, reachable lisp objects basically form
-          the nodes of a (usually large) graph, with edges from each
-          node A to any other objects (nodes) that object A
-          references.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Some nodes in this graph can never have outgoing edges:
-          an array with a specialized numeric or character type usually
-          represents its elements in some (possibly more compact)
-          specialized way.  Some nodes may refer to lisp objects that
-          are never allocated in memory (FIXNUMs, CHARACTERs,
-          SINGLE-FLOATs on 64-bit platforms ..)  This latter class of
-          objects are sometimes called "immediates", but that's a little
-          confusing because the term "immediate" is sometimes used to
-          refer to things that can never be part of the big connectivity
-          graph (e.g., the "raw" bits that make up a floating-point
-          value, foreign address, or numeric value that needs to be used
-          - at least fleetingly - in compiled code.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">For the GC to be able to build the connectivity graph
-          reliably, it's necessary for it to be able to reliably tell
-          (a) whether or not a "potential root" - the contents of a
-          machine register or stack location - is in fact a node and (b)
-          for any node, whether it may have components that refer to
-          other nodes.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">There's no reliable way to answer the first question on
-          stock hardware.  (If everything was a node, as might be the
-          case on specially microcoded "lisp machine" hardware, it
-          wouldn't even need to be asked.)  Since there's no way to just
-          look at a machine word (the contents of a machine register or
-          stack location) and tell whether or not it's a node or just
-          some random non-node value, we have to either adopt and
-          enforce strict conventions on register and stack usage or
-          tolerate ambiguity.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">"Tolerating ambiguity" is an approach taken by some
-          ("conservative") GC schemes; by contrast, Clozure CL's GC is
-          "precise", which in this case means that it believes that the
-          contents of certain machine registers and stack locations are
-          always nodes and that other registers and stack locations are
-          never nodes and that these conventions are never violated by
-          the compiler or runtime system.  The fact that threads are
-          preemptively scheduled means that a GC could occur (because of
-          activity in some other thread) on any instruction boundary,
-          which in turn means that the compiler and runtime system must
-          follow precise <a class="xref" href="#Register-and-stack-usage-conventions" title="17.2.3.Â Register and stack usage conventions">SectionÂ 17.2.3, âRegister and stack usage conventionsâ</a> at all
-          times.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Once we've decided that a given machine word is a node,
-          a <a class="xref" href="#Tagging-scheme" title="17.2.4.Â Tagging scheme">SectionÂ 17.2.4, âTagging schemeâ</a> describes how the node's
-          value and type are encoded in that machine word.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Most of this discussionâso farâhas treated
-          things from the GC's very low-level perspective. From a much
-          higher point of view, lisp functions accept nodes as
-          arguments, return nodes as values, and (usually) perform
-          some operations on those arguments in order to produce those
-          results.  (In many cases, the operations in question involve
-          raw non-node values.)  Higher-level parts of the lisp type
-          system (functions like TYPE-OF and CLASS-OF, etc.) depend on
-          the <a class="xref" href="#Tagging-scheme" title="17.2.4.Â Tagging scheme">SectionÂ 17.2.4, âTagging schemeâ</a>.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="pc-locatives-on-the-PPC"></a>17.2.2.Â pc-locatives on the PPC</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">On the PPC, there's a third case (besides "node" and
-          "immediate" values).  As discussed below, a node that denotes
-          a memory-allocated lisp object is a biased (tagged) pointer
-          -to- that object; it's not generally possible to point -into-
-          some composite (multi-element) object (such a pointer would
-          not be a node, and the GC would have no way to update the
-          pointer if it were to move the underlying object.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Such a pointer ("into" the interior of a heap-allocated
-          object) is often called a <span class="emphasis"><em>locative</em></span>; the
-          cases where locatives are allowed in Clozure CL mostly involve
-          the behavior of function call and return instructions.  (To be
-          technically accurate, the other case also arises on x86-64, but
-          that case isn't as user-visible.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">On the PowerPC (both PPC32 and PPC64), all machine
-          instructions are 32 bits wide and all instruction words are
-          allocated on 32-bit boundaries.  In PPC Clozure CL, a CODE-VECTOR
-          is a specialized type of vector-like object; its elements
-          are 32-bit PPC machine instructions.  A CODE-VECTOR is an
-          attribute of a FUNCTION object; a function call involves
-          accessing the function's code-vector and jumping to the
-          address of its first instruction.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">As each instruction in the code vector sequentially
-          executes, the hardware program counter (PC) register advances
-          to the address of the next instruction (a locative into the
-          code vector); since PPC instructions are always 32 bits wide
-          and aligned on 32-bit boundaries, the low two bits of the PC
-          are always 0.  If the function executes a call (simple call
-          instructions have the mnemonic "bl" on the PPC, which stands
-          for "branch and link"), the address of the next instruction
-          (also a word-aligned locative into a code-vector) is copied
-          into the special- purpose PPC "link register" (lr); a function
-          returns to its caller via a "branch to link register" (blr)
-          instruction.  Some cases of function call and return might
-          also use the PPC's "count register" (ctr), and if either the
-          lr or ctr needs to be stored in memory it needs to first be
-          copied to a general-purpose register.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL's GC understands that certain registers contain
-          these special "pc-locatives" (locatives that point into
-          CODE-VECTOR objects); it contains special support for
-          finding the containing CODE-VECTOR object and for adjusting
-          all of these "pc-locatives" if the containing object is
-          moved in memory.  The first part of that
-          operationâfinding the containing objectâis
-          possible and practical on the PPC because of architectural
-          artifacts (fixed-width instructions and arcana of
-          instruction encoding.)  It's not possible on x86-64, but
-          fortunately not necessary either (though the second part -
-          adjusting the PC/RIP when the containing object moves) is
-          both necessary and simple.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Register-and-stack-usage-conventions"></a>17.2.3.Â Register and stack usage conventions</h3>
-                </div>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Stack-conventions"></a>17.2.3.1.Â Stack conventions</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">On both PPC and X86 platforms, each lisp thread uses 3
-            stacks; the ways in which these stacks are used differs
-            between the PPC and X86.</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">Each thread has:</p>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                <ul class="itemizedlist" type="disc">
-                  <li class="listitem">
-                    <p>A "control stack".  On both platforms, this is
-	            "the stack" used by foreign code.  On the PPC, it
-	            consists of a linked list of frames where the first word
-	            in each frame points to the first word in the previous
-	            frame (and the outermost frame points to 0.)  Some
-	            frames on a PPC control stack are lisp frames; lisp
-	            frames are always 4 words in size and contain (in
-	            addition to the back pointer to the previous frame) the
-	            calling function (a node), the return address (a
-	            "locative" into the calling function's code-vector), and
-	            the value to which the value-stack pointer (see below)
-	            should be restored on function exit.  On the PPC, the GC
-	            has to look at control-stack frames, identify which of
-	            those frames are lisp frames, and treat the contents of
-	            the saved function slot as a node (and handle the return
-	            address locative specially.)  On x86-64, the control
-	            stack is used for dynamic-extent allocation of immediate
-	            objects.  Since the control stack never contains nodes
-	            on x86-64, the GC ignores it on that platform.
-	            Alignment of the control stack follows the ABI
-	            conventions of the platform (at least at any point in
-	            time where foreign code could run.)  On PPC, the r1
-	            register always points to the top of the current
-	            thread's control stack; on x86-64, the RSP register
-	            points to the top of the current thread's control stack
-	            when the thread is running foreign code and the address
-	            of the top of the control stack is kept in the thread's
-	            TCR (see <a class="xref" href="#The-Thread-Context-Record" title="17.1.1.Â The Thread Context Record">SectionÂ 17.1.1, âThe Thread Context Recordâ</a>
-	            when not running foreign code.  The control stack "grows
-	            down."</p>
-                  </li>
-                  <li class="listitem">
-                    <p>A "value stack".  On both platforms, all values on
-	            the value stack are nodes (including "tagged return
-	            addresses" on x86-64.)  The value stack is always
-	            aligned to the native word size; objects are always
-	            pushed on the value stack using atomic instructions
-	            ("stwu"/"stdu" on PPC, "push" on x86-64), so the
-	            contents of the value stack between its bottom and top
-	            are always unambiguously nodes; the compiler usually
-	            tries to pop or discard nodes from the value stack as
-	            soon as possible after their last use (as soon as they
-	            may have become garbage.)  On x86-64, the RSP register
-	            addresses the top of the value stack when running lisp
-	            code; that address is saved in the TCR when running
-	            foreign code.  On the PPC, a dedicated register (VSP,
-	            currently r15) is used to address the top of the value
-	            stack when running lisp code, and the VSP value is saved
-	            in the TCR when running foreign code.  The value stack
-	            grows down.</p>
-                  </li>
-                  <li class="listitem">
-                    <p>A "temp stack".  The temp stack consists of a
-	            linked list of frames, each of which points to the
-	            previous temp stack frame.  The number of native
-	            machine words in each temp stack frame is always even,
-	            so the temp stack is aligned on a two-word (64- or
-	            128-bit) boundary.  The temp stack is used for
-	            dynamic-extent objects on both platforms; on the PPC,
-	            it's used for essentially all such objects (regardless
-	            of whether or not the objects contain nodes); on the
-	            x86-64, immediate dynamic-extent objects (strings,
-	            foreign pointers, etc.)  are allocated on the control
-	            stack and only node-containing dynamic-extent objects
-	            are allocated on the temp stack.  Data structures used
-	            to implement CATCH and UNWIND-PROTECT are stored on
-	            the temp stack on both ppc and x86-64.  Temp stack
-	            frames are always doublenode aligned and objects
-	            within a temp stack frame are aligned on doublenode
-	            boundaries.  The first word in each frame contains a
-	            back pointer to the previous frame; on the PPC, the
-	            second word is used to indicate to the GC whether the
-	            remaining objects are nodes (if the second word is 0)
-	            or immediate (otherwise.)  On x86-64, where temp stack
-	            frames always contain nodes, the second word is always
-	            0.  The temp stack grows down.  It usually takes
-	            several instructions to allocate and safely initialize
-	            a temp stack frame that's intended to contain nodes,
-	            and the GC has to recognize the case where a thread is
-	            in the process of allocating and initializing a temp
-	            stack frame and take care not to interpret any
-	            uninitialized words in the frame as nodes. The PPC
-	            keeps the current top of the temp stack in a dedicated
-	            register (TSP, currently r12) when running lisp code
-	            and saves this register's value in the TCR when
-	            running foreign code.  The x86-64 keeps the address of
-	            the top of each thread's temp stack in the thread's
-	            TCR.</p>
-                  </li>
-                </ul>
-              </div>
-            </div>
-            <div class="sect3" lang="en" xml:lang="en">
-              <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-                <div>
-                  <div>
-                    <h4 class="title"><a id="Register-conventions"></a>17.2.3.2.Â Register conventions</h4>
-                  </div>
-                </div>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">If there are a "reasonable" (for some value of
-            "reasonable") number of general-purpose registers and the
-            instruction set is "reasonably" orthogonal (most
-            instructions that operate on GPRs can operate on any GPR),
-            then it's possible to statically partition the GPRs into at
-            least two sets: "immediate registers" never contain nodes,
-            and "node registers" always contain nodes.  (On the PPC, a
-            few registers are members of a third set of "PC locatives",
-            and on both platforms some registers may have dedicated
-            roles as stack or heap pointers; the latter class is treated
-            as immediates by the GC proper but may be used to help
-            determine the bounds of stack and heap memory areas.)</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">The ultimate definition of register partitioning is
-            hardwired into the GC in functions like "mark_xp()" and
-            "forward_xp()", which process the values of some of the
-            registers in an exception frame as nodes and may give some
-            sort of special treatment to other register values they
-            encounter there.)</p>
-              <p xmlns="http://www.w3.org/1999/xhtml">On x86-64, the static register partitioning scheme involves:</p>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                <ul class="itemizedlist" type="disc">
-                  <li class="listitem">
-                    <p>(only) three "immediate" registers.</p>
-                    <p>The RAX, RCX, and RDX registers are used as the
-	            implicit operands and results of some extended-precision
-	            multiply and divide instructions which generally involve
-	            non-node values; since their use in these instructions
-	            means that they can't be guaranteed to contain node
-	            values at all times, it's natural to put these registers
-	            in the "immediate" set. RAX is generally given the
-	            symbolic name "imm0", RDX is given the symbolic name
-	            "imm1" and RCX is given the symbolic name "imm2"; you
-	            may see these names in disassembled code, usually in
-	            operations involving type checking, array indexing, and
-	            foreign memory and function access.</p>
-                  </li>
-                  <li class="listitem">
-                    <p>(only) two "dedicated" registers.</p>
-                    <p>RSP and RBP have
-	            dedicated functionality dictated by the hardware and
-	            calling conventions.</p>
-                  </li>
-                  <li class="listitem">
-                    <p>11 "node" registers.</p>
-                    <p>All other registers (RBX, RSI, RDI, and R8-R15)
-	            are asserted to contain node values at (almost) all
-	            times; legacy "string" operations that implicitly use RSI
-	            and/or RDI are not used.</p>
-                  </li>
-                </ul>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-		On 32-bit x86, the default register partitioning scheme
-		involves:
-	      </p>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                <ul class="itemizedlist" type="disc">
-                  <li class="listitem">
-                    <p>
-		  A single "immediate" register.
-		  </p>
-                    <p>
-		    The EAX register is given the symbolic name
-		    "imm0".
-		  </p>
-                  </li>
-                  <li class="listitem">
-                    <p>
-		    There are two "dedicated" registers.
-		  </p>
-                    <p>
-		    ESP and EBP have dedicated functionality dictated by the
-		    hardware and calling conventions.
-		  </p>
-                  </li>
-                  <li class="listitem">
-                    <p>
-		    5 "node" registers.
-		  </p>
-                    <p>
-		    The remaining registers, (EBX, ECX, EDX, ESI, EDI) normally
-		    contain node values.  As on x86-64, string instructions
-		    that implicity use ESI and EDI are not used.
-		  </p>
-                  </li>
-                </ul>
-              </div>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-		There are times when this default partitioning scheme is
-		inadequate.  As mentioned in the x86-64 section, there are
-		instructions like the extended-precision MUL and DIV which
-		require the use of EAX and EDX.  We therefore need a way to
-		change this partitioning at run-time.
-	      </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">
-		Two schemes are employed.  The first uses a mask in the TCR
-		that contains a bit for each register.  If the bit is set,
-		the register is interpreted by the GC as a node register; if it's
-		clear, the register is treated as an immediate register.  The
-		second scheme uses the direction flag in the EFLAGS register.
-		If DF is set, EDX is treated as an immediate register.
-		(We don't use the string instructions, so DF isn't otherwise
-		used.)
-	      </p>
-              <p xmlns="http://www.w3.org/1999/xhtml">On the PPC, the static register partitioning scheme
-            involves:</p>
-              <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-                <ul class="itemizedlist" type="disc">
-                  <li class="listitem">
-                    <p>6 "immediate" registers.</p>
-                    <p>Registers r3-r8 are given
-	            the symbolic names imm0-imm5.  As a RISC architecture
-	            with simpler addressing modes, the PPC probably
-	            uses immediate registers a bit more often than the CISC
-	            x86-64 does, but they're generally used for the same sort
-	            of things (type checking, array indexing, FFI,
-	            etc.)</p>
-                  </li>
-                  <li class="listitem">
-                    <p>9 dedicated registers
-	            </p>
-                    <div class="itemizedlist">
-                      <ul class="itemizedlist" type="circle">
-                        <li class="listitem">
-                          <p>r0 (symbolic name rzero) always contains the
-		              value 0 when running lisp code.  Its value is
-		              sometimes read as 0 when it's used as the base
-		              register in a memory address; keeping the value 0
-		              there is sometimes convenient and avoids
-		              asymmetry.</p>
-                        </li>
-                        <li class="listitem">
-                          <p>r1 (symbolic name sp) is the control stack
-		              pointer, by PPC convention.</p>
-                        </li>
-                        <li class="listitem">
-                          <p>r2 is used to hold the current thread's TCR on
-		              ppc64 systems; it's not used on ppc32.</p>
-                        </li>
-                        <li class="listitem">
-                          <p>r9 and r10 (symbolic names allocptr and
-		              allocbase) are used to do per-thread memory
-		              allocation</p>
-                        </li>
-                        <li class="listitem">
-                          <p>r11 (symbolic name nargs) contains the number
-		              of function arguments on entry and the number of
-		              return values in multiple-value returning
-		              constructs.  It's not used more generally as either
-		              a node or immediate register because of the way that
-		              certain trap instruction encodings are
-		              interpreted.</p>
-                        </li>
-                        <li class="listitem">
-                          <p>r12 (symbolic name tsp) holds the top of the
-		              current thread's temp stack.</p>
-                        </li>
-                        <li class="listitem">
-                          <p>r13 is used to hold the TCR on PPC32 systems;
-		              it's not used on PPC64.</p>
-                        </li>
-                        <li class="listitem">
-                          <p>r14 (symbolic name loc-pc) is used to copy
-		              "pc-locative" values between main memory and
-		              special-purpose PPC registers (LR and CTR) used in
-		              function-call and return instructions.</p>
-                        </li>
-                        <li class="listitem">
-                          <p>r15 (symbolic name vsp) addresses the top of
-		              the current thread's value stack.</p>
-                        </li>
-                        <li class="listitem">
-                          <p>lr and ctr are PPC branch-unit registers used
-		              in function call and return instructions; they're
-		              always treated as "pc-locatives", which precludes
-		              the use of the ctr in some PPC looping
-		              constructs.</p>
-                        </li>
-                      </ul>
-                    </div>
-                    <p>
-	          </p>
-                  </li>
-                  <li class="listitem">
-                    <p>17 "node" registers</p>
-                    <p>r15-r31 are always treated as node
-	            registers</p>
-                  </li>
-                </ul>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Tagging-scheme"></a>17.2.4.Â Tagging scheme</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL always allocates lisp objects on double-node
-          (64-bit for 32-bit platforms, 128-bit for 64-bit platforms)
-          boundaries; this mean that the low 3 bits (32-bit lisp) or 4
-          bits (64-bit lisp) are always 0 and are therefore redundant
-          (we only really need to know the upper 29 or 60 bits in order
-          to identify the aligned object address.)  The extra bits in a
-          lisp node can be used to encode at least some information
-          about the node's type, and the other 29/60 bits represent
-          either an immediate value or a doublenode-aligned memory
-          address.  The low 3 or 4 bits of a node are called the node's
-          "tag bits", and the conventions used to encode type
-          information in those tag bits are called a "tagging
-          scheme."</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">It might be possible to use the same tagging scheme on
-          all platforms (at least on all platforms with the same word
-          size and/or the same number of available tag bits), but there
-          are often some strong reasons for not doing so.  These
-          arguments tend to be very machine-specific: sometimes, there
-          are fairly obvious machine-dependent tricks that can be
-          exploited to make common operations on some types of tagged
-          objects faster; other times, there are architectural
-          restrictions that make it impractical to use certain tags for
-          certain types.  (On PPC64, the "ld" (load doubleword) and
-          "std" (store doubleword) instructions - which load and store a
-          GPR operand at the effective address formed by adding the
-          value of another GPR operand and a 16-bit constant operand -
-          require that the low two bits of that constant operand be 0.
-          Since such instructions would typically be used to access the
-          fields of things like CONS cells and structures, it's
-          desirable that that the tags chosen for CONS cells and
-          structures allow the use of these instructions as opposed to
-          more expensive alternatives.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">One architecture-dependent tagging trick that works well
-          on all architectures is to use a tag of 0 for FIXNUMs: a
-          fixnum basically encodes its value shifted left a few bits
-          and keeps those low bits clear. FIXNUM addition,
-          subtraction, and binary logical operations can operate
-          directly on the node operands, addition and subtraction can
-          exploit hardware-based overflow detection, and (in the
-          absence of overflow) the hardware result of those operations
-          is a node (fixnum).  Some other slightly-less-common
-          operations may require a few extra instructions, but
-          arithmetic operations on FIXNUMs should be as cheap as
-          possible and using a tag of zero for FIXNUMs helps to ensure
-          that it will be.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If we have N available tag bits (N = 3 for 32-bit Clozure CL
-	      and N = 4 for 64-bit Clozure CL), this way of representing
-	      fixnums with the low M bits forced to 0 works as long as M
-	      &lt;= N.  The smaller we make M, the larger the values of
-	      MOST-POSITIVE-FIXNUM and MOST-NEGATIVE become; the larger we
-	      make N, the more distinct non-FIXNUM tags become available.
-	      A reasonable compromise is to choose M = N-1; this basically
-	      yields two distinct FIXNUM tags (one for even fixnums, one
-	      for odd fixnums), gives 30-bit fixnums on 32-bit platforms
-	      and 61-bit fixnums on 64-bit platforms, and leaves us with 6
-	      or 14 tags to encoded other types.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Once we get past the assignment of FIXNUM tags, things
-          quickly devolve into machine-dependencies.  We can fairly
-          easily see that we can't directly tag all other primitive
-          lisp object types with only 6 or 14 available tag values;
-          the details of how types are encoded vary between the ppc32,
-          ppc64, and x86-64 implementations, but there are some
-          general common principles:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-              <ul class="itemizedlist" type="disc">
-                <li class="listitem">
-                  <p>CONS cells always contain exactly 2 elements and are
-	          usually fairly common.It therefore makes sense to give
-	          CONS cells their own tag.  Unlike the fixnum case -
-	          where a tag value of 0 had positive implications - there
-	          doesn't seem to be any advantage to using any particular
-	          value.  (A longtime ago - in the case of 68K MCL - the
-	          CONS tag and the order of CAR and CDR in memory were
-	          chosen to allow smaller, cheaper addressing modes to be
-	          used to "cdr down a list."  That's not a factor on ppc
-	          or x86-64, but all versions of Clozure CL still store the CDR
-	          of a CONS cell first in memory.  It doesn't matter, but
-	          doing it the way that the host system did made
-	          boostrapping to a new target system a little easier.)
-	        </p>
-                </li>
-                <li class="listitem">
-                  <p>Any way you look at it, NIL is a bit
-	          ... unusual. NIL is both a SYMBOL and a LIST (as well as
-	          being a canonical truth value and probably a few other
-	          things.)  Its role as a LIST is probably much more
-	          important to most programs than its role as a SYMBOL is:
-	          LISTP has to be true of NIL and primitives like CAR and
-	          CDR do LISTP implicitly when safe and want that
-	          operation to be fast. There are several possible
-	          approaches to this problem; Clozure CL uses two of them. On
-	          PPC32 and X86-64, NIL is basically a weird CONS cell
-	          that straddles two doublenodes; the tag of NIL is unique
-	          and congruent modulo 4 (modulo 8 on 64-bit) with the tag
-	          used for CONS cells.  LISTP is therefore true of any
-	          node whose low 2 (or 3) bits contain the appropriate tag
-	          value (it's not otherwise necessary to special-case
-	          NIL.)  SYMBOL accessors (SYMBOL-NAME, SYMBOL-VALUE,
-	          SYMBOL-PLIST ..) -do- have to special-case NIL (and
-	          access the components of an internal proxy symbol.) On
-	          PPC64 (where architectural restrictions dictate the set
-	          of tags that can be used to access fixed components of
-	          an object), that approach wasn't practical.  NIL is just
-	          a distinguished SYMBOL,and it just happens to be the
-	          case that its pname slot and values slot are at the same
-	          offsets from a tagged pointer as a CONS cell's CDR and
-	          CAR would be.  NIL's pname is set to NIL (SYMBOL-NAME
-	          checks for this and returns the string "NIL"), and LISTP
-	          (and therefore safe CAR and CDR) has to check for (OR
-	          NULL CONSP). At least in the case of CAR and CDR, the
-	          fact that the PPC has multiple condition-code fields
-	          keeps that extra test from being prohibitively
-	          expensive.  On IA-32, we can't afford to dedicate a tag to
-		  NIL. NIL is therefore just a distinguished CONS
-		  cell, and we have to explicitly check for a NIL argument
-		  in CONSP/RPLACA/RPLACD.
-		</p>
-                </li>
-                <li class="listitem">
-                  <p>Some objects are immediate (but not FIXNUMs). This
-	          is true of CHARACTERs and, on 64-bit platforms,
-	          SINGLE-FLOATs. It's also true of some nodes used in the
-	          runtime system (special values used to indicate unbound
-	          variables and slots, for instance.) On 64-bit platforms,
-	          SINGLE-FLOATs have their own unique tag (making them a
-	          little easier to recognize; on all platforms, CHARACTERs
-	          share a tag with other immediate objects (unbound
-	          markers) but are easy to recognize (by looking at
-	          several of their low bits.)  The GC treats any node with
-	          an immediate tag (and any node with a fixnum tag) as a
-	          leaf.</p>
-                </li>
-                <li class="listitem">
-                  <p>There are some advantages to treating everything
-	          elseâmemory-allocated objects that aren't CONS
-	          cellsâuniformly.There are some disadvantages to
-	          that uniform treatment as well, and the treatment of
-	          "memory-allocated non-CONS objects" isn't entirely
-	          uniform across all Clozure CL implementations.  Let's first
-	          pretend that the treatment is uniform, then discuss the
-	          ways in which it isn't.The "uniform approach" is to
-	          treat all memory-allocated non-CONS objects as if they
-	          were vectors; this use of the term is a little looser
-	          than what's implied by the CL VECTOR type.  Clozure CL
-	          actually uses the term "uvector" to mean "a
-	          memory-allocated lisp object other than a CONS cell,
-	          whose first word is a header that describes the object's
-	          type and the number of elements that it contains."  In
-	          this view, a SYMBOL is a UVECTOR, as is a STRING, a
-	          STANDARD-INSTANCE, a CL array or vector, a FUNCTION, and
-	          even a DOUBLE-FLOAT. In the PPC implementations (where
-	          things are a little more ... uniform), a single tag
-	          value is used to denote any uvector; in order to
-	          determine something more specific about the type of the
-	          object in question, it's necessary to fetch the low byte
-	          of the header word from memory.  On the x86-64 platform,
-	          certain types of uvectors - SYMBOLs and FUNCTIONs -are
-	          given their own unique tags.  The good news about the
-	          x86-64 approach is that SYMBOLs and FUNCTIONs can be
-	          recognized without referencing memory; the slightly bad
-	          news is that primitive operations that work on
-	          UVECTOR-tagged objectsâlike the function
-	          CCL:UVREFâdon't work on SYMBOLs or FUNCTIONs on
-	          x86-64 (but -do- work on those types of objects in the
-	          PPC ports.) The header word that precedes a UVECTOR's
-	          data in memory contains 8 bits of type information in
-	          the low byte and either 24 or 56 bits of "element-count"
-	          information in the rest of the word.  (This is where the
-	          sometimes-limiting value of 2^24 for
-	          ARRAY-TOTAL-SIZE-LIMIT on 32-bit platforms comes from.)
-	          The low byte of the headerâsometimes called the
-	          uvector's subtagâis itself tagged (which means
-	          that the header is tagged.)  The (3 or 4) tag bits in
-	          the subtag are used to determine whether the uvector's
-	          elements are nodes or immediates. (A UVECTOR whose
-	          elements are nodes is called a GVECTOR; a UVECTOR whose
-	          elements are immediates is called an IVECTOR.  This
-	          terminology came from Spice Lisp, which was a
-	          predecessor of CMUCL.)  Even though a uvector header is
-	          tagged, a header is not a node.  There's no (supported)
-	          way to get your hands on one in lisp and doing so could
-	          be dangerous.  (If the value of a header wound up in a
-	          lisp node register and that register wound up getting
-	          pushed on a thread's value stack, the GC might
-	          misinterpret that situation to mean that there was a
-	          stack-allocated UVECTOR on the value stack.)</p>
-                </li>
-              </ul>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Heap-Allocation"></a>17.3.Â Heap Allocation</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">When the Clozure CL kernel first
-        starts up, a large contiguous chunk of the process's address
-        space is mapped as "anonymous, no access" memory. ("Large"
-        means different things in different contexts; on LinuxPPC32,
-        it means "about 1 gigabyte", on DarwinPPC32, it means "about 2
-        gigabytes", and on current 64-bit platforms it ranges from 128
-        to 512 gigabytes, depending on OS. These values are both
-        defaults and upper limits;
-        the <code class="literal">--heap-reserve</code> argument can be used to
-        try to reserve less than the default.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Reserving address space that can't (yet) be read or
-        written to doesn't cost much; in particular, it doesn't require
-        that corresponding swap space or physical memory be available.
-        Marking the address range as being "mapped" helps to ensure that
-        other things (results from random calls to malloc(), dynamically
-        loaded shared libraries) won't be allocated in this region that
-        lisp has reserved for its own heap growth.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">A small portion (around 1/32 on 32-bit platforms and 1/64
-        on 64-bit platforms) of that large chunk of address space is
-        reserved for GC data structures.  Memory pages reserved for
-        these data structures are mapped read-write as pages are made
-        writable in the main portion of the heap.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The initial heap image is mapped into this reserved
-        address space and an additional (LISP-HEAP-GC-THRESHOLD) bytes
-        are mapped read-write.  GC data structures grow to match the
-        amount of GC-able memory in the initial image plus the gc
-        threshold, and control is transferred to lisp code.
-        Inevitably, that code spoils everything and starts consing;
-        there are basically three layers of memory allocation that can
-        go on.</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Per-thread-object-allocation"></a>17.3.1.Â Per-thread object allocation</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Each lisp thread has a private "reserved memory
-          segment"; when a thread starts up, its reserved memory segment
-          is empty.  PPC ports maintain the highest unallocated address
-          and the lowest allocatable address in the current segment in
-          registers when running lisp code; on x86-664, these values are
-          maintained in the current threads's TCR.  (An "empty" heap
-          segment is one whose high pointer and low pointer are equal.)
-          When a thread is not in the middle of allocating something, the
-          low 3 or 4 bits of the high and low pointers are clear (the
-          pointers are doublenode-aligned.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">A thread tries to allocate an object whose physical size
-          in bytes is X and whose tag is Y by:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>decrementing the "high" pointer by (- X Y)</p>
-                </li>
-                <li class="listitem">
-                  <p>trapping if the high pointer is less than the low
-	          pointer</p>
-                </li>
-                <li class="listitem">
-                  <p>using the (tagged) high pointer to initialize the
-	          object, if necessary</p>
-                </li>
-                <li class="listitem">
-                  <p>clearing the low bits of the high pointer</p>
-                </li>
-              </ol>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">On PPC32, where the size of a CONS cell is 8 bytes and
-          the tag of a CONS cell is 1, machine code which sets the arg_z
-          register to the result of doing (CONS arg_y arg_z) looks
-          like:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-  (SUBI ALLOCPTR ALLOCPTR 7)    ; decrement the high pointer by (- 8 1)
-  (TWLLT ALLOCPTR ALLOCBASE)    ; trap if the high pointer is below the base
-  (STW ARG_Z -1 ALLOCPTR)       ; set the CDR of the tagged high pointer
-  (STW ARG_Y 3 ALLOCPTR)        ; set the CAR
-  (MR ARG_Z ALLOCPTR)           ; arg_z is the new CONS cell
-  (RLWINM ALLOCPTR ALLOCPTR 0 0 28)     ; clear tag bits
-	    </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">On x86-64, the idea's similar but the implementation is
-          different.  The high and low pointers to the current thread's
-          reserved segment are kept in the TCR, which is addressed by
-          the gs segment register. An x86-64 CONS cell is 16 bytes wide
-          and has a tag of 3; we canonically use the temp0 register to
-          initialize the object</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-  (subq ($ 13) ((% gs) 216))    ; decrement allocptr
-  (movq ((% gs) 216) (% temp0)) ; load allocptr into temp0
-  (cmpq ((% gs) 224) (% temp0)) ; compare to allocabase
-  (jg L1)                       ; skip trap
-  (uuo-alloc)                   ; uh, don't skip trap
-L1
-  (andb ($ 240) ((% gs) 216))   ; untag allocptr in the tcr
-  (movq (% arg_y) (5 (% temp0))) ; set the car
-  (movq (% arg_z) (-3 (% temp0))); set the cdr
-  (movq (% temp0) (% arg_z))    ; return the cons
-	    </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">If we don't take the trap (if allocating 8-16 bytes
-          doesn't exhaust the thread's reserved memory segment), that's
-          a fairly short and simple instruction sequence.  If we do take
-          the trap, we'll have to do some additional work in order to
-          get a new segment for the current thread.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Allocation-of-reserved-heap-segments"></a>17.3.2.Â Allocation of reserved heap segments</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">After the lisp image is first mapped into memory - and after
-          each full GC - the lisp kernel ensures that
-          (LISP-HEAP-GC-TRESHOLD) additional bytes beyond the current
-          end of the heap are mapped read-write.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If a thread traps while trying to allocate memory, the
-          thread goes through the usual exception-handling protocol (to
-          ensure that any other thread that GCs "sees" the state of the
-          trapping thread and to serialize exception handling.)  When
-          the exception handler runs, it determines the nature and size
-          of the failed allocation and tries to complete the allocation
-          on the thread's behalf (and leave it with a reasonably large
-          thread-specific memory segment so that the next small
-          allocation is unlikely to trap.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Depending on the size of the requested segment
-          allocation, the number of segment allocations that have
-          occurred since the last GC, and the EGC and GC thresholds, the
-          segment allocation trap handler may invoke a full or ephemeral
-          GC before returning a new segment.  It's worth noting that the
-          [E]GC is triggered based on the number of and size of these
-          segments that have been allocated since the last GC; it doesn't
-          have much to do with how "full" each of those per-thread
-          segments are.  It's possible for a large number of threads to
-          do fairly incidental memory allocation and trigger the GC as a
-          result; avoiding this involves tuning the per-thread
-          allocation quantum and the GC/EGC thresholds
-          appropriately.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Heap-growth"></a>17.3.3.Â Heap growth</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">All OSes on which Clozure CL currently runs use an
-          "overcommit" memory allocation strategy by default (though
-          some of them provide ways of overriding that default.)  What
-          this means in general is that the OS doesn't necessarily
-          ensure that backing store is available when asked to map pages
-          as read-write; it'll often return a success indicator from the
-          mapping attempt (mapping the pages as "zero-fill,
-          copy-on-write"), and only try to allocate the backing store
-          (swap space and/or physical memory) when non-zero contents are
-          written to the pages.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">It -sounds- like it'd be better to have the mmap() call
-          fail immediately, but it's actually a complicated issue.
-          (It's possible that other applications will stop using some
-          backing store before lisp code actually touches the pages that
-          need it, for instance.)  It's also not guaranteed that lisp
-          code would be able to "cleanly" signal an out-of-memory
-          condition if lisp is ... out of memory</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">I don't know that I've ever seen an abrupt out-of-memory
-	      failure that wasn't preceded by several minutes of excessive
-	      paging activity.  The most expedient course in cases like this
-	      is to either (a) use less memory or (b) get more memory; it's
-	      generally hard to use memory that you don't have.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="GC-details"></a>17.4.Â GC details</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The GC uses a Mark/Compact algorithm; its
-        execution time is essentially a factor of the amount of live
-        data in the heap. (The somewhat better-known Mark/Sweep
-        algorithms don't compact the live data but instead traverse the
-        garbage to rebuild free-lists; their execution time is therefore
-        a factor of the total heap size.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">As mentioned in <a class="xref" href="#Heap-Allocation" title="17.3.Â Heap Allocation">SectionÂ 17.3, âHeap Allocationâ</a>, two
-        auxiliary data structures (proportional to the size of the lisp
-        heap) are maintained. These are</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-            <ol class="orderedlist" type="1">
-              <li class="listitem">
-                <p>the markbits bitvector, which contains a bit for
-	        every doublenode in the dynamic heap (plus a few extra words
-	        for alignment and so that sub-bitvectors can start on word
-	        boundaries.)</p>
-              </li>
-              <li class="listitem">
-                <p>the relocation table, which contains a native word for
-	        every 32 or 64 doublenodes in the dynamic heap, plus an
-	        extra word used to keep track of the end of the heap.</p>
-              </li>
-            </ol>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">The total GC space overhead is therefore on the order of
-        3% (2/64 or 1/32).</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The general algorithm proceeds as follows:</p>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Mark-phase"></a>17.4.1.Â Mark phase</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Each doublenode in the dynamic heap has a corresponding
-          bit in the markbits vector. (For any doublenode in the heap,
-          the index of its mark bit is determined by subtracting the
-          address of the start of the heap from the address of the
-          object and dividing the result by 8 or 16.) The GC knows the
-          markbit index of the free pointer, so determining that the
-          markbit index of a doubleword address is between the start of
-          the heap and the free pointer can be done with a single
-          unsigned comparison.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The markbits of all doublenodes in the dynamic heap are
-          zeroed before the mark phase begins. An object is
-          <span class="emphasis"><em>marked</em></span> if the markbits of all of its
-          constituent doublewords are set and unmarked otherwise;
-          setting an object's markbits involves setting the corresponding
-          markbits of all constituent doublenodes in the object.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The mark phase traverses each root. If the tag of the
-          value of the root indicates that it's a non-immediate node
-          whose address lies in the lisp heap, then:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>If the object is already marked, do nothing.</p>
-                </li>
-                <li class="listitem">
-                  <p>Set the object's markbit(s).</p>
-                </li>
-                <li class="listitem">
-                  <p>If the object is an ivector, do nothing further.</p>
-                </li>
-                <li class="listitem">
-                  <p>If the object is a cons cell, recursively mark its
-	          car and cdr.</p>
-                </li>
-                <li class="listitem">
-                  <p>Otherwise, the object is a gvector. Recursively mark
-	          its elements.</p>
-                </li>
-              </ol>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Marking an object thus involves ensuring that its mark
-          bits are set and then recursively marking any pointers
-          contained within the object if the object was originally
-          unmarked. If this recursive step was implemented in the
-          obvious manner, marking an object would take stack space
-          proportional to the length of the pointer chain from some root
-          to that object. Rather than storing that pointer chain
-          implicitly on the stack (in a series of recursive calls to the
-          mark subroutine), the Clozure CL marker uses mixture of recursion
-          and a technique called <span class="emphasis"><em>link inversion</em></span> to
-          store the pointer chain in the objects themselves.  (Recursion
-          tends to be simpler and faster; if a recursive step notes that
-          stack space is becoming limited, the link-inversion technique
-          is used.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Certain types of objects are treated a little specially:</p>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="orderedlist">
-              <ol class="orderedlist" type="1">
-                <li class="listitem">
-                  <p>To support a feature called <span class="emphasis"><em>GCTWA
-                <sup>[<a id="idp46265808" href="#ftn.idp46265808" class="footnote">1</a>]</sup>
-	            , </em></span>the vector that contains the internal
-	          symbols of the current package is marked on entry to the
-	          mark phase, but the symbols themselves are not marked at
-	          this time. Near the end of the mark phase, symbols
-	          referenced from this vector which are not otherwise
-	          marked are marked if and only if they're somehow
-	          distinguishable from newly created symbols (by virtue of
-	          their having function bindings, value bindings, plists,
-	          or other attributes.)</p>
-                </li>
-                <li class="listitem">
-                  <p>Pools have their first element set to NIL before any
-	          other elements are marked.</p>
-                </li>
-                <li class="listitem">
-                  <p>All hash tables have certain fields (used to cache
-	          previous results) invalidated.</p>
-                </li>
-                <li class="listitem">
-                  <p>Weak Hash Tables and other weak objects are put on a
-	          linkedlist as they're encountered; their contents are only
-	          retained if there are other (non-weak) references to
-	          them.</p>
-                </li>
-              </ol>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">At the end of the mark phase, the markbits of all
-          objects that are transitively reachable from the roots are
-          set and all other markbits are clear.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Relocation-phase"></a>17.4.2.Â Relocation phase</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The <span class="emphasis"><em>forwarding address</em></span> of a
-	      doublenode in the dynamic heap is (&lt;its current address&gt; -
-	      (size_of_doublenode * &lt;the number of unmarked markbits that
-	      precede it&gt;)) or alternately (&lt;the base of the heap&gt; +
-	      (size_of_doublenode * &lt;the number of marked markbits that
-	      precede it &gt;)). Rather than count the number of preceding
-	      markbits each time, the relocation table is used to precompute
-	      an approximation of the forwarding addresses for all
-	      doublewords. Given this approximate address and a pointer into
-	      the markbits vector, it's relatively easy to compute the exact
-	      forwarding address.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The relocation table contains the forwarding addresses
-	      of each <span class="emphasis"><em>pagelet</em></span>, where a pagelet is 256
-	      bytes (or 32 doublenodes). The forwarding address of the first
-	      pagelet is the base of the heap. The forwarding address of the
-	      second pagelet is the sum of the forwarding address of the
-	      first and 8 bytes for each mark bit set in the first 32-bit
-	      word in the markbits table. The last entry in the relocation
-	      table contains the forwarding address that the freepointer
-	      would have, e.g., the new value of the freepointer after
-	      compaction.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In many programs, old objects rarely become garbage and
-	      new objects often do. When building the relocation table, the
-	      relocation phase notes the address of the first unmarked
-	      object in the dynamic heap. Only the area of the heap between
-	      the first unmarked object and the freepointer needs to be
-	      compacted; only pointers to this area will need to be
-	      forwarded (the forwarding address of all other pointers to the
-	      dynamic heap is the address of that pointer.)  Often, the
-	      first unmarked object is much nearer the free pointer than it
-	      is to the base of the heap.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Forwarding-phase"></a>17.4.3.Â Forwarding phase</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The forwarding phase traverses all roots and the "old"
-          part of the dynamic heap (the part between the base of the
-          heap and the first unmarked object.) All references to objects
-          whose address is between the first unmarked object and the
-          free pointer are updated to point to the address the object
-          will have after compaction by using the relocation table and
-          the markbits vector and interpolating.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The relocation table entry for the pagelet nearest the
-	      object is found. If the pagelet's address is less than the
-	      object's address, the number of set markbits that precede
-	      the object on the pagelet is used to determine the object's
-	      address; otherwise, the number of set markbits that follow
-	      the object on the pagelet is used.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Since forwarding views the heap as a set of doublewords,
-          locatives are (mostly) treated like any other pointers. (The
-          basic difference is that locatives may appear to be tagged as
-          fixnums, in which case they're treated as word-aligned
-          pointers into the object.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">If the forward phase changes the address of any hash
-          table key in a hash table that hashes by address (e.g., an EQ
-          hash table), it sets a bit in the hash table's header. The
-          hash table code will rehash the hash table's contents if it
-          tries to do a lookup on a key in such a table.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Profiling reveals that about half of the total time
-          spent in the GC is spent in the subroutine which determines a
-          pointer's forwarding address. Exploiting GCC-specific idioms,
-          hand-coding the routine, and inlining calls to it could all be
-          expected to improve GC performance.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Compact-phase"></a>17.4.4.Â Compact phase</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">The compact phase compacts the area between the first
-          unmarked object and the freepointer so that it contains only
-          marked objects.  While doing so, it forwards any pointers it
-          finds in the objects it copies.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">When the compact phase is finished, so is the GC (more
-          or less): the free pointer and some other data structures are
-          updated and control returns to the exception handler that
-          invoked the GC. If sufficient memory has been freed to satisfy
-          any allocation request that may have triggered the GC, the
-          exception handler returns; otherwise, a "seriously low on
-          memory" condition is signaled, possibly after releasing a
-          small emergency pool of memory.</p>
-          </div>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="footnotes">
-            <br />
-            <hr width="100" align="left" />
-            <div class="footnote">
-              <p><sup>[<a id="ftn.idp46265808" href="#idp46265808" class="para">1</a>] </sup>I believe that the acronym comes from MACLISP,
-		            where it stood for "Garbage Collection of Truly
-		            Worthless Atoms".</p>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="The-ephemeral-GC"></a>17.5.Â The ephemeral GC</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">In the Clozure CL memory management scheme, the relative age
-        of two objects in the dynamic heap can be determined by their
-        addresses: if addresses X and Y are both addresses in the
-        dynamic heap, X is younger than Y (X was created more recently
-        than Y) if it is nearer to the free pointer (and farther from
-        the base of the heap) than Y.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Ephemeral (or generational) garbage collectors attempt to
-        exploit the following assumptions:</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>most newly created objects become garbage soon after
-	        they'recreated.</p>
-              </li>
-              <li class="listitem">
-                <p>most objects that have already survived several GCs
-	        are unlikely to ever become garbage.</p>
-              </li>
-              <li class="listitem">
-                <p>old objects can only point to newer objects as the
-	        result of a destructive modification (e.g., via
-	        SETF.)</p>
-              </li>
-            </ul>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">By concentrating its efforts on (frequently and quickly)
-        reclaiming newly created garbage, an ephemeral collector hopes
-        to postpone the more costly full GC as long as possible. It's
-        important to note that most programs create some long-lived
-        garbage, so an EGC can't typically eliminate the need for full
-        GC.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">An EGC views each object in the heap as belonging to
-        exactly one <span class="emphasis"><em>generation</em></span>; generations are
-        sets of objects that are related to each other by age: some
-        generation is the youngest, some the oldest, and there's an age
-        relationship between any intervening generations. Objects are
-        typically assigned to the youngest generation when first
-        allocated; any object that has survived some number of GCs in
-        its current generation is promoted (or
-        <span class="emphasis"><em>tenured</em></span>) into an older generation.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">When a generation is GCed, the roots consist of the
-        stacks, registers, and global variables as always and also of
-        any pointers to objects in that generation from other
-        generations. To avoid the need to scan those (often large) other
-        generations looking for such intergenerational references, the
-        runtime system must note all such intergenerational references
-        at the point where they're created (via Setf).<sup>[<a id="idp46293888" href="#ftn.idp46293888" class="footnote">2</a>]</sup> The
-        set of pointers that may contain intergenerational references is
-        sometimes called <span class="emphasis"><em>the remembered set</em></span>.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">In Clozure CL's EGC, the heap is organized exactly the same
-        as otherwise; "generations" are merely structures which contain
-        pointers to regions of the heap (which is already ordered by
-        age.) When a generation needs to be GCed, any younger generation
-        is incorporated into it; all objects which survive a GC of a
-        given generation are promoted into the next older
-        generation. The only intergenerational references that can exist
-        are therefore those where an old object is modified to contain a
-        pointer to a new object.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The EGC uses exactly the same code as the full GC. When a
-        given GC is "ephemeral",</p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="itemizedlist">
-            <ul class="itemizedlist" type="disc">
-              <li class="listitem">
-                <p>the "base of the heap" used to determine an object's
-	        markbit address is the base of the generation
-	        being collected;</p>
-              </li>
-              <li class="listitem">
-                <p>the markbits vector is actually a pointer into the
-	        middle of the global markbits table; preceding entries in
-	        this table are used to note doubleword addresses in older
-	        generations that (may) contain intergenerational
-	        references;</p>
-              </li>
-              <li class="listitem">
-                <p>some steps (notably GCTWA and the handling of weak
-	        objects) are not performed;</p>
-              </li>
-              <li class="listitem">
-                <p>the intergenerational references table is used to
-	        find additional roots for the mark and forward phases. If a
-	        bit is set in the intergenerational references table, that
-	        means that the corresponding doubleword (in some "old"
-	        generation, in some "earlier" part of the heap) may have had
-	        a pointer to an object in a younger generation stored into
-	        it.</p>
-              </li>
-            </ul>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">With one exception (the implicit setfs that occur on entry
-        to and exit from the binding of a special variable), all setfs
-        that might introduce an intergenerational reference must be
-        memoized.
-        <sup>[<a id="idp46302112" href="#ftn.idp46302112" class="footnote">3</a>]</sup> It's always safe to
-        push any cons cell or gvector locative onto the memo stack;
-        it's never safe to push anything else.
-      </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Typically, the intergenerational references bitvector is
-        sparse: a relatively small number of old locations are stored
-        into, although some of them may have been stored into many
-        times. The routine that scans the memoization buffer does a lot
-        of work and usually does it fairly often; it uses a simple,
-        brute-force method but might run faster if it was smarter about
-        recognizing addresses that it'd already seen.
-      </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">When the EGC mark and forward phases scan the
-        intergenerational reference bits, they can clear any bits that
-        denote doublewords that definitely do not contain
-        intergenerational references.
-      </p>
-          <div xmlns="http://www.w3.org/1999/xhtml" class="footnotes">
-            <br />
-            <hr width="100" align="left" />
-            <div class="footnote">
-              <p><sup>[<a id="ftn.idp46293888" href="#idp46293888" class="para">2</a>] </sup>This is
-            sometimes called "The Write Barrier": all assignments which
-            might result in intergenerational references must be noted, as
-            if the other generations were write-protected.</p>
-            </div>
-            <div class="footnote">
-              <p><sup>[<a id="ftn.idp46302112" href="#idp46302112" class="para">3</a>] </sup>Note that the implicit setfs that occur when
-        initializing an object - as in the case of a call to cons or
-        vector - can't introduce intergenerational references, since
-        the newly created object is always younger than the objects
-        used to initialize it.</p>
-            </div>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Fasl-files"></a>17.6.Â Fasl files</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">Saving and loading of Fasl files is implemented in
-        xdump/faslenv.lisp, level-0/nfasload.lisp, and lib/nfcomp.lisp.
-        The information here is only an overview, which might help when
-        reading the source.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The Clozure CL Fasl format is forked from the old MCL Fasl
-        format; there are a few differences, but they are minor.  The
-        name "nfasload" comes from the fact that this is the so-called
-        "new" Fasl system, which was true in 1986 or so.  </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">A Fasl file begins with a "file header", which contains
-        version information and a count of the following "blocks".
-        There's typically only one "block" per Fasl file.  The blocks
-        are part of a mechanism for combining multiple logical files
-        into a single physical file, in order to simplify the
-        distribution of precompiled programs. </p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Each block begins with a header for itself, which just
-        describes the size of the data that follows.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The data in each block is treated as a simple stream of
-        bytes, which define a bytecode program.  The actual bytecodes,
-        "fasl operators", are defined in xdump/faslenv.lisp.  The
-        descriptions in the source file are terse, but, according to
-        Gary, "probably accurate".</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Some of the operators are used to create a per-block
-        "object table", which is a vector used to keep track of
-        previously-loaded objects and simplify references to them.  When
-        the table is created, an index associated with it is set to
-        zero; this is analogous to an array fill-pointer, and allows the
-        table to be treated like a stack.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The low seven bits of each bytecode are used to specify
-        the fasl operator; currently, about fifty operators are defined.
-        The high byte, when set, indicates that the result of the
-        operation should be pushed onto the object table.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Most bytecodes are followed by operands; the operand data
-        is byte-aligned.  How many operands there are, and their type,
-        depend on the bytecode.  Operands can be indices into the object
-        table, immediate values, or some combination of these.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">An exception is the bytecode #xFF, which has the symbolic
-        name ccl::$faslend; it is used to mark the end of the
-        block.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="The-Objective-C-Bridge--1-"></a>17.7.Â The Objective-C Bridge</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="How-CCL-Recognizes-Objective-C-Objects"></a>17.7.1.Â How Clozure CL Recognizes Objective-C Objects</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">In most cases, pointers to instances of Objective-C
-          classes are recognized as such; the recognition is (and
-          probably always will be) slightly heuristic. Basically, any
-          pointer that passes basic sanity checks and whose first word
-          is a pointer to a known ObjC class is considered to be an
-          instance of that class; the Objective-C runtime system would
-          reach the same conclusion.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">It's certainly possible that a random pointer to an
-          arbitrary memory address could look enough like an ObjC
-          instance to fool the lisp runtime system, and it's possible
-          that pointers could have their contents change so that
-          something that had either been a true ObjC instance (or had
-          looked a lot like one) is changed (possibly by virtue of
-          having been deallocated.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">In the first case, we can improve the heuristics
-          substantially: we can make stronger assertions that a
-          particular pointer is really "of type :ID" when it's a
-          parameter to a function declared to take such a pointer as an
-          argument or a similarly declared function result; we can be
-          more confident of something we obtained via SLOT-VALUE of a
-          slot defined to be of type :ID than if we just dug a pointer
-          out of memory somewhere.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The second case is a little more subtle: ObjC memory
-          management is based on a reference-counting scheme, and it's
-          possible for an object to ... cease to be an object while lisp
-          is still referencing it.  If we don't want to deal with this
-          possibility (and we don't), we'll basically have to ensure
-          that the object is not deallocated while lisp is still
-          thinking of it as a first-class object. There's some support
-          for this in the case of objects created with MAKE-INSTANCE,
-          but we may need to give similar treatment to foreign objects
-          that are introduced to the lisp runtime in other ways (as
-          function arguments, return values, SLOT-VALUE results, etc. as
-          well as those instances that are created under lisp
-          control.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">This doesn't all work yet (in fact, not much of it works
-          yet); in practice, this has not yet been as much of a problem
-          as anticipated, but that may be because existing Cocoa code
-          deals primarily with relatively long-lived objects such as
-          windows, views, menus, etc.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="idp46319312"></a>17.7.2.Â Recommended Reading</h3>
-                </div>
-              </div>
-            </div>
-            <div xmlns="http://www.w3.org/1999/xhtml" class="variablelist">
-              <dl>
-                <dt>
-                  <span class="term">
-	          <a class="ulink" href="http://developer.apple.com/documentation/Cocoa/" target="_top">Cocoa Documentation</a>
-	        </span>
-                </dt>
-                <dd>
-                  <p>
-	            This is the top page for all of Apple's documentation on
-	            Cocoa.  If you are unfamiliar with Cocoa, it is a good
-	            place to start.
-	          </p>
-                </dd>
-                <dt>
-                  <span class="term">
-	          <a class="ulink" href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/index.html" target="_top">Foundation Reference for Objective-C</a>
-	        </span>
-                </dt>
-                <dd>
-                  <p>
-	            This is one of the two most important Cocoa references; it
-	            covers all of the basics, except for GUI programming.  This is
-	            a reference, not a tutorial.
-	          </p>
-                </dd>
-              </dl>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Modifying-CCL"></a>ChapterÂ 18.Â Modifying Clozure CL</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#Contributing-Code-Back-to-the-CCL-Project">18.1. Contributing Code Back to the Clozure CL Project</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Using-CCL-in--development--and-in--user--mode">18.2. Using Clozure CL in "development" and in  "user" mode</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#kernel-debugger">18.3. The Kernel Debugger</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#Using-AltiVec-in-CCL-LAP-functions">18.4. Using AltiVec in Clozure CL LAP functions</a>
-              </span>
-            </dt>
-            <dd>
-              <dl>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Overview--16-">18.4.1. Overview</a>
-                  </span>
-                </dt>
-                <dt>
-                  <span class="sect2">
-                    <a href="#Register-usage-conventions">18.4.2. Register usage conventions</a>
-                  </span>
-                </dt>
-              </dl>
-            </dd>
-            <dt>
-              <span class="sect1">
-                <a href="#Development-Mode-Dictionary">18.5. Development-Mode Dictionary</a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Contributing-Code-Back-to-the-CCL-Project"></a>18.1.Â Contributing Code Back to the Clozure CL Project</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">This section is a placeholder, added as of August 2004.  The
-      full text is being written, and will be added as soon as it is
-      available.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Using-CCL-in--development--and-in--user--mode"></a>18.2.Â Using Clozure CL in "development" and in  "user" mode</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">As it's distributed, Clozure CL starts up with *PACKAGE* set to
-      the CL-USER package and with most predefined functions and
-      methods protected against accidental redefinition.  The package
-      setting is of course a requirement of ANSI CL, and the
-      protection of predefined functions and methods is intended to
-      catch certain types of programming errors (accidentally
-      redefining a CL or CCL function) before those errors have a
-      chance to do much damage.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">These settings may make using Clozure CL to develop Clozure CL a bit
-      awkward, because much of that process assumes you are working in
-      the CCL package is current, and a primary purpose of Clozure CL
-      development is to redefine some predefined, builtin functions.
-      The standard, "routine" ways of building Clozure CL from sources (see
-      ) - COMPILE-CCL, XCOMPILE-CCL, and XLOAD-LEVEL-0 - bind
-      *PACKAGE* to the "CCL" package and enable the redefinition of
-      predefined functions; the symbols COMPILE-CCL, XCOMPILE-CCL, and
-      XLOAD-LEVEL-0 are additionally now exported from the "CCL"
-      package.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Some other (more ad-hoc) ways of doing development on
-      Clozure CLâcompiling and/or loading individual files,
-      incrementally redefining individual functionsâmay be
-      awkward unless one reverts to the mode of operation which was
-      traditionally offered in Clozure CL. Some Clozure CL source files -
-      especially those that comprise the bootstrapping image sources
-      and the first few files in the "cold load" sequence - are
-      compiled and loaded in the "CCL" package but don't contain
-      (IN-PACKAGE "CCL") forms, since IN-PACKAGE doesn't work until
-      later in the cold load sequence.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The somewhat bizarre behavior of both SET-USER-ENVIRONMENT
-      and SET-DEVELOPMENT-ENVIRONMENT with respect to the special
-      variables they affect is intended to allow those constructs to
-      take effect when the read-eval-print loop next returns to a
-      top-level '? ' prompt; the constructs can meaningfully be used
-      inside LOAD, for instance (recall that LOAD binds *PACKAGE*),
-      though using both constructs within the same LOAD call would
-      likely be pretty confusing.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">"user" and "development" are otherwise very generic terms;
-      here they're intended to enforce the distinction between "using"
-      Clozure CL and "developing" it.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The initial environment from which Clozure CL images are
-      saved is one where (SET-USER-ENVIRONMENT T) has just been
-      called; in previous versions, it was effectively as if
-      (SET-DEVELOPMENT-ENVIRONMENT T) had just been called.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Hopefully, most users of Clozure CL can safely ignore these
-      issues most of the time. Note that doing (SET-USER-ENVIRONMENT
-      T) after loading one's own code (or 3rd-party code) into Clozure CL
-      would protect that code (as well as Clozure CL's) from accidental
-      redefinition; that may be useful in some cases.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="kernel-debugger"></a>18.3.Â The Kernel Debugger</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml"> In a perfect world, something like this couldn't
-      happen:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-Welcome to Clozure CL Version x.y!
-? (defun foo (x)
-    (declare (cons x))
-    (cdr x))
-FOO
-
-? (foo -1) ;Oops. Too late ...
-Unhandled exception 11 at 0x300e90c8, context-&gt;regs at #x7ffff6b8
-Continue/Debugger/eXit &lt;enter&gt;?
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">As you may have noticed, it's not a perfect world; it's rare
-      that the cause (attempting to reference the CDR of -1, and therefore
-      accessing unmapped memory near location 0) of this effect (an
-      "Unhandled exception ..." message) is so obvious.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The addresses printed in the message above aren't very useful
-      unless you're debugging the kernel with GDB (and they're often
-      very useful if you are.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">Aside from causing an exception that the lisp kernel doesn't
-      know how to handle, one can also enter the kernel debugger (more)
-      deliberately:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (defun classify (n)
-    (cond ((&gt; n 0) "Greater")
-          ((&lt; n 0) "Less")
-          (t
-           ;; Sheesh ! What else could it be ?
-           (ccl::bug "I give up. How could this happen ?"))))
-CLASSIFY
-
-? (classify 0)
-Bug in Clozure CL system code:
-I give up. How could this happen ?
-? for help
-[12345] Clozure CL kernel debugger:
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">CCL::BUG isn't quite the right tool for this example (a
-      call to BREAK or PRINT might do a better job of clearing up the
-      mystery), but it's sometimes helpful when those other tools
-      can't be used.  The lisp error system notices, for instance, if
-      attempts to signal errors themselves cause errors to be
-      signaled; this sort of thing can happen if CLOS or the I/O
-      system are broken or missing. After some small number of
-      recursive errors, the error system gives up and calls
-      CCL::BUG.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If one enters a '?' at the kernel debugger prompt, one
-      will see output like:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(S)  Find and describe symbol matching specified name
-(B)  Show backtrace
-(X)  Exit from this debugger, asserting that any exception was handled
-(K)  Kill Clozure CL process
-(?)  Show this help
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">CCL::BUG just does an FF-CALL into the lisp kernel.  If
-      the kernel debugger was invoked because of an unhandled
-      exception (such as an illegal memory reference) the OS kernel
-      saves the machine state ("context") in a data structure for us,
-      and in that case some additional options can be used to display
-      the contents of the registers at the point of the
-      exception. Another functionâCCL::DBGâcauses a special
-      exception to be generated and enters the lisp kernel debugger
-      with a non-null "context":</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (defun classify2 (n)
-    (cond ((&gt; n 0) "Greater")
-          ((&lt; n 0) "Less")
-          (t (dbg n))))
-CLASSIFY2
-
-? (classify2 0)
-Lisp Breakpoint
-While executing: #&lt;Function CLASSIFY2 #x08476cfe&gt;
-? for help
-[12345] Clozure CL kernel debugger: ?
-(G)  Set specified GPR to new value
-(A)  Advance the program counter by one instruction (use with caution!)
-(D)  Describe the current exception in greater detail
-(R)  Show raw GPR/SPR register values
-(L)  Show Lisp values of tagged registers
-(F)  Show FPU registers
-(S)  Find and describe symbol matching specified name
-(B)  Show backtrace
-(X)  Exit from this debugger, asserting that any exception was handled
-(P)  Propagate the exception to another handler (debugger or OS)
-(K)  Kill Clozure CL process
-(?)  Show this help
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">CCL::DBG takes an argument, whose value is copied into the register
-      that Clozure CL uses to return a function's primary value (arg_z, which
-      is r23 on the PowerPC). If we were to choose the (L) option at this point,
-      we'd see a dislay like:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-rnil = 0x01836015
-nargs = 0
-r16 (fn) = #&lt;Function CLASSIFY2 #x30379386&gt;
-r23 (arg_z) = 0
-r22 (arg_y) = 0
-r21 (arg_x) = 0
-r20 (temp0) = #&lt;26-element vector subtag = 2F @#x303793ee&gt;
-r19 (temp1/next_method_context) = 6393788
-r18 (temp2/nfn) = #&lt;Function CLASSIFY2 #x30379386&gt;
-r17 (temp3/fname) = CLASSIFY2
-r31 (save0) = 0
-r30 (save1) = *TERMINAL-IO*
-r29 (save2) = 0
-r28 (save3) = (#&lt;RESTART @#x01867f2e&gt; #&lt;RESTART @#x01867f56&gt;)
-r27 (save4) = ()
-r26 (save5) = ()
-r25 (save6) = ()
-r24 (save7) = ()
-    </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">From this we can conclude that the problematic argument to CLASSIFY2
-      was 0 (see r23/arg_z), and that I need to work on a better example.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The R option shows the values of the ALU (and PPC branch unit)
-      registers in hex; the F option shows the values of the FPU registers.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">The (B) option shows a raw stack backtrace; it'll try to
-      identify foreign functions as well as lisp functions. (Foreign function
-      names are guesses based on the nearest preceding exported symbol.)</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If you ever unexpectedly find yourself in the "lisp kernel
-      debugger", the output of the (L) and (B) options are often the most
-      helpful things to include in a bug report.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Using-AltiVec-in-CCL-LAP-functions"></a>18.4.Â Using AltiVec in Clozure CL LAP functions</h2>
-              </div>
-            </div>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Overview--16-"></a>18.4.1.Â Overview</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">It's now possible to use AltiVec instructions in PPC LAP
-        (assembler) functions.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The lisp kernel detects the presence or absence of
-        AltiVec and preserves AltiVec state on lisp thread switch and
-        in response to exceptions, but the implementation doesn't
-        otherwise use vector operations.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">This document doesn't document PPC LAP programming in
-        general.  Ideally, there would be some document that
-        did.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">This document does explain AltiVec register-usage
-        conventions in Clozure CL and explains the use of some lap macros
-        that help to enforce those conventions.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">All of the global symbols described below are exported
-        from the CCL package. Note that lap macro names, ppc
-        instruction names, and (in most cases) register names are
-        treated as strings, so this only applies to functions and
-        global variable names.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">Much of the Clozure CL support for AltiVec LAP programming
-        is based on work contributed to MCL by Shannon Spires.</p>
-          </div>
-          <div class="sect2" lang="en" xml:lang="en">
-            <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-              <div>
-                <div>
-                  <h3 class="title"><a id="Register-usage-conventions"></a>18.4.2.Â Register usage conventions</h3>
-                </div>
-              </div>
-            </div>
-            <p xmlns="http://www.w3.org/1999/xhtml">Clozure CL LAP functions that use AltiVec instructions must
-        interoperate with each other and with C functions; that fact
-        suggests that they follow C AltiVec register usage
-        conventions. (vr0-vr1 scratch, vr2-vr13 parameters/return
-        value, vr14-vr19 temporaries, vr20-vr31 callee-save
-        non-volatile registers.)</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The EABI (Embedded Application Binary Interface) used in
-        LinuxPPC doesn't ascribe particular significance to the vrsave
-        special-purpose register; on other platforms (notably MacOS),
-        it's used as a bitmap which indicates to system-level code
-        which vector registers contain meaningful values.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">The WITH-ALTIVEC-REGISTERS lap macro generates code that
-        saves, updates, and restores VRSAVE on platforms where this is
-        required (as indicated by the value of the special variable
-        that controls this behavior) and ignores VRSAVE on platforms
-        that don't require it to be maintained.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">On all PPC platforms, it's necessary to save any non-volatile
-        vector registers (vr20 .. vr31) before assigning to them and to restore
-        such registers before returning to the caller.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">On platforms that require that VRSAVE be maintained, it's
-        not necessary to mention the "use" of vector registers that
-        are used as incoming parameters. It's not incorrect to mention
-        their use in a WITH-ALTIVEC-REGISTERS form, but it may be
-        unnecessary in many interesting cases. One can likewise assume
-        that the caller of any function that returns a vector value in
-        vr2 has already set the appropriate bit in VRSAVE to indicate
-        that this register is live. One could therefore write a leaf
-        function that added the bytes in vr3 and vr2 and returned the
-        result in vr2 as:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defppclapfunction vaddubs ((y vr3) (z vr2))
-  (vaddubs z y z)
-  (blr))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">When vector registers that aren't incoming parameters are used
-        in a LAP function, WITH-ALTIVEC-REGISTERS takes care of maintaining VRSAVE
-        and of saving/restoring any non-volatile vector registers:</p>
-            <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-(defppclapfunction load-array ((n arg_z))
-  (check-nargs 1)
-  (with-altivec-registers (vr1 vr2 vr3 vr27) ; Clobbers imm0
-    (li imm0 arch::misc-data-offset)
-    (lvx vr1 arg_z imm0)                ; load MSQ
-    (lvsl vr27 arg_z imm0)              ; set the permute vector
-    (addi imm0 imm0 16)                 ; address of LSQ
-    (lvx vr2 arg_z imm0)                ; load LSQ
-    (vperm vr3 vr1 vr2 vr27)           ; aligned result appears in VR3
-    (dbg t))                         ; Look at result in some debugger
-  (blr))
-      </pre>
-            <p xmlns="http://www.w3.org/1999/xhtml">AltiVec registers are not preserved by CATCH and UNWIND-PROTECT.
-        Since AltiVec is only accessible from LAP in Clozure CL and since LAP
-        functions rarely use high-level control structures, this should rarely be
-        a problem in practice.</p>
-            <p xmlns="http://www.w3.org/1999/xhtml">LAP functions that use non-volatile vector registers and
-        that call (Lisp ?) code which may use CATCH or UNWIND-PROTECT
-        should save those vector registers before such a call and
-        restore them on return. This is one of the intended uses of
-        the WITH-VECTOR-BUFFER lap macro.</p>
-          </div>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="Development-Mode-Dictionary"></a>18.5.Â Development-Mode Dictionary</h2>
-              </div>
-            </div>
-          </div>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_warn-if-redefine-kernel"></a>
-              <strong>[Variable]</strong>
-              <br></br>
-              <code>*WARN-IF-REDEFINE-KERNEL*</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp33520304"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">When true, attempts to redefine (via DEFUN or DEFMETHOD)
-	      functions and methods that are marked as being
-	      "predefined" signal continuable errors.</p>
-                <p xmlns="http://www.w3.org/1999/xhtml">Note that these are CERRORs, not warnings, and that
-	      no lisp functions or methods have been defined in the kernel
-	      in MCL or Clozure CL since 1987 or so.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_set-development-environment"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>set-development-environment</strong></span>
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em>
-	      unmark-builtin-functions</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp32877488"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Arranges that the outermost special bindings of *PACKAGE*
-	      and *WARN-IF-REDEFINE-KERNEL* restore values of the "CCL"
-	      package and NIL to these variables, respectively. If the optional
-	      argument is true, marks all globally defined functions and methods
-	      as being "not predefined" (this is a fairly expensive
-	      operation.)</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_set-user-environment"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>set-user-environment</strong></span>
-	      <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;optional</em> mark-builtin-functions</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41878288"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Arranges that the outermost special bindings of *PACKAGE*
-	      and *WARN-IF-REDEFINE-KERNEL* restore values of the
-	      "CL-USER" package and T to these variables, respectively.
-	      If the optional argument is true, marks all globally defined
-	      functions and methods as being "predefined" (this is a
-	      fairly expensive operation.)</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_altivec-available"></a>
-              <strong>[Variable]</strong>
-              <br></br>
-              <code>*ALTIVEC-AVAILABLE*</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41883792"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">This variable is initialized each time an Clozure CL session
-	      starts based on information provided by the lisp kernel. Its value
-	      is true if AltiVec is present and false otherwise. This variable
-	      shouldn't be set by user code.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="f_altivec-available-p"></a>
-              <strong>[Function]</strong>
-              <br></br>
-              <code>
-                <span xmlns="http://www.w3.org/1999/xhtml" class="function">
-                  <strong>altivec-available-p</strong>
-                </span>
-              </code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42916256"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Returns non-NIL if AltiVec is available.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="v_altivec-lapmacros-maintain-vrsave-p"></a>
-              <strong>[Variable]</strong>
-              <br></br>
-              <code>*ALTIVEC-LAPMACROS-MAINTAIN-VRSAVE-P*</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41915088"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Intended to control the expansion of certain lap macros.
-	      Initialized to NIL on LinuxPPC; initialized to T on platforms
-	      (such as MacOS X/Darwin) that require that the VRSAVE SPR contain
-	      a bitmask of active vector registers at all times.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="lapm_with-altivec-registers"></a>
-              <strong>[LAP Macro]</strong>
-              <br></br>
-              <code><span xmlns="http://www.w3.org/1999/xhtml" class="function"><strong>with-altivec-registers</strong></span>
-	      reglist <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41679904"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">reglist</span></i>---A list of vector register names (vr0 .. vr31).</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">body</span></i>---A sequence of PPC LAP instructions.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp41684816"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Specifies the set of AltiVec registers used in body. If
-	      *altivec-lapmacros-maintain-vrsave-p* is true when the macro is
-	      expanded, generates code to save the VRSAVE SPR and updates VRSAVE
-	      to include a bitmask generated from the specified register list.
-	      Generates code which saves any non-volatile vector registers which
-	      appear in the register list, executes body, and restores the saved
-	      non-volatile vector registers (and, if
-	      *altivec-lapmacros-maintain-vrsave-p* is true, restores VRSAVE as
-	      well. Uses the IMM0 register (r3) as a temporary.</p>
-              </div>
-            </div>
-          </p>
-          <p>
-            <div class="refentrytitle">
-              <a id="lapm_with-vector-buffer"></a>
-              <strong>[LAP Macro]</strong>
-              <br></br>
-              <code>with-vector-buffer base n <em xmlns="http://www.w3.org/1999/xhtml" class="varname">&amp;body</em> body</code>
-            </div>
-            <div class="refentrytitle"></div>
-          </p>
-          <p>
-            <div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42882976"></a>
-                <div class="header">Arguments and Values:</div>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">base</span></i>---Any available general-purpose register.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">n</span></i>---An integer between 1 and 254, inclusive. (Should
-		        typically be much, much closer to 1.) Specifies the size of
-		        the buffer, in 16-byte units.</p>
-                <p><i><span xmlns="http://www.w3.org/1999/xhtml" class="term">body</span></i>---A sequence of PPC LAP instructions.</p>
-              </div>
-              <div class="refsect1" lang="en" xml:lang="en">
-                <a xmlns="http://www.w3.org/1999/xhtml" id="idp42889872"></a>
-                <div class="header">Description:</div>
-                <p xmlns="http://www.w3.org/1999/xhtml">Generates code which allocates a 16-byte aligned buffer
-	      large enough to contain N vector registers; the GPR base points to
-	      the lowest address of this buffer. After processing body, the
-	      buffer will be deallocated. The body should preserve the value of
-	      base as long as it needs to reference the buffer. It's
-	      intended that base be used as a base register in stvx and lvx
-	      instructions within the body.</p>
-              </div>
-            </div>
-          </p>
-        </div>
-      </div>
-      <div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="chapter" lang="en" xml:lang="en">
-        <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Questions-and-Answers"></a>ChapterÂ 19.Â Questions and Answers</h2>
-            </div>
-          </div>
-        </div>
-        <div xmlns="http://www.w3.org/1999/xhtml" class="toc">
-          <dl>
-            <dt>
-              <span class="sect1">
-                <a href="#How-can-I-do-nonblocking--aka--unbuffered--and--raw---IO-">19.1. How can I do nonblocking (aka "unbuffered" and "raw") IO?</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#I-m-using-the-graphics-demos--Why-doesn-t-the-menubar-change-">19.2. I'm using the graphics demos. Why doesn't the menubar
-      change?</a>
-              </span>
-            </dt>
-            <dt>
-              <span class="sect1">
-                <a href="#I-m-using-Slime-and-Cocoa--Why-doesn-t--standard-output--seem-to-work-">19.3. I'm using Slime and Cocoa. Why doesn't *standard-output*
-      seem to work? </a>
-              </span>
-            </dt>
-          </dl>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="How-can-I-do-nonblocking--aka--unbuffered--and--raw---IO-"></a>19.1.Â How can I do nonblocking (aka "unbuffered" and "raw") IO?</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">There's some code for manipulating TTY modes in
-      "ccl:library;pty.lisp".</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (require "PTY")
-
-? (ccl::disable-tty-local-modes 0 #$ICANON)
-T
-      </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">will turn off "input canonicalization" on file descriptor
-      0, which is at least part of what you need to do here.  This
-      disables the #$ICANON mode, which tells the OS not to do any
-      line-buffering or line-editing.  Of course, this only has any
-      effect in situations where the OS ever does that, which means
-      when stdin is a TTY or PTY.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">If the #$ICANON mode is disabled, you can do things like:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (progn (read-char) (read-char))
-a
-#\a
-      </pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">(where the first READ-CHAR consumes the newline, which
-      isn't really necessary to make the reader happy anymore.)  So,
-      you can do:</p>
-          <pre xmlns="http://www.w3.org/1999/xhtml" class="programlisting">
-? (read-char)
-#\Space
-</pre>
-          <p xmlns="http://www.w3.org/1999/xhtml">(where there's a space after the close-paren) without
-      having to type a newline.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="I-m-using-the-graphics-demos--Why-doesn-t-the-menubar-change-"></a>19.2.Â I'm using the graphics demos. Why doesn't the menubar
-      change?</h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">When you interact with text-only Clozure CL, you're either
-      in Terminal or in Emacs, running Clozure CL as a subprocess.  When
-      you load Cocoa or the graphical environment, the subprocess does
-      some tricky things that turn it into a full-fledged Application,
-      as far as the OS is concerned.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">So, it gets its own icon in the dock, and its own menubar,
-      and so on.  It can be confusing, because standard input and
-      output will still be connected to Terminal or Emacs, so you can
-      still type commands to Clozure CL from there.  To see the menubar
-      you loaded, or the windows you opened, just click on the Clozure CL
-      icon in the dock.</p>
-        </div>
-        <div class="sect1" lang="en" xml:lang="en">
-          <div xmlns="http://www.w3.org/1999/xhtml" class="titlepage">
-            <div>
-              <div>
-                <h2 class="title" style="clear: both"><a id="I-m-using-Slime-and-Cocoa--Why-doesn-t--standard-output--seem-to-work-"></a>19.3.Â I'm using Slime and Cocoa. Why doesn't *standard-output*
-      seem to work? </h2>
-              </div>
-            </div>
-          </div>
-          <p xmlns="http://www.w3.org/1999/xhtml">This comes up if you're using the Slime interface
-      to run Clozure CL under Emacs, and you are doing Cocoa programming
-      which involves printing to *standard-output*.  It seems as
-      though the output goes nowhere; no error is reported, but it
-      doesn't appear in the *slime-repl* buffer.</p>
-          <p xmlns="http://www.w3.org/1999/xhtml">For the most part, this is only relevant when you are
-      trying to insert debug code into your event handlers.  The SLIME
-      listener runs in a thread where the standard stream variables
-      (like <code class="literal">*STANDARD-OUTPUT* and</code> and
-      <code class="literal">*TERMINAL-IO*</code> are bound to the stream used to
-      communicate with Emacs; the Cocoa event thread has its own
-      bindings of these standard stream variables, and output to these
-      streams goes to the *inferior-lisp* buffer instead.  Look for it
-      there.</p>
-        </div>
-      </div>
-      <div class="glossary" title="Glossary of Terms">
-        <div class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="glossary"></a>Glossary of Terms</h2>
-            </div>
-          </div>
-        </div>
-        <div class="glossdiv" title="A">
-          <h3 class="title">A</h3>
-          <dl>
-            <dt><a id="application_bundle"></a>application bundle</dt>
-            <dd>
-              <p>A specially-structured directory that Mac OS X
-		recognizes as a
-		launchable <a class="glossterm" href="#Cocoa"><em class="glossterm">Cocoa</em></a>
-		application. Graphical applications on Mac OS X are
-		represented as application bundles.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="C">
-          <h3 class="title">C</h3>
-          <dl>
-            <dt><a id="Cocoa"></a>Cocoa</dt>
-            <dd>
-              <p>The standard user-interface libraries and frameworks
-		provided by Apple for development of applications on Mac OS
-		X.</p>
-            </dd>
-            <dt><a id="creator_code"></a>creator code</dt>
-            <dd>
-              <p>A four-character identifier used in Mac OS X to uniquely
-		identify an application.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="D">
-          <h3 class="title">D</h3>
-          <dl>
-            <dt><a id="displaced-array"></a>displaced array</dt>
-            <dd>
-              <p>An array with no storage of its own for elements, which
-		points to the storage of another array, called its
-		target. Reading or writing the elements of the displaced array
-		returns or changes the contents of the target.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="F">
-          <h3 class="title">F</h3>
-          <dl>
-            <dt><a id="fasl-file"></a>fasl file</dt>
-            <dd>
-              <p>A file containing compiled lisp code that the Lisp is
-		able to quickly load and use. A "fast-load" file.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="H">
-          <h3 class="title">H</h3>
-          <dl>
-            <dt><a id="hemlock"></a>Hemlock</dt>
-            <dd>
-              <p>A text editor, written in Common Lisp, similar in
-		features to Emacs. Hemlock was originally developed as part of
-		CMU Common Lisp. A portable version of Hemlock is built into
-		the Clozure CL <a class="glossterm" href="#IDE"><em class="glossterm">IDE</em></a>.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="I">
-          <h3 class="title">I</h3>
-          <dl>
-            <dt><a id="IDE"></a>IDE</dt>
-            <dd>
-              <p>"Integrated Development Environment". In the context of
-		Clozure CL, "the IDE" refers to the experimental <a class="glossterm" href="#Cocoa"><em class="glossterm">Cocoa</em></a>
-		windowing development environment provided in source form with
-		Clozure CL distributions.</p>
-            </dd>
-            <dt><a id="lisp_image"></a>image</dt>
-            <dd>
-              <p>The in-memory state of a running Lisp system, containing
-		functions, data structures, variables, and so on. Also, a file
-		containing archived versions of these data in a format that
-		can be loaded and reconstituted by the
-		Lisp <a class="glossterm" href="#lisp_kernel"><em class="glossterm">kernel</em></a>. A
-		working Clozure CL system consists of the kernel and
-		an <a class="glossterm" href="#lisp_image"><em class="glossterm">image</em></a>.</p>
-            </dd>
-            <dt><a id="InterfaceBuilder"></a>InterfaceBuilder</dt>
-            <dd>
-              <p>An application supplied by Apple with their developer
-		tools that can be used to interactively build user-interface
-		elements for <a class="glossterm" href="#Cocoa"><em class="glossterm">Cocoa</em></a>
-		applications.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="K">
-          <h3 class="title">K</h3>
-          <dl>
-            <dt><a id="lisp_kernel"></a>kernel</dt>
-            <dd>
-              <p>The binary executable program that implements the lowest
-		levels of the Lisp system. A working Clozure CL system consists of
-		the kernel and
-		an <a class="glossterm" href="#lisp_image"><em class="glossterm">image</em></a>.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="L">
-          <h3 class="title">L</h3>
-          <dl>
-            <dt><a id="listener_window"></a>listener window</dt>
-            <dd>
-              <p>In the <a class="glossterm" href="#IDE"><em class="glossterm">IDE</em></a>,
-		a <a class="glossterm" href="#Cocoa"><em class="glossterm">Cocoa</em></a>
-		window that contains a pseudo-terminal session that
-		communicates with a Lisp <a class="glossterm" href="#REPL"><em class="glossterm">REPL</em></a>.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="M">
-          <h3 class="title">M</h3>
-          <dl>
-            <dt><a id="memory_mapped_file"></a>memory-mapped file</dt>
-            <dd>
-              <p>A file whose contents are accessible as a range of
-		memory addresses. Some operating systems support this feature,
-		in which the virtual memory subsystem arranges for a range of
-		virtual memory addresses to point to the contents of an open
-		file. Programs can then gain access to the file's contents by
-		operating on memory addresses in that range. Access to the
-		file's contents is valid only as long as the file remains
-		open.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="N">
-          <h3 class="title">N</h3>
-          <dl>
-            <dt><a id="nibfile"></a>nibfile</dt>
-            <dd>
-              <p>A data file created by
-		Apple's <a class="glossterm" href="#InterfaceBuilder"><em class="glossterm">InterfaceBuilder</em></a>
-		application, which contains archived Objective-C objects that
-		define user-interface elements for
-		a <a class="glossterm" href="#Cocoa"><em class="glossterm">Cocoa</em></a>
-		application. Under Mac OS
-		X, <a class="glossterm" href="#Cocoa"><em class="glossterm">Cocoa</em></a> applications
-		typically create their user interface elements by reading
-		nibfiles and unarchiving the objects in them.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="R">
-          <h3 class="title">R</h3>
-          <dl>
-            <dt><a id="REPL"></a>REPL</dt>
-            <dd>
-              <p>"Read-eval-print loop". The interactive shell provided
-		by Clozure CL for interaction with Lisp.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="S">
-          <h3 class="title">S</h3>
-          <dl>
-            <dt><a id="s-expression"></a>s-expression</dt>
-            <dd>
-              <p>The simplest, most general element of Lisp syntax. An
-		s-expression may be an atom (such as a symbol, integer, or
-		string), or it may be a list of s-expressions.</p>
-            </dd>
-            <dt><a id="special_variable"></a>special variable</dt>
-            <dd>
-              <p>A variable whose binding is in the dynamic
-		environment. Special variables are essentially equivalent to
-		global variables in languages other than Lisp. A special
-		variable binding is visible in any lexical environment, so
-		long as a lexical binding has not shadowed it.</p>
-            </dd>
-            <dt><a id="static_variable"></a>static variable</dt>
-            <dd>
-              <p>In Clozure CL, a variable whose value is shared across all
-		threads, and which may not be dynamically rebound. Changing a
-		static variable's value in one thread causes all threads to
-		see the new value. Attempting to dynamically rebind the
-		variable (for instance, by using <code class="code">LET</code>, or using
-		the variable name as a parameter in a <code class="code">LAMBDA</code>
-		form) signals an error.</p>
-            </dd>
-          </dl>
-        </div>
-        <div class="glossdiv" title="T">
-          <h3 class="title">T</h3>
-          <dl>
-            <dt><a id="toplevel_function"></a>toplevel function</dt>
-            <dd>
-              <p>The function executed by Lisp automatically once its
-		startup is complete. Clozure CL's default toplevel is the
-		interactive <a class="glossterm" href="#REPL"><em class="glossterm">read-eval-print
-		loop</em></a> that you normally use to interact with
-		Lisp. You can, however, replace the toplevel with a function
-		of your own design, changing Clozure CL from a Lisp development
-		system into some tool of your making.</p>
-            </dd>
-            <dt><a id="type-specifier"></a>type-specifier</dt>
-            <dd>
-              <p>An expression that denotes a type. Type specifiers may
-		be symbols (such as <code class="code">CONS</code>
-		and <code class="code">STRING</code>), or they may be more complex
-		<a class="glossterm" href="#s-expression"><em class="glossterm">S-expressions</em></a>
-		(such as (UNSIGNED-BYTE 8)).</p>
-            </dd>
-          </dl>
-        </div>
-      </div>
-      <div class="index" title="Symbol Index">
-        <div class="titlepage">
-          <div>
-            <div>
-              <h2 class="title"><a id="Symbol-Index"></a>Symbol Index</h2>
-            </div>
-          </div>
-        </div>
-        <div class="index">
-          <div class="indexdiv">
-            <h3>Symbols</h3>
-            <dl>
-              <dt>"decode-string-from-octets, <a class="indexterm" href="#decode-string-from-octets">Function decode-string-from-octets</a></dt>
-              <dt>#$, <a class="indexterm" href="#rm_sharpsign-dollarsign">Reader Macro #$</a></dt>
-              <dt>#&amp;, <a class="indexterm" href="#rm_sharpsign-ampersand">Reader Macro #&amp;</a></dt>
-              <dt>#/, <a class="indexterm" href="#rm_sharpsign-slash">Reader Macro #/</a></dt>
-              <dt>#&gt;, <a class="indexterm" href="#rm_sharpsign-greaterthan">Reader Macro #&gt;</a></dt>
-              <dt>#_, <a class="indexterm" href="#rm_sharpsign-underscore">Reader Macro #_</a></dt>
-              <dt>%ff-call, <a class="indexterm" href="#f_Pff-call">Function %FF-CALL</a></dt>
-              <dt>%reference-external-entry-point, <a class="indexterm" href="#f_Preference-external-entry-point">Function %REFERENCE-EXTERNAL-ENTRY-POINT</a></dt>
-              <dt>(setf population-contents), <a class="indexterm" href="#f_setf_population-contents">Function (SETF POPULATION-CONTENTS)</a></dt>
-              <dt>*all-modifier-names*, <a class="indexterm" href="#v_all-modifier-names">Variable *all-modifier-names*</a></dt>
-              <dt>*alternate-line-terminator*, <a class="indexterm" href="#v_alternate-line-terminator">Variable CCL:*ALTERNATE-LINE-TERMINATOR*</a></dt>
-              <dt>*altivec-available*, <a class="indexterm" href="#v_altivec-available">Variable *ALTIVEC-AVAILABLE*</a></dt>
-              <dt>*altivec-lapmacros-maintain-vrsave-p*, <a class="indexterm" href="#v_altivec-lapmacros-maintain-vrsave-p">Variable *ALTIVEC-LAPMACROS-MAINTAIN-VRSAVE-P*</a></dt>
-              <dt>*buffer-names*, <a class="indexterm" href="#v_buffer-names">Variable *buffer-names*</a></dt>
-              <dt>*character-attribute-names*, <a class="indexterm" href="#v_character-attribute-names">Variable *character-attribute-names*</a></dt>
-              <dt>*command-names*, <a class="indexterm" href="#v_command-names">Variable *command-names*</a></dt>
-              <dt>*COMPILE-CODE-COVERAGE*, <a class="indexterm" href="#v_compile-code-coverage">Variable *COMPILE-CODE-COVERAGE*</a></dt>
-              <dt>*current-process*, <a class="indexterm" href="#v_current-process">Variable *CURRENT-PROCESS*</a></dt>
-              <dt>*default-external-format*, <a class="indexterm" href="#v_default-external-format">Variable CCL:*DEFAULT-EXTERNAL-FORMAT*</a></dt>
-              <dt>*default-line-termination*, <a class="indexterm" href="#v_default-line-termination">Variable CCL:*DEFAULT-LINE-TERMINATION*</a></dt>
-              <dt>*disassemble-verbose*, <a class="indexterm" href="#v_disassemble-verbose">Variable *disassemble-verbose*</a></dt>
-              <dt>*ephemerally-active-command-types*, <a class="indexterm" href="#v_ephemerally-active-command-types">Variable *ephemerally-active-command-types*</a></dt>
-              <dt>*global-variable-names*, <a class="indexterm" href="#v_global-variable-names">Variable *global-variable-names*</a></dt>
-              <dt>*key-event-history*, <a class="indexterm" href="#v_key-event-history">Variable *key-event-history*</a></dt>
-              <dt>*last-search-string*, <a class="indexterm" href="#v_last-search-string">Variable *last-search-string*</a></dt>
-              <dt>*logical-key-event-names*, <a class="indexterm" href="#v_logical-key-event-names">Variable *logical-key-event-names*</a></dt>
-              <dt>*mode-names*, <a class="indexterm" href="#v_mode-names">Variable *mode-names*</a></dt>
-              <dt>*ticks-per-second*, <a class="indexterm" href="#v_ticks-per-second">Variable *TICKS-PER-SECOND*</a></dt>
-              <dt>*warn-if-redefine-kernel, <a class="indexterm" href="#v_warn-if-redefine-kernel">Variable *WARN-IF-REDEFINE-KERNEL*</a></dt>
-              <dt>+NULL-PTR+, <a class="indexterm" href="#Saving-Applications">Saving Applications</a></dt>
-              <dt>:y, <a class="indexterm" href="#cmd_y">Toplevel Command :Y</a></dt>
-              <dt>@class, <a class="indexterm" href="#m_class">Macro CCL::@CLASS</a></dt>
-              <dt>@selector, <a class="indexterm" href="#m_selector">Macro CCL::@SELECTOR</a></dt>
-              <dt>[fn-name], <a class="indexterm" href="#f_describe-character-encodings">Function DESCRIBE-CHARACTER-ENCODINGS</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3></h3>
-            <dl>
-              <dt>, <a class="indexterm" href="#trace">Trace</a>, <a class="indexterm" href="#map-file-to-ivector">Memory-mapped Files</a>, <a class="indexterm" href="#defstatic">Static Variables</a>, <a class="indexterm" href="#save-application">Saving Applications</a>, <a class="indexterm" href="#build-application">The Application Builder</a>, <a class="indexterm" href="#chud_shark-config-file">Reference</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>A</h3>
-            <dl>
-              <dt>accept-connection, <a class="indexterm" href="#f_accept-connection">Function ACCEPT-CONNECTION</a></dt>
-              <dt>activate-region, <a class="indexterm" href="#f_activate-region">Function activate-region</a></dt>
-              <dt>Active Regions Enabled, <a class="indexterm" href="#hv_active_regions_enabled">Hemlock Variable Active Regions Enabled</a></dt>
-              <dt>Add Newline at EOF on Writing File, <a class="indexterm" href="#hv_add_newline_at_eof_on_writing_file">Hemlock Variable Add Newline at EOF on Writing File</a></dt>
-              <dt>add-hook, <a class="indexterm" href="#m_add-hook">Macro add-hook</a></dt>
-              <dt>advise, <a class="indexterm" href="#m_advise">Macro ADVISE</a></dt>
-              <dt>advisedp, <a class="indexterm" href="#m_advisedp">Macro ADVISEDP</a></dt>
-              <dt>all-buffers, <a class="indexterm" href="#f_all-buffers">Function all-buffers</a></dt>
-              <dt>all-processes, <a class="indexterm" href="#f_all-processes">Function ALL-PROCESSES</a></dt>
-              <dt>altivec-available-p, <a class="indexterm" href="#f_altivec-available-p">Function ALTIVEC-AVAILABLE-P</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>B</h3>
-            <dl>
-              <dt>backward-up-list, <a class="indexterm" href="#f_backward-up-list">Function backward-up-list</a></dt>
-              <dt>beep, <a class="indexterm" href="#f_beep">Function beep</a></dt>
-              <dt>Beep On Ambiguity, <a class="indexterm" href="#hv_beep_on_ambiguity">Hemlock Variable Beep On Ambiguity</a></dt>
-              <dt>bind-key, <a class="indexterm" href="#f_bind-key">Function bind-key</a></dt>
-              <dt>blank-after-p, <a class="indexterm" href="#f_blank-after-p">Function blank-after-p</a></dt>
-              <dt>blank-before-p, <a class="indexterm" href="#f_blank-before-p">Function blank-before-p</a></dt>
-              <dt>blank-line-p, <a class="indexterm" href="#f_blank-line-p">Function blank-line-p</a></dt>
-              <dt>bootstrapping
-          image, <a class="indexterm" href="#building-definitions">Building Definitions</a></dt>
-              <dt>Buffer Major Mode Hook, <a class="indexterm" href="#hv_buffer_major_mode_hook">Hemlock Variable Buffer Major Mode Hook</a></dt>
-              <dt>Buffer Minor Mode Hook, <a class="indexterm" href="#hv_buffer_minor_mode_hook">Hemlock Variable Buffer Minor Mode Hook</a></dt>
-              <dt>Buffer Modified Hook, <a class="indexterm" href="#hv_buffer_modified_hook">Hemlock Variable Buffer Modified Hook</a></dt>
-              <dt>Buffer Name Hook, <a class="indexterm" href="#hv_buffer_name_hook">Hemlock Variable Buffer Name Hook</a></dt>
-              <dt>Buffer Pathname Hook, <a class="indexterm" href="#hv_buffer_pathname_hook">Hemlock Variable Buffer Pathname Hook</a></dt>
-              <dt>Buffer Writable Hook, <a class="indexterm" href="#hv_buffer_writable_hook">Hemlock Variable Buffer Writable Hook</a></dt>
-              <dt>buffer-default-pathname, <a class="indexterm" href="#f_buffer-default-pathname">Function buffer-default-pathname</a></dt>
-              <dt>buffer-delete-hook, <a class="indexterm" href="#f_buffer-delete-hook">Function buffer-delete-hook</a></dt>
-              <dt>buffer-end, <a class="indexterm" href="#f_buffer-end">Function buffer-end</a></dt>
-              <dt>buffer-end-mark, <a class="indexterm" href="#f_buffer-end-mark">Function buffer-end-mark</a></dt>
-              <dt>buffer-major-mode, <a class="indexterm" href="#f_buffer-major-mode">Function buffer-major-mode</a></dt>
-              <dt>buffer-mark, <a class="indexterm" href="#f_buffer-mark">Function buffer-mark</a></dt>
-              <dt>buffer-minor-mode, <a class="indexterm" href="#f_buffer-minor-mode">Function buffer-minor-mode</a></dt>
-              <dt>buffer-modeline-field-p, <a class="indexterm" href="#f_buffer-modeline-field-p">Function buffer-modeline-field-p</a></dt>
-              <dt>buffer-modeline-fields, <a class="indexterm" href="#f_buffer-modeline-fields">Function buffer-modeline-fields</a></dt>
-              <dt>buffer-modes, <a class="indexterm" href="#f_buffer-modes">Function buffer-modes</a></dt>
-              <dt>buffer-modified, <a class="indexterm" href="#f_buffer-modified">Function buffer-modified</a></dt>
-              <dt>buffer-name, <a class="indexterm" href="#f_buffer-name">Function buffer-name</a></dt>
-              <dt>buffer-pathname, <a class="indexterm" href="#f_buffer-pathname">Function buffer-pathname</a></dt>
-              <dt>buffer-point, <a class="indexterm" href="#f_buffer-point">Function buffer-point</a></dt>
-              <dt>buffer-region, <a class="indexterm" href="#f_buffer-region">Function buffer-region</a></dt>
-              <dt>buffer-signature, <a class="indexterm" href="#f_buffer-signature">Function buffer-signature</a></dt>
-              <dt>buffer-start, <a class="indexterm" href="#f_buffer-start">Function buffer-start</a></dt>
-              <dt>buffer-start-mark, <a class="indexterm" href="#f_buffer-start-mark">Function buffer-start-mark</a></dt>
-              <dt>buffer-variables, <a class="indexterm" href="#f_buffer-variables">Function buffer-variables</a></dt>
-              <dt>buffer-writable, <a class="indexterm" href="#f_buffer-writable">Function buffer-writable</a></dt>
-              <dt>buffer-write-date, <a class="indexterm" href="#f_buffer-write-date">Function buffer-write-date</a></dt>
-              <dt>bufferp, <a class="indexterm" href="#f_bufferp">Function bufferp</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>C</h3>
-            <dl>
-              <dt>CCL Logical Host, <a class="indexterm" href="#Predefined-Logical-Hosts">Predefined Logical Hosts</a></dt>
-              <dt>char-key-event, <a class="indexterm" href="#f_char-key-event">Function char-key-event</a></dt>
-              <dt>Character Attribute Hook, <a class="indexterm" href="#hv_character_attribute_hook">Hemlock Variable Character Attribute Hook</a></dt>
-              <dt>Character Deletion Threshold, <a class="indexterm" href="#hv_character_deletion_threshold">Hemlock Variable Character Deletion Threshold</a></dt>
-              <dt>character-attribute, <a class="indexterm" href="#f_character-attribute">Function character-attribute</a></dt>
-              <dt>character-attribute-documentation, <a class="indexterm" href="#f_character-attribute-documentation">Function character-attribute-documentation</a></dt>
-              <dt>character-attribute-hooks, <a class="indexterm" href="#f_character-attribute-hooks">Function character-attribute-hooks</a></dt>
-              <dt>character-attribute-name, <a class="indexterm" href="#f_character-attribute-name">Function character-attribute-name</a></dt>
-              <dt>character-attribute-p, <a class="indexterm" href="#f_character-attribute-p">Function character-attribute-p</a></dt>
-              <dt>character-offset, <a class="indexterm" href="#f_character-offset">Function character-offset</a></dt>
-              <dt>check-region-active, <a class="indexterm" href="#f_check-region-active">Function check-region-active</a></dt>
-              <dt>clear-coverage, <a class="indexterm" href="#f_clear-coverage">Function CLEAR-COVERAGE</a></dt>
-              <dt>clear-echo-area, <a class="indexterm" href="#f_clear-echo-area">Function clear-echo-area</a></dt>
-              <dt>close, <a class="indexterm" href="#o_close">Method CLOSE</a></dt>
-              <dt>close-shared-library, <a class="indexterm" href="#f_close-shared-library">Function CLOSE-SHARED-LIBRARY</a></dt>
-              <dt>clrstring, <a class="indexterm" href="#f_clrstring">Function clrstring</a></dt>
-              <dt>combine-coverage, <a class="indexterm" href="#f_combine-coverage">Function COMBINE-COVERAGE</a></dt>
-              <dt>Command Abort Hook, <a class="indexterm" href="#hv_command_abort_hook">Hemlock Variable Command Abort Hook</a></dt>
-              <dt>command-bindings, <a class="indexterm" href="#f_command-bindings">Function command-bindings</a></dt>
-              <dt>command-case, <a class="indexterm" href="#m_command-case">Macro command-case</a></dt>
-              <dt>command-documentation, <a class="indexterm" href="#f_command-documentation">Function command-documentation</a></dt>
-              <dt>command-function, <a class="indexterm" href="#f_command-function">Function command-function</a></dt>
-              <dt>command-name, <a class="indexterm" href="#f_command-name">Function command-name</a></dt>
-              <dt>commandp, <a class="indexterm" href="#f_commandp">Function commandp</a></dt>
-              <dt>communication-deadline-expired, <a class="indexterm" href="#Stream-Timeouts-And-Deadlines">Stream Timeouts and Deadlines</a></dt>
-              <dt>Complete Field, <a class="indexterm" href="#c_complete_field">Command Complete Field</a></dt>
-              <dt>Complete Keyword, <a class="indexterm" href="#c_complete_keyword">Command Complete Keyword</a></dt>
-              <dt>complete-string, <a class="indexterm" href="#f_complete-string">Function complete-string</a></dt>
-              <dt>configure-gcc, <a class="indexterm" href="#f_configure-gcc">Function CONFIGURE-GCC</a></dt>
-              <dt>Confirm Parse, <a class="indexterm" href="#c_confirm_parse">Command Confirm Parse</a></dt>
-              <dt>copy-mark, <a class="indexterm" href="#f_copy-mark">Function copy-mark</a></dt>
-              <dt>copy-region, <a class="indexterm" href="#f_copy-region">Function copy-region</a></dt>
-              <dt>count-characters, <a class="indexterm" href="#f_count-characters">Function count-characters</a></dt>
-              <dt>count-characters-in-octet-vector, <a class="indexterm" href="#count-characters-in-octet-vector">Function count-characters-in-octet-vector</a></dt>
-              <dt>count-lines, <a class="indexterm" href="#f_count-lines">Function count-lines</a></dt>
-              <dt>coverage-statistics, <a class="indexterm" href="#f_coverage-statistics">Function COVERAGE-STATISTICS</a></dt>
-              <dt>current-buffer, <a class="indexterm" href="#f_current-buffer">Function current-buffer</a></dt>
-              <dt>current-directory-name, <a class="indexterm" href="#f_current-directory-name">Function CCL::CURRENT-DIRECTORY-NAME</a></dt>
-              <dt>current-mark, <a class="indexterm" href="#f_current-mark">Function current-mark</a></dt>
-              <dt>current-point, <a class="indexterm" href="#f_current-point">Function current-point</a></dt>
-              <dt>current-point-collapsing-selection, <a class="indexterm" href="#f_current-point-collapsing-selection">Function current-point-collapsing-selection</a></dt>
-              <dt>current-point-extending-selection, <a class="indexterm" href="#f_current-point-extending-selection">Function current-point-extending-selection</a></dt>
-              <dt>current-point-for-deletion, <a class="indexterm" href="#f_current-point-for-deletion">Function current-point-for-deletion</a></dt>
-              <dt>current-point-for-insertion, <a class="indexterm" href="#f_current-point-for-insertion">Function current-point-for-insertion</a></dt>
-              <dt>current-point-unless-selection, <a class="indexterm" href="#f_current-point-unless-selection">Function current-point-unless-selection</a></dt>
-              <dt>current-region, <a class="indexterm" href="#f_current-region">Function current-region</a></dt>
-              <dt>current-variable-tables, <a class="indexterm" href="#f_current-variable-tables">Function current-variable-tables</a></dt>
-              <dt>current-view, <a class="indexterm" href="#f_current-view">Function current-view</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>D</h3>
-            <dl>
-              <dt>deactivate-region, <a class="indexterm" href="#f_deactivate-region">Function deactivate-region</a></dt>
-              <dt>def-foreign-type, <a class="indexterm" href="#m_def-foreign-type">Macro DEF-FOREIGN-TYPE</a></dt>
-              <dt>defattribute, <a class="indexterm" href="#f_defattribute">Function defattribute</a></dt>
-              <dt>Default Modeline Fields, <a class="indexterm" href="#hv_default_modeline_fields">Hemlock Variable Default Modeline Fields</a></dt>
-              <dt>Default Modes, <a class="indexterm" href="#hv_default_modes">Hemlock Variable Default Modes</a></dt>
-              <dt>defcallback, <a class="indexterm" href="#m_defcallback">Macro DEFCALLBACK</a></dt>
-              <dt>defcommand, <a class="indexterm" href="#m_defcommand">Macro defcommand</a></dt>
-              <dt>defhvar, <a class="indexterm" href="#f_defhvar">Function defhvar</a></dt>
-              <dt>defindent, <a class="indexterm" href="#f_defindent">Function defindent</a></dt>
-              <dt>define-file-option, <a class="indexterm" href="#m_define-file-option">Macro define-file-option</a></dt>
-              <dt>define-file-type-hook, <a class="indexterm" href="#m_define-file-type-hook">Macro define-file-type-hook</a></dt>
-              <dt>define-key-event-modifier, <a class="indexterm" href="#f_define-key-event-modifier">Function define-key-event-modifier</a></dt>
-              <dt>define-keysym, <a class="indexterm" href="#f_define-keysym">Function define-keysym</a></dt>
-              <dt>define-keysym-code, <a class="indexterm" href="#f_define-keysym-code">Function define-keysym-code</a></dt>
-              <dt>define-logical-key-event, <a class="indexterm" href="#f_define-logical-key-event">Function define-logical-key-event</a></dt>
-              <dt>define-mouse-keysym, <a class="indexterm" href="#f_define-mouse-keysym">Function define-mouse-keysym</a></dt>
-              <dt>define-objc-class-method, <a class="indexterm" href="#m_define-objc-class-method">Macro CCL::DEFINE-OBJC-CLASS-METHOD</a></dt>
-              <dt>define-objc-method, <a class="indexterm" href="#m_define-objc-method">Macro CCL::DEFINE-OBJC-METHOD</a></dt>
-              <dt>defmode, <a class="indexterm" href="#f_defmode">Function defmode</a></dt>
-              <dt>Defun Parse Goal, <a class="indexterm" href="#hv_defun_parse_goal">Hemlock Variable Defun Parse Goal</a></dt>
-              <dt>defun-region, <a class="indexterm" href="#f_defun-region">Function defun-region</a></dt>
-              <dt>Delete Buffer Hook, <a class="indexterm" href="#hv_delete_buffer_hook">Hemlock Variable Delete Buffer Hook</a></dt>
-              <dt>Delete Variable Hook, <a class="indexterm" href="#hv_delete_variable_hook">Hemlock Variable Delete Variable Hook</a></dt>
-              <dt>delete-and-save-region, <a class="indexterm" href="#f_delete-and-save-region">Function delete-and-save-region</a></dt>
-              <dt>delete-buffer, <a class="indexterm" href="#f_delete-buffer">Function delete-buffer</a></dt>
-              <dt>delete-characters, <a class="indexterm" href="#f_delete-characters">Function delete-characters</a></dt>
-              <dt>delete-horizontal-space, <a class="indexterm" href="#f_delete-horizontal-space">Function delete-horizontal-space</a></dt>
-              <dt>delete-key-binding, <a class="indexterm" href="#f_delete-key-binding">Function delete-key-binding</a></dt>
-              <dt>delete-mark, <a class="indexterm" href="#f_delete-mark">Function delete-mark</a></dt>
-              <dt>delete-region, <a class="indexterm" href="#f_delete-region">Function delete-region</a></dt>
-              <dt>delete-string, <a class="indexterm" href="#f_delete-string">Function delete-string</a></dt>
-              <dt>delete-variable, <a class="indexterm" href="#f_delete-variable">Function delete-variable</a></dt>
-              <dt>do-alpha-chars, <a class="indexterm" href="#m_do-alpha-chars">Macro do-alpha-chars</a></dt>
-              <dt>do-alpha-key-events, <a class="indexterm" href="#m_do-alpha-key-events">Macro do-alpha-key-events</a></dt>
-              <dt>do-strings, <a class="indexterm" href="#m_do-strings">Macro do-strings</a></dt>
-              <dt>dotted-to-ipaddr, <a class="indexterm" href="#f_dotted-to-ipaddr">Function DOTTED-TO-IPADDR</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>E</h3>
-            <dl>
-              <dt>ed, <a class="indexterm" href="#f_ed">Function ed</a></dt>
-              <dt>edit-definition, <a class="indexterm" href="#f_edit-definition">Function edit-definition</a></dt>
-              <dt>editor-error, <a class="indexterm" href="#f_editor-error">Function editor-error</a></dt>
-              <dt>egc, <a class="indexterm" href="#f_egc">Function EGC</a></dt>
-              <dt>egc-active-p, <a class="indexterm" href="#f_egc-active-p">Function EGC-ACTIVE-P</a></dt>
-              <dt>egc-configuration, <a class="indexterm" href="#f_egc-configuration">Function EGC-CONFIGURATION</a></dt>
-              <dt>egc-enabled-p, <a class="indexterm" href="#f_egc-enabled-p">Function EGC-ENABLED-P</a></dt>
-              <dt>encode-string-to-octets, <a class="indexterm" href="#encode-string-to-octets">Function encode-string-to-octets</a></dt>
-              <dt>end-line-p, <a class="indexterm" href="#f_end-line-p">Function end-line-p</a></dt>
-              <dt>external, <a class="indexterm" href="#m_external">Macro EXTERNAL</a></dt>
-              <dt>external-call, <a class="indexterm" href="#m_external-call">Macro EXTERNAL-CALL</a></dt>
-              <dt>external-process-error-stream, <a class="indexterm" href="#f_external-process-error-stream">Function EXTERNAL-PROCESS-ERROR-STREAM</a></dt>
-              <dt>external-process-id, <a class="indexterm" href="#f_external-process-id">Function EXTERNAL-PROCESS-ID</a></dt>
-              <dt>external-process-input-stream, <a class="indexterm" href="#f_external-process-input-stream">Function EXTERNAL-PROCESS-INPUT-STREAM</a></dt>
-              <dt>external-process-output-stream, <a class="indexterm" href="#f_external-process-output-stream">Function EXTERNAL-PROCESS-OUTPUT-STREAM</a></dt>
-              <dt>external-process-status, <a class="indexterm" href="#f_external-process-status">Function EXTERNAL-PROCESS-STATUS</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>F</h3>
-            <dl>
-              <dt>fasl
-          files, <a class="indexterm" href="#building-definitions">Building Definitions</a></dt>
-              <dt>fasl-concatenate, <a class="indexterm" href="#f_fasl-concatenate">Function FASL-CONCATENATE</a></dt>
-              <dt>ff-call, <a class="indexterm" href="#m_ff-call">Macro FF-CALL</a></dt>
-              <dt>Fill Column, <a class="indexterm" href="#hv_fill_column">Hemlock Variable Fill Column</a></dt>
-              <dt>Fill Prefix, <a class="indexterm" href="#hv_fill_prefix">Hemlock Variable Fill Prefix</a></dt>
-              <dt>fill-region, <a class="indexterm" href="#f_fill-region">Function fill-region</a></dt>
-              <dt>fill-region-by-paragraphs, <a class="indexterm" href="#f_fill-region-by-paragraphs">Function fill-region-by-paragraphs</a></dt>
-              <dt>filter-region, <a class="indexterm" href="#f_filter-region">Function filter-region</a></dt>
-              <dt>find-ambiguous, <a class="indexterm" href="#f_find-ambiguous">Function find-ambiguous</a></dt>
-              <dt>find-attribute, <a class="indexterm" href="#f_find-attribute">Function find-attribute</a></dt>
-              <dt>find-containing, <a class="indexterm" href="#f_find-containing">Function find-containing</a></dt>
-              <dt>find-not-attribute, <a class="indexterm" href="#f_find-not-attribute">Function find-not-attribute</a></dt>
-              <dt>find-pattern, <a class="indexterm" href="#f_find-pattern">Function find-pattern</a></dt>
-              <dt>first-line-p, <a class="indexterm" href="#f_first-line-p">Function first-line-p</a></dt>
-              <dt>foreign-symbol-address, <a class="indexterm" href="#f_foreign-symbol-address">Function FOREIGN-SYMBOL-ADDRESS</a></dt>
-              <dt>foreign-symbol-entry, <a class="indexterm" href="#f_foreign-symbol-entry">Function FOREIGN-SYMBOL-ENTRY</a></dt>
-              <dt>form-offset, <a class="indexterm" href="#f_form-offset">Function form-offset</a></dt>
-              <dt>forward-up-list, <a class="indexterm" href="#f_forward-up-list">Function forward-up-list</a></dt>
-              <dt>free, <a class="indexterm" href="#f_free">Function FREE</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>G</h3>
-            <dl>
-              <dt>gc, <a class="indexterm" href="#f_gc">Function GC</a></dt>
-              <dt>gc-retain-pages, <a class="indexterm" href="#f_gc-retain-pages">Function GC-RETAIN-PAGES</a></dt>
-              <dt>gc-retaining-pages, <a class="indexterm" href="#f_gc-retaining-pages">Function GC-RETAINING-PAGES</a></dt>
-              <dt>get-command, <a class="indexterm" href="#f_get-command">Function get-command</a></dt>
-              <dt>get-coverage, <a class="indexterm" href="#f_get-coverage">Function GET-COVERAGE</a></dt>
-              <dt>get-fpu-mode, <a class="indexterm" href="#f_get-fpu-mode">Function GET-FPU-MODE</a></dt>
-              <dt>get-incremental-coverage, <a class="indexterm" href="#f_get-incremental-coverage">Function GET-INCREMENTAL-COVERAGE</a></dt>
-              <dt>get-search-pattern, <a class="indexterm" href="#f_get-search-pattern">Function get-search-pattern</a></dt>
-              <dt>get-user-home-dir, <a class="indexterm" href="#f_get-user-home-dir">Function CCL::GET-USER-HOME-DIR</a></dt>
-              <dt>getenv, <a class="indexterm" href="#f_getenv">Function CCL::GETENV</a></dt>
-              <dt>getpid, <a class="indexterm" href="#f_getpid">Function CCL::GETPID</a></dt>
-              <dt>getstring, <a class="indexterm" href="#f_getstring">Function getstring</a></dt>
-              <dt>getuid, <a class="indexterm" href="#f_getuid">Function CCL::GETUID</a></dt>
-              <dt>grab-lock, <a class="indexterm" href="#f_grab-lock">Function GRAB-LOCK</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>H</h3>
-            <dl>
-              <dt>handle-lisp-errors, <a class="indexterm" href="#m_handle-lisp-errors">Macro handle-lisp-errors</a></dt>
-              <dt>heap
-          image, <a class="indexterm" href="#building-definitions">Building Definitions</a></dt>
-              <dt>Help On Parse, <a class="indexterm" href="#c_help_on_parse">Command Help On Parse</a></dt>
-              <dt>hemlock-bound-p, <a class="indexterm" href="#f_hemlock-bound-p">Function hemlock-bound-p</a></dt>
-              <dt>hemlock-output-stream-p, <a class="indexterm" href="#f_hemlock-output-stream-p">Function hemlock-output-stream-p</a></dt>
-              <dt>hemlock-region-stream-p, <a class="indexterm" href="#f_hemlock-region-stream-p">Function hemlock-region-stream-p</a></dt>
-              <dt>hemlock-view-buffer, <a class="indexterm" href="#f_hemlock-view-buffer">Function hemlock-view-buffer</a></dt>
-              <dt>hemlock-view-p, <a class="indexterm" href="#f_hemlock-view-p">Function hemlock-view-p</a></dt>
-              <dt>hlet, <a class="indexterm" href="#m_hlet">Macro hlet</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>I</h3>
-            <dl>
-              <dt>Illegal, <a class="indexterm" href="#c_illegal">Command Illegal</a></dt>
-              <dt>in-lisp, <a class="indexterm" href="#f_in-lisp">Function in-lisp</a></dt>
-              <dt>incremental-coverage-source-matches, <a class="indexterm" href="#f_incremental-coverage-source-matches">Function INCREMENTAL-COVERAGE-SOURCE-MATCHES</a></dt>
-              <dt>incremental-coverage-svn-matches, <a class="indexterm" href="#f_incremental-coverage-svn-matches">Function INCREMENTAL-COVERAGE-SVN-MATCHES</a></dt>
-              <dt>Indent Function, <a class="indexterm" href="#hv_indent_function">Hemlock Variable Indent Function</a></dt>
-              <dt>Indent with Tabs, <a class="indexterm" href="#hv_indent_with_tabs">Hemlock Variable Indent with Tabs</a></dt>
-              <dt>indent-region, <a class="indexterm" href="#f_indent-region">Function indent-region</a></dt>
-              <dt>indent-region-for-commands, <a class="indexterm" href="#f_indent-region-for-commands">Function indent-region-for-commands</a></dt>
-              <dt>input-timeout, <a class="indexterm" href="#Stream-Timeouts-And-Deadlines">Stream Timeouts and Deadlines</a></dt>
-              <dt>insert-character, <a class="indexterm" href="#f_insert-character">Function insert-character</a></dt>
-              <dt>insert-region, <a class="indexterm" href="#f_insert-region">Function insert-region</a></dt>
-              <dt>insert-string, <a class="indexterm" href="#f_insert-string">Function insert-string</a></dt>
-              <dt>inside-defun-p, <a class="indexterm" href="#f_inside-defun-p">Function inside-defun-p</a></dt>
-              <dt>invoke-hook, <a class="indexterm" href="#m_invoke-hook">Macro invoke-hook</a></dt>
-              <dt>ipaddr-to-dotted, <a class="indexterm" href="#f_ipaddr-to-dotted">Function IPADDR-TO-DOTTED</a></dt>
-              <dt>ipaddr-to-hostname, <a class="indexterm" href="#f_ipaddr-to-hostname">Function IPADDR-TO-HOSTNAME</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>J</h3>
-            <dl>
-              <dt>join-process, <a class="indexterm" href="#f_join-process">Function JOIN-PROCESS</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>K</h3>
-            <dl>
-              <dt>Keep Backup Files, <a class="indexterm" href="#hv_keep_backup_files">Hemlock Variable Keep Backup Files</a></dt>
-              <dt>kernel build directory, <a class="indexterm" href="#building-definitions">Building Definitions</a></dt>
-              <dt>key-event-bit-p, <a class="indexterm" href="#f_key-event-bit-p">Function key-event-bit-p</a></dt>
-              <dt>key-event-bits, <a class="indexterm" href="#f_key-event-bits">Function key-event-bits</a></dt>
-              <dt>key-event-bits-modifiers, <a class="indexterm" href="#f_key-event-bits-modifiers">Function key-event-bits-modifiers</a></dt>
-              <dt>key-event-char, <a class="indexterm" href="#f_key-event-char">Function key-event-char</a></dt>
-              <dt>key-event-keysym, <a class="indexterm" href="#f_key-event-keysym">Function key-event-keysym</a></dt>
-              <dt>key-event-modifier-mask, <a class="indexterm" href="#f_key-event-modifier-mask">Function key-event-modifier-mask</a></dt>
-              <dt>key-event-p, <a class="indexterm" href="#f_key-event-p">Function key-event-p</a></dt>
-              <dt>key-translation, <a class="indexterm" href="#f_key-translation">Function key-translation</a></dt>
-              <dt>keysym-names, <a class="indexterm" href="#f_keysym-names">Function keysym-names</a></dt>
-              <dt>keysym-preferred-name, <a class="indexterm" href="#f_keysym-preferred-name">Function keysym-preferred-name</a></dt>
-              <dt>kill-characters, <a class="indexterm" href="#f_kill-characters">Function kill-characters</a></dt>
-              <dt>kill-region, <a class="indexterm" href="#f_kill-region">Function kill-region</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>L</h3>
-            <dl>
-              <dt>Last Resort Pathname Defaults, <a class="indexterm" href="#hv_last_resort_pathname_defaults">Hemlock Variable Last Resort Pathname Defaults</a></dt>
-              <dt>Last Resort Pathname Defaults Function, <a class="indexterm" href="#hv_last_resort_pathname_defaults_function">Hemlock Variable Last Resort Pathname Defaults Function</a></dt>
-              <dt>last-char-typed, <a class="indexterm" href="#f_last-char-typed">Function last-char-typed</a></dt>
-              <dt>last-command-type, <a class="indexterm" href="#f_last-command-type">Function last-command-type</a></dt>
-              <dt>last-key-event-typed, <a class="indexterm" href="#f_last-key-event-typed">Function last-key-event-typed</a></dt>
-              <dt>last-line-p, <a class="indexterm" href="#f_last-line-p">Function last-line-p</a></dt>
-              <dt>line-buffer, <a class="indexterm" href="#f_line-buffer">Function line-buffer</a></dt>
-              <dt>line-character, <a class="indexterm" href="#f_line-character">Function line-character</a></dt>
-              <dt>line-end, <a class="indexterm" href="#f_line-end">Function line-end</a></dt>
-              <dt>line-length, <a class="indexterm" href="#f_line-length">Function line-length</a></dt>
-              <dt>line-next, <a class="indexterm" href="#f_line-next">Function line-next</a></dt>
-              <dt>line-offset, <a class="indexterm" href="#f_line-offset">Function line-offset</a></dt>
-              <dt>line-plist, <a class="indexterm" href="#f_line-plist">Function line-plist</a></dt>
-              <dt>line-previous, <a class="indexterm" href="#f_line-previous">Function line-previous</a></dt>
-              <dt>line-signature, <a class="indexterm" href="#f_line-signature">Function line-signature</a></dt>
-              <dt>line-start, <a class="indexterm" href="#f_line-start">Function line-start</a></dt>
-              <dt>line-string, <a class="indexterm" href="#f_line-string">Function line-string</a></dt>
-              <dt>line-to-region, <a class="indexterm" href="#f_line-to-region">Function line-to-region</a></dt>
-              <dt>line&lt;, <a class="indexterm" href="#f_line_lt">Function line&lt;</a></dt>
-              <dt>line&lt;=, <a class="indexterm" href="#f_line_lt__eq">Function line&lt;=</a></dt>
-              <dt>line&gt;, <a class="indexterm" href="#f_line_gt">Function line&gt;</a></dt>
-              <dt>line&gt;=, <a class="indexterm" href="#f_line_gt__eq">Function line&gt;=</a></dt>
-              <dt>linep, <a class="indexterm" href="#f_linep">Function linep</a></dt>
-              <dt>lines-related, <a class="indexterm" href="#f_lines-related">Function lines-related</a></dt>
-              <dt>lisp
-          kernel, <a class="indexterm" href="#building-definitions">Building Definitions</a></dt>
-              <dt>lisp-heap-gc-threshold, <a class="indexterm" href="#f_lisp-heap-gc-threshold">Function LISP-HEAP-GC-THRESHOLD</a></dt>
-              <dt>local-host, <a class="indexterm" href="#f_local-host">Function LOCAL-HOST</a></dt>
-              <dt>local-port, <a class="indexterm" href="#f_local-port">Function LOCAL-PORT</a></dt>
-              <dt>logical-key-event-documentation, <a class="indexterm" href="#f_logical-key-event-documentation">Function logical-key-event-documentation</a></dt>
-              <dt>logical-key-event-key-events, <a class="indexterm" href="#f_logical-key-event-key-events">Function logical-key-event-key-events</a></dt>
-              <dt>logical-key-event-name, <a class="indexterm" href="#f_logical-key-event-name">Function logical-key-event-name</a></dt>
-              <dt>logical-key-event-p, <a class="indexterm" href="#f_logical-key-event-p">Function logical-key-event-p</a></dt>
-              <dt>lookup-hostname, <a class="indexterm" href="#f_lookup-hostname">Function LOOKUP-HOSTNAME</a></dt>
-              <dt>lookup-port, <a class="indexterm" href="#f_lookup-port">Function LOOKUP-PORT</a></dt>
-              <dt>loud-message, <a class="indexterm" href="#f_loud-message">Function loud-message</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>M</h3>
-            <dl>
-              <dt>Make Buffer Hook, <a class="indexterm" href="#hv_make_buffer_hook">Hemlock Variable Make Buffer Hook</a></dt>
-              <dt>make-buffer, <a class="indexterm" href="#f_make-buffer">Function make-buffer</a></dt>
-              <dt>make-command, <a class="indexterm" href="#f_make-command">Function make-command</a></dt>
-              <dt>make-empty-region, <a class="indexterm" href="#f_make-empty-region">Function make-empty-region</a></dt>
-              <dt>make-external-format, <a class="indexterm" href="#f_make-external-format">Function MAKE-EXTERNAL-FORMAT</a></dt>
-              <dt>make-gcable-record, <a class="indexterm" href="#m_make-record">Macro MAKE-RECORD</a></dt>
-              <dt>make-heap-ivector, <a class="indexterm" href="#f_make-heap-ivector">Function MAKE-HEAP-IVECTOR</a></dt>
-              <dt>make-hemlock-output-stream, <a class="indexterm" href="#f_make-hemlock-output-stream">Function make-hemlock-output-stream</a></dt>
-              <dt>make-hemlock-region-stream, <a class="indexterm" href="#f_make-hemlock-region-stream">Function make-hemlock-region-stream</a></dt>
-              <dt>make-key-event, <a class="indexterm" href="#f_make-key-event">Function make-key-event</a></dt>
-              <dt>make-key-event-bits, <a class="indexterm" href="#f_make-key-event-bits">Function make-key-event-bits</a></dt>
-              <dt>make-lock, <a class="indexterm" href="#f_make-lock">Function MAKE-LOCK</a></dt>
-              <dt>make-modeline-field, <a class="indexterm" href="#f_make-modeline-field">Function make-modeline-field</a></dt>
-              <dt>make-population, <a class="indexterm" href="#f_make-population">Function MAKE-POPULATION</a></dt>
-              <dt>make-process, <a class="indexterm" href="#f_make-process">Function MAKE-PROCESS</a></dt>
-              <dt>make-read-write-lock, <a class="indexterm" href="#f_make-read-write-lock">Function MAKE-READ-WRITE-LOCK</a></dt>
-              <dt>make-record, <a class="indexterm" href="#m_make-record">Macro MAKE-RECORD</a></dt>
-              <dt>make-ring, <a class="indexterm" href="#f_make-ring">Function make-ring</a></dt>
-              <dt>make-semaphore, <a class="indexterm" href="#f_make-semaphore">Function MAKE-SEMAPHORE</a></dt>
-              <dt>make-socket, <a class="indexterm" href="#f_make-socket">Function MAKE-SOCKET</a></dt>
-              <dt>make-string-table, <a class="indexterm" href="#f_make-string-table">Function make-string-table</a></dt>
-              <dt>map-bindings, <a class="indexterm" href="#f_map-bindings">Function map-bindings</a></dt>
-              <dt>mark, <a class="indexterm" href="#f_mark">Function mark</a></dt>
-              <dt>mark-absolute-position, <a class="indexterm" href="#f_mark-absolute-position">Function mark-absolute-position</a></dt>
-              <dt>mark-after, <a class="indexterm" href="#f_mark-after">Function mark-after</a></dt>
-              <dt>mark-before, <a class="indexterm" href="#f_mark-before">Function mark-before</a></dt>
-              <dt>mark-buffer, <a class="indexterm" href="#f_mark-buffer">Function mark-buffer</a></dt>
-              <dt>mark-charpos, <a class="indexterm" href="#f_mark-charpos">Function mark-charpos</a></dt>
-              <dt>mark-column, <a class="indexterm" href="#f_mark-column">Function mark-column</a></dt>
-              <dt>mark-kind, <a class="indexterm" href="#f_mark-kind">Function mark-kind</a></dt>
-              <dt>mark-line, <a class="indexterm" href="#f_mark-line">Function mark-line</a></dt>
-              <dt>mark-paragraph, <a class="indexterm" href="#f_mark-paragraph">Function mark-paragraph</a></dt>
-              <dt>mark-top-level-form, <a class="indexterm" href="#f_mark-top-level-form">Function mark-top-level-form</a></dt>
-              <dt>mark/=, <a class="indexterm" href="#f_mark__eq">Function mark/=</a></dt>
-              <dt>mark&lt;, <a class="indexterm" href="#f_mark_lt">Function mark&lt;</a></dt>
-              <dt>mark&lt;=, <a class="indexterm" href="#f_mark_lt__eq">Function mark&lt;=</a></dt>
-              <dt>mark=, <a class="indexterm" href="#f_mark_eq">Function mark=</a></dt>
-              <dt>mark&gt;, <a class="indexterm" href="#f_mark_gt">Function mark&gt;</a></dt>
-              <dt>mark&gt;=, <a class="indexterm" href="#f_mark_gt__eq">Function mark&gt;=</a></dt>
-              <dt>markp, <a class="indexterm" href="#f_markp">Function markp</a></dt>
-              <dt>Maximum Lines Parsed, <a class="indexterm" href="#hv_maximum_lines_parsed">Hemlock Variable Maximum Lines Parsed</a></dt>
-              <dt>message, <a class="indexterm" href="#f_message">Function message</a></dt>
-              <dt>Minimum Lines Parsed, <a class="indexterm" href="#hv_minimum_lines_parsed">Hemlock Variable Minimum Lines Parsed</a></dt>
-              <dt>mode-documentation, <a class="indexterm" href="#f_mode-documentation">Function mode-documentation</a></dt>
-              <dt>mode-major-p, <a class="indexterm" href="#f_mode-major-p">Function mode-major-p</a></dt>
-              <dt>mode-variables, <a class="indexterm" href="#f_mode-variables">Function mode-variables</a></dt>
-              <dt>modeline-field, <a class="indexterm" href="#f_modeline-field">Function modeline-field</a></dt>
-              <dt>modeline-field-function, <a class="indexterm" href="#f_modeline-field-function">Function modeline-field-function</a></dt>
-              <dt>modeline-field-name, <a class="indexterm" href="#f_modeline-field-name">Function modeline-field-name</a></dt>
-              <dt>modeline-field-p, <a class="indexterm" href="#f_modeline-field-p">Function modeline-field-p</a></dt>
-              <dt>modeline-field-width, <a class="indexterm" href="#f_modeline-field-width">Function modeline-field-width</a></dt>
-              <dt>move-mark, <a class="indexterm" href="#f_move-mark">Function move-mark</a></dt>
-              <dt>move-to-absolute-position, <a class="indexterm" href="#f_move-to-absolute-position">Function move-to-absolute-position</a></dt>
-              <dt>move-to-column, <a class="indexterm" href="#f_move-to-column">Function move-to-column</a></dt>
-              <dt>move-to-position, <a class="indexterm" href="#f_move-to-position">Function move-to-position</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>N</h3>
-            <dl>
-              <dt>name-keysym, <a class="indexterm" href="#f_name-keysym">Function name-keysym</a></dt>
-              <dt>native-translated-namestring, <a class="indexterm" href="#f_native-translated-namestring">Function native-translated-namestring</a></dt>
-              <dt>new-search-pattern, <a class="indexterm" href="#f_new-search-pattern">Function new-search-pattern</a></dt>
-              <dt>next-character, <a class="indexterm" href="#f_next-character">Function next-character</a></dt>
-              <dt>ninsert-region, <a class="indexterm" href="#f_ninsert-region">Function ninsert-region</a></dt>
-              <dt>note-open-file-stream, <a class="indexterm" href="#f_note-open-file-stream">Function NOTE-OPEN-FILE-STREAM</a></dt>
-              <dt>ns-lisp-string, <a class="indexterm" href="#c_ns-lisp-string">Class CCL::NS-LISP-STRING</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>O</h3>
-            <dl>
-              <dt>objc:defmethod, <a class="indexterm" href="#m_objc-defmethod">Macro objc:defmethod</a></dt>
-              <dt>open-file-streams, <a class="indexterm" href="#f_open-file-streams">Function OPEN-FILE-STREAMS</a></dt>
-              <dt>open-shared-library, <a class="indexterm" href="#f_open-shared-library">Function OPEN-SHARED-LIBRARY</a></dt>
-              <dt>os-command, <a class="indexterm" href="#f_os-command">Function CCL::OS-COMMAND</a></dt>
-              <dt>output-timeout, <a class="indexterm" href="#Stream-Timeouts-And-Deadlines">Stream Timeouts and Deadlines</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>P</h3>
-            <dl>
-              <dt>Paragraph Delimiter Function, <a class="indexterm" href="#hv_paragraph_delimiter_function">Hemlock Variable Paragraph Delimiter Function</a></dt>
-              <dt>paragraph-offset, <a class="indexterm" href="#f_paragraph-offset">Function paragraph-offset</a></dt>
-              <dt>Parse End Function, <a class="indexterm" href="#hv_parse_end_function">Hemlock Variable Parse End Function</a></dt>
-              <dt>Parse Start Function, <a class="indexterm" href="#hv_parse_start_function">Hemlock Variable Parse Start Function</a></dt>
-              <dt>parse-for-something, <a class="indexterm" href="#f_parse-for-something">Function parse-for-something</a></dt>
-              <dt>Pathname Defaults, <a class="indexterm" href="#hv_pathname_defaults">Hemlock Variable Pathname Defaults</a></dt>
-              <dt>pathname-to-buffer-name, <a class="indexterm" href="#f_pathname-to-buffer-name">Function pathname-to-buffer-name</a></dt>
-              <dt>pop-buffer-mark, <a class="indexterm" href="#f_pop-buffer-mark">Function pop-buffer-mark</a></dt>
-              <dt>population-contents, <a class="indexterm" href="#f_population-contents">Function POPULATION-CONTENTS</a></dt>
-              <dt>population-type, <a class="indexterm" href="#f_population-type">Function POPULATION-TYPE</a></dt>
-              <dt>pre-command-parse-check, <a class="indexterm" href="#f_pre-command-parse-check">Function pre-command-parse-check</a></dt>
-              <dt>pref, <a class="indexterm" href="#m_pref">Macro PREF</a></dt>
-              <dt>prefix-argument, <a class="indexterm" href="#f_prefix-argument">Function prefix-argument</a></dt>
-              <dt>pretty-key-string, <a class="indexterm" href="#f_pretty-key-string">Function pretty-key-string</a></dt>
-              <dt>previous-character, <a class="indexterm" href="#f_previous-character">Function previous-character</a></dt>
-              <dt>process-abort, <a class="indexterm" href="#f_process-abort">Function PROCESS-ABORT</a></dt>
-              <dt>process-allow-schedule, <a class="indexterm" href="#f_process-allow-schedule">Function PROCESS-ALLOW-SCHEDULE</a></dt>
-              <dt>process-enable, <a class="indexterm" href="#f_process-enable">Function PROCESS-ENABLE</a></dt>
-              <dt>process-file-options, <a class="indexterm" href="#f_process-file-options">Function process-file-options</a></dt>
-              <dt>process-input-wait, <a class="indexterm" href="#f_process-input-wait">Function PROCESS-INPUT-WAIT</a></dt>
-              <dt>process-interrupt, <a class="indexterm" href="#f_process-interrupt">Function PROCESS-INTERRUPT</a></dt>
-              <dt>process-kill, <a class="indexterm" href="#f_process-kill">Function PROCESS-KILL</a></dt>
-              <dt>process-output-wait, <a class="indexterm" href="#f_process-output-wait">Function PROCESS-OUTPUT-WAIT</a></dt>
-              <dt>process-preset, <a class="indexterm" href="#f_process-preset">Function PROCESS-PRESET</a></dt>
-              <dt>process-reset, <a class="indexterm" href="#f_process-reset">Function PROCESS-RESET</a></dt>
-              <dt>process-reset-and-enable, <a class="indexterm" href="#f_process-reset-and-enable">Function PROCESS-RESET-AND-ENABLE</a></dt>
-              <dt>process-resume, <a class="indexterm" href="#f_process-resume">Function PROCESS-RESUME</a></dt>
-              <dt>process-run-function, <a class="indexterm" href="#f_process-run-function">Function PROCESS-RUN-FUNCTION</a></dt>
-              <dt>process-suspend, <a class="indexterm" href="#f_process-suspend">Function PROCESS-SUSPEND</a></dt>
-              <dt>process-suspend-count, <a class="indexterm" href="#f_process-suspend-count">Function PROCESS-SUSPEND-COUNT</a></dt>
-              <dt>process-wait, <a class="indexterm" href="#f_process-wait">Function PROCESS-WAIT</a></dt>
-              <dt>process-wait-with-timeout, <a class="indexterm" href="#f_process-wait-with-timeout">Function PROCESS-WAIT-WITH-TIMEOUT</a></dt>
-              <dt>process-whostate, <a class="indexterm" href="#f_process-whostate">Function PROCESS-WHOSTATE</a></dt>
-              <dt>prompt-for-buffer, <a class="indexterm" href="#f_prompt-for-buffer">Function prompt-for-buffer</a></dt>
-              <dt>prompt-for-expression, <a class="indexterm" href="#f_prompt-for-expression">Function prompt-for-expression</a></dt>
-              <dt>prompt-for-file, <a class="indexterm" href="#f_prompt-for-file">Function prompt-for-file</a></dt>
-              <dt>prompt-for-integer, <a class="indexterm" href="#f_prompt-for-integer">Function prompt-for-integer</a></dt>
-              <dt>prompt-for-key, <a class="indexterm" href="#f_prompt-for-key">Function prompt-for-key</a></dt>
-              <dt>prompt-for-key-event, <a class="indexterm" href="#f_prompt-for-key-event">Function prompt-for-key-event</a></dt>
-              <dt>prompt-for-keyword, <a class="indexterm" href="#f_prompt-for-keyword">Function prompt-for-keyword</a></dt>
-              <dt>prompt-for-string, <a class="indexterm" href="#f_prompt-for-string">Function prompt-for-string</a></dt>
-              <dt>prompt-for-variable, <a class="indexterm" href="#f_prompt-for-variable">Function prompt-for-variable</a></dt>
-              <dt>prompt-for-y-or-n, <a class="indexterm" href="#f_prompt-for-y-or-n">Function prompt-for-y-or-n</a></dt>
-              <dt>prompt-for-yes-or-no, <a class="indexterm" href="#f_prompt-for-yes-or-no">Function prompt-for-yes-or-no</a></dt>
-              <dt>push-buffer-mark, <a class="indexterm" href="#f_push-buffer-mark">Function push-buffer-mark</a></dt>
-              <dt>push-new-buffer-mark, <a class="indexterm" href="#f_push-new-buffer-mark">Function push-new-buffer-mark</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>Q</h3>
-            <dl>
-              <dt>quit, <a class="indexterm" href="#v_quit">Function QUIT</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>R</h3>
-            <dl>
-              <dt>Read File Hook, <a class="indexterm" href="#hv_read_file_hook">Hemlock Variable Read File Hook</a></dt>
-              <dt>read-buffer-file, <a class="indexterm" href="#f_read-buffer-file">Function read-buffer-file</a></dt>
-              <dt>read-coverage-from-file, <a class="indexterm" href="#f_read-coverage-from-file">Function READ-COVERAGE-FROM-FILE</a></dt>
-              <dt>read-file, <a class="indexterm" href="#f_read-file">Function read-file</a></dt>
-              <dt>receive-from, <a class="indexterm" href="#f_receive-from">Function RECEIVE-FROM</a></dt>
-              <dt>region, <a class="indexterm" href="#f_region">Function region</a></dt>
-              <dt>region-active-p, <a class="indexterm" href="#f_region-active-p">Function region-active-p</a></dt>
-              <dt>region-bounds, <a class="indexterm" href="#f_region-bounds">Function region-bounds</a></dt>
-              <dt>region-end, <a class="indexterm" href="#f_region-end">Function region-end</a></dt>
-              <dt>region-start, <a class="indexterm" href="#f_region-start">Function region-start</a></dt>
-              <dt>region-to-string, <a class="indexterm" href="#f_region-to-string">Function region-to-string</a></dt>
-              <dt>regionp, <a class="indexterm" href="#f_regionp">Function regionp</a></dt>
-              <dt>release-lock, <a class="indexterm" href="#f_release-lock">Function RELEASE-LOCK</a></dt>
-              <dt>remote-host, <a class="indexterm" href="#f_remote-host">Function REMOTE-HOST</a></dt>
-              <dt>remote-port, <a class="indexterm" href="#f_remote-port">Function REMOTE-PORT</a></dt>
-              <dt>remove-hook, <a class="indexterm" href="#m_remove-hook">Macro remove-hook</a></dt>
-              <dt>remove-open-file-stream, <a class="indexterm" href="#f_remove-open-file-stream">Function REMOVE-OPEN-FILE-STREAM</a></dt>
-              <dt>replace-pattern, <a class="indexterm" href="#f_replace-pattern">Function replace-pattern</a></dt>
-              <dt>report-coverage, <a class="indexterm" href="#f_report-coverage">Function REPORT-COVERAGE</a></dt>
-              <dt>request-terminal-input-via-break, <a class="indexterm" href="#v_request-terminal-input-via-break">Variable *REQUEST-TERMINAL-INPUT-VIA-BREAK*</a></dt>
-              <dt>reset-coverage, <a class="indexterm" href="#f_reset-coverage">Function RESET-COVERAGE</a></dt>
-              <dt>reset-incremental-coverage, <a class="indexterm" href="#f_reset-incremental-coverage">Function RESET-INCREMENTAL-COVERAGE</a></dt>
-              <dt>resolve-address, <a class="indexterm" href="#f_resolve-address">Function RESOLVE-ADDRESS</a></dt>
-              <dt>restore-coverage, <a class="indexterm" href="#f_restore-coverage">Function RESTORE-COVERAGE</a></dt>
-              <dt>restore-coverage-from-file, <a class="indexterm" href="#f_restore-coverage-from-file">Function RESTORE-COVERAGE-FROM-FILE</a></dt>
-              <dt>reverse-find-attribute, <a class="indexterm" href="#f_reverse-find-attribute">Function reverse-find-attribute</a></dt>
-              <dt>reverse-find-not-attribute, <a class="indexterm" href="#f_reverse-find-not-attribute">Function reverse-find-not-attribute</a></dt>
-              <dt>ring-length, <a class="indexterm" href="#f_ring-length">Function ring-length</a></dt>
-              <dt>ring-pop, <a class="indexterm" href="#f_ring-pop">Function ring-pop</a></dt>
-              <dt>ring-push, <a class="indexterm" href="#f_ring-push">Function ring-push</a></dt>
-              <dt>ring-ref, <a class="indexterm" href="#f_ring-ref">Function ring-ref</a></dt>
-              <dt>ringp, <a class="indexterm" href="#f_ringp">Function ringp</a></dt>
-              <dt>rlet, <a class="indexterm" href="#m_rlet">Macro RLET</a></dt>
-              <dt>rletz, <a class="indexterm" href="#m_rletz">Macro RLETZ</a></dt>
-              <dt>rotate-ring, <a class="indexterm" href="#f_rotate-ring">Function rotate-ring</a></dt>
-              <dt>run-program, <a class="indexterm" href="#f_run-program">Function RUN-PROGRAM</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>S</h3>
-            <dl>
-              <dt>same-line-p, <a class="indexterm" href="#f_same-line-p">Function same-line-p</a></dt>
-              <dt>save-application, <a class="indexterm" href="#Saving-Applications">Saving Applications</a></dt>
-              <dt>save-coverage-in-file, <a class="indexterm" href="#f_save-coverage-in-file">Function SAVE-COVERAGE-IN-FILE</a></dt>
-              <dt>search-pattern-p, <a class="indexterm" href="#f_search-pattern-p">Function search-pattern-p</a></dt>
-              <dt>send-to, <a class="indexterm" href="#f_send-to">Function SEND-TO</a></dt>
-              <dt>sentence-offset, <a class="indexterm" href="#f_sentence-offset">Function sentence-offset</a></dt>
-              <dt>set-development-environment, <a class="indexterm" href="#f_set-development-environment">Function SET-DEVELOPMENT-ENVIRONMENT</a></dt>
-              <dt>set-fpu-mode, <a class="indexterm" href="#f_set-fpu-mode">Function SET-FPU-MODE</a></dt>
-              <dt>set-lisp-heap-gc-threshold, <a class="indexterm" href="#f_set-lisp-heap-gc-threshold">Function SET-LISP-HEAP-GC-THRESHOLD</a></dt>
-              <dt>set-region-bounds, <a class="indexterm" href="#f_set-region-bounds">Function set-region-bounds</a></dt>
-              <dt>set-scroll-position, <a class="indexterm" href="#f_set-scroll-position">Function set-scroll-position</a></dt>
-              <dt>set-user-environment, <a class="indexterm" href="#f_set-user-environment">Function SET-USER-ENVIRONMENT</a></dt>
-              <dt>setenv, <a class="indexterm" href="#f_setenv">Function CCL::SETENV</a></dt>
-              <dt>setgid, <a class="indexterm" href="#f_setgid">Function CCL::SETGID</a></dt>
-              <dt>setuid, <a class="indexterm" href="#f_setuid">Function CCL::SETUID</a></dt>
-              <dt>setv, <a class="indexterm" href="#m_setv">Macro setv</a></dt>
-              <dt>Shadow Attribute Hook, <a class="indexterm" href="#hv_shadow_attribute_hook">Hemlock Variable Shadow Attribute Hook</a></dt>
-              <dt>shadow-attribute, <a class="indexterm" href="#f_shadow-attribute">Function shadow-attribute</a></dt>
-              <dt>shutdown, <a class="indexterm" href="#f_shutdown">Function SHUTDOWN</a></dt>
-              <dt>signal-external-process, <a class="indexterm" href="#f_signal-external-process">Function SIGNAL-EXTERNAL-PROCESS</a></dt>
-              <dt>signal-semaphore, <a class="indexterm" href="#f_signal-semaphore">Function SIGNAL-SEMAPHORE</a></dt>
-              <dt>socket-address, <a class="indexterm" href="#c_socket-address">Class SOCKET-ADDRESS</a></dt>
-              <dt>socket-address-family, <a class="indexterm" href="#f_socket-address-family">Function SOCKET-ADDRESS-FAMILY</a></dt>
-              <dt>socket-address-host, <a class="indexterm" href="#f_socket-address-host">Function SOCKET-ADDRESS-HOST</a></dt>
-              <dt>socket-address-port, <a class="indexterm" href="#f_socket-address-port">Function SOCKET-ADDRESS-PORT</a></dt>
-              <dt>socket-connect, <a class="indexterm" href="#f_socket-connect">Function SOCKET-CONNECT</a></dt>
-              <dt>socket-error, <a class="indexterm" href="#c_socket-error">Class SOCKET-ERROR</a></dt>
-              <dt>socket-error-code, <a class="indexterm" href="#f_socket-error-code">Function SOCKET-ERROR-CODE</a></dt>
-              <dt>socket-error-identifier, <a class="indexterm" href="#f_socket-error-identifier">Function SOCKET-ERROR-IDENTIFIER</a></dt>
-              <dt>socket-error-situation, <a class="indexterm" href="#f_socket-error-situation">Function SOCKET-ERROR-SITUATION</a></dt>
-              <dt>socket-format, <a class="indexterm" href="#f_socket-format">Function SOCKET-FORMAT</a></dt>
-              <dt>socket-os-fd, <a class="indexterm" href="#f_socket-os-fd">Function SOCKET-OS-FD</a></dt>
-              <dt>socket-type, <a class="indexterm" href="#f_socket-type">Function SOCKET-TYPE</a></dt>
-              <dt>Spaces per Tab, <a class="indexterm" href="#hv_spaces_per_tab">Hemlock Variable Spaces per Tab</a></dt>
-              <dt>start-defun-p, <a class="indexterm" href="#f_start-defun-p">Function start-defun-p</a></dt>
-              <dt>start-line-p, <a class="indexterm" href="#f_start-line-p">Function start-line-p</a></dt>
-              <dt>stream-deadline, <a class="indexterm" href="#Stream-Timeouts-And-Deadlines">Stream Timeouts and Deadlines</a></dt>
-              <dt>stream-device, <a class="indexterm" href="#f_stream-device">Generic Function CCL::STREAM-DEVICE</a></dt>
-              <dt>stream-input-timeout, <a class="indexterm" href="#Stream-Timeouts-And-Deadlines">Stream Timeouts and Deadlines</a></dt>
-              <dt>stream-output-timeout, <a class="indexterm" href="#Stream-Timeouts-And-Deadlines">Stream Timeouts and Deadlines</a></dt>
-              <dt>stream-read-ivector, <a class="indexterm" href="#f_stream-read-ivector">Generic Function STREAM-READ-IVECTOR</a></dt>
-              <dt>stream-read-list, <a class="indexterm" href="#f_stream-read-list">Generic Function CCL:STREAM-READ-LIST</a></dt>
-              <dt>stream-read-vector, <a class="indexterm" href="#f_stream-read-vector">Generic Function CCL:STREAM-READ-VECTOR</a></dt>
-              <dt>stream-write-ivector, <a class="indexterm" href="#f_stream-write-ivector">Generic Function STREAM-WRITE-IVECTOR</a></dt>
-              <dt>stream-write-list, <a class="indexterm" href="#f_stream-write-list">Generic Function CCL:STREAM-WRITE-LIST</a></dt>
-              <dt>stream-write-vector, <a class="indexterm" href="#f_stream-write-vector">Generic Function CCL:STREAM-WRITE-VECTOR</a></dt>
-              <dt>string-size-in-octets, <a class="indexterm" href="#string-size-in-octets">Function string-size-in-octets</a></dt>
-              <dt>string-table-p, <a class="indexterm" href="#f_string-table-p">Function string-table-p</a></dt>
-              <dt>string-table-separator, <a class="indexterm" href="#f_string-table-separator">Function string-table-separator</a></dt>
-              <dt>string-to-region, <a class="indexterm" href="#f_string-to-region">Function string-to-region</a></dt>
-              <dt>string-to-variable, <a class="indexterm" href="#f_string-to-variable">Function string-to-variable</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>T</h3>
-            <dl>
-              <dt>terminate-when-unreachable, <a class="indexterm" href="#f_terminate-when-unreachable">Function TERMINATE-WHEN-UNREACHABLE</a></dt>
-              <dt>timed-wait-on-semaphore, <a class="indexterm" href="#f_timed-wait-on-semaphore">Function TIMED-WAIT-ON-SEMAPHORE</a></dt>
-              <dt>top-level-offset, <a class="indexterm" href="#f_top-level-offset">Function top-level-offset</a></dt>
-              <dt>try-lock, <a class="indexterm" href="#f_try-lock">Function TRY-LOCK</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>U</h3>
-            <dl>
-              <dt>unadvise, <a class="indexterm" href="#m_unadvise">Macro UNADVISE</a></dt>
-              <dt>Unshadow Attribute Hook, <a class="indexterm" href="#hv_unshadow_attribute_hook">Hemlock Variable Unshadow Attribute Hook</a></dt>
-              <dt>unshadow-attribute, <a class="indexterm" href="#f_unshadow-attribute">Function unshadow-attribute</a></dt>
-              <dt>unuse-interface-dir, <a class="indexterm" href="#f_unuse-interface-dir">Function UNUSE-INTERFACE-DIR</a></dt>
-              <dt>unwatch, <a class="indexterm" href="#f_unwatch">Function UNWATCH</a></dt>
-              <dt>unwind-protect, <a class="indexterm" href="#v_unwind-protect">Special operator UNWIND-PROTECT</a></dt>
-              <dt>update-modeline-fields, <a class="indexterm" href="#f_update-modeline-fields">Function update-modeline-fields</a></dt>
-              <dt>use-interface-dir, <a class="indexterm" href="#f_use-interface-dir">Function USE-INTERFACE-DIR</a></dt>
-              <dt>use-lisp-heap-gc-threshold, <a class="indexterm" href="#f_use-lisp-heap-gc-threshold">Function USE-LISP-HEAP-GC-THRESHOLD</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>V</h3>
-            <dl>
-              <dt>valid-spot, <a class="indexterm" href="#f_valid-spot">Function valid-spot</a></dt>
-              <dt>value, <a class="indexterm" href="#m_value">Macro value</a></dt>
-              <dt>variable-documentation, <a class="indexterm" href="#f_variable-documentation">Function variable-documentation</a></dt>
-              <dt>variable-hooks, <a class="indexterm" href="#f_variable-hooks">Function variable-hooks</a></dt>
-              <dt>variable-name, <a class="indexterm" href="#f_variable-name">Function variable-name</a></dt>
-              <dt>variable-value, <a class="indexterm" href="#f_variable-value">Function variable-value</a></dt>
-            </dl>
-          </div>
-          <div class="indexdiv">
-            <h3>W</h3>
-            <dl>
-              <dt>wait-for-signal, <a class="indexterm" href="#v_wait-for-signal">Function WAIT-FOR-SIGNAL</a></dt>
-              <dt>wait-on-semaphore, <a class="indexterm" href="#f_wait-on-semaphore">Function WAIT-ON-SEMAPHORE</a></dt>
-              <dt>watch, <a class="indexterm" href="#f_watch">Function WATCH</a></dt>
-              <dt>with-altivec-registers, <a class="indexterm" href="#lapm_with-altivec-registers">LAP Macro WITH-ALTIVEC-REGISTERS</a></dt>
-              <dt>with-filename-cstrs, <a class="indexterm" href="#m_with-filename-cstrs">Macro with-filename-cstrs</a></dt>
-              <dt>with-input-from-region, <a class="indexterm" href="#m_with-input-from-region">Macro with-input-from-region</a></dt>
-              <dt>with-interrupts-enabled, <a class="indexterm" href="#m_with-interrupts-enabled">Macro WITH-INTERRUPTS-ENABLED</a></dt>
-              <dt>with-lock-grabbed, <a class="indexterm" href="#m_with-lock-grabbed">Macro WITH-LOCK-GRABBED</a></dt>
-              <dt>with-mark, <a class="indexterm" href="#m_with-mark">Macro with-mark</a></dt>
-              <dt>with-open-socket, <a class="indexterm" href="#m_with-open-socket">Macro WITH-OPEN-SOCKET</a></dt>
-              <dt>with-output-to-mark, <a class="indexterm" href="#m_with-output-to-mark">Macro with-output-to-mark</a></dt>
-              <dt>with-pop-up-display, <a class="indexterm" href="#m_with-pop-up-display">Macro with-pop-up-display</a></dt>
-              <dt>with-read-lock, <a class="indexterm" href="#m_with-read-lock">Macro WITH-READ-LOCK</a></dt>
-              <dt>with-terminal-input, <a class="indexterm" href="#m_with-terminal-input">Macro WITH-TERMINAL-INPUT</a></dt>
-              <dt>with-vector-buffer, <a class="indexterm" href="#lapm_with-vector-buffer">LAP Macro WITH-VECTOR-BUFFER</a></dt>
-              <dt>with-writable-buffer, <a class="indexterm" href="#m_with-writable-buffer">Macro with-writable-buffer</a></dt>
-              <dt>with-write-lock, <a class="indexterm" href="#m_with-write-lock">Macro WITH-WRITE-LOCK</a></dt>
-              <dt>without-compiling-code-coverage, <a class="indexterm" href="#v_without-compiling-code-coverage">Macro WITHOUT-COMPILING-CODE-COVERAGE</a></dt>
-              <dt>without-interrupts, <a class="indexterm" href="#m_without-interrupts">Macro WITHOUT-INTERRUPTS</a></dt>
-              <dt>word-offset, <a class="indexterm" href="#f_word-offset">Function word-offset</a></dt>
-              <dt>Write File Hook, <a class="indexterm" href="#hv_write_file_hook">Hemlock Variable Write File Hook</a></dt>
-              <dt>write-buffer-file, <a class="indexterm" href="#f_write-buffer-file">Function write-buffer-file</a></dt>
-              <dt>write-coverage-to-file, <a class="indexterm" href="#f_write-coverage-to-file">Function WRITE-COVERAGE-TO-FILE</a></dt>
-              <dt>write-file, <a class="indexterm" href="#f_write-file">Function write-file</a></dt>
-              <dt>write-to-watched-object, <a class="indexterm" href="#c_write-to-watched-object">Condition WRITE-TO-WATCHED-OBJECT</a></dt>
-            </dl>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div xmlns="http://www.w3.org/TR/xhtml1/transitional" align="center">
-      <a href="#Symbol-Index">Symbol Index</a>
-    </div>
-    <p xmlns="http://www.w3.org/TR/xhtml1/transitional" xmlns:date="http://exslt.org/dates-and-times" class="footer">This document was last modified at 14:34 on October 1, 2014, in UTC.<br></br>It uses version 1.76.1 of the Norman Walsh Docbook stylesheets.<br></br>Built from subversion rev 16272<br></br>Using libxml 20708, libxslt 10126 and libexslt 815.</p>
-  </body>
-</html>
Index: unk/source/doc/doc-splitter.lisp
===================================================================
--- /trunk/source/doc/doc-splitter.lisp	(revision 16308)
+++ 	(revision )
@@ -1,416 +1,0 @@
-;;; Copyright (c) 2008 Clozure Associates.  All Rights Reserved.
-
-;;;
-;;; (doc-splitter:split-doc-file "ccl:doc;ccl-documentation.html" "ccl:doc;manual;")
-;;;
-
-(eval-when (eval compile load)
-  (defpackage doc-splitter
-    (:use common-lisp ccl)
-    (:export #:split-doc-file)))
-
-(in-package doc-splitter)
-
-(defparameter *output-template*
-  "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>
-<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
-<html xmlns=\"http://www.w3.org/1999/xhtml\">
-  <head>
-    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />
-    <title>Clozure CL Documentation</title>
-  </head>
-  <body>
-
-<table width=\"100%\" cellspacing=\"1\" cellpadding=\"1\" border=\"1\">
-<tr><td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"20%\">((PREVIOUS))</td>
-    <td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"20%\">((NEXT))</td>
-    <td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"0%\"></td>
-    <td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"20%\">((HOME))</td>
-    <td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"20%\">((GLOSSARY))</td>
-    <td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"20%\">((INDEX))</td>
-</tr></table>
-<hr>
- ((BODY))
-<hr>
-<table width=\"100%\" cellspacing=\"1\" cellpadding=\"1\" border=\"1\">
-<tr><td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"20%\">((PREVIOUS))</td>
-    <td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"20%\">((NEXT))</td>
-    <td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"0%\"></td>
-    <td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"20%\">((HOME))</td>
-    <td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"20%\">((GLOSSARY))</td>
-    <td align=\"center\" bgcolor=\"((BGCOLOR))\" width=\"20%\">((INDEX))</td>
-</tr></table>
-</body>
-")
-
-(defparameter *links-bgcolor* "lightgray")
-
-(defparameter *link-names* '((:previous . "Previous")
-                             (:next . "Next")
-                             (:up . "Up")
-                             (:home . "Table of Contents")
-                             (:glossary . "Glossary")
-                             (:index . "Index")))
-
-(defun output-split-doc-header-link (stream sf link)
-  (let ((name (cdr (assq link *link-names*))))
-    (if sf
-      (format stream "<a href=\"~a\"><b>~a~@[ ~a~]</b></a>"
-              (split-file-name sf)
-              name
-              (and (memq link '(:previous :next))
-                   (if (eq (split-file-type sf) :sect1) "Section" "Chapter")))
-      (format stream "~:(~a~)" name))))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defstruct node
-  start
-  end)
-
-;; Text node
-(defstruct (tnode (:include node))
-  )
-
-;; Compound node
-(defstruct (cnode (:include node))
-  tag
-  tag-end
-  children)
-
-(defmethod print-object ((node cnode) stream)
-  (print-unreadable-object (node stream :type t) 
-    (format stream "~s ~s:~s:~s~a"
-	    (cnode-tag node) (cnode-start node) (cnode-tag-end node) (cnode-end node)
-	    (cond ((null (cnode-children node)) "")
-		  ((null (cdr (cnode-children node))) " 1 child")
-		  (t (format nil " ~s children" (length (cnode-children node))))))))
-
-(defun node-tag (node)
-  (and (cnode-p node) (cnode-tag node)))
-
-;; Toplevel node
-(defstruct html
-  string
-  node)
-
-(defmethod print-object ((node html) stream)
-  (print-unreadable-object (node stream :type t)
-    (let ((*print-string-length* 400))
-      (format stream ":STRING ~s :NODE ~s" (html-string node) (html-node node)))))
-
-(defstruct split-file
-  type
-  name
-  up
-  nodes)
-
-(defvar *cur-html* nil)
-
-(defun split-doc-file (html directory)
-  (unless (html-p html)
-    (setq html (read-html-file html)))
-  (ensure-directories-exist directory)
-  (let* ((*cur-html* html)
-         (splits (doc-file-splits html))
-         (id-table (make-hash-table :test #'equal))
-         (top (find :book splits :key #'split-file-type))
-         (glossary (find :glossary splits :key #'split-file-type))
-         (index (find :symbol-index splits :key #'split-file-type)))
-    (loop for sf in splits as name = (split-file-name sf)
-      do (loop for node in (split-file-nodes sf)
-           do (doc-file-register-ids node name id-table)))
-    (loop
-      for prev = nil then sf
-      for prev-chap = nil then (if (eq (split-file-type sf) :sect1) prev-chap sf)
-      for sfs on splits
-      for sf = (car sfs)
-      do (with-open-file (stream (merge-pathnames (split-file-name sf) directory)
-                                 :direction :output
-                                 :if-exists :supersede)
-           (output-split-doc-file sf stream id-table
-                                  :previous (if (eq (split-file-type sf) :sect1) prev prev-chap)
-                                  :next (if (eq (split-file-type sf) :sect1)
-                                          (cadr sfs)
-                                          (find :sect1 (cdr sfs) :key #'split-file-type :test #'neq))
-                                  :top top
-                                  :glossary glossary
-                                  :index index)))))
-
-(defun output-split-doc-file (sf stream id-table &key previous next top glossary index)
-  (loop with template = *output-template*
-    for start = 0 then (+ epos 2)
-    as bpos = (search "((" template :start2 start) while bpos
-    as epos = (search "))" template :start2 bpos)
-    do (write-string template stream :start start :end bpos)
-    do (ecase (intern (subseq template (+ bpos 2) epos) :keyword)
-         (:previous
-          (output-split-doc-header-link stream previous :previous))
-         (:next
-          (output-split-doc-header-link stream next :next))
-         (:home
-          (output-split-doc-header-link stream top :home))
-         (:glossary
-          (output-split-doc-header-link stream glossary :glossary))
-         (:index
-          (output-split-doc-header-link stream index :index))
-         (:bgcolor
-          (write-string *links-bgcolor* stream))
-         (:body
-          (output-split-doc-file-body stream sf id-table)))
-    finally (write-string template stream :start start)))
-
-;; (setq *print-string-length* 400 *print-length* 100 *print-level* 50)
-(defun read-html-file (pathname)
-  (with-open-file (stream pathname)
-    (let ((str (make-string (file-length stream))))
-      (read-sequence str stream)
-      (make-html :string str
-                 :node (read-html-form str (search "<html" str :test #'char-equal) (length str))))))
-
-
-(defun output-split-doc-file-body (stream sf id-table)
-  (let* ((up (split-file-up sf))
-         (up-title (and up (split-file-title up))))
-    (when up-title
-      (format stream "<a href=\"~a\">~a</a>" (split-file-name up) up-title)))
-  (loop with string = (html-string *cur-html*)
-    for node in (split-file-nodes sf)
-    do (let ((hrefs (doc-file-collect-hrefs node id-table)))
-         (setq hrefs (sort hrefs #'< :key #'car))
-         (assert (or (null hrefs) (<= (node-start node) (caar hrefs))))
-         (loop as start = (node-start node) then pos
-           for (pos . name) in hrefs
-           do (write-string string stream :start start :end pos)
-           do (write-string name stream)
-           finally (write-string string stream :start start :end (node-end node)))
-         (fresh-line stream))))
-
-(defun doc-file-register-ids (node name hash)
-  (when (cnode-p node)
-    (let ((id (and (eq (cnode-tag node) :a)
-                   (cnode-attribute-value node :id))))
-      (when id
-        (let ((old (gethash id hash)))
-          (when old
-            (warn "~s already registered in file ~s" id old)))
-        (setf (gethash id hash) name)))
-    (loop for subnode in (cnode-children node)
-      do (doc-file-register-ids subnode name hash))))
-
-(defun doc-file-collect-hrefs (node hash)
-  (when (cnode-p node)
-    (let* ((hrefs (loop for subnode in (cnode-children node)
-                    nconc (doc-file-collect-hrefs subnode hash)))
-           (href (and (eq (cnode-tag node) :a)
-                      (cnode-attribute-value node :href))))
-      (when (and href (eql 0 (position #\# href)))
-        (let ((name (gethash (subseq href 1) hash)))
-          (unless name
-             (warn "Couldn't find the split file id for href ~s" href))
-          (when name
-            (let ((pos (search (format nil "href=~s" href) (html-string *cur-html*)
-                               :start2 (cnode-start node) :end2 (cnode-tag-end node))))
-              (assert pos)
-              (push (cons (+ pos 6) name) hrefs)))))
-      hrefs)))
-
-(defparameter *times* 0)
-(defun split-file-title (sf)
-  (labels ((title (node)
-             (when (cnode-p node)
-               (if (and (eq (cnode-tag node) :h2)
-                        (equal (cnode-attribute-value node :class) "title"))
-                 (labels ((text (node)
-                            (if (tnode-p node)
-                              (subseq (html-string *cur-html*) (node-start node) (node-end node))
-                              (apply #'concatenate 'string
-                                     (loop for sub in (cnode-children node) collect (text sub))))))
-                   (text node))
-                 (loop for sub in (cnode-children node) thereis (title sub))))))
-    (loop for node in (split-file-nodes sf) thereis (title node))))
-
-(defun doc-file-splits (html)
-  (let* ((*cur-html* html)
-         (node (html-node html)))
-    (assert (eq (node-tag node) :html))
-    (setq node (find :body (cnode-children node) :key #'node-tag))
-    (assert node)
-    (setq node (find :div (cnode-children node) :key #'node-tag))
-    (assert node)
-    (assert (equal (cnode-attribute-value node :class) "book"))
-    (loop with nchapters = 0
-      for subnode in (cnode-children node)
-      as class = (and (eq (node-tag subnode) :div) (cnode-attribute-value subnode :class))
-      if (member class '("chapter" "glossary" "index") :test #'equal)
-      nconc (doc-file-chapter-splits subnode (incf nchapters)) into sections
-      else collect subnode into nodes
-      finally (let ((sf (make-split-file :name "index.html" :type :book :nodes nodes)))
-                (loop for sub in sections
-                  unless (eq (split-file-type sub) :sect1) do (setf (split-file-up sub) sf))
-                (return (cons sf sections))))))
-
-(defun doc-file-chapter-splits (node num)
-  (let* ((class (and (eq (node-tag node) :div) (cnode-attribute-value node :class))))
-    (cond ((equal class "chapter")
-           (loop with nsect = 0
-             for subnode in (cnode-children node)
-             as class = (and (eq (node-tag subnode) :div) (cnode-attribute-value subnode :class))
-             if (equal class "sect1")
-             collect (make-split-file :name (format nil "chapter~d.~d.html" num (incf nsect))
-                                      :type :sect1 :nodes (list subnode)) into sections
-             else collect subnode into nodes
-             finally (let ((sf (make-split-file :name (format nil "chapter~d.html" num)
-                                                    :type :chapter :nodes nodes)))
-                       (loop for sub in sections do (setf (split-file-up sub) sf))
-                       (return (cons sf sections)))))
-          ((equal class "glossary")
-           (list (make-split-file :name "glossary.html" :type :glossary :nodes (list node))))
-          ((equal class "index")
-           (list (make-split-file :name "symbol-index.html" :type :symbol-index :nodes (list node))))
-          (t (error "expected a chapter, glossary or index: ~s" class)))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; Returns NIL for </tag> case.
-(defun read-html-tag (str s e &aux (s1 (1+ s)))
-  (and (< s e)
-       (eq (char str s) #\<)
-       (let* ((te (or (position-if #'(lambda (ch) (or (whitespacep ch)
-                                                      (char= ch #\>)
-                                                      (char= ch #\/)))
-                                   str :start s1 :end e)
-                      e)))
-	 (and (< s1 te)
-	      (intern (nstring-upcase (subseq str s1 te)) ccl::*keyword-package*)))))
-
-;; Returns NIL if at end of buffer or if looking at "</..."
-(defun read-html-form (str s e &optional (tag (read-html-tag str s e)))
-  (cond (tag
-	 (let* ((te (1+ (position-ignoring-strings #\> str s e)))
-		(node (make-cnode :tag tag
-				  :start s
-				  :tag-end te
-				  :end e
-				  :children nil)))
-	   (if (eq (char str (- te 2)) #\/)
-	     (setf (node-end node) te)
-	     (read-html-children-into-cnode str node))
-	   node))
-	((>= s e) NIL)
-	((eq (char str s) #\<)
-	 (assert (and (< (1+ s) e) (eq (char str (1+ s)) #\/)))
-	 NIL)
-	(t (make-tnode :start s :end (or (position #\< str :start s :end e) e)))))
-
-(defun position-ignoring-strings (ch str start end)
-  (let* ((p (position ch str :start start :end end)))
-    (and p
-	 (let ((q (position #\" str :start start :end p)))
-	   (if (null q)
-	     p
-	     (let ((qe (position #\" str :start (1+ q) :end end)))
-	       (and qe
-		    (position-ignoring-strings ch str (1+ qe) end))))))))
-
-(defun read-html-children-into-cnode (str node)
-  ;; This is entered with node-end = end of region, and it updates both
-  ;; cnode-children and node-end.  Eats up the ending tag if it matches
-  ;; the node tag, otherwise leaves it to be re-read.
-  (let* ((s (cnode-tag-end node))
-	 (e (cnode-end node)))
-    (loop
-      (assert (< s e) () "Unended tag ~S" (subseq str (cnode-start node) e))
-      (when (string= "</" str :start2 s :end2 (min (+ s 2) e))
-	(let* ((te (1+ (position #\> str :start s :end e))))
-	  (setf (cnode-end node)
-		(if (string-equal str (symbol-name (cnode-tag node))
-				   :start1 (+ s 2) :end1 (1- te))
-		  te s))
-	  (return)))
-      (let* ((ntag (read-html-tag str s e))
-             (child (read-html-form str s e ntag)))
-        (setq s (node-end child))
-        (push child (cnode-children node))))
-    (setf (cnode-children node) (nreverse (cnode-children node)))))
-
-(defun cnode-attributes (node &optional string-or-html &aux string)
-  (setq string-or-html (or string-or-html *cur-html*))
-  (setq string (if (html-p string-or-html) (html-string string-or-html) string-or-html))
-  (multiple-value-bind (start end)
-      (let* ((start (1+ (node-start node)))
-             (end (cnode-tag-end node))
-             (word-end (position-if #'(lambda (ch) (or (whitespacep ch)
-                                                       (char= ch #\>)
-                                                       (char= ch #\/)))
-                                    string :start start :end end)))
-        (assert word-end)
-        (values word-end (1- end)))
-    (flet ((next-token (type)
-             (when (setq start (position-if-not #'whitespacep string :start start :end end))
-               (let ((ch (char string start)))
-                 (incf start)
-                 (case ch
-                   ((#\" #\')
-                    (assert (eq type :value))
-                    (let ((tend (position ch string :start start :end end)))
-                      (prog1
-                          (subseq string start tend)
-                        (setq start (1+ tend)))))
-                   ((#\=)
-                    (assert (eq type :separator))
-                    t)
-                   ((nil)
-                    (assert (or (eq type :attribute) (eq type :separator)))
-                    nil)
-                   (t
-                    (assert (or (eq type :value) (eq type :attribute)))
-                    (let ((tend (or (position-if #'(lambda (ch) (or (whitespacep ch) (eql ch #\=)))
-                                                 string :start start :end end) end)))
-                      (prog1
-                          (subseq string (1- start) tend)
-                        (setq start tend)))))))))
-      (loop
-        as attribute = (next-token :attribute) while attribute
-        collect (cons (intern (string-upcase attribute) :keyword)
-                      (if (next-token :separator) (next-token :value) t))))))
-
-(defun cnode-attribute-value (node attribute &optional string-or-html)
-  (cdr (assoc attribute (cnode-attributes node string-or-html) :test #'eq)))
-
-#+debugging
-(defun debug-print-html (str node &key (stream t) (depth nil))
-  (when (html-p str) (setq str (html-string str)))
-  (if (null stream)
-    (with-output-to-string (s) (debug-print-html str node :stream s :depth depth))
-    (labels ((print (node cur-depth)
-               (etypecase node
-                 (tnode (format stream "~A" (subseq str (node-start node) (node-end node))))
-                 (cnode (format stream "~A" (subseq str (node-start node) (cnode-tag-end node)))
-                        (if (or (null depth) (< cur-depth depth))
-                          (dolist (child (cnode-children node))
-                            (print child (1+ cur-depth)))
-                          (format stream "..."))
-                        (format stream "</~A>" (node-tag node))))))
-      (print node 0))))
-
-#+debugging
-(defun debug-outline-html (str node &key (stream t) (depth nil))
-  (if (null stream)
-    (with-output-to-string (s) (debug-outline-html str node s depth))
-    (labels ((outline (node cur-depth idx)
-               (etypecase node
-                 (tnode (unless (loop for i from (node-start node) below (node-end node)
-                                  always (whitespacep (char str i)))
-                          (if idx (format stream "[~a]..." idx) (format stream "..."))))
-                 (cnode (fresh-line stream)
-                        (if idx (format stream "~&[~a]" idx) (format stream "~&"))
-                        (dotimes (i cur-depth) (write-char #\Space stream))
-                        (format stream "<~A ~:a>" (cnode-tag node) (cnode-attributes node str))
-                        (when (or (null depth) (< cur-depth depth))
-                          (loop for i upfrom 0 as child in  (cnode-children node)
-                            do (outline child (1+ cur-depth) (if idx (format nil "~a.~d" idx i)
-                                                               (format nil "~d" i)))))
-                        (format stream "</~A>" (node-tag node))))))
-      (outline node 0 nil))))
