pax_global_header00006660000000000000000000000064114242431530014511gustar00rootroot0000000000000052 comment=8b233b6fc9e89cf47d706aa5a0a4de2495718b39 clisp-2.49/000077500000000000000000000000001142424315300125615ustar00rootroot00000000000000clisp-2.49/ANNOUNCE000066400000000000000000000063351142424315300137210ustar00rootroot00000000000000This is GNU CLISP, an ANSI Common Lisp implementation. Availability ============ GNU CLISP is available via anonymous ftp (sources and selected binaries) from and its mirrors. More information at , , and . See file on these sites, e.g. , where you will find links to general Common Lisp information and documentation, as well as CLISP-specific links. Mailing lists ============= There are three mailing lists for users of CLISP. You will find subscription information and archives on the homepage mentioned above. ------------------------------------------------------------------------------- Common Lisp CLISP Common Lisp is * a general-purpose programming language and an AI language * interactive * a Lisp for professional use Common Lisp programs are * easy to test (interactive) * easy to maintain (depending on programming style) * portable across hardware/OS platforms and implementations (there is a standard for the language and the library functions) Our Common Lisp CLISP * needs only 4 MB of memory * implements most of the ANSI standard (including CLOS), as well as many extensions (including MOP) * can call your preferred editor * is freely redistributable Common Lisp provides * clear syntax, carefully designed semantics * several data types: numbers, strings, arrays, lists, characters, symbols, structures, streams etc. * runtime typing: the programmer need not bother about type declarations, but he gets notified on type violations. * many generic functions: 88 arithmetic functions for all kinds of numbers (integers, ratios, floating point numbers, complex numbers), 44 search/filter/sort functions for lists, arrays and strings * automatic memory management (garbage collection) * packaging of programs into modules * an object system, generic functions with powerful method combination * macros: every programmer can make his own language extensions Our Common Lisp CLISP provides * an interpreter * a compiler which makes execution of programs 5 times faster * all data types with unlimited size (the size need never be declared, the size of lists and arrays may be changed dynamically) * integers of arbitrary length, unlimited floating point number precision * 800+ library functions and macros, 600+ of them written in C CLISP compares well with other ANSI CL implementations wrt performance in most areas, such as CLOS, I/O, lists, integer arithmetics (CLISP's bignum performance is better than that of some other CL implementations). The worst performance CLISP exhibits in the area of floating point arithmetics. While showing nothing spectacularly bad and easily outperforming Java, Perl, TCL and any Scheme interpreter, CLISP is slower than another open-source CL implementation, CMU CL (http://www.cons.org/cmucl), which outperforms C and FORTRAN. If your code is heavily numeric, you might prefer CMUCL, otherwise CLISP is a wise choice. ------------------------------------------------------------------------------- clisp-2.49/COPYRIGHT000066400000000000000000000075701142424315300140650ustar00rootroot00000000000000 Hey Emacs! -*- coding: utf-8 -*- Copyright (c) 1992-2010 Bruno Haible, Michael Stoll, Sam Steingold All Rights Reserved Summary: This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation; see file GNU-GPL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Note: This copyright does NOT cover user programs that run in CLISP and third-party packages not part of CLISP, if a) They only reference external symbols in CLISP's public packages that define API also provided by many other Common Lisp implementations (namely the packages COMMON-LISP, COMMON-LISP-USER, KEYWORD, CLOS, GRAY, EXT), i.e. if they don't rely on CLISP internals and would as well run in any other Common Lisp implementation. Or b) They only reference external symbols in CLISP's public packages that define API also provided by many other Common Lisp implementations (namely the packages COMMON-LISP, COMMON-LISP-USER, KEYWORD, CLOS, GRAY, EXT) and some external, not CLISP specific, symbols in third-party packages that are released with source code under a GPL compatible license and that run in a great number of Common Lisp implementations, i.e. if they rely on CLISP internals only to the extent needed for gaining some functionality also available in a great number of Common Lisp implementations. Such user programs are not covered by the term "derived work" used in the GNU GPL. Neither is their compiled code, i.e. the result of compiling them by use of the function COMPILE-FILE. We refer to such user programs as "independent work". You may copy and distribute memory image files generated by the function SAVEINITMEM, if it was generated only from CLISP and independent work, and provided that you accompany them, in the sense of section 3 of the GNU GPL, with the source code of CLISP - precisely the same CLISP version that was used to build the memory image -, the source or compiled code of the user programs needed to rebuild the memory image (source code for all the parts that are not independent work, see above), and a precise description how to rebuild the memory image from these. Foreign non-Lisp code that is linked with CLISP or loaded into CLISP through dynamic linking is not exempted from this copyright. I.e. such code, when distributed for use with CLISP, must be distributed under the GPL. Authors: Generic CLISP: Bruno Haible, Michael Stoll Atari version: Bruno Haible, Michael Stoll Amiga version: Bruno Haible, Jörg Höhle Acorn version: Bruno Haible, Peter Burwood DOS version: Bruno Haible, Bernhard Degel, Jürgen Weber OS/2 version: Bruno Haible Unix version: Bruno Haible Multithreading: Vladimir Tzankov Maintenance: Bruno Haible, Michael Stoll 1992-1993 Bruno Haible, Marcus Daniels 1994-1997 Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998 Bruno Haible, Sam Steingold 1999-2001 Sam Steingold 2002-2010 Email addresses (September 1992 or newer): Bruno Haible bruno@clisp.org Michael Stoll michael@rhein.iam.uni-bonn.de Jörg Höhle Joerg-Cyril.Hoehle@t-systems.com Peter Burwood clisp@arcangel.dircon.co.uk Marcus Daniels marcus@sysc.pdx.edu Pierpaolo Bernardi bernardp@cli.di.unipi.it Sam Steingold sds@gnu.org clisp-2.49/GNU-GPL000066400000000000000000000433571142424315300135710ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. clisp-2.49/INSTALL000066400000000000000000000060321142424315300136130ustar00rootroot00000000000000This is the source distribution of CLISP, an ANSI Common Lisp implementation. Available from . More information at , , and . Contents: --------- It consists of the following directories and files: Documentation: INSTALL this text SUMMARY description, summary ANNOUNCE announcement COPYRIGHT copyright notice GNU-GPL free software license Source: src/FILES.1 source documentation src/_README README master src/_clisp.1 manual page master src/*.c C source files src/*.d C source files src/*.lisp Lisp source files doc/* documentation Installation: configure main configuration script src/configure auxiliary configuration script src/*.in auxiliary files utils/* auxiliary programs unix/ installing on Unix (including Mac OS/X & mingw) win32msvc/ installing on Win32, using MSVC Other: src/malloc/ a GNU malloc library routine ffcall/ a foreign function call library modules: add-on sofware modules/queens/ sample external module for CLISP for you to explore base: normally included in all linking sets syscalls portable OS call interface i18n user program internationalization regexp POSIX regular expressions readline advances command line editing and history optional: will be available in "clisp -K full" database gdbm interface to GNU DBM berkeley-db interface to Berkeley DB from Sleepycat Software dirkey windows registry postgresql PostGreSQL RDMBS interface oracle Oracle RDMBS interface math libsvm Support Vector Machine predictive analytics pari PARI Computer Algebra System matlab matrix calculations using Matlab netica Bayesian belief networks and influence diagrams matching, file processing pcre Perl-compatible regular expressions wildcard wildcard matching (shell globbing) zlib compress vectors networking rawsock low level socket interface fastcgi FastCGI interface for web development Installation: ------------- For instruction on how to install CLISP * on Unix (including cygwin): see file unix/INSTALL. * on Win32 using mingw: see unix/INSTALL and pass --with-mingw to configure. * on Win32 using MSVC++: see file win32msvc/INSTALL. Authors: -------- Bruno Haible Michael Stoll Marcus Daniels Pierpaolo Bernardi Sam Steingold Email: clisp-2.49/Makefile.devel000066400000000000000000000550501142424315300153240ustar00rootroot00000000000000# This is the developer's -*- Makefile -*-, not the user's Makefile. # Do not use it unless you know exactly what you are doing! # Expects GNU make # Some important programs: SHELL = /bin/sh MAKE = make PERL = perl GROFF = nroff -man # GROFF = groff -mandoc RM = rm -f # http://ctags.sourceforge.net CTAGS = ctags .PHONY : all build-prerequisites htmldoc makefiles configures check-configures \ update-ansi-tests potfiles fixperms \ view-man view-html check-sbcl install-gcc \ multibuild-linux-x86 multibuild-darwin-powerpc \ build-aux-update gnulib-imported distrib release pre-release \ upload upload-ssh upload-sf upload-gnu \ src-distrib doc-distrib gnu-distrib tag-release tp-mail all : build-prerequisites makefiles update-ansi-tests potfiles htmldoc build-prerequisites : check-configures fixperms \ src/version.h \ src/asmi386.h src/ari80386.msvc.c src/sp80386.msvc.c htmldoc: make -C doc all html MAKEMAKE_TMP=src/makemake makefiles : win32msvc/makefile.msvc7 win32msvc/makefile.msvc6 $(RM) $(MAKEMAKE_TMP) win32msvc/makefile.msvc6 : $(MAKEMAKE_TMP) cd src && ./makemake --with-dynamic-ffi --without-dynamic-modules \ win32msvc msvc6 > ../win32msvc/makefile.msvc6 win32msvc/makefile.msvc7 : $(MAKEMAKE_TMP) cd src && ./makemake --with-dynamic-ffi --without-dynamic-modules \ win32msvc msvc7 > ../win32msvc/makefile.msvc7 $(MAKEMAKE_TMP) : src/makemake.in version.sh . ./version.sh; { \ echo "#!/bin/sh" ; \ sed -e "s/@PACKAGE_VERSION@/$${VERSION_NUMBER}/g" \ -e "s/@CLISP_DECOLONIZE@/echo $$x/" src/makemake.in ; \ } > $(MAKEMAKE_TMP) chmod a+x $(MAKEMAKE_TMP) CURDIR=$(shell pwd) MODULES=berkeley-db clx/new-clx dirkey fastcgi i18n oracle pari pcre dbus \ postgresql rawsock readline regexp syscalls wildcard zlib gtk2 gdbm libsvm CONFIG_H_IN = src/config.h.in $(patsubst %,modules/%/config.h.in,$(MODULES)) MOD_CONFIGURES=$(patsubst %,modules/%/configure,$(MODULES)) CONFIGURES=src/configure $(MOD_CONFIGURES) GNULIB_USERS = src modules/regexp modules/syscalls modules/wildcard MAKEFILE_IN = $(addsuffix /gllib/Makefile.in, $(GNULIB_USERS)) GET_PREFIX = grep -- --macro-prefix $$d/glm4/gnulib-cache.m4 | sed -e 's/.*--macro-prefix=\([^ ]*\) .*/\1/' $(MAKEFILE_IN) : %/Makefile.in : %/Makefile.am %/../configure.in src/aclocal.m4 cd $* && cd .. && \ (test -f aclocal.m4 || ln -s $(CURDIR)/src/aclocal.m4 .) && \ ln -s $(CURDIR)/src '$$cl_cv_clisp_libdir' && \ automake gllib/Makefile && \ $(RM) '$$cl_cv_clisp_libdir' && \ d=. && PREFIX=`$(GET_PREFIX)` && \ sed -i -e 's,$$(top_srcdir)/src/build-aux,$$(CLISP_LIBDIR)/build-aux,' \ -e 's,$$(top_srcdir)/$$cl_cv_clisp_libdir,$$(CLISP_LIBDIR),' \ -e '/<.*build.aux/a\ | sed -e '"'"'s/_GL_/_'$${PREFIX}'_GL_/g'"'"' \\' \ -e 's/\(definition.*\) of _GL_/\1 of _'$${PREFIX}'_GL_/' \ gllib/Makefile.in && \ (test -L aclocal.m4 && $(RM) aclocal.m4 || true) configures : $(CONFIGURES) $(CONFIG_H_IN) $(MAKEFILE_IN) src/aclocal.m4 : $(wildcard src/m4/*.m4) $(wildcard src/glm4/*.m4) \ $(addsuffix .in,$(CONFIGURES)) $(RM) configure.ac cp src/configure.in configure.ac cat $(addsuffix .in,$(MOD_CONFIGURES)) | \ egrep -v -e 'AC_(INIT|PREREQ|CANONICAL_|GNU_SOURCE|CONFIG_HEADER|OUTPUT)' \ -e 'AC_CONFIG_FILE.*(Makefile|link\.sh)' >> configure.ac aclocal --output=src/aclocal.m4 -I $(CURDIR)/src/m4 \ $(patsubst %, -I $(CURDIR)/%/glm4, $(GNULIB_USERS)) $(RM) configure.ac AUTOCONF_FILES = src/aclocal.m4 AUTOCONF_CACHE = autom4te.cache $(CONFIGURES) : %/configure : %/configure.in $(AUTOCONF_FILES) version.sh cd $* && autoconf --include=$(CURDIR)/src $(CONFIG_H_IN) : %/config.h.in : %/configure.in $(AUTOCONF_FILES) cd $* && autoheader --include=$(CURDIR)/src # syntax check check-configures : configures set -e; for f in $(CONFIGURES); do bash -x -n $$f; done rm -rf `find . -name $(AUTOCONF_CACHE)`; ANSITESTS_SVN = svn://common-lisp.net/project/ansi-test/svn/trunk/ansi-tests update-ansi-tests: if test -d ansi-tests; then \ cd ansi-tests && \ svn update; \ else \ svn co $(ANSITESTS_SVN); \ fi # this must not be in "all" because this downloads 23MB XSL + 500kB DTD update-docbook-utils : make -C doc docbook-xsl docbook-dtd CLISP=$(CURDIR)/build/clisp potfiles : cd src/po && CLISP='$(CLISP)' $(MAKE) -f Makefile.devel && $(MAKE) -f Makefile.devel clean fixperms : ./utils/fix-perms.sh view-man : grep -v '^#[ie]' doc/_clisp.1 | $(GROFF) -Tascii | less # all possible browsers, some might not be present, but we do not care # list GUI first because they put themselves into background BROWSERS=firefox mozilla netscape opera links lynx view-html : grep -v '^#[ie]' doc/_clisp.html > /tmp/clisp.html for b in $(BROWSERS); do $$b /tmp/clisp.html; done src/version.h: version.sh . ./version.sh ; { \ echo "/* generated by Makefile.devel from version.sh */" ; \ echo "#define PACKAGE_NAME \"GNU CLISP\"" ; \ echo "#define PACKAGE_TARNAME \"clisp\"" ; \ echo "#define PACKAGE_VERSION \"$$VERSION_NUMBER ($$RELEASE_DATE)\"" ; \ echo "#define PACKAGE_STRING \"GNU CLISP $$VERSION_NUMBER ($$RELEASE_DATE)\"" ; \ echo "#define PACKAGE_BUGREPORT \"http://clisp.cons.org/\""; \ } > src/version.h src/asmi386.h : src/asmi386.hh sed -e 's,//.*$$,,' < src/asmi386.hh > src/asmi386.h src/ari80386.msvc.c : src/ari80386.d src/asmi386.sh src/asmi386.sh -no-C < src/ari80386.d > src/ari80386.msvc.c src/sp80386.msvc.c : src/sp80386.d src/asmi386.sh src/asmi386.sh -no-C < src/sp80386.d > src/sp80386.msvc.c # Build and test all essential memory models on a Linux/x86 machine. MULTIBUILD_OPTIONS = MULTIBUILD_CFLAGS = -g multibuild-linux-x86: build-linux-x86-standard-spvw_mixed_blocks-staggered \ build-linux-x86-standard-spvw_mixed_blocks-opposite \ build-linux-x86-standard-spvw_mixed_blocks-opposite-fixedmemsize \ build-linux-x86-standard-spvw_mixed_pages \ build-linux-x86-noexec-spvw_mixed_blocks-staggered \ build-linux-x86-noexec-spvw_mixed_blocks-opposite \ build-linux-x86-noexec-spvw_mixed_blocks-opposite-fixedmemsize \ build-linux-x86-noexec-spvw_mixed_pages \ build-linux-x86-spvw_pure_blocks \ build-linux-x86-wide build-linux-x86-standard-spvw_mixed_blocks-staggered: rm -rf $@ CFLAGS="-O -falign-functions=4 $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DSTANDARD_HEAPCODES -DCONS_HEAP_GROWS_UP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-linux-x86-standard-spvw_mixed_blocks-opposite: rm -rf $@ CFLAGS="-O -falign-functions=4 $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DSTANDARD_HEAPCODES -DCONS_HEAP_GROWS_DOWN" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-linux-x86-standard-spvw_mixed_blocks-opposite-fixedmemsize: rm -rf $@ CFLAGS="-O -falign-functions=4 $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DSTANDARD_HEAPCODES -DNO_VIRTUAL_MEMORY -DNO_TRIVIALMAP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-linux-x86-standard-spvw_mixed_pages: rm -rf $@ CFLAGS="-O -falign-functions=4 $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DSTANDARD_HEAPCODES -DNO_SINGLEMAP -DNO_TRIVIALMAP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-linux-x86-noexec-spvw_mixed_blocks-staggered: rm -rf $@ CFLAGS="-O -falign-functions=4 $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DLINUX_NOEXEC_HEAPCODES -DCONS_HEAP_GROWS_UP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-linux-x86-noexec-spvw_mixed_blocks-opposite: rm -rf $@ CFLAGS="-O -falign-functions=4 $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DLINUX_NOEXEC_HEAPCODES -DCONS_HEAP_GROWS_DOWN" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-linux-x86-noexec-spvw_mixed_blocks-opposite-fixedmemsize: rm -rf $@ CFLAGS="-O -falign-functions=4 $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DLINUX_NOEXEC_HEAPCODES -DNO_VIRTUAL_MEMORY -DNO_TRIVIALMAP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-linux-x86-noexec-spvw_mixed_pages: rm -rf $@ CFLAGS="-O -falign-functions=4 $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DLINUX_NOEXEC_HEAPCODES -DNO_SINGLEMAP -DNO_TRIVIALMAP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-linux-x86-spvw_pure_blocks: rm -rf $@ CFLAGS="-O -falign-functions=4 $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DTYPECODES" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-linux-x86-wide: rm -rf $@ CFLAGS="-O -falign-functions=4 $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DWIDE" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ multibuild-darwin-powerpc: \ build-darwin-powerpc-standard-spvw_mixed_blocks-staggered \ build-darwin-powerpc-standard-spvw_mixed_blocks-opposite \ build-darwin-powerpc-standard-spvw_mixed_blocks-opposite-fixedmemsize \ build-darwin-powerpc-standard-spvw_mixed_pages \ build-darwin-powerpc-noexec-spvw_mixed_blocks-staggered \ build-darwin-powerpc-noexec-spvw_mixed_blocks-opposite \ build-darwin-powerpc-noexec-spvw_mixed_blocks-opposite-fixedmemsize \ build-darwin-powerpc-noexec-spvw_mixed_pages \ build-darwin-powerpc-spvw_pure_blocks \ build-darwin-powerpc-wide build-darwin-powerpc-standard-spvw_mixed_blocks-staggered: rm -rf $@ CFLAGS="-O $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DSTANDARD_HEAPCODES -DCONS_HEAP_GROWS_UP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-darwin-powerpc-standard-spvw_mixed_blocks-opposite: rm -rf $@ CFLAGS="-O $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DSTANDARD_HEAPCODES -DCONS_HEAP_GROWS_DOWN" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-darwin-powerpc-standard-spvw_mixed_blocks-opposite-fixedmemsize: rm -rf $@ CFLAGS="-O $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DSTANDARD_HEAPCODES -DNO_VIRTUAL_MEMORY -DNO_TRIVIALMAP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-darwin-powerpc-standard-spvw_mixed_pages: rm -rf $@ CFLAGS="-O $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DSTANDARD_HEAPCODES -DNO_SINGLEMAP -DNO_TRIVIALMAP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-darwin-powerpc-noexec-spvw_mixed_blocks-staggered: rm -rf $@ CFLAGS="-O $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DLINUX_NOEXEC_HEAPCODES -DCONS_HEAP_GROWS_UP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-darwin-powerpc-noexec-spvw_mixed_blocks-opposite: rm -rf $@ CFLAGS="-O $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DLINUX_NOEXEC_HEAPCODES -DCONS_HEAP_GROWS_DOWN" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-darwin-powerpc-noexec-spvw_mixed_blocks-opposite-fixedmemsize: rm -rf $@ CFLAGS="-O $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DLINUX_NOEXEC_HEAPCODES -DNO_VIRTUAL_MEMORY -DNO_TRIVIALMAP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-darwin-powerpc-noexec-spvw_mixed_pages: rm -rf $@ CFLAGS="-O $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DLINUX_NOEXEC_HEAPCODES -DNO_SINGLEMAP -DNO_TRIVIALMAP" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-darwin-powerpc-spvw_pure_blocks: rm -rf $@ CFLAGS="-O $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DTYPECODES" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ build-darwin-powerpc-wide: rm -rf $@ CFLAGS="-O $(MULTIBUILD_CFLAGS)" \ CPPFLAGS="-DWIDE" \ ./configure --cbc $(MULTIBUILD_OPTIONS) $@ SRCDIRS=src utils benchmarks emacs modules sacla-tests tests TAGS : force $(CTAGS) -e -R --langmap=c:.c.d.f $(SRCDIRS) tags : force $(CTAGS) -R --langmap=c:.c.d.f $(SRCDIRS) # Bootstrap SBCL. SBCL_VERSION = 0.8.15 SBCL_SOURCE_FILE = sbcl-$(SBCL_VERSION)-source.tar.bz2 SBCL_SOURCE_URL = http://www.haible.de/bruno/$(SBCL_SOURCE_FILE) check-sbcl: ./configure --cbc build-for-sbcl test -f $(SBCL_SOURCE_FILE) || wget $(SBCL_SOURCE_URL) rm -rf sbcl-$(SBCL_VERSION) bunzip2 -c < $(SBCL_SOURCE_FILE) | tar xvf - clisp=$(CURDIR)/build-for-sbcl/clisp; \ cd sbcl-$(SBCL_VERSION) && sh make.sh $$clisp # Build a GCC from source. # Note that this requires ca. 1 GB of disk space. GCC_VERSION = 3.4.3 GCC_SOURCE_FILE = gcc-$(GCC_VERSION).tar.bz2 GCC_SOURCE_URL = http://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VERSION)/$(GCC_SOURCE_FILE) # Put here the --prefix that you would like to use for installing gcc. # It should *not* be the same --prefix as you use for other programs. GCC_INSTALL_DIR = $(shell dirname $$(dirname $$(which clisp | head -1)))/inst-gcc-$(GCC_VERSION) install-gcc: test -f $(GCC_SOURCE_FILE) || wget $(GCC_SOURCE_URL) rm -rf gcc-$(GCC_VERSION) gcc-$(GCC_VERSION)-build bunzip2 -c < $(GCC_SOURCE_FILE) | tar xvf - mkdir gcc-$(GCC_VERSION)-build gcc_install_dir='$(GCC_INSTALL_DIR)' ; \ cd gcc-$(GCC_VERSION)-build && ../gcc-$(GCC_VERSION)/configure --prefix="$$gcc_install_dir" --enable-shared --enable-threads `if grep __GLIBC__ /usr/include/features.h > /dev/null 2>/dev/null; then echo --enable-__cxa_atexit; fi` --enable-version-specific-runtime-libs --enable-languages=c,c++ --enable-nls cd gcc-$(GCC_VERSION)-build && make bootstrap cd gcc-$(GCC_VERSION)-build && make install rm -rf gcc-$(GCC_VERSION)-build rm -rf gcc-$(GCC_VERSION) GNULIB_CVS_ROOT = :pserver:anonymous@pserver.git.sv.gnu.org:/gnulib.git GNULIB_CVS_REPOSITORY = HEAD GNULIB_GIT = git://git.savannah.gnu.org/gnulib.git GNULIB_CHECKOUT := gnulib update-gnulib: if test -d $(GNULIB_CHECKOUT); then \ cd $(GNULIB_CHECKOUT) ; \ if test -d .git; then git pull; else cvs update -d -P; fi \ else \ if git --version >/dev/null 2>&1; then \ git clone "$(GNULIB_GIT)" $(GNULIB_CHECKOUT) ; \ else cvs -d "$(GNULIB_CVS_ROOT)" checkout -d $(GNULIB_CHECKOUT) $(GNULIB_CVS_REPOSITORY); fi \ fi # it is important to get ltmain.sh and libtool.m4 from the same version of # libtool. Don't rely on what's installed in /usr/share or similar. LIBTOOL_VERSION = 2.2.8 LIBTOOL_SOURCE_FILE = libtool-$(LIBTOOL_VERSION).tar.gz LIBTOOL_SOURCE_URL = http://ftp.gnu.org/gnu/libtool/$(LIBTOOL_SOURCE_FILE) # an alternative way to update libtool files is "cd src; libtoolize --copy" GTK2_SVN_ROOT = http://svn.gnome.org/svn/gtk+/trunk/m4macros GNULIB_AUX=config.guess config.rpath config.sub depcomp install-sh missing # it is important not to have "*.m4" targets with ": force" dependencies # because otherwise every make will rebuild all configures build-aux-update : update-gnulib force for f in $(GNULIB_AUX); do \ cp -afuv $(GNULIB_CHECKOUT)/build-aux/$$f src/build-aux; \ done cp -afuv /usr/share/automake*/compile src/build-aux test -f $(LIBTOOL_SOURCE_FILE) || wget $(LIBTOOL_SOURCE_URL) rm -rf libtool-$(LIBTOOL_VERSION) gunzip -c < $(LIBTOOL_SOURCE_FILE) | tar xf - cp -afuv libtool-$(LIBTOOL_VERSION)/libltdl/config/ltmain.sh src/build-aux/ltmain.sh chmod +x src/build-aux/ltmain.sh for f in libtool ltoptions ltsugar ltversion lt~obsolete; do \ cp -afuv libtool-$(LIBTOOL_VERSION)/libltdl/m4/$$f.m4 src/m4/; done rm -rf libtool-$(LIBTOOL_VERSION) $(LIBTOOL_SOURCE_FILE) cd src/m4; rm -fv gtk-2.0.m4; wget $(GTK2_SVN_ROOT)/gtk-2.0.m4 # gnulib-tool hack to support multiple gllib directories: # headers are generated for each gllib differently, depending on which # features are actually used, so we need to be able to include all these # generated headers without fear that one will shadow another, so we # prepend the macro-prefix before the guard macros GNULIB_TOOL_PATCH = gnulib-tool.patch GNULIB_TOOL = $(GNULIB_CHECKOUT)/gnulib-tool-patched --import \ --no-vc-files --no-libtool --no-changelog --aux-dir=src/build-aux # unistd is needed in both syscalls and core separately because unistd.h # is generated differently depending on whether gethostname (required by # uname) is present GNULIB_CORE = no-c++ stdint stdbool havelib gettext localcharset \ uniwidth/width streq uniname/uniname unitypes link-follow \ nocrash libsigsegv gnu-make gettimeofday getpagesize sys_time # these modules are included as dependencies by regexp and fnmatch # so we include them here so that they appear once in src/gl* # instead of N times in $(GNULIB_USERS)/gl* GNULIB_MODULES = alloca-opt alloca extensions include_next verify string \ mbsinit wchar wctype mbrtowc mbsrtowcs memchr nl_langinfo GNULIB_COMMON = $(GNULIB_CORE) $(GNULIB_MODULES) GNULIB_AVOID = $(addprefix --avoid=, $(GNULIB_COMMON)) GNULIB_IMPORTED_LOG = /tmp/gnulib-imported.log gnulib-imported : update-gnulib force $(RM) configure.ac; ln -sv src/configure.in configure.ac $(RM) $(addsuffix /glm4/gnulib-cache.m4, $(GNULIB_USERS)) \ $(GNULIB_IMPORTED_LOG) cp $(GNULIB_CHECKOUT)/gnulib-tool $(GNULIB_CHECKOUT)/gnulib-tool-patched patch $(GNULIB_CHECKOUT)/gnulib-tool-patched $(GNULIB_TOOL_PATCH) $(GNULIB_TOOL) --source-base=src/gllib --m4-base=src/glm4 \ $(GNULIB_COMMON) | tee -a $(GNULIB_IMPORTED_LOG) $(GNULIB_TOOL) --source-base=modules/syscalls/gllib \ --macro-prefix=sc_gl --m4-base=modules/syscalls/glm4 \ $(GNULIB_AVOID) mktime strftime strptime strverscmp uname \ | tee -a $(GNULIB_IMPORTED_LOG) $(GNULIB_TOOL) --source-base=modules/regexp/gllib \ --macro-prefix=rx_gl --m4-base=modules/regexp/glm4 \ $(GNULIB_AVOID) regex | tee -a $(GNULIB_IMPORTED_LOG) $(GNULIB_TOOL) --source-base=modules/wildcard/gllib \ --macro-prefix=wc_gl --m4-base=modules/wildcard/glm4 \ $(GNULIB_AVOID) fnmatch-gnu | tee -a $(GNULIB_IMPORTED_LOG) $(RM) configure.ac for d in $(GNULIB_USERS); do $(RM) `find $$d/gllib -name \*~`; done for d in $(GNULIB_USERS); do $(RM) `find $$d/glm4 -name \*~`; done # _GL_UNUSED is defined by gnulib-common.m4:gl_COMMON_BODY which places # the definition into config.h. Since we cannot know which gnulib-common # will be used by a given configure.in, we cannot use a prefix for it # and thus must revert the effects of --macro-prefix in imported code. for d in $(GNULIB_USERS); do \ PREFIX=`$(GET_PREFIX)`; test -n "$${PREFIX}" && \ sed -i -e 's/_'$${PREFIX}'_GL_UNUSED/_GL_UNUSED/g' $$d/gllib/*.c; done cd src/glm4; \ for f in *.m4; do \ if test -f ../m4/$$f; then \ echo == $$f; \ if cmp $$f ../m4/$$f; then \ cd ../m4; cvs rm -f $$f; cd ../glm4; \ fi; \ fi; \ done $(RM) $(GNULIB_CHECKOUT)/gnulib-tool-patched @echo the import log is in $(GNULIB_IMPORTED_LOG) distrib : fixperms src-distrib doc-distrib gnu-distrib # start gpg agent before "make release"! release : distrib upload tag-release # 2-3 weeks before a release # manually: check for new versions of # libsvm, netica api, postgresql, berkeley-db, dbus, pcre, readline pre-release : gnulib-imported build-aux-update tp-mail ## RELEASE TODO: # Before doing a "make distrib": # * update version.sh, src/NEWS, doc/history.xml # * "make -f Makefile.devel all" # === Note that for clisp to report its version correctly, src/version.h and # === src/configure must be regenerated after version.sh is updated # web pages to be updated: # * www/index.html, www/impnotes.html, www/clisp.html, www/impnotes/ # dates to be updated (1st release each calendar year): # * banner in src/spvw.d # * COPYRIGHT # * clisp-doc-copyright in doc/impent.xml # * AC_COPYRIGHT in src/configure.in ## CLISP release announcements go to: # clisp-announce@lists.sourceforge.net # info-gnu@gnu.org # news:comp.lang.lisp # news:comp.os.linux.announce (linux-announce@news.ornl.gov) # http://freshmeat.net/projects/clisp/ # https://sourceforge.net/news/submit.php?group_id=1355 # WIKIs to be updated: http://en.wikipedia.org/wiki/CLISP VER=$(shell . ./version.sh ; echo $$VERSION_NUMBER) REL=$(shell . ./version.sh ; echo $$RELEASE_DATE) ARCHIVE=../archives/$(VER) SUFFIX= # The distribution's top directory is called TOPDIR here. TOPDIR=clisp-$(VER)$(SUFFIX) SRC_DIST=$(ARCHIVE)/$(TOPDIR).tar.bz2 SRC_DIST1=$(ARCHIVE)/$(TOPDIR).tar.gz DOC_DIST=$(ARCHIVE)/$(TOPDIR)-impnotes.zip UPLOAD=$(SRC_DIST) $(SRC_DIST1) $(DOC_DIST) src/NEWS SSHUP=podval:~/public_html/clisp/ GNU_TOP=$(ARCHIVE)/NEWS $(ARCHIVE)/SUMMARY GNU_SRC=$(SRC_DIST1) $(SRC_DIST) GNU_DIST=$(GNU_TOP) $(GNU_SRC) GNU_SYM=$(ARCHIVE)/$(TOPDIR).symlink.directive # Assume tar/bzip2/gzip are present # set this if you are using GNU tar EXCLUDE=--exclude CVS --exclude \*.fas --exclude \*.lib --exclude \*.obj \ --exclude \*.exe --exclude \*.mem --exclude \*.o --exclude build \ --exclude .cvsignore --exclude \*~ --exclude .\#\* \ --exclude $(AUTOCONF_CACHE) --exclude tmp --exclude queued \ --exclude libtool-\*.tar.gz \ `sed "s/^/--exclude /" doc/.cvsignore` \ --exclude TAGS --exclude \*.elc --exclude \*.orig --exclude \*.rej T = $(TOPDIR) SOURCES1 = $T/ANNOUNCE $T/COPYRIGHT $T/GNU-GPL $T/INSTALL $T/SUMMARY $T/clisp.spec $T/configure SOURCES2 = $T/src SOURCES4 = $T/utils SOURCES5 = $T/unix $T/win32msvc SOURCES6 = $T/modules # for developers only: $T/benchmarks $T/sacla-tests $T/ansi-tests SOURCES7 = $T/tests $T/emacs $T/doc $T/Makefile.devel SOURCES = $(SOURCES1) $(SOURCES2) $(SOURCES4) $(SOURCES5) $(SOURCES6) $(SOURCES7) $(SRC_DIST1) : $(SRC_DIST) bzcat -v $(SRC_DIST) | gzip -9 -v > $(SRC_DIST1) upload-ssh : $(SRC_DIST1) force for h in $(SSHUP) ; do scp $(UPLOAD) $${h}; done upload-sf : $(SRC_DIST1) force rsync -avP -e ssh $(UPLOAD) frs.sf.net:/home/frs/project/c/cl/clisp/clisp/$(VER)/ upload-gnu : force # gnu-distrib -- do not re-sign everything UP=""; for f in $(GNU_DIST); do \ UP=$${UP}" $$f $$f.sig $$f.directive.asc"; done; \ lftp ftp://ftp-upload.gnu.org/incoming/ftp -e "mput $${UP} $(GNU_SYM).asc; quit" upload : upload-ssh upload-sf upload-gnu src-distrib : force mkdir -p $(ARCHIVE) ln -s . $(TOPDIR) tar cvfhj $(SRC_DIST) $(EXCLUDE) $(SOURCES) $(RM) $(TOPDIR) echo $(SRC_DIST) doc-distrib : force mkdir -p $(ARCHIVE) ln -s . $(TOPDIR) zip -9vor $(DOC_DIST) $(TOPDIR)/doc/html -x \*.cvsignore -x \*.symlinks -x \*CVS\* -x .\#\* -x \*~ $(RM) $(TOPDIR) # http://www.gnu.org/prep/maintain/html_node/Automated-Upload-Procedure.html GPG=gpg --use-agent --yes gnu-distrib : $(SRC_DIST1) force mkdir -p $(ARCHIVE) cp -f src/NEWS SUMMARY $(ARCHIVE) for f in $(GNU_DIST); do $(GPG) -b $$f; done for f in $(GNU_TOP); do \ $(RM) $$f.directive; \ echo "version: 1.1" >> $$f.directive; \ echo "directory: clisp" >> $$f.directive; \ echo "filename: "`basename $$f` >> $$f.directive; \ $(GPG) --clearsign $$f.directive; \ done for f in $(GNU_SRC); do \ $(RM) $$f.directive; \ echo "version: 1.1" >> $$f.directive; \ echo "directory: clisp/release/$(VER)" >> $$f.directive; \ echo "filename: "`basename $$f` >> $$f.directive; \ $(GPG) --clearsign $$f.directive; \ done echo "version: 1.1" > $(GNU_SYM) echo "directory: clisp/release" >> $(GNU_SYM) echo "rmsymlink: latest" >> $(GNU_SYM) echo "symlink: $(VER) latest" >> $(GNU_SYM) $(GPG) --clearsign $(GNU_SYM) tag-release : force cvs tag -FR clisp_$(subst .,_,$(VER))-$(REL) . TP_EMAIL=coordinator@translationproject.org MESSAGE_FILE=tp_message TP_SUFFIX=-pre1 tp-mail : force echo "Domain: clisp" > $(MESSAGE_FILE) if test -n "$(TP_SUFFIX)"; then \ f=`make -f Makefile.devel src-distrib SUFFIX=$(TP_SUFFIX) | tail -n 2 | head -n 1`; \ for h in $(SSHUP) ; do scp $$f $${h}; done \ else f=$(SRC_DIST); fi; f=`basename $$f`; \ echo "Location: http://clisp.podval.org/$$f" >> $(MESSAGE_FILE); \ cat $(MESSAGE_FILE); \ mail -s "CLISP pre-release $$f is available" \ -c clisp-devel@lists.sf.net $(TP_EMAIL) < $(MESSAGE_FILE) $(RM) $(MESSAGE_FILE) force : clisp-2.49/SUMMARY000066400000000000000000000025631142424315300136470ustar00rootroot00000000000000ANSI Common Lisp is a high-level, general-purpose programming language. GNU CLISP is a Common Lisp implementation by Bruno Haible of Karlsruhe University and Michael Stoll of Munich University, both in Germany. It conforms to the ANSI Common Lisp standard, and offers many extensions. It runs on most GNU and Unix systems (GNU/Linux, GNU/Hurd, FreeBSD, NetBSD, OpenBSD, Solaris, Tru64, HP-UX, BeOS, IRIX, AIX, Mac OS X and others) and on other systems (Windows NT/2000/XP/Vista, Windows 95/98/ME) and needs only 4 MB of RAM. It is Free Software and may be distributed under the terms of GNU GPL, while it is possible to distribute commercial proprietary applications compiled with GNU CLISP. The user interface comes in English, German, French, Spanish, Dutch, Russian and Danish, and can be changed during run time. GNU CLISP includes an interpreter, a compiler, a debugger, CLOS, MOP, a foreign language interface, a socket interface, i18n, fast bignums, arbitrary precision floats and more. An X11 interface is available through CLX, Garnet, CLUE/CLIO. GNU CLISP runs Maxima, ACL2 and many other Common Lisp packages. More information at , , and . Sources and selected binaries are available by anonymous ftp from and its mirrors. clisp-2.49/clisp.spec000066400000000000000000000074301142424315300145530ustar00rootroot00000000000000# Copyright (C) 1998-2008 by Sam Steingold # Distributed under the terms of the GNU General Public License. # See . # The purpose of this file is creation of source/binary RPMs, # **NOT** building/installing CLISP. # I work from a CVS sandbox, so unpacking and patching is irrelevant to me. # to create the source/binary RPMs, do # rpmbuild -bb --sign clisp.spec %define src /usr/local/src %define prefix /usr %define name clisp %define version %(. version.sh; echo ${VERSION_NUMBER}) %define builddir build-rpm %define mysrc %{src}/%{name}/current # do not strip CLISP binaries, otherwise (disassemble #'cons) won't work %define debug_package %{nil} # don't you just love that you have to fit the macro into one line? # this automatically upgrades `release' with each build. # don't forget to remove the file `.release' when changing `version'. #%define release %(test -f .release || echo 0 >> .release; echo "1 + " `cat .release` | bc > .,release; mv -fv .,release .release; cat .release) #%define release %(cat .release) %define release 1 %define modules libsvm rawsock berkeley-db pcre bindings/glibc clx/new-clx zlib Summary: Common Lisp (ANSI CL) implementation Name: %{name} Version: %{version} Release: %{release} # this crap does not accept PNG #Icon: clisp.png License: GPL Group: development/languages Source: ftp://ftp.gnu.org/pub/gnu/clisp/latest/ URL: http://clisp.cons.org/ Packager: Sam Steingold Provides: clisp, ansi-cl Distribution: Fedora GNU/Linux BuildRoot: %{_tmppath}/%{name}-root %description %(cat SUMMARY) This binary distribution was built with the following modules: base: i18n regexp syscalls readline (run "clisp" or "clisp -K base" to use them) full: in addition to the above, also %{modules} (run "clisp -K full" to use them) %prep cat </dev/null | grep bash 2>/dev/null`" then # CONFIG_SHELL is bash test -n "${BASH_VERSION}" || exec ${CONFIG_SHELL} $0 $* fi else CONFIG_SHELL=/bin/sh fi fail () { echo "$*" >&2; exit 1; } info_help () { cat << \EOP Usage: configure [options] [dirname] dirname: Name of directory in which to build CLISP. This allows you to build CLISP with different compilers on the same machine or for different architectures in the same filesystem, sharing the same source. Default is "src". options: The following options are recognized: --help print this message and exit --version print the CLISP version and exit --config unix/INSTALL step 3: configuration only --cbc unix/INSTALL steps 3-8: Configure, Build, Check The following options set installation parameters: --srcdir=SRCDIR sets the source directory to SRCDIR The following options are passed to subordinate `configure' scripts: --quiet, --silent do not print `checking...' messages Installation directories: --prefix=PREFIX base directory for files to be installed --exec-prefix=PREFIX base directory for architecture-dependent files to be installed --fsstnd=STYLE specify file system standard for installation Fine tuning of the installation directories: --bindir=DIR user executables --libdir=DIR object code libraries --includedir=DIR C header files --datarootdir=DIR read-only arch.-independent data root --datadir=DIR read-only architecture-independent data --localedir=DIR locale-dependent data --mandir=DIR man documentation --infodir=DIR info documentation --docdir=DIR documentation root --htmldir=DIR html documentation --dvidir=DIR TeX DVI documentation --pdfdir=DIR PDF documentation --psdir=DIR PostScript documentation --elispdir=DIR Emacs Lisp files --vimdir=DIR VIM files --aclocaldir=DIR autoconf files Enable and disable specific packages --with-PACKAGE use PACKAGE --without-PACKAGE do not use PACKAGE PACKAGEs available (the default is the opposite of the following): --without-ffcall do not support Foreign Function Interface the default is to support it when available --without-dynamic-modules no Dynamic Modules support --without-unicode no Unicode support: character=8bit --without-readline do not link with GNU readline --with-threads=FLAVOR support multiple threads in one CLISP image via OS threads [highly experimental - use at your own risk] FLAVOR: POSIX_THREADS SOLARIS_THREADS WIN32_THREADS --with-jitc=FLAVOR use a given Just-In-Time Compiler. The only flavor at this time is lightning (GNU lightning must be installed in the standard place). --with-module=MODULE build with add-on MODULE --help-modules list the modules included in the distribution and information on building them --hyperspec=URL the path to the Common Lisp HyperSpec (the default is http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/ or the value of the environment variable CLHSROOT, if set) --with-debug pass "debug" to makemake (CFLAGS+=g &c) --with-gmalloc use the GNU malloc instead of of the libc one (needed on HP-UX and OpenBSD) --edit-config edit config.lisp with ${EDITOR:-vi} before make (useful with --cbc) System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] You can specify the location of dependencies using EOP `dirname $0`/src/configure --help | grep 'with.*prefix' cat << \EOP See also the --help-modules option. Example: configure --cbc built-with-gcc su bin cd built-with-gcc make install exit Specifying the C compiler: If you wish to specify the C compiler that will get used to build CLISP, set the environment variables CC, CFLAGS, LIBS. Put compiler flags that have to be passed to the preprocessor into the CC variable, not the CFLAGS variable. For example, if you want to use gcc in ANSI C mode, execute the following before calling `configure': setenv CC "gcc -ansi" if using csh export CC="gcc -ansi" if using bash or ksh CC="gcc -ansi"; export CC if using sh If you have headers in a nonstandard directory set CPPFLAGS to "-I" If you have libraries in a nonstandard directory set LDFLAGS to "-L" Using GNU libiconv (only needed if you do not have GNU LIBC 2.2 or better): If you want to use GNU libiconv which is not installed system-wide, you may supply a --with-libiconv-prefix argument (type './src/configure --help' for details). The same goes for non-standard locations of libintl and libsigsegv. EOP } # Abort in case something fails. set -e # Nuisances. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH srcdir='' # http://www.gnu.org/software/autoconf/manual/html_node/Option-Checking.html subdir_configure_args='--disable-option-checking' makemake_args='' do_config='' do_cbc='' argcount=0 edit_config='' prev='' passnext='' debug='' do_ffi='default' target='' ignore_absence_of_libsigsegv='' prefix="/usr/local" exec_prefix=${prefix} getarg(){ echo "$1" | sed 's,^[-_a-zA-Z0-9]*=,,'; } all_modules='' note_module(){ all_modules=${all_modules}" $1" makemake_args=${makemake_args}" --with-module=$1" } for arg # in "$@" do # If the previous option needs an argument, assign it. if test -n "$prev"; then # If the previous option needs an argument for subdir configures or # makemake, pass it, otherwise set the variable case "$passnext" in configure) subdir_configure_args="$subdir_configure_args $arg" ;; makemake) makemake_args="$makemake_args$arg" ;; both) makemake_args="$makemake_args$arg" subdir_configure_args="$subdir_configure_args $arg" ;; with-module) note_module $arg ;; *) eval "$prev=\$arg" ;; esac passnext='' prev='' else case "$arg" in --cbc | --cb) do_config=1 do_cbc=1 ;; --config | --confi | --conf | --con | --co) do_config=1 ;; --edit-config | --edit-confi | --edit-conf | --edit-con | --edit-co | \ --edit-c | --edit- | --edit | --edi | --ed) edit_config=1 ;; --help | --hel | --he) info_help exit 0 ;; --version | --versio | --versi | --vers | --ver | --ve | --v) ./src/configure --version exit 0 ;; --help-modules | --help-module | --help-modul | --help-modu | --help-mod | --help-mo | --help-m) set +e MODDIR=modules echo "module sets found in the directory '${MODDIR}':" MODLIST=`find ${MODDIR} -name link.sh -o -name link.sh.in | sed -e 's,^${MODDIR}/,,' -e 's,/[^/]*$,,' | sort` for m in ${MODLIST}; do echo " "${m}; done echo "to specify the location of external software:" for m in src ${MODLIST}; do CFG=./${m}/configure if [ -x ${CFG} ]; then tmp=${CFG}.with ${CFG} --help | grep ' --with-[a-zA-Z0-8]*-prefix' > ${tmp} if test -s ${tmp}; then echo "* ${m} (try also '${CFG} --help')" cat ${tmp} fi rm -f ${tmp} fi done exit 0 ;; --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=`getarg "$arg"` ;; --srcdir | --srcdi | --srcd | --src | --sr) prev=srcdir passnext=configure ;; --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=*) subdir_configure_args="$subdir_configure_args $arg" prefix=`getarg "$arg"` makemake_args="$makemake_args --prefix=${prefix}" ;; --prefix | --prefi | --pref | --pre | --pr) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --prefix=" prev=prefix passnext=both ;; --exec_prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | -exec=* | --exe=* | --ex=*) subdir_configure_args="$subdir_configure_args $arg" exec_prefix=`getarg "$arg"` makemake_args="$makemake_args --exec-prefix="${exec_prefix} ;; --exec_prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- | -exec | --exe | --ex) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --exec-prefix=" prev=exec_prefix passnext=both ;; --fsstnd=* | --fsstn=* | --fsst=* | --fss=* | --fs=* | --f=*) makemake_args="$makemake_args --fsstnd="`getarg "$arg"` ;; --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --bindir="`getarg "$arg"` ;; --bindir | --bindi | --bind | --bin | --bi) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --bindir=" prev=bindir passnext=both ;; --libdir=* | --libdi=* | --libd=* | --lib=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --libdir="`getarg "$arg"` ;; --libdir | --libdi | --libd | --lib) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --libdir=" prev=libdir passnext=both ;; --includedir=* | --includedi=* | --included=* | --include=* | --includ=* | --inclu=* | --incl=* | --inc=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --includedir="`getarg "$arg"` ;; --includedir | --includedi | --included | --include | --includ | --inclu | --incl | --inc) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --includedir=" prev=includedir passnext=both ;; --datarootdir=* | --datarootdi=* | --datarootd=* | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --datarootdir="`getarg "$arg"` ;; --datarootdir | --datarootdi | --datarootd | --dataroot | --dataroo | --dataro | --datar) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --datarootdir=" prev=datarootdir passnext=both ;; --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* | --da=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --datadir="`getarg "$arg"` ;; --datadir | --datadi | --datad | --data | --dat | --da) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --datadir=" prev=datadir passnext=both ;; --localedir=* | --localedi=* | --localed=* | --locale=* | --local=* | --loca=* | --loc=* | --lo=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --localedir="`getarg "$arg"` ;; --localedir | --localedi | --localed | --locale | --local | --loca | --loc | --lo) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --localedir=" prev=localedir passnext=both ;; --docdir=* | --docdi=* | --docd=* | --doc=* | --do=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --docdir="`getarg "$arg"` ;; --docdir | --docdi | --docd | --doc | --do) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --docdir=" prev=docdir passnext=both ;; --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --mandir="`getarg "$arg"` ;; --mandir | --mandi | --mand | --man | --ma | --m) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --mandir=" prev=mandir passnext=both ;; --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --infodir="`getarg "$arg"` ;; --infodir | --infodi | --infod | --info | --inf) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --infodir=" prev=infodir passnext=both ;; --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* | --ht=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --htmldir="`getarg "$arg"` ;; --htmldir | --htmldi | --htmld | --html | --htm | --ht) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --htmldir=" prev=htmldir passnext=both ;; --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --dvidir="`getarg "$arg"` ;; --dvidir | --dvidi | --dvid | --dvi | --dv) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --dvidir=" prev=dvidir passnext=both ;; --psdir=* | --psdi=* | --psd=* | --ps=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --psdir="`getarg "$arg"` ;; --psdir | --psdi | --psd | --ps) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --psdir=" prev=psdir passnext=both ;; --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --pdfdir="`getarg "$arg"` ;; --pdfdir | --pdfdi | --pdfd | --pdf | --pd) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --pdfdir=" prev=pdfdir passnext=both ;; --elispdir=* | --elispdi=* | --elispd=* | --elisp=* | --elis=* | --eli=* | --el=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --elispdir="`getarg "$arg"` ;; --elispdir | --elispdi | --elispd | --elisp | --elis | --eli | --el) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --elispdir=" prev=elispdir passnext=both ;; --vimdir=* | --vimdi=* | --vimd=* | --vim=* | --vi=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --vimdir="`getarg "$arg"` ;; --vimdir | --vimdi | --vimd | --vim | --vi) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --vimdir=" prev=vimdir passnext=both ;; --aclocaldir=* | --aclocaldi=* | --aclocald=* | --aclocal=*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --aclocaldir="`getarg "$arg"` ;; --aclocaldir | --aclocaldi | --aclocald | --aclocal) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args --aclocaldir=" prev=aclocaldir passnext=both ;; --hyperspec=* | --hyperspe=* | --hypersp=* | --hypers=* | --hs=* | --hy=*) makemake_args="$makemake_args --hyperspec="`getarg "$arg"` ;; --quiet | --quie | --qui | --qu | --q | \ --silent | --silen | --sile | --sil | --si) subdir_configure_args="$subdir_configure_args $arg" ;; --host=* | --hos=* | --ho=*) target=cross subdir_configure_args="$subdir_configure_args $arg" ;; --host | --hos | --ho) target=cross subdir_configure_args="$subdir_configure_args $arg" prev=host passnext=configure ;; --build=* | --buil=* | --bui=* | --bu=*) target=cross subdir_configure_args="$subdir_configure_args $arg" ;; --build | --buil | --bui | --bu) target=cross subdir_configure_args="$subdir_configure_args $arg" prev=host passnext=configure ;; --with-debug) makemake_args="--verbose=yes $makemake_args" debug="debug" ;; --without-ffcall | --with-ffcall=no | --with-no-ffcall) subdir_configure_args="$subdir_configure_args $arg" do_ffi="no" ;; --with-ffcall | --with-ffcall=yes) subdir_configure_args="$subdir_configure_args $arg" do_ffi="yes" ;; --without-dynamic-modules | --with-dynamic-modules=no) makemake_args="--with-dynamic-modules=no ${makemake_args}" ;; --with-mingw | --with-no-cygwin | --without-cygwin | --with-cygwin=no) CC="${CC:-gcc} -mno-cygwin"; export CC; makemake_args="$makemake_args --win32gcc" ;; --with-module=*) note_module `getarg $arg` ;; --with-module) prev=with-module passnext=with-module ;; --with-* | --without-*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args $arg" ;; --enable-* | --disable-*) subdir_configure_args="$subdir_configure_args $arg" makemake_args="$makemake_args $arg" ;; --ignore-absence-of-libsigsegv) ignore_absence_of_libsigsegv=yes ;; -*) fail "$0: invalid argument $arg $0: Try \`$0 --help'" ;; *=*) # set a variable var=`echo $arg | sed 's/\([^=]*\)=.*/\1/'` val=`echo $arg | sed 's/[^=]*=\(.*\)/\1/'` eval "$var='$val'" export $var ;; *) # Everything else counts as a positional argument argcount=`expr $argcount + 1` eval "POSARG$argcount=\$arg" ;; esac fi done test -n "$prev" && fail "$0: missing argument to $prev $0: Try \`$0 --help'" DIRNAME=$POSARG1 COMPILER=$POSARG2 # deprecated if test -z "$do_config" -a -z "$do_cbc"; then # Default is --config do_config=1 fi # checking how to copy files echo "blabla" > conftest.x err=`/bin/sh -c "cp -p conftest.x conftest.y 2>&1 ; exit 0"` if test -z "$err"; then CP='cp -p' else CP='cp' fi rm -f conftest* # get the absolute pathname from a possibly relative one abs_pwd () { cd "$1" > /dev/null; pwd; } # link FILE1 FILE2 is like `ln', but chooses the cheapest alternative: # hard link if FILE1 and FILE2 on the same disk, else symbolic link if the # system supports that, else file copy. link () { rm -f "$2"; # Note: With some versions of "ln" this does not work if FILE2 is a symlink. if ln "$1" "$2" 2>/dev/null; then : else srcfile_dirname=`echo "$1" | sed -e 's,/[^/]*$,,'` test -n "$srcfile_dirname" || srcfile_dirname='/' srcfile_basename=`echo "$1" | sed -e 's,^.*/,,'` srcfile_absdirname=`abs_pwd "$srcfile_dirname"` if ln -s "$srcfile_absdirname/$srcfile_basename" "$2" 2>/dev/null; then : else $CP "$1" "$2" fi fi } maybe_link () { if [ -f "$1" ]; then link "$1" "$2"; fi; } # Note that we would need to call `/bin/pwd` if we wanted to compare two # directories for equality. But here we only need to get _some_ absolute # pathnames, hence `pwd` is enough. if test -f /bin/pwd ; then ABSPATHPWD=/bin/pwd else ABSPATHPWD=pwd fi abs_path_pwd () { cd "$1" > /dev/null; ${ABSPATHPWD}; } INPLACE='' if test -n "$srcdir" ; then test -d "$srcdir" || fail "$0: srcdir: ($srcdir) nonexistent" ABS_SRCDIR=`abs_pwd "$srcdir"`; if [ "$DIRNAME" = "" ] ; then DIRNAME='.' fi mkdir -p "${DIRNAME}"; REL_SRCDIR="$ABS_SRCDIR" else if test -f ./ANNOUNCE -a -f ./SUMMARY; then srcdir='.' ABS_SRCDIR=`abs_pwd "$srcdir"` if [ "$DIRNAME" = "" ] ; then DIRNAME=src fi else test -f ../ANNOUNCE -a -f ../SUMMARY || \ fail "$0: source directory not found, use --srcdir option" srcdir='..' ABS_SRCDIR=`abs_pwd "$srcdir"` if [ "$DIRNAME" = "" ] ; then DIRNAME='.' fi fi mkdir -p "${DIRNAME}"; if test `abs_path_pwd "$DIRNAME"/..` = `abs_path_pwd "$srcdir"` ; then REL_SRCDIR='..' else REL_SRCDIR="$ABS_SRCDIR" fi fi ABS_DIRNAME="`abs_pwd "$DIRNAME"`"; if test "`abs_path_pwd "$DIRNAME"`" = "`abs_path_pwd "$srcdir"/src`" ; then INPLACE=yes fi case "$REL_SRCDIR" in /*) RREL_SRCDIR="$REL_SRCDIR";; *) RREL_SRCDIR="../$REL_SRCDIR";; esac # srcdir top level source directory # (i.e. this script is $srcdir/configure) # ABS_SRCDIR absolute srcdir # REL_SRCDIR srcdir, relative to $DIRNAME # RREL_SRCDIR srcdir, relative to $DIRNAME/anysubdir # DIRNAME directory in which to build # ABS_DIRNAME absolute DIRNAME # INPLACE set if DIRNAME is the source directory, hence no links needed if test -n "$do_config"; then cd "$ABS_SRCDIR" if [ "$COMPILER" != "" ] ; then CC="$COMPILER" export CC fi if test -z "$INPLACE"; then # Create the po subdirectory and fill it for f in po; do if [ -d src/$f ] ; then mkdir -p "${ABS_DIRNAME}/${f}"; ( cd src for g in $f/* ; do maybe_link $g "$ABS_DIRNAME/$g"; done; ) fi done for f in configure config.h.in makemake.in version.h ; do maybe_link src/$f "$ABS_DIRNAME/$f"; done fi # no need to create subdirectories for the modules - makemake handles that # Prepare the configure files. chmod a+x "$ABS_DIRNAME/configure" # Start the configurations. if test -n "$INPLACE"; then subdir_srcdir_args='' else subdir_srcdir_args="--srcdir=$REL_SRCDIR/src" fi cd "${ABS_DIRNAME}"; echo "executing `pwd`/configure $*" ${CONFIG_SHELL} configure $subdir_srcdir_args \ $subdir_configure_args --cache-file=config.cache fi makemake_args="${makemake_args} ${subdir_srcdir_args}"; . "${ABS_DIRNAME}/config.cache" test -n "${target}" && target="${target} ${ac_cv_host} ${ac_cv_prog_CC}" makemake_args="${makemake_args} ${target} ${debug}"; test -n "${cl_cv_have_ffcall}" || cl_cv_have_ffcall=notchecked cat < /dev/null 2>&1 && \ ffi_modules=${ffi_modules}" ${module}" elif grep '.*\.c.*\.fas.*:\|.*\.fas.*\.c.*:' ${mdir}/Makefile > /dev/null 2>&1 ; then ffi_modules=${ffi_modules}" ${module}" elif grep ':use.*"FFI"' ${mdir}/*.lisp > /dev/null 2>&1; then ffi_modules=${ffi_modules}" ${module}" fi done if test -n "${ffi_modules}"; then test ${do_ffi} = no && \ fail "$0: --without-ffcall is incompatible with requested module(s):${ffi_modules}" test ${cl_cv_have_ffcall} = no && \ fail "$0: modules${ffi_modules} require FFI" fi if [ ${do_ffi} != no -a ${cl_cv_have_ffcall} = yes ]; then makemake_args="--with-dynamic-ffi ${makemake_args}" fi if [ "${gl_cv_lib_sigsegv}" != "yes" ]; then if [ "${ignore_absence_of_libsigsegv}" = "yes" ]; then echo "As you requested, we will proceed without libsigsegv..." else if [ "$ac_cv_build" = "$ac_cv_host" ]; then host_arg=""; else host_arg=" --host=$ac_cv_host"; fi SIGSEGV=libsigsegv-2.8 cat <&2 $0: libsigsegv was not detected, thus some features, such as generational garbage collection and stack overflow detection in interpreted Lisp code cannot be provided. Please install libsigsegv like this: EOF if [ "${CC+set}" = "set" ]; then echo " CC='$CC'; export CC" 1>&2 fi cat <&2 mkdir tools; cd tools; prefix=\`pwd\`/${ac_cv_host} wget http://ftp.gnu.org/pub/gnu/libsigsegv/${SIGSEGV}.tar.gz tar xfz ${SIGSEGV}.tar.gz cd ${SIGSEGV} ./configure${host_arg} --prefix=\${prefix} && make && make check && make install cd ../.. rm -f ${DIRNAME}/config.cache ./configure --with-libsigsegv-prefix=\${prefix} $* If you insist on building without libsigsegv, please pass --ignore-absence-of-libsigsegv to this script: ./configure --ignore-absence-of-libsigsegv $* If you have installed libsigsegv, but clisp does not detect it, you might have installed it incorrectly, see section 2 in in unix/INSTALL. EOF exit 1; fi fi # CLISP needs a lot of stack space for bootstrapping, # and insufficient stack space manifests itself via arbitrary GC errors. # it was believed that 8192 is enough until power5 came along: # https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=166347 STACK_LIMIT=16384 stacksizelimit=`ulimit -s 2>/dev/null || :` # cygwin /bin/sh ulimit is broken # need 3 separate test calls because of "integer expression expected" errors # when $stacksizelimit is "" or "unlimited" (no short-circuiting!) set +e; test -z "$stacksizelimit" || { test "$stacksizelimit" != unlimited && test "$stacksizelimit" -lt ${STACK_LIMIT}; } STACK_TOO_SMALL=$? # 0=true => need to reset; 1=false => big enough set -e cd "$ABS_DIRNAME" echo "./makemake $makemake_args > Makefile" ./makemake $makemake_args > Makefile make config.lisp if test -z "$do_cbc"; then echo echo "To continue building CLISP, the following commands are recommended" echo " (cf. unix/INSTALL step 4 ff):" if test "$DIRNAME" != "."; then echo " cd $DIRNAME" fi echo " ${EDITOR:-vi} config.lisp" if [ "${STACK_TOO_SMALL}" = 0 ]; then cat </dev/null; set -e; fi make make check fi clisp-2.49/doc/000077500000000000000000000000001142424315300133265ustar00rootroot00000000000000clisp-2.49/doc/CLOS-guide.txt000066400000000000000000000341361142424315300157310ustar00rootroot00000000000000Brief Guide to CLOS Written by Jeff Dalton, University of Edinburgh, Modified by Bruno Haible Contents: 1. Defining classes 2. Instances 3. Inheritance of slot options 4. Multiple inheritance 5. Generic functions and methods 6. Method combination 7. Quick reference [Think of upper case in things like DEFCLASS as literals -- I don't mean to imply that actual upper case would be used. "Thing*" means zero or more occurrences of thing; "thing+" means one or more. Curly brackets { and } are used for grouping, as in {a b}+, which means a b, a b a b, a b a b a b, etc.] 1. Defining classes. You define a class with DEFCLASS: (DEFCLASS class-name (superclass-name*) (slot-description*) class-option*) For simple things, forget about class options. A slot-description has the form (slot-name slot-option*), where each option is a keyword followed by a name, expression, or whatever. The most useful slot options are :ACCESSOR function-name :INITFORM expression :INITARG symbol (Initargs are usually keywords.) DEFCLASS is similar to DEFSTRUCT. The syntax is a bit different, and you have more control over what things are called. For instance, consider the DEFSTRUCT: (defstruct person (name 'bill) (age 10)) DEFSTRUCT would automatically define slots with expressions to compute default initial values, access-functions like PERSON-NAME to get and set slot values, and a MAKE-PERSON that took keyword initialization arguments (initargs) as in (make-person :name 'george :age 12) A DEFCLASS that provided similar access functions, etc, would be: (defclass person () ((name :accessor person-name :initform 'bill :initarg :name) (age :accessor person-age :initform 10 :initarg :age))) Note that DEFCLASS lets you control what things are called. For instance, you don't have to call the accessor PERSON-NAME. You could call it NAME. In general, you should pick names that make sense for a group of related classes rather than rigidly following the DEFSTRUCT conventions. You do not have to provide all options for every slot. Maybe you don't want it to be possible to initialize a slot when calling MAKE-INSTANCE (for which see below). In that case, don't provide an :INITARG. Or maybe there isn't a meaningful default value. (Perhaps the meaningful values will always be specified by a subclass.) In that case, no :INITFORM. Note that classes are objects. To get the class object from its name, use (FIND-CLASS name). Ordinarily, you won't need to do this. 2. Instances You can make an instance of a class with MAKE-INSTANCE. It's similar to the MAKE-x functions defined by DEFSTRUCT but lets you pass the class to instantiate as an argument: (MAKE-INSTANCE class {initarg value}*) Instead of the class object itself, you can use its name. For example: (make-instance 'person :age 100) This person object would have age 100 and name BILL, the default. It's often a good idea to define your own constructor functions, rather than call MAKE-INSTANCE directly, because you can hide implementation details and don't have to use keyword parameters for everything. For instance, you might want to define (defun make-person (name age) (make-instance 'person :name name :age age)) if you wanted the name and age to be required, positional parameters, rather than keyword parameters. The accessor functions can be used to get and set slot values: (setq p1 (make-instance 'person :name 'jill :age 100)) # (person-name p1) jill (person-age p1) 100 (setf (person-age p1) 101) 101 (person-age p1) 101 Note that when you use DEFCLASS, the instances are printed using the #<...> notation, rather than as #s(person :name jill :age 100). But you can change the way instances are printed by defining methods on the generic function PRINT-OBJECT. Slots can also be accessed by name using (SLOT-VALUE instance slot-name): (slot-value p1 'name) jill (setf (slot-value p1 'name) 'jillian) jillian (person-name p1) jillian You can find out various things about an instance by calling DESCRIBE: (describe p1) # is an instance of class #: The following slots have :INSTANCE allocation: age 101 name jillian 2. Inheritance of slot options The class above had no superclass. That's why there was a "()" after "defclass person". Actually, this means it has one superclass: the class STANDARD-OBJECT. When there are superclasses, a subclass can specify a slot that has already been specified for a superclass. When this happens, the information in slot options has to be combined. For the slot options listed above, either the option in the subclass overrides the one in the superclass or there is a union: :ACCESSOR -- union :INITARG -- union :INITFORM -- overrides This is what you should expect. The subclass can _change_ the default initial value by overriding the :INITFORM, and can add to the initargs and accessors. However, the "union" for accessor is just a consequence of how generic functions work. If they can apply to instances of a class C, they can also apply to instances of subclasses of C. (Accessor functions are generic. This may become clearer once generic functions are discussed, below.) Here are some subclasses: (defclass teacher (person) ((subject :accessor teacher-subject :initarg :subject))) # (defclass maths-teacher (teacher) ((subject :initform "Mathematics"))) # (setq p2 (make-instance 'maths-teacher :name 'john :age 34)) # (describe p2) # is an instance of class #: The following slots have :INSTANCE allocation: age 34 name john subject "Mathematics" Note that classes print like #. The #<...> notation usually has the form # So an instance of maths-teacher prints as #. The notation for the classes above indicates that they are instances of STANDARD-CLASS. DEFCLASS defines standard classes. DEFSTRUCT defines structure classes. 4. Multiple inheritance A class can have more than one superclass. With single inheritance (one superclass), it's easy to order the superclasses from most to least specific. This is the rule: Rule 1: Each class is more specific than its superclasses. In multiple inheritance this is harder. Suppose we have (defclass a (b c) ...) Class A is more specific than B or C (for instances of A), but what if something (an :INITFORM, or a method) is specified by B and C? Which overrides the other? The rule in CLOS is that the superclasses listed earlier are more specific than those listed later. So: Rule 2: For a given class, superclasses listed earlier are more specific than those listed later. These rules are used to compute a linear order for a class and all its superclasses, from most specific to least specific. This order is the "class precedence list" of the class. The two rules are not always enough to determine a unique order, however, so CLOS has an algorithm for breaking ties. This ensures that all implementations always produce the same order, but it's usually considered a bad idea for programmers to rely on exactly what the order is. If the order for some superclasses is important, it can be expressed directly in the class definition. 5. Generic functions and methods Generic function in CLOS are the closest thing to "messages". Instead of writing (SEND instance operation-name arg*) you write (operation-name instance arg*) The operations / messages are generic functions -- functions whose behavior can be defined for instances of particular classes by defining methods. (DEFGENERIC function-name lambda-list) can be used to define a generic function. You don't have to call DEFGENERIC, however, because DEFMETHOD automatically defines the generic function if it has not been defined already. On the other hand, it's often a good idea to use DEFGENERIC as a declaration that an operation exists and has certain parameters. Anyway, all of the interesting things happen in methods. A method is defined by: (DEFMETHOD generic-function-name specialized-lambda-list form*) This may look fairly cryptic, but compare it to DEFUN described in a similar way: (DEFUN function-name lambda-list form*) A "lambda list" is just a list of formal parameters, plus things like &OPTIONAL or &REST. It's because of such complications that we say "lambda-list" instead of "(parameter*)" when describing the syntax. [I won't say anything about &OPTIONAL, &REST, or &KEY in methods. The rules are in CLtL, if you want to know them.] So a normal function has a lambda list like (var1 var2 ...). A method has one in which each parameter can be "specialized" to a particular class. So it looks like: ((var1 class1) (var2 class2) ...) The specializer is optional. Omitting it means that the method can apply to instances of any class, including classes that were not defined by DEFCLASS. For example: (defmethod change-subject ((teach teacher) new-subject) (setf (teacher-subject teach) new-subject)) Here the new-subject could be any object. If you want to restrict it, you might do something like: (defmethod change-subject ((teach teacher) (new-subject string)) (setf (teacher-subject teach) new-subject)) Or you could define classes of subjects. Methods in "classical" object-oriented programming specialize only one parameter. In CLOS, you can specialize more than one. If you do, the method is sometimes called a multi-method. A method defined for a class C overrides any method defined for a superclass of C. The method for C is "more specific" than the method for the superclass, because C is more specific that the classes it inherits from (eg, dog is more specific than animal). For multi-methods, the determination of which method is more specific involves more than one parameter. The parameters are considered from left to right. (defmethod test ((x number) (y number)) '(num num)) (defmethod test ((i integer) (y number)) '(int num)) (defmethod test ((x number) (j integer)) '(num int)) (test 1 1) => (int num), not (num int) (test 1 1/2) => (int num) (test 1/2 1) => (num int) (test 1/2 1/2) => (num num) 6. Method combination. When more than one class defines a method for a generic function, and more than one method is applicable to a given set of arguments, the applicable methods are combined into a single "effective method". Each individual method definition is then only part of the definition of the effective method. One kind of method combination is always supported by CLOS. It is called standard method combination. It is also possible to define new kinds of method combination. Standard method combination involves four kinds of methods: * Primary methods form the main body of the effective method. Only the most specific primary method is called, but it can call the next most specific primary method by calling (call-next-method) * :BEFORE methods are all called before the primary method, with the most specific :BEFORE method called first. * :AFTER methods are all called after the primary method, with the most specific :AFTER method called last. * :AROUND methods run before the other methods. As with primary methods, only the most specific is called and the rest can be invoked by CALL-NEXT-METHOD. When the least specific :AROUND method calls CALL-NEXT-METHOD, what it calls is the combination of :BEFORE, :AFTER, and primary methods. :BEFORE, :AFTER, and :AROUND methods are indicated by putting the corresponding keyword as a qualifier in the method definition. :BEFORE and :AFTER methods are the easiest to use, and a simple example will show how they work: (defclass food () ()) (defmethod cook :before ((f food)) (print "A food is about to be cooked.")) (defmethod cook :after ((f food)) (print "A food has been cooked.")) (defclass pie (food) ((filling :accessor pie-filling :initarg :filling :initform 'apple))) (defmethod cook ((p pie)) (print "Cooking a pie") (setf (pie-filling p) (list 'cooked (pie-filling p)))) (defmethod cook :before ((p pie)) (print "A pie is about to be cooked.")) (defmethod cook :after ((p pie)) (print "A pie has been cooked.")) (setq pie-1 (make-instance 'pie :filling 'apple)) And now: (cook pie-1) "A pie is about to be cooked." "A food is about to be cooked." "Cooking a pie" "A food has been cooked." "A pie has been cooked." (cooked apple) 7. Quick reference Square brackets ("[" and "]") indicate optional elements. A vertical bar ("|") indicates an alternative. Thing* means zero or more occurrence of thing, thing+ means one or more occurrence. "{" and "}" are used for grouping. Defining a class: (DEFCLASS class-name (superclass-name*) (slot-description*)) Slot descriptions: (slot-name slot-option*) :ACCESSOR function-name :INITFORM expression :INITARG keyword-symbol Making instances: (MAKE-INSTANCE class {initarg value}*) Method definitions: (DEFMETHOD generic-function-name [qualifier] specialized-lambda-list form*) where generic-function-name is a symbol; qualifier is :BEFORE, :AFTER, :AROUND, or else omitted; specialized-lambda-list is ( {variable | (variable class-name)}* ) Some functions: (DESCRIBE instance) (DESCRIBE class) (FIND-CLASS class-name) -> class (CLASS-NAME class) -> symbol (CLASS-PRECEDENCE-LIST class) -> list of classes (CLASS-DIRECT-SUPERCLASSES class) -> list of classes (CLASS-DIRECT-SUBCLASSES class) -> list of classes clisp-2.49/doc/LISP-tutorial.txt000066400000000000000000000733661142424315300165160ustar00rootroot00000000000000 Common LISP Hints Geoffrey J. Gordon Friday, February 5, 1993 Modified by Bruno Haible Note: This tutorial introduction to Common Lisp was written for the CMU environment, so some of the details of running lisp toward the end may differ from site to site. Further Information The best LISP textbook I know of is Guy L. Steele Jr. _Common LISP: the Language_. Digital Press. 1984. The first edition is easier to read; the second describes a more recent standard. (The differences between the two standards shouldn't affect casual programmers.) A book by Dave Touretsky has also been recommended to me, although I haven't read it, so I can't say anything about it. Symbols A symbol is just a string of characters. There are restrictions on what you can include in a symbol and what the first character can be, but as long as you stick to letters, digits, and hyphens, you'll be safe. (Except that if you use only digits and possibly an initial hyphen, LISP will think you typed an integer rather than a symbol.) Some examples of symbols: a b c1 foo bar baaz-quux-garply Some things you can do with symbols follow. (Things after a ">" prompt are what you type to the LISP interpreter, while other things are what the LISP interpreter prints back to you. The ";" is LISP's comment character: everything from a ";" to the end of line is ignored.) > (setq a 5) ;store a number as the value of a symbol 5 > a ;take the value of a symbol 5 > (let ((a 6)) a) ;bind the value of a symbol temporarily to 6 6 > a ;the value returns to 5 once the let is finished 5 > (+ a 6) ;use the value of a symbol as an argument to a function 11 > b ;try to take the value of a symbol which has no value Error: Attempt to take the value of the unbound symbol B There are two special symbols, t and nil. The value of t is defined always to be t, and the value of nil is defined always to be nil. LISP uses t and nil to represent true and false. An example of this use is in the if statement, described more fully later: > (if t 5 6) 5 > (if nil 5 6) 6 > (if 4 5 6) 5 The last example is odd but correct: nil means false, and anything else means true. (Unless we have a reason to do otherwise, we use t to mean true, just for the sake of clarity.) Symbols like t and nil are called self-evaluating symbols, because they evaluate to themselves. There is a whole class of self-evaluating symbols called keywords; any symbol whose name starts with a colon is a keyword. (See below for some uses for keywords.) Some examples: > :this-is-a-keyword :THIS-IS-A-KEYWORD > :so-is-this :SO-IS-THIS > :me-too :ME-TOO Numbers An integer is a string of digits optionally preceded by + or -. A real number looks like an integer, except that it has a decimal point and optionally can be written in scientific notation. A rational looks like two integers with a / between them. LISP supports complex numbers, which are written #c(r i) (where r is the real part and i is the imaginary part). A number is any of the above. Here are some numbers: 5 17 -34 +6 3.1415 1.722e-15 #c(1.722e-15 0.75) The standard arithmetic functions are all available: +, -, *, /, floor, ceiling, mod, sin, cos, tan, sqrt, exp, expt, and so forth. All of them accept any kind of number as an argument. +, -, *, and / return a number according to type contagion: an integer plus a rational is a rational, a rational plus a real is a real, and a real plus a complex is a complex. Here are some examples: > (+ 3 3/4) ;type contagion 15/4 > (exp 1) ;e 2.7182817 > (exp 3) ;e*e*e 20.085537 > (expt 3 4.2) ;exponent with a base other than e 100.90418 > (+ 5 6 7 (* 8 9 10)) ;the fns +-*/ all accept multiple arguments There is no limit to the absolute value of an integer except the memory size of your computer. Be warned that computations with bignums (as large integers are called) can be slow. (So can computations with rationals, especially compared to the corresponding computations with small integers or floats.) Conses A cons is just a two-field record. The fields are called "car" and "cdr", for historical reasons. (On the first machine where LISP was implemented, there were two instructions CAR and CDR which stood for "contents of address register" and "contents of decrement register". Conses were implemented using these two registers.) Conses are easy to use: > (cons 4 5) ;Allocate a cons. Set the car to 4 and the cdr to 5. (4 . 5) > (cons (cons 4 5) 6) ((4 . 5) . 6) > (car (cons 4 5)) 4 > (cdr (cons 4 5)) 5 Lists You can build many structures out of conses. Perhaps the simplest is a linked list: the car of each cons points to one of the elements of the list, and the cdr points either to another cons or to nil. You can create such a linked list with the list fuction: > (list 4 5 6) (4 5 6) Notice that LISP prints linked lists a special way: it omits some of the periods and parentheses. The rule is: if the cdr of a cons is nil, LISP doesn't bother to print the period or the nil; and if the cdr of cons A is cons B, then LISP doesn't bother to print the period for cons A or the parentheses for cons B. So: > (cons 4 nil) (4) > (cons 4 (cons 5 6)) (4 5 . 6) > (cons 4 (cons 5 (cons 6 nil))) (4 5 6) The last example is exactly equivalent to the call (list 4 5 6). Note that nil now means the list with no elements: the cdr of (a b), a list with 2 elements, is (b), a list with 1 element; and the cdr of (b), a list with 1 element, is nil, which therefore must be a list with no elements. The car and cdr of nil are defined to be nil. If you store your list in a variable, you can make it act like a stack: > (setq a nil) NIL > (push 4 a) (4) > (push 5 a) (5 4) > (pop a) 5 > a (4) > (pop a) 4 > (pop a) NIL > a NIL Functions You saw one example of a function above. Here are some more: > (+ 3 4 5 6) ;this function takes any number of arguments 18 > (+ (+ 3 4) (+ (+ 4 5) 6)) ;isn't prefix notation fun? 22 > (defun foo (x y) (+ x y 5)) ;defining a function FOO > (foo 5 0) ;calling a function 10 > (defun fact (x) ;a recursive function (if (> x 0) (* x (fact (- x 1))) 1)) FACT > (fact 5) 120 > (defun a (x) (if (= x 0) t (b (- x)))) ;mutually recursive functions A > (defun b (x) (if (> x 0) (a (- x 1)) (a (+ x 1)))) B > (a 5) T > (defun bar (x) ;a function with multiple statements in (setq x (* x 3)) ;its body -- it will return the value (setq x (/ x 2)) ;returned by its final statement (+ x 4)) BAR > (bar 6) 13 When we defined foo, we gave it two arguments, x and y. Now when we call foo, we are required to provide exactly two arguments: the first will become the value of x for the duration of the call to foo, and the second will become the value of y for the duration of the call. In LISP, most variables are lexically scoped; that is, if foo calls bar and bar tries to reference x, bar will not get foo's value for x. The process of assigning a symbol a value for the duration of some lexical scope is called binding. You can specify optional arguments for your functions. Any argument after the symbol &optional is optional: > (defun bar (x &optional y) (if y x 0)) BAR > (defun baaz (&optional (x 3) (z 10)) (+ x z)) BAAZ > (bar 5) 0 > (bar 5 t) 5 > (baaz 5) 15 > (baaz 5 6) 11 > (baaz) 13 It is legal to call the function bar with either one or two arguments. If it is called with one argument, x will be bound to the value of that argument and y will be bound to nil; if it is called with two arguments, x and y will be bound to the values of the first and second argument, respectively. The function baaz has two optional arguments. It specifies a default value for each of them: if the caller specifies only one argument, z will be bound to 10 instead of to nil, and if the caller specifies no arguments, x will be bound to 3 and z to 10. You can make your function accept any number of arguments by ending its argument list with an &rest parameter. LISP will collect all arguments not otherwise accounted for into a list and bind the &rest parameter to that list. So: > (defun foo (x &rest y) y) FOO > (foo 3) NIL > (foo 4 5 6) (5 6) Finally, you can give your function another kind of optional argument called a keyword argument. The caller can give these arguments in any order, because they're labelled with keywords. > (defun foo (&key x y) (cons x y)) FOO > (foo :x 5 :y 3) (5 . 3) > (foo :y 3 :x 5) (5 . 3) > (foo :y 3) (NIL . 3) > (foo) (NIL) An &key parameter can have a default value too: > (defun foo (&key (x 5)) x) FOO > (foo :x 7) 7 > (foo) 5 Printing Some functions can cause output. The simplest one is print, which prints its argument and then returns it. > (print 3) 3 3 The first 3 above was printed, the second was returned. If you want more complicated output, you will need to use format. Here's an example: > (format t "An atom: ~S~%and a list: ~S~%and an integer: ~D~%" nil (list 5) 6) An atom: NIL and a list: (5) and an integer: 6 The first argument to format is either t, nil, or a stream. T specifies output to the terminal. Nil means not to print anything but to return a string containing the output instead. Streams are general places for output to go: they can specify a file, or the terminal, or another program. This handout will not describe streams in any further detail. The second argument is a formatting template, which is a string optionally containing formatting directives. All remaining arguments may be referred to by the formatting directives. LISP will replace the directives with some appropriate characters based on the arguments to which they refer and then print the resulting string. Format always returns nil unless its first argument is nil, in which case it prints nothing and returns a string. There are three different directives in the above example: ~S, ~D, and ~%. The first one accepts any LISP object and is replaced by a printed representation of that object (the same representation which is produced by print). The second one accepts only integers. The third one doesn't refer to an argument; it is always replaced by a carriage return. Another useful directive is ~~, which is replaced by a single ~. Refer to a LISP manual for (many, many) additional formatting directives. Forms and the Top-Level Loop The things which you type to the LISP interpreter are called forms; the LISP interpreter repeatedly reads a form, evaluates it, and prints the result. This procedure is called the read-eval-print loop. Some forms will cause errors. After an error, LISP will put you into the debugger so you can try to figure out what caused the error. LISP debuggers are all different; but most will respond to the command "help" or ":help" by giving some form of help. In general, a form is either an atom (for example, a symbol, an integer, or a string) or a list. If the form is an atom, LISP evaluates it immediately. Symbols evaluate to their value; integers and strings evaluate to themselves. If the form is a list, LISP treats its first element as the name of a function; it evaluates the remaining elements recursively, and then calls the function with the values of the remaining elements as arguments. For example, if LISP sees the form (+ 3 4), it treats + as the name of a function. It then evaluates 3 to get 3 and 4 to get 4; finally it calls + with 3 and 4 as the arguments. The + function returns 7, which LISP prints. The top-level loop provides some other conveniences; one particularly convenient convenience is the ability to talk about the results of previously typed forms. LISP always saves its most recent three results; it stores them as the values of the symbols *, **, and ***. For example: > 3 3 > 4 4 > 5 5 > *** 3 > *** 4 > *** 5 > ** 4 > * 4 Special forms There are a number of special forms which look like function calls but aren't. These include control constructs such as if statements and do loops; assignments like setq, setf, push, and pop; definitions such as defun and defstruct; and binding constructs such as let. (Not all of these special forms have been mentioned yet. See below.) One useful special form is the quote form: quote prevents its argument from being evaluated. For example: > (setq a 3) 3 > a 3 > (quote a) A > 'a ;'a is an abbreviation for (quote a) A Another similar special form is the function form: function causes its argument to be interpreted as a function rather than being evaluated. For example: > (setq + 3) 3 > + 3 > '+ + > (function +) # > #'+ ;#'+ is an abbreviation for (function +) # The function special form is useful when you want to pass a function as an argument to another function. See below for some examples of functions which take functions as arguments. Binding Binding is lexically scoped assignment. It happens to the variables in a function's parameter list whenever the function is called: the formal parameters are bound to the actual parameters for the duration of the function call. You can bind variables anywhere in a program with the let special form, which looks like this: (let ((var1 val1) (var2 val2) ...) body) Let binds var1 to val1, var2 to val2, and so forth; then it executes the statements in its body. The body of a let follows exactly the same rules that a function body does. Some examples: > (let ((a 3)) (+ a 1)) 4 > (let ((a 2) (b 3) (c 0)) (setq c (+ a b)) c) 5 > (setq c 4) 4 > (let ((c 5)) c) 5 > c 4 Instead of (let ((a nil) (b nil)) ...), you can write (let (a b) ...). The val1, val2, etc. inside a let cannot reference the variables var1, var2, etc. that the let is binding. For example, > (let ((x 1) (y (+ x 1))) y) Error: Attempt to take the value of the unbound symbol X If the symbol x already has a global value, stranger happenings will result: > (setq x 7) 7 > (let ((x 1) (y (+ x 1))) y) 8 The let* special form is just like let except that it allows values to reference variables defined earlier in the let*. For example, > (setq x 7) 7 > (let* ((x 1) (y (+ x 1))) y) 2 The form (let* ((x a) (y b)) ...) is equivalent to (let ((x a)) (let ((y b)) ...)) Dynamic Scoping The let and let* forms provide lexical scoping, which is what you expect if you're used to programming in C or Pascal. Dynamic scoping is what you get in BASIC: if you assign a value to a dynamically scoped variable, every mention of that variable returns that value until you assign another value to the same variable. In LISP, dynamically scoped variables are called special variables. You can declare a special variable with the defvar special form. Here are some examples of lexically and dynamically scoped variables. In this example, the function check-regular references a regular (ie, lexically scoped) variable. Since check-regular is lexically outside of the let which binds regular, check-regular returns the variable's global value. > (setq regular 5) 5 > (defun check-regular () regular) CHECK-REGULAR > (check-regular) 5 > (let ((regular 6)) (check-regular)) 5 In this example, the function check-special references a special (ie, dynamically scoped) variable. Since the call to check-special is temporally inside of the let which binds special, check-special returns the variable's local value. > (defvar *special* 5) *SPECIAL* > (defun check-special () *special*) CHECK-SPECIAL > (check-special) 5 > (let ((*special* 6)) (check-special)) 6 By convention, the name of a special variable begins and ends with a *. Special variables are chiefly used as global variables, since programmers usually expect lexical scoping for local variables and dynamic scoping for global variables. For more information on the difference between lexical and dynamic scoping, see _Common LISP: the Language_. Arrays The function make-array makes an array. The aref function accesses its elements. All elements of an array are initially set to nil. For example: > (make-array '(3 3)) #2a((NIL NIL NIL) (NIL NIL NIL) (NIL NIL NIL)) > (aref * 1 1) NIL > (make-array 4) ;1D arrays don't need the extra parens #(NIL NIL NIL NIL) Array indices always start at 0. See below for how to set the elements of an array. Strings A string is a sequence of characters between double quotes. LISP represents a string as a variable-length array of characters. You can write a string which contains a double quote by preceding the quote with a backslash; a double backslash stands for a single backslash. For example: "abcd" has 4 characters "\"" has 1 character "\\" has 1 character Here are some functions for dealing with strings: > (concatenate 'string "abcd" "efg") "abcdefg" > (char "abc" 1) #\b ;LISP writes characters preceded by #\ > (aref "abc" 1) #\b ;remember, strings are really arrays The concatenate function can actually work with any type of sequence: > (concatenate 'string '(#\a #\b) '(#\c)) "abc" > (concatenate 'list "abc" "de") (#\a #\b #\c #\d #\e) > (concatenate 'vector '#(3 3 3) '#(3 3 3)) #(3 3 3 3 3 3) Structures LISP structures are analogous to C structs or Pascal records. Here is an example: > (defstruct foo bar baaz quux) FOO This example defines a data type called foo which is a structure containing 3 fields. It also defines 4 functions which operate on this data type: make-foo, foo-bar, foo-baaz, and foo-quux. The first one makes a new object of type foo; the others access the fields of an object of type foo. Here is how to use these functions: > (make-foo) #s(FOO :BAR NIL :BAAZ NIL :QUUX NIL) > (make-foo :baaz 3) #s(FOO :BAR NIL :BAAZ 3 :QUUX NIL) > (foo-bar *) NIL > (foo-baaz **) 3 The make-foo function can take a keyword argument for each of the fields a structure of type foo can have. The field access functions each take one argument, a structure of type foo, and return the appropriate field. See below for how to set the fields of a structure. Setf Certain forms in LISP naturally define a memory location. For example, if the value of x is a structure of type foo, then (foo-bar x) defines the bar field of the value of x. Or, if the value of y is a one- dimensional array, (aref y 2) defines the third element of y. The setf special form uses its first argument to define a place in memory, evaluates its second argument, and stores the resulting value in the resulting memory location. For example, > (setq a (make-array 3)) #(NIL NIL NIL) > (aref a 1) NIL > (setf (aref a 1) 3) 3 > a #(NIL 3 NIL) > (aref a 1) 3 > (defstruct foo bar) FOO > (setq a (make-foo)) #s(FOO :BAR NIL) > (foo-bar a) NIL > (setf (foo-bar a) 3) 3 > a #s(FOO :BAR 3) > (foo-bar a) 3 Setf is the only way to set the fields of a structure or the elements of an array. Here are some more examples of setf and related functions. > (setf a (make-array 1)) ;setf on a variable is equivalent to setq #(NIL) > (push 5 (aref a 0)) ;push can act like setf (5) > (pop (aref a 0)) ;so can pop 5 > (setf (aref a 0) 5) 5 > (incf (aref a 0)) ;incf reads from a place, increments, 6 ;and writes back > (aref a 0) 6 Booleans and Conditionals LISP uses the self-evaluating symbol nil to mean false. Anything other than nil means true. Unless we have a reason not to, we usually use the self-evaluating symbol t to stand for true. LISP provides a standard set of logical functions, for example and, or, and not. The and and or connectives are short-circuiting: and will not evaluate any arguments to the right of the first one which evaluates to nil, while or will not evaluate any arguments to the right of the first one which evaluates to t. LISP also provides several special forms for conditional execution. The simplest of these is if. The first argument of if determines whether the second or third argument will be executed: > (if t 5 6) 5 > (if nil 5 6) 6 > (if 4 5 6) 5 If you need to put more than one statement in the then or else clause of an if statement, you can use the progn special form. Progn executes each statement in its body, then returns the value of the final one. > (setq a 7) 7 > (setq b 0) 0 > (setq c 5) 5 > (if (> a 5) (progn (setq a (+ b 7)) (setq b (+ c 8))) (setq b 4)) 13 An if statement which lacks either a then or an else clause can be written using the when or unless special form: > (when t 3) 3 > (when nil 3) NIL > (unless t 3) NIL > (unless nil 3) 3 When and unless, unlike if, allow any number of statements in their bodies. (Eg, (when x a b c) is equivalent to (if x (progn a b c)).) > (when t (setq a 5) (+ a 6)) 11 More complicated conditionals can be defined using the cond special form, which is equivalent to an if ... else if ... fi construction. A cond consists of the symbol cond followed by a number of cond clauses, each of which is a list. The first element of a cond clause is the condition; the remaining elements (if any) are the action. The cond form finds the first clause whose condition evaluates to true (ie, doesn't evaluate to nil); it then executes the corresponding action and returns the resulting value. None of the remaining conditions are evaluated; nor are any actions except the one corresponding to the selected condition. For example: > (setq a 3) 3 > (cond ((evenp a) a) ;if a is even return a ((> a 7) (/ a 2)) ;else if a is bigger than 7 return a/2 ((< a 5) (- a 1)) ;else if a is smaller than 5 return a-1 (t 17)) ;else return 17 2 If the action in the selected cond clause is missing, cond returns what the condition evaluated to: > (cond ((+ 3 4))) 7 Here's a clever little recursive function which uses cond. You might be interested in trying to prove that it terminates for all integers x at least 1. (If you succeed, please publish the result.) > (defun hotpo (x steps) ;hotpo stands for Half Or Triple Plus One (cond ((= x 1) steps) ((oddp x) (hotpo (+ 1 (* x 3)) (+ 1 steps))) (t (hotpo (/ x 2) (+ 1 steps))))) A > (hotpo 7 0) 16 The LISP case statement is like a C switch statement: > (setq x 'b) B > (case x (a 5) ((d e) 7) ((b f) 3) (otherwise 9)) 3 The otherwise clause at the end means that if x is not a, b, d, e, or f, the case statement will return 9. Iteration The simplest iteration construct in LISP is loop: a loop construct repeatedly executes its body until it hits a return special form. For example, > (setq a 4) 4 > (loop (setq a (+ a 1)) (when (> a 7) (return a))) 8 > (loop (setq a (- a 1)) (when (< a 3) (return))) NIL The next simplest is dolist: dolist binds a variable to the elements of a list in order and stops when it hits the end of the list. > (dolist (x '(a b c)) (print x)) A B C NIL Dolist always returns nil. Note that the value of x in the above example was never nil: the NIL below the C was the value that dolist returned, printed by the read-eval-print loop. The most complicated iteration primitive is called do. A do statement looks like this: > (do ((x 1 (+ x 1)) (y 1 (* y 2))) ((> x 5) y) (print y) (print 'working)) 1 WORKING 2 WORKING 4 WORKING 8 WORKING 16 WORKING 32 The first part of a do specifies what variables to bind, what their initial values are, and how to update them. The second part specifies a termination condition and a return value. The last part is the body. A do form binds its variables to their initial values like a let, then checks the termination condition. As long as the condition is false, it executes the body repeatedly; when the condition becomes true, it returns the value of the return-value form. The do* form is to do as let* is to let. Non-local Exits The return special form mentioned in the section on iteration is an example of a nonlocal return. Another example is the return-from form, which returns a value from the surrounding function: > (defun foo (x) (return-from foo 3) x) FOO > (foo 17) 3 Actually, the return-from form can return from any named block -- it's just that functions are the only blocks which are named by default. You can create a named block with the block special form: > (block foo (return-from foo 7) 3) 7 The return special form can return from any block named nil. Loops are by default labelled nil, but you can make your own nil-labelled blocks: > (block nil (return 7) 3) 7 Another form which causes a nonlocal exit is the error form: > (error "This is an error") Error: This is an error The error form applies format to its arguments, then places you in the debugger. Funcall, Apply, and Mapcar Earlier I promised to give some functions which take functions as arguments. Here they are: > (funcall #'+ 3 4) 7 > (apply #'+ 3 4 '(3 4)) 14 > (mapcar #'not '(t nil t nil t nil)) (NIL T NIL T NIL T) Funcall calls its first argument on its remaining arguments. Apply is just like funcall, except that its final argument should be a list; the elements of that list are treated as if they were additional arguments to a funcall. The first argument to mapcar must be a function of one argument; mapcar applies this function to each element of a list and collects the results in another list. Funcall and apply are chiefly useful when their first argument is a variable. For instance, a search engine could take a heuristic function as a parameter and use funcall or apply to call that function on a state description. The sorting functions described later use funcall to call their comparison functions. Mapcar, along with nameless functions (see below), can replace many loops. Lambda If you just want to create a temporary function and don't want to bother giving it a name, lambda is what you need. > #'(lambda (x) (+ x 3)) (LAMBDA (X) (+ X 3)) > (funcall * 5) 8 The combination of lambda and mapcar can replace many loops. For example, the following two forms are equivalent: > (do ((x '(1 2 3 4 5) (cdr x)) (y nil)) ((null x) (reverse y)) (push (+ (car x) 2) y)) (3 4 5 6 7) > (mapcar #'(lambda (x) (+ x 2)) '(1 2 3 4 5)) (3 4 5 6 7) Sorting LISP provides two primitives for sorting: sort and stable-sort. > (sort '(2 1 5 4 6) #'<) (1 2 4 5 6) > (sort '(2 1 5 4 6) #'>) (6 5 4 2 1) The first argument to sort is a list; the second is a comparison function. The sort function does not guarantee stability: if there are two elements a and b such that (and (not (< a b)) (not (< b a))), sort may arrange them in either order. The stable-sort function is exactly like sort, except that it guarantees that two equivalent elements appear in the sorted list in the same order that they appeared in the original list. Be careful: sort is allowed to destroy its argument, so if the original sequence is important to you, make a copy with the copy-list or copy-seq function. Equality LISP has many different ideas of equality. Numerical equality is denoted by =. Two symbols are eq if and only if they are identical. Two copies of the same list are not eq, but they are equal. > (eq 'a 'a) T > (eq 'a 'b) NIL > (= 3 4) NIL > (eq '(a b c) '(a b c)) NIL > (equal '(a b c) '(a b c)) T > (eql 'a 'a) T > (eql 3 3) T The eql predicate is equivalent to eq for symbols and to = for numbers or the same type: > (eql 2.0 2) NIL > (= 2.0 2) T > (eq 12345678901234567890 12345678901234567890) NIL > (= 12345678901234567890 12345678901234567890) T > (eql 12345678901234567890 12345678901234567890) T The equal predicate is equivalent to eql for symbols and numbers. It is true for two conses if and only if their cars are equal and their cdrs are equal. It is true for two structures if and only if the structures are the same type and their corresponding fields are equal. Some Useful List Functions These functions all manipulate lists. > (append '(1 2 3) '(4 5 6)) ;concatenate lists (1 2 3 4 5 6) > (reverse '(1 2 3)) ;reverse the elements of a list (3 2 1) > (member 'a '(b d a c)) ;set membership -- returns the first tail (A C) ;whose car is the desired element > (find 'a '(b d a c)) ;another way to do set membership A > (find '(a b) '((a d) (a d e) (a b d e) ()) :test #'subsetp) (A B D E) ;find is more flexible though > (subsetp '(a b) '(a d e)) ;set containment NIL > (intersection '(a b c) '(b)) ;set intersection (B) > (union '(a) '(b)) ;set union (A B) > (set-difference '(a b) '(a)) ;set difference (B) Subsetp, intersection, union, and set-difference all assume that each argument contains no duplicate elements -- (subsetp '(a a) '(a b b)) is allowed to fail, for example. Find, subsetp, intersection, union, and set-difference can all take a :test keyword argument; by default, they all use eql. Getting Started with Emacs You can use Emacs to edit LISP code: most Emacses are set up to enter LISP mode automatically when they find a file which ends in .lisp, but if yours isn't, you can type M-x lisp-mode. You can run LISP under Emacs, too: make sure that there is a command in your path called "lisp" which runs your favorite LISP. For example, you could type ln -s /usr/local/bin/clisp ~/bin/lisp Then in Emacs type M-x run-lisp. You can send LISP code to the LISP you just started, and do all sorts of other cool things; for more information, type C-h m from any buffer which is in LISP mode. Actually, you don't even need to make a link. Emacs has a variable called inferior-lisp-program; so if you add the line (setq inferior-lisp-program "/usr/local/bin/clisp") to your .emacs file, Emacs will know where to find CLISP when you type M-x run-lisp. clisp-2.49/doc/Makefile000066400000000000000000000237341142424315300147770ustar00rootroot00000000000000# CLISP Implementation Notes generation # (c) 2000-2009 Sam Steingold # To generate HTML, you will need xsltproc & xmllint from the libxml2 # (http://xmlsoft.org/) package in addition to the DocBook DTDs and XSL # stylesheets (http://www.docbook.org/) # When writing docbook documentation, you need the "DocBook Definitive Guide" # http://docbook.org/tdg/en/html/docbook-x.html # which DTD to validate against DTDVER=4.5 # all included XML files IMPNOTES=cl-ent.xml clhs-ent.xml impbody.xml impent.xml mop.xml gray.xml \ impext.xml impissue.xml impbyte.xml unix-ent.xml mop-ent.xml faq.xml \ history.xml \ ../modules/berkeley-db/berkeley-db.xml \ ../modules/berkeley-db/ent-bdb.xml \ ../modules/dbus/dbus.xml \ ../modules/dirkey/dirkey.xml \ ../modules/fastcgi/fastcgi.xml \ ../modules/gdbm/gdbm.xml \ ../modules/gtk2/gtk.xml \ ../modules/i18n/i18n.xml \ ../modules/libsvm/svm.xml \ ../modules/matlab/matlab.xml \ ../modules/netica/netica.xml \ ../modules/oracle/oracle.xml \ ../modules/pari/pari.xml \ ../modules/pcre/pcre.xml \ ../modules/postgresql/postgresql.xml \ ../modules/rawsock/rawsock.xml \ ../modules/readline/readline.xml \ ../modules/regexp/regexp.xml \ ../modules/syscalls/syscalls.xml \ ../modules/wildcard/wildcard.xml \ ../modules/zlib/zlib.xml # all used stylesheets CLISP_XSL = chunk.xsl common.xsl fo.xsl id-href-map.xsl man.xsl pile.xsl CLISP_CSS = impnotes.css # targets for resolution OLINK = man.tdb clink.tdb pile.tdb chunk.tdb olink-pile.xml olink-chunk.xml RM=/bin/rm -f CURDIR=$(shell pwd) # what to do when there is no local system-wide DTD & XSL? DOWNLOAD=yes ifneq (,$(filter Windows%,$(OS))) DTD_PATH=$(firstword $(wildcard ./docbook-dtd*/docbookx.dtd \ /usr/share/docbook-xml$(DTDVER)/docbookx.dtd)) # Make sure to use a trailing slash. XSL_PATH=$(firstword $(wildcard ./docbook-xsl*/ \ /usr/share/docbook-xsl*/)) FOP=/cygdrive/c/java/fop-0.20.5/fop.bat else DTD_PATH=$(firstword $(wildcard ./docbook-dtd*/docbookx.dtd \ /usr/share/sgml/docbook/xml-dtd-$(DTDVER)*/docbookx.dtd \ /usr/share/xml/docbook/schema/dtd/$(DTDVER)*/docbookx.dtd)) XSL_PATH=$(firstword $(wildcard ./docbook-xsl*/ \ /usr/share/sgml/docbook/xsl-stylesheets-1*/ \ /usr/share/xml/docbook/stylesheet/nwalsh*/)) FOP=../../../fop/fop endif IN_FILES = impnotes.xml clisp.xml clisp-link.xml # common dependencies for all checkers CHECK_DEPS = $(IN_FILES) ifeq (,$(wildcard $(DTD_PATH))) # DTD does not exist ifeq (yes,$(DOWNLOAD)) # download once CHECK_DEPS += docbook-dtd DTD_PATH=./docbook-dtd/docbookx.dtd else # download on each check (you need network-aware tools to use it) # this is the original DTD DTD_PATH=http://www.oasis-open.org/docbook/xml/$(DTDVER)/docbookx.dtd #DTD_PATH=http://www.docbook.org/xml/$(DTDVER)/docbookx.dtd endif endif # common dependencies for all generators GEN_DEPS = common.xsl ifeq (,$(wildcard $(XSL_PATH))) # stylesheets do not exist ifeq (yes,$(DOWNLOAD)) # download once GEN_DEPS += docbook-xsl XSL_PATH=./docbook-xsl/ else # download on each build (you need network-aware tools to use it) XSL_PATH=http://docbook.xml-doc.org/snapshots/xsl/ # XSL_PATH=http://docbook.sourceforge.net/release/xsl/snapshot/ # XSL_PATH=http://docbook.sourceforge.net/release/xsl/current/ endif endif # The xmlcatalog utility (from libxml2) XMLCATALOG=xmlcatalog # chose one: #TEXI2HTML=texi2html -monolithic -verbose $< -out_file $@ TEXI2HTML=makeinfo --verbose --no-split --no-headers --html $< -o $@ # NB: keep in sync with src/makemake.in:MYIMPROOT DIST_PODVAL = podval:~/public_html/clisp DIST_SFBETA = sds,clisp@web.sf.net:/home/groups/c/cl/clisp/htdocs/beta DIST = ${DIST_PODVAL} RSYNC = rsync -avC --copy-unsafe-links CHMOD = chmod -R a+rX ##### nothing user-serviceable below ##### # name of XML catalog file to create # (if not specified, no local catalog created or used) CATALOG_FILE=catalog.xml # Stylesheets URI used internally in the CLISP project *.xsl files. XSL_URI=http://docbook.sourceforge.net/release/xsl/current/ FILLIN=. ../version.sh && sed -e 's,@DTD@,$(DTD_PATH),' \ -e 's,@DTDVER@,$(DTDVER),' \ -e 's,@VERSION@,'$${VERSION_NUMBER}',' \ -e 's,@TODAY@,'`date +"%Y-%m-%d"`',' # cannot use profiling # because that would require XSL tools to be installed on user machine SGML_UNCOMMENT=-e 's/^$$/\#\1/' E=\ * * ROFF_UNCOMMENT=-e 's/^$E$$/\1/' -e 's/$E$$/\n\1/' -e 's/^$E/\1\n/' -e 's/$E/\n\1\n/g' .PHONY : all up count search clean all: check impnotes.html regexp.html man ifneq (,$(CATALOG_FILE)) # depends on Makefile because of $(XSL_PATH) $(CATALOG_FILE): Makefile $(RM) $(CATALOG_FILE) $(XMLCATALOG) --create > $(CATALOG_FILE) $(XMLCATALOG) --noout --add "rewriteURI" \ $(XSL_URI) $(XSL_PATH) $(CATALOG_FILE) $(XMLCATALOG) --noout --add "rewriteSystem" \ $(XSL_URI) $(XSL_PATH) $(CATALOG_FILE) XSLTPROC=XML_CATALOG_FILES="$(CATALOG_FILE) ${XML_CATALOG_FILES}" xsltproc else XSLTPROC=xsltproc endif XMLS_COMMON = --timing --xinclude GOOGLEADS=0 MAKE_TDB=$(XSLTPROC) $(XMLS_COMMON) --stringparam collect.xref.targets "only" \ --stringparam targets.filename man.tdb: clisp.xml pile.xsl $(GEN_DEPS) $(CATALOG_FILE) $(MAKE_TDB) "$@" pile.xsl $< clink.tdb: clisp-link.xml pile.xsl $(GEN_DEPS) $(CATALOG_FILE) $(MAKE_TDB) "$@" pile.xsl $< pile.tdb: impnotes.xml $(IMPNOTES) pile.xsl $(GEN_DEPS) $(CATALOG_FILE) $(MAKE_TDB) "$@" pile.xsl $< chunk.tdb: impnotes.xml $(IMPNOTES) chunk.xsl $(GEN_DEPS) $(CATALOG_FILE) $(MAKE_TDB) "$@" chunk.xsl $< clisp.xml: clisp.xml.in ../version.sh Makefile $(RM) $@ $(FILLIN) $< > $@ clisp-link.xml: clisp-link.xml.in ../version.sh Makefile $(RM) $@ $(FILLIN) $< > $@ XMLOUT=$(XSLTPROC) $(XMLS_COMMON) --param google.ads $(GOOGLEADS) \ --stringparam target.database.document DOC_MAN = --stringparam current.docid "man" DOC_CLK = --stringparam current.docid "clink" DOC_IMP = --stringparam current.docid "impnotes" CHECK_IDS = if egrep -Hnr 'id="id[0-9]*"' $@; then exit 1; else true; fi clisp.html: clisp.xml $(GEN_DEPS) pile.xsl $(OLINK) $(XMLOUT) "olink-pile.xml" $(DOC_MAN) -o $@ pile.xsl $< $(CHECK_IDS) clisp.1: clisp.xml $(GEN_DEPS) man.xsl $(OLINK) $(XMLOUT) "olink-pile.xml" $(DOC_MAN) -o $@ man.xsl $< clisp-link.html: clisp-link.xml $(GEN_DEPS) pile.xsl $(OLINK) $(XMLOUT) "olink-pile.xml" $(DOC_CLK) -o $@ pile.xsl $< $(CHECK_IDS) clisp-link.1: clisp-link.xml $(GEN_DEPS) man.xsl $(OLINK) $(XMLOUT) "olink-pile.xml" $(DOC_CLK) -o $@ man.xsl $< _%.html: %.html sed $(SGML_UNCOMMENT) $< > $@ _%.1: %.1 sed $(ROFF_UNCOMMENT) $< > $@ impnotes.xml: impnotes.xml.in $(IMPNOTES) ../version.sh Makefile $(RM) $@ $(FILLIN) $< > $@ check: $(IMPNOTES) $(CHECK_DEPS) for f in $(IN_FILES); do \ xmllint $(XMLS_COMMON) --noout --postvalid --noent $$f; done impnotes.texi: impnotes.xml $(IMPNOTES) time docbook2texi $< impnotes.html: impnotes.xml $(IMPNOTES) $(GEN_DEPS) pile.xsl $(OLINK) $(XMLOUT) "olink-pile.xml" $(DOC_IMP) -o $@ pile.xsl $< # cp impnotes.html impnotes-saved.html # tidy -config tidy.conf -f tidy.err impnotes.html || true $(CHECK_IDS) (test -n "$(DIST)" && $(CHMOD) impnotes.html impnotes.css && \ $(RSYNC) impnotes.html impnotes.css $(DIST)/) || true man: _clisp.html _clisp.1 _clisp-link.html _clisp-link.1 (cd ../build && make clisp.html clisp.1 && \ $(CHMOD) clisp.1 clisp.html && \ test -n "$(DIST)" && $(RSYNC) clisp.1 clisp.html $(DIST)/) || true impnotes.fo: impnotes.xml $(IMPNOTES) fo.xsl $(XSL_TARGET) $(XMLOUT) "olink-pile.xml" $(DOC_IMP) -o $@ fo.xsl $< # http://xmlgraphics.apache.org/fop/ impnotes.pdf: impnotes.fo ${FOP} $< $@ id-href.map : chunk.tdb $(XSLTPROC) $(XMLS_COMMON) -o $@ id-href-map.xsl $< html: impnotes.xml $(IMPNOTES) $(GEN_DEPS) chunk.xsl pile.xsl clisp.xml $(OLINK) id-href.map if [ ! -h $@ ]; then $(RM) -r $@; ln -s ../../sf/www/impnotes $@; fi cd $@/ && grep -v -e "^#" .symlinks | sed 's/^/ln -vf /' | sh - cp -pv impnotes.css id-href.map $@/ $(XMLOUT) "olink-chunk.xml" $(DOC_IMP) -o $@/ chunk.xsl $< $(XMLOUT) "olink-chunk.xml" $(DOC_MAN) -o $@/clisp.html pile.xsl clisp.xml $(XMLOUT) "olink-chunk.xml" $(DOC_CLK) -o $@/clisp-link.html pile.xsl clisp-link.xml sed $(SGML_UNCOMMENT) $@/clisp.html > _clisp-1.html sed $(SGML_UNCOMMENT) $@/clisp-link.html > _clisp-link-1.html cd ../build; make clisp-1.html clisp-link-1.html; mv -f ../build/clisp-1.html $@/clisp.html mv -f ../build/clisp-link-1.html $@/clisp-link.html rm -f _clisp-1.html _clisp-link-1.html $(CHECK_IDS) cd html; cd ..; $(CURDIR)/../utils/fix-perms.sh (test -n "$(DIST)" && $(CHMOD) $@ impnotes.css && \ $(RSYNC) $@/*.html $@/id-href.map impnotes.css $(DIST)/impnotes/) \ || true # try to use http://www.graphviz.org/ instead of openoffice for MOP # class inheritance diagrams mop-classes.png : mop-classes.dot dot -Tpng mop-classes.dot -o mop-classes.png UPLOAD = impnotes.css clisp.png up: impnotes.html html impnotes.css $(CHMOD) $^ $(UPLOAD) $(RSYNC) $^ $(UPLOAD) $(DIST_SFBETA) regexp.html: ../modules/regexp/regexp.texinfo $(TEXI2HTML) clean: force $(RM) impnotes.xml impnotes.texi impnotes.html impnotes.pdf html \ clisp.xml clisp.html clisp.1 *.tdb $(CATALOG_FILE) impnotes.fo \ id-href.map clisp-link.xml clisp-link.html clisp-link.1 count: $(IMPNOTES) wc $^ DTD_DOWNLOAD=http://www.docbook.org/xml/$(DTDVER)/docbook-xml-$(DTDVER).zip docbook-dtd : mkdir docbook-dtd && cd docbook-dtd && \ wget -O docbook-xml.zip $(DTD_DOWNLOAD) && \ unzip docbook-xml.zip && $(RM) docbook-xml.zip docbook-xsl : force $(RSYNC) --port=5873 docbook.xml-doc.org::xsl docbook-xsl grep '' docbook-xsl/VERSION impnotes-src.zip : Makefile impnotes.xml clisp.xml clisp-link.xml \ $(IMPNOTES) $(CLISP_XSL) $(CLISP_CSS) $(RM) $@ cd ..; ln -s . clisp; \ zip -9 doc/$@ $(subst doc/../,, $(addprefix clisp/doc/, $^)); \ $(RM) clisp (test -n "$(DIST)" && $(CHMOD) $@ ../src/NEWS && \ $(RSYNC) $@ ../src/NEWS $(DIST)/) || true SEARCH= search: force @if test -z "$(SEARCH)"; then echo "usage: make search SEARCH=string"; \ else grep -n -- '$(SEARCH)' $(IMPNOTES) $(addsuffix .in, $(IN_FILES)); fi force: clisp-2.49/doc/Symbol-Table.text000066400000000000000000000500301142424315300165240ustar00rootroot00000000000000EXT:THE-ENVIRONMENT the-env EXT:EVAL-ENV eval-env CL:DEFINE-COMPILER-MACRO compiler-macros EXT:SOURCE-PROGRAM-ERROR compile-errors EXT:SOURCE-PROGRAM-ERROR-DETAIL compile-errors EXT:SOURCE-PROGRAM-ERROR-FORM compile-errors EXT:NOTSPECIAL notspec-decl CL:SPECIAL spec-decl EXT:SPECIAL-VARIABLE-P spe-var-p CL:SAFETY safety-decl CL:COMPILE compile-decl CL:CONSTANTP constantp CL:EVAL-WHEN eval-when EXT:TYPE-EXPAND type-spec CLOS:GENERIC-FLET gen-flet CLOS:GENERIC-LABELS gen-labels CL:DEFCLASS def-class CL:UPDATE-INSTANCE-FOR-REDEFINED-CLASS redef-class CL:COERCE fixnum-char-ansi CUSTOM:*COERCE-FIXNUM-CHAR-ANSI* fixnum-char-ansi CL:FUNCTION-LAMBDA-EXPRESSION fle CL:DESTRUCTURING-BIND des-bind CL:PROG1 macro-special CL:PROG2 macro-special CL:AND macro-special CL:OR macro-special CL:PSETQ macro-special CL:WHEN macro-special CL:UNLESS macro-special CL:COND macro-special CL:CASE macro-special CL:MULTIPLE-VALUE-LIST macro-special CL:MULTIPLE-VALUE-BIND macro-special CL:MULTIPLE-VALUE-SETQ macro-special CL:DEFCONSTANT defconstant EXT:FCASE fcase EXT:XOR xor CL:EQ eq CL:SYMBOL-FUNCTION sym-fun CL:SETF extra-places CL:FUNCTION func CL:DEFINE-SYMBOL-MACRO def-sym-mac EXT:SYMBOL-MACRO-EXPAND symbol-mex CL:LAMBDA funforms CL:LAMBDA-LIST-KEYWORDS funforms CL:DEFUN defun CL:DEFMACRO defun EXT:ARGLIST arglist CUSTOM:*SUPPRESS-CHECK-REDEFINITION* suppress-check-redef CUSTOM:*DEFUN-ACCEPT-SPECIALIZED-LAMBDA-LIST* defun-accept-spelalist CL:LOOP loop CUSTOM:*LOOP-ANSI* loop-ansi CLOS:NO-PRIMARY-METHOD no-prim CLOS:METHOD-CALL-ERROR meth-call-err CLOS:METHOD-CALL-TYPE-ERROR meth-call-type-err EXT:MUFFLE-CERRORS muffle-cerrors EXT:APPEASE-CERRORS appease-cerrors EXT:ABORT-ON-ERROR abort-on-error EXT:EXIT-ON-ERROR exit-on-error CUSTOM:*REPORT-ERROR-PRINT-BACKTRACE* err-pr-bt EXT:SET-GLOBAL-HANDLER global-handler EXT:WITHOUT-GLOBAL-HANDLERS without-global-handlers EXT:WITH-RESTARTS with-restarts CL:RESTART-CASE restart-case CL:COMPUTE-RESTARTS compute-restarts EXT:PACKAGE-LOCK pack-lock EXT:WITHOUT-PACKAGE-LOCK without-pack-lock CL:MAKE-PACKAGE make-pack CL:DEFPACKAGE defpack EXT:RE-EXPORT re-export EXT:PACKAGE-CASE-INVERTED-P pack-inverted EXT:PACKAGE-CASE-SENSITIVE-P pack-sensitive EXT:LONG-FLOAT-DIGITS lfd CUSTOM:*FLOATING-POINT-CONTAGION-ANSI* flocont CUSTOM:*WARN-ON-FLOATING-POINT-CONTAGION* warn-fpc CUSTOM:*FLOATING-POINT-RATIONAL-CONTAGION-ANSI* floratcont CUSTOM:*WARN-ON-FLOATING-POINT-RATIONAL-CONTAGION* warn-fprc CUSTOM:*PHASE-ANSI* phasecont CL:MAKE-RANDOM-STATE random-state EXT:! factorial EXT:EXQUO exquo EXT:XGCD xgcd EXT:MOD-EXPT mod-expt CL:EXPT expt CL:LOG log CL:PI pi CL:UPGRADED-COMPLEX-PART-TYPE ucpt CUSTOM:*DEFAULT-FLOAT-FORMAT* default-float-format EXT:WITHOUT-FLOATING-POINT-UNDERFLOW no-underflow CL:FLOATING-POINT-INVALID-OPERATION float-invalid-op CL:FLOATING-POINT-INEXACT float-inexact CL:DECODE-FLOAT float-decode CL:FLOAT-RADIX float-decode CL:FLOAT-DIGITS float-decode CL:BOOLE bool-ops CL:BOOLE-1 bool-ops CL:BOOLE-2 bool-ops CL:BOOLE-AND bool-ops CL:BOOLE-ANDC1 bool-ops CL:BOOLE-ANDC2 bool-ops CL:BOOLE-C1 bool-ops CL:BOOLE-C2 bool-ops CL:BOOLE-CLR bool-ops CL:BOOLE-EQV bool-ops CL:BOOLE-IOR bool-ops CL:BOOLE-NAND bool-ops CL:BOOLE-NOR bool-ops CL:BOOLE-ORC1 bool-ops CL:BOOLE-ORC2 bool-ops CL:BOOLE-SET bool-ops CL:BOOLE-XOR bool-ops CL:MOST-POSITIVE-FIXNUM fixnum-lim CL:MOST-NEGATIVE-FIXNUM fixnum-lim CL:LEAST-NEGATIVE-LONG-FLOAT float-lim CL:LEAST-NEGATIVE-NORMALIZED-LONG-FLOAT float-lim CL:LEAST-POSITIVE-LONG-FLOAT float-lim CL:LEAST-POSITIVE-NORMALIZED-LONG-FLOAT float-lim CL:LONG-FLOAT-EPSILON float-lim CL:LONG-FLOAT-NEGATIVE-EPSILON float-lim CL:MOST-NEGATIVE-LONG-FLOAT float-lim CL:MOST-POSITIVE-LONG-FLOAT float-lim SYS::INPUT-CHARACTER input-char EXT:CHAR-FONT-LIMIT input-char EXT:CHAR-BITS-LIMIT input-char EXT:CHAR-FONT input-char EXT:CHAR-BITS input-char EXT:MAKE-CHAR input-char EXT:CHAR-BIT input-char EXT:SET-CHAR-BIT input-char EXT:CHAR-INVERTCASE char-invertcase CL:CHAR-INT char-int CL:CHAR-CODE char-code CL:CHAR-CODE-LIMIT char-code-limit-table CL:BASE-CHAR base-char EXT:STRING-CHAR base-char EXT:CHAR-WIDTH char-width EXT:CHAR-SUPER-BIT char-bits EXT:CHAR-META-BIT char-bits EXT:CHAR-HYPER-BIT char-bits EXT:CHAR-CONTROL-BIT char-bits EXT:MAPCAP mapcap EXT:MAPLAP maplap CL:MAKE-ARRAY arrays CL:ADJUST-ARRAY arrays CL:ARRAY-DIMENSION-LIMIT array-limit-table CL:ARRAY-TOTAL-SIZE-LIMIT array-limit-table EXT:STRING-WIDTH string-width EXT:STRING-INVERTCASE string-invertcase EXT:DOSEQ doseq CL:NREVERSE nreverse-nreconc CL:NRECONC nreverse-nreconc CL:REMOVE rem-del CL:DELETE rem-del CL:SORT sorting CL:STABLE-SORT sorting CL:MAKE-HASH-TABLE make-hash CUSTOM:*EQ-HASHFUNCTION* make-hash CUSTOM:*EQL-HASHFUNCTION* make-hash CUSTOM:*EQUAL-HASHFUNCTION* make-hash EXT:DEFINE-HASH-TABLE-TEST defhash CL:HASH-TABLE-TEST ht-test EXT:DOHASH dohash CUSTOM:*DEVICE-PREFIX* device-prefix CUSTOM:*PARSE-NAMESTRING-DOT-FILE* name-type-split :UNSPECIFIC unspecific CL:PATHNAME-MATCH-P path-match CL:TRANSLATE-PATHNAME translate-pathname CL:TRANSLATE-LOGICAL-PATHNAME translate-logpath CL:PARSE-NAMESTRING parsename CUSTOM:*PARSE-NAMESTRING-ANSI* parsename CL:MERGE-PATHNAMES pathmerge CUSTOM:*MERGE-PATHNAMES-ANSI* pathmerge CL:LOAD-LOGICAL-PATHNAME-TRANSLATIONS load-lpt CUSTOM:*LOAD-LOGICAL-PATHNAME-TRANSLATIONS-DATABASE* load-lpt EXT:ABSOLUTE-PATHNAME absolute-pathname CL:PROBE-FILE probe-file CL:FILE-AUTHOR file-author EXT:PROBE-DIRECTORY probe-dir CL:DELETE-FILE del-file CL:DIRECTORY directory EXT:DIR dir EXT:CD cd EXT:DEFAULT-DIRECTORY default-dir EXT:MAKE-DIRECTORY make-dir EXT:DELETE-DIRECTORY delete-dir EXT:RENAME-DIRECTORY rename-dir EXT:CHAR-KEY with-kbd EXT:WITH-KEYBOARD with-kbd EXT:*KEYBOARD-INPUT* with-kbd CL:STREAM-ELEMENT-TYPE stream-eltype EXT:MAKE-STREAM make-stream EXT:READ-INTEGER bin-input EXT:READ-FLOAT bin-input EXT:WRITE-INTEGER bin-output EXT:WRITE-FLOAT bin-output CL:READ-SEQUENCE read-seq EXT:READ-BYTE-SEQUENCE rd-by-seq EXT:READ-CHAR-SEQUENCE rd-ch-seq CL:WRITE-SEQUENCE write-seq EXT:WRITE-BYTE-SEQUENCE wr-by-seq EXT:WRITE-CHAR-SEQUENCE wr-ch-seq EXT:READ-CHAR-WILL-HANG-P rcwhp EXT:READ-BYTE-LOOKAHEAD rbla EXT:READ-BYTE-WILL-HANG-P rbwhp EXT:READ-BYTE-NO-HANG rbnh CL:LISTEN listen-byte CL:FILE-POSITION file-pos EXT:ELASTIC-NEWLINE elastic-newline CL:OPEN open :ELEMENT-TYPE eltype :EXTERNAL-FORMAT extfmt :BUFFERED buffered CL:CLOSE close CL:OPEN-STREAM-P open-stream-p CL:BROADCAST-STREAM broadcast-stream EXT:MAKE-BUFFERED-INPUT-STREAM stream-buffer EXT:MAKE-BUFFERED-OUTPUT-STREAM stream-buffer CUSTOM:*PRINT-CLOSURE* pr-closure CUSTOM:*PRINT-RPARS* pr-rpars CUSTOM:*PRINT-INDENT-LISTS* pr-indent CUSTOM:*PPRINT-FIRST-NEWLINE* ppr-first-newline CUSTOM:*PRINT-SYMBOL-PACKAGE-PREFIX-SHORTEST* pr-sym-pack-prefix CUSTOM:*PRINT-EMPTY-ARRAYS-ANSI* pr-empty-arr-ansi CL:FORMAT print-formatted CL:PRINT-UNREADABLE-OBJECT print-unreadable-object CUSTOM:*PRINT-PATHNAMES-ANSI* pathprint CL:WRITE write CL:WRITE-TO-STRING write CUSTOM:*PRINT-SPACE-CHAR-ANSI* spacecharprint SYS::WRITE-FLOAT-DECIMAL write-float-decimal CL:READTABLE-CASE rt-case CL:COMPILE-FILE compilefile CUSTOM:*COMPILE-WARNINGS* compilefile CL:COMPILE-FILE-PATHNAME compile-file-path CL:REQUIRE require CUSTOM:*USER-LIB-DIRECTORY* require CL:LOAD loadfile CUSTOM:*LOAD-ECHO* loadfile CUSTOM:*LOAD-COMPILING* loadfile CUSTOM:*LOAD-OBSOLETE-ACTION* loadfile CUSTOM:*SOURCE-FILE-TYPES* loadfile CUSTOM:*COMPILED-FILE-TYPES* loadfile CUSTOM:*LOAD-PATHS* load-paths CL:*FEATURES* features EXT:FEATUREP featurep EXT:COMPILED-FILE-P compiled-file-p CUSTOM:*USER-COMMANDS* user-commands CL:DISASSEMBLE disassemble EXT:UNCOMPILE uncompile CL:DOCUMENTATION documentation CL:DESCRIBE describe CUSTOM:*CLHS-ROOT-DEFAULT* clhs-root CUSTOM:CLHS-ROOT clhs-root CUSTOM:*IMPNOTES-ROOT-DEFAULT* impnotes-root CUSTOM:IMPNOTES-ROOT impnotes-root CL:TRACE trace CL:UNTRACE trace CUSTOM:*TRACE-INDENT* trace-indent CL:INSPECT inspect CUSTOM:*INSPECT-FRONTEND* inspect :FRONTEND inspect CUSTOM:*INSPECT-BROWSER* inspect CUSTOM:*INSPECT-LENGTH* inspect CUSTOM:*INSPECT-PRINT-LENGTH* inspect CUSTOM:*INSPECT-PRINT-LEVEL* inspect CUSTOM:*INSPECT-PRINT-LINES* inspect CL:ROOM room CL:TIME time EXT:TIMES time CUSTOM:*EDITOR* ed CL:ED ed CUSTOM:*DEFAULT-TIME-ZONE* default-tz CL:GET-INTERNAL-RUN-TIME clock CL:SHORT-SITE-NAME machine CL:LONG-SITE-NAME machine CL:APROPOS apropos CL:APROPOS-LIST apropos CUSTOM:*APROPOS-MATCHER* apropos CUSTOM:*APROPOS-DO-MORE* apropos CL:DRIBBLE dribble EXT:DRIBBLE-STREAM drist EXT:DRIBBLE-STREAM-P drist-p EXT:DRIBBLE-STREAM-SOURCE drist-so EXT:DRIBBLE-STREAM-TARGET drist-ta EXT:MAKE-DRIBBLE-STREAM mk-drist EXT:DRIBBLE-TOGGLE dri-toggle CL:LISP-IMPLEMENTATION-VERSION version EXT:ARGV argv CUSTOM:*INIT-HOOKS* init-hooks CUSTOM:*FINI-HOOKS* fini-hooks EXT:SAVEINITMEM image EXT:EXIT quit EXT:QUIT quit EXT:BYE quit CUSTOM:*CURRENT-LANGUAGE* language I18N:DEFLANGUAGE deflang I18N:DEFINTERNATIONAL def-i-l I18N:DEFLOCALIZED defloc I18N:LOCALIZED localized EXT:ENCODING encoding EXT:MAKE-ENCODING make-encoding EXT:ENCODING-CHARSET enc-charset I18N:LOCALE-CONV locale-conv I18N::SET-LOCALE set-locale I18N::LANGUAGE-INFORMATION lang-info CUSTOM:*DEFAULT-FILE-ENCODING* def-file-enc CUSTOM:*PATHNAME-ENCODING* path-enc CUSTOM:*TERMINAL-ENCODING* term-enc CUSTOM:*MISC-ENCODING* misc-enc CUSTOM:*FOREIGN-ENCODING* foreign-enc EXT:CONVERT-STRING-FROM-BYTES string-byte EXT:CONVERT-STRING-TO-BYTES string-byte EXT:MAKE-WEAK-POINTER weak-pointer EXT:WEAK-POINTER-P weak-pointer EXT:WEAK-POINTER-VALUE weak-pointer EXT:WEAK-POINTER weak-pointer EXT:MAKE-WEAK-LIST weak-list EXT:WEAK-LIST-P weak-list EXT:WEAK-LIST-LIST weak-list EXT:WEAK-LIST-LIST weak-list EXT:MAKE-WEAK-AND-RELATION weak-and-relation EXT:WEAK-AND-RELATION-P weak-and-relation EXT:WEAK-AND-RELATION-LIST weak-and-relation EXT:MAKE-WEAK-OR-RELATION weak-or-relation EXT:WEAK-OR-RELATION-P weak-or-relation EXT:WEAK-OR-RELATION-LIST weak-or-relation EXT:MAKE-WEAK-MAPPING weak-mapping EXT:WEAK-MAPPING-P weak-mapping EXT:WEAK-MAPPING-PAIR weak-mapping EXT:WEAK-MAPPING-VALUE weak-mapping EXT:MAKE-WEAK-AND-MAPPING weak-and-mapping EXT:WEAK-AND-MAPPING-P weak-and-mapping EXT:WEAK-AND-MAPPING-PAIR weak-and-mapping EXT:WEAK-AND-MAPPING-VALUE weak-and-mapping EXT:MAKE-WEAK-OR-MAPPING weak-or-mapping EXT:WEAK-OR-MAPPING-P weak-or-mapping EXT:WEAK-OR-MAPPING-PAIR weak-or-mapping EXT:WEAK-OR-MAPPING-VALUE weak-or-mapping EXT:MAKE-WEAK-ALIST weak-alist EXT:WEAK-ALIST-P weak-alist EXT:WEAK-ALIST-TYPE weak-alist EXT:WEAK-ALIST-CONTENTS weak-alist EXT:WEAK-ALIST-ASSOC weak-alist EXT:WEAK-ALIST-RASSOC weak-alist EXT:WEAK-ALIST-VALUE weak-alist EXT:FINALIZE final CUSTOM:*PROMPT-START* prompt-start CUSTOM:*PROMPT-STEP* prompt-step CUSTOM:*PROMPT-BREAK* prompt-break CUSTOM:*PROMPT-BODY* prompt-body CUSTOM:*PROMPT-FINISH* prompt-finish EXT:BREAK-LEVEL break-level EXT:STEP-LEVEL step-level EXT:PROMPT-NEW-PACKAGE prompt-new-package EXT:PACKAGE-SHORTEST-NAME package-shortest-name EXT:*COMMAND-INDEX* command-index EXT:ETHE ethe EXT:LETF* letf EXT:LETF letf EXT:MEMOIZED memoized EXT:WITH-COLLECT with-collect EXT:COMPILE-TIME-VALUE compile-time-value EXT:WITH-GENSYMS with-gensyms EXT:REMOVE-PLIST remove-plist EXT:WITH-HTML-OUTPUT html-http-output EXT:WITH-HTTP-OUTPUT html-http-output EXT:OPEN-HTTP open-http EXT:WITH-HTTP-INPUT open-http CUSTOM:*BROWSERS* browse-url :BROWSER browse-url CUSTOM:*BROWSER* browse-url EXT:BROWSE-URL browse-url EXT:HTTP-PROXY http-proxy CUSTOM:*HTTP-PROXY* http-proxy EXT:EXPAND-FORM code-walk EXT:MODULE-INFO modinfo SYS::DYNLOAD-MODULES mod-dynload SYS::PROCESS-ID process-id FFI:DEF-C-TYPE def-c-type FFI:DEF-C-VAR def-c-var FFI:DEF-C-CONST def-c-const FFI:DEF-CALL-OUT def-call-out FFI:DEF-CALL-IN def-call-in FFI:CLOSE-FOREIGN-LIBRARY dffi-close-lib FFI:DEFAULT-FOREIGN-LIBRARY dffi-default-lib FFI:DEF-C-STRUCT def-c-struct FFI:DEF-C-ENUM def-c-enum FFI:C-LINES c-lines FFI:ELEMENT element FFI:DEREF deref FFI:SLOT slot FFI:CAST cast FFI:OFFSET offset FFI:C-VAR-ADDRESS c-var-addr FFI:C-VAR-OBJECT c-var-object FFI:TYPEOF typeof FFI:SIZEOF sizeof FFI:BITSIZEOF bitsizeof FFI:UNSIGNED-FOREIGN-ADDRESS faddr-u FFI:FOREIGN-ADDRESS-UNSIGNED faddr-u FFI:FOREIGN-ADDRESS faddr FFI:FOREIGN-VARIABLE dffi-make-var FFI:FOREIGN-FUNCTION dffi-make-func FFI:VALIDP validp FFI:FOREIGN-POINTER fptr FFI:SET-FOREIGN-POINTER fptr FFI:WITH-FOREIGN-OBJECT foreign-stack FFI:WITH-C-VAR foreign-stack FFI:FOREIGN-VALUE foreign-value FFI:WITH-FOREIGN-STRING foreign-stack-string FFI:PARSE-C-TYPE c-type-parse FFI:DEPARSE-C-TYPE c-type-parse FFI:FOREIGN-FREE foreign-heap FFI:FOREIGN-ALLOCATE foreign-heap FFI:ALLOCATE-SHALLOW foreign-heap FFI:ALLOCATE-DEEP foreign-heap FFI:WITH-C-PLACE with-c-place FFI:*OUTPUT-C-FUNCTIONS* ffi-extern-output FFI:*OUTPUT-C-VARIABLES* ffi-extern-output FFI:*FOREIGN-GUARD* ffi-guard FFI:FOREIGN-POINTER-INFO fptr-info FFI:MEMORY-AS memory-as FFI:C-POINTER c-pointer FFI:C-STRING c-string FFI:C-STRUCT c-struct FFI:C-UNION c-union FFI:C-ARRAY c-array FFI:C-ARRAY-MAX c-array-max FFI:C-FUNCTION c-function FFI:C-PTR c-ptr FFI:C-PTR-NULL c-ptr-null FFI:C-ARRAY-PTR c-array-ptr :LANGUAGE c-flavor FFI:DEFAULT-FOREIGN-LANGUAGE c-flavor SOCKET:SOCKET-SERVER sose SOCKET:SOCKET-SERVER-CLOSE sose-close SOCKET:SOCKET-SERVER-PORT sose-hopo SOCKET:SOCKET-SERVER-HOST sose-hopo SOCKET:SOCKET-WAIT so-wait SOCKET:SOCKET-ACCEPT so-accept SOCKET:SOCKET-CONNECT so-connect SOCKET:SOCKET-STATUS so-status SOCKET:SOCKET-STREAM-PORT sost-hopo SOCKET:SOCKET-STREAM-HOST sost-hopo SOCKET:SOCKET-STREAM-PEER sost-peer SOCKET:SOCKET-STREAM-LOCAL sost-local SOCKET:SOCKET-STREAM-SHUTDOWN sost-shut SOCKET:SOCKET-OPTIONS so-opt SOCKET:STREAM-HANDLES so-handles EXT:SHELL exec EXT:EXECUTE exec EXT:RUN-PROGRAM run-prog EXT:RUN-SHELL-COMMAND run-prog EXT:MAKE-PIPE-OUTPUT-STREAM pipe EXT:MAKE-PIPE-IO-STREAM pipe EXT:MAKE-PIPE-INPUT-STREAM pipe EXT:WITH-OUTPUT-TO-PRINTER hardcopy EXT:GETENV getenv CUSTOM:*FILL-INDENT-SEXP* fill-stream CUSTOM:*FORWARD-REFERENCED-CLASS-MISDESIGN* frc-bad CLOS:CLASS-NAME class-name CLOS:CLASS-DIRECT-SUPERCLASSES class-direct-superclasses CLOS:CLASS-DIRECT-SLOTS class-direct-slots CLOS:CLASS-DIRECT-DEFAULT-INITARGS class-direct-default-initargs CLOS:CLASS-PRECEDENCE-LIST cpl CLOS:CLASS-DIRECT-SUBCLASSES class-direct-subclasses CLOS:CLASS-SLOTS class-slots CLOS:CLASS-DEFAULT-INITARGS class-default-initargs CLOS:CLASS-FINALIZED-P class-finalized-p CLOS:CLASS-PROTOTYPE class-prototype CLOS:ENSURE-CLASS ensure-class CLOS:ENSURE-CLASS-USING-CLASS ensure-class-UC CLOS:FINALIZE-INHERITANCE finalize-inheritance CLOS:MAKE-INSTANCE mop-make-instance CLOS:ALLOCATE-INSTANCE alloc-instance CLOS:VALIDATE-SUPERCLASS validate-superclass CLOS:COMPUTE-DIRECT-SLOT-DEFINITION-INITARGS compute-dsd-initargs CLOS:DIRECT-SLOT-DEFINITION-CLASS dsd-class CLOS:COMPUTE-CLASS-PRECEDENCE-LIST compute-cpl CLOS:COMPUTE-SLOTS compute-slots CLOS:COMPUTE-EFFECTIVE-SLOT-DEFINITION compute-esd CLOS:COMPUTE-EFFECTIVE-SLOT-DEFINITION-INITARGS compute-esd-initargs CLOS:EFFECTIVE-SLOT-DEFINITION-CLASS esd-class CLOS:COMPUTE-DEFAULT-INITARGS compute-default-initargs CLOS:ADD-DIRECT-SUBCLASS add-direct-subclass CLOS:REMOVE-DIRECT-SUBCLASS remove-direct-subclass CLOS:SLOT-DEFINITION-NAME slotdef-name CLOS:SLOT-DEFINITION-ALLOCATION slotdef-allocation CLOS:SLOT-DEFINITION-INITFORM slotdef-initform CLOS:SLOT-DEFINITION-INITFUNCTION slotdef-initfunction CLOS:SLOT-DEFINITION-TYPE slotdef-type CLOS:SLOT-DEFINITION-INITARGS slotdef-initargs CLOS:SLOT-DEFINITION-READERS slotdef-readers CLOS:SLOT-DEFINITION-WRITERS slotdef-writers CLOS:SLOT-DEFINITION-LOCATION slotdef-location CLOS:GENERIC-FUNCTION-NAME gf-name CLOS:GENERIC-FUNCTION-METHODS gf-methods CLOS:GENERIC-FUNCTION-LAMBDA-LIST gf-lambda-list CLOS:GENERIC-FUNCTION-ARGUMENT-PRECEDENCE-ORDER gf-argument-precedence-order CLOS:GENERIC-FUNCTION-DECLARATIONS gf-declarations CLOS:GENERIC-FUNCTION-METHOD-CLASS gf-method-class CLOS:GENERIC-FUNCTION-METHOD-COMBINATION gf-method-combination CLOS:DEFGENERIC mop-gf-init-defgeneric ENSURE-GENERIC-FUNCTION ensure-gf CLOS:ENSURE-GENERIC-FUNCTION-USING-CLASS ensure-gf-UC CLOS:ADD-METHOD mop-add-method CLOS:REMOVE-METHOD mop-remove-method CLOS:COMPUTE-APPLICABLE-METHODS compute-applicable-methods CLOS:COMPUTE-APPLICABLE-METHODS-USING-CLASSES compute-applicable-methods-UC CLOS:COMPUTE-EFFECTIVE-METHOD compute-effective-method CLOS:COMPUTE-EFFECTIVE-METHOD-AS-FUNCTION compute-effective-method-as-function CLOS:MAKE-METHOD-LAMBDA make-method-lambda CLOS:COMPUTE-DISCRIMINATING-FUNCTION compute-discriminating-function CLOS:METHOD-SPECIALIZERS method-specializers CLOS:METHOD-QUALIFIERS method-qualifiers CLOS:METHOD-LAMBDA-LIST method-lambda-list CLOS:METHOD-GENERIC-FUNCTION method-gf CLOS:METHOD-FUNCTION method-function CLOS:DEFMETHOD mop-meth-init-defmethod CLOS:EXTRACT-LAMBDA-LIST extract-lambda-list CLOS:EXTRACT-SPECIALIZER-NAMES extract-specializer-names CLOS:ACCESSOR-METHOD-SLOT-DEFINITION accessor-method-slotdef CLOS:READER-METHOD-CLASS reader-method-class CLOS:WRITER-METHOD-CLASS writer-method-class CLOS:STANDARD-WRITER-METHOD writer-method-class CLOS:EQL-SPECIALIZER-OBJECT eql-specializer-object CLOS:INTERN-EQL-SPECIALIZER intern-eql-specializer CLOS:SPECIALIZER-DIRECT-METHODS specializer-direct-methods CLOS:SPECIALIZER-DIRECT-GENERIC-FUNCTIONS specializer-direct-gfs CLOS:ADD-DIRECT-METHOD add-direct-method CLOS:REMOVE-DIRECT-METHOD remove-direct-method CLOS:FIND-METHOD-COMBINATION find-method-combination CLOS:STANDARD-INSTANCE-ACCESS standard-instance-access CLOS:FUNCALLABLE-STANDARD-INSTANCE-ACCESS funcallable-standard-instance-access CLOS:SET-FUNCALLABLE-INSTANCE-FUNCTION set-fif CLOS:SLOT-VALUE-USING-CLASS slot-value-UC CLOS:SLOT-BOUNDP-USING-CLASS slot-boundp-UC CLOS:SLOT-MAKUNBOUND-USING-CLASS slot-makunbound-UC CLOS:UPDATE-DEPENDENT update-dependent CLOS:ADD-DEPENDENT add-dependent CLOS:REMOVE-DEPENDENT remove-dependent CLOS:MAP-DEPENDENTS map-dependents CLOS:CLOS-WARNING mop-clisp-warn CLOS:GF-ALREADY-CALLED-WARNING mop-clisp-gf-already-called-warning CLOS:GF-REPLACING-METHOD-WARNING mop-clisp-gf-replacing-method-warning GRAY:FUNDAMENTAL-STREAM fu-st GRAY:FUNDAMENTAL-INPUT-STREAM fu-st-in GRAY:FUNDAMENTAL-OUTPUT-STREAM fu-st-out GRAY:FUNDAMENTAL-CHARACTER-STREAM fu-st-char GRAY:FUNDAMENTAL-BINARY-STREAM fu-st-bin GRAY:STREAM-READ-CHAR st-rc GRAY:STREAM-UNREAD-CHAR st-uc GRAY:STREAM-READ-CHAR-NO-HANG st-rcnh GRAY:STREAM-WRITE-CHAR st-wc GRAY:STREAM-LINE-COLUMN st-lc GRAY:STREAM-READ-BYTE st-rb GRAY:STREAM-READ-BYTE-LOOKAHEAD st-rbla EXT:FILL-STREAM fill-stream POSIX:RESOLVE-HOST-IPADDR resolve-host POSIX:SERVICE service POSIX:FILE-STAT file-stat POSIX:SET-FILE-STAT set-file-stat POSIX:STAT-VFS stat-vfs POSIX:FILE-INFO file-info POSIX:USER-INFO user-info POSIX:GROUP-INFO group-info POSIX:USER-SHELLS user-shells POSIX:RLIMIT rlimit POSIX:USAGE usage POSIX:BOGOMIPS bogomips POSIX:LOADAVG loadavg POSIX:STREAM-LOCK stream-lock POSIX:WITH-STREAM-LOCK with-stream-lock POSIX:STREAM-OPTIONS fcntl POSIX:FILE-SIZE file-size POSIX:MKNOD mknod POSIX:CONVERT-MODE convert-mode POSIX:UMASK umask POSIX:COPY-FILE copy-file POSIX:DUPLICATE-HANDLE dup-handle POSIX:FILE-PROPERTIES file-properties POSIX:CRYPT crypt POSIX:ENCRYPT encrypt POSIX:SETKEY encrypt POSIX:PHYSICAL-MEMORY phys-mem POSIX:HOSTID hostid POSIX:DOMAINNAME domainname POSIX:FILE-OWNER file-owner POSIX:PRIORITY priority POSIX:PROCESS-ID process-id POSIX:OPENLOG openlog POSIX:SETLOGMASK setlogmask POSIX:SYSLOG syslog POSIX:CLOSELOG closelog POSIX:KILL kill POSIX:GETPPID getppid POSIX:GETPGRP getpgrp POSIX:SETPGRP setpgrp POSIX:GETSID getsid POSIX:PGID getpgid POSIX:SETREUID setreuid POSIX:SETREGID setregid POSIX:ENDUTXENT endutxent POSIX:GETUTXENT getutxent POSIX:GETUTXID getutxid POSIX:GETUTXLINE getutxline POSIX:PUTUTXLINE pututxline POSIX:SETUTXENT setutxent POSIX:UID getuid POSIX:GID getgid POSIX:EUID geteuid POSIX:EGID getegid POSIX:GROUPS getgroups POSIX:STRING-TIME strtime POSIX:MKSTEMP mkstemp POSIX:MKDTEMP mkdtemp POSIX:SYNC sync POSIX:MAKE-XTERM-IO-STREAM mk-xterm-io FFI:|file| stdio POSIX:FOPEN stdio POSIX:FDOPEN stdio POSIX:FREOPEN stdio POSIX:FCLOSE stdio POSIX:FFLUSH stdio POSIX:CLEARERR stdio POSIX:FEOF stdio POSIX:FERROR stdio POSIX:FILENO stdio POSIX:STDIN stdio POSIX:STDOUT stdio POSIX:STDERR stdio POSIX:ERF posix-math POSIX:ERFC posix-math POSIX:J0 posix-math POSIX:J1 posix-math POSIX:JN posix-math POSIX:Y0 posix-math POSIX:Y1 posix-math POSIX:YN posix-math POSIX:TGAMMA posix-math POSIX:LGAMMA posix-math POSIX:FFS posix-math POSIX:ERRNO errno POSIX:STRERROR errno clisp-2.49/doc/Why-CLISP-is-under-GPL000066400000000000000000000452441142424315300170450ustar00rootroot00000000000000From rms@gnu.ai.mit.edu Mon Oct 19 00:06:25 1992 Return-Path: Received: from mole.gnu.ai.mit.edu ([128.52.46.33]) by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA23967; Mon, 19 Oct 92 00:06:23 +0100 Received: by mole.gnu.ai.mit.edu (5.65/4.0) id ; Sun, 18 Oct 92 18:59:05 -0400 Date: Sun, 18 Oct 92 18:59:05 -0400 From: rms@gnu.ai.mit.edu (Richard Stallman) Message-Id: <9210182259.AA25733@mole.gnu.ai.mit.edu> To: haible@ma2s2.mathematik.uni-karlsruhe.de Subject: Common Lisp and Readline Status: RO I hate to have to play this role with a fellow hacker, but... If you don't change to using the GPL, then you'll have to stop using readline. Readline's terms say that the whole program has to be under the GPL, and just having the user do the link doesn't change this. If the program is designed to run with readline as a part, then readline is a part of it. An ordinary user can decide to link readline with a program and run it. That's different--this user is not doing distribution, and thus the GPL does not restrict what he can do. From haible Fri Oct 30 18:54:38 1992 Return-Path: Received: by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA28745; Fri, 30 Oct 92 18:54:37 +0100 Date: Fri, 30 Oct 92 18:54:37 +0100 From: haible (Bruno Haible) Message-Id: <9210301754.AA28745@ma2s2.mathematik.uni-karlsruhe.de> To: haible@ma2s2.mathematik.uni-karlsruhe.de, rms@gnu.ai.mit.edu Subject: Re: Common Lisp and Readline Status: RO > I hate to have to play this role with a fellow hacker, but... I'm sorry too, as I am very indebted to the GNU project. > Readline's terms say that the whole program has to be under > the GPL, and just having the user do the link doesn't change this. I don't agree. My lisp.a is not a "work based on libreadline.a". What I distribute is a "mere aggregation" of lisp.a and libreadline.a - the latter with source. > If the program is designed to run with readline as a part, then readline > is a part of it. I could provide a libnoreadline.a and let the user choose to link lisp.a with either GNU's libreadline.a or my libnoreadline.a . Would that convince you that lisp.a "can be reasonably considered independent and separate work" ? Bruno Haible From rms@gnu.ai.mit.edu Fri Oct 30 22:19:16 1992 Return-Path: Received: from mole.gnu.ai.mit.edu ([128.52.46.33]) by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA28939; Fri, 30 Oct 92 22:19:14 +0100 Received: by mole.gnu.ai.mit.edu (5.65/4.0) id ; Fri, 30 Oct 92 16:09:54 -0500 Date: Fri, 30 Oct 92 16:09:54 -0500 From: rms@gnu.ai.mit.edu (Richard Stallman) Message-Id: <9210302109.AA04907@mole.gnu.ai.mit.edu> To: haible@ma2s2.mathematik.uni-karlsruhe.de In-Reply-To: <9210301754.AA28745@ma2s2.mathematik.uni-karlsruhe.de> (haible@ma2s2.mathematik.uni-karlsruhe.de) Subject: Common Lisp and Readline Status: RO > Readline's terms say that the whole program has to be under > the GPL, and just having the user do the link doesn't change this. I don't agree. My lisp.a is not a "work based on libreadline.a". What I distribute is a "mere aggregation" of lisp.a and libreadline.a - the latter with source. I could provide a libnoreadline.a and let the user choose to link lisp.a with either GNU's libreadline.a or my libnoreadline.a . Would that convince you that lisp.a "can be reasonably considered independent and separate work" ? No, and I doubt it would convince a judge either. I'll have to insist that you stop using readline unless you make the program free. From haible Sat Oct 31 01:08:00 1992 Return-Path: Received: by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA29062; Sat, 31 Oct 92 01:08:00 +0100 Date: Sat, 31 Oct 92 01:08:00 +0100 From: haible (Bruno Haible) Message-Id: <9210310008.AA29062@ma2s2.mathematik.uni-karlsruhe.de> To: haible@ma2s2.mathematik.uni-karlsruhe.de, rms@gnu.ai.mit.edu Subject: Re: Common Lisp and Readline Status: RO > I'll have to insist that you stop using readline unless you make the > program free. I built a libnoreadline.a that can be linked together with lisp.a, replacing libreadline.a . I will reorganize the distribution into 2 independent parts: * clisp.lzh containing lisp.a and libnoreadline.a, * readline.tar.Z containing libreadline.a and its source. The first one is enough to build a CLISP executable. It contains no GNU parts. > I doubt it would convince a judge either. The only thing CLISP will have to do with the readline library is that *THE USER* *MAY OPTIONALLY* link CLISP with the readline library. No judge will admit that this gives you the right to determine the copyright of CLISP. >From your own words: > An ordinary user can decide to link readline with a program and run > it. That's different--this user is not doing distribution, and thus > the GPL does not restrict what he can do. If you still insist on me being wrong, then please tell me what part of the GNU GPL I am breaking. Or update the GNU GPL. Bruno Haible From haible Sat Oct 31 01:08:26 1992 Return-Path: Received: by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA29068; Sat, 31 Oct 92 01:08:25 +0100 Date: Sat, 31 Oct 92 01:08:25 +0100 From: haible (Bruno Haible) Message-Id: <9210310008.AA29068@ma2s2.mathematik.uni-karlsruhe.de> To: haible@ma2s2.mathematik.uni-karlsruhe.de, rms@gnu.ai.mit.edu Subject: Readline & GPL Status: RO If someone was to turn the readline library into a shared library (a library that is needed at runtime by the executable, but not contained in the executable): Would that mean that any executable that uses a readline shared lib would have to be accompanied with full source? Or would it, in the contrary, mean that such an executable may use the readline lib without "containing" it and without being affected by such copyright issues? Bruno Haible From rms@gnu.ai.mit.edu Sat Oct 31 01:11:59 1992 Return-Path: Received: from mole.gnu.ai.mit.edu ([128.52.46.33]) by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA29075; Sat, 31 Oct 92 01:11:56 +0100 Received: by mole.gnu.ai.mit.edu (5.65/4.0) id ; Fri, 30 Oct 92 19:02:38 -0500 Date: Fri, 30 Oct 92 19:02:38 -0500 From: rms@gnu.ai.mit.edu (Richard Stallman) Message-Id: <9210310002.AA06772@mole.gnu.ai.mit.edu> To: haible@ma2s2.mathematik.uni-karlsruhe.de In-Reply-To: <9210310008.AA29068@ma2s2.mathematik.uni-karlsruhe.de> (haible@ma2s2.mathematik.uni-karlsruhe.de) Subject: Readline & GPL Status: RO If someone was to turn the readline library into a shared library (a library that is needed at runtime by the executable, but not contained in the executable): Would that mean that any executable that uses a readline shared lib would have to be accompanied with full source? Yes. From rms@gnu.ai.mit.edu Sat Oct 31 01:29:01 1992 Return-Path: Received: from mole.gnu.ai.mit.edu ([128.52.46.33]) by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA29083; Sat, 31 Oct 92 01:28:59 +0100 Received: by mole.gnu.ai.mit.edu (5.65/4.0) id ; Fri, 30 Oct 92 19:19:36 -0500 Date: Fri, 30 Oct 92 19:19:36 -0500 From: rms@gnu.ai.mit.edu (Richard Stallman) Message-Id: <9210310019.AA06922@mole.gnu.ai.mit.edu> To: haible@ma2s2.mathematik.uni-karlsruhe.de In-Reply-To: <9210310008.AA29062@ma2s2.mathematik.uni-karlsruhe.de> (haible@ma2s2.mathematik.uni-karlsruhe.de) Subject: Common Lisp and Readline Status: RO I built a libnoreadline.a that can be linked together with lisp.a, replacing libreadline.a . I will reorganize the distribution into 2 independent parts: * clisp.lzh containing lisp.a and libnoreadline.a, * readline.tar.Z containing libreadline.a and its source. The first one is enough to build a CLISP executable. It contains no GNU parts. True. If that were the whole situation--if readline did not exist-- then I would have no grounds to object. However, the sum total of what you are doing is still tantamount to distributing one program which contains readline but is not under the GPL. This is a problem I cannot ignore. If you can get away with this then any company can get away with it. The result would be to negate for practical purposes the GPL's requirement that improvements be free. And that would deprive GNU software of a major source of improvements. Is that what you want? From rms@gnu.ai.mit.edu Fri Nov 6 11:02:40 1992 Return-Path: Received: from mole.gnu.ai.mit.edu ([128.52.46.33]) by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA13962; Fri, 6 Nov 92 11:02:36 +0100 Received: by mole.gnu.ai.mit.edu (5.65/4.0) id ; Fri, 6 Nov 92 04:52:01 -0500 Date: Fri, 6 Nov 92 04:52:01 -0500 From: rms@gnu.ai.mit.edu (Richard Stallman) Message-Id: <9211060952.AA09628@mole.gnu.ai.mit.edu> To: haible@ma2s2.mathematik.uni-karlsruhe.de In-Reply-To: <9210310008.AA29062@ma2s2.mathematik.uni-karlsruhe.de> (haible@ma2s2.mathematik.uni-karlsruhe.de) Subject: Common Lisp and Readline Status: RO If you do succeed in circumventing the GPL for readline, you would be blazing a path for every commercial company that wants to do it. Would you really like that result? Wouldn't it be best to eliminate this dispute by using the GPL for Common Lisp? Totally aside from readline, the Lisp system would be more useful that way. For example, maybe it could be a useful part of GNU. From haible Fri Nov 6 16:13:07 1992 Return-Path: Received: by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA14116; Fri, 6 Nov 92 16:13:06 +0100 Date: Fri, 6 Nov 92 16:13:06 +0100 From: haible (Bruno Haible) Message-Id: <9211061513.AA14116@ma2s2.mathematik.uni-karlsruhe.de> To: haible@ma2s2.mathematik.uni-karlsruhe.de, rms@gnu.ai.mit.edu Subject: Common Lisp, Readline and GPL Status: RO > I will reorganize the distribution into 2 independent parts: > * clisp.lzh containing lisp.a and libnoreadline.a, > * readline.tar.Z containing libreadline.a and its source. > > The first one is enough to build a CLISP executable. It contains > no GNU parts. > > However, the sum total of what you are doing is still tantamount to > distributing one program which contains readline but is not under the > GPL. Not totally. The sum of what I AND THE USER are doing is tantamount to building a program which contains readline but is not under the GPL. But * the user isn't distributing anything, * I am not responsible for the user's deeds, * I am not distributing "one program", so GPL doesn't apply to me either. > If that were the whole situation--if readline did not exist-- > then I would have no grounds to object. So the only reason why you may object is that my lisp.a has an INTERFACE that allows it to be linked to libreadline.a . As far as I know, only the readline CODE is copyrighted, not its INTERFACE. (Would you object because my libnoreadline.a has a similar interface?) > This is a problem I cannot ignore. If you can get away with this then > any company can get away with it. > ... > And that would deprive GNU software of a major source of improvements. > Is that what you want? No, of course! But I would like to see the problem analyzed in depth. Problem 1: If someone (like me) lets the user do the final link phase. Problem 2: If the final link phase is done by the OS automatically at run time (shared libraries). You should update GPL for these cases. > If you do succeed in circumventing the GPL for readline, you would be > blazing a path for every commercial company that wants to do it. But the problems remain there even if I put CLISP under GPL. From haible Fri Nov 6 16:13:19 1992 Return-Path: Received: by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA14123; Fri, 6 Nov 92 16:13:18 +0100 Date: Fri, 6 Nov 92 16:13:18 +0100 From: haible (Bruno Haible) Message-Id: <9211061513.AA14123@ma2s2.mathematik.uni-karlsruhe.de> To: haible@ma2s2.mathematik.uni-karlsruhe.de, rms@gnu.ai.mit.edu Subject: Common Lisp, Readline and GPL Status: RO > Wouldn't it be best to eliminate this dispute by using the GPL for > Common Lisp? Would be best for me, true. > Totally aside from readline, the Lisp system would be > more useful that way. This and the following are convincing me: * Up to 1991 the decision whether using GPL or not, was simply a matter of philosophy or copyright policy. The success of Linux, however, demonstrates how a speed and quality of development was achieved which would have been impossible without access for everyone to the source of everything. * Finding co-developers for other Lisp packages or testers for other hardware/OS platforms might be easier if I release full source. So be prepared to seeing CLISP's source before Christmas. Yours, B. Haible From rms@gnu.ai.mit.edu Fri Nov 6 21:31:33 1992 Return-Path: Received: from mole.gnu.ai.mit.edu ([128.52.46.33]) by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA15204; Fri, 6 Nov 92 21:31:28 +0100 Received: by mole.gnu.ai.mit.edu (5.65/4.0) id ; Fri, 6 Nov 92 15:20:48 -0500 Date: Fri, 6 Nov 92 15:20:48 -0500 From: rms@gnu.ai.mit.edu (Richard Stallman) Message-Id: <9211062020.AA10933@mole.gnu.ai.mit.edu> To: haible@ma2s2.mathematik.uni-karlsruhe.de Cc: rms@gnu.ai.mit.edu In-Reply-To: <9211061513.AA14116@ma2s2.mathematik.uni-karlsruhe.de> (haible@ma2s2.mathematik.uni-karlsruhe.de) Subject: Common Lisp, Readline and GPL Status: RO * the user isn't distributing anything, * I am not responsible for the user's deeds, * I am not distributing "one program", so GPL doesn't apply to me either. The FSF position would be that this is still one program, which has only been disguised as two. The reason it is still one program is that the one part clearly shows the intention for incorporation of the other part. I say this based on discussions I had with our lawyer long ago. The issue first arose when NeXT proposed to distribute a modified GCC in two parts and let the user link them. Jobs asked me whether this was lawful. It seemed to me at the time that it was, following reasoning like what you are using; but since the result was very undesirable for free software, I said I would have to ask the lawyer. What the lawyer said surprised me; he said that judges would consider such schemes to be "subterfuges" and would be very harsh toward them. He said a judge would ask whether it is "really" one program, rather than how it is labeled. So I went back to Jobs and said we believed his plan was not allowed by the GPL. The direct result of this is that we now have an Objective C front end. They had wanted to distribute the Objective C parser as a separate proprietary package to link with the GCC back end, but since I didn't agree this was allowed, they made it free. So I don't think the GPL actually requires a correction for this. But perhaps it would be a good idea to add a note explaining this. From haible Sun Nov 8 16:31:52 1992 Return-Path: Received: by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA18675; Sun, 8 Nov 92 16:31:51 +0100 Date: Sun, 8 Nov 92 16:31:51 +0100 From: haible (Bruno Haible) Message-Id: <9211081531.AA18675@ma2s2.mathematik.uni-karlsruhe.de> To: haible@ma2s2.mathematik.uni-karlsruhe.de, rms@gnu.ai.mit.edu Subject: Re: Common Lisp, Readline and GPL Status: RO Thanks you for the explanation of the lawyers' point of view. > What the lawyer said surprised me; he said that judges would consider > such schemes to be "subterfuges" and would be very harsh toward > them. He said a judge would ask whether it is "really" one program, > rather than how it is labeled. I accept this. > They had wanted to distribute the Objective C parser as a > separate proprietary package to link with the GCC back end, but since > I didn't agree this was allowed, they made it free. The situation for CLISP is a bit different: CLISP was running without the readline library for over one year before I began using readline() in September 1992. That was also the reason why I was able to build a drop-in replacement (libnoreadline.a) within only one hour. The readline library is not an essential or integral part of CLISP - it makes the user interface nicer, and that's all. From rms@gnu.ai.mit.edu Mon Oct 11 18:57:43 1993 Return-Path: Received: from mole.gnu.ai.mit.edu by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA06403; Mon, 11 Oct 93 18:57:38 +0100 Received: by mole.gnu.ai.mit.edu (5.65/4.0) id ; Mon, 11 Oct 93 13:56:03 -0400 Date: Mon, 11 Oct 93 13:56:03 -0400 From: rms@gnu.ai.mit.edu (Richard Stallman) Message-Id: <9310111756.AA09632@mole.gnu.ai.mit.edu> To: haible@ma2s2.mathematik.uni-karlsruhe.de In-Reply-To: <9310111623.AA06248@ma2s2.mathematik.uni-karlsruhe.de> (haible@ma2s2.mathematik.uni-karlsruhe.de) Subject: Re: compiling with gcc without linking with libggc.a Status: RO But libgmp.a should remain under GPL. I'm interested in hearing why you think so. Someone else is arguing that it should be under the LGPL; I haven't made up my mind yet. From haible Tue Oct 12 13:28:37 1993 Return-Path: Received: by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA07494; Tue, 12 Oct 93 13:28:36 +0100 Date: Tue, 12 Oct 93 13:28:36 +0100 From: haible (Bruno Haible) Message-Id: <9310121228.AA07494@ma2s2.mathematik.uni-karlsruhe.de> To: rms@gnu.ai.mit.edu Subject: Re: libgmp.a Status: RO > But libgmp.a should remain under GPL. > I'm interested in hearing why you think so. Because one can build a multi-precision calculator (like `bc') as a wrapper to libgmp.a. Capability of handling arbitrary size numbers is still an essential advantage (and marketing issue) for computer algebra systems and Lisp implementations. I had to put CLISP under GPL because libreadline.a was something I wanted to use and I didn't want to write myself. libgmp.a is similar in this respect, and it may therefore help putting some new packages under GPL. Building libgmp.a was just too hard work. Other people shouldn't get it for free. Bruno Haible From rms@gnu.ai.mit.edu Tue Oct 12 18:28:27 1993 Return-Path: Received: from mole.gnu.ai.mit.edu by ma2s2.mathematik.uni-karlsruhe.de (4.1/SMI-4.0) id AA08120; Tue, 12 Oct 93 18:28:25 +0100 Received: by mole.gnu.ai.mit.edu (5.65/4.0) id ; Tue, 12 Oct 93 13:26:57 -0400 Date: Tue, 12 Oct 93 13:26:57 -0400 From: rms@gnu.ai.mit.edu (Richard Stallman) Message-Id: <9310121726.AA14488@mole.gnu.ai.mit.edu> To: haible@ma2s2.mathematik.uni-karlsruhe.de In-Reply-To: <9310121228.AA07494@ma2s2.mathematik.uni-karlsruhe.de> (haible@ma2s2.mathematik.uni-karlsruhe.de) Subject: Re: libgmp.a Status: RO Thanks for reminding me about this example. I agree it is a strong argument. clisp-2.49/doc/_clisp-link.1000066400000000000000000000154631142424315300156250ustar00rootroot00000000000000'\" t .\" Title: clisp-link .\" Author: Bruno Haible <\m[blue]\fB\%http://www.haible.de/bruno/\fR\m[]> .\" Generator: DocBook XSL Stylesheets vsnapshot_8706 .\" Date: Last modified: 2010-07-07 .\" Manual: Platform: @PLATFORM@ .\" Source: CLISP 2.49 .\" Language: English .\" .TH "CLISP\-LINK" "1" "Last modified: 2010\-07\-07" "CLISP 2.49" "Platform: @PLATFORM@" .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" clisp-link \- link a new external module to \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[1]\d\s+2\&. .SH "SYNOPSIS" .HP \w'\fBclisp\-link\fR\ 'u \fBclisp\-link\fR [\fBcreate\fR] [\fB\fImodule\fR\fR] [\fB\fIfile\fR\fR...] .HP \w'\fBclisp\-link\fR\ 'u \fBclisp\-link\fR [\fBadd\fR] [\fB\fIsource\fR\fR] [\fB\fIdestination\fR\fR] [\fB\fImodule\fR\fR...] .HP \w'\fBclisp\-link\fR\ 'u \fBclisp\-link\fR [\fBrun\fR] [\fB\fIsource\fR\fR] [\fB\fImodule\fR\fR...] #ifdef DYNAMIC_MODULES .HP \w'\fBclisp\-link\fR\ 'u \fBclisp\-link\fR [\fBinstall\fR] [\fB\fImodule\fR\fR...] #endif .SH "DESCRIPTION" .PP This shell script operates on \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[1]\d\s+2 module sets and linking sets: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBcreate\fRs new module sets out of source files .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBadd\fRs module sets to a linking set to produce a new linking set .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBrun\fRs \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[1]\d\s+2 with module sets added .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fIOnly in \fR\fI\m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[1]\d\s+2\fR\fI built \fR\fI\fBwithout\fR\fR\fI configure flag \fR\fI\fB\-\-without\-dynamic\-modules\fR\fR\fI\&.\fR .sp \fBinstall\fRs new module sets for general use .RE .SH "OPTIONS" .PP \fBcreate\fR .RS 4 The command .sp .if n \{\ .RS 4 .\} .nf $ \fBclisp\-link\fR \fBcreate\fR \fImodule\fR \fIfile\fR \&.\&.\&. .fi .if n \{\ .RE .\} .sp creates a module set in \fImodule\fR directory which refers (via symbolic links) to files \fIfile\fR\&.\&.\&. The files are expected to be modules of their own\&. .RE .PP \fBadd\fR .RS 4 The command .sp .if n \{\ .RS 4 .\} .nf $ \fBclisp\-link\fR \fBadd\fR \fIsource\fR \fIdestination\fR \fImodule\fR \&.\&.\&. .fi .if n \{\ .RE .\} .sp combines the linking set in directory \fIsource\fR and the modules in directories \fImodule\fR\&.\&.\&. to a new linking set, in the directory \fIdestination\fR which is newly created\&. .RE .PP \fBrun\fR .RS 4 The command .sp .if n \{\ .RS 4 .\} .nf $ \fBclisp\-link\fR \fBrun\fR \fIsource\fR \fImodule\fR \&.\&.\&. .fi .if n \{\ .RE .\} .sp runs the linking set in directory \fIsource\fR, with the modules in directories \fImodule\fR\&.\&.\&. Unless \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[1]\d\s+2 has been built with the configuration option \fB\-\-without\-dynamic\-modules\fR, the loading will be performed using \fBSYS::DYNLOAD\-MODULES\fR\&. Otherwise \- this is much slower \- a temporary linking set will be created and deleted afterwards\&. .RE #ifdef DYNAMIC_MODULES .PP \fBinstall\fR .RS 4 \fIOnly in \fR\fI\m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[1]\d\s+2\fR\fI built \fR\fI\fBwithout\fR\fR\fI configure flag \fR\fI\fB\-\-without\-dynamic\-modules\fR\fR\fI\&.\fR .sp The command .sp .if n \{\ .RS 4 .\} .nf $ \fBclisp\-link\fR \fBinstall\fR \fImodule\fR \&.\&.\&. .fi .if n \{\ .RE .\} .sp installs the modules in directories \fImodule\fR\&.\&.\&. into \fICUSTOM:*LIB\-DIRECTORY*\fR or, if it is not writable to the user (e\&.g\&., if a system\-wide \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[1]\d\s+2 installation is used and the user does not have administrative privileges), into \fICUSTOM:*USER\-LIB\-DIRECTORY*\fR\&. .sp Variable \fICUSTOM:*USER\-LIB\-DIRECTORY*\fR is initially set to (\m[blue]\fB\fBMERGE\-PATHNAMES\fR\fR\m[]\&\s-2\u[2]\d\s+2 "\&.clisp/" (\m[blue]\fB\fBUSER\-HOMEDIR\-PATHNAME\fR\fR\m[]\&\s-2\u[3]\d\s+2)) if that directory exists, and can be reset in the RC file\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBNote\fR .ps -1 .br Do \fBnot\fR add \fICUSTOM:*USER\-LIB\-DIRECTORY*\fR to \fICUSTOM:*LOAD\-PATHS*\fR or under any element thereof\&. Use \fBREQUIRE\fR instead of \fBLOAD\fR to load dynamic modules\&. .sp .5v .RE For this command to work, each \fImodule\fR directory must contain a Makefile with a \fBclisp\-module\-distrib\fR target which uses \fBLN\fR to distribute the files necessary to run the module into \fBdestdir\fR\&. This is in addition to the general requirement that \fBlink\&.sh\fR is present\&. .RE #endif .SH "EXAMPLES" .PP See Section\ \&32.2.6, \(lqExample\(rq\&. .SH "FILES" .PP \fBclisp\-link\fR needs a \(lqlink kit\(rq directory containing: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} "modules\&.c" .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} "clisp\&.h" .RE .sp \fBclisp\-link\fR expects to find these files in a subdirectory linkkit/ of the installation directory (i\&.e\&., \fICUSTOM:*LIB\-DIRECTORY*\fR) which it acquires by running .sp .if n \{\ .RS 4 .\} .nf $ `dirname $0`/clisp \fB\-b\fR .fi .if n \{\ .RE .\} .sp This can be overridden by the \m[blue]\fBenvironment variable\fR\m[]\&\s-2\u[4]\d\s+2 \fBCLISP_LINKKIT\fR\&. .SH "SEE ALSO" .PP .RS 4 CLISP impnotes .RE .RS 4 clisp(1) .RE .SH "AUTHORS" .PP \fBBruno Haible\fR <\&\m[blue]\fB\%http://www.haible.de/bruno/\fR\m[]\&> .RS 4 The original author and long\-time maintainer\&. .RE .PP \fBMichael Stoll\fR <\&\m[blue]\fB\%http://www.faculty.iu-bremen.de/mstoll/\fR\m[]\&> .RS 4 The original author\&. .RE .PP \fBSam Steingold\fR <\&\m[blue]\fB\%http://sds.podval.org/\fR\m[]\&> .RS 4 Co\-maintainer since 1998\&. .RE .PP \fBOthers\fR .RS 4 See \fICOPYRIGHT (file in the CLISP sources) \fR for the list of other contributors and the license\&. .RE .SH "COPYRIGHT" .br Copyright \(co 1992-2010 Bruno Haible .br Copyright \(co 1998-2010 Sam Steingold .br .SH "NOTES" .IP " 1." 4 \fBCLISP\fR .RS 4 \%http://clisp.cons.org .RE .IP " 2." 4 \fBMERGE-PATHNAMES\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_merge-pathnames.html .RE .IP " 3." 4 \fBUSER-HOMEDIR-PATHNAME\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_user-homedir-pathname.html .RE .IP " 4." 4 environment variable .RS 4 \%[set $man.base.url.for.relative.links]/basedefs/xbd_chap08.html .RE clisp-2.49/doc/_clisp-link.html000066400000000000000000000374311142424315300164300ustar00rootroot00000000000000 clisp-link

Name

clisp-link — link a new external module to CLISP.

Synopsis

clisp-link [create] [module] [file...]

clisp-link [add] [source] [destination] [module...]

clisp-link [run] [source] [module...]

#ifdef DYNAMIC_MODULES

clisp-link [install] [module...]

#endif

Description

This shell script operates on CLISP module sets and linking sets:

Options

create

The command

$ clisp-link create module file ...

creates a module set in module directory which refers (via symbolic links) to files file... The files are expected to be modules of their own.

add

The command

$ clisp-link add source destination module ...

combines the linking set in directory source and the modules in directories module... to a new linking set, in the directory destination which is newly created.

run

The command

$ clisp-link run source module ...

runs the linking set in directory source, with the modules in directories module... Unless CLISP has been built with the configuration option --without-dynamic-modules, the loading will be performed using SYS::DYNLOAD-MODULES. Otherwise - this is much slower - a temporary linking set will be created and deleted afterwards.

#ifdef DYNAMIC_MODULES
install

Platform Dependent: Only in CLISP built without configure flag --without-dynamic-modules.

The command

$ clisp-link install module ...

installs the modules in directories module... into CUSTOM:*LIB-DIRECTORY* or, if it is not writable to the user (e.g., if a system-wide CLISP installation is used and the user does not have administrative privileges), into CUSTOM:*USER-LIB-DIRECTORY*.

Variable CUSTOM:*USER-LIB-DIRECTORY* is initially set to (MERGE-PATHNAMES ".clisp/" (USER-HOMEDIR-PATHNAME)) if that directory exists, and can be reset in the RC file.

Note

Do not add CUSTOM:*USER-LIB-DIRECTORY* to CUSTOM:*LOAD-PATHS* or under any element thereof. Use REQUIRE instead of LOAD to load dynamic modules.

For this command to work, each module directory must contain a Makefile with a clisp-module-distrib target which uses LN to distribute the files necessary to run the module into destdir. This is in addition to the general requirement that link.sh is present.

#endif

Files

clisp-link needs a link kit directory containing:

clisp-link expects to find these files in a subdirectory linkkit/ of the installation directory (i.e., CUSTOM:*LIB-DIRECTORY*) which it acquires by running

$ `dirname $0`/clisp -b

This can be overridden by the environment variable CLISP_LINKKIT.


clisp-link version 2.49Platform: @PLATFORM@Last modified: 2010-07-07


clisp-2.49/doc/_clisp.1000066400000000000000000001113171142424315300146650ustar00rootroot00000000000000'\" t .\" Title: clisp .\" Author: Bruno Haible <\m[blue]\fB\%http://www.haible.de/bruno/\fR\m[]> .\" Generator: DocBook XSL Stylesheets vsnapshot_8706 .\" Date: Last modified: 2010-07-07 .\" Manual: Platform: @PLATFORM@ .\" Source: CLISP 2.49 .\" Language: English .\" .TH "CLISP" "1" "Last modified: 2010\-07\-07" "CLISP 2.49" "Platform: @PLATFORM@" .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" clisp \- \m[blue]\fBANSI\fR\m[]\&\s-2\u[38]\d\s+2 \m[blue]\fB\fBCommon Lisp\fR\fR\m[]\&\s-2\u[1]\d\s+2 compiler, interpreter and debugger\&. .SH "SYNOPSIS" .HP \w'\fBclisp\fR\ 'u \fBclisp\fR [[\fB\-h\fR] | [\fB\-\-help\fR]] [\fB\-\-version\fR] [\fB\-\-license\fR] [\fB\-help\-image\fR] [\fB\-B\ \fIlisp\-lib\-dir\fR\fR] [\fB\-b\fR] [\fB\-K\ \fIlinking\-set\fR\fR] [\fB\-M\ \fImem\-file\fR\fR] [\fB\-m\ \fImemory\-size\fR\fR] [\fB\-L\ \fIlanguage\fR\fR] [\fB\-N\ \fIlocale\-dir\fR\fR] [\fB\-E\fIdomain\fR\ \fIencoding\fR\fR] [[\fB\-q\fR] | [\fB\-\-quiet\fR] | [\fB\-\-silent\fR] | [\fB\-v\fR] | [\fB\-\-verbose\fR]] [\fB\-on\-error\ \fIaction\fR\fR] [\fB\-repl\fR] [\fB\-w\fR] [\fB\-I\fR] [\fB\-disable\-readline\fR] [[\fB\-ansi\fR] | [\fB\-traditional\fR]] [\fB\-modern\fR] [\fB\-p\ \fIpackage\fR\fR] [\fB\-C\fR] [\fB\-norc\fR] [\fB\-lp\ \fIdirectory\fR\fR...] [\fB\-i\ \fIinit\-file\fR\fR...] [\fB\-c\fR\ [\fB\-l\fR]\ \fIlisp\-file\fR\ [\fB\-o\fR\fB\ \fR\fB\fIoutput\-file\fR\fR]...] [\fB\-x\ \fIexpressions\fR\fR...] [\fB\fIlisp\-file\fR\fR\ [\fB\fIargument\fR\fR...]] .SH "DESCRIPTION" .PP Invokes the \m[blue]\fB\fBCommon Lisp\fR\fR\m[]\&\s-2\u[1]\d\s+2 interpreter and compiler\&. .SS "Interactive Mode" .PP When called without arguments, executes the \m[blue]\fBread\-eval\-print loop\fR\m[]\&\s-2\u[2]\d\s+2, in which expressions are in turn .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \m[blue]\fB\fBREAD\fR\fR\m[]\&\s-2\u[3]\d\s+2 from the standard input, .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \m[blue]\fB\fBEVAL\fR\fR\m[]\&\s-2\u[4]\d\s+2uated by the lisp interpreter, .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} and their results are \m[blue]\fB\fBPRINT\fR\fR\m[]\&\s-2\u[5]\d\s+2ed to the standard output\&. .RE .SS "Non\-Interactive (Batch) Mode" .PP Invoked with \fB\-c\fR, compiles the specified lisp files to a platform\-independent bytecode which can be executed more efficiently\&. .PP Invoked with \fB\-x\fR, executes the specified lisp expressions\&. .PP Invoked with \fB\fIlisp\-file\fR\fR, runs the specified lisp file\&. .SH "OPTIONS" .PP \fB\-h\fR .br \fB\-\-help\fR .RS 4 Displays a help message on how to invoke \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2\&. .RE .PP \fB\-\-version\fR .RS 4 Displays the \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 version number, as given by the function \m[blue]\fB\fBLISP\-IMPLEMENTATION\-VERSION\fR\fR\m[]\&\s-2\u[7]\d\s+2, the value of the variable \fI*FEATURES*\fR, as well some other information\&. .RE .PP \fB\-\-license\fR .RS 4 Displays a summary of the licensing information, the \m[blue]\fBGNU\fR\m[]\&\s-2\u[8]\d\s+2 \m[blue]\fBGPL\fR\m[]\&\s-2\u[9]\d\s+2\&. .RE .PP \fB\-help\-image\fR .RS 4 Displays information about the memory image being invoked: whether is it suitable for scripting as well as the \fB:DOCUMENTATION\fR supplied to \fBEXT:SAVEINITMEM\fR\&. .RE .PP \fB\-B\fR \fIlisp\-lib\-dir\fR .RS 4 Specifies the installation directory\&. This is the directory containing the linking sets and other data files\&. This option is normally not necessary, because the installation directory is already built\-in into the \fBclisp\fR executable\&. Directory \fIlisp\-lib\-dir\fR can be changed dynamically using the \m[blue]\fBSYMBOL\-MACRO\fR\m[]\&\s-2\u[10]\d\s+2 \fICUSTOM:*LIB\-DIRECTORY*\fR\&. .RE .PP \fB\-b\fR .RS 4 Print the installation directory and exit immediately\&. The namestring of \fICUSTOM:*LIB\-DIRECTORY*\fR is printed without any quotes\&. This is mostly useful in module Makefiles, see, e\&.g\&., modules/syscalls/Makefile\&.in (file in the CLISP sources)\&. .RE .PP \fB\-K\fR \fIlinking\-set\fR .RS 4 Specifies the linking set to be run\&. This is a directory (relative to the \fIlisp\-lib\-dir\fR) containing at least a main executable (runtime) and an initial memory image\&. Possible values are .PP \fBbase\fR .RS 4 the core \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 .RE .PP \fBfull\fR .RS 4 core plus all the modules with which this installation was built, see Section\ \&32.2, \(lqExternal Modules\(rq\&. .RE .sp The default is \fBbase\fR\&. .RE .PP \fB\-M\fR \fImem\-file\fR .RS 4 Specifies the initial memory image\&. This must be a memory dump produced by the \fBEXT:SAVEINITMEM\fR function by this \fBclisp\fR runtime\&. #ifdef UNIX It may have been compressed using \m[blue]\fBGNU\fR\m[]\&\s-2\u[8]\d\s+2 \m[blue]\fB\fBgzip\fR\fR\m[]\&\s-2\u[11]\d\s+2\&. #endif .RE .PP \fB\-m\fR \fImemory\-size\fR .RS 4 Sets the amount of memory \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 tries to grab on startup\&. The amount may be given as .PP \fIn\fR .br \fIn\fR\fBB\fR .RS 4 measured in bytes .RE .PP \fIn\fR .br \fIn\fR\fBW\fR .RS 4 measured in machine words (4\(mu\fIn\fR on 32\-bit platforms, 8\(mu\fIn\fR on 64\-bit platforms) .RE .PP \fIn\fR\fBK\fR .br \fIn\fR\fBKB\fR .RS 4 measured in kilobytes .RE .PP \fIn\fR\fBKW\fR .RS 4 measured in kilowords .RE .PP \fIn\fR\fBM\fR .br \fIn\fR\fBMB\fR .RS 4 measured in megabytes .RE .PP \fIn\fR\fBMW\fR .RS 4 measured in megawords .RE .sp The default is 3 megabytes\&. #if (oint_addr_len+addr_shift==24) The argument is constrained between 100 KB and 16 MB\&. #elif (oint_addr_len+addr_shift==26) The argument is constrained between 100 KB and 64 MB\&. #elif (oint_addr_len+addr_shift==28) The argument is constrained between 100 KB and 256 MB\&. #else The argument is constrained above 100 KB\&. #endif .sp This version of \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 #if defined(SPVW_MIXED) && defined(SPVW_BLOCKS) #ifdef GENERATIONAL_GC is not likely to actually use the entire \fImemory\-size\fR since garbage\-collection will periodically reduce the amount of used memory\&. It is therefore common to specify 10 MB even if only 2 MB are going to be used\&. #else eventually uses the entire \fImemory\-size\fR\&. #endif #else allocates memory dynamically\&. \fImemory\-size\fR is essentially ignored (except that it determines the Lisp STACK size)\&. #endif .RE .PP \fB\-L\fR \fIlanguage\fR .RS 4 Specifies the language \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 uses to communicate with the user\&. This may be #ifndef GNU_GETTEXT only \fBenglish\fR\&. #else one of \fBenglish\fR, \fBgerman\fR, \fBfrench\fR, \fBspanish\fR, \fBdutch\fR, \fBrussian\fR, \fBdanish\fR\&. Other languages may be specified through the \m[blue]\fBenvironment variable\fR\m[]\&\s-2\u[12]\d\s+2 \fBLANG\fR, provided the corresponding message catalog is installed\&. #endif The language may be changed dynamically using the \m[blue]\fBSYMBOL\-MACRO\fR\m[]\&\s-2\u[10]\d\s+2 \fICUSTOM:*CURRENT\-LANGUAGE*\fR\&. .RE .PP \fB\-N\fR \fIlocale\-dir\fR .RS 4 Specifies the base directory of locale files\&. \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 will search its message catalogs in \fIlocale\-dir\fR/\fIlanguage\fR/LC_MESSAGES/clisp\&.mo\&. This directory may be changed dynamically using the \m[blue]\fBSYMBOL\-MACRO\fR\m[]\&\s-2\u[10]\d\s+2 \fICUSTOM:*CURRENT\-LANGUAGE*\fR\&. .RE .PP \fB\-E\fR\fB\fIdomain\fR\fR\fB \fR\fB\fIencoding\fR\fR .RS 4 Specifies the encoding used for the given domain, overriding the default which depends on the \m[blue]\fBenvironment variable\fR\m[]\&\s-2\u[12]\d\s+2s \fBLC_ALL\fR, \fBLC_CTYPE\fR, \fBLANG\fR\&. \fIdomain\fR can be .PP \fBfile\fR .RS 4 affecting \fICUSTOM:*DEFAULT\-FILE\-ENCODING*\fR .RE .PP \fBpathname\fR .RS 4 affecting \fICUSTOM:*PATHNAME\-ENCODING*\fR .RE .PP \fBterminal\fR .RS 4 affecting \fICUSTOM:*TERMINAL\-ENCODING*\fR .RE .PP \fBforeign\fR .RS 4 affecting \fICUSTOM:*FOREIGN\-ENCODING*\fR .RE .PP \fBmisc\fR .RS 4 affecting \fICUSTOM:*MISC\-ENCODING*\fR .RE .PP \fIblank\fR .RS 4 affecting all of the above\&. .RE .sp .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBWarning\fR .ps -1 .br Note that the values of these \m[blue]\fBSYMBOL\-MACRO\fR\m[]\&\s-2\u[10]\d\s+2s that have been saved in a memory image are ignored: these \m[blue]\fBSYMBOL\-MACRO\fR\m[]\&\s-2\u[10]\d\s+2s are reset based on the OS environment \fBafter\fR the memory image is loaded\&. You have to use the RC file, \fICUSTOM:*INIT\-HOOKS*\fR or init function to set them on startup, but it is best to set the aforementioned \m[blue]\fBenvironment variable\fR\m[]\&\s-2\u[12]\d\s+2s appropriately for consistency with other programs\&. See Section\ \&31.1, \(lqCustomizing CLISP Process Initialization and Termination\(rq\&. .sp .5v .RE .RE .PP \fB\-q\fR .br \fB\-\-quiet\fR .br \fB\-\-silent\fR .br \fB\-v\fR .br \fB\-\-verbose\fR .RS 4 Change verbosity level: by default, \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 displays a banner at startup and a good\-bye message when quitting, and initializes \m[blue]\fB\fI*LOAD\-VERBOSE*\fR\fR\m[]\&\s-2\u[13]\d\s+2 and \m[blue]\fB\fI*COMPILE\-VERBOSE*\fR\fR\m[]\&\s-2\u[14]\d\s+2 to \m[blue]\fB\fBT\fR\fR\m[]\&\s-2\u[15]\d\s+2, and \m[blue]\fB\fI*LOAD\-PRINT*\fR\fR\m[]\&\s-2\u[13]\d\s+2 and \m[blue]\fB\fI*COMPILE\-PRINT*\fR\fR\m[]\&\s-2\u[14]\d\s+2 to \m[blue]\fB\fBNIL\fR\fR\m[]\&\s-2\u[16]\d\s+2, as per [ANSI CL standard]\&. The first \fB\-q\fR removes the banner and the good\-bye message, the second sets variables \m[blue]\fB\fI*LOAD\-VERBOSE*\fR\fR\m[]\&\s-2\u[13]\d\s+2, \m[blue]\fB\fI*COMPILE\-VERBOSE*\fR\fR\m[]\&\s-2\u[14]\d\s+2 and \fICUSTOM:*SAVEINITMEM\-VERBOSE*\fR to \m[blue]\fB\fBNIL\fR\fR\m[]\&\s-2\u[16]\d\s+2\&. The first \fB\-v\fR sets variables \fICUSTOM:*REPORT\-ERROR\-PRINT\-BACKTRACE*\fR, \m[blue]\fB\fI*LOAD\-PRINT*\fR\fR\m[]\&\s-2\u[13]\d\s+2 and \m[blue]\fB\fI*COMPILE\-PRINT*\fR\fR\m[]\&\s-2\u[14]\d\s+2 to \m[blue]\fB\fBT\fR\fR\m[]\&\s-2\u[15]\d\s+2, the second sets \fICUSTOM:*LOAD\-ECHO*\fR to \m[blue]\fB\fBT\fR\fR\m[]\&\s-2\u[15]\d\s+2\&. These settings affect the output produced by \fB\-i\fR and \fB\-c\fR options\&. Note that these settings persist into the \m[blue]\fBread\-eval\-print loop\fR\m[]\&\s-2\u[2]\d\s+2\&. Repeated \fB\-q\fR and \fB\-v\fR cancel each other, e\&.g\&., \fB\-q \-q \-v \-v \-v\fR is equivalent to \fB\-v\fR\&. .RE .PP \fB\-on\-error\fR \fIaction\fR .RS 4 Establish global error handlers, depending on \fIaction\fR:.PP appease .RS 4 \m[blue]\fBcontinuable\fR\m[]\&\s-2\u[17]\d\s+2 \m[blue]\fBERROR\fR\m[]\&\s-2\u[18]\d\s+2s are turned into \m[blue]\fBWARNING\fR\m[]\&\s-2\u[19]\d\s+2s (with \fBEXT:APPEASE\-CERRORS\fR) other \m[blue]\fBERROR\fR\m[]\&\s-2\u[18]\d\s+2s are handled in the default way .RE .PP debug .RS 4 \m[blue]\fBERROR\fR\m[]\&\s-2\u[18]\d\s+2s \m[blue]\fB\fBINVOKE\-DEBUGGER\fR\fR\m[]\&\s-2\u[20]\d\s+2 (the normal \m[blue]\fBread\-eval\-print loop\fR\m[]\&\s-2\u[2]\d\s+2 behavior), disables batch mode imposed by \fB\-c\fR, \fB\-x\fR, and \fB\fIlisp\-file\fR\fR, .RE .PP abort .RS 4 \m[blue]\fBcontinuable\fR\m[]\&\s-2\u[17]\d\s+2 \m[blue]\fBERROR\fR\m[]\&\s-2\u[18]\d\s+2s are appeased, other \m[blue]\fBERROR\fR\m[]\&\s-2\u[18]\d\s+2s are \m[blue]\fB\fBABORT\fR\fR\m[]\&\s-2\u[21]\d\s+2ed with \fBEXT:ABORT\-ON\-ERROR\fR .RE .PP exit .RS 4 \m[blue]\fBcontinuable\fR\m[]\&\s-2\u[17]\d\s+2 \m[blue]\fBERROR\fR\m[]\&\s-2\u[18]\d\s+2s are appeased, other \m[blue]\fBERROR\fR\m[]\&\s-2\u[18]\d\s+2s terminate \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 with \fBEXT:EXIT\-ON\-ERROR\fR (the normal batch mode behavior)\&. .RE .sp See also \fBEXT:SET\-GLOBAL\-HANDLER\fR\&. .RE .PP \fB\-repl\fR .RS 4 Start an interactive \m[blue]\fBread\-eval\-print loop\fR\m[]\&\s-2\u[2]\d\s+2 after processing the \fB\-c\fR, \fB\-x\fR, and \fB\fIlisp\-file\fR\fR options and on any \m[blue]\fBERROR\fR\m[]\&\s-2\u[18]\d\s+2 \m[blue]\fB\fBSIGNAL\fR\fR\m[]\&\s-2\u[22]\d\s+2ed during that processing\&. .sp Disables batch mode\&. .RE .PP \fB\-w\fR .RS 4 Wait for a keypress after program termination\&. .RE .PP \fB\-I\fR .RS 4 Interact better with \m[blue]\fBEmacs\fR\m[]\&\s-2\u[23]\d\s+2 (useful when running \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 under \m[blue]\fBEmacs\fR\m[]\&\s-2\u[23]\d\s+2 using \m[blue]\fBSLIME\fR\m[]\&\s-2\u[24]\d\s+2, \m[blue]\fBILISP\fR\m[]\&\s-2\u[25]\d\s+2 et al)\&. With this option, \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 interacts in a way that \m[blue]\fBEmacs\fR\m[]\&\s-2\u[23]\d\s+2 can deal with: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} unnecessary prompts are not suppressed\&. .RE #ifdef GNU_READLINE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The \m[blue]\fBGNU\fR\m[]\&\s-2\u[8]\d\s+2 \m[blue]\fBreadline\fR\m[]\&\s-2\u[26]\d\s+2 library treats TAB (see TAB key) as a normal self\-inserting character (see Q:\ \&A.4.6)\&. .RE #endif .RE .PP \fB\-disable\-readline\fR .RS 4 Do not use \m[blue]\fBGNU\fR\m[]\&\s-2\u[8]\d\s+2 \m[blue]\fBreadline\fR\m[]\&\s-2\u[26]\d\s+2 even when it has been linked against\&. This can be used if one wants to paste non\-\m[blue]\fB\fIASCII\fR\fR\m[]\&\s-2\u[27]\d\s+2 characters, or when \m[blue]\fBGNU\fR\m[]\&\s-2\u[8]\d\s+2 \m[blue]\fBreadline\fR\m[]\&\s-2\u[26]\d\s+2 misbehaves due to installation (different versions on the build and install machines) or setup (bad \fBTERM\fR \m[blue]\fBenvironment variable\fR\m[]\&\s-2\u[12]\d\s+2 value) issues\&. .RE .PP \fB\-ansi\fR .RS 4 Comply with the [ANSI CL standard] specification even where \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 has been traditionally different by setting the \m[blue]\fBSYMBOL\-MACRO\fR\m[]\&\s-2\u[10]\d\s+2 \fICUSTOM:*ANSI*\fR to \m[blue]\fB\fBT\fR\fR\m[]\&\s-2\u[15]\d\s+2\&. .RE .PP \fB\-traditional\fR .RS 4 Traditional: reverses the residual effects of \fB\-ansi\fR in the saved memory image\&. .RE .PP \fB\-modern\fR .RS 4 Provides a modern view of symbols: at startup the \m[blue]\fB\fI*PACKAGE*\fR\fR\m[]\&\s-2\u[28]\d\s+2 variable will be set to the \(lqCS\-COMMON\-LISP\-USER\(rq package, and the \m[blue]\fB\fI*PRINT\-CASE*\fR\fR\m[]\&\s-2\u[29]\d\s+2 will be set to \fB:DOWNCASE\fR\&. This has the effect that symbol lookup is case\-sensitive (except for keywords and old\-style packages) and that keywords and uninterned symbols are printed with lower\-case preferrence\&. See Section\ \&11.5, \(lqPackage Case-Sensitivity\(rq\&. .RE .PP \fB\-p\fR \fIpackage\fR .RS 4 At startup the value of the variable \m[blue]\fB\fI*PACKAGE*\fR\fR\m[]\&\s-2\u[28]\d\s+2 will be set to the package named \fIpackage\fR\&. The default is the value of \m[blue]\fB\fI*PACKAGE*\fR\fR\m[]\&\s-2\u[28]\d\s+2 when the image was saved, normally \m[blue]\fB\(lqCOMMON\-LISP\-USER\(rq\fR\m[]\&\s-2\u[30]\d\s+2\&. .RE .PP \fB\-C\fR .RS 4 Compile when loading: at startup the value of the variable \fICUSTOM:*LOAD\-COMPILING*\fR will be set to \m[blue]\fB\fBT\fR\fR\m[]\&\s-2\u[15]\d\s+2\&. Code being \m[blue]\fB\fBLOAD\fR\fR\m[]\&\s-2\u[31]\d\s+2ed will then be \m[blue]\fB\fBCOMPILE\fR\fR\m[]\&\s-2\u[32]\d\s+2d on the fly\&. This results in slower loading, but faster execution\&. .RE .PP \fB\-norc\fR .RS 4 Normally \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 loads the user \m[blue]\fB\(lqrun control\(rq (RC)\fR\m[]\&\s-2\u[33]\d\s+2 file on startup (this happens \fBafter\fR the \fB\-C\fR option is processed)\&. The file loaded is \&.clisprc\&.lisp or \&.clisprc\&.fas in the home directory \m[blue]\fB\fBUSER\-HOMEDIR\-PATHNAME\fR\fR\m[]\&\s-2\u[34]\d\s+2, whichever is newer\&. This option, \fB\-norc\fR, prevents loading of the RC file\&. .RE .PP \fB\-lp\fR \fIdirectory\fR .RS 4 Specifies directories to be added to \fICUSTOM:*LOAD\-PATHS*\fR at startup\&. This is done \fBafter\fR loading the RC file (so that it does not override the command\-line option) but \fBbefore\fR loading the init\-files specified by the \fB\-i\fR options (so that the init\-files will be searched for in the specified directories)\&. Several \fB\-lp\fR options can be given; all the specified directories will be added\&. .RE .PP \fB\-i\fR \fIinit\-file\fR .RS 4 Specifies initialization files to be \m[blue]\fB\fBLOAD\fR\fR\m[]\&\s-2\u[31]\d\s+2ed at startup\&. These should be lisp files (source or compiled)\&. Several \fB\-i\fR options can be given; all the specified files will be loaded in order\&. .RE .PP \fB\-c\fR \fIlisp\-file\fR .RS 4 Compiles the specified \fIlisp\-file\fRs to bytecode (*\&.fas)\&. The compiled files can then be \m[blue]\fB\fBLOAD\fR\fR\m[]\&\s-2\u[31]\d\s+2ed instead of the sources to gain efficiency\&. .sp Imposes batch mode\&. .RE .PP \fB\-o\fR \fIoutputfile\fR .RS 4 Specifies the output file or directory for the compilation of the last specified \fIlisp\-file\fR\&. .RE .PP \fB\-l\fR .RS 4 Produce a bytecode \m[blue]\fB\fBDISASSEMBLE\fR\fR\m[]\&\s-2\u[35]\d\s+2 listing (*\&.lis) of the files being compiled\&. Useful only for debugging\&. See Section\ \&24.1, \(lqFunction COMPILE-FILE\(rq for details\&. .RE .PP \fB\-x\fR \fIexpressions\fR .RS 4 Executes a series of arbitrary expressions instead of a \m[blue]\fBread\-eval\-print loop\fR\m[]\&\s-2\u[2]\d\s+2\&. The values of the expressions will be output to \m[blue]\fB\fI*STANDARD\-OUTPUT*\fR\fR\m[]\&\s-2\u[36]\d\s+2\&. Due to the argument processing done by the shell, the \fIexpressions\fR must be enclosed in double quotes, and double quotes and backslashes must be escaped with backslashes\&. .sp Imposes batch mode\&. .RE .PP \fIlisp\-file\fR [ \fIargument\fR \&.\&.\&. ] .RS 4 Loads and executes a \fIlisp\-file\fR, as described in Section\ \&32.6.2, \(lqScripting with CLISP\(rq\&. There will be no \m[blue]\fBread\-eval\-print loop\fR\m[]\&\s-2\u[2]\d\s+2\&. Before \fIlisp\-file\fR is loaded, the variable \fIEXT:*ARGS*\fR will be bound to a list of strings, representing the \fIargument\fRs\&. #ifdef UNIX The first line of \fIlisp\-file\fR may start with \fB#!\fR, thus permitting \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 to be used as a script interpreter\&. #endif If \fIlisp\-file\fR is \fB\-\fR, the \m[blue]\fB\fI*STANDARD\-INPUT*\fR\fR\m[]\&\s-2\u[36]\d\s+2 is used instead of a file\&. .sp This option is \fIdisabled\fR if the memory image was created by \fBEXT:SAVEINITMEM\fR with \m[blue]\fB\fBNIL\fR\fR\m[]\&\s-2\u[16]\d\s+2 \fB:SCRIPT\fR argument\&. In that case the \m[blue]\fBLIST\fR\m[]\&\s-2\u[37]\d\s+2 \fIEXT:*ARGS*\fR starts with \fIlisp\-file\fR\&. .sp This option must be the last one\&. .sp No RC file will be executed\&. .sp Imposes batch mode\&. .RE .PP As usual, \fB\-\-\fR stops option processing and places all remaining command line arguments into \fIEXT:*ARGS*\fR\&. .SH "LANGUAGE REFERENCE" .PP The language implemented is \m[blue]\fBANSI\&\s-2\u[39]\d\s+2\fR\m[]\&\s-2\u[38]\d\s+2 \m[blue]\fB\fBCommon Lisp\fR\fR\m[]\&\s-2\u[1]\d\s+2\&. The implementation mostly conforms to the ANSI Common Lisp standard, see Section\ \&31.10, \(lqMaximum ANSI CL compliance\(rq\&. [ANSI CL] ANSI CL standard1994. ANSI INCITS 226-1994 (R1999) \m[blue]Information Technology \- Programming Language \- Common Lisp\m[]\&\s-2\u[40]\d\s+2 [formerly ANSI X3.226-1994 (R1999)]. .SH "COMMAND LINE USER ENVIRONMENT" .PP \fBhelp\fR .RS 4 get context\-sensitive on\-line help, see Chapter\ \&25, Environment\&. .RE .PP (\fBAPROPOS\fR \fIname\fR) .RS 4 list the \m[blue]\fBSYMBOL\fR\m[]\&\s-2\u[41]\d\s+2s matching \fIname\fR\&. .RE .PP (\fBDESCRIBE\fR \fIsymbol\fR) .RS 4 describe the \fIsymbol\fR\&. .RE .PP (exit) .br (quit) .br (bye) .RS 4 quit \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2\&. .RE .PP EOF #if defined(UNIX) (Control+D on \m[blue]\fB\fBUNIX\fR\fR\m[]\&\s-2\u[42]\d\s+2) #endif #if defined(WIN32_NATIVE) (Control+Z on \m[blue]\fB\fIWin32\fR\fR\m[]\&\s-2\u[43]\d\s+2) #endif .RS 4 leave the current level of the \m[blue]\fBread\-eval\-print loop\fR\m[]\&\s-2\u[2]\d\s+2 (see also Section\ \&1.1, \(lqSpecial Symbols \(rq)\&. .RE #ifdef GNU_READLINE .PP arrow keys .RS 4 for editing and viewing the input history, using the \m[blue]\fBGNU\fR\m[]\&\s-2\u[8]\d\s+2 \m[blue]\fBreadline\fR\m[]\&\s-2\u[26]\d\s+2 library\&. .RE .PP TAB key .RS 4 Context sensitive: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} If you are in the \(lqfunction position\(rq (in the first symbol after an opening paren or in the first symbol after a \m[blue]\fB#\'\fR\m[]\&\s-2\u[44]\d\s+2), the completion is limited to the symbols that name functions\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} If you are in the "filename position" (inside a string after \m[blue]\fB#P\fR\m[]\&\s-2\u[45]\d\s+2), the completion is done across file names, \m[blue]\fBGNU\fR\m[]\&\s-2\u[8]\d\s+2 \m[blue]\fBbash\fR\m[]\&\s-2\u[46]\d\s+2\-style\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} If you have not typed anything yet, you will get a help message, as if by the \fBhelp\fR command\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} If you have not started typing the next symbol (i\&.e\&., you are at a whitespace), the current function or macro is \fBDESCRIBE\fRd\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Otherwise, the symbol you are currently typing is completed\&. .RE .sp .RE #endif .SH "USING AND EXTENDING CLISP" .PP \m[blue]\fB\fBCommon Lisp\fR\fR\m[]\&\s-2\u[1]\d\s+2 is a \fIprogrammable\fR programming language\&. \(em\m[blue]\fBJohn Foderaro\fR\m[]\&\s-2\u[47]\d\s+2.PP When \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 is invoked, the runtime loads the initial memory image and outputs the prompt; at which one can start typing \m[blue]\fB\fBDEFVAR\fR\fR\m[]\&\s-2\u[48]\d\s+2s, \m[blue]\fB\fBDEFUN\fR\fR\m[]\&\s-2\u[49]\d\s+2s and \m[blue]\fB\fBDEFMACRO\fR\fR\m[]\&\s-2\u[50]\d\s+2s\&. .PP To avoid having to re\-enter the same definitions by hand in every session, one can create a lisp file with all the variables, functions, macros, etc\&.; (optionally) compile it with \m[blue]\fB\fBCOMPILE\-FILE\fR\fR\m[]\&\s-2\u[51]\d\s+2; and \m[blue]\fB\fBLOAD\fR\fR\m[]\&\s-2\u[31]\d\s+2 it either by hand or from the RC file; or save a memory image to avoid the \m[blue]\fB\fBLOAD\fR\fR\m[]\&\s-2\u[31]\d\s+2 overhead\&. .PP However, sometimes one needs to use some functionality implemented in another language, e\&.g\&., call a \m[blue]\fB\fBC\fR\fR\m[]\&\s-2\u[52]\d\s+2 library function\&. For that one uses the Foreign Function Interface and/or the External Modules facility\&. Finally, the truly adventurous ones might delve into Extending the Core\&. .SH "FILES" .PP \fBclisp\fR .br \fBclisp\&.exe\fR .RS 4 #if defined(UNIX) && !defined(UNIX_CYGWIN32) #endif #if defined(WIN32_NATIVE) || defined(UNIX_CYGWIN32) #endif startup driver (an executable or, rarely, a shell script) which remembers the location of the runtime and starts it with the appropriate arguments .RE .PP lisp\&.run .br lisp\&.exe .RS 4 #if defined(UNIX) && !defined(UNIX_CYGWIN32) #endif #if defined(WIN32_NATIVE) || defined(UNIX_CYGWIN32) #endif main executable (runtime) \- the part of \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 implemented in \m[blue]\fB\fBC\fR\fR\m[]\&\s-2\u[52]\d\s+2\&. .RE .PP lispinit\&.mem .RS 4 initial memory image (the part of \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 implemented in lisp) .RE .PP config\&.lisp .RS 4 site\-dependent configuration (should have been customized before \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 was built); see Section\ \&31.12, \(lqCustomizing CLISP behavior\(rq .RE .PP *\&.lisp .RS 4 lisp source .RE .PP *\&.fas .RS 4 lisp code, compiled by \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 .RE .PP *\&.lib .RS 4 lisp source library information, generated by \fBCOMPILE\-FILE\fR, see Section\ \&24.3, \(lqFunction REQUIRE\(rq\&. .RE .PP *\&.c .RS 4 C code, compiled from lisp source by \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 (see Section\ \&32.3, \(lqThe Foreign Function Call Facility\(rq) .RE .PP For the \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 source files, see Chapter\ \&34, The source files of CLISP\&. #ifdef HAVE_ENVIRONMENT .SH "ENVIRONMENT" .PP All \m[blue]\fBenvironment variable\fR\m[]\&\s-2\u[12]\d\s+2s that \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 uses are read at most once\&. .PP \fBCLISP_LANGUAGE\fR .RS 4 specifies the language \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 uses to communicate with the user\&. The legal values are identical to those of the \fB\-L\fR option which can be used to override this \m[blue]\fBenvironment variable\fR\m[]\&\s-2\u[12]\d\s+2\&. .RE #ifdef ENABLE_UNICODE .PP \fBLC_CTYPE\fR .RS 4 specifies the locale which determines the character set in use\&. The value can be of the form \fB\fIlanguage\fR\fR or \fB\fIlanguage\fR\fR\fB_\fR\fB\fIcountry\fR\fR or \fB\fIlanguage\fR\fR\fB_\fR\fB\fIcountry\fR\fR\fB\&.\fR\fB\fIcharset\fR\fR, where \fIlanguage\fR is a two\-letter ISO 639 language code (lower case), \fIcountry\fR is a two\-letter ISO 3166 country code (upper case)\&. \fIcharset\fR is an optional character set specification, and needs normally not be given because the character set can be inferred from the language and country\&. This \m[blue]\fBenvironment variable\fR\m[]\&\s-2\u[12]\d\s+2 can be overridden with the \fB-Edomain encoding\fR option\&. .RE #endif .PP \fBLANG\fR .RS 4 specifies the language \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 uses to communicate with the user, unless it is already specified through the \m[blue]\fBenvironment variable\fR\m[]\&\s-2\u[12]\d\s+2 \fBCLISP_LANGUAGE\fR or the \fB\-L\fR option\&. #ifdef ENABLE_UNICODE It also specifies the locale determining the character set in use, unless already specified through the \m[blue]\fBenvironment variable\fR\m[]\&\s-2\u[12]\d\s+2 \fBLC_CTYPE\fR\&. #endif The value may begin with a two\-letter ISO 639 language code, for example \fBen\fR, \fBde\fR, \fBfr\fR\&. .RE #ifdef UNIX .PP \fBHOME\fR .br \fBUSER\fR .RS 4 used for determining the value of the function \m[blue]\fB\fBUSER\-HOMEDIR\-PATHNAME\fR\fR\m[]\&\s-2\u[34]\d\s+2\&. .RE #endif .PP \fBSHELL\fR .br \fBCOMSPEC\fR .RS 4 #ifdef UNIX #endif #ifdef WIN32_NATIVE #endif is used to find the interactive command interpreter called by \fBEXT:SHELL\fR\&. .RE #ifdef UNIX .PP \fBTERM\fR .RS 4 determines the screen size recognized by the pretty printer\&. .RE #endif .PP \fBORGANIZATION\fR .RS 4 for \m[blue]\fB\fBSHORT\-SITE\-NAME\fR\fR\m[]\&\s-2\u[53]\d\s+2 and \m[blue]\fB\fBLONG\-SITE\-NAME\fR\fR\m[]\&\s-2\u[53]\d\s+2 in config\&.lisp\&. .RE .PP \fBCLHSROOT\fR .RS 4 for \fBCUSTOM:CLHS\-ROOT\fR in config\&.lisp\&. .RE .PP \fBIMPNOTES\fR .RS 4 for \fBCUSTOM:IMPNOTES\-ROOT\fR in config\&.lisp\&. .RE .PP \fBEDITOR\fR .RS 4 for \fBeditor\-name\fR in config\&.lisp\&. .RE .PP \fBLOGICAL_HOST_\fR\fB\fIhost\fR\fR\fB_FROM\fR .br \fBLOGICAL_HOST_\fR\fB\fIhost\fR\fR\fB_TO\fR .br \fBLOGICAL_HOST_\fR\fB\fIhost\fR\fR .RS 4 for \fICUSTOM:*LOAD\-LOGICAL\-PATHNAME\-TRANSLATIONS\-DATABASE*\fR .RE #endif .SH "INPUT AND OUTUT" .PP See Section\ \&21.1.1, \(lqInitialization of Standard Streams\(rq\&. .SH "SEE ALSO" .PP .RS 4 CLISP impnotes .RE .RS 4 clisp-link(1) .RE .RS 4 \m[blue]\fB\fBCMU CL\fR\fR\m[]\&\s-2\u[54]\d\s+2 \- \fBcmucl\fR(1) .RE .RS 4 \m[blue]\fBEmacs\fR\m[]\&\s-2\u[23]\d\s+2 \- \fBemacs\fR(1) .RE .RS 4 \m[blue]\fBXEmacs\fR\m[]\&\s-2\u[55]\d\s+2 \- \fBxemacs\fR(1) .RE .SH "BUGS" .PP When you encounter a bug in \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 or in its documentation (this manual page or CLISP impnotes), please report it to the \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 \m[blue]\fBSourceForge bug tracker\fR\m[]\&\s-2\u[56]\d\s+2\&. .PP \fIBefore\fR submitting a bug report, please take the following basic steps to make the report more useful: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ .sp -1 .IP " 1." 4.2 .\} Please do a clean build (remove your build directory and build \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 with \fB\&./configure \-\-cbc build\fR or at least do a \fBmake distclean\fR before \fBmake\fR)\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ .sp -1 .IP " 2." 4.2 .\} If you are reporting a \(lqhard crash\(rq (segmentation fault, bus error, core dump etc), please do \fB\&./configure \fR\fB\fB\-\-with\-debug\fR\fR\fB \-\-cbc build\-g ; cd build\-g; gdb lisp\&.run\fR, then load the appropriate linking set by either \fBbase\fR or \fBfull\fR \m[blue]\fB\fBgdb\fR\fR\m[]\&\s-2\u[57]\d\s+2 command, and report the backtrace (see also Q:\ \&A.1.1.10)\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 3.\h'+01'\c .\} .el \{\ .sp -1 .IP " 3." 4.2 .\} If you are using pre\-built binaries and experience a hard crash, the problem is likely to be in the incompatibilities between the platform on which the binary was built and yours; please try compiling the sources and report the problem if it persists\&. .RE .PP When submitting a bug report, please specify the following information: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ .sp -1 .IP " 1." 4.2 .\} What is your platform (\fBuname \-a\fR on a \m[blue]\fB\fBUNIX\fR\fR\m[]\&\s-2\u[42]\d\s+2 system)? Compiler version? \m[blue]\fBGNU\fR\m[]\&\s-2\u[8]\d\s+2 \m[blue]\fBlibc\fR\m[]\&\s-2\u[58]\d\s+2 version (on \m[blue]\fBGNU\fR\m[]\&\s-2\u[8]\d\s+2/\m[blue]\fB\fILinux\fR\fR\m[]\&\s-2\u[59]\d\s+2)? .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ .sp -1 .IP " 2." 4.2 .\} Where did you get the sources or binaries? When? (Absolute dates, e\&.g\&., \(lq2006\-01\-17\(rq, are preferred over the relative ones, e\&.g\&., \(lq2 days ago\(rq)\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 3.\h'+01'\c .\} .el \{\ .sp -1 .IP " 3." 4.2 .\} How did you build \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2? (What command, options &c\&.) .RE .sp .RS 4 .ie n \{\ \h'-04' 4.\h'+01'\c .\} .el \{\ .sp -1 .IP " 4." 4.2 .\} What is the output of \fBclisp \-\-version\fR? .RE .sp .RS 4 .ie n \{\ \h'-04' 5.\h'+01'\c .\} .el \{\ .sp -1 .IP " 5." 4.2 .\} Please supply the full output (copy and paste) of all the error messages, as well as detailed instructions on how to reproduce them\&. .RE .SH "PROJECTS" .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Enhance the compiler so that it can inline local functions\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Embed \m[blue]\fB\fBCLISP\fR\fR\m[]\&\s-2\u[6]\d\s+2 in \m[blue]\fBVIM\fR\m[]\&\s-2\u[60]\d\s+2\&. .RE .SH "AUTHORS" .PP \fBBruno Haible\fR <\&\m[blue]\fB\%http://www.haible.de/bruno/\fR\m[]\&> .RS 4 The original author and long\-time maintainer\&. .RE .PP \fBMichael Stoll\fR <\&\m[blue]\fB\%http://www.faculty.iu-bremen.de/mstoll/\fR\m[]\&> .RS 4 The original author\&. .RE .PP \fBSam Steingold\fR <\&\m[blue]\fB\%http://sds.podval.org/\fR\m[]\&> .RS 4 Co\-maintainer since 1998\&. .RE .PP \fBOthers\fR .RS 4 See \fICOPYRIGHT (file in the CLISP sources) \fR for the list of other contributors and the license\&. .RE .SH "COPYRIGHT" .br Copyright \(co 1992-2010 Bruno Haible .br Copyright \(co 1998-2010 Sam Steingold .br .SH "NOTES" .IP " 1." 4 \fBCommon Lisp\fR .RS 4 \%http://www.lisp.org .RE .IP " 2." 4 read-eval-print loop .RS 4 \%[set $man.base.url.for.relative.links]/sec_25-1-1 .RE .IP " 3." 4 \fBREAD\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_readcm_re_g-whitespace.html .RE .IP " 4." 4 \fBEVAL\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_eval.html .RE .IP " 5." 4 \fBPRINT\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_writecm_p_rintcm_princ.html .RE .IP " 6." 4 \fBCLISP\fR .RS 4 \%http://clisp.cons.org .RE .IP " 7." 4 \fBLISP-IMPLEMENTATION-VERSION\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_lisp-impl_tion-version.html .RE .IP " 8." 4 GNU .RS 4 \%http://www.gnu.org .RE .IP " 9." 4 GPL .RS 4 \%http://www.gnu.org/copyleft/gpl.html .RE .IP "10." 4 SYMBOL-MACRO .RS 4 \%[set $man.base.url.for.relative.links]/mac_define-symbol-macro .RE .IP "11." 4 \fBgzip\fR .RS 4 \%http://www.gzip.org/ .RE .IP "12." 4 environment variable .RS 4 \%[set $man.base.url.for.relative.links]/basedefs/xbd_chap08.html .RE .IP "13." 4 \fI*LOAD-VERBOSE*\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/var_stload-pr_ad-verbosest.html .RE .IP "14." 4 \fI*COMPILE-VERBOSE*\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/var_stcompile_le-verbosest.html .RE .IP "15." 4 \fBT\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/convar_t.html .RE .IP "16." 4 \fBNIL\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/convar_nil.html .RE .IP "17." 4 continuable .RS 4 \%[set $man.base.url.for.relative.links]/clhs/glo .RE .IP "18." 4 ERROR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/contyp_error.html .RE .IP "19." 4 WARNING .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/contyp_warning.html .RE .IP "20." 4 \fBINVOKE-DEBUGGER\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_invoke-debugger.html .RE .IP "21." 4 \fBABORT\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_abortcm_c_cm_use-value.html .RE .IP "22." 4 \fBSIGNAL\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_signal.html .RE .IP "23." 4 Emacs .RS 4 \%http://www.gnu.org/software/emacs/ .RE .IP "24." 4 SLIME .RS 4 \%http://common-lisp.net/project/slime/ .RE .IP "25." 4 ILISP .RS 4 \%http://sourceforge.net/projects/ilisp/ .RE .IP "26." 4 readline .RS 4 \%http://tiswww.case.edu/php/chet/readline/readline.html .RE .IP "27." 4 \fIASCII\fR .RS 4 \%http://en.wikipedia.org/wiki/ASCII .RE .IP "28." 4 \fI*PACKAGE*\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/var_stpackagest.html .RE .IP "29." 4 \fI*PRINT-CASE*\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/var_stprint-casest.html .RE .IP "30." 4 \(lqCOMMON-LISP-USER\(rq .RS 4 \%[set $man.base.url.for.relative.links]/sec_11-1-2-2 .RE .IP "31." 4 \fBLOAD\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_load.html .RE .IP "32." 4 \fBCOMPILE\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_compile.html .RE .IP "33." 4 \(lqrun control\(rq (RC) .RS 4 \%http://www.faqs.org/docs/artu/ch10s03.html .RE .IP "34." 4 \fBUSER-HOMEDIR-PATHNAME\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_user-homedir-pathname.html .RE .IP "35." 4 \fBDISASSEMBLE\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_disassemble.html .RE .IP "36." 4 \fI*STANDARD-OUTPUT*\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/var_stdebug-i_ace-outputst.html .RE .IP "37." 4 LIST .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/syscla_list.html .RE .IP "38." 4 ANSI .RS 4 \%http://www.ansi.org/ .RE .IP "39." 4 The American National Standards Institute .IP "40." 4 Information Technology - Programming Language - Common Lisp .RS 4 \%http://webstore.ansi.org/RecordDetail.aspx?sku=ANSI+INCITS+226-1994+(R1999) .RE .IP "41." 4 SYMBOL .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/syscla_symbol.html .RE .IP "42." 4 \fBUNIX\fR .RS 4 \%http://www.unix.org/online.html .RE .IP "43." 4 \fIWin32\fR .RS 4 \%http://winehq.org/ .RE .IP "44." 4 #' .RS 4 \%[set $man.base.url.for.relative.links]/sec_2-4-8-2 .RE .IP "45." 4 #P .RS 4 \%[set $man.base.url.for.relative.links]/sec_2-4-8-14 .RE .IP "46." 4 bash .RS 4 \%http://www.gnu.org/software/bash/ .RE .IP "47." 4 John Foderaro .RS 4 \%http://www.franz.com/~jkf/ .RE .IP "48." 4 \fBDEFVAR\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/mac_defparametercm_defvar.html .RE .IP "49." 4 \fBDEFUN\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/mac_defun.html .RE .IP "50." 4 \fBDEFMACRO\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/mac_defmacro.html .RE .IP "51." 4 \fBCOMPILE-FILE\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_compile-file.html .RE .IP "52." 4 \fBC\fR .RS 4 \%http://c-faq.com/ .RE .IP "53." 4 \fBSHORT-SITE-NAME\fR .RS 4 \%http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_short-sit_ng-site-name.html .RE .IP "54." 4 \fBCMU CL\fR .RS 4 \%http://www.cons.org/cmucl/ .RE .IP "55." 4 XEmacs .RS 4 \%http://www.xemacs.org .RE .IP "56." 4 SourceForge bug tracker .RS 4 \%http://sourceforge.net/tracker/?func=add&group_id=1355&atid=101355 .RE .IP "57." 4 \fBgdb\fR .RS 4 \%http://sources.redhat.com/gdb/ .RE .IP "58." 4 libc .RS 4 \%http://www.gnu.org/software/libc/ .RE .IP "59." 4 \fILinux\fR .RS 4 \%http://www.linux.org/ .RE .IP "60." 4 VIM .RS 4 \%http://www.vim.org .RE clisp-2.49/doc/_clisp.html000066400000000000000000002141351142424315300154730ustar00rootroot00000000000000 clisp

Name

clisp — ANSI Common Lisp compiler, interpreter and debugger.

Description

Invokes the Common Lisp interpreter and compiler.

Interactive Mode

When called without arguments, executes the read-eval-print loop, in which expressions are in turn

  • READ from the standard input,
  • EVALuated by the lisp interpreter,
  • and their results are PRINTed to the standard output.

Non-Interactive (Batch) Mode

Invoked with -c, compiles the specified lisp files to a platform-independent bytecode which can be executed more efficiently.

Invoked with -x, executes the specified lisp expressions.

Invoked with lisp-file, runs the specified lisp file.

Options

-h
--help
Displays a help message on how to invoke CLISP.
--version
Displays the CLISP version number, as given by the function LISP-IMPLEMENTATION-VERSION, the value of the variable *FEATURES*, as well some other information.
--license
Displays a summary of the licensing information, the GNU GPL.
-help-image
Displays information about the memory image being invoked: whether is it suitable for scripting as well as the :DOCUMENTATION supplied to EXT:SAVEINITMEM.
-B lisp-lib-dir
Specifies the installation directory. This is the directory containing the linking sets and other data files. This option is normally not necessary, because the installation directory is already built-in into the clisp executable. Directory lisp-lib-dir can be changed dynamically using the SYMBOL-MACRO CUSTOM:*LIB-DIRECTORY*.
-b
Print the installation directory and exit immediately. The namestring of CUSTOM:*LIB-DIRECTORY* is printed without any quotes. This is mostly useful in module Makefiles, see, e.g., modules/syscalls/Makefile.in.
-K linking-set

Specifies the linking set to be run. This is a directory (relative to the lisp-lib-dir) containing at least a main executable (runtime) and an initial memory image. Possible values are

base

the core CLISP

full

core plus all the modules with which this installation was built, see Section 32.2, “External Modules”.

The default is base.

-M mem-file
Specifies the initial memory image. This must be a memory dump produced by the EXT:SAVEINITMEM function by this clisp runtime. #ifdef UNIX It may have been compressed using GNU gzip. #endif
-m memory-size

Sets the amount of memory CLISP tries to grab on startup. The amount may be given as

n
nB
measured in bytes
n
nW
measured in machine words (4×n on 32-bit platforms, 8×n on 64-bit platforms)
nK
nKB
measured in kilobytes
nKW
measured in kilowords
nM
nMB
measured in megabytes
nMW
measured in megawords

The default is 3 megabytes. #if (oint_addr_len+addr_shift==24) The argument is constrained between 100 KB and 16 MB. #elif (oint_addr_len+addr_shift==26) The argument is constrained between 100 KB and 64 MB. #elif (oint_addr_len+addr_shift==28) The argument is constrained between 100 KB and 256 MB. #else The argument is constrained above 100 KB. #endif

This version of CLISP #if defined(SPVW_MIXED) && defined(SPVW_BLOCKS) #ifdef GENERATIONAL_GC is not likely to actually use the entire memory-size since garbage-collection will periodically reduce the amount of used memory. It is therefore common to specify 10 MB even if only 2 MB are going to be used. #else eventually uses the entire memory-size. #endif #else allocates memory dynamically. memory-size is essentially ignored (except that it determines the Lisp STACK size). #endif

-L language

Specifies the language CLISP uses to communicate with the user. This may be #ifndef GNU_GETTEXT only english. #else one of english, german, french, spanish, dutch, russian, danish. Other languages may be specified through the environment variable LANG, provided the corresponding message catalog is installed. #endif The language may be changed dynamically using the SYMBOL-MACRO CUSTOM:*CURRENT-LANGUAGE*.

-N locale-dir
Specifies the base directory of locale files. CLISP will search its message catalogs in locale-dir/language/LC_MESSAGES/clisp.mo. This directory may be changed dynamically using the SYMBOL-MACRO CUSTOM:*CURRENT-LANGUAGE*.
-Edomain encoding

Specifies the encoding used for the given domain, overriding the default which depends on the environment variables LC_ALL, LC_CTYPE, LANG. domain can be

file

affecting CUSTOM:*DEFAULT-FILE-ENCODING*

pathname

affecting CUSTOM:*PATHNAME-ENCODING*

terminal

affecting CUSTOM:*TERMINAL-ENCODING*

foreign

affecting CUSTOM:*FOREIGN-ENCODING*

misc

affecting CUSTOM:*MISC-ENCODING*

blank

affecting all of the above.

Warning

Note that the values of these SYMBOL-MACROs that have been saved in a memory image are ignored: these SYMBOL-MACROs are reset based on the OS environment after the memory image is loaded. You have to use the RC file, CUSTOM:*INIT-HOOKS* or init function to set them on startup, but it is best to set the aforementioned environment variables appropriately for consistency with other programs. See Section 31.1, “Customizing CLISP Process Initialization and Termination”.

-q
--quiet
--silent
-v
--verbose
Change verbosity level: by default, CLISP displays a banner at startup and a good-bye message when quitting, and initializes *LOAD-VERBOSE* and *COMPILE-VERBOSE* to T, and *LOAD-PRINT* and *COMPILE-PRINT* to NIL, as per [ANSI CL standard]. The first -q removes the banner and the good-bye message, the second sets variables *LOAD-VERBOSE*, *COMPILE-VERBOSE* and CUSTOM:*SAVEINITMEM-VERBOSE* to NIL. The first -v sets variables CUSTOM:*REPORT-ERROR-PRINT-BACKTRACE*, *LOAD-PRINT* and *COMPILE-PRINT* to T, the second sets CUSTOM:*LOAD-ECHO* to T. These settings affect the output produced by -i and -c options. Note that these settings persist into the read-eval-print loop. Repeated -q and -v cancel each other, e.g., -q -q -v -v -v is equivalent to -v.
-on-error action

Establish global error handlers, depending on action:

appease
continuable ERRORs are turned into WARNINGs (with EXT:APPEASE-CERRORS) other ERRORs are handled in the default way
debug
ERRORs INVOKE-DEBUGGER (the normal read-eval-print loop behavior), disables batch mode imposed by -c, -x, and lisp-file,
abort
continuable ERRORs are appeased, other ERRORs are ABORTed with EXT:ABORT-ON-ERROR
exit
continuable ERRORs are appeased, other ERRORs terminate CLISP with EXT:EXIT-ON-ERROR (the normal batch mode behavior).

See also EXT:SET-GLOBAL-HANDLER.

-repl

Start an interactive read-eval-print loop after processing the -c, -x, and lisp-file options and on any ERROR SIGNALed during that processing.

Disables batch mode.

-w
Wait for a keypress after program termination.
-I

Interact better with Emacs (useful when running CLISP under Emacs using SLIME, ILISP et al). With this option, CLISP interacts in a way that Emacs can deal with:

  • unnecessary prompts are not suppressed.
  • #ifdef GNU_READLINE
  • The GNU readline library treats TAB (see TAB key) as a normal self-inserting character (see Q: A.4.6).
  • #endif
-disable-readline
Do not use GNU readline even when it has been linked against. This can be used if one wants to paste non-ASCII characters, or when GNU readline misbehaves due to installation (different versions on the build and install machines) or setup (bad TERM environment variable value) issues.
-ansi
Comply with the [ANSI CL standard] specification even where CLISP has been traditionally different by setting the SYMBOL-MACRO CUSTOM:*ANSI* to T.
-traditional
Traditional: reverses the residual effects of -ansi in the saved memory image.
-modern
Provides a modern view of symbols: at startup the *PACKAGE* variable will be set to the CS-COMMON-LISP-USER package, and the *PRINT-CASE* will be set to :DOWNCASE. This has the effect that symbol lookup is case-sensitive (except for keywords and old-style packages) and that keywords and uninterned symbols are printed with lower-case preferrence. See Section 11.5, “Package Case-Sensitivity”.
-p package
At startup the value of the variable *PACKAGE* will be set to the package named package. The default is the value of *PACKAGE* when the image was saved, normally COMMON-LISP-USER.
-C
Compile when loading: at startup the value of the variable CUSTOM:*LOAD-COMPILING* will be set to T. Code being LOADed will then be COMPILEd on the fly. This results in slower loading, but faster execution.
-norc
Normally CLISP loads the user run control (RC) file on startup (this happens after the -C option is processed). The file loaded is .clisprc.lisp or .clisprc.fas in the home directory USER-HOMEDIR-PATHNAME, whichever is newer. This option, -norc, prevents loading of the RC file.
-lp directory
Specifies directories to be added to CUSTOM:*LOAD-PATHS* at startup. This is done after loading the RC file (so that it does not override the command-line option) but before loading the init-files specified by the -i options (so that the init-files will be searched for in the specified directories). Several -lp options can be given; all the specified directories will be added.
-i init-file
Specifies initialization files to be LOADed at startup. These should be lisp files (source or compiled). Several -i options can be given; all the specified files will be loaded in order.
-c lisp-file

Compiles the specified lisp-files to bytecode (*.fas). The compiled files can then be LOADed instead of the sources to gain efficiency.

Imposes batch mode.

-o outputfile
Specifies the output file or directory for the compilation of the last specified lisp-file.
-l
Produce a bytecode DISASSEMBLE listing (*.lis) of the files being compiled. Useful only for debugging. See Section 24.1, “Function COMPILE-FILE for details.
-x expressions

Executes a series of arbitrary expressions instead of a read-eval-print loop. The values of the expressions will be output to *STANDARD-OUTPUT*. Due to the argument processing done by the shell, the expressions must be enclosed in double quotes, and double quotes and backslashes must be escaped with backslashes.

Imposes batch mode.

lisp-file [ argument ... ]

Loads and executes a lisp-file, as described in Section 32.6.2, “Scripting with CLISP. There will be no read-eval-print loop. Before lisp-file is loaded, the variable EXT:*ARGS* will be bound to a list of strings, representing the arguments. #ifdef UNIX The first line of lisp-file may start with #!, thus permitting CLISP to be used as a script interpreter. #endif If lisp-file is -, the *STANDARD-INPUT* is used instead of a file.

This option is disabled if the memory image was created by EXT:SAVEINITMEM with NIL :SCRIPT argument. In that case the LIST EXT:*ARGS* starts with lisp-file.

This option must be the last one.

No RC file will be executed.

Imposes batch mode.

As usual, -- stops option processing and places all remaining command line arguments into EXT:*ARGS*.

Language Reference

The language implemented is ANSI Common Lisp. The implementation mostly conforms to the ANSI Common Lisp standard, see Section 31.10, “Maximum ANSI CL compliance”.

[ANSI CL] ANSI CL standard1994. ANSI INCITS 226-1994 (R1999) Information Technology - Programming Language - Common Lisp [formerly ANSI X3.226-1994 (R1999)].

Command Line User Environment

help
get context-sensitive on-line help, see Chapter 25, Environment .
(APROPOS name)
list the SYMBOLs matching name.
(DESCRIBE symbol)
describe the symbol.
(exit)
(quit)
(bye)
quit CLISP.
EOF #if defined(UNIX) (Control+D on UNIX) #endif #if defined(WIN32_NATIVE) (Control+Z on Win32) #endif
leave the current level of the read-eval-print loop (see also Section 1.1, “Special Symbols ”).
#ifdef GNU_READLINE
arrow keys
for editing and viewing the input history, using the GNU readline library.
TAB key

Context sensitive:

  • If you are in the function position (in the first symbol after an opening paren or in the first symbol after a #'), the completion is limited to the symbols that name functions.
  • If you are in the "filename position" (inside a string after #P), the completion is done across file names, GNU bash-style.
  • If you have not typed anything yet, you will get a help message, as if by the help command.
  • If you have not started typing the next symbol (i.e., you are at a whitespace), the current function or macro is DESCRIBEd.
  • Otherwise, the symbol you are currently typing is completed.

#endif

Using and Extending CLISP

Common Lisp is a programmable programming language.

When CLISP is invoked, the runtime loads the initial memory image and outputs the prompt; at which one can start typing DEFVARs, DEFUNs and DEFMACROs.

To avoid having to re-enter the same definitions by hand in every session, one can create a lisp file with all the variables, functions, macros, etc.; (optionally) compile it with COMPILE-FILE; and LOAD it either by hand or from the RC file; or save a memory image to avoid the LOAD overhead.

However, sometimes one needs to use some functionality implemented in another language, e.g., call a C library function. For that one uses the Foreign Function Interface and/or the External Modules facility. Finally, the truly adventurous ones might delve into Extending the Core.

Files

clisp
clisp.exe
startup driver (an executable or, rarely, a shell script) which remembers the location of the runtime and starts it with the appropriate arguments
lisp.run
lisp.exe
main executable (runtime) - the part of CLISP implemented in C.
lispinit.mem
initial memory image (the part of CLISP implemented in lisp)
config.lisp
site-dependent configuration (should have been customized before CLISP was built); see Section 31.12, “Customizing CLISP behavior”
*.lisp
lisp source
*.fas
lisp code, compiled by CLISP
*.lib
lisp source library information, generated by COMPILE-FILE, see Section 24.3, “Function REQUIRE.
*.c
C code, compiled from lisp source by CLISP (see Section 32.3, “The Foreign Function Call Facility”)

For the CLISP source files, see Chapter 34, The source files of CLISP.

#ifdef HAVE_ENVIRONMENT

Environment

All environment variables that CLISP uses are read at most once.

CLISP_LANGUAGE
specifies the language CLISP uses to communicate with the user. The legal values are identical to those of the -L option which can be used to override this environment variable.
#ifdef ENABLE_UNICODE
LC_CTYPE
specifies the locale which determines the character set in use. The value can be of the form language or language_country or language_country.charset, where language is a two-letter ISO 639 language code (lower case), country is a two-letter ISO 3166 country code (upper case). charset is an optional character set specification, and needs normally not be given because the character set can be inferred from the language and country. This environment variable can be overridden with the -Edomain encoding option.
#endif
LANG
specifies the language CLISP uses to communicate with the user, unless it is already specified through the environment variable CLISP_LANGUAGE or the -L option. #ifdef ENABLE_UNICODE It also specifies the locale determining the character set in use, unless already specified through the environment variable LC_CTYPE. #endif The value may begin with a two-letter ISO 639 language code, for example en, de, fr.
#ifdef UNIX
HOME
USER
used for determining the value of the function USER-HOMEDIR-PATHNAME.
#endif
SHELL
COMSPEC
is used to find the interactive command interpreter called by EXT:SHELL.
#ifdef UNIX
TERM
determines the screen size recognized by the pretty printer.
#endif
ORGANIZATION
for SHORT-SITE-NAME and LONG-SITE-NAME in config.lisp.
CLHSROOT
for CUSTOM:CLHS-ROOT in config.lisp.
IMPNOTES
for CUSTOM:IMPNOTES-ROOT in config.lisp.
EDITOR
for editor-name in config.lisp.
LOGICAL_HOST_host_FROM
LOGICAL_HOST_host_TO
LOGICAL_HOST_host
for CUSTOM:*LOAD-LOGICAL-PATHNAME-TRANSLATIONS-DATABASE*
#endif

See also

CLISP impnotes
clisp-link(1)
CMU CL - cmucl(1)
Emacs - emacs(1)
XEmacs - xemacs(1)

Bugs

When you encounter a bug in CLISP or in its documentation (this manual page or CLISP impnotes), please report it to the CLISP SourceForge bug tracker.

Before submitting a bug report, please take the following basic steps to make the report more useful:

  1. Please do a clean build (remove your build directory and build CLISP with ./configure --cbc build or at least do a make distclean before make).
  2. If you are reporting a hard crash (segmentation fault, bus error, core dump etc), please do ./configure --with-debug --cbc build-g ; cd build-g; gdb lisp.run, then load the appropriate linking set by either base or full gdb command, and report the backtrace (see also Q: A.1.1.10).
  3. If you are using pre-built binaries and experience a hard crash, the problem is likely to be in the incompatibilities between the platform on which the binary was built and yours; please try compiling the sources and report the problem if it persists.

When submitting a bug report, please specify the following information:

  1. What is your platform (uname -a on a UNIX system)? Compiler version? GNU libc version (on GNU/Linux)?
  2. Where did you get the sources or binaries? When? (Absolute dates, e.g., 2006-01-17, are preferred over the relative ones, e.g., 2 days ago).
  3. How did you build CLISP? (What command, options &c.)
  4. What is the output of clisp --version?
  5. Please supply the full output (copy and paste) of all the error messages, as well as detailed instructions on how to reproduce them.

Projects

  • Enhance the compiler so that it can inline local functions.
  • Embed CLISP in VIM.

CLISP version 2.49Platform: @PLATFORM@Last modified: 2010-07-07


clisp-2.49/doc/chunk.xsl000066400000000000000000000006661142424315300151760ustar00rootroot00000000000000 clisp-2.49/doc/cl-ent.xml000066400000000000000000000462221142424315300152400ustar00rootroot00000000000000 Common Lisp'> CLOS'> CLCS'> CLX'> ILUInter-Language Unification'> ANSIThe American National Standards Institute'> ANSI CL standard'> ANSI CLANSI CL standard 1994 ANSI INCITS 226-1994 (R1999) <ulink url="http://webstore.ansi.org/RecordDetail.aspx?sku=ANSI+INCITS+226-1994+(R1999)">Information Technology - Programming Language - Common Lisp</ulink> [formerly ANSI X3.226-1994 (R1999)] '> Common Lisp HyperSpec'> CLHSCommon Lisp HyperSpec <ulink url="&clhs;/FrontMatter/">Common Lisp HyperSpec</ulink> '> '> CLtL1 Guy L. Steele Jr. Common Lisp: the Language (1st Edition) 1984 465 pages 0-932376-41-X Digital Press '> '> CLtL2 Guy L. Steele Jr. <ulink url="http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/cltl2.html">Common Lisp: the Language (2nd Edition)</ulink> 1990 1032 pages 1-555-58041-6 Digital Press '> AMOP'> AMOP GregorKiczales Jimdes Rivieres Daniel G.Bobrow <ulink url="&mop-home;">The Art of the Metaobject Protocol</ulink> 1991 335 pages 0-262-61074-4 MIT Press '> PG-ANSI-CL PaulGraham <ulink url="http://paulgraham.com/acl.html">ANSI Common Lisp</ulink> Prentice Hall1995 432 pages0-133-70875-6'> PG-On-Lisp PaulGraham <ulink url="http://paulgraham.com/onlisp.html">On Lisp</ulink> Prentice Hall1993 413 pages0-130-30552-9'> STREAM-DEFINITION-BY-USER:GENERIC-FUNCTIONS'> Free Software Foundation (FSF)'> Electronic Frontier Foundation'> GNU'> SourceForge'> gettext'> libc'> libiconv'> libsigsegv'> libffcall'> readline'> lightning'> DataBase Manager'> Portability Library'> autoconf'> configure'> bash'> CVS'> asdf'> defsystem'> GPL'> LGPL'> FDL'> ABCL'> CormanLisp'> CLISP'> CMU CL'> GCL'> OpenMCL'> SBCL'> Allegro CL'> LispWorks'> Emacs'> XEmacs'> ILISP'> SLIME'> Portable Hemlock'> VIM'> Acorn'> Amiga'> ASCII'> Atari'> BeOS'> *BSD'> Cygwin'> DOS'> Gnome'> Hurd'> KDE'> Linux'> Mac OS X'> MinGW'> NeXTstep'> OS/2'> UNICODE'> Unicode 3.2'> Win32'> LFS'> POSIX'> HTTP'> IP'> ICMP'> TCP'> UDP'> ARP'> Netiquette'> gcc'> gdb'> Apache'> gzip'> C'> cpp'> Java'> Perl'> Python'> IEEE 754'> DocBook'> HTML'> XML'> MIME'> GTK+'> Glade'> lambda expression'> read-eval-print loop'> iteration form'> association list'> property list'> type equivalent'> SYMBOL-MACRO'> end-of-stream'> input'> output'> bidirectional'> fresh'> consing[3]'> recognizable subtype'> place'> printer escaping'> multiple values'> primary value'> continuable &error-t;'> function name'> externalizable object'> specialized lambda list'> compilation unit'> declaration specifier'> type specifier'> proper list'> proper name'> execution time'> compile time'> top-level form'> decoded time'> universal time'> internal time'> seconds'> time zone'> feature exression'> graphic'> printing'> environment'> global environment'> dynamic environment'> lexical environment'> environment'> variable'> lexical variable'> dynamic variable'> constant variable'> COMMON-LISP'> COMMON-LISP-USER'> KEYWORD'> whitespace'> #\'> #''> #.'> #C'> #rankA'> #S'> #P'> #n='> #n#'> #+'> #-'> #<'> ~A'> ~&'> ~B'> ~:@C'> ~D'> ~$'> ~E'> ~F'> ~G'> ~O'> ~%'> ~R'> ~:R'> ~S'> ~/'> ~T'> ~W'> ~X'> %clhs-entities; clisp-2.49/doc/clhs-ent.xml000066400000000000000000004716731142424315300156070ustar00rootroot00000000000000 &ALLOW-OTHER-KEYS'> &AUX'> &BODY'> &ENVIRONMENT'> &KEY'> &OPTIONAL'> &REST'> &WHOLE'> *'> *'> *'> **'> ***'> *BREAK-ON-SIGNALS*'> *COMPILE-FILE-PATHNAME*'> *COMPILE-FILE-TRUENAME*'> *COMPILE-PRINT*'> *COMPILE-VERBOSE*'> *DEBUG-IO*'> *DEBUGGER-HOOK*'> *DEFAULT-PATHNAME-DEFAULTS*'> *ERROR-OUTPUT*'> *FEATURES*'> *GENSYM-COUNTER*'> *LOAD-PATHNAME*'> *LOAD-PRINT*'> *LOAD-TRUENAME*'> *LOAD-VERBOSE*'> *MACROEXPAND-HOOK*'> *MODULES*'> *PACKAGE*'> *PRINT-ARRAY*'> *PRINT-BASE*'> *PRINT-CASE*'> *PRINT-CIRCLE*'> *PRINT-ESCAPE*'> *PRINT-GENSYM*'> *PRINT-LENGTH*'> *PRINT-LEVEL*'> *PRINT-LINES*'> *PRINT-MISER-WIDTH*'> *PRINT-PPRINT-DISPATCH*'> *PRINT-PRETTY*'> *PRINT-RADIX*'> *PRINT-READABLY*'> *PRINT-RIGHT-MARGIN*'> *QUERY-IO*'> *RANDOM-STATE*'> *READ-BASE*'> *READ-DEFAULT-FLOAT-FORMAT*'> *READ-EVAL*'> *READ-SUPPRESS*'> *READTABLE*'> *STANDARD-INPUT*'> *STANDARD-OUTPUT*'> *TERMINAL-IO*'> *TRACE-OUTPUT*'> +'> +'> +'> ++'> +++'> -'> -'> -'> /'> /'> /'> //'> ///'> /='> 1+'> 1-'> <'> <='> ='> >'> >='> ABORT'> ABORT'> ABORT'> ABS'> ACONS'> ACOS'> ACOSH'> ADD-METHOD'> ADJOIN'> ADJUST-ARRAY'> ADJUSTABLE-ARRAY-P'> ALLOCATE-INSTANCE'> ALPHA-CHAR-P'> ALPHANUMERICP'> AND'> AND'> AND'> APPEND'> APPLY'> APROPOS'> APROPOS-LIST'> AREF'> ARITHMETIC-ERROR'> ARITHMETIC-ERROR-OPERANDS'> ARITHMETIC-ERROR-OPERATION'> ARRAY'> ARRAY-DIMENSION'> ARRAY-DIMENSION-LIMIT'> ARRAY-DIMENSIONS'> ARRAY-DISPLACEMENT'> ARRAY-ELEMENT-TYPE'> ARRAY-HAS-FILL-POINTER-P'> ARRAY-IN-BOUNDS-P'> ARRAY-RANK'> ARRAY-RANK-LIMIT'> ARRAY-ROW-MAJOR-INDEX'> ARRAY-TOTAL-SIZE'> ARRAY-TOTAL-SIZE-LIMIT'> ARRAYP'> ASH'> ASIN'> ASINH'> ASSERT'> ASSOC'> ASSOC-IF'> ASSOC-IF-NOT'> ATAN'> ATANH'> ATOM'> ATOM'> ATOM'> ATOM'> BASE-CHAR'> BASE-STRING'> BIGNUM'> BIT'> BIT'> BIT'> BIT'> BIT-AND'> BIT-ANDC1'> BIT-ANDC2'> BIT-EQV'> BIT-IOR'> BIT-NAND'> BIT-NOR'> BIT-NOT'> BIT-ORC1'> BIT-ORC2'> BIT-VECTOR'> BIT-VECTOR-P'> BIT-XOR'> BLOCK'> BOOLE'> BOOLE-1'> BOOLE-2'> BOOLE-AND'> BOOLE-ANDC1'> BOOLE-ANDC2'> BOOLE-C1'> BOOLE-C2'> BOOLE-CLR'> BOOLE-EQV'> BOOLE-IOR'> BOOLE-NAND'> BOOLE-NOR'> BOOLE-ORC1'> BOOLE-ORC2'> BOOLE-SET'> BOOLE-XOR'> BOOLEAN'> BOTH-CASE-P'> BOUNDP'> BREAK'> BROADCAST-STREAM'> BROADCAST-STREAM-STREAMS'> BUILT-IN-CLASS'> BUTLAST'> BYTE'> BYTE-POSITION'> BYTE-SIZE'> CAAAAR'> CAAADR'> CAAAR'> CAADAR'> CAADDR'> CAADR'> CAAR'> CADAAR'> CADADR'> CADAR'> CADDAR'> CADDDR'> CADDR'> CADR'> CALL-ARGUMENTS-LIMIT'> CALL-METHOD'> CALL-NEXT-METHOD'> CAR'> CASE'> CATCH'> CCASE'> CDAAAR'> CDAADR'> CDAAR'> CDADAR'> CDADDR'> CDADR'> CDAR'> CDDAAR'> CDDADR'> CDDAR'> CDDDAR'> CDDDDR'> CDDDR'> CDDR'> CDR'> CEILING'> CELL-ERROR'> CELL-ERROR-NAME'> CERROR'> CHANGE-CLASS'> CHAR'> CHAR-CODE'> CHAR-CODE-LIMIT'> CHAR-DOWNCASE'> CHAR-EQUAL'> CHAR-GREATERP'> CHAR-INT'> CHAR-LESSP'> CHAR-NAME'> CHAR-NOT-EQUAL'> CHAR-NOT-GREATERP'> CHAR-NOT-LESSP'> CHAR-UPCASE'> CHAR/='> CHAR<'> CHAR<='> CHAR='> CHAR>'> CHAR>='> CHARACTER'> CHARACTER'> CHARACTER'> CHARACTER'> CHARACTERP'> CHECK-TYPE'> CIS'> CLASS'> CLASS-NAME'> CLASS-OF'> CLEAR-INPUT'> CLEAR-OUTPUT'> CLOSE'> CLRHASH'> CODE-CHAR'> COERCE'> COMPILATION-SPEED'> COMPILE'> COMPILE-FILE'> COMPILE-FILE-PATHNAME'> COMPILED-FUNCTION'> COMPILED-FUNCTION-P'> COMPILER-MACRO'> COMPILER-MACRO-FUNCTION'> COMPLEMENT'> COMPLEX'> COMPLEX'> COMPLEX'> COMPLEX'> COMPLEXP'> COMPUTE-APPLICABLE-METHODS'> COMPUTE-RESTARTS'> CONCATENATE'> CONCATENATED-STREAM'> CONCATENATED-STREAM-STREAMS'> COND'> CONDITION'> CONJUGATE'> CONS'> CONS'> CONS'> CONS'> CONSP'> CONSTANTLY'> CONSTANTP'> CONTINUE'> CONTINUE'> CONTINUE'> CONTROL-ERROR'> COPY-ALIST'> COPY-LIST'> COPY-PPRINT-DISPATCH'> COPY-READTABLE'> COPY-SEQ'> COPY-STRUCTURE'> COPY-SYMBOL'> COPY-TREE'> COS'> COSH'> COUNT'> COUNT-IF'> COUNT-IF-NOT'> CTYPECASE'> DEBUG'> DECF'> DECLAIM'> DECLARATION'> DECLARE'> DECODE-FLOAT'> DECODE-UNIVERSAL-TIME'> DEFCLASS'> DEFCONSTANT'> DEFGENERIC'> DEFINE-COMPILER-MACRO'> DEFINE-CONDITION'> DEFINE-METHOD-COMBINATION'> DEFINE-MODIFY-MACRO'> DEFINE-SETF-EXPANDER'> DEFINE-SYMBOL-MACRO'> DEFMACRO'> DEFMETHOD'> DEFPACKAGE'> DEFPARAMETER'> DEFSETF'> DEFSTRUCT'> DEFTYPE'> DEFUN'> DEFVAR'> DELETE'> DELETE-DUPLICATES'> DELETE-FILE'> DELETE-IF'> DELETE-IF-NOT'> DELETE-PACKAGE'> DENOMINATOR'> DEPOSIT-FIELD'> DESCRIBE'> DESCRIBE-OBJECT'> DESTRUCTURING-BIND'> DIGIT-CHAR'> DIGIT-CHAR-P'> DIRECTORY'> DIRECTORY-NAMESTRING'> DISASSEMBLE'> DIVISION-BY-ZERO'> DO'> DO*'> DO-ALL-SYMBOLS'> DO-EXTERNAL-SYMBOLS'> DO-SYMBOLS'> DOCUMENTATION'> DOLIST'> DOTIMES'> DOUBLE-FLOAT'> DOUBLE-FLOAT-EPSILON'> DOUBLE-FLOAT-NEGATIVE-EPSILON'> DPB'> DRIBBLE'> DYNAMIC-EXTENT'> ECASE'> ECHO-STREAM'> ECHO-STREAM-INPUT-STREAM'> ECHO-STREAM-OUTPUT-STREAM'> ED'> EIGHTH'> ELT'> ENCODE-UNIVERSAL-TIME'> END-OF-FILE'> ENDP'> ENOUGH-NAMESTRING'> ENSURE-DIRECTORIES-EXIST'> ENSURE-GENERIC-FUNCTION'> EQ'> EQL'> EQL'> EQL'> EQUAL'> EQUALP'> ERROR'> ERROR'> ERROR'> ERROR'> ETYPECASE'> EVAL'> EVAL-WHEN'> EVENP'> EVERY'> EXP'> EXPORT'> EXPT'> EXTENDED-CHAR'> FBOUNDP'> FCEILING'> FDEFINITION'> FFLOOR'> FIFTH'> FILE-AUTHOR'> FILE-ERROR'> FILE-ERROR-PATHNAME'> FILE-LENGTH'> FILE-NAMESTRING'> FILE-POSITION'> FILE-STREAM'> FILE-STRING-LENGTH'> FILE-WRITE-DATE'> FILL'> FILL-POINTER'> FIND'> FIND-ALL-SYMBOLS'> FIND-CLASS'> FIND-IF'> FIND-IF-NOT'> FIND-METHOD'> FIND-PACKAGE'> FIND-RESTART'> FIND-SYMBOL'> FINISH-OUTPUT'> FIRST'> FIXNUM'> FLET'> FLOAT'> FLOAT'> FLOAT'> FLOAT'> FLOAT-DIGITS'> FLOAT-PRECISION'> FLOAT-RADIX'> FLOAT-SIGN'> FLOATING-POINT-INEXACT'> FLOATING-POINT-INVALID-OPERATION'> FLOATING-POINT-OVERFLOW'> FLOATING-POINT-UNDERFLOW'> FLOATP'> FLOOR'> FMAKUNBOUND'> FORCE-OUTPUT'> FORMAT'> FORMATTER'> FOURTH'> FRESH-LINE'> FROUND'> FTRUNCATE'> FTYPE'> FUNCALL'> FUNCTION'> FUNCTION'> FUNCTION'> FUNCTION'> FUNCTION'> FUNCTION-KEYWORDS'> FUNCTION-LAMBDA-EXPRESSION'> FUNCTIONP'> GCD'> GENERIC-FUNCTION'> GENSYM'> GENTEMP'> GET'> GET-DECODED-TIME'> GET-DISPATCH-MACRO-CHARACTER'> GET-INTERNAL-REAL-TIME'> GET-INTERNAL-RUN-TIME'> GET-MACRO-CHARACTER'> GET-OUTPUT-STREAM-STRING'> GET-PROPERTIES'> GET-SETF-EXPANSION'> GET-UNIVERSAL-TIME'> GETF'> GETHASH'> GO'> GRAPHIC-CHAR-P'> HANDLER-BIND'> HANDLER-CASE'> HASH-TABLE'> HASH-TABLE-COUNT'> HASH-TABLE-P'> HASH-TABLE-REHASH-SIZE'> HASH-TABLE-REHASH-THRESHOLD'> HASH-TABLE-SIZE'> HASH-TABLE-TEST'> HOST-NAMESTRING'> IDENTITY'> IF'> IGNORABLE'> IGNORE'> IGNORE-ERRORS'> IMAGPART'> IMPORT'> IN-PACKAGE'> INCF'> INITIALIZE-INSTANCE'> INLINE'> INPUT-STREAM-P'> INSPECT'> INTEGER'> INTEGER-DECODE-FLOAT'> INTEGER-LENGTH'> INTEGERP'> INTERACTIVE-STREAM-P'> INTERN'> INTERNAL-TIME-UNITS-PER-SECOND'> INTERSECTION'> INVALID-METHOD-ERROR'> INVOKE-DEBUGGER'> INVOKE-RESTART'> INVOKE-RESTART-INTERACTIVELY'> ISQRT'> KEYWORD'> KEYWORDP'> LABELS'> LAMBDA'> LAMBDA'> LAMBDA'> LAMBDA-LIST-KEYWORDS'> LAMBDA-PARAMETERS-LIMIT'> LAST'> LCM'> LDB'> LDB-TEST'> LDIFF'> LEAST-NEGATIVE-DOUBLE-FLOAT'> LEAST-NEGATIVE-LONG-FLOAT'> LEAST-NEGATIVE-NORMALIZED-DOUBLE-FLOAT'> LEAST-NEGATIVE-NORMALIZED-LONG-FLOAT'> LEAST-NEGATIVE-NORMALIZED-SHORT-FLOAT'> LEAST-NEGATIVE-NORMALIZED-SINGLE-FLOAT'> LEAST-NEGATIVE-SHORT-FLOAT'> LEAST-NEGATIVE-SINGLE-FLOAT'> LEAST-POSITIVE-DOUBLE-FLOAT'> LEAST-POSITIVE-LONG-FLOAT'> LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT'> LEAST-POSITIVE-NORMALIZED-LONG-FLOAT'> LEAST-POSITIVE-NORMALIZED-SHORT-FLOAT'> LEAST-POSITIVE-NORMALIZED-SINGLE-FLOAT'> LEAST-POSITIVE-SHORT-FLOAT'> LEAST-POSITIVE-SINGLE-FLOAT'> LENGTH'> LET'> LET*'> LISP-IMPLEMENTATION-TYPE'> LISP-IMPLEMENTATION-VERSION'> LIST'> LIST'> LIST'> LIST'> LIST*'> LIST-ALL-PACKAGES'> LIST-LENGTH'> LISTEN'> LISTP'> LOAD'> LOAD-LOGICAL-PATHNAME-TRANSLATIONS'> LOAD-TIME-VALUE'> LOCALLY'> LOG'> LOGAND'> LOGANDC1'> LOGANDC2'> LOGBITP'> LOGCOUNT'> LOGEQV'> LOGICAL-PATHNAME'> LOGICAL-PATHNAME'> LOGICAL-PATHNAME'> LOGICAL-PATHNAME-TRANSLATIONS'> LOGIOR'> LOGNAND'> LOGNOR'> LOGNOT'> LOGORC1'> LOGORC2'> LOGTEST'> LOGXOR'> LONG-FLOAT'> LONG-FLOAT-EPSILON'> LONG-FLOAT-NEGATIVE-EPSILON'> LONG-SITE-NAME'> LOOP'> LOOP-FINISH'> LOWER-CASE-P'> MACHINE-INSTANCE'> MACHINE-TYPE'> MACHINE-VERSION'> MACRO-FUNCTION'> MACROEXPAND'> MACROEXPAND-1'> MACROLET'> MAKE-ARRAY'> MAKE-BROADCAST-STREAM'> MAKE-CONCATENATED-STREAM'> MAKE-CONDITION'> MAKE-DISPATCH-MACRO-CHARACTER'> MAKE-ECHO-STREAM'> MAKE-HASH-TABLE'> MAKE-INSTANCE'> MAKE-INSTANCES-OBSOLETE'> MAKE-LIST'> MAKE-LOAD-FORM'> MAKE-LOAD-FORM-SAVING-SLOTS'> MAKE-METHOD'> MAKE-PACKAGE'> MAKE-PATHNAME'> MAKE-RANDOM-STATE'> MAKE-SEQUENCE'> MAKE-STRING'> MAKE-STRING-INPUT-STREAM'> MAKE-STRING-OUTPUT-STREAM'> MAKE-SYMBOL'> MAKE-SYNONYM-STREAM'> MAKE-TWO-WAY-STREAM'> MAKUNBOUND'> MAP'> MAP-INTO'> MAPC'> MAPCAN'> MAPCAR'> MAPCON'> MAPHASH'> MAPL'> MAPLIST'> MASK-FIELD'> MAX'> MEMBER'> MEMBER'> MEMBER'> MEMBER-IF'> MEMBER-IF-NOT'> MERGE'> MERGE-PATHNAMES'> METHOD'> METHOD-COMBINATION'> METHOD-COMBINATION'> METHOD-COMBINATION'> METHOD-COMBINATION-ERROR'> METHOD-QUALIFIERS'> MIN'> MINUSP'> MISMATCH'> MOD'> MOD'> MOD'> MOST-NEGATIVE-DOUBLE-FLOAT'> MOST-NEGATIVE-FIXNUM'> MOST-NEGATIVE-LONG-FLOAT'> MOST-NEGATIVE-SHORT-FLOAT'> MOST-NEGATIVE-SINGLE-FLOAT'> MOST-POSITIVE-DOUBLE-FLOAT'> MOST-POSITIVE-FIXNUM'> MOST-POSITIVE-LONG-FLOAT'> MOST-POSITIVE-SHORT-FLOAT'> MOST-POSITIVE-SINGLE-FLOAT'> MUFFLE-WARNING'> MUFFLE-WARNING'> MUFFLE-WARNING'> MULTIPLE-VALUE-BIND'> MULTIPLE-VALUE-CALL'> MULTIPLE-VALUE-LIST'> MULTIPLE-VALUE-PROG1'> MULTIPLE-VALUE-SETQ'> MULTIPLE-VALUES-LIMIT'> NAME-CHAR'> NAMESTRING'> NBUTLAST'> NCONC'> NEXT-METHOD-P'> NIL'> NIL'> NIL'> NIL'> NINTERSECTION'> NINTH'> NO-APPLICABLE-METHOD'> NO-NEXT-METHOD'> NOT'> NOT'> NOT'> NOTANY'> NOTEVERY'> NOTINLINE'> NRECONC'> NREVERSE'> NSET-DIFFERENCE'> NSET-EXCLUSIVE-OR'> NSTRING-CAPITALIZE'> NSTRING-DOWNCASE'> NSTRING-UPCASE'> NSUBLIS'> NSUBST'> NSUBST-IF'> NSUBST-IF-NOT'> NSUBSTITUTE'> NSUBSTITUTE-IF'> NSUBSTITUTE-IF-NOT'> NTH'> NTH-VALUE'> NTHCDR'> NULL'> NULL'> NULL'> NULL'> NUMBER'> NUMBERP'> NUMERATOR'> NUNION'> ODDP'> OPEN'> OPEN-STREAM-P'> OPTIMIZE'> OR'> OR'> OR'> OTHERWISE'> OUTPUT-STREAM-P'> PACKAGE'> PACKAGE-ERROR'> PACKAGE-ERROR-PACKAGE'> PACKAGE-NAME'> PACKAGE-NICKNAMES'> PACKAGE-SHADOWING-SYMBOLS'> PACKAGE-USE-LIST'> PACKAGE-USED-BY-LIST'> PACKAGEP'> PAIRLIS'> PARSE-ERROR'> PARSE-INTEGER'> PARSE-NAMESTRING'> PATHNAME'> PATHNAME'> PATHNAME'> PATHNAME'> PATHNAME-DEVICE'> PATHNAME-DIRECTORY'> PATHNAME-HOST'> PATHNAME-MATCH-P'> PATHNAME-NAME'> PATHNAME-TYPE'> PATHNAME-VERSION'> PATHNAMEP'> PEEK-CHAR'> PHASE'> PI'> PLUSP'> POP'> POSITION'> POSITION-IF'> POSITION-IF-NOT'> PPRINT'> PPRINT-DISPATCH'> PPRINT-EXIT-IF-LIST-EXHAUSTED'> PPRINT-FILL'> PPRINT-INDENT'> PPRINT-LINEAR'> PPRINT-LOGICAL-BLOCK'> PPRINT-NEWLINE'> PPRINT-POP'> PPRINT-TAB'> PPRINT-TABULAR'> PRIN1'> PRIN1-TO-STRING'> PRINC'> PRINC-TO-STRING'> PRINT'> PRINT-NOT-READABLE'> PRINT-NOT-READABLE-OBJECT'> PRINT-OBJECT'> PRINT-UNREADABLE-OBJECT'> PROBE-FILE'> PROCLAIM'> PROG'> PROG*'> PROG1'> PROG2'> PROGN'> PROGRAM-ERROR'> PROGV'> PROVIDE'> PSETF'> PSETQ'> PUSH'> PUSHNEW'> QUOTE'> RANDOM'> RANDOM-STATE'> RANDOM-STATE-P'> RASSOC'> RASSOC-IF'> RASSOC-IF-NOT'> RATIO'> RATIONAL'> RATIONAL'> RATIONAL'> RATIONAL'> RATIONALIZE'> RATIONALP'> READ'> READ-BYTE'> READ-CHAR'> READ-CHAR-NO-HANG'> READ-DELIMITED-LIST'> READ-FROM-STRING'> READ-LINE'> READ-PRESERVING-WHITESPACE'> READ-SEQUENCE'> READER-ERROR'> READTABLE'> READTABLE-CASE'> READTABLEP'> REAL'> REALP'> REALPART'> REDUCE'> REINITIALIZE-INSTANCE'> REM'> REMF'> REMHASH'> REMOVE'> REMOVE-DUPLICATES'> REMOVE-IF'> REMOVE-IF-NOT'> REMOVE-METHOD'> REMPROP'> RENAME-FILE'> RENAME-PACKAGE'> REPLACE'> REQUIRE'> REST'> RESTART'> RESTART-BIND'> RESTART-CASE'> RESTART-NAME'> RETURN'> RETURN-FROM'> REVAPPEND'> REVERSE'> ROOM'> ROTATEF'> ROUND'> ROW-MAJOR-AREF'> RPLACA'> RPLACD'> SAFETY'> SATISFIES'> SBIT'> SCALE-FLOAT'> SCHAR'> SEARCH'> SECOND'> SEQUENCE'> SERIOUS-CONDITION'> SET'> SET-DIFFERENCE'> SET-DISPATCH-MACRO-CHARACTER'> SET-EXCLUSIVE-OR'> SET-MACRO-CHARACTER'> SET-PPRINT-DISPATCH'> SET-SYNTAX-FROM-CHAR'> SETF'> SETF'> SETF'> SETQ'> SEVENTH'> SHADOW'> SHADOWING-IMPORT'> SHARED-INITIALIZE'> SHIFTF'> SHORT-FLOAT'> SHORT-FLOAT-EPSILON'> SHORT-FLOAT-NEGATIVE-EPSILON'> SHORT-SITE-NAME'> SIGNAL'> SIGNED-BYTE'> SIGNUM'> SIMPLE-ARRAY'> SIMPLE-BASE-STRING'> SIMPLE-BIT-VECTOR'> SIMPLE-BIT-VECTOR-P'> SIMPLE-CONDITION'> SIMPLE-CONDITION-FORMAT-ARGUMENTS'> SIMPLE-CONDITION-FORMAT-CONTROL'> SIMPLE-ERROR'> SIMPLE-STRING'> SIMPLE-STRING-P'> SIMPLE-TYPE-ERROR'> SIMPLE-VECTOR'> SIMPLE-VECTOR-P'> SIMPLE-WARNING'> SIN'> SINGLE-FLOAT'> SINGLE-FLOAT-EPSILON'> SINGLE-FLOAT-NEGATIVE-EPSILON'> SINH'> SIXTH'> SLEEP'> SLOT-BOUNDP'> SLOT-EXISTS-P'> SLOT-MAKUNBOUND'> SLOT-MISSING'> SLOT-UNBOUND'> SLOT-VALUE'> SOFTWARE-TYPE'> SOFTWARE-VERSION'> SOME'> SORT'> SPACE'> SPECIAL'> SPECIAL-OPERATOR-P'> SPEED'> SQRT'> STABLE-SORT'> STANDARD'> STANDARD-CHAR'> STANDARD-CHAR-P'> STANDARD-CLASS'> STANDARD-GENERIC-FUNCTION'> STANDARD-METHOD'> STANDARD-OBJECT'> STEP'> STORAGE-CONDITION'> STORE-VALUE'> STORE-VALUE'> STORE-VALUE'> STREAM'> STREAM-ELEMENT-TYPE'> STREAM-ERROR'> STREAM-ERROR-STREAM'> STREAM-EXTERNAL-FORMAT'> STREAMP'> STRING'> STRING'> STRING'> STRING'> STRING-CAPITALIZE'> STRING-DOWNCASE'> STRING-EQUAL'> STRING-GREATERP'> STRING-LEFT-TRIM'> STRING-LESSP'> STRING-NOT-EQUAL'> STRING-NOT-GREATERP'> STRING-NOT-LESSP'> STRING-RIGHT-TRIM'> STRING-STREAM'> STRING-TRIM'> STRING-UPCASE'> STRING/='> STRING<'> STRING<='> STRING='> STRING>'> STRING>='> STRINGP'> STRUCTURE'> STRUCTURE-CLASS'> STRUCTURE-OBJECT'> STYLE-WARNING'> SUBLIS'> SUBSEQ'> SUBSETP'> SUBST'> SUBST-IF'> SUBST-IF-NOT'> SUBSTITUTE'> SUBSTITUTE-IF'> SUBSTITUTE-IF-NOT'> SUBTYPEP'> SVREF'> SXHASH'> SYMBOL'> SYMBOL-FUNCTION'> SYMBOL-MACROLET'> SYMBOL-NAME'> SYMBOL-PACKAGE'> SYMBOL-PLIST'> SYMBOL-VALUE'> SYMBOLP'> SYNONYM-STREAM'> SYNONYM-STREAM-SYMBOL'> T'> T'> T'> T'> T'> TAGBODY'> TAILP'> TAN'> TANH'> TENTH'> TERPRI'> THE'> THIRD'> THROW'> TIME'> TRACE'> TRANSLATE-LOGICAL-PATHNAME'> TRANSLATE-PATHNAME'> TREE-EQUAL'> TRUENAME'> TRUNCATE'> TWO-WAY-STREAM'> TWO-WAY-STREAM-INPUT-STREAM'> TWO-WAY-STREAM-OUTPUT-STREAM'> TYPE'> TYPE'> TYPE'> TYPE'> TYPE-ERROR'> TYPE-ERROR-DATUM'> TYPE-ERROR-EXPECTED-TYPE'> TYPE-OF'> TYPECASE'> TYPEP'> UNBOUND-SLOT'> UNBOUND-SLOT-INSTANCE'> UNBOUND-VARIABLE'> UNDEFINED-FUNCTION'> UNEXPORT'> UNINTERN'> UNION'> UNLESS'> UNREAD-CHAR'> UNSIGNED-BYTE'> UNTRACE'> UNUSE-PACKAGE'> UNWIND-PROTECT'> UPDATE-INSTANCE-FOR-DIFFERENT-CLASS'> UPDATE-INSTANCE-FOR-REDEFINED-CLASS'> UPGRADED-ARRAY-ELEMENT-TYPE'> UPGRADED-COMPLEX-PART-TYPE'> UPPER-CASE-P'> USE-PACKAGE'> USE-VALUE'> USE-VALUE'> USE-VALUE'> USER-HOMEDIR-PATHNAME'> VALUES'> VALUES'> VALUES'> VALUES-LIST'> VARIABLE'> VECTOR'> VECTOR'> VECTOR'> VECTOR'> VECTOR-POP'> VECTOR-PUSH'> VECTOR-PUSH-EXTEND'> VECTORP'> WARN'> WARNING'> WHEN'> WILD-PATHNAME-P'> WITH-ACCESSORS'> WITH-COMPILATION-UNIT'> WITH-CONDITION-RESTARTS'> WITH-HASH-TABLE-ITERATOR'> WITH-INPUT-FROM-STRING'> WITH-OPEN-FILE'> WITH-OPEN-STREAM'> WITH-OUTPUT-TO-STRING'> WITH-PACKAGE-ITERATOR'> WITH-SIMPLE-RESTART'> WITH-SLOTS'> WITH-STANDARD-IO-SYNTAX'> WRITE'> WRITE-BYTE'> WRITE-CHAR'> WRITE-LINE'> WRITE-SEQUENCE'> WRITE-STRING'> WRITE-TO-STRING'> Y-OR-N-P'> YES-OR-NO-P'> ZEROP'> &ENVIRONMENT-BINDING-ORDER:FIRST'> ACCESS-ERROR-NAME'> ADJUST-ARRAY-DISPLACEMENT'> ADJUST-ARRAY-FILL-POINTER'> ADJUST-ARRAY-NOT-ADJUSTABLE:IMPLICIT-COPY'> ALLOCATE-INSTANCE:ADD'> ALLOW-LOCAL-INLINE:INLINE-NOTINLINE'> ALLOW-OTHER-KEYS-NIL:PERMIT'> AREF-1D'> ARGUMENT-MISMATCH-ERROR-AGAIN:CONSISTENT'> ARGUMENT-MISMATCH-ERROR-MOON:FIX'> ARGUMENT-MISMATCH-ERROR:MORE-CLARIFICATIONS'> ARGUMENTS-UNDERSPECIFIED:SPECIFY'> ARRAY-DIMENSION-LIMIT-IMPLICATIONS:ALL-FIXNUM'> ARRAY-TYPE-ELEMENT-TYPE-SEMANTICS:UNIFY-UPGRADING'> ASSERT-ERROR-TYPE:ERROR'> ASSOC-RASSOC-IF-KEY'> ASSOC-RASSOC-IF-KEY:YES'> BOA-AUX-INITIALIZATION:ERROR-ON-READ'> BREAK-ON-WARNINGS-OBSOLETE:REMOVE'> BROADCAST-STREAM-RETURN-VALUES:CLARIFY-MINIMALLY'> BUTLAST-NEGATIVE:SHOULD-SIGNAL'> CHANGE-CLASS-INITARGS:PERMIT'> CHAR-NAME-CASE:X3J13-MAR-91'> CHARACTER-LOOSE-ENDS:FIX'> CHARACTER-PROPOSAL:2'> CHARACTER-PROPOSAL:2-1-1'> CHARACTER-PROPOSAL:2-1-2'> CHARACTER-PROPOSAL:2-2-1'> CHARACTER-PROPOSAL:2-3-1'> CHARACTER-PROPOSAL:2-3-2'> CHARACTER-PROPOSAL:2-3-3'> CHARACTER-PROPOSAL:2-3-4'> CHARACTER-PROPOSAL:2-3-5'> CHARACTER-PROPOSAL:2-3-6'> CHARACTER-PROPOSAL:2-4-1'> CHARACTER-PROPOSAL:2-4-2'> CHARACTER-PROPOSAL:2-4-3'> CHARACTER-PROPOSAL:2-5-2'> CHARACTER-PROPOSAL:2-5-6'> CHARACTER-PROPOSAL:2-5-7'> CHARACTER-PROPOSAL:2-6-1'> CHARACTER-PROPOSAL:2-6-2'> CHARACTER-PROPOSAL:2-6-3'> CHARACTER-PROPOSAL:2-6-5'> CHARACTER-VS-CHAR:LESS-INCONSISTENT-SHORT'> CLASS-OBJECT-SPECIALIZER:AFFIRM'> CLOS-CONDITIONS-AGAIN:ALLOW-SUBSET'> CLOS-CONDITIONS:INTEGRATE'> CLOS-ERROR-CHECKING-ORDER:NO-APPLICABLE-METHOD-FIRST'> CLOS-MACRO-COMPILATION:MINIMAL'> CLOSE-CONSTRUCTED-STREAM:ARGUMENT-STREAM-ONLY'> CLOSED-STREAM-OPERATIONS:ALLOW-INQUIRY'> COERCING-SETF-NAME-TO-FUNCTION:ALL-FUNCTION-NAMES'> COLON-NUMBER'> COMMON-FEATURES:SPECIFY'> COMMON-TYPE:REMOVE'> COMPILE-ARGUMENT-PROBLEMS-AGAIN:FIX'> COMPILE-FILE-HANDLING-OF-TOP-LEVEL-FORMS:CLARIFY'> COMPILE-FILE-OUTPUT-FILE-DEFAULTS:INPUT-FILE'> COMPILE-FILE-PACKAGE'> COMPILE-FILE-PATHNAME-ARGUMENTS:MAKE-CONSISTENT'> COMPILE-FILE-SYMBOL-HANDLING:NEW-REQUIRE-CONSISTENCY'> COMPILED-FUNCTION-REQUIREMENTS:TIGHTEN'> COMPILER-DIAGNOSTICS:USE-HANDLER'> COMPILER-LET-CONFUSION:ELIMINATE'> COMPILER-VERBOSITY:LIKE-LOAD'> COMPILER-WARNING-STREAM'> COMPLEX-ATAN-BRANCH-CUT:TWEAK'> COMPLEX-ATANH-BOGUS-FORMULA:TWEAK-MORE'> COMPLEX-RATIONAL-RESULT:EXTEND'> COMPUTE-APPLICABLE-METHODS:GENERIC'> CONCATENATE-SEQUENCE:SIGNAL-ERROR'> CONDITION-ACCESSORS-SETFABLE:NO'> CONDITION-RESTARTS:BUGGY'> CONDITION-RESTARTS:PERMIT-ASSOCIATION'> CONDITION-SLOTS:HIDDEN'> CONS-TYPE-SPECIFIER:ADD'> CONSTANT-CIRCULAR-COMPILATION:YES'> CONSTANT-COLLAPSING:GENERALIZE'> CONSTANT-COMPILABLE-TYPES:SPECIFY'> CONSTANT-FUNCTION-COMPILATION:NO'> CONSTANT-MODIFICATION:DISALLOW'> CONSTANTP-DEFINITION:INTENTIONAL'> CONSTANTP-ENVIRONMENT:ADD-ARG'> CONTAGION-ON-NUMERICAL-COMPARISONS:TRANSITIVE'> COPY-SYMBOL-COPY-PLIST:COPY-LIST'> COPY-SYMBOL-PRINT-NAME:EQUAL'> DATA-IO:ADD-SUPPORT'> DATA-TYPES-HIERARCHY-UNDERSPECIFIED'> DEBUGGER-HOOK-VS-BREAK:CLARIFY'> DECLARATION-SCOPE:NO-HOISTING'> DECLARE-ARRAY-TYPE-ELEMENT-REFERENCES:RESTRICTIVE'> DECLARE-FUNCTION-AMBIGUITY:DELETE-FTYPE-ABBREVIATION'> DECLARE-MACROS:FLUSH'> DECLARE-TYPE-FREE:LEXICAL'> DECLS-AND-DOC'> DECODE-UNIVERSAL-TIME-DAYLIGHT:LIKE-ENCODE'> DEFCONSTANT-SPECIAL:NO'> DEFGENERIC-DECLARE:ALLOW-MULTIPLE'> DEFINE-COMPILER-MACRO:X3J13-NOV89'> DEFINE-CONDITION-SYNTAX:INCOMPATIBLY-MORE-LIKE-DEFCLASS+EMPHASIZE-READ-ONLY'> DEFINE-METHOD-COMBINATION-BEHAVIOR:CLARIFY'> DEFINING-MACROS-NON-TOP-LEVEL:ALLOW'> DEFMACRO-BLOCK-SCOPE:EXCLUDES-BINDINGS'> DEFMACRO-LAMBDA-LIST:TIGHTEN-DESCRIPTION'> DEFMETHOD-DECLARATION-SCOPE:CORRESPONDS-TO-BINDINGS'> DEFPACKAGE:ADDITION'> DEFSTRUCT-CONSTRUCTOR-KEY-MIXTURE:ALLOW-KEY'> DEFSTRUCT-CONSTRUCTOR-OPTIONS:EXPLICIT'> DEFSTRUCT-CONSTRUCTOR-SLOT-VARIABLES:NOT-BOUND'> DEFSTRUCT-COPIER-ARGUMENT-TYPE:RESTRICT'> DEFSTRUCT-COPIER:ARGUMENT-TYPE'> DEFSTRUCT-DEFAULT-VALUE-EVALUATION:IFF-NEEDED'> DEFSTRUCT-INCLUDE-DEFTYPE:EXPLICITLY-UNDEFINED'> DEFSTRUCT-PRINT-FUNCTION-AGAIN:X3J13-MAR-93'> DEFSTRUCT-PRINT-FUNCTION-INHERITANCE:YES'> DEFSTRUCT-REDEFINITION:ERROR'> DEFSTRUCT-SLOTS-CONSTRAINTS-NAME:DUPLICATES-ERROR'> DEFSTRUCT-SLOTS-CONSTRAINTS-NUMBER'> DEFTYPE-DESTRUCTURING:YES'> DEFTYPE-KEY:ALLOW'> DEFVAR-DOCUMENTATION:UNEVALUATED'> DEFVAR-INIT-TIME:NOT-DELAYED'> DEFVAR-INITIALIZATION:CONSERVATIVE'> DEPRECATION-POSITION:LIMITED'> DESCRIBE-INTERACTIVE:NO'> DESCRIBE-UNDERSPECIFIED:DESCRIBE-OBJECT'> DESTRUCTIVE-OPERATIONS:SPECIFY'> DESTRUCTURING-BIND:NEW-MACRO'> DISASSEMBLE-SIDE-EFFECT:DO-NOT-INSTALL'> DISPLACED-ARRAY-PREDICATE:ADD'> DO-SYMBOLS-BLOCK-SCOPE:ENTIRE-FORM'> DO-SYMBOLS-DUPLICATES'> DOCUMENTATION-FUNCTION-BUGS:FIX'> DOCUMENTATION-FUNCTION-TANGLED:REQUIRE-ARGUMENT'> DOTIMES-IGNORE:X3J13-MAR91'> DOTTED-LIST-ARGUMENTS:CLARIFY'> DOTTED-MACRO-FORMS:ALLOW'> DRIBBLE-TECHNIQUE'> DYNAMIC-EXTENT-FUNCTION:EXTEND'> DYNAMIC-EXTENT:NEW-DECLARATION'> EQUAL-STRUCTURE:MAYBE-STATUS-QUO'> ERROR-TERMINOLOGY-WARNING:MIGHT'> EVAL-OTHER:SELF-EVALUATE'> EVAL-TOP-LEVEL:LOAD-LIKE-COMPILE-FILE'> EVAL-WHEN-NON-TOP-LEVEL:GENERALIZE-EVAL-NEW-KEYWORDS'> EVAL-WHEN-OBSOLETE-KEYWORDS:X3J13-MAR-1993'> EVALHOOK-STEP-CONFUSION:FIX'> EVALHOOK-STEP-CONFUSION:X3J13-NOV-89'> EXIT-EXTENT-AND-CONDITION-SYSTEM:LIKE-DYNAMIC-BINDINGS'> EXIT-EXTENT:MINIMAL'> EXPT-RATIO:P.211'> EXTENSIONS-POSITION:DOCUMENTATION'> EXTERNAL-FORMAT-FOR-EVERY-FILE-CONNECTION:MINIMUM'> EXTRA-RETURN-VALUES:NO'> FILE-OPEN-ERROR:SIGNAL-FILE-ERROR'> FIXNUM-NON-PORTABLE:TIGHTEN-DEFINITION'> FLET-DECLARATIONS'> FLET-DECLARATIONS:ALLOW'> FLET-IMPLICIT-BLOCK:YES'> FLOAT-UNDERFLOW:ADD-VARIABLES'> FLOATING-POINT-CONDITION-NAMES:X3J13-NOV-89'> FORMAT-ATSIGN-COLON'> FORMAT-COLON-UPARROW-SCOPE'> FORMAT-COMMA-INTERVAL'> FORMAT-E-EXPONENT-SIGN:FORCE-SIGN'> FORMAT-OP-C'> FORMAT-PRETTY-PRINT:YES'> FORMAT-STRING-ARGUMENTS:SPECIFY'> FUNCTION-CALL-EVALUATION-ORDER:MORE-UNSPECIFIED'> FUNCTION-COMPOSITION:JAN89-X3J13'> FUNCTION-DEFINITION:JAN89-X3J13'> FUNCTION-NAME:LARGE'> FUNCTION-TYPE'> FUNCTION-TYPE-ARGUMENT-TYPE-SEMANTICS:RESTRICTIVE'> FUNCTION-TYPE-KEY-NAME:SPECIFY-KEYWORD'> FUNCTION-TYPE-REST-LIST-ELEMENT:USE-ACTUAL-ARGUMENT-TYPE'> FUNCTION-TYPE:X3J13-MARCH-88'> GENERALIZE-PRETTY-PRINTER:UNIFY'> GENERIC-FLET-POORLY-DESIGNED:DELETE'> GENSYM-NAME-STICKINESS:LIKE-TEFLON'> GENTEMP-BAD-IDEA:DEPRECATE'> GET-MACRO-CHARACTER-READTABLE:NIL-STANDARD'> GET-SETF-METHOD-ENVIRONMENT:ADD-ARG'> HASH-TABLE-ACCESS:X3J13-MAR-89'> HASH-TABLE-KEY-MODIFICATION:SPECIFY'> HASH-TABLE-PACKAGE-GENERATORS:ADD-WITH-WRAPPER'> HASH-TABLE-REHASH-SIZE-INTEGER'> HASH-TABLE-SIZE:INTENDED-ENTRIES'> HASH-TABLE-TESTS:ADD-EQUALP'> IEEE-ATAN-BRANCH-CUT:SPLIT'> IGNORE-USE-TERMINOLOGY:VALUE-ONLY'> IMPORT-SETF-SYMBOL-PACKAGE'> IN-PACKAGE-FUNCTIONALITY:MAR89-X3J13'> IN-SYNTAX:MINIMAL'> INITIALIZATION-FUNCTION-KEYWORD-CHECKING'> ISO-COMPATIBILITY:ADD-SUBSTRATE'> JUN90-TRIVIAL-ISSUES:11'> JUN90-TRIVIAL-ISSUES:14'> JUN90-TRIVIAL-ISSUES:24'> JUN90-TRIVIAL-ISSUES:25'> JUN90-TRIVIAL-ISSUES:27'> JUN90-TRIVIAL-ISSUES:3'> JUN90-TRIVIAL-ISSUES:4'> JUN90-TRIVIAL-ISSUES:5'> JUN90-TRIVIAL-ISSUES:9'> KEYWORD-ARGUMENT-NAME-PACKAGE:ANY'> LAST-N'> LCM-NO-ARGUMENTS:1'> LEXICAL-CONSTRUCT-GLOBAL-DEFINITION:UNDEFINED'> LISP-PACKAGE-NAME:COMMON-LISP'> LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES'> LISP-SYMBOL-REDEFINITION:MAR89-X3J13'> LOAD-OBJECTS:MAKE-LOAD-FORM'> LOAD-TIME-EVAL:R**2-NEW-SPECIAL-FORM'> LOAD-TIME-EVAL:R**3-NEW-SPECIAL-FORM'> LOAD-TRUENAME:NEW-PATHNAME-VARIABLES'> LOCALLY-TOP-LEVEL:SPECIAL-FORM'> LOOP-AND-DISCREPANCY:NO-REITERATION'> LOOP-FOR-AS-ON-TYPO:FIX-TYPO'> LOOP-INITFORM-ENVIRONMENT:PARTIAL-INTERLEAVING-VAGUE'> LOOP-MISCELLANEOUS-REPAIRS:FIX'> LOOP-NAMED-BLOCK-NIL:OVERRIDE'> LOOP-PRESENT-SYMBOLS-TYPO:FLUSH-WRONG-WORDS'> LOOP-SYNTAX-OVERHAUL:REPAIR'> MACRO-AS-FUNCTION:DISALLOW'> MACRO-DECLARATIONS:MAKE-EXPLICIT'> MACRO-ENVIRONMENT-EXTENT:DYNAMIC'> MACRO-FUNCTION-ENVIRONMENT'> MACRO-FUNCTION-ENVIRONMENT:YES'> MACRO-SUBFORMS-TOP-LEVEL-P:ADD-CONSTRAINTS'> MACROEXPAND-HOOK-DEFAULT:EXPLICITLY-VAGUE'> MACROEXPAND-HOOK-INITIAL-VALUE:IMPLEMENTATION-DEPENDENT'> MACROEXPAND-RETURN-VALUE:TRUE'> MAKE-LOAD-FORM-CONFUSION:REWRITE'> MAKE-LOAD-FORM-SAVING-SLOTS:NO-INITFORMS'> MAKE-PACKAGE-USE-DEFAULT:IMPLEMENTATION-DEPENDENT'> MAP-INTO:ADD-FUNCTION'> MAPPING-DESTRUCTIVE-INTERACTION:EXPLICITLY-VAGUE'> METACLASS-OF-SYSTEM-CLASS:UNSPECIFIED'> METHOD-COMBINATION-ARGUMENTS:CLARIFY'> METHOD-INITFORM:FORBID-CALL-NEXT-METHOD'> MUFFLE-WARNING-CONDITION-ARGUMENT'> MULTIPLE-VALUE-SETQ-ORDER:LIKE-SETF-OF-VALUES'> MULTIPLE-VALUES-LIMIT-ON-VARIABLES:UNDEFINED'> NINTERSECTION-DESTRUCTION'> NINTERSECTION-DESTRUCTION:REVERT'> NOT-AND-NULL-RETURN-VALUE:X3J13-MAR-93'> NTH-VALUE:ADD'> OPTIMIZE-DEBUG-INFO:NEW-QUALITY'> PACKAGE-CLUTTER:REDUCE'> PACKAGE-DELETION:NEW-FUNCTION'> PACKAGE-FUNCTION-CONSISTENCY:MORE-PERMISSIVE'> PARSE-ERROR-STREAM:SPLIT-TYPES'> PATHNAME-COMPONENT-CASE:KEYWORD-ARGUMENT'> PATHNAME-COMPONENT-VALUE:SPECIFY'> PATHNAME-HOST-PARSING:RECOGNIZE-LOGICAL-HOST-NAMES'> PATHNAME-LOGICAL:ADD'> PATHNAME-PRINT-READ:SHARPSIGN-P'> PATHNAME-STREAM'> PATHNAME-STREAM:FILES-OR-SYNONYM'> PATHNAME-SUBDIRECTORY-LIST:NEW-REPRESENTATION'> PATHNAME-SYMBOL'> PATHNAME-SYNTAX-ERROR-TIME:EXPLICITLY-VAGUE'> PATHNAME-UNSPECIFIC-COMPONENT:NEW-TOKEN'> PATHNAME-WILD:NEW-FUNCTIONS'> PEEK-CHAR-READ-CHAR-ECHO:FIRST-READ-CHAR'> PLIST-DUPLICATES:ALLOW'> PRETTY-PRINT-INTERFACE'> PRINC-READABLY:X3J13-DEC-91'> PRINT-CASE-BEHAVIOR:CLARIFY'> PRINT-CASE-PRINT-ESCAPE-INTERACTION:VERTICAL-BAR-RULE-NO-UPCASE'> PRINT-CIRCLE-SHARED:RESPECT-PRINT-CIRCLE'> PRINT-CIRCLE-STRUCTURE:USER-FUNCTIONS-WORK'> PRINT-READABLY-BEHAVIOR:CLARIFY'> PRINTER-WHITESPACE:JUST-ONE-SPACE'> PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO'> PUSH-EVALUATION-ORDER:FIRST-ITEM'> PUSH-EVALUATION-ORDER:ITEM-FIRST'> PUSHNEW-STORE-REQUIRED:UNSPECIFIED'> QUOTE-SEMANTICS:NO-COPYING'> RANGE-OF-COUNT-KEYWORD:NIL-OR-INTEGER'> RANGE-OF-START-AND-END-PARAMETERS:INTEGER-AND-INTEGER-NIL'> READ-AND-WRITE-BYTES:NEW-FUNCTIONS'> READ-CASE-SENSITIVITY:READTABLE-KEYWORDS'> READ-MODIFY-WRITE-EVALUATION-ORDER:DELAYED-ACCESS-STORES'> READ-SUPPRESS-CONFUSING:GENERALIZE'> READER-ERROR:NEW-TYPE'> REAL-NUMBER-TYPE:X3J13-MAR-89'> RECURSIVE-DEFTYPE:EXPLICITLY-VAGUE'> REDUCE-ARGUMENT-EXTRACTION'> REMF-DESTRUCTION-UNSPECIFIED:X3J13-MAR-89'> REQUIRE-PATHNAME-DEFAULTS-AGAIN:X3J13-DEC-91'> REQUIRE-PATHNAME-DEFAULTS-YET-AGAIN:RESTORE-ARGUMENT'> REQUIRE-PATHNAME-DEFAULTS:ELIMINATE'> REST-LIST-ALLOCATION:MAY-SHARE'> RESULT-LISTS-SHARED:SPECIFY'> RETURN-VALUES-UNSPECIFIED:SPECIFY'> ROOM-DEFAULT-ARGUMENT:NEW-VALUE'> SELF-MODIFYING-CODE:FORBID'> SEQUENCE-TYPE-LENGTH:MUST-MATCH'> SETF-APPLY-EXPANSION:IGNORE-EXPANDER'> SETF-FIND-CLASS:ALLOW-NIL'> SETF-FUNCTIONS-AGAIN:MINIMAL-CHANGES'> SETF-GET-DEFAULT:EVALUATED-BUT-IGNORED'> SETF-MACRO-EXPANSION:LAST'> SETF-METHOD-VS-SETF-METHOD:RENAME-OLD-TERMS'> SETF-MULTIPLE-STORE-VARIABLES:ALLOW'> SETF-OF-APPLY:ONLY-AREF-AND-FRIENDS'> SETF-OF-VALUES:ADD'> SETF-SUB-METHODS:DELAYED-ACCESS-STORES'> SHADOW-ALREADY-PRESENT'> SHADOW-ALREADY-PRESENT:WORKS'> SHARP-COMMA-CONFUSION:REMOVE'> SHARP-O-FOOBAR:CONSEQUENCES-UNDEFINED'> SHARP-STAR-DELIMITER:NORMAL-DELIMITER'> SHARPSIGN-PLUS-MINUS-PACKAGE:KEYWORD'> SLOT-MISSING-VALUES:SPECIFY'> SLOT-VALUE-METACLASSES:LESS-MINIMAL'> SPECIAL-FORM-P-MISNOMER:RENAME'> SPECIAL-TYPE-SHADOWING:CLARIFY'> STANDARD-INPUT-INITIAL-BINDING:DEFINED-CONTRACTS'> STANDARD-REPERTOIRE-GRATUITOUS:RENAME'> STEP-ENVIRONMENT:CURRENT'> STEP-MINIMAL:PERMIT-PROGN'> STREAM-ACCESS:ADD-TYPES-ACCESSORS'> STREAM-CAPABILITIES:INTERACTIVE-STREAM-P'> STRING-COERCION:MAKE-CONSISTENT'> STRING-OUTPUT-STREAM-BASHING:UNDEFINED'> STRUCTURE-READ-PRINT-SYNTAX:KEYWORDS'> SUBSEQ-OUT-OF-BOUNDS'> SUBSEQ-OUT-OF-BOUNDS:IS-AN-ERROR'> SUBSETTING-POSITION:NONE'> SUBTYPEP-ENVIRONMENT:ADD-ARG'> SUBTYPEP-TOO-VAGUE:CLARIFY-MORE'> SXHASH-DEFINITION:SIMILAR-FOR-SXHASH'> SYMBOL-MACROLET-DECLARE:ALLOW'> SYMBOL-MACROLET-SEMANTICS:SPECIAL-FORM'> SYMBOL-MACROLET-TYPE-DECLARATION:NO'> SYMBOL-MACROS-AND-PROCLAIMED-SPECIALS:SIGNALS-AN-ERROR'> SYMBOL-PRINT-ESCAPE-BEHAVIOR:CLARIFY'> SYNTACTIC-ENVIRONMENT-ACCESS:RETRACTED-MAR91'> TAGBODY-TAG-EXPANSION:NO'> TAILP-NIL:T'> TEST-NOT-IF-NOT:FLUSH-ALL'> THE-AMBIGUITY:FOR-DECLARATION'> THE-VALUES:RETURN-NUMBER-RECEIVED'> TIME-ZONE-NON-INTEGER:ALLOW'> TYPE-DECLARATION-ABBREVIATION:ALLOW-ALL'> TYPE-OF-AND-PREDEFINED-CLASSES:TYPE-OF-HANDLES-FLOATS'> TYPE-OF-AND-PREDEFINED-CLASSES:UNIFY-AND-EXTEND'> TYPE-OF-UNDERCONSTRAINED:ADD-CONSTRAINTS'> TYPE-SPECIFIER-ABBREVIATION:X3J13-JUN90-GUESS'> UNDEFINED-VARIABLES-AND-FUNCTIONS:COMPROMISE'> UNINITIALIZED-ELEMENTS:CONSEQUENCES-UNDEFINED'> UNREAD-CHAR-AFTER-PEEK-CHAR:DONT-ALLOW'> UNSOLICITED-MESSAGES:NOT-TO-SYSTEM-USER-STREAMS'> VARIABLE-LIST-ASYMMETRY:SYMMETRIZE'> WITH-ADDED-METHODS:DELETE'> WITH-COMPILATION-UNIT:NEW-MACRO'> WITH-OPEN-FILE-DOES-NOT-EXIST:STREAM-IS-NIL'> WITH-OPEN-FILE-SETQ:EXPLICITLY-VAGUE'> WITH-OPEN-FILE-STREAM-EXTENT:DYNAMIC-EXTENT'> WITH-OUTPUT-TO-STRING-APPEND-STYLE:VECTOR-PUSH-EXTEND'> WITH-STANDARD-IO-SYNTAX-READTABLE:X3J13-MAR-91'> clisp-2.49/doc/clisp-link.xml.in000066400000000000000000000144771142424315300165370ustar00rootroot00000000000000 %cl-entities; %imp-entities; %unix-entities; create'> add'> run'> ]> &clisp-link; version @VERSION@ Platform: @PLATFORM@ Last modified: @TODAY@ @VERSION@ CLISP &clisp-authors; &clisp-doc-copyright; This document describes an auxiliary program for &gnu; &clisp;. &clisp-bugs-and-support; clisp-link 1 Manipulate &clisp; &modset;s and &linkset;s. Platform: @PLATFORM@ clisp-link link a new external &module; to &clisp;. clisp-link &opt-create; clisp-link &opt-add; clisp-link &opt-run; clisp-link &opt-install; Description This shell script operates on &clisp; &modset;s and &linkset;s: &opt-create;s new &modset;s out of source files &opt-add;s &modset;s to a &linkset; to produce a new &linkset; &opt-run;s &clisp; with &modset;s added &dynmod-only; &opt-install;s new &modset;s for general use Options &opt-create; The command &sh-prompt; &clisp-link; &opt-create; &mod-r; &file-r; ... creates a &modset; in &mod-r; directory which refers (via symbolic links) to files &file-r;... The files are expected to be modules of their own. &opt-add; The command &sh-prompt; &clisp-link; &opt-add; &source-r; &dest-r; &mod-r; ... combines the &linkset; in directory &source-r; and the &module;s in directories &mod-r;... to a new &linkset;, in the directory &dest-r; which is newly created. &opt-run; The command &sh-prompt; &clisp-link; &opt-run; &source-r; &mod-r; ... runs the &linkset; in directory &source-r;, with the &module;s in directories &mod-r;... Unless &clisp; has been built with the configuration option &without-dynmod;, the loading will be performed using &mod-dynload;. Otherwise - this is much slower - a temporary &linkset; will be created and deleted afterwards. &opt-install; &dynmod-only;The command &sh-prompt; &clisp-link; &opt-install; &mod-r; ... installs the &module;s in directories &mod-r;... into &libdir; or, if it is not writable to the user (e.g., if a system-wide &clisp; installation is used and the user does not have administrative privileges), into &user-libdir;. Variable &user-libdir; is initially set to (&merge-pathnames; ".clisp/" (&user-homedir-pathname;)) if that directory exists, and can be reset in the &RC-file;. Do ¬-e; add &user-libdir; to &load-paths; or under any element thereof. Use &require-my; instead of &load-my; to load dynamic modules. For this command to work, each &mod-r; directory must contain a &make-file; with a clisp-module-distrib target which uses LN to distribute the files necessary to run the module into destdir. This is in addition to the general requirement that &link-sh; is present. Examples See . Files &clisp-link; needs a link kit directory containing: "modules.c" &clisp-h; &clisp-link; expects to find these files in a subdirectory linkkit/ of the installation directory (i.e., &libdir;) which it acquires by running &sh-prompt; `dirname $0`/clisp &opt-b; This can be overridden by the &env-var; CLISP_LINKKIT. See also clisp-2.49/doc/clisp.ico000066400000000000000000000072761142424315300151500ustar00rootroot0000000000000000(0`3*2UU8wDDwDdPKQ6QQQQU8UUUUUUwU֦__cw}fq{fƷЦƴwƚƷƘƴƢƾU3DDUQQf"3"3D9999444444***9944**95*95*95*95*95*95*94*94*45***********444**************4444444444*4444444444***4*****95*444** &$*  95" 444 ,*"$ 95$  94$#5***559* /////4///////**//***///// //)**////*///44//"555555//)55///4/// //(5*//5*/44*//'49////44'&////,($ //!5*45*//9// !#////!5* //,5*95**// 9// ///*//,5* //+)*9 **// 4*5////// "/////// //,($ ,*// 44****//(***////,$//,5*/// //95"+5*//!4***55// 55///+*//! "////5*/5*//95***9//9//*//*//95*/////////5*//95*9////////*//95*///9/////95*//95*9//9//////5*///////95*95*95*95*95*95*95*95*95*95*95*94*95*95*95*95*95*95*94*95*95*95*95*95*95*94*95*95*95*95*95*95*94*95*95*95*95*95*95*94*95*95*95*95*95*95*95*95*95*95*95*95*95*95*95*95* -3 % % % % % %=876=210=210=210=210=210=210;78<;12<;12<;12<;12<;12<;12<>7.>1>1>1>1>1>1>> > > > > > :::::::clisp-2.49/doc/clisp.png000066400000000000000000000014521142424315300151500ustar00rootroot00000000000000PNG  IHDR00` PLTE2*38UUDwDDwKPdQ6QQQQU8UUUUUUUw__֦cw}fq{fƛПƠwƷƻƻƾǕ3U̻DDUזQQf"3"3D9ytEXtSoftwaregif2png 2.4.0MP&"IDATxTkw0 e/ZFH\6)M?k Ypzõ#Zd,p0{9a~xu?W~}|x/۳]ѫn~"Ja? vV- OS Mى=* jr少G1P6, ʘȐ3by9rJ %3rZ}Gʜf#XK'0Q$ɋt|P8qPYf#\-EUA01.0~ڪޘkcZՖMST c\%kt6Z%3U2f(Xhī.[=!Uu:a4HDO|ڸJ"X9_mzT~Ujq s_ݾ~z؈t?& #% `<9->>cwoYRmnv/ -7AFKю;-! ^{qk7 ^<0MIENDB`clisp-2.49/doc/clisp.xml.in000066400000000000000000001074231142424315300155760ustar00rootroot00000000000000 %cl-entities; %imp-entities; %unix-entities; locale-dir"> lisp-file"> lisp-lib-dir"> expressions"> -c"> &lf;'> ]> &clisp; version @VERSION@ Platform: @PLATFORM@ Last modified: @TODAY@ @VERSION@ CLISP &clisp-authors; &clisp-doc-copyright; &clisp-abstract; clisp 1 ANSI Common Lisp Platform: @PLATFORM@ clisp &the-ansi; &cl; compiler, interpreter and debugger. &clisp-cmd; &opt-q; &opt-v; &opt-norl; &opt-ansi;&opt-traditional; &opt-modern; &opt-C; &opt-norc; &lf; &opt-lf; Description Invokes the &cl; interpreter and compiler. Interactive Mode When called without arguments, executes the &repl;, in which expressions are in turn &read; from the standard input, &eval;uated by the lisp interpreter, and their results are &print;ed to the standard output. Non-Interactive (Batch) Mode Invoked with &opt-c;, compiles the specified lisp files to a platform-independent &bytecode; which can be executed more efficiently. Invoked with &opt-x;, executes the specified lisp expressions. Invoked with &opt-lf;, runs the specified lisp file. Options Displays a help message on how to invoke &clisp;. Displays the &clisp; version number, as given by the function &lisp-implementation-version;, the value of the variable &features-my;, as well some other information. Displays a summary of the licensing information, the &gnu; &gpl;. Displays information about the &mem-image; being invoked: whether is it suitable for scripting as well as the &documentation-k; supplied to &savemem;. &lld; Specifies the installation directory. This is the directory containing the linking sets and other data files. This option is normally not necessary, because the installation directory is already built-in into the &clisp-cmd; executable. Directory &lld; can be changed dynamically using the &symbol-macro; &libdir;. Print the installation directory and exit immediately. The namestring of &libdir; is printed without any quotes. This is mostly useful in module Makefiles, see, e.g., modules/syscalls/Makefile.in. linking-set Specifies the &linkset; to be run. This is a directory (relative to the &lld;) containing at least a main executable (&rt;) and an initial &mem-image;. Possible values are &varlist-table;&base; the core &clisp; &full; core plus all the modules with which this installation was built, see . The default is &base;. mem-file Specifies the initial &mem-image;. This must be a memory dump produced by the &savemem; function by this &clisp-cmd; &rt;. It may have been compressed using &gnu; &gzip;. &mems-r; Sets the amount of memory &clisp; tries to grab on startup. The amount may be given as &n-r;&n-r;B measured in bytes &n-r;&n-r;W measured in machine words (4×&n-r; on 32-bit platforms, 8×&n-r; on 64-bit platforms) &n-r;K &n-r;KB measured in kilobytes &n-r;KW measured in kilowords &n-r;M &n-r;MB measured in megabytes &n-r;MW measured in megawords The default is 3 megabytes. The argument is constrained between 100 KB and 16 MB. The argument is constrained between 100 KB and 64 MB. The argument is constrained between 100 KB and 256 MB. The argument is constrained above 100 KB. This version of &clisp; is not likely to actually use the entire &mems-r; since &gc;ion will periodically reduce the amount of used memory. It is therefore common to specify 10 MB even if only 2 MB are going to be used. eventually uses the entire &mems-r;. allocates memory dynamically. &mems-r; is essentially ignored (except that it determines the Lisp &STACK; size). &lang-r; Specifies the language &clisp; uses to communicate with the user. This may be only english. one of english german french spanish dutch russian danish. Other languages may be specified through the &env-var; LANG, provided the corresponding message catalog is installed. The language may be changed dynamically using the &symbol-macro; &curr-lang;. &ld; Specifies the base directory of locale files. &clisp; will search its message catalogs in &ld;/&lang-r;/LC_MESSAGES/clisp.mo. This directory may be changed dynamically using the &symbol-macro; &curr-lang;. Specifies the encoding used for the given domain, overriding the default which depends on the &env-var;s LC_ALL, LC_CTYPE, LANG. &dom-r; can be &varlist-table; file affecting &def-file-enc; pathname affecting &path-enc; terminal affecting &term-enc; foreign affecting &foreign-enc; misc affecting &misc-enc; blank affecting all of the above. Note that the values of these &symbol-macro;s that have been saved in a &mem-image; are ignored: these &symbol-macro;s are reset based on the OS environment &after-e; the &mem-image; is loaded. You have to use the &RC-file;, &init-hooks; or &init-function; to set them on startup, but it is best to set the aforementioned &env-var;s appropriately for consistency with other programs. See . Change verbosity level: by default, &clisp; displays a banner at startup and a good-bye message when quitting, and initializes &load-verbose-var; and &compile-verbose-var; to &t;, and &load-print-var; and &compile-print-var; to &nil;, as per &ansi-cl;. The first &opt-q; removes the banner and the good-bye message, the second sets variables &load-verbose-var;, &compile-verbose-var; and &savemem-verbose; to &nil;. The first &opt-v; sets variables &err-pr-bt;, &load-print-var; and &compile-print-var; to &t;, the second sets &load-echo; to &t;. These settings affect the output produced by &opt-i; and &opt-c; options. Note that these settings persist into the &repl;. Repeated and cancel each other, e.g., is equivalent to . action Establish global error handlers, depending on action: appease &cont-err;s are turned into &warning-t;s (with &appease-cerrors;) other &error-t;s are handled in the default way debug &error-t;s &invoke-debugger; (the normal &repl; behavior), disables &batch-mode; imposed by &opt-c;, &opt-x;, and &opt-lf;, abort &cont-err;s are appeased, other &error-t;s are &abort;ed with &abort-on-error; exit &cont-err;s are appeased, other &error-t;s terminate &clisp; with &exit-on-error; (the normal &batch-mode; behavior). See also &set-global-handler;. Start an interactive &repl; after processing the &opt-c;, &opt-x;, and &opt-lf; options and on any &error-t; &signal;ed during that processing. Disables &batch-mode;. Wait for a keypress after program termination. Interact better with &emacs; (useful when running &clisp; under &emacs; using &slime;, &ilisp; et al). With this option, &clisp; interacts in a way that &emacs; can deal with: unnecessary prompts are not suppressed. The &readline; library treats &tab-c; (see ) as a normal self-inserting character (see ). Do not use &readline; even when it has been linked against. This can be used if one wants to paste non-&ascii; characters, or when &readline; misbehaves due to installation (different versions on the build and install machines) or setup (bad TERM &env-var; value) issues. Comply with the &ansi-cl; specification even where &clisp; has been traditionally different by setting the &symbol-macro; &ansi; to &t;. Traditional: reverses the residual effects of &opt-ansi; in the saved &mem-image;. Provides a modern view of symbols: at startup the &package-var; variable will be set to the &cs-clu; package, and the &print-case-var; will be set to :DOWNCASE. This has the effect that symbol lookup is case-sensitive (except for keywords and old-style packages) and that keywords and uninterned symbols are printed with lower-case preferrence. See . &pack-r; At startup the value of the variable &package-var; will be set to the package named &pack-r;. The default is the value of &package-var; when the image was saved, normally &clu-pac;. Compile when loading: at startup the value of the variable &load-comp; will be set to &t;. Code being &load;ed will then be &compile;d on the fly. This results in slower loading, but faster execution. Normally &clisp; loads the user run control (RC) file on startup (this happens &after-e; the &opt-C; option is processed). The file loaded is .clisprc.lisp or .clisprc.fas in the home directory &user-homedir-pathname;, whichever is newer. This option, &opt-norc;, prevents loading of the &RC-file;. &dir-r; Specifies directories to be added to &load-paths; at startup. This is done &after-e; loading the &RC-file; (so that it does not override the command-line option) but &before-e; loading the init-files specified by the options (so that the init-files will be searched for in the specified directories). Several options can be given; all the specified directories will be added. init-file Specifies initialization files to be &load;ed at startup. These should be lisp files (source or compiled). Several options can be given; all the specified files will be loaded in order. &lf; Compiles the specified &lf;s to &bytecode; (*.fas). The compiled files can then be &load;ed instead of the sources to gain efficiency. Imposes &batch-mode;. outputfile Specifies the output file or directory for the compilation of the last specified &lf;. Produce a &bytecode; &disassemble; listing (*.lis) of the files being compiled. Useful only for debugging. See for details. &exprs; Executes a series of arbitrary expressions instead of a &repl;. The values of the expressions will be output to &standard-output-var;. Due to the argument processing done by the shell, the &exprs; must be enclosed in double quotes, and double quotes and backslashes must be escaped with backslashes. Imposes &batch-mode;. &lf; [ &arg-r; ... ] Loads and executes a &lf;, as described in . There will be no &repl;. Before &lf; is loaded, the variable &args; will be bound to a list of strings, representing the &arg-r;s. The first line of &lf; may start with #!, thus permitting &clisp; to be used as a script interpreter. If &lf; is -, the &standard-input-var; is used instead of a file. This option is disabled if the &mem-image; was created by &savemem; with &nil; :SCRIPT argument. In that case the &list-t; &args; starts with &lf;. This option must be the last one. No &RC-file; will be executed. Imposes &batch-mode;. As usual, stops option processing and places all remaining command line arguments into &args;. Language Reference The language implemented is &the-ansi; &cl;. The implementation mostly conforms to the ANSI Common Lisp standard, see . &ansi-cl-bib; Command Line User Environment &help; get context-sensitive on-line help, see . (&apropos-my; &name-r;) list the &symbol-t;s matching &name-r;. (&describe-my; &symbol-r;) describe the &symbol-r;. (exit)(quit)(bye) quit &clisp;. EOF (&ctrl;D on &unix;) (&ctrl;Z on &win32;) leave the current level of the &repl; (see also ). arrow keys for editing and viewing the input history, using the &readline; library. &tab-c; key Context sensitive: If you are in the function position (in the first symbol after an opening paren or in the first symbol after a &sharp-prime;), the completion is limited to the symbols that name functions. If you are in the "filename position" (inside a string after &sharp-P;), the completion is done across file names, &bash;-style. If you have not typed anything yet, you will get a help message, as if by the &help; command. If you have not started typing the next symbol (i.e., you are at a whitespace), the current function or macro is &describe-my;d. Otherwise, the symbol you are currently typing is completed. Using and Extending &clisp; John Foderaro &cl; is a programmable programming language. When &clisp; is invoked, the &rt; loads the initial memory image and outputs the prompt; at which one can start typing &defvar;s, &defun;s and &defmacro;s. To avoid having to re-enter the same definitions by hand in every session, one can create a lisp file with all the variables, functions, macros, etc.; (optionally) compile it with &compile-file;; and &load; it either by hand or from the &RC-file;; or save a &mem-image; to avoid the &load; overhead. However, sometimes one needs to use some functionality implemented in another language, e.g., call a &c-lang; library function. For that one uses the Foreign Function Interface and/or the External Modules facility. Finally, the truly adventurous ones might delve into Extending the Core. Files &clisp-cmd; clisp.exe startup driver (an executable or, rarely, a shell script) which remembers the location of the &rt; and starts it with the appropriate arguments &lisp-run; lisp.exe main executable (runtime) - the part of &clisp; implemented in &c-lang;. lispinit.mem initial &mem-image; (the part of &clisp; implemented in lisp) config.lisp site-dependent configuration (should have been customized before &clisp; was built); see *.lisp lisp source *.fas lisp code, compiled by &clisp; *.lib lisp source library information, generated by &compile-file-my;, see . *.c C code, compiled from lisp source by &clisp; (see ) For the &clisp; source files, see . Environment All &env-var;s that &clisp; uses are read at most once. CLISP_LANGUAGE specifies the language &clisp; uses to communicate with the user. The legal values are identical to those of the &opt-L; option which can be used to override this &env-var;. LC_CTYPE specifies the locale which determines the character set in use. The value can be of the form &lang-r; or &lang-r;_country or &lang-r;_country.charset, where &lang-r; is a two-letter ISO 639 language code (lower case), country is a two-letter ISO 3166 country code (upper case). charset is an optional character set specification, and needs normally not be given because the character set can be inferred from the language and country. This &env-var; can be overridden with the &opt-E; option. LANG specifies the language &clisp; uses to communicate with the user, unless it is already specified through the &env-var; CLISP_LANGUAGE or the &opt-L; option. It also specifies the locale determining the character set in use, unless already specified through the &env-var; LC_CTYPE. The value may begin with a two-letter ISO 639 language code, for example en, de, fr. HOMEUSER used for determining the value of the function &user-homedir-pathname;. SHELL COMSPEC is used to find the interactive command interpreter called by &shell;. TERM determines the screen size recognized by the pretty printer. ORGANIZATION for &short-site-name; and &long-site-name; in &config-lisp;. CLHSROOT for &clhs-root; in &config-lisp;. IMPNOTES for &impnotes-root; in &config-lisp;. EDITOR for editor-name in &config-lisp;. LOGICAL_HOST_&host-r;_FROM LOGICAL_HOST_&host-r;_TO LOGICAL_HOST_&host-r; for &load-lpt-db; Input and Outut See . See also &cmucl; - cmucl(1) &emacs; - emacs(1) &xemacs; - xemacs(1) Bugs When you encounter a bug in &clisp; or in its documentation (this manual page or ), please report it to the &clisp; SourceForge bug tracker. Before submitting a bug report, please take the following basic steps to make the report more useful: Please do a clean build (remove your build directory and build &clisp; with ./configure --cbc build or at least do a make distclean before make). If you are reporting a hard crash (segmentation fault, bus error, core dump etc), please do ./configure &with-debug; --cbc build-g ; cd build-g; gdb lisp.run, then load the appropriate &linkset; by either &base; or &full; &gdb; command, and report the backtrace (see also ). If you are using pre-built binaries and experience a hard crash, the problem is likely to be in the incompatibilities between the platform on which the binary was built and yours; please try compiling the sources and report the problem if it persists. When submitting a bug report, please specify the following information: What is your platform (uname -a on a &unix; system)? Compiler version? &glibc; version (on &gnu;/&linux;)? Where did you get the sources or binaries? When? (Absolute dates, e.g., 2006-01-17, are preferred over the relative ones, e.g., 2 days ago). How did you build &clisp;? (What command, options &c.) What is the output of clisp --version? Please supply the full output (copy and paste) of all the error messages, as well as detailed instructions on how to reproduce them. Projects Enhance the compiler so that it can inline local functions. Embed &clisp; in &vim;. clisp-2.49/doc/common.xsl000066400000000000000000000536541142424315300153630ustar00rootroot00000000000000 ]> DocBook XSL stylesheet VERSION is: RFC Gmane/ SFmail/ <> api_c/ db_class env_class seq_class env_strerror env_version log_compare logc_ txn_ env_ seq_ memp_ dbc_ db_ unknown function/db element .html [ ] #< > Platform Dependent: ISBN  ⇒  appendix toc,title article/appendix nop article toc,title book toc,title,figure,table,example,equation chapter toc,title part toc,title preface toc,title qandadiv toc qandaset toc reference toc,title sect1 toc sect2 toc sect3 toc sect4 toc sect5 toc section toc,example set toc,title