Merge r21-4-11-chise-0_20-=ucs.
[chise/xemacs-chise.git-] / info / lispref.info-8
diff --git a/info/lispref.info-8 b/info/lispref.info-8
deleted file mode 100644 (file)
index 379f384..0000000
+++ /dev/null
@@ -1,1267 +0,0 @@
-This is Info file ../../info/lispref.info, produced by Makeinfo version
-1.68 from the input file lispref.texi.
-
-INFO-DIR-SECTION XEmacs Editor
-START-INFO-DIR-ENTRY
-* Lispref: (lispref).          XEmacs Lisp Reference Manual.
-END-INFO-DIR-ENTRY
-
-   Edition History:
-
-   GNU Emacs Lisp Reference Manual Second Edition (v2.01), May 1993 GNU
-Emacs Lisp Reference Manual Further Revised (v2.02), August 1993 Lucid
-Emacs Lisp Reference Manual (for 19.10) First Edition, March 1994
-XEmacs Lisp Programmer's Manual (for 19.12) Second Edition, April 1995
-GNU Emacs Lisp Reference Manual v2.4, June 1995 XEmacs Lisp
-Programmer's Manual (for 19.13) Third Edition, July 1995 XEmacs Lisp
-Reference Manual (for 19.14 and 20.0) v3.1, March 1996 XEmacs Lisp
-Reference Manual (for 19.15 and 20.1, 20.2, 20.3) v3.2, April, May,
-November 1997 XEmacs Lisp Reference Manual (for 21.0) v3.3, April 1998
-
-   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995 Free Software
-Foundation, Inc.  Copyright (C) 1994, 1995 Sun Microsystems, Inc.
-Copyright (C) 1995, 1996 Ben Wing.
-
-   Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-   Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-   Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Foundation.
-
-   Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
-   Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public License"
-may be included in a translation approved by the Free Software
-Foundation instead of in the original English.
-
-\1f
-File: lispref.info,  Node: Symbol Forms,  Next: Classifying Lists,  Prev: Self-Evaluating Forms,  Up: Forms
-
-Symbol Forms
-------------
-
-   When a symbol is evaluated, it is treated as a variable.  The result
-is the variable's value, if it has one.  If it has none (if its value
-cell is void), an error is signaled.  For more information on the use of
-variables, see *Note Variables::.
-
-   In the following example, we set the value of a symbol with `setq'.
-Then we evaluate the symbol, and get back the value that `setq' stored.
-
-     (setq a 123)
-          => 123
-     (eval 'a)
-          => 123
-     a
-          => 123
-
-   The symbols `nil' and `t' are treated specially, so that the value
-of `nil' is always `nil', and the value of `t' is always `t'; you
-cannot set or bind them to any other values.  Thus, these two symbols
-act like self-evaluating forms, even though `eval' treats them like any
-other symbol.
-
-\1f
-File: lispref.info,  Node: Classifying Lists,  Next: Function Indirection,  Prev: Symbol Forms,  Up: Forms
-
-Classification of List Forms
-----------------------------
-
-   A form that is a nonempty list is either a function call, a macro
-call, or a special form, according to its first element.  These three
-kinds of forms are evaluated in different ways, described below.  The
-remaining list elements constitute the "arguments" for the function,
-macro, or special form.
-
-   The first step in evaluating a nonempty list is to examine its first
-element.  This element alone determines what kind of form the list is
-and how the rest of the list is to be processed.  The first element is
-*not* evaluated, as it would be in some Lisp dialects such as Scheme.
-
-\1f
-File: lispref.info,  Node: Function Indirection,  Next: Function Forms,  Prev: Classifying Lists,  Up: Forms
-
-Symbol Function Indirection
----------------------------
-
-   If the first element of the list is a symbol then evaluation examines
-the symbol's function cell, and uses its contents instead of the
-original symbol.  If the contents are another symbol, this process,
-called "symbol function indirection", is repeated until it obtains a
-non-symbol.  *Note Function Names::, for more information about using a
-symbol as a name for a function stored in the function cell of the
-symbol.
-
-   One possible consequence of this process is an infinite loop, in the
-event that a symbol's function cell refers to the same symbol.  Or a
-symbol may have a void function cell, in which case the subroutine
-`symbol-function' signals a `void-function' error.  But if neither of
-these things happens, we eventually obtain a non-symbol, which ought to
-be a function or other suitable object.
-
-   More precisely, we should now have a Lisp function (a lambda
-expression), a byte-code function, a primitive function, a Lisp macro, a
-special form, or an autoload object.  Each of these types is a case
-described in one of the following sections.  If the object is not one of
-these types, the error `invalid-function' is signaled.
-
-   The following example illustrates the symbol indirection process.  We
-use `fset' to set the function cell of a symbol and `symbol-function'
-to get the function cell contents (*note Function Cells::.).
-Specifically, we store the symbol `car' into the function cell of
-`first', and the symbol `first' into the function cell of `erste'.
-
-     ;; Build this function cell linkage:
-     ;;   -------------       -----        -------        -------
-     ;;  | #<subr car> | <-- | car |  <-- | first |  <-- | erste |
-     ;;   -------------       -----        -------        -------
-
-     (symbol-function 'car)
-          => #<subr car>
-
-     (fset 'first 'car)
-          => car
-
-     (fset 'erste 'first)
-          => first
-
-     (erste '(1 2 3))   ; Call the function referenced by `erste'.
-          => 1
-
-   By contrast, the following example calls a function without any
-symbol function indirection, because the first element is an anonymous
-Lisp function, not a symbol.
-
-     ((lambda (arg) (erste arg))
-      '(1 2 3))
-          => 1
-
-Executing the function itself evaluates its body; this does involve
-symbol function indirection when calling `erste'.
-
-   The built-in function `indirect-function' provides an easy way to
-perform symbol function indirection explicitly.
-
- - Function: indirect-function FUNCTION
-     This function returns the meaning of FUNCTION as a function.  If
-     FUNCTION is a symbol, then it finds FUNCTION's function definition
-     and starts over with that value.  If FUNCTION is not a symbol,
-     then it returns FUNCTION itself.
-
-     Here is how you could define `indirect-function' in Lisp:
-
-          (defun indirect-function (function)
-            (if (symbolp function)
-                (indirect-function (symbol-function function))
-              function))
-
-\1f
-File: lispref.info,  Node: Function Forms,  Next: Macro Forms,  Prev: Function Indirection,  Up: Forms
-
-Evaluation of Function Forms
-----------------------------
-
-   If the first element of a list being evaluated is a Lisp function
-object, byte-code object or primitive function object, then that list is
-a "function call".  For example, here is a call to the function `+':
-
-     (+ 1 x)
-
-   The first step in evaluating a function call is to evaluate the
-remaining elements of the list from left to right.  The results are the
-actual argument values, one value for each list element.  The next step
-is to call the function with this list of arguments, effectively using
-the function `apply' (*note Calling Functions::.).  If the function is
-written in Lisp, the arguments are used to bind the argument variables
-of the function (*note Lambda Expressions::.); then the forms in the
-function body are evaluated in order, and the value of the last body
-form becomes the value of the function call.
-
-\1f
-File: lispref.info,  Node: Macro Forms,  Next: Special Forms,  Prev: Function Forms,  Up: Forms
-
-Lisp Macro Evaluation
----------------------
-
-   If the first element of a list being evaluated is a macro object,
-then the list is a "macro call".  When a macro call is evaluated, the
-elements of the rest of the list are *not* initially evaluated.
-Instead, these elements themselves are used as the arguments of the
-macro.  The macro definition computes a replacement form, called the
-"expansion" of the macro, to be evaluated in place of the original
-form.  The expansion may be any sort of form: a self-evaluating
-constant, a symbol, or a list.  If the expansion is itself a macro call,
-this process of expansion repeats until some other sort of form results.
-
-   Ordinary evaluation of a macro call finishes by evaluating the
-expansion.  However, the macro expansion is not necessarily evaluated
-right away, or at all, because other programs also expand macro calls,
-and they may or may not evaluate the expansions.
-
-   Normally, the argument expressions are not evaluated as part of
-computing the macro expansion, but instead appear as part of the
-expansion, so they are computed when the expansion is computed.
-
-   For example, given a macro defined as follows:
-
-     (defmacro cadr (x)
-       (list 'car (list 'cdr x)))
-
-an expression such as `(cadr (assq 'handler list))' is a macro call,
-and its expansion is:
-
-     (car (cdr (assq 'handler list)))
-
-Note that the argument `(assq 'handler list)' appears in the expansion.
-
-   *Note Macros::, for a complete description of XEmacs Lisp macros.
-
-\1f
-File: lispref.info,  Node: Special Forms,  Next: Autoloading,  Prev: Macro Forms,  Up: Forms
-
-Special Forms
--------------
-
-   A "special form" is a primitive function specially marked so that
-its arguments are not all evaluated.  Most special forms define control
-structures or perform variable bindings--things which functions cannot
-do.
-
-   Each special form has its own rules for which arguments are evaluated
-and which are used without evaluation.  Whether a particular argument is
-evaluated may depend on the results of evaluating other arguments.
-
-   Here is a list, in alphabetical order, of all of the special forms in
-XEmacs Lisp with a reference to where each is described.
-
-`and'
-     *note Combining Conditions::.
-
-`catch'
-     *note Catch and Throw::.
-
-`cond'
-     *note Conditionals::.
-
-`condition-case'
-     *note Handling Errors::.
-
-`defconst'
-     *note Defining Variables::.
-
-`defmacro'
-     *note Defining Macros::.
-
-`defun'
-     *note Defining Functions::.
-
-`defvar'
-     *note Defining Variables::.
-
-`function'
-     *note Anonymous Functions::.
-
-`if'
-     *note Conditionals::.
-
-`interactive'
-     *note Interactive Call::.
-
-`let'
-`let*'
-     *note Local Variables::.
-
-`or'
-     *note Combining Conditions::.
-
-`prog1'
-`prog2'
-`progn'
-     *note Sequencing::.
-
-`quote'
-     *note Quoting::.
-
-`save-current-buffer'
-     *note Excursions::.
-
-`save-excursion'
-     *note Excursions::.
-
-`save-restriction'
-     *note Narrowing::.
-
-`save-selected-window'
-     *note Excursions::.
-
-`save-window-excursion'
-     *note Window Configurations::.
-
-`setq'
-     *note Setting Variables::.
-
-`setq-default'
-     *note Creating Buffer-Local::.
-
-`unwind-protect'
-     *note Nonlocal Exits::.
-
-`while'
-     *note Iteration::.
-
-`with-output-to-temp-buffer'
-     *note Temporary Displays::.
-
-     Common Lisp note: here are some comparisons of special forms in
-     XEmacs Lisp and Common Lisp.  `setq', `if', and `catch' are
-     special forms in both XEmacs Lisp and Common Lisp.  `defun' is a
-     special form in XEmacs Lisp, but a macro in Common Lisp.
-     `save-excursion' is a special form in XEmacs Lisp, but doesn't
-     exist in Common Lisp.  `throw' is a special form in Common Lisp
-     (because it must be able to throw multiple values), but it is a
-     function in XEmacs Lisp (which doesn't have multiple values).
-
-\1f
-File: lispref.info,  Node: Autoloading,  Prev: Special Forms,  Up: Forms
-
-Autoloading
------------
-
-   The "autoload" feature allows you to call a function or macro whose
-function definition has not yet been loaded into XEmacs.  It specifies
-which file contains the definition.  When an autoload object appears as
-a symbol's function definition, calling that symbol as a function
-automatically loads the specified file; then it calls the real
-definition loaded from that file.  *Note Autoload::.
-
-\1f
-File: lispref.info,  Node: Quoting,  Prev: Forms,  Up: Evaluation
-
-Quoting
-=======
-
-   The special form `quote' returns its single argument, as written,
-without evaluating it.  This provides a way to include constant symbols
-and lists, which are not self-evaluating objects, in a program.  (It is
-not necessary to quote self-evaluating objects such as numbers, strings,
-and vectors.)
-
- - Special Form: quote OBJECT
-     This special form returns OBJECT, without evaluating it.
-
-   Because `quote' is used so often in programs, Lisp provides a
-convenient read syntax for it.  An apostrophe character (`'') followed
-by a Lisp object (in read syntax) expands to a list whose first element
-is `quote', and whose second element is the object.  Thus, the read
-syntax `'x' is an abbreviation for `(quote x)'.
-
-   Here are some examples of expressions that use `quote':
-
-     (quote (+ 1 2))
-          => (+ 1 2)
-     (quote foo)
-          => foo
-     'foo
-          => foo
-     ''foo
-          => (quote foo)
-     '(quote foo)
-          => (quote foo)
-     ['foo]
-          => [(quote foo)]
-
-   Other quoting constructs include `function' (*note Anonymous
-Functions::.), which causes an anonymous lambda expression written in
-Lisp to be compiled, and ``' (*note Backquote::.), which is used to
-quote only part of a list, while computing and substituting other parts.
-
-\1f
-File: lispref.info,  Node: Control Structures,  Next: Variables,  Prev: Evaluation,  Up: Top
-
-Control Structures
-******************
-
-   A Lisp program consists of expressions or "forms" (*note Forms::.).
-We control the order of execution of the forms by enclosing them in
-"control structures".  Control structures are special forms which
-control when, whether, or how many times to execute the forms they
-contain.
-
-   The simplest order of execution is sequential execution: first form
-A, then form B, and so on.  This is what happens when you write several
-forms in succession in the body of a function, or at top level in a
-file of Lisp code--the forms are executed in the order written.  We
-call this "textual order".  For example, if a function body consists of
-two forms A and B, evaluation of the function evaluates first A and
-then B, and the function's value is the value of B.
-
-   Explicit control structures make possible an order of execution other
-than sequential.
-
-   XEmacs Lisp provides several kinds of control structure, including
-other varieties of sequencing, conditionals, iteration, and (controlled)
-jumps--all discussed below.  The built-in control structures are
-special forms since their subforms are not necessarily evaluated or not
-evaluated sequentially.  You can use macros to define your own control
-structure constructs (*note Macros::.).
-
-* Menu:
-
-* Sequencing::             Evaluation in textual order.
-* Conditionals::           `if', `cond'.
-* Combining Conditions::   `and', `or', `not'.
-* Iteration::              `while' loops.
-* Nonlocal Exits::         Jumping out of a sequence.
-
-\1f
-File: lispref.info,  Node: Sequencing,  Next: Conditionals,  Up: Control Structures
-
-Sequencing
-==========
-
-   Evaluating forms in the order they appear is the most common way
-control passes from one form to another.  In some contexts, such as in a
-function body, this happens automatically.  Elsewhere you must use a
-control structure construct to do this: `progn', the simplest control
-construct of Lisp.
-
-   A `progn' special form looks like this:
-
-     (progn A B C ...)
-
-and it says to execute the forms A, B, C and so on, in that order.
-These forms are called the body of the `progn' form.  The value of the
-last form in the body becomes the value of the entire `progn'.
-
-   In the early days of Lisp, `progn' was the only way to execute two
-or more forms in succession and use the value of the last of them.  But
-programmers found they often needed to use a `progn' in the body of a
-function, where (at that time) only one form was allowed.  So the body
-of a function was made into an "implicit `progn'": several forms are
-allowed just as in the body of an actual `progn'.  Many other control
-structures likewise contain an implicit `progn'.  As a result, `progn'
-is not used as often as it used to be.  It is needed now most often
-inside an `unwind-protect', `and', `or', or in the THEN-part of an `if'.
-
- - Special Form: progn FORMS...
-     This special form evaluates all of the FORMS, in textual order,
-     returning the result of the final form.
-
-          (progn (print "The first form")
-                 (print "The second form")
-                 (print "The third form"))
-               -| "The first form"
-               -| "The second form"
-               -| "The third form"
-          => "The third form"
-
-   Two other control constructs likewise evaluate a series of forms but
-return a different value:
-
- - Special Form: prog1 FORM1 FORMS...
-     This special form evaluates FORM1 and all of the FORMS, in textual
-     order, returning the result of FORM1.
-
-          (prog1 (print "The first form")
-                 (print "The second form")
-                 (print "The third form"))
-               -| "The first form"
-               -| "The second form"
-               -| "The third form"
-          => "The first form"
-
-     Here is a way to remove the first element from a list in the
-     variable `x', then return the value of that former element:
-
-          (prog1 (car x) (setq x (cdr x)))
-
- - Special Form: prog2 FORM1 FORM2 FORMS...
-     This special form evaluates FORM1, FORM2, and all of the following
-     FORMS, in textual order, returning the result of FORM2.
-
-          (prog2 (print "The first form")
-                 (print "The second form")
-                 (print "The third form"))
-               -| "The first form"
-               -| "The second form"
-               -| "The third form"
-          => "The second form"
-
-\1f
-File: lispref.info,  Node: Conditionals,  Next: Combining Conditions,  Prev: Sequencing,  Up: Control Structures
-
-Conditionals
-============
-
-   Conditional control structures choose among alternatives.  XEmacs
-Lisp has two conditional forms: `if', which is much the same as in other
-languages, and `cond', which is a generalized case statement.
-
- - Special Form: if CONDITION THEN-FORM ELSE-FORMS...
-     `if' chooses between the THEN-FORM and the ELSE-FORMS based on the
-     value of CONDITION.  If the evaluated CONDITION is non-`nil',
-     THEN-FORM is evaluated and the result returned.  Otherwise, the
-     ELSE-FORMS are evaluated in textual order, and the value of the
-     last one is returned.  (The ELSE part of `if' is an example of an
-     implicit `progn'.  *Note Sequencing::.)
-
-     If CONDITION has the value `nil', and no ELSE-FORMS are given,
-     `if' returns `nil'.
-
-     `if' is a special form because the branch that is not selected is
-     never evaluated--it is ignored.  Thus, in the example below,
-     `true' is not printed because `print' is never called.
-
-          (if nil
-              (print 'true)
-            'very-false)
-          => very-false
-
- - Special Form: cond CLAUSE...
-     `cond' chooses among an arbitrary number of alternatives.  Each
-     CLAUSE in the `cond' must be a list.  The CAR of this list is the
-     CONDITION; the remaining elements, if any, the BODY-FORMS.  Thus,
-     a clause looks like this:
-
-          (CONDITION BODY-FORMS...)
-
-     `cond' tries the clauses in textual order, by evaluating the
-     CONDITION of each clause.  If the value of CONDITION is non-`nil',
-     the clause "succeeds"; then `cond' evaluates its BODY-FORMS, and
-     the value of the last of BODY-FORMS becomes the value of the
-     `cond'.  The remaining clauses are ignored.
-
-     If the value of CONDITION is `nil', the clause "fails", so the
-     `cond' moves on to the following clause, trying its CONDITION.
-
-     If every CONDITION evaluates to `nil', so that every clause fails,
-     `cond' returns `nil'.
-
-     A clause may also look like this:
-
-          (CONDITION)
-
-     Then, if CONDITION is non-`nil' when tested, the value of
-     CONDITION becomes the value of the `cond' form.
-
-     The following example has four clauses, which test for the cases
-     where the value of `x' is a number, string, buffer and symbol,
-     respectively:
-
-          (cond ((numberp x) x)
-                ((stringp x) x)
-                ((bufferp x)
-                 (setq temporary-hack x) ; multiple body-forms
-                 (buffer-name x))        ; in one clause
-                ((symbolp x) (symbol-value x)))
-
-     Often we want to execute the last clause whenever none of the
-     previous clauses was successful.  To do this, we use `t' as the
-     CONDITION of the last clause, like this: `(t BODY-FORMS)'.  The
-     form `t' evaluates to `t', which is never `nil', so this clause
-     never fails, provided the `cond' gets to it at all.
-
-     For example,
-
-          (cond ((eq a 'hack) 'foo)
-                (t "default"))
-          => "default"
-
-     This expression is a `cond' which returns `foo' if the value of
-     `a' is 1, and returns the string `"default"' otherwise.
-
-   Any conditional construct can be expressed with `cond' or with `if'.
-Therefore, the choice between them is a matter of style.  For example:
-
-     (if A B C)
-     ==
-     (cond (A B) (t C))
-
-\1f
-File: lispref.info,  Node: Combining Conditions,  Next: Iteration,  Prev: Conditionals,  Up: Control Structures
-
-Constructs for Combining Conditions
-===================================
-
-   This section describes three constructs that are often used together
-with `if' and `cond' to express complicated conditions.  The constructs
-`and' and `or' can also be used individually as kinds of multiple
-conditional constructs.
-
- - Function: not CONDITION
-     This function tests for the falsehood of CONDITION.  It returns
-     `t' if CONDITION is `nil', and `nil' otherwise.  The function
-     `not' is identical to `null', and we recommend using the name
-     `null' if you are testing for an empty list.
-
- - Special Form: and CONDITIONS...
-     The `and' special form tests whether all the CONDITIONS are true.
-     It works by evaluating the CONDITIONS one by one in the order
-     written.
-
-     If any of the CONDITIONS evaluates to `nil', then the result of
-     the `and' must be `nil' regardless of the remaining CONDITIONS; so
-     `and' returns right away, ignoring the remaining CONDITIONS.
-
-     If all the CONDITIONS turn out non-`nil', then the value of the
-     last of them becomes the value of the `and' form.
-
-     Here is an example.  The first condition returns the integer 1,
-     which is not `nil'.  Similarly, the second condition returns the
-     integer 2, which is not `nil'.  The third condition is `nil', so
-     the remaining condition is never evaluated.
-
-          (and (print 1) (print 2) nil (print 3))
-               -| 1
-               -| 2
-          => nil
-
-     Here is a more realistic example of using `and':
-
-          (if (and (consp foo) (eq (car foo) 'x))
-              (message "foo is a list starting with x"))
-
-     Note that `(car foo)' is not executed if `(consp foo)' returns
-     `nil', thus avoiding an error.
-
-     `and' can be expressed in terms of either `if' or `cond'.  For
-     example:
-
-          (and ARG1 ARG2 ARG3)
-          ==
-          (if ARG1 (if ARG2 ARG3))
-          ==
-          (cond (ARG1 (cond (ARG2 ARG3))))
-
- - Special Form: or CONDITIONS...
-     The `or' special form tests whether at least one of the CONDITIONS
-     is true.  It works by evaluating all the CONDITIONS one by one in
-     the order written.
-
-     If any of the CONDITIONS evaluates to a non-`nil' value, then the
-     result of the `or' must be non-`nil'; so `or' returns right away,
-     ignoring the remaining CONDITIONS.  The value it returns is the
-     non-`nil' value of the condition just evaluated.
-
-     If all the CONDITIONS turn out `nil', then the `or' expression
-     returns `nil'.
-
-     For example, this expression tests whether `x' is either 0 or
-     `nil':
-
-          (or (eq x nil) (eq x 0))
-
-     Like the `and' construct, `or' can be written in terms of `cond'.
-     For example:
-
-          (or ARG1 ARG2 ARG3)
-          ==
-          (cond (ARG1)
-                (ARG2)
-                (ARG3))
-
-     You could almost write `or' in terms of `if', but not quite:
-
-          (if ARG1 ARG1
-            (if ARG2 ARG2
-              ARG3))
-
-     This is not completely equivalent because it can evaluate ARG1 or
-     ARG2 twice.  By contrast, `(or ARG1 ARG2 ARG3)' never evaluates
-     any argument more than once.
-
-\1f
-File: lispref.info,  Node: Iteration,  Next: Nonlocal Exits,  Prev: Combining Conditions,  Up: Control Structures
-
-Iteration
-=========
-
-   Iteration means executing part of a program repetitively.  For
-example, you might want to repeat some computation once for each element
-of a list, or once for each integer from 0 to N.  You can do this in
-XEmacs Lisp with the special form `while':
-
- - Special Form: while CONDITION FORMS...
-     `while' first evaluates CONDITION.  If the result is non-`nil', it
-     evaluates FORMS in textual order.  Then it reevaluates CONDITION,
-     and if the result is non-`nil', it evaluates FORMS again.  This
-     process repeats until CONDITION evaluates to `nil'.
-
-     There is no limit on the number of iterations that may occur.  The
-     loop will continue until either CONDITION evaluates to `nil' or
-     until an error or `throw' jumps out of it (*note Nonlocal
-     Exits::.).
-
-     The value of a `while' form is always `nil'.
-
-          (setq num 0)
-               => 0
-          (while (< num 4)
-            (princ (format "Iteration %d." num))
-            (setq num (1+ num)))
-               -| Iteration 0.
-               -| Iteration 1.
-               -| Iteration 2.
-               -| Iteration 3.
-               => nil
-
-     If you would like to execute something on each iteration before the
-     end-test, put it together with the end-test in a `progn' as the
-     first argument of `while', as shown here:
-
-          (while (progn
-                   (forward-line 1)
-                   (not (looking-at "^$"))))
-
-     This moves forward one line and continues moving by lines until it
-     reaches an empty.  It is unusual in that the `while' has no body,
-     just the end test (which also does the real work of moving point).
-
-\1f
-File: lispref.info,  Node: Nonlocal Exits,  Prev: Iteration,  Up: Control Structures
-
-Nonlocal Exits
-==============
-
-   A "nonlocal exit" is a transfer of control from one point in a
-program to another remote point.  Nonlocal exits can occur in XEmacs
-Lisp as a result of errors; you can also use them under explicit
-control.  Nonlocal exits unbind all variable bindings made by the
-constructs being exited.
-
-* Menu:
-
-* Catch and Throw::     Nonlocal exits for the program's own purposes.
-* Examples of Catch::   Showing how such nonlocal exits can be written.
-* Errors::              How errors are signaled and handled.
-* Cleanups::            Arranging to run a cleanup form if an error happens.
-
-\1f
-File: lispref.info,  Node: Catch and Throw,  Next: Examples of Catch,  Up: Nonlocal Exits
-
-Explicit Nonlocal Exits: `catch' and `throw'
---------------------------------------------
-
-   Most control constructs affect only the flow of control within the
-construct itself.  The function `throw' is the exception to this rule
-of normal program execution: it performs a nonlocal exit on request.
-(There are other exceptions, but they are for error handling only.)
-`throw' is used inside a `catch', and jumps back to that `catch'.  For
-example:
-
-     (catch 'foo
-       (progn
-         ...
-         (throw 'foo t)
-         ...))
-
-The `throw' transfers control straight back to the corresponding
-`catch', which returns immediately.  The code following the `throw' is
-not executed.  The second argument of `throw' is used as the return
-value of the `catch'.
-
-   The `throw' and the `catch' are matched through the first argument:
-`throw' searches for a `catch' whose first argument is `eq' to the one
-specified.  Thus, in the above example, the `throw' specifies `foo',
-and the `catch' specifies the same symbol, so that `catch' is
-applicable.  If there is more than one applicable `catch', the
-innermost one takes precedence.
-
-   Executing `throw' exits all Lisp constructs up to the matching
-`catch', including function calls.  When binding constructs such as
-`let' or function calls are exited in this way, the bindings are
-unbound, just as they are when these constructs exit normally (*note
-Local Variables::.).  Likewise, `throw' restores the buffer and
-position saved by `save-excursion' (*note Excursions::.), and the
-narrowing status saved by `save-restriction' and the window selection
-saved by `save-window-excursion' (*note Window Configurations::.).  It
-also runs any cleanups established with the `unwind-protect' special
-form when it exits that form (*note Cleanups::.).
-
-   The `throw' need not appear lexically within the `catch' that it
-jumps to.  It can equally well be called from another function called
-within the `catch'.  As long as the `throw' takes place chronologically
-after entry to the `catch', and chronologically before exit from it, it
-has access to that `catch'.  This is why `throw' can be used in
-commands such as `exit-recursive-edit' that throw back to the editor
-command loop (*note Recursive Editing::.).
-
-     Common Lisp note: Most other versions of Lisp, including Common
-     Lisp, have several ways of transferring control nonsequentially:
-     `return', `return-from', and `go', for example.  XEmacs Lisp has
-     only `throw'.
-
- - Special Form: catch TAG BODY...
-     `catch' establishes a return point for the `throw' function.  The
-     return point is distinguished from other such return points by TAG,
-     which may be any Lisp object.  The argument TAG is evaluated
-     normally before the return point is established.
-
-     With the return point in effect, `catch' evaluates the forms of the
-     BODY in textual order.  If the forms execute normally, without
-     error or nonlocal exit, the value of the last body form is
-     returned from the `catch'.
-
-     If a `throw' is done within BODY specifying the same value TAG,
-     the `catch' exits immediately; the value it returns is whatever
-     was specified as the second argument of `throw'.
-
- - Function: throw TAG VALUE
-     The purpose of `throw' is to return from a return point previously
-     established with `catch'.  The argument TAG is used to choose
-     among the various existing return points; it must be `eq' to the
-     value specified in the `catch'.  If multiple return points match
-     TAG, the innermost one is used.
-
-     The argument VALUE is used as the value to return from that
-     `catch'.
-
-     If no return point is in effect with tag TAG, then a `no-catch'
-     error is signaled with data `(TAG VALUE)'.
-
-\1f
-File: lispref.info,  Node: Examples of Catch,  Next: Errors,  Prev: Catch and Throw,  Up: Nonlocal Exits
-
-Examples of `catch' and `throw'
--------------------------------
-
-   One way to use `catch' and `throw' is to exit from a doubly nested
-loop.  (In most languages, this would be done with a "go to".)  Here we
-compute `(foo I J)' for I and J varying from 0 to 9:
-
-     (defun search-foo ()
-       (catch 'loop
-         (let ((i 0))
-           (while (< i 10)
-             (let ((j 0))
-               (while (< j 10)
-                 (if (foo i j)
-                     (throw 'loop (list i j)))
-                 (setq j (1+ j))))
-             (setq i (1+ i))))))
-
-If `foo' ever returns non-`nil', we stop immediately and return a list
-of I and J.  If `foo' always returns `nil', the `catch' returns
-normally, and the value is `nil', since that is the result of the
-`while'.
-
-   Here are two tricky examples, slightly different, showing two return
-points at once.  First, two return points with the same tag, `hack':
-
-     (defun catch2 (tag)
-       (catch tag
-         (throw 'hack 'yes)))
-     => catch2
-     
-     (catch 'hack
-       (print (catch2 'hack))
-       'no)
-     -| yes
-     => no
-
-Since both return points have tags that match the `throw', it goes to
-the inner one, the one established in `catch2'.  Therefore, `catch2'
-returns normally with value `yes', and this value is printed.  Finally
-the second body form in the outer `catch', which is `'no', is evaluated
-and returned from the outer `catch'.
-
-   Now let's change the argument given to `catch2':
-
-     (defun catch2 (tag)
-       (catch tag
-         (throw 'hack 'yes)))
-     => catch2
-     
-     (catch 'hack
-       (print (catch2 'quux))
-       'no)
-     => yes
-
-We still have two return points, but this time only the outer one has
-the tag `hack'; the inner one has the tag `quux' instead.  Therefore,
-`throw' makes the outer `catch' return the value `yes'.  The function
-`print' is never called, and the body-form `'no' is never evaluated.
-
-\1f
-File: lispref.info,  Node: Errors,  Next: Cleanups,  Prev: Examples of Catch,  Up: Nonlocal Exits
-
-Errors
-------
-
-   When XEmacs Lisp attempts to evaluate a form that, for some reason,
-cannot be evaluated, it "signals" an "error".
-
-   When an error is signaled, XEmacs's default reaction is to print an
-error message and terminate execution of the current command.  This is
-the right thing to do in most cases, such as if you type `C-f' at the
-end of the buffer.
-
-   In complicated programs, simple termination may not be what you want.
-For example, the program may have made temporary changes in data
-structures, or created temporary buffers that should be deleted before
-the program is finished.  In such cases, you would use `unwind-protect'
-to establish "cleanup expressions" to be evaluated in case of error.
-(*Note Cleanups::.)  Occasionally, you may wish the program to continue
-execution despite an error in a subroutine.  In these cases, you would
-use `condition-case' to establish "error handlers" to recover control
-in case of error.
-
-   Resist the temptation to use error handling to transfer control from
-one part of the program to another; use `catch' and `throw' instead.
-*Note Catch and Throw::.
-
-* Menu:
-
-* Signaling Errors::      How to report an error.
-* Processing of Errors::  What XEmacs does when you report an error.
-* Handling Errors::       How you can trap errors and continue execution.
-* Error Symbols::         How errors are classified for trapping them.
-
-\1f
-File: lispref.info,  Node: Signaling Errors,  Next: Processing of Errors,  Up: Errors
-
-How to Signal an Error
-......................
-
-   Most errors are signaled "automatically" within Lisp primitives
-which you call for other purposes, such as if you try to take the CAR
-of an integer or move forward a character at the end of the buffer; you
-can also signal errors explicitly with the functions `error' and
-`signal'.
-
-   Quitting, which happens when the user types `C-g', is not considered
-an error, but it is handled almost like an error.  *Note Quitting::.
-
- - Function: error FORMAT-STRING &rest ARGS
-     This function signals an error with an error message constructed by
-     applying `format' (*note String Conversion::.) to FORMAT-STRING
-     and ARGS.
-
-     These examples show typical uses of `error':
-
-          (error "You have committed an error.
-                  Try something else.")
-               error--> You have committed an error.
-                  Try something else.
-          
-          (error "You have committed %d errors." 10)
-               error--> You have committed 10 errors.
-
-     `error' works by calling `signal' with two arguments: the error
-     symbol `error', and a list containing the string returned by
-     `format'.
-
-     If you want to use your own string as an error message verbatim,
-     don't just write `(error STRING)'.  If STRING contains `%', it
-     will be interpreted as a format specifier, with undesirable
-     results.  Instead, use `(error "%s" STRING)'.
-
- - Function: signal ERROR-SYMBOL DATA
-     This function signals an error named by ERROR-SYMBOL.  The
-     argument DATA is a list of additional Lisp objects relevant to the
-     circumstances of the error.
-
-     The argument ERROR-SYMBOL must be an "error symbol"--a symbol
-     bearing a property `error-conditions' whose value is a list of
-     condition names.  This is how XEmacs Lisp classifies different
-     sorts of errors.
-
-     The number and significance of the objects in DATA depends on
-     ERROR-SYMBOL.  For example, with a `wrong-type-arg' error, there
-     are two objects in the list: a predicate that describes the type
-     that was expected, and the object that failed to fit that type.
-     *Note Error Symbols::, for a description of error symbols.
-
-     Both ERROR-SYMBOL and DATA are available to any error handlers
-     that handle the error: `condition-case' binds a local variable to
-     a list of the form `(ERROR-SYMBOL .  DATA)' (*note Handling
-     Errors::.).  If the error is not handled, these two values are
-     used in printing the error message.
-
-     The function `signal' never returns (though in older Emacs versions
-     it could sometimes return).
-
-          (signal 'wrong-number-of-arguments '(x y))
-               error--> Wrong number of arguments: x, y
-
-          (signal 'no-such-error '("My unknown error condition."))
-               error--> peculiar error: "My unknown error condition."
-
-     Common Lisp note: XEmacs Lisp has nothing like the Common Lisp
-     concept of continuable errors.
-
-\1f
-File: lispref.info,  Node: Processing of Errors,  Next: Handling Errors,  Prev: Signaling Errors,  Up: Errors
-
-How XEmacs Processes Errors
-...........................
-
-   When an error is signaled, `signal' searches for an active "handler"
-for the error.  A handler is a sequence of Lisp expressions designated
-to be executed if an error happens in part of the Lisp program.  If the
-error has an applicable handler, the handler is executed, and control
-resumes following the handler.  The handler executes in the environment
-of the `condition-case' that established it; all functions called
-within that `condition-case' have already been exited, and the handler
-cannot return to them.
-
-   If there is no applicable handler for the error, the current command
-is terminated and control returns to the editor command loop, because
-the command loop has an implicit handler for all kinds of errors.  The
-command loop's handler uses the error symbol and associated data to
-print an error message.
-
-   An error that has no explicit handler may call the Lisp debugger.
-The debugger is enabled if the variable `debug-on-error' (*note Error
-Debugging::.) is non-`nil'.  Unlike error handlers, the debugger runs
-in the environment of the error, so that you can examine values of
-variables precisely as they were at the time of the error.
-
-\1f
-File: lispref.info,  Node: Handling Errors,  Next: Error Symbols,  Prev: Processing of Errors,  Up: Errors
-
-Writing Code to Handle Errors
-.............................
-
-   The usual effect of signaling an error is to terminate the command
-that is running and return immediately to the XEmacs editor command
-loop.  You can arrange to trap errors occurring in a part of your
-program by establishing an error handler, with the special form
-`condition-case'.  A simple example looks like this:
-
-     (condition-case nil
-         (delete-file filename)
-       (error nil))
-
-This deletes the file named FILENAME, catching any error and returning
-`nil' if an error occurs.
-
-   The second argument of `condition-case' is called the "protected
-form".  (In the example above, the protected form is a call to
-`delete-file'.)  The error handlers go into effect when this form
-begins execution and are deactivated when this form returns.  They
-remain in effect for all the intervening time.  In particular, they are
-in effect during the execution of functions called by this form, in
-their subroutines, and so on.  This is a good thing, since, strictly
-speaking, errors can be signaled only by Lisp primitives (including
-`signal' and `error') called by the protected form, not by the
-protected form itself.
-
-   The arguments after the protected form are handlers.  Each handler
-lists one or more "condition names" (which are symbols) to specify
-which errors it will handle.  The error symbol specified when an error
-is signaled also defines a list of condition names.  A handler applies
-to an error if they have any condition names in common.  In the example
-above, there is one handler, and it specifies one condition name,
-`error', which covers all errors.
-
-   The search for an applicable handler checks all the established
-handlers starting with the most recently established one.  Thus, if two
-nested `condition-case' forms offer to handle the same error, the inner
-of the two will actually handle it.
-
-   When an error is handled, control returns to the handler.  Before
-this happens, XEmacs unbinds all variable bindings made by binding
-constructs that are being exited and executes the cleanups of all
-`unwind-protect' forms that are exited.  Once control arrives at the
-handler, the body of the handler is executed.
-
-   After execution of the handler body, execution continues by returning
-from the `condition-case' form.  Because the protected form is exited
-completely before execution of the handler, the handler cannot resume
-execution at the point of the error, nor can it examine variable
-bindings that were made within the protected form.  All it can do is
-clean up and proceed.
-
-   `condition-case' is often used to trap errors that are predictable,
-such as failure to open a file in a call to `insert-file-contents'.  It
-is also used to trap errors that are totally unpredictable, such as
-when the program evaluates an expression read from the user.
-
-   Error signaling and handling have some resemblance to `throw' and
-`catch', but they are entirely separate facilities.  An error cannot be
-caught by a `catch', and a `throw' cannot be handled by an error
-handler (though using `throw' when there is no suitable `catch' signals
-an error that can be handled).
-
- - Special Form: condition-case VAR PROTECTED-FORM HANDLERS...
-     This special form establishes the error handlers HANDLERS around
-     the execution of PROTECTED-FORM.  If PROTECTED-FORM executes
-     without error, the value it returns becomes the value of the
-     `condition-case' form; in this case, the `condition-case' has no
-     effect.  The `condition-case' form makes a difference when an
-     error occurs during PROTECTED-FORM.
-
-     Each of the HANDLERS is a list of the form `(CONDITIONS BODY...)'.
-     Here CONDITIONS is an error condition name to be handled, or a
-     list of condition names; BODY is one or more Lisp expressions to
-     be executed when this handler handles an error.  Here are examples
-     of handlers:
-
-          (error nil)
-          
-          (arith-error (message "Division by zero"))
-          
-          ((arith-error file-error)
-           (message
-            "Either division by zero or failure to open a file"))
-
-     Each error that occurs has an "error symbol" that describes what
-     kind of error it is.  The `error-conditions' property of this
-     symbol is a list of condition names (*note Error Symbols::.).
-     Emacs searches all the active `condition-case' forms for a handler
-     that specifies one or more of these condition names; the innermost
-     matching `condition-case' handles the error.  Within this
-     `condition-case', the first applicable handler handles the error.
-
-     After executing the body of the handler, the `condition-case'
-     returns normally, using the value of the last form in the handler
-     body as the overall value.
-
-     The argument VAR is a variable.  `condition-case' does not bind
-     this variable when executing the PROTECTED-FORM, only when it
-     handles an error.  At that time, it binds VAR locally to a list of
-     the form `(ERROR-SYMBOL . DATA)', giving the particulars of the
-     error.  The handler can refer to this list to decide what to do.
-     For example, if the error is for failure opening a file, the file
-     name is the second element of DATA--the third element of VAR.
-
-     If VAR is `nil', that means no variable is bound.  Then the error
-     symbol and associated data are not available to the handler.
-
-   Here is an example of using `condition-case' to handle the error
-that results from dividing by zero.  The handler prints out a warning
-message and returns a very large number.
-
-     (defun safe-divide (dividend divisor)
-       (condition-case err
-           ;; Protected form.
-           (/ dividend divisor)
-         ;; The handler.
-         (arith-error                        ; Condition.
-          (princ (format "Arithmetic error: %s" err))
-          1000000)))
-     => safe-divide
-
-     (safe-divide 5 0)
-          -| Arithmetic error: (arith-error)
-     => 1000000
-
-The handler specifies condition name `arith-error' so that it will
-handle only division-by-zero errors.  Other kinds of errors will not be
-handled, at least not by this `condition-case'.  Thus,
-
-     (safe-divide nil 3)
-          error--> Wrong type argument: integer-or-marker-p, nil
-
-   Here is a `condition-case' that catches all kinds of errors,
-including those signaled with `error':
-
-     (setq baz 34)
-          => 34
-
-     (condition-case err
-         (if (eq baz 35)
-             t
-           ;; This is a call to the function `error'.
-           (error "Rats!  The variable %s was %s, not 35" 'baz baz))
-       ;; This is the handler; it is not a form.
-       (error (princ (format "The error was: %s" err))
-              2))
-     -| The error was: (error "Rats!  The variable baz was 34, not 35")
-     => 2
-
-\1f
-File: lispref.info,  Node: Error Symbols,  Prev: Handling Errors,  Up: Errors
-
-Error Symbols and Condition Names
-.................................
-
-   When you signal an error, you specify an "error symbol" to specify
-the kind of error you have in mind.  Each error has one and only one
-error symbol to categorize it.  This is the finest classification of
-errors defined by the XEmacs Lisp language.
-
-   These narrow classifications are grouped into a hierarchy of wider
-classes called "error conditions", identified by "condition names".
-The narrowest such classes belong to the error symbols themselves: each
-error symbol is also a condition name.  There are also condition names
-for more extensive classes, up to the condition name `error' which
-takes in all kinds of errors.  Thus, each error has one or more
-condition names: `error', the error symbol if that is distinct from
-`error', and perhaps some intermediate classifications.
-
-   In order for a symbol to be an error symbol, it must have an
-`error-conditions' property which gives a list of condition names.
-This list defines the conditions that this kind of error belongs to.
-(The error symbol itself, and the symbol `error', should always be
-members of this list.)  Thus, the hierarchy of condition names is
-defined by the `error-conditions' properties of the error symbols.
-
-   In addition to the `error-conditions' list, the error symbol should
-have an `error-message' property whose value is a string to be printed
-when that error is signaled but not handled.  If the `error-message'
-property exists, but is not a string, the error message `peculiar
-error' is used.
-
-   Here is how we define a new error symbol, `new-error':
-
-     (put 'new-error
-          'error-conditions
-          '(error my-own-errors new-error))
-     => (error my-own-errors new-error)
-     (put 'new-error 'error-message "A new error")
-     => "A new error"
-
-This error has three condition names: `new-error', the narrowest
-classification; `my-own-errors', which we imagine is a wider
-classification; and `error', which is the widest of all.
-
-   The error string should start with a capital letter but it should
-not end with a period.  This is for consistency with the rest of Emacs.
-
-   Naturally, XEmacs will never signal `new-error' on its own; only an
-explicit call to `signal' (*note Signaling Errors::.) in your code can
-do this:
-
-     (signal 'new-error '(x y))
-          error--> A new error: x, y
-
-   This error can be handled through any of the three condition names.
-This example handles `new-error' and any other errors in the class
-`my-own-errors':
-
-     (condition-case foo
-         (bar nil t)
-       (my-own-errors nil))
-
-   The significant way that errors are classified is by their condition
-names--the names used to match errors with handlers.  An error symbol
-serves only as a convenient way to specify the intended error message
-and list of condition names.  It would be cumbersome to give `signal' a
-list of condition names rather than one error symbol.
-
-   By contrast, using only error symbols without condition names would
-seriously decrease the power of `condition-case'.  Condition names make
-it possible to categorize errors at various levels of generality when
-you write an error handler.  Using error symbols alone would eliminate
-all but the narrowest level of classification.
-
-   *Note Standard Errors::, for a list of all the standard error symbols
-and their conditions.
-