annotate man/lispref/intro.texi @ 4934:714f7c9fabb1

make it easier to debug staticpro crashes. Add functions to print out the variable names saved during calls to staticpro(), and change the order of enumerating staticpros to start from 0 to make it easier to get a count to pass to the new functions.
author Ben Wing <ben@xemacs.org>
date Tue, 19 Jan 2010 01:21:39 -0600
parents b05e2a249757
children 755ae5b97edb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 @c -*-texinfo-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @c This is part of the XEmacs Lisp Reference Manual.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @c See the file lispref.texi for copying conditions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @setfilename ../../info/intro.info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 @node Copying, Introduction, Top, Top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 @unnumbered GNU GENERAL PUBLIC LICENSE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 @center Version 2, June 1991
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 @display
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 675 Mass Ave, Cambridge, MA 02139, USA
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 Everyone is permitted to copy and distribute verbatim copies
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 of this license document, but changing it is not allowed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 @end display
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 @unnumberedsec Preamble
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 The licenses for most software are designed to take away your
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 freedom to share and change it. By contrast, the GNU General Public
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 License is intended to guarantee your freedom to share and change free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 software---to make sure the software is free for all its users. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 General Public License applies to most of the Free Software
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 Foundation's software and to any other program whose authors commit to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 using it. (Some other Free Software Foundation software is covered by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 the GNU Library General Public License instead.) You can apply it to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 your programs, too.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 When we speak of free software, we are referring to freedom, not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 price. Our General Public Licenses are designed to make sure that you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 have the freedom to distribute copies of free software (and charge for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 this service if you wish), that you receive source code or can get it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 if you want it, that you can change the software or use pieces of it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 in new free programs; and that you know you can do these things.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 To protect your rights, we need to make restrictions that forbid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 anyone to deny you these rights or to ask you to surrender the rights.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 These restrictions translate to certain responsibilities for you if you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 distribute copies of the software, or if you modify it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 For example, if you distribute copies of such a program, whether
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 gratis or for a fee, you must give the recipients all the rights that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 you have. You must make sure that they, too, receive or can get the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 source code. And you must show them these terms so they know their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 rights.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 We protect your rights with two steps: (1) copyright the software, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 (2) offer you this license which gives you legal permission to copy,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 distribute and/or modify the software.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 Also, for each author's protection and ours, we want to make certain
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 that everyone understands that there is no warranty for this free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 software. If the software is modified by someone else and passed on, we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 want its recipients to know that what they have is not the original, so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 that any problems introduced by others will not reflect on the original
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 authors' reputations.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 Finally, any free program is threatened constantly by software
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 patents. We wish to avoid the danger that redistributors of a free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 program will individually obtain patent licenses, in effect making the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 program proprietary. To prevent this, we have made it clear that any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 patent must be licensed for everyone's free use or not licensed at all.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 The precise terms and conditions for copying, distribution and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 modification follow.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 @unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 @enumerate 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 This License applies to any program or other work which contains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 a notice placed by the copyright holder saying it may be distributed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 under the terms of this General Public License. The ``Program'', below,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 refers to any such program or work, and a ``work based on the Program''
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 means either the Program or any derivative work under copyright law:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 that is to say, a work containing the Program or a portion of it,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 either verbatim or with modifications and/or translated into another
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 language. (Hereinafter, translation is included without limitation in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 the term ``modification''.) Each licensee is addressed as ``you''.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 Activities other than copying, distribution and modification are not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 covered by this License; they are outside its scope. The act of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 running the Program is not restricted, and the output from the Program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 is covered only if its contents constitute a work based on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 Program (independent of having been made by running the Program).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 Whether that is true depends on what the Program does.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 You may copy and distribute verbatim copies of the Program's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 source code as you receive it, in any medium, provided that you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 conspicuously and appropriately publish on each copy an appropriate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 copyright notice and disclaimer of warranty; keep intact all the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 notices that refer to this License and to the absence of any warranty;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 and give any other recipients of the Program a copy of this License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 along with the Program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 You may charge a fee for the physical act of transferring a copy, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 you may at your option offer warranty protection in exchange for a fee.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 You may modify your copy or copies of the Program or any portion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 of it, thus forming a work based on the Program, and copy and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 distribute such modifications or work under the terms of Section 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 above, provided that you also meet all of these conditions:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 @enumerate a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 You must cause the modified files to carry prominent notices
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 stating that you changed the files and the date of any change.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 You must cause any work that you distribute or publish, that in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 whole or in part contains or is derived from the Program or any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 part thereof, to be licensed as a whole at no charge to all third
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 parties under the terms of this License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 If the modified program normally reads commands interactively
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 when run, you must cause it, when started running for such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 interactive use in the most ordinary way, to print or display an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 announcement including an appropriate copyright notice and a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 notice that there is no warranty (or else, saying that you provide
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 a warranty) and that users may redistribute the program under
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 these conditions, and telling the user how to view a copy of this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 License. (Exception: if the Program itself is interactive but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 does not normally print such an announcement, your work based on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 the Program is not required to print an announcement.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 These requirements apply to the modified work as a whole. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 identifiable sections of that work are not derived from the Program,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 and can be reasonably considered independent and separate works in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 themselves, then this License, and its terms, do not apply to those
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 sections when you distribute them as separate works. But when you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 distribute the same sections as part of a whole which is a work based
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 on the Program, the distribution of the whole must be on the terms of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 this License, whose permissions for other licensees extend to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 entire whole, and thus to each and every part regardless of who wrote it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 Thus, it is not the intent of this section to claim rights or contest
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 your rights to work written entirely by you; rather, the intent is to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 exercise the right to control the distribution of derivative or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 collective works based on the Program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 In addition, mere aggregation of another work not based on the Program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 with the Program (or with a work based on the Program) on a volume of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 a storage or distribution medium does not bring the other work under
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 the scope of this License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 You may copy and distribute the Program (or a work based on it,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 under Section 2) in object code or executable form under the terms of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 Sections 1 and 2 above provided that you also do one of the following:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 @enumerate a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 Accompany it with the complete corresponding machine-readable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 source code, which must be distributed under the terms of Sections
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 1 and 2 above on a medium customarily used for software interchange; or,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 Accompany it with a written offer, valid for at least three
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 years, to give any third party, for a charge no more than your
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 cost of physically performing source distribution, a complete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 machine-readable copy of the corresponding source code, to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 distributed under the terms of Sections 1 and 2 above on a medium
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 customarily used for software interchange; or,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 Accompany it with the information you received as to the offer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 to distribute corresponding source code. (This alternative is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 allowed only for noncommercial distribution and only if you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 received the program in object code or executable form with such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 an offer, in accord with Subsection b above.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 The source code for a work means the preferred form of the work for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 making modifications to it. For an executable work, complete source
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 code means all the source code for all modules it contains, plus any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 associated interface definition files, plus the scripts used to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 control compilation and installation of the executable. However, as a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 special exception, the source code distributed need not include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 anything that is normally distributed (in either source or binary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 form) with the major components (compiler, kernel, and so on) of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 operating system on which the executable runs, unless that component
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 itself accompanies the executable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 If distribution of executable or object code is made by offering
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 access to copy from a designated place, then offering equivalent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 access to copy the source code from the same place counts as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 distribution of the source code, even though third parties are not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 compelled to copy the source along with the object code.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 You may not copy, modify, sublicense, or distribute the Program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 except as expressly provided under this License. Any attempt
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 otherwise to copy, modify, sublicense or distribute the Program is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 void, and will automatically terminate your rights under this License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 However, parties who have received copies, or rights, from you under
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 this License will not have their licenses terminated so long as such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 parties remain in full compliance.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 You are not required to accept this License, since you have not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 signed it. However, nothing else grants you permission to modify or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 distribute the Program or its derivative works. These actions are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 prohibited by law if you do not accept this License. Therefore, by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 modifying or distributing the Program (or any work based on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 Program), you indicate your acceptance of this License to do so, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 all its terms and conditions for copying, distributing or modifying
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 the Program or works based on it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 Each time you redistribute the Program (or any work based on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 Program), the recipient automatically receives a license from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 original licensor to copy, distribute or modify the Program subject to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 these terms and conditions. You may not impose any further
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 restrictions on the recipients' exercise of the rights granted herein.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 You are not responsible for enforcing compliance by third parties to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 this License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 If, as a consequence of a court judgment or allegation of patent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 infringement or for any other reason (not limited to patent issues),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 conditions are imposed on you (whether by court order, agreement or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 otherwise) that contradict the conditions of this License, they do not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 excuse you from the conditions of this License. If you cannot
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 distribute so as to satisfy simultaneously your obligations under this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 License and any other pertinent obligations, then as a consequence you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 may not distribute the Program at all. For example, if a patent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 license would not permit royalty-free redistribution of the Program by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 all those who receive copies directly or indirectly through you, then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 the only way you could satisfy both it and this License would be to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 refrain entirely from distribution of the Program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 If any portion of this section is held invalid or unenforceable under
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 any particular circumstance, the balance of the section is intended to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 apply and the section as a whole is intended to apply in other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 circumstances.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 It is not the purpose of this section to induce you to infringe any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 patents or other property right claims or to contest validity of any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 such claims; this section has the sole purpose of protecting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 integrity of the free software distribution system, which is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 implemented by public license practices. Many people have made
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 generous contributions to the wide range of software distributed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 through that system in reliance on consistent application of that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 system; it is up to the author/donor to decide if he or she is willing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 to distribute software through any other system and a licensee cannot
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 impose that choice.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 This section is intended to make thoroughly clear what is believed to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 be a consequence of the rest of this License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 If the distribution and/or use of the Program is restricted in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 certain countries either by patents or by copyrighted interfaces, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 original copyright holder who places the Program under this License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 may add an explicit geographical distribution limitation excluding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 those countries, so that distribution is permitted only in or among
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 countries not thus excluded. In such case, this License incorporates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 the limitation as if written in the body of this License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 The Free Software Foundation may publish revised and/or new versions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 of the General Public License from time to time. Such new versions will
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 be similar in spirit to the present version, but may differ in detail to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 address new problems or concerns.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 Each version is given a distinguishing version number. If the Program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 specifies a version number of this License which applies to it and ``any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 later version'', you have the option of following the terms and conditions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 either of that version or of any later version published by the Free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 Software Foundation. If the Program does not specify a version number of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 this License, you may choose any version ever published by the Free Software
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 Foundation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 If you wish to incorporate parts of the Program into other free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 programs whose distribution conditions are different, write to the author
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 to ask for permission. For software which is copyrighted by the Free
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 Software Foundation, write to the Free Software Foundation; we sometimes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 make exceptions for this. Our decision will be guided by the two goals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 of preserving the free status of all derivatives of our free software and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 of promoting the sharing and reuse of software generally.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 @heading NO WARRANTY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 @center NO WARRANTY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW@. EXCEPT WHEN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE@. THE ENTIRE RISK AS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU@. SHOULD THE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 REPAIR OR CORRECTION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 POSSIBILITY OF SUCH DAMAGES.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 @heading END OF TERMS AND CONDITIONS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 @center END OF TERMS AND CONDITIONS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 @page
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 @unnumberedsec How to Apply These Terms to Your New Programs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 If you develop a new program, and you want it to be of the greatest
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 possible use to the public, the best way to achieve this is to make it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 free software which everyone can redistribute and change under these terms.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 To do so, attach the following notices to the program. It is safest
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 to attach them to the start of each source file to most effectively
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 convey the exclusion of warranty; and each file should have at least
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 the ``copyright'' line and a pointer to where the full notice is found.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 @var{one line to give the program's name and an idea of what it does.}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 Copyright (C) 19@var{yy} @var{name of author}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 This program is free software; you can redistribute it and/or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 modify it under the terms of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 as published by the Free Software Foundation; either version 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 of the License, or (at your option) any later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 This program is distributed in the hope that it will be useful,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 but WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@. See the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 GNU General Public License for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 along with this program; if not, write to the Free Software
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 Also add information on how to contact you by electronic and paper mail.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 If the program is interactive, make it output a short notice like this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 when it starts in an interactive mode:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 type `show w'. This is free software, and you are welcome
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
371 to redistribute it under certain conditions; type `show c'
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 for details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 The hypothetical commands @samp{show w} and @samp{show c} should show
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 the appropriate parts of the General Public License. Of course, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 commands you use may be called something other than @samp{show w} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 @samp{show c}; they could even be mouse-clicks or menu items---whatever
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 suits your program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 You should also get your employer (if you work as a programmer) or your
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 school, if any, to sign a ``copyright disclaimer'' for the program, if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 necessary. Here is a sample; alter the names:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 Yoyodyne, Inc., hereby disclaims all copyright
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 interest in the program `Gnomovision'
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
389 (which makes passes at compilers) written
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 by James Hacker.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 @var{signature of Ty Coon}, 1 April 1989
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 Ty Coon, President of Vice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 This General Public License does not permit incorporating your program into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 proprietary programs. If your program is a subroutine library, you may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 consider it more useful to permit linking proprietary applications with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 library. If this is what you want to do, use the GNU Library General
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 Public License instead of this License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402
693
b05e2a249757 [xemacs-hg @ 2001-12-14 07:50:06 by stephent]
stephent
parents: 444
diff changeset
403 @node Introduction, Packaging, Copying, Top
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 @chapter Introduction
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 Most of the XEmacs text editor is written in the programming
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 language called XEmacs Lisp. You can write new code in XEmacs Lisp and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 install it as an extension to the editor. However, XEmacs Lisp is more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 than a mere ``extension language''; it is a full computer programming
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 language in its own right. You can use it as you would any other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 programming language.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 Because XEmacs Lisp is designed for use in an editor, it has special
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 features for scanning and parsing text as well as features for handling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 files, buffers, displays, subprocesses, and so on. XEmacs Lisp is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 closely integrated with the editing facilities; thus, editing commands
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 are functions that can also conveniently be called from Lisp programs,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 and parameters for customization are ordinary Lisp variables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 This manual describes XEmacs Lisp, presuming considerable familiarity
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 with the use of XEmacs for editing. (See @cite{The XEmacs Reference
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 Manual}, for this basic information.) Generally speaking, the earlier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 chapters describe features of XEmacs Lisp that have counterparts in many
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 programming languages, and later chapters describe features that are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 peculiar to XEmacs Lisp or relate specifically to editing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 This is edition 3.3.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 * Caveats:: Flaws and a request for help.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 * Lisp History:: XEmacs Lisp is descended from Maclisp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 * Conventions:: How the manual is formatted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 * Acknowledgements:: The authors, editors, and sponsors of this manual.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 @node Caveats
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 @section Caveats
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 This manual has gone through numerous drafts. It is nearly complete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 but not flawless. There are a few topics that are not covered, either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 because we consider them secondary (such as most of the individual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 modes) or because they are yet to be written. Because we are not able
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 to deal with them completely, we have left out several parts
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
444 intentionally.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 The manual should be fully correct in what it does cover, and it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 therefore open to criticism on anything it says---from specific examples
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 and descriptive text, to the ordering of chapters and sections. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 something is confusing, or you find that you have to look at the sources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 or experiment to learn something not covered in the manual, then perhaps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 the manual should be fixed. Please let us know.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 As you use the manual, we ask that you mark pages with corrections so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 you can later look them up and send them in. If you think of a simple,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 real-life example for a function or group of functions, please make an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 effort to write it up and send it in. Please reference any comments to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 the chapter name, section name, and function name, as appropriate, since
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 page numbers and chapter and section numbers will change and we may have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 trouble finding the text you are talking about. Also state the number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 of the edition you are criticizing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 As you use this manual, we ask that you send corrections as soon as you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 find them. If you think of a simple, real life example for a function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 or group of functions, please make an effort to write it up and send it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 in. Please reference any comments to the node name and function or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 variable name, as appropriate. Also state the number of the edition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 which you are criticizing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 This manual was originally written for FSF Emacs 19 and was updated by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 Ben Wing (ben@@xemacs.org) for Lucid Emacs 19.10 and later for XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 19.12, 19.13, 19.14, and 20.0. It was further updated by the XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 Development Team for 19.15 and 20.1. Please send comments and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 corrections relating to XEmacs-specific portions of this manual to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 xemacs@@xemacs.org
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 or post to the newsgroup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 comp.emacs.xemacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 @display
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 --Ben Wing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 @end display
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 @node Lisp History
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 @section Lisp History
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 @cindex Lisp history
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 Lisp (LISt Processing language) was first developed in the late 1950's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 at the Massachusetts Institute of Technology for research in artificial
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 intelligence. The great power of the Lisp language makes it superior
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 for other purposes as well, such as writing editing commands.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 @cindex Maclisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 @cindex Common Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 Dozens of Lisp implementations have been built over the years, each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 with its own idiosyncrasies. Many of them were inspired by Maclisp,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 which was written in the 1960's at MIT's Project MAC. Eventually the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 implementors of the descendants of Maclisp came together and developed a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 standard for Lisp systems, called Common Lisp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 XEmacs Lisp is largely inspired by Maclisp, and a little by Common
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 Lisp. If you know Common Lisp, you will notice many similarities.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 However, many of the features of Common Lisp have been omitted or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 simplified in order to reduce the memory requirements of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 Sometimes the simplifications are so drastic that a Common Lisp user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 might be very confused. We will occasionally point out how XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 Lisp differs from Common Lisp. If you don't know Common Lisp, don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 worry about it; this manual is self-contained.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 @node Conventions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 @section Conventions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 This section explains the notational conventions that are used in this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 manual. You may want to skip this section and refer back to it later.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 * Some Terms:: Explanation of terms we use in this manual.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 * nil and t:: How the symbols @code{nil} and @code{t} are used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 * Evaluation Notation:: The format we use for examples of evaluation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 * Printing Notation:: The format we use for examples that print output.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 * Error Messages:: The format we use for examples of errors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 * Buffer Text Notation:: The format we use for buffer contents in examples.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 * Format of Descriptions:: Notation for describing functions, variables, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 @node Some Terms
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 @subsection Some Terms
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 Throughout this manual, the phrases ``the Lisp reader'' and ``the Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 printer'' are used to refer to those routines in Lisp that convert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 textual representations of Lisp objects into actual Lisp objects, and vice
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 versa. @xref{Printed Representation}, for more details. You, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 person reading this manual, are thought of as ``the programmer'' and are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 addressed as ``you''. ``The user'' is the person who uses Lisp programs,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 including those you write.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 @cindex fonts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 Examples of Lisp code appear in this font or form: @code{(list 1 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 3)}. Names that represent arguments or metasyntactic variables appear
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 in this font or form: @var{first-number}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 @node nil and t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 @subsection @code{nil} and @code{t}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 @cindex @code{nil}, uses of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 @cindex truth value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 @cindex boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 @cindex false
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 In Lisp, the symbol @code{nil} has three separate meanings: it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 is a symbol with the name @samp{nil}; it is the logical truth value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 @var{false}; and it is the empty list---the list of zero elements.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 When used as a variable, @code{nil} always has the value @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 As far as the Lisp reader is concerned, @samp{()} and @samp{nil} are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 identical: they stand for the same object, the symbol @code{nil}. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 different ways of writing the symbol are intended entirely for human
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 readers. After the Lisp reader has read either @samp{()} or @samp{nil},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 there is no way to determine which representation was actually written
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 by the programmer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 In this manual, we use @code{()} when we wish to emphasize that it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 means the empty list, and we use @code{nil} when we wish to emphasize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 that it means the truth value @var{false}. That is a good convention to use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 in Lisp programs also.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 (cons 'foo ()) ; @r{Emphasize the empty list}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 (not nil) ; @r{Emphasize the truth value @var{false}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 @cindex @code{t} and truth
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 @cindex true
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 In contexts where a truth value is expected, any non-@code{nil} value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 is considered to be @var{true}. However, @code{t} is the preferred way
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 to represent the truth value @var{true}. When you need to choose a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 value which represents @var{true}, and there is no other basis for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 choosing, use @code{t}. The symbol @code{t} always has value @code{t}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 In XEmacs Lisp, @code{nil} and @code{t} are special symbols that always
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 evaluate to themselves. This is so that you do not need to quote them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 to use them as constants in a program. An attempt to change their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 values results in a @code{setting-constant} error. @xref{Accessing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 Variables}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 @node Evaluation Notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 @subsection Evaluation Notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 @cindex evaluation notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 @cindex documentation notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 A Lisp expression that you can evaluate is called a @dfn{form}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 Evaluating a form always produces a result, which is a Lisp object. In
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 the examples in this manual, this is indicated with @samp{@result{}}:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 (car '(1 2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 @result{} 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 You can read this as ``@code{(car '(1 2))} evaluates to 1''.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 When a form is a macro call, it expands into a new form for Lisp to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 evaluate. We show the result of the expansion with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 @samp{@expansion{}}. We may or may not show the actual result of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 evaluation of the expanded form.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 (news-cadr '(a b c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 @expansion{} (car (cdr '(a b c)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 @result{} b
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 Sometimes to help describe one form we show another form that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 produces identical results. The exact equivalence of two forms is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 indicated with @samp{@equiv{}}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 (cons 'a nil) @equiv{} (list 'a)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 @node Printing Notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 @subsection Printing Notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 @cindex printing notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 Many of the examples in this manual print text when they are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 evaluated. If you execute example code in a Lisp Interaction buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 (such as the buffer @samp{*scratch*}), the printed text is inserted into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 the buffer. If you execute the example by other means (such as by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 evaluating the function @code{eval-region}), the printed text is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 displayed in the echo area. You should be aware that text displayed in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 the echo area is truncated to a single line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 Examples in this manual indicate printed text with @samp{@print{}},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 irrespective of where that text goes. The value returned by evaluating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 the form (here @code{bar}) follows on a separate line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 @group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 (progn (print 'foo) (print 'bar))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 @print{} foo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 @print{} bar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 @result{} bar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 @end group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 @node Error Messages
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 @subsection Error Messages
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 @cindex error message notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 Some examples signal errors. This normally displays an error message
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 in the echo area. We show the error message on a line starting with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 @samp{@error{}}. Note that @samp{@error{}} itself does not appear in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 the echo area.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 (+ 23 'x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 @error{} Wrong type argument: integer-or-marker-p, x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 @node Buffer Text Notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 @subsection Buffer Text Notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 @cindex buffer text notation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 Some examples show modifications to text in a buffer, with ``before''
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 and ``after'' versions of the text. These examples show the contents of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 the buffer in question between two lines of dashes containing the buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 name. In addition, @samp{@point{}} indicates the location of point.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 (The symbol for point, of course, is not part of the text in the buffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 it indicates the place @emph{between} two characters where point is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 located.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 ---------- Buffer: foo ----------
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 This is the @point{}contents of foo.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 ---------- Buffer: foo ----------
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 (insert "changed ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 @result{} nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 ---------- Buffer: foo ----------
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 This is the changed @point{}contents of foo.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 ---------- Buffer: foo ----------
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 @node Format of Descriptions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 @subsection Format of Descriptions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 @cindex description format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 Functions, variables, macros, commands, user options, and special
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 forms are described in this manual in a uniform format. The first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 line of a description contains the name of the item followed by its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 arguments, if any.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 @ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 The category---function, variable, or whatever---appears at the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 beginning of the line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 @end ifinfo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 The category---function, variable, or whatever---is printed next to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 right margin.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 The description follows on succeeding lines, sometimes with examples.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 * A Sample Function Description:: A description of an imaginary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 function, @code{foo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 * A Sample Variable Description:: A description of an imaginary
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 variable,
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 428
diff changeset
715 @code{electric-future-map}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 @node A Sample Function Description
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 @subsubsection A Sample Function Description
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 @cindex function descriptions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 @cindex command descriptions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 @cindex macro descriptions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 @cindex special form descriptions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725 In a function description, the name of the function being described
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 appears first. It is followed on the same line by a list of parameters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 The names used for the parameters are also used in the body of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 description.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 The appearance of the keyword @code{&optional} in the parameter list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 indicates that the arguments for subsequent parameters may be omitted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 (omitted parameters default to @code{nil}). Do not write
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 @code{&optional} when you call the function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 The keyword @code{&rest} (which will always be followed by a single
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 parameter) indicates that any number of arguments can follow. The value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 of the single following parameter will be a list of all these arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 Do not write @code{&rest} when you call the function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740 Here is a description of an imaginary function @code{foo}:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 @defun foo integer1 &optional integer2 &rest integers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 The function @code{foo} subtracts @var{integer1} from @var{integer2},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 then adds all the rest of the arguments to the result. If @var{integer2}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 is not supplied, then the number 19 is used by default.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 (foo 1 5 3 9)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 @result{} 16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 (foo 5)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 @result{} 14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 More generally,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 (foo @var{w} @var{x} @var{y}@dots{})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 @equiv{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 (+ (- @var{x} @var{w}) @var{y}@dots{})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 @end defun
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 Any parameter whose name contains the name of a type (e.g.,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 @var{integer}, @var{integer1} or @var{buffer}) is expected to be of that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 type. A plural of a type (such as @var{buffers}) often means a list of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 objects of that type. Parameters named @var{object} may be of any type.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 (@xref{Lisp Data Types}, for a list of XEmacs object types.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 Parameters with other sorts of names (e.g., @var{new-file}) are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 discussed specifically in the description of the function. In some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 sections, features common to parameters of several functions are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 described at the beginning.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 @xref{Lambda Expressions}, for a more complete description of optional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 and rest arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 Command, macro, and special form descriptions have the same format,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 but the word `Function' is replaced by `Command', `Macro', or `Special
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 Form', respectively. Commands are simply functions that may be called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 interactively; macros process their arguments differently from functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 (the arguments are not evaluated), but are presented the same way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 Special form descriptions use a more complex notation to specify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 optional and repeated parameters because they can break the argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 list down into separate arguments in more complicated ways.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 @samp{@code{@r{[}@var{optional-arg}@r{]}}} means that @var{optional-arg} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 optional and @samp{@var{repeated-args}@dots{}} stands for zero or more
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 arguments. Parentheses are used when several arguments are grouped into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 additional levels of list structure. Here is an example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 @defspec count-loop (@var{var} [@var{from} @var{to} [@var{inc}]]) @var{body}@dots{}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 This imaginary special form implements a loop that executes the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 @var{body} forms and then increments the variable @var{var} on each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 iteration. On the first iteration, the variable has the value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 @var{from}; on subsequent iterations, it is incremented by 1 (or by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 @var{inc} if that is given). The loop exits before executing @var{body}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 if @var{var} equals @var{to}. Here is an example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 (count-loop (i 0 10)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 (prin1 i) (princ " ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 (prin1 (aref vector i)) (terpri))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 If @var{from} and @var{to} are omitted, then @var{var} is bound to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 @code{nil} before the loop begins, and the loop exits if @var{var} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 non-@code{nil} at the beginning of an iteration. Here is an example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 (count-loop (done)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 (if (pending)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 (fixit)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 (setq done t)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 In this special form, the arguments @var{from} and @var{to} are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 optional, but must both be present or both absent. If they are present,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 @var{inc} may optionally be specified as well. These arguments are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 grouped with the argument @var{var} into a list, to distinguish them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 from @var{body}, which includes all remaining elements of the form.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 @end defspec
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 @node A Sample Variable Description
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 @subsubsection A Sample Variable Description
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 @cindex variable descriptions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 @cindex option descriptions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 A @dfn{variable} is a name that can hold a value. Although any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 variable can be set by the user, certain variables that exist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 specifically so that users can change them are called @dfn{user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 options}. Ordinary variables and user options are described using a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 format like that for functions except that there are no arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 Here is a description of the imaginary @code{electric-future-map}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 variable.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 @defvar electric-future-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 The value of this variable is a full keymap used by Electric Command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 Future mode. The functions in this map allow you to edit commands you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 have not yet thought about executing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 @end defvar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 User option descriptions have the same format, but `Variable' is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 replaced by `User Option'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 @node Acknowledgements
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 @section Acknowledgements
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 This manual was based on the GNU Emacs Lisp Reference Manual, version
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 2.4, written by Robert Krawitz, Bil Lewis, Dan LaLiberte, Richard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850 M. Stallman and Chris Welty, the volunteers of the GNU manual group, in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 an effort extending over several years. Robert J. Chassell helped to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 review and edit the manual, with the support of the Defense Advanced
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 Research Projects Agency, ARPA Order 6082, arranged by Warren A. Hunt,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854 Jr. of Computational Logic, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 Ben Wing adapted this manual for XEmacs 19.14 and 20.0, and earlier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 for Lucid Emacs 19.10, XEmacs 19.12, and XEmacs 19.13. He is the sole
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 author of many of the manual sections, in particular the XEmacs-specific
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 sections: events, faces, extents, glyphs, specifiers, toolbar, menubars,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 scrollbars, dialog boxes, devices, consoles, hash tables, range tables,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 char tables, databases, and others. The section on annotations was
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 originally written by Chuck Thompson. Corrections to v3.1 and later were
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 done by Martin Buchholz, Steve Baur, and Hrvoje Niksic.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 Corrections to the original GNU Emacs Lisp Reference Manual were
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 supplied by Karl Berry, Jim Blandy, Bard Bloom, Stephane Boucher, David
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 Boyes, Alan Carroll, Richard Davis, Lawrence R. Dodd, Peter Doornbosch,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 David A. Duff, Chris Eich, Beverly Erlebacher, David Eckelkamp, Ralf
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 Fassel, Eirik Fuller, Stephen Gildea, Bob Glickstein, Eric Hanchrow,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 George Hartzell, Nathan Hess, Masayuki Ida, Dan Jacobson, Jak Kirman,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 Bob Knighten, Frederick M. Korz, Joe Lammens, Glenn M. Lewis, K. Richard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 Magill, Brian Marick, Roland McGrath, Skip Montanaro, John Gardiner
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 Myers, Thomas A. Peterson, Francesco Potorti, Friedrich Pukelsheim,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 Arnold D. Robbins, Raul Rockwell, Per Starback, Shinichirou Sugou, Kimmo
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 Suominen, Edward Tharp, Bill Trost, Rickard Westman, Jean White, Matthew
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876 Wilding, Carl Witty, Dale Worley, Rusty Wright, and David D. Zuhn.