This commit was manufactured by cvs2svn to create branch 'r21-4-14-chise'.
[chise/xemacs-chise.git] / info / lispref.info-3
diff --git a/info/lispref.info-3 b/info/lispref.info-3
deleted file mode 100644 (file)
index 837bb60..0000000
+++ /dev/null
@@ -1,1245 +0,0 @@
-This is ../info/lispref.info, produced by makeinfo version 4.0 from
-lispref/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: Character Type,  Next: Symbol Type,  Prev: Floating Point Type,  Up: Programming Types
-
-Character Type
---------------
-
-   In XEmacs version 19, and in all versions of FSF GNU Emacs, a
-"character" in XEmacs Lisp is nothing more than an integer.  This is
-yet another holdover from XEmacs Lisp's derivation from vintage-1980
-Lisps; modern versions of Lisp consider this equivalence a bad idea,
-and have separate character types.  In XEmacs version 20, the modern
-convention is followed, and characters are their own primitive types.
-(This change was necessary in order for MULE, i.e. Asian-language,
-support to be correctly implemented.)
-
-   Even in XEmacs version 20, remnants of the equivalence between
-characters and integers still exist; this is termed the "char-int
-confoundance disease".  In particular, many functions such as `eq',
-`equal', and `memq' have equivalent functions (`old-eq', `old-equal',
-`old-memq', etc.) that pretend like characters are integers are the
-same.  Byte code compiled under any version 19 Emacs will have all such
-functions mapped to their `old-' equivalents when the byte code is read
-into XEmacs 20.  This is to preserve compatibility--Emacs 19 converts
-all constant characters to the equivalent integer during
-byte-compilation, and thus there is no other way to preserve byte-code
-compatibility even if the code has specifically been written with the
-distinction between characters and integers in mind.
-
-   Every character has an equivalent integer, called the "character
-code".  For example, the character `A' is represented as the
-integer 65, following the standard ASCII representation of characters.
-If XEmacs was not compiled with MULE support, the range of this integer
-will always be 0 to 255--eight bits, or one byte. (Integers outside
-this range are accepted but silently truncated; however, you should
-most decidedly _not_ rely on this, because it will not work under
-XEmacs with MULE support.)  When MULE support is present, the range of
-character codes is much larger. (Currently, 19 bits are used.)
-
-   FSF GNU Emacs uses kludgy character codes above 255 to represent
-keyboard input of ASCII characters in combination with certain
-modifiers.  XEmacs does not use this (a more general mechanism is used
-that does not distinguish between ASCII keys and other keys), so you
-will never find character codes above 255 in a non-MULE XEmacs.
-
-   Individual characters are not often used in programs.  It is far more
-common to work with _strings_, which are sequences composed of
-characters.  *Note String Type::.
-
-   The read syntax for characters begins with a question mark, followed
-by the character (if it's printable) or some symbolic representation of
-it.  In XEmacs 20, where characters are their own type, this is also the
-print representation.  In XEmacs 19, however, where characters are
-really integers, the printed representation of a character is a decimal
-number.  This is also a possible read syntax for a character, but
-writing characters that way in Lisp programs is a very bad idea.  You
-should _always_ use the special read syntax formats that XEmacs Lisp
-provides for characters.
-
-   The usual read syntax for alphanumeric characters is a question mark
-followed by the character; thus, `?A' for the character `A', `?B' for
-the character `B', and `?a' for the character `a'.
-
-   For example:
-
-     ;; Under XEmacs 20:
-     ?Q => ?Q    ?q => ?q
-     (char-int ?Q) => 81
-     ;; Under XEmacs 19:
-     ?Q => 81     ?q => 113
-
-   You can use the same syntax for punctuation characters, but it is
-often a good idea to add a `\' so that the Emacs commands for editing
-Lisp code don't get confused.  For example, `?\ ' is the way to write
-the space character.  If the character is `\', you _must_ use a second
-`\' to quote it: `?\\'.  XEmacs 20 always prints punctuation characters
-with a `\' in front of them, to avoid confusion.
-
-   You can express the characters Control-g, backspace, tab, newline,
-vertical tab, formfeed, return, and escape as `?\a', `?\b', `?\t',
-`?\n', `?\v', `?\f', `?\r', `?\e', respectively.  Their character codes
-are 7, 8, 9, 10, 11, 12, 13, and 27 in decimal.  Thus,
-
-     ;; Under XEmacs 20:
-     ?\a => ?\^G              ; `C-g'
-     (char-int ?\a) => 7
-     ?\b => ?\^H              ; backspace, <BS>, `C-h'
-     (char-int ?\b) => 8
-     ?\t => ?\t               ; tab, <TAB>, `C-i'
-     (char-int ?\t) => 9
-     ?\n => ?\n               ; newline, <LFD>, `C-j'
-     ?\v => ?\^K              ; vertical tab, `C-k'
-     ?\f => ?\^L              ; formfeed character, `C-l'
-     ?\r => ?\r               ; carriage return, <RET>, `C-m'
-     ?\e => ?\^[              ; escape character, <ESC>, `C-['
-     ?\\ => ?\\               ; backslash character, `\'
-     ;; Under XEmacs 19:
-     ?\a => 7                 ; `C-g'
-     ?\b => 8                 ; backspace, <BS>, `C-h'
-     ?\t => 9                 ; tab, <TAB>, `C-i'
-     ?\n => 10                ; newline, <LFD>, `C-j'
-     ?\v => 11                ; vertical tab, `C-k'
-     ?\f => 12                ; formfeed character, `C-l'
-     ?\r => 13                ; carriage return, <RET>, `C-m'
-     ?\e => 27                ; escape character, <ESC>, `C-['
-     ?\\ => 92                ; backslash character, `\'
-
-   These sequences which start with backslash are also known as "escape
-sequences", because backslash plays the role of an escape character;
-this usage has nothing to do with the character <ESC>.
-
-   Control characters may be represented using yet another read syntax.
-This consists of a question mark followed by a backslash, caret, and the
-corresponding non-control character, in either upper or lower case.  For
-example, both `?\^I' and `?\^i' are valid read syntax for the character
-`C-i', the character whose value is 9.
-
-   Instead of the `^', you can use `C-'; thus, `?\C-i' is equivalent to
-`?\^I' and to `?\^i':
-
-     ;; Under XEmacs 20:
-     ?\^I => ?\t   ?\C-I => ?\t
-     (char-int ?\^I) => 9
-     ;; Under XEmacs 19:
-     ?\^I => 9     ?\C-I => 9
-
-   There is also a character read syntax beginning with `\M-'.  This
-sets the high bit of the character code (same as adding 128 to the
-character code).  For example, `?\M-A' stands for the character with
-character code 193, or 128 plus 65.  You should _not_ use this syntax
-in your programs.  It is a holdover of yet another confoundance disease
-from earlier Emacsen. (This was used to represent keyboard input with
-the <META> key set, thus the `M'; however, it conflicts with the
-legitimate ISO-8859-1 interpretation of the character code.  For
-example, character code 193 is a lowercase `a' with an acute accent, in
-ISO-8859-1.)
-
-   Finally, the most general read syntax consists of a question mark
-followed by a backslash and the character code in octal (up to three
-octal digits); thus, `?\101' for the character `A', `?\001' for the
-character `C-a', and `?\002' for the character `C-b'.  Although this
-syntax can represent any ASCII character, it is preferred only when the
-precise octal value is more important than the ASCII representation.
-
-     ;; Under XEmacs 20:
-     ?\012 => ?\n        ?\n => ?\n        ?\C-j => ?\n
-     ?\101 => ?A         ?A => ?A
-     ;; Under XEmacs 19:
-     ?\012 => 10         ?\n => 10         ?\C-j => 10
-     ?\101 => 65         ?A => 65
-
-   A backslash is allowed, and harmless, preceding any character without
-a special escape meaning; thus, `?\+' is equivalent to `?+'.  There is
-no reason to add a backslash before most characters.  However, you
-should add a backslash before any of the characters `()\|;'`"#.,' to
-avoid confusing the Emacs commands for editing Lisp code.  Also add a
-backslash before whitespace characters such as space, tab, newline and
-formfeed.  However, it is cleaner to use one of the easily readable
-escape sequences, such as `\t', instead of an actual whitespace
-character such as a tab.
-
-\1f
-File: lispref.info,  Node: Symbol Type,  Next: Sequence Type,  Prev: Character Type,  Up: Programming Types
-
-Symbol Type
------------
-
-   A "symbol" in XEmacs Lisp is an object with a name.  The symbol name
-serves as the printed representation of the symbol.  In ordinary use,
-the name is unique--no two symbols have the same name.
-
-   A symbol can serve as a variable, as a function name, or to hold a
-property list.  Or it may serve only to be distinct from all other Lisp
-objects, so that its presence in a data structure may be recognized
-reliably.  In a given context, usually only one of these uses is
-intended.  But you can use one symbol in all of these ways,
-independently.
-
-   A symbol name can contain any characters whatever.  Most symbol names
-are written with letters, digits, and the punctuation characters
-`-+=*/'.  Such names require no special punctuation; the characters of
-the name suffice as long as the name does not look like a number.  (If
-it does, write a `\' at the beginning of the name to force
-interpretation as a symbol.)  The characters `_~!@$%^&:<>{}' are less
-often used but also require no special punctuation.  Any other
-characters may be included in a symbol's name by escaping them with a
-backslash.  In contrast to its use in strings, however, a backslash in
-the name of a symbol simply quotes the single character that follows the
-backslash.  For example, in a string, `\t' represents a tab character;
-in the name of a symbol, however, `\t' merely quotes the letter `t'.
-To have a symbol with a tab character in its name, you must actually
-use a tab (preceded with a backslash).  But it's rare to do such a
-thing.
-
-     Common Lisp note: In Common Lisp, lower case letters are always
-     "folded" to upper case, unless they are explicitly escaped.  In
-     Emacs Lisp, upper case and lower case letters are distinct.
-
-   Here are several examples of symbol names.  Note that the `+' in the
-fifth example is escaped to prevent it from being read as a number.
-This is not necessary in the sixth example because the rest of the name
-makes it invalid as a number.
-
-     foo                 ; A symbol named `foo'.
-     FOO                 ; A symbol named `FOO', different from `foo'.
-     char-to-string      ; A symbol named `char-to-string'.
-     1+                  ; A symbol named `1+'
-                         ;   (not `+1', which is an integer).
-     \+1                 ; A symbol named `+1'
-                         ;   (not a very readable name).
-     \(*\ 1\ 2\)         ; A symbol named `(* 1 2)' (a worse name).
-     +-*/_~!@$%^&=:<>{}  ; A symbol named `+-*/_~!@$%^&=:<>{}'.
-                         ;   These characters need not be escaped.
-
-\1f
-File: lispref.info,  Node: Sequence Type,  Next: Cons Cell Type,  Prev: Symbol Type,  Up: Programming Types
-
-Sequence Types
---------------
-
-   A "sequence" is a Lisp object that represents an ordered set of
-elements.  There are two kinds of sequence in XEmacs Lisp, lists and
-arrays.  Thus, an object of type list or of type array is also
-considered a sequence.
-
-   Arrays are further subdivided into strings, vectors, and bit vectors.
-Vectors can hold elements of any type, but string elements must be
-characters, and bit vector elements must be either 0 or 1.  However, the
-characters in a string can have extents (*note Extents::) and text
-properties (*note Text Properties::) like characters in a buffer;
-vectors do not support extents or text properties even when their
-elements happen to be characters.
-
-   Lists, strings, vectors, and bit vectors are different, but they have
-important similarities.  For example, all have a length L, and all have
-elements which can be indexed from zero to L minus one.  Also, several
-functions, called sequence functions, accept any kind of sequence.  For
-example, the function `elt' can be used to extract an element of a
-sequence, given its index.  *Note Sequences Arrays Vectors::.
-
-   It is impossible to read the same sequence twice, since sequences are
-always created anew upon reading.  If you read the read syntax for a
-sequence twice, you get two sequences with equal contents.  There is one
-exception: the empty list `()' always stands for the same object, `nil'.
-
-\1f
-File: lispref.info,  Node: Cons Cell Type,  Next: Array Type,  Prev: Sequence Type,  Up: Programming Types
-
-Cons Cell and List Types
-------------------------
-
-   A "cons cell" is an object comprising two pointers named the CAR and
-the CDR.  Each of them can point to any Lisp object.
-
-   A "list" is a series of cons cells, linked together so that the CDR
-of each cons cell points either to another cons cell or to the empty
-list.  *Note Lists::, for functions that work on lists.  Because most
-cons cells are used as part of lists, the phrase "list structure" has
-come to refer to any structure made out of cons cells.
-
-   The names CAR and CDR have only historical meaning now.  The
-original Lisp implementation ran on an IBM 704 computer which divided
-words into two parts, called the "address" part and the "decrement";
-CAR was an instruction to extract the contents of the address part of a
-register, and CDR an instruction to extract the contents of the
-decrement.  By contrast, "cons cells" are named for the function `cons'
-that creates them, which in turn is named for its purpose, the
-construction of cells.
-
-   Because cons cells are so central to Lisp, we also have a word for
-"an object which is not a cons cell".  These objects are called "atoms".
-
-   The read syntax and printed representation for lists are identical,
-and consist of a left parenthesis, an arbitrary number of elements, and
-a right parenthesis.
-
-   Upon reading, each object inside the parentheses becomes an element
-of the list.  That is, a cons cell is made for each element.  The CAR
-of the cons cell points to the element, and its CDR points to the next
-cons cell of the list, which holds the next element in the list.  The
-CDR of the last cons cell is set to point to `nil'.
-
-   A list can be illustrated by a diagram in which the cons cells are
-shown as pairs of boxes.  (The Lisp reader cannot read such an
-illustration; unlike the textual notation, which can be understood by
-both humans and computers, the box illustrations can be understood only
-by humans.)  The following represents the three-element list `(rose
-violet buttercup)':
-
-         ___ ___      ___ ___      ___ ___
-        |___|___|--> |___|___|--> |___|___|--> nil
-          |            |            |
-          |            |            |
-           --> rose     --> violet   --> buttercup
-
-   In this diagram, each box represents a slot that can refer to any
-Lisp object.  Each pair of boxes represents a cons cell.  Each arrow is
-a reference to a Lisp object, either an atom or another cons cell.
-
-   In this example, the first box, the CAR of the first cons cell,
-refers to or "contains" `rose' (a symbol).  The second box, the CDR of
-the first cons cell, refers to the next pair of boxes, the second cons
-cell.  The CAR of the second cons cell refers to `violet' and the CDR
-refers to the third cons cell.  The CDR of the third (and last) cons
-cell refers to `nil'.
-
-   Here is another diagram of the same list, `(rose violet buttercup)',
-sketched in a different manner:
-
-      ---------------       ----------------       -------------------
-     | car   | cdr   |     | car    | cdr   |     | car       | cdr   |
-     | rose  |   o-------->| violet |   o-------->| buttercup |  nil  |
-     |       |       |     |        |       |     |           |       |
-      ---------------       ----------------       -------------------
-
-   A list with no elements in it is the "empty list"; it is identical
-to the symbol `nil'.  In other words, `nil' is both a symbol and a list.
-
-   Here are examples of lists written in Lisp syntax:
-
-     (A 2 "A")            ; A list of three elements.
-     ()                   ; A list of no elements (the empty list).
-     nil                  ; A list of no elements (the empty list).
-     ("A ()")             ; A list of one element: the string `"A ()"'.
-     (A ())               ; A list of two elements: `A' and the empty list.
-     (A nil)              ; Equivalent to the previous.
-     ((A B C))            ; A list of one element
-                          ;   (which is a list of three elements).
-
-   Here is the list `(A ())', or equivalently `(A nil)', depicted with
-boxes and arrows:
-
-         ___ ___      ___ ___
-        |___|___|--> |___|___|--> nil
-          |            |
-          |            |
-           --> A        --> nil
-
-* Menu:
-
-* Dotted Pair Notation::        An alternative syntax for lists.
-* Association List Type::       A specially constructed list.
-
-\1f
-File: lispref.info,  Node: Dotted Pair Notation,  Next: Association List Type,  Up: Cons Cell Type
-
-Dotted Pair Notation
-....................
-
-   "Dotted pair notation" is an alternative syntax for cons cells that
-represents the CAR and CDR explicitly.  In this syntax, `(A . B)'
-stands for a cons cell whose CAR is the object A, and whose CDR is the
-object B.  Dotted pair notation is therefore more general than list
-syntax.  In the dotted pair notation, the list `(1 2 3)' is written as
-`(1 .  (2 . (3 . nil)))'.  For `nil'-terminated lists, the two
-notations produce the same result, but list notation is usually clearer
-and more convenient when it is applicable.  When printing a list, the
-dotted pair notation is only used if the CDR of a cell is not a list.
-
-   Here's how box notation can illustrate dotted pairs.  This example
-shows the pair `(rose . violet)':
-
-         ___ ___
-        |___|___|--> violet
-          |
-          |
-           --> rose
-
-   Dotted pair notation can be combined with list notation to represent
-a chain of cons cells with a non-`nil' final CDR.  For example, `(rose
-violet . buttercup)' is equivalent to `(rose . (violet . buttercup))'.
-The object looks like this:
-
-         ___ ___      ___ ___
-        |___|___|--> |___|___|--> buttercup
-          |            |
-          |            |
-           --> rose     --> violet
-
-   These diagrams make it evident why `(rose . violet . buttercup)' is
-invalid syntax; it would require a cons cell that has three parts
-rather than two.
-
-   The list `(rose violet)' is equivalent to `(rose . (violet))' and
-looks like this:
-
-         ___ ___      ___ ___
-        |___|___|--> |___|___|--> nil
-          |            |
-          |            |
-           --> rose     --> violet
-
-   Similarly, the three-element list `(rose violet buttercup)' is
-equivalent to `(rose . (violet . (buttercup)))'.  It looks like this:
-
-         ___ ___      ___ ___      ___ ___
-        |___|___|--> |___|___|--> |___|___|--> nil
-          |            |            |
-          |            |            |
-           --> rose     --> violet   --> buttercup
-
-\1f
-File: lispref.info,  Node: Association List Type,  Prev: Dotted Pair Notation,  Up: Cons Cell Type
-
-Association List Type
-.....................
-
-   An "association list" or "alist" is a specially-constructed list
-whose elements are cons cells.  In each element, the CAR is considered
-a "key", and the CDR is considered an "associated value".  (In some
-cases, the associated value is stored in the CAR of the CDR.)
-Association lists are often used as stacks, since it is easy to add or
-remove associations at the front of the list.
-
-   For example,
-
-     (setq alist-of-colors
-           '((rose . red) (lily . white)  (buttercup . yellow)))
-
-sets the variable `alist-of-colors' to an alist of three elements.  In
-the first element, `rose' is the key and `red' is the value.
-
-   *Note Association Lists::, for a further explanation of alists and
-for functions that work on alists.
-
-\1f
-File: lispref.info,  Node: Array Type,  Next: String Type,  Prev: Cons Cell Type,  Up: Programming Types
-
-Array Type
-----------
-
-   An "array" is composed of an arbitrary number of slots for referring
-to other Lisp objects, arranged in a contiguous block of memory.
-Accessing any element of an array takes the same amount of time.  In
-contrast, accessing an element of a list requires time proportional to
-the position of the element in the list.  (Elements at the end of a
-list take longer to access than elements at the beginning of a list.)
-
-   XEmacs defines three types of array, strings, vectors, and bit
-vectors.  A string is an array of characters, a vector is an array of
-arbitrary objects, and a bit vector is an array of 1's and 0's.  All are
-one-dimensional.  (Most other programming languages support
-multidimensional arrays, but they are not essential; you can get the
-same effect with an array of arrays.)  Each type of array has its own
-read syntax; see *Note String Type::, *Note Vector Type::, and *Note
-Bit Vector Type::.
-
-   An array may have any length up to the largest integer; but once
-created, it has a fixed size.  The first element of an array has index
-zero, the second element has index 1, and so on.  This is called
-"zero-origin" indexing.  For example, an array of four elements has
-indices 0, 1, 2, and 3.
-
-   The array type is contained in the sequence type and contains the
-string type, the vector type, and the bit vector type.
-
-\1f
-File: lispref.info,  Node: String Type,  Next: Vector Type,  Prev: Array Type,  Up: Programming Types
-
-String Type
------------
-
-   A "string" is an array of characters.  Strings are used for many
-purposes in XEmacs, as can be expected in a text editor; for example, as
-the names of Lisp symbols, as messages for the user, and to represent
-text extracted from buffers.  Strings in Lisp are constants: evaluation
-of a string returns the same string.
-
-   The read syntax for strings is a double-quote, an arbitrary number of
-characters, and another double-quote, `"like this"'.  The Lisp reader
-accepts the same formats for reading the characters of a string as it
-does for reading single characters (without the question mark that
-begins a character literal).  You can enter a nonprinting character such
-as tab or `C-a' using the convenient escape sequences, like this: `"\t,
-\C-a"'.  You can include a double-quote in a string by preceding it
-with a backslash; thus, `"\""' is a string containing just a single
-double-quote character.  (*Note Character Type::, for a description of
-the read syntax for characters.)
-
-   The printed representation of a string consists of a double-quote,
-the characters it contains, and another double-quote.  However, you must
-escape any backslash or double-quote characters in the string with a
-backslash, like this: `"this \" is an embedded quote"'.
-
-   The newline character is not special in the read syntax for strings;
-if you write a new line between the double-quotes, it becomes a
-character in the string.  But an escaped newline--one that is preceded
-by `\'--does not become part of the string; i.e., the Lisp reader
-ignores an escaped newline while reading a string.
-
-     "It is useful to include newlines
-     in documentation strings,
-     but the newline is \
-     ignored if escaped."
-          => "It is useful to include newlines
-     in documentation strings,
-     but the newline is ignored if escaped."
-
-   A string can hold extents and properties of the text it contains, in
-addition to the characters themselves.  This enables programs that copy
-text between strings and buffers to preserve the extents and properties
-with no special effort.  *Note Extents::, *Note Text Properties::.
-
-   Note that FSF GNU Emacs has a special read and print syntax for
-strings with text properties, but XEmacs does not currently implement
-this.  It was judged better not to include this in XEmacs because it
-entails that `equal' return `nil' when passed a string with text
-properties and the equivalent string without text properties, which is
-often counter-intuitive.
-
-   *Note Strings and Characters::, for functions that work on strings.
-
-\1f
-File: lispref.info,  Node: Vector Type,  Next: Bit Vector Type,  Prev: String Type,  Up: Programming Types
-
-Vector Type
------------
-
-   A "vector" is a one-dimensional array of elements of any type.  It
-takes a constant amount of time to access any element of a vector.  (In
-a list, the access time of an element is proportional to the distance of
-the element from the beginning of the list.)
-
-   The printed representation of a vector consists of a left square
-bracket, the elements, and a right square bracket.  This is also the
-read syntax.  Like numbers and strings, vectors are considered constants
-for evaluation.
-
-     [1 "two" (three)]      ; A vector of three elements.
-          => [1 "two" (three)]
-
-   *Note Vectors::, for functions that work with vectors.
-
-\1f
-File: lispref.info,  Node: Bit Vector Type,  Next: Function Type,  Prev: Vector Type,  Up: Programming Types
-
-Bit Vector Type
----------------
-
-   A "bit vector" is a one-dimensional array of 1's and 0's.  It takes
-a constant amount of time to access any element of a bit vector, as for
-vectors.  Bit vectors have an extremely compact internal representation
-(one machine bit per element), which makes them ideal for keeping track
-of unordered sets, large collections of boolean values, etc.
-
-   The printed representation of a bit vector consists of `#*' followed
-by the bits in the vector.  This is also the read syntax.  Like
-numbers, strings, and vectors, bit vectors are considered constants for
-evaluation.
-
-     #*00101000      ; A bit vector of eight elements.
-          => #*00101000
-
-   *Note Bit Vectors::, for functions that work with bit vectors.
-
-\1f
-File: lispref.info,  Node: Function Type,  Next: Macro Type,  Prev: Bit Vector Type,  Up: Programming Types
-
-Function Type
--------------
-
-   Just as functions in other programming languages are executable,
-"Lisp function" objects are pieces of executable code.  However,
-functions in Lisp are primarily Lisp objects, and only secondarily the
-text which represents them.  These Lisp objects are lambda expressions:
-lists whose first element is the symbol `lambda' (*note Lambda
-Expressions::).
-
-   In most programming languages, it is impossible to have a function
-without a name.  In Lisp, a function has no intrinsic name.  A lambda
-expression is also called an "anonymous function" (*note Anonymous
-Functions::).  A named function in Lisp is actually a symbol with a
-valid function in its function cell (*note Defining Functions::).
-
-   Most of the time, functions are called when their names are written
-in Lisp expressions in Lisp programs.  However, you can construct or
-obtain a function object at run time and then call it with the primitive
-functions `funcall' and `apply'.  *Note Calling Functions::.
-
-\1f
-File: lispref.info,  Node: Macro Type,  Next: Primitive Function Type,  Prev: Function Type,  Up: Programming Types
-
-Macro Type
-----------
-
-   A "Lisp macro" is a user-defined construct that extends the Lisp
-language.  It is represented as an object much like a function, but with
-different parameter-passing semantics.  A Lisp macro has the form of a
-list whose first element is the symbol `macro' and whose CDR is a Lisp
-function object, including the `lambda' symbol.
-
-   Lisp macro objects are usually defined with the built-in `defmacro'
-function, but any list that begins with `macro' is a macro as far as
-XEmacs is concerned.  *Note Macros::, for an explanation of how to
-write a macro.
-
-\1f
-File: lispref.info,  Node: Primitive Function Type,  Next: Compiled-Function Type,  Prev: Macro Type,  Up: Programming Types
-
-Primitive Function Type
------------------------
-
-   A "primitive function" is a function callable from Lisp but written
-in the C programming language.  Primitive functions are also called
-"subrs" or "built-in functions".  (The word "subr" is derived from
-"subroutine".)  Most primitive functions evaluate all their arguments
-when they are called.  A primitive function that does not evaluate all
-its arguments is called a "special form" (*note Special Forms::).
-
-   It does not matter to the caller of a function whether the function
-is primitive.  However, this does matter if you try to substitute a
-function written in Lisp for a primitive of the same name.  The reason
-is that the primitive function may be called directly from C code.
-Calls to the redefined function from Lisp will use the new definition,
-but calls from C code may still use the built-in definition.
-
-   The term "function" refers to all Emacs functions, whether written
-in Lisp or C.  *Note Function Type::, for information about the
-functions written in Lisp.
-
-   Primitive functions have no read syntax and print in hash notation
-with the name of the subroutine.
-
-     (symbol-function 'car)          ; Access the function cell
-                                     ;   of the symbol.
-          => #<subr car>
-     (subrp (symbol-function 'car))  ; Is this a primitive function?
-          => t                       ; Yes.
-
-\1f
-File: lispref.info,  Node: Compiled-Function Type,  Next: Autoload Type,  Prev: Primitive Function Type,  Up: Programming Types
-
-Compiled-Function Type
-----------------------
-
-   The byte compiler produces "compiled-function objects".  The
-evaluator handles this data type specially when it appears as a function
-to be called.  *Note Byte Compilation::, for information about the byte
-compiler.
-
-   The printed representation for a compiled-function object is normally
-`#<compiled-function...>'.  If `print-readably' is true, however, it is
-`#[...]'.
-
-\1f
-File: lispref.info,  Node: Autoload Type,  Next: Char Table Type,  Prev: Compiled-Function Type,  Up: Programming Types
-
-Autoload Type
--------------
-
-   An "autoload object" is a list whose first element is the symbol
-`autoload'.  It is stored as the function definition of a symbol as a
-placeholder for the real definition; it says that the real definition
-is found in a file of Lisp code that should be loaded when necessary.
-The autoload object contains the name of the file, plus some other
-information about the real definition.
-
-   After the file has been loaded, the symbol should have a new function
-definition that is not an autoload object.  The new definition is then
-called as if it had been there to begin with.  From the user's point of
-view, the function call works as expected, using the function definition
-in the loaded file.
-
-   An autoload object is usually created with the function `autoload',
-which stores the object in the function cell of a symbol.  *Note
-Autoload::, for more details.
-
-\1f
-File: lispref.info,  Node: Char Table Type,  Next: Hash Table Type,  Prev: Autoload Type,  Up: Programming Types
-
-Char Table Type
----------------
-
-   (not yet documented)
-
-\1f
-File: lispref.info,  Node: Hash Table Type,  Next: Range Table Type,  Prev: Char Table Type,  Up: Programming Types
-
-Hash Table Type
----------------
-
-   A "hash table" is a table providing an arbitrary mapping from one
-Lisp object to another, using an internal indexing method called
-"hashing".  Hash tables are very fast (much more efficient that using
-an association list, when there are a large number of elements in the
-table).
-
-   Hash tables have a special read syntax beginning with
-`#s(hash-table' (this is an example of "structure" read syntax.  This
-notation is also used for printing when `print-readably' is `t'.
-
-   Otherwise they print in hash notation (The "hash" in "hash notation"
-has nothing to do with the "hash" in "hash table"), giving the number
-of elements, total space allocated for elements, and a unique number
-assigned at the time the hash table was created. (Hash tables
-automatically resize as necessary so there is no danger of running out
-of space for elements.)
-
-     (make-hash-table :size 50)
-          => #<hash-table 0/107 0x313a>
-
-   *Note Hash Tables::, for information on how to create and work with
-hash tables.
-
-\1f
-File: lispref.info,  Node: Range Table Type,  Next: Weak List Type,  Prev: Hash Table Type,  Up: Programming Types
-
-Range Table Type
-----------------
-
-   A "range table" is a table that maps from ranges of integers to
-arbitrary Lisp objects.  Range tables automatically combine overlapping
-ranges that map to the same Lisp object, and operations are provided
-for mapping over all of the ranges in a range table.
-
-   Range tables have a special read syntax beginning with
-`#s(range-table' (this is an example of "structure" read syntax, which
-is also used for char tables and faces).
-
-     (setq x (make-range-table))
-     (put-range-table 20 50 'foo x)
-     (put-range-table 100 200 "bar" x)
-     x
-          => #s(range-table data ((20 50) foo (100 200) "bar"))
-
-   *Note Range Tables::, for information on how to create and work with
-range tables.
-
-\1f
-File: lispref.info,  Node: Weak List Type,  Prev: Range Table Type,  Up: Programming Types
-
-Weak List Type
---------------
-
-   (not yet documented)
-
-\1f
-File: lispref.info,  Node: Editing Types,  Next: Window-System Types,  Prev: Programming Types,  Up: Lisp Data Types
-
-Editing Types
-=============
-
-   The types in the previous section are common to many Lisp dialects.
-XEmacs Lisp provides several additional data types for purposes
-connected with editing.
-
-* Menu:
-
-* Buffer Type::         The basic object of editing.
-* Marker Type::         A position in a buffer.
-* Extent Type::         A range in a buffer or string, maybe with properties.
-* Window Type::         Buffers are displayed in windows.
-* Frame Type::         Windows subdivide frames.
-* Device Type::         Devices group all frames on a display.
-* Console Type::        Consoles group all devices with the same keyboard.
-* Window Configuration Type::   Recording the way a frame is subdivided.
-* Event Type::          An interesting occurrence in the system.
-* Process Type::        A process running on the underlying OS.
-* Stream Type::         Receive or send characters.
-* Keymap Type::         What function a keystroke invokes.
-* Syntax Table Type::   What a character means.
-* Display Table Type::  How display tables are represented.
-* Database Type::       A connection to an external DBM or DB database.
-* Charset Type::        A character set (e.g. all Kanji characters),
-                          under XEmacs/MULE.
-* Coding System Type::  An object encapsulating a way of converting between
-                          different textual encodings, under XEmacs/MULE.
-* ToolTalk Message Type:: A message, in the ToolTalk IPC protocol.
-* ToolTalk Pattern Type:: A pattern, in the ToolTalk IPC protocol.
-
-\1f
-File: lispref.info,  Node: Buffer Type,  Next: Marker Type,  Up: Editing Types
-
-Buffer Type
------------
-
-   A "buffer" is an object that holds text that can be edited (*note
-Buffers::).  Most buffers hold the contents of a disk file (*note
-Files::) so they can be edited, but some are used for other purposes.
-Most buffers are also meant to be seen by the user, and therefore
-displayed, at some time, in a window (*note Windows::).  But a buffer
-need not be displayed in any window.
-
-   The contents of a buffer are much like a string, but buffers are not
-used like strings in XEmacs Lisp, and the available operations are
-different.  For example, insertion of text into a buffer is very
-efficient, whereas "inserting" text into a string requires
-concatenating substrings, and the result is an entirely new string
-object.
-
-   Each buffer has a designated position called "point" (*note
-Positions::).  At any time, one buffer is the "current buffer".  Most
-editing commands act on the contents of the current buffer in the
-neighborhood of point.  Many of the standard Emacs functions manipulate
-or test the characters in the current buffer; a whole chapter in this
-manual is devoted to describing these functions (*note Text::).
-
-   Several other data structures are associated with each buffer:
-
-   * a local syntax table (*note Syntax Tables::);
-
-   * a local keymap (*note Keymaps::);
-
-   * a local variable binding list (*note Buffer-Local Variables::);
-
-   * a list of extents (*note Extents::);
-
-   * and various other related properties.
-
-The local keymap and variable list contain entries that individually
-override global bindings or values.  These are used to customize the
-behavior of programs in different buffers, without actually changing the
-programs.
-
-   A buffer may be "indirect", which means it shares the text of
-another buffer.  *Note Indirect Buffers::.
-
-   Buffers have no read syntax.  They print in hash notation, showing
-the buffer name.
-
-     (current-buffer)
-          => #<buffer "objects.texi">
-
-\1f
-File: lispref.info,  Node: Marker Type,  Next: Extent Type,  Prev: Buffer Type,  Up: Editing Types
-
-Marker Type
------------
-
-   A "marker" denotes a position in a specific buffer.  Markers
-therefore have two components: one for the buffer, and one for the
-position.  Changes in the buffer's text automatically relocate the
-position value as necessary to ensure that the marker always points
-between the same two characters in the buffer.
-
-   Markers have no read syntax.  They print in hash notation, giving the
-current character position and the name of the buffer.
-
-     (point-marker)
-          => #<marker at 50661 in objects.texi>
-
-   *Note Markers::, for information on how to test, create, copy, and
-move markers.
-
-\1f
-File: lispref.info,  Node: Extent Type,  Next: Window Type,  Prev: Marker Type,  Up: Editing Types
-
-Extent Type
------------
-
-   An "extent" specifies temporary alteration of the display appearance
-of a part of a buffer (or string).  It contains markers delimiting a
-range of the buffer, plus a property list (a list whose elements are
-alternating property names and values).  Extents are used to present
-parts of the buffer temporarily in a different display style.  They
-have no read syntax, and print in hash notation, giving the buffer name
-and range of positions.
-
-   Extents can exist over strings as well as buffers; the primary use
-of this is to preserve extent and text property information as text is
-copied from one buffer to another or between different parts of a
-buffer.
-
-   Extents have no read syntax.  They print in hash notation, giving the
-range of text they cover, the name of the buffer or string they are in,
-the address in core, and a summary of some of the properties attached to
-the extent.
-
-     (extent-at (point))
-          => #<extent [51742, 51748) font-lock text-prop 0x90121e0 in buffer objects.texi>
-
-   *Note Extents::, for how to create and use extents.
-
-   Extents are used to implement text properties.  *Note Text
-Properties::.
-
-\1f
-File: lispref.info,  Node: Window Type,  Next: Frame Type,  Prev: Extent Type,  Up: Editing Types
-
-Window Type
------------
-
-   A "window" describes the portion of the frame that XEmacs uses to
-display a buffer. (In standard window-system usage, a "window" is what
-XEmacs calls a "frame"; XEmacs confusingly uses the term "window" to
-refer to what is called a "pane" in standard window-system usage.)
-Every window has one associated buffer, whose contents appear in the
-window.  By contrast, a given buffer may appear in one window, no
-window, or several windows.
-
-   Though many windows may exist simultaneously, at any time one window
-is designated the "selected window".  This is the window where the
-cursor is (usually) displayed when XEmacs is ready for a command.  The
-selected window usually displays the current buffer, but this is not
-necessarily the case.
-
-   Windows are grouped on the screen into frames; each window belongs to
-one and only one frame.  *Note Frame Type::.
-
-   Windows have no read syntax.  They print in hash notation, giving the
-name of the buffer being displayed and a unique number assigned at the
-time the window was created. (This number can be useful because the
-buffer displayed in any given window can change frequently.)
-
-     (selected-window)
-          => #<window on "objects.texi" 0x266c>
-
-   *Note Windows::, for a description of the functions that work on
-windows.
-
-\1f
-File: lispref.info,  Node: Frame Type,  Next: Device Type,  Prev: Window Type,  Up: Editing Types
-
-Frame Type
-----------
-
-   A FRAME is a rectangle on the screen (a "window" in standard
-window-system terminology) that contains one or more non-overlapping
-Emacs windows ("panes" in standard window-system terminology).  A frame
-initially contains a single main window (plus perhaps a minibuffer
-window) which you can subdivide vertically or horizontally into smaller
-windows.
-
-   Frames have no read syntax.  They print in hash notation, giving the
-frame's type, name as used for resourcing, and a unique number assigned
-at the time the frame was created.
-
-     (selected-frame)
-          => #<x-frame "emacs" 0x9db>
-
-   *Note Frames::, for a description of the functions that work on
-frames.
-
-\1f
-File: lispref.info,  Node: Device Type,  Next: Console Type,  Prev: Frame Type,  Up: Editing Types
-
-Device Type
------------
-
-   A "device" represents a single display on which frames exist.
-Normally, there is only one device object, but there may be more than
-one if XEmacs is being run on a multi-headed display (e.g. an X server
-with attached color and mono screens) or if XEmacs is simultaneously
-driving frames attached to different consoles, e.g.  an X display and a
-TTY connection.
-
-   Devices do not have a read syntax.  They print in hash notation,
-giving the device's type, connection name, and a unique number assigned
-at the time the device was created.
-
-     (selected-device)
-          => #<x-device on ":0.0" 0x5b9>
-
-   *Note Consoles and Devices::, for a description of several functions
-related to devices.
-
-\1f
-File: lispref.info,  Node: Console Type,  Next: Window Configuration Type,  Prev: Device Type,  Up: Editing Types
-
-Console Type
-------------
-
-   A "console" represents a single keyboard to which devices (i.e.
-displays on which frames exist) are connected.  Normally, there is only
-one console object, but there may be more than one if XEmacs is
-simultaneously driving frames attached to different X servers and/or
-TTY connections. (XEmacs is capable of driving multiple X and TTY
-connections at the same time, and provides a robust mechanism for
-handling the differing display capabilities of such heterogeneous
-environments.  A buffer with embedded glyphs and multiple fonts and
-colors, for example, will display reasonably if it simultaneously
-appears on a frame on a color X display, a frame on a mono X display,
-and a frame on a TTY connection.)
-
-   Consoles do not have a read syntax.  They print in hash notation,
-giving the console's type, connection name, and a unique number assigned
-at the time the console was created.
-
-     (selected-console)
-          => #<x-console on "localhost:0" 0x5b7>
-
-   *Note Consoles and Devices::, for a description of several functions
-related to consoles.
-
-\1f
-File: lispref.info,  Node: Window Configuration Type,  Next: Event Type,  Prev: Console Type,  Up: Editing Types
-
-Window Configuration Type
--------------------------
-
-   A "window configuration" stores information about the positions,
-sizes, and contents of the windows in a frame, so you can recreate the
-same arrangement of windows later.
-
-   Window configurations do not have a read syntax.  They print in hash
-notation, giving a unique number assigned at the time the window
-configuration was created.
-
-     (current-window-configuration)
-          => #<window-configuration 0x2db4>
-
-   *Note Window Configurations::, for a description of several functions
-related to window configurations.
-
-\1f
-File: lispref.info,  Node: Event Type,  Next: Process Type,  Prev: Window Configuration Type,  Up: Editing Types
-
-Event Type
-----------
-
-   (not yet documented)
-
-\1f
-File: lispref.info,  Node: Process Type,  Next: Stream Type,  Prev: Event Type,  Up: Editing Types
-
-Process Type
-------------
-
-   The word "process" usually means a running program.  XEmacs itself
-runs in a process of this sort.  However, in XEmacs Lisp, a process is a
-Lisp object that designates a subprocess created by the XEmacs process.
-Programs such as shells, GDB, ftp, and compilers, running in
-subprocesses of XEmacs, extend the capabilities of XEmacs.
-
-   An Emacs subprocess takes textual input from Emacs and returns
-textual output to Emacs for further manipulation.  Emacs can also send
-signals to the subprocess.
-
-   Process objects have no read syntax.  They print in hash notation,
-giving the name of the process, its associated process ID, and the
-current state of the process:
-
-     (process-list)
-          => (#<process "shell" pid 2909 state:run>)
-
-   *Note Processes::, for information about functions that create,
-delete, return information about, send input or signals to, and receive
-output from processes.
-
-\1f
-File: lispref.info,  Node: Stream Type,  Next: Keymap Type,  Prev: Process Type,  Up: Editing Types
-
-Stream Type
------------
-
-   A "stream" is an object that can be used as a source or sink for
-characters--either to supply characters for input or to accept them as
-output.  Many different types can be used this way: markers, buffers,
-strings, and functions.  Most often, input streams (character sources)
-obtain characters from the keyboard, a buffer, or a file, and output
-streams (character sinks) send characters to a buffer, such as a
-`*Help*' buffer, or to the echo area.
-
-   The object `nil', in addition to its other meanings, may be used as
-a stream.  It stands for the value of the variable `standard-input' or
-`standard-output'.  Also, the object `t' as a stream specifies input
-using the minibuffer (*note Minibuffers::) or output in the echo area
-(*note The Echo Area::).
-
-   Streams have no special printed representation or read syntax, and
-print as whatever primitive type they are.
-
-   *Note Read and Print::, for a description of functions related to
-streams, including parsing and printing functions.
-
-\1f
-File: lispref.info,  Node: Keymap Type,  Next: Syntax Table Type,  Prev: Stream Type,  Up: Editing Types
-
-Keymap Type
------------
-
-   A "keymap" maps keys typed by the user to commands.  This mapping
-controls how the user's command input is executed.
-
-   NOTE: In XEmacs, a keymap is a separate primitive type.  In FSF GNU
-Emacs, a keymap is actually a list whose CAR is the symbol `keymap'.
-
-   *Note Keymaps::, for information about creating keymaps, handling
-prefix keys, local as well as global keymaps, and changing key bindings.
-
-\1f
-File: lispref.info,  Node: Syntax Table Type,  Next: Display Table Type,  Prev: Keymap Type,  Up: Editing Types
-
-Syntax Table Type
------------------
-
-   Under XEmacs 20, a "syntax table" is a particular type of char
-table.  Under XEmacs 19, a syntax table a vector of 256 integers.  In
-both cases, each element defines how one character is interpreted when
-it appears in a buffer.  For example, in C mode (*note Major Modes::),
-the `+' character is punctuation, but in Lisp mode it is a valid
-character in a symbol.  These modes specify different interpretations by
-changing the syntax table entry for `+'.
-
-   Syntax tables are used only for scanning text in buffers, not for
-reading Lisp expressions.  The table the Lisp interpreter uses to read
-expressions is built into the XEmacs source code and cannot be changed;
-thus, to change the list delimiters to be `{' and `}' instead of `('
-and `)' would be impossible.
-
-   *Note Syntax Tables::, for details about syntax classes and how to
-make and modify syntax tables.
-
-\1f
-File: lispref.info,  Node: Display Table Type,  Next: Database Type,  Prev: Syntax Table Type,  Up: Editing Types
-
-Display Table Type
-------------------
-
-   A "display table" specifies how to display each character code.
-Each buffer and each window can have its own display table.  A display
-table is actually a vector of length 256, although in XEmacs 20 this may
-change to be a particular type of char table.  *Note Display Tables::.
-
-\1f
-File: lispref.info,  Node: Database Type,  Next: Charset Type,  Prev: Display Table Type,  Up: Editing Types
-
-Database Type
--------------
-
-   (not yet documented)
-
-\1f
-File: lispref.info,  Node: Charset Type,  Next: Coding System Type,  Prev: Database Type,  Up: Editing Types
-
-Charset Type
-------------
-
-   (not yet documented)
-
-\1f
-File: lispref.info,  Node: Coding System Type,  Next: ToolTalk Message Type,  Prev: Charset Type,  Up: Editing Types
-
-Coding System Type
-------------------
-
-   (not yet documented)
-
-\1f
-File: lispref.info,  Node: ToolTalk Message Type,  Next: ToolTalk Pattern Type,  Prev: Coding System Type,  Up: Editing Types
-
-ToolTalk Message Type
----------------------
-
-   (not yet documented)
-
-\1f
-File: lispref.info,  Node: ToolTalk Pattern Type,  Prev: ToolTalk Message Type,  Up: Editing Types
-
-ToolTalk Pattern Type
----------------------
-
-   (not yet documented)
-
-\1f
-File: lispref.info,  Node: Window-System Types,  Next: Type Predicates,  Prev: Editing Types,  Up: Lisp Data Types
-
-Window-System Types
-===================
-
-   XEmacs also has some types that represent objects such as faces
-(collections of display characters), fonts, and pixmaps that are
-commonly found in windowing systems.
-
-* Menu:
-
-* Face Type::           A collection of display characteristics.
-* Glyph Type::          An image appearing in a buffer or elsewhere.
-* Specifier Type::      A way of controlling display characteristics on
-                          a per-buffer, -frame, -window, or -device level.
-* Font Instance Type::  The way a font appears on a particular device.
-* Color Instance Type:: The way a color appears on a particular device.
-* Image Instance Type:: The way an image appears on a particular device.
-* Toolbar Button Type:: An object representing a button in a toolbar.
-* Subwindow Type::      An externally-controlled window-system window
-                          appearing in a buffer.
-* X Resource Type::     A miscellaneous X resource, if Epoch support was
-                          compiled into XEmacs.
-
-\1f
-File: lispref.info,  Node: Face Type,  Next: Glyph Type,  Up: Window-System Types
-
-Face Type
----------
-
-   (not yet documented)
-
-\1f
-File: lispref.info,  Node: Glyph Type,  Next: Specifier Type,  Prev: Face Type,  Up: Window-System Types
-
-Glyph Type
-----------
-
-   (not yet documented)
-