diff -urN 21.5.23/CHANGES-beta 21.5.24/CHANGES-beta --- 21.5.23/CHANGES-beta Wed Oct 26 22:15:44 2005 +++ 21.5.24/CHANGES-beta Mon Dec 19 00:33:35 2005 @@ -1,3 +1,77 @@ +to 21.5.24 "dandelion" +Major features + +-- New: Xft font support. -- Stephen J. Turnbull, Aidan Kehoe, Daniel Pittman, Clemens Fruhwirth, Eric Knauel, Matthias Neuebaur, Hrvoje Niksic, Olivier Galibert +-- New: incremental garbage collector. -- Marcus Crestani + +User-Visible Bug Fixes and Minor Improvements + +-- Fix: autoload list-matching-lines. -- Malcolm Purvis +-- Fix: change_window_height must change the window width when requested. -- Aidan Kehoe +-- Fix: crashes printing ISO2022 coding systems. -- Ben Wing +-- Improve: initializations depending on locale or language environment. -- Aidan Kehoe +-- Update: etags to upstream 17.15. -- Malcolm Purvis +-- Update: package download site list. -- Adrian Aichner +-- Update: X11 search pathes to include /usr(/local)/share/X11. -- Ville Skyttä + +Build Infrastructure + +-- Fix build output directory structure on Windows. -- Marcus Crestani +-- Fix: configuration of native sound on Windows. -- Ben Wing +-- Fix: small bugs in configure of AC_INIT and PostgreSQL. -- Stephen J. Turnbull +-- Improve: CVS behavior. -- Stephen J. Turnbull, Marcus Crestani, Malcolm Purvis +-- Improve: treatment and docs XE_COMPLEX_ARGs defaults. -- Malcolm Purvis, Stephen Turnbull +-- Improve: refactor make clean, nuke .elcs. -- Ben Wing +-- New: tests for backward-up-list. -- Stephen J. Turnbull + +Documentation + +-- Fix: Don't mention standard-syntax-table and standard-category-table. -- Aidan Kehoe +-- Fix: typos. -- Stephen J. Turnbull, Adrian Aichner +-- Improve: Add 'Known Problems' to the Help menu. -- Malcolm Purvis +-- Improve: HELLO in Irish and Tajik. -- Aidan Kehoe +-- Improve: INSTALL. -- Stephen J. Turnbull +-- Improve: consistency of symbol quoting in documentation. -- Ben Wing +-- Improve: docstrings. -- Stephen J. Turnbull +-- Improve: reorganize option list from configure. -- Malcolm Purvis +-- Improve: texi document CVS branching. -- Ben Wing +-- Improve: texi documentation of DEFSYMBOL. -- Stephen J. Turnbull +-- Improve: texi documentation of XEmacs Autoconf macros. -- Malcolm Purvis +-- Improve: update PROBLEMS, and install in etc. -- Malcolm Purvis +-- Update: about Jerry James. -- Stephen J. Turnbull +-- Update: about Malcolm Purvis. -- Malcolm Purvis +-- Update: descriptions of font name syntaxes. -- Stephen J. Turnbull + +Lisp API + +-- Improve: generalize describe-syntax-table to describe-char-table. -- Ben Wing +-- Improve: memory statistics reporting. -- Marcus Crestani + +Internal API and Implementation + +-- Fix: C++ build. -- Ben Wing, Marcus Crestani +-- Fix: Mule-ize canna_api module. -- Ben Wing, Stephen J. Turnbull +-- Fix: byte compile by conditional compilation. -- Ben Wing +-- Fix: compilation errors and warnings in GTK code. -- Malcolm Purvis +-- Fix: compile stuff_buffered_input only if HAVE_TTY. -- Malcolm Purvis +-- Fix: help on functions without documentation. -- Ben Wing +-- Fix: integer types for Berkeley db. -- Stephen J. Turnbull, Volker Zell +-- Fix: make modules build on Cygwin and Mac. -- Stephen J. Turnbull, Rick Rankin, Ben Wing +-- Fix: quiet byte-compiler. -- Stephen J. Turnbull +-- Fix: syntax error -- Marcus Crestani +-- Fix: uninitialized local variables. -- Stephen J. Turnbull +-- Fix: use princ, not prin1 in debug print. -- Ben Wing +-- Fix: use uint32_t declaration, fixing build on FreeBSD. -- Steve Youngs, Andrey Slusar +-- Fix: value of MAX_STRING_ASCII_BEGIN under MC_ALLOC. -- Ben Wing +-- Fix: warning elimination, mark UNUSED parameters -- Marcus Crestani, Stephen J. Turnbull +-- Improve: bignum support on mingwin. -- Ben Wing +-- Improve: lrecord uid handling. -- Ben Wing +-- Improve: refactor default_object_printer. -- Marcus Crestani +-- Improve: remove dead code in lwlib. -- Stephen J. Turnbull +-- Improve: reorganize lisp.h. -- Ben Wing +-- Improve: set default syntax class to word. -- Aidan Kehoe, Ben Wing +-- Improve: tabs widget internals. -- Stephen J. Turnbull + to 21.5.23 "daikon" Major features diff -urN 21.5.23/CVS/Entries 21.5.24/CVS/Entries --- 21.5.23/CVS/Entries Mon Dec 19 04:19:33 2005 +++ 21.5.24/CVS/Entries Mon Dec 19 04:21:53 2005 @@ -1,25 +1,25 @@ -/.cvsignore/1.4/Fri Mar 11 11:18:44 2005//Tr21-5-23 -/CHANGES-ben-mule/1.2/Wed Mar 13 08:54:06 2002//Tr21-5-23 -/CHANGES-beta/1.231/Wed Oct 26 13:15:44 2005//Tr21-5-23 -/CHANGES-msw/1.5/Sun Sep 1 22:14:58 2002//Tr21-5-23 -/COPYING/1.1.1.1/Wed Dec 18 22:42:14 1996//Tr21-5-23 -/ChangeLog/1.465/Wed Oct 26 15:13:17 2005//Tr21-5-23 -/INSTALL/1.44/Mon Oct 24 20:39:38 2005//Tr21-5-23 -/Makefile.in.in/1.26/Tue Oct 4 17:51:13 2005//Tr21-5-23 -/PROBLEMS/1.70/Thu Mar 10 11:49:00 2005//Tr21-5-23 -/README/1.18/Fri Feb 4 03:04:05 2005//Tr21-5-23 -/README.ben-mule-21-5/1.2/Wed Mar 13 08:54:05 2002//Tr21-5-23 -/README.ben-separate-stderr/1.2/Wed Mar 13 08:54:06 2002//Tr21-5-23 -/TODO.ben-mule-21-5/1.7/Sun Apr 14 12:43:30 2002//Tr21-5-23 -/aclocal.m4/1.12/Fri Mar 11 11:18:45 2005//Tr21-5-23 -/build-msw-release.sh/1.4/Tue Jun 4 06:12:31 2002//Tr21-5-23 -/config.guess/1.7/Fri Mar 11 11:18:45 2005//Tr21-5-23 -/config.sub/1.6/Fri Mar 11 11:18:46 2005//Tr21-5-23 -/configure/1.258/Wed Oct 26 15:13:00 2005//Tr21-5-23 -/configure.ac/1.17/Mon Oct 24 21:01:08 2005//Tr21-5-23 -/configure.in/1.242/Sun Sep 18 13:01:08 2005//Tr21-5-23 -/configure.usage/1.39/Fri Apr 8 23:10:15 2005//Tr21-5-23 -/install.sh/1.1.1.1/Wed Dec 18 22:42:15 1996//Tr21-5-23 -/move-if-change/1.1.1.1/Wed Dec 18 22:42:15 1996//Tr21-5-23 -/version.sh/1.1324/Wed Oct 26 15:12:46 2005//Tr21-5-23 +/.cvsignore/1.4/Fri Mar 11 11:18:44 2005//Tr21-5-24 +/CHANGES-ben-mule/1.2/Wed Mar 13 08:54:06 2002//Tr21-5-24 +/CHANGES-beta/1.236/Sun Dec 18 15:33:35 2005//Tr21-5-24 +/CHANGES-msw/1.5/Sun Sep 1 22:14:58 2002//Tr21-5-24 +/COPYING/1.1.1.1/Wed Dec 18 22:42:14 1996//Tr21-5-24 +/ChangeLog/1.483/Sun Dec 18 19:05:14 2005//Tr21-5-24 +/INSTALL/1.45/Mon Nov 7 08:49:17 2005//Tr21-5-24 +/Makefile.in.in/1.29/Tue Nov 22 07:14:48 2005//Tr21-5-24 +/PROBLEMS/1.71/Wed Nov 16 12:12:57 2005//Tr21-5-24 +/README/1.18/Fri Feb 4 03:04:05 2005//Tr21-5-24 +/README.ben-mule-21-5/1.2/Wed Mar 13 08:54:05 2002//Tr21-5-24 +/README.ben-separate-stderr/1.2/Wed Mar 13 08:54:06 2002//Tr21-5-24 +/TODO.ben-mule-21-5/1.7/Sun Apr 14 12:43:30 2002//Tr21-5-24 +/aclocal.m4/1.12/Fri Mar 11 11:18:45 2005//Tr21-5-24 +/build-msw-release.sh/1.4/Tue Jun 4 06:12:31 2002//Tr21-5-24 +/config.guess/1.7/Fri Mar 11 11:18:45 2005//Tr21-5-24 +/config.sub/1.6/Fri Mar 11 11:18:46 2005//Tr21-5-24 +/configure/1.267/Sun Dec 18 17:58:51 2005//Tr21-5-24 +/configure.ac/1.28/Sun Dec 18 17:58:55 2005//Tr21-5-24 +/configure.in/1.242/Sun Sep 18 13:01:08 2005//Tr21-5-24 +/configure.usage/1.39/Fri Apr 8 23:10:15 2005//Tr21-5-24 +/install.sh/1.1.1.1/Wed Dec 18 22:42:15 1996//Tr21-5-24 +/move-if-change/1.1.1.1/Wed Dec 18 22:42:15 1996//Tr21-5-24 +/version.sh/1.1380/Sun Dec 18 19:04:51 2005//Tr21-5-24 D diff -urN 21.5.23/CVS/Tag 21.5.24/CVS/Tag --- 21.5.23/CVS/Tag Mon Dec 19 04:19:33 2005 +++ 21.5.24/CVS/Tag Mon Dec 19 04:21:53 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/ChangeLog 21.5.24/ChangeLog --- 21.5.23/ChangeLog Thu Oct 27 00:13:17 2005 +++ 21.5.24/ChangeLog Mon Dec 19 04:05:14 2005 @@ -1,3 +1,276 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-12-19 Stephen J. Turnbull + + * configure.ac (XE_COMPLEX_ARG): Substitute '_' for '-' in default + variable names. + +2005-12-09 Malcolm Purvis + + * configure.ac (XE_EXPAND_COMPLEX_OPTION): + * configure.ac (XE_INIT_COMPLEX_OPTION): + * configure.ac (XE_PARSE_COMPLEX_OPTION): + * configure.ac (XE_COMPLEX_ARG): + With the help of Stephen Turnbull rewrote the option processing to + give more consistent under the various combinations of all, none, + no, yes, --without, --with, etc that can occur. + +2005-11-27 Marcus Crestani + + * configure.ac: Remove vdb-fake warning, die if POSIX checks fail. + +2005-11-27 Stephen J. Turnbull + + * configure.ac (XE_COMPLEX_ARG[xft]): Default everything off; + change doc. + +2005-11-27 Stephen J. Turnbull + + * configure.ac (XE_COMPLEX_ARG[xft]): Remove merge detritus and + regenerate configure to fix syntax error. + +2005-11-26 Stephen J. Turnbull + + Merge Xft. + + 2005-03-05 Malcolm Purvis + + * configure.ac: Correct the filename of the old copy of configure. + + 2005-03-05 Malcolm Purvis + + * config.guess: + * config.sub: Sync with the latest upstream versions. + * configure.ac: Use --verbose for --extra-verbose. Better + quoting of arguments. Internal shell vars statr with '_' to avoid + name clashes. Pick up the latest changes to configure.in. + Improve the testing of Athena 3d widgets. + + 2005-02-20 Stephen J. Turnbull + + * configure.ac (athena): Spells as 3d, not xaw3d, in declaration. + (sound): quickfix: AC_DEFINE, not AC_DEFINE_UNQUOTED, at top level. + + 2005-02-19 Stephen J. Turnbull + + * configure.ac (XE_EXPAND_COMPLEX_OPTION): Use same name in comment. + (XEmacs keyword option support): + (XEmacs complex option support): + Move long header comments to internals.texi(The configure Script). + + 2005-02-03 Stephen J. Turnbull + + * configure.ac: Trap --with-style flags, now --enable. + + 2005-02-03 Stephen J. Turnbull + + * configure.ac (Autodetect native sound): + Handle NetBSD per Aidan's patch. + + 2005-02-11 Malcolm Purvis + + * configure.ac: Added keyword option support. Converted database, + sound, athena, xim, bignum, error-checking, menubars, scrollbars, + dialogs and widgets command line arguments to use keyword option + and complex option macros. + + 2005-02-09 Malcolm Purvis + + * configure.ac (XE_COMPLEX_OPTION): + * configure.ac (XE_COMPLEX_OPTION_HELP_STRING): + * configure.ac (XE_COMPLEX_ARG_WITH): + * configure.ac (XE_COMPLEX_ARG_ENABLE): + Rewritten complex option support with a simpler API and support + for --enable as well a --with. + + 2005-02-02 Malcolm Purvis + + * configure.ac Align with the current mainline version of + configure.in. + + 2005-02-01 Stephen J. Turnbull + + * configure.ac (Xrender, fontconfig, and Xft): + Check /usr/include/freetype2. + + 2005-01-30 Stephen J. Turnbull + + * configure.ac (AC_COPYRIGHT): Update. + (progname): Restore and improve documentation. + + (XE_INIT_COMPLEX_OPTION): + (XE_APPEND_COMPLEX_OPTION_DEFAULT): + (XE_PARSE_COMPLEX_OPTION): + (XE_CLEANUP_COMPLEX_OPTION): + (XE_COMPLEX_OPTION_HELP_STRING): Support complex options. + (--with-xft): Add Xft support using the complex option support. + + (--with-xface): + (--with-zlib): + (--with-xmu): + (--with-purify): + (--with-quantify): + (--with-toolbars): + (--with-tty): + (--with-xfs): + (--with-canna): + (--with-wnn): + (--with-wnn6): + (--with-ldap): + (--with-postgresql): + (--with-infodock): + (--with-native-sound-lib): + (--with-netinstall): + (--with-site-includes): + (--with-site-libraries): + (--with-site-prefixes): + (--with-package-prefix): + (--with-package-path): + (--enable-external-widget): + (--enable-kkcc): + (--enable-union-type): + (--enable-pdump): + (--enable-debug): + (--enable-memory-usage-stats): + (--enable-error-checking): + (--with-rel-alloc): + (--with-dlmalloc): + (--with-debug-malloc): + (--with-system-malloc): + Improve (including add) help strings. + + (--with-athena): + (--with-xim): + (--with-mail-locking): + (--enable-bignum): + (--enable-menubars): + (--enable-scrollbars): + (--enable-dialogs): + (--enable-widgets): + Fix `eval "$FEATURE=\"$val\"" bug. + + 2005-01-29 Stephen J. Turnbull + + * INSTALL (CONFIGURATION OPTIONS): + Insert Malcolm's notes on autoconf 2.59 support. + + 2005-01-04 Malcolm Purvis + + * aclocal.m4: Changes to support autoconf 2.59 + * config.guess: + * config.sub: Upgraded to the version in from automake 1.9 + * configure.ac: Rewritten for autoconf 2.59 support. + + 2004-12-10 Stephen J. Turnbull + + * configure.usage: Various minor improvements. + + 2004-12-09 Stephen J. Turnbull + + * configure.in: Update FSF's copyright. Support --with-xft=LIST + syntax. Try to find a directory containing freetype/ftheader.h. + + * configure.usage (--with-xft): Update. + + 2004-11-20 Stephen J. Turnbull + + Xft branch based on "Xft reloaded #3" patch by Eric Knauel and + Mathias Neuebaur, and other contributors. + + * configure.in: + * configure.usage: + Implement and document switches for configuring Xft. + +2005-11-21 Marcus Crestani + + Incremental Garbage Collector + + * configure.ac: Add newgc option; if newgc, turn on kkcc and + mc-alloc. Add checks for write barrier, determine which write + barrier to use. Add vdb option to override write barrier + auto-detection. Generate .gdbinit and .dbxrc. + +2005-11-22 Ben Wing + + * dynodump/Makefile.in.in (mostlyclean): + Ignore errors from rm during clean. + +2005-11-22 Ben Wing + + * Makefile.in.in (top-mostlyclean): + * Makefile.in.in (top-clean): + * Makefile.in.in (top-distclean-noconfig): + * Makefile.in.in (top-distclean): + * Makefile.in.in (top-realclean-noconfig): + * Makefile.in.in (top-extraclean-noconfig): + * Makefile.in.in (TAGS tags): + Ignore errors from rm during clean, to prevent problems trying to + remove lock/CVS. + +2005-11-08 Malcolm Purvis + + * Makefile.in.in: Install PROBLEMS into .../etc + * PROBLEMS: Update description of MacOS X stack size limit. + +2005-11-08 Malcolm Purvis + + * configure.ac : Reorganised the option list so that the help + output looks like configure.usage from 21.4 + +2005-11-16 Stephen J. Turnbull + + * configure.ac (checks for typedefs): TODO comment. + +2005-11-13 Ben Wing + + * dynodump/Makefile.in.in: + * dynodump/Makefile.in.in (.PHONY): + Add targets distclean-noconfig, realclean-noconfig, extraclean-noconfig. + Do some refactoring for cleanliness. + +2005-11-13 Ben Wing + + * Makefile.in.in: + * Makefile.in.in (beta): + * Makefile.in.in (FRC.mostlyclean FRC.clean FRC.distclean FRC.realclean FRC.extraclean FRC.tags): + * Makefile.in.in (.PHONY): + * Makefile.in.in (top-mostlyclean): + * Makefile.in.in (mostlyclean): + * Makefile.in.in (top-clean): + * Makefile.in.in (clean): + * Makefile.in.in (distclean): + * Makefile.in.in (realclean): + Add targets distclean-noconfig, realclean-noconfig, extraclean-noconfig. + *-noconfig targets are like the base targets they're based off of, but + don't delete Makefiles and certain other files needed to rebuild the + Makefiles as necessary. Refactor things to be more consistent. + Top-level `elcclean' is an alias for `realclean-noconfig' and is used + by target `beta'. `realclean-noconfig' (and, by extension, `realclean' + and `extraclean') remove the .elc files. + +2005-11-13 Ben Wing + + * configure.ac (win32 native sound): + Dependent on operating system, not on window system. + +2005-11-07 Stephen J. Turnbull + + * configure.ac (AC_INIT): Use it correctly. + +2005-11-07 Stephen J. Turnbull + + * configure.ac (PostgreSQL): Check for link against SSL+crypto. + +2005-11-07 Stephen J. Turnbull + + * INSTALL: Add map from old options as appendix. + +2005-11-07 Stephen J. Turnbull + + * INSTALL: Various minor improvements. + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. @@ -187,7 +460,12 @@ * version.sh (XEMACS_RELEASE_DATE): New version info variable. - * configure.in (XEMACS_RELEASE_DATE): Use it. + * configure.in (XEMACS_RELEASE_DATE): + * configure.ac (XEMACS_RELEASE_DATE): + Use it. + + * configure.ac (sound): + AC_DEFINE_UNQUOTED seems OK, if it's not m4-quoted. 2005-02-18 Stephen J. Turnbull diff -urN 21.5.23/INSTALL 21.5.24/INSTALL --- 21.5.23/INSTALL Tue Oct 25 05:39:38 2005 +++ 21.5.24/INSTALL Mon Nov 7 17:49:17 2005 @@ -16,8 +16,6 @@ and that any new or changed statements about the activities of the Free Software Foundation are approved by the Foundation. -Last modified by Stephen J. Turnbull 2003-02-12 - BUILDING AND INSTALLATION FOR UNIX AND CYGWIN (for Microsoft Windows, see nt/README also.) @@ -145,6 +143,11 @@ program used in other applications, either `--with-FEATURE' or `--enable-FEATURE' can be used to use the same feature. +If you haven't built XEmacs 21.5 recently, the change from the +configure script based on Autoconf 2.13 can be a shock. Appendix: +Correspondence to Old Configure Options (at the end of this document) +contains a list of old options and their new equivalents. + Controlling the Host Type ------------------------- @@ -205,22 +208,36 @@ The `--with-cflags-warning=FLAGS' option specifies the warnings to be generated. There is normally no reason to use this flag, as XEmacs -turns on as many warnings as possible, and is still expected to build -with no, or at most a few warnings. +turns on as many warnings as possible, and is still intended to build +with no warnings. If you get any undocumented warnings, please report +them as bugs---they very often are, or at least indicate possible +bitrot. The `--with-cflags-optimization=FLAGS' option specifies the -optimizations to be used. There is normally no reason to use this flag, -as XEmacs will already set the maximum safe -optimization flags appropriate for the compiler being invoked. +optimizations to be used. There is normally no reason to use this +flag, as XEmacs will already set the maximum safe optimization flags +appropriate for the compiler being invoked. The `--with-cflags-debugging=FLAGS' option specifies debugging -information to be generated. There is normally no reason to use this -flag, as XEmacs will include debugging information whenever possible -(i.e. unless optimization is turned on and the compiler does not permit -debugging and optimization simultaneously). - -The `--with-dynamic' option specifies that configure should try to link -emacs dynamically rather than statically. +information to be generated. You should avoid using this flag, as it +makes most severe or fatal bugs hard-to-impossible to diagnose and +fix. Debugging information does not slow down XEmacs at runtime, and +it doesn't make the binary very much bigger. + +The `--with-dynamic' option specifies that configure should try to +link XEmacs dynamically rather than statically. `--with-static' +specifies the reverse. XEmacs's configure script detects whether +dynamic linking can be done on all platforms we know of; these options +are normally unnecessary. + +The `--with-modules' option specifies that XEmacs be built with +support for runtime loadable modules. NOTE TO OEMS: XEmacs can be +distributed configured to support several options based on external +APIs (currently LDAP, PostgreSQL, and Canna) as loadable modules. You +can distribute an XEmacs binary package with these options enabled +without depending on the external package. XEmacs will fail +gracefully at runtime, issuing an error message indicating that the +required support was not found on the system. You can build XEmacs for several different machine types from a single source directory. To do this, you must use a version of `make' that @@ -275,27 +292,27 @@ The `--without-xmu' option can be used if your vendor doesn't ship the Xmu library. -The `--enable-menubars=TYPE' option allows you to specify which X +The `--with-menubars=TYPE' option allows you to specify which X toolkit you wish to use for the menubar. The valid options are `lucid', `motif' and `no'. The default is `lucid' which is a Motif-lookalike menubar. We highly recommend its usage over the real Motif menubar. (In fact, the Motif menubar is currently broken.) If `no' is specified then support for menubars will not be compiled in. -The `--enable-scrollbars=TYPE' option allows you to specify which X +The `--with-scrollbars=TYPE' option allows you to specify which X toolkit you wish to use for the scrollbars. The valid options are `lucid', `motif', `athena', `athena3d', and `no'. The default is `lucid' which is a Motif-lookalike scrollbar. If `no' is specified then support for scrollbars will not be compiled in. -The `--enable-dialogs=TYPE' option allows you to specify which X toolkit +The `--with-dialogs=TYPE' option allows you to specify which X toolkit you wish to use for the dialog boxes. The valid options are `athena', `athena3d', `motif, and `no. The `lucid' option is accepted and will result in the `athena' toolkit being used. If the Motif toolkit can be found the default is `motif'. Otherwise, the default is `athena'. If `no' is specified then support for dialog boxes will not be compiled in. -The `--enable-toolbars' option allows you to enable or disable toolbar +The `--with-toolbars' option allows you to enable or disable toolbar support. The default is `yes' if support for a windowing system is included. @@ -307,38 +324,41 @@ X-Faces. `configure' will attempt to detect if you have the compface library and define `--with-xface' for you. -The `--enable-database' option specifies that XEmacs should be built +The `--with-database' option specifies that XEmacs should be built with simple database support. The valid options are `no' or a comma-separated list of one or more of `dbm', `gnudbm' or `berkdb'. `configure' will attempt to detect the necessary libraries and header -files and define `--enable-database' for you. +files and define `--with-database' for you. The `--with-postgresql' option specifies that XEmacs should be built with PostgreSQL support, linking with libpq. `configure' will attempt to detect whether PostgreSQL support is available, and automatically -define `--with-postgresql' for you. +define `--with-postgresql' for you. NOTE TO OEMS: If modules are +supported and enabled, the libpq API support will be build as a +module. The `--with-ldap' option specifies that XEmacs should be build with LDAP support, using the OpenLDAP libraries. `configure' will attempt to detect whether LDAP support is available, and automatically define -`--with-ldap' for you. +`--with-ldap' for you. NOTE TO OEMS: If modules are supported and +enabled, the OpenLDAP API support will be build as a module. The `--with-socks' option specifies that XEmacs should be built with SOCKS support. This requires the libsocks library. -The `--enable-external-widget' option specifies that XEmacs should be +The `--with-external-widget' option specifies that XEmacs should be built with support for being used as a widget by other X11 applications. This functionality should be considered beta. -The `--enable-sound=TYPE' option specifies that XEmacs should be built -with sound support. Native (`--enable-sound=native') sound support is +The `--with-sound=TYPE' option specifies that XEmacs should be built +with sound support. Native (`--with-sound=native') sound support is currently available only on Sun SparcStations, SGI's, HP9000s, and systems (such as Linux) with soundcard.h. Network Audio Support (NAS) -(`--enable-sound=nas') is an extension to X that you may or may not have +(`--with-sound=nas') is an extension to X that you may or may not have for your system. For NAS, you will probably need to provide the paths to the nas include and library directories to configure. If -`--enable-sound' is not specified, `configure' will attempt to determine -if your configuration supports native sound and define --enable-sound +`--with-sound' is not specified, `configure' will attempt to determine +if your configuration supports native sound and define --with-sound for you. If your native sound library is not in a standard location you can specify it with the `--with-native-sound-lib=LIB' flag. For Linux, `/dev/audio' is required for SunAudio files and `/dev/dsp' is required @@ -368,7 +388,7 @@ Internationalization Options ---------------------------- -The `--enable-mule' option enables MUlti-Lingual Emacs (Mule) support, +The `--with-mule' option enables MUlti-Lingual Emacs (Mule) support, needed to support non-Latin-1 (including Asian) languages. Mule support is required for Asian language and Unicode (multibyte and wide character) support. With the advent of the Euro and European @@ -409,7 +429,8 @@ it, so you never need to explicitly use this option unless your Canna libraries are somewhere strange. Canna run time support is currently bundled with the `mule-base' package so there is nothing additional to -install in order to use it. +install in order to use it. NOTE TO OEMS: If modules are supported +and enabled, the libcanna API support will be build as a module. The `--with-wnn' and `--with-wnn6' options are for compiling with the Wnn multi-language input method. `--with-wnn' is for compiling with Wnn-4.2, @@ -788,3 +809,205 @@ See the file PROBLEMS in this directory for a list of various problems sometimes encountered, and what to do about them. PROBLEMS is also the place where platform-specific build notes can be found. + +APPENDIX: CORRESPONDENCE TO OLD CONFIGURE OPTIONS +================================================= + +Here is a full translation of command line arguments. Note that any +option starting with "--with" may also be specified with "--enable". +This list may not be up-to-date. + +Old | New +------------------------------------------ +General options: +---------------- + +--help Unchanged +--usage Removed +--verbose Unchanged +--extra-verbose Removed + +Compilation options: +-------------------- + +--compiler --with-compiler +--xemacs-compiler --with-xemacs-compiler +--with-gcc Unchanged +--cflags --with-cflags +--cflags-warning --with-cflags-warning +--debug --with-debug +New --with-cflags-debug +New --with-optimization +New --with-cflags-optimization +--cpp --with-cpp +--cppflags --with-cppflags +--libs --with-libs +--ldflags --with-ldflags +--site-includes --with-site-includes +--site-libraries --with-site-libraries +--site-prefixes --with-site-prefixes +--site-runtime-libraries --with-site-runtime-libraries +--dynamic --with-dynamic +--srcdir Unchanged + +Installation options: +--------------------- + +--prefix Unchanged +--with-prefix Unchanged +--with-netinstall Unchanged +--bindir Unchanged +--datadir Unchanged +--statedir Unchanged +--libdir Unchanged +--infodir Unchanged +--mandir Unchanged +--lispdir --with-lispdir +--sitelispdir Removed +--etcdir --with-etcdir +--lockdir Removed +--archlibdir --with-archlibdir +--docdir --with-docdir +--moduledir --with-moduledir + +Run-time path-searching options: +-------------------------------- + +--with-site-lisp Unchanged +--with-site-modules Unchanged +--package-prefix --with-package-prefix +--package-path --with-package-path +--infopath --with-infopath + +Window-system options: +---------------------- + +--with-gtk Unchanged +--with-gnome Unchanged +--with-x11 Unchanged +--x-includes Unchanged +--x-libraries Unchanged +--with-msw Unchanged +--with-toolbars Unchanged +--with-wmcommand Unchanged +--with-athena Unchanged +--with-menubars Unchanged +--with-scrollbars Unchanged +--with-dialogs Unchanged +--with-widgets Unchanged +--with-dragndrop Unchanged +--with-cde Unchanged +--with-offix Unchanged +--with-xmu Unchanged +--external-widget --with-external-widget + +TTY (character terminal) options: +--------------------------------- + +--with-tty Unchanged +--with-ncurses Unchanged +--with-gpm Unchanged + +Image options: +-------------- + +--with-xpm Unchanged +--with-png Unchanged +--with-jpeg Unchanged +--with-tiff Unchanged +--with-xface Unchanged +--with-gif Unchanged + +Sound options: +-------------- + +--with-sound Unchanged +--native-sound-lib=LIB --with-native-sound-lib + +Internationalization options: +----------------------------- + +--with-mule Unchanged +--with-xim Unchanged +--with-canna Unchanged +--with-wnn Unchanged +--with-wnn6 Unchanged +--with-xfs Unchanged + +File-related options: +--------------------- + +--with-default-eol-detection Unchanged +--with-clash-detection Unchanged + +Database options: +----------------- + +--with-database Unchanged +--with-ldap Unchanged +--with-postgresql Unchanged + +Mail options: +------------- + +--mail-locking=TYPE --with-mail-locking +--with-pop Unchanged +--with-kerberos Unchanged +--with-hesiod Unchanged + +Networking options: +------------------- + +--with-tooltalk Unchanged +--with-socks Unchanged +--with-dnet Unchanged +--with-ipv6-cname Unchanged + +Memory allocation options: +-------------------------- + +--rel-alloc --with-rel-alloc +--with-dlmalloc Unchanged +--with-system-malloc Unchanged +--with-debug-malloc Unchanged + +Emacs Lisp options: +------------------- + +--use-number-lib --with-bignum + +Debugging options: +------------------ + +--debug --with-debug +--error-checking --with-error-checking +--memory-usage-stats --with-memory-usage-stats +--quick-build --with-quick-build +--use-union-type --with-union-type +--with-quantify Unchanged +--with-purify Unchanged + +Developer options: +------------------ + +--with-workshop Unchanged +--pdump --with-pdump +--use-kkcc --with-kkcc +--with-modules Unchanged + +The output files produced by this new configure should be almost +identical to those produced by the old. This can be tested with the +provided regression test script. This script runs the two versions of +configure with the supplied list of command line arguments and reports +any differences. Please add your favorite configuration command lines +to the list before running the test. The script is run as: + +$ tests/autoconf/regressiontest.pl /absolute/path/to/2.13/configure \ + /absolute/path/to/2.59/configure >diffs.txt + +The only differences should be: +- those related to changes in the command line arguments +- the change of SYS_SIGLIST_DECLARED to HAVE_DECL_SYS_SIGLIST (because the old + form has been removed), and +- The removal of trailing comments in src/config.h. + diff -urN 21.5.23/Makefile.in.in 21.5.24/Makefile.in.in --- 21.5.23/Makefile.in.in Wed Oct 5 02:51:13 2005 +++ 21.5.24/Makefile.in.in Tue Nov 22 16:14:48 2005 @@ -1,4 +1,4 @@ -## Copyright (C) 2003 Ben Wing. +## Copyright (C) 2003, 2005 Ben Wing. ## DIST: This is the distribution Makefile for XEmacs. configure can ## DIST: make most of the changes to this file you might want, so try @@ -217,9 +217,9 @@ ## ============================= Targets ============================== -## Subdirectories to make recursively. `lisp' is not included -## because the compiled lisp files are part of the distribution -## and you cannot remake them without installing XEmacs first. +## Subdirectories to make recursively. `lisp' is not included currently; +## rebuilding the compiled lisp files is done in the `src' make and requires +## building XEmacs first. MAKE_SUBDIR = @MAKE_SUBDIR@ ## Subdirectories that can be made recursively. @@ -238,7 +238,7 @@ ## instead, we have written out explicit code in the `install' targets. COPYDIR = ${srcdir}/etc ${srcdir}/lisp COPYDESTS = ${etcdir} ${lispdir} -GENERATED_HEADERS = src/paths.h src/Emacs.ad.h src/config.h lwlib/config.h src/sheap-adjust.h src/xemacs.def +GENERATED_HEADERS = src/paths.h src/Emacs.ad.h src/config.h lwlib/config.h src/sheap-adjust.h src/xemacs.def etc/PROBLEMS ## MAKE_SUBDIR will always be of the form lib-src ... src, where ## `...' includes various other directories that may be inserted by @@ -252,7 +252,7 @@ .PHONY: ${SUBDIR} all beta ## Convenience target for XEmacs beta testers -beta: clean all +beta: elcclean all ## Convenience target for XEmacs maintainers ## This would run `make-xemacsdist' if I were really confident that everything @@ -344,6 +344,9 @@ src/xemacs.def: $(srcdir)/src/xemacs.def.in.in ./config.status && touch $@ +etc/PROBLEMS: $(srcdir)/PROBLEMS + cp $^ $@ + ## ==================== Installation ==================== ## If we let lib-src do its own installation, that means we @@ -515,20 +518,26 @@ ## Some makes seem to remember that they've built something called FRC, ## so you can only use a given FRC once per makefile. FRC FRC.src.paths.h FRC.mkdir FRC.dump-elcs FRC.info: -FRC.mostlyclean FRC.clean FRC.distclean FRC.realclean FRC.tags: +FRC.mostlyclean FRC.clean FRC.distclean FRC.realclean FRC.extraclean FRC.tags: +FRC.distclean-noconfig FRC.realclean-noconfig FRC.extraclean-noconfig: ## ==================== Cleaning up and miscellanea ==================== -.PHONY: mostlyclean clean distclean realclean extraclean +.PHONY: mostlyclean clean distclean realclean extraclean elcclean +.PHONY: distclean-noconfig realclean-noconfig extraclean-noconfig +.PHONY: top-mostlyclean top-clean top-distclean top-realclean top-extraclean +.PHONY: top-distclean-noconfig top-realclean-noconfig top-extraclean-noconfig ## `mostlyclean' ## Like `clean', but may refrain from deleting a few files that people ## normally don't want to recompile. For example, the `mostlyclean' ## target for GCC does not delete `libgcc.a', because recompiling it ## is rarely necessary and takes a lot of time. -mostlyclean: FRC.mostlyclean +top-mostlyclean: FRC.mostlyclean + -$(RM) core + +mostlyclean: top-mostlyclean for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done - $(RM) core ## `clean' ## Delete all files from the current directory that are normally @@ -542,11 +551,23 @@ ## Remove the generated load files here; they cause lots of problems ## when they don't work right. (beta can't depend on distclean, which ## removes necessary files generated by configure.) -clean: FRC.clean +top-clean: FRC.clean + -$(RM) core lisp/auto-autoloads.el* lisp/custom-load.el* + -$(RM) lisp/mule/auto-autoloads.el* lisp/mule/custom-load.el* + -$(RM) modules/auto-autoloads.el* modules/custom-load.el* + -$(RM) etc/PROBLEMS + +clean: top-mostlyclean top-clean + for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done + +## `distclean-noconfig' +## Like `distclean' but don't delete files created by `configure'. +top-distclean-noconfig: FRC.distclean-noconfig + -$(RM) TAGS .sbinit lock/* lisp/finder-inf.el* + -$(RM) -r site-packages xemacs-packages mule-packages site-lisp + +distclean-noconfig: top-mostlyclean top-clean top-distclean-noconfig for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done - $(RM) core lisp/auto-autoloads.el* lisp/custom-load.el* - $(RM) lisp/mule/auto-autoloads.el* lisp/mule/custom-load.el* - $(RM) modules/auto-autoloads.el* modules/custom-load.el* ## `distclean' ## Delete all files from the current directory that are created by @@ -554,15 +575,26 @@ ## source and built the program without creating any other files, ## `make distclean' should leave only the files that were in the ## distribution. -top_distclean=\ - $(RM) config.status config.log confdefs.h config-tmp-* build-install Installation ; \ - $(RM) TAGS .sbinit lock/* GNUmakefile Makefile Makefile.in ; \ - $(RM) lisp/finder-inf.el* Installation.el Installation.elc ; \ - $(RM) -r site-packages xemacs-packages mule-packages site-lisp +top-distclean: FRC.distclean + -$(RM) config.status config.log confdefs.h config-tmp-* build-install Installation + -$(RM) GNUmakefile Makefile Makefile.in + -$(RM) Installation.el Installation.elc -distclean: FRC.distclean +distclean: top-mostlyclean top-clean top-distclean-noconfig top-distclean for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done - -${top_distclean} + +## `realclean-noconfig' +## Delete everything that can be reconstructed by `make'. Don't delete +## anything requiring reconfiguration. +top-realclean-noconfig: FRC.realclean-noconfig + -$(RM) *.elc lisp/*.elc lisp/mule/*.elc lisp/term/*.elc modules/*.elc + +realclean-noconfig: top-mostlyclean top-clean top-distclean-noconfig top-realclean-noconfig + for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done + +top-realclean: FRC.realclean + +elcclean: realclean-noconfig ## `realclean' ## Delete everything from the current directory that can be @@ -575,19 +607,25 @@ ## Makefile. More generally, `make realclean' should not delete ## anything that needs to exist in order to run `configure' and then ## begin to build the program. -realclean: FRC.realclean +realclean: top-mostlyclean top-clean top-distclean-noconfig top-distclean top-realclean-noconfig top-realclean + for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done + +## `extraclean-noconfig' +## Like `extraclean' but don't delete anything requiring reconfiguration. +top-extraclean-noconfig: FRC.extraclean-noconfig + -$(RM) *~ \#* + +extraclean-noconfig: top-mostlyclean top-clean top-distclean-noconfig top-realclean-noconfig top-extraclean-noconfig for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done - -${top_distclean} - $(RM) TAGS ## This doesn't actually appear in the coding standards, but Karl ## says GCC supports it, and that's where the configuration part of ## the coding standards seem to come from. It's like distclean, but ## it deletes backup and autosave files too. -extraclean: +top-extraclean: FRC.extraclean + +extraclean: top-mostlyclean top-clean top-distclean-noconfig top-distclean top-realclean-noconfig top-realclean top-extraclean-noconfig top-extraclean for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done - $(RM) *~ \#* - -${top_distclean} ## Unlocking and relocking. The idea of these productions is to reduce ## hassles when installing an incremental tar of XEmacs. Do `make unlock' @@ -624,7 +662,7 @@ tagslisp = lisp TAGS tags: FRC.tags @echo "If you don't have a copy of etags around, then do 'make lib-src' first." - $(RM) ${srcdir}/TAGS + -$(RM) ${srcdir}/TAGS @PATH=`$(pwd)`/lib-src:$$PATH HOME=/-=-; export PATH HOME; \ echo "Using etags from `which etags`." PATH=`$(pwd)`/lib-src:$$PATH ; export PATH; cd ${srcdir} && \ diff -urN 21.5.23/PROBLEMS 21.5.24/PROBLEMS --- 21.5.23/PROBLEMS Thu Mar 10 20:49:00 2005 +++ 21.5.24/PROBLEMS Wed Nov 16 21:12:57 2005 @@ -1387,10 +1387,10 @@ *** XEmacs crashes on MacOS within font-lock, or when dealing with large compilation buffers, or in other regex applications. -The default stack size under MacOS/X is rather small (512k as opposed -to Solaris 8M), hosing the regexp code, which uses alloca() -extensively, overflowing the stack when complex regexps are used. -Workarounds: +The default stack size under MacOS/X prior to 10.3 (Panther) is rather +small (512k as opposed to Solaris 8M), hosing the regexp code, which +uses alloca() extensively, overflowing the stack when complex regexps +are used. Workarounds: 1) Increase your stack size, using `ulimit -s 8192' or a (t)csh equivalent; diff -urN 21.5.23/configure 21.5.24/configure --- 21.5.23/configure Thu Oct 27 00:13:00 2005 +++ 21.5.24/configure Mon Dec 19 02:58:51 2005 @@ -1,56 +1,59 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59. +# Generated by GNU Autoconf 2.59 for XEmacs 21.5. +# +# Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # -# #### Configuration script for XEmacs. Largely divergent from FSF. -# #### Guess values for system-dependent variables and create Makefiles. -# #### Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. -# #### Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc. -# #### Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. -# #### Copyright (C) 1993, 1994, 1995 Board of Trustees, University of Illinois. -# #### Copyright (C) 1996, 1997 Sun Microsystems, Inc. -# #### Copyright (C) 1995, 1996, 2002, 2003, 2004 Ben Wing. -# #### Copyright (C) 2000, 2001 Martin Buchholz. -# #### Copyright (C) 1998, 1999 J. Kean Johnston. -# #### Copyright (C) 2005 Malcolm Purvis +# Configuration script for XEmacs. Largely divergent from FSF. +# Guess values for system-dependent variables and create Makefiles. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 1993, 1994, 1995 Board of Trustees, University of Illinois. +# Copyright (C) 1996, 1997 Sun Microsystems, Inc. +# Copyright (C) 1995, 1996, 2002, 2003, 2004 Ben Wing. +# Copyright (C) 2000, 2001 Martin Buchholz. +# Copyright (C) 1998, 1999 J. Kean Johnston. +# Copyright (C) 2005 Malcolm Purvis +# +# Don't edit this script! +# This script was automatically generated by the `autoconf' program +# from the file `./configure.ac'. To rebuild it, execute the command: +# +# autoconf # -# ### Don't edit this script! -# ### This script was automatically generated by the `autoconf' program -# ### from the file `./configure.in'. -# ### To rebuild it, execute the command -# ### autoconf -# ### in the this directory. You must have autoconf version 2.50 or later. -# ### Note: this script has been tested only with autoconf version 2.5x. +# in the this directory. You must have autoconf version 2.59. # -# ### This file is part of XEmacs. +# This file is part of XEmacs. # -# ### XEmacs 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, or (at your -# ### option) any later version. +# XEmacs 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, or (at your +# option) any later version. # -# ### XEmacs 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. +# XEmacs 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 XEmacs; see the file COPYING. If not, write to the Free -# ### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# ### 02111-1307, USA. +# You should have received a copy of the GNU General Public License +# along with XEmacs; see the file COPYING. If not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. # -# ### For usage, run `./configure --help' -# ### For more detailed information on building and installing XEmacs, -# ### read the file `INSTALL'. -# ### -# ### If configure succeeds, it leaves its status in config.status. -# ### A log of configuration tests can be found in config.log. -# ### If configure fails after disturbing the status quo, -# ### config.status is removed. +# For usage, run `./configure --help' +# For more detailed information on building and installing XEmacs, +# read the file `INSTALL'. +# +# If configure succeeds, it leaves its status in config.status. +# A log of configuration tests can be found in config.log. +# If configure fails after disturbing the status quo, +# config.status is removed. # ## --------------------- ## ## M4sh Initialization. ## @@ -312,11 +315,11 @@ : ${ac_max_here_lines=38} # Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= +PACKAGE_NAME='XEmacs' +PACKAGE_TARNAME='xemacs' +PACKAGE_VERSION='21.5' +PACKAGE_STRING='XEmacs 21.5' +PACKAGE_BUGREPORT='xemacs-beta@xemacs.org' ac_unique_file="src/lisp.h" # Factoring default headers for most tests. @@ -825,7 +828,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. +\`configure' configures XEmacs 21.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -888,7 +891,9 @@ fi if test -n "$ac_init_help"; then - + case $ac_init_help in + short | recursive ) echo "Configuration of XEmacs 21.5:";; + esac cat <<\_ACEOF Optional Features: @@ -896,24 +901,131 @@ --enable-FEATURE[=ARG] alias for --with-FEATURE --without-FEATURE do not use FEATURE (same as --with-FEATURE=no) --disable-FEATURE alias for --without-FEATURE + +Compilation options +------------------- + + --with-compiler C compiler to use + --with-xemacs-compiler compiler to use to compile just the xemacs + executable and C modules. If you want to compile + XEmacs as C++, use e.g. + `--with-xemacs-compiler=g++'. This turns on a lot of + additional error-checking. + --with-gcc Use GCC to compile XEmacs. + --with-cflags=FLAGS Compiler flags. These flags will be placed after any + flags inserted for warnings, debugging or + optimization; setting this does not disable the + insertion of those flags. Use configure settings + such as `--with-optimization=no' or + `enable-debug=no' to turn them off, or override them + with `--with-cflags-optimization', + `--with-cflags-debugging', or `with-cflags-warning'. + --with-cflags-warning=FLAGS + Override compiler flags used to control warnings. + Normally, don't set this, as XEmacs already turns on + the maximum safe warning level. + --with-optimization Control whether compilation is optimized. By + default, optimization is on in release versions and + off in beta versions, since it can interfere with + proper stack backtraces. + --with-cflags-optimization=FLAGS + Override compiler flags used to control + optimization. If blank, forces no optimization; if + non-blank, forces optimization. Normally, don't set + this; XEmacs automatically sets the maximum safe + optimization flags appropriate for the compiler + being invoked. If you just want to turn optimization + on or off, use `with-optimization' instead. + --with-cflags-debugging=FLAGS + Override compiler flags used to add debugging + information to the executable. Normally, debugging + information is added whenever possible (i.e. unless + optimization is turned on and the compiler does not + permit debugging and optimization simultaneously). + --with-cpp C preprocessor to use (e.g. /usr/ccs/lib/cpp or cc + -E) + --with-cppflags C preprocessor flags (e.g. -I/foo or -Dfoo=bar) + --with-libs Additional libraries (e.g. -lfoo) + --with-ldflags Additional linker flags (e.g. -L/foo) + --with-site-includes=PATHS + Prepend to include search path. + --with-site-libraries=PATHS + Prepend to library search path. + --with-site-prefixes=PATHS + Prepend to include and library search paths, with + /include and /lib added. Comes after site-includes + and site-libraries, if any. + --with-site-runtime-libraries=PATHS + Prepend to the runtime library search path + --with-dynamic Link dynamically if supported by system. 'No' forces + static linking. + +Installation options +-------------------- + --with-prefix=no Don't compile the value for `prefix' into the executable. + --with-netinstall Support for installation over the internet. Only + functional on the MS Windows platforms. + --with-statedir=DIR + --with-lispdir=DIR + --with-archlibdir=DIR + --with-moduledir=DIR + --with-etcdir=DIR + --with-docdir=DIR + +Run-time path-searching options +------------------------------- + --with-site-lisp=no Allow for a site-lisp directory in the XEmacs hierarchy searched before the installation packages. - --with-site-modules Disable site-modules directory in the XEmacs + --with-site-modules=no Disable site-modules directory in the XEmacs hierarchy, which is searched before the installation modules. + --with-package-prefix=DIR + Specify packages root. + --with-package-path=PATH + Search path for package hierarchies. + --with-infopath=PATH Location of info directories + +Window-system options +--------------------- + + --with-xft Compile with support for Xft client-side font + rendering and anti-aliasing. Components that can use + Xft are `emacs' (buffers), `menubars', `tabs', and + `gauges'. Prefix component with `no' to disable its + use of Xft. Requires X11, Xft, Xrender, freetype, + and fontconfig support. Default is `noemacs, + nomenubars, notabs, nogauges'. --with-gtk Support GTK on the X Window System. (EXPERIMENTAL) --with-gnome Support GNOME on the X Window System. (EXPERIMENTAL) --with-msw Support MS Windows as a window system (only under Cygwin and MinGW). `--with-msw=no' may be needed on *nix systems with Wine installed. - --with-gcc Use GCC to compile XEmacs. - --with-dynamic Link dynamically if supported by system. 'No' forces - static linking. - --with-ncurses Use the ncurses library for tty support. - --with-dnet Compile with support for DECnet. - --with-socks Compile with support for SOCKS (an Internet proxy). + --with-toolbars Enable toolbar support. Default: yes. + --with-wmcommand Compile without realized leader window which will + keep the WM_COMMAND property. + --with-athena=TYPE Use TYPE Athena widgets (`xaw', `3d', `next', `95', + or `xpm'). + --with-menubars=TYPE Use TYPE menubars ('yes', '`no', `lucid', `motif', + `athena', `gtk', or `msw'). The Lucid widgets + emulate Motif (mostly) but are faster. *WARNING* The + Motif menubar is currently broken. Lucid menubars + are the default. + --with-scrollbars=TYPE + Use TYPE scrollbars 'yes', '`no', `lucid', `motif', + `athena', `gtk', or `msw'). Lucid scrollbars are the + default. + --with-dialogs=TYPE Use TYPE dialog boxes 'yes', '`no', `lucid', + `motif', `athena', `gtk', or `msw'). There are no + true Lucid dialogs; Motif dialogs will be used if + Motif can be found, else Athena is used. + --with-widgets=TYPE Use TYPE native widgets ('yes', '`no', `lucid', + `motif', `athena', `gtk', or `msw'). Other widget + types are currently unsupported. There are no true + Lucid widgets; Motif widgets will be used if Motif + can be found, else Athena is used. --with-dragndrop Compile in the generic drag and drop API. This is automatically added if one of the drag and drop protocols is found (currently CDE, OffiX, MSWindows, @@ -925,109 +1037,170 @@ able to use multiple X displays success- fully. If the two servers are from different vendors, the results may be unpredictable. + --with-xmu Use Xmu utilities. Default: yes. + --with-external-widget + Support XEmacs server for text widgets in other + applications. + +TTY (character terminal) options +-------------------------------- + + --with-tty Enable TTY support. Default: yes. + --with-ncurses Use the ncurses library for tty support. --with-gpm Compile in GPM mouse support for ttys. + +Image options +------------- + --with-xpm Compile with support for XPM images. PRACTICALLY REQUIRED. Although this library is nonstandard and a real hassle to build, many basic things (e.g. toolbars) depend on it, and you will run into many problems without it. - --with-xface Compile with support for X-Face mail headers. - Requires the compface package. - --with-gif Compile without the (builtin) support for GIF - images. - --with-jpeg Compile with support for JPEG images. Useful if you - are using a mail, news reader, or web browser in - XEmacs, so that JPEG images can be displayed. --with-png Compile with support for PNG images. Recommended because the images on the About page are not viewable without it. + --with-jpeg Compile with support for JPEG images. Useful if you + are using a mail, news reader, or web browser in + XEmacs, so that JPEG images can be displayed. --with-tiff Compile with support for TIFF images. Possibly useful, for the same reason as JPEG images. - --with-zlib Support inflate (de)compression internally. - --with-wmcommand Compile without realized leader window which will - keep the WM_COMMAND property. - --with-xmu Use Xmu utilities. Default: yes. - --with-purify Support memory debugging using Purify. - --with-quantify Support performance debugging using Quantify. - --with-toolbars Enable toolbar support. Default: yes. - --with-tty Enable TTY support. Default: yes. - --with-xfs Enable XFontSet support for internationalized - menubar. Incompatible with `--with-xim=motif'. - `--with-menubars=lucid' (the default) is - desirable. + --with-xface Compile with support for X-Face mail headers. + Requires the compface package. + --with-gif Compile without the (builtin) support for GIF + images. + +Sound options +------------- + + --with-sound=TYPE Compile with sound support. Valid types are + `native', `nas' and `esd'. Prefix a type with 'no' + to disable. The first type can be `none' or `all'. + `none' means `nonative,nonas,noesd'. `all' means + `native,nas,esd'. Later options override earlier + ones for the same TYPE. The default is to autodetect + all sound support except for ESD which defaults to + off. + --with-native-sound-lib Path to sound library (for systems with name + conflicts). + +Internationalization options +---------------------------- + --with-mule Compile with Mule (Multi-Lingual Emacs) support, needed to support non-Latin-1 (including Asian) languages. - --with-default-eol-detection - Turns on by default auto-detection of end-of-line - type when reading a file. Applies to those platforms - where auto-detection is off by default (non-Mule - Unix). Has no effect otherwise. + --with-xim==TYPE Enable XIM support. TYPE is `yes', `no', `xlib', or + `motif' --with-canna Support the Canna Japanese input method. Requires Mule. --with-wnn Support the Wnn Asian language input method. Requires Mule. --with-wnn6 Support the Wnn6 Asian language input method (proprietary). Requires Mule. - --with-workshop Support the Sun WorkShop (formerly Sparcworks) - development environment. - --with-sparcworks Alias for --with-workshop - --with-tooltalk Support the ToolTalk IPC protocol. + --with-xfs Enable XFontSet support for internationalized + menubar. Incompatible with `--with-xim=motif' and + `--with-xft'. `--with-menubars=lucid' (the + default) is desirable. + +File-related options +-------------------- + + --with-default-eol-detection + Turns on by default auto-detection of end-of-line + type when reading a file. Applies to those platforms + where auto-detection is off by default (non-Mule + Unix). Has no effect otherwise. + --with-clash-detection + Disable use of lock files to detect multiple edits + of the same file. + --with-zlib Support inflate (de)compression internally. + +Database options +---------------- + + --with-database=TYPE Compile with database support. Valid types are `no' + or a comma-separated list of one or more of `berkdb' + and either `dbm' or `gnudbm'. --with-ldap Support the LDAP protocol. --with-postgresql Support the PostgreSQL RDBMS. + +Mail options +------------ + + --with-mail-locking=TYPE + Specify the locking to be used by movemail to + prevent concurrent updates of mail spool files. + Valid types are `lockf', `flock', `file', `locking', + `mmdf' or `pop'. --with-pop Support POP for mail retrieval. --with-kerberos Support Kerberos-authenticated POP. --with-hesiod Support Hesiod to get the POP server host. - --with-infodock Support the Infodock version of XEmacs. Infodock is - a SourceForge project). - --with-native-sound-lib Path to sound library (for systems with name - conflicts). - --with-netinstall Support for installation over the internet. Only - functional on the MS Windows platforms. - --with-optimization Control whether compilation is optimized. By - default, optimization is on in release versions and - off in beta versions, since it can interfere with - proper stack backtraces. + +Networking options +------------------ + + --with-tooltalk Support the ToolTalk IPC protocol. + --with-socks Compile with support for SOCKS (an Internet proxy). + --with-dnet Compile with support for DECnet. --with-ipv6-cname Try IPv6 information first when canonicalizing host names. This option has no effect unless system supports getaddrinfo(3) and getnameinfo(3). - --with-site-includes Prepend to include search path. - --with-site-libraries Prepend to library search path. - --with-site-prefixes Prepend to include and library search paths, with - /include and /lib added. Comes after site-includes - and site-libraries, if any. - --with-statedir - --with-lispdir - --with-archlibdir - --with-moduledir - --with-etcdir - --with-infopath - --with-docdir - --with-site-runtime-libraries - --with-package-prefix Specify packages root. - --with-package-path Search path for package hierarchies. - --with-external-widget - Support XEmacs server for text widgets in other - applications. - --with-kkcc Enable new GC algorithms. - --with-mc-alloc Enable new allocator. - --with-union-type Use union definition of Lisp_Object type. Known to - trigger bugs in some compilers. +Memory allocation options +------------------------- + + --with-rel-alloc Enable the relocating allocator. + --with-dlmalloc Use Doug Lea's malloc implementation. + --with-system-malloc Use the system malloc, not the one distributed with + XEmacs. + --with-debug-malloc Use a debugging malloc. --with-pdump Enable portable LISP preloader. --with-dump-in-exec Enable dumping into executable (enabled by default for `pdump', not enabled by default in combination with `mc-alloc'). + --with-kkcc Enable experimental new GC algorithms. + --with-mc-alloc Enable experimental new allocator. + --with-newgc Enable new incremental garbage collector. + --with-vdb=TYPE Override auto-detection of virtual-dirty-bit + write-barrier implementation for the new garbage + collector. TYPE must be one of "auto" (for + auto-detection), "posix", "win32", "mach", or "fake" + (uses the new garbage collector but disables + incremental collections). The default is to use + auto-detection. + +Emacs Lisp options +------------------ + + --with-modules Compile in experimental support for dynamically + loaded libraries (Dynamic Shared Objects). + --with-bignum=TYPE Compile in support for bignums, ratios, or bigfloats + using library support. TYPE must be one of "gmp" + (for GNU MP), "mp" (for BSD MP), or "no" (disabled). + +Platform Specific options +------------------------- + + --with-workshop Support the Sun WorkShop (formerly Sparcworks) + development environment. + --with-sparcworks Alias for --with-workshop + --with-infodock Support the Infodock version of XEmacs. Infodock is + a SourceForge project). + +Debugging options +----------------- + --with-debug Enable additional debugging information. No time cost. - --with-assertions + --with-error-checking=TESTS + Compile with internal error-checking added. Causes + noticeable loss of speed. Valid TESTS are `extents', + `bufpos', `malloc', `gc', `types', `text', + `byte_code', `glyphs', `display', `structures'. + --with-assertions Compile in runtime assertions. --with-memory-usage-stats Enable LISP memory usage API. - --with-clash-detection - Disable use of lock files to detect multiple edits - of the same file. - --with-modules Compile in experimental support for dynamically - loaded libraries (Dynamic Shared Objects). --with-quick-build Speed up the build cycle by leaving out steps where XEmacs will still work (more or less) without them. Potentially dangerous if you don't know what you're @@ -1038,85 +1211,10 @@ lisp.h and associated files from the dependency lists, so changes to these files don't automatically cause all .c files to be rebuilt. - --with-compiler C compiler to use - --with-xemacs-compiler compiler to use to compile just the xemacs - executable and C modules. If you want to compile - XEmacs as C++, use e.g. - `--with-xemacs-compiler=g++'. This turns on a lot of - additional error-checking. - --with-cflags Compiler flags. These flags will be placed after any - flags inserted for warnings, debugging or - optimization; setting this does not disable the - insertion of those flags. Use configure settings - such as `--with-optimization=no' or - `enable-debug=no' to turn them off, or override them - with `--with-cflags-optimization', - `--with-cflags-debugging', or `with-cflags-warning'. - --with-cflags-warning Override compiler flags used to control warnings. - Normally, don't set this, as XEmacs already turns on - the maximum safe warning level. - --with-cflags-optimization=FLAGS - Override compiler flags used to control - optimization. If blank, forces no optimization; if - non-blank, forces optimization. Normally, don't set - this; XEmacs automatically sets the maximum safe - optimization flags appropriate for the compiler - being invoked. If you just want to turn optimization - on or off, use `with-optimization' instead. - --with-cflags-debugging=FLAGS - Override compiler flags used to add debugging - information to the executable. Normally, debugging - information is added whenever possible (i.e. unless - optimization is turned on and the compiler does not - permit debugging and optimization simultaneously). - --with-cpp C preprocessor to use (e.g. /usr/ccs/lib/cpp or cc - -E) - --with-cppflags C preprocessor flags (e.g. -I/foo or -Dfoo=bar) - --with-libs Additional libraries (e.g. -lfoo) - --with-ldflags Additional linker flags (e.g. -L/foo) - --with-rel-alloc Enable the relocating allocator. - --with-dlmalloc Use Doug Lea's malloc implementation. - --with-debug-malloc Use a debugging malloc. - --with-system-malloc Use the system malloc, not the one distributed with - XEmacs. - --with-database Compile with database support. Valid types are `no' - or a comma-separated list of one or more of `berkdb' - and either `dbm' or `gnudbm'. - --with-sound Compile with sound support. Valid types are - `native', `nas' and `esd'. Prefix a type with 'no' - to disable. The first type can be `none' or `all'. - `none' means `nonative,nonas,noesd'. `all' means - `native,nas,esd'. Later options override earlier - ones for the same TYPE. The default is to autodetect - all sound support except for ESD which defaults to - off. - --with-athena Use TYPE Athena widgets (xaw, 3d, next, 95, or xpm). - - --with-mail-locking Specify the locking to be used by movemail to - prevent concurrent updates of mail spool files. - Valid types are `lockf', `flock', `dot', `locking' - or `mmdf'. - --with-bignum=TYPE Compile in support for bignums, ratios, or bigfloats - using library support. TYPE must be one of "gmp" - (for GNU MP), "mp" (for BSD MP), or "no" (disabled). - --with-error-checking Compile with internal error-checking added. Causes - noticeable loss of speed. Valid types are extents, - bufpos, malloc, gc, types, text, byte_code, glyphs, - display, structures. - --with-menubars=TYPE Use TYPE menubars (lucid, motif, or no). The Lucid - widgets emulate Motif (mostly) but are faster. - *WARNING* The Motif menubar is currently broken. - Lucid menubars are the default. - --with-scrollbars=TYPE - Use TYPE scrollbars (lucid, motif, athena, or no). - Lucid scrollbars are the default. - --with-dialogs=TYPE Use TYPE dialog boxes (lucid, motif, athena, or no). - There are no true Lucid dialogs; Motif dialogs will - be used if Motif can be found, else Athena is used. - --with-widgets Use TYPE native widgets (lucid, motif, athena, or - no). Other widget types are currently unsupported. - There are no true Lucid widgets; Motif widgets will - be used if Motif can be found, else Athena is used. + --with-union-type Use union definition of Lisp_Object type. Known to + trigger bugs in some compilers. + --with-quantify Support performance debugging using Quantify. + --with-purify Support memory debugging using Purify. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1135,6 +1233,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. +Report bugs to . _ACEOF fi @@ -1230,56 +1329,59 @@ test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF +XEmacs configure 21.5 +generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -#### Configuration script for XEmacs. Largely divergent from FSF. -#### Guess values for system-dependent variables and create Makefiles. -#### Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. -#### Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc. -#### Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. -#### Copyright (C) 1993, 1994, 1995 Board of Trustees, University of Illinois. -#### Copyright (C) 1996, 1997 Sun Microsystems, Inc. -#### Copyright (C) 1995, 1996, 2002, 2003, 2004 Ben Wing. -#### Copyright (C) 2000, 2001 Martin Buchholz. -#### Copyright (C) 1998, 1999 J. Kean Johnston. -#### Copyright (C) 2005 Malcolm Purvis - -### Don't edit this script! -### This script was automatically generated by the `autoconf' program -### from the file `./configure.in'. -### To rebuild it, execute the command -### autoconf -### in the this directory. You must have autoconf version 2.50 or later. -### Note: this script has been tested only with autoconf version 2.5x. - -### This file is part of XEmacs. - -### XEmacs 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, or (at your -### option) any later version. - -### XEmacs 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 XEmacs; see the file COPYING. If not, write to the Free -### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -### 02111-1307, USA. - -### For usage, run `./configure --help' -### For more detailed information on building and installing XEmacs, -### read the file `INSTALL'. -### -### If configure succeeds, it leaves its status in config.status. -### A log of configuration tests can be found in config.log. -### If configure fails after disturbing the status quo, -### config.status is removed. +Configuration script for XEmacs. Largely divergent from FSF. +Guess values for system-dependent variables and create Makefiles. + +Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. +Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc. +Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +Copyright (C) 1993, 1994, 1995 Board of Trustees, University of Illinois. +Copyright (C) 1996, 1997 Sun Microsystems, Inc. +Copyright (C) 1995, 1996, 2002, 2003, 2004 Ben Wing. +Copyright (C) 2000, 2001 Martin Buchholz. +Copyright (C) 1998, 1999 J. Kean Johnston. +Copyright (C) 2005 Malcolm Purvis + +Don't edit this script! +This script was automatically generated by the `autoconf' program +from the file `./configure.ac'. To rebuild it, execute the command: + + autoconf + +in the this directory. You must have autoconf version 2.59. + +This file is part of XEmacs. + +XEmacs 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, or (at your +option) any later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to the Free +Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. + +For usage, run `./configure --help' +For more detailed information on building and installing XEmacs, +read the file `INSTALL'. + +If configure succeeds, it leaves its status in config.status. +A log of configuration tests can be found in config.log. +If configure fails after disturbing the status quo, + config.status is removed. _ACEOF exit 0 @@ -1289,7 +1391,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by $as_me, which was +It was created by XEmacs $as_me 21.5, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -1622,113 +1724,50 @@ + + + + + + + + progname="`echo $0 | sed 's:^\./\./:\./:'`" MAKE_SUBDIR="$MAKE_SUBDIR lib-src" && if test "$verbose" = "yes"; then echo " Appending \"lib-src\" to \$MAKE_SUBDIR"; fi INSTALL_ARCH_DEP_SUBDIR="$INSTALL_ARCH_DEP_SUBDIR lib-src" && if test "$verbose" = "yes"; then echo " Appending \"lib-src\" to \$INSTALL_ARCH_DEP_SUBDIR"; fi with_dragndrop_default="no" -# If --with-prefix or --without-prefix were given then copy the value to the -# equivalent enable_prefix variable. -if test "${with_prefix+set}" = set; then - enable_prefix="$with_prefix" -fi; -# If -enable-prefix or --disable-prefix were given then copy the value to the -# equivalent with_prefix variable. -if test "${enable_prefix+set}" = set; then - with_prefix="$enable_prefix" -fi; -# Check whether --with-prefix or --without-prefix was given. -if test "${with_prefix+set}" = set; then - enableval="$with_prefix" - withval="$with_prefix" - true -else - with_prefix=yes -fi; -# If --with-site-lisp or --without-site-lisp were given then copy the value to the -# equivalent enable_site-lisp variable. -if test "${with_site_lisp+set}" = set; then - enable_site_lisp="$with_site_lisp" -fi; -# If -enable-site-lisp or --disable-site-lisp were given then copy the value to the -# equivalent with_site-lisp variable. -if test "${enable_site_lisp+set}" = set; then - with_site_lisp="$enable_site_lisp" -fi; -# Check whether --with-site-lisp or --without-site-lisp was given. -if test "${with_site_lisp+set}" = set; then - enableval="$with_site_lisp" - withval="$with_site_lisp" - true -else - with_site_lisp=no -fi; -# If --with-site-modules or --without-site-modules were given then copy the value to the -# equivalent enable_site-modules variable. -if test "${with_site_modules+set}" = set; then - enable_site_modules="$with_site_modules" -fi; -# If -enable-site-modules or --disable-site-modules were given then copy the value to the -# equivalent with_site-modules variable. -if test "${enable_site_modules+set}" = set; then - with_site_modules="$enable_site_modules" -fi; -# Check whether --with-site-modules or --without-site-modules was given. -if test "${with_site_modules+set}" = set; then - enableval="$with_site_modules" - withval="$with_site_modules" +# If --with-compiler or --without-compiler were given then copy the value to the +# equivalent enable_compiler variable. +if test "${with_compiler+set}" = set; then + enable_compiler="$with_compiler" fi; -# If --with-gtk or --without-gtk were given then copy the value to the -# equivalent enable_gtk variable. -if test "${with_gtk+set}" = set; then - enable_gtk="$with_gtk" -fi; -# If -enable-gtk or --disable-gtk were given then copy the value to the -# equivalent with_gtk variable. -if test "${enable_gtk+set}" = set; then - with_gtk="$enable_gtk" -fi; -# Check whether --with-gtk or --without-gtk was given. -if test "${with_gtk+set}" = set; then - enableval="$with_gtk" - withval="$with_gtk" - true -else - with_gtk=no -fi; -# If --with-gnome or --without-gnome were given then copy the value to the -# equivalent enable_gnome variable. -if test "${with_gnome+set}" = set; then - enable_gnome="$with_gnome" -fi; -# If -enable-gnome or --disable-gnome were given then copy the value to the -# equivalent with_gnome variable. -if test "${enable_gnome+set}" = set; then - with_gnome="$enable_gnome" +# If -enable-compiler or --disable-compiler were given then copy the value to the +# equivalent with_compiler variable. +if test "${enable_compiler+set}" = set; then + with_compiler="$enable_compiler" fi; -# Check whether --with-gnome or --without-gnome was given. -if test "${with_gnome+set}" = set; then - enableval="$with_gnome" - withval="$with_gnome" - true -else - with_gnome=no +# Check whether --with-compiler or --without-compiler was given. +if test "${with_compiler+set}" = set; then + enableval="$with_compiler" + withval="$with_compiler" + fi; -# If --with-msw or --without-msw were given then copy the value to the -# equivalent enable_msw variable. -if test "${with_msw+set}" = set; then - enable_msw="$with_msw" +# If --with-xemacs-compiler or --without-xemacs-compiler were given then copy the value to the +# equivalent enable_xemacs-compiler variable. +if test "${with_xemacs_compiler+set}" = set; then + enable_xemacs_compiler="$with_xemacs_compiler" fi; -# If -enable-msw or --disable-msw were given then copy the value to the -# equivalent with_msw variable. -if test "${enable_msw+set}" = set; then - with_msw="$enable_msw" +# If -enable-xemacs-compiler or --disable-xemacs-compiler were given then copy the value to the +# equivalent with_xemacs-compiler variable. +if test "${enable_xemacs_compiler+set}" = set; then + with_xemacs_compiler="$enable_xemacs_compiler" fi; -# Check whether --with-msw or --without-msw was given. -if test "${with_msw+set}" = set; then - enableval="$with_msw" - withval="$with_msw" +# Check whether --with-xemacs-compiler or --without-xemacs-compiler was given. +if test "${with_xemacs_compiler+set}" = set; then + enableval="$with_xemacs_compiler" + withval="$with_xemacs_compiler" fi; # If --with-gcc or --without-gcc were given then copy the value to the @@ -1747,1040 +1786,1259 @@ withval="$with_gcc" fi; -# If --with-dynamic or --without-dynamic were given then copy the value to the -# equivalent enable_dynamic variable. -if test "${with_dynamic+set}" = set; then - enable_dynamic="$with_dynamic" +# If --with-cflags or --without-cflags were given then copy the value to the +# equivalent enable_cflags variable. +if test "${with_cflags+set}" = set; then + enable_cflags="$with_cflags" fi; -# If -enable-dynamic or --disable-dynamic were given then copy the value to the -# equivalent with_dynamic variable. -if test "${enable_dynamic+set}" = set; then - with_dynamic="$enable_dynamic" +# If -enable-cflags or --disable-cflags were given then copy the value to the +# equivalent with_cflags variable. +if test "${enable_cflags+set}" = set; then + with_cflags="$enable_cflags" fi; -# Check whether --with-dynamic or --without-dynamic was given. -if test "${with_dynamic+set}" = set; then - enableval="$with_dynamic" - withval="$with_dynamic" +# Check whether --with-cflags or --without-cflags was given. +if test "${with_cflags+set}" = set; then + enableval="$with_cflags" + withval="$with_cflags" fi; -# If --with-ncurses or --without-ncurses were given then copy the value to the -# equivalent enable_ncurses variable. -if test "${with_ncurses+set}" = set; then - enable_ncurses="$with_ncurses" +# If --with-cflags-warning or --without-cflags-warning were given then copy the value to the +# equivalent enable_cflags-warning variable. +if test "${with_cflags_warning+set}" = set; then + enable_cflags_warning="$with_cflags_warning" fi; -# If -enable-ncurses or --disable-ncurses were given then copy the value to the -# equivalent with_ncurses variable. -if test "${enable_ncurses+set}" = set; then - with_ncurses="$enable_ncurses" +# If -enable-cflags-warning or --disable-cflags-warning were given then copy the value to the +# equivalent with_cflags-warning variable. +if test "${enable_cflags_warning+set}" = set; then + with_cflags_warning="$enable_cflags_warning" fi; -# Check whether --with-ncurses or --without-ncurses was given. -if test "${with_ncurses+set}" = set; then - enableval="$with_ncurses" - withval="$with_ncurses" +# Check whether --with-cflags-warning or --without-cflags-warning was given. +if test "${with_cflags_warning+set}" = set; then + enableval="$with_cflags_warning" + withval="$with_cflags_warning" fi; -# If --with-dnet or --without-dnet were given then copy the value to the -# equivalent enable_dnet variable. -if test "${with_dnet+set}" = set; then - enable_dnet="$with_dnet" +# If --with-optimization or --without-optimization were given then copy the value to the +# equivalent enable_optimization variable. +if test "${with_optimization+set}" = set; then + enable_optimization="$with_optimization" fi; -# If -enable-dnet or --disable-dnet were given then copy the value to the -# equivalent with_dnet variable. -if test "${enable_dnet+set}" = set; then - with_dnet="$enable_dnet" +# If -enable-optimization or --disable-optimization were given then copy the value to the +# equivalent with_optimization variable. +if test "${enable_optimization+set}" = set; then + with_optimization="$enable_optimization" fi; -# Check whether --with-dnet or --without-dnet was given. -if test "${with_dnet+set}" = set; then - enableval="$with_dnet" - withval="$with_dnet" +# Check whether --with-optimization or --without-optimization was given. +if test "${with_optimization+set}" = set; then + enableval="$with_optimization" + withval="$with_optimization" fi; -# If --with-socks or --without-socks were given then copy the value to the -# equivalent enable_socks variable. -if test "${with_socks+set}" = set; then - enable_socks="$with_socks" +# If --with-cflags-optimization or --without-cflags-optimization were given then copy the value to the +# equivalent enable_cflags-optimization variable. +if test "${with_cflags_optimization+set}" = set; then + enable_cflags_optimization="$with_cflags_optimization" fi; -# If -enable-socks or --disable-socks were given then copy the value to the -# equivalent with_socks variable. -if test "${enable_socks+set}" = set; then - with_socks="$enable_socks" +# If -enable-cflags-optimization or --disable-cflags-optimization were given then copy the value to the +# equivalent with_cflags-optimization variable. +if test "${enable_cflags_optimization+set}" = set; then + with_cflags_optimization="$enable_cflags_optimization" fi; -# Check whether --with-socks or --without-socks was given. -if test "${with_socks+set}" = set; then - enableval="$with_socks" - withval="$with_socks" +# Check whether --with-cflags-optimization or --without-cflags-optimization was given. +if test "${with_cflags_optimization+set}" = set; then + enableval="$with_cflags_optimization" + withval="$with_cflags_optimization" fi; -# If --with-dragndrop or --without-dragndrop were given then copy the value to the -# equivalent enable_dragndrop variable. -if test "${with_dragndrop+set}" = set; then - enable_dragndrop="$with_dragndrop" +# If --with-cflags-debugging or --without-cflags-debugging were given then copy the value to the +# equivalent enable_cflags-debugging variable. +if test "${with_cflags_debugging+set}" = set; then + enable_cflags_debugging="$with_cflags_debugging" fi; -# If -enable-dragndrop or --disable-dragndrop were given then copy the value to the -# equivalent with_dragndrop variable. -if test "${enable_dragndrop+set}" = set; then - with_dragndrop="$enable_dragndrop" +# If -enable-cflags-debugging or --disable-cflags-debugging were given then copy the value to the +# equivalent with_cflags-debugging variable. +if test "${enable_cflags_debugging+set}" = set; then + with_cflags_debugging="$enable_cflags_debugging" fi; -# Check whether --with-dragndrop or --without-dragndrop was given. -if test "${with_dragndrop+set}" = set; then - enableval="$with_dragndrop" - withval="$with_dragndrop" +# Check whether --with-cflags-debugging or --without-cflags-debugging was given. +if test "${with_cflags_debugging+set}" = set; then + enableval="$with_cflags_debugging" + withval="$with_cflags_debugging" fi; -# If --with-cde or --without-cde were given then copy the value to the -# equivalent enable_cde variable. -if test "${with_cde+set}" = set; then - enable_cde="$with_cde" -fi; -# If -enable-cde or --disable-cde were given then copy the value to the -# equivalent with_cde variable. -if test "${enable_cde+set}" = set; then - with_cde="$enable_cde" +# If --with-cpp or --without-cpp were given then copy the value to the +# equivalent enable_cpp variable. +if test "${with_cpp+set}" = set; then + enable_cpp="$with_cpp" fi; -# Check whether --with-cde or --without-cde was given. -if test "${with_cde+set}" = set; then - enableval="$with_cde" - withval="$with_cde" - +# If -enable-cpp or --disable-cpp were given then copy the value to the +# equivalent with_cpp variable. +if test "${enable_cpp+set}" = set; then + with_cpp="$enable_cpp" fi; -# If --with-offix or --without-offix were given then copy the value to the -# equivalent enable_offix variable. -if test "${with_offix+set}" = set; then - enable_offix="$with_offix" +# Check whether --with-cpp or --without-cpp was given. +if test "${with_cpp+set}" = set; then + enableval="$with_cpp" + withval="$with_cpp" + CPP="$with_cpp" fi; -# If -enable-offix or --disable-offix were given then copy the value to the -# equivalent with_offix variable. -if test "${enable_offix+set}" = set; then - with_offix="$enable_offix" +# If --with-cppflags or --without-cppflags were given then copy the value to the +# equivalent enable_cppflags variable. +if test "${with_cppflags+set}" = set; then + enable_cppflags="$with_cppflags" fi; -# Check whether --with-offix or --without-offix was given. -if test "${with_offix+set}" = set; then - enableval="$with_offix" - withval="$with_offix" - +# If -enable-cppflags or --disable-cppflags were given then copy the value to the +# equivalent with_cppflags variable. +if test "${enable_cppflags+set}" = set; then + with_cppflags="$enable_cppflags" fi; -# If --with-gpm or --without-gpm were given then copy the value to the -# equivalent enable_gpm variable. -if test "${with_gpm+set}" = set; then - enable_gpm="$with_gpm" +# Check whether --with-cppflags or --without-cppflags was given. +if test "${with_cppflags+set}" = set; then + enableval="$with_cppflags" + withval="$with_cppflags" + CPPFLAGS="$with_cppflags" fi; -# If -enable-gpm or --disable-gpm were given then copy the value to the -# equivalent with_gpm variable. -if test "${enable_gpm+set}" = set; then - with_gpm="$enable_gpm" +# If --with-libs=LIBS or --without-libs=LIBS were given then copy the value to the +# equivalent enable_libs=LIBS variable. +if test "${with_libs=LIBS+set}" = set; then + enable_libs=LIBS="$with_libs=LIBS" +fi; +# If -enable-libs=LIBS or --disable-libs=LIBS were given then copy the value to the +# equivalent with_libs=LIBS variable. +if test "${enable_libs=LIBS+set}" = set; then + with_libs=LIBS="$enable_libs=LIBS" +fi; +# Check whether --with-libs=LIBS or --without-libs=LIBS was given. +if test "${with_libs=LIBS+set}" = set; then + enableval="$with_libs=LIBS" + withval="$with_libs=LIBS" + LIBS="$with_libs" fi; -# Check whether --with-gpm or --without-gpm was given. -if test "${with_gpm+set}" = set; then - enableval="$with_gpm" - withval="$with_gpm" - +# If --with-ldflags=FLAGS or --without-ldflags=FLAGS were given then copy the value to the +# equivalent enable_ldflags=FLAGS variable. +if test "${with_ldflags=FLAGS+set}" = set; then + enable_ldflags=FLAGS="$with_ldflags=FLAGS" +fi; +# If -enable-ldflags=FLAGS or --disable-ldflags=FLAGS were given then copy the value to the +# equivalent with_ldflags=FLAGS variable. +if test "${enable_ldflags=FLAGS+set}" = set; then + with_ldflags=FLAGS="$enable_ldflags=FLAGS" +fi; +# Check whether --with-ldflags=FLAGS or --without-ldflags=FLAGS was given. +if test "${with_ldflags=FLAGS+set}" = set; then + enableval="$with_ldflags=FLAGS" + withval="$with_ldflags=FLAGS" + LDFLAGS="$with_ldflags" fi; -# If --with-xpm or --without-xpm were given then copy the value to the -# equivalent enable_xpm variable. -if test "${with_xpm+set}" = set; then - enable_xpm="$with_xpm" +# If --with-site-includes or --without-site-includes were given then copy the value to the +# equivalent enable_site-includes variable. +if test "${with_site_includes+set}" = set; then + enable_site_includes="$with_site_includes" fi; -# If -enable-xpm or --disable-xpm were given then copy the value to the -# equivalent with_xpm variable. -if test "${enable_xpm+set}" = set; then - with_xpm="$enable_xpm" +# If -enable-site-includes or --disable-site-includes were given then copy the value to the +# equivalent with_site-includes variable. +if test "${enable_site_includes+set}" = set; then + with_site_includes="$enable_site_includes" fi; -# Check whether --with-xpm or --without-xpm was given. -if test "${with_xpm+set}" = set; then - enableval="$with_xpm" - withval="$with_xpm" +# Check whether --with-site-includes or --without-site-includes was given. +if test "${with_site_includes+set}" = set; then + enableval="$with_site_includes" + withval="$with_site_includes" fi; -# If --with-xface or --without-xface were given then copy the value to the -# equivalent enable_xface variable. -if test "${with_xface+set}" = set; then - enable_xface="$with_xface" +# If --with-site-libraries or --without-site-libraries were given then copy the value to the +# equivalent enable_site-libraries variable. +if test "${with_site_libraries+set}" = set; then + enable_site_libraries="$with_site_libraries" fi; -# If -enable-xface or --disable-xface were given then copy the value to the -# equivalent with_xface variable. -if test "${enable_xface+set}" = set; then - with_xface="$enable_xface" +# If -enable-site-libraries or --disable-site-libraries were given then copy the value to the +# equivalent with_site-libraries variable. +if test "${enable_site_libraries+set}" = set; then + with_site_libraries="$enable_site_libraries" fi; -# Check whether --with-xface or --without-xface was given. -if test "${with_xface+set}" = set; then - enableval="$with_xface" - withval="$with_xface" +# Check whether --with-site-libraries or --without-site-libraries was given. +if test "${with_site_libraries+set}" = set; then + enableval="$with_site_libraries" + withval="$with_site_libraries" fi; -# If --with-gif or --without-gif were given then copy the value to the -# equivalent enable_gif variable. -if test "${with_gif+set}" = set; then - enable_gif="$with_gif" +# If --with-site-prefixes or --without-site-prefixes were given then copy the value to the +# equivalent enable_site-prefixes variable. +if test "${with_site_prefixes+set}" = set; then + enable_site_prefixes="$with_site_prefixes" fi; -# If -enable-gif or --disable-gif were given then copy the value to the -# equivalent with_gif variable. -if test "${enable_gif+set}" = set; then - with_gif="$enable_gif" +# If -enable-site-prefixes or --disable-site-prefixes were given then copy the value to the +# equivalent with_site-prefixes variable. +if test "${enable_site_prefixes+set}" = set; then + with_site_prefixes="$enable_site_prefixes" fi; -# Check whether --with-gif or --without-gif was given. -if test "${with_gif+set}" = set; then - enableval="$with_gif" - withval="$with_gif" +# Check whether --with-site-prefixes or --without-site-prefixes was given. +if test "${with_site_prefixes+set}" = set; then + enableval="$with_site_prefixes" + withval="$with_site_prefixes" fi; -# If --with-jpeg or --without-jpeg were given then copy the value to the -# equivalent enable_jpeg variable. -if test "${with_jpeg+set}" = set; then - enable_jpeg="$with_jpeg" +# If --with-site-runtime-libraries or --without-site-runtime-libraries were given then copy the value to the +# equivalent enable_site-runtime-libraries variable. +if test "${with_site_runtime_libraries+set}" = set; then + enable_site_runtime_libraries="$with_site_runtime_libraries" fi; -# If -enable-jpeg or --disable-jpeg were given then copy the value to the -# equivalent with_jpeg variable. -if test "${enable_jpeg+set}" = set; then - with_jpeg="$enable_jpeg" +# If -enable-site-runtime-libraries or --disable-site-runtime-libraries were given then copy the value to the +# equivalent with_site-runtime-libraries variable. +if test "${enable_site_runtime_libraries+set}" = set; then + with_site_runtime_libraries="$enable_site_runtime_libraries" fi; -# Check whether --with-jpeg or --without-jpeg was given. -if test "${with_jpeg+set}" = set; then - enableval="$with_jpeg" - withval="$with_jpeg" +# Check whether --with-site-runtime-libraries or --without-site-runtime-libraries was given. +if test "${with_site_runtime_libraries+set}" = set; then + enableval="$with_site_runtime_libraries" + withval="$with_site_runtime_libraries" fi; -# If --with-png or --without-png were given then copy the value to the -# equivalent enable_png variable. -if test "${with_png+set}" = set; then - enable_png="$with_png" +# If --with-dynamic or --without-dynamic were given then copy the value to the +# equivalent enable_dynamic variable. +if test "${with_dynamic+set}" = set; then + enable_dynamic="$with_dynamic" fi; -# If -enable-png or --disable-png were given then copy the value to the -# equivalent with_png variable. -if test "${enable_png+set}" = set; then - with_png="$enable_png" +# If -enable-dynamic or --disable-dynamic were given then copy the value to the +# equivalent with_dynamic variable. +if test "${enable_dynamic+set}" = set; then + with_dynamic="$enable_dynamic" fi; -# Check whether --with-png or --without-png was given. -if test "${with_png+set}" = set; then - enableval="$with_png" - withval="$with_png" +# Check whether --with-dynamic or --without-dynamic was given. +if test "${with_dynamic+set}" = set; then + enableval="$with_dynamic" + withval="$with_dynamic" fi; -# If --with-tiff or --without-tiff were given then copy the value to the -# equivalent enable_tiff variable. -if test "${with_tiff+set}" = set; then - enable_tiff="$with_tiff" + +# If --with-prefix or --without-prefix were given then copy the value to the +# equivalent enable_prefix variable. +if test "${with_prefix+set}" = set; then + enable_prefix="$with_prefix" fi; -# If -enable-tiff or --disable-tiff were given then copy the value to the -# equivalent with_tiff variable. -if test "${enable_tiff+set}" = set; then - with_tiff="$enable_tiff" +# If -enable-prefix or --disable-prefix were given then copy the value to the +# equivalent with_prefix variable. +if test "${enable_prefix+set}" = set; then + with_prefix="$enable_prefix" fi; -# Check whether --with-tiff or --without-tiff was given. -if test "${with_tiff+set}" = set; then - enableval="$with_tiff" - withval="$with_tiff" - +# Check whether --with-prefix or --without-prefix was given. +if test "${with_prefix+set}" = set; then + enableval="$with_prefix" + withval="$with_prefix" + true +else + with_prefix=yes fi; -# If --with-zlib or --without-zlib were given then copy the value to the -# equivalent enable_zlib variable. -if test "${with_zlib+set}" = set; then - enable_zlib="$with_zlib" +# If --with-netinstall or --without-netinstall were given then copy the value to the +# equivalent enable_netinstall variable. +if test "${with_netinstall+set}" = set; then + enable_netinstall="$with_netinstall" fi; -# If -enable-zlib or --disable-zlib were given then copy the value to the -# equivalent with_zlib variable. -if test "${enable_zlib+set}" = set; then - with_zlib="$enable_zlib" +# If -enable-netinstall or --disable-netinstall were given then copy the value to the +# equivalent with_netinstall variable. +if test "${enable_netinstall+set}" = set; then + with_netinstall="$enable_netinstall" fi; -# Check whether --with-zlib or --without-zlib was given. -if test "${with_zlib+set}" = set; then - enableval="$with_zlib" - withval="$with_zlib" +# Check whether --with-netinstall or --without-netinstall was given. +if test "${with_netinstall+set}" = set; then + enableval="$with_netinstall" + withval="$with_netinstall" +else + with_netinstall="no" fi; -# If --with-wmcommand or --without-wmcommand were given then copy the value to the -# equivalent enable_wmcommand variable. -if test "${with_wmcommand+set}" = set; then - enable_wmcommand="$with_wmcommand" +# If --with-statedir or --without-statedir were given then copy the value to the +# equivalent enable_statedir variable. +if test "${with_statedir+set}" = set; then + enable_statedir="$with_statedir" fi; -# If -enable-wmcommand or --disable-wmcommand were given then copy the value to the -# equivalent with_wmcommand variable. -if test "${enable_wmcommand+set}" = set; then - with_wmcommand="$enable_wmcommand" +# If -enable-statedir or --disable-statedir were given then copy the value to the +# equivalent with_statedir variable. +if test "${enable_statedir+set}" = set; then + with_statedir="$enable_statedir" fi; -# Check whether --with-wmcommand or --without-wmcommand was given. -if test "${with_wmcommand+set}" = set; then - enableval="$with_wmcommand" - withval="$with_wmcommand" +# Check whether --with-statedir or --without-statedir was given. +if test "${with_statedir+set}" = set; then + enableval="$with_statedir" + withval="$with_statedir" +else + with_statedir='${prefix}/lib' fi; -# If --with-xmu or --without-xmu were given then copy the value to the -# equivalent enable_xmu variable. -if test "${with_xmu+set}" = set; then - enable_xmu="$with_xmu" +# If --with-lispdir or --without-lispdir were given then copy the value to the +# equivalent enable_lispdir variable. +if test "${with_lispdir+set}" = set; then + enable_lispdir="$with_lispdir" fi; -# If -enable-xmu or --disable-xmu were given then copy the value to the -# equivalent with_xmu variable. -if test "${enable_xmu+set}" = set; then - with_xmu="$enable_xmu" +# If -enable-lispdir or --disable-lispdir were given then copy the value to the +# equivalent with_lispdir variable. +if test "${enable_lispdir+set}" = set; then + with_lispdir="$enable_lispdir" fi; -# Check whether --with-xmu or --without-xmu was given. -if test "${with_xmu+set}" = set; then - enableval="$with_xmu" - withval="$with_xmu" +# Check whether --with-lispdir or --without-lispdir was given. +if test "${with_lispdir+set}" = set; then + enableval="$with_lispdir" + withval="$with_lispdir" + cat >>confdefs.h <<\_ACEOF +#define LISPDIR_USER_DEFINED 1 +_ACEOF +else + with_lispdir='${datadir}/${instvardir}/lisp' fi; -# If --with-purify or --without-purify were given then copy the value to the -# equivalent enable_purify variable. -if test "${with_purify+set}" = set; then - enable_purify="$with_purify" +# If --with-archlibdir or --without-archlibdir were given then copy the value to the +# equivalent enable_archlibdir variable. +if test "${with_archlibdir+set}" = set; then + enable_archlibdir="$with_archlibdir" fi; -# If -enable-purify or --disable-purify were given then copy the value to the -# equivalent with_purify variable. -if test "${enable_purify+set}" = set; then - with_purify="$enable_purify" +# If -enable-archlibdir or --disable-archlibdir were given then copy the value to the +# equivalent with_archlibdir variable. +if test "${enable_archlibdir+set}" = set; then + with_archlibdir="$enable_archlibdir" fi; -# Check whether --with-purify or --without-purify was given. -if test "${with_purify+set}" = set; then - enableval="$with_purify" - withval="$with_purify" +# Check whether --with-archlibdir or --without-archlibdir was given. +if test "${with_archlibdir+set}" = set; then + enableval="$with_archlibdir" + withval="$with_archlibdir" + cat >>confdefs.h <<\_ACEOF +#define ARCHLIBDIR_USER_DEFINED 1 +_ACEOF +else + with_archlibdir='${libdir}/${instvardir}/${configuration}' fi; -# If --with-quantify or --without-quantify were given then copy the value to the -# equivalent enable_quantify variable. -if test "${with_quantify+set}" = set; then - enable_quantify="$with_quantify" +# If --with-moduledir or --without-moduledir were given then copy the value to the +# equivalent enable_moduledir variable. +if test "${with_moduledir+set}" = set; then + enable_moduledir="$with_moduledir" fi; -# If -enable-quantify or --disable-quantify were given then copy the value to the -# equivalent with_quantify variable. -if test "${enable_quantify+set}" = set; then - with_quantify="$enable_quantify" +# If -enable-moduledir or --disable-moduledir were given then copy the value to the +# equivalent with_moduledir variable. +if test "${enable_moduledir+set}" = set; then + with_moduledir="$enable_moduledir" fi; -# Check whether --with-quantify or --without-quantify was given. -if test "${with_quantify+set}" = set; then - enableval="$with_quantify" - withval="$with_quantify" +# Check whether --with-moduledir or --without-moduledir was given. +if test "${with_moduledir+set}" = set; then + enableval="$with_moduledir" + withval="$with_moduledir" + cat >>confdefs.h <<\_ACEOF +#define MODULEDIR_USER_DEFINED 1 +_ACEOF +else + with_moduledir='${libdir}/${instvardir}/${configuration}/modules' fi; -# If --with-toolbars or --without-toolbars were given then copy the value to the -# equivalent enable_toolbars variable. -if test "${with_toolbars+set}" = set; then - enable_toolbars="$with_toolbars" +# If --with-etcdir or --without-etcdir were given then copy the value to the +# equivalent enable_etcdir variable. +if test "${with_etcdir+set}" = set; then + enable_etcdir="$with_etcdir" fi; -# If -enable-toolbars or --disable-toolbars were given then copy the value to the -# equivalent with_toolbars variable. -if test "${enable_toolbars+set}" = set; then - with_toolbars="$enable_toolbars" +# If -enable-etcdir or --disable-etcdir were given then copy the value to the +# equivalent with_etcdir variable. +if test "${enable_etcdir+set}" = set; then + with_etcdir="$enable_etcdir" fi; -# Check whether --with-toolbars or --without-toolbars was given. -if test "${with_toolbars+set}" = set; then - enableval="$with_toolbars" - withval="$with_toolbars" +# Check whether --with-etcdir or --without-etcdir was given. +if test "${with_etcdir+set}" = set; then + enableval="$with_etcdir" + withval="$with_etcdir" + cat >>confdefs.h <<\_ACEOF +#define ETCDIR_USER_DEFINED 1 +_ACEOF +else + with_etcdir='${datadir}/${instvardir}/etc' fi; -# If --with-tty or --without-tty were given then copy the value to the -# equivalent enable_tty variable. -if test "${with_tty+set}" = set; then - enable_tty="$with_tty" +# If --with-docdir or --without-docdir were given then copy the value to the +# equivalent enable_docdir variable. +if test "${with_docdir+set}" = set; then + enable_docdir="$with_docdir" fi; -# If -enable-tty or --disable-tty were given then copy the value to the -# equivalent with_tty variable. -if test "${enable_tty+set}" = set; then - with_tty="$enable_tty" +# If -enable-docdir or --disable-docdir were given then copy the value to the +# equivalent with_docdir variable. +if test "${enable_docdir+set}" = set; then + with_docdir="$enable_docdir" fi; -# Check whether --with-tty or --without-tty was given. -if test "${with_tty+set}" = set; then - enableval="$with_tty" - withval="$with_tty" +# Check whether --with-docdir or --without-docdir was given. +if test "${with_docdir+set}" = set; then + enableval="$with_docdir" + withval="$with_docdir" + cat >>confdefs.h <<\_ACEOF +#define DOCDIR_USER_DEFINED 1 +_ACEOF +else + with_docdir='${archlibdir}' fi; -# If --with-xfs or --without-xfs were given then copy the value to the -# equivalent enable_xfs variable. -if test "${with_xfs+set}" = set; then - enable_xfs="$with_xfs" + +# If --with-site-lisp or --without-site-lisp were given then copy the value to the +# equivalent enable_site-lisp variable. +if test "${with_site_lisp+set}" = set; then + enable_site_lisp="$with_site_lisp" fi; -# If -enable-xfs or --disable-xfs were given then copy the value to the -# equivalent with_xfs variable. -if test "${enable_xfs+set}" = set; then - with_xfs="$enable_xfs" +# If -enable-site-lisp or --disable-site-lisp were given then copy the value to the +# equivalent with_site-lisp variable. +if test "${enable_site_lisp+set}" = set; then + with_site_lisp="$enable_site_lisp" fi; -# Check whether --with-xfs or --without-xfs was given. -if test "${with_xfs+set}" = set; then - enableval="$with_xfs" - withval="$with_xfs" - +# Check whether --with-site-lisp or --without-site-lisp was given. +if test "${with_site_lisp+set}" = set; then + enableval="$with_site_lisp" + withval="$with_site_lisp" + true +else + with_site_lisp=no fi; -# If --with-mule or --without-mule were given then copy the value to the -# equivalent enable_mule variable. -if test "${with_mule+set}" = set; then - enable_mule="$with_mule" +# If --with-site-modules or --without-site-modules were given then copy the value to the +# equivalent enable_site-modules variable. +if test "${with_site_modules+set}" = set; then + enable_site_modules="$with_site_modules" fi; -# If -enable-mule or --disable-mule were given then copy the value to the -# equivalent with_mule variable. -if test "${enable_mule+set}" = set; then - with_mule="$enable_mule" +# If -enable-site-modules or --disable-site-modules were given then copy the value to the +# equivalent with_site-modules variable. +if test "${enable_site_modules+set}" = set; then + with_site_modules="$enable_site_modules" fi; -# Check whether --with-mule or --without-mule was given. -if test "${with_mule+set}" = set; then - enableval="$with_mule" - withval="$with_mule" +# Check whether --with-site-modules or --without-site-modules was given. +if test "${with_site_modules+set}" = set; then + enableval="$with_site_modules" + withval="$with_site_modules" fi; -# If --with-default-eol-detection or --without-default-eol-detection were given then copy the value to the -# equivalent enable_default-eol-detection variable. -if test "${with_default_eol_detection+set}" = set; then - enable_default_eol_detection="$with_default_eol_detection" +# If --with-package-prefix or --without-package-prefix were given then copy the value to the +# equivalent enable_package-prefix variable. +if test "${with_package_prefix+set}" = set; then + enable_package_prefix="$with_package_prefix" fi; -# If -enable-default-eol-detection or --disable-default-eol-detection were given then copy the value to the -# equivalent with_default-eol-detection variable. -if test "${enable_default_eol_detection+set}" = set; then - with_default_eol_detection="$enable_default_eol_detection" +# If -enable-package-prefix or --disable-package-prefix were given then copy the value to the +# equivalent with_package-prefix variable. +if test "${enable_package_prefix+set}" = set; then + with_package_prefix="$enable_package_prefix" fi; -# Check whether --with-default-eol-detection or --without-default-eol-detection was given. -if test "${with_default_eol_detection+set}" = set; then - enableval="$with_default_eol_detection" - withval="$with_default_eol_detection" +# Check whether --with-package-prefix or --without-package-prefix was given. +if test "${with_package_prefix+set}" = set; then + enableval="$with_package_prefix" + withval="$with_package_prefix" + cat >>confdefs.h <<\_ACEOF +#define PACKAGE_PATH_USER_DEFINED 1 +_ACEOF fi; -# If --with-canna or --without-canna were given then copy the value to the -# equivalent enable_canna variable. -if test "${with_canna+set}" = set; then - enable_canna="$with_canna" +# If --with-package-path or --without-package-path were given then copy the value to the +# equivalent enable_package-path variable. +if test "${with_package_path+set}" = set; then + enable_package_path="$with_package_path" fi; -# If -enable-canna or --disable-canna were given then copy the value to the -# equivalent with_canna variable. -if test "${enable_canna+set}" = set; then - with_canna="$enable_canna" +# If -enable-package-path or --disable-package-path were given then copy the value to the +# equivalent with_package-path variable. +if test "${enable_package_path+set}" = set; then + with_package_path="$enable_package_path" fi; -# Check whether --with-canna or --without-canna was given. -if test "${with_canna+set}" = set; then - enableval="$with_canna" - withval="$with_canna" +# Check whether --with-package-path or --without-package-path was given. +if test "${with_package_path+set}" = set; then + enableval="$with_package_path" + withval="$with_package_path" + cat >>confdefs.h <<\_ACEOF +#define PACKAGE_PATH_USER_DEFINED 1 +_ACEOF fi; -# If --with-wnn or --without-wnn were given then copy the value to the -# equivalent enable_wnn variable. -if test "${with_wnn+set}" = set; then - enable_wnn="$with_wnn" -fi; -# If -enable-wnn or --disable-wnn were given then copy the value to the -# equivalent with_wnn variable. -if test "${enable_wnn+set}" = set; then - with_wnn="$enable_wnn" -fi; -# Check whether --with-wnn or --without-wnn was given. -if test "${with_wnn+set}" = set; then - enableval="$with_wnn" - withval="$with_wnn" - -fi; -# If --with-wnn6 or --without-wnn6 were given then copy the value to the -# equivalent enable_wnn6 variable. -if test "${with_wnn6+set}" = set; then - enable_wnn6="$with_wnn6" +# If --with-infopath or --without-infopath were given then copy the value to the +# equivalent enable_infopath variable. +if test "${with_infopath+set}" = set; then + enable_infopath="$with_infopath" fi; -# If -enable-wnn6 or --disable-wnn6 were given then copy the value to the -# equivalent with_wnn6 variable. -if test "${enable_wnn6+set}" = set; then - with_wnn6="$enable_wnn6" +# If -enable-infopath or --disable-infopath were given then copy the value to the +# equivalent with_infopath variable. +if test "${enable_infopath+set}" = set; then + with_infopath="$enable_infopath" fi; -# Check whether --with-wnn6 or --without-wnn6 was given. -if test "${with_wnn6+set}" = set; then - enableval="$with_wnn6" - withval="$with_wnn6" +# Check whether --with-infopath or --without-infopath was given. +if test "${with_infopath+set}" = set; then + enableval="$with_infopath" + withval="$with_infopath" + cat >>confdefs.h <<\_ACEOF +#define INFOPATH_USER_DEFINED 1 +_ACEOF fi; -# If --with-workshop or --without-workshop were given then copy the value to the -# equivalent enable_workshop variable. -if test "${with_workshop+set}" = set; then - enable_workshop="$with_workshop" -fi; -# If -enable-workshop or --disable-workshop were given then copy the value to the -# equivalent with_workshop variable. -if test "${enable_workshop+set}" = set; then - with_workshop="$enable_workshop" -fi; -# Check whether --with-workshop or --without-workshop was given. -if test "${with_workshop+set}" = set; then - enableval="$with_workshop" - withval="$with_workshop" -fi; -# If --with-sparcworks or --without-sparcworks were given then copy the value to the -# equivalent enable_sparcworks variable. -if test "${with_sparcworks+set}" = set; then - enable_sparcworks="$with_sparcworks" -fi; -# If -enable-sparcworks or --disable-sparcworks were given then copy the value to the -# equivalent with_sparcworks variable. -if test "${enable_sparcworks+set}" = set; then - with_sparcworks="$enable_sparcworks" -fi; -# Check whether --with-sparcworks or --without-sparcworks was given. -if test "${with_sparcworks+set}" = set; then - enableval="$with_sparcworks" - withval="$with_sparcworks" +_xft_notfirst="" +_xft_emacs_default=no +_xft_menubars_default=no +_xft_tabs_default=no +_xft_gauges_default=no +_xft_types="emacs menubars tabs gauges" +_xft_default="noemacs,nomenubars,notabs,nogauges" + +# If --with-xft or --without-xft were given then copy the value to the +# equivalent enable_xft variable. +if test "${with_xft+set}" = set; then + enable_xft="$with_xft" +fi; +# If -enable-xft or --disable-xft were given then copy the value to the +# equivalent with_xft variable. +if test "${enable_xft+set}" = set; then + with_xft="$enable_xft" +fi; +# Check whether --with-xft or --without-xft was given. +if test "${with_xft+set}" = set; then + enableval="$with_xft" + withval="$with_xft" + _xft_all_default="" +_require_xft="" +case "$with_xft" in + n | no | non | none ) _xft_all_default=no ;; + n,* | no,* | non,* | none,* ) _xft_all_default=no ;; + a | al | all | both ) _xft_all_default=yes ;; + a,* | al,* | all,* | both,* ) _xft_all_default=yes ;; + y | yes ) _require_xft=yes ;; +esac +if test -n "$_xft_all_default$_require_xft"; then + _with_xft_args=`echo $with_xft | sed -e 's/^[a-z]*\(,\(.*\)\)\{0,1\}$/\2/'` +else + _with_xft_args=$with_xft +fi +for y in $_xft_types; do + if test -n "$_xft_all_default" ; then + eval "with_xft_${y}=$_xft_all_default" + else + eval "with_xft_$y=\$_xft_${y}_default" + fi +done +for x in `echo "$_with_xft_args" | sed -e 's/,/ /g'` ; do + _xft_found="" + for y in $_xft_types; do + if test "$x" = "$y"; then + _xft_found=yes + eval "with_xft_$y=yes" + elif test "$x" = "no$y"; then + _xft_found=yes + eval "with_xft_$y=no" + fi + done + test -z "$_xft_found" && \ + (echo "$progname: Usage error:" +echo " " "\ +Invalid type list supplied. Valid types for the --with-xft option are: + $_xft_types. + A prefix of \"no\" (eg, \"notype\" for \"type\") turns a type off. + Types not explicitly specified or negated take their defaults. + The list of defaults is \"$_xft_default\". Prefixing \`all' or + \`none' to the list sets all defaults to on and off respectively. + \`yes' as the sole argument is equivalent to omitting the argument." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 +done +for y in $_xft_types; do + eval "enable_xft_$y=\$with_xft_$y" + unset _xft_${y}_default +done +unset _xft_types _xft_default _xft_all_default _xft_use_defaults +unset _with_xft_args _xft_found x y _require_xft + + + +else + +# set default for each type +for y in $_xft_types; do + eval "with_xft_$y=\$_xft_${y}_default" + eval "enable_xft_$y=\$_xft_${y}_default" + unset _xft_${y}_default +done fi; -# If --with-tooltalk or --without-tooltalk were given then copy the value to the -# equivalent enable_tooltalk variable. -if test "${with_tooltalk+set}" = set; then - enable_tooltalk="$with_tooltalk" +# If --with-gtk or --without-gtk were given then copy the value to the +# equivalent enable_gtk variable. +if test "${with_gtk+set}" = set; then + enable_gtk="$with_gtk" fi; -# If -enable-tooltalk or --disable-tooltalk were given then copy the value to the -# equivalent with_tooltalk variable. -if test "${enable_tooltalk+set}" = set; then - with_tooltalk="$enable_tooltalk" +# If -enable-gtk or --disable-gtk were given then copy the value to the +# equivalent with_gtk variable. +if test "${enable_gtk+set}" = set; then + with_gtk="$enable_gtk" fi; -# Check whether --with-tooltalk or --without-tooltalk was given. -if test "${with_tooltalk+set}" = set; then - enableval="$with_tooltalk" - withval="$with_tooltalk" - +# Check whether --with-gtk or --without-gtk was given. +if test "${with_gtk+set}" = set; then + enableval="$with_gtk" + withval="$with_gtk" + true +else + with_gtk=no fi; -# If --with-ldap or --without-ldap were given then copy the value to the -# equivalent enable_ldap variable. -if test "${with_ldap+set}" = set; then - enable_ldap="$with_ldap" +# If --with-gnome or --without-gnome were given then copy the value to the +# equivalent enable_gnome variable. +if test "${with_gnome+set}" = set; then + enable_gnome="$with_gnome" fi; -# If -enable-ldap or --disable-ldap were given then copy the value to the -# equivalent with_ldap variable. -if test "${enable_ldap+set}" = set; then - with_ldap="$enable_ldap" +# If -enable-gnome or --disable-gnome were given then copy the value to the +# equivalent with_gnome variable. +if test "${enable_gnome+set}" = set; then + with_gnome="$enable_gnome" fi; -# Check whether --with-ldap or --without-ldap was given. -if test "${with_ldap+set}" = set; then - enableval="$with_ldap" - withval="$with_ldap" - +# Check whether --with-gnome or --without-gnome was given. +if test "${with_gnome+set}" = set; then + enableval="$with_gnome" + withval="$with_gnome" + true +else + with_gnome=no fi; -# If --with-postgresql or --without-postgresql were given then copy the value to the -# equivalent enable_postgresql variable. -if test "${with_postgresql+set}" = set; then - enable_postgresql="$with_postgresql" +# If --with-msw or --without-msw were given then copy the value to the +# equivalent enable_msw variable. +if test "${with_msw+set}" = set; then + enable_msw="$with_msw" fi; -# If -enable-postgresql or --disable-postgresql were given then copy the value to the -# equivalent with_postgresql variable. -if test "${enable_postgresql+set}" = set; then - with_postgresql="$enable_postgresql" +# If -enable-msw or --disable-msw were given then copy the value to the +# equivalent with_msw variable. +if test "${enable_msw+set}" = set; then + with_msw="$enable_msw" fi; -# Check whether --with-postgresql or --without-postgresql was given. -if test "${with_postgresql+set}" = set; then - enableval="$with_postgresql" - withval="$with_postgresql" +# Check whether --with-msw or --without-msw was given. +if test "${with_msw+set}" = set; then + enableval="$with_msw" + withval="$with_msw" fi; -# If --with-pop or --without-pop were given then copy the value to the -# equivalent enable_pop variable. -if test "${with_pop+set}" = set; then - enable_pop="$with_pop" +# If --with-toolbars or --without-toolbars were given then copy the value to the +# equivalent enable_toolbars variable. +if test "${with_toolbars+set}" = set; then + enable_toolbars="$with_toolbars" fi; -# If -enable-pop or --disable-pop were given then copy the value to the -# equivalent with_pop variable. -if test "${enable_pop+set}" = set; then - with_pop="$enable_pop" +# If -enable-toolbars or --disable-toolbars were given then copy the value to the +# equivalent with_toolbars variable. +if test "${enable_toolbars+set}" = set; then + with_toolbars="$enable_toolbars" fi; -# Check whether --with-pop or --without-pop was given. -if test "${with_pop+set}" = set; then - enableval="$with_pop" - withval="$with_pop" +# Check whether --with-toolbars or --without-toolbars was given. +if test "${with_toolbars+set}" = set; then + enableval="$with_toolbars" + withval="$with_toolbars" fi; -# If --with-kerberos or --without-kerberos were given then copy the value to the -# equivalent enable_kerberos variable. -if test "${with_kerberos+set}" = set; then - enable_kerberos="$with_kerberos" +# If --with-wmcommand or --without-wmcommand were given then copy the value to the +# equivalent enable_wmcommand variable. +if test "${with_wmcommand+set}" = set; then + enable_wmcommand="$with_wmcommand" fi; -# If -enable-kerberos or --disable-kerberos were given then copy the value to the -# equivalent with_kerberos variable. -if test "${enable_kerberos+set}" = set; then - with_kerberos="$enable_kerberos" +# If -enable-wmcommand or --disable-wmcommand were given then copy the value to the +# equivalent with_wmcommand variable. +if test "${enable_wmcommand+set}" = set; then + with_wmcommand="$enable_wmcommand" fi; -# Check whether --with-kerberos or --without-kerberos was given. -if test "${with_kerberos+set}" = set; then - enableval="$with_kerberos" - withval="$with_kerberos" +# Check whether --with-wmcommand or --without-wmcommand was given. +if test "${with_wmcommand+set}" = set; then + enableval="$with_wmcommand" + withval="$with_wmcommand" fi; -# If --with-hesiod or --without-hesiod were given then copy the value to the -# equivalent enable_hesiod variable. -if test "${with_hesiod+set}" = set; then - enable_hesiod="$with_hesiod" + +# If --with-athena or --without-athena were given then copy the value to the +# equivalent enable_athena variable. +if test "${with_athena+set}" = set; then + enable_athena="$with_athena" fi; -# If -enable-hesiod or --disable-hesiod were given then copy the value to the -# equivalent with_hesiod variable. -if test "${enable_hesiod+set}" = set; then - with_hesiod="$enable_hesiod" +# If -enable-athena or --disable-athena were given then copy the value to the +# equivalent with_athena variable. +if test "${enable_athena+set}" = set; then + with_athena="$enable_athena" fi; -# Check whether --with-hesiod or --without-hesiod was given. -if test "${with_hesiod+set}" = set; then - enableval="$with_hesiod" - withval="$with_hesiod" +# Check whether --with-athena or --without-athena was given. +if test "${with_athena+set}" = set; then + enableval="$with_athena" + withval="$with_athena" + _athena_bogus=yes + for x in xaw 3d next 95 xpm ; do + if test $x = $with_athena ; then + _athena_bogus=no + fi + done + if test "$_athena_bogus" = "yes" ; then + (echo "$progname: Usage error:" +echo " " "The --with-athena option must have one of these values: \`xaw',\`3d',\`next',\`95',\`xpm'." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 + fi +unset _athena_bogus + + fi; -# If --with-infodock or --without-infodock were given then copy the value to the -# equivalent enable_infodock variable. -if test "${with_infodock+set}" = set; then - enable_infodock="$with_infodock" +# If --with-menubars or --without-menubars were given then copy the value to the +# equivalent enable_menubars variable. +if test "${with_menubars+set}" = set; then + enable_menubars="$with_menubars" fi; -# If -enable-infodock or --disable-infodock were given then copy the value to the -# equivalent with_infodock variable. -if test "${enable_infodock+set}" = set; then - with_infodock="$enable_infodock" +# If -enable-menubars or --disable-menubars were given then copy the value to the +# equivalent with_menubars variable. +if test "${enable_menubars+set}" = set; then + with_menubars="$enable_menubars" fi; -# Check whether --with-infodock or --without-infodock was given. -if test "${with_infodock+set}" = set; then - enableval="$with_infodock" - withval="$with_infodock" +# Check whether --with-menubars or --without-menubars was given. +if test "${with_menubars+set}" = set; then + enableval="$with_menubars" + withval="$with_menubars" + _menubars_bogus=yes + for x in yes no lucid motif athena gtk msw ; do + if test $x = $with_menubars ; then + _menubars_bogus=no + fi + done + if test "$_menubars_bogus" = "yes" ; then + (echo "$progname: Usage error:" +echo " " "The --with-menubars option must have one of these values: \`yes',\`no',\`lucid',\`motif',\`athena',\`gtk',\`msw'." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 + fi +unset _menubars_bogus + + fi; -# If --with-native-sound-lib or --without-native-sound-lib were given then copy the value to the -# equivalent enable_native-sound-lib variable. -if test "${with_native_sound_lib+set}" = set; then - enable_native_sound_lib="$with_native_sound_lib" + +# If --with-scrollbars or --without-scrollbars were given then copy the value to the +# equivalent enable_scrollbars variable. +if test "${with_scrollbars+set}" = set; then + enable_scrollbars="$with_scrollbars" fi; -# If -enable-native-sound-lib or --disable-native-sound-lib were given then copy the value to the -# equivalent with_native-sound-lib variable. -if test "${enable_native_sound_lib+set}" = set; then - with_native_sound_lib="$enable_native_sound_lib" +# If -enable-scrollbars or --disable-scrollbars were given then copy the value to the +# equivalent with_scrollbars variable. +if test "${enable_scrollbars+set}" = set; then + with_scrollbars="$enable_scrollbars" fi; -# Check whether --with-native-sound-lib or --without-native-sound-lib was given. -if test "${with_native_sound_lib+set}" = set; then - enableval="$with_native_sound_lib" - withval="$with_native_sound_lib" +# Check whether --with-scrollbars or --without-scrollbars was given. +if test "${with_scrollbars+set}" = set; then + enableval="$with_scrollbars" + withval="$with_scrollbars" + _scrollbars_bogus=yes + for x in yes no lucid motif athena gtk msw ; do + if test $x = $with_scrollbars ; then + _scrollbars_bogus=no + fi + done + if test "$_scrollbars_bogus" = "yes" ; then + (echo "$progname: Usage error:" +echo " " "The --with-scrollbars option must have one of these values: \`yes',\`no',\`lucid',\`motif',\`athena',\`gtk',\`msw'." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 + fi +unset _scrollbars_bogus + + fi; -# If --with-netinstall or --without-netinstall were given then copy the value to the -# equivalent enable_netinstall variable. -if test "${with_netinstall+set}" = set; then - enable_netinstall="$with_netinstall" + +# If --with-dialogs or --without-dialogs were given then copy the value to the +# equivalent enable_dialogs variable. +if test "${with_dialogs+set}" = set; then + enable_dialogs="$with_dialogs" fi; -# If -enable-netinstall or --disable-netinstall were given then copy the value to the -# equivalent with_netinstall variable. -if test "${enable_netinstall+set}" = set; then - with_netinstall="$enable_netinstall" +# If -enable-dialogs or --disable-dialogs were given then copy the value to the +# equivalent with_dialogs variable. +if test "${enable_dialogs+set}" = set; then + with_dialogs="$enable_dialogs" fi; -# Check whether --with-netinstall or --without-netinstall was given. -if test "${with_netinstall+set}" = set; then - enableval="$with_netinstall" - withval="$with_netinstall" +# Check whether --with-dialogs or --without-dialogs was given. +if test "${with_dialogs+set}" = set; then + enableval="$with_dialogs" + withval="$with_dialogs" + _dialogs_bogus=yes + for x in yes no lucid motif athena gtk msw ; do + if test $x = $with_dialogs ; then + _dialogs_bogus=no + fi + done + if test "$_dialogs_bogus" = "yes" ; then + (echo "$progname: Usage error:" +echo " " "The --with-dialogs option must have one of these values: \`yes',\`no',\`lucid',\`motif',\`athena',\`gtk',\`msw'." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 + fi +unset _dialogs_bogus + + -else - with_netinstall="no" fi; -# If --with-optimization or --without-optimization were given then copy the value to the -# equivalent enable_optimization variable. -if test "${with_optimization+set}" = set; then - enable_optimization="$with_optimization" + +# If --with-widgets or --without-widgets were given then copy the value to the +# equivalent enable_widgets variable. +if test "${with_widgets+set}" = set; then + enable_widgets="$with_widgets" fi; -# If -enable-optimization or --disable-optimization were given then copy the value to the -# equivalent with_optimization variable. -if test "${enable_optimization+set}" = set; then - with_optimization="$enable_optimization" +# If -enable-widgets or --disable-widgets were given then copy the value to the +# equivalent with_widgets variable. +if test "${enable_widgets+set}" = set; then + with_widgets="$enable_widgets" fi; -# Check whether --with-optimization or --without-optimization was given. -if test "${with_optimization+set}" = set; then - enableval="$with_optimization" - withval="$with_optimization" +# Check whether --with-widgets or --without-widgets was given. +if test "${with_widgets+set}" = set; then + enableval="$with_widgets" + withval="$with_widgets" + _widgets_bogus=yes + for x in yes no lucid motif athena gtk msw ; do + if test $x = $with_widgets ; then + _widgets_bogus=no + fi + done + if test "$_widgets_bogus" = "yes" ; then + (echo "$progname: Usage error:" +echo " " "The --with-widgets option must have one of these values: \`yes',\`no',\`lucid',\`motif',\`athena',\`gtk',\`msw'." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 + fi +unset _widgets_bogus + + fi; -# If --with-ipv6-cname or --without-ipv6-cname were given then copy the value to the -# equivalent enable_ipv6-cname variable. -if test "${with_ipv6_cname+set}" = set; then - enable_ipv6_cname="$with_ipv6_cname" +# If --with-dragndrop or --without-dragndrop were given then copy the value to the +# equivalent enable_dragndrop variable. +if test "${with_dragndrop+set}" = set; then + enable_dragndrop="$with_dragndrop" fi; -# If -enable-ipv6-cname or --disable-ipv6-cname were given then copy the value to the -# equivalent with_ipv6-cname variable. -if test "${enable_ipv6_cname+set}" = set; then - with_ipv6_cname="$enable_ipv6_cname" +# If -enable-dragndrop or --disable-dragndrop were given then copy the value to the +# equivalent with_dragndrop variable. +if test "${enable_dragndrop+set}" = set; then + with_dragndrop="$enable_dragndrop" fi; -# Check whether --with-ipv6-cname or --without-ipv6-cname was given. -if test "${with_ipv6_cname+set}" = set; then - enableval="$with_ipv6_cname" - withval="$with_ipv6_cname" +# Check whether --with-dragndrop or --without-dragndrop was given. +if test "${with_dragndrop+set}" = set; then + enableval="$with_dragndrop" + withval="$with_dragndrop" -else - with_ipv6_cname="no" fi; -# If --with-site-includes or --without-site-includes were given then copy the value to the -# equivalent enable_site-includes variable. -if test "${with_site_includes+set}" = set; then - enable_site_includes="$with_site_includes" +# If --with-cde or --without-cde were given then copy the value to the +# equivalent enable_cde variable. +if test "${with_cde+set}" = set; then + enable_cde="$with_cde" fi; -# If -enable-site-includes or --disable-site-includes were given then copy the value to the -# equivalent with_site-includes variable. -if test "${enable_site_includes+set}" = set; then - with_site_includes="$enable_site_includes" +# If -enable-cde or --disable-cde were given then copy the value to the +# equivalent with_cde variable. +if test "${enable_cde+set}" = set; then + with_cde="$enable_cde" fi; -# Check whether --with-site-includes or --without-site-includes was given. -if test "${with_site_includes+set}" = set; then - enableval="$with_site_includes" - withval="$with_site_includes" +# Check whether --with-cde or --without-cde was given. +if test "${with_cde+set}" = set; then + enableval="$with_cde" + withval="$with_cde" fi; -# If --with-site-libraries or --without-site-libraries were given then copy the value to the -# equivalent enable_site-libraries variable. -if test "${with_site_libraries+set}" = set; then - enable_site_libraries="$with_site_libraries" +# If --with-offix or --without-offix were given then copy the value to the +# equivalent enable_offix variable. +if test "${with_offix+set}" = set; then + enable_offix="$with_offix" fi; -# If -enable-site-libraries or --disable-site-libraries were given then copy the value to the -# equivalent with_site-libraries variable. -if test "${enable_site_libraries+set}" = set; then - with_site_libraries="$enable_site_libraries" +# If -enable-offix or --disable-offix were given then copy the value to the +# equivalent with_offix variable. +if test "${enable_offix+set}" = set; then + with_offix="$enable_offix" fi; -# Check whether --with-site-libraries or --without-site-libraries was given. -if test "${with_site_libraries+set}" = set; then - enableval="$with_site_libraries" - withval="$with_site_libraries" +# Check whether --with-offix or --without-offix was given. +if test "${with_offix+set}" = set; then + enableval="$with_offix" + withval="$with_offix" fi; -# If --with-site-prefixes or --without-site-prefixes were given then copy the value to the -# equivalent enable_site-prefixes variable. -if test "${with_site_prefixes+set}" = set; then - enable_site_prefixes="$with_site_prefixes" +# If --with-xmu or --without-xmu were given then copy the value to the +# equivalent enable_xmu variable. +if test "${with_xmu+set}" = set; then + enable_xmu="$with_xmu" fi; -# If -enable-site-prefixes or --disable-site-prefixes were given then copy the value to the -# equivalent with_site-prefixes variable. -if test "${enable_site_prefixes+set}" = set; then - with_site_prefixes="$enable_site_prefixes" +# If -enable-xmu or --disable-xmu were given then copy the value to the +# equivalent with_xmu variable. +if test "${enable_xmu+set}" = set; then + with_xmu="$enable_xmu" fi; -# Check whether --with-site-prefixes or --without-site-prefixes was given. -if test "${with_site_prefixes+set}" = set; then - enableval="$with_site_prefixes" - withval="$with_site_prefixes" +# Check whether --with-xmu or --without-xmu was given. +if test "${with_xmu+set}" = set; then + enableval="$with_xmu" + withval="$with_xmu" fi; -# If --with-statedir or --without-statedir were given then copy the value to the -# equivalent enable_statedir variable. -if test "${with_statedir+set}" = set; then - enable_statedir="$with_statedir" +# If --with-external-widget or --without-external-widget were given then copy the value to the +# equivalent enable_external-widget variable. +if test "${with_external_widget+set}" = set; then + enable_external_widget="$with_external_widget" fi; -# If -enable-statedir or --disable-statedir were given then copy the value to the -# equivalent with_statedir variable. -if test "${enable_statedir+set}" = set; then - with_statedir="$enable_statedir" +# If -enable-external-widget or --disable-external-widget were given then copy the value to the +# equivalent with_external-widget variable. +if test "${enable_external_widget+set}" = set; then + with_external_widget="$enable_external_widget" fi; -# Check whether --with-statedir or --without-statedir was given. -if test "${with_statedir+set}" = set; then - enableval="$with_statedir" - withval="$with_statedir" +# Check whether --with-external-widget or --without-external-widget was given. +if test "${with_external_widget+set}" = set; then + enableval="$with_external_widget" + withval="$with_external_widget" -else - with_statedir='${prefix}/lib' fi; -# If --with-lispdir or --without-lispdir were given then copy the value to the -# equivalent enable_lispdir variable. -if test "${with_lispdir+set}" = set; then - enable_lispdir="$with_lispdir" + +# If --with-tty or --without-tty were given then copy the value to the +# equivalent enable_tty variable. +if test "${with_tty+set}" = set; then + enable_tty="$with_tty" fi; -# If -enable-lispdir or --disable-lispdir were given then copy the value to the -# equivalent with_lispdir variable. -if test "${enable_lispdir+set}" = set; then - with_lispdir="$enable_lispdir" +# If -enable-tty or --disable-tty were given then copy the value to the +# equivalent with_tty variable. +if test "${enable_tty+set}" = set; then + with_tty="$enable_tty" fi; -# Check whether --with-lispdir or --without-lispdir was given. -if test "${with_lispdir+set}" = set; then - enableval="$with_lispdir" - withval="$with_lispdir" - cat >>confdefs.h <<\_ACEOF -#define LISPDIR_USER_DEFINED 1 -_ACEOF +# Check whether --with-tty or --without-tty was given. +if test "${with_tty+set}" = set; then + enableval="$with_tty" + withval="$with_tty" -else - with_lispdir='${datadir}/${instvardir}/lisp' fi; -# If --with-archlibdir or --without-archlibdir were given then copy the value to the -# equivalent enable_archlibdir variable. -if test "${with_archlibdir+set}" = set; then - enable_archlibdir="$with_archlibdir" +# If --with-ncurses or --without-ncurses were given then copy the value to the +# equivalent enable_ncurses variable. +if test "${with_ncurses+set}" = set; then + enable_ncurses="$with_ncurses" fi; -# If -enable-archlibdir or --disable-archlibdir were given then copy the value to the -# equivalent with_archlibdir variable. -if test "${enable_archlibdir+set}" = set; then - with_archlibdir="$enable_archlibdir" +# If -enable-ncurses or --disable-ncurses were given then copy the value to the +# equivalent with_ncurses variable. +if test "${enable_ncurses+set}" = set; then + with_ncurses="$enable_ncurses" fi; -# Check whether --with-archlibdir or --without-archlibdir was given. -if test "${with_archlibdir+set}" = set; then - enableval="$with_archlibdir" - withval="$with_archlibdir" - cat >>confdefs.h <<\_ACEOF -#define ARCHLIBDIR_USER_DEFINED 1 -_ACEOF +# Check whether --with-ncurses or --without-ncurses was given. +if test "${with_ncurses+set}" = set; then + enableval="$with_ncurses" + withval="$with_ncurses" -else - with_archlibdir='${libdir}/${instvardir}/${configuration}' fi; -# If --with-moduledir or --without-moduledir were given then copy the value to the -# equivalent enable_moduledir variable. -if test "${with_moduledir+set}" = set; then - enable_moduledir="$with_moduledir" +# If --with-gpm or --without-gpm were given then copy the value to the +# equivalent enable_gpm variable. +if test "${with_gpm+set}" = set; then + enable_gpm="$with_gpm" fi; -# If -enable-moduledir or --disable-moduledir were given then copy the value to the -# equivalent with_moduledir variable. -if test "${enable_moduledir+set}" = set; then - with_moduledir="$enable_moduledir" +# If -enable-gpm or --disable-gpm were given then copy the value to the +# equivalent with_gpm variable. +if test "${enable_gpm+set}" = set; then + with_gpm="$enable_gpm" fi; -# Check whether --with-moduledir or --without-moduledir was given. -if test "${with_moduledir+set}" = set; then - enableval="$with_moduledir" - withval="$with_moduledir" - cat >>confdefs.h <<\_ACEOF -#define MODULEDIR_USER_DEFINED 1 -_ACEOF +# Check whether --with-gpm or --without-gpm was given. +if test "${with_gpm+set}" = set; then + enableval="$with_gpm" + withval="$with_gpm" -else - with_moduledir='${libdir}/${instvardir}/${configuration}/modules' fi; -# If --with-etcdir or --without-etcdir were given then copy the value to the -# equivalent enable_etcdir variable. -if test "${with_etcdir+set}" = set; then - enable_etcdir="$with_etcdir" + +# If --with-xpm or --without-xpm were given then copy the value to the +# equivalent enable_xpm variable. +if test "${with_xpm+set}" = set; then + enable_xpm="$with_xpm" fi; -# If -enable-etcdir or --disable-etcdir were given then copy the value to the -# equivalent with_etcdir variable. -if test "${enable_etcdir+set}" = set; then - with_etcdir="$enable_etcdir" +# If -enable-xpm or --disable-xpm were given then copy the value to the +# equivalent with_xpm variable. +if test "${enable_xpm+set}" = set; then + with_xpm="$enable_xpm" fi; -# Check whether --with-etcdir or --without-etcdir was given. -if test "${with_etcdir+set}" = set; then - enableval="$with_etcdir" - withval="$with_etcdir" - cat >>confdefs.h <<\_ACEOF -#define ETCDIR_USER_DEFINED 1 -_ACEOF +# Check whether --with-xpm or --without-xpm was given. +if test "${with_xpm+set}" = set; then + enableval="$with_xpm" + withval="$with_xpm" -else - with_etcdir='${datadir}/${instvardir}/etc' fi; -# If --with-infopath or --without-infopath were given then copy the value to the -# equivalent enable_infopath variable. -if test "${with_infopath+set}" = set; then - enable_infopath="$with_infopath" +# If --with-png or --without-png were given then copy the value to the +# equivalent enable_png variable. +if test "${with_png+set}" = set; then + enable_png="$with_png" fi; -# If -enable-infopath or --disable-infopath were given then copy the value to the -# equivalent with_infopath variable. -if test "${enable_infopath+set}" = set; then - with_infopath="$enable_infopath" +# If -enable-png or --disable-png were given then copy the value to the +# equivalent with_png variable. +if test "${enable_png+set}" = set; then + with_png="$enable_png" fi; -# Check whether --with-infopath or --without-infopath was given. -if test "${with_infopath+set}" = set; then - enableval="$with_infopath" - withval="$with_infopath" - cat >>confdefs.h <<\_ACEOF -#define INFOPATH_USER_DEFINED 1 -_ACEOF +# Check whether --with-png or --without-png was given. +if test "${with_png+set}" = set; then + enableval="$with_png" + withval="$with_png" fi; -# If --with-docdir or --without-docdir were given then copy the value to the -# equivalent enable_docdir variable. -if test "${with_docdir+set}" = set; then - enable_docdir="$with_docdir" +# If --with-jpeg or --without-jpeg were given then copy the value to the +# equivalent enable_jpeg variable. +if test "${with_jpeg+set}" = set; then + enable_jpeg="$with_jpeg" fi; -# If -enable-docdir or --disable-docdir were given then copy the value to the -# equivalent with_docdir variable. -if test "${enable_docdir+set}" = set; then - with_docdir="$enable_docdir" +# If -enable-jpeg or --disable-jpeg were given then copy the value to the +# equivalent with_jpeg variable. +if test "${enable_jpeg+set}" = set; then + with_jpeg="$enable_jpeg" fi; -# Check whether --with-docdir or --without-docdir was given. -if test "${with_docdir+set}" = set; then - enableval="$with_docdir" - withval="$with_docdir" - cat >>confdefs.h <<\_ACEOF -#define DOCDIR_USER_DEFINED 1 -_ACEOF +# Check whether --with-jpeg or --without-jpeg was given. +if test "${with_jpeg+set}" = set; then + enableval="$with_jpeg" + withval="$with_jpeg" -else - with_docdir='${archlibdir}' fi; -# If --with-site-runtime-libraries or --without-site-runtime-libraries were given then copy the value to the -# equivalent enable_site-runtime-libraries variable. -if test "${with_site_runtime_libraries+set}" = set; then - enable_site_runtime_libraries="$with_site_runtime_libraries" +# If --with-tiff or --without-tiff were given then copy the value to the +# equivalent enable_tiff variable. +if test "${with_tiff+set}" = set; then + enable_tiff="$with_tiff" fi; -# If -enable-site-runtime-libraries or --disable-site-runtime-libraries were given then copy the value to the -# equivalent with_site-runtime-libraries variable. -if test "${enable_site_runtime_libraries+set}" = set; then - with_site_runtime_libraries="$enable_site_runtime_libraries" +# If -enable-tiff or --disable-tiff were given then copy the value to the +# equivalent with_tiff variable. +if test "${enable_tiff+set}" = set; then + with_tiff="$enable_tiff" fi; -# Check whether --with-site-runtime-libraries or --without-site-runtime-libraries was given. -if test "${with_site_runtime_libraries+set}" = set; then - enableval="$with_site_runtime_libraries" - withval="$with_site_runtime_libraries" +# Check whether --with-tiff or --without-tiff was given. +if test "${with_tiff+set}" = set; then + enableval="$with_tiff" + withval="$with_tiff" fi; -# If --with-package-prefix or --without-package-prefix were given then copy the value to the -# equivalent enable_package-prefix variable. -if test "${with_package_prefix+set}" = set; then - enable_package_prefix="$with_package_prefix" +# If --with-xface or --without-xface were given then copy the value to the +# equivalent enable_xface variable. +if test "${with_xface+set}" = set; then + enable_xface="$with_xface" fi; -# If -enable-package-prefix or --disable-package-prefix were given then copy the value to the -# equivalent with_package-prefix variable. -if test "${enable_package_prefix+set}" = set; then - with_package_prefix="$enable_package_prefix" +# If -enable-xface or --disable-xface were given then copy the value to the +# equivalent with_xface variable. +if test "${enable_xface+set}" = set; then + with_xface="$enable_xface" fi; -# Check whether --with-package-prefix or --without-package-prefix was given. -if test "${with_package_prefix+set}" = set; then - enableval="$with_package_prefix" - withval="$with_package_prefix" - cat >>confdefs.h <<\_ACEOF -#define PACKAGE_PATH_USER_DEFINED 1 -_ACEOF +# Check whether --with-xface or --without-xface was given. +if test "${with_xface+set}" = set; then + enableval="$with_xface" + withval="$with_xface" fi; -# If --with-package-path or --without-package-path were given then copy the value to the -# equivalent enable_package-path variable. -if test "${with_package_path+set}" = set; then - enable_package_path="$with_package_path" +# If --with-gif or --without-gif were given then copy the value to the +# equivalent enable_gif variable. +if test "${with_gif+set}" = set; then + enable_gif="$with_gif" fi; -# If -enable-package-path or --disable-package-path were given then copy the value to the -# equivalent with_package-path variable. -if test "${enable_package_path+set}" = set; then - with_package_path="$enable_package_path" +# If -enable-gif or --disable-gif were given then copy the value to the +# equivalent with_gif variable. +if test "${enable_gif+set}" = set; then + with_gif="$enable_gif" fi; -# Check whether --with-package-path or --without-package-path was given. -if test "${with_package_path+set}" = set; then - enableval="$with_package_path" - withval="$with_package_path" - cat >>confdefs.h <<\_ACEOF -#define PACKAGE_PATH_USER_DEFINED 1 -_ACEOF +# Check whether --with-gif or --without-gif was given. +if test "${with_gif+set}" = set; then + enableval="$with_gif" + withval="$with_gif" fi; -# If --with-external-widget or --without-external-widget were given then copy the value to the -# equivalent enable_external-widget variable. -if test "${with_external_widget+set}" = set; then - enable_external_widget="$with_external_widget" + +_sound_notfirst="" +_sound_native_default="" +_sound_nas_default="" +_sound_esd_default=no +_sound_types="native nas esd" +_sound_default="native,nas,noesd" + +# If --with-sound or --without-sound were given then copy the value to the +# equivalent enable_sound variable. +if test "${with_sound+set}" = set; then + enable_sound="$with_sound" fi; -# If -enable-external-widget or --disable-external-widget were given then copy the value to the -# equivalent with_external-widget variable. -if test "${enable_external_widget+set}" = set; then - with_external_widget="$enable_external_widget" +# If -enable-sound or --disable-sound were given then copy the value to the +# equivalent with_sound variable. +if test "${enable_sound+set}" = set; then + with_sound="$enable_sound" fi; -# Check whether --with-external-widget or --without-external-widget was given. -if test "${with_external_widget+set}" = set; then - enableval="$with_external_widget" - withval="$with_external_widget" +# Check whether --with-sound or --without-sound was given. +if test "${with_sound+set}" = set; then + enableval="$with_sound" + withval="$with_sound" + _sound_all_default="" +_require_sound="" +case "$with_sound" in + n | no | non | none ) _sound_all_default=no ;; + n,* | no,* | non,* | none,* ) _sound_all_default=no ;; + a | al | all | both ) _sound_all_default=yes ;; + a,* | al,* | all,* | both,* ) _sound_all_default=yes ;; + y | yes ) _require_sound=yes ;; +esac +if test -n "$_sound_all_default$_require_sound"; then + _with_sound_args=`echo $with_sound | sed -e 's/^[a-z]*\(,\(.*\)\)\{0,1\}$/\2/'` +else + _with_sound_args=$with_sound +fi +for y in $_sound_types; do + if test -n "$_sound_all_default" ; then + eval "with_sound_${y}=$_sound_all_default" + else + eval "with_sound_$y=\$_sound_${y}_default" + fi +done +for x in `echo "$_with_sound_args" | sed -e 's/,/ /g'` ; do + _sound_found="" + for y in $_sound_types; do + if test "$x" = "$y"; then + _sound_found=yes + eval "with_sound_$y=yes" + elif test "$x" = "no$y"; then + _sound_found=yes + eval "with_sound_$y=no" + fi + done + test -z "$_sound_found" && \ + (echo "$progname: Usage error:" +echo " " "\ +Invalid type list supplied. Valid types for the --with-sound option are: + $_sound_types. + A prefix of \"no\" (eg, \"notype\" for \"type\") turns a type off. + Types not explicitly specified or negated take their defaults. + The list of defaults is \"$_sound_default\". Prefixing \`all' or + \`none' to the list sets all defaults to on and off respectively. + \`yes' as the sole argument is equivalent to omitting the argument." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 +done +for y in $_sound_types; do + eval "enable_sound_$y=\$with_sound_$y" + unset _sound_${y}_default +done +unset _sound_types _sound_default _sound_all_default _sound_use_defaults +unset _with_sound_args _sound_found x y _require_sound + + +else + +# set default for each type +for y in $_sound_types; do + eval "with_sound_$y=\$_sound_${y}_default" + eval "enable_sound_$y=\$_sound_${y}_default" + unset _sound_${y}_default +done +enable_sound_nas="" fi; -# If --with-kkcc or --without-kkcc were given then copy the value to the -# equivalent enable_kkcc variable. -if test "${with_kkcc+set}" = set; then - enable_kkcc="$with_kkcc" +# If --with-native-sound-lib or --without-native-sound-lib were given then copy the value to the +# equivalent enable_native-sound-lib variable. +if test "${with_native_sound_lib+set}" = set; then + enable_native_sound_lib="$with_native_sound_lib" fi; -# If -enable-kkcc or --disable-kkcc were given then copy the value to the -# equivalent with_kkcc variable. -if test "${enable_kkcc+set}" = set; then - with_kkcc="$enable_kkcc" +# If -enable-native-sound-lib or --disable-native-sound-lib were given then copy the value to the +# equivalent with_native-sound-lib variable. +if test "${enable_native_sound_lib+set}" = set; then + with_native_sound_lib="$enable_native_sound_lib" fi; -# Check whether --with-kkcc or --without-kkcc was given. -if test "${with_kkcc+set}" = set; then - enableval="$with_kkcc" - withval="$with_kkcc" +# Check whether --with-native-sound-lib or --without-native-sound-lib was given. +if test "${with_native_sound_lib+set}" = set; then + enableval="$with_native_sound_lib" + withval="$with_native_sound_lib" -else - enable_kkcc=yes fi; -# If --with-mc-alloc or --without-mc-alloc were given then copy the value to the -# equivalent enable_mc-alloc variable. -if test "${with_mc_alloc+set}" = set; then - enable_mc_alloc="$with_mc_alloc" + +# If --with-mule or --without-mule were given then copy the value to the +# equivalent enable_mule variable. +if test "${with_mule+set}" = set; then + enable_mule="$with_mule" fi; -# If -enable-mc-alloc or --disable-mc-alloc were given then copy the value to the -# equivalent with_mc-alloc variable. -if test "${enable_mc_alloc+set}" = set; then - with_mc_alloc="$enable_mc_alloc" +# If -enable-mule or --disable-mule were given then copy the value to the +# equivalent with_mule variable. +if test "${enable_mule+set}" = set; then + with_mule="$enable_mule" fi; -# Check whether --with-mc-alloc or --without-mc-alloc was given. -if test "${with_mc_alloc+set}" = set; then - enableval="$with_mc_alloc" - withval="$with_mc_alloc" +# Check whether --with-mule or --without-mule was given. +if test "${with_mule+set}" = set; then + enableval="$with_mule" + withval="$with_mule" -else - enable_mc_alloc=yes fi; -# If --with-union-type or --without-union-type were given then copy the value to the -# equivalent enable_union-type variable. -if test "${with_union_type+set}" = set; then - enable_union_type="$with_union_type" + +# If --with-xim or --without-xim were given then copy the value to the +# equivalent enable_xim variable. +if test "${with_xim+set}" = set; then + enable_xim="$with_xim" fi; -# If -enable-union-type or --disable-union-type were given then copy the value to the -# equivalent with_union-type variable. -if test "${enable_union_type+set}" = set; then - with_union_type="$enable_union_type" +# If -enable-xim or --disable-xim were given then copy the value to the +# equivalent with_xim variable. +if test "${enable_xim+set}" = set; then + with_xim="$enable_xim" fi; -# Check whether --with-union-type or --without-union-type was given. -if test "${with_union_type+set}" = set; then - enableval="$with_union_type" - withval="$with_union_type" +# Check whether --with-xim or --without-xim was given. +if test "${with_xim+set}" = set; then + enableval="$with_xim" + withval="$with_xim" + _xim_bogus=yes + for x in yes no xlib motif ; do + if test $x = $with_xim ; then + _xim_bogus=no + fi + done + if test "$_xim_bogus" = "yes" ; then + (echo "$progname: Usage error:" +echo " " "The --with-xim option must have one of these values: \`yes',\`no',\`xlib',\`motif'." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 + fi +unset _xim_bogus + + +fi; # If --with-canna or --without-canna were given then copy the value to the +# equivalent enable_canna variable. +if test "${with_canna+set}" = set; then + enable_canna="$with_canna" fi; -# If --with-pdump or --without-pdump were given then copy the value to the -# equivalent enable_pdump variable. -if test "${with_pdump+set}" = set; then - enable_pdump="$with_pdump" -fi; -# If -enable-pdump or --disable-pdump were given then copy the value to the -# equivalent with_pdump variable. -if test "${enable_pdump+set}" = set; then - with_pdump="$enable_pdump" +# If -enable-canna or --disable-canna were given then copy the value to the +# equivalent with_canna variable. +if test "${enable_canna+set}" = set; then + with_canna="$enable_canna" fi; -# Check whether --with-pdump or --without-pdump was given. -if test "${with_pdump+set}" = set; then - enableval="$with_pdump" - withval="$with_pdump" +# Check whether --with-canna or --without-canna was given. +if test "${with_canna+set}" = set; then + enableval="$with_canna" + withval="$with_canna" fi; -# If --with-dump-in-exec or --without-dump-in-exec were given then copy the value to the -# equivalent enable_dump-in-exec variable. -if test "${with_dump_in_exec+set}" = set; then - enable_dump_in_exec="$with_dump_in_exec" +# If --with-wnn or --without-wnn were given then copy the value to the +# equivalent enable_wnn variable. +if test "${with_wnn+set}" = set; then + enable_wnn="$with_wnn" fi; -# If -enable-dump-in-exec or --disable-dump-in-exec were given then copy the value to the -# equivalent with_dump-in-exec variable. -if test "${enable_dump_in_exec+set}" = set; then - with_dump_in_exec="$enable_dump_in_exec" +# If -enable-wnn or --disable-wnn were given then copy the value to the +# equivalent with_wnn variable. +if test "${enable_wnn+set}" = set; then + with_wnn="$enable_wnn" fi; -# Check whether --with-dump-in-exec or --without-dump-in-exec was given. -if test "${with_dump_in_exec+set}" = set; then - enableval="$with_dump_in_exec" - withval="$with_dump_in_exec" +# Check whether --with-wnn or --without-wnn was given. +if test "${with_wnn+set}" = set; then + enableval="$with_wnn" + withval="$with_wnn" fi; -# If --with-debug or --without-debug were given then copy the value to the -# equivalent enable_debug variable. -if test "${with_debug+set}" = set; then - enable_debug="$with_debug" +# If --with-wnn6 or --without-wnn6 were given then copy the value to the +# equivalent enable_wnn6 variable. +if test "${with_wnn6+set}" = set; then + enable_wnn6="$with_wnn6" fi; -# If -enable-debug or --disable-debug were given then copy the value to the -# equivalent with_debug variable. -if test "${enable_debug+set}" = set; then - with_debug="$enable_debug" +# If -enable-wnn6 or --disable-wnn6 were given then copy the value to the +# equivalent with_wnn6 variable. +if test "${enable_wnn6+set}" = set; then + with_wnn6="$enable_wnn6" fi; -# Check whether --with-debug or --without-debug was given. -if test "${with_debug+set}" = set; then - enableval="$with_debug" - withval="$with_debug" +# Check whether --with-wnn6 or --without-wnn6 was given. +if test "${with_wnn6+set}" = set; then + enableval="$with_wnn6" + withval="$with_wnn6" fi; -# If --with-assertions or --without-assertions were given then copy the value to the -# equivalent enable_assertions variable. -if test "${with_assertions+set}" = set; then - enable_assertions="$with_assertions" +# If --with-xfs or --without-xfs were given then copy the value to the +# equivalent enable_xfs variable. +if test "${with_xfs+set}" = set; then + enable_xfs="$with_xfs" fi; -# If -enable-assertions or --disable-assertions were given then copy the value to the -# equivalent with_assertions variable. -if test "${enable_assertions+set}" = set; then - with_assertions="$enable_assertions" +# If -enable-xfs or --disable-xfs were given then copy the value to the +# equivalent with_xfs variable. +if test "${enable_xfs+set}" = set; then + with_xfs="$enable_xfs" fi; -# Check whether --with-assertions or --without-assertions was given. -if test "${with_assertions+set}" = set; then - enableval="$with_assertions" - withval="$with_assertions" +# Check whether --with-xfs or --without-xfs was given. +if test "${with_xfs+set}" = set; then + enableval="$with_xfs" + withval="$with_xfs" fi; -# If --with-memory-usage-stats or --without-memory-usage-stats were given then copy the value to the -# equivalent enable_memory-usage-stats variable. -if test "${with_memory_usage_stats+set}" = set; then - enable_memory_usage_stats="$with_memory_usage_stats" + +# If --with-default-eol-detection or --without-default-eol-detection were given then copy the value to the +# equivalent enable_default-eol-detection variable. +if test "${with_default_eol_detection+set}" = set; then + enable_default_eol_detection="$with_default_eol_detection" fi; -# If -enable-memory-usage-stats or --disable-memory-usage-stats were given then copy the value to the -# equivalent with_memory-usage-stats variable. -if test "${enable_memory_usage_stats+set}" = set; then - with_memory_usage_stats="$enable_memory_usage_stats" +# If -enable-default-eol-detection or --disable-default-eol-detection were given then copy the value to the +# equivalent with_default-eol-detection variable. +if test "${enable_default_eol_detection+set}" = set; then + with_default_eol_detection="$enable_default_eol_detection" fi; -# Check whether --with-memory-usage-stats or --without-memory-usage-stats was given. -if test "${with_memory_usage_stats+set}" = set; then - enableval="$with_memory_usage_stats" - withval="$with_memory_usage_stats" +# Check whether --with-default-eol-detection or --without-default-eol-detection was given. +if test "${with_default_eol_detection+set}" = set; then + enableval="$with_default_eol_detection" + withval="$with_default_eol_detection" fi; # If --with-clash-detection or --without-clash-detection were given then copy the value to the @@ -2799,207 +3057,291 @@ withval="$with_clash_detection" fi; -# If --with-modules or --without-modules were given then copy the value to the -# equivalent enable_modules variable. -if test "${with_modules+set}" = set; then - enable_modules="$with_modules" +# If --with-zlib or --without-zlib were given then copy the value to the +# equivalent enable_zlib variable. +if test "${with_zlib+set}" = set; then + enable_zlib="$with_zlib" fi; -# If -enable-modules or --disable-modules were given then copy the value to the -# equivalent with_modules variable. -if test "${enable_modules+set}" = set; then - with_modules="$enable_modules" +# If -enable-zlib or --disable-zlib were given then copy the value to the +# equivalent with_zlib variable. +if test "${enable_zlib+set}" = set; then + with_zlib="$enable_zlib" fi; -# Check whether --with-modules or --without-modules was given. -if test "${with_modules+set}" = set; then - enableval="$with_modules" - withval="$with_modules" +# Check whether --with-zlib or --without-zlib was given. +if test "${with_zlib+set}" = set; then + enableval="$with_zlib" + withval="$with_zlib" fi; -# If --with-quick-build or --without-quick-build were given then copy the value to the -# equivalent enable_quick-build variable. -if test "${with_quick_build+set}" = set; then - enable_quick_build="$with_quick_build" + +_database_notfirst="" +_database_berkdb_default="" +_database_dbm_default="" +_database_gdbm_default="" +_database_types="berkdb dbm gdbm" +_database_default="berkdb,dbm,gdbm" + +# If --with-database or --without-database were given then copy the value to the +# equivalent enable_database variable. +if test "${with_database+set}" = set; then + enable_database="$with_database" fi; -# If -enable-quick-build or --disable-quick-build were given then copy the value to the -# equivalent with_quick-build variable. -if test "${enable_quick_build+set}" = set; then - with_quick_build="$enable_quick_build" +# If -enable-database or --disable-database were given then copy the value to the +# equivalent with_database variable. +if test "${enable_database+set}" = set; then + with_database="$enable_database" fi; -# Check whether --with-quick-build or --without-quick-build was given. -if test "${with_quick_build+set}" = set; then - enableval="$with_quick_build" - withval="$with_quick_build" +# Check whether --with-database or --without-database was given. +if test "${with_database+set}" = set; then + enableval="$with_database" + withval="$with_database" + _database_all_default="" +_require_database="" +case "$with_database" in + n | no | non | none ) _database_all_default=no ;; + n,* | no,* | non,* | none,* ) _database_all_default=no ;; + a | al | all | both ) _database_all_default=yes ;; + a,* | al,* | all,* | both,* ) _database_all_default=yes ;; + y | yes ) _require_database=yes ;; +esac +if test -n "$_database_all_default$_require_database"; then + _with_database_args=`echo $with_database | sed -e 's/^[a-z]*\(,\(.*\)\)\{0,1\}$/\2/'` +else + _with_database_args=$with_database +fi +for y in $_database_types; do + if test -n "$_database_all_default" ; then + eval "with_database_${y}=$_database_all_default" + else + eval "with_database_$y=\$_database_${y}_default" + fi +done +for x in `echo "$_with_database_args" | sed -e 's/,/ /g'` ; do + _database_found="" + for y in $_database_types; do + if test "$x" = "$y"; then + _database_found=yes + eval "with_database_$y=yes" + elif test "$x" = "no$y"; then + _database_found=yes + eval "with_database_$y=no" + fi + done + test -z "$_database_found" && \ + (echo "$progname: Usage error:" +echo " " "\ +Invalid type list supplied. Valid types for the --with-database option are: + $_database_types. + A prefix of \"no\" (eg, \"notype\" for \"type\") turns a type off. + Types not explicitly specified or negated take their defaults. + The list of defaults is \"$_database_default\". Prefixing \`all' or + \`none' to the list sets all defaults to on and off respectively. + \`yes' as the sole argument is equivalent to omitting the argument." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 +done +for y in $_database_types; do + eval "enable_database_$y=\$with_database_$y" + unset _database_${y}_default +done +unset _database_types _database_default _database_all_default _database_use_defaults +unset _with_database_args _database_found x y _require_database -fi; -# If --with-compiler or --without-compiler were given then copy the value to the -# equivalent enable_compiler variable. -if test "${with_compiler+set}" = set; then - enable_compiler="$with_compiler" +if test "$enable_database_dbm" = "yes" -a "$enable_database_gdbm" = "yes"; then + (echo "$progname: Usage error:" +echo " " "Only one of \`dbm' and \`gnudbm' may be specified +with the \`--with-database' option." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 +fi + + +else + +# set default for each type +for y in $_database_types; do + eval "with_database_$y=\$_database_${y}_default" + eval "enable_database_$y=\$_database_${y}_default" + unset _database_${y}_default +done + fi; -# If -enable-compiler or --disable-compiler were given then copy the value to the -# equivalent with_compiler variable. -if test "${enable_compiler+set}" = set; then - with_compiler="$enable_compiler" +# If --with-ldap or --without-ldap were given then copy the value to the +# equivalent enable_ldap variable. +if test "${with_ldap+set}" = set; then + enable_ldap="$with_ldap" fi; -# Check whether --with-compiler or --without-compiler was given. -if test "${with_compiler+set}" = set; then - enableval="$with_compiler" - withval="$with_compiler" - +# If -enable-ldap or --disable-ldap were given then copy the value to the +# equivalent with_ldap variable. +if test "${enable_ldap+set}" = set; then + with_ldap="$enable_ldap" fi; +# Check whether --with-ldap or --without-ldap was given. +if test "${with_ldap+set}" = set; then + enableval="$with_ldap" + withval="$with_ldap" -# If --with-xemacs-compiler or --without-xemacs-compiler were given then copy the value to the -# equivalent enable_xemacs-compiler variable. -if test "${with_xemacs_compiler+set}" = set; then - enable_xemacs_compiler="$with_xemacs_compiler" fi; -# If -enable-xemacs-compiler or --disable-xemacs-compiler were given then copy the value to the -# equivalent with_xemacs-compiler variable. -if test "${enable_xemacs_compiler+set}" = set; then - with_xemacs_compiler="$enable_xemacs_compiler" +# If --with-postgresql or --without-postgresql were given then copy the value to the +# equivalent enable_postgresql variable. +if test "${with_postgresql+set}" = set; then + enable_postgresql="$with_postgresql" fi; -# Check whether --with-xemacs-compiler or --without-xemacs-compiler was given. -if test "${with_xemacs_compiler+set}" = set; then - enableval="$with_xemacs_compiler" - withval="$with_xemacs_compiler" +# If -enable-postgresql or --disable-postgresql were given then copy the value to the +# equivalent with_postgresql variable. +if test "${enable_postgresql+set}" = set; then + with_postgresql="$enable_postgresql" +fi; +# Check whether --with-postgresql or --without-postgresql was given. +if test "${with_postgresql+set}" = set; then + enableval="$with_postgresql" + withval="$with_postgresql" fi; -# If --with-cflags or --without-cflags were given then copy the value to the -# equivalent enable_cflags variable. -if test "${with_cflags+set}" = set; then - enable_cflags="$with_cflags" + +# If --with-mail-locking or --without-mail-locking were given then copy the value to the +# equivalent enable_mail-locking variable. +if test "${with_mail_locking+set}" = set; then + enable_mail_locking="$with_mail_locking" fi; -# If -enable-cflags or --disable-cflags were given then copy the value to the -# equivalent with_cflags variable. -if test "${enable_cflags+set}" = set; then - with_cflags="$enable_cflags" +# If -enable-mail-locking or --disable-mail-locking were given then copy the value to the +# equivalent with_mail-locking variable. +if test "${enable_mail_locking+set}" = set; then + with_mail_locking="$enable_mail_locking" fi; -# Check whether --with-cflags or --without-cflags was given. -if test "${with_cflags+set}" = set; then - enableval="$with_cflags" - withval="$with_cflags" +# Check whether --with-mail-locking or --without-mail-locking was given. +if test "${with_mail_locking+set}" = set; then + enableval="$with_mail_locking" + withval="$with_mail_locking" + _mail_locking_bogus=yes + for x in lockf flock file locking mmdf pop ; do + if test $x = $with_mail_locking ; then + _mail_locking_bogus=no + fi + done + if test "$_mail_locking_bogus" = "yes" ; then + (echo "$progname: Usage error:" +echo " " "The --with-mail-locking option must have one of these values: \`lockf',\`flock',\`file',\`locking',\`mmdf',\`pop'." +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 + fi +unset _mail_locking_bogus -fi; -# If --with-cflags-warning or --without-cflags-warning were given then copy the value to the -# equivalent enable_cflags-warning variable. -if test "${with_cflags_warning+set}" = set; then - enable_cflags_warning="$with_cflags_warning" + +fi; # If --with-pop or --without-pop were given then copy the value to the +# equivalent enable_pop variable. +if test "${with_pop+set}" = set; then + enable_pop="$with_pop" fi; -# If -enable-cflags-warning or --disable-cflags-warning were given then copy the value to the -# equivalent with_cflags-warning variable. -if test "${enable_cflags_warning+set}" = set; then - with_cflags_warning="$enable_cflags_warning" +# If -enable-pop or --disable-pop were given then copy the value to the +# equivalent with_pop variable. +if test "${enable_pop+set}" = set; then + with_pop="$enable_pop" fi; -# Check whether --with-cflags-warning or --without-cflags-warning was given. -if test "${with_cflags_warning+set}" = set; then - enableval="$with_cflags_warning" - withval="$with_cflags_warning" +# Check whether --with-pop or --without-pop was given. +if test "${with_pop+set}" = set; then + enableval="$with_pop" + withval="$with_pop" fi; - -# If --with-cflags-optimization or --without-cflags-optimization were given then copy the value to the -# equivalent enable_cflags-optimization variable. -if test "${with_cflags_optimization+set}" = set; then - enable_cflags_optimization="$with_cflags_optimization" +# If --with-kerberos or --without-kerberos were given then copy the value to the +# equivalent enable_kerberos variable. +if test "${with_kerberos+set}" = set; then + enable_kerberos="$with_kerberos" fi; -# If -enable-cflags-optimization or --disable-cflags-optimization were given then copy the value to the -# equivalent with_cflags-optimization variable. -if test "${enable_cflags_optimization+set}" = set; then - with_cflags_optimization="$enable_cflags_optimization" +# If -enable-kerberos or --disable-kerberos were given then copy the value to the +# equivalent with_kerberos variable. +if test "${enable_kerberos+set}" = set; then + with_kerberos="$enable_kerberos" fi; -# Check whether --with-cflags-optimization or --without-cflags-optimization was given. -if test "${with_cflags_optimization+set}" = set; then - enableval="$with_cflags_optimization" - withval="$with_cflags_optimization" +# Check whether --with-kerberos or --without-kerberos was given. +if test "${with_kerberos+set}" = set; then + enableval="$with_kerberos" + withval="$with_kerberos" fi; - -# If --with-cflags-debugging or --without-cflags-debugging were given then copy the value to the -# equivalent enable_cflags-debugging variable. -if test "${with_cflags_debugging+set}" = set; then - enable_cflags_debugging="$with_cflags_debugging" +# If --with-hesiod or --without-hesiod were given then copy the value to the +# equivalent enable_hesiod variable. +if test "${with_hesiod+set}" = set; then + enable_hesiod="$with_hesiod" fi; -# If -enable-cflags-debugging or --disable-cflags-debugging were given then copy the value to the -# equivalent with_cflags-debugging variable. -if test "${enable_cflags_debugging+set}" = set; then - with_cflags_debugging="$enable_cflags_debugging" +# If -enable-hesiod or --disable-hesiod were given then copy the value to the +# equivalent with_hesiod variable. +if test "${enable_hesiod+set}" = set; then + with_hesiod="$enable_hesiod" fi; -# Check whether --with-cflags-debugging or --without-cflags-debugging was given. -if test "${with_cflags_debugging+set}" = set; then - enableval="$with_cflags_debugging" - withval="$with_cflags_debugging" +# Check whether --with-hesiod or --without-hesiod was given. +if test "${with_hesiod+set}" = set; then + enableval="$with_hesiod" + withval="$with_hesiod" fi; -# If --with-cpp or --without-cpp were given then copy the value to the -# equivalent enable_cpp variable. -if test "${with_cpp+set}" = set; then - enable_cpp="$with_cpp" +# If --with-tooltalk or --without-tooltalk were given then copy the value to the +# equivalent enable_tooltalk variable. +if test "${with_tooltalk+set}" = set; then + enable_tooltalk="$with_tooltalk" fi; -# If -enable-cpp or --disable-cpp were given then copy the value to the -# equivalent with_cpp variable. -if test "${enable_cpp+set}" = set; then - with_cpp="$enable_cpp" +# If -enable-tooltalk or --disable-tooltalk were given then copy the value to the +# equivalent with_tooltalk variable. +if test "${enable_tooltalk+set}" = set; then + with_tooltalk="$enable_tooltalk" fi; -# Check whether --with-cpp or --without-cpp was given. -if test "${with_cpp+set}" = set; then - enableval="$with_cpp" - withval="$with_cpp" - CPP="$with_cpp" +# Check whether --with-tooltalk or --without-tooltalk was given. +if test "${with_tooltalk+set}" = set; then + enableval="$with_tooltalk" + withval="$with_tooltalk" + +fi; +# If --with-socks or --without-socks were given then copy the value to the +# equivalent enable_socks variable. +if test "${with_socks+set}" = set; then + enable_socks="$with_socks" +fi; +# If -enable-socks or --disable-socks were given then copy the value to the +# equivalent with_socks variable. +if test "${enable_socks+set}" = set; then + with_socks="$enable_socks" fi; +# Check whether --with-socks or --without-socks was given. +if test "${with_socks+set}" = set; then + enableval="$with_socks" + withval="$with_socks" -# If --with-cppflags or --without-cppflags were given then copy the value to the -# equivalent enable_cppflags variable. -if test "${with_cppflags+set}" = set; then - enable_cppflags="$with_cppflags" fi; -# If -enable-cppflags or --disable-cppflags were given then copy the value to the -# equivalent with_cppflags variable. -if test "${enable_cppflags+set}" = set; then - with_cppflags="$enable_cppflags" +# If --with-dnet or --without-dnet were given then copy the value to the +# equivalent enable_dnet variable. +if test "${with_dnet+set}" = set; then + enable_dnet="$with_dnet" fi; -# Check whether --with-cppflags or --without-cppflags was given. -if test "${with_cppflags+set}" = set; then - enableval="$with_cppflags" - withval="$with_cppflags" - CPPFLAGS="$with_cppflags" +# If -enable-dnet or --disable-dnet were given then copy the value to the +# equivalent with_dnet variable. +if test "${enable_dnet+set}" = set; then + with_dnet="$enable_dnet" fi; +# Check whether --with-dnet or --without-dnet was given. +if test "${with_dnet+set}" = set; then + enableval="$with_dnet" + withval="$with_dnet" -# If --with-libs or --without-libs were given then copy the value to the -# equivalent enable_libs variable. -if test "${with_libs+set}" = set; then - enable_libs="$with_libs" -fi; -# If -enable-libs or --disable-libs were given then copy the value to the -# equivalent with_libs variable. -if test "${enable_libs+set}" = set; then - with_libs="$enable_libs" -fi; -# Check whether --with-libs or --without-libs was given. -if test "${with_libs+set}" = set; then - enableval="$with_libs" - withval="$with_libs" - LIBS="$with_libs" fi; +# If --with-ipv6-cname or --without-ipv6-cname were given then copy the value to the +# equivalent enable_ipv6-cname variable. +if test "${with_ipv6_cname+set}" = set; then + enable_ipv6_cname="$with_ipv6_cname" +fi; +# If -enable-ipv6-cname or --disable-ipv6-cname were given then copy the value to the +# equivalent with_ipv6-cname variable. +if test "${enable_ipv6_cname+set}" = set; then + with_ipv6_cname="$enable_ipv6_cname" +fi; +# Check whether --with-ipv6-cname or --without-ipv6-cname was given. +if test "${with_ipv6_cname+set}" = set; then + enableval="$with_ipv6_cname" + withval="$with_ipv6_cname" -# If --with-ldflags or --without-ldflags were given then copy the value to the -# equivalent enable_ldflags variable. -if test "${with_ldflags+set}" = set; then - enable_ldflags="$with_ldflags" -fi; -# If -enable-ldflags or --disable-ldflags were given then copy the value to the -# equivalent with_ldflags variable. -if test "${enable_ldflags+set}" = set; then - with_ldflags="$enable_ldflags" -fi; -# Check whether --with-ldflags or --without-ldflags was given. -if test "${with_ldflags+set}" = set; then - enableval="$with_ldflags" - withval="$with_ldflags" - LDFLAGS="$with_ldflags" +else + with_ipv6_cname="no" fi; # If --with-rel-alloc or --without-rel-alloc were given then copy the value to the @@ -3020,7 +3362,6 @@ else with_rel_alloc='default' fi; - # If --with-dlmalloc or --without-dlmalloc were given then copy the value to the # equivalent enable_dlmalloc variable. if test "${with_dlmalloc+set}" = set; then @@ -3039,7 +3380,24 @@ else with_dlmalloc='default' fi; +# If --with-system-malloc or --without-system-malloc were given then copy the value to the +# equivalent enable_system-malloc variable. +if test "${with_system_malloc+set}" = set; then + enable_system_malloc="$with_system_malloc" +fi; +# If -enable-system-malloc or --disable-system-malloc were given then copy the value to the +# equivalent with_system-malloc variable. +if test "${enable_system_malloc+set}" = set; then + with_system_malloc="$enable_system_malloc" +fi; +# Check whether --with-system-malloc or --without-system-malloc was given. +if test "${with_system_malloc+set}" = set; then + enableval="$with_system_malloc" + withval="$with_system_malloc" +else + with_system_malloc='default' +fi; # If --with-debug-malloc or --without-debug-malloc were given then copy the value to the # equivalent enable_debug-malloc variable. if test "${with_debug_malloc+set}" = set; then @@ -3056,276 +3414,195 @@ withval="$with_debug_malloc" fi; - -# If --with-system-malloc or --without-system-malloc were given then copy the value to the -# equivalent enable_system-malloc variable. -if test "${with_system_malloc+set}" = set; then - enable_system_malloc="$with_system_malloc" +# If --with-pdump or --without-pdump were given then copy the value to the +# equivalent enable_pdump variable. +if test "${with_pdump+set}" = set; then + enable_pdump="$with_pdump" fi; -# If -enable-system-malloc or --disable-system-malloc were given then copy the value to the -# equivalent with_system-malloc variable. -if test "${enable_system_malloc+set}" = set; then - with_system_malloc="$enable_system_malloc" +# If -enable-pdump or --disable-pdump were given then copy the value to the +# equivalent with_pdump variable. +if test "${enable_pdump+set}" = set; then + with_pdump="$enable_pdump" fi; -# Check whether --with-system-malloc or --without-system-malloc was given. -if test "${with_system_malloc+set}" = set; then - enableval="$with_system_malloc" - withval="$with_system_malloc" +# Check whether --with-pdump or --without-pdump was given. +if test "${with_pdump+set}" = set; then + enableval="$with_pdump" + withval="$with_pdump" -else - with_system_malloc='default' fi; - -#Enable code. - -_database_notfirst="" -with_database_berkdb="" -enable_database_berkdb="" -with_database_dbm="" -enable_database_dbm="" -with_database_gdbm="" -enable_database_gdbm="" - -_database_types="berkdb dbm gdbm" -_database_default="berkdb,dbm,gdbm" - - - -# If --with-database or --without-database were given then copy the value to the -# equivalent enable_database variable. -if test "${with_database+set}" = set; then - enable_database="$with_database" +# If --with-dump-in-exec or --without-dump-in-exec were given then copy the value to the +# equivalent enable_dump-in-exec variable. +if test "${with_dump_in_exec+set}" = set; then + enable_dump_in_exec="$with_dump_in_exec" fi; -# If -enable-database or --disable-database were given then copy the value to the -# equivalent with_database variable. -if test "${enable_database+set}" = set; then - with_database="$enable_database" +# If -enable-dump-in-exec or --disable-dump-in-exec were given then copy the value to the +# equivalent with_dump-in-exec variable. +if test "${enable_dump_in_exec+set}" = set; then + with_dump_in_exec="$enable_dump_in_exec" fi; -# Check whether --with-database or --without-database was given. -if test "${with_database+set}" = set; then - enableval="$with_database" - withval="$with_database" - for x in `echo "$with_database" | sed -e 's/,/ /g'` ; do - _database_all_default="" - _database_found="" - case "$x" in - n | no | non | none ) _database_all_default=no ;; - a | al | all | both ) _database_all_default=yes ;; - esac - - if test -z "$_database_all_default"; then - for y in $_database_types; do - if test "$x" = "$y"; then - _database_found=yes - eval "with_database_$y=yes" - eval "enable_database_$y=yes" - elif test "$x" = "no$y"; then - _database_found=yes - eval "with_database_$y=no" - eval "enable_database_$y=no" - fi - done - test -z "$_database_found" && _database_bogus=yes - fi - if test "$_database_bogus" = "yes" -o \ - \( -n "$_database_all_default" -a -n "$_database_notfirst" \) ; then - (echo "$progname: Usage error:" -echo " " "Valid values for the --with-database option are: -$_database_types. With prefix \"no\", switch it off. -Defaults may be overridden with \`all' or \`none' first in the list. -Hardcoded default is: $_database_default." -echo " Use \`$progname --help' to show usage.") >&2 && exit 1 - elif test -n "$_database_all_default" ; then - for y in $_database_types; do - eval "with_database_$y=$_database_all_default" - eval "enable_database_$y=$_database_all_default" - done - fi - _database_notfirst=yes -done -unset _database_bogus _database_found _database_notfirst _database_types -unset _database_default _database_all_default x y - - -if test "$enable_database_dbm" = "yes" -a "$enable_database_gdbm" = "yes"; then - (echo "$progname: Usage error:" -echo " " "Only one of \`dbm' and \`gnudbm' may be specified -with the \`--with-database' option." -echo " Use \`$progname --help' to show usage.") >&2 && exit 1 -fi - +# Check whether --with-dump-in-exec or --without-dump-in-exec was given. +if test "${with_dump_in_exec+set}" = set; then + enableval="$with_dump_in_exec" + withval="$with_dump_in_exec" fi; - -_sound_notfirst="" -with_sound_native="" -enable_sound_native="" -with_sound_nas="" -enable_sound_nas="" -with_sound_esd=no -enable_sound_esd=no - -_sound_types="native nas esd" -_sound_default="native,nas,noesd" - - - -# If --with-sound or --without-sound were given then copy the value to the -# equivalent enable_sound variable. -if test "${with_sound+set}" = set; then - enable_sound="$with_sound" +# If --with-kkcc or --without-kkcc were given then copy the value to the +# equivalent enable_kkcc variable. +if test "${with_kkcc+set}" = set; then + enable_kkcc="$with_kkcc" fi; -# If -enable-sound or --disable-sound were given then copy the value to the -# equivalent with_sound variable. -if test "${enable_sound+set}" = set; then - with_sound="$enable_sound" +# If -enable-kkcc or --disable-kkcc were given then copy the value to the +# equivalent with_kkcc variable. +if test "${enable_kkcc+set}" = set; then + with_kkcc="$enable_kkcc" fi; -# Check whether --with-sound or --without-sound was given. -if test "${with_sound+set}" = set; then - enableval="$with_sound" - withval="$with_sound" - for x in `echo "$with_sound" | sed -e 's/,/ /g'` ; do - _sound_all_default="" - _sound_found="" - case "$x" in - n | no | non | none ) _sound_all_default=no ;; - a | al | all | both ) _sound_all_default=yes ;; - esac - - if test -z "$_sound_all_default"; then - for y in $_sound_types; do - if test "$x" = "$y"; then - _sound_found=yes - eval "with_sound_$y=yes" - eval "enable_sound_$y=yes" - elif test "$x" = "no$y"; then - _sound_found=yes - eval "with_sound_$y=no" - eval "enable_sound_$y=no" - fi - done - test -z "$_sound_found" && _sound_bogus=yes - fi - if test "$_sound_bogus" = "yes" -o \ - \( -n "$_sound_all_default" -a -n "$_sound_notfirst" \) ; then - (echo "$progname: Usage error:" -echo " " "Valid values for the --with-sound option are: -$_sound_types. With prefix \"no\", switch it off. -Defaults may be overridden with \`all' or \`none' first in the list. -Hardcoded default is: $_sound_default." -echo " Use \`$progname --help' to show usage.") >&2 && exit 1 - elif test -n "$_sound_all_default" ; then - for y in $_sound_types; do - eval "with_sound_$y=$_sound_all_default" - eval "enable_sound_$y=$_sound_all_default" - done - fi - _sound_notfirst=yes -done -unset _sound_bogus _sound_found _sound_notfirst _sound_types -unset _sound_default _sound_all_default x y - - +# Check whether --with-kkcc or --without-kkcc was given. +if test "${with_kkcc+set}" = set; then + enableval="$with_kkcc" + withval="$with_kkcc" else - enable_sound_nas="" -fi; - - -# If --with-athena or --without-athena were given then copy the value to the -# equivalent enable_athena variable. -if test "${with_athena+set}" = set; then - enable_athena="$with_athena" + enable_kkcc=yes fi; -# If -enable-athena or --disable-athena were given then copy the value to the -# equivalent with_athena variable. -if test "${enable_athena+set}" = set; then - with_athena="$enable_athena" +# If --with-mc-alloc or --without-mc-alloc were given then copy the value to the +# equivalent enable_mc-alloc variable. +if test "${with_mc_alloc+set}" = set; then + enable_mc_alloc="$with_mc_alloc" fi; -# Check whether --with-athena or --without-athena was given. -if test "${with_athena+set}" = set; then - enableval="$with_athena" - withval="$with_athena" - _athena_bogus=yes - for x in xaw 3d next 95 xpm ; do - if test $x = $with_athena ; then - _athena_bogus=no - fi - done - if test "$_athena_bogus" = "yes" ; then - (echo "$progname: Usage error:" -echo " " "The --with-athena option must have one of these values: \`xaw',\`3d',\`next',\`95',\`xpm'." -echo " Use \`$progname --help' to show usage.") >&2 && exit 1 - fi -unset _athena_bogus - - - +# If -enable-mc-alloc or --disable-mc-alloc were given then copy the value to the +# equivalent with_mc-alloc variable. +if test "${enable_mc_alloc+set}" = set; then + with_mc_alloc="$enable_mc_alloc" fi; +# Check whether --with-mc-alloc or --without-mc-alloc was given. +if test "${with_mc_alloc+set}" = set; then + enableval="$with_mc_alloc" + withval="$with_mc_alloc" -# If --with-xim or --without-xim were given then copy the value to the -# equivalent enable_xim variable. -if test "${with_xim+set}" = set; then - enable_xim="$with_xim" -fi; -# If -enable-xim or --disable-xim were given then copy the value to the -# equivalent with_xim variable. -if test "${enable_xim+set}" = set; then - with_xim="$enable_xim" +else + enable_mc_alloc=yes fi; -# Check whether --with-xim or --without-xim was given. -if test "${with_xim+set}" = set; then - enableval="$with_xim" - withval="$with_xim" - _xim_bogus=yes - for x in yes no xlib motif ; do - if test $x = $with_xim ; then - _xim_bogus=no - fi - done - if test "$_xim_bogus" = "yes" ; then +# If --with-newgc or --without-newgc were given then copy the value to the +# equivalent enable_newgc variable. +if test "${with_newgc+set}" = set; then + enable_newgc="$with_newgc" +fi; +# If -enable-newgc or --disable-newgc were given then copy the value to the +# equivalent with_newgc variable. +if test "${enable_newgc+set}" = set; then + with_newgc="$enable_newgc" +fi; +# Check whether --with-newgc or --without-newgc was given. +if test "${with_newgc+set}" = set; then + enableval="$with_newgc" + withval="$with_newgc" + +fi; +_vdb_notfirst="" +_vdb_auto_default= +_vdb_posix_default= +_vdb_win32_default= +_vdb_mach_default= +_vdb_fake_default= +_vdb_no_default= +_vdb_types="auto posix win32 mach fake no" +_vdb_default="auto,posix,win32,mach,fake,no" + +# If --with-vdb or --without-vdb were given then copy the value to the +# equivalent enable_vdb variable. +if test "${with_vdb+set}" = set; then + enable_vdb="$with_vdb" +fi; +# If -enable-vdb or --disable-vdb were given then copy the value to the +# equivalent with_vdb variable. +if test "${enable_vdb+set}" = set; then + with_vdb="$enable_vdb" +fi; +# Check whether --with-vdb or --without-vdb was given. +if test "${with_vdb+set}" = set; then + enableval="$with_vdb" + withval="$with_vdb" + _vdb_all_default="" +_require_vdb="" +case "$with_vdb" in + n | no | non | none ) _vdb_all_default=no ;; + n,* | no,* | non,* | none,* ) _vdb_all_default=no ;; + a | al | all | both ) _vdb_all_default=yes ;; + a,* | al,* | all,* | both,* ) _vdb_all_default=yes ;; + y | yes ) _require_vdb=yes ;; +esac +if test -n "$_vdb_all_default$_require_vdb"; then + _with_vdb_args=`echo $with_vdb | sed -e 's/^[a-z]*\(,\(.*\)\)\{0,1\}$/\2/'` +else + _with_vdb_args=$with_vdb +fi +for y in $_vdb_types; do + if test -n "$_vdb_all_default" ; then + eval "with_vdb_${y}=$_vdb_all_default" + else + eval "with_vdb_$y=\$_vdb_${y}_default" + fi +done +for x in `echo "$_with_vdb_args" | sed -e 's/,/ /g'` ; do + _vdb_found="" + for y in $_vdb_types; do + if test "$x" = "$y"; then + _vdb_found=yes + eval "with_vdb_$y=yes" + elif test "$x" = "no$y"; then + _vdb_found=yes + eval "with_vdb_$y=no" + fi + done + test -z "$_vdb_found" && \ (echo "$progname: Usage error:" -echo " " "The --with-xim option must have one of these values: \`yes',\`no',\`xlib',\`motif'." +echo " " "\ +Invalid type list supplied. Valid types for the --with-vdb option are: + $_vdb_types. + A prefix of \"no\" (eg, \"notype\" for \"type\") turns a type off. + Types not explicitly specified or negated take their defaults. + The list of defaults is \"$_vdb_default\". Prefixing \`all' or + \`none' to the list sets all defaults to on and off respectively. + \`yes' as the sole argument is equivalent to omitting the argument." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 - fi -unset _xim_bogus +done +for y in $_vdb_types; do + eval "enable_vdb_$y=\$with_vdb_$y" + unset _vdb_${y}_default +done +unset _vdb_types _vdb_default _vdb_all_default _vdb_use_defaults +unset _with_vdb_args _vdb_found x y _require_vdb +else + +# set default for each type +for y in $_vdb_types; do + eval "with_vdb_$y=\$_vdb_${y}_default" + eval "enable_vdb_$y=\$_vdb_${y}_default" + unset _vdb_${y}_default +done +enable_vdb="auto" fi; -# If --with-mail-locking or --without-mail-locking were given then copy the value to the -# equivalent enable_mail-locking variable. -if test "${with_mail_locking+set}" = set; then - enable_mail_locking="$with_mail_locking" +# If --with-modules or --without-modules were given then copy the value to the +# equivalent enable_modules variable. +if test "${with_modules+set}" = set; then + enable_modules="$with_modules" fi; -# If -enable-mail-locking or --disable-mail-locking were given then copy the value to the -# equivalent with_mail-locking variable. -if test "${enable_mail_locking+set}" = set; then - with_mail_locking="$enable_mail_locking" +# If -enable-modules or --disable-modules were given then copy the value to the +# equivalent with_modules variable. +if test "${enable_modules+set}" = set; then + with_modules="$enable_modules" fi; -# Check whether --with-mail-locking or --without-mail-locking was given. -if test "${with_mail_locking+set}" = set; then - enableval="$with_mail_locking" - withval="$with_mail_locking" - _mail_locking_bogus=yes - for x in lockf flock file locking mmdf pop ; do - if test $x = $with_mail_locking ; then - _mail_locking_bogus=no - fi - done - if test "$_mail_locking_bogus" = "yes" ; then - (echo "$progname: Usage error:" -echo " " "The --with-mail-locking option must have one of these values: \`lockf',\`flock',\`file',\`locking',\`mmdf',\`pop'." -echo " Use \`$progname --help' to show usage.") >&2 && exit 1 - fi -unset _mail_locking_bogus - - +# Check whether --with-modules or --without-modules was given. +if test "${with_modules+set}" = set; then + enableval="$with_modules" + withval="$with_modules" fi; - # If --with-bignum or --without-bignum were given then copy the value to the # equivalent enable_bignum variable. if test "${with_bignum+set}" = set; then @@ -3359,30 +3636,83 @@ enable_bignum="no" fi; -_error_checking_notfirst="" -with_error_checking_extents="" -enable_error_checking_extents="" -with_error_checking_types="" -enable_error_checking_types="" -with_error_checking_text="" -enable_error_checking_text="" -with_error_checking_gc="" -enable_error_checking_gc="" -with_error_checking_malloc="" -enable_error_checking_malloc="" -with_error_checking_byte_code="" -enable_error_checking_byte_code="" -with_error_checking_glyphs="" -enable_error_checking_glyphs="" -with_error_checking_display="" -enable_error_checking_display="" -with_error_checking_structures="" -enable_error_checking_structures="" +# If --with-workshop or --without-workshop were given then copy the value to the +# equivalent enable_workshop variable. +if test "${with_workshop+set}" = set; then + enable_workshop="$with_workshop" +fi; +# If -enable-workshop or --disable-workshop were given then copy the value to the +# equivalent with_workshop variable. +if test "${enable_workshop+set}" = set; then + with_workshop="$enable_workshop" +fi; +# Check whether --with-workshop or --without-workshop was given. +if test "${with_workshop+set}" = set; then + enableval="$with_workshop" + withval="$with_workshop" -_error_checking_types="extents types text gc malloc byte_code glyphs display structures" -_error_checking_default="extents,types,text,gc,malloc,byte_code,glyphs,display,structures" +fi; +# If --with-sparcworks or --without-sparcworks were given then copy the value to the +# equivalent enable_sparcworks variable. +if test "${with_sparcworks+set}" = set; then + enable_sparcworks="$with_sparcworks" +fi; +# If -enable-sparcworks or --disable-sparcworks were given then copy the value to the +# equivalent with_sparcworks variable. +if test "${enable_sparcworks+set}" = set; then + with_sparcworks="$enable_sparcworks" +fi; +# Check whether --with-sparcworks or --without-sparcworks was given. +if test "${with_sparcworks+set}" = set; then + enableval="$with_sparcworks" + withval="$with_sparcworks" + +fi; +# If --with-infodock or --without-infodock were given then copy the value to the +# equivalent enable_infodock variable. +if test "${with_infodock+set}" = set; then + enable_infodock="$with_infodock" +fi; +# If -enable-infodock or --disable-infodock were given then copy the value to the +# equivalent with_infodock variable. +if test "${enable_infodock+set}" = set; then + with_infodock="$enable_infodock" +fi; +# Check whether --with-infodock or --without-infodock was given. +if test "${with_infodock+set}" = set; then + enableval="$with_infodock" + withval="$with_infodock" + +fi; +# If --with-debug or --without-debug were given then copy the value to the +# equivalent enable_debug variable. +if test "${with_debug+set}" = set; then + enable_debug="$with_debug" +fi; +# If -enable-debug or --disable-debug were given then copy the value to the +# equivalent with_debug variable. +if test "${enable_debug+set}" = set; then + with_debug="$enable_debug" +fi; +# Check whether --with-debug or --without-debug was given. +if test "${with_debug+set}" = set; then + enableval="$with_debug" + withval="$with_debug" +fi; +_error_checking_notfirst="" +_error_checking_extents_default="" +_error_checking_types_default="" +_error_checking_text_default="" +_error_checking_gc_default="" +_error_checking_malloc_default="" +_error_checking_byte_code_default="" +_error_checking_glyphs_default="" +_error_checking_display_default="" +_error_checking_structures_default="" +_error_checking_types="extents types text gc malloc byte_code glyphs display structures" +_error_checking_default="extents,types,text,gc,malloc,byte_code,glyphs,display,structures" # If --with-error-checking or --without-error-checking were given then copy the value to the # equivalent enable_error-checking variable. @@ -3398,179 +3728,165 @@ if test "${with_error_checking+set}" = set; then enableval="$with_error_checking" withval="$with_error_checking" - for x in `echo "$with_error_checking" | sed -e 's/,/ /g'` ; do - _error_checking_all_default="" - _error_checking_found="" - case "$x" in - n | no | non | none ) _error_checking_all_default=no ;; - a | al | all | both ) _error_checking_all_default=yes ;; - esac - - if test -z "$_error_checking_all_default"; then - for y in $_error_checking_types; do - if test "$x" = "$y"; then - _error_checking_found=yes - eval "with_error_checking_$y=yes" - eval "enable_error_checking_$y=yes" - elif test "$x" = "no$y"; then - _error_checking_found=yes - eval "with_error_checking_$y=no" - eval "enable_error_checking_$y=no" - fi - done - test -z "$_error_checking_found" && _error_checking_bogus=yes + _error_checking_all_default="" +_require_error_checking="" +case "$with_error_checking" in + n | no | non | none ) _error_checking_all_default=no ;; + n,* | no,* | non,* | none,* ) _error_checking_all_default=no ;; + a | al | all | both ) _error_checking_all_default=yes ;; + a,* | al,* | all,* | both,* ) _error_checking_all_default=yes ;; + y | yes ) _require_error_checking=yes ;; +esac +if test -n "$_error_checking_all_default$_require_error_checking"; then + _with_error_checking_args=`echo $with_error_checking | sed -e 's/^[a-z]*\(,\(.*\)\)\{0,1\}$/\2/'` +else + _with_error_checking_args=$with_error_checking +fi +for y in $_error_checking_types; do + if test -n "$_error_checking_all_default" ; then + eval "with_error_checking_${y}=$_error_checking_all_default" + else + eval "with_error_checking_$y=\$_error_checking_${y}_default" fi - if test "$_error_checking_bogus" = "yes" -o \ - \( -n "$_error_checking_all_default" -a -n "$_error_checking_notfirst" \) ; then +done +for x in `echo "$_with_error_checking_args" | sed -e 's/,/ /g'` ; do + _error_checking_found="" + for y in $_error_checking_types; do + if test "$x" = "$y"; then + _error_checking_found=yes + eval "with_error_checking_$y=yes" + elif test "$x" = "no$y"; then + _error_checking_found=yes + eval "with_error_checking_$y=no" + fi + done + test -z "$_error_checking_found" && \ (echo "$progname: Usage error:" -echo " " "Valid values for the --with-error-checking option are: -$_error_checking_types. With prefix \"no\", switch it off. -Defaults may be overridden with \`all' or \`none' first in the list. -Hardcoded default is: $_error_checking_default." +echo " " "\ +Invalid type list supplied. Valid types for the --with-error-checking option are: + $_error_checking_types. + A prefix of \"no\" (eg, \"notype\" for \"type\") turns a type off. + Types not explicitly specified or negated take their defaults. + The list of defaults is \"$_error_checking_default\". Prefixing \`all' or + \`none' to the list sets all defaults to on and off respectively. + \`yes' as the sole argument is equivalent to omitting the argument." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 - elif test -n "$_error_checking_all_default" ; then - for y in $_error_checking_types; do - eval "with_error_checking_$y=$_error_checking_all_default" - eval "enable_error_checking_$y=$_error_checking_all_default" - done - fi - _error_checking_notfirst=yes done -unset _error_checking_bogus _error_checking_found _error_checking_notfirst _error_checking_types -unset _error_checking_default _error_checking_all_default x y +for y in $_error_checking_types; do + eval "enable_error_checking_$y=\$with_error_checking_$y" + unset _error_checking_${y}_default +done +unset _error_checking_types _error_checking_default _error_checking_all_default _error_checking_use_defaults +unset _with_error_checking_args _error_checking_found x y _require_error_checking -fi; +else +# set default for each type +for y in $_error_checking_types; do + eval "with_error_checking_$y=\$_error_checking_${y}_default" + eval "enable_error_checking_$y=\$_error_checking_${y}_default" + unset _error_checking_${y}_default +done -# If --with-menubars or --without-menubars were given then copy the value to the -# equivalent enable_menubars variable. -if test "${with_menubars+set}" = set; then - enable_menubars="$with_menubars" fi; -# If -enable-menubars or --disable-menubars were given then copy the value to the -# equivalent with_menubars variable. -if test "${enable_menubars+set}" = set; then - with_menubars="$enable_menubars" +# If --with-assertions or --without-assertions were given then copy the value to the +# equivalent enable_assertions variable. +if test "${with_assertions+set}" = set; then + enable_assertions="$with_assertions" fi; -# Check whether --with-menubars or --without-menubars was given. -if test "${with_menubars+set}" = set; then - enableval="$with_menubars" - withval="$with_menubars" - _menubars_bogus=yes - for x in yes no lucid motif athena gtk msw ; do - if test $x = $with_menubars ; then - _menubars_bogus=no - fi - done - if test "$_menubars_bogus" = "yes" ; then - (echo "$progname: Usage error:" -echo " " "The --with-menubars option must have one of these values: \`yes',\`no',\`lucid',\`motif',\`athena',\`gtk',\`msw'." -echo " Use \`$progname --help' to show usage.") >&2 && exit 1 - fi -unset _menubars_bogus - - - +# If -enable-assertions or --disable-assertions were given then copy the value to the +# equivalent with_assertions variable. +if test "${enable_assertions+set}" = set; then + with_assertions="$enable_assertions" fi; +# Check whether --with-assertions or --without-assertions was given. +if test "${with_assertions+set}" = set; then + enableval="$with_assertions" + withval="$with_assertions" - -# If --with-scrollbars or --without-scrollbars were given then copy the value to the -# equivalent enable_scrollbars variable. -if test "${with_scrollbars+set}" = set; then - enable_scrollbars="$with_scrollbars" fi; -# If -enable-scrollbars or --disable-scrollbars were given then copy the value to the -# equivalent with_scrollbars variable. -if test "${enable_scrollbars+set}" = set; then - with_scrollbars="$enable_scrollbars" +# If --with-memory-usage-stats or --without-memory-usage-stats were given then copy the value to the +# equivalent enable_memory-usage-stats variable. +if test "${with_memory_usage_stats+set}" = set; then + enable_memory_usage_stats="$with_memory_usage_stats" fi; -# Check whether --with-scrollbars or --without-scrollbars was given. -if test "${with_scrollbars+set}" = set; then - enableval="$with_scrollbars" - withval="$with_scrollbars" - _scrollbars_bogus=yes - for x in yes no lucid motif athena gtk msw ; do - if test $x = $with_scrollbars ; then - _scrollbars_bogus=no - fi - done - if test "$_scrollbars_bogus" = "yes" ; then - (echo "$progname: Usage error:" -echo " " "The --with-scrollbars option must have one of these values: \`yes',\`no',\`lucid',\`motif',\`athena',\`gtk',\`msw'." -echo " Use \`$progname --help' to show usage.") >&2 && exit 1 - fi -unset _scrollbars_bogus - - - +# If -enable-memory-usage-stats or --disable-memory-usage-stats were given then copy the value to the +# equivalent with_memory-usage-stats variable. +if test "${enable_memory_usage_stats+set}" = set; then + with_memory_usage_stats="$enable_memory_usage_stats" fi; +# Check whether --with-memory-usage-stats or --without-memory-usage-stats was given. +if test "${with_memory_usage_stats+set}" = set; then + enableval="$with_memory_usage_stats" + withval="$with_memory_usage_stats" - -# If --with-dialogs or --without-dialogs were given then copy the value to the -# equivalent enable_dialogs variable. -if test "${with_dialogs+set}" = set; then - enable_dialogs="$with_dialogs" fi; -# If -enable-dialogs or --disable-dialogs were given then copy the value to the -# equivalent with_dialogs variable. -if test "${enable_dialogs+set}" = set; then - with_dialogs="$enable_dialogs" +# If --with-quick-build or --without-quick-build were given then copy the value to the +# equivalent enable_quick-build variable. +if test "${with_quick_build+set}" = set; then + enable_quick_build="$with_quick_build" fi; -# Check whether --with-dialogs or --without-dialogs was given. -if test "${with_dialogs+set}" = set; then - enableval="$with_dialogs" - withval="$with_dialogs" - _dialogs_bogus=yes - for x in yes no lucid motif athena gtk msw ; do - if test $x = $with_dialogs ; then - _dialogs_bogus=no - fi - done - if test "$_dialogs_bogus" = "yes" ; then - (echo "$progname: Usage error:" -echo " " "The --with-dialogs option must have one of these values: \`yes',\`no',\`lucid',\`motif',\`athena',\`gtk',\`msw'." -echo " Use \`$progname --help' to show usage.") >&2 && exit 1 - fi -unset _dialogs_bogus - - - +# If -enable-quick-build or --disable-quick-build were given then copy the value to the +# equivalent with_quick-build variable. +if test "${enable_quick_build+set}" = set; then + with_quick_build="$enable_quick_build" fi; +# Check whether --with-quick-build or --without-quick-build was given. +if test "${with_quick_build+set}" = set; then + enableval="$with_quick_build" + withval="$with_quick_build" - -# If --with-widgets or --without-widgets were given then copy the value to the -# equivalent enable_widgets variable. -if test "${with_widgets+set}" = set; then - enable_widgets="$with_widgets" fi; -# If -enable-widgets or --disable-widgets were given then copy the value to the -# equivalent with_widgets variable. -if test "${enable_widgets+set}" = set; then - with_widgets="$enable_widgets" +# If --with-union-type or --without-union-type were given then copy the value to the +# equivalent enable_union-type variable. +if test "${with_union_type+set}" = set; then + enable_union_type="$with_union_type" fi; -# Check whether --with-widgets or --without-widgets was given. -if test "${with_widgets+set}" = set; then - enableval="$with_widgets" - withval="$with_widgets" - _widgets_bogus=yes - for x in yes no lucid motif athena gtk msw ; do - if test $x = $with_widgets ; then - _widgets_bogus=no - fi - done - if test "$_widgets_bogus" = "yes" ; then - (echo "$progname: Usage error:" -echo " " "The --with-widgets option must have one of these values: \`yes',\`no',\`lucid',\`motif',\`athena',\`gtk',\`msw'." -echo " Use \`$progname --help' to show usage.") >&2 && exit 1 - fi -unset _widgets_bogus - +# If -enable-union-type or --disable-union-type were given then copy the value to the +# equivalent with_union-type variable. +if test "${enable_union_type+set}" = set; then + with_union_type="$enable_union_type" +fi; +# Check whether --with-union-type or --without-union-type was given. +if test "${with_union_type+set}" = set; then + enableval="$with_union_type" + withval="$with_union_type" +fi; +# If --with-quantify or --without-quantify were given then copy the value to the +# equivalent enable_quantify variable. +if test "${with_quantify+set}" = set; then + enable_quantify="$with_quantify" +fi; +# If -enable-quantify or --disable-quantify were given then copy the value to the +# equivalent with_quantify variable. +if test "${enable_quantify+set}" = set; then + with_quantify="$enable_quantify" +fi; +# Check whether --with-quantify or --without-quantify was given. +if test "${with_quantify+set}" = set; then + enableval="$with_quantify" + withval="$with_quantify" fi; +# If --with-purify or --without-purify were given then copy the value to the +# equivalent enable_purify variable. +if test "${with_purify+set}" = set; then + enable_purify="$with_purify" +fi; +# If -enable-purify or --disable-purify were given then copy the value to the +# equivalent with_purify variable. +if test "${enable_purify+set}" = set; then + with_purify="$enable_purify" +fi; +# Check whether --with-purify or --without-purify was given. +if test "${with_purify+set}" = set; then + enableval="$with_purify" + withval="$with_purify" +fi; if test "$with_purify" = "yes" -o "$with_quantify" = "yes"; then test "$with_system_malloc" = "default" && with_system_malloc=yes @@ -3585,6 +3901,19 @@ fi +if test \( "$with_xft_menubars" = "yes" -o "$with_xft_tabs" = "yes" \ + -o "$with_xft_gauges" = "yes" \) -a "$with_xft_emacs" = "no"; then + { echo "$as_me:$LINENO: WARNING: Forcing --with-xft=emacs because Xft is enabled" >&5 +echo "$as_me: WARNING: Forcing --with-xft=emacs because Xft is enabled" >&2;} + with_xft_emacs=yes +fi + +if test "$with_xfs" = "yes" -a "$with_xft_menubars" = "yes"; then + (echo "$progname: Usage error:" +echo " " "XFS and Xft in the menubars are incompatible!" +echo " Use \`$progname --help' to show usage.") >&2 && exit 1 +fi + test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. if test "x$exec_prefix" = xNONE @@ -4337,6 +4666,38 @@ esac fi +if test "$enable_newgc" = "yes"; then + if test "$enable_vdb" = "auto"; then + case "$opsys" in + darwin ) cat >>confdefs.h <<\_ACEOF +#define VDB_MACH 1 +_ACEOF + have_vdb_mach=yes ;; + cygwin* ) cat >>confdefs.h <<\_ACEOF +#define VDB_WIN32 1 +_ACEOF + have_vdb_win32=yes ;; + linux* ) check_vdb_posix=yes ;; + freebsd ) check_vdb_posix=yes ;; + * ) check_vdb_posix=yes ;; + esac + else + case "$enable_vdb" in + mach ) cat >>confdefs.h <<\_ACEOF +#define VDB_MACH 1 +_ACEOF + have_vdb_mach=yes ;; + win32 ) cat >>confdefs.h <<\_ACEOF +#define VDB_WIN32 1 +_ACEOF + have_vdb_win32=yes ;; + posix ) check_vdb_posix=yes ;; + fake ) have_vdb_fake=yes ;; + no ) have_vdb_fake=yes ;; + esac + fi +fi + if test -z "$with_dynamic"; then case "$opsys" in hpux* | sunos4* ) with_dynamic=no ;; @@ -8536,6 +8897,11 @@ fi fi +if test "$enable_newgc" = "yes"; then + enable_mc_alloc=yes + enable_kkcc=yes +fi + test "$verbose" = "yes" && \ for var in libs_machine libs_system libs_termcap libs_standard objects_machine objects_system c_switch_machine c_switch_system ld_switch_machine ld_switch_system unexec ld_switch_shared ld lib_gcc ld_text_start_addr start_files ordinary_link have_terminfo mail_use_flock mail_use_lockf; do eval "echo \"$var = '\$$var'\""; done && echo "" @@ -10187,9 +10553,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -15654,9 +16020,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -17444,9 +17810,9 @@ echo "$as_me: WARNING: Xm/Xm.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -17816,9 +18182,9 @@ echo "$as_me: WARNING: X11/Intrinsic.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -18409,9 +18775,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -18557,14 +18923,557 @@ int main () { - + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + cat >>confdefs.h <<\_ACEOF +#define XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE 1 +_ACEOF + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + + test -z "$with_xmu" && { echo "$as_me:$LINENO: checking for XmuReadBitmapDataFromFile in -lXmu" >&5 +echo $ECHO_N "checking for XmuReadBitmapDataFromFile in -lXmu... $ECHO_C" >&6 +if test "${ac_cv_lib_Xmu_XmuReadBitmapDataFromFile+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lXmu $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char XmuReadBitmapDataFromFile (); +int +main () +{ +XmuReadBitmapDataFromFile (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_Xmu_XmuReadBitmapDataFromFile=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_Xmu_XmuReadBitmapDataFromFile=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_Xmu_XmuReadBitmapDataFromFile" >&5 +echo "${ECHO_T}$ac_cv_lib_Xmu_XmuReadBitmapDataFromFile" >&6 +if test $ac_cv_lib_Xmu_XmuReadBitmapDataFromFile = yes; then + with_xmu=yes +else + with_xmu=no +fi + } + if test "$with_xmu" = "no"; then + extra_objs="$extra_objs xmu.o" && if test "$verbose" = "yes"; then + echo " xemacs will be linked with \"xmu.o\"" + fi + else + libs_x="-lXmu $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-lXmu\" to \$libs_x"; fi + cat >>confdefs.h <<\_ACEOF +#define HAVE_XMU 1 +_ACEOF + + fi + + echo "$as_me:$LINENO: checking for main in -lXbsd" >&5 +echo $ECHO_N "checking for main in -lXbsd... $ECHO_C" >&6 +if test "${ac_cv_lib_Xbsd_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lXbsd $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_Xbsd_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_Xbsd_main=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_Xbsd_main" >&5 +echo "${ECHO_T}$ac_cv_lib_Xbsd_main" >&6 +if test $ac_cv_lib_Xbsd_main = yes; then + libs_x="-lXbsd $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-lXbsd\" to \$libs_x"; fi +fi + + + if test "$unexec" = "unexaix.o" -a "$x11_release" = "6"; then + if test "$GCC" = "yes"; then + X_CFLAGS="-mthreads $X_CFLAGS" && if test "$verbose" = "yes"; then echo " Prepending \"-mthreads\" to \$X_CFLAGS"; fi + libs_x="-mthreads $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-mthreads\" to \$libs_x"; fi + else + case "$CC" in + "xlc" ) CC="xlc_r" ;; + "xlC" ) CC="xlC_r" ;; + "cc" ) CC="cc_r" ;; + esac + fi + fi + + + if test "$with_xft_emacs" = "yes"; then + { echo "$as_me:$LINENO: checking for Xrender, fontconfig, and Xft..." >&5 +echo "$as_me: checking for Xrender, fontconfig, and Xft..." >&6;} + xft_includes_found=no + +for ac_header in freetype/config/ftheader.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + xft_includes_found=yes +else + + for freetype_include_top in "/usr/X11R6/include/freetype2" \ + "/usr/include/freetype2" + do + if test -d $freetype_include_top; then + { echo "$as_me:$LINENO: checking in ${freetype_include_top}/freetype2..." >&5 +echo "$as_me: checking in ${freetype_include_top}/freetype2..." >&6;} + unset "$as_ac_Header" + save_c_switch_site="$c_switch_site" + c_switch_site="$c_switch_site -I${freetype_include_top}" + +for ac_header in freetype/config/ftheader.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + xft_includes_found=yes +else + c_switch_site=$save_c_switch_site +fi + +done + + fi + done + if test "$xft_includes_found" != "yes"; then + { echo "Error:" "Unable to find headers for --with-xft" >&2; exit 1; } + else + echo "$as_me:$LINENO: checking for XRenderQueryExtension in -lXrender" >&5 +echo $ECHO_N "checking for XRenderQueryExtension in -lXrender... $ECHO_C" >&6 +if test "${ac_cv_lib_Xrender_XRenderQueryExtension+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lXrender $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char XRenderQueryExtension (); +int +main () +{ +XRenderQueryExtension (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -18578,34 +19487,38 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' + { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + ac_cv_lib_Xrender_XRenderQueryExtension=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - cat >>confdefs.h <<\_ACEOF -#define XREGISTERIMINSTANTIATECALLBACK_NONSTANDARD_PROTOTYPE 1 -_ACEOF - +ac_cv_lib_Xrender_XRenderQueryExtension=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_Xrender_XRenderQueryExtension" >&5 +echo "${ECHO_T}$ac_cv_lib_Xrender_XRenderQueryExtension" >&6 +if test $ac_cv_lib_Xrender_XRenderQueryExtension = yes; then + libs_x="-lXrender $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-lXrender\" to \$libs_x"; fi +else + { echo "Error:" "Unable to find libXrender for --with-xft" >&2; exit 1; } fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - test -z "$with_xmu" && { echo "$as_me:$LINENO: checking for XmuReadBitmapDataFromFile in -lXmu" >&5 -echo $ECHO_N "checking for XmuReadBitmapDataFromFile in -lXmu... $ECHO_C" >&6 -if test "${ac_cv_lib_Xmu_XmuReadBitmapDataFromFile+set}" = set; then + echo "$as_me:$LINENO: checking for FcPatternCreate in -lfontconfig" >&5 +echo $ECHO_N "checking for FcPatternCreate in -lfontconfig... $ECHO_C" >&6 +if test "${ac_cv_lib_fontconfig_FcPatternCreate+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lXmu $LIBS" +LIBS="-lfontconfig $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -18619,11 +19532,11 @@ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char XmuReadBitmapDataFromFile (); +char FcPatternCreate (); int main () { -XmuReadBitmapDataFromFile (); +FcPatternCreate (); ; return 0; } @@ -18650,44 +19563,32 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_Xmu_XmuReadBitmapDataFromFile=yes + ac_cv_lib_fontconfig_FcPatternCreate=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_Xmu_XmuReadBitmapDataFromFile=no +ac_cv_lib_fontconfig_FcPatternCreate=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_Xmu_XmuReadBitmapDataFromFile" >&5 -echo "${ECHO_T}$ac_cv_lib_Xmu_XmuReadBitmapDataFromFile" >&6 -if test $ac_cv_lib_Xmu_XmuReadBitmapDataFromFile = yes; then - with_xmu=yes +echo "$as_me:$LINENO: result: $ac_cv_lib_fontconfig_FcPatternCreate" >&5 +echo "${ECHO_T}$ac_cv_lib_fontconfig_FcPatternCreate" >&6 +if test $ac_cv_lib_fontconfig_FcPatternCreate = yes; then + libs_x="-lfontconfig $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-lfontconfig\" to \$libs_x"; fi else - with_xmu=no + { echo "Error:" "Unable to find libfontconfig for --with-xft" >&2; exit 1; } fi - } - if test "$with_xmu" = "no"; then - extra_objs="$extra_objs xmu.o" && if test "$verbose" = "yes"; then - echo " xemacs will be linked with \"xmu.o\"" - fi - else - libs_x="-lXmu $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-lXmu\" to \$libs_x"; fi - cat >>confdefs.h <<\_ACEOF -#define HAVE_XMU 1 -_ACEOF - - fi - echo "$as_me:$LINENO: checking for main in -lXbsd" >&5 -echo $ECHO_N "checking for main in -lXbsd... $ECHO_C" >&6 -if test "${ac_cv_lib_Xbsd_main+set}" = set; then + echo "$as_me:$LINENO: checking for XftFontOpen in -lXft" >&5 +echo $ECHO_N "checking for XftFontOpen in -lXft... $ECHO_C" >&6 +if test "${ac_cv_lib_Xft_XftFontOpen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lXbsd $LIBS" +LIBS="-lXft $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -18695,11 +19596,17 @@ cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ - +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char XftFontOpen (); int main () { -main (); +XftFontOpen (); ; return 0; } @@ -18726,35 +19633,36 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_Xbsd_main=yes + ac_cv_lib_Xft_XftFontOpen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_Xbsd_main=no +ac_cv_lib_Xft_XftFontOpen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_Xbsd_main" >&5 -echo "${ECHO_T}$ac_cv_lib_Xbsd_main" >&6 -if test $ac_cv_lib_Xbsd_main = yes; then - libs_x="-lXbsd $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-lXbsd\" to \$libs_x"; fi +echo "$as_me:$LINENO: result: $ac_cv_lib_Xft_XftFontOpen" >&5 +echo "${ECHO_T}$ac_cv_lib_Xft_XftFontOpen" >&6 +if test $ac_cv_lib_Xft_XftFontOpen = yes; then + libs_x="-lXft $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-lXft\" to \$libs_x"; fi +else + { echo "Error:" "Unable to find libXft for --with-xft" >&2; exit 1; } fi + cat >>confdefs.h <<\_ACEOF +#define USE_XFT 1 +_ACEOF + + unset xft_includes_found + fi + +fi + +done - if test "$unexec" = "unexaix.o" -a "$x11_release" = "6"; then - if test "$GCC" = "yes"; then - X_CFLAGS="-mthreads $X_CFLAGS" && if test "$verbose" = "yes"; then echo " Prepending \"-mthreads\" to \$X_CFLAGS"; fi - libs_x="-mthreads $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-mthreads\" to \$libs_x"; fi - else - case "$CC" in - "xlc" ) CC="xlc_r" ;; - "xlC" ) CC="xlC_r" ;; - "cc" ) CC="cc_r" ;; - esac - fi fi fi @@ -19143,9 +20051,9 @@ echo "$as_me: WARNING: X11/Xauth.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -19394,9 +20302,9 @@ echo "$as_me: WARNING: dlfcn.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -19697,9 +20605,9 @@ echo "$as_me: WARNING: dl.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -19947,9 +20855,9 @@ echo "$as_me: WARNING: ltdl.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -20967,9 +21875,9 @@ echo "$as_me: WARNING: ${dir}tt_c.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -21214,9 +22122,9 @@ echo "$as_me: WARNING: Dt/Dt.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -21504,9 +22412,9 @@ echo "$as_me: WARNING: ldap.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -21648,9 +22556,9 @@ echo "$as_me: WARNING: lber.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -22271,9 +23179,9 @@ echo "$as_me: WARNING: ${header_dir}libpq-fe.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -22297,7 +23205,10 @@ done - test -n "$libpq_fe_h_file" && { echo "$as_me:$LINENO: checking for PQconnectdb in -lpq" >&5 + pq_libs= + extra_libs= + if test -n "$libpq_fe_h_file"; then + echo "$as_me:$LINENO: checking for PQconnectdb in -lpq" >&5 echo $ECHO_N "checking for PQconnectdb in -lpq... $ECHO_C" >&6 if test "${ac_cv_lib_pq_PQconnectdb+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -22362,9 +23273,86 @@ echo "$as_me:$LINENO: result: $ac_cv_lib_pq_PQconnectdb" >&5 echo "${ECHO_T}$ac_cv_lib_pq_PQconnectdb" >&6 if test $ac_cv_lib_pq_PQconnectdb = yes; then - have_libpq=yes + pq_libs="-lpq" +else + + unset ac_cv_lib_pq_PQconnectdb; + echo "$as_me:$LINENO: checking for PQconnectdb in -lpq" >&5 +echo $ECHO_N "checking for PQconnectdb in -lpq... $ECHO_C" >&6 +if test "${ac_cv_lib_pq_PQconnectdb+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpq -lcrypto -lssl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char PQconnectdb (); +int +main () +{ +PQconnectdb (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_pq_PQconnectdb=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_pq_PQconnectdb=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_pq_PQconnectdb" >&5 +echo "${ECHO_T}$ac_cv_lib_pq_PQconnectdb" >&6 +if test $ac_cv_lib_pq_PQconnectdb = yes; then + pq_libs="-lpq -lcrypto -lssl" fi - } + +fi + + if test -z "$pq_libs"; then + have_libpq="no" + else + have_libpq="yes" + fi + fi if test -n "$libpq_fe_h_file" -a "$have_libpq" = "yes"; then with_postgresql=yes @@ -22378,7 +23366,7 @@ echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" +LIBS="-lpq $extra_libs $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -22443,13 +23431,15 @@ #define HAVE_POSTGRESQLV7 1 _ACEOF +else + : fi cat >>confdefs.h <<_ACEOF #define LIBPQ_FE_H_FILE "$libpq_fe_h_file" _ACEOF - postgresql_libs="-lpq $postgresql_libs" && if test "$verbose" = "yes"; then echo " Prepending \"-lpq\" to \$postgresql_libs"; fi + postgresql_libs="$pq_libs $postgresql_libs" && if test "$verbose" = "yes"; then echo " Prepending \"$pq_libs\" to \$postgresql_libs"; fi MAKE_SUBDIR="$MAKE_SUBDIR modules/postgresql" && if test "$verbose" = "yes"; then echo " Appending \"modules/postgresql\" to \$MAKE_SUBDIR"; fi need_modules_common=yes if test "$enable_modules" = "yes"; then @@ -22743,9 +23733,9 @@ echo "$as_me: WARNING: compface.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -23185,9 +24175,9 @@ echo "$as_me: WARNING: jpeglib.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -23505,9 +24495,9 @@ echo "$as_me: WARNING: png.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -23791,9 +24781,9 @@ echo "$as_me: WARNING: tiffio.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -24017,9 +25007,9 @@ echo "$as_me: WARNING: compface.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -24565,9 +25555,9 @@ echo "$as_me: WARNING: X11/Xaw/ThreeD.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -24824,9 +25814,9 @@ echo "$as_me: WARNING: X11/$athena_variant/ThreeD.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -25027,9 +26017,9 @@ echo "$as_me: WARNING: $athena_variant/ThreeD.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -25229,9 +26219,9 @@ echo "$as_me: WARNING: X11/Xaw3d/ThreeD.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -25248,87 +26238,401 @@ echo "${ECHO_T}$ac_cv_header_X11_Xaw3d_ThreeD_h" >&6 fi -if test $ac_cv_header_X11_Xaw3d_ThreeD_h = yes; then - - { echo "$as_me:$LINENO: WARNING: Assuming that X11/Xaw3d headers are suitable for $athena_variant." >&5 -echo "$as_me: WARNING: Assuming that X11/Xaw3d headers are suitable for $athena_variant." >&2;} - athena_h_path=X11/Xaw3d +if test $ac_cv_header_X11_Xaw3d_ThreeD_h = yes; then + + { echo "$as_me:$LINENO: WARNING: Assuming that X11/Xaw3d headers are suitable for $athena_variant." >&5 +echo "$as_me: WARNING: Assuming that X11/Xaw3d headers are suitable for $athena_variant." >&2;} + athena_h_path=X11/Xaw3d + +fi + + +fi + + + fi + + if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then + echo "$as_me:$LINENO: checking for Xaw3d/XawInit.h" >&5 +echo $ECHO_N "checking for Xaw3d/XawInit.h... $ECHO_C" >&6 +if test "${ac_cv_header_Xaw3d_XawInit_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#if HAVE_X11_XFUNCPROTO_H +#include +#endif +#include + + +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_Xaw3d_XawInit_h=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_Xaw3d_XawInit_h=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_header_Xaw3d_XawInit_h" >&5 +echo "${ECHO_T}$ac_cv_header_Xaw3d_XawInit_h" >&6 +if test $ac_cv_header_Xaw3d_XawInit_h = yes; then + if test "${ac_cv_header_Xaw3d_ThreeD_h+set}" = set; then + echo "$as_me:$LINENO: checking for Xaw3d/ThreeD.h" >&5 +echo $ECHO_N "checking for Xaw3d/ThreeD.h... $ECHO_C" >&6 +if test "${ac_cv_header_Xaw3d_ThreeD_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_Xaw3d_ThreeD_h" >&5 +echo "${ECHO_T}$ac_cv_header_Xaw3d_ThreeD_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking Xaw3d/ThreeD.h usability" >&5 +echo $ECHO_N "checking Xaw3d/ThreeD.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking Xaw3d/ThreeD.h presence" >&5 +echo $ECHO_N "checking Xaw3d/ThreeD.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: Xaw3d/ThreeD.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: Xaw3d/ThreeD.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: Xaw3d/ThreeD.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: Xaw3d/ThreeD.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: Xaw3d/ThreeD.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: Xaw3d/ThreeD.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: Xaw3d/ThreeD.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: Xaw3d/ThreeD.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for Xaw3d/ThreeD.h" >&5 +echo $ECHO_N "checking for Xaw3d/ThreeD.h... $ECHO_C" >&6 +if test "${ac_cv_header_Xaw3d_ThreeD_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_Xaw3d_ThreeD_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_Xaw3d_ThreeD_h" >&5 +echo "${ECHO_T}$ac_cv_header_Xaw3d_ThreeD_h" >&6 + +fi +if test $ac_cv_header_Xaw3d_ThreeD_h = yes; then + + { echo "$as_me:$LINENO: WARNING: Assuming that Xaw3d headers are suitable for $athena_variant." >&5 +echo "$as_me: WARNING: Assuming that Xaw3d headers are suitable for $athena_variant." >&2;} + athena_h_path=Xaw3d + +fi + + +fi + + + fi + + if test -z "$athena_h_path"; then + if test "${ac_cv_header_X11_Xaw_ThreeD_h+set}" = set; then + echo "$as_me:$LINENO: checking for X11/Xaw/ThreeD.h" >&5 +echo $ECHO_N "checking for X11/Xaw/ThreeD.h... $ECHO_C" >&6 +if test "${ac_cv_header_X11_Xaw_ThreeD_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_X11_Xaw_ThreeD_h" >&5 +echo "${ECHO_T}$ac_cv_header_X11_Xaw_ThreeD_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking X11/Xaw/ThreeD.h usability" >&5 +echo $ECHO_N "checking X11/Xaw/ThreeD.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking X11/Xaw/ThreeD.h presence" >&5 +echo $ECHO_N "checking X11/Xaw/ThreeD.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: X11/Xaw/ThreeD.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: X11/Xaw/ThreeD.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: X11/Xaw/ThreeD.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: X11/Xaw/ThreeD.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: X11/Xaw/ThreeD.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: X11/Xaw/ThreeD.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: X11/Xaw/ThreeD.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: X11/Xaw/ThreeD.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for X11/Xaw/ThreeD.h" >&5 +echo $ECHO_N "checking for X11/Xaw/ThreeD.h... $ECHO_C" >&6 +if test "${ac_cv_header_X11_Xaw_ThreeD_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_X11_Xaw_ThreeD_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_X11_Xaw_ThreeD_h" >&5 +echo "${ECHO_T}$ac_cv_header_X11_Xaw_ThreeD_h" >&6 fi +if test $ac_cv_header_X11_Xaw_ThreeD_h = yes; then + { echo "$as_me:$LINENO: WARNING: Assuming that X11/Xaw headers are suitable for $athena_variant." >&5 +echo "$as_me: WARNING: Assuming that X11/Xaw headers are suitable for $athena_variant." >&2;} + athena_h_path=X11/Xaw +else + { echo "$as_me:$LINENO: WARNING: Could not find a suitable 3d Athena header set." >&5 +echo "$as_me: WARNING: Could not find a suitable 3d Athena header set." >&2;} fi fi + fi - if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then - echo "$as_me:$LINENO: checking for Xaw3d/XawInit.h" >&5 -echo $ECHO_N "checking for Xaw3d/XawInit.h... $ECHO_C" >&6 -if test "${ac_cv_header_Xaw3d_XawInit_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#if HAVE_X11_XFUNCPROTO_H -#include -#endif -#include - + if test -n "$athena_lib" -a -n "$athena_h_path"; then + have_xaw=yes + else + have_xaw=no + fi -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_header_Xaw3d_XawInit_h=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_Xaw3d_XawInit_h=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + have_xaw=no fi -echo "$as_me:$LINENO: result: $ac_cv_header_Xaw3d_XawInit_h" >&5 -echo "${ECHO_T}$ac_cv_header_Xaw3d_XawInit_h" >&6 -if test $ac_cv_header_Xaw3d_XawInit_h = yes; then - if test "${ac_cv_header_Xaw3d_ThreeD_h+set}" = set; then - echo "$as_me:$LINENO: checking for Xaw3d/ThreeD.h" >&5 -echo $ECHO_N "checking for Xaw3d/ThreeD.h... $ECHO_C" >&6 -if test "${ac_cv_header_Xaw3d_ThreeD_h+set}" = set; then +if test "$with_x11" = "yes"; then + if test "${ac_cv_header_Xm_Xm_h+set}" = set; then + echo "$as_me:$LINENO: checking for Xm/Xm.h" >&5 +echo $ECHO_N "checking for Xm/Xm.h... $ECHO_C" >&6 +if test "${ac_cv_header_Xm_Xm_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi -echo "$as_me:$LINENO: result: $ac_cv_header_Xaw3d_ThreeD_h" >&5 -echo "${ECHO_T}$ac_cv_header_Xaw3d_ThreeD_h" >&6 +echo "$as_me:$LINENO: result: $ac_cv_header_Xm_Xm_h" >&5 +echo "${ECHO_T}$ac_cv_header_Xm_Xm_h" >&6 else # Is the header compilable? -echo "$as_me:$LINENO: checking Xaw3d/ThreeD.h usability" >&5 -echo $ECHO_N "checking Xaw3d/ThreeD.h usability... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking Xm/Xm.h usability" >&5 +echo $ECHO_N "checking Xm/Xm.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -25336,7 +26640,7 @@ cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include +#include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 @@ -25372,15 +26676,15 @@ echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? -echo "$as_me:$LINENO: checking Xaw3d/ThreeD.h presence" >&5 -echo $ECHO_N "checking Xaw3d/ThreeD.h presence... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking Xm/Xm.h presence" >&5 +echo $ECHO_N "checking Xm/Xm.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 @@ -25414,73 +26718,446 @@ # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: Xaw3d/ThreeD.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: Xaw3d/ThreeD.h: proceeding with the compiler's result" >&2;} + { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: Xm/Xm.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: Xm/Xm.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: Xaw3d/ThreeD.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: Xaw3d/ThreeD.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: Xaw3d/ThreeD.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: Xaw3d/ThreeD.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: Xaw3d/ThreeD.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: Xaw3d/ThreeD.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: Xaw3d/ThreeD.h: in the future, the compiler will take precedence" >&2;} + { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: Xm/Xm.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: Xm/Xm.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: Xm/Xm.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: Xm/Xm.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: Xm/Xm.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: Xm/Xm.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac -echo "$as_me:$LINENO: checking for Xaw3d/ThreeD.h" >&5 -echo $ECHO_N "checking for Xaw3d/ThreeD.h... $ECHO_C" >&6 -if test "${ac_cv_header_Xaw3d_ThreeD_h+set}" = set; then +echo "$as_me:$LINENO: checking for Xm/Xm.h" >&5 +echo $ECHO_N "checking for Xm/Xm.h... $ECHO_C" >&6 +if test "${ac_cv_header_Xm_Xm_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_cv_header_Xaw3d_ThreeD_h=$ac_header_preproc + ac_cv_header_Xm_Xm_h=$ac_header_preproc fi -echo "$as_me:$LINENO: result: $ac_cv_header_Xaw3d_ThreeD_h" >&5 -echo "${ECHO_T}$ac_cv_header_Xaw3d_ThreeD_h" >&6 +echo "$as_me:$LINENO: result: $ac_cv_header_Xm_Xm_h" >&5 +echo "${ECHO_T}$ac_cv_header_Xm_Xm_h" >&6 fi -if test $ac_cv_header_Xaw3d_ThreeD_h = yes; then +if test $ac_cv_header_Xm_Xm_h = yes; then + echo "$as_me:$LINENO: checking for XmStringCreate in -lXm" >&5 +echo $ECHO_N "checking for XmStringCreate in -lXm... $ECHO_C" >&6 +if test "${ac_cv_lib_Xm_XmStringCreate+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lXm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - { echo "$as_me:$LINENO: WARNING: Assuming that Xaw3d headers are suitable for $athena_variant." >&5 -echo "$as_me: WARNING: Assuming that Xaw3d headers are suitable for $athena_variant." >&2;} - athena_h_path=Xaw3d +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char XmStringCreate (); +int +main () +{ +XmStringCreate (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_Xm_XmStringCreate=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_Xm_XmStringCreate=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_Xm_XmStringCreate" >&5 +echo "${ECHO_T}$ac_cv_lib_Xm_XmStringCreate" >&6 +if test $ac_cv_lib_Xm_XmStringCreate = yes; then + have_motif=yes +else + have_motif=no +fi + +else + have_motif=no +fi + + + + if test "$have_motif" = "yes"; then + echo "$as_me:$LINENO: checking for Lesstif" >&5 +echo $ECHO_N "checking for Lesstif... $ECHO_C" >&6 + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#ifdef LESSTIF_VERSION +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + have_lesstif=yes +else + have_lesstif=no +fi +rm -f conftest* + + echo "$as_me:$LINENO: result: $have_lesstif" >&5 +echo "${ECHO_T}$have_lesstif" >&6 + fi fi +case "$opsys" in + *linux* | *darwin* | *bsd* ) lucid_prefers_motif="no" ;; + * ) lucid_prefers_motif="yes" ;; +esac +case "$enable_menubars" in "" | "yes" | "athena" ) + enable_menubars="lucid" ;; +esac +if test "$with_xft_menubars" != "no" ; then + if test "$with_xft_emacs" = "yes" -a "$with_menubars" != "no" ; then + with_xft_menubars="yes" + else + with_xft_menubars="no" + fi +fi +case "$enable_dialogs" in "" | "yes" | "lucid" ) + if test "$lucid_prefers_motif" = "yes"; then + if test "$have_motif" = "yes"; then enable_dialogs="motif" + elif test "$have_xaw" = "yes"; then enable_dialogs="athena" + elif test "$with_msw" = "yes"; then enable_dialogs="msw" + else enable_dialogs=no + fi + else + if test "$have_xaw" = "yes"; then enable_dialogs="athena" + elif test "$have_motif" = "yes"; then enable_dialogs="motif" + elif test "$with_msw" = "yes"; then enable_dialogs="msw" + else enable_dialogs=no + fi + fi ;; +esac +case "$enable_scrollbars" in "" | "yes" ) + enable_scrollbars="lucid" ;; +esac +case "$enable_widgets" in "" | "yes" | "lucid") + if test "$lucid_prefers_motif" = "yes"; then + if test "$have_motif" = "yes"; then enable_widgets="motif" + elif test "$have_xaw" = "yes"; then enable_widgets="athena" + elif test "$with_msw" = "yes"; then enable_widgets="msw" + else enable_widgets=no + fi + else + if test "$have_xaw" = "yes"; then enable_widgets="athena" + elif test "$have_motif" = "yes"; then enable_widgets="motif" + elif test "$with_msw" = "yes"; then enable_widgets="msw" + else enable_widgets=no + fi + fi ;; +esac +if test "$with_xft_tabs" != "no" ; then + if test "$with_xft_emacs" = "yes" -a "$enable_widgets" != "no" ; then + with_xft_tabs="yes" + else + with_xft_tabs="no" + fi +fi +if test "$with_xft_gauge" != "no" ; then + if test "$with_xft_emacs" = "yes" -a "$enable_widgets" != "no" ; then + with_xft_gauge="yes" + else + with_xft_gauge="no" + fi fi +all_widgets="$enable_menubars $enable_scrollbars $enable_dialogs $enable_toolbars $enable_widgets" +case "$all_widgets" in + *athena* ) + if test "$have_xaw" != "yes"; then + { echo "Error:" "Could not find a suitable Athena library to build with." >&2; exit 1; } fi - if test -z "$athena_h_path"; then - if test "${ac_cv_header_X11_Xaw_ThreeD_h+set}" = set; then - echo "$as_me:$LINENO: checking for X11/Xaw/ThreeD.h" >&5 -echo $ECHO_N "checking for X11/Xaw/ThreeD.h... $ECHO_C" >&6 -if test "${ac_cv_header_X11_Xaw_ThreeD_h+set}" = set; then + lwlib_objs="$lwlib_objs lwlib-Xaw.o" && if test "$verbose" = "yes"; then echo " Appending \"lwlib-Xaw.o\" to \$lwlib_objs"; fi + + libs_x="-l$athena_lib $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-l$athena_lib\" to \$libs_x"; fi + + cat >>confdefs.h <<_ACEOF +#define ATHENA_Scrollbar_h_ "$athena_h_path/Scrollbar.h" +_ACEOF + + cat >>confdefs.h <<_ACEOF +#define ATHENA_Dialog_h_ "$athena_h_path/Dialog.h" +_ACEOF + + cat >>confdefs.h <<_ACEOF +#define ATHENA_Form_h_ "$athena_h_path/Form.h" +_ACEOF + + cat >>confdefs.h <<_ACEOF +#define ATHENA_Command_h_ "$athena_h_path/Command.h" +_ACEOF + + cat >>confdefs.h <<_ACEOF +#define ATHENA_Label_h_ "$athena_h_path/Label.h" +_ACEOF + + cat >>confdefs.h <<_ACEOF +#define ATHENA_LabelP_h_ "$athena_h_path/LabelP.h" +_ACEOF + + cat >>confdefs.h <<_ACEOF +#define ATHENA_Toggle_h_ "$athena_h_path/Toggle.h" +_ACEOF + + cat >>confdefs.h <<_ACEOF +#define ATHENA_ToggleP_h_ "$athena_h_path/ToggleP.h" +_ACEOF + + cat >>confdefs.h <<_ACEOF +#define ATHENA_AsciiText_h_ "$athena_h_path/AsciiText.h" +_ACEOF + + cat >>confdefs.h <<_ACEOF +#define ATHENA_XawInit_h_ "$athena_h_path/XawInit.h" +_ACEOF + + + cat >>confdefs.h <<\_ACEOF +#define LWLIB_USES_ATHENA 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define NEED_ATHENA 1 +_ACEOF + + need_athena="yes" + + if test "$athena_3d" = "yes"; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_ATHENA_3D 1 +_ACEOF + + fi + ;; +esac + +case "$all_widgets" in *motif* ) + cat >>confdefs.h <<\_ACEOF +#define LWLIB_USES_MOTIF 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define NEED_MOTIF 1 +_ACEOF + + lwlib_objs="$lwlib_objs lwlib-Xm.o" && if test "$verbose" = "yes"; then echo " Appending \"lwlib-Xm.o\" to \$lwlib_objs"; fi + need_motif=yes ;; +esac + +test "$enable_menubars" = "lucid" && lwlib_objs="$lwlib_objs xlwmenu.o" && if test "$verbose" = "yes"; then echo " Appending \"xlwmenu.o\" to \$lwlib_objs"; fi +test "$enable_menubars" = "motif" && lwlib_objs="$lwlib_objs xlwmenu.o" && if test "$verbose" = "yes"; then echo " Appending \"xlwmenu.o\" to \$lwlib_objs"; fi +test "$enable_scrollbars" = "lucid" && lwlib_objs="$lwlib_objs xlwscrollbar.o" && if test "$verbose" = "yes"; then echo " Appending \"xlwscrollbar.o\" to \$lwlib_objs"; fi +test "$enable_widgets" != "no" && test "$enable_widgets" != "msw" && \ + lwlib_objs="$lwlib_objs xlwtabs.o xlwgcs.o" && if test "$verbose" = "yes"; then echo " Appending \"xlwtabs.o xlwgcs.o\" to \$lwlib_objs"; fi +case "$enable_widgets" in athena* ) + lwlib_objs="$lwlib_objs xlwradio.o xlwcheckbox.o xlwgauge.o" && if test "$verbose" = "yes"; then echo " Appending \"xlwradio.o xlwcheckbox.o xlwgauge.o\" to \$lwlib_objs"; fi;; +esac +case "$all_widgets" in *lucid* ) + cat >>confdefs.h <<\_ACEOF +#define NEED_LUCID 1 +_ACEOF + + lwlib_objs="$lwlib_objs lwlib-Xlw.o" && if test "$verbose" = "yes"; then echo " Appending \"lwlib-Xlw.o\" to \$lwlib_objs"; fi ;; +esac + + + +test "$enable_scrollbars" = "athena" && cat >>confdefs.h <<\_ACEOF +#define LWLIB_SCROLLBARS_ATHENA 1 +_ACEOF + +test "$enable_dialogs" = "athena" && cat >>confdefs.h <<\_ACEOF +#define LWLIB_DIALOGS_ATHENA 1 +_ACEOF + + +if test "$athena_3d" = "yes"; then + test "$enable_scrollbars" = "athena" && cat >>confdefs.h <<\_ACEOF +#define LWLIB_SCROLLBARS_ATHENA3D 1 +_ACEOF + + test "$enable_dialogs" = "athena" && cat >>confdefs.h <<\_ACEOF +#define LWLIB_DIALOGS_ATHENA3D 1 +_ACEOF + +fi + +case "$enable_widgets" in athena* ) cat >>confdefs.h <<\_ACEOF +#define LWLIB_WIDGETS_ATHENA 1 +_ACEOF +;; esac +test "$enable_widgets" != "no" && test "$enable_widgets" != "msw" && \ + cat >>confdefs.h <<\_ACEOF +#define LWLIB_TABS_LUCID 1 +_ACEOF + + +test "$enable_menubars" != "no" && cat >>confdefs.h <<\_ACEOF +#define HAVE_MENUBARS 1 +_ACEOF + +test "$enable_scrollbars" != "no" && cat >>confdefs.h <<\_ACEOF +#define HAVE_SCROLLBARS 1 +_ACEOF + +test "$enable_dialogs" != "no" && cat >>confdefs.h <<\_ACEOF +#define HAVE_DIALOGS 1 +_ACEOF + +test "$enable_toolbars" != "no" && cat >>confdefs.h <<\_ACEOF +#define HAVE_TOOLBARS 1 +_ACEOF + +test "$enable_widgets" != "no" && cat >>confdefs.h <<\_ACEOF +#define HAVE_WIDGETS 1 +_ACEOF + + +test "$enable_menubars" = "lucid" && cat >>confdefs.h <<\_ACEOF +#define LWLIB_MENUBARS_LUCID 1 +_ACEOF + +test "$enable_scrollbars" = "lucid" && cat >>confdefs.h <<\_ACEOF +#define LWLIB_SCROLLBARS_LUCID 1 +_ACEOF + + +test "$enable_menubars" = "motif" && cat >>confdefs.h <<\_ACEOF +#define LWLIB_MENUBARS_MOTIF 1 +_ACEOF + +test "$enable_scrollbars" = "motif" && cat >>confdefs.h <<\_ACEOF +#define LWLIB_SCROLLBARS_MOTIF 1 +_ACEOF + +test "$enable_dialogs" = "motif" && cat >>confdefs.h <<\_ACEOF +#define LWLIB_DIALOGS_MOTIF 1 +_ACEOF + +test "$enable_widgets" = "motif" && cat >>confdefs.h <<\_ACEOF +#define LWLIB_WIDGETS_MOTIF 1 +_ACEOF + + +test "$with_xft_menubars" = "yes" && cat >>confdefs.h <<\_ACEOF +#define USE_XFT_MENUBARS 1 +_ACEOF + +test "$with_xft_tabs" = "yes" && cat >>confdefs.h <<\_ACEOF +#define USE_XFT_TABS 1 +_ACEOF + +test "$with_xft_gauge" = "yes" && cat >>confdefs.h <<\_ACEOF +#define USE_XFT_GAUGE 1 +_ACEOF + + + +test -z "$enable_mule" && enable_mule=no + + +if test "$enable_default_eol_detection" = "yes"; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_DEFAULT_EOL_DETECTION 1 +_ACEOF + +fi + +canna_libs= +wnn_libs= + +if test "$enable_mule" = "yes" ; then + { echo "$as_me:$LINENO: checking for Mule-related features..." >&5 +echo "$as_me: checking for Mule-related features..." >&6;} + cat >>confdefs.h <<\_ACEOF +#define MULE 1 +_ACEOF + + + +for ac_header in libintl.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi -echo "$as_me:$LINENO: result: $ac_cv_header_X11_Xaw_ThreeD_h" >&5 -echo "${ECHO_T}$ac_cv_header_X11_Xaw_ThreeD_h" >&6 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? -echo "$as_me:$LINENO: checking X11/Xaw/ThreeD.h usability" >&5 -echo $ECHO_N "checking X11/Xaw/ThreeD.h usability... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -25488,7 +27165,7 @@ cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include +#include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 @@ -25524,15 +27201,15 @@ echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? -echo "$as_me:$LINENO: checking X11/Xaw/ThreeD.h presence" >&5 -echo $ECHO_N "checking X11/Xaw/ThreeD.h presence... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 @@ -25566,95 +27243,167 @@ # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: X11/Xaw/ThreeD.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: X11/Xaw/ThreeD.h: proceeding with the compiler's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: X11/Xaw/ThreeD.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: X11/Xaw/ThreeD.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: X11/Xaw/ThreeD.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: X11/Xaw/ThreeD.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: X11/Xaw/ThreeD.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: X11/Xaw/ThreeD.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: X11/Xaw/ThreeD.h: in the future, the compiler will take precedence" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac -echo "$as_me:$LINENO: checking for X11/Xaw/ThreeD.h" >&5 -echo $ECHO_N "checking for X11/Xaw/ThreeD.h... $ECHO_C" >&6 -if test "${ac_cv_header_X11_Xaw_ThreeD_h+set}" = set; then +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_cv_header_X11_Xaw_ThreeD_h=$ac_header_preproc + eval "$as_ac_Header=\$ac_header_preproc" fi -echo "$as_me:$LINENO: result: $ac_cv_header_X11_Xaw_ThreeD_h" >&5 -echo "${ECHO_T}$ac_cv_header_X11_Xaw_ThreeD_h" >&6 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi -if test $ac_cv_header_X11_Xaw_ThreeD_h = yes; then - - { echo "$as_me:$LINENO: WARNING: Assuming that X11/Xaw headers are suitable for $athena_variant." >&5 -echo "$as_me: WARNING: Assuming that X11/Xaw headers are suitable for $athena_variant." >&2;} - athena_h_path=X11/Xaw +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF -else - { echo "$as_me:$LINENO: WARNING: Could not find a suitable 3d Athena header set." >&5 -echo "$as_me: WARNING: Could not find a suitable 3d Athena header set." >&2;} fi +done - fi - fi - if test -n "$athena_lib" -a -n "$athena_h_path"; then - have_xaw=yes - else - have_xaw=no - fi +echo "$as_me:$LINENO: checking for strerror in -lintl" >&5 +echo $ECHO_N "checking for strerror in -lintl... $ECHO_C" >&6 +if test "${ac_cv_lib_intl_strerror+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strerror (); +int +main () +{ +strerror (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_intl_strerror=yes else - have_xaw=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_intl_strerror=no fi -if test "$with_x11" = "yes"; then - if test "${ac_cv_header_Xm_Xm_h+set}" = set; then - echo "$as_me:$LINENO: checking for Xm/Xm.h" >&5 -echo $ECHO_N "checking for Xm/Xm.h... $ECHO_C" >&6 -if test "${ac_cv_header_Xm_Xm_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_header_Xm_Xm_h" >&5 -echo "${ECHO_T}$ac_cv_header_Xm_Xm_h" >&6 +echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strerror" >&5 +echo "${ECHO_T}$ac_cv_lib_intl_strerror" >&6 +if test $ac_cv_lib_intl_strerror = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBINTL 1 +_ACEOF + + LIBS="-lintl $LIBS" + +fi + + + { echo "$as_me:$LINENO: checking for Mule input methods..." >&5 +echo "$as_me: checking for Mule input methods..." >&6;} + case "$with_xim" in "" | "yes" ) + { echo "$as_me:$LINENO: checking for XIM..." >&5 +echo "$as_me: checking for XIM..." >&6;} + echo "$as_me:$LINENO: checking for XOpenIM in -lX11" >&5 +echo $ECHO_N "checking for XOpenIM in -lX11... $ECHO_C" >&6 +if test "${ac_cv_lib_X11_XOpenIM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - # Is the header compilable? -echo "$as_me:$LINENO: checking Xm/Xm.h usability" >&5 -echo $ECHO_N "checking Xm/Xm.h usability... $ECHO_C" >&6 + ac_check_lib_save_LIBS=$LIBS +LIBS="-lX11 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -$ac_includes_default -#include + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char XOpenIM (); +int +main () +{ +XOpenIM (); + ; + return 0; +} _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -25668,114 +27417,210 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' + { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_header_compiler=yes + ac_cv_lib_X11_XOpenIM=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_header_compiler=no +ac_cv_lib_X11_XOpenIM=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XOpenIM" >&5 +echo "${ECHO_T}$ac_cv_lib_X11_XOpenIM" >&6 +if test $ac_cv_lib_X11_XOpenIM = yes; then + with_xim=xlib +else + with_xim=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 -# Is the header present? -echo "$as_me:$LINENO: checking Xm/Xm.h presence" >&5 -echo $ECHO_N "checking Xm/Xm.h presence... $ECHO_C" >&6 + if test "$need_motif $have_lesstif" = "yes no"; then + echo "$as_me:$LINENO: checking for XmImMbLookupString in -lXm" >&5 +echo $ECHO_N "checking for XmImMbLookupString in -lXm... $ECHO_C" >&6 +if test "${ac_cv_lib_Xm_XmImMbLookupString+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lXm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char XmImMbLookupString (); +int +main () +{ +XmImMbLookupString (); + ; + return 0; +} _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_Xm_XmImMbLookupString=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no +ac_cv_lib_Xm_XmImMbLookupString=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_Xm_XmImMbLookupString" >&5 +echo "${ECHO_T}$ac_cv_lib_Xm_XmImMbLookupString" >&6 +if test $ac_cv_lib_Xm_XmImMbLookupString = yes; then + with_xim=motif fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: Xm/Xm.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: Xm/Xm.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: Xm/Xm.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: Xm/Xm.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: Xm/Xm.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: Xm/Xm.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: Xm/Xm.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: Xm/Xm.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: Xm/Xm.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for Xm/Xm.h" >&5 -echo $ECHO_N "checking for Xm/Xm.h... $ECHO_C" >&6 -if test "${ac_cv_header_Xm_Xm_h+set}" = set; then + elif test "$have_motif $have_lesstif $with_xim" = "yes no no"; then + echo "$as_me:$LINENO: checking for XmImMbLookupString in -lXm" >&5 +echo $ECHO_N "checking for XmImMbLookupString in -lXm... $ECHO_C" >&6 +if test "${ac_cv_lib_Xm_XmImMbLookupString+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_cv_header_Xm_Xm_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_Xm_Xm_h" >&5 -echo "${ECHO_T}$ac_cv_header_Xm_Xm_h" >&6 + ac_check_lib_save_LIBS=$LIBS +LIBS="-lXm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char XmImMbLookupString (); +int +main () +{ +XmImMbLookupString (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_Xm_XmImMbLookupString=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_lib_Xm_XmImMbLookupString=no fi -if test $ac_cv_header_Xm_Xm_h = yes; then - echo "$as_me:$LINENO: checking for XmStringCreate in -lXm" >&5 -echo $ECHO_N "checking for XmStringCreate in -lXm... $ECHO_C" >&6 -if test "${ac_cv_lib_Xm_XmStringCreate+set}" = set; then +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_Xm_XmImMbLookupString" >&5 +echo "${ECHO_T}$ac_cv_lib_Xm_XmImMbLookupString" >&6 +if test $ac_cv_lib_Xm_XmImMbLookupString = yes; then + with_xim=motif +fi + + fi ;; + esac + if test "$with_xim" != "no"; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_XIM 1 +_ACEOF + + if test "$with_xim" = "xlib"; then + cat >>confdefs.h <<\_ACEOF +#define XIM_XLIB 1 +_ACEOF + + extra_objs="$extra_objs input-method-xlib.o" && if test "$verbose" = "yes"; then + echo " xemacs will be linked with \"input-method-xlib.o\"" + fi + fi + if test "$with_xim" = "motif"; then + cat >>confdefs.h <<\_ACEOF +#define XIM_MOTIF 1 +_ACEOF + + need_motif=yes + extra_objs="$extra_objs input-method-motif.o" && if test "$verbose" = "yes"; then + echo " xemacs will be linked with \"input-method-motif.o\"" + fi + fi + if test "$with_xim" = "motif"; then + with_xfs=no + fi + fi + + if test "$with_xfs" = "yes" ; then + { echo "$as_me:$LINENO: checking for XFontSet..." >&5 +echo "$as_me: checking for XFontSet..." >&6;} + echo "$as_me:$LINENO: checking for XmbDrawString in -lX11" >&5 +echo $ECHO_N "checking for XmbDrawString in -lX11... $ECHO_C" >&6 +if test "${ac_cv_lib_X11_XmbDrawString+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lXm $LIBS" +LIBS="-lX11 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -25789,18 +27634,93 @@ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char XmStringCreate (); +char XmbDrawString (); int main () { -XmStringCreate (); +XmbDrawString (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_X11_XmbDrawString=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_X11_XmbDrawString=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XmbDrawString" >&5 +echo "${ECHO_T}$ac_cv_lib_X11_XmbDrawString" >&6 +if test $ac_cv_lib_X11_XmbDrawString = yes; then + : +else + with_xfs=no +fi + + if test "$with_xfs" = "yes" && test "$enable_menubars" = "lucid"; then + cat >>confdefs.h <<\_ACEOF +#define USE_XFONTSET 1 +_ACEOF + + if test "$with_xim" = "no" ; then + extra_objs="$extra_objs input-method-xlib.o" && if test "$verbose" = "yes"; then + echo " xemacs will be linked with \"input-method-xlib.o\"" + fi + fi + fi + fi + test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support + test -z "$with_wnn" && { if test "${ac_cv_header_wnn_jllib_h+set}" = set; then + echo "$as_me:$LINENO: checking for wnn/jllib.h" >&5 +echo $ECHO_N "checking for wnn/jllib.h... $ECHO_C" >&6 +if test "${ac_cv_header_wnn_jllib_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_wnn_jllib_h" >&5 +echo "${ECHO_T}$ac_cv_header_wnn_jllib_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking wnn/jllib.h usability" >&5 +echo $ECHO_N "checking wnn/jllib.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -25814,326 +27734,125 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' + { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_Xm_XmStringCreate=yes + ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_Xm_XmStringCreate=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_Xm_XmStringCreate" >&5 -echo "${ECHO_T}$ac_cv_lib_Xm_XmStringCreate" >&6 -if test $ac_cv_lib_Xm_XmStringCreate = yes; then - have_motif=yes -else - have_motif=no -fi - -else - have_motif=no +ac_header_compiler=no fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 - - - if test "$have_motif" = "yes"; then - echo "$as_me:$LINENO: checking for Lesstif" >&5 -echo $ECHO_N "checking for Lesstif... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF +# Is the header present? +echo "$as_me:$LINENO: checking wnn/jllib.h presence" >&5 +echo $ECHO_N "checking wnn/jllib.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include -#ifdef LESSTIF_VERSION -yes -#endif - +#include _ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then - have_lesstif=yes +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi else - have_lesstif=no + ac_cpp_err=yes fi -rm -f conftest* - - echo "$as_me:$LINENO: result: $have_lesstif" >&5 -echo "${ECHO_T}$have_lesstif" >&6 - fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_header_preproc=no fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 -case "$opsys" in - *linux* | *darwin* | *bsd* ) lucid_prefers_motif="no" ;; - * ) lucid_prefers_motif="yes" ;; -esac - -case "$enable_menubars" in "" | "yes" | "athena" ) - enable_menubars="lucid" ;; -esac -case "$enable_dialogs" in "" | "yes" | "lucid" ) - if test "$lucid_prefers_motif" = "yes"; then - if test "$have_motif" = "yes"; then enable_dialogs="motif" - elif test "$have_xaw" = "yes"; then enable_dialogs="athena" - elif test "$with_msw" = "yes"; then enable_dialogs="msw" - else enable_dialogs=no - fi - else - if test "$have_xaw" = "yes"; then enable_dialogs="athena" - elif test "$have_motif" = "yes"; then enable_dialogs="motif" - elif test "$with_msw" = "yes"; then enable_dialogs="msw" - else enable_dialogs=no - fi - fi ;; -esac -case "$enable_scrollbars" in "" | "yes" ) - enable_scrollbars="lucid" ;; -esac -case "$enable_widgets" in "" | "yes" | "lucid") - if test "$lucid_prefers_motif" = "yes"; then - if test "$have_motif" = "yes"; then enable_widgets="motif" - elif test "$have_xaw" = "yes"; then enable_widgets="athena" - elif test "$with_msw" = "yes"; then enable_widgets="msw" - else enable_widgets=no - fi - else - if test "$have_xaw" = "yes"; then enable_widgets="athena" - elif test "$have_motif" = "yes"; then enable_widgets="motif" - elif test "$with_msw" = "yes"; then enable_widgets="msw" - else enable_widgets=no - fi - fi ;; -esac - -all_widgets="$enable_menubars $enable_scrollbars $enable_dialogs $enable_toolbars $enable_widgets" - -case "$all_widgets" in - *athena* ) - if test "$have_xaw" != "yes"; then - { echo "Error:" "Could not find a suitable Athena library to build with." >&2; exit 1; } - fi - - lwlib_objs="$lwlib_objs lwlib-Xaw.o" && if test "$verbose" = "yes"; then echo " Appending \"lwlib-Xaw.o\" to \$lwlib_objs"; fi - - libs_x="-l$athena_lib $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-l$athena_lib\" to \$libs_x"; fi - - cat >>confdefs.h <<_ACEOF -#define ATHENA_Scrollbar_h_ "$athena_h_path/Scrollbar.h" -_ACEOF - - cat >>confdefs.h <<_ACEOF -#define ATHENA_Dialog_h_ "$athena_h_path/Dialog.h" -_ACEOF - - cat >>confdefs.h <<_ACEOF -#define ATHENA_Form_h_ "$athena_h_path/Form.h" -_ACEOF - - cat >>confdefs.h <<_ACEOF -#define ATHENA_Command_h_ "$athena_h_path/Command.h" -_ACEOF - - cat >>confdefs.h <<_ACEOF -#define ATHENA_Label_h_ "$athena_h_path/Label.h" -_ACEOF - - cat >>confdefs.h <<_ACEOF -#define ATHENA_LabelP_h_ "$athena_h_path/LabelP.h" -_ACEOF - - cat >>confdefs.h <<_ACEOF -#define ATHENA_Toggle_h_ "$athena_h_path/Toggle.h" -_ACEOF - - cat >>confdefs.h <<_ACEOF -#define ATHENA_ToggleP_h_ "$athena_h_path/ToggleP.h" -_ACEOF - - cat >>confdefs.h <<_ACEOF -#define ATHENA_AsciiText_h_ "$athena_h_path/AsciiText.h" -_ACEOF - - cat >>confdefs.h <<_ACEOF -#define ATHENA_XawInit_h_ "$athena_h_path/XawInit.h" -_ACEOF - - - cat >>confdefs.h <<\_ACEOF -#define LWLIB_USES_ATHENA 1 -_ACEOF - - cat >>confdefs.h <<\_ACEOF -#define NEED_ATHENA 1 -_ACEOF - - need_athena="yes" - - if test "$athena_3d" = "yes"; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_ATHENA_3D 1 -_ACEOF - - fi - ;; -esac - -case "$all_widgets" in *motif* ) - cat >>confdefs.h <<\_ACEOF -#define LWLIB_USES_MOTIF 1 -_ACEOF - - cat >>confdefs.h <<\_ACEOF -#define NEED_MOTIF 1 -_ACEOF - - lwlib_objs="$lwlib_objs lwlib-Xm.o" && if test "$verbose" = "yes"; then echo " Appending \"lwlib-Xm.o\" to \$lwlib_objs"; fi - need_motif=yes ;; -esac - -test "$enable_menubars" = "lucid" && lwlib_objs="$lwlib_objs xlwmenu.o" && if test "$verbose" = "yes"; then echo " Appending \"xlwmenu.o\" to \$lwlib_objs"; fi -test "$enable_menubars" = "motif" && lwlib_objs="$lwlib_objs xlwmenu.o" && if test "$verbose" = "yes"; then echo " Appending \"xlwmenu.o\" to \$lwlib_objs"; fi -test "$enable_scrollbars" = "lucid" && lwlib_objs="$lwlib_objs xlwscrollbar.o" && if test "$verbose" = "yes"; then echo " Appending \"xlwscrollbar.o\" to \$lwlib_objs"; fi -test "$enable_widgets" != "no" && test "$enable_widgets" != "msw" && \ - lwlib_objs="$lwlib_objs xlwtabs.o xlwgcs.o" && if test "$verbose" = "yes"; then echo " Appending \"xlwtabs.o xlwgcs.o\" to \$lwlib_objs"; fi -case "$enable_widgets" in athena* ) - lwlib_objs="$lwlib_objs xlwradio.o xlwcheckbox.o xlwgauge.o" && if test "$verbose" = "yes"; then echo " Appending \"xlwradio.o xlwcheckbox.o xlwgauge.o\" to \$lwlib_objs"; fi;; -esac -case "$all_widgets" in *lucid* ) - cat >>confdefs.h <<\_ACEOF -#define NEED_LUCID 1 -_ACEOF - - lwlib_objs="$lwlib_objs lwlib-Xlw.o" && if test "$verbose" = "yes"; then echo " Appending \"lwlib-Xlw.o\" to \$lwlib_objs"; fi ;; +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: wnn/jllib.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: wnn/jllib.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: wnn/jllib.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: wnn/jllib.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: wnn/jllib.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: wnn/jllib.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: wnn/jllib.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: wnn/jllib.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; esac - - - -test "$enable_scrollbars" = "athena" && cat >>confdefs.h <<\_ACEOF -#define LWLIB_SCROLLBARS_ATHENA 1 -_ACEOF - -test "$enable_dialogs" = "athena" && cat >>confdefs.h <<\_ACEOF -#define LWLIB_DIALOGS_ATHENA 1 -_ACEOF - - -if test "$athena_3d" = "yes"; then - test "$enable_scrollbars" = "athena" && cat >>confdefs.h <<\_ACEOF -#define LWLIB_SCROLLBARS_ATHENA3D 1 -_ACEOF - - test "$enable_dialogs" = "athena" && cat >>confdefs.h <<\_ACEOF -#define LWLIB_DIALOGS_ATHENA3D 1 -_ACEOF - +echo "$as_me:$LINENO: checking for wnn/jllib.h" >&5 +echo $ECHO_N "checking for wnn/jllib.h... $ECHO_C" >&6 +if test "${ac_cv_header_wnn_jllib_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_wnn_jllib_h=$ac_header_preproc fi - -case "$enable_widgets" in athena* ) cat >>confdefs.h <<\_ACEOF -#define LWLIB_WIDGETS_ATHENA 1 -_ACEOF -;; esac -test "$enable_widgets" != "no" && test "$enable_widgets" != "msw" && \ - cat >>confdefs.h <<\_ACEOF -#define LWLIB_TABS_LUCID 1 -_ACEOF - - -test "$enable_menubars" != "no" && cat >>confdefs.h <<\_ACEOF -#define HAVE_MENUBARS 1 -_ACEOF - -test "$enable_scrollbars" != "no" && cat >>confdefs.h <<\_ACEOF -#define HAVE_SCROLLBARS 1 -_ACEOF - -test "$enable_dialogs" != "no" && cat >>confdefs.h <<\_ACEOF -#define HAVE_DIALOGS 1 -_ACEOF - -test "$enable_toolbars" != "no" && cat >>confdefs.h <<\_ACEOF -#define HAVE_TOOLBARS 1 -_ACEOF - -test "$enable_widgets" != "no" && cat >>confdefs.h <<\_ACEOF -#define HAVE_WIDGETS 1 -_ACEOF - - -test "$enable_menubars" = "lucid" && cat >>confdefs.h <<\_ACEOF -#define LWLIB_MENUBARS_LUCID 1 -_ACEOF - -test "$enable_scrollbars" = "lucid" && cat >>confdefs.h <<\_ACEOF -#define LWLIB_SCROLLBARS_LUCID 1 -_ACEOF - - -test "$enable_menubars" = "motif" && cat >>confdefs.h <<\_ACEOF -#define LWLIB_MENUBARS_MOTIF 1 -_ACEOF - -test "$enable_scrollbars" = "motif" && cat >>confdefs.h <<\_ACEOF -#define LWLIB_SCROLLBARS_MOTIF 1 -_ACEOF - -test "$enable_dialogs" = "motif" && cat >>confdefs.h <<\_ACEOF -#define LWLIB_DIALOGS_MOTIF 1 -_ACEOF - -test "$enable_widgets" = "motif" && cat >>confdefs.h <<\_ACEOF -#define LWLIB_WIDGETS_MOTIF 1 -_ACEOF - - - -test -z "$enable_mule" && enable_mule=no - - -if test "$enable_default_eol_detection" = "yes"; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_DEFAULT_EOL_DETECTION 1 -_ACEOF +echo "$as_me:$LINENO: result: $ac_cv_header_wnn_jllib_h" >&5 +echo "${ECHO_T}$ac_cv_header_wnn_jllib_h" >&6 fi +if test $ac_cv_header_wnn_jllib_h = yes; then + : +else + with_wnn=no +fi -canna_libs= -wnn_libs= - -if test "$enable_mule" = "yes" ; then - { echo "$as_me:$LINENO: checking for Mule-related features..." >&5 -echo "$as_me: checking for Mule-related features..." >&6;} - cat >>confdefs.h <<\_ACEOF -#define MULE 1 -_ACEOF - - - -for ac_header in libintl.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then + } + test -z "$with_wnn" && { if test "${ac_cv_header_wnn_commonhd_h+set}" = set; then + echo "$as_me:$LINENO: checking for wnn/commonhd.h" >&5 +echo $ECHO_N "checking for wnn/commonhd.h... $ECHO_C" >&6 +if test "${ac_cv_header_wnn_commonhd_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +echo "$as_me:$LINENO: result: $ac_cv_header_wnn_commonhd_h" >&5 +echo "${ECHO_T}$ac_cv_header_wnn_commonhd_h" >&6 else # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking wnn/commonhd.h usability" >&5 +echo $ECHO_N "checking wnn/commonhd.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -26141,7 +27860,7 @@ cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include <$ac_header> +#include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 @@ -26177,15 +27896,15 @@ echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking wnn/commonhd.h presence" >&5 +echo $ECHO_N "checking wnn/commonhd.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include <$ac_header> +#include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 @@ -26219,63 +27938,164 @@ # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: wnn/commonhd.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: wnn/commonhd.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: wnn/commonhd.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: wnn/commonhd.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: wnn/commonhd.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: wnn/commonhd.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: wnn/commonhd.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: wnn/commonhd.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then +echo "$as_me:$LINENO: checking for wnn/commonhd.h" >&5 +echo $ECHO_N "checking for wnn/commonhd.h... $ECHO_C" >&6 +if test "${ac_cv_header_wnn_commonhd_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_wnn_commonhd_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_wnn_commonhd_h" >&5 +echo "${ECHO_T}$ac_cv_header_wnn_commonhd_h" >&6 + +fi +if test $ac_cv_header_wnn_commonhd_h = yes; then + : +else + with_wnn=no +fi + + } + if test "$with_wnn" != "no"; then + +for ac_func in crypt +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +eval "$as_ac_var=no" fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi - done - -echo "$as_me:$LINENO: checking for strerror in -lintl" >&5 -echo $ECHO_N "checking for strerror in -lintl... $ECHO_C" >&6 -if test "${ac_cv_lib_intl_strerror+set}" = set; then + test "$ac_cv_func_crypt" != "yes" && { +echo "$as_me:$LINENO: checking for crypt in -lcrypt" >&5 +echo $ECHO_N "checking for crypt in -lcrypt... $ECHO_C" >&6 +if test "${ac_cv_lib_crypt_crypt+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lintl $LIBS" +LIBS="-lcrypt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -26289,11 +28109,11 @@ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char strerror (); +char crypt (); int main () { -strerror (); +crypt (); ; return 0; } @@ -26320,41 +28140,104 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_intl_strerror=yes + ac_cv_lib_crypt_crypt=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_intl_strerror=no +ac_cv_lib_crypt_crypt=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strerror" >&5 -echo "${ECHO_T}$ac_cv_lib_intl_strerror" >&6 -if test $ac_cv_lib_intl_strerror = yes; then +echo "$as_me:$LINENO: result: $ac_cv_lib_crypt_crypt" >&5 +echo "${ECHO_T}$ac_cv_lib_crypt_crypt" >&6 +if test $ac_cv_lib_crypt_crypt = yes; then cat >>confdefs.h <<_ACEOF -#define HAVE_LIBINTL 1 +#define HAVE_LIBCRYPT 1 _ACEOF - LIBS="-lintl $LIBS" + LIBS="-lcrypt $LIBS" fi + } + fi + if test -z "$with_wnn" -o "$with_wnn" = "yes"; then + echo "$as_me:$LINENO: checking for jl_dic_list_e in -lwnn" >&5 +echo $ECHO_N "checking for jl_dic_list_e in -lwnn... $ECHO_C" >&6 +if test "${ac_cv_lib_wnn_jl_dic_list_e+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lwnn $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char jl_dic_list_e (); +int +main () +{ +jl_dic_list_e (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_wnn_jl_dic_list_e=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - { echo "$as_me:$LINENO: checking for Mule input methods..." >&5 -echo "$as_me: checking for Mule input methods..." >&6;} - case "$with_xim" in "" | "yes" ) - { echo "$as_me:$LINENO: checking for XIM..." >&5 -echo "$as_me: checking for XIM..." >&6;} - echo "$as_me:$LINENO: checking for XOpenIM in -lX11" >&5 -echo $ECHO_N "checking for XOpenIM in -lX11... $ECHO_C" >&6 -if test "${ac_cv_lib_X11_XOpenIM+set}" = set; then +ac_cv_lib_wnn_jl_dic_list_e=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_wnn_jl_dic_list_e" >&5 +echo "${ECHO_T}$ac_cv_lib_wnn_jl_dic_list_e" >&6 +if test $ac_cv_lib_wnn_jl_dic_list_e = yes; then + libwnn=wnn +else + echo "$as_me:$LINENO: checking for jl_dic_list_e in -lwnn4" >&5 +echo $ECHO_N "checking for jl_dic_list_e in -lwnn4... $ECHO_C" >&6 +if test "${ac_cv_lib_wnn4_jl_dic_list_e+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lX11 $LIBS" +LIBS="-lwnn4 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -26368,11 +28251,11 @@ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char XOpenIM (); +char jl_dic_list_e (); int main () { -XOpenIM (); +jl_dic_list_e (); ; return 0; } @@ -26399,33 +28282,29 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_X11_XOpenIM=yes + ac_cv_lib_wnn4_jl_dic_list_e=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_X11_XOpenIM=no +ac_cv_lib_wnn4_jl_dic_list_e=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XOpenIM" >&5 -echo "${ECHO_T}$ac_cv_lib_X11_XOpenIM" >&6 -if test $ac_cv_lib_X11_XOpenIM = yes; then - with_xim=xlib +echo "$as_me:$LINENO: result: $ac_cv_lib_wnn4_jl_dic_list_e" >&5 +echo "${ECHO_T}$ac_cv_lib_wnn4_jl_dic_list_e" >&6 +if test $ac_cv_lib_wnn4_jl_dic_list_e = yes; then + libwnn=wnn4 else - with_xim=no -fi - - if test "$need_motif $have_lesstif" = "yes no"; then - echo "$as_me:$LINENO: checking for XmImMbLookupString in -lXm" >&5 -echo $ECHO_N "checking for XmImMbLookupString in -lXm... $ECHO_C" >&6 -if test "${ac_cv_lib_Xm_XmImMbLookupString+set}" = set; then + echo "$as_me:$LINENO: checking for jl_dic_list_e in -lwnn6" >&5 +echo $ECHO_N "checking for jl_dic_list_e in -lwnn6... $ECHO_C" >&6 +if test "${ac_cv_lib_wnn6_jl_dic_list_e+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lXm $LIBS" +LIBS="-lwnn6 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -26439,11 +28318,11 @@ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char XmImMbLookupString (); +char jl_dic_list_e (); int main () { -XmImMbLookupString (); +jl_dic_list_e (); ; return 0; } @@ -26470,31 +28349,29 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_Xm_XmImMbLookupString=yes + ac_cv_lib_wnn6_jl_dic_list_e=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_Xm_XmImMbLookupString=no +ac_cv_lib_wnn6_jl_dic_list_e=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_Xm_XmImMbLookupString" >&5 -echo "${ECHO_T}$ac_cv_lib_Xm_XmImMbLookupString" >&6 -if test $ac_cv_lib_Xm_XmImMbLookupString = yes; then - with_xim=motif -fi - - elif test "$have_motif $have_lesstif $with_xim" = "yes no no"; then - echo "$as_me:$LINENO: checking for XmImMbLookupString in -lXm" >&5 -echo $ECHO_N "checking for XmImMbLookupString in -lXm... $ECHO_C" >&6 -if test "${ac_cv_lib_Xm_XmImMbLookupString+set}" = set; then +echo "$as_me:$LINENO: result: $ac_cv_lib_wnn6_jl_dic_list_e" >&5 +echo "${ECHO_T}$ac_cv_lib_wnn6_jl_dic_list_e" >&6 +if test $ac_cv_lib_wnn6_jl_dic_list_e = yes; then + libwnn=wnn6 +else + echo "$as_me:$LINENO: checking for dic_list_e in -lwnn6_fromsrc" >&5 +echo $ECHO_N "checking for dic_list_e in -lwnn6_fromsrc... $ECHO_C" >&6 +if test "${ac_cv_lib_wnn6_fromsrc_dic_list_e+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lXm $LIBS" +LIBS="-lwnn6_fromsrc $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -26508,11 +28385,11 @@ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char XmImMbLookupString (); +char dic_list_e (); int main () { -XmImMbLookupString (); +dic_list_e (); ; return 0; } @@ -26539,64 +28416,48 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_Xm_XmImMbLookupString=yes + ac_cv_lib_wnn6_fromsrc_dic_list_e=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_Xm_XmImMbLookupString=no +ac_cv_lib_wnn6_fromsrc_dic_list_e=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_Xm_XmImMbLookupString" >&5 -echo "${ECHO_T}$ac_cv_lib_Xm_XmImMbLookupString" >&6 -if test $ac_cv_lib_Xm_XmImMbLookupString = yes; then - with_xim=motif +echo "$as_me:$LINENO: result: $ac_cv_lib_wnn6_fromsrc_dic_list_e" >&5 +echo "${ECHO_T}$ac_cv_lib_wnn6_fromsrc_dic_list_e" >&6 +if test $ac_cv_lib_wnn6_fromsrc_dic_list_e = yes; then + libwnn=wnn6_fromsrc +else + with_wnn=no fi - fi ;; - esac - if test "$with_xim" != "no"; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_XIM 1 -_ACEOF +fi - if test "$with_xim" = "xlib"; then - cat >>confdefs.h <<\_ACEOF -#define XIM_XLIB 1 -_ACEOF +fi - extra_objs="$extra_objs input-method-xlib.o" && if test "$verbose" = "yes"; then - echo " xemacs will be linked with \"input-method-xlib.o\"" - fi - fi - if test "$with_xim" = "motif"; then - cat >>confdefs.h <<\_ACEOF -#define XIM_MOTIF 1 -_ACEOF +fi - need_motif=yes - extra_objs="$extra_objs input-method-motif.o" && if test "$verbose" = "yes"; then - echo " xemacs will be linked with \"input-method-motif.o\"" - fi - fi - if test "$with_xim" = "motif"; then - with_xfs=no - fi fi + test -z "$with_wnn" && with_wnn=yes + if test "$with_wnn" = "yes"; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_WNN 1 +_ACEOF - if test "$with_xfs" = "yes" ; then - { echo "$as_me:$LINENO: checking for XFontSet..." >&5 -echo "$as_me: checking for XFontSet..." >&6;} - echo "$as_me:$LINENO: checking for XmbDrawString in -lX11" >&5 -echo $ECHO_N "checking for XmbDrawString in -lX11... $ECHO_C" >&6 -if test "${ac_cv_lib_X11_XmbDrawString+set}" = set; then + libs_x="-l$libwnn $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-l$libwnn\" to \$libs_x"; fi + if test "$with_wnn6" != "no"; then + as_ac_Lib=`echo "ac_cv_lib_$libwnn''_jl_fi_dic_list" | $as_tr_sh` +echo "$as_me:$LINENO: checking for jl_fi_dic_list in -l$libwnn" >&5 +echo $ECHO_N "checking for jl_fi_dic_list in -l$libwnn... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Lib+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lX11 $LIBS" +LIBS="-l$libwnn $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -26610,11 +28471,11 @@ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char XmbDrawString (); +char jl_fi_dic_list (); int main () { -XmbDrawString (); +jl_fi_dic_list (); ; return 0; } @@ -26641,50 +28502,44 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_X11_XmbDrawString=yes + eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_X11_XmbDrawString=no +eval "$as_ac_Lib=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XmbDrawString" >&5 -echo "${ECHO_T}$ac_cv_lib_X11_XmbDrawString" >&6 -if test $ac_cv_lib_X11_XmbDrawString = yes; then - : -else - with_xfs=no +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Lib'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 +if test `eval echo '${'$as_ac_Lib'}'` = yes; then + with_wnn6=yes fi - if test "$with_xfs" = "yes" && test "$enable_menubars" = "lucid"; then - cat >>confdefs.h <<\_ACEOF -#define USE_XFONTSET 1 + test "$with_wnn6" = "yes" && cat >>confdefs.h <<\_ACEOF +#define WNN6 1 _ACEOF - if test "$with_xim" = "no" ; then - extra_objs="$extra_objs input-method-xlib.o" && if test "$verbose" = "yes"; then - echo " xemacs will be linked with \"input-method-xlib.o\"" - fi - fi fi fi - test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support - test -z "$with_wnn" && { if test "${ac_cv_header_wnn_jllib_h+set}" = set; then - echo "$as_me:$LINENO: checking for wnn/jllib.h" >&5 -echo $ECHO_N "checking for wnn/jllib.h... $ECHO_C" >&6 -if test "${ac_cv_header_wnn_jllib_h+set}" = set; then + + canna_includes_found=no + if test "$with_canna" != "no"; then + if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then + echo "$as_me:$LINENO: checking for canna/jrkanji.h" >&5 +echo $ECHO_N "checking for canna/jrkanji.h... $ECHO_C" >&6 +if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi -echo "$as_me:$LINENO: result: $ac_cv_header_wnn_jllib_h" >&5 -echo "${ECHO_T}$ac_cv_header_wnn_jllib_h" >&6 +echo "$as_me:$LINENO: result: $ac_cv_header_canna_jrkanji_h" >&5 +echo "${ECHO_T}$ac_cv_header_canna_jrkanji_h" >&6 else # Is the header compilable? -echo "$as_me:$LINENO: checking wnn/jllib.h usability" >&5 -echo $ECHO_N "checking wnn/jllib.h usability... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking canna/jrkanji.h usability" >&5 +echo $ECHO_N "checking canna/jrkanji.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -26692,7 +28547,7 @@ cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include +#include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 @@ -26728,15 +28583,15 @@ echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? -echo "$as_me:$LINENO: checking wnn/jllib.h presence" >&5 -echo $ECHO_N "checking wnn/jllib.h presence... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking canna/jrkanji.h presence" >&5 +echo $ECHO_N "checking canna/jrkanji.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 @@ -26770,65 +28625,216 @@ # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: wnn/jllib.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: wnn/jllib.h: proceeding with the compiler's result" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: wnn/jllib.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: wnn/jllib.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: wnn/jllib.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: wnn/jllib.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: wnn/jllib.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/jllib.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: wnn/jllib.h: in the future, the compiler will take precedence" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac -echo "$as_me:$LINENO: checking for wnn/jllib.h" >&5 -echo $ECHO_N "checking for wnn/jllib.h... $ECHO_C" >&6 -if test "${ac_cv_header_wnn_jllib_h+set}" = set; then +echo "$as_me:$LINENO: checking for canna/jrkanji.h" >&5 +echo $ECHO_N "checking for canna/jrkanji.h... $ECHO_C" >&6 +if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_cv_header_wnn_jllib_h=$ac_header_preproc + ac_cv_header_canna_jrkanji_h=$ac_header_preproc fi -echo "$as_me:$LINENO: result: $ac_cv_header_wnn_jllib_h" >&5 -echo "${ECHO_T}$ac_cv_header_wnn_jllib_h" >&6 +echo "$as_me:$LINENO: result: $ac_cv_header_canna_jrkanji_h" >&5 +echo "${ECHO_T}$ac_cv_header_canna_jrkanji_h" >&6 fi -if test $ac_cv_header_wnn_jllib_h = yes; then - : +if test $ac_cv_header_canna_jrkanji_h = yes; then + canna_includes_found=yes +fi + + + fi + if test "$canna_includes_found" = "no" -a "$with_canna" != "no" -a \ + -d "/usr/local/canna/include"; then + save_c_switch_site="$c_switch_site" + c_switch_site="$c_switch_site -I/usr/local/canna/include" + if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then + echo "$as_me:$LINENO: checking for canna/jrkanji.h" >&5 +echo $ECHO_N "checking for canna/jrkanji.h... $ECHO_C" >&6 +if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_canna_jrkanji_h" >&5 +echo "${ECHO_T}$ac_cv_header_canna_jrkanji_h" >&6 else - with_wnn=no + # Is the header compilable? +echo "$as_me:$LINENO: checking canna/jrkanji.h usability" >&5 +echo $ECHO_N "checking canna/jrkanji.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking canna/jrkanji.h presence" >&5 +echo $ECHO_N "checking canna/jrkanji.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: canna/jrkanji.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for canna/jrkanji.h" >&5 +echo $ECHO_N "checking for canna/jrkanji.h... $ECHO_C" >&6 +if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_canna_jrkanji_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_canna_jrkanji_h" >&5 +echo "${ECHO_T}$ac_cv_header_canna_jrkanji_h" >&6 + +fi +if test $ac_cv_header_canna_jrkanji_h = yes; then + canna_includes_found=yes fi - } - test -z "$with_wnn" && { if test "${ac_cv_header_wnn_commonhd_h+set}" = set; then - echo "$as_me:$LINENO: checking for wnn/commonhd.h" >&5 -echo $ECHO_N "checking for wnn/commonhd.h... $ECHO_C" >&6 -if test "${ac_cv_header_wnn_commonhd_h+set}" = set; then + + if test "$canna_includes_found" != "yes"; then + c_switch_site="$save_c_switch_site" + with_canna="no" + fi + fi + + test -z "$with_canna" && { if test "${ac_cv_header_canna_RK_h+set}" = set; then + echo "$as_me:$LINENO: checking for canna/RK.h" >&5 +echo $ECHO_N "checking for canna/RK.h... $ECHO_C" >&6 +if test "${ac_cv_header_canna_RK_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi -echo "$as_me:$LINENO: result: $ac_cv_header_wnn_commonhd_h" >&5 -echo "${ECHO_T}$ac_cv_header_wnn_commonhd_h" >&6 +echo "$as_me:$LINENO: result: $ac_cv_header_canna_RK_h" >&5 +echo "${ECHO_T}$ac_cv_header_canna_RK_h" >&6 else # Is the header compilable? -echo "$as_me:$LINENO: checking wnn/commonhd.h usability" >&5 -echo $ECHO_N "checking wnn/commonhd.h usability... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking canna/RK.h usability" >&5 +echo $ECHO_N "checking canna/RK.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -26836,7 +28842,7 @@ cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include +#include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 @@ -26872,15 +28878,15 @@ echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? -echo "$as_me:$LINENO: checking wnn/commonhd.h presence" >&5 -echo $ECHO_N "checking wnn/commonhd.h presence... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking canna/RK.h presence" >&5 +echo $ECHO_N "checking canna/RK.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 @@ -26914,110 +28920,78 @@ # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: wnn/commonhd.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: wnn/commonhd.h: proceeding with the compiler's result" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/RK.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: canna/RK.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/RK.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: canna/RK.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: wnn/commonhd.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: wnn/commonhd.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: wnn/commonhd.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: wnn/commonhd.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: wnn/commonhd.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: wnn/commonhd.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: wnn/commonhd.h: in the future, the compiler will take precedence" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/RK.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: canna/RK.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/RK.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: canna/RK.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/RK.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: canna/RK.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/RK.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: canna/RK.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/RK.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: canna/RK.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: canna/RK.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: canna/RK.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac -echo "$as_me:$LINENO: checking for wnn/commonhd.h" >&5 -echo $ECHO_N "checking for wnn/commonhd.h... $ECHO_C" >&6 -if test "${ac_cv_header_wnn_commonhd_h+set}" = set; then +echo "$as_me:$LINENO: checking for canna/RK.h" >&5 +echo $ECHO_N "checking for canna/RK.h... $ECHO_C" >&6 +if test "${ac_cv_header_canna_RK_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_cv_header_wnn_commonhd_h=$ac_header_preproc + ac_cv_header_canna_RK_h=$ac_header_preproc fi -echo "$as_me:$LINENO: result: $ac_cv_header_wnn_commonhd_h" >&5 -echo "${ECHO_T}$ac_cv_header_wnn_commonhd_h" >&6 +echo "$as_me:$LINENO: result: $ac_cv_header_canna_RK_h" >&5 +echo "${ECHO_T}$ac_cv_header_canna_RK_h" >&6 fi -if test $ac_cv_header_wnn_commonhd_h = yes; then +if test $ac_cv_header_canna_RK_h = yes; then : else - with_wnn=no + with_canna=no fi } - if test "$with_wnn" != "no"; then - -for ac_func in crypt -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then + test -z "$with_canna" && { echo "$as_me:$LINENO: checking for RkBgnBun in -lRKC" >&5 +echo $ECHO_N "checking for RkBgnBun in -lRKC... $ECHO_C" >&6 +if test "${ac_cv_lib_RKC_RkBgnBun+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF + ac_check_lib_save_LIBS=$LIBS +LIBS="-lRKC $LIBS" +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" -{ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - +char RkBgnBun (); int main () { -return f != $ac_func; +RkBgnBun (); ; return 0; } @@ -27044,34 +29018,32 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - eval "$as_ac_var=yes" + ac_cv_lib_RKC_RkBgnBun=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -eval "$as_ac_var=no" +ac_cv_lib_RKC_RkBgnBun=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - +echo "$as_me:$LINENO: result: $ac_cv_lib_RKC_RkBgnBun" >&5 +echo "${ECHO_T}$ac_cv_lib_RKC_RkBgnBun" >&6 +if test $ac_cv_lib_RKC_RkBgnBun = yes; then + : +else + with_canna=no fi -done - - test "$ac_cv_func_crypt" != "yes" && { -echo "$as_me:$LINENO: checking for crypt in -lcrypt" >&5 -echo $ECHO_N "checking for crypt in -lcrypt... $ECHO_C" >&6 -if test "${ac_cv_lib_crypt_crypt+set}" = set; then + } + test -z "$with_canna" && { echo "$as_me:$LINENO: checking for jrKanjiControl in -lcanna" >&5 +echo $ECHO_N "checking for jrKanjiControl in -lcanna... $ECHO_C" >&6 +if test "${ac_cv_lib_canna_jrKanjiControl+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypt $LIBS" +LIBS="-lcanna $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -27085,11 +29057,11 @@ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char crypt (); +char jrKanjiControl (); int main () { -crypt (); +jrKanjiControl (); ; return 0; } @@ -27116,37 +29088,58 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_crypt_crypt=yes + ac_cv_lib_canna_jrKanjiControl=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_crypt_crypt=no +ac_cv_lib_canna_jrKanjiControl=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_crypt_crypt" >&5 -echo "${ECHO_T}$ac_cv_lib_crypt_crypt" >&6 -if test $ac_cv_lib_crypt_crypt = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBCRYPT 1 +echo "$as_me:$LINENO: result: $ac_cv_lib_canna_jrKanjiControl" >&5 +echo "${ECHO_T}$ac_cv_lib_canna_jrKanjiControl" >&6 +if test $ac_cv_lib_canna_jrKanjiControl = yes; then + : +else + with_canna=no +fi + } + test -z "$with_canna" && with_canna=yes + if test "$with_canna" = "yes"; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_CANNA 1 _ACEOF - LIBS="-lcrypt $LIBS" + MAKE_SUBDIR="$MAKE_SUBDIR modules/canna" && if test "$verbose" = "yes"; then echo " Appending \"modules/canna\" to \$MAKE_SUBDIR"; fi + need_modules_common=yes + if test "$with_modules" = "yes"; then + INSTALL_ARCH_DEP_SUBDIR="$INSTALL_ARCH_DEP_SUBDIR modules/canna" && if test "$verbose" = "yes"; then echo " Appending \"modules/canna\" to \$INSTALL_ARCH_DEP_SUBDIR"; fi + fi + canna_libs="-lcanna -lRKC $canna_libs" && if test "$verbose" = "yes"; then echo " Prepending \"-lcanna -lRKC\" to \$canna_libs"; fi + fi + +else for feature in xim canna wnn; do + if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then + { echo "$as_me:$LINENO: WARNING: --with-${feature} ignored: Not valid without Mule support" >&5 +echo "$as_me: WARNING: --with-${feature} ignored: Not valid without Mule support" >&2;} + fi + eval "with_${feature}=no" + done fi - } - fi - if test -z "$with_wnn" -o "$with_wnn" = "yes"; then - echo "$as_me:$LINENO: checking for jl_dic_list_e in -lwnn" >&5 -echo $ECHO_N "checking for jl_dic_list_e in -lwnn... $ECHO_C" >&6 -if test "${ac_cv_lib_wnn_jl_dic_list_e+set}" = set; then + +if test "$need_motif" = "yes" ; then + libs_x="-lXm $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-lXm\" to \$libs_x"; fi + echo "$as_me:$LINENO: checking for layout_object_getvalue in -li18n" >&5 +echo $ECHO_N "checking for layout_object_getvalue in -li18n... $ECHO_C" >&6 +if test "${ac_cv_lib_i18n_layout_object_getvalue+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lwnn $LIBS" +LIBS="-li18n $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -27160,11 +29153,11 @@ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char jl_dic_list_e (); +char layout_object_getvalue (); int main () { -jl_dic_list_e (); +layout_object_getvalue (); ; return 0; } @@ -27191,181 +29184,194 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_wnn_jl_dic_list_e=yes + ac_cv_lib_i18n_layout_object_getvalue=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_wnn_jl_dic_list_e=no +ac_cv_lib_i18n_layout_object_getvalue=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_wnn_jl_dic_list_e" >&5 -echo "${ECHO_T}$ac_cv_lib_wnn_jl_dic_list_e" >&6 -if test $ac_cv_lib_wnn_jl_dic_list_e = yes; then - libwnn=wnn -else - echo "$as_me:$LINENO: checking for jl_dic_list_e in -lwnn4" >&5 -echo $ECHO_N "checking for jl_dic_list_e in -lwnn4... $ECHO_C" >&6 -if test "${ac_cv_lib_wnn4_jl_dic_list_e+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lwnn4 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ +echo "$as_me:$LINENO: result: $ac_cv_lib_i18n_layout_object_getvalue" >&5 +echo "${ECHO_T}$ac_cv_lib_i18n_layout_object_getvalue" >&6 +if test $ac_cv_lib_i18n_layout_object_getvalue = yes; then + libs_x="-li18n $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-li18n\" to \$libs_x"; fi +fi -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char jl_dic_list_e (); -int -main () -{ -jl_dic_list_e (); - ; - return 0; + +if test "$add_runtime_path" = "yes" -a -n "$dash_r"; then + ld_switch_site=`echo '' $ld_switch_site | sed -e 's:^ ::' -e "s/$dash_r[^ ]*//g"` + ld_switch_x_site=`echo '' $ld_switch_x_site | sed -e 's:^ ::' -e "s/$dash_r[^ ]*//g"` + + runpath="" runpath_dirs="" + if test -n "$LD_RUN_PATH"; then + runpath="$LD_RUN_PATH" + elif test "$GCC" = "yes"; then + ld_switch_run_save="$ld_switch_run"; ld_switch_run="" + echo "int main(int argc, char *argv[]) {return 0;}" > conftest.c + xe_runpath_link='${CC-cc} -o conftest -v $CFLAGS '"$xe_ldflags"' conftest.$ac_ext 2>&1 1>/dev/null' + for arg in `eval "$xe_runpath_link" | grep ' -L'`; do + case "$arg" in P,* | -L* | -R* ) + for dir in `echo '' "$arg" | sed -e 's:^ ::' -e 's/^..//' -e 'y/:/ /'`; do + { +xe_runpath_dir="$dir" + test "$xe_runpath_dir" != "/lib" -a \ + "$xe_runpath_dir" != "/usr/lib" -a \ + -n "`ls ${xe_runpath_dir}/*.s[ol] 2>/dev/null`" && \ + eval "$xe_add_unique_runpath_dir" } -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_wnn4_jl_dic_list_e=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + done ;; + esac + done + ld_switch_run="$ld_switch_run_save" + rm -f conftest* + else + for arg in $ld_switch_site $ld_switch_x_site; do + case "$arg" in -L*) { +xe_runpath_dir=`echo '' "$arg" | sed -e 's:^ ::' -e 's/^-L//'` + test "$xe_runpath_dir" != "/lib" -a \ + "$xe_runpath_dir" != "/usr/lib" -a \ + -n "`ls ${xe_runpath_dir}/*.s[ol] 2>/dev/null`" && \ + eval "$xe_add_unique_runpath_dir" +};; esac + done + if test "$opsys $need_motif" = "sol2 yes"; then + xe_runpath_dir="/opt/SUNWdt/lib"; + eval "$xe_add_unique_runpath_dir"; + fi + fi + if test -n "$runpath"; then + ld_switch_run="${dash_r}${runpath}" -ac_cv_lib_wnn4_jl_dic_list_e=no +if test "$GCC" = "yes"; then + set x $ld_switch_run; shift; ld_switch_run="" + while test -n "$1"; do + case $1 in + -L | -l | -u ) ld_switch_run="$ld_switch_run $1 $2"; shift ;; + -L* | -l* | -u* | -Wl* | -pg ) ld_switch_run="$ld_switch_run $1" ;; + -Xlinker* ) ;; + * ) ld_switch_run="$ld_switch_run -Xlinker $1" ;; + esac + shift + done fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + test "$verbose" = "yes" && echo "Setting runpath to $runpath" + fi fi -echo "$as_me:$LINENO: result: $ac_cv_lib_wnn4_jl_dic_list_e" >&5 -echo "${ECHO_T}$ac_cv_lib_wnn4_jl_dic_list_e" >&6 -if test $ac_cv_lib_wnn4_jl_dic_list_e = yes; then - libwnn=wnn4 -else - echo "$as_me:$LINENO: checking for jl_dic_list_e in -lwnn6" >&5 -echo $ECHO_N "checking for jl_dic_list_e in -lwnn6... $ECHO_C" >&6 -if test "${ac_cv_lib_wnn6_jl_dic_list_e+set}" = set; then + +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp fsync ftime ftruncate getaddrinfo gethostname getnameinfo getpagesize getrlimit gettimeofday getcwd link logb lrand48 matherr mkdir mktime perror poll random readlink rename res_init rint rmdir select setitimer setpgid setsid sigblock sighold sigprocmask snprintf strerror strlwr strupr symlink tzset ulimit umask usleep vlimit vsnprintf waitpid wcscmp wcslen +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lwnn6 $LIBS" -cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" +{ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char jl_dic_list_e (); -int -main () -{ -jl_dic_list_e (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_wnn6_jl_dic_list_e=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_wnn6_jl_dic_list_e=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_wnn6_jl_dic_list_e" >&5 -echo "${ECHO_T}$ac_cv_lib_wnn6_jl_dic_list_e" >&6 -if test $ac_cv_lib_wnn6_jl_dic_list_e = yes; then - libwnn=wnn6 -else - echo "$as_me:$LINENO: checking for dic_list_e in -lwnn6_fromsrc" >&5 -echo $ECHO_N "checking for dic_list_e in -lwnn6_fromsrc... $ECHO_C" >&6 -if test "${ac_cv_lib_wnn6_fromsrc_dic_list_e+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lwnn6_fromsrc $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif #ifdef __cplusplus -extern "C" +} #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dic_list_e (); + int main () { -dic_list_e (); +return f != $ac_func; ; return 0; } @@ -27392,66 +29398,90 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_wnn6_fromsrc_dic_list_e=yes + eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_wnn6_fromsrc_dic_list_e=no +eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_wnn6_fromsrc_dic_list_e" >&5 -echo "${ECHO_T}$ac_cv_lib_wnn6_fromsrc_dic_list_e" >&6 -if test $ac_cv_lib_wnn6_fromsrc_dic_list_e = yes; then - libwnn=wnn6_fromsrc -else - with_wnn=no fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF fi +done -fi +if test "$ac_cv_func_getaddrinfo" != "no" ; then + case "$opsys" in + hpux11 ) + { echo "$as_me:$LINENO: WARNING: Use of getaddrinfo is disabled for HP-UX 11.XX." >&5 +echo "$as_me: WARNING: Use of getaddrinfo is disabled for HP-UX 11.XX." >&2;} + ac_cv_func_getaddrinfo=no + ;; + esac fi - fi - test -z "$with_wnn" && with_wnn=yes - if test "$with_wnn" = "yes"; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_WNN 1 -_ACEOF - - libs_x="-l$libwnn $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-l$libwnn\" to \$libs_x"; fi - if test "$with_wnn6" != "no"; then - as_ac_Lib=`echo "ac_cv_lib_$libwnn''_jl_fi_dic_list" | $as_tr_sh` -echo "$as_me:$LINENO: checking for jl_fi_dic_list in -l$libwnn" >&5 -echo $ECHO_N "checking for jl_fi_dic_list in -l$libwnn... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Lib+set}\" = set"; then +if test "$check_vdb_posix" = "yes" ; then + echo "$as_me:$LINENO: checking for mprotect" >&5 +echo $ECHO_N "checking for mprotect... $ECHO_C" >&6 +if test "${ac_cv_func_mprotect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$libwnn $LIBS" -cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +/* Define mprotect to an innocuous variant, in case declares mprotect. + For example, HP-UX 11i declares gettimeofday. */ +#define mprotect innocuous_mprotect + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char mprotect (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef mprotect /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" +{ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char jl_fi_dic_list (); +char mprotect (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_mprotect) || defined (__stub___mprotect) +choke me +#else +char (*f) () = mprotect; +#endif +#ifdef __cplusplus +} +#endif + int main () { -jl_fi_dic_list (); +return f != mprotect; ; return 0; } @@ -27478,351 +29508,85 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - eval "$as_ac_Lib=yes" + ac_cv_func_mprotect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -eval "$as_ac_Lib=no" +ac_cv_func_mprotect=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Lib'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 -if test `eval echo '${'$as_ac_Lib'}'` = yes; then - with_wnn6=yes -fi - - test "$with_wnn6" = "yes" && cat >>confdefs.h <<\_ACEOF -#define WNN6 1 -_ACEOF - - fi - fi - - canna_includes_found=no - if test "$with_canna" != "no"; then - if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then - echo "$as_me:$LINENO: checking for canna/jrkanji.h" >&5 -echo $ECHO_N "checking for canna/jrkanji.h... $ECHO_C" >&6 -if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_canna_jrkanji_h" >&5 -echo "${ECHO_T}$ac_cv_header_canna_jrkanji_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking canna/jrkanji.h usability" >&5 -echo $ECHO_N "checking canna/jrkanji.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking canna/jrkanji.h presence" >&5 -echo $ECHO_N "checking canna/jrkanji.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include +echo "$as_me:$LINENO: result: $ac_cv_func_mprotect" >&5 +echo "${ECHO_T}$ac_cv_func_mprotect" >&6 +if test $ac_cv_func_mprotect = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_MPROTECT 1 _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for canna/jrkanji.h" >&5 -echo $ECHO_N "checking for canna/jrkanji.h... $ECHO_C" >&6 -if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_canna_jrkanji_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_canna_jrkanji_h" >&5 -echo "${ECHO_T}$ac_cv_header_canna_jrkanji_h" >&6 - -fi -if test $ac_cv_header_canna_jrkanji_h = yes; then - canna_includes_found=yes + have_vdb_mprotect=yes fi - fi - if test "$canna_includes_found" = "no" -a "$with_canna" != "no" -a \ - -d "/usr/local/canna/include"; then - save_c_switch_site="$c_switch_site" - c_switch_site="$c_switch_site -I/usr/local/canna/include" - if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then - echo "$as_me:$LINENO: checking for canna/jrkanji.h" >&5 -echo $ECHO_N "checking for canna/jrkanji.h... $ECHO_C" >&6 -if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then + echo "$as_me:$LINENO: checking for sigaction" >&5 +echo $ECHO_N "checking for sigaction... $ECHO_C" >&6 +if test "${ac_cv_func_sigaction+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_canna_jrkanji_h" >&5 -echo "${ECHO_T}$ac_cv_header_canna_jrkanji_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking canna/jrkanji.h usability" >&5 -echo $ECHO_N "checking canna/jrkanji.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking canna/jrkanji.h presence" >&5 -echo $ECHO_N "checking canna/jrkanji.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 +/* Define sigaction to an innocuous variant, in case declares sigaction. + For example, HP-UX 11i declares gettimeofday. */ +#define sigaction innocuous_sigaction -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/jrkanji.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: canna/jrkanji.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for canna/jrkanji.h" >&5 -echo $ECHO_N "checking for canna/jrkanji.h... $ECHO_C" >&6 -if test "${ac_cv_header_canna_jrkanji_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_canna_jrkanji_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_canna_jrkanji_h" >&5 -echo "${ECHO_T}$ac_cv_header_canna_jrkanji_h" >&6 +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char sigaction (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ -fi -if test $ac_cv_header_canna_jrkanji_h = yes; then - canna_includes_found=yes -fi +#ifdef __STDC__ +# include +#else +# include +#endif +#undef sigaction - if test "$canna_includes_found" != "yes"; then - c_switch_site="$save_c_switch_site" - with_canna="no" - fi - fi +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sigaction (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_sigaction) || defined (__stub___sigaction) +choke me +#else +char (*f) () = sigaction; +#endif +#ifdef __cplusplus +} +#endif - test -z "$with_canna" && { if test "${ac_cv_header_canna_RK_h+set}" = set; then - echo "$as_me:$LINENO: checking for canna/RK.h" >&5 -echo $ECHO_N "checking for canna/RK.h... $ECHO_C" >&6 -if test "${ac_cv_header_canna_RK_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_canna_RK_h" >&5 -echo "${ECHO_T}$ac_cv_header_canna_RK_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking canna/RK.h usability" >&5 -echo $ECHO_N "checking canna/RK.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include +int +main () +{ +return f != sigaction; + ; + return 0; +} _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -27836,145 +29600,59 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' + { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking canna/RK.h presence" >&5 -echo $ECHO_N "checking canna/RK.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: canna/RK.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: canna/RK.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/RK.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: canna/RK.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: canna/RK.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: canna/RK.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/RK.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: canna/RK.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/RK.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: canna/RK.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/RK.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: canna/RK.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/RK.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: canna/RK.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: canna/RK.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: canna/RK.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for canna/RK.h" >&5 -echo $ECHO_N "checking for canna/RK.h... $ECHO_C" >&6 -if test "${ac_cv_header_canna_RK_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + ac_cv_func_sigaction=yes else - ac_cv_header_canna_RK_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_canna_RK_h" >&5 -echo "${ECHO_T}$ac_cv_header_canna_RK_h" >&6 + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_func_sigaction=no fi -if test $ac_cv_header_canna_RK_h = yes; then - : +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_sigaction" >&5 +echo "${ECHO_T}$ac_cv_func_sigaction" >&6 +if test $ac_cv_func_sigaction = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_SIGACTION 1 +_ACEOF + have_vdb_sigaction=yes else - with_canna=no + have_vdb_sigaction=no fi - } - test -z "$with_canna" && { echo "$as_me:$LINENO: checking for RkBgnBun in -lRKC" >&5 -echo $ECHO_N "checking for RkBgnBun in -lRKC... $ECHO_C" >&6 -if test "${ac_cv_lib_RKC_RkBgnBun+set}" = set; then + echo "$as_me:$LINENO: checking for struct siginfo.si_addr" >&5 +echo $ECHO_N "checking for struct siginfo.si_addr... $ECHO_C" >&6 +if test "${ac_cv_member_struct_siginfo_si_addr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lRKC $LIBS" -cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +#include -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char RkBgnBun (); int main () { -RkBgnBun (); +static struct siginfo ac_aggr; +if (ac_aggr.si_addr) +return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -27988,63 +29666,38 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' + { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_RKC_RkBgnBun=yes + ac_cv_member_struct_siginfo_si_addr=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_RKC_RkBgnBun=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_RKC_RkBgnBun" >&5 -echo "${ECHO_T}$ac_cv_lib_RKC_RkBgnBun" >&6 -if test $ac_cv_lib_RKC_RkBgnBun = yes; then - : -else - with_canna=no -fi - } - test -z "$with_canna" && { echo "$as_me:$LINENO: checking for jrKanjiControl in -lcanna" >&5 -echo $ECHO_N "checking for jrKanjiControl in -lcanna... $ECHO_C" >&6 -if test "${ac_cv_lib_canna_jrKanjiControl+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcanna $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +#include -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char jrKanjiControl (); int main () { -jrKanjiControl (); +static struct siginfo ac_aggr; +if (sizeof ac_aggr.si_addr) +return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -28058,89 +29711,58 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' + { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_canna_jrKanjiControl=yes + ac_cv_member_struct_siginfo_si_addr=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_canna_jrKanjiControl=no +ac_cv_member_struct_siginfo_si_addr=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_lib_canna_jrKanjiControl" >&5 -echo "${ECHO_T}$ac_cv_lib_canna_jrKanjiControl" >&6 -if test $ac_cv_lib_canna_jrKanjiControl = yes; then - : -else - with_canna=no +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi - } - test -z "$with_canna" && with_canna=yes - if test "$with_canna" = "yes"; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_CANNA 1 +echo "$as_me:$LINENO: result: $ac_cv_member_struct_siginfo_si_addr" >&5 +echo "${ECHO_T}$ac_cv_member_struct_siginfo_si_addr" >&6 +if test $ac_cv_member_struct_siginfo_si_addr = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_STRUCT_SIGINFO_SI_ADDR 1 _ACEOF - - MAKE_SUBDIR="$MAKE_SUBDIR modules/canna" && if test "$verbose" = "yes"; then echo " Appending \"modules/canna\" to \$MAKE_SUBDIR"; fi - need_modules_common=yes - if test "$with_modules" = "yes"; then - INSTALL_ARCH_DEP_SUBDIR="$INSTALL_ARCH_DEP_SUBDIR modules/canna" && if test "$verbose" = "yes"; then echo " Appending \"modules/canna\" to \$INSTALL_ARCH_DEP_SUBDIR"; fi - fi - canna_libs="-lcanna -lRKC $canna_libs" && if test "$verbose" = "yes"; then echo " Prepending \"-lcanna -lRKC\" to \$canna_libs"; fi - fi - - -else for feature in xim canna wnn; do - if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then - { echo "$as_me:$LINENO: WARNING: --with-${feature} ignored: Not valid without Mule support" >&5 -echo "$as_me: WARNING: --with-${feature} ignored: Not valid without Mule support" >&2;} - fi - eval "with_${feature}=no" - done + have_si_addr=yes fi -if test "$need_motif" = "yes" ; then - libs_x="-lXm $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-lXm\" to \$libs_x"; fi - echo "$as_me:$LINENO: checking for layout_object_getvalue in -li18n" >&5 -echo $ECHO_N "checking for layout_object_getvalue in -li18n... $ECHO_C" >&6 -if test "${ac_cv_lib_i18n_layout_object_getvalue+set}" = set; then + echo "$as_me:$LINENO: checking for siginfo_t.si_addr" >&5 +echo $ECHO_N "checking for siginfo_t.si_addr... $ECHO_C" >&6 +if test "${ac_cv_member_siginfo_t_si_addr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-li18n $LIBS" -cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +#include -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char layout_object_getvalue (); int main () { -layout_object_getvalue (); +static siginfo_t ac_aggr; +if (ac_aggr.si_addr) +return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -28154,151 +29776,84 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' + { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_i18n_layout_object_getvalue=yes + ac_cv_member_siginfo_t_si_addr=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_i18n_layout_object_getvalue=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_i18n_layout_object_getvalue" >&5 -echo "${ECHO_T}$ac_cv_lib_i18n_layout_object_getvalue" >&6 -if test $ac_cv_lib_i18n_layout_object_getvalue = yes; then - libs_x="-li18n $libs_x" && if test "$verbose" = "yes"; then echo " Prepending \"-li18n\" to \$libs_x"; fi -fi - - -if test "$add_runtime_path" = "yes" -a -n "$dash_r"; then - ld_switch_site=`echo '' $ld_switch_site | sed -e 's:^ ::' -e "s/$dash_r[^ ]*//g"` - ld_switch_x_site=`echo '' $ld_switch_x_site | sed -e 's:^ ::' -e "s/$dash_r[^ ]*//g"` +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include - runpath="" runpath_dirs="" - if test -n "$LD_RUN_PATH"; then - runpath="$LD_RUN_PATH" - elif test "$GCC" = "yes"; then - ld_switch_run_save="$ld_switch_run"; ld_switch_run="" - echo "int main(int argc, char *argv[]) {return 0;}" > conftest.c - xe_runpath_link='${CC-cc} -o conftest -v $CFLAGS '"$xe_ldflags"' conftest.$ac_ext 2>&1 1>/dev/null' - for arg in `eval "$xe_runpath_link" | grep ' -L'`; do - case "$arg" in P,* | -L* | -R* ) - for dir in `echo '' "$arg" | sed -e 's:^ ::' -e 's/^..//' -e 'y/:/ /'`; do - { -xe_runpath_dir="$dir" - test "$xe_runpath_dir" != "/lib" -a \ - "$xe_runpath_dir" != "/usr/lib" -a \ - -n "`ls ${xe_runpath_dir}/*.s[ol] 2>/dev/null`" && \ - eval "$xe_add_unique_runpath_dir" +int +main () +{ +static siginfo_t ac_aggr; +if (sizeof ac_aggr.si_addr) +return 0; + ; + return 0; } - done ;; - esac - done - ld_switch_run="$ld_switch_run_save" - rm -f conftest* - else - for arg in $ld_switch_site $ld_switch_x_site; do - case "$arg" in -L*) { -xe_runpath_dir=`echo '' "$arg" | sed -e 's:^ ::' -e 's/^-L//'` - test "$xe_runpath_dir" != "/lib" -a \ - "$xe_runpath_dir" != "/usr/lib" -a \ - -n "`ls ${xe_runpath_dir}/*.s[ol] 2>/dev/null`" && \ - eval "$xe_add_unique_runpath_dir" -};; esac - done - if test "$opsys $need_motif" = "sol2 yes"; then - xe_runpath_dir="/opt/SUNWdt/lib"; - eval "$xe_add_unique_runpath_dir"; - fi - fi - if test -n "$runpath"; then - ld_switch_run="${dash_r}${runpath}" +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_siginfo_t_si_addr=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -if test "$GCC" = "yes"; then - set x $ld_switch_run; shift; ld_switch_run="" - while test -n "$1"; do - case $1 in - -L | -l | -u ) ld_switch_run="$ld_switch_run $1 $2"; shift ;; - -L* | -l* | -u* | -Wl* | -pg ) ld_switch_run="$ld_switch_run $1" ;; - -Xlinker* ) ;; - * ) ld_switch_run="$ld_switch_run -Xlinker $1" ;; - esac - shift - done +ac_cv_member_siginfo_t_si_addr=no fi - test "$verbose" = "yes" && echo "Setting runpath to $runpath" - fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi - +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_siginfo_t_si_addr" >&5 +echo "${ECHO_T}$ac_cv_member_siginfo_t_si_addr" >&6 +if test $ac_cv_member_siginfo_t_si_addr = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_SIGINFO_T_SI_ADDR 1 +_ACEOF + have_si_addr=yes fi + if test "$have_si_addr" != "yes" ; then + have_vdb_sigaction=no + fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp fsync ftime ftruncate getaddrinfo gethostname getnameinfo getpagesize getrlimit gettimeofday getcwd link logb lrand48 matherr mkdir mktime perror poll random readlink rename res_init rint rmdir select setitimer setpgid setsid sigblock sighold sigprocmask snprintf strerror strlwr strupr symlink tzset ulimit umask usleep vlimit vsnprintf waitpid wcscmp wcslen -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then + echo "$as_me:$LINENO: checking for signal" >&5 +echo $ECHO_N "checking for signal... $ECHO_C" >&6 +if test "${ac_cv_func_signal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF @@ -28307,12 +29862,12 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. +/* Define signal to an innocuous variant, in case declares signal. For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func +#define signal innocuous_signal /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. + which can conflict with char signal (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ @@ -28322,7 +29877,7 @@ # include #endif -#undef $ac_func +#undef signal /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -28331,14 +29886,14 @@ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char $ac_func (); +char signal (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +#if defined (__stub_signal) || defined (__stub___signal) choke me #else -char (*f) () = $ac_func; +char (*f) () = signal; #endif #ifdef __cplusplus } @@ -28347,7 +29902,7 @@ int main () { -return f != $ac_func; +return f != signal; ; return 0; } @@ -28374,35 +29929,154 @@ ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - eval "$as_ac_var=yes" + ac_cv_func_signal=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -eval "$as_ac_var=no" +ac_cv_func_signal=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +echo "$as_me:$LINENO: result: $ac_cv_func_signal" >&5 +echo "${ECHO_T}$ac_cv_func_signal" >&6 +if test $ac_cv_func_signal = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_SIGNAL 1 +_ACEOF + have_vdb_signal=yes +fi + + echo "$as_me:$LINENO: checking for struct sigcontext.cr2" >&5 +echo $ECHO_N "checking for struct sigcontext.cr2... $ECHO_C" >&6 +if test "${ac_cv_member_struct_sigcontext_cr2+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static struct sigcontext ac_aggr; +if (ac_aggr.cr2) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_struct_sigcontext_cr2=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +static struct sigcontext ac_aggr; +if (sizeof ac_aggr.cr2) +return 0; + ; + return 0; +} _ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_struct_sigcontext_cr2=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_cv_member_struct_sigcontext_cr2=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_struct_sigcontext_cr2" >&5 +echo "${ECHO_T}$ac_cv_member_struct_sigcontext_cr2" >&6 +if test $ac_cv_member_struct_sigcontext_cr2 = yes; then + cat >>confdefs.h <<\_ACEOF +#define HAVE_STRUCT_SIGCONTEXT_CR2 1 +_ACEOF + have_cr2=yes fi -done -if test "$ac_cv_func_getaddrinfo" != "no" ; then - case "$opsys" in - hpux11 ) - { echo "$as_me:$LINENO: WARNING: Use of getaddrinfo is disabled for HP-UX 11.XX." >&5 -echo "$as_me: WARNING: Use of getaddrinfo is disabled for HP-UX 11.XX." >&2;} - ac_cv_func_getaddrinfo=no - ;; - esac + if test "$have_cr2" != "yes" ; then + have_vdb_signal=no + fi + + if test "$have_vdb_mprotect" != "yes" ; then + have_vdb_sigaction=no + have_vdb_signal=no + fi + + if test "$have_vdb_sigaction" != "yes" -a "$have_vdb_signal" != "yes" ; then + have_vdb_posix=no + have_vdb_fake=yes + { echo "Error:" "No working write-barrier implementation found for this system. + Please report this and provide information about your system." >&2; exit 1; } + else + have_vdb_posix=yes + have_vdb_fake=no + fi fi @@ -28807,9 +30481,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -28961,9 +30635,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -29111,9 +30785,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -29261,9 +30935,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -29414,9 +31088,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -29667,9 +31341,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -29922,9 +31596,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -30151,9 +31825,9 @@ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -31707,9 +33381,9 @@ echo "$as_me: WARNING: termios.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -31858,9 +33532,9 @@ echo "$as_me: WARNING: termio.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -32099,9 +33773,9 @@ echo "$as_me: WARNING: netinet/in.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -32237,9 +33911,9 @@ echo "$as_me: WARNING: arpa/inet.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -32593,9 +34267,9 @@ echo "$as_me: WARNING: sys/ipc.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -32731,9 +34405,9 @@ echo "$as_me: WARNING: sys/msg.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -32882,9 +34556,9 @@ echo "$as_me: WARNING: dirent.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -33025,9 +34699,9 @@ echo "$as_me: WARNING: sys/dir.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -33176,9 +34850,9 @@ echo "$as_me: WARNING: nlist.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -33329,9 +35003,9 @@ echo "$as_me: WARNING: multimedia/audio_device.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -33547,13 +35221,14 @@ fi if test -z "$sound_found"; then - if test "$with_msw" = "yes"; then + case "$opsys" in cygwin* | mingw* ) sound_found=yes with_native_sound_lib= extra_objs="$extra_objs ntplay.o" && if test "$verbose" = "yes"; then echo " xemacs will be linked with \"ntplay.o\"" fi - fi + ;; + esac fi if test -z "$sound_found"; then @@ -33677,9 +35352,9 @@ echo "$as_me: WARNING: ${dir}/soundcard.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -33935,9 +35610,9 @@ echo "$as_me: WARNING: audio/audiolib.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -34430,9 +36105,9 @@ echo "$as_me: WARNING: ncurses/curses.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -34572,9 +36247,9 @@ echo "$as_me: WARNING: ncurses/term.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -34722,9 +36397,9 @@ echo "$as_me: WARNING: ncurses/curses.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -35110,9 +36785,9 @@ echo "$as_me: WARNING: gpm.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -35348,9 +37023,9 @@ echo "$as_me: WARNING: ndbm.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -36255,9 +37930,9 @@ echo "$as_me: WARNING: gmp.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -36480,9 +38155,9 @@ echo "$as_me: WARNING: mp.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## +## ------------------------------------- ## +## Report this to xemacs-beta@xemacs.org ## +## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 @@ -37043,14 +38718,14 @@ fi -if test -f "$srcdir/src/.gdbinit" -a ! -f "src/.gdbinit"; then - test "$verbose" = "yes" && echo "creating src/.gdbinit" - echo "source $srcdir/src/.gdbinit" > "src/.gdbinit" +if test -f "$srcdir/src/.gdbinit.in" -a ! -f "src/.gdbinit.in"; then + test "$verbose" = "yes" && echo "creating src/.gdbinit.in" + echo "source $srcdir/src/.gdbinit.in" > "src/.gdbinit.in" fi -if test -f "$srcdir/src/.dbxrc" -a ! -f "src/.dbxrc"; then - test "$verbose" = "yes" && echo "creating src/.dbxrc" - echo ". $srcdir/src/.dbxrc" > "src/.dbxrc" +if test -f "$srcdir/src/.dbxrc.in" -a ! -f "src/.dbxrc.in"; then + test "$verbose" = "yes" && echo "creating src/.dbxrc.in" + echo ". $srcdir/src/.dbxrc.in" > "src/.dbxrc.in" fi if test -f "$srcdir/TAGS" -a ! -f "TAGS"; then @@ -37352,6 +39027,18 @@ #define MC_ALLOC 1 _ACEOF +test "$enable_newgc" = "yes" && cat >>confdefs.h <<\_ACEOF +#define NEW_GC 1 +_ACEOF + +test "$have_vdb_posix" = "yes" && cat >>confdefs.h <<\_ACEOF +#define VDB_POSIX 1 +_ACEOF + +test "$have_vdb_fake" = "yes" && cat >>confdefs.h <<\_ACEOF +#define VDB_FAKE 1 +_ACEOF + test "$enable_quick_build" = "yes" && cat >>confdefs.h <<\_ACEOF #define QUICK_BUILD 1 _ACEOF @@ -37485,6 +39172,9 @@ if test "$with_wmcommand" != no; then echo " - Handling WM_COMMAND properly." fi + if test "$with_xft" = "yes"; then + echo " - Compiling in support for Xft antialiased fonts (EXPERIMENTAL)." + fi fi if test "$need_motif" = "yes" ; then echo " Compiling in support for Motif." @@ -37510,6 +39200,10 @@ echo " Re-run configure with --enable-menubars='lucid'." ;; msw ) echo " Using MS-Windows menubars." ;; esac +if test "$with_xft_menubars" = "yes"; then + echo " - Using Xft to render antialiased fonts in menubars." + echo " WARNING: This feature will be replaced with a face." +fi case "$enable_scrollbars" in gtk ) echo " Using GTK scrollbars." ;; lucid ) echo " Using Lucid scrollbars." ;; @@ -37535,6 +39229,15 @@ athena ) echo " Using Athena native widgets." ;; msw ) echo " Using MS-Windows native widgets." ;; esac +if test "$with_xft_tabs" = "yes"; then + echo " - Using Xft to render antialiased fonts in tab controls." + echo " WARNING: This feature will be replaced with a face." +fi +if test "$with_xft_gauge" = "yes"; then + echo " - Using Xft to render antialiased fonts in progress bars." + echo " WARNING: This feature will be replaced with a face." + echo " WARNING: This feature not yet implemented; setting ignored." +fi if test "$with_dragndrop" = yes; then echo " Compiling in support for Drag'n'Drop (EXPERIMENTAL)." echo " - Drag'n'Drop prototype: $dragndrop_proto." @@ -37653,6 +39356,23 @@ echo " WARNING: turn it off." echo " WARNING: ---------------------------------------------------------" fi +test "$enable_newgc" = yes && echo " Using the new incremental garbage collector." +if test "$have_vdb_posix" = yes ; then + if test "$have_vdb_sigaction" = yes ; then + echo " Using POSIX sigaction() to install fault handler." + else + echo " Using POSIX signal() to install vdb fault handler." + fi +fi +if test "$have_vdb_win32" = yes ; then + echo " Using special WIN32 vdb fault handler." +fi +if test "$have_vdb_mach" = yes ; then + echo " Using mach exception mechanism as vdb fault handler." +fi +if test "$have_vdb_fake" = yes && test "$enable_vdb" == fake; then + echo " Virtual dirty bit write barrier manually disabled." +fi test "$enable_pdump" = yes && echo " Using the new portable dumper." test "$enable_dump_in_exec" = yes && echo " Dumping into executable." test "$enable_debug" = yes && echo " Compiling in support for extra debugging code." @@ -38063,7 +39783,7 @@ } >&5 cat >&5 <<_CSEOF -This file was extended by $as_me, which was +This file was extended by XEmacs $as_me 21.5, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -38126,7 +39846,7 @@ cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -config.status +XEmacs config.status 21.5 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" @@ -39077,6 +40797,70 @@ chmod 444 Makefile.new mv -f Makefile.new GNUmakefile + if test -r ".gdbinit.in"; then + rm -f junk.c + < .gdbinit.in \ + sed -e '/^# Generated/d' \ + -e 's%/\*\*/#.*%%' \ + -e 's/^ *# */#/' \ + -e '/^##/d' \ + -e '/^#/ { +p +d +}' \ + -e '/./ { +s/\([\"]\)/\\\1/g +s/^/"/ +s/$/"/ +}' > junk.c; + + echo creating $dir/.gdbinit +$CPP -I. -I${srcdir}/src junk.c \ + | sed -e 's/^\#.*//' \ + -e 's/^[ TAB][ TAB]*$//'\ + -e 's/^ / /' \ + -e '/^[ ]*$/d' \ + -e '/^\"/ { + s/\\\([\"]\)/\1/g + s/^[ TAB]*\"// + s/\"[ TAB]*$// +}' > Makefile.new + chmod 444 Makefile.new + mv -f Makefile.new .gdbinit + + fi + if test -r ".dbxrc.in"; then + rm -f junk.c + < .dbxrc.in \ + sed -e '/^# Generated/d' \ + -e 's%/\*\*/#.*%%' \ + -e 's/^ *# */#/' \ + -e '/^##/d' \ + -e '/^#/ { +p +d +}' \ + -e '/./ { +s/\([\"]\)/\\\1/g +s/^/"/ +s/$/"/ +}' > junk.c; + + echo creating $dir/.dbxrc +$CPP -I. -I${srcdir}/src junk.c \ + | sed -e 's/^\#.*//' \ + -e 's/^[ TAB][ TAB]*$//'\ + -e 's/^ / /' \ + -e '/^[ ]*$/d' \ + -e '/^\"/ { + s/\\\([\"]\)/\1/g + s/^[ TAB]*\"// + s/\"[ TAB]*$// +}' > Makefile.new + chmod 444 Makefile.new + mv -f Makefile.new .dbxrc + + fi if test -r "xemacs.def.in"; then rm -f junk.c cp xemacs.def.in junk.c diff -urN 21.5.23/configure.ac 21.5.24/configure.ac --- 21.5.23/configure.ac Tue Oct 25 06:01:08 2005 +++ 21.5.24/configure.ac Mon Dec 19 02:58:55 2005 @@ -24,57 +24,59 @@ AC_PREREQ(2.59)dnl m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [2.59]), 1, [m4_fatal([This script can only be generated with autoconf 2.59])], [])dnl -AC_INIT(src/lisp.h)dnl +AC_INIT([XEmacs],[21.5],[xemacs-beta@xemacs.org])dnl +AC_CONFIG_SRCDIR(src/lisp.h)dnl dnl dnl ------------------------------------------------------------------------- dnl Local copyright notices. AC_COPYRIGHT( -[#### Configuration script for XEmacs. Largely divergent from FSF. -#### Guess values for system-dependent variables and create Makefiles. -#### Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. -#### Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc. -#### Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. -#### Copyright (C) 1993, 1994, 1995 Board of Trustees, University of Illinois. -#### Copyright (C) 1996, 1997 Sun Microsystems, Inc. -#### Copyright (C) 1995, 1996, 2002, 2003, 2004 Ben Wing. -#### Copyright (C) 2000, 2001 Martin Buchholz. -#### Copyright (C) 1998, 1999 J. Kean Johnston. -#### Copyright (C) 2005 Malcolm Purvis - -### Don't edit this script! -### This script was automatically generated by the `autoconf' program -### from the file `./configure.in'. -### To rebuild it, execute the command -### autoconf -### in the this directory. You must have autoconf version 2.50 or later. -### Note: this script has been tested only with autoconf version 2.5x. - -### This file is part of XEmacs. - -### XEmacs 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, or (at your -### option) any later version. - -### XEmacs 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 XEmacs; see the file COPYING. If not, write to the Free -### Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -### 02111-1307, USA. - -### For usage, run `./configure --help' -### For more detailed information on building and installing XEmacs, -### read the file `INSTALL'. -### -### If configure succeeds, it leaves its status in config.status. -### A log of configuration tests can be found in config.log. -### If configure fails after disturbing the status quo, -### config.status is removed. +[Configuration script for XEmacs. Largely divergent from FSF. +Guess values for system-dependent variables and create Makefiles. + +Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. +Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc. +Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +Copyright (C) 1993, 1994, 1995 Board of Trustees, University of Illinois. +Copyright (C) 1996, 1997 Sun Microsystems, Inc. +Copyright (C) 1995, 1996, 2002, 2003, 2004 Ben Wing. +Copyright (C) 2000, 2001 Martin Buchholz. +Copyright (C) 1998, 1999 J. Kean Johnston. +Copyright (C) 2005 Malcolm Purvis + +Don't edit this script! +This script was automatically generated by the `autoconf' program +from the file `./configure.ac'. To rebuild it, execute the command: + + autoconf + +in the this directory. You must have autoconf version 2.59. + +This file is part of XEmacs. + +XEmacs 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, or (at your +option) any later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to the Free +Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. + +For usage, run `./configure --help' +For more detailed information on building and installing XEmacs, +read the file `INSTALL'. + +If configure succeeds, it leaves its status in config.status. +A log of configuration tests can be found in config.log. +If configure fails after disturbing the status quo, + config.status is removed. ]) dnl ------------------------------------------------------------------------- @@ -267,6 +269,26 @@ fi; dnl ])dnl XE_MERGED_ARG dnl +dnl XE_HELP_SUBSECTION(HEADING) +dnl -------------------------- +dnl +dnl Add subsection headings to the help text for XE_MERGED_ARG options. +dnl +AC_DEFUN([XE_HELP_SUBSECTION], +[m4_divert_once([HELP_ENABLE], [[ +Optional Features: + --with-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-FEATURE[=ARG] alias for --with-FEATURE + --without-FEATURE do not use FEATURE (same as --with-FEATURE=no) + --disable-FEATURE alias for --without-FEATURE]])dnl +dnl NOTE: The next eol adds a blank line before the heading. +m4_divert_once([HELP_ENABLE], [[ +$1]])dnl +dnl Add an underscpne +dnl NOTE: The next eol adds a blank line after the underscore. +m4_divert_text([HELP_ENABLE], patsubst([$1], [.], [-]) +)])dnl +dnl dnl XEmacs keyword option support dnl ============================= dnl @@ -346,8 +368,7 @@ dnl value and to note the values in an option list. dnl define([XE_EXPAND_COMPLEX_OPTION], -[with_[$1]_[$2]=[$3] -enable_[$1]_[$2]=[$3] +[_[$1]_[$2]_default=[$3] m4_append([XE_COMPONENT_LIST],[$2],[ ])dnl dnl Separate with a ':' instead of a ',' (see _default below) to avoid dnl confusion with marco parameter lists. @@ -376,65 +397,90 @@ define([XE_INIT_COMPLEX_OPTION], [_[$1]_notfirst="" dnl -XE_EXPAND_COMPLEX_OPTIONS($@) +XE_EXPAND_COMPLEX_OPTIONS($@)dnl _[$1]_types="XE_COMPONENT_LIST" _[$1]_default="m4_translit(XE_COMPONENT_DEFAULT,[:],[,])" dnl Undefine these macros so that they can be reused by later complex dnl options. -undefine([XE_COMPONENT_LIST]) -undefine([XE_COMPONENT_DEFAULT]) +undefine([XE_COMPONENT_LIST])dnl +undefine([XE_COMPONENT_DEFAULT])dnl ])dnl dnl dnl XE_PARSE_COMPLEX_OPTION(prefix, cmdline-flag) dnl --------------------------------------------- dnl dnl Internal macro to parse the option values. If an undeclared option is -dnl found then an error is generated. +dnl found then an error is generated. Because something has been supplied on +dnl the command line initialise all the complex options to 'no' rather than +dnl the default. In this way --enable-complex=foo will give the expected +dnl value (no) for bar. +dnl +dnl #### I think we should add a couple more features. +dnl First, at the end of XE_PARSE_COMPLEX_OPTION check for contradictory args, +dnl specifically if `all' is specified but the options are all individually +dnl disabled, or if `none' is specified but the options are all individually +dnl enabled, we should _warn_ about this situation. +dnl Second, we should provide an XE_VALIDATE_COMPLEX_OPTION macro to be used +dnl at the end of detection. If any feature is `yes' but we don't have it, +dnl then we should XE_DIE. dnl define([XE_PARSE_COMPLEX_OPTION], -[for x in `echo "$with_[$1]" | sed -e 's/,/ /g'` ; do - _[$1]_all_default="" - _[$1]_found="" - case "$x" in - n | no | non | none ) _[$1]_all_default=no ;; - a | al | all | both ) _[$1]_all_default=yes ;; - esac - - if test -z "$_[$1]_all_default"; then - for y in $_[$1]_types; do - dnl echo "testing x='$x' against y='$y'" - if test "$x" = "$y"; then - dnl echo "$x" = "$y" - _[$1]_found=yes - dnl echo eval `echo "[$1]_$y=yes"` - eval "with_[$1]_$y=yes" - eval "enable_[$1]_$y=yes" - elif test "$x" = "no$y"; then - dnl echo "$x" = "no$y" - _[$1]_found=yes - dnl echo eval `echo "[$1]_$y=no"` - eval "with_[$1]_$y=no" - eval "enable_[$1]_$y=no" - fi - done - test -z "$_[$1]_found" && _[$1]_bogus=yes - fi - if test "$_[$1]_bogus" = "yes" -o \ - \( -n "$_[$1]_all_default" -a -n "$_[$1]_notfirst" \) ; then - USAGE_ERROR(["Valid values for the [$2] option are: -$_[$1]_types. With prefix \"no\", switch it off. -Defaults may be overridden with \`all' or \`none' first in the list. -Hardcoded default is: $_[$1]_default."]) - elif test -n "$_[$1]_all_default" ; then - for y in $_[$1]_types; do - eval "with_[$1]_$y=$_[$1]_all_default" - eval "enable_[$1]_$y=$_[$1]_all_default" - done +[dnl Initialize variables for COMPLEX_OPTION [$1]. Leading underscore or +dnl single letter variables are internal to the XE_PARSE_COMPLEX_OPTION macro. +_[$1]_all_default="" +_require_[$1]="" +dnl check first arg for default spec +case "$with_[$1]" in + n | no | non | none ) _[$1]_all_default=no ;; + n,* | no,* | non,* | none,* ) _[$1]_all_default=no ;; + a | al | all | both ) _[$1]_all_default=yes ;; + a,* | al,* | all,* | both,* ) _[$1]_all_default=yes ;; + y | yes ) _require_[$1]=yes ;; +esac +dnl if first arg was a default spec, trim it +if test -n "$_[$1]_all_default$_require_[$1]"; then + _with_[$1]_args=`echo $with_[$1] | sed -e 's/^[[a-z]]*\(,\(.*\)\)\{0,1\}$/\2/'` +else + _with_[$1]_args=$with_[$1] +fi +dnl set default for each type +for y in $_[$1]_types; do + if test -n "$_[$1]_all_default" ; then + eval "with_[$1]_${y}=$_[$1]_all_default" + else + eval "with_[$1]_$y=\$_[$1]_${y}_default" fi - _[$1]_notfirst=yes done -unset _[$1]_bogus _[$1]_found _[$1]_notfirst _[$1]_types -unset _[$1]_default _[$1]_all_default x y +dnl parse the command line arg and set types found appropriately +for x in `echo "$_with_[$1]_args" | sed -e 's/,/ /g'` ; do + _[$1]_found="" + for y in $_[$1]_types; do + if test "$x" = "$y"; then + _[$1]_found=yes + eval "with_[$1]_$y=yes" + elif test "$x" = "no$y"; then + _[$1]_found=yes + eval "with_[$1]_$y=no" + fi + done + test -z "$_[$1]_found" && \ + USAGE_ERROR(["\ +Invalid type list supplied. Valid types for the [$2] option are: + $_[$1]_types. + A prefix of \"no\" (eg, \"notype\" for \"type\") turns a type off. + Types not explicitly specified or negated take their defaults. + The list of defaults is \"$_[$1]_default\". Prefixing \`all' or + \`none' to the list sets all defaults to on and off respectively. + \`yes' as the sole argument is equivalent to omitting the argument."]) +done +dnl copy values to enable_FEATURE_TYPE. Cleanup default vars. +for y in $_[$1]_types; do + eval "enable_[$1]_$y=\$with_[$1]_$y" + unset _[$1]_${y}_default +done +dnl clean up +unset _[$1]_types _[$1]_default _[$1]_all_default _[$1]_use_defaults +unset _with_[$1]_args _[$1]_found x y _require_[$1] ])dnl dnl dnl XE_COMPLEX_OPTION(option, yesno) @@ -467,7 +513,14 @@ XE_MERGED_ARG([$1],[$2], [XE_PARSE_COMPLEX_OPTION(patsubst([$1], -, _), [--with-$1]) $3 -],[$4])])dnl +],[ +# set default for each type +for y in [$_]patsubst([$1], -, _)[_types]; do + eval "[with_]patsubst([$1], -, _)[_$y]=[\$_]patsubst([$1], -, _)[_${y}_default]" + eval "[enable_]patsubst([$1], -, _)[_$y]=[\$_]patsubst([$1], -, _)[_${y}_default]" + unset [_]patsubst([$1], -, _)[_${y}_default] +done +$4])])dnl dnl dnl ------------------------------------------------------------------------- XE_APPEND(lib-src, MAKE_SUBDIR) @@ -494,15 +547,126 @@ dnl --use-kkcc --enable-kkcc dnl dnl parse flags +XE_HELP_SUBSECTION([Compilation options]) +XE_MERGED_ARG([compiler], + AC_HELP_STRING([--with-compiler],[C compiler to use]), + [], []) +XE_MERGED_ARG([xemacs-compiler], + AC_HELP_STRING([--with-xemacs-compiler], + [compiler to use to compile just the xemacs executable and C modules. + If you want to compile XEmacs as C++, use e.g. + `--with-xemacs-compiler=g++'. This turns on a lot of + additional error-checking.]), + [], []) +XE_MERGED_ARG([gcc], + AC_HELP_STRING([--with-gcc],[Use GCC to compile XEmacs.]), + [], []) +XE_MERGED_ARG([cflags], + AC_HELP_STRING([--with-cflags=FLAGS], + [Compiler flags. These flags will be placed after any flags inserted for warnings, debugging or optimization; setting this does not disable the insertion of those flags. Use configure settings such as `--with-optimization=no' or `enable-debug=no' to turn them off, or override them with `--with-cflags-optimization', `--with-cflags-debugging', or `with-cflags-warning'.]), + [], []) +XE_MERGED_ARG([cflags-warning], + AC_HELP_STRING([--with-cflags-warning=FLAGS],[Override compiler flags used to control warnings. + Normally, don't set this, as XEmacs already turns on + the maximum safe warning level.]), + [], []) +XE_MERGED_ARG([optimization], + AC_HELP_STRING([--with-optimization],[Control whether compilation is optimized. By default, optimization is on in release versions and off in beta versions, since it can interfere with proper stack backtraces.]), + [], []) +XE_MERGED_ARG([cflags-optimization], + AC_HELP_STRING([--with-cflags-optimization=FLAGS], + [Override compiler flags used to control optimization. If blank, forces no optimization; if non-blank, forces optimization. Normally, don't set this; XEmacs automatically sets the maximum safe optimization flags appropriate for the compiler being invoked. If you just want to turn optimization on or off, use `with-optimization' instead.]), + [], []) +XE_MERGED_ARG([cflags-debugging], + AC_HELP_STRING([--with-cflags-debugging=FLAGS], + [Override compiler flags used to add debugging information to the executable. Normally, debugging information is added whenever possible (i.e. unless optimization is turned on and the compiler does not permit debugging and optimization simultaneously).]), + [], []) +XE_MERGED_ARG([cpp], + AC_HELP_STRING([--with-cpp],[C preprocessor to use (e.g. /usr/ccs/lib/cpp or cc -E)]), + [CPP="$with_cpp"], []) +XE_MERGED_ARG([cppflags], + AC_HELP_STRING([--with-cppflags],[C preprocessor flags (e.g. -I/foo or -Dfoo=bar)]), + [CPPFLAGS="$with_cppflags"], []) +XE_MERGED_ARG([libs=LIBS], + AC_HELP_STRING([--with-libs],[Additional libraries (e.g. -lfoo)]), + [LIBS="$with_libs"], []) +XE_MERGED_ARG([ldflags=FLAGS], + AC_HELP_STRING([--with-ldflags],[Additional linker flags (e.g. -L/foo)]), + [LDFLAGS="$with_ldflags"], []) +XE_MERGED_ARG([site-includes], + AC_HELP_STRING([--with-site-includes=PATHS],[Prepend to include search path.]), + [], []) +XE_MERGED_ARG([site-libraries], + AC_HELP_STRING([--with-site-libraries=PATHS],[Prepend to library search path.]), + [], []) +XE_MERGED_ARG([site-prefixes], + AC_HELP_STRING([--with-site-prefixes=PATHS],[Prepend to include and library search paths, with /include and /lib added. Comes after site-includes and site-libraries, if any.]), + [], []) +XE_MERGED_ARG([site-runtime-libraries], + AC_HELP_STRING([--with-site-runtime-libraries=PATHS],[Prepend to the runtime library search path]), + [], []) +XE_MERGED_ARG([dynamic], + AC_HELP_STRING([--with-dynamic],[Link dynamically if supported by system. 'No' forces static linking.]), + [], []) +dnl +XE_HELP_SUBSECTION([Installation options]) XE_MERGED_ARG([prefix], AC_HELP_STRING([--with-prefix=no],[Don't compile the value for `prefix' into the executable.]), [true], [with_prefix=yes]) +XE_MERGED_ARG([netinstall], + AC_HELP_STRING([--with-netinstall],[Support for installation over the internet. + Only functional on the MS Windows platforms.]), + [], [with_netinstall="no"]) +XE_MERGED_ARG([statedir], + AC_HELP_STRING([--with-statedir=DIR],[]), + [], [with_statedir='${prefix}/lib']) +XE_MERGED_ARG([lispdir], + AC_HELP_STRING([--with-lispdir=DIR],[]), + [AC_DEFINE(LISPDIR_USER_DEFINED)], [with_lispdir='${datadir}/${instvardir}/lisp']) +XE_MERGED_ARG([archlibdir], + AC_HELP_STRING([--with-archlibdir=DIR],[]), + [AC_DEFINE(ARCHLIBDIR_USER_DEFINED)], [with_archlibdir='${libdir}/${instvardir}/${configuration}']) +XE_MERGED_ARG([moduledir], + AC_HELP_STRING([--with-moduledir=DIR],[]), + [AC_DEFINE(MODULEDIR_USER_DEFINED)], [with_moduledir='${libdir}/${instvardir}/${configuration}/modules']) +XE_MERGED_ARG([etcdir], + AC_HELP_STRING([--with-etcdir=DIR],[]), + [AC_DEFINE(ETCDIR_USER_DEFINED)], [with_etcdir='${datadir}/${instvardir}/etc']) +XE_MERGED_ARG([docdir], + AC_HELP_STRING([--with-docdir=DIR],[]), + [AC_DEFINE(DOCDIR_USER_DEFINED)], [with_docdir='${archlibdir}']) +dnl +XE_HELP_SUBSECTION([Run-time path-searching options]) XE_MERGED_ARG([site-lisp], AC_HELP_STRING([--with-site-lisp=no],[Allow for a site-lisp directory in the XEmacs hierarchy searched before the installation packages.]), [true], [with_site_lisp=no]) XE_MERGED_ARG([site-modules], - AC_HELP_STRING([--with-site-modules],[Disable site-modules directory in the XEmacs hierarchy, which is searched before the installation modules.]), + AC_HELP_STRING([--with-site-modules=no],[Disable site-modules directory in the XEmacs hierarchy, which is searched before the installation modules.]), [], []) +XE_MERGED_ARG([package-prefix], + AC_HELP_STRING([--with-package-prefix=DIR],[Specify packages root.]), + [AC_DEFINE(PACKAGE_PATH_USER_DEFINED)], []) +XE_MERGED_ARG([package-path], + AC_HELP_STRING([--with-package-path=PATH],[Search path for package hierarchies.]), + [AC_DEFINE(PACKAGE_PATH_USER_DEFINED)], []) +XE_MERGED_ARG([infopath], + AC_HELP_STRING([--with-infopath=PATH],[Location of info directories]), + [AC_DEFINE(INFOPATH_USER_DEFINED)], []) +dnl +XE_HELP_SUBSECTION([Window-system options]) +dnl if you change defaults, make sure to fix arg 6 of the OPTION_HELP macro. +XE_COMPLEX_ARG([xft], + [XE_COMPLEX_OPTION_HELP_STRING([--with-xft], + [Xft client-side font rendering and anti-aliasing], + [Xft], + [`emacs' (buffers), `menubars', `tabs', and `gauges'], + [X11, Xft, Xrender, freetype, and fontconfig], + [`noemacs, nomenubars, notabs, nogauges'])], + [],[], + [XE_COMPLEX_OPTION([emacs],[no]), + XE_COMPLEX_OPTION([menubars],[no]), + XE_COMPLEX_OPTION([tabs],[no]), + XE_COMPLEX_OPTION([gauges],[no])]) XE_MERGED_ARG([gtk], AC_HELP_STRING([--with-gtk],[Support GTK on the X Window System. (EXPERIMENTAL)]), [true], [with_gtk=no]) @@ -512,21 +676,37 @@ XE_MERGED_ARG([msw], AC_HELP_STRING([--with-msw],[Support MS Windows as a window system (only under Cygwin and MinGW). `--with-msw=no' may be needed on *nix systems with Wine installed.]), [], []) -XE_MERGED_ARG([gcc], - AC_HELP_STRING([--with-gcc],[Use GCC to compile XEmacs.]), - [], []) -XE_MERGED_ARG([dynamic], - AC_HELP_STRING([--with-dynamic],[Link dynamically if supported by system. 'No' forces static linking.]), - [], []) -XE_MERGED_ARG([ncurses], - AC_HELP_STRING([--with-ncurses],[Use the ncurses library for tty support.]), - [], []) -XE_MERGED_ARG([dnet], - AC_HELP_STRING([--with-dnet],[Compile with support for DECnet.]), +XE_MERGED_ARG([toolbars], + AC_HELP_STRING([--enable-toolbars],[Enable toolbar support. Default: yes.]), [], []) -XE_MERGED_ARG([socks], - AC_HELP_STRING([--with-socks],[Compile with support for SOCKS (an Internet proxy).]), +XE_MERGED_ARG([wmcommand], + AC_HELP_STRING([--with-wmcommand],[Compile without realized leader window which will + keep the WM_COMMAND property.]), [], []) +XE_KEYWORD_ARG([athena], + AC_HELP_STRING([--with-athena=TYPE],[Use TYPE Athena widgets (`xaw', `3d', `next', `95', or `xpm').]), +[],[],[xaw,3d,next,95,xpm])dnl +XE_KEYWORD_ARG([menubars], + AC_HELP_STRING([--enable-menubars=TYPE],[Use TYPE menubars ('yes', '`no', `lucid', `motif', `athena', `gtk', or `msw'). The Lucid + widgets emulate Motif (mostly) but are faster. + *WARNING* The Motif menubar is currently broken. + Lucid menubars are the default.]), + [], [],[yes,no,lucid,motif,athena,gtk,msw]) +XE_KEYWORD_ARG([scrollbars], + AC_HELP_STRING([--enable-scrollbars=TYPE],[Use TYPE scrollbars 'yes', '`no', `lucid', `motif', `athena', `gtk', or `msw'). + Lucid scrollbars are the default.]), + [], [],[yes,no,lucid,motif,athena,gtk,msw]) +XE_KEYWORD_ARG([dialogs], + AC_HELP_STRING([--enable-dialogs=TYPE],[Use TYPE dialog boxes 'yes', '`no', `lucid', `motif', `athena', `gtk', or `msw'). + There are no true Lucid dialogs; Motif dialogs will be + used if Motif can be found, else Athena is used.]), + [], [],[yes,no,lucid,motif,athena,gtk,msw]) +XE_KEYWORD_ARG([widgets], + AC_HELP_STRING([--enable-widgets=TYPE],[Use TYPE native widgets ('yes', '`no', `lucid', `motif', `athena', `gtk', or `msw'). + Other widget types are currently unsupported. + There are no true Lucid widgets; Motif widgets will be + used if Motif can be found, else Athena is used.]), + [], [],[yes,no,lucid,motif,athena,gtk,msw]) XE_MERGED_ARG([dragndrop], AC_HELP_STRING([--with-dragndrop],[Compile in the generic drag and drop API. This is automatically added if one of the drag and drop protocols is found (currently CDE, OffiX, MSWindows, @@ -545,9 +725,25 @@ different vendors, the results may be unpredictable.]), [], []) +XE_MERGED_ARG([xmu], + AC_HELP_STRING([--with-xmu],[Use Xmu utilities. Default: yes.]), + [], []) +XE_MERGED_ARG([external-widget], + AC_HELP_STRING([--enable-external-widget],[Support XEmacs server for text widgets in other applications.]), + [], []) +dnl +XE_HELP_SUBSECTION([TTY (character terminal) options]) +XE_MERGED_ARG([tty], + AC_HELP_STRING([--with-tty],[Enable TTY support. Default: yes.]), + [], []) +XE_MERGED_ARG([ncurses], + AC_HELP_STRING([--with-ncurses],[Use the ncurses library for tty support.]), + [], []) XE_MERGED_ARG([gpm], AC_HELP_STRING([--with-gpm],[Compile in GPM mouse support for ttys.]), [], []) +dnl +XE_HELP_SUBSECTION([Image options]) XE_MERGED_ARG([xpm], AC_HELP_STRING([--with-xpm],[Compile with support for XPM images. PRACTICALLY REQUIRED. Although this library is nonstandard and @@ -555,65 +751,56 @@ toolbars) depend on it, and you will run into many problems without it.]), [], []) -XE_MERGED_ARG([xface], - AC_HELP_STRING([--with-xface],[Compile with support for X-Face mail headers. - Requires the compface package.]), - [], []) -XE_MERGED_ARG([gif], - AC_HELP_STRING([--with-gif],[Compile without the (builtin) support for GIF images.]), +XE_MERGED_ARG([png], + AC_HELP_STRING([--with-png],[Compile with support for PNG images. Recommended + because the images on the About page are not viewable + without it.]), [], []) XE_MERGED_ARG([jpeg], AC_HELP_STRING([--with-jpeg],[Compile with support for JPEG images. Useful if you are using a mail, news reader, or web browser in XEmacs, so that JPEG images can be displayed.]), [], []) -XE_MERGED_ARG([png], - AC_HELP_STRING([--with-png],[Compile with support for PNG images. Recommended - because the images on the About page are not viewable - without it.]), - [], []) XE_MERGED_ARG([tiff], AC_HELP_STRING([--with-tiff],[Compile with support for TIFF images. Possibly useful, for the same reason as JPEG images.]), [], []) -XE_MERGED_ARG([zlib], - AC_HELP_STRING([--with-zlib],[Support inflate (de)compression internally.]), - [], []) -XE_MERGED_ARG([wmcommand], - AC_HELP_STRING([--with-wmcommand],[Compile without realized leader window which will - keep the WM_COMMAND property.]), - [], []) -XE_MERGED_ARG([xmu], - AC_HELP_STRING([--with-xmu],[Use Xmu utilities. Default: yes.]), - [], []) -XE_MERGED_ARG([purify], - AC_HELP_STRING([--with-purify],[Support memory debugging using Purify.]), - [], []) -XE_MERGED_ARG([quantify], - AC_HELP_STRING([--with-quantify],[Support performance debugging using Quantify.]), - [], []) -XE_MERGED_ARG([toolbars], - AC_HELP_STRING([--enable-toolbars],[Enable toolbar support. Default: yes.]), +XE_MERGED_ARG([xface], + AC_HELP_STRING([--with-xface],[Compile with support for X-Face mail headers. + Requires the compface package.]), [], []) -XE_MERGED_ARG([tty], - AC_HELP_STRING([--with-tty],[Enable TTY support. Default: yes.]), +XE_MERGED_ARG([gif], + AC_HELP_STRING([--with-gif],[Compile without the (builtin) support for GIF images.]), [], []) -XE_MERGED_ARG([xfs], - AC_HELP_STRING([--with-xfs],[Enable XFontSet support for internationalized - menubar. Incompatible with `--with-xim=motif'. - `--enable-menubars=lucid' (the default) is desirable.]), +dnl +XE_HELP_SUBSECTION([Sound options]) +XE_COMPLEX_ARG([sound], + AC_HELP_STRING([--enable-sound=TYPE],[Compile with sound support. + Valid types are `native', `nas' and `esd'. + Prefix a type with 'no' to disable. + The first type can be `none' or `all'. `none' means + `nonative,nonas,noesd'. `all' means `native,nas,esd'. + Later options override earlier ones for the same TYPE. + The default is to autodetect all sound support except + for ESD which defaults to off.]), + [], + [enable_sound_nas=""], + [XE_COMPLEX_OPTION([native],[""]), + XE_COMPLEX_OPTION([nas],[""]), + XE_COMPLEX_OPTION([esd],[no])]) +XE_MERGED_ARG([native-sound-lib], + AC_HELP_STRING([--with-native-sound-lib],[Path to sound library (for systems with name conflicts).]), [], []) +dnl +XE_HELP_SUBSECTION([Internationalization options]) XE_MERGED_ARG([mule], AC_HELP_STRING([--enable-mule],[Compile with Mule (Multi-Lingual Emacs) support, needed to support non-Latin-1 (including Asian) languages.]), [], []) -XE_MERGED_ARG([default-eol-detection], - AC_HELP_STRING([--enable-default-eol-detection],[Turns on by default auto-detection of end-of-line type - when reading a file. Applies to those platforms where - auto-detection is off by default (non-Mule Unix). Has - no effect otherwise.]), - [], []) +XE_KEYWORD_ARG([xim], + AC_HELP_STRING([--with-xim==TYPE],[Enable XIM support. TYPE is `yes', `no', `xlib', or `motif']), + [],[],[yes,no,xlib,motif])dnl XE_MERGED_ARG([canna], AC_HELP_STRING([--with-canna],[Support the Canna Japanese input method. Requires Mule.]), [], []) @@ -623,207 +810,32 @@ [], []) XE_MERGED_ARG([wnn6], AC_HELP_STRING([--with-wnn6],[Support the Wnn6 Asian language input - method (proprietary). Requires Mule.]), - [], []) -XE_MERGED_ARG([workshop], - AC_HELP_STRING([--with-workshop],[Support the Sun WorkShop (formerly Sparcworks) - development environment.]), - [], []) -XE_MERGED_ARG([sparcworks], - AC_HELP_STRING([--with-sparcworks],[Alias for --with-workshop]), - [], []) -XE_MERGED_ARG([tooltalk], - AC_HELP_STRING([--with-tooltalk],[Support the ToolTalk IPC protocol.]), - [], []) -XE_MERGED_ARG([ldap], - AC_HELP_STRING([--with-ldap],[Support the LDAP protocol.]), - [], []) -XE_MERGED_ARG([postgresql], - AC_HELP_STRING([--with-postgresql],[Support the PostgreSQL RDBMS.]), - [], []) -XE_MERGED_ARG([pop], - AC_HELP_STRING([--with-pop],[Support POP for mail retrieval.]), - [], []) -XE_MERGED_ARG([kerberos], - AC_HELP_STRING([--with-kerberos],[Support Kerberos-authenticated POP.]), - [], []) -XE_MERGED_ARG([hesiod], - AC_HELP_STRING([--with-hesiod],[Support Hesiod to get the POP server host.]), - [], []) -XE_MERGED_ARG([infodock], - AC_HELP_STRING([--with-infodock],[Support the Infodock version of XEmacs. Infodock is a SourceForge project).]), - [], []) -XE_MERGED_ARG([native-sound-lib], - AC_HELP_STRING([--with-native-sound-lib],[Path to sound library (for systems with name conflicts).]), - [], []) -XE_MERGED_ARG([netinstall], - AC_HELP_STRING([--with-netinstall],[Support for installation over the internet. - Only functional on the MS Windows platforms.]), - [], [with_netinstall="no"]) -XE_MERGED_ARG([optimization], - AC_HELP_STRING([--with-optimization],[Control whether compilation is optimized. By default, optimization is on in release versions and off in beta versions, since it can interfere with proper stack backtraces.]), - [], []) -XE_MERGED_ARG([ipv6-cname], - AC_HELP_STRING([--with-ipv6-cname],[Try IPv6 information first when canonicalizing host names. This option has no effect unless system supports getaddrinfo(3) and getnameinfo(3).]), - [], [with_ipv6_cname="no"]) -XE_MERGED_ARG([site-includes], - AC_HELP_STRING([--with-site-includes],[Prepend to include search path.]), - [], []) -XE_MERGED_ARG([site-libraries], - AC_HELP_STRING([--with-site-libraries],[Prepend to library search path.]), - [], []) -XE_MERGED_ARG([site-prefixes], - AC_HELP_STRING([--with-site-prefixes],[Prepend to include and library search paths, with /include and /lib added. Comes after site-includes and site-libraries, if any.]), - [], []) -XE_MERGED_ARG([statedir], - AC_HELP_STRING([--with-statedir],[]), - [], [with_statedir='${prefix}/lib']) -XE_MERGED_ARG([lispdir], - AC_HELP_STRING([--with-lispdir],[]), - [AC_DEFINE(LISPDIR_USER_DEFINED)], [with_lispdir='${datadir}/${instvardir}/lisp']) -XE_MERGED_ARG([archlibdir], - AC_HELP_STRING([--with-archlibdir],[]), - [AC_DEFINE(ARCHLIBDIR_USER_DEFINED)], [with_archlibdir='${libdir}/${instvardir}/${configuration}']) -XE_MERGED_ARG([moduledir], - AC_HELP_STRING([--with-moduledir],[]), - [AC_DEFINE(MODULEDIR_USER_DEFINED)], [with_moduledir='${libdir}/${instvardir}/${configuration}/modules']) -XE_MERGED_ARG([etcdir], - AC_HELP_STRING([--with-etcdir],[]), - [AC_DEFINE(ETCDIR_USER_DEFINED)], [with_etcdir='${datadir}/${instvardir}/etc']) -XE_MERGED_ARG([infopath], - AC_HELP_STRING([--with-infopath],[]), - [AC_DEFINE(INFOPATH_USER_DEFINED)], []) -XE_MERGED_ARG([docdir], - AC_HELP_STRING([--with-docdir],[]), - [AC_DEFINE(DOCDIR_USER_DEFINED)], [with_docdir='${archlibdir}']) -XE_MERGED_ARG([site-runtime-libraries], - AC_HELP_STRING([--with-site-runtime-libraries],[]), - [], []) -XE_MERGED_ARG([package-prefix], - AC_HELP_STRING([--with-package-prefix],[Specify packages root.]), - [AC_DEFINE(PACKAGE_PATH_USER_DEFINED)], []) -XE_MERGED_ARG([package-path], - AC_HELP_STRING([--with-package-path],[Search path for package hierarchies.]), - [AC_DEFINE(PACKAGE_PATH_USER_DEFINED)], []) -XE_MERGED_ARG([external-widget], - AC_HELP_STRING([--enable-external-widget],[Support XEmacs server for text widgets in other applications.]), - [], []) -XE_MERGED_ARG([kkcc], - AC_HELP_STRING([--enable-kkcc],[Enable new GC algorithms.]), - [], [enable_kkcc=yes]) -XE_MERGED_ARG([mc-alloc], - AC_HELP_STRING([--enable-mc-alloc],[Enable new allocator.]), - [], [enable_mc_alloc=yes]) -XE_MERGED_ARG([union-type], - AC_HELP_STRING([--enable-union-type],[Use union definition of Lisp_Object type. Known to trigger bugs in some compilers.]), - [], []) -XE_MERGED_ARG([pdump], - AC_HELP_STRING([--enable-pdump],[Enable portable LISP preloader.]), - [], []) -XE_MERGED_ARG([dump-in-exec], - AC_HELP_STRING([--enable-dump-in-exec],[Enable dumping into executable (enabled by default - for `pdump', not enabled by default in combination - with `mc-alloc').]), - [], []) -XE_MERGED_ARG([debug], - AC_HELP_STRING([--enable-debug],[Enable additional debugging information. No time cost.]), - [], []) -XE_MERGED_ARG([assertions], - AC_HELP_STRING([--enable-assertions],[]), - [], []) -XE_MERGED_ARG([memory-usage-stats], - AC_HELP_STRING([--enable-memory-usage-stats],[Enable LISP memory usage API.]), - [], []) -XE_MERGED_ARG([clash-detection], - AC_HELP_STRING([--enable-clash-detection],[Disable use of lock files to detect multiple edits - of the same file.]), - [], []) -XE_MERGED_ARG([modules], - AC_HELP_STRING([--enable-modules],[Compile in experimental support for dynamically - loaded libraries (Dynamic Shared Objects).]), - [], []) -XE_MERGED_ARG([quick-build], - AC_HELP_STRING([--enable-quick-build],[Speed up the build cycle by leaving out steps where - XEmacs will still work (more or less) without them. - Potentially dangerous if you don't know what you're - doing. This (1) doesn't garbage-collect after loading - each file during dumping, (2) doesn't - automatically rebuild the DOC file (remove it by hand - to get it rebuilt), (3) Removes config.h, lisp.h and - associated files from the dependency lists, so changes - to these files don't automatically cause all .c files - to be rebuilt.]), - [], []) - -XE_MERGED_ARG([compiler], - AC_HELP_STRING([--with-compiler],[C compiler to use]), - [], []) - -XE_MERGED_ARG([xemacs-compiler], - AC_HELP_STRING([--with-xemacs-compiler], - [compiler to use to compile just the xemacs executable and C modules. - If you want to compile XEmacs as C++, use e.g. - `--with-xemacs-compiler=g++'. This turns on a lot of - additional error-checking.]), - [], []) - -XE_MERGED_ARG([cflags], - AC_HELP_STRING([--with-cflags], - [Compiler flags. These flags will be placed after any flags inserted for warnings, debugging or optimization; setting this does not disable the insertion of those flags. Use configure settings such as `--with-optimization=no' or `enable-debug=no' to turn them off, or override them with `--with-cflags-optimization', `--with-cflags-debugging', or `with-cflags-warning'.]), + method (proprietary). Requires Mule.]), [], []) - -XE_MERGED_ARG([cflags-warning], - AC_HELP_STRING([--with-cflags-warning],[Override compiler flags used to control warnings. - Normally, don't set this, as XEmacs already turns on - the maximum safe warning level.]), +XE_MERGED_ARG([xfs], + AC_HELP_STRING([--with-xfs],[Enable XFontSet support for internationalized + menubar. Incompatible with `--with-xim=motif' and `--with-xft'. + `--enable-menubars=lucid' (the default) is desirable.]), [], []) - -XE_MERGED_ARG([cflags-optimization], - AC_HELP_STRING([--with-cflags-optimization=FLAGS], - [Override compiler flags used to control optimization. If blank, forces no optimization; if non-blank, forces optimization. Normally, don't set this; XEmacs automatically sets the maximum safe optimization flags appropriate for the compiler being invoked. If you just want to turn optimization on or off, use `with-optimization' instead.]), +dnl +XE_HELP_SUBSECTION([File-related options]) +XE_MERGED_ARG([default-eol-detection], + AC_HELP_STRING([--enable-default-eol-detection],[Turns on by default auto-detection of end-of-line type + when reading a file. Applies to those platforms where + auto-detection is off by default (non-Mule Unix). Has + no effect otherwise.]), [], []) - -XE_MERGED_ARG([cflags-debugging], - AC_HELP_STRING([--with-cflags-debugging=FLAGS], - [Override compiler flags used to add debugging information to the executable. Normally, debugging information is added whenever possible (i.e. unless optimization is turned on and the compiler does not permit debugging and optimization simultaneously).]), +XE_MERGED_ARG([clash-detection], + AC_HELP_STRING([--enable-clash-detection],[Disable use of lock files to detect multiple edits + of the same file.]), [], []) - -XE_MERGED_ARG([cpp], - AC_HELP_STRING([--with-cpp],[C preprocessor to use (e.g. /usr/ccs/lib/cpp or cc -E)]), - [CPP="$with_cpp"], []) - -XE_MERGED_ARG([cppflags], - AC_HELP_STRING([--with-cppflags],[C preprocessor flags (e.g. -I/foo or -Dfoo=bar)]), - [CPPFLAGS="$with_cppflags"], []) - -XE_MERGED_ARG([libs], - AC_HELP_STRING([--with-libs],[Additional libraries (e.g. -lfoo)]), - [LIBS="$with_libs"], []) - -XE_MERGED_ARG([ldflags], - AC_HELP_STRING([--with-ldflags],[Additional linker flags (e.g. -L/foo)]), - [LDFLAGS="$with_ldflags"], []) - -XE_MERGED_ARG([rel-alloc], - AC_HELP_STRING([--with-rel-alloc],[Enable the relocating allocator.]), - [], [with_rel_alloc='default']) - -XE_MERGED_ARG([dlmalloc], - AC_HELP_STRING([--with-dlmalloc],[Use Doug Lea's malloc implementation.]), - [], [with_dlmalloc='default']) - -XE_MERGED_ARG([debug-malloc], - AC_HELP_STRING([--with-debug-malloc],[Use a debugging malloc.]), +XE_MERGED_ARG([zlib], + AC_HELP_STRING([--with-zlib],[Support inflate (de)compression internally.]), [], []) - -XE_MERGED_ARG([system-malloc], - AC_HELP_STRING([--with-system-malloc],[Use the system malloc, not the one distributed with XEmacs.]), - [], [with_system_malloc='default']) - -#Enable code. - +dnl +XE_HELP_SUBSECTION([Database options]) XE_COMPLEX_ARG([database], - AC_HELP_STRING([--enable-database],[Compile with database support. Valid types are + AC_HELP_STRING([--enable-database=TYPE],[Compile with database support. Valid types are `no' or a comma-separated list of one or more of `berkdb' and either `dbm' or `gnudbm'.]), [ @@ -836,45 +848,114 @@ [XE_COMPLEX_OPTION([berkdb],[""]), XE_COMPLEX_OPTION([dbm],[""]), XE_COMPLEX_OPTION([gdbm],[""])]) - -XE_COMPLEX_ARG([sound], - AC_HELP_STRING([--enable-sound],[Compile with sound support. - Valid types are `native', `nas' and `esd'. - Prefix a type with 'no' to disable. - The first type can be `none' or `all'. `none' means - `nonative,nonas,noesd'. `all' means `native,nas,esd'. - Later options override earlier ones for the same TYPE. - The default is to autodetect all sound support except - for ESD which defaults to off.]), - [], - [enable_sound_nas=""], - [XE_COMPLEX_OPTION([native],[""]), - XE_COMPLEX_OPTION([nas],[""]), - XE_COMPLEX_OPTION([esd],[no])]) - -XE_KEYWORD_ARG([athena], - AC_HELP_STRING([--with-athena],[Use TYPE Athena widgets (xaw, 3d, next, 95, or xpm).]), -[],[],[xaw,3d,next,95,xpm])dnl - -XE_KEYWORD_ARG([xim],[],[],[],[yes,no,xlib,motif])dnl - +XE_MERGED_ARG([ldap], + AC_HELP_STRING([--with-ldap],[Support the LDAP protocol.]), + [], []) +XE_MERGED_ARG([postgresql], + AC_HELP_STRING([--with-postgresql],[Support the PostgreSQL RDBMS.]), + [], []) +dnl +XE_HELP_SUBSECTION([Mail options]) XE_KEYWORD_ARG([mail-locking], - AC_HELP_STRING([--with-mail-locking],[Specify the locking to be used by movemail to prevent + AC_HELP_STRING([--with-mail-locking=TYPE],[Specify the locking to be used by movemail to prevent concurrent updates of mail spool files. Valid types - are `lockf', `flock', `dot', `locking' or `mmdf'.]), + are `lockf', `flock', `file', `locking', `mmdf' or `pop'.]), [],[],[lockf,flock,file,locking,mmdf,pop])dnl - - +XE_MERGED_ARG([pop], + AC_HELP_STRING([--with-pop],[Support POP for mail retrieval.]), + [], []) +XE_MERGED_ARG([kerberos], + AC_HELP_STRING([--with-kerberos],[Support Kerberos-authenticated POP.]), + [], []) +XE_MERGED_ARG([hesiod], + AC_HELP_STRING([--with-hesiod],[Support Hesiod to get the POP server host.]), + [], []) +dnl +XE_HELP_SUBSECTION([Networking options]) +XE_MERGED_ARG([tooltalk], + AC_HELP_STRING([--with-tooltalk],[Support the ToolTalk IPC protocol.]), + [], []) +XE_MERGED_ARG([socks], + AC_HELP_STRING([--with-socks],[Compile with support for SOCKS (an Internet proxy).]), + [], []) +XE_MERGED_ARG([dnet], + AC_HELP_STRING([--with-dnet],[Compile with support for DECnet.]), + [], []) +XE_MERGED_ARG([ipv6-cname], + AC_HELP_STRING([--with-ipv6-cname],[Try IPv6 information first when canonicalizing host names. This option has no effect unless system supports getaddrinfo(3) and getnameinfo(3).]), + [], [with_ipv6_cname="no"]) +dnl +XE_HELP_SUBSECTION([Memory allocation options]) +XE_MERGED_ARG([rel-alloc], + AC_HELP_STRING([--with-rel-alloc],[Enable the relocating allocator.]), + [], [with_rel_alloc='default']) +XE_MERGED_ARG([dlmalloc], + AC_HELP_STRING([--with-dlmalloc],[Use Doug Lea's malloc implementation.]), + [], [with_dlmalloc='default']) +XE_MERGED_ARG([system-malloc], + AC_HELP_STRING([--with-system-malloc],[Use the system malloc, not the one distributed with XEmacs.]), + [], [with_system_malloc='default']) +XE_MERGED_ARG([debug-malloc], + AC_HELP_STRING([--with-debug-malloc],[Use a debugging malloc.]), + [], []) +XE_MERGED_ARG([pdump], + AC_HELP_STRING([--enable-pdump],[Enable portable LISP preloader.]), + [], []) +XE_MERGED_ARG([dump-in-exec], + AC_HELP_STRING([--enable-dump-in-exec],[Enable dumping into executable (enabled by default + for `pdump', not enabled by default in combination + with `mc-alloc').]), + [], []) +XE_MERGED_ARG([kkcc], + AC_HELP_STRING([--enable-kkcc],[Enable experimental new GC algorithms.]), + [], [enable_kkcc=yes]) +XE_MERGED_ARG([mc-alloc], + AC_HELP_STRING([--enable-mc-alloc],[Enable experimental new allocator.]), + [], [enable_mc_alloc=yes]) +XE_MERGED_ARG([newgc], + AC_HELP_STRING([--enable-newgc],[Enable new incremental garbage collector.]), + [], []) +XE_COMPLEX_ARG([vdb], + AC_HELP_STRING([--enable-vdb=TYPE],[Override auto-detection of + virtual-dirty-bit write-barrier implementation for the + new garbage collector. TYPE must be one of "auto" (for + auto-detection), "posix", "win32", "mach", or "fake" + (uses the new garbage collector but disables + incremental collections). The default is to + use auto-detection.]), + [], [enable_vdb="auto"],[auto,posix,win32,mach,fake,no]) +dnl +XE_HELP_SUBSECTION([Emacs Lisp options]) +XE_MERGED_ARG([modules], + AC_HELP_STRING([--enable-modules],[Compile in experimental support for dynamically + loaded libraries (Dynamic Shared Objects).]), + [], []) XE_KEYWORD_ARG([bignum], AC_HELP_STRING([--enable-bignum=TYPE],[Compile in support for bignums, ratios, or bigfloats using library support. TYPE must be one of "gmp" (for GNU MP), "mp" (for BSD MP), or "no" (disabled).]), [], [enable_bignum="no"],[no,gmp,mp]) - +dnl +XE_HELP_SUBSECTION([Platform Specific options]) +XE_MERGED_ARG([workshop], + AC_HELP_STRING([--with-workshop],[Support the Sun WorkShop (formerly Sparcworks) + development environment.]), + [], []) +XE_MERGED_ARG([sparcworks], + AC_HELP_STRING([--with-sparcworks],[Alias for --with-workshop]), + [], []) +XE_MERGED_ARG([infodock], + AC_HELP_STRING([--with-infodock],[Support the Infodock version of XEmacs. Infodock is a SourceForge project).]), + [], []) +dnl +XE_HELP_SUBSECTION([Debugging options]) +XE_MERGED_ARG([debug], + AC_HELP_STRING([--enable-debug],[Enable additional debugging information. No time cost.]), + [], []) XE_COMPLEX_ARG([error-checking], - AC_HELP_STRING([--enable-error-checking],[Compile with internal error-checking added. - Causes noticeable loss of speed. Valid types - are extents, bufpos, malloc, gc, types, text, byte_code, glyphs, display, structures.]), + AC_HELP_STRING([--enable-error-checking=TESTS],[Compile with internal error-checking added. + Causes noticeable loss of speed. Valid TESTS + are `extents', `bufpos', `malloc', `gc', `types', `text', `byte_code', `glyphs', `display', `structures'.]), [], [], [XE_COMPLEX_OPTION([extents],[""]), XE_COMPLEX_OPTION([types],[""]), @@ -885,32 +966,33 @@ XE_COMPLEX_OPTION([glyphs],[""]), XE_COMPLEX_OPTION([display],[""]), XE_COMPLEX_OPTION([structures],[""])]) - -XE_KEYWORD_ARG([menubars], - AC_HELP_STRING([--enable-menubars=TYPE],[Use TYPE menubars (lucid, motif, or no). The Lucid - widgets emulate Motif (mostly) but are faster. - *WARNING* The Motif menubar is currently broken. - Lucid menubars are the default.]), - [], [],[yes,no,lucid,motif,athena,gtk,msw]) - -XE_KEYWORD_ARG([scrollbars], - AC_HELP_STRING([--enable-scrollbars=TYPE],[Use TYPE scrollbars (lucid, motif, athena, or no). - Lucid scrollbars are the default.]), - [], [],[yes,no,lucid,motif,athena,gtk,msw]) - -XE_KEYWORD_ARG([dialogs], - AC_HELP_STRING([--enable-dialogs=TYPE],[Use TYPE dialog boxes (lucid, motif, athena, or no). - There are no true Lucid dialogs; Motif dialogs will be - used if Motif can be found, else Athena is used.]), - [], [],[yes,no,lucid,motif,athena,gtk,msw]) - -XE_KEYWORD_ARG([widgets], - AC_HELP_STRING([--enable-widgets],[Use TYPE native widgets (lucid, motif, athena, or no). - Other widget types are currently unsupported. - There are no true Lucid widgets; Motif widgets will be - used if Motif can be found, else Athena is used.]), - [], [],[yes,no,lucid,motif,athena,gtk,msw]) - +XE_MERGED_ARG([assertions], + AC_HELP_STRING([--enable-assertions],[Compile in runtime assertions.]), + [], []) +XE_MERGED_ARG([memory-usage-stats], + AC_HELP_STRING([--enable-memory-usage-stats],[Enable LISP memory usage API.]), + [], []) +XE_MERGED_ARG([quick-build], + AC_HELP_STRING([--enable-quick-build],[Speed up the build cycle by leaving out steps where + XEmacs will still work (more or less) without them. + Potentially dangerous if you don't know what you're + doing. This (1) doesn't garbage-collect after loading + each file during dumping, (2) doesn't + automatically rebuild the DOC file (remove it by hand + to get it rebuilt), (3) Removes config.h, lisp.h and + associated files from the dependency lists, so changes + to these files don't automatically cause all .c files + to be rebuilt.]), + [], []) +XE_MERGED_ARG([union-type], + AC_HELP_STRING([--enable-union-type],[Use union definition of Lisp_Object type. Known to trigger bugs in some compilers.]), + [], []) +XE_MERGED_ARG([quantify], + AC_HELP_STRING([--with-quantify],[Support performance debugging using Quantify.]), + [], []) +XE_MERGED_ARG([purify], + AC_HELP_STRING([--with-purify],[Support memory debugging using Purify.]), + [], []) dnl ------------------------------------------------------------------------- dnl Final command line argument checks. @@ -922,6 +1004,20 @@ dnl CDE requires tooltalk XE_CHECK_FEATURE_DEPENDENCY(cde, tooltalk) +dnl Xft sanity checking +dnl #### Maybe we should XE_DIE here instead? Or fix the UI so that +dnl emacs is always implicit? (I worry that --without-xft would be weird.) +if test \( "$with_xft_menubars" = "yes" -o "$with_xft_tabs" = "yes" \ + -o "$with_xft_gauges" = "yes" \) -a "$with_xft_emacs" = "no"; then + AC_MSG_WARN([Forcing --with-xft=emacs because Xft is enabled]) + with_xft_emacs=yes +fi + +dnl XFS and Xft in menubars conflict +if test "$with_xfs" = "yes" -a "$with_xft_menubars" = "yes"; then + USAGE_ERROR("XFS and Xft in the menubars are incompatible!") +fi + dnl ------------------------------------------------------------------------- dnl Local paths test "x$prefix" = xNONE && prefix=$ac_default_prefix @@ -1650,6 +1746,27 @@ esac fi +if test "$enable_newgc" = "yes"; then + if test "$enable_vdb" = "auto"; then + case "$opsys" in + darwin ) AC_DEFINE(VDB_MACH) have_vdb_mach=yes ;; + cygwin* ) AC_DEFINE(VDB_WIN32) have_vdb_win32=yes ;; + linux* ) check_vdb_posix=yes ;; + freebsd ) check_vdb_posix=yes ;; +dnl if not sure, try posix first, maybe we are lucky + * ) check_vdb_posix=yes ;; + esac + else + case "$enable_vdb" in + mach ) AC_DEFINE(VDB_MACH) have_vdb_mach=yes ;; + win32 ) AC_DEFINE(VDB_WIN32) have_vdb_win32=yes ;; + posix ) check_vdb_posix=yes ;; + fake ) have_vdb_fake=yes ;; + no ) have_vdb_fake=yes ;; + esac + fi +fi + if test -z "$with_dynamic"; then case "$opsys" in hpux* | sunos4* ) with_dynamic=no ;; @@ -2011,6 +2128,12 @@ fi fi +dnl New incremental garbage collector +if test "$enable_newgc" = "yes"; then + enable_mc_alloc=yes + enable_kkcc=yes +fi + dnl For debugging... test "$verbose" = "yes" && \ PRINT_VAR(libs_machine libs_system libs_termcap libs_standard @@ -2762,6 +2885,7 @@ AC_TYPE_UID_T AC_TYPE_MODE_T AC_TYPE_OFF_T +dnl #### deprecated 2.13-ism AC_CHECK_TYPE(ssize_t, int) dnl not AC_CHECK_TYPE; lisp.h does hairy conditional typedef @@ -3287,6 +3411,50 @@ fi fi + dnl include xft/AA support? + dnl #### need to check for includes here (especially, freetype.h for v.2) + + if test "$with_xft_emacs" = "yes"; then + AC_CHECKING([for Xrender, fontconfig, and Xft]) + xft_includes_found=no + AC_CHECK_HEADERS([freetype/config/ftheader.h], + [xft_includes_found=yes], + [ + dnl #### How about /sw/include, and /opt/local/include? + dnl these directories need to be the parent of the freetype directory + for freetype_include_top in "/usr/X11R6/include/freetype2" \ + "/usr/include/freetype2" + do + if test -d $freetype_include_top; then + AC_CHECKING([in ${freetype_include_top}/freetype2]) + dnl disable autoconf's fucking cache; why these fuckheads think it + dnl is better to be broken than to be slow, I don't know! + dnl #### there's gotta be a better-looking way to do this!! + unset "$as_ac_Header" + save_c_switch_site="$c_switch_site" + c_switch_site="$c_switch_site -I${freetype_include_top}" + AC_CHECK_HEADERS([freetype/config/ftheader.h], + [xft_includes_found=yes], + [c_switch_site=$save_c_switch_site]) + fi + done + if test "$xft_includes_found" != "yes"; then + XE_DIE(["Unable to find headers for --with-xft"]) + else + AC_CHECK_LIB(Xrender, XRenderQueryExtension, XE_PREPEND(-lXrender, libs_x), + [XE_DIE(["Unable to find libXrender for --with-xft"])]) + AC_CHECK_LIB(fontconfig, FcPatternCreate, XE_PREPEND(-lfontconfig, libs_x), + [XE_DIE(["Unable to find libfontconfig for --with-xft"])]) + AC_CHECK_LIB(Xft, XftFontOpen, XE_PREPEND(-lXft, libs_x), + [XE_DIE(["Unable to find libXft for --with-xft"])]) + AC_DEFINE(USE_XFT) + dnl Due to interactions with other libraries, must postpone AC_DEFINE + dnl of USE_XFT_MENUBARS, USE_XFT_TABS, and USE_XFT_GAUGE. + unset xft_includes_found + fi +]) + fi + fi dnl $with_x11 = yes if test "$with_msw" != "no"; then @@ -3707,16 +3875,31 @@ libpq_fe_h_file=${header_dir}libpq-fe.h; break) done - test -n "$libpq_fe_h_file" && { AC_CHECK_LIB(pq,PQconnectdb,have_libpq=yes) } + pq_libs= + extra_libs= + if test -n "$libpq_fe_h_file"; then + dnl #### Would it be nicer to do this with a loop? + dnl It seems unlikely that checking for SSL/crypto support can hurt, + dnl even if it's found. + AC_CHECK_LIB(pq, PQconnectdb,[pq_libs="-lpq"],[ + unset ac_cv_lib_pq_PQconnectdb; + AC_CHECK_LIB(pq, PQconnectdb,[pq_libs="-lpq -lcrypto -lssl"],, + [-lcrypto -lssl])]) + if test -z "$pq_libs"; then + have_libpq="no" + else + have_libpq="yes" + fi + fi if test -n "$libpq_fe_h_file" -a "$have_libpq" = "yes"; then with_postgresql=yes AC_DEFINE(HAVE_POSTGRESQL) AC_CHECK_LIB(pq,PQconnectStart, [ with_postgresqlv7=yes; - AC_DEFINE(HAVE_POSTGRESQLV7)]) + AC_DEFINE(HAVE_POSTGRESQLV7)], [:], $extra_libs) AC_DEFINE_UNQUOTED(LIBPQ_FE_H_FILE, "$libpq_fe_h_file") - XE_PREPEND(-lpq, postgresql_libs) + XE_PREPEND([$pq_libs], postgresql_libs) XE_APPEND(modules/postgresql, MAKE_SUBDIR) need_modules_common=yes if test "$enable_modules" = "yes"; then @@ -4096,6 +4279,14 @@ case "$enable_menubars" in "" | "yes" | "athena" ) enable_menubars="lucid" ;; esac +dnl this is not in xft reloaded #3 +if test "$with_xft_menubars" != "no" ; then + if test "$with_xft_emacs" = "yes" -a "$with_menubars" != "no" ; then + with_xft_menubars="yes" + else + with_xft_menubars="no" + fi +fi case "$enable_dialogs" in "" | "yes" | "lucid" ) if test "$lucid_prefers_motif" = "yes"; then if test "$have_motif" = "yes"; then enable_dialogs="motif" @@ -4129,6 +4320,22 @@ fi fi ;; esac +dnl this is not in xft reloaded #3 +if test "$with_xft_tabs" != "no" ; then + if test "$with_xft_emacs" = "yes" -a "$enable_widgets" != "no" ; then + with_xft_tabs="yes" + else + with_xft_tabs="no" + fi +fi +dnl this is not in xft reloaded #3 +if test "$with_xft_gauge" != "no" ; then + if test "$with_xft_emacs" = "yes" -a "$enable_widgets" != "no" ; then + with_xft_gauge="yes" + else + with_xft_gauge="no" + fi +fi all_widgets="$enable_menubars $enable_scrollbars $enable_dialogs $enable_toolbars $enable_widgets" @@ -4217,6 +4424,12 @@ test "$enable_dialogs" = "motif" && AC_DEFINE(LWLIB_DIALOGS_MOTIF) test "$enable_widgets" = "motif" && AC_DEFINE(LWLIB_WIDGETS_MOTIF) +dnl this is not in xft reloaded #3 +test "$with_xft_menubars" = "yes" && AC_DEFINE(USE_XFT_MENUBARS) +dnl these are new in sjt-xft +test "$with_xft_tabs" = "yes" && AC_DEFINE(USE_XFT_TABS) +test "$with_xft_gauge" = "yes" && AC_DEFINE(USE_XFT_GAUGE) + dnl ---------------------- dnl Mule-dependent options dnl ---------------------- @@ -4382,6 +4595,50 @@ esac fi +dnl check for vdb-related stuff +if test "$check_vdb_posix" = "yes" ; then + dnl no mprotect, no vdb + AC_CHECK_FUNC(mprotect,AC_DEFINE(HAVE_MPROTECT) have_vdb_mprotect=yes,) + + dnl sigaction needs either struct siginfo or siginfo_t + AC_CHECK_FUNC(sigaction, AC_DEFINE(HAVE_SIGACTION) have_vdb_sigaction=yes, + have_vdb_sigaction=no) + AC_CHECK_MEMBER(struct siginfo.si_addr, + AC_DEFINE(HAVE_STRUCT_SIGINFO_SI_ADDR) have_si_addr=yes,, + [#include ]) + AC_CHECK_MEMBER(siginfo_t.si_addr, + AC_DEFINE(HAVE_SIGINFO_T_SI_ADDR) have_si_addr=yes,, + [#include ]) + if test "$have_si_addr" != "yes" ; then + have_vdb_sigaction=no + fi + + dnl signal needs struct sigcontext + AC_CHECK_FUNC(signal, AC_DEFINE(HAVE_SIGNAL) have_vdb_signal=yes,) + AC_CHECK_MEMBER(struct sigcontext.cr2, + AC_DEFINE(HAVE_STRUCT_SIGCONTEXT_CR2) have_cr2=yes,, + [#include ]) + + if test "$have_cr2" != "yes" ; then + have_vdb_signal=no + fi + + if test "$have_vdb_mprotect" != "yes" ; then + have_vdb_sigaction=no + have_vdb_signal=no + fi + + if test "$have_vdb_sigaction" != "yes" -a "$have_vdb_signal" != "yes" ; then + have_vdb_posix=no + have_vdb_fake=yes + XE_DIE("No working write-barrier implementation found for this system. + Please report this and provide information about your system.") + else + have_vdb_posix=yes + have_vdb_fake=no + fi +fi + dnl ---------------------------------------------------------------- dnl Check for Unixoid pty/process support. dnl ---------------------------------------------------------------- @@ -4805,13 +5062,14 @@ esac fi - dnl Win32 Native uses native sound + dnl Win32 uses native sound if test -z "$sound_found"; then - if test "$with_msw" = "yes"; then + case "$opsys" in cygwin* | mingw* ) sound_found=yes with_native_sound_lib= XE_ADD_OBJS(ntplay.o) - fi + ;; + esac fi dnl Check for Linux/BSD native sound (also on recent Cygwins) @@ -5268,15 +5526,15 @@ dnl ---------------------------------------------- dnl Create a .gdbinit useful for debugging XEmacs -if test -f "$srcdir/src/.gdbinit" -a ! -f "src/.gdbinit"; then - test "$verbose" = "yes" && echo "creating src/.gdbinit" - echo "source $srcdir/src/.gdbinit" > "src/.gdbinit" +if test -f "$srcdir/src/.gdbinit.in" -a ! -f "src/.gdbinit.in"; then + test "$verbose" = "yes" && echo "creating src/.gdbinit.in" + echo "source $srcdir/src/.gdbinit.in" > "src/.gdbinit.in" fi dnl Create a .dbxrc useful for debugging XEmacs -if test -f "$srcdir/src/.dbxrc" -a ! -f "src/.dbxrc"; then - test "$verbose" = "yes" && echo "creating src/.dbxrc" - echo ". $srcdir/src/.dbxrc" > "src/.dbxrc" +if test -f "$srcdir/src/.dbxrc.in" -a ! -f "src/.dbxrc.in"; then + test "$verbose" = "yes" && echo "creating src/.dbxrc.in" + echo ". $srcdir/src/.dbxrc.in" > "src/.dbxrc.in" fi dnl Create a useful TAGS file @@ -5534,6 +5792,9 @@ test "$enable_external_widget" = "yes" && AC_DEFINE(EXTERNAL_WIDGET) test "$enable_kkcc" = "yes" && AC_DEFINE(USE_KKCC) test "$enable_mc_alloc" = "yes" && AC_DEFINE(MC_ALLOC) +test "$enable_newgc" = "yes" && AC_DEFINE(NEW_GC) +test "$have_vdb_posix" = "yes" && AC_DEFINE(VDB_POSIX) +test "$have_vdb_fake" = "yes" && AC_DEFINE(VDB_FAKE) test "$enable_quick_build" = "yes" && AC_DEFINE(QUICK_BUILD) test "$with_purify" = "yes" && AC_DEFINE(PURIFY) test "$with_quantify" = "yes" && AC_DEFINE(QUANTIFY) @@ -5646,6 +5907,9 @@ if test "$with_wmcommand" != no; then echo " - Handling WM_COMMAND properly." fi + if test "$with_xft" = "yes"; then + echo " - Compiling in support for Xft antialiased fonts (EXPERIMENTAL)." + fi fi if test "$need_motif" = "yes" ; then echo " Compiling in support for Motif." @@ -5671,6 +5935,11 @@ echo " Re-run configure with --enable-menubars='lucid'." ;; msw ) echo " Using MS-Windows menubars." ;; esac +dnl this is not in xft reloaded #3 +if test "$with_xft_menubars" = "yes"; then + echo " - Using Xft to render antialiased fonts in menubars." + echo " WARNING: This feature will be replaced with a face." +fi case "$enable_scrollbars" in gtk ) echo " Using GTK scrollbars." ;; lucid ) echo " Using Lucid scrollbars." ;; @@ -5696,6 +5965,17 @@ athena ) echo " Using Athena native widgets." ;; msw ) echo " Using MS-Windows native widgets." ;; esac +dnl this is not in xft reloaded #3 +if test "$with_xft_tabs" = "yes"; then + echo " - Using Xft to render antialiased fonts in tab controls." + echo " WARNING: This feature will be replaced with a face." +fi +dnl this is not in xft reloaded #3 +if test "$with_xft_gauge" = "yes"; then + echo " - Using Xft to render antialiased fonts in progress bars." + echo " WARNING: This feature will be replaced with a face." + echo " WARNING: This feature not yet implemented; setting ignored." +fi if test "$with_dragndrop" = yes; then echo " Compiling in support for Drag'n'Drop (EXPERIMENTAL)." echo " - Drag'n'Drop prototype: $dragndrop_proto." @@ -5814,6 +6094,23 @@ echo " WARNING: turn it off." echo " WARNING: ---------------------------------------------------------" fi +test "$enable_newgc" = yes && echo " Using the new incremental garbage collector." +if test "$have_vdb_posix" = yes ; then + if test "$have_vdb_sigaction" = yes ; then + echo " Using POSIX sigaction() to install fault handler." + else + echo " Using POSIX signal() to install vdb fault handler." + fi +fi +if test "$have_vdb_win32" = yes ; then + echo " Using special WIN32 vdb fault handler." +fi +if test "$have_vdb_mach" = yes ; then + echo " Using mach exception mechanism as vdb fault handler." +fi +if test "$have_vdb_fake" = yes && test "$enable_vdb" == fake; then + echo " Virtual dirty bit write barrier manually disabled." +fi test "$enable_pdump" = yes && echo " Using the new portable dumper." test "$enable_dump_in_exec" = yes && echo " Dumping into executable." test "$enable_debug" = yes && echo " Compiling in support for extra debugging code." @@ -5931,6 +6228,14 @@ MAKE_JUNK_C(Makefile.in) CPP_MAKEFILE(,Makefile) CPP_MAKEFILE(-DUSE_GNU_MAKE,GNUmakefile) + if test -r ".gdbinit.in"; then + MAKE_JUNK_C(.gdbinit.in) + CPP_MAKEFILE(,.gdbinit) + fi + if test -r ".dbxrc.in"; then + MAKE_JUNK_C(.dbxrc.in) + CPP_MAKEFILE(,.dbxrc) + fi if test -r "xemacs.def.in"; then dnl #### We should be using MAKE_JUNK_C instead of the next two lines. dnl #### But the comments in xemacs.def.in need to be converted from C-style diff -urN 21.5.23/dynodump/CVS/Entries 21.5.24/dynodump/CVS/Entries --- 21.5.23/dynodump/CVS/Entries Mon Dec 19 04:19:33 2005 +++ 21.5.24/dynodump/CVS/Entries Mon Dec 19 04:21:54 2005 @@ -1,6 +1,6 @@ -/Makefile.in.in/1.12/Thu Apr 12 18:20:43 2001//Tr21-5-23 -/README/1.3/Thu May 29 04:22:29 1997//Tr21-5-23 -/_dynodump.h/1.3/Thu May 29 04:22:29 1997//Tr21-5-23 -/dynodump.c/1.9/Fri Apr 13 09:11:20 2001//Tr21-5-23 -/syms.c/1.3/Thu May 29 04:22:30 1997//Tr21-5-23 +/Makefile.in.in/1.14/Tue Nov 22 07:14:50 2005//Tr21-5-24 +/README/1.3/Thu May 29 04:22:29 1997//Tr21-5-24 +/_dynodump.h/1.3/Thu May 29 04:22:29 1997//Tr21-5-24 +/dynodump.c/1.9/Fri Apr 13 09:11:20 2001//Tr21-5-24 +/syms.c/1.3/Thu May 29 04:22:30 1997//Tr21-5-24 D diff -urN 21.5.23/dynodump/CVS/Tag 21.5.24/dynodump/CVS/Tag --- 21.5.23/dynodump/CVS/Tag Mon Dec 19 04:19:33 2005 +++ 21.5.24/dynodump/CVS/Tag Mon Dec 19 04:21:54 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/dynodump/Makefile.in.in 21.5.24/dynodump/Makefile.in.in --- 21.5.23/dynodump/Makefile.in.in Fri Apr 13 03:20:43 2001 +++ 21.5.24/dynodump/Makefile.in.in Tue Nov 22 16:14:50 2005 @@ -1,6 +1,7 @@ ## Makefile for dynodump subdirectory in XEmacs ## Copyright (C) 1995 Board of Trustees, University of Illinois ## Copyright (C) 1996, 1997 Sun Microsystems, Inc. +## Copyright (C) 2005 Ben Wing. ## This file is part of XEmacs. @@ -75,12 +76,20 @@ $(CC) -c $(ALL_CFLAGS) ${srcdir}/$(ARCH)/uninit.c .PHONY: mostlyclean clean distclean realclean extraclean +.PHONY: distclean-noconfig realclean-noconfig extraclean-noconfig mostlyclean: - $(RM) *.o *.i core + -$(RM) *.o *.i core clean: mostlyclean - $(RM) *.so *.so.1 -distclean: clean - $(RM) GNUmakefile Makefile Makefile.in TAGS + -$(RM) *.so *.so.1 +distclean-noconfig: clean + -$(RM) TAGS +## This is used in making a distribution. +## Do not use it on development directories! +distclean: distclean-noconfig + -$(RM) GNUmakefile Makefile Makefile.in +realclean-noconfig: distclean-noconfig realclean: distclean +extraclean-noconfig: realclean-noconfig + -$(RM) *~ \#* extraclean: realclean - $(RM) *~ \#* + -$(RM) *~ \#* diff -urN 21.5.23/dynodump/i386/CVS/Entries 21.5.24/dynodump/i386/CVS/Entries --- 21.5.23/dynodump/i386/CVS/Entries Mon Dec 19 04:19:33 2005 +++ 21.5.24/dynodump/i386/CVS/Entries Mon Dec 19 04:21:54 2005 @@ -1,4 +1,4 @@ -/_relocate.c/1.3/Thu May 29 04:23:02 1997//Tr21-5-23 -/machdep.h/1.3/Thu May 29 04:23:02 1997//Tr21-5-23 -/uninit.c/1.3/Thu May 29 04:23:02 1997//Tr21-5-23 +/_relocate.c/1.3/Thu May 29 04:23:02 1997//Tr21-5-24 +/machdep.h/1.3/Thu May 29 04:23:02 1997//Tr21-5-24 +/uninit.c/1.3/Thu May 29 04:23:02 1997//Tr21-5-24 D diff -urN 21.5.23/dynodump/i386/CVS/Tag 21.5.24/dynodump/i386/CVS/Tag --- 21.5.23/dynodump/i386/CVS/Tag Mon Dec 19 04:19:33 2005 +++ 21.5.24/dynodump/i386/CVS/Tag Mon Dec 19 04:21:54 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/dynodump/ppc/CVS/Entries 21.5.24/dynodump/ppc/CVS/Entries --- 21.5.23/dynodump/ppc/CVS/Entries Mon Dec 19 04:19:33 2005 +++ 21.5.24/dynodump/ppc/CVS/Entries Mon Dec 19 04:21:54 2005 @@ -1,4 +1,4 @@ -/_relocate.c/1.4/Tue Mar 31 20:10:55 1998//Tr21-5-23 -/machdep.h/1.3/Thu May 29 04:23:20 1997//Tr21-5-23 -/uninit.c/1.3/Thu May 29 04:23:20 1997//Tr21-5-23 +/_relocate.c/1.4/Tue Mar 31 20:10:55 1998//Tr21-5-24 +/machdep.h/1.3/Thu May 29 04:23:20 1997//Tr21-5-24 +/uninit.c/1.3/Thu May 29 04:23:20 1997//Tr21-5-24 D diff -urN 21.5.23/dynodump/ppc/CVS/Tag 21.5.24/dynodump/ppc/CVS/Tag --- 21.5.23/dynodump/ppc/CVS/Tag Mon Dec 19 04:19:33 2005 +++ 21.5.24/dynodump/ppc/CVS/Tag Mon Dec 19 04:21:54 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/dynodump/sparc/CVS/Entries 21.5.24/dynodump/sparc/CVS/Entries --- 21.5.23/dynodump/sparc/CVS/Entries Mon Dec 19 04:19:34 2005 +++ 21.5.24/dynodump/sparc/CVS/Entries Mon Dec 19 04:21:54 2005 @@ -1,4 +1,4 @@ -/_relocate.c/1.4/Tue Mar 31 20:10:55 1998//Tr21-5-23 -/machdep.h/1.3/Thu May 29 04:23:26 1997//Tr21-5-23 -/uninit.c/1.3/Thu May 29 04:23:27 1997//Tr21-5-23 +/_relocate.c/1.4/Tue Mar 31 20:10:55 1998//Tr21-5-24 +/machdep.h/1.3/Thu May 29 04:23:26 1997//Tr21-5-24 +/uninit.c/1.3/Thu May 29 04:23:27 1997//Tr21-5-24 D diff -urN 21.5.23/dynodump/sparc/CVS/Tag 21.5.24/dynodump/sparc/CVS/Tag --- 21.5.23/dynodump/sparc/CVS/Tag Mon Dec 19 04:19:34 2005 +++ 21.5.24/dynodump/sparc/CVS/Tag Mon Dec 19 04:21:54 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/.cvsignore 21.5.24/etc/.cvsignore --- 21.5.23/etc/.cvsignore Thu Jan 1 09:00:00 1970 +++ 21.5.24/etc/.cvsignore Wed Nov 16 21:13:01 2005 @@ -0,0 +1 @@ +PROBLEMS diff -urN 21.5.23/etc/CVS/Entries 21.5.24/etc/CVS/Entries --- 21.5.23/etc/CVS/Entries Mon Dec 19 04:19:37 2005 +++ 21.5.24/etc/CVS/Entries Mon Dec 19 04:21:57 2005 @@ -1,62 +1,63 @@ -/COPYING/1.1.1.1/Wed Dec 18 22:42:15 1996//Tr21-5-23 -/ChangeLog/1.63/Wed Oct 26 15:13:25 2005//Tr21-5-23 -/ETAGS.EBNF/1.3/Thu Feb 3 18:09:30 2005//Tr21-5-23 -/Emacs.ad/1.15/Thu Mar 27 12:57:44 2003//Tr21-5-23 -/HELLO/1.7/Thu Apr 12 18:20:45 2001/-kb/Tr21-5-23 -/InstallGuide/1.2/Fri Aug 1 03:27:38 1997//Tr21-5-23 -/NEWS/1.76/Sun Jul 17 20:08:40 2005//Tr21-5-23 -/ONEWS/1.3/Mon Jan 28 08:23:28 2002//Tr21-5-23 -/OONEWS/1.2/Thu Apr 12 18:20:47 2001//Tr21-5-23 -/README/1.10/Mon Jan 31 20:08:37 2005//Tr21-5-23 -/TUTORIAL/1.8/Wed Mar 23 22:52:13 2005//Tr21-5-23 -/TUTORIAL.cs/1.2/Wed Mar 13 08:51:25 2002//Tr21-5-23 -/TUTORIAL.de/1.6/Wed Mar 13 08:51:25 2002/-kb/Tr21-5-23 -/TUTORIAL.es/1.2/Wed Mar 13 08:51:25 2002//Tr21-5-23 -/TUTORIAL.fr/1.4/Thu Oct 24 16:31:54 2002/-kb/Tr21-5-23 -/TUTORIAL.hr/1.2/Sun Nov 9 07:06:22 1997/-kb/Tr21-5-23 -/TUTORIAL.ja/1.3/Mon Nov 11 14:23:50 2002//Tr21-5-23 -/TUTORIAL.ko/1.1/Sun Nov 9 07:06:23 1997//Tr21-5-23 -/TUTORIAL.nl/1.2/Wed Mar 13 08:51:25 2002//Tr21-5-23 -/TUTORIAL.no/1.3/Fri Nov 21 05:27:29 1997/-kb/Tr21-5-23 -/TUTORIAL.pl/1.1/Fri Nov 21 05:27:30 1997/-kb/Tr21-5-23 -/TUTORIAL.ro/1.1/Tue Jun 30 06:35:12 1998/-kb/Tr21-5-23 -/TUTORIAL.ru/1.2/Thu Apr 12 18:20:49 2001/-kb/Tr21-5-23 -/TUTORIAL.se/1.1/Thu Feb 28 09:02:39 2002//Tr21-5-23 -/TUTORIAL.sk/1.2/Wed Mar 13 08:51:26 2002//Tr21-5-23 -/TUTORIAL.sl/1.2/Wed Mar 13 08:51:26 2002//Tr21-5-23 -/TUTORIAL.th/1.2/Thu Apr 12 18:20:49 2001/-kb/Tr21-5-23 -/VEGETABLES/1.1/Thu Jul 26 06:20:45 2001//Tr21-5-23 -/XKeysymDB/1.1.1.1/Wed Dec 18 22:42:16 1996//Tr21-5-23 -/cbx.png/1.1/Fri May 1 01:10:44 1998/-kb/Tr21-5-23 -/ctags.1/1.1.1.1/Wed Dec 18 22:42:17 1996//Tr21-5-23 -/editclient.sh/1.2/Thu Apr 12 18:20:50 2001//Tr21-5-23 -/emacskeys.sco/1.1.1.1/Wed Dec 18 22:42:19 1996//Tr21-5-23 -/emacsstrs.sco/1.1.1.1/Wed Dec 18 22:42:19 1996//Tr21-5-23 -/etags.1/1.7/Thu Oct 7 14:51:11 2004//Tr21-5-23 -/gnuattach.1/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-23 -/gnuclient.1/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-23 -/gnudoit.1/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-23 -/gnuserv.1/1.7/Tue Dec 14 09:56:38 2004//Tr21-5-23 -/gnuserv.README/1.3/Tue Dec 14 09:56:38 2004//Tr21-5-23 -/gray1.xbm/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-23 -/gtkrc/1.2/Sat May 15 07:43:05 2004//Tr21-5-23 -/package-index.LATEST.gpg/1.10/Sun Jun 29 13:11:16 2003//Tr21-5-23 -/recycle.xpm/1.2/Thu Apr 12 18:20:51 2001//Tr21-5-23 -/recycle2.xpm/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-23 -/refcard.ps.gz/1.1/Sun Dec 21 06:28:19 1997/-kb/Tr21-5-23 -/refcard.tex/1.4/Sat Apr 18 23:25:08 1998//Tr21-5-23 -/sample.Xdefaults/1.6/Thu Mar 27 12:57:44 2003//Tr21-5-23 -/sample.Xresources/1.3/Thu Mar 24 12:17:51 2005//Tr21-5-23 -/sample.init.el/1.7/Sat Mar 20 12:51:25 2004//Tr21-5-23 -/trash.xpm/1.1.1.1/Wed Dec 18 22:42:17 1996//Tr21-5-23 -/xemacs-beta.xpm/1.2/Fri Nov 21 05:27:30 1997//Tr21-5-23 -/xemacs-enhanced.png/1.1/Mon Aug 3 17:27:26 1998/-kb/Tr21-5-23 -/xemacs-fe.sh/1.2/Fri Nov 17 03:21:19 2000//Tr21-5-23 -/xemacs-icon.xpm/1.2/Sun Jul 14 14:23:43 2002//Tr21-5-23 -/xemacs-icon2.xbm/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-23 -/xemacs-icon2.xpm/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-23 -/xemacs-icon3.xpm/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-23 -/xemacs.1/1.13/Thu Apr 12 18:20:52 2001//Tr21-5-23 -/xemacs.xbm/1.1.1.1/Wed Dec 18 22:42:16 1996//Tr21-5-23 -/xemacs.xpm/1.4/Fri Mar 28 02:28:04 1997//Tr21-5-23 +/.cvsignore/1.2/Wed Nov 16 12:13:01 2005//Tr21-5-24 +/COPYING/1.1.1.1/Wed Dec 18 22:42:15 1996//Tr21-5-24 +/ChangeLog/1.69/Sun Dec 18 19:05:28 2005//Tr21-5-24 +/ETAGS.EBNF/1.3/Thu Feb 3 18:09:30 2005//Tr21-5-24 +/Emacs.ad/1.15/Thu Mar 27 12:57:44 2003//Tr21-5-24 +/HELLO/1.8/Fri Nov 18 11:28:10 2005/-kb/Tr21-5-24 +/InstallGuide/1.2/Fri Aug 1 03:27:38 1997//Tr21-5-24 +/NEWS/1.76/Sun Jul 17 20:08:40 2005//Tr21-5-24 +/ONEWS/1.3/Mon Jan 28 08:23:28 2002//Tr21-5-24 +/OONEWS/1.2/Thu Apr 12 18:20:47 2001//Tr21-5-24 +/README/1.10/Mon Jan 31 20:08:37 2005//Tr21-5-24 +/TUTORIAL/1.8/Wed Mar 23 22:52:13 2005//Tr21-5-24 +/TUTORIAL.cs/1.2/Wed Mar 13 08:51:25 2002//Tr21-5-24 +/TUTORIAL.de/1.6/Wed Mar 13 08:51:25 2002/-kb/Tr21-5-24 +/TUTORIAL.es/1.2/Wed Mar 13 08:51:25 2002//Tr21-5-24 +/TUTORIAL.fr/1.4/Thu Oct 24 16:31:54 2002/-kb/Tr21-5-24 +/TUTORIAL.hr/1.2/Sun Nov 9 07:06:22 1997/-kb/Tr21-5-24 +/TUTORIAL.ja/1.3/Mon Nov 11 14:23:50 2002//Tr21-5-24 +/TUTORIAL.ko/1.1/Sun Nov 9 07:06:23 1997//Tr21-5-24 +/TUTORIAL.nl/1.2/Wed Mar 13 08:51:25 2002//Tr21-5-24 +/TUTORIAL.no/1.3/Fri Nov 21 05:27:29 1997/-kb/Tr21-5-24 +/TUTORIAL.pl/1.1/Fri Nov 21 05:27:30 1997/-kb/Tr21-5-24 +/TUTORIAL.ro/1.1/Tue Jun 30 06:35:12 1998/-kb/Tr21-5-24 +/TUTORIAL.ru/1.2/Thu Apr 12 18:20:49 2001/-kb/Tr21-5-24 +/TUTORIAL.se/1.1/Thu Feb 28 09:02:39 2002//Tr21-5-24 +/TUTORIAL.sk/1.2/Wed Mar 13 08:51:26 2002//Tr21-5-24 +/TUTORIAL.sl/1.2/Wed Mar 13 08:51:26 2002//Tr21-5-24 +/TUTORIAL.th/1.2/Thu Apr 12 18:20:49 2001/-kb/Tr21-5-24 +/VEGETABLES/1.1/Thu Jul 26 06:20:45 2001//Tr21-5-24 +/XKeysymDB/1.1.1.1/Wed Dec 18 22:42:16 1996//Tr21-5-24 +/cbx.png/1.1/Fri May 1 01:10:44 1998/-kb/Tr21-5-24 +/ctags.1/1.1.1.1/Wed Dec 18 22:42:17 1996//Tr21-5-24 +/editclient.sh/1.2/Thu Apr 12 18:20:50 2001//Tr21-5-24 +/emacskeys.sco/1.1.1.1/Wed Dec 18 22:42:19 1996//Tr21-5-24 +/emacsstrs.sco/1.1.1.1/Wed Dec 18 22:42:19 1996//Tr21-5-24 +/etags.1/1.7/Thu Oct 7 14:51:11 2004//Tr21-5-24 +/gnuattach.1/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-24 +/gnuclient.1/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-24 +/gnudoit.1/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-24 +/gnuserv.1/1.7/Tue Dec 14 09:56:38 2004//Tr21-5-24 +/gnuserv.README/1.3/Tue Dec 14 09:56:38 2004//Tr21-5-24 +/gray1.xbm/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-24 +/gtkrc/1.2/Sat May 15 07:43:05 2004//Tr21-5-24 +/package-index.LATEST.gpg/1.10/Sun Jun 29 13:11:16 2003//Tr21-5-24 +/recycle.xpm/1.2/Thu Apr 12 18:20:51 2001//Tr21-5-24 +/recycle2.xpm/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-24 +/refcard.ps.gz/1.1/Sun Dec 21 06:28:19 1997/-kb/Tr21-5-24 +/refcard.tex/1.4/Sat Apr 18 23:25:08 1998//Tr21-5-24 +/sample.Xdefaults/1.6/Thu Mar 27 12:57:44 2003//Tr21-5-24 +/sample.Xresources/1.3/Thu Mar 24 12:17:51 2005//Tr21-5-24 +/sample.init.el/1.7/Sat Mar 20 12:51:25 2004//Tr21-5-24 +/trash.xpm/1.1.1.1/Wed Dec 18 22:42:17 1996//Tr21-5-24 +/xemacs-beta.xpm/1.2/Fri Nov 21 05:27:30 1997//Tr21-5-24 +/xemacs-enhanced.png/1.1/Mon Aug 3 17:27:26 1998/-kb/Tr21-5-24 +/xemacs-fe.sh/1.2/Fri Nov 17 03:21:19 2000//Tr21-5-24 +/xemacs-icon.xpm/1.2/Sun Jul 14 14:23:43 2002//Tr21-5-24 +/xemacs-icon2.xbm/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-24 +/xemacs-icon2.xpm/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-24 +/xemacs-icon3.xpm/1.1.1.1/Wed Dec 18 22:42:18 1996//Tr21-5-24 +/xemacs.1/1.13/Thu Apr 12 18:20:52 2001//Tr21-5-24 +/xemacs.xbm/1.1.1.1/Wed Dec 18 22:42:16 1996//Tr21-5-24 +/xemacs.xpm/1.4/Fri Mar 28 02:28:04 1997//Tr21-5-24 D diff -urN 21.5.23/etc/CVS/Tag 21.5.24/etc/CVS/Tag --- 21.5.23/etc/CVS/Tag Mon Dec 19 04:19:37 2005 +++ 21.5.24/etc/CVS/Tag Mon Dec 19 04:21:57 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/ChangeLog 21.5.24/etc/ChangeLog --- 21.5.23/etc/ChangeLog Thu Oct 27 00:13:25 2005 +++ 21.5.24/etc/ChangeLog Mon Dec 19 04:05:28 2005 @@ -1,3 +1,22 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-12-10 Malcolm Purvis + + * photos/purvis.png, photos/purvism.png: Updated. + +2005-11-18 Aidan Kehoe + + * HELLO: Add Irish, Tajik. Don't give the local name for the + latter language, because we don't support CYRILLIC SMALL LETTER + CHE WITH DESCENDER nor CYRILLIC SMALL LETTER I WITH MACRON by + default. + +2005-11-16 Malcolm Purvis + + * .cvsignore: New + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. diff -urN 21.5.23/etc/HELLO 21.5.24/etc/HELLO --- 21.5.23/etc/HELLO Fri Apr 13 03:20:45 2001 +++ 21.5.24/etc/HELLO Fri Nov 18 20:28:10 2005 @@ -5,34 +5,36 @@ Amharic ($(3"c!(B Arabic [2](38R(47d(3T!JSa(4W(3W[0](B Croatian (Hrvatski) Bog (Bok), Dobar dan -Czech (.BNhesky) DobrN} den +Czech (,Bh(Besky) Dobr,B}(B den Danish (Dansk) Hej, Goddag English Hello Esperanto Saluton Estonian Tere, Tervist FORTRAN PROGRAM Finnish (Suomi) Hei -French (Fran.ANgais) Bonjour, Salut +French (Fran,Ag(Bais) Bonjour, Salut German (Deutsch Nord) Guten Tag -German (Deutsch S.AN|d) GrN|N_ Gott -Greek (.FNENkNkNgNmNiNjN\) NCNeNiN\ NsNaNr -Hebrew [2].HNyNlNeNm[0] +German (Deutsch S,A|(Bd) Gr,A|_(B Gott +Greek (,FEkkgmij\(B) ,FCei\(B ,Fsar(B +Hebrew [2],Hylem[0](B +Irish (Gaeilge) Dia duit, Cad ,Ai(B mar a t,Aa(B t,Az(B? Italiano Ciao, Buon giorno Maltese Ciao Nederlands, Vlaams Hallo, Hoi, Goedendag Norwegian (Norsk) Hei, God dag -Polish Cze.BN6Nf! -Russian (.LN@NcNaNaNZNXNY) N7NTN`NPNRNaNbNRNcNYNbNU! -Slovak Dobr.BN} deNr -Spanish (Espa.ANqol) N!Hola! +Polish Cze,B6f(B! +Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B! +Slovak Dobr,B}(B de,Br(B +Spanish (Espa,Aq(Bol) ,A!(BHola! Swedish (Svenska) Hej, Goddag +Tajik ,LAP[^\(B Thai ($(?@0R0I0R0d070B0(B) $(?J0G8J04H$0C8:0(B, $(?J0G8J04H$2P0(B Tigrigna ($(3"8#r!N"^(B) $(3!Q!,!<"8(B -Turkish (T.AN|rkNge) Merhaba -Vietnamese (Ti.1N*ng ViN.t) ChN`o bNUn +Turkish (T,A|(Brk,Ag(Be) Merhaba +Vietnamese (Ti,1*(Bng Vi,1.(Bt) Ch,1`(Bo b,1U(Bn -Japanese ($BF|K\8l(B) $B$3$s$K$A$O(B, *IN:N]NFNANJ, $BqV$(DiQ(B +Japanese ($BF|K\8l(B) $B$3$s$K$A$O(B, (I:]FAJ(B, $BqV$(DiQ(B Chinese ($AVPND(B,$AFUM(;0(B,$A::So(B) $ADc:C(B Cantonese ($(0GnM$(B,$(0N]0*Hd(B) $(0*/=((B, $(0+$)p(B Hangul ($(CGQ1[(B) $(C>H3gGO<H3gGO=J4O1n(B diff -urN 21.5.23/etc/custom/CVS/Entries 21.5.24/etc/custom/CVS/Entries --- 21.5.23/etc/custom/CVS/Entries Mon Dec 19 04:19:38 2005 +++ 21.5.24/etc/custom/CVS/Entries Mon Dec 19 04:21:57 2005 @@ -1,30 +1,30 @@ -/check0.xpm/1.1/Wed Feb 12 23:40:10 1997//Tr21-5-23 -/check1.xpm/1.1/Wed Feb 12 23:40:10 1997//Tr21-5-23 -/choose-down.png/1.1/Fri May 1 01:10:45 1998/-kb/Tr21-5-23 -/choose-up.png/1.1/Fri May 1 01:10:45 1998/-kb/Tr21-5-23 -/done-down.png/1.1/Fri May 1 01:10:45 1998/-kb/Tr21-5-23 -/done-up.png/1.1/Fri May 1 01:10:45 1998/-kb/Tr21-5-23 -/down-pushed.xpm/1.1/Mon Jun 2 11:13:24 1997//Tr21-5-23 -/down.xpm/1.1/Mon Jun 2 11:13:24 1997//Tr21-5-23 -/face.xpm/1.1/Wed Jun 25 18:07:02 1997//Tr21-5-23 -/folder.xpm/1.1/Wed Jun 25 18:07:02 1997//Tr21-5-23 -/open-down.png/1.1/Fri May 1 01:10:46 1998/-kb/Tr21-5-23 -/open-up.png/1.1/Fri May 1 01:10:46 1998/-kb/Tr21-5-23 -/option.xpm/1.1/Wed Jun 25 18:07:02 1997//Tr21-5-23 -/radio0.xpm/1.2/Sat Feb 15 22:20:14 1997//Tr21-5-23 -/radio1.xpm/1.2/Sat Feb 15 22:20:14 1997//Tr21-5-23 -/reset-down.png/1.1/Fri May 1 01:10:46 1998/-kb/Tr21-5-23 -/reset-up.png/1.1/Fri May 1 01:10:46 1998/-kb/Tr21-5-23 -/right-pushed.xpm/1.1/Mon Jun 2 11:13:24 1997//Tr21-5-23 -/right.xpm/1.1/Mon Jun 2 11:13:24 1997//Tr21-5-23 -/save-down.png/1.1/Fri May 1 01:10:46 1998/-kb/Tr21-5-23 -/save-up.png/1.1/Fri May 1 01:10:47 1998/-kb/Tr21-5-23 -/set-down.png/1.1/Fri May 1 01:10:47 1998/-kb/Tr21-5-23 -/set-up.png/1.1/Fri May 1 01:10:47 1998/-kb/Tr21-5-23 -/state-down.png/1.1/Fri May 1 01:10:47 1998/-kb/Tr21-5-23 -/state-up.png/1.1/Fri May 1 01:10:48 1998/-kb/Tr21-5-23 -/toggle-off-down.png/1.1/Fri May 1 01:10:48 1998/-kb/Tr21-5-23 -/toggle-off-up.png/1.1/Fri May 1 01:10:48 1998/-kb/Tr21-5-23 -/toggle-on-down.png/1.1/Fri May 1 01:10:48 1998/-kb/Tr21-5-23 -/toggle-on-up.png/1.1/Fri May 1 01:10:50 1998/-kb/Tr21-5-23 +/check0.xpm/1.1/Wed Feb 12 23:40:10 1997//Tr21-5-24 +/check1.xpm/1.1/Wed Feb 12 23:40:10 1997//Tr21-5-24 +/choose-down.png/1.1/Fri May 1 01:10:45 1998/-kb/Tr21-5-24 +/choose-up.png/1.1/Fri May 1 01:10:45 1998/-kb/Tr21-5-24 +/done-down.png/1.1/Fri May 1 01:10:45 1998/-kb/Tr21-5-24 +/done-up.png/1.1/Fri May 1 01:10:45 1998/-kb/Tr21-5-24 +/down-pushed.xpm/1.1/Mon Jun 2 11:13:24 1997//Tr21-5-24 +/down.xpm/1.1/Mon Jun 2 11:13:24 1997//Tr21-5-24 +/face.xpm/1.1/Wed Jun 25 18:07:02 1997//Tr21-5-24 +/folder.xpm/1.1/Wed Jun 25 18:07:02 1997//Tr21-5-24 +/open-down.png/1.1/Fri May 1 01:10:46 1998/-kb/Tr21-5-24 +/open-up.png/1.1/Fri May 1 01:10:46 1998/-kb/Tr21-5-24 +/option.xpm/1.1/Wed Jun 25 18:07:02 1997//Tr21-5-24 +/radio0.xpm/1.2/Sat Feb 15 22:20:14 1997//Tr21-5-24 +/radio1.xpm/1.2/Sat Feb 15 22:20:14 1997//Tr21-5-24 +/reset-down.png/1.1/Fri May 1 01:10:46 1998/-kb/Tr21-5-24 +/reset-up.png/1.1/Fri May 1 01:10:46 1998/-kb/Tr21-5-24 +/right-pushed.xpm/1.1/Mon Jun 2 11:13:24 1997//Tr21-5-24 +/right.xpm/1.1/Mon Jun 2 11:13:24 1997//Tr21-5-24 +/save-down.png/1.1/Fri May 1 01:10:46 1998/-kb/Tr21-5-24 +/save-up.png/1.1/Fri May 1 01:10:47 1998/-kb/Tr21-5-24 +/set-down.png/1.1/Fri May 1 01:10:47 1998/-kb/Tr21-5-24 +/set-up.png/1.1/Fri May 1 01:10:47 1998/-kb/Tr21-5-24 +/state-down.png/1.1/Fri May 1 01:10:47 1998/-kb/Tr21-5-24 +/state-up.png/1.1/Fri May 1 01:10:48 1998/-kb/Tr21-5-24 +/toggle-off-down.png/1.1/Fri May 1 01:10:48 1998/-kb/Tr21-5-24 +/toggle-off-up.png/1.1/Fri May 1 01:10:48 1998/-kb/Tr21-5-24 +/toggle-on-down.png/1.1/Fri May 1 01:10:48 1998/-kb/Tr21-5-24 +/toggle-on-up.png/1.1/Fri May 1 01:10:50 1998/-kb/Tr21-5-24 D diff -urN 21.5.23/etc/custom/CVS/Tag 21.5.24/etc/custom/CVS/Tag --- 21.5.23/etc/custom/CVS/Tag Mon Dec 19 04:19:38 2005 +++ 21.5.24/etc/custom/CVS/Tag Mon Dec 19 04:21:57 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/custom/example-themes/CVS/Entries 21.5.24/etc/custom/example-themes/CVS/Entries --- 21.5.23/etc/custom/example-themes/CVS/Entries Mon Dec 19 04:19:38 2005 +++ 21.5.24/etc/custom/example-themes/CVS/Entries Mon Dec 19 04:21:57 2005 @@ -1,4 +1,4 @@ -/europe-theme.el/1.2/Thu Apr 12 18:20:53 2001//Tr21-5-23 -/ex-custom-file/1.2/Thu Apr 12 18:20:54 2001//Tr21-5-23 -/example-theme.el/1.2/Thu Apr 12 18:20:54 2001//Tr21-5-23 +/europe-theme.el/1.2/Thu Apr 12 18:20:53 2001//Tr21-5-24 +/ex-custom-file/1.2/Thu Apr 12 18:20:54 2001//Tr21-5-24 +/example-theme.el/1.2/Thu Apr 12 18:20:54 2001//Tr21-5-24 D diff -urN 21.5.23/etc/custom/example-themes/CVS/Tag 21.5.24/etc/custom/example-themes/CVS/Tag --- 21.5.23/etc/custom/example-themes/CVS/Tag Mon Dec 19 04:19:38 2005 +++ 21.5.24/etc/custom/example-themes/CVS/Tag Mon Dec 19 04:21:57 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/eos/CVS/Entries 21.5.24/etc/eos/CVS/Entries --- 21.5.23/etc/eos/CVS/Entries Mon Dec 19 04:19:39 2005 +++ 21.5.24/etc/eos/CVS/Entries Mon Dec 19 04:21:57 2005 @@ -1,21 +1,21 @@ -/eos-build.xbm/1.1.1.1/Wed Dec 18 22:42:24 1996//Tr21-5-23 -/eos-clear-at.xbm/1.1.1.1/Wed Dec 18 22:42:24 1996//Tr21-5-23 -/eos-cont.xbm/1.1.1.1/Wed Dec 18 22:42:24 1996//Tr21-5-23 -/eos-dismiss.xbm/1.1.1.1/Wed Dec 18 22:42:24 1996//Tr21-5-23 -/eos-down.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-evaluate-star.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-evaluate.xbm/1.1.1.1/Wed Dec 18 22:42:24 1996//Tr21-5-23 -/eos-fix.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-intro.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-introB.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-introD.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-introDB.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-run.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-run2.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-step-into.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-step-over.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-stop-in.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-stop.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-type.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/eos-up.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 +/eos-build.xbm/1.1.1.1/Wed Dec 18 22:42:24 1996//Tr21-5-24 +/eos-clear-at.xbm/1.1.1.1/Wed Dec 18 22:42:24 1996//Tr21-5-24 +/eos-cont.xbm/1.1.1.1/Wed Dec 18 22:42:24 1996//Tr21-5-24 +/eos-dismiss.xbm/1.1.1.1/Wed Dec 18 22:42:24 1996//Tr21-5-24 +/eos-down.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-evaluate-star.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-evaluate.xbm/1.1.1.1/Wed Dec 18 22:42:24 1996//Tr21-5-24 +/eos-fix.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-intro.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-introB.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-introD.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-introDB.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-run.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-run2.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-step-into.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-step-over.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-stop-in.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-stop.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-type.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/eos-up.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 D diff -urN 21.5.23/etc/eos/CVS/Tag 21.5.24/etc/eos/CVS/Tag --- 21.5.23/etc/eos/CVS/Tag Mon Dec 19 04:19:39 2005 +++ 21.5.24/etc/eos/CVS/Tag Mon Dec 19 04:21:58 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/idd/CVS/Entries 21.5.24/etc/idd/CVS/Entries --- 21.5.23/etc/idd/CVS/Entries Mon Dec 19 04:19:41 2005 +++ 21.5.24/etc/idd/CVS/Entries Mon Dec 19 04:21:59 2005 @@ -1,3 +1,3 @@ -/drop/1.1/Tue Jul 22 08:11:33 1997//Tr21-5-23 -/dropmsk/1.1/Tue Jul 22 08:11:33 1997//Tr21-5-23 +/drop/1.1/Tue Jul 22 08:11:33 1997//Tr21-5-24 +/dropmsk/1.1/Tue Jul 22 08:11:33 1997//Tr21-5-24 D diff -urN 21.5.23/etc/idd/CVS/Tag 21.5.24/etc/idd/CVS/Tag --- 21.5.23/etc/idd/CVS/Tag Mon Dec 19 04:19:41 2005 +++ 21.5.24/etc/idd/CVS/Tag Mon Dec 19 04:21:59 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/photos/CVS/Entries 21.5.24/etc/photos/CVS/Entries --- 21.5.23/etc/photos/CVS/Entries Mon Dec 19 04:19:47 2005 +++ 21.5.24/etc/photos/CVS/Entries Mon Dec 19 04:22:05 2005 @@ -1,84 +1,84 @@ -/adrian.png/1.1/Mon Apr 30 09:46:55 2001/-kb/Tr21-5-23 -/adrianm.png/1.1/Mon Apr 30 09:46:55 2001/-kb/Tr21-5-23 -/ajc.png/1.1/Tue Aug 11 21:55:38 1998/-kb/Tr21-5-23 -/ajcm.png/1.1/Tue Aug 11 21:55:38 1998/-kb/Tr21-5-23 -/baw.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-23 -/bawm.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-23 -/ben.png/1.2/Fri Apr 20 11:32:01 2001/-kb/Tr21-5-23 -/benm.png/1.2/Fri Apr 20 11:32:02 2001/-kb/Tr21-5-23 -/bw.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-23 -/bwm.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-23 -/chr.png/1.3/Mon Jan 31 20:26:41 2005/-kb/Tr21-5-23 -/chrm.png/1.3/Mon Jan 31 20:26:42 2005/-kb/Tr21-5-23 -/cthomp.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-23 -/cthompm.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-23 -/dkindred.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-23 -/dkindredm.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-23 -/dmoore.png/1.1/Tue Aug 11 21:55:40 1998/-kb/Tr21-5-23 -/dmoorem.png/1.1/Tue Aug 11 21:55:40 1998/-kb/Tr21-5-23 -/dv.png/1.1/Tue Aug 11 21:55:40 1998/-kb/Tr21-5-23 -/dvm.png/1.1/Tue Aug 11 21:55:40 1998/-kb/Tr21-5-23 -/fabrice.png/1.2/Fri Apr 20 11:32:02 2001/-kb/Tr21-5-23 -/fabricem.png/1.2/Fri Apr 20 11:32:03 2001/-kb/Tr21-5-23 -/golubev.png/1.2/Wed Jan 15 15:33:55 2003/-kb/Tr21-5-23 -/golubevm.png/1.2/Wed Jan 15 15:33:55 2003/-kb/Tr21-5-23 -/hniksic.png/1.2/Tue Apr 30 15:33:42 2002/-kb/Tr21-5-23 -/hniksicm.png/1.2/Tue Apr 30 15:33:42 2002/-kb/Tr21-5-23 -/james.png/1.3/Fri Nov 5 19:29:42 2004/-kb/Tr21-5-23 -/jamesm.png/1.3/Fri Nov 5 19:29:42 2004/-kb/Tr21-5-23 -/jan.png/1.2/Tue Dec 18 22:14:55 2001/-kb/Tr21-5-23 -/jareth.png/1.1/Tue Aug 11 21:55:40 1998/-kb/Tr21-5-23 -/jarethm.png/1.1/Tue Aug 11 21:55:41 1998/-kb/Tr21-5-23 -/jason.png/1.2/Sat Apr 28 07:48:36 2001/-kb/Tr21-5-23 -/jasonm.png/1.2/Sat Apr 28 07:48:36 2001/-kb/Tr21-5-23 -/jens.png/1.1/Tue Aug 11 21:55:41 1998/-kb/Tr21-5-23 -/jensm.png/1.1/Tue Aug 11 21:55:41 1998/-kb/Tr21-5-23 -/jmiller.png/1.1/Tue Aug 11 21:55:41 1998/-kb/Tr21-5-23 -/jmillerm.png/1.1/Tue Aug 11 21:55:41 1998/-kb/Tr21-5-23 -/juhp.png/1.2/Fri Apr 20 11:32:03 2001/-kb/Tr21-5-23 -/juhpm.png/1.2/Fri Apr 20 11:32:04 2001/-kb/Tr21-5-23 -/jwz.png/1.2/Fri Apr 20 11:32:04 2001/-kb/Tr21-5-23 -/jwzm.png/1.2/Fri Apr 20 11:32:04 2001/-kb/Tr21-5-23 -/kazz.png/1.1/Tue Aug 11 21:55:43 1998/-kb/Tr21-5-23 -/kazzm.png/1.1/Tue Aug 11 21:55:43 1998/-kb/Tr21-5-23 -/kyle.png/1.1/Tue Aug 11 21:55:43 1998/-kb/Tr21-5-23 -/kylem.png/1.1/Tue Aug 11 21:55:43 1998/-kb/Tr21-5-23 -/larsi.png/1.1/Tue Aug 11 21:55:43 1998/-kb/Tr21-5-23 -/larsim.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-23 -/martin.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-23 -/martinm.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-23 -/mcook.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-23 -/mcookm.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-23 -/mly.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-23 -/mlym.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-23 -/morioka.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-23 -/moriokam.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-23 -/ograf.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-23 -/ografm.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-23 -/oscar.png/1.1/Sat Apr 28 07:48:36 2001/-kb/Tr21-5-23 -/oscarm.png/1.1/Sat Apr 28 07:48:37 2001/-kb/Tr21-5-23 -/pez.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-23 -/pezm.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-23 -/piper.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-23 -/piperm.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-23 -/purvis.png/1.1/Sun Nov 7 12:03:53 2004/-kb/Tr21-5-23 -/purvism.png/1.1/Sun Nov 7 12:03:53 2004/-kb/Tr21-5-23 -/rickc.png/1.1/Tue Aug 11 21:55:46 1998/-kb/Tr21-5-23 -/rickcm.png/1.1/Tue Aug 11 21:55:47 1998/-kb/Tr21-5-23 -/slb.png/1.1/Tue Aug 11 21:55:47 1998/-kb/Tr21-5-23 -/slbm.png/1.1/Tue Aug 11 21:55:47 1998/-kb/Tr21-5-23 -/sperber.png/1.1/Tue Aug 11 21:55:47 1998/-kb/Tr21-5-23 -/sperberm.png/1.1/Tue Aug 11 21:55:47 1998/-kb/Tr21-5-23 -/stig.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-23 -/stigb.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-23 -/stigbm.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-23 -/stigm.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-23 -/thiessel.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-23 -/thiesselm.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-23 -/vin.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-23 -/vinm.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-23 -/vladimir.png/1.1/Tue Aug 11 21:55:49 1998/-kb/Tr21-5-23 -/vladimirm.png/1.1/Tue Aug 11 21:55:49 1998/-kb/Tr21-5-23 -/wmperry.png/1.1/Tue Aug 11 21:55:49 1998/-kb/Tr21-5-23 -/wmperrym.png/1.1/Tue Aug 11 21:55:50 1998/-kb/Tr21-5-23 +/adrian.png/1.1/Mon Apr 30 09:46:55 2001/-kb/Tr21-5-24 +/adrianm.png/1.1/Mon Apr 30 09:46:55 2001/-kb/Tr21-5-24 +/ajc.png/1.1/Tue Aug 11 21:55:38 1998/-kb/Tr21-5-24 +/ajcm.png/1.1/Tue Aug 11 21:55:38 1998/-kb/Tr21-5-24 +/baw.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-24 +/bawm.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-24 +/ben.png/1.2/Fri Apr 20 11:32:01 2001/-kb/Tr21-5-24 +/benm.png/1.2/Fri Apr 20 11:32:02 2001/-kb/Tr21-5-24 +/bw.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-24 +/bwm.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-24 +/chr.png/1.3/Mon Jan 31 20:26:41 2005/-kb/Tr21-5-24 +/chrm.png/1.3/Mon Jan 31 20:26:42 2005/-kb/Tr21-5-24 +/cthomp.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-24 +/cthompm.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-24 +/dkindred.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-24 +/dkindredm.png/1.1/Tue Aug 11 21:55:39 1998/-kb/Tr21-5-24 +/dmoore.png/1.1/Tue Aug 11 21:55:40 1998/-kb/Tr21-5-24 +/dmoorem.png/1.1/Tue Aug 11 21:55:40 1998/-kb/Tr21-5-24 +/dv.png/1.1/Tue Aug 11 21:55:40 1998/-kb/Tr21-5-24 +/dvm.png/1.1/Tue Aug 11 21:55:40 1998/-kb/Tr21-5-24 +/fabrice.png/1.2/Fri Apr 20 11:32:02 2001/-kb/Tr21-5-24 +/fabricem.png/1.2/Fri Apr 20 11:32:03 2001/-kb/Tr21-5-24 +/golubev.png/1.2/Wed Jan 15 15:33:55 2003/-kb/Tr21-5-24 +/golubevm.png/1.2/Wed Jan 15 15:33:55 2003/-kb/Tr21-5-24 +/hniksic.png/1.2/Tue Apr 30 15:33:42 2002/-kb/Tr21-5-24 +/hniksicm.png/1.2/Tue Apr 30 15:33:42 2002/-kb/Tr21-5-24 +/james.png/1.3/Fri Nov 5 19:29:42 2004/-kb/Tr21-5-24 +/jamesm.png/1.3/Fri Nov 5 19:29:42 2004/-kb/Tr21-5-24 +/jan.png/1.2/Tue Dec 18 22:14:55 2001/-kb/Tr21-5-24 +/jareth.png/1.1/Tue Aug 11 21:55:40 1998/-kb/Tr21-5-24 +/jarethm.png/1.1/Tue Aug 11 21:55:41 1998/-kb/Tr21-5-24 +/jason.png/1.2/Sat Apr 28 07:48:36 2001/-kb/Tr21-5-24 +/jasonm.png/1.2/Sat Apr 28 07:48:36 2001/-kb/Tr21-5-24 +/jens.png/1.1/Tue Aug 11 21:55:41 1998/-kb/Tr21-5-24 +/jensm.png/1.1/Tue Aug 11 21:55:41 1998/-kb/Tr21-5-24 +/jmiller.png/1.1/Tue Aug 11 21:55:41 1998/-kb/Tr21-5-24 +/jmillerm.png/1.1/Tue Aug 11 21:55:41 1998/-kb/Tr21-5-24 +/juhp.png/1.2/Fri Apr 20 11:32:03 2001/-kb/Tr21-5-24 +/juhpm.png/1.2/Fri Apr 20 11:32:04 2001/-kb/Tr21-5-24 +/jwz.png/1.2/Fri Apr 20 11:32:04 2001/-kb/Tr21-5-24 +/jwzm.png/1.2/Fri Apr 20 11:32:04 2001/-kb/Tr21-5-24 +/kazz.png/1.1/Tue Aug 11 21:55:43 1998/-kb/Tr21-5-24 +/kazzm.png/1.1/Tue Aug 11 21:55:43 1998/-kb/Tr21-5-24 +/kyle.png/1.1/Tue Aug 11 21:55:43 1998/-kb/Tr21-5-24 +/kylem.png/1.1/Tue Aug 11 21:55:43 1998/-kb/Tr21-5-24 +/larsi.png/1.1/Tue Aug 11 21:55:43 1998/-kb/Tr21-5-24 +/larsim.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-24 +/martin.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-24 +/martinm.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-24 +/mcook.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-24 +/mcookm.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-24 +/mly.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-24 +/mlym.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-24 +/morioka.png/1.1/Tue Aug 11 21:55:44 1998/-kb/Tr21-5-24 +/moriokam.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-24 +/ograf.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-24 +/ografm.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-24 +/oscar.png/1.1/Sat Apr 28 07:48:36 2001/-kb/Tr21-5-24 +/oscarm.png/1.1/Sat Apr 28 07:48:37 2001/-kb/Tr21-5-24 +/pez.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-24 +/pezm.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-24 +/piper.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-24 +/piperm.png/1.1/Tue Aug 11 21:55:45 1998/-kb/Tr21-5-24 +/purvis.png/1.2/Sat Dec 10 07:43:03 2005/-kb/Tr21-5-24 +/purvism.png/1.2/Sat Dec 10 07:43:03 2005/-kb/Tr21-5-24 +/rickc.png/1.1/Tue Aug 11 21:55:46 1998/-kb/Tr21-5-24 +/rickcm.png/1.1/Tue Aug 11 21:55:47 1998/-kb/Tr21-5-24 +/slb.png/1.1/Tue Aug 11 21:55:47 1998/-kb/Tr21-5-24 +/slbm.png/1.1/Tue Aug 11 21:55:47 1998/-kb/Tr21-5-24 +/sperber.png/1.1/Tue Aug 11 21:55:47 1998/-kb/Tr21-5-24 +/sperberm.png/1.1/Tue Aug 11 21:55:47 1998/-kb/Tr21-5-24 +/stig.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-24 +/stigb.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-24 +/stigbm.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-24 +/stigm.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-24 +/thiessel.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-24 +/thiesselm.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-24 +/vin.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-24 +/vinm.png/1.1/Tue Aug 11 21:55:48 1998/-kb/Tr21-5-24 +/vladimir.png/1.1/Tue Aug 11 21:55:49 1998/-kb/Tr21-5-24 +/vladimirm.png/1.1/Tue Aug 11 21:55:49 1998/-kb/Tr21-5-24 +/wmperry.png/1.1/Tue Aug 11 21:55:49 1998/-kb/Tr21-5-24 +/wmperrym.png/1.1/Tue Aug 11 21:55:50 1998/-kb/Tr21-5-24 D diff -urN 21.5.23/etc/photos/CVS/Tag 21.5.24/etc/photos/CVS/Tag --- 21.5.23/etc/photos/CVS/Tag Mon Dec 19 04:19:47 2005 +++ 21.5.24/etc/photos/CVS/Tag Mon Dec 19 04:22:05 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 Binary files 21.5.23/etc/photos/purvis.png and 21.5.24/etc/photos/purvis.png differ Binary files 21.5.23/etc/photos/purvism.png and 21.5.24/etc/photos/purvism.png differ diff -urN 21.5.23/etc/sparcworks/CVS/Entries 21.5.24/etc/sparcworks/CVS/Entries --- 21.5.23/etc/sparcworks/CVS/Entries Mon Dec 19 04:19:47 2005 +++ 21.5.24/etc/sparcworks/CVS/Entries Mon Dec 19 04:22:06 2005 @@ -1,3 +1,3 @@ -/SW.Editor.xpm/1.1.1.1/Wed Dec 18 22:42:22 1996//Tr21-5-23 -/sunpro-mailcap/1.1.1.1/Wed Dec 18 22:42:22 1996//Tr21-5-23 +/SW.Editor.xpm/1.1.1.1/Wed Dec 18 22:42:22 1996//Tr21-5-24 +/sunpro-mailcap/1.1.1.1/Wed Dec 18 22:42:22 1996//Tr21-5-24 D diff -urN 21.5.23/etc/sparcworks/CVS/Tag 21.5.24/etc/sparcworks/CVS/Tag --- 21.5.23/etc/sparcworks/CVS/Tag Mon Dec 19 04:19:47 2005 +++ 21.5.24/etc/sparcworks/CVS/Tag Mon Dec 19 04:22:06 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/tests/CVS/Tag 21.5.24/etc/tests/CVS/Tag --- 21.5.23/etc/tests/CVS/Tag Mon Dec 19 04:19:47 2005 +++ 21.5.24/etc/tests/CVS/Tag Mon Dec 19 04:22:06 2005 @@ -1 +1 @@ -Tr21-5-23 +Tr21-5-24 diff -urN 21.5.23/etc/tests/external-widget/CVS/Entries 21.5.24/etc/tests/external-widget/CVS/Entries --- 21.5.23/etc/tests/external-widget/CVS/Entries Mon Dec 19 04:19:48 2005 +++ 21.5.24/etc/tests/external-widget/CVS/Entries Mon Dec 19 04:22:06 2005 @@ -1,4 +1,4 @@ -/Makefile/1.1.1.1/Wed Dec 18 22:42:31 1996//Tr21-5-23 -/test-ew-motif.c/1.1.1.1/Wed Dec 18 22:42:31 1996//Tr21-5-23 -/test-ew-xlib.c/1.1.1.1/Wed Dec 18 22:42:31 1996//Tr21-5-23 +/Makefile/1.1.1.1/Wed Dec 18 22:42:31 1996//Tr21-5-24 +/test-ew-motif.c/1.1.1.1/Wed Dec 18 22:42:31 1996//Tr21-5-24 +/test-ew-xlib.c/1.1.1.1/Wed Dec 18 22:42:31 1996//Tr21-5-24 D diff -urN 21.5.23/etc/tests/external-widget/CVS/Tag 21.5.24/etc/tests/external-widget/CVS/Tag --- 21.5.23/etc/tests/external-widget/CVS/Tag Mon Dec 19 04:19:48 2005 +++ 21.5.24/etc/tests/external-widget/CVS/Tag Mon Dec 19 04:22:06 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/toolbar/CVS/Entries 21.5.24/etc/toolbar/CVS/Entries --- 21.5.23/etc/toolbar/CVS/Entries Mon Dec 19 04:19:51 2005 +++ 21.5.24/etc/toolbar/CVS/Entries Mon Dec 19 04:22:07 2005 @@ -1,160 +1,160 @@ -/compile-cap-up.xpm/1.2/Sun Dec 21 06:28:47 1997//Tr21-5-23 -/compile-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/compile-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/compile-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/compile-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/compile-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/compile-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/copy-cap-up.xpm/1.2/Sun Dec 21 06:28:47 1997//Tr21-5-23 -/copy-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/copy-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/copy-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/copy-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/copy-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/copy-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/cut-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-23 -/cut-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/cut-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/cut-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/cut-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-23 -/cut-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/cut-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/debug-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-23 -/debug-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/debug-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/debug-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/debug-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/debug-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/debug-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/disk-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-23 -/disk-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/disk-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/disk-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/disk-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/disk-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/disk-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/file-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-23 -/file-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/file-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/file-up.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/file-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/file-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/file-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/folder-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-23 -/folder-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/folder-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/folder-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/folder-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/folder-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/folder-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/info-def-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-23 -/info-def-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-def-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/info-def-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/info-def-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-23 -/info-def-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/info-def-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/info-exit-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-exit-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-exit-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-exit-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-exit-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-exit-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-exit-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-exit.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/info-exit.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-next-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-next-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-next-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-next-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-next-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-next-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-next-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-next.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/info-next.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-prev-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-prev-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-prev-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-prev-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-prev-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-prev-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-prev-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-prev.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/info-prev.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-up-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-up-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-up-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-up-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-up-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-up-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-up-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/info-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/info-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/last-win-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/last-win-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/last-win-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/last-win-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/last-win-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/last-win-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/last-win-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/mail-cap-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-23 -/mail-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/mail-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/mail-up.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-23 -/mail-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/mail-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/mail-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/news-cap-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-23 -/news-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/news-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/news-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/news-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/news-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/news-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/next-win-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/next-win-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/next-win-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/next-win-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/next-win-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/next-win-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/next-win-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/paste-cap-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-23 -/paste-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/paste-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/paste-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/paste-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/paste-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/paste-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/printer-cap-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-23 -/printer-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/printer-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/printer-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/printer-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/printer-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/printer-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/replace-cap-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-23 -/replace-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/replace-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/replace-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/replace-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-23 -/replace-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/replace-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/spell-cap-up.xpm/1.2/Sun Dec 21 06:28:50 1997//Tr21-5-23 -/spell-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/spell-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/spell-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/spell-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/spell-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/spell-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/undo-cap-up.xpm/1.2/Sun Dec 21 06:28:50 1997//Tr21-5-23 -/undo-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-23 -/undo-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/undo-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/undo-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/undo-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/undo-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-23 -/workshop-cap-up.xpm/1.3/Sun Dec 21 06:28:50 1997//Tr21-5-23 -/workshop-cap-xx.xpm/1.2/Thu Feb 27 06:07:56 1997//Tr21-5-23 -/workshop-up.xpm/1.1.1.1/Wed Dec 18 22:42:28 1996//Tr21-5-23 -/workshop-xx.xpm/1.1.1.1/Wed Dec 18 22:42:28 1996//Tr21-5-23 +/compile-cap-up.xpm/1.2/Sun Dec 21 06:28:47 1997//Tr21-5-24 +/compile-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/compile-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/compile-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/compile-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/compile-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/compile-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/copy-cap-up.xpm/1.2/Sun Dec 21 06:28:47 1997//Tr21-5-24 +/copy-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/copy-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/copy-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/copy-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/copy-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/copy-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/cut-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-24 +/cut-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/cut-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/cut-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/cut-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-24 +/cut-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/cut-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/debug-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-24 +/debug-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/debug-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/debug-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/debug-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/debug-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/debug-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/disk-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-24 +/disk-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/disk-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/disk-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/disk-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/disk-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/disk-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/file-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-24 +/file-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/file-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/file-up.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/file-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/file-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/file-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/folder-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-24 +/folder-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/folder-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/folder-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/folder-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/folder-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/folder-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/info-def-cap-up.xpm/1.2/Sun Dec 21 06:28:48 1997//Tr21-5-24 +/info-def-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-def-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/info-def-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/info-def-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-24 +/info-def-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/info-def-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/info-exit-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-exit-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-exit-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-exit-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-exit-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-exit-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-exit-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-exit.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/info-exit.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-next-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-next-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-next-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-next-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-next-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-next-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-next-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-next.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/info-next.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-prev-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-prev-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-prev-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-prev-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-prev-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-prev-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-prev-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-prev.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/info-prev.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-up-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-up-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-up-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-up-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-up-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-up-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-up-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/info-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/info-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/last-win-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/last-win-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/last-win-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/last-win-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/last-win-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/last-win-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/last-win-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/mail-cap-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-24 +/mail-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/mail-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/mail-up.xbm/1.1.1.1/Wed Dec 18 22:42:25 1996//Tr21-5-24 +/mail-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/mail-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/mail-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/news-cap-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-24 +/news-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/news-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/news-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/news-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/news-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/news-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/next-win-cap-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/next-win-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/next-win-dn.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/next-win-up.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/next-win-up.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/next-win-xx.xbm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/next-win-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/paste-cap-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-24 +/paste-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/paste-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/paste-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/paste-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/paste-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/paste-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/printer-cap-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-24 +/printer-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/printer-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/printer-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/printer-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/printer-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/printer-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/replace-cap-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-24 +/replace-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/replace-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/replace-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/replace-up.xpm/1.2/Sun Dec 21 06:28:49 1997//Tr21-5-24 +/replace-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/replace-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/spell-cap-up.xpm/1.2/Sun Dec 21 06:28:50 1997//Tr21-5-24 +/spell-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/spell-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/spell-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/spell-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/spell-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/spell-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/undo-cap-up.xpm/1.2/Sun Dec 21 06:28:50 1997//Tr21-5-24 +/undo-cap-xx.xpm/1.1.1.1/Wed Dec 18 22:42:27 1996//Tr21-5-24 +/undo-dn.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/undo-up.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/undo-up.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/undo-xx.xbm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/undo-xx.xpm/1.1.1.1/Wed Dec 18 22:42:26 1996//Tr21-5-24 +/workshop-cap-up.xpm/1.3/Sun Dec 21 06:28:50 1997//Tr21-5-24 +/workshop-cap-xx.xpm/1.2/Thu Feb 27 06:07:56 1997//Tr21-5-24 +/workshop-up.xpm/1.1.1.1/Wed Dec 18 22:42:28 1996//Tr21-5-24 +/workshop-xx.xpm/1.1.1.1/Wed Dec 18 22:42:28 1996//Tr21-5-24 D diff -urN 21.5.23/etc/toolbar/CVS/Tag 21.5.24/etc/toolbar/CVS/Tag --- 21.5.23/etc/toolbar/CVS/Tag Mon Dec 19 04:19:51 2005 +++ 21.5.24/etc/toolbar/CVS/Tag Mon Dec 19 04:22:07 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/unicode/CVS/Entries 21.5.24/etc/unicode/CVS/Entries --- 21.5.23/etc/unicode/CVS/Entries Mon Dec 19 04:21:33 2005 +++ 21.5.24/etc/unicode/CVS/Entries Mon Dec 19 04:23:53 2005 @@ -1,4 +1,4 @@ -/README/1.3/Mon Mar 18 09:40:41 2002//Tr21-5-23 +/README/1.3/Mon Mar 18 09:40:41 2002//Tr21-5-24 D/ibm//// D/mule-ucs//// D/other//// diff -urN 21.5.23/etc/unicode/CVS/Tag 21.5.24/etc/unicode/CVS/Tag --- 21.5.23/etc/unicode/CVS/Tag Mon Dec 19 04:19:51 2005 +++ 21.5.24/etc/unicode/CVS/Tag Mon Dec 19 04:22:07 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/unicode/ibm/CVS/Entries 21.5.24/etc/unicode/ibm/CVS/Entries --- 21.5.23/etc/unicode/ibm/CVS/Entries Mon Dec 19 04:19:56 2005 +++ 21.5.24/etc/unicode/ibm/CVS/Entries Mon Dec 19 04:22:10 2005 @@ -1,26 +1,26 @@ -/glibc-BIG5-2.1.2.ucm/1.2/Wed Mar 13 08:51:29 2002//Tr21-5-23 -/glibc-EUC_CN-2.1.2.ucm/1.2/Wed Mar 13 08:51:30 2002//Tr21-5-23 -/glibc-EUC_JP-2.1.2.ucm/1.2/Wed Mar 13 08:51:30 2002//Tr21-5-23 -/glibc-EUC_KR-2.1.2.ucm/1.2/Wed Mar 13 08:51:31 2002//Tr21-5-23 -/glibc-EUC_TW-2.1.2.ucm/1.2/Wed Mar 13 08:51:32 2002//Tr21-5-23 -/glibc-ISO_8859_1-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-23 -/glibc-ISO_8859_10-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-23 -/glibc-ISO_8859_11-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-23 -/glibc-ISO_8859_13-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-23 -/glibc-ISO_8859_14-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-23 -/glibc-ISO_8859_15-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-23 -/glibc-ISO_8859_2-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-23 -/glibc-ISO_8859_3-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-23 -/glibc-ISO_8859_4-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-23 -/glibc-ISO_8859_5-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-23 -/glibc-ISO_8859_6-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-23 -/glibc-ISO_8859_7-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-23 -/glibc-ISO_8859_8-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-23 -/glibc-ISO_8859_9-2.1.2.ucm/1.2/Wed Mar 13 08:51:35 2002//Tr21-5-23 -/glibc-JOHAB-2.1.2.ucm/1.2/Wed Mar 13 08:51:35 2002//Tr21-5-23 -/glibc-KOI8_R-2.1.2.ucm/1.2/Wed Mar 13 08:51:35 2002//Tr21-5-23 -/glibc-KOI8_U-2.1.2.ucm/1.2/Wed Mar 13 08:51:36 2002//Tr21-5-23 -/glibc-KOI_8-2.1.2.ucm/1.2/Wed Mar 13 08:51:36 2002//Tr21-5-23 -/glibc-SJIS-2.1.2.ucm/1.2/Wed Mar 13 08:51:36 2002//Tr21-5-23 -/glibc-TIS_620-2.1.2.ucm/1.2/Wed Mar 13 08:51:36 2002//Tr21-5-23 +/glibc-BIG5-2.1.2.ucm/1.2/Wed Mar 13 08:51:29 2002//Tr21-5-24 +/glibc-EUC_CN-2.1.2.ucm/1.2/Wed Mar 13 08:51:30 2002//Tr21-5-24 +/glibc-EUC_JP-2.1.2.ucm/1.2/Wed Mar 13 08:51:30 2002//Tr21-5-24 +/glibc-EUC_KR-2.1.2.ucm/1.2/Wed Mar 13 08:51:31 2002//Tr21-5-24 +/glibc-EUC_TW-2.1.2.ucm/1.2/Wed Mar 13 08:51:32 2002//Tr21-5-24 +/glibc-ISO_8859_1-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-24 +/glibc-ISO_8859_10-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-24 +/glibc-ISO_8859_11-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-24 +/glibc-ISO_8859_13-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-24 +/glibc-ISO_8859_14-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-24 +/glibc-ISO_8859_15-2.1.2.ucm/1.2/Wed Mar 13 08:51:33 2002//Tr21-5-24 +/glibc-ISO_8859_2-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-24 +/glibc-ISO_8859_3-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-24 +/glibc-ISO_8859_4-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-24 +/glibc-ISO_8859_5-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-24 +/glibc-ISO_8859_6-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-24 +/glibc-ISO_8859_7-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-24 +/glibc-ISO_8859_8-2.1.2.ucm/1.2/Wed Mar 13 08:51:34 2002//Tr21-5-24 +/glibc-ISO_8859_9-2.1.2.ucm/1.2/Wed Mar 13 08:51:35 2002//Tr21-5-24 +/glibc-JOHAB-2.1.2.ucm/1.2/Wed Mar 13 08:51:35 2002//Tr21-5-24 +/glibc-KOI8_R-2.1.2.ucm/1.2/Wed Mar 13 08:51:35 2002//Tr21-5-24 +/glibc-KOI8_U-2.1.2.ucm/1.2/Wed Mar 13 08:51:36 2002//Tr21-5-24 +/glibc-KOI_8-2.1.2.ucm/1.2/Wed Mar 13 08:51:36 2002//Tr21-5-24 +/glibc-SJIS-2.1.2.ucm/1.2/Wed Mar 13 08:51:36 2002//Tr21-5-24 +/glibc-TIS_620-2.1.2.ucm/1.2/Wed Mar 13 08:51:36 2002//Tr21-5-24 D diff -urN 21.5.23/etc/unicode/ibm/CVS/Tag 21.5.24/etc/unicode/ibm/CVS/Tag --- 21.5.23/etc/unicode/ibm/CVS/Tag Mon Dec 19 04:19:56 2005 +++ 21.5.24/etc/unicode/ibm/CVS/Tag Mon Dec 19 04:22:10 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/unicode/mule-ucs/CVS/Entries 21.5.24/etc/unicode/mule-ucs/CVS/Entries --- 21.5.23/etc/unicode/mule-ucs/CVS/Entries Mon Dec 19 04:20:00 2005 +++ 21.5.24/etc/unicode/mule-ucs/CVS/Entries Mon Dec 19 04:22:12 2005 @@ -1,19 +1,19 @@ -/README/1.1/Mon Mar 18 09:40:27 2002//Tr21-5-23 -/chinese-cns11643-1.txt/1.1/Mon Mar 18 09:40:27 2002//Tr21-5-23 -/chinese-cns11643-2.txt/1.1/Mon Mar 18 09:40:28 2002//Tr21-5-23 -/chinese-cns11643-3.txt/1.1/Mon Mar 18 09:40:28 2002//Tr21-5-23 -/chinese-cns11643-4.txt/1.1/Mon Mar 18 09:40:29 2002//Tr21-5-23 -/chinese-cns11643-5.txt/1.1/Mon Mar 18 09:40:29 2002//Tr21-5-23 -/chinese-cns11643-6.txt/1.1/Mon Mar 18 09:40:29 2002//Tr21-5-23 -/chinese-cns11643-7.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-23 -/chinese-sisheng.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-23 -/ethiopic.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-23 -/indian-is13194.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-23 -/ipa.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-23 -/japanese-jisx0213-1.txt/1.1/Wed Mar 20 10:15:58 2002//Tr21-5-23 -/japanese-jisx0213-2.txt/1.1/Wed Mar 20 10:15:59 2002//Tr21-5-23 -/thai-tis620.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-23 -/tibetan.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-23 -/vietnamese-viscii-lower.txt/1.1/Mon Mar 18 09:40:31 2002//Tr21-5-23 -/vietnamese-viscii-upper.txt/1.1/Mon Mar 18 09:40:31 2002//Tr21-5-23 +/README/1.1/Mon Mar 18 09:40:27 2002//Tr21-5-24 +/chinese-cns11643-1.txt/1.1/Mon Mar 18 09:40:27 2002//Tr21-5-24 +/chinese-cns11643-2.txt/1.1/Mon Mar 18 09:40:28 2002//Tr21-5-24 +/chinese-cns11643-3.txt/1.1/Mon Mar 18 09:40:28 2002//Tr21-5-24 +/chinese-cns11643-4.txt/1.1/Mon Mar 18 09:40:29 2002//Tr21-5-24 +/chinese-cns11643-5.txt/1.1/Mon Mar 18 09:40:29 2002//Tr21-5-24 +/chinese-cns11643-6.txt/1.1/Mon Mar 18 09:40:29 2002//Tr21-5-24 +/chinese-cns11643-7.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-24 +/chinese-sisheng.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-24 +/ethiopic.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-24 +/indian-is13194.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-24 +/ipa.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-24 +/japanese-jisx0213-1.txt/1.1/Wed Mar 20 10:15:58 2002//Tr21-5-24 +/japanese-jisx0213-2.txt/1.1/Wed Mar 20 10:15:59 2002//Tr21-5-24 +/thai-tis620.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-24 +/tibetan.txt/1.1/Mon Mar 18 09:40:30 2002//Tr21-5-24 +/vietnamese-viscii-lower.txt/1.1/Mon Mar 18 09:40:31 2002//Tr21-5-24 +/vietnamese-viscii-upper.txt/1.1/Mon Mar 18 09:40:31 2002//Tr21-5-24 D diff -urN 21.5.23/etc/unicode/mule-ucs/CVS/Tag 21.5.24/etc/unicode/mule-ucs/CVS/Tag --- 21.5.23/etc/unicode/mule-ucs/CVS/Tag Mon Dec 19 04:20:00 2005 +++ 21.5.24/etc/unicode/mule-ucs/CVS/Tag Mon Dec 19 04:22:12 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/unicode/other/CVS/Entries 21.5.24/etc/unicode/other/CVS/Entries --- 21.5.23/etc/unicode/other/CVS/Entries Mon Dec 19 04:20:00 2005 +++ 21.5.24/etc/unicode/other/CVS/Entries Mon Dec 19 04:22:12 2005 @@ -1,2 +1,2 @@ -/lao.txt/1.1/Mon Mar 18 09:40:34 2002//Tr21-5-23 +/lao.txt/1.1/Mon Mar 18 09:40:34 2002//Tr21-5-24 D diff -urN 21.5.23/etc/unicode/other/CVS/Tag 21.5.24/etc/unicode/other/CVS/Tag --- 21.5.23/etc/unicode/other/CVS/Tag Mon Dec 19 04:20:00 2005 +++ 21.5.24/etc/unicode/other/CVS/Tag Mon Dec 19 04:22:12 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/etc/unicode/unicode-consortium/CVS/Entries 21.5.24/etc/unicode/unicode-consortium/CVS/Entries --- 21.5.23/etc/unicode/unicode-consortium/CVS/Entries Mon Dec 19 04:20:11 2005 +++ 21.5.24/etc/unicode/unicode-consortium/CVS/Entries Mon Dec 19 04:22:21 2005 @@ -1,43 +1,43 @@ -/8859-1.TXT/1.2/Wed Mar 13 08:51:38 2002//Tr21-5-23 -/8859-10.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-23 -/8859-13.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-23 -/8859-14.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-23 -/8859-15.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-23 -/8859-16.TXT/1.1/Fri Mar 29 04:46:21 2002//Tr21-5-23 -/8859-2.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-23 -/8859-3.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-23 -/8859-4.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-23 -/8859-5.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-23 -/8859-6.TXT/1.2/Wed Mar 13 08:51:40 2002//Tr21-5-23 -/8859-7.TXT/1.2/Wed Mar 13 08:51:40 2002//Tr21-5-23 -/8859-8.TXT/1.2/Wed Mar 13 08:51:40 2002//Tr21-5-23 -/8859-9.TXT/1.2/Wed Mar 13 08:51:40 2002//Tr21-5-23 -/BIG5.TXT/1.2/Wed Mar 13 08:51:40 2002//Tr21-5-23 -/CNS11643.TXT/1.2/Wed Mar 13 08:51:41 2002//Tr21-5-23 -/CP1250.TXT/1.2/Wed Mar 13 08:51:42 2002//Tr21-5-23 -/CP1251.TXT/1.2/Wed Mar 13 08:51:42 2002//Tr21-5-23 -/CP1252.TXT/1.2/Wed Mar 13 08:51:42 2002//Tr21-5-23 -/CP1253.TXT/1.2/Wed Mar 13 08:51:42 2002//Tr21-5-23 -/CP1254.TXT/1.2/Wed Mar 13 08:51:42 2002//Tr21-5-23 -/CP1255.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-23 -/CP1256.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-23 -/CP1257.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-23 -/CP1258.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-23 -/CP874.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-23 -/CP932.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-23 -/CP936.TXT/1.2/Wed Mar 13 08:51:44 2002//Tr21-5-23 -/CP949.TXT/1.2/Wed Mar 13 08:51:45 2002//Tr21-5-23 -/CP950.TXT/1.2/Wed Mar 13 08:51:47 2002//Tr21-5-23 -/GB12345.TXT/1.2/Wed Mar 13 08:51:48 2002//Tr21-5-23 -/GB2312.TXT/1.2/Wed Mar 13 08:51:48 2002//Tr21-5-23 -/HANGUL.TXT/1.2/Wed Mar 13 08:51:49 2002//Tr21-5-23 -/JIS0201.TXT/1.2/Wed Mar 13 08:51:50 2002//Tr21-5-23 -/JIS0208.TXT/1.2/Wed Mar 13 08:51:50 2002//Tr21-5-23 -/JIS0212.TXT/1.2/Wed Mar 13 08:51:50 2002//Tr21-5-23 -/JOHAB.TXT/1.2/Wed Mar 13 08:51:51 2002//Tr21-5-23 -/KOI8-R.TXT/1.2/Wed Mar 13 08:51:52 2002//Tr21-5-23 -/KSC5601.TXT/1.2/Wed Mar 13 08:51:52 2002//Tr21-5-23 -/KSX1001.TXT/1.2/Wed Mar 13 08:51:54 2002//Tr21-5-23 -/OLD5601.TXT/1.2/Wed Mar 13 08:51:54 2002//Tr21-5-23 -/SHIFTJIS.TXT/1.2/Wed Mar 13 08:51:55 2002//Tr21-5-23 +/8859-1.TXT/1.2/Wed Mar 13 08:51:38 2002//Tr21-5-24 +/8859-10.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-24 +/8859-13.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-24 +/8859-14.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-24 +/8859-15.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-24 +/8859-16.TXT/1.1/Fri Mar 29 04:46:21 2002//Tr21-5-24 +/8859-2.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-24 +/8859-3.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-24 +/8859-4.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-24 +/8859-5.TXT/1.2/Wed Mar 13 08:51:39 2002//Tr21-5-24 +/8859-6.TXT/1.2/Wed Mar 13 08:51:40 2002//Tr21-5-24 +/8859-7.TXT/1.2/Wed Mar 13 08:51:40 2002//Tr21-5-24 +/8859-8.TXT/1.2/Wed Mar 13 08:51:40 2002//Tr21-5-24 +/8859-9.TXT/1.2/Wed Mar 13 08:51:40 2002//Tr21-5-24 +/BIG5.TXT/1.2/Wed Mar 13 08:51:40 2002//Tr21-5-24 +/CNS11643.TXT/1.2/Wed Mar 13 08:51:41 2002//Tr21-5-24 +/CP1250.TXT/1.2/Wed Mar 13 08:51:42 2002//Tr21-5-24 +/CP1251.TXT/1.2/Wed Mar 13 08:51:42 2002//Tr21-5-24 +/CP1252.TXT/1.2/Wed Mar 13 08:51:42 2002//Tr21-5-24 +/CP1253.TXT/1.2/Wed Mar 13 08:51:42 2002//Tr21-5-24 +/CP1254.TXT/1.2/Wed Mar 13 08:51:42 2002//Tr21-5-24 +/CP1255.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-24 +/CP1256.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-24 +/CP1257.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-24 +/CP1258.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-24 +/CP874.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-24 +/CP932.TXT/1.2/Wed Mar 13 08:51:43 2002//Tr21-5-24 +/CP936.TXT/1.2/Wed Mar 13 08:51:44 2002//Tr21-5-24 +/CP949.TXT/1.2/Wed Mar 13 08:51:45 2002//Tr21-5-24 +/CP950.TXT/1.2/Wed Mar 13 08:51:47 2002//Tr21-5-24 +/GB12345.TXT/1.2/Wed Mar 13 08:51:48 2002//Tr21-5-24 +/GB2312.TXT/1.2/Wed Mar 13 08:51:48 2002//Tr21-5-24 +/HANGUL.TXT/1.2/Wed Mar 13 08:51:49 2002//Tr21-5-24 +/JIS0201.TXT/1.2/Wed Mar 13 08:51:50 2002//Tr21-5-24 +/JIS0208.TXT/1.2/Wed Mar 13 08:51:50 2002//Tr21-5-24 +/JIS0212.TXT/1.2/Wed Mar 13 08:51:50 2002//Tr21-5-24 +/JOHAB.TXT/1.2/Wed Mar 13 08:51:51 2002//Tr21-5-24 +/KOI8-R.TXT/1.2/Wed Mar 13 08:51:52 2002//Tr21-5-24 +/KSC5601.TXT/1.2/Wed Mar 13 08:51:52 2002//Tr21-5-24 +/KSX1001.TXT/1.2/Wed Mar 13 08:51:54 2002//Tr21-5-24 +/OLD5601.TXT/1.2/Wed Mar 13 08:51:54 2002//Tr21-5-24 +/SHIFTJIS.TXT/1.2/Wed Mar 13 08:51:55 2002//Tr21-5-24 D diff -urN 21.5.23/etc/unicode/unicode-consortium/CVS/Tag 21.5.24/etc/unicode/unicode-consortium/CVS/Tag --- 21.5.23/etc/unicode/unicode-consortium/CVS/Tag Mon Dec 19 04:20:11 2005 +++ 21.5.24/etc/unicode/unicode-consortium/CVS/Tag Mon Dec 19 04:22:21 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/info/CVS/Entries 21.5.24/info/CVS/Entries --- 21.5.23/info/CVS/Entries Mon Dec 19 04:20:11 2005 +++ 21.5.24/info/CVS/Entries Mon Dec 19 04:22:21 2005 @@ -1,3 +1,3 @@ -/.cvsignore/1.3/Tue Dec 18 22:55:34 2001//Tr21-5-23 -/dir/1.34/Wed Feb 23 18:56:44 2005//Tr21-5-23 +/.cvsignore/1.3/Tue Dec 18 22:55:34 2001//Tr21-5-24 +/dir/1.34/Wed Feb 23 18:56:44 2005//Tr21-5-24 D diff -urN 21.5.23/info/CVS/Tag 21.5.24/info/CVS/Tag --- 21.5.23/info/CVS/Tag Mon Dec 19 04:20:11 2005 +++ 21.5.24/info/CVS/Tag Mon Dec 19 04:22:21 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/lib-src/CVS/Entries 21.5.24/lib-src/CVS/Entries --- 21.5.23/lib-src/CVS/Entries Mon Dec 19 04:20:12 2005 +++ 21.5.24/lib-src/CVS/Entries Mon Dec 19 04:22:23 2005 @@ -1,57 +1,57 @@ -/.cvsignore/1.6/Tue Jun 28 12:02:39 2005//Tr21-5-23 -/ChangeLog/1.197/Wed Oct 26 15:13:33 2005//Tr21-5-23 -/Makefile.in.in/1.47/Fri Apr 8 23:10:36 2005//Tr21-5-23 -/README/1.1.1.1/Wed Dec 18 22:42:32 1996//Tr21-5-23 -/ad2c/1.2/Sun Aug 17 03:23:39 1997//Tr21-5-23 -/add-big-package.sh/1.4/Thu Apr 12 18:20:59 2001//Tr21-5-23 -/b2m.c/1.7/Thu Apr 12 18:20:59 2001//Tr21-5-23 -/config.values.in/1.24/Fri Mar 11 11:20:00 2005//Tr21-5-23 -/config.values.sh/1.4/Fri Mar 11 11:20:00 2005//Tr21-5-23 -/cvtmail.c/1.4/Sun Jun 10 10:42:17 2001//Tr21-5-23 -/digest-doc.c/1.6/Thu Nov 4 23:05:47 2004//Tr21-5-23 -/ellcc.c/1.8/Tue Oct 14 05:02:57 2003//Tr21-5-23 -/ellcc.h.in/1.4/Mon Nov 8 15:14:45 2004//Tr21-5-23 -/emacs.csh/1.1.1.1/Wed Dec 18 22:42:33 1996//Tr21-5-23 -/etags.c/1.33/Thu Feb 3 18:09:26 2005//Tr21-5-23 -/fakemail.c/1.9/Fri Mar 25 16:34:54 2005//Tr21-5-23 -/getopt.c/1.7/Thu Apr 12 18:21:01 2001//Tr21-5-23 -/getopt.h/1.3/Thu Apr 12 18:21:01 2001//Tr21-5-23 -/getopt1.c/1.5/Thu Apr 12 18:21:01 2001//Tr21-5-23 -/gnuattach/1.1/Sat Jun 21 20:10:06 1997//Tr21-5-23 -/gnuclient.c/1.27/Mon Dec 6 23:23:41 2004//Tr21-5-23 -/gnudepend.pl/1.2/Mon Oct 12 20:45:26 1998//Tr21-5-23 -/gnudoit/1.2/Thu Apr 23 02:07:47 1998//Tr21-5-23 -/gnuserv.c/1.16/Mon Sep 20 19:19:10 2004//Tr21-5-23 -/gnuserv.h/1.11/Thu Aug 29 19:45:20 2002//Tr21-5-23 -/gnuslib.c/1.12/Mon Aug 13 04:45:48 2001//Tr21-5-23 -/gzip-el.sh/1.4/Thu Apr 12 18:21:02 2001//Tr21-5-23 -/hexl.c/1.3/Thu Apr 12 18:21:02 2001//Tr21-5-23 -/i.c/1.6/Fri Oct 14 01:02:30 2005//Tr21-5-23 -/insert-data-in-exec.c/1.3/Wed Jan 26 03:40:10 2005//Tr21-5-23 -/installexe.sh/1.5/Mon Sep 19 00:36:05 2005//Tr21-5-23 -/leditcfns.c/1.1.1.1/Wed Dec 18 22:42:33 1996//Tr21-5-23 -/make-docfile.c/1.17/Tue Feb 22 08:05:58 2005//Tr21-5-23 -/make-dump-id.c/1.6/Thu Nov 4 23:05:47 2004//Tr21-5-23 -/make-msgfile.c/1.4/Thu Nov 4 23:05:48 2004//Tr21-5-23 -/make-msgfile.lex/1.3/Thu Nov 4 23:05:48 2004//Tr21-5-23 -/make-mswin-unicode.pl/1.5/Thu Nov 4 23:05:48 2004//Tr21-5-23 -/make-path.c/1.6/Sun Jun 10 10:42:17 2001//Tr21-5-23 -/make-po.c/1.2/Thu Apr 12 18:21:03 2001//Tr21-5-23 -/mmencode.c/1.9/Fri Oct 14 01:02:30 2005//Tr21-5-23 -/movemail.c/1.21/Mon Feb 14 03:40:45 2005//Tr21-5-23 -/ootags.c/1.5/Mon Aug 13 04:45:49 2001//Tr21-5-23 -/pop.c/1.10/Mon Sep 20 19:19:11 2004//Tr21-5-23 -/pop.h/1.2/Sun Jun 10 10:42:17 2001//Tr21-5-23 -/profile.c/1.10/Thu Nov 4 23:05:48 2004//Tr21-5-23 -/qsort.c/1.2/Thu Apr 12 18:21:05 2001//Tr21-5-23 -/rcs-checkin/1.2/Wed May 14 02:01:35 1997//Tr21-5-23 -/rcs2log/1.3/Tue Jan 28 03:19:04 2003//Tr21-5-23 -/sorted-doc.c/1.7/Thu Nov 4 23:05:48 2004//Tr21-5-23 -/tcp.c/1.3/Thu Aug 29 19:45:20 2002//Tr21-5-23 -/update-autoloads.sh/1.22/Thu Apr 12 18:21:05 2001//Tr21-5-23 -/update-custom.sh/1.9/Wed Feb 17 16:41:13 1999//Tr21-5-23 -/vcdiff/1.1.1.1/Wed Dec 18 22:42:33 1996//Tr21-5-23 -/wakeup.c/1.4/Thu Apr 12 18:21:05 2001//Tr21-5-23 -/winclient.c/1.4/Fri Oct 14 01:02:30 2005//Tr21-5-23 -/yow.c/1.7/Wed Mar 13 08:51:59 2002//Tr21-5-23 +/.cvsignore/1.6/Tue Jun 28 12:02:39 2005//Tr21-5-24 +/ChangeLog/1.203/Sun Dec 18 19:05:41 2005//Tr21-5-24 +/Makefile.in.in/1.49/Tue Nov 22 07:14:42 2005//Tr21-5-24 +/README/1.1.1.1/Wed Dec 18 22:42:32 1996//Tr21-5-24 +/ad2c/1.2/Sun Aug 17 03:23:39 1997//Tr21-5-24 +/add-big-package.sh/1.4/Thu Apr 12 18:20:59 2001//Tr21-5-24 +/b2m.c/1.7/Thu Apr 12 18:20:59 2001//Tr21-5-24 +/config.values.in/1.24/Fri Mar 11 11:20:00 2005//Tr21-5-24 +/config.values.sh/1.4/Fri Mar 11 11:20:00 2005//Tr21-5-24 +/cvtmail.c/1.4/Sun Jun 10 10:42:17 2001//Tr21-5-24 +/digest-doc.c/1.6/Thu Nov 4 23:05:47 2004//Tr21-5-24 +/ellcc.c/1.8/Tue Oct 14 05:02:57 2003//Tr21-5-24 +/ellcc.h.in/1.4/Mon Nov 8 15:14:45 2004//Tr21-5-24 +/emacs.csh/1.1.1.1/Wed Dec 18 22:42:33 1996//Tr21-5-24 +/etags.c/1.34/Thu Nov 24 12:37:59 2005//Tr21-5-24 +/fakemail.c/1.9/Fri Mar 25 16:34:54 2005//Tr21-5-24 +/getopt.c/1.7/Thu Apr 12 18:21:01 2001//Tr21-5-24 +/getopt.h/1.3/Thu Apr 12 18:21:01 2001//Tr21-5-24 +/getopt1.c/1.5/Thu Apr 12 18:21:01 2001//Tr21-5-24 +/gnuattach/1.1/Sat Jun 21 20:10:06 1997//Tr21-5-24 +/gnuclient.c/1.27/Mon Dec 6 23:23:41 2004//Tr21-5-24 +/gnudepend.pl/1.2/Mon Oct 12 20:45:26 1998//Tr21-5-24 +/gnudoit/1.2/Thu Apr 23 02:07:47 1998//Tr21-5-24 +/gnuserv.c/1.16/Mon Sep 20 19:19:10 2004//Tr21-5-24 +/gnuserv.h/1.11/Thu Aug 29 19:45:20 2002//Tr21-5-24 +/gnuslib.c/1.12/Mon Aug 13 04:45:48 2001//Tr21-5-24 +/gzip-el.sh/1.4/Thu Apr 12 18:21:02 2001//Tr21-5-24 +/hexl.c/1.3/Thu Apr 12 18:21:02 2001//Tr21-5-24 +/i.c/1.6/Fri Oct 14 01:02:30 2005//Tr21-5-24 +/insert-data-in-exec.c/1.3/Wed Jan 26 03:40:10 2005//Tr21-5-24 +/installexe.sh/1.5/Mon Sep 19 00:36:05 2005//Tr21-5-24 +/leditcfns.c/1.1.1.1/Wed Dec 18 22:42:33 1996//Tr21-5-24 +/make-docfile.c/1.17/Tue Feb 22 08:05:58 2005//Tr21-5-24 +/make-dump-id.c/1.6/Thu Nov 4 23:05:47 2004//Tr21-5-24 +/make-msgfile.c/1.4/Thu Nov 4 23:05:48 2004//Tr21-5-24 +/make-msgfile.lex/1.3/Thu Nov 4 23:05:48 2004//Tr21-5-24 +/make-mswin-unicode.pl/1.5/Thu Nov 4 23:05:48 2004//Tr21-5-24 +/make-path.c/1.6/Sun Jun 10 10:42:17 2001//Tr21-5-24 +/make-po.c/1.2/Thu Apr 12 18:21:03 2001//Tr21-5-24 +/mmencode.c/1.9/Fri Oct 14 01:02:30 2005//Tr21-5-24 +/movemail.c/1.21/Mon Feb 14 03:40:45 2005//Tr21-5-24 +/ootags.c/1.5/Mon Aug 13 04:45:49 2001//Tr21-5-24 +/pop.c/1.10/Mon Sep 20 19:19:11 2004//Tr21-5-24 +/pop.h/1.2/Sun Jun 10 10:42:17 2001//Tr21-5-24 +/profile.c/1.10/Thu Nov 4 23:05:48 2004//Tr21-5-24 +/qsort.c/1.2/Thu Apr 12 18:21:05 2001//Tr21-5-24 +/rcs-checkin/1.2/Wed May 14 02:01:35 1997//Tr21-5-24 +/rcs2log/1.3/Tue Jan 28 03:19:04 2003//Tr21-5-24 +/sorted-doc.c/1.7/Thu Nov 4 23:05:48 2004//Tr21-5-24 +/tcp.c/1.3/Thu Aug 29 19:45:20 2002//Tr21-5-24 +/update-autoloads.sh/1.22/Thu Apr 12 18:21:05 2001//Tr21-5-24 +/update-custom.sh/1.9/Wed Feb 17 16:41:13 1999//Tr21-5-24 +/vcdiff/1.1.1.1/Wed Dec 18 22:42:33 1996//Tr21-5-24 +/wakeup.c/1.4/Thu Apr 12 18:21:05 2001//Tr21-5-24 +/winclient.c/1.4/Fri Oct 14 01:02:30 2005//Tr21-5-24 +/yow.c/1.7/Wed Mar 13 08:51:59 2002//Tr21-5-24 D diff -urN 21.5.23/lib-src/CVS/Tag 21.5.24/lib-src/CVS/Tag --- 21.5.23/lib-src/CVS/Tag Mon Dec 19 04:20:12 2005 +++ 21.5.24/lib-src/CVS/Tag Mon Dec 19 04:22:23 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/lib-src/ChangeLog 21.5.24/lib-src/ChangeLog --- 21.5.23/lib-src/ChangeLog Thu Oct 27 00:13:33 2005 +++ 21.5.24/lib-src/ChangeLog Mon Dec 19 04:05:41 2005 @@ -1,3 +1,22 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-11-22 Malcolm Purvis + + * etags.c: Update to author version 17.15. + +2005-11-22 Ben Wing + + * Makefile.in.in: + Ignore errors from rm during clean. + +2005-11-13 Ben Wing + + * Makefile.in.in: + Add targets distclean-noconfig, realclean-noconfig, extraclean-noconfig. + Do some refactoring for cleanliness. + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. diff -urN 21.5.23/lib-src/Makefile.in.in 21.5.24/lib-src/Makefile.in.in --- 21.5.23/lib-src/Makefile.in.in Sat Apr 9 08:10:36 2005 +++ 21.5.24/lib-src/Makefile.in.in Tue Nov 22 16:14:42 2005 @@ -1,6 +1,7 @@ ## Makefile for lib-src subdirectory in XEmacs. ## Copyright (C) 1985, 1987, 1988, 1993, 1994 Free Software Foundation, Inc. ## Copyright (C) 1996, 1997 Sun Microsystems, Inc. +## Copyright (C) 2005 Ben Wing. ## This file is part of XEmacs. @@ -270,16 +271,23 @@ cd ${archlibdir} && $(RM) ${PRIVATE_INSTALLABLES} .PHONY: mostlyclean clean distclean realclean extraclean +.PHONY: distclean-noconfig realclean-noconfig extraclean-noconfig mostlyclean: - $(RM) *.o *.i core + -$(RM) *.o *.i core clean: mostlyclean - $(RM) ${EXES} *.exe -distclean: clean - $(RM) DOC *.tab.c *.tab.h TAGS ellcc.h - $(RM) GNUmakefile Makefile Makefile.in blessmail config.values + -$(RM) ${EXES} *.exe +distclean-noconfig: clean + -$(RM) DOC *.tab.c *.tab.h TAGS ellcc.h blessmail config.values +## This is used in making a distribution. +## Do not use it on development directories! +distclean: distclean-noconfig + -$(RM) GNUmakefile Makefile Makefile.in +realclean-noconfig: distclean-noconfig realclean: distclean -extraclean: distclean - $(RM) *~ \#* +extraclean-noconfig: realclean-noconfig + -$(RM) *~ \#* +extraclean: realclean + -$(RM) *~ \#* ## Test the contents of the directory. check: diff -urN 21.5.23/lib-src/etags.c 21.5.24/lib-src/etags.c --- 21.5.23/lib-src/etags.c Fri Feb 4 03:09:26 2005 +++ 21.5.24/lib-src/etags.c Thu Nov 24 21:37:59 2005 @@ -1,6 +1,7 @@ /* Tags file maker to go with GNU Emacs -*- coding: latin-1 -*- - Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2004 - Free Software Foundation, Inc. and Ken Arnold + Copyright (C) 1984, 1987, 1988, 1989, 1993, 1994, 1995, + 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005 Free Software Foundation, Inc. and Ken Arnold This file is not considered part of GNU Emacs. @@ -16,7 +17,7 @@ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * Authors: @@ -40,7 +41,7 @@ * configuration file containing regexp definitions for etags. */ -char pot_etags_version[] = "@(#) pot revision number is 17.11"; +char pot_etags_version[] = "@(#) pot revision number is 17.15"; #define TRUE 1 #define FALSE 0 @@ -489,6 +490,7 @@ #if LONG_OPTIONS static struct option longopts[] = { + { "append", no_argument, NULL, 'a' }, { "packages-only", no_argument, &packages_only, TRUE }, { "c++", no_argument, NULL, 'C' }, { "declarations", no_argument, &declarations, TRUE }, @@ -508,7 +510,7 @@ { "parse-stdin", required_argument, NULL, STDIN }, { "version", no_argument, NULL, 'V' }, -#if CTAGS /* Etags options */ +#if CTAGS /* Ctags options */ { "backward-search", no_argument, NULL, 'B' }, { "cxref", no_argument, NULL, 'x' }, { "defines", no_argument, NULL, 'd' }, @@ -519,8 +521,7 @@ { "vgrind", no_argument, NULL, 'v' }, { "no-warn", no_argument, NULL, 'w' }, -#else /* Ctags options */ - { "append", no_argument, NULL, 'a' }, +#else /* Etags options */ { "no-defines", no_argument, NULL, 'D' }, { "no-globals", no_argument, &globals, FALSE }, { "include", required_argument, NULL, 'i' }, @@ -888,8 +889,7 @@ Absolute names are stored in the output file as they are.\n\ Relative ones are stored relative to the output file's directory.\n"); - if (!CTAGS) - puts ("-a, --append\n\ + puts ("-a, --append\n\ Append tag entries to existing tags file."); puts ("--packages-only\n\ @@ -989,9 +989,9 @@ if (CTAGS) { puts ("-v, --vgrind\n\ - Generates an index of items intended for human consumption,\n\ - similar to the output of vgrind. The index is sorted, and\n\ - gives the page number of each item."); + Print on the standard output an index of items intended for\n\ + human consumption, similar to the output of vgrind. The index\n\ + is sorted, and gives the page number of each item."); puts ("-w, --no-warn\n\ Suppress warning messages about entries defined in multiple\n\ files."); @@ -1196,10 +1196,10 @@ if (!LONG_OPTIONS) optstring += 1; /* remove the initial '-' */ optstring = concat (optstring, - "Cf:Il:o:SVhH", - (CTAGS) ? "BxdtTuvw" : "aDi:"); + "aCf:Il:o:SVhH", + (CTAGS) ? "BxdtTuvw" : "Di:"); - while ((opt = getopt_long (argc, argv, optstring, longopts, 0)) != EOF) + while ((opt = getopt_long (argc, argv, optstring, longopts, NULL)) != EOF) switch (opt) { case 0: @@ -1227,6 +1227,7 @@ break; /* Common options. */ + case 'a': append_to_tagfile = TRUE; break; case 'C': cplusplus = TRUE; break; case 'f': /* for compatibility with old makefiles */ case 'o': @@ -1276,7 +1277,6 @@ break; /* Etags options */ - case 'a': append_to_tagfile = TRUE; break; case 'D': constantypedefs = FALSE; break; case 'i': included_files[nincluded_files++] = optarg; break; @@ -1423,7 +1423,8 @@ if (!CTAGS || cxref_style) { - put_entries (nodehead); /* write the remainig tags (ETAGS) */ + /* Write the remaining tags to tagf (ETAGS) or stdout (CXREF). */ + put_entries (nodehead); free_tree (nodehead); nodehead = NULL; if (!CTAGS) @@ -1437,10 +1438,11 @@ while (nincluded_files-- > 0) fprintf (tagf, "\f\n%s,include\n", *included_files++); + + if (fclose (tagf) == EOF) + pfatal (tagfile); } - if (fclose (tagf) == EOF) - pfatal (tagfile); exit (EXIT_SUCCESS); } @@ -1475,12 +1477,13 @@ if (fclose (tagf) == EOF) pfatal (tagfile); - if (update) - { - char cmd[2*BUFSIZ+10]; - sprintf (cmd, "sort -o %.*s %.*s", BUFSIZ, tagfile, BUFSIZ, tagfile); - exit (system (cmd)); - } + if (CTAGS) + if (append_to_tagfile || update) + { + char cmd[2*BUFSIZ+10]; + sprintf (cmd, "sort -o %.*s %.*s", BUFSIZ, tagfile, BUFSIZ, tagfile); + exit (system (cmd)); + } return EXIT_SUCCESS; } diff -urN 21.5.23/lisp/CVS/Entries 21.5.24/lisp/CVS/Entries --- 21.5.23/lisp/CVS/Entries Mon Dec 19 04:20:27 2005 +++ 21.5.24/lisp/CVS/Entries Mon Dec 19 04:22:40 2005 @@ -1,208 +1,209 @@ -/.cvsignore/1.3/Sat May 12 11:39:18 2001//Tr21-5-23 -/ChangeLog/1.690/Wed Oct 26 15:13:47 2005//Tr21-5-23 -/ChangeLog.GTK/1.2/Thu Apr 12 18:21:09 2001//Tr21-5-23 -/README/1.6/Sun Aug 26 10:25:12 2001//Tr21-5-23 -/abbrev.el/1.6/Sun Apr 14 12:42:04 2002//Tr21-5-23 -/about.el/1.66/Wed Mar 2 21:37:55 2005//Tr21-5-23 -/alist.el/1.4/Sun Jun 10 10:42:21 2001//Tr21-5-23 -/apropos.el/1.10/Wed Sep 15 08:30:26 2004//Tr21-5-23 -/auto-save.el/1.8/Fri Mar 29 04:46:26 2002//Tr21-5-23 -/auto-show.el/1.6/Thu Apr 12 18:21:11 2001//Tr21-5-23 -/autoload.el/1.22/Fri Feb 4 03:57:34 2005//Tr21-5-23 -/backquote.el/1.4/Thu Apr 12 18:21:11 2001//Tr21-5-23 -/behavior-defs.el/1.5/Thu Feb 3 05:26:41 2005//Tr21-5-23 -/behavior.el/1.5/Thu Feb 3 05:26:40 2005//Tr21-5-23 -/blessmail.el/1.1/Mon Nov 24 05:01:47 1997//Tr21-5-23 -/buff-menu.el/1.9/Fri Mar 15 07:43:18 2002//Tr21-5-23 -/buffer.el/1.5/Wed Feb 16 11:07:30 2005//Tr21-5-23 -/build-report.el/1.14/Fri Oct 21 10:34:35 2005//Tr21-5-23 -/byte-optimize.el/1.10/Fri Feb 14 11:50:36 2003//Tr21-5-23 -/bytecomp-runtime.el/1.12/Fri Dec 17 18:11:29 2004//Tr21-5-23 -/bytecomp.el/1.19/Fri Aug 13 21:19:15 2004//Tr21-5-23 -/callers-of-rpt.el/1.2/Thu Apr 12 18:21:12 2001//Tr21-5-23 -/check-features.el/1.4/Fri Mar 29 04:46:27 2002//Tr21-5-23 -/cl-compat.el/1.4/Sat Jun 26 21:25:24 2004//Tr21-5-23 -/cl-extra.el/1.18/Thu Nov 4 23:05:54 2004//Tr21-5-23 -/cl-macs.el/1.17/Wed Sep 22 02:05:49 2004//Tr21-5-23 -/cl-seq.el/1.7/Sat Jun 26 21:25:24 2004//Tr21-5-23 -/cl.el/1.15/Wed Jan 26 09:53:32 2005//Tr21-5-23 -/cmdloop.el/1.18/Sun Jun 26 18:04:49 2005//Tr21-5-23 -/code-cmds.el/1.4/Fri Feb 21 06:56:47 2003//Tr21-5-23 -/code-files.el/1.19/Tue Oct 7 21:52:15 2003//Tr21-5-23 -/code-init.el/1.10/Wed Jan 26 09:51:23 2005//Tr21-5-23 -/code-process.el/1.14/Thu Oct 28 11:31:11 2004//Tr21-5-23 -/coding.el/1.10/Sun Sep 1 06:41:41 2002//Tr21-5-23 -/compat.el/1.3/Sun May 5 11:30:23 2002//Tr21-5-23 -/config.el/1.4/Thu Apr 12 18:21:15 2001//Tr21-5-23 -/console.el/1.3/Fri May 4 22:42:00 2001//Tr21-5-23 -/cus-dep.el/1.10/Thu Feb 3 04:29:33 2005//Tr21-5-23 -/cus-edit.el/1.23/Thu Feb 3 04:29:33 2005//Tr21-5-23 -/cus-face.el/1.12/Tue Oct 25 11:28:24 2005//Tr21-5-23 -/cus-file.el/1.2/Thu Apr 12 18:21:15 2001//Tr21-5-23 -/cus-load.el/1.3/Thu Apr 12 18:21:15 2001//Tr21-5-23 -/cus-start.el/1.9/Thu Dec 12 03:20:36 2002//Tr21-5-23 -/custom.el/1.13/Thu Feb 3 04:29:33 2005//Tr21-5-23 -/derived.el/1.10/Fri Jun 18 15:48:38 2004//Tr21-5-23 -/device.el/1.8/Mon Mar 8 15:22:49 2004//Tr21-5-23 -/diagnose.el/1.4/Sun May 15 16:37:56 2005//Tr21-5-23 -/dialog-gtk.el/1.8/Thu Nov 4 23:05:54 2004//Tr21-5-23 -/dialog-items.el/1.3/Tue Jun 4 06:04:15 2002//Tr21-5-23 -/dialog.el/1.14/Thu Apr 14 05:58:45 2005//Tr21-5-23 -/disass.el/1.2/Thu Apr 12 18:21:17 2001//Tr21-5-23 -/disp-table.el/1.2/Sat Dec 6 22:26:09 1997//Tr21-5-23 -/dragdrop.el/1.11/Fri Mar 15 07:43:18 2002//Tr21-5-23 -/dump-paths.el/1.10/Sat Mar 1 07:25:27 2003//Tr21-5-23 -/dumped-lisp.el/1.56/Tue Oct 4 17:51:20 2005//Tr21-5-23 -/easy-mmode.el/1.1/Thu Feb 3 07:11:20 2005//Tr21-5-23 -/easymenu.el/1.8/Fri Mar 25 16:15:56 2005//Tr21-5-23 -/etags.el/1.16/Mon May 10 06:26:31 2004//Tr21-5-23 -/events.el/1.4/Sun Jun 26 18:04:50 2005//Tr21-5-23 -/extents.el/1.5/Thu Apr 12 18:21:17 2001//Tr21-5-23 -/faces.el/1.36/Tue Oct 25 11:28:24 2005//Tr21-5-23 -/files.el/1.74/Fri Apr 8 14:07:00 2005//Tr21-5-23 -/fill.el/1.8/Wed Jan 26 09:56:06 2005//Tr21-5-23 -/find-paths.el/1.29/Sat Jan 15 15:17:36 2005//Tr21-5-23 -/finder.el/1.9/Sun Oct 9 14:23:06 2005//Tr21-5-23 -/float-sup.el/1.3/Thu Apr 12 18:21:19 2001//Tr21-5-23 -/font-lock.el/1.29/Wed Jan 26 04:18:15 2005//Tr21-5-23 -/font-menu.el/1.8/Fri Jan 28 02:58:39 2005//Tr21-5-23 -/font.el/1.17/Fri Mar 25 15:58:03 2005//Tr21-5-23 -/fontl-hooks.el/1.1/Sat Nov 22 06:47:48 1997//Tr21-5-23 -/format.el/1.10/Thu Apr 12 18:21:19 2001//Tr21-5-23 -/frame.el/1.24/Fri Jan 28 02:58:40 2005//Tr21-5-23 -/gdk.el/1.3/Fri May 4 22:42:02 2001//Tr21-5-23 -/generic-widgets.el/1.3/Fri May 4 22:42:02 2001//Tr21-5-23 -/glade.el/1.3/Fri May 4 22:42:02 2001//Tr21-5-23 -/glyphs.el/1.8/Tue Feb 22 23:38:50 2005//Tr21-5-23 -/gnome-widgets.el/1.3/Fri May 4 22:42:03 2001//Tr21-5-23 -/gnome.el/1.3/Fri May 4 22:42:03 2001//Tr21-5-23 -/gnuserv.el/1.14/Tue Dec 14 09:56:48 2004//Tr21-5-23 -/gpm.el/1.4/Sun Jun 10 10:42:23 2001//Tr21-5-23 -/gtk-compose.el/1.3/Sun Jun 26 18:04:50 2005//Tr21-5-23 -/gtk-extra.el/1.3/Fri May 4 22:42:03 2001//Tr21-5-23 -/gtk-faces.el/1.10/Thu Jun 20 21:18:03 2002//Tr21-5-23 -/gtk-ffi.el/1.2/Thu Apr 12 18:21:22 2001//Tr21-5-23 -/gtk-file-dialog.el/1.3/Fri May 4 22:42:04 2001//Tr21-5-23 -/gtk-font-menu.el/1.6/Fri Jan 28 02:58:40 2005//Tr21-5-23 -/gtk-glyphs.el/1.2/Thu Apr 12 18:21:23 2001//Tr21-5-23 -/gtk-init.el/1.5/Sat May 5 08:40:02 2001//Tr21-5-23 -/gtk-iso8859-1.el/1.2/Thu Apr 12 18:21:24 2001//Tr21-5-23 -/gtk-marshal.el/1.7/Fri Jan 28 00:32:20 2005//Tr21-5-23 -/gtk-mouse.el/1.2/Thu Apr 12 18:21:24 2001//Tr21-5-23 -/gtk-package.el/1.3/Fri May 4 22:42:04 2001//Tr21-5-23 -/gtk-password-dialog.el/1.3/Fri May 4 22:42:04 2001//Tr21-5-23 -/gtk-select.el/1.2/Thu Apr 12 18:21:25 2001//Tr21-5-23 -/gtk-widget-accessors.el/1.6/Fri Jun 22 01:49:59 2001//Tr21-5-23 -/gtk-widgets.el/1.4/Sat May 15 07:31:44 2004//Tr21-5-23 -/gtk.el/1.3/Fri May 4 22:42:05 2001//Tr21-5-23 -/gui.el/1.8/Fri Mar 15 07:43:19 2002//Tr21-5-23 -/gutter-items.el/1.8/Tue Mar 18 06:58:20 2003//Tr21-5-23 -/gutter.el/1.3/Sat Apr 28 07:48:40 2001//Tr21-5-23 -/hash-table.el/1.1/Fri May 4 22:42:06 2001//Tr21-5-23 -/help-macro.el/1.5/Wed Sep 15 08:30:26 2004//Tr21-5-23 -/help.el/1.45/Mon Oct 10 02:45:32 2005//Tr21-5-23 -/hyper-apropos.el/1.15/Wed Sep 15 08:30:27 2004//Tr21-5-23 -/indent.el/1.5/Sun Apr 14 12:42:04 2002//Tr21-5-23 -/info.el/1.34/Mon Dec 6 03:51:21 2004//Tr21-5-23 -/isearch-mode.el/1.15/Sun Jun 26 18:04:50 2005//Tr21-5-23 -/iso8859-1.el/1.3/Thu Apr 12 18:21:28 2001//Tr21-5-23 -/itimer-autosave.el/1.2/Sun Nov 9 07:06:33 1997//Tr21-5-23 -/itimer.el/1.15/Sun Sep 26 02:20:31 2004//Tr21-5-23 -/keydefs.el/1.18/Mon Apr 28 16:18:23 2003//Tr21-5-23 -/keymap.el/1.12/Sun Jun 26 18:04:50 2005//Tr21-5-23 -/ldap.el/1.12/Fri May 4 22:42:09 2001//Tr21-5-23 -/lib-complete.el/1.9/Wed Nov 27 07:15:07 2002//Tr21-5-23 -/lisp-mnt.el/1.9/Fri Mar 15 07:43:20 2002//Tr21-5-23 -/lisp-mode.el/1.23/Sun Jun 6 23:58:44 2004//Tr21-5-23 -/lisp.el/1.5/Thu Apr 12 18:21:29 2001//Tr21-5-23 -/list-mode.el/1.9/Tue May 25 22:13:28 2004//Tr21-5-23 -/loaddefs.el/1.7/Thu Apr 12 18:21:30 2001//Tr21-5-23 -/loadhist.el/1.6/Mon Nov 18 06:52:28 2002//Tr21-5-23 -/loadup-el.el/1.1/Sat Nov 8 21:13:07 1997//Tr21-5-23 -/loadup.el/1.31/Mon Dec 27 12:25:14 2004//Tr21-5-23 -/make-docfile.el/1.28/Mon Dec 27 12:25:14 2004//Tr21-5-23 -/map-ynp.el/1.5/Thu May 5 17:10:32 2005//Tr21-5-23 -/menubar-items.el/1.47/Tue May 10 17:35:58 2005//Tr21-5-23 -/menubar.el/1.12/Mon Feb 7 19:30:08 2005//Tr21-5-23 -/minibuf.el/1.30/Tue Oct 18 20:49:42 2005//Tr21-5-23 -/misc.el/1.2/Sun Nov 9 07:06:36 1997//Tr21-5-23 -/mode-motion.el/1.4/Mon May 18 05:42:08 1998//Tr21-5-23 -/modeline.el/1.23/Wed Mar 13 08:52:07 2002//Tr21-5-23 -/mouse.el/1.31/Wed Jan 26 04:47:14 2005//Tr21-5-23 -/movemail.el/1.2/Thu Apr 12 18:21:31 2001//Tr21-5-23 -/msw-faces.el/1.18/Fri Jan 28 02:58:40 2005//Tr21-5-23 -/msw-font-menu.el/1.8/Fri Jan 28 02:58:40 2005//Tr21-5-23 -/msw-glyphs.el/1.12/Thu Feb 20 08:19:29 2003//Tr21-5-23 -/msw-init.el/1.10/Thu May 9 08:33:46 2002//Tr21-5-23 -/msw-mouse.el/1.4/Sun Jul 19 17:46:44 1998//Tr21-5-23 -/msw-select.el/1.7/Thu Apr 12 18:21:32 2001//Tr21-5-23 -/multicast.el/1.4/Tue May 28 08:44:30 2002//Tr21-5-23 -/mwheel.el/1.7/Thu Feb 3 05:26:41 2005//Tr21-5-23 -/newcomment.el/1.3/Wed Jan 26 09:57:14 2005//Tr21-5-23 -/next-error.el/1.2/Mon Oct 24 10:07:26 2005//Tr21-5-23 -/objects.el/1.5/Thu Apr 12 18:21:32 2001//Tr21-5-23 -/obsolete.el/1.18/Fri Jan 28 02:58:41 2005//Tr21-5-23 -/occur.el/1.2/Mon Oct 24 10:07:27 2005//Tr21-5-23 -/package-admin.el/1.25/Mon Dec 27 12:25:14 2004//Tr21-5-23 -/package-get.el/1.71/Mon Oct 24 22:40:21 2005//Tr21-5-23 -/package-info.el/1.9/Mon Apr 14 03:40:27 2003//Tr21-5-23 -/package-net.el/1.5/Mon Apr 14 03:40:27 2003//Tr21-5-23 -/package-ui.el/1.24/Sat Feb 19 22:25:13 2005//Tr21-5-23 -/packages.el/1.53/Thu Feb 3 23:56:53 2005//Tr21-5-23 -/page.el/1.4/Wed Jan 26 09:56:06 2005//Tr21-5-23 -/paragraphs.el/1.11/Thu Feb 10 03:16:59 2005//Tr21-5-23 -/paths.el/1.6/Thu Apr 12 18:21:34 2001//Tr21-5-23 -/picture.el/1.3/Wed Mar 13 08:52:07 2002//Tr21-5-23 -/post-gc.el/1.2/Sat Jul 26 14:01:23 2003//Tr21-5-23 -/printer.el/1.17/Sun Mar 9 02:27:33 2003//Tr21-5-23 -/process.el/1.19/Sun Jan 9 09:44:44 2005//Tr21-5-23 -/raw-process.el/1.1/Thu Feb 6 10:44:06 2003//Tr21-5-23 -/rect.el/1.3/Mon Dec 3 18:02:47 2001//Tr21-5-23 -/regexp-opt.el/1.2/Thu Feb 3 07:30:22 2005//Tr21-5-23 -/register.el/1.9/Mon Mar 28 12:14:02 2005//Tr21-5-23 -/replace.el/1.12/Tue Oct 18 20:49:43 2005//Tr21-5-23 -/resize-minibuffer.el/1.4/Fri Mar 15 07:43:21 2002//Tr21-5-23 -/scrollbar.el/1.9/Fri May 4 22:42:13 2001//Tr21-5-23 -/select.el/1.15/Sat Mar 12 20:57:42 2005//Tr21-5-23 -/setup-paths.el/1.21/Mon Dec 27 12:25:15 2004//Tr21-5-23 -/shadow.el/1.7/Fri Feb 4 02:59:27 2005//Tr21-5-23 -/simple.el/1.53/Tue Oct 18 20:49:43 2005//Tr21-5-23 -/site-load.el/1.6/Thu Apr 12 18:21:35 2001//Tr21-5-23 -/sound.el/1.11/Fri Mar 29 04:46:37 2002//Tr21-5-23 -/specifier.el/1.14/Wed Sep 22 02:05:51 2004//Tr21-5-23 -/startup.el/1.55/Thu May 5 16:55:41 2005//Tr21-5-23 -/subr.el/1.37/Tue Oct 18 20:49:43 2005//Tr21-5-23 -/symbol-syntax.el/1.4/Thu Apr 12 18:21:36 2001//Tr21-5-23 -/symbols.el/1.4/Fri May 4 22:42:15 2001//Tr21-5-23 -/syntax.el/1.4/Fri May 4 22:42:15 2001//Tr21-5-23 -/text-mode.el/1.4/Fri Jul 3 06:07:37 1998//Tr21-5-23 -/text-props.el/1.5/Sat Feb 8 02:29:53 2003//Tr21-5-23 -/toolbar-items.el/1.11/Fri Mar 15 07:43:21 2002//Tr21-5-23 -/toolbar.el/1.15/Wed Mar 13 08:52:09 2002//Tr21-5-23 -/tty-init.el/1.5/Fri May 4 22:42:16 2001//Tr21-5-23 -/undo-stack.el/1.4/Tue Feb 10 02:39:30 1998//Tr21-5-23 -/unicode.el/1.12/Fri Mar 4 21:59:43 2005//Tr21-5-23 -/update-elc-2.el/1.12/Thu Feb 3 07:11:20 2005//Tr21-5-23 -/update-elc.el/1.35/Thu Feb 3 07:11:20 2005//Tr21-5-23 -/userlock.el/1.3/Thu Apr 12 18:21:38 2001//Tr21-5-23 -/version.el/1.50/Wed Aug 28 05:36:32 2002//Tr21-5-23 -/view-less.el/1.6/Sun Mar 2 09:38:40 2003//Tr21-5-23 -/wid-browse.el/1.3/Sun Jun 10 10:42:24 2001//Tr21-5-23 -/wid-edit.el/1.31/Thu Nov 4 23:05:56 2004//Tr21-5-23 -/widget.el/1.4/Thu Apr 12 18:21:38 2001//Tr21-5-23 -/widgets-gtk.el/1.7/Thu Nov 4 23:05:56 2004//Tr21-5-23 -/win32-native.el/1.6/Thu Nov 4 23:05:56 2004//Tr21-5-23 -/window-xemacs.el/1.24/Sat Aug 6 09:41:59 2005//Tr21-5-23 -/window.el/1.10/Sun Feb 9 09:33:42 2003//Tr21-5-23 -/x-compose.el/1.4/Sun Jun 26 18:04:50 2005//Tr21-5-23 -/x-faces.el/1.21/Thu Mar 31 11:28:44 2005//Tr21-5-23 -/x-font-menu.el/1.13/Fri Jan 28 02:58:41 2005//Tr21-5-23 -/x-init.el/1.15/Sun Jun 26 18:04:50 2005//Tr21-5-23 -/x-iso8859-1.el/1.3/Thu Apr 12 18:21:40 2001//Tr21-5-23 -/x-misc.el/1.6/Fri May 4 22:42:17 2001//Tr21-5-23 -/x-mouse.el/1.9/Fri May 4 22:42:17 2001//Tr21-5-23 -/x-scrollbar.el/1.8/Fri May 4 22:42:18 2001//Tr21-5-23 -/x-select.el/1.8/Mon Feb 28 20:21:44 2005//Tr21-5-23 -/x-win-sun.el/1.6/Fri May 4 22:42:18 2001//Tr21-5-23 -/x-win-xfree86.el/1.5/Fri May 4 22:42:19 2001//Tr21-5-23 +/.cvsignore/1.3/Sat May 12 11:39:18 2001//Tr21-5-24 +/ChangeLog/1.711/Sun Dec 18 19:05:56 2005//Tr21-5-24 +/ChangeLog.GTK/1.2/Thu Apr 12 18:21:09 2001//Tr21-5-24 +/README/1.6/Sun Aug 26 10:25:12 2001//Tr21-5-24 +/abbrev.el/1.6/Sun Apr 14 12:42:04 2002//Tr21-5-24 +/about.el/1.68/Sat Dec 10 07:43:05 2005//Tr21-5-24 +/alist.el/1.4/Sun Jun 10 10:42:21 2001//Tr21-5-24 +/apropos.el/1.10/Wed Sep 15 08:30:26 2004//Tr21-5-24 +/auto-save.el/1.8/Fri Mar 29 04:46:26 2002//Tr21-5-24 +/auto-show.el/1.6/Thu Apr 12 18:21:11 2001//Tr21-5-24 +/autoload.el/1.22/Fri Feb 4 03:57:34 2005//Tr21-5-24 +/backquote.el/1.4/Thu Apr 12 18:21:11 2001//Tr21-5-24 +/behavior-defs.el/1.5/Thu Feb 3 05:26:41 2005//Tr21-5-24 +/behavior.el/1.5/Thu Feb 3 05:26:40 2005//Tr21-5-24 +/blessmail.el/1.1/Mon Nov 24 05:01:47 1997//Tr21-5-24 +/buff-menu.el/1.9/Fri Mar 15 07:43:18 2002//Tr21-5-24 +/buffer.el/1.5/Wed Feb 16 11:07:30 2005//Tr21-5-24 +/build-report.el/1.14/Fri Oct 21 10:34:35 2005//Tr21-5-24 +/byte-optimize.el/1.10/Fri Feb 14 11:50:36 2003//Tr21-5-24 +/bytecomp-runtime.el/1.12/Fri Dec 17 18:11:29 2004//Tr21-5-24 +/bytecomp.el/1.19/Fri Aug 13 21:19:15 2004//Tr21-5-24 +/callers-of-rpt.el/1.2/Thu Apr 12 18:21:12 2001//Tr21-5-24 +/check-features.el/1.4/Fri Mar 29 04:46:27 2002//Tr21-5-24 +/cl-compat.el/1.4/Sat Jun 26 21:25:24 2004//Tr21-5-24 +/cl-extra.el/1.18/Thu Nov 4 23:05:54 2004//Tr21-5-24 +/cl-macs.el/1.17/Wed Sep 22 02:05:49 2004//Tr21-5-24 +/cl-seq.el/1.7/Sat Jun 26 21:25:24 2004//Tr21-5-24 +/cl.el/1.15/Wed Jan 26 09:53:32 2005//Tr21-5-24 +/cmdloop.el/1.18/Sun Jun 26 18:04:49 2005//Tr21-5-24 +/code-cmds.el/1.4/Fri Feb 21 06:56:47 2003//Tr21-5-24 +/code-files.el/1.19/Tue Oct 7 21:52:15 2003//Tr21-5-24 +/code-init.el/1.10/Wed Jan 26 09:51:23 2005//Tr21-5-24 +/code-process.el/1.14/Thu Oct 28 11:31:11 2004//Tr21-5-24 +/coding.el/1.10/Sun Sep 1 06:41:41 2002//Tr21-5-24 +/compat.el/1.3/Sun May 5 11:30:23 2002//Tr21-5-24 +/config.el/1.4/Thu Apr 12 18:21:15 2001//Tr21-5-24 +/console.el/1.3/Fri May 4 22:42:00 2001//Tr21-5-24 +/cus-dep.el/1.10/Thu Feb 3 04:29:33 2005//Tr21-5-24 +/cus-edit.el/1.23/Thu Feb 3 04:29:33 2005//Tr21-5-24 +/cus-face.el/1.12/Tue Oct 25 11:28:24 2005//Tr21-5-24 +/cus-file.el/1.2/Thu Apr 12 18:21:15 2001//Tr21-5-24 +/cus-load.el/1.3/Thu Apr 12 18:21:15 2001//Tr21-5-24 +/cus-start.el/1.10/Fri Nov 25 01:41:46 2005//Tr21-5-24 +/custom.el/1.13/Thu Feb 3 04:29:33 2005//Tr21-5-24 +/derived.el/1.11/Sun Nov 13 07:39:27 2005//Tr21-5-24 +/device.el/1.8/Mon Mar 8 15:22:49 2004//Tr21-5-24 +/diagnose.el/1.7/Fri Nov 25 01:41:46 2005//Tr21-5-24 +/dialog-gtk.el/1.8/Thu Nov 4 23:05:54 2004//Tr21-5-24 +/dialog-items.el/1.3/Tue Jun 4 06:04:15 2002//Tr21-5-24 +/dialog.el/1.14/Thu Apr 14 05:58:45 2005//Tr21-5-24 +/disass.el/1.2/Thu Apr 12 18:21:17 2001//Tr21-5-24 +/disp-table.el/1.2/Sat Dec 6 22:26:09 1997//Tr21-5-24 +/dragdrop.el/1.11/Fri Mar 15 07:43:18 2002//Tr21-5-24 +/dump-paths.el/1.10/Sat Mar 1 07:25:27 2003//Tr21-5-24 +/dumped-lisp.el/1.57/Sat Nov 26 11:45:53 2005//Tr21-5-24 +/easy-mmode.el/1.1/Thu Feb 3 07:11:20 2005//Tr21-5-24 +/easymenu.el/1.8/Fri Mar 25 16:15:56 2005//Tr21-5-24 +/etags.el/1.16/Mon May 10 06:26:31 2004//Tr21-5-24 +/events.el/1.4/Sun Jun 26 18:04:50 2005//Tr21-5-24 +/extents.el/1.5/Thu Apr 12 18:21:17 2001//Tr21-5-24 +/faces.el/1.37/Sat Nov 26 11:45:54 2005//Tr21-5-24 +/files.el/1.75/Sun Nov 13 07:39:29 2005//Tr21-5-24 +/fill.el/1.8/Wed Jan 26 09:56:06 2005//Tr21-5-24 +/find-paths.el/1.29/Sat Jan 15 15:17:36 2005//Tr21-5-24 +/finder.el/1.9/Sun Oct 9 14:23:06 2005//Tr21-5-24 +/float-sup.el/1.3/Thu Apr 12 18:21:19 2001//Tr21-5-24 +/font-lock.el/1.29/Wed Jan 26 04:18:15 2005//Tr21-5-24 +/font-menu.el/1.9/Sat Nov 26 11:45:54 2005//Tr21-5-24 +/font.el/1.19/Mon Dec 5 09:43:37 2005//Tr21-5-24 +/fontconfig.el/1.2/Sat Nov 26 11:45:54 2005//Tr21-5-24 +/fontl-hooks.el/1.1/Sat Nov 22 06:47:48 1997//Tr21-5-24 +/format.el/1.10/Thu Apr 12 18:21:19 2001//Tr21-5-24 +/frame.el/1.25/Sun Nov 13 07:39:28 2005//Tr21-5-24 +/gdk.el/1.3/Fri May 4 22:42:02 2001//Tr21-5-24 +/generic-widgets.el/1.3/Fri May 4 22:42:02 2001//Tr21-5-24 +/glade.el/1.3/Fri May 4 22:42:02 2001//Tr21-5-24 +/glyphs.el/1.9/Sun Nov 13 07:39:28 2005//Tr21-5-24 +/gnome-widgets.el/1.3/Fri May 4 22:42:03 2001//Tr21-5-24 +/gnome.el/1.3/Fri May 4 22:42:03 2001//Tr21-5-24 +/gnuserv.el/1.14/Tue Dec 14 09:56:48 2004//Tr21-5-24 +/gpm.el/1.4/Sun Jun 10 10:42:23 2001//Tr21-5-24 +/gtk-compose.el/1.3/Sun Jun 26 18:04:50 2005//Tr21-5-24 +/gtk-extra.el/1.3/Fri May 4 22:42:03 2001//Tr21-5-24 +/gtk-faces.el/1.10/Thu Jun 20 21:18:03 2002//Tr21-5-24 +/gtk-ffi.el/1.2/Thu Apr 12 18:21:22 2001//Tr21-5-24 +/gtk-file-dialog.el/1.3/Fri May 4 22:42:04 2001//Tr21-5-24 +/gtk-font-menu.el/1.6/Fri Jan 28 02:58:40 2005//Tr21-5-24 +/gtk-glyphs.el/1.2/Thu Apr 12 18:21:23 2001//Tr21-5-24 +/gtk-init.el/1.5/Sat May 5 08:40:02 2001//Tr21-5-24 +/gtk-iso8859-1.el/1.2/Thu Apr 12 18:21:24 2001//Tr21-5-24 +/gtk-marshal.el/1.7/Fri Jan 28 00:32:20 2005//Tr21-5-24 +/gtk-mouse.el/1.2/Thu Apr 12 18:21:24 2001//Tr21-5-24 +/gtk-package.el/1.3/Fri May 4 22:42:04 2001//Tr21-5-24 +/gtk-password-dialog.el/1.3/Fri May 4 22:42:04 2001//Tr21-5-24 +/gtk-select.el/1.2/Thu Apr 12 18:21:25 2001//Tr21-5-24 +/gtk-widget-accessors.el/1.6/Fri Jun 22 01:49:59 2001//Tr21-5-24 +/gtk-widgets.el/1.4/Sat May 15 07:31:44 2004//Tr21-5-24 +/gtk.el/1.3/Fri May 4 22:42:05 2001//Tr21-5-24 +/gui.el/1.8/Fri Mar 15 07:43:19 2002//Tr21-5-24 +/gutter-items.el/1.8/Tue Mar 18 06:58:20 2003//Tr21-5-24 +/gutter.el/1.3/Sat Apr 28 07:48:40 2001//Tr21-5-24 +/hash-table.el/1.1/Fri May 4 22:42:06 2001//Tr21-5-24 +/help-macro.el/1.5/Wed Sep 15 08:30:26 2004//Tr21-5-24 +/help.el/1.47/Wed Nov 16 12:13:02 2005//Tr21-5-24 +/hyper-apropos.el/1.16/Sun Nov 13 07:39:28 2005//Tr21-5-24 +/indent.el/1.5/Sun Apr 14 12:42:04 2002//Tr21-5-24 +/info.el/1.34/Mon Dec 6 03:51:21 2004//Tr21-5-24 +/isearch-mode.el/1.15/Sun Jun 26 18:04:50 2005//Tr21-5-24 +/iso8859-1.el/1.3/Thu Apr 12 18:21:28 2001//Tr21-5-24 +/itimer-autosave.el/1.2/Sun Nov 9 07:06:33 1997//Tr21-5-24 +/itimer.el/1.15/Sun Sep 26 02:20:31 2004//Tr21-5-24 +/keydefs.el/1.18/Mon Apr 28 16:18:23 2003//Tr21-5-24 +/keymap.el/1.12/Sun Jun 26 18:04:50 2005//Tr21-5-24 +/ldap.el/1.12/Fri May 4 22:42:09 2001//Tr21-5-24 +/lib-complete.el/1.9/Wed Nov 27 07:15:07 2002//Tr21-5-24 +/lisp-mnt.el/1.9/Fri Mar 15 07:43:20 2002//Tr21-5-24 +/lisp-mode.el/1.23/Sun Jun 6 23:58:44 2004//Tr21-5-24 +/lisp.el/1.5/Thu Apr 12 18:21:29 2001//Tr21-5-24 +/list-mode.el/1.9/Tue May 25 22:13:28 2004//Tr21-5-24 +/loaddefs.el/1.7/Thu Apr 12 18:21:30 2001//Tr21-5-24 +/loadhist.el/1.6/Mon Nov 18 06:52:28 2002//Tr21-5-24 +/loadup-el.el/1.1/Sat Nov 8 21:13:07 1997//Tr21-5-24 +/loadup.el/1.31/Mon Dec 27 12:25:14 2004//Tr21-5-24 +/make-docfile.el/1.28/Mon Dec 27 12:25:14 2004//Tr21-5-24 +/map-ynp.el/1.5/Thu May 5 17:10:32 2005//Tr21-5-24 +/menubar-items.el/1.48/Wed Nov 16 12:13:03 2005//Tr21-5-24 +/menubar.el/1.12/Mon Feb 7 19:30:08 2005//Tr21-5-24 +/minibuf.el/1.30/Tue Oct 18 20:49:42 2005//Tr21-5-24 +/misc.el/1.2/Sun Nov 9 07:06:36 1997//Tr21-5-24 +/mode-motion.el/1.4/Mon May 18 05:42:08 1998//Tr21-5-24 +/modeline.el/1.23/Wed Mar 13 08:52:07 2002//Tr21-5-24 +/mouse.el/1.32/Sun Nov 13 07:39:28 2005//Tr21-5-24 +/movemail.el/1.2/Thu Apr 12 18:21:31 2001//Tr21-5-24 +/msw-faces.el/1.18/Fri Jan 28 02:58:40 2005//Tr21-5-24 +/msw-font-menu.el/1.8/Fri Jan 28 02:58:40 2005//Tr21-5-24 +/msw-glyphs.el/1.12/Thu Feb 20 08:19:29 2003//Tr21-5-24 +/msw-init.el/1.10/Thu May 9 08:33:46 2002//Tr21-5-24 +/msw-mouse.el/1.4/Sun Jul 19 17:46:44 1998//Tr21-5-24 +/msw-select.el/1.7/Thu Apr 12 18:21:32 2001//Tr21-5-24 +/multicast.el/1.4/Tue May 28 08:44:30 2002//Tr21-5-24 +/mwheel.el/1.7/Thu Feb 3 05:26:41 2005//Tr21-5-24 +/newcomment.el/1.3/Wed Jan 26 09:57:14 2005//Tr21-5-24 +/next-error.el/1.2/Mon Oct 24 10:07:26 2005//Tr21-5-24 +/objects.el/1.6/Tue Nov 29 12:08:36 2005//Tr21-5-24 +/obsolete.el/1.18/Fri Jan 28 02:58:41 2005//Tr21-5-24 +/occur.el/1.3/Tue Nov 29 12:33:47 2005//Tr21-5-24 +/package-admin.el/1.25/Mon Dec 27 12:25:14 2004//Tr21-5-24 +/package-get.el/1.73/Fri Dec 16 23:52:23 2005//Tr21-5-24 +/package-info.el/1.9/Mon Apr 14 03:40:27 2003//Tr21-5-24 +/package-net.el/1.5/Mon Apr 14 03:40:27 2003//Tr21-5-24 +/package-ui.el/1.24/Sat Feb 19 22:25:13 2005//Tr21-5-24 +/packages.el/1.53/Thu Feb 3 23:56:53 2005//Tr21-5-24 +/page.el/1.4/Wed Jan 26 09:56:06 2005//Tr21-5-24 +/paragraphs.el/1.11/Thu Feb 10 03:16:59 2005//Tr21-5-24 +/paths.el/1.6/Thu Apr 12 18:21:34 2001//Tr21-5-24 +/picture.el/1.3/Wed Mar 13 08:52:07 2002//Tr21-5-24 +/post-gc.el/1.2/Sat Jul 26 14:01:23 2003//Tr21-5-24 +/printer.el/1.17/Sun Mar 9 02:27:33 2003//Tr21-5-24 +/process.el/1.19/Sun Jan 9 09:44:44 2005//Tr21-5-24 +/raw-process.el/1.1/Thu Feb 6 10:44:06 2003//Tr21-5-24 +/rect.el/1.3/Mon Dec 3 18:02:47 2001//Tr21-5-24 +/regexp-opt.el/1.2/Thu Feb 3 07:30:22 2005//Tr21-5-24 +/register.el/1.9/Mon Mar 28 12:14:02 2005//Tr21-5-24 +/replace.el/1.12/Tue Oct 18 20:49:43 2005//Tr21-5-24 +/resize-minibuffer.el/1.4/Fri Mar 15 07:43:21 2002//Tr21-5-24 +/scrollbar.el/1.9/Fri May 4 22:42:13 2001//Tr21-5-24 +/select.el/1.16/Wed Nov 16 07:22:40 2005//Tr21-5-24 +/setup-paths.el/1.21/Mon Dec 27 12:25:15 2004//Tr21-5-24 +/shadow.el/1.7/Fri Feb 4 02:59:27 2005//Tr21-5-24 +/simple.el/1.54/Sun Nov 13 10:51:18 2005//Tr21-5-24 +/site-load.el/1.6/Thu Apr 12 18:21:35 2001//Tr21-5-24 +/sound.el/1.11/Fri Mar 29 04:46:37 2002//Tr21-5-24 +/specifier.el/1.15/Sun Nov 13 07:39:28 2005//Tr21-5-24 +/startup.el/1.55/Thu May 5 16:55:41 2005//Tr21-5-24 +/subr.el/1.37/Tue Oct 18 20:49:43 2005//Tr21-5-24 +/symbol-syntax.el/1.4/Thu Apr 12 18:21:36 2001//Tr21-5-24 +/symbols.el/1.4/Fri May 4 22:42:15 2001//Tr21-5-24 +/syntax.el/1.5/Sun Nov 13 10:58:00 2005//Tr21-5-24 +/text-mode.el/1.4/Fri Jul 3 06:07:37 1998//Tr21-5-24 +/text-props.el/1.5/Sat Feb 8 02:29:53 2003//Tr21-5-24 +/toolbar-items.el/1.11/Fri Mar 15 07:43:21 2002//Tr21-5-24 +/toolbar.el/1.16/Sun Nov 13 07:39:28 2005//Tr21-5-24 +/tty-init.el/1.5/Fri May 4 22:42:16 2001//Tr21-5-24 +/undo-stack.el/1.4/Tue Feb 10 02:39:30 1998//Tr21-5-24 +/unicode.el/1.12/Fri Mar 4 21:59:43 2005//Tr21-5-24 +/update-elc-2.el/1.12/Thu Feb 3 07:11:20 2005//Tr21-5-24 +/update-elc.el/1.35/Thu Feb 3 07:11:20 2005//Tr21-5-24 +/userlock.el/1.3/Thu Apr 12 18:21:38 2001//Tr21-5-24 +/version.el/1.50/Wed Aug 28 05:36:32 2002//Tr21-5-24 +/view-less.el/1.6/Sun Mar 2 09:38:40 2003//Tr21-5-24 +/wid-browse.el/1.3/Sun Jun 10 10:42:24 2001//Tr21-5-24 +/wid-edit.el/1.31/Thu Nov 4 23:05:56 2004//Tr21-5-24 +/widget.el/1.4/Thu Apr 12 18:21:38 2001//Tr21-5-24 +/widgets-gtk.el/1.7/Thu Nov 4 23:05:56 2004//Tr21-5-24 +/win32-native.el/1.6/Thu Nov 4 23:05:56 2004//Tr21-5-24 +/window-xemacs.el/1.24/Sat Aug 6 09:41:59 2005//Tr21-5-24 +/window.el/1.10/Sun Feb 9 09:33:42 2003//Tr21-5-24 +/x-compose.el/1.4/Sun Jun 26 18:04:50 2005//Tr21-5-24 +/x-faces.el/1.23/Mon Dec 5 09:43:37 2005//Tr21-5-24 +/x-font-menu.el/1.14/Sat Nov 26 11:45:55 2005//Tr21-5-24 +/x-init.el/1.15/Sun Jun 26 18:04:50 2005//Tr21-5-24 +/x-iso8859-1.el/1.3/Thu Apr 12 18:21:40 2001//Tr21-5-24 +/x-misc.el/1.6/Fri May 4 22:42:17 2001//Tr21-5-24 +/x-mouse.el/1.9/Fri May 4 22:42:17 2001//Tr21-5-24 +/x-scrollbar.el/1.8/Fri May 4 22:42:18 2001//Tr21-5-24 +/x-select.el/1.8/Mon Feb 28 20:21:44 2005//Tr21-5-24 +/x-win-sun.el/1.6/Fri May 4 22:42:18 2001//Tr21-5-24 +/x-win-xfree86.el/1.5/Fri May 4 22:42:19 2001//Tr21-5-24 D diff -urN 21.5.23/lisp/CVS/Tag 21.5.24/lisp/CVS/Tag --- 21.5.23/lisp/CVS/Tag Mon Dec 19 04:20:27 2005 +++ 21.5.24/lisp/CVS/Tag Mon Dec 19 04:22:40 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/lisp/ChangeLog 21.5.24/lisp/ChangeLog --- 21.5.23/lisp/ChangeLog Thu Oct 27 00:13:47 2005 +++ 21.5.24/lisp/ChangeLog Mon Dec 19 04:05:56 2005 @@ -1,3 +1,222 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-12-17 Aidan Kehoe + + * mule/mule-cmds.el (set-language-environment-coding-systems): + Initialise keyboard-coding-system, terminal-coding-system when + applying a language environment, together with the input and + output coding systems for any active TTY console. + * mule/mule-cmds.el (init-locale-at-early-startup): + If set-current-locale returns a `more-specified version' of the + current locale when passed a zero length argument, the magic used + to work out the current language environment from the C locale + will fail. Call current-locale instead. + +2005-12-17 Adrian Aichner + + * package-get.el (package-get-download-sites): Add Hong Kong + download site. + * package-get.el (package-get-pre-release-download-sites): Ditto. + +2005-12-10 Malcolm Purvis + + * about.el (about-personal-info, about-hacker-contribution): + Update `malcolmp'. + +2005-12-03 Ville Skyttä + + * x-faces.el (x-library-search-path): Add /usr(/local)/share/X11. + * font.el (font-lookup-rgb-components): Ditto, remove stale comment. + +2005-10-28 Adrian Aichner + + * package-get.el (package-get-download-sites): Update reflecting + latest http://www.xemacs.org/Releases/ information generated by + xemacs-builds/adrian/website/package-get-2-download-sites.el. + * package-get.el (package-get-pre-release-download-sites): Ditto. + +2005-11-29 Malcolm Purvis + + * occur.el: Add autoload cookie for list-matching-lines. + +2005-11-29 Stephen J. Turnbull + + * objects.el (make-font-specifier): Document font name syntaxes. + +2005-11-29 Stephen J. Turnbull + + * about.el (about-personal-info, about-url-alist): Update `jerry'. + +2005-11-26 Stephen J. Turnbull + + Merge Xft. + + 2005-09-07 Clemens Fruhwirth + + * font.el (font-default-font-for-device): Remove vestigial code + from incomplete removal of conditional. + + 2005-08-17 Stephen J. Turnbull + + * fontconfig.el (fc-try-font): Improve docstring, add todo comment. + (make-fc-pattern): Use defalias, not defun. + + 2005-08-04 Stephen J. Turnbull + + * fontconfig.el (make-fc-pattern): Don't add finalizer, now + finalizer is in lrecord implementation. + + 2005-08-02 Stephen J. Turnbull + + `fc-list-fonts-pattern-objects' now returns a LISP list. + + * fontconfig.el (fc-try-font): + (fc-find-available-font-families): + (fc-find-available-weights-for-family): + Adapt to it. + + (fc-try-font): Return list of pattern objects. + + (fc-fontset-list): Remove. + + 2005-03-02 Stephen J. Turnbull + + * font.el (font-running-xemacs): Remove definition. + (font-x-font-regexp): + (font-x-registry-and-encoding-regexp): + (font-default-font-for-device): + (x-font-create-name-core): + (mswindows-font-create-name): + (font-set-face-font): + (font-blink-callback): + Remove references. + + (define-font-keywords): Remove definition and top-level references. + + (set-font-style-by-keywords): + (font-properties-from-style): + Comment out. + + 2005-03-01 Aidan Kehoe + + General cleanup of references to functions Eric has deleted + and renamed in the C core. + * font.el (x-font-create-object): + xft-xlfd-font-name-p -> xlfd-font-name-p + * font.el (x-font-create-object-xft): + xft-pattern-* -> fc-pattern-*, return the created font. + * font.el (x-font-create-name-xft): + xft* -> fc* + * fontconfig.el (fc-font-name-weight-regular): New. + * fontconfig.el (fc-font-name-weight-mapping): + * fontconfig.el (fc-font-name-weight-mapping-string): + * fontconfig.el (fc-font-name-weight-mapping-string-reverse): + * fontconfig.el (fc-font-name-weight-mapping-reverse): + * fontconfig.el (fc-font-weight-translate-from-symbol): + Add information on the "regular" font weight, taken from + fontconfig.h, which is the weight my local system returns by + default. + + 2005-02-03 Eric Knauel + + * fontconfig.el (fc-try-font): + (fc-find-available-font-families): + (fc-find-available-weights-for-family): adapt to new representation of + FcObjectSets + + 2004-11-20 Stephen J. Turnbull + + Xft branch based on "Xft reloaded #3" patch by Eric Knauel and + Mathias Neuebaur, and other contributors. + + * fontconfig.el: New file implementing fontconfig interfaces. + + * font.el: + * face.el: + Use fontconfig to access Xft fonts. + +2005-11-21 Marcus Crestani + + Incremental Garbage Collector + + * cus-start.el (all): Add allow-incremental-gc, + gc-cons-incremental-threshold, and + gc-incremental-traversal-threshold to alloc customization group. + * diagnose.el (show-memory-usage): Additionally allocated memory + no longer in use, remove. + * diagnose.el (show-lrecord-stats): Additionally allocated memory + no longer in use, remove. + * diagnose.el (show-gc-stats): New. + +2005-11-08 Malcolm Purvis + + * help.el: + * menubar-items.el (default-menubar): + Add 'Known Problems' to the Help menu. + +2005-11-16 Stephen J. Turnbull + + * select.el (get-selection): + Quiet bytecompiler (unused condition-case variable). + +2005-11-13 Ben Wing + + * syntax.el: + * syntax.el (describe-syntax-table): Removed. + * syntax.el (describe-char-table): New. + Convert describe-syntax-table to more general describe-char-table. + (Will also be used by display tables.) Create new describe-syntax-table, + compatible with old function, that uses describe-char-table. + +2005-11-13 Ben Wing + + * diagnose.el (show-memory-usage): + Conditionalize `sort-numeric-fields' on when-fboundp. + +2005-11-13 Ben Wing + + * help.el (function-arglist): + Don't bomb out when fun has no documentation. + +2005-11-13 Ben Wing + + * simple.el (log-warning-minimum-level): + * simple.el (display-warning-minimum-level): + `foo.' -> `foo'. + * simple.el (debug-print-1): + princ() a formatted debug string, not prin1(), or it just looks stupid. + +2005-11-13 Ben Wing + + * derived.el: + * frame.el (get-frame-for-buffer): + * toolbar.el (press-toolbar-button): + * toolbar.el (release-and-activate-toolbar-button): + * glyphs.el: + * glyphs.el (set-glyph-property): + * glyphs.el (set-glyph-image): + * glyphs.el (set-glyph-contrib-p): + * glyphs.el (set-glyph-baseline): + * hyper-apropos.el (hyper-apropos-map): + * mouse.el (mouse-track-down-hook): + * files.el (file-name-extension): + * specifier.el: + * specifier.el (map-specifier): + * specifier.el (set-specifier): + Fix uses of `foo'; change 'foo -> `foo', and put punctuation outside + of quotes. + + Add comments in specifier.el about needing better and new convenience + functions. + +2005-11-02 Marcus Crestani + + * diagnose.el: Rename `show-lrecord-stats' to + `show-object-memory-usage-stats', to keep in sync with the C + sources. + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. diff -urN 21.5.23/lisp/about.el 21.5.24/lisp/about.el --- 21.5.23/lisp/about.el Thu Mar 3 06:37:55 2005 +++ 21.5.24/lisp/about.el Sat Dec 10 16:43:05 2005 @@ -207,7 +207,7 @@ (dv . "http://www.lrde.epita.fr/~didier/") (fabrice . "http://www.ese-metz.fr/~popineau/") (fptex . "http://www.fptex.org/") - (james . "http://www.ittc.ku.edu/~james/") + (james . "http://www.cs.usu.edu/~jerry/") (jas . "http://josefsson.org/") (jason . "http://www.mastaler.com/") (juhp . "http://www.01.246.ne.jp/~juhp/") @@ -1102,11 +1102,15 @@ XEmacs, and soon had a web page containing small patches to XEmacs 20.3, which were picked up by the Debian Linux distribution. -He has since given up his native California to join the faculty at the +He has since given up his native California, to join the faculty at the University of Kansas. He is learning to like the weather in Lawrence, -Kansas, where he lives with his wife and 3 children. His work on XEmacs -mostly consists of extensions to the loadable module support in XEmacs, -which was introduced by J. Kean Johnston and others. He has a ") +Kansas, where he lives with his wife and 3 children. (Ed. note: I guess +he didn't like the weather enough; he is now teaching at Utah State +University.) + +His work on XEmacs mostly consists of extensions to the loadable module +support in XEmacs, which was introduced by J. Kean Johnston and others. +He has a ") (about-url-link 'james "home page" "Visit Jerry's home page") (widget-insert " (doesn't everybody?)\n")) (jan @@ -1368,11 +1372,11 @@ (widget-insert "\ Graduate of the University of New South Wales and resident of Sydney, -Australia. My day job involves developing and maintaining software -development tools for a telco manufacturer. I've yet to get XEmacs hacking -added to my job description. +Australia. By day I'm a senior Unix/Linux application and tools +developer, and wielder of the Dinosaur of Cluefulness, at a small ISV. +I've yet to get XEmacs hacking added to my job description. -When not hacking, I relax by chasing after my young son, reading SciFi, +When not hacking, I relax by chasing after my young sons, reading SF, listening to Hip Hop and serving on various boards and committees of the Anglican Church in Sydney.\n")) (rickc @@ -1836,7 +1840,8 @@ (purvis (widget-insert "\ -Currently filing off some of the splinters in the GTK port.\n")) +Filing off some of the splinters in the GTK port. Ported configure to +autoconf 2.5. Miscellaneous fixes, mainly to the C code.\n")) (rickc (widget-insert "\ Maintainer of ILISP.\n")) diff -urN 21.5.23/lisp/cus-start.el 21.5.24/lisp/cus-start.el --- 21.5.23/lisp/cus-start.el Thu Dec 12 12:20:36 2002 +++ 21.5.24/lisp/cus-start.el Fri Nov 25 10:41:46 2005 @@ -46,6 +46,7 @@ (let ((all '(;; boolean (abbrev-all-caps abbrev boolean) (allow-deletion-of-last-visible-frame frames boolean) + (allow-incremental-gc alloc boolean) (debug-on-quit debug boolean) (delete-auto-save-files auto-save boolean) (delete-exited-processes processes-basics boolean) @@ -71,6 +72,8 @@ (bell-inhibit-time sound integer) (echo-keystrokes keyboard integer) (gc-cons-threshold alloc integer) + (gc-cons-incremental-threshold alloc integer) + (gc-incremental-traversal-threshold alloc integer) (next-screen-context-lines display integer) (scroll-conservatively display integer) (scroll-step windows integer) diff -urN 21.5.23/lisp/derived.el 21.5.24/lisp/derived.el --- 21.5.23/lisp/derived.el Sat Jun 19 00:48:38 2004 +++ 21.5.24/lisp/derived.el Sun Nov 13 16:39:27 2005 @@ -59,11 +59,11 @@ ;; (define-key hypertext-mode-map [down-mouse-3] 'do-hyper-link) ;; ;; will create a function `hypertext-mode' with its own (sparse) -;; keymap `hypertext-mode-map.' The command M-x hypertext-mode will +;; keymap `hypertext-mode-map'. The command M-x hypertext-mode will ;; perform the following actions: ;; ;; - run the command (text-mode) to get its default setup -;; - replace the current keymap with 'hypertext-mode-map,' which will +;; - replace the current keymap with 'hypertext-mode-map', which will ;; inherit from 'text-mode-map'. ;; - replace the current syntax table with ;; 'hypertext-mode-syntax-table', which will borrow its defaults @@ -77,7 +77,7 @@ ;; set the local variable `case-fold-search' to nil. ;; ;; The advantages of this system are threefold. First, text mode is -;; untouched -- if you had added the new keystroke to `text-mode-map,' +;; untouched -- if you had added the new keystroke to `text-mode-map', ;; possibly using hooks, you would have added it to all text buffers ;; -- here, it appears only in hypertext buffers, where it makes ;; sense. Second, it is possible to build even further, and make diff -urN 21.5.23/lisp/diagnose.el 21.5.24/lisp/diagnose.el --- 21.5.23/lisp/diagnose.el Mon May 16 01:37:56 2005 +++ 21.5.24/lisp/diagnose.el Fri Nov 25 10:41:46 2005 @@ -96,26 +96,28 @@ (incf grandtotal (show-foo-stats 'charset (charset-list) #'charset-memory-usage)) + (when-fboundp 'sort-numeric-fields + (sort-numeric-fields -1 + (save-excursion + (goto-char begin) + (forward-line 2) + (point)) + (save-excursion + (forward-line -2) + (point)))) + (princ "\n")) + (setq begin (point)) + (incf grandtotal + (show-foo-stats 'buffer (buffer-list) #'buffer-memory-usage)) + (when-fboundp 'sort-numeric-fields (sort-numeric-fields -1 (save-excursion (goto-char begin) - (forward-line 2) + (forward-line 3) (point)) (save-excursion (forward-line -2) - (point))) - (princ "\n")) - (setq begin (point)) - (incf grandtotal - (show-foo-stats 'buffer (buffer-list) #'buffer-memory-usage)) - (sort-numeric-fields -1 - (save-excursion - (goto-char begin) - (forward-line 3) - (point)) - (save-excursion - (forward-line -2) - (point))) + (point)))) (princ "\n") (setq begin (point)) (incf grandtotal @@ -140,7 +142,7 @@ (princ "\n") (map-plist #'(lambda (stat num) (when (string-match - "\\(.*\\)-storage\\(-additional\\)?$" + "\\(.*\\)-storage\\$" (symbol-name stat)) (incf total num) (princ (format fmt @@ -166,12 +168,12 @@ grandtotal)))) -(defun show-lrecord-stats () - "Show statistics about lrecord usage in XEmacs." +(defun show-object-memory-usage-stats () + "Show statistics about object memeory usage in XEmacs." (interactive) (garbage-collect) - (let ((buffer "*lrecord statistics*") - (plist (lrecord-stats)) + (let ((buffer "*object memory usage statistics*") + (plist (object-memory-usage-stats)) (fmt "%-30s%10s%10s\n") (grandtotal 0) begin) @@ -233,12 +235,8 @@ (save-excursion (set-buffer buffer) (setq begin (point)) - (princ "Allocated with new allocator:\n") + (princ "Allocated with lisp allocator:\n") (show-stats "\\(.*\\)-storage$") - (princ "\n\n") - (setq begin (point)) - (princ "Allocated additionally:\n") - (show-stats "\\(.*\\)-storage-additional$") (princ (format "\n\ngrand total: %s\n" grandtotal))) grandtotal)))) @@ -251,10 +249,9 @@ (page-size (first stats)) (heap-sects (second stats)) (used-plhs (third stats)) - (unmanaged-plhs (fourth stats)) - (free-plhs (fifth stats)) - (globals (sixth stats)) - (mc-malloced-bytes (seventh stats))) + (free-plhs (fourth stats)) + (globals (fifth stats)) + (mc-malloced-bytes (sixth stats))) (with-output-to-temp-buffer "*memory usage*" (flet ((print-used-plhs (text plhs) (let ((sum-n-pages 0) @@ -370,9 +367,6 @@ (print-used-plhs "USED HEAP" used-plhs) (princ "\n\n") - (print-used-plhs "UNMANAGED HEAP" unmanaged-plhs) - (princ "\n\n") - (print-free-plhs "FREE HEAP" free-plhs) (princ "\n\n") @@ -397,3 +391,50 @@ (princ (format fmt "grand total" mc-malloced-bytes))) (+ mc-malloced-bytes))))) + + +(defun show-gc-stats () + "Show statistics about garbage collection cycles." + (interactive) + (let ((buffer "*garbage collection statistics*") + (plist (gc-stats)) + (fmt "%-9s %10s %10s %10s %10s %10s\n")) + (flet ((plist-get-stat (category field) + (or (plist-get plist (intern (concat category field))) + "-")) + (show-stats (category) + (princ (format fmt category + (plist-get-stat category "-total") + (plist-get-stat category "-in-last-gc") + (plist-get-stat category "-in-this-gc") + (plist-get-stat category "-in-last-cycle") + (plist-get-stat category "-in-this-cycle"))))) + (with-output-to-temp-buffer buffer + (save-excursion + (set-buffer buffer) + (princ (format "%s %s\n" "Current phase" (plist-get plist 'phase))) + (princ (make-string 64 ?-)) + (princ "\n") + (princ (format fmt "stat" "total" "last-gc" "this-gc" + "last-cycle" "this-cylce")) + (princ (make-string 64 ?-)) + (princ "\n") + (show-stats "n-gc") + (show-stats "n-cycles") + (show-stats "enqueued") + (show-stats "dequeued") + (show-stats "repushed") + (show-stats "enqueued2") + (show-stats "dequeued2") + (show-stats "finalized") + (show-stats "freed") + (princ (make-string 64 ?-)) + (princ "\n") + (princ (format fmt "explicitly" + "freed:" + (plist-get-stat "explicitly" "-freed") + "tried:" + (plist-get-stat "explicitly" "-tried-freed") + ""))) + + (plist-get plist 'n-gc-total))))) diff -urN 21.5.23/lisp/dumped-lisp.el 21.5.24/lisp/dumped-lisp.el --- 21.5.23/lisp/dumped-lisp.el Wed Oct 5 02:51:20 2005 +++ 21.5.24/lisp/dumped-lisp.el Sat Nov 26 20:45:53 2005 @@ -53,6 +53,8 @@ "obsolete" "specifier" "frame" ; needed by faces + ;; #### this should be (featurep 'xft) + (when (featurep 'x) "fontconfig") ; needed by x-faces (when (featurep 'x) "x-faces") ; needed by faces (when (featurep 'gtk) "gtk-faces") (when (valid-console-type-p 'mswindows) "msw-faces") diff -urN 21.5.23/lisp/faces.el 21.5.24/lisp/faces.el --- 21.5.23/lisp/faces.el Tue Oct 25 20:28:24 2005 +++ 21.5.24/lisp/faces.el Sat Nov 26 20:45:54 2005 @@ -49,7 +49,8 @@ ;; To elude the warnings for font functions. (Normally autoloaded when ;; font-create-object is called) (eval-when-compile - (require 'font)) + (require 'font) + (load "cl-macs")) (defgroup faces nil "Support for multiple text attributes (fonts, colors, ...) diff -urN 21.5.23/lisp/files.el 21.5.24/lisp/files.el --- 21.5.23/lisp/files.el Fri Apr 8 23:07:00 2005 +++ 21.5.24/lisp/files.el Sun Nov 13 16:39:29 2005 @@ -2478,7 +2478,7 @@ "Return FILENAME's final \"extension\". The extension, in a file name, is the part that follows the last `.'. Return nil for extensionless file names such as `foo'. -Return the empty string for file names such as `foo.'. +Return the empty string for file names such as `foo'. If PERIOD is non-nil, then the returned value includes the period that delimits the extension, and if FILENAME has no extension, diff -urN 21.5.23/lisp/font-menu.el 21.5.24/lisp/font-menu.el --- 21.5.23/lisp/font-menu.el Fri Jan 28 11:58:39 2005 +++ 21.5.24/lisp/font-menu.el Sat Nov 26 20:45:54 2005 @@ -264,7 +264,9 @@ (member 0 (aref entry 2)))) (enable-menu-item item) (disable-menu-item item)) - (if (eq size s) + ;; #### God save the Queen! + ;; well, if this fails because s or size is non-numeric, fuck 'em + (if (= size (if (featurep 'xft-fonts) (float s) s)) (select-toggle-menu-item item) (deselect-toggle-menu-item item)) item) @@ -345,6 +347,7 @@ (or weight from-weight) (or size from-size)) (error + (message "Error updating font of `%s'" face) (display-error c nil) (sit-for 1))))) ;; Set the default face's font after hacking the other faces, so that @@ -356,16 +359,18 @@ (set-face-font 'default new-default-face-font (and font-menu-this-frame-only-p (selected-frame))) ;; OK Let Customize do it. - (custom-set-face-update-spec 'default - (list (list 'type (device-type))) - (list :family (or family from-family) - :size (concat - (int-to-string - (/ (or size from-size) - (specifier-instance font-menu-size-scaling - (selected-device)))) - "pt"))) - (message "Font %s" (face-font-name 'default))))) + (let ((fsize (if (featurep 'xft-fonts) + (int-to-string (or size from-size)) + (concat (int-to-string + (/ (or size from-size) + (specifier-instance font-menu-size-scaling + (selected-device)))) + "pt")))) + (custom-set-face-update-spec 'default + (list (list 'type (device-type))) + (list :family (or family from-family) + :size fsize)))) + (message "Font %s" (face-font-name 'default)))) ;; #### This should be called `font-menu-maybe-change-face' diff -urN 21.5.23/lisp/font.el 21.5.24/lisp/font.el --- 21.5.23/lisp/font.el Sat Mar 26 00:58:03 2005 +++ 21.5.24/lisp/font.el Mon Dec 5 18:43:37 2005 @@ -29,6 +29,18 @@ ;;; Commentary: +;; This file is totally bogus in the context of Emacs. Much of what it does +;; is really in the provice of faces (for example all the style parameters), +;; and that's the way it is in GNU Emacs. +;; +;; What is needed for fonts at the Lisp level is a consistent way to access +;; face properties that are actually associated with fonts for some rendering +;; engine, in other words, the kinds of facilities provided by fontconfig +;; patterns. We just need to provide an interface to looking up, storing, +;; and manipulating font specifications with certain properties. There will +;; be some engine-specific stuff, like the bogosity of X11's character set +;; registries. + ;;; Code: (globally-declare-fboundp @@ -42,6 +54,7 @@ (globally-declare-boundp '(global-face-data x-font-regexp x-font-regexp-foundry-and-family + fc-font-regexp mswindows-font-regexp)) (require 'cl) @@ -89,23 +102,16 @@ ;;; Lots of variables / keywords for use later in the program ;;; Not much should need to be modified ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defconst font-running-xemacs (string-match "XEmacs" (emacs-version)) - "Whether we are running in XEmacs or not.") - -(defmacro define-font-keywords (&rest keys) - `(eval-and-compile - (let ((keywords (quote ,keys))) - (while keywords - (or (boundp (car keywords)) - (set (car keywords) (car keywords))) - (setq keywords (cdr keywords)))))) - +;; #### These aren't window system mappings (defconst font-window-system-mappings '((x . (x-font-create-name x-font-create-object)) (gtk . (x-font-create-name x-font-create-object)) + ;; #### FIXME should this handle fontconfig font objects? + (fc . (fc-font-create-name fc-font-create-object)) (ns . (ns-font-create-name ns-font-create-object)) (mswindows . (mswindows-font-create-name mswindows-font-create-object)) (pm . (x-font-create-name x-font-create-object)) ; Change? FIXME + ;; #### what is this bogosity? (tty . (tty-font-create-plist tty-font-create-object))) "An assoc list mapping device types to a list of translations. @@ -148,12 +154,11 @@ "How much a font is allowed to vary from the desired size.") ;; Canonical (internal) sizes are in points. -;; Registry -(define-font-keywords :family :style :size :registry :encoding) -(define-font-keywords - :weight :extra-light :light :demi-light :medium :normal :demi-bold - :bold :extra-bold) +;; Property keywords: :family :style :size :registry :encoding :weight +;; Weight keywords: :extra-light :light :demi-light :medium +;; :normal :demi-bold :bold :extra-bold +;; See GNU Emacs 21.4 for more properties and keywords we should support (defvar font-style-keywords nil) @@ -248,6 +253,7 @@ (aset table (+ i ?a) (+ i ?A)) (setq i (1+ i))) ;; Now ISO translations + ;; #### FIXME what's this for?? (setq i 224) (while (< i 247) ;; Agrave - Ouml (aset table i (- i 32)) @@ -261,27 +267,31 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Utility functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defun set-font-style-by-keywords (fontobj styles) - (make-local-variable 'font-func) - (declare (special font-func)) - (if (listp styles) - (while styles - (setq font-func (car-safe (cdr-safe (assq (car styles) font-style-keywords))) - styles (cdr styles)) - (and (fboundp font-func) (funcall font-func fontobj t))) - (setq font-func (car-safe (cdr-safe (assq styles font-style-keywords)))) - (and (fboundp font-func) (funcall font-func fontobj t)))) - -(defun font-properties-from-style (fontobj) - (let ((todo font-style-keywords) - type func retval) - (while todo - (setq func (cdr (cdr (car todo))) - type (car (pop todo))) - (if (funcall func fontobj) - (setq retval (cons type retval)))) - retval)) +;; #### unused? +; (defun set-font-style-by-keywords (fontobj styles) +; (make-local-variable 'font-func) +; (declare (special font-func)) +; (if (listp styles) +; (while styles +; (setq font-func (car-safe (cdr-safe (assq (car styles) +; font-style-keywords))) +; styles (cdr styles)) +; (and (fboundp font-func) (funcall font-func fontobj t))) +; (setq font-func (car-safe (cdr-safe (assq styles font-style-keywords)))) +; (and (fboundp font-func) (funcall font-func fontobj t)))) + +;; #### unused? +; (defun font-properties-from-style (fontobj) +; (let ((todo font-style-keywords) +; type func retval) +; (while todo +; (setq func (cdr (cdr (car todo))) +; type (car (pop todo))) +; (if (funcall func fontobj) +; (setq retval (cons type retval)))) +; retval)) +;; #### only used in this file; maybe there's a cl.el function? (defun font-unique (list) (let ((retval) (cur)) @@ -329,8 +339,8 @@ (mm-width (float (or (device-mm-width device) 293))) (retval nil)) (cond - ;; the following string-match is broken, there will never be a - ;; left operand detected + ;; #### this is pretty bogus and should probably be made gone + ;; or supported at a higher level ((string-match "^ *\\([-+*/]\\) *" spec) ; math! whee! (let ((math-func (intern (match-string 1 spec))) (other (font-spatial-to-canonical @@ -361,7 +371,7 @@ ((string= type "mm") (setq retval (* num (/ 72.0 25.4)))) ((string= type "cm") - (setq retval (* num 10 (/ 72.0 25.4)))) + (setq retval (* num (/ 72.0 2.54)))) (t (setq retval num)) ) @@ -445,6 +455,42 @@ args (cdr args))) retval)))) +(defvar font-default-cache nil) + +;;;###autoload +(defun font-default-font-for-device (&optional device) + (or device (setq device (selected-device))) + (font-truename + (make-font-specifier + (face-font-name 'default device)))) + +;;;###autoload +(defun font-default-object-for-device (&optional device) + (let ((font (font-default-font-for-device device))) + (or (cdr-safe (assoc font font-default-cache)) + (let ((object (font-create-object font))) + (push (cons font object) font-default-cache) + object)))) + +;;;###autoload +(defun font-default-family-for-device (&optional device) + (font-family (font-default-object-for-device (or device (selected-device))))) + +;;;###autoload +(defun font-default-registry-for-device (&optional device) + (font-registry (font-default-object-for-device (or device (selected-device))))) + +;;;###autoload +(defun font-default-encoding-for-device (&optional device) + (font-encoding (font-default-object-for-device (or device (selected-device))))) + +;;;###autoload +(defun font-default-size-for-device (&optional device) + ;; face-height isn't the right thing (always 1 pixel too high?) + ;; (if font-running-xemacs + ;; (format "%dpx" (face-height 'default device)) + (font-size (font-default-object-for-device (or device (selected-device))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; The window-system dependent code (TTY-style) @@ -468,9 +514,8 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; The window-system dependent code (X-style) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defvar font-x-font-regexp (or (and font-running-xemacs - (boundp 'x-font-regexp) - x-font-regexp) +(defvar font-x-font-regexp (when (and (boundp 'x-font-regexp) + x-font-regexp) (let ((- "[-?]") (foundry "[^-]*") @@ -497,13 +542,12 @@ )))) (defvar font-x-registry-and-encoding-regexp - (or (and font-running-xemacs - (boundp 'x-font-regexp-registry-and-encoding) - (symbol-value 'x-font-regexp-registry-and-encoding)) - (let ((- "[-?]") - (registry "[^-]*") - (encoding "[^-]+")) - (concat - "\\(" registry "\\)" - "\\(" encoding "\\)\\'")))) + (when (and (boundp 'x-font-regexp-registry-and-encoding) + (symbol-value 'x-font-regexp-registry-and-encoding)) + (let ((- "[-?]") + (registry "[^-]*") + (encoding "[^-]+")) + (concat - "\\(" registry "\\)" - "\\(" encoding "\\)\\'")))) (defvar font-x-family-mappings '( @@ -600,47 +644,6 @@ (sort (font-unique (nconc scaled normal)) 'string-lessp)))) (cons "monospace" (mapcar 'car font-x-family-mappings)))) -(defvar font-default-cache nil) - -;;;###autoload -(defun font-default-font-for-device (&optional device) - (or device (setq device (selected-device))) - (if font-running-xemacs - (font-truename - (make-font-specifier - (face-font-name 'default device))) - (let ((font (cdr-safe (assq 'font (frame-parameters device))))) - (if (and (fboundp 'fontsetp) (fontsetp font)) - (aref (get-font-info (aref (cdr (get-fontset-info font)) 0)) 2) - font)))) - -;;;###autoload -(defun font-default-object-for-device (&optional device) - (let ((font (font-default-font-for-device device))) - (or (cdr-safe (assoc font font-default-cache)) - (let ((object (font-create-object font))) - (push (cons font object) font-default-cache) - object)))) - -;;;###autoload -(defun font-default-family-for-device (&optional device) - (font-family (font-default-object-for-device (or device (selected-device))))) - -;;;###autoload -(defun font-default-registry-for-device (&optional device) - (font-registry (font-default-object-for-device (or device (selected-device))))) - -;;;###autoload -(defun font-default-encoding-for-device (&optional device) - (font-encoding (font-default-object-for-device (or device (selected-device))))) - -;;;###autoload -(defun font-default-size-for-device (&optional device) - ;; face-height isn't the right thing (always 1 pixel too high?) - ;; (if font-running-xemacs - ;; (format "%dpx" (face-height 'default device)) - (font-size (font-default-object-for-device (or device (selected-device))))) - (defun x-font-create-name (fontobj &optional device) "Return a font name constructed from FONTOBJ, appropriate for X devices." (if (and (not (or (font-family fontobj) @@ -656,8 +659,7 @@ (font-family default) (x-font-families-for-device device))) (weight (or (font-weight fontobj) :medium)) - (size (or (if font-running-xemacs - (font-size fontobj)) + (size (or (font-size fontobj) (font-size default))) (registry (or (font-registry fontobj) (font-registry default) @@ -714,6 +716,134 @@ (if done font-name))))) +;;; Cache building code +;;;###autoload +(defun x-font-build-cache (&optional device) + (let ((hash-table (make-hash-table :test 'equal :size 15)) + (fonts (mapcar 'x-font-create-object + (font-list "-*-*-*-*-*-*-*-*-*-*-*-*-*-*"))) + (plist nil) + (cur nil)) + (while fonts + (setq cur (car fonts) + fonts (cdr fonts) + plist (cl-gethash (car (font-family cur)) hash-table)) + (if (not (memq (font-weight cur) (plist-get plist 'weights))) + (setq plist (plist-put plist 'weights (cons (font-weight cur) + (plist-get plist 'weights))))) + (if (not (member (font-size cur) (plist-get plist 'sizes))) + (setq plist (plist-put plist 'sizes (cons (font-size cur) + (plist-get plist 'sizes))))) + (if (and (font-oblique-p cur) + (not (memq 'oblique (plist-get plist 'styles)))) + (setq plist (plist-put plist 'styles (cons 'oblique (plist-get plist 'styles))))) + (if (and (font-italic-p cur) + (not (memq 'italic (plist-get plist 'styles)))) + (setq plist (plist-put plist 'styles (cons 'italic (plist-get plist 'styles))))) + (cl-puthash (car (font-family cur)) plist hash-table)) + hash-table)) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; The rendering engine-dependent code (Xft-style) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; #### FIXME actually, this section should be fc-*, right? + +(defvar font-xft-font-regexp + ;; #### FIXME what the fuck?!? + (when (and (boundp 'xft-font-regexp) xft-font-regexp) + (concat "\\`" + "[^:-]*" ; optional foundry and family + ; incorrect, escaping exists + "\\(-[0-9]*\\(\\.[0-9]*\\)?\\)?" ; optional size (points) + "\\(:[^:]*\\)*" ; optional properties + ; not necessarily key=value!! + "\\'" + ))) + +(defvar font-xft-family-mappings + ;; #### FIXME this shouldn't be needed or used for Xft + '(("serif" . ("new century schoolbook" + "utopia" + "charter" + "times" + "lucidabright" + "garamond" + "palatino" + "times new roman" + "baskerville" + "bookman" + "bodoni" + "computer modern" + "rockwell" + )) + ("sans-serif" . ("lucida" + "helvetica" + "gills-sans" + "avant-garde" + "univers" + "optima")) + ("elfin" . ("tymes")) + ("monospace" . ("courier" + "fixed" + "lucidatypewriter" + "clean" + "terminal")) + ("cursive" . ("sirene" + "zapf chancery")) + ) + "A list of font family mappings on Xft devices.") + +(defun xft-font-create-object (fontname &optional device) + "Return a font descriptor object for FONTNAME, appropriate for Xft." + (let* ((name fontname) + (device (or device (default-x-device))) + (pattern (fc-font-real-pattern name device)) + (font-obj (make-font)) + (family (fc-pattern-get-family pattern 0)) + (size (fc-pattern-get-size pattern 0)) + (weight (fc-pattern-get-weight pattern 0))) + (set-font-family font-obj + (and (not (equal family 'fc-result-no-match)) + family)) + (set-font-size font-obj + (and (not (equal size 'fc-result-no-match)) + size)) + (set-font-weight font-obj + (and (not (equal weight 'fc-result-no-match)) + (fc-font-weight-translate-from-constant weight))) + font-obj)) + +;; #### FIXME Xft fonts are not defined by the device. +;; ... Does that mean the whole model here is bogus? +(defun xft-font-families-for-device (&optional device no-resetp) + (ignore-errors (require 'x-font-menu)) ; #### FIXME xft-font-menu? + (or device (setq device (selected-device))) + (if (boundp 'device-fonts-cache) ; #### FIXME does this make sense? + (let ((menu (or (cdr-safe (assq device device-fonts-cache))))) + (if (and (not menu) (not no-resetp)) + (progn + (reset-device-font-menus device) + (xft-font-families-for-device device t)) + ;; #### FIXME clearly bogus for Xft + (let ((scaled (mapcar #'(lambda (x) (if x (aref x 0))) + (aref menu 0))) + (normal (mapcar #'(lambda (x) (if x (aref x 0))) + (aref menu 1)))) + (sort (font-unique (nconc scaled normal)) 'string-lessp)))) + ;; #### FIXME clearly bogus for Xft + (cons "monospace" (mapcar 'car font-xft-family-mappings)))) + +(defun xft-font-create-name (fontobj &optional device) + (let* ((pattern (make-fc-pattern))) + (if (font-family fontobj) + (fc-pattern-add-family pattern (font-family fontobj))) + (if (font-size fontobj) + (fc-pattern-add-size pattern (font-size fontobj))) + (fc-name-unparse pattern))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; The window-system dependent code (NS-style) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -870,8 +1000,7 @@ (family (or (font-family fontobj) (font-family default))) (weight (or (font-weight fontobj) :regular)) - (size (or (if font-running-xemacs - (font-size fontobj)) + (size (or (font-size fontobj) (font-size default))) (underline-p (font-underline-p fontobj)) (strikeout-p (font-strikethru-p fontobj)) @@ -920,34 +1049,6 @@ (if done font-name))))) -;;; Cache building code -;;;###autoload -(defun x-font-build-cache (&optional device) - (let ((hash-table (make-hash-table :test 'equal :size 15)) - (fonts (mapcar 'x-font-create-object - (font-list "-*-*-*-*-*-*-*-*-*-*-*-*-*-*"))) - (plist nil) - (cur nil)) - (while fonts - (setq cur (car fonts) - fonts (cdr fonts) - plist (cl-gethash (car (font-family cur)) hash-table)) - (if (not (memq (font-weight cur) (plist-get plist 'weights))) - (setq plist (plist-put plist 'weights (cons (font-weight cur) - (plist-get plist 'weights))))) - (if (not (member (font-size cur) (plist-get plist 'sizes))) - (setq plist (plist-put plist 'sizes (cons (font-size cur) - (plist-get plist 'sizes))))) - (if (and (font-oblique-p cur) - (not (memq 'oblique (plist-get plist 'styles)))) - (setq plist (plist-put plist 'styles (cons 'oblique (plist-get plist 'styles))))) - (if (and (font-italic-p cur) - (not (memq 'italic (plist-get plist 'styles)))) - (setq plist (plist-put plist 'styles (cons 'italic (plist-get plist 'styles))))) - (cl-puthash (car (font-family cur)) plist hash-table)) - hash-table)) - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Now overwrite the original copy of set-face-font with our own copy that ;;; can deal with either syntax. @@ -967,7 +1068,7 @@ (setq cur (car font-name) font-name (cdr font-name)) (apply 'set-face-property face (car cur) (cdr cur) args)))) - (font-running-xemacs + (t (apply 'set-face-font face font-name args) (apply 'set-face-underline-p face (font-underline-p font) args) (if (and (or (font-smallcaps-p font) (font-bigcaps-p font)) @@ -978,16 +1079,18 @@ (font-linethrough-p font) (font-strikethru-p font)) args)) - (t - (condition-case nil - (apply 'set-face-font face font-name args) - (error - (let ((args (car-safe args))) - (and (or (font-bold-p font) - (memq (font-weight font) '(:bold :demi-bold))) - (make-face-bold face args t)) - (and (font-italic-p font) (make-face-italic face args t))))) - (apply 'set-face-underline-p face (font-underline-p font) args))))) +;;; this used to be default with preceding conditioned on font-running-xemacs +; (t +; (condition-case nil +; (apply 'set-face-font face font-name args) +; (error +; (let ((args (car-safe args))) +; (and (or (font-bold-p font) +; (memq (font-weight font) '(:bold :demi-bold))) +; (make-face-bold face args t)) +; (and (font-italic-p font) (make-face-italic face args t))))) +; (apply 'set-face-underline-p face (font-underline-p font) args)) + ))) (t ;; Let the original set-face-font signal any errors (set-face-property face 'font-specification nil) @@ -1059,8 +1162,6 @@ The list (R G B) is returned, or an error is signaled if the lookup fails." (let ((lib-list (if-boundp 'x-library-search-path x-library-search-path - ;; This default is from XEmacs 19.13 - hope it covers - ;; everyone. (list "/usr/X11R6/lib/X11/" "/usr/X11R5/lib/X11/" "/usr/lib/X11R6/X11/" @@ -1071,7 +1172,9 @@ "/usr/local/lib/X11R5/X11/" "/usr/X11/lib/X11/" "/usr/lib/X11/" + "/usr/share/X11/" "/usr/local/lib/X11/" + "/usr/local/share/X11/" "/usr/X386/lib/X11/" "/usr/x386/lib/X11/" "/usr/XFree86/lib/X11/" @@ -1362,13 +1465,14 @@ (defun font-blink-callback () ;; Optimized to never invert the face unless one of the visible windows ;; is showing it. - (let ((faces (if font-running-xemacs (face-list t) (face-list))) + (let ((faces (face-list t)) (obj nil)) (while faces (if (and (setq obj (face-property (car faces) 'font-specification)) (font-blink-p obj) (memq t - (font-map-windows 'font-face-visible-in-window-p (car faces)))) + (font-map-windows 'font-face-visible-in-window-p + (car faces)))) (invert-face (car faces))) (pop faces)))) diff -urN 21.5.23/lisp/fontconfig.el 21.5.24/lisp/fontconfig.el --- 21.5.23/lisp/fontconfig.el Thu Jan 1 09:00:00 1970 +++ 21.5.24/lisp/fontconfig.el Sat Nov 26 20:45:54 2005 @@ -0,0 +1,534 @@ +;;; fontconfig.el --- New font model, NG + +;; Copyright (c) 2003 Eric Knauel and Matthias Neubauer +;; Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +;; Authors: Eric Knauel +;; Matthias Neubauer +;; Stephen J. Turnbull +;; Created: 27 Oct 2003 +;; Updated: 05 Mar 2005 by Stephen J. Turnbull +;; Keywords: faces + +;; XEmacs 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, or (at your option) +;; any later version. + +;; XEmacs 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 XEmacs; see the file COPYING. If not, write to the Free +;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +;; 02111-1307, USA. + +;;; Synched up with: Not in GNU + +;;; Commentary: + +;; This file is one of the pillars of the face refactoring effort +;; (another will be colorconfig.el, and there may be others). + +;; The overall plan is to have a sensible modern model for values of +;; each of the components of a face (starting with fonts and colors), +;; implemented in a single module. Of course we must be able to +;; convert such values to appropriate descriptors for any device type +;; on the one hand, but on the other it seems unreasonable to force +;; users to deal with a large number of different (and arcane, in the +;; case of XLFD) naming formats. + +;; This file implements font specification. We call a specification a +;; *pattern* to conform to fontconfig usage. The internal +;; representation of a pattern will have Keith Packard's fontconfig +;; API. For one, there is a robust and free C implementation, which +;; is available as a package for all platforms supported by X.org or +;; XFree86. For another, it seems to be capable of representing any +;; specification of any of the font models I know. Third, on X +;; platforms that internal representation can be passed verbatim to +;; libXft to get high quality TrueType fonts rendered with +;; anti-aliasing and hinting. + +;; We will support the following user interfaces: + +;; 1. fontconfig font names +;; 2. X Logical Font Descriptions (XLFD) +;; 3. MS Windows font names +;; 4. Mac OS X font names + +;; and possibly others (such as ad hoc abbreviations used in older X11 +;; implementations). This is called the *fontname UI* (for the +;; platform) to distinguish it from XEmacs's internal model +;; (fontconfig patterns) and the API for rendering engines (called the +;; *font API* for the engine). + +;; We will support the following rendering engine APIs: + +;; 1. fontconfig patterns (the native language of Xft); to emphasize +;; the engine-specific nature, we will call these *Xft fonts* +;; 2. XLFD strings +;; 3. MS Windows font names + +;; and possibly others (such as Mac OS X font names). This is called +;; the *font API* (for the platform) to distinguish it from XEmacs's +;; internal model (fontconfig *patterns*) and the names used by users +;; (called the *fontname UI* for the platform). + + +;; TODO (possible enhancements) +;; 1. add a more complete docstring for properties as such (would be a +;; hash table?) to describe things like special symbolic values, and +;; Emacs-relevant semantics +;; 2. add a special value defining macro for constants + +;;; Code: + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The fontconfig pattern API +;; +;; The basic interfaces are defined as API wrappers in C in xft-font.c +;; #### which should be renamed to fontconfig.c. These are prefixed +;; with "fc-pattern-". These are +;; +;; fc-pattern-p +;; fc-pattern-create +;; fc-pattern-duplicate +;; fc-pattern-add +;; fc-pattern-del +;; fc-pattern-get +;; fc-pattern-destroy + +;; We provide a LISP-y alias, `make-fc-pattern' for the pattern +;; constructor function `fc-pattern-create'. #### It might make sense +;; to generalize `make-fc-pattern' by allowing a plist of properties +;; as an optional argument. We also provide accessors +;; `fc-pattern-get-PROPERTY' and mutators `fc-pattern-add-PROPERTY' +;; for each of the standard properties used by Xft, which overlap +;; substantially with the properties defined by X11. #### We probably +;; should provide `fc-pattern-delete-PROPERTY', too. + +(defalias 'make-fc-pattern 'fc-pattern-create) + +(defmacro fc-define-property (property type docfrag &optional obsolete-p) + "Define PROPERTY as a fontconfig font property of type TYPE using DOCFRAG. + +A font property is a key in a fontconfig pattern and is associated with +one or more values of a given type. This macro creates wrappers around +`fc-pattern-get' and `fc-pattern-add' for PROPERTY. Wrappers are +preferred to use of primitives with a string as the OBJECT argument because +typos in wrappers result in \"not fboundp\" errors, while a typo in a string +produces a silent null return. + +PROPERTY is a string. +TYPE is a symbol indicating the type of the property value. It is used only +to modify formatting of the wrapper function docstrings. +DOCFRAG is a string which briefly describes the use of the property, and is +interpolated into a format to create the doctstrings. +OBSOLETE-P if non-nil marks the property as pertaining only to older versions +of fontconfig or Xft. This merely adds a deprecation to the docstrings. + +This macro defines an accessor named `fc-pattern-get-PROPERTY' which takes +a fontconfig pattern object and an integer as arguments, and returns the +value associated with PROPERTY and ID in the pattern object. Since it is +not possible to associate a value to PROPERTY for a particular ID, it is +not very useful to interpret the values associated with a given id for +different properties as being linked to each other in some way. + +A mutator `fc-pattern-add-PROPERTY' which takes a fontconfig pattern object +and a value as arguments, and adds the value to the property with the next +id. The type of the value is recognized by `fc-pattern-add', and the id +is chosen by the fontconfig implementation." + + `(progn + (defsubst ,(intern (concat "fc-pattern-get-" property)) + (pattern id) + ,(format "\ +Return %s %s fc pattern PATTERN %s.%s + +This function is a convenience wrapper for `fc-pattern-get'. +See `fc-pattern-get' for documentation of patterns, ids, and error returns." + (if (eq type 'boolean) + "t" + docfrag) + (if (eq type 'boolean) + "if" + "associated with id ID in") + (if (eq type 'boolean) + docfrag + (format "as a%s %s" (if (eq type 'integer) "n" "") type)) + (if obsolete-p " +\(Obsolete, only available on systems using Xft version 1.)" + "")) + (fc-pattern-get pattern ,property id)) + + (defsubst ,(intern (concat "fc-pattern-add-" property)) + (pattern value) + ,(format "\ +Add VALUE to the %s property of fontconfig pattern PATTERN.%s + +The type of VALUE should be %s. + +This function is a convenience wrapper for `fc-pattern-add'. +See `fc-pattern-add' for documentation of patterns, values, and error returns." + property + (if obsolete-p " +\(Obsolete, only available on systems using Xft version 1.)" + "") + type) + (fc-pattern-add pattern ,property value)) + ,property)) + +;; define the standard properties for Xft v.2 here +(fc-define-property "antialias" boolean "the font supports antialiasing") +(fc-define-property "dpi" float "the design resolution") +(fc-define-property "family" string "the font family") +(fc-define-property "file" string "the file containing glyph data") +(fc-define-property "foundry" string "the vendor") +(fc-define-property "index" integer "the index of the glyph set") +(fc-define-property "minspace" boolean "has a minimum spacing") +(fc-define-property "outline" boolean "is an outline font") +(fc-define-property "pixelsize" float "the size in pixels") +(fc-define-property "rasterizer" string "the name of the rasterizing engine") +(fc-define-property "rgba" integer "the subpixel rendering capabilities") +(fc-define-property "scalable" boolean "is scalable") +(fc-define-property "scale" float "the scale factor") +(fc-define-property "size" float "the size in points") +(fc-define-property "slant" integer "the slant") +(fc-define-property "spacing" integer "the spacing model") +(fc-define-property "style" string "the typographic face or style") +(fc-define-property "weight" integer "the weight") +(fc-define-property "xlfd" string "the XLFD (full name in X11)") + +;; Xft v.1 properties (marked as obsolete) +(fc-define-property "encoding" string "the encoding" t) +(fc-define-property "charwidth" integer "the average character width" t) +(fc-define-property "charheight" integer "the average character height" t) +(fc-define-property "core" boolean "represents a core font" t) +(fc-define-property "render" boolean "represents a render (Xft) font" t) + + +(defconst fc-font-name-property-family "family") +(defconst fc-font-name-property-style "style") +(defconst fc-font-name-property-slant "slant") +(defconst fc-font-name-property-weight "weight") +(defconst fc-font-name-property-size "size") +(defconst fc-font-name-property-pixelsize "pixelsize") +(defconst fc-font-name-property-spacing "spacing") +(defconst fc-font-name-property-foundry "foundry") +(defconst fc-font-name-property-antialias "antialias") +(defconst fc-font-name-property-xlfd "xlfd") +(defconst fc-font-name-property-file "file") +(defconst fc-font-name-property-index "index") +(defconst fc-font-name-property-rasterizer "rasterizer") +(defconst fc-font-name-property-outline "outline") +(defconst fc-font-name-property-scalable "scalable") +(defconst fc-font-name-property-rgba "rgba") +(defconst fc-font-name-property-minspace "minspace") +(defconst fc-font-name-property-dpi "dpi") + +;; Xft version 1 only +;;(defconst fc-font-name-property-encoding "encoding") +;;(defconst fc-font-name-property-charwidth "charwidth") +;;(defconst fc-font-name-property-charheight "charheight") +;;(defconst fc-font-name-property-core "core") +;;(defconst fc-font-name-property-render "render") + + +(defconst fc-pattern-selector-mapping + `((,fc-font-name-property-family . fc-pattern-get-family) + (,fc-font-name-property-style . fc-pattern-get-style) + (,fc-font-name-property-slant . fc-pattern-get-slant) + (,fc-font-name-property-weight . fc-pattern-get-weight) + (,fc-font-name-property-size . fc-pattern-get-size) + (,fc-font-name-property-pixelsize . fc-pattern-get-pixelsize) + (,fc-font-name-property-spacing . fc-pattern-get-spacing) + (,fc-font-name-property-foundry . fc-pattern-get-foundry) + (,fc-font-name-property-antialias . fc-pattern-get-antialias) + (,fc-font-name-property-xlfd . fc-pattern-get-xlfd) + (,fc-font-name-property-file . fc-pattern-get-file) + (,fc-font-name-property-index . fc-pattern-get-index) + (,fc-font-name-property-rasterizer . fc-pattern-get-rasterizer) + (,fc-font-name-property-outline . fc-pattern-get-outline) + (,fc-font-name-property-scalable . fc-pattern-get-scalable) + (,fc-font-name-property-rgba . fc-pattern-get-rgba) + (,fc-font-name-property-minspace . fc-pattern-get-minspace) + (,fc-font-name-property-dpi . fc-pattern-get-dpi) + ;; Xft version 1 only + ;; (,fc-font-name-property-encoding . fc-pattern-get-encoding) + ;; (,fc-font-name-property-charwidth . fc-pattern-get-char-width) + ;; (,fc-font-name-property-charheight . fc-pattern-get-char-height) + ;; (,fc-font-name-property-core . fc-pattern-get-core) + ;; (,fc-font-name-property-render . fc-pattern-get-render) + )) + +(defvar fc-find-available-font-families-fc-fonts-only t + "If `fc-find-available-font-families-fc-fonts-only' is set to `t', +`fc-find-available-font-families' will ignore core fonts.") + +(defconst fc-font-name-slant-roman 0) +(defconst fc-font-name-slant-italic 100) +(defconst fc-font-name-slant-oblique 110) + +(defconst fc-font-name-slant-mapping + `((,fc-font-name-slant-roman . :roman) + (,fc-font-name-slant-italic . :italic) + (,fc-font-name-slant-oblique . :oblique))) + +(defconst fc-font-name-slant-mapping-string + `((,fc-font-name-slant-roman . "R") + (,fc-font-name-slant-roman . "I") + (,fc-font-name-slant-roman . "O"))) + +(defconst fc-font-name-slant-mapping-string-reverse + `(("R" . ,fc-font-name-slant-roman) + ("I" . ,fc-font-name-slant-italic) + ("O" . ,fc-font-name-slant-oblique))) + +(defconst fc-font-name-slant-mapping-reverse + `((:roman . ,fc-font-name-slant-roman) + (:italic . ,fc-font-name-slant-italic) + (:oblique . ,fc-font-name-slant-oblique))) + +(defun fc-font-slant-translate-from-constant (number) + "Translate the Xft font slant constant NUMBER to symbol." + (let ((pair (assoc number fc-font-name-slant-mapping))) + (if pair (cdr pair)))) + +(defun fc-font-slant-translate-from-symbol (symbol) + "Translate SYMBOL (`:roman', `:italic' or `:oblique') to the +corresponding Xft font slant constant." + (let ((pair (assoc symbol fc-font-name-slant-mapping-reverse))) + (if pair (cdr pair)))) + +(defun fc-font-slant-translate-to-string (num-or-sym) + (let* ((constant (if (symbolp num-or-sym) + (cdr (assoc num-or-sym fc-font-name-slant-mapping-reverse)) + num-or-sym)) + (pair (assoc constant fc-font-name-slant-mapping-string))) + (if pair (cdr pair)))) + +(defun fc-font-slant-translate-from-string (str) + (let ((pair (assoc str fc-font-name-slant-mapping-string-reverse))) + (if pair (cdr pair)))) + +(defconst fc-font-name-weight-light 0) +(defconst fc-font-name-weight-regular 80) +(defconst fc-font-name-weight-medium 100) +(defconst fc-font-name-weight-demibold 180) +(defconst fc-font-name-weight-bold 200) +(defconst fc-font-name-weight-black 210) + +(defconst fc-font-name-weight-mapping + `((,fc-font-name-weight-light . :light) + (,fc-font-name-weight-regular . :regular) + (,fc-font-name-weight-medium . :medium) + (,fc-font-name-weight-demibold . :demibold) + (,fc-font-name-weight-bold . :bold) + (,fc-font-name-weight-black . :black))) + +(defconst fc-font-name-weight-mapping-string + `((,fc-font-name-weight-light . "Light") + (,fc-font-name-weight-regular . "Regular") + (,fc-font-name-weight-medium . "Medium") + (,fc-font-name-weight-demibold . "Demibold") + (,fc-font-name-weight-bold . "Bold") + (,fc-font-name-weight-black . "Black"))) + +(defconst fc-font-name-weight-mapping-string-reverse + `(("Light" . ,fc-font-name-weight-light) + ("Regular" . ,fc-font-name-weight-regular) + ("Medium" . ,fc-font-name-weight-medium) + ("Demibold" . ,fc-font-name-weight-demibold) + ("Bold" . ,fc-font-name-weight-bold) + ("Black" . ,fc-font-name-weight-black))) + +(defconst fc-font-name-weight-mapping-reverse + `((:light . ,fc-font-name-weight-light) + (:regular . ,fc-font-name-weight-regular) + (:medium . ,fc-font-name-weight-medium) + (:demibold . ,fc-font-name-weight-demibold) + (:bold . ,fc-font-name-weight-bold) + (:black . ,fc-font-name-weight-black))) + +(defun fc-font-weight-translate-from-constant (number) + "Translate a Xft font weight constant NUMBER to symbol." + (let ((pair (assoc number fc-font-name-weight-mapping))) + (if pair (cdr pair)))) + +(defun fc-font-weight-translate-from-symbol (symbol) + "Translate SYMBOL (`:light', `:regular', `:medium', `:demibold', +`:bold' or `:black') to the corresponding Xft font weight constant." + (let ((pair (assoc symbol fc-font-name-weight-mapping-reverse))) + (if pair (cdr pair)))) + +(defun fc-font-weight-translate-to-string (num-or-sym) + (let* ((constant (if (symbolp num-or-sym) + (cdr (assoc num-or-sym fc-font-name-weight-mapping-reverse)) + num-or-sym)) + (pair (assoc constant fc-font-name-weight-mapping-string))) + (if pair (cdr pair)))) + +(defun fc-font-weight-translate-from-string (str) + (let ((pair (assoc str fc-font-name-weight-mapping-string-reverse))) + (if pair (cdr pair)))) + +(defun fc-copy-pattern-partial (pattern attribute-list) + "Return a copy of PATTERN restricted to ATTRIBUTE-LIST. + +PATTERN is a fontconfig pattern object. +ATTRIBUTE-LIST is a list of strings denoting font properties. +A new object is allocated and returned." + (let ((new (make-fc-pattern)) + (attrs attribute-list)) + ;;; We demand proper tail recursion! + (while (not (null attrs)) + (let ((get (intern (concat "fc-pattern-get-" (car attrs)))) + (set (intern (concat "fc-pattern-add-" (car attrs))))) + (if (and (fboundp get) (fboundp set)) + (funcall set new (funcall get pattern 0)) + (warn "property '%s' not defined, ignoring" (car attrs)))) + (setq attrs (cdr attrs))) + new)) + +(defun fc-pattern-get-all-attributes (fc-pattern fc-pattern-get-function) + (let ((count 0) + res end val) + (while (not end) + (setq val (funcall fc-pattern-get-function fc-pattern count)) + (if (or (equal val 'fc-result-no-id) + (equal val 'fc-result-no-match)) + (setq end t) + (setq res (append res (list val)) + count (+ count 1)))) + res)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The fontconfig fontname UI +;; +;; The basic interfaces are defined as API wrappers in C in xft-font.c +;; #### which should be renamed to fontconfig.c. These are prefixed +;; with "fc-name-". These are +;; +;; fc-name-parse +;; fc-name-unparse +;; xft-name-unparse + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The fontconfig font API +;; +;; The basic interfaces are defined as API wrappers in C in xft-font.c +;; #### which should be renamed to fontconfig.c. These are prefixed +;; with "fc-font-". These are +;; +;; fc-font-match +;; fc-list-fonts-pattern-objects +;; fc-font-sort +;; fc-font-real-pattern + +;; #### it might make sense to generalize `fc-try-font' by having a +;; global variable that contains a list of font name parsers. They are +;; tried in order, and the first one to return an fc-pattern is matched. + +(defun fc-try-font (font &optional device) + "Return list of pattern objects matching FONT on DEVICE. + +FONT may be a fontconfig pattern object or a fontconfig font name (a string). +Optional DEVICE is the device object to query, defaulting to the currently +selected device." + (fc-list-fonts-pattern-objects (or device (default-x-device)) + (if (fc-pattern-p font) + font + (fc-name-parse font)) + nil)) + +(defun fc-find-available-font-families (&optional device filter-fun) + "Find all available font families." + (let ((device (or device (default-x-device))) + (pattern (make-fc-pattern)) + (objectset '("family" "style"))) +; Xft2: does not work anymore +; (if (not fc-find-available-font-families-fc-fonts-only) +; (fc-pattern-add pattern fc-font-name-property-core t)) +; (fc-objectset-add objectset fc-font-name-property-encoding) + (let* ((all-fonts + (fc-list-fonts-pattern-objects device pattern objectset))) + (fc-delete-duplicates + (mapcar + '(lambda (pattern) + (fc-pattern-get-family pattern 0)) + (if filter-fun + (fc-filter all-fonts filter-fun) + all-fonts)))))) + +; Xft2: does not work anymore +; (defun fc-find-available-font-families-non-mule (&optional device) +; (fc-find-available-font-families +; device +; '(lambda (pattern) +; (let ((encodings (fc-pattern-get-all-attributes +; pattern 'fc-pattern-get-encoding))) +; ;; Be sure that the font support ISO-8859-1 +; (member "iso8859-1" encodings))))) + +(defun fc-find-available-weights-for-family (family &optional style device) + "Find available weights for font FAMILY." + (let* ((device (or device (default-x-device))) + (pattern (make-fc-pattern)) + (objectset '("weight"))) + (fc-pattern-add pattern fc-font-name-property-family family) + (if style + (fc-pattern-add pattern fc-font-name-property-style style)) + (mapcar + '(lambda (pattern) + (let ((fc-weight-constant (fc-pattern-get-weight pattern 0))) + (if fc-weight-constant + (fc-font-weight-translate-from-constant fc-weight-constant)))) + (fc-list-fonts-pattern-objects device pattern objectset)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The XLFD fontname UI +;; + +;; xlfd-font-name-p + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Utility functions +;; + +(defun fc-pattern-get-successp (result) + (and (not (equal result 'fc-result-no-match)) + (not (equal result 'fc-result-no-id)) + (not (equal result 'fc-internal-error)))) + +;;; DELETE-DUPLICATES and REMOVE-DUPLICATES from cl-seq.el do not +;;; seem to work on list of strings... +;;; #### Presumably just use :test 'equal! +(defun fc-delete-duplicates (l) + (let ((res nil) + (in l)) + (while (not (null in)) + (if (not (member (car in) res)) + (setq res (append res (list (car in))))) + (setq in (cdr in))) + res)) + +;; #### Use delete-if with :test 'equal. +(defun fc-filter (l fun) + (let ((res nil) + (in l)) + (while (not (null in)) + (if (funcall fun (car in)) + (setq res (append res (list (car in))))) + (setq in (cdr in))) + res)) + +(provide 'fontconfig) + +;;; fontconfig.el ends here diff -urN 21.5.23/lisp/frame.el 21.5.24/lisp/frame.el --- 21.5.23/lisp/frame.el Fri Jan 28 11:58:40 2005 +++ 21.5.24/lisp/frame.el Sun Nov 13 16:39:28 2005 @@ -1774,16 +1774,16 @@ shrink-to-fit) "Select and return a frame in which to display BUFFER. Normally, the buffer will simply be displayed in the selected frame. -But if the symbol naming the major-mode of the buffer has a 'frame-name +But if the symbol naming the major-mode of the buffer has a `frame-name' property (which should be a symbol), then the buffer will be displayed in a frame of that name. If there is no frame of that name, then one is created. -If the major-mode doesn't have a 'frame-name property, then the frame +If the major-mode doesn't have a `frame-name' property, then the frame named by `get-frame-for-buffer-default-frame-name' will be used. If that is nil (the default) then the currently selected frame will used. -If the frame-name symbol has an 'instance-limit property (an integer) +If the frame-name symbol has an `instance-limit' property (an integer) then each time a buffer of the mode in question is displayed, a new frame with that name will be created, until there are `instance-limit' of them. If instance-limit is 0, then a new frame will be created each time. @@ -1791,7 +1791,7 @@ If a buffer is already displayed in a frame, then `instance-limit' is ignored, and that frame is used. -If the frame-name symbol has a 'frame-defaults property, then that is +If the frame-name symbol has a `frame-defaults' property, then that is prepended to the `default-frame-plist' when creating a frame for the first time. diff -urN 21.5.23/lisp/glyphs.el 21.5.24/lisp/glyphs.el --- 21.5.23/lisp/glyphs.el Wed Feb 23 08:38:50 2005 +++ 21.5.24/lisp/glyphs.el Sun Nov 13 16:39:28 2005 @@ -584,7 +584,7 @@ HOW-TO-ADD should be either nil or one of the symbols `prepend', `append', `remove-tag-set-prepend', `remove-tag-set-append', `remove-locale', - `remove-locale-type', or `remove-all.' See `copy-specifier' and + `remove-locale-type', or `remove-all'. See `copy-specifier' and `add-spec-to-specifier' for a description of what each of these means. Most of the time, you do not need to worry about this argument; the default behavior usually is fine. @@ -695,7 +695,7 @@ specifier object, LOCALE can be a locale, a locale type, `all', or nil; see `copy-specifier' for its semantics. Otherwise LOCALE specifies the locale under which the specified instantiator(s) - will be added, and defaults to `global.' + will be added, and defaults to `global'. See `set-glyph-property' for more information." ; (interactive (glyph-interactive "image")) @@ -733,7 +733,7 @@ specifier object, LOCALE can be a locale, a locale type, `all', or nil; see `copy-specifier' for its semantics. Otherwise LOCALE specifies the locale under which the specified instantiator(s) - will be added, and defaults to `global.' + will be added, and defaults to `global'. See `set-glyph-property' for more information." ; (interactive (glyph-interactive "contrib-p")) @@ -772,7 +772,7 @@ specifier object, LOCALE can be a locale, a locale type, `all', or nil; see `copy-specifier' for its semantics. Otherwise LOCALE specifies the locale under which the specified instantiator(s) - will be added, and defaults to `global.' + will be added, and defaults to `global'. See `set-glyph-property' for more information." ; (interactive (glyph-interactive "baseline")) @@ -1133,7 +1133,7 @@ (set-glyph-image (symbol-value harg) value)))) ;; It might or might not be garbage, but it's rude. Make these -;; `compatible' instead of `obsolete.' -slb +;; `compatible' instead of `obsolete'. -slb (defun define-obsolete-pointer-glyph (old new) (define-compatible-variable-alias old new) (dontusethis-set-symbol-value-handler diff -urN 21.5.23/lisp/help.el 21.5.24/lisp/help.el --- 21.5.23/lisp/help.el Mon Oct 10 11:45:32 2005 +++ 21.5.24/lisp/help.el Wed Nov 16 21:13:02 2005 @@ -109,6 +109,7 @@ (define-key help-map "p" 'finder-by-keyword) (define-key help-map "\C-p" 'describe-pointer) +(define-key help-map "P" 'view-xemacs-problems) (define-key help-map "q" 'help-quit) @@ -840,6 +841,11 @@ (interactive) (Help-find-file (expand-file-name "NEWS" data-directory))) +(defun view-xemacs-problems () + "Display known problems with XEmacs." + (interactive) + (Help-find-file (expand-file-name "PROBLEMS" data-directory))) + (defun xemacs-www-page () "Go to the XEmacs World Wide Web page." (interactive) @@ -995,6 +1001,7 @@ " "") " +\\[view-xemacs-problems] Known problems. \\[customize] Customize Emacs options. \\[describe-distribution] How to obtain XEmacs. \\[describe-last-error] Information about the most recent error. @@ -1186,7 +1193,8 @@ (nth 1 fndef)) ((subrp fndef) (let* ((doc (documentation function)) - (args (and (string-match + (args (and doc + (string-match "[\n\t ]*\narguments: ?(\\(.*\\))\n?\\'" doc) (match-string 1 doc)))) diff -urN 21.5.23/lisp/hyper-apropos.el 21.5.24/lisp/hyper-apropos.el --- 21.5.23/lisp/hyper-apropos.el Wed Sep 15 17:30:27 2004 +++ 21.5.24/lisp/hyper-apropos.el Sun Nov 13 16:39:28 2005 @@ -208,7 +208,7 @@ (define-key map "e" 'hyper-apropos-eliminate-keyword) map) "Keybindings for the *Hyper Apropos* buffer. -This map inherits from `hyper-apropos-help-map.'") +This map inherits from `hyper-apropos-help-map'.") (define-obsolete-variable-alias 'hypropos-map 'hyper-apropos-map) diff -urN 21.5.23/lisp/menubar-items.el 21.5.24/lisp/menubar-items.el --- 21.5.23/lisp/menubar-items.el Wed May 11 02:35:58 2005 +++ 21.5.24/lisp/menubar-items.el Wed Nov 16 21:13:03 2005 @@ -1559,6 +1559,7 @@ ("%_Other" ["%_Current Installation Info" describe-installation :active (boundp 'Installation-string)] + ["%_Known Problems" view-xemacs-problems ] ["%_Obtaining the Latest Version" describe-distribution] ["%_No Warranty" describe-no-warranty] ["XEmacs %_License" describe-copying] diff -urN 21.5.23/lisp/mouse.el 21.5.24/lisp/mouse.el --- 21.5.23/lisp/mouse.el Wed Jan 26 13:47:14 2005 +++ 21.5.24/lisp/mouse.el Sun Nov 13 16:39:28 2005 @@ -406,7 +406,7 @@ called. Note that most applications should take action when the mouse is -released, not when it is pressed.'") +released, not when it is pressed.") (defvar mouse-track-drag-hook nil "Function or functions called when the user drags the mouse. diff -urN 21.5.23/lisp/mule/CVS/Entries 21.5.24/lisp/mule/CVS/Entries --- 21.5.23/lisp/mule/CVS/Entries Mon Dec 19 04:20:28 2005 +++ 21.5.24/lisp/mule/CVS/Entries Mon Dec 19 04:22:45 2005 @@ -1,45 +1,45 @@ -/.cvsignore/1.1/Wed Mar 13 08:52:14 2002//Tr21-5-23 -/arabic.el/1.7/Sat Mar 16 10:39:05 2002//Tr21-5-23 -/canna-leim.el/1.9/Fri Oct 21 15:48:33 2005//Tr21-5-23 -/china-util.el/1.3/Sat Mar 16 10:39:05 2002//Tr21-5-23 -/chinese.el/1.10/Sun Apr 7 17:10:50 2002//Tr21-5-23 -/cyril-util.el/1.6/Thu Feb 6 06:35:52 2003//Tr21-5-23 -/cyrillic.el/1.10/Thu Mar 21 07:30:21 2002//Tr21-5-23 -/devan-util.el/1.5/Mon Nov 15 20:15:22 2004//Tr21-5-23 -/devanagari.el/1.3/Sat Mar 16 10:39:05 2002//Tr21-5-23 -/english.el/1.6/Fri Mar 29 04:46:41 2002//Tr21-5-23 -/ethio-util.el/1.7/Sun Jun 6 23:58:46 2004//Tr21-5-23 -/ethiopic.el/1.6/Sat Mar 16 10:39:06 2002//Tr21-5-23 -/european.el/1.12/Tue May 10 17:02:59 2005//Tr21-5-23 -/greek.el/1.5/Sat Mar 16 10:39:06 2002//Tr21-5-23 -/hebrew.el/1.4/Sat Mar 16 10:39:06 2002//Tr21-5-23 -/indian.el/1.3/Sat Mar 16 10:39:06 2002//Tr21-5-23 -/japan-util.el/1.6/Thu Jan 9 13:09:05 2003//Tr21-5-23 -/japanese.el/1.11/Thu Jan 29 05:22:40 2004//Tr21-5-23 -/kinsoku.el/1.7/Tue Jul 9 09:37:01 2002//Tr21-5-23 -/korea-util.el/1.4/Thu Mar 21 07:30:22 2002//Tr21-5-23 -/korean.el/1.6/Sat Mar 16 10:39:06 2002//Tr21-5-23 -/lao-util.el/1.4/Wed Oct 29 21:05:45 2003//Tr21-5-23 -/lao.el/1.4/Mon Mar 18 10:07:37 2002//Tr21-5-23 -/latin.el/1.4/Tue May 10 17:03:00 2005//Tr21-5-23 -/misc-lang.el/1.5/Sat Mar 16 10:39:07 2002//Tr21-5-23 -/mule-category.el/1.9/Fri Aug 2 16:54:25 2002//Tr21-5-23 -/mule-ccl.el/1.9/Thu May 5 17:10:38 2005//Tr21-5-23 -/mule-charset.el/1.16/Wed Sep 22 02:25:06 2004//Tr21-5-23 -/mule-cmds.el/1.25/Tue Oct 4 16:43:36 2005//Tr21-5-23 -/mule-coding.el/1.19/Wed Mar 13 08:52:17 2002//Tr21-5-23 -/mule-composite-stub.el/1.1/Sat Mar 16 10:39:07 2002//Tr21-5-23 -/mule-composite.el/1.1/Sat Mar 16 10:39:07 2002//Tr21-5-23 -/mule-locale.txt/1.2/Wed Mar 13 08:52:17 2002//Tr21-5-23 -/mule-msw-init-late.el/1.2/Thu Jun 20 21:18:11 2002//Tr21-5-23 -/mule-tty-init.el/1.3/Thu Mar 21 07:30:23 2002//Tr21-5-23 -/mule-win32-init.el/1.1/Thu Feb 20 08:19:35 2003//Tr21-5-23 -/mule-x-init.el/1.7/Thu Jun 20 21:18:11 2002//Tr21-5-23 -/thai-util.el/1.3/Sat Mar 16 10:39:07 2002//Tr21-5-23 -/thai-xtis.el/1.4/Mon Mar 18 10:07:37 2002//Tr21-5-23 -/thai.el/1.5/Sat Mar 16 10:39:07 2002//Tr21-5-23 -/tibet-util.el/1.4/Thu Mar 21 07:30:23 2002//Tr21-5-23 -/tibetan.el/1.3/Sat Mar 16 10:39:07 2002//Tr21-5-23 -/viet-util.el/1.5/Thu Jan 9 13:09:04 2003//Tr21-5-23 -/vietnamese.el/1.6/Thu Mar 21 07:30:24 2002//Tr21-5-23 +/.cvsignore/1.1/Wed Mar 13 08:52:14 2002//Tr21-5-24 +/arabic.el/1.7/Sat Mar 16 10:39:05 2002//Tr21-5-24 +/canna-leim.el/1.9/Fri Oct 21 15:48:33 2005//Tr21-5-24 +/china-util.el/1.3/Sat Mar 16 10:39:05 2002//Tr21-5-24 +/chinese.el/1.10/Sun Apr 7 17:10:50 2002//Tr21-5-24 +/cyril-util.el/1.6/Thu Feb 6 06:35:52 2003//Tr21-5-24 +/cyrillic.el/1.10/Thu Mar 21 07:30:21 2002//Tr21-5-24 +/devan-util.el/1.5/Mon Nov 15 20:15:22 2004//Tr21-5-24 +/devanagari.el/1.3/Sat Mar 16 10:39:05 2002//Tr21-5-24 +/english.el/1.6/Fri Mar 29 04:46:41 2002//Tr21-5-24 +/ethio-util.el/1.7/Sun Jun 6 23:58:46 2004//Tr21-5-24 +/ethiopic.el/1.6/Sat Mar 16 10:39:06 2002//Tr21-5-24 +/european.el/1.12/Tue May 10 17:02:59 2005//Tr21-5-24 +/greek.el/1.5/Sat Mar 16 10:39:06 2002//Tr21-5-24 +/hebrew.el/1.4/Sat Mar 16 10:39:06 2002//Tr21-5-24 +/indian.el/1.3/Sat Mar 16 10:39:06 2002//Tr21-5-24 +/japan-util.el/1.6/Thu Jan 9 13:09:05 2003//Tr21-5-24 +/japanese.el/1.11/Thu Jan 29 05:22:40 2004//Tr21-5-24 +/kinsoku.el/1.7/Tue Jul 9 09:37:01 2002//Tr21-5-24 +/korea-util.el/1.4/Thu Mar 21 07:30:22 2002//Tr21-5-24 +/korean.el/1.6/Sat Mar 16 10:39:06 2002//Tr21-5-24 +/lao-util.el/1.4/Wed Oct 29 21:05:45 2003//Tr21-5-24 +/lao.el/1.4/Mon Mar 18 10:07:37 2002//Tr21-5-24 +/latin.el/1.4/Tue May 10 17:03:00 2005//Tr21-5-24 +/misc-lang.el/1.5/Sat Mar 16 10:39:07 2002//Tr21-5-24 +/mule-category.el/1.9/Fri Aug 2 16:54:25 2002//Tr21-5-24 +/mule-ccl.el/1.9/Thu May 5 17:10:38 2005//Tr21-5-24 +/mule-charset.el/1.16/Wed Sep 22 02:25:06 2004//Tr21-5-24 +/mule-cmds.el/1.26/Sat Dec 17 19:47:00 2005//Tr21-5-24 +/mule-coding.el/1.19/Wed Mar 13 08:52:17 2002//Tr21-5-24 +/mule-composite-stub.el/1.1/Sat Mar 16 10:39:07 2002//Tr21-5-24 +/mule-composite.el/1.1/Sat Mar 16 10:39:07 2002//Tr21-5-24 +/mule-locale.txt/1.2/Wed Mar 13 08:52:17 2002//Tr21-5-24 +/mule-msw-init-late.el/1.2/Thu Jun 20 21:18:11 2002//Tr21-5-24 +/mule-tty-init.el/1.3/Thu Mar 21 07:30:23 2002//Tr21-5-24 +/mule-win32-init.el/1.1/Thu Feb 20 08:19:35 2003//Tr21-5-24 +/mule-x-init.el/1.7/Thu Jun 20 21:18:11 2002//Tr21-5-24 +/thai-util.el/1.3/Sat Mar 16 10:39:07 2002//Tr21-5-24 +/thai-xtis.el/1.4/Mon Mar 18 10:07:37 2002//Tr21-5-24 +/thai.el/1.5/Sat Mar 16 10:39:07 2002//Tr21-5-24 +/tibet-util.el/1.4/Thu Mar 21 07:30:23 2002//Tr21-5-24 +/tibetan.el/1.3/Sat Mar 16 10:39:07 2002//Tr21-5-24 +/viet-util.el/1.5/Thu Jan 9 13:09:04 2003//Tr21-5-24 +/vietnamese.el/1.6/Thu Mar 21 07:30:24 2002//Tr21-5-24 D diff -urN 21.5.23/lisp/mule/CVS/Tag 21.5.24/lisp/mule/CVS/Tag --- 21.5.23/lisp/mule/CVS/Tag Mon Dec 19 04:20:28 2005 +++ 21.5.24/lisp/mule/CVS/Tag Mon Dec 19 04:22:45 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/lisp/mule/mule-cmds.el 21.5.24/lisp/mule/mule-cmds.el --- 21.5.23/lisp/mule/mule-cmds.el Wed Oct 5 01:43:36 2005 +++ 21.5.24/lisp/mule/mule-cmds.el Sun Dec 18 04:47:00 2005 @@ -1271,6 +1271,20 @@ (warn "Invalid native-coding-system %s in language environment %s" native language-name))) (define-coding-system-alias 'file-name 'native) + ;; Set the default keyboard and terminal coding systems to the native + ;; coding system of the language environment. + ;; + (setq keyboard-coding-system native + terminal-coding-system native) + + ;; And do the same for any TTYs. + (dolist (con (console-list)) + (when (eq 'tty (device-type (car (console-device-list con)))) + ;; Calling set-input-mode at the same time would be a sane thing + ;; to do here. I would prefer to default to accepting eight bit + ;; input and not using the top bit for Meta. + (set-console-tty-coding-system con native))) + ;; process output should not have EOL conversion. under MS Windows ;; and Cygwin, this screws things up (`cmd' is fine with just LF and ;; `bash' chokes on CR-LF). @@ -1327,7 +1341,7 @@ ;; locale but we should still use the right code page, etc. (declare-fboundp (mswindows-set-current-locale userdef))) ;; Unix: - (let ((locstring (set-current-locale ""))) + (let ((locstring (current-locale))) ;; assume C lib locale and LANG env var are set correctly. use ;; them to find the langenv. (setq langenv diff -urN 21.5.23/lisp/objects.el 21.5.24/lisp/objects.el --- 21.5.23/lisp/objects.el Fri Apr 13 03:21:32 2001 +++ 21.5.24/lisp/objects.el Tue Nov 29 21:08:36 2005 @@ -50,9 +50,11 @@ Valid instantiators for font specifiers are: --- a string naming a font (e.g. under X this might be - \"-*-courier-medium-r-*-*-*-140-*-*-*-*-iso8859-*\" for a 14-point - upright medium-weight Courier font) +-- a string naming a font; syntax is platform dependent. Some examples for + a 14-point upright medium-weight Courier font: + X11 (and GTK1): \"-*-courier-medium-r-*-*-*-140-*-*-*-*-iso8859-*\" + Xft (and GTK2): \"Courier-14\" + MS-Windows: \"Courier:14:Western\" -- a font instance (use that instance directly if the device matches, or use the string that generated it) -- a vector of no elements (only on TTY's; this means to set no font diff -urN 21.5.23/lisp/occur.el 21.5.24/lisp/occur.el --- 21.5.23/lisp/occur.el Mon Oct 24 19:07:27 2005 +++ 21.5.24/lisp/occur.el Tue Nov 29 21:33:47 2005 @@ -222,6 +222,7 @@ :type 'integer :group 'matching) +;;;###autoload (defalias 'list-matching-lines 'occur) (defcustom list-matching-lines-face 'match diff -urN 21.5.23/lisp/package-get.el 21.5.24/lisp/package-get.el --- 21.5.23/lisp/package-get.el Tue Oct 25 07:40:21 2005 +++ 21.5.24/lisp/package-get.el Sat Dec 17 08:52:23 2005 @@ -220,6 +220,7 @@ ("France (mirror.cict.fr)" "mirror.cict.fr" "xemacs/packages") ("France (pasteur.fr)" "ftp.pasteur.fr" "pub/computing/xemacs/packages") ("Germany (de.xemacs.org)" "ftp.de.xemacs.org" "pub/ftp.xemacs.org/tux/xemacs/packages") + ("Hong Kong (hk.xemacs.org)" "ftp.hk.xemacs.org" "pub/xemacsftp/packages") ("Iceland (is.xemacs.org)" "ftp.is.xemacs.org" "pub/xemacs/packages") ("Ireland (ie.xemacs.org)" "ftp.ie.xemacs.org" "mirrors/ftp.xemacs.org/pub/xemacs/packages") ("Ireland (heanet.ie)" "ftp.heanet.ie" "mirrors/ftp.xemacs.org/packages") @@ -227,15 +228,15 @@ ("Japan (aist.go.jp)" "ring.aist.go.jp" "pub/text/xemacs/packages") ("Japan (asahi-net.or.jp)" "ring.asahi-net.or.jp" "pub/text/xemacs/packages") ("Japan (dti.ad.jp)" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/packages") - ("Japan (jaist.ac.jp)" "ftp.jaist.ac.jp" "pub/GNU/xemacs/packages") - ("Japan (jp.xemacs.org)" "ftp.jp.xemacs.org" "pub/GNU/xemacs/packages") +; ("Japan (jaist.ac.jp)" "ftp.jaist.ac.jp" "pub/GNU/xemacs/packages") +; ("Japan (jp.xemacs.org)" "ftp.jp.xemacs.org" "pub/GNU/xemacs/packages") ; ("Japan (nucba.ac.jp)" "mirror.nucba.ac.jp" "mirror/xemacs/packages") ("Japan (sut.ac.jp)" "sunsite.sut.ac.jp" "pub/archives/packages/xemacs/packages") ("Korea (kr.xemacs.org)" "ftp.kr.xemacs.org" "pub/tools/emacs/xemacs/packages") ("New Zealand (nz.xemacs.org)" "ftp.nz.xemacs.org" "mirror/ftp.xemacs.org/packages") ("Norway (no.xemacs.org)" "ftp.no.xemacs.org" "pub/xemacs/packages") ("Poland (pl.xemacs.org)" "ftp.pl.xemacs.org" "pub/unix/editors/xemacs/packages") - ("Russia (ru.xemacs.org)" "ftp.ru.xemacs.org" "pub/xemacs/packages") + ("Russia (ru.xemacs.org)" "ftp.ru.xemacs.org" "pub/emacs/xemacs/packages") ; ("South Africa (za.xemacs.org)" "ftp.za.xemacs.org" "mirrorsites/ftp.xemacs.org/packages") ("Sweden (se.xemacs.org)" "ftp.se.xemacs.org" "pub/gnu/xemacs/packages") ("Switzerland (ch.xemacs.org)" "ftp.ch.xemacs.org" "mirror/xemacs/packages") @@ -245,7 +246,8 @@ ("US (stealth.net)" "ftp.stealth.net" "pub/mirrors/ftp.xemacs.org/pub/xemacs/packages") ("US (unc.edu)" "metalab.unc.edu" "pub/packages/editors/xemacs/packages") ("US (us.xemacs.org)" "ftp.us.xemacs.org" "pub/xemacs/packages") - ("US (utk.edu)" "ftp.sunsite.utk.edu" "pub/xemacs/packages")) +; ("US (utk.edu)" "ftp.sunsite.utk.edu" "pub/xemacs/packages") + ) "*List of remote sites available for downloading packages. List format is '(site-description site-name directory-on-site). SITE-DESCRIPTION is a textual description of the site. SITE-NAME @@ -261,7 +263,7 @@ (defcustom package-get-pre-release-download-sites '( ;; Main XEmacs Site (ftp.xemacs.org) - ("Pre-Releases (Main XEmacs Site)" "ftp.xemacs.org" + ("US Pre-Releases (Main XEmacs Site)" "ftp.xemacs.org" "pub/xemacs/beta/experimental/packages") ;; In alphabetical order of Country, our mirrors... ("Argentina Pre-Releases (xmundo.net)" "xemacs.xmundo.net" @@ -296,6 +298,8 @@ "pub/computing/xemacs/beta/experimental/packages") ("Germany Pre-Releases (de.xemacs.org)" "ftp.de.xemacs.org" "pub/ftp.xemacs.org/tux/xemacs/beta/experimental/packages") + ("Hong Kong Pre-Releases (hk.xemacs.org)" "ftp.hk.xemacs.org" + "pub/xemacsftp/beta/experimental/packages") ("Iceland Pre-Releases (is.xemacs.org)" "ftp.is.xemacs.org" "pub/xemacs/beta/experimental/packages") ("Ireland Pre-Releases (ie.xemacs.org)" "ftp.ie.xemacs.org" @@ -310,10 +314,10 @@ "pub/text/xemacs/beta/experimental/packages") ("Japan Pre-Releases (dti.ad.jp)" "ftp.dti.ad.jp" "pub/unix/editor/xemacs/beta/experimental/packages") - ("Japan Pre-Releases (jaist.ac.jp)" "ftp.jaist.ac.jp" - "pub/GNU/xemacs/beta/experimental/packages") - ("Japan Pre-Releases (jp.xemacs.org)" "ftp.jp.xemacs.org" - "pub/GNU/xemacs/beta/experimental/packages") +; ("Japan Pre-Releases (jaist.ac.jp)" "ftp.jaist.ac.jp" +; "pub/GNU/xemacs/beta/experimental/packages") +; ("Japan Pre-Releases (jp.xemacs.org)" "ftp.jp.xemacs.org" +; "pub/GNU/xemacs/beta/experimental/packages") ("Japan Pre-Releases (sut.ac.jp)" "sunsite.sut.ac.jp" "pub/archives/packages/xemacs/xemacs-21.5/experimental/packages") ("Korea (kr.xemacs.org)" "ftp.kr.xemacs.org" @@ -325,7 +329,7 @@ ("Poland Pre-Releases (pl.xemacs.org)" "ftp.pl.xemacs.org" "pub/unix/editors/xemacs/beta/experimental/packages") ("Russia Pre-Releases (ru.xemacs.org)" "ftp.ru.xemacs.org" - "pub/xemacs/beta/experimental/packages") + "pub/emacs/xemacs/beta/experimental/packages") ; ("South Africa Pre-Releases (za.xemacs.org)" "ftp.za.xemacs.org" ; "mirrorsites/ftp.xemacs.org/beta/experimental/packages") ("Sweden Pre-Releases (se.xemacs.org)" "ftp.se.xemacs.org" @@ -344,8 +348,9 @@ "pub/packages/editors/xemacs/beta/experimental/packages") ("US Pre-Releases (us.xemacs.org)" "ftp.us.xemacs.org" "pub/xemacs/beta/experimental/packages") - ("US Pre-Releases (utk.edu)" "ftp.sunsite.utk.edu" - "pub/xemacs/beta/experimental/packages")) +; ("US Pre-Releases (utk.edu)" "ftp.sunsite.utk.edu" +; "pub/xemacs/beta/experimental/packages") +) "*List of remote sites available for downloading \"Pre-Release\" packages. List format is '(site-description site-name directory-on-site). SITE-DESCRIPTION is a textual description of the site. SITE-NAME diff -urN 21.5.23/lisp/select.el 21.5.24/lisp/select.el --- 21.5.23/lisp/select.el Sun Mar 13 05:57:42 2005 +++ 21.5.24/lisp/select.el Wed Nov 16 16:22:40 2005 @@ -131,7 +131,7 @@ (catch 'converted (if targets (dolist (current-preference data-type) - (condition-case err + (condition-case nil (if (and (memq current-preference targets) (setq res (get-selection-internal type current-preference))) diff -urN 21.5.23/lisp/simple.el 21.5.24/lisp/simple.el --- 21.5.23/lisp/simple.el Wed Oct 19 05:49:43 2005 +++ 21.5.24/lisp/simple.el Sun Nov 13 19:51:18 2005 @@ -4387,7 +4387,7 @@ basis. See `display-warning-suppressed-classes' and `log-warning-suppressed-classes'. -For a description of the meaning of the levels, see `display-warning.'" +For a description of the meaning of the levels, see `display-warning'." :type '(choice (const emergency) (const critical) (const error) (const warning) (const alert) (const notice) (const info) (const debug)) @@ -4410,7 +4410,7 @@ basis. See `display-warning-suppressed-classes' and `log-warning-suppressed-classes'. -For a description of the meaning of the levels, see `display-warning.'" +For a description of the meaning of the levels, see `display-warning'." :type '(choice (const emergency) (const critical) (const error) (const warning) (const alert) (const notice) (const info) (const debug)) @@ -4676,7 +4676,7 @@ (error nil)))) (if fmt (progn - (prin1 (apply #'format args)) + (princ (apply #'format args)) (terpri)) (princ "--> ") (let ((i 1)) diff -urN 21.5.23/lisp/specifier.el 21.5.24/lisp/specifier.el --- 21.5.23/lisp/specifier.el Wed Sep 22 11:05:51 2004 +++ 21.5.24/lisp/specifier.el Sun Nov 13 16:39:28 2005 @@ -1,7 +1,7 @@ ;;; specifier.el --- Lisp interface to specifiers ;; Copyright (C) 1997 Free Software Foundation, Inc. -;; Copyright (C) 1995, 1996, 2000, 2002 Ben Wing. +;; Copyright (C) 1995, 1996, 2000, 2002, 2005 Ben Wing. ;; Author: Ben Wing ;; Keywords: internal, dumped @@ -55,7 +55,7 @@ If optional MS-LOCALE is a locale, MS-FUNC will be called for that locale. If MS-LOCALE is a locale type, MS-FUNC will be mapped over all locales of that -type. If MS-LOCALE is 'all or nil, MS-FUNC will be mapped over all locales in +type. If MS-LOCALE is `all' or nil, MS-FUNC will be mapped over all locales in MS-SPECIFIER. Optional MS-TAG-SET and MS-EXACT-P are as in `specifier-spec-list'. @@ -306,7 +306,7 @@ VALUE may be any of the values accepted by `canonicalize-spec-list', including -- an instantiator (either a Lisp object which will be returned when the - specifier is instanced, or a Lisp object that can be instantiated to + specifier is instantiated, or a Lisp object that can be instantiated to produce an opaque value: eg, a font name (string) can be used for a font specifier, but an instance will be a font object) -- a list of instantiators @@ -330,7 +330,7 @@ Note that a VALUE of `nil' is either illegal or will be treated as a value of `nil'; it does not remove existing specifications. Use `remove-specifier' for that. N.B. `remove-specifier' defaults to removing all specifications, not -just the 'global one! +just the `global' one! Warning: this function is inherently heuristic, and should not be relied on to properly resolve ambiguities, when specifier instantiators can be lists @@ -410,6 +410,12 @@ (canonicalize-spec-list nval (specifier-type specifier)) how-to-add)))) value) + +;; #### Misnamed and wrong behavior. Should operate on INSTANTIATORS, not +;; instances. Need to come up with clean and general functions for +;; modifying a specifier. New `specifier-instantiator' may help. +;; #### Also need `instantiator-to-instance', a convenient version of +;; `specifier-instance-from-inst-list'. (defun modify-specifier-instances (specifier func &optional args force default locale tag-set) diff -urN 21.5.23/lisp/syntax.el 21.5.24/lisp/syntax.el --- 21.5.23/lisp/syntax.el Sat May 5 07:42:15 2001 +++ 21.5.24/lisp/syntax.el Sun Nov 13 19:58:00 2005 @@ -2,6 +2,7 @@ ;; Copyright (C) 1993, 1997 Free Software Foundation, Inc. ;; Copyright (C) 1995 Sun Microsystems. +;; Copyright (C) 2005 Ben Wing. ;; This file is part of XEmacs. @@ -238,7 +239,11 @@ ; spec (aref o ?a) (aref n ?a)))))))) -(defun describe-syntax-table (table stream) +(defun describe-char-table (table mapper describe-value stream) +"Describe char-table TABLE, outputting to STREAM. +MAPPER maps over the table and should be `map-char-table' or +`map-syntax-table'. DESCRIBE-VALUE is a function of two arguments, +VALUE and STREAM, and should output a description of VALUE." (let (first-char last-char prev-val @@ -272,7 +277,7 @@ (text-char-description first) (text-char-description last)) stream)))) - (describe-syntax-code value stream)) + (funcall describe-value value stream)) #'(lambda (first last value stream) (let* ((tem (text-char-description first)) (pos (length tem)) @@ -290,8 +295,8 @@ (while (progn (write-char ?\ stream) (setq pos (1+ pos)) (< pos 16)))) - (describe-syntax-code value stream))))) - (map-syntax-table + (funcall describe-value value stream))))) + (funcall mapper #'(lambda (range value) (cond ((not first-char) @@ -320,6 +325,10 @@ table) (if first-char (funcall describe-one first-char last-char prev-val stream)))) + +(defun describe-syntax-table (table stream) + "Output a description of TABLE (a syntax table) to STREAM." + (describe-char-table table 'map-syntax-table 'describe-syntax-code stream)) (defun describe-syntax-code (code stream) (let ((match (and (consp code) (cdr code))) diff -urN 21.5.23/lisp/term/CVS/Entries 21.5.24/lisp/term/CVS/Entries --- 21.5.23/lisp/term/CVS/Entries Mon Dec 19 04:20:30 2005 +++ 21.5.24/lisp/term/CVS/Entries Mon Dec 19 04:22:51 2005 @@ -1,29 +1,29 @@ -/AT386.el/1.2/Fri Jun 22 01:50:01 2001//Tr21-5-23 -/README/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/apollo.el/1.3/Fri Jun 22 01:50:01 2001//Tr21-5-23 -/bg-mouse.el/1.3/Wed Mar 13 10:00:09 2002//Tr21-5-23 -/bobcat.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/cygwin.el/1.1/Fri Jun 22 01:50:01 2001//Tr21-5-23 -/keyswap.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/linux.el/1.3/Mon Feb 9 15:33:38 2004//Tr21-5-23 -/lk201.el/1.2/Fri Jun 22 01:50:01 2001//Tr21-5-23 -/news.el/1.2/Fri Jun 22 01:50:01 2001//Tr21-5-23 -/scoansi.el/1.2/Thu Apr 12 18:21:48 2001//Tr21-5-23 -/sup-mouse.el/1.2/Wed Mar 13 10:00:09 2002//Tr21-5-23 -/tvi970.el/1.2/Sun Jun 6 23:58:46 2004//Tr21-5-23 -/vt-control.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt100-led.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt100.el/1.2/Fri Jun 22 01:50:01 2001//Tr21-5-23 -/vt102.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt125.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt200.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt201.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt220.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt240.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt300.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt320.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt400.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/vt420.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/wyse50.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-23 -/xterm.el/1.1.1.2/Sat Dec 21 20:48:44 1996//Tr21-5-23 +/AT386.el/1.2/Fri Jun 22 01:50:01 2001//Tr21-5-24 +/README/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/apollo.el/1.3/Fri Jun 22 01:50:01 2001//Tr21-5-24 +/bg-mouse.el/1.3/Wed Mar 13 10:00:09 2002//Tr21-5-24 +/bobcat.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/cygwin.el/1.1/Fri Jun 22 01:50:01 2001//Tr21-5-24 +/keyswap.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/linux.el/1.3/Mon Feb 9 15:33:38 2004//Tr21-5-24 +/lk201.el/1.2/Fri Jun 22 01:50:01 2001//Tr21-5-24 +/news.el/1.2/Fri Jun 22 01:50:01 2001//Tr21-5-24 +/scoansi.el/1.2/Thu Apr 12 18:21:48 2001//Tr21-5-24 +/sup-mouse.el/1.2/Wed Mar 13 10:00:09 2002//Tr21-5-24 +/tvi970.el/1.2/Sun Jun 6 23:58:46 2004//Tr21-5-24 +/vt-control.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt100-led.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt100.el/1.2/Fri Jun 22 01:50:01 2001//Tr21-5-24 +/vt102.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt125.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt200.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt201.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt220.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt240.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt300.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt320.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt400.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/vt420.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/wyse50.el/1.1.1.1/Wed Dec 18 22:42:59 1996//Tr21-5-24 +/xterm.el/1.1.1.2/Sat Dec 21 20:48:44 1996//Tr21-5-24 D diff -urN 21.5.23/lisp/term/CVS/Tag 21.5.24/lisp/term/CVS/Tag --- 21.5.23/lisp/term/CVS/Tag Mon Dec 19 04:20:30 2005 +++ 21.5.24/lisp/term/CVS/Tag Mon Dec 19 04:22:51 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/lisp/toolbar.el 21.5.24/lisp/toolbar.el --- 21.5.23/lisp/toolbar.el Wed Mar 13 17:52:09 2002 +++ 21.5.24/lisp/toolbar.el Sun Nov 13 16:39:28 2005 @@ -146,7 +146,7 @@ ;; (defun press-toolbar-button (event) "Press a toolbar button. This only changes its appearance. -Call function stored in `toolbar-blank-press-function,' if any, with EVENT as +Call function stored in `toolbar-blank-press-function', if any, with EVENT as an argument if press is over a blank area of the toolbar." (interactive "_e") (setq this-command last-command) @@ -165,7 +165,7 @@ (defun release-and-activate-toolbar-button (event) "Release a toolbar button and activate its callback. -Call function stored in `toolbar-blank-release-function,' if any, with EVENT +Call function stored in `toolbar-blank-release-function', if any, with EVENT as an argument if release is over a blank area of the toolbar." (interactive "_e") (or (button-release-event-p event) diff -urN 21.5.23/lisp/x-faces.el 21.5.24/lisp/x-faces.el --- 21.5.23/lisp/x-faces.el Thu Mar 31 20:28:44 2005 +++ 21.5.24/lisp/x-faces.el Mon Dec 5 18:43:37 2005 @@ -66,6 +66,8 @@ '(x-get-resource-and-maybe-bogosity-check x-get-resource x-init-pointer-shape)) +(require 'fontconfig) + (defconst x-font-regexp nil) (defconst x-font-regexp-head nil) (defconst x-font-regexp-head-2 nil) @@ -78,6 +80,7 @@ (defconst x-font-regexp-spacing nil) ;;; Regexps matching font names in "Host Portable Character Representation." +;;; #### But more recently Latin-1 is permitted, and Xft needs it in C (?). ;;; (let ((- "[-?]") (foundry "[^-]*") @@ -134,6 +137,11 @@ - registry - encoding "\\'")) ) +(defun x-font-xlfd-font-name-p (font) + "Check if FONT is an XLFD font name" + (and (stringp font) + (string-match x-font-regexp font))) + ;; A "loser font" is something like "8x13" -> "8x13bold". ;; These are supported only through extreme generosity. (defconst x-loser-font-regexp "\\`[0-9]+x[0-9]+\\'") @@ -167,6 +175,46 @@ (defun x-make-font-bold (font &optional device) "Given an X font specification, this attempts to make a `bold' font. If it fails, it returns nil." + (if (featurep 'xft-fonts) + (if (x-font-xlfd-font-name-p font) + (x-make-font-bold-core font device) + (x-make-font-bold-xft font device)) + (x-make-font-bold-core font device))) + +(defun x-make-font-bold-xft (font &optional device) + (let ((pattern (fc-font-real-pattern + font (or device (default-x-device))))) + (if pattern + (let ((size (fc-pattern-get-size pattern 0)) + (copy (fc-copy-pattern-partial + pattern (list fc-font-name-property-family)))) + (fc-pattern-del copy fc-font-name-property-weight) + (fc-pattern-del copy fc-font-name-property-style) + (when copy + (or + ;; try bold font + (let ((copy-2 (fc-pattern-duplicate copy))) + (fc-pattern-add copy-2 fc-font-name-property-weight + fc-font-name-weight-bold) + (when (fc-try-font copy-2 device) + (fc-pattern-add copy-2 fc-font-name-property-size size) + (fc-name-unparse copy-2))) + ;; try black font + (let ((copy-2 (fc-pattern-duplicate copy))) + (fc-pattern-add copy-2 fc-font-name-property-weight + fc-font-name-weight-black) + (when (fc-try-font copy-2 device) + (fc-pattern-add copy-2 fc-font-name-property-size size) + (fc-name-unparse copy-2))) + ;; try demibold font + (let ((copy-2 (fc-pattern-duplicate copy))) + (fc-pattern-add copy-2 fc-font-name-property-weight + fc-font-name-weight-demibold) + (when (fc-try-font copy-2 device) + (fc-pattern-add copy-2 fc-font-name-property-size size) + (fc-name-unparse copy-2))))))))) + +(defun x-make-font-bold-core (font &optional device) ;; Certain Type1 fonts know "bold" as "black"... (or (try-font-name (x-frob-font-weight font "bold") device) (try-font-name (x-frob-font-weight font "black") device) @@ -175,6 +223,23 @@ (defun x-make-font-unbold (font &optional device) "Given an X font specification, this attempts to make a non-bold font. If it fails, it returns nil." + (if (featurep 'xft-fonts) + (if (x-font-xlfd-font-name-p font) + (x-make-font-unbold-core font device) + (x-make-font-unbold-xft font device)) + (x-make-font-unbold-core font device))) + +(defun x-make-font-unbold-xft (font &optional device) + (let ((pattern (fc-font-real-pattern + font (or device (default-x-device))))) + (when pattern + (fc-pattern-del pattern fc-font-name-property-weight) + (fc-pattern-add pattern fc-font-name-property-weight + fc-font-name-weight-medium) + (if (fc-try-font pattern device) + (fc-name-unparse pattern))))) + +(defun x-make-font-unbold-core (font &optional device) (try-font-name (x-frob-font-weight font "medium") device)) (defcustom try-oblique-before-italic-fonts nil @@ -189,6 +254,53 @@ (defun x-make-font-italic (font &optional device) "Given an X font specification, this attempts to make an `italic' font. If it fails, it returns nil." + (if (featurep 'xft-fonts) + (if (x-font-xlfd-font-name-p font) + (x-make-font-italic-core font device) + (x-make-font-italic-xft font device)) + (x-make-font-italic-core font device))) + +(defun x-make-font-italic-xft (font &optional device) + (let ((pattern (fc-font-real-pattern + font (or device (default-x-device))))) + (if pattern + (let ((size (fc-pattern-get-size pattern 0)) + (copy (fc-copy-pattern-partial + pattern (list fc-font-name-property-family)))) + (when copy + (fc-pattern-del copy fc-font-name-property-slant) + (fc-pattern-del copy fc-font-name-property-style) + (let ((pattern-oblique (fc-pattern-duplicate copy)) + (pattern-italic (fc-pattern-duplicate copy))) + (fc-pattern-add pattern-oblique fc-font-name-property-slant + fc-font-name-slant-oblique) + (fc-pattern-add pattern-italic fc-font-name-property-slant + fc-font-name-slant-italic) + (let ((have-oblique (fc-try-font pattern-oblique device)) + (have-italic (fc-try-font pattern-italic device))) + (if try-oblique-before-italic-fonts + (if have-oblique + (progn + (if size + (fc-pattern-add pattern-oblique fc-font-name-property-size size)) + (fc-name-unparse pattern-oblique)) + (if have-italic + (progn + (if size + (fc-pattern-add pattern-italic fc-font-name-property-size size)) + (fc-name-unparse pattern-italic)))) + (if have-italic + (progn + (if size + (fc-pattern-add pattern-italic fc-font-name-property-size size)) + (fc-name-unparse pattern-italic)) + (if have-oblique + (progn + (if size + (fc-pattern-add pattern-oblique fc-font-name-property-size size)) + (fc-name-unparse pattern-oblique)))))))))))) + +(defun x-make-font-italic-core (font &optional device) (if try-oblique-before-italic-fonts (or (try-font-name (x-frob-font-slant font "o") device) (try-font-name (x-frob-font-slant font "i") device)) @@ -198,11 +310,40 @@ (defun x-make-font-unitalic (font &optional device) "Given an X font specification, this attempts to make a non-italic font. If it fails, it returns nil." + (if (featurep 'xft-fonts) + (if (x-font-xlfd-font-name-p font) + (x-make-font-unitalic-core font device) + (x-make-font-unitalic-xft font device)) + (x-make-font-unitalic-core font device))) + +(defun x-make-font-unitalic-xft (font &optional device) + (let ((pattern (fc-font-real-pattern + font (or device (default-x-device))))) + (when pattern + (fc-pattern-del pattern fc-font-name-property-slant) + (fc-pattern-add pattern fc-font-name-property-slant + fc-font-name-slant-roman) + (if (fc-try-font pattern device) + (fc-name-unparse pattern))))) + +(defun x-make-font-unitalic-core (font &optional device) (try-font-name (x-frob-font-slant font "r") device)) (defun x-make-font-bold-italic (font &optional device) "Given an X font specification, this attempts to make a `bold-italic' font. If it fails, it returns nil." + (if (featurep 'xft-fonts) + (if (x-font-xlfd-font-name-p font) + (x-make-font-bold-italic-core font device) + (x-make-font-bold-italic-xft font device)) + (x-make-font-bold-italic-core font device))) + +(defun x-make-font-bold-italic-xft (font &optional device) + (let ((italic (x-make-font-italic-xft font device))) + (if italic + (x-make-font-bold-xft italic device)))) + +(defun x-make-font-bold-italic-core (font &optional device) ;; This is haired up to avoid loading the "intermediate" fonts. (if try-oblique-before-italic-fonts (or (try-font-name @@ -236,6 +377,21 @@ X fonts can be specified (by the user) in either pixels or 10ths of points, and this returns the first one it finds, so you have to decide which units the returned value is measured in yourself..." + (if (featurep 'xft-fonts) + (if (x-font-xlfd-font-name-p font) + (x-font-size-core font) + (x-font-size-xft font)) + (x-font-size-core font))) + +;; this is unbelievable &*@# +(defun x-font-size-xft (font) + (let ((pattern (fc-font-real-pattern + font (default-x-device)))) + (when pattern + (let ((pixelsize (fc-pattern-get-pixelsize pattern 0))) + (if (floatp pixelsize) (round pixelsize)))))) + +(defun x-font-size-core (font) (if (font-instance-p font) (setq font (font-instance-name font))) (cond ((or (string-match x-font-regexp font) (string-match x-font-regexp-head-2 font)) @@ -354,6 +510,29 @@ Returns the font if it succeeds, nil otherwise. If scalable fonts are available, this returns a font which is 1 point smaller. Otherwise, it returns the next smaller version of this font that is defined." + (if (featurep 'xft-fonts) + (if (x-font-xlfd-font-name-p font) + (x-find-smaller-font-core font device) + (x-find-smaller-font-xft font device)) + (x-find-smaller-font-core font device))) + +(defun x-find-xft-font-of-size (font new-size-proc &optional device) + (let* ((pattern (fc-font-real-pattern + font (or device (default-x-device))))) + (when pattern + (let ((size (fc-pattern-get-size pattern 0))) + (if (floatp size) + (let ((copy (fc-pattern-duplicate pattern))) + (fc-pattern-del copy fc-font-name-property-size) + (fc-pattern-add copy fc-font-name-property-size + (funcall new-size-proc size)) + (if (fc-try-font font device) + (fc-name-unparse copy)))))))) + +(defun x-find-smaller-font-xft (font &optional device) + (x-find-xft-font-of-size font '(lambda (old-size) (- old-size 1.0)) device)) + +(defun x-find-smaller-font-core (font &optional device) (x-frob-font-size font nil device)) (defun x-find-larger-font (font &optional device) @@ -361,6 +540,16 @@ Returns the font if it succeeds, nil otherwise. If scalable fonts are available, this returns a font which is 1 point larger. Otherwise, it returns the next larger version of this font that is defined." + (if (featurep 'xft-fonts) + (if (x-font-xlfd-font-name-p font) + (x-find-larger-font-core font device) + (x-find-larger-font-xft font device)) + (x-find-larger-font-core font device))) + +(defun x-find-larger-font-xft (font &optional device) + (x-find-xft-font-of-size font '(lambda (old-size) (+ old-size 1.0)) device)) + +(defun x-find-larger-font-core (font &optional device) (x-frob-font-size font t device)) (defalias 'x-make-face-bold 'make-face-bold) @@ -395,7 +584,9 @@ "/usr/local/lib/X11R5/X11/" "/usr/X11/lib/X11/" "/usr/lib/X11/" + "/usr/share/X11/" "/usr/local/lib/X11/" + "/usr/local/share/X11/" "/usr/X386/lib/X11/" "/usr/x386/lib/X11/" "/usr/XFree86/lib/X11/" diff -urN 21.5.23/lisp/x-font-menu.el 21.5.24/lisp/x-font-menu.el --- 21.5.23/lisp/x-font-menu.el Fri Jan 28 11:58:41 2005 +++ 21.5.24/lisp/x-font-menu.el Sat Nov 26 20:45:55 2005 @@ -34,6 +34,10 @@ (require 'font-menu) +(when (featurep 'xft-fonts) + (require 'xft) + (require 'fontconfig)) + (globally-declare-boundp '(x-font-regexp x-font-regexp-foundry-and-family @@ -80,8 +84,70 @@ "This is used to filter out font families that can't display ASCII text. It must be set at run-time.") +;; #### move these to font-menu.el, and maybe make them defcustoms +(defvar font-menu-common-sizes + '(60 80 100 110 120 130 140 150 160 170 180 200 220 240 300 360) + "List of commonly desired font sizes in decipoints.") + ;;;###autoload (defun x-reset-device-font-menus (device &optional debug) + (if (featurep 'xft-fonts) + (x-reset-device-font-menus-xft device debug) + (x-reset-device-font-menus-core device debug))) + +(defun fc-make-font-menu-entry (family) + (let ((weights (fc-find-available-weights-for-family family))) + (vector + family + (mapcar + '(lambda (weight-symbol) + (let ((pair (assoc weight-symbol + '((:light "Light") + (:medium "Medium") + (:demibold "Demibold") + (:bold "Bold") + (:black "Black"))))) + (if pair (cadr pair)))) + weights) + '(0) + nil))) + +(defun x-reset-device-font-menus-xft (device &optional debug) + (let* ((families-1 (fc-find-available-font-families device)) + (families (delete-if (lambda (x) + (string-match x-fonts-menu-junk-families x)) + (sort families-1 'string-lessp))) + (data + (vector + (mapcar 'fc-make-font-menu-entry families) + (mapcar + '(lambda (family) + (vector family `(font-menu-set-font ,family nil nil) + :style 'radio :active nil :selected nil)) + families) + (mapcar + '(lambda (size) + (vector + (number-to-string size) + `(font-menu-set-font nil nil ,size) + :style 'radio :active nil :selected nil)) + ;; common size list in decipoints, fontconfig wants points + (mapcar (lambda (x) (/ x 10)) font-menu-common-sizes)) + (mapcar + '(lambda (weight) + (vector + weight + `(font-menu-set-font nil ,weight nil) + :style 'radio :active nil :selected nil)) + '("Light" "Medium" "Demibold" "Bold" "Black")))) + ;; get or initialize the entry for device + (dev-cache (or (assq device device-fonts-cache) + (car (push (list device) device-fonts-cache))))) + ;; update the device-fonts-cache entry for device in place + (setcdr dev-cache data) + data)) + +(defun x-reset-device-font-menus-core (device &optional debug) "Generates the `Font', `Size', and `Weight' submenus for the Options menu. This is run the first time that a font-menu is needed for each device. If you don't like the lazy invocation of this function, you can add it to @@ -136,7 +202,7 @@ ;; up not getting mentioned explicitly. ;; (if (member 0 sizes) - (let ((common '(60 80 100 120 140 160 180 240))) + (let ((common font-menu-common-sizes)) (while common (or;;(member (car common) sizes) ; not enough slack (let ((rest sizes) @@ -195,6 +261,51 @@ ;; get the truename and use the possibly suboptimal data from that. ;;;###autoload (defun x-font-menu-font-data (face dcache) + (let* ((case-fold-search t) + (domain (if font-menu-this-frame-only-p + (selected-frame) + (selected-device))) + (name (font-instance-name (face-font-instance face domain)))) + (if (featurep 'xft-fonts) + (if (xlfd-font-name-p name) + ;; #### this call to x-font-menu-font-data-core originally + ;; had 4 args, and that's probably the right way to go + (x-font-menu-font-data-core face dcache) + (x-font-menu-font-data-xft face dcache name domain)) + ;; #### this one, too + (x-font-menu-font-data-core face dcache)))) + +(defun x-font-menu-font-data-xft (face dcache name domain) + (let* ((truename (font-instance-truename + (face-font-instance face domain + (if (featurep 'mule) 'ascii)))) + entry) + (if (xlfd-font-name-p truename) + (progn + nil) + (progn + (let* ((pattern (fc-font-real-pattern name domain)) + (family (and pattern + (fc-pattern-get-family pattern 0)))) + (if (fc-pattern-get-successp family) + (setq entry (vassoc family (aref dcache 0)))) + (if (null entry) + (make-vector 5 nil) + (let ((weight (fc-pattern-get-weight pattern 0)) + (size (fc-pattern-get-size pattern 0)) + (slant (fc-pattern-get-slant pattern 0))) + (vector + entry + (if (fc-pattern-get-successp family) + family) + (if (fc-pattern-get-successp size) + size) + (if (fc-pattern-get-successp weight) + (fc-font-weight-translate-to-string weight)) + (if (fc-pattern-get-successp slant) + (fc-font-slant-translate-to-string slant)))))))))) + +(defun x-font-menu-font-data-core (face dcache) (let* ((case-fold-search t) (domain (if font-menu-this-frame-only-p (selected-frame) @@ -229,6 +340,24 @@ (vector entry family size weight slant)))) (defun x-font-menu-load-font (family weight size slant resolution) + (if (featurep 'xft-fonts) + (x-font-menu-load-font-xft family weight size slant resolution) + (x-font-menu-load-font-core family weight size slant resolution))) + +(defun x-font-menu-load-font-xft (family weight size slant resolution) + (let ((pattern (make-fc-pattern))) + (fc-pattern-add pattern fc-font-name-property-family family) + (if weight + (fc-pattern-add pattern fc-font-name-property-weight + (fc-font-weight-translate-from-string weight))) + (if size + (fc-pattern-add pattern fc-font-name-property-size size)) + (if slant + (fc-pattern-add pattern fc-font-name-property-slant + (fc-font-slant-translate-from-string slant))) + (make-font-instance (fc-name-unparse pattern)))) + +(defun x-font-menu-load-font-core (family weight size slant resolution) "Try to load a font with the requested properties. The weight, slant and resolution are only hints." (when (integerp size) (setq size (int-to-string size))) diff -urN 21.5.23/lock/CVS/Entries 21.5.24/lock/CVS/Entries --- 21.5.23/lock/CVS/Entries Mon Dec 19 04:20:34 2005 +++ 21.5.24/lock/CVS/Entries Mon Dec 19 04:22:55 2005 @@ -1,2 +1,2 @@ -/.precious/1.1/Sat Mar 1 02:10:51 1997//Tr21-5-23 +/.precious/1.1/Sat Mar 1 02:10:51 1997//Tr21-5-24 D diff -urN 21.5.23/lock/CVS/Tag 21.5.24/lock/CVS/Tag --- 21.5.23/lock/CVS/Tag Mon Dec 19 04:20:34 2005 +++ 21.5.24/lock/CVS/Tag Mon Dec 19 04:22:55 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/lwlib/CVS/Entries 21.5.24/lwlib/CVS/Entries --- 21.5.23/lwlib/CVS/Entries Mon Dec 19 04:20:36 2005 +++ 21.5.24/lwlib/CVS/Entries Mon Dec 19 04:22:57 2005 @@ -1,36 +1,40 @@ -/.cvsignore/1.2/Thu Apr 12 18:21:50 2001//Tr21-5-23 -/ChangeLog/1.71/Wed Oct 26 15:13:56 2005//Tr21-5-23 -/Makefile.in.in/1.18/Mon Sep 20 19:19:16 2004//Tr21-5-23 -/config.h.in/1.9/Mon Sep 20 19:19:16 2004//Tr21-5-23 -/lwlib-Xaw.c/1.11/Mon Sep 20 19:19:16 2004//Tr21-5-23 -/lwlib-Xaw.h/1.2/Thu Apr 12 18:21:51 2001//Tr21-5-23 -/lwlib-Xlw.c/1.14/Wed Mar 9 05:58:54 2005//Tr21-5-23 -/lwlib-Xlw.h/1.2/Thu Apr 12 18:21:52 2001//Tr21-5-23 -/lwlib-Xm.c/1.23/Mon Sep 27 18:39:11 2004//Tr21-5-23 -/lwlib-Xm.h/1.2/Thu Apr 12 18:21:52 2001//Tr21-5-23 -/lwlib-internal.h/1.5/Tue Oct 25 11:16:49 2005//Tr21-5-23 -/lwlib-utils.c/1.9/Mon Sep 20 19:19:17 2004//Tr21-5-23 -/lwlib-utils.h/1.3/Thu Apr 12 18:21:52 2001//Tr21-5-23 -/lwlib.c/1.20/Tue Oct 25 11:16:49 2005//Tr21-5-23 -/lwlib.h/1.8/Sat Jul 28 05:08:59 2001//Tr21-5-23 -/xlwcheckbox.c/1.3/Mon Sep 20 19:19:17 2004//Tr21-5-23 -/xlwcheckbox.h/1.2/Thu Apr 12 18:21:53 2001//Tr21-5-23 -/xlwcheckboxP.h/1.2/Thu Apr 12 18:21:53 2001//Tr21-5-23 -/xlwgauge.c/1.5/Mon Sep 20 19:19:17 2004//Tr21-5-23 -/xlwgauge.h/1.2/Thu Apr 12 18:21:53 2001//Tr21-5-23 -/xlwgaugeP.h/1.2/Thu Apr 12 18:21:54 2001//Tr21-5-23 -/xlwgcs.c/1.3/Mon Sep 20 19:19:17 2004//Tr21-5-23 -/xlwgcs.h/1.2/Thu Apr 12 18:21:54 2001//Tr21-5-23 -/xlwmenu.c/1.37/Mon Sep 20 19:19:17 2004//Tr21-5-23 -/xlwmenu.h/1.6/Thu Apr 12 18:21:55 2001//Tr21-5-23 -/xlwmenuP.h/1.4/Thu Apr 12 18:21:55 2001//Tr21-5-23 -/xlwradio.c/1.5/Mon Sep 20 19:19:17 2004//Tr21-5-23 -/xlwradio.h/1.2/Thu Apr 12 18:21:55 2001//Tr21-5-23 -/xlwradioP.h/1.2/Thu Apr 12 18:21:55 2001//Tr21-5-23 -/xlwscrollbar.c/1.17/Mon Sep 20 19:19:18 2004//Tr21-5-23 -/xlwscrollbar.h/1.4/Thu Apr 12 18:21:56 2001//Tr21-5-23 -/xlwscrollbarP.h/1.5/Wed Sep 3 03:39:21 1997//Tr21-5-23 -/xlwtabs.c/1.5/Tue Oct 25 11:16:49 2005//Tr21-5-23 -/xlwtabs.h/1.2/Thu Apr 12 18:21:57 2001//Tr21-5-23 -/xlwtabsP.h/1.2/Thu Apr 12 18:21:57 2001//Tr21-5-23 +/.cvsignore/1.2/Thu Apr 12 18:21:50 2001//Tr21-5-24 +/ChangeLog/1.79/Sun Dec 18 19:06:07 2005//Tr21-5-24 +/Makefile.in.in/1.21/Sat Nov 26 11:45:58 2005//Tr21-5-24 +/config.h.in/1.9/Mon Sep 20 19:19:16 2004//Tr21-5-24 +/lwlib-Xaw.c/1.12/Sat Nov 26 11:45:59 2005//Tr21-5-24 +/lwlib-Xaw.h/1.2/Thu Apr 12 18:21:51 2001//Tr21-5-24 +/lwlib-Xlw.c/1.15/Sat Nov 26 11:45:59 2005//Tr21-5-24 +/lwlib-Xlw.h/1.2/Thu Apr 12 18:21:52 2001//Tr21-5-24 +/lwlib-Xm.c/1.23/Mon Sep 27 18:39:11 2004//Tr21-5-24 +/lwlib-Xm.h/1.2/Thu Apr 12 18:21:52 2001//Tr21-5-24 +/lwlib-colors.c/1.2/Sat Nov 26 11:45:59 2005//Tr21-5-24 +/lwlib-colors.h/1.2/Sat Nov 26 11:45:59 2005//Tr21-5-24 +/lwlib-fonts.c/1.2/Sat Nov 26 11:45:59 2005//Tr21-5-24 +/lwlib-fonts.h/1.2/Sat Nov 26 11:45:59 2005//Tr21-5-24 +/lwlib-internal.h/1.5/Tue Oct 25 11:16:49 2005//Tr21-5-24 +/lwlib-utils.c/1.9/Mon Sep 20 19:19:17 2004//Tr21-5-24 +/lwlib-utils.h/1.3/Thu Apr 12 18:21:52 2001//Tr21-5-24 +/lwlib.c/1.20/Tue Oct 25 11:16:49 2005//Tr21-5-24 +/lwlib.h/1.8/Sat Jul 28 05:08:59 2001//Tr21-5-24 +/xlwcheckbox.c/1.4/Wed Nov 16 07:22:43 2005//Tr21-5-24 +/xlwcheckbox.h/1.2/Thu Apr 12 18:21:53 2001//Tr21-5-24 +/xlwcheckboxP.h/1.2/Thu Apr 12 18:21:53 2001//Tr21-5-24 +/xlwgauge.c/1.6/Thu Nov 10 15:47:33 2005//Tr21-5-24 +/xlwgauge.h/1.2/Thu Apr 12 18:21:53 2001//Tr21-5-24 +/xlwgaugeP.h/1.2/Thu Apr 12 18:21:54 2001//Tr21-5-24 +/xlwgcs.c/1.3/Mon Sep 20 19:19:17 2004//Tr21-5-24 +/xlwgcs.h/1.2/Thu Apr 12 18:21:54 2001//Tr21-5-24 +/xlwmenu.c/1.38/Sat Nov 26 11:45:59 2005//Tr21-5-24 +/xlwmenu.h/1.6/Thu Apr 12 18:21:55 2001//Tr21-5-24 +/xlwmenuP.h/1.5/Sat Nov 26 11:46:00 2005//Tr21-5-24 +/xlwradio.c/1.7/Wed Nov 16 07:22:43 2005//Tr21-5-24 +/xlwradio.h/1.2/Thu Apr 12 18:21:55 2001//Tr21-5-24 +/xlwradioP.h/1.2/Thu Apr 12 18:21:55 2001//Tr21-5-24 +/xlwscrollbar.c/1.18/Sat Nov 26 11:46:00 2005//Tr21-5-24 +/xlwscrollbar.h/1.4/Thu Apr 12 18:21:56 2001//Tr21-5-24 +/xlwscrollbarP.h/1.5/Wed Sep 3 03:39:21 1997//Tr21-5-24 +/xlwtabs.c/1.6/Sat Nov 26 11:46:00 2005//Tr21-5-24 +/xlwtabs.h/1.2/Thu Apr 12 18:21:57 2001//Tr21-5-24 +/xlwtabsP.h/1.3/Sat Nov 26 11:46:00 2005//Tr21-5-24 D diff -urN 21.5.23/lwlib/CVS/Tag 21.5.24/lwlib/CVS/Tag --- 21.5.23/lwlib/CVS/Tag Mon Dec 19 04:20:36 2005 +++ 21.5.24/lwlib/CVS/Tag Mon Dec 19 04:22:57 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/lwlib/ChangeLog 21.5.24/lwlib/ChangeLog --- 21.5.23/lwlib/ChangeLog Thu Oct 27 00:13:56 2005 +++ 21.5.24/lwlib/ChangeLog Mon Dec 19 04:06:07 2005 @@ -1,3 +1,146 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-11-26 Stephen J. Turnbull + + Merge Xft. + + 2005-11-25 Stephen J. Turnbull + + * lwlib-colors: Improve comments. + + 2005-11-25 Stephen J. Turnbull + + * lwlib-colors: Remove or comment out dead code. + + 2005-09-26 Olivier Galibert + + * xlwmenu.c: + * xlwmenuP.h: + Give USE_XFT_MENUBARS priority over USE_MOTIF. + + 2005-09-06 Stephen J. Turnbull + + * lwlib-fonts.c (xft_open_font_by_name): Fix heuristic for XLFDs. + + * xlwmenu.c (string_draw_range): Recommend persistent xftDraw. + + 2005-09-02 Daniel Pittman + + * lwlib-fonts.c (xft_open_font_by_name): Eliminate code to avoid + use of scaled fonts (probably bogus, anyway). Add error message + in case of fatal failure to find any fonts at all. + <87ll2fucw1.fsf@rimspace.net> + + * xlwmenu.c (string_draw_range): Plug leak of XftDraw. + + 2005-03-09 Stephen J. Turnbull + + * xlwtabs.c (TabsGeometryManager): Fix "fat fingers" mistake. + + 2005-03-07 Stephen J. Turnbull + + * lwlib-Xaw.c (debug_gauge): Fix and suppress gauge debug message. + + * xlwtabs.c (TabsGeometryManager): Suppress "kludging" message, too. + (TabsGeometryManager): Make straight the paths of the layout, or + at least improve the approximation to Xt conventions by 50%. + + 2005-02-22 Stephen J. Turnbull + + * xlwtabs.c(debug_tabs): Suppress debug output for now. + + 2005-02-18 Stephen J. Turnbull + + * xlwtabs.c (TabsGeometryManager,TabsQueryGeometry): Improve comments. + (debug_tabs): New variable, substitute for debug_xft globally. + (TabsGeometryManager): Substitute "request" for "req". + + 2005-02-11 Stephen J. Turnbull + + * xlwtabs.c (PreferredSize3): Let TabLayout choose constraints. + (TabLayout): Default size to current size. Fix header comment. + (TabsGeometryManager): Comment on redesigning internal API. + (TabsGeometryManager): Fix typo in format string. + + 2005-01-27 Stephen J. Turnbull + + * xlwtabs.c (DrawTab): + Correct geometry when clearing rectangle. + Remove some "check me" comments. + Deemphasize a lot of debugging output. + (TabLayout): Add debugging fprintf. + (TabWidth): Deemphasize some debugging output. + + 2004-12-10 Stephen J. Turnbull + + * lwlib-Xaw.c (xaw_create_button): + (xaw_create_progress): + (xaw_create_text_field): + Changed XtCreateManagedWidget to XtCreateWidget when child is + managed later in the same function. + + (debug_gauge): New variable. + (lw_debug_print_xt_arglist): + (lw_debug_print_class_resources): + New debug functions. + + 2004-12-09 Stephen J. Turnbull + + * xlwmenu.c (xlwMenuResources): Use "redundant" XftFont resource. + + * xlwtabs.c: + * xlwtabsP.h: + Use USE_XFT_TABS consistently. + + 2004-12-01 Stephen J. Turnbull + + * xlwtabs.c: Move debug_xft to ../src/xft-fonts.c. + + 2004-11-20 Stephen J. Turnbull + + Xft branch based on "Xft reloaded #3" patch by Eric Knauel and + Mathias Neuebaur, and other contributors. + + * lwlib-fonts.h: + * lwlib-colors.h: + Declare common facilities use by Xft. + * lwlib-fonts.c: + * lwlib-colors.c: + Implement them. + * xlwtabs.c: + * xlwtabsP.h: + * xlwmenu.c: + * xlwmenuP.h: + Implement Xft text drawing. + +2005-11-22 Ben Wing + + * Makefile.in.in: + Ignore errors from rm during clean. + +2005-11-16 Stephen J. Turnbull + + * xlwcheckbox.c (CheckboxInit): Mark unused parameters. C++ + correctness. + (CheckboxRealize): Don't compile at all if unused. + + * xlwradio.c (RadioDestroy): #if 0 dead code for later removal. + +2005-11-13 Ben Wing + + * Makefile.in.in: + Add targets distclean-noconfig, realclean-noconfig, extraclean-noconfig. + Do some refactoring for cleanliness. + +2005-11-08 Marcus Crestani + + * xlwgauge.c (GaugeInit): + * xlwgauge.c (GaugeSetValues): + * xlwradio.c (RadioInit): + * xlwradio.c (RadioSetValues): Rename new->new_. + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. diff -urN 21.5.23/lwlib/Makefile.in.in 21.5.24/lwlib/Makefile.in.in --- 21.5.23/lwlib/Makefile.in.in Tue Sep 21 04:19:16 2004 +++ 21.5.24/lwlib/Makefile.in.in Sat Nov 26 20:45:58 2005 @@ -3,6 +3,7 @@ ## Copyright (C) 1995 Tinker Systems and INS Engineering Corp. ## Copyright (C) 1994, 1995 Board of Trustees, University of Illinois ## Copyright (C) 1996, 1997 Sun Microsystems, Inc. +## Copyright (C) 2005 Ben Wing. ## This file is part of the Lucid Widget Library. @@ -48,7 +49,7 @@ VPATH=@srcdir@ #endif -objs = lwlib.o lwlib-utils.o @lwlib_objs@ +objs = lwlib.o lwlib-utils.o lwlib-colors.o lwlib-fonts.o @lwlib_objs@ all: liblw.a @@ -82,14 +83,22 @@ @-test -n "$(RANLIB)" && $(RANLIB) $@ .PHONY: mostlyclean clean distclean realclean extraclean +.PHONY: distclean-noconfig realclean-noconfig extraclean-noconfig mostlyclean: - $(RM) liblw.a liblw_pure_*.a *.o *.i core + -$(RM) liblw.a liblw_pure_*.a *.o *.i core clean: mostlyclean -distclean: clean - $(RM) GNUmakefile Makefile Makefile.in config.h TAGS +distclean-noconfig: clean + -$(RM) config.h TAGS +## This is used in making a distribution. +## Do not use it on development directories! +distclean: distclean-noconfig + -$(RM) GNUmakefile Makefile Makefile.in +realclean-noconfig: distclean-noconfig realclean: distclean -extraclean: distclean - $(RM) *~ \#* +extraclean-noconfig: realclean-noconfig + -$(RM) *~ \#* +extraclean: realclean + -$(RM) *~ \#* CONFIG_H = ../src/config.h config.h @@ -101,6 +110,8 @@ xlwtabs.h xlwgcs.h lwlib-Xm.o: $(CONFIG_H) lwlib-Xm.h lwlib-internal.h lwlib-utils.h lwlib.h xlwmenu.h lwlib-utils.o: $(CONFIG_H) lwlib-utils.h +lwlib-colors.o: $(CONFIG_H) lwlib-colors.h +lwlib-fonts.o: $(CONFIG_H) lwlib-fonts.h lwlib.o: $(CONFIG_H) lwlib-Xaw.h lwlib-Xlw.h lwlib-Xm.h lwlib-internal.h lwlib-utils.h lwlib.h xlwmenu.h xlwmenu.o: $(CONFIG_H) lwlib.h xlwmenu.h xlwmenuP.h xlwscrollbar.o: $(CONFIG_H) xlwscrollbar.h xlwscrollbarP.h diff -urN 21.5.23/lwlib/lwlib-Xaw.c 21.5.24/lwlib/lwlib-Xaw.c --- 21.5.23/lwlib/lwlib-Xaw.c Tue Sep 21 04:19:16 2004 +++ 21.5.24/lwlib/lwlib-Xaw.c Sat Nov 26 20:45:59 2005 @@ -52,6 +52,7 @@ static void xaw_generic_callback (Widget, XtPointer, XtPointer); +extern int debug_xft; Boolean lw_xaw_widget_p (Widget widget) @@ -738,7 +739,7 @@ lw_add_value_args_to_args (val, al, &ac); if (!val->call_data) - button = XtCreateManagedWidget (val->name, labelWidgetClass, + button = XtCreateWidget (val->name, labelWidgetClass, instance->parent, al, ac); else @@ -746,20 +747,21 @@ if (val->type == TOGGLE_TYPE || val->type == RADIO_TYPE) { XtSetArg (al [ac], XtNstate, val->selected); ac++; - button = XtCreateManagedWidget + button = XtCreateWidget (val->name, val->type == TOGGLE_TYPE ? checkboxWidgetClass : radioWidgetClass, instance->parent, al, ac); } else { - button = XtCreateManagedWidget (val->name, commandWidgetClass, + button = XtCreateWidget (val->name, commandWidgetClass, instance->parent, al, ac); } XtRemoveAllCallbacks (button, XtNcallback); XtAddCallback (button, XtNcallback, xaw_generic_callback, (XtPointer)instance); } + /* #### this maybe can be folded into the XtCreateWidget calls above */ XtManageChild (button); return button; @@ -788,7 +790,8 @@ label = XtCreateManagedWidget (val->name, labelWidgetClass, parent, al, ac); - /* Do it again for arguments that have no effect until the widget is realized. */ + /* Do it again for arguments that have no effect until the widget is realized. + #### Uh, but the widget isn't realized until later? Do we mean "created"? */ ac = 0; lw_add_value_args_to_args (val, al, &ac); if (ac > 20) @@ -798,6 +801,60 @@ return label; } +static int debug_gauge = 0; + +static void +lw_debug_print_xt_arglist (ArgList al, int ac) +{ + int i; + for (i = 0; i < ac; i++) + fprintf (stderr, "Widget has arg %s with value %lu.\n", + al[i].name, (unsigned long) al[i].value); +} + +static void +lw_debug_print_class_resources (WidgetClass class_) +{ + Cardinal i; + do { + Cardinal m, n = class_->core_class.num_resources; + XtResourceList rl; + fprintf (stderr, "Class is %s (%p/%p) with %d resources.\n", + class_->core_class.class_name, class_, &(class_->core_class), n); + fprintf (stderr, " Class's resources are at %p. Converting...\n", + class_->core_class.resources); + /* resources may be compiled to an internal format */ + XtGetResourceList (class_, &rl, &m); + for (i = 0; i < m; i++) + fprintf (stderr, + " Class has a %s resource of type %s initialized from %s.\n", + rl[i].resource_class, rl[i].resource_type, rl[i].default_type); + /* special cases for commonly problematic resources */ + for (i = 0; i < m; i++) + { + if (!strcmp (rl[i].resource_class, "Font")) + { + fprintf (stderr, " Class has a Font resource.\n"); + fprintf (stderr, " Font resource is %s.\n", + (char *) rl[i].default_addr); + } + if (!strcmp (rl[i].resource_class, "FontSet")) + { + fprintf (stderr, " Class has a FontSet resource.\n"); + fprintf (stderr, " FontSet resource is %s.\n", + (char *) rl[i].default_addr); + } + if (!strcmp (rl[i].resource_class, "International")) + { + fprintf (stderr, " Class has an International resource.\n"); + fprintf (stderr, " International resource is %d.\n", + (int) rl[i].default_addr); + } + } + class_ = class_->core_class.superclass; + } while (class_ != NULL); +} + static Widget xaw_create_progress (widget_instance *instance) { @@ -826,12 +883,20 @@ /* add any args the user supplied for creation time */ lw_add_value_args_to_args (val, al, &ac); - scale = XtCreateManagedWidget (val->name, gaugeWidgetClass, - instance->parent, al, ac); + if (debug_gauge > 1) + lw_debug_print_class_resources (gaugeWidgetClass); + if (debug_gauge > 0) + lw_debug_print_xt_arglist (al, ac); + + scale = XtCreateWidget (val->name, gaugeWidgetClass, + instance->parent, al, ac); + /* add the callback */ if (val->call_data) - XtAddCallback (scale, XtNgetValue, xaw_generic_callback, (XtPointer)instance); + XtAddCallback (scale, XtNgetValue, xaw_generic_callback, + (XtPointer) instance); + /* #### this maybe can be folded into the XtCreateWidget call above */ XtManageChild (scale); return scale; @@ -864,7 +929,7 @@ /* add any args the user supplied for creation time */ lw_add_value_args_to_args (val, al, &ac); - text = XtCreateManagedWidget (val->name, asciiTextWidgetClass, + text = XtCreateWidget (val->name, asciiTextWidgetClass, instance->parent, al, ac); /* add the callback */ diff -urN 21.5.23/lwlib/lwlib-Xlw.c 21.5.24/lwlib/lwlib-Xlw.c --- 21.5.23/lwlib/lwlib-Xlw.c Wed Mar 9 14:58:54 2005 +++ 21.5.24/lwlib/lwlib-Xlw.c Sat Nov 26 20:45:59 2005 @@ -479,8 +479,8 @@ Widget clip = 0; widget_value* val = instance->info->val; - XtSetArg (al [ac], XtNmappedWhenManaged, FALSE); ac++; - XtSetArg (al [ac], XtNsensitive, TRUE); ac++; + XtSetArg (al [ac], XtNmappedWhenManaged, False); ac++; + XtSetArg (al [ac], XtNsensitive, True); ac++; /* add any args the user supplied for creation time */ lw_add_value_args_to_args (val, al, &ac); diff -urN 21.5.23/lwlib/lwlib-colors.c 21.5.24/lwlib/lwlib-colors.c --- 21.5.23/lwlib/lwlib-colors.c Thu Jan 1 09:00:00 1970 +++ 21.5.24/lwlib/lwlib-colors.c Sat Nov 26 20:45:59 2005 @@ -0,0 +1,361 @@ +/* Color data structures for X and Xft. + +Copyright (C) 2004 Free Software Foundation, Inc. + +Author: Stephen J. Turnbull +Created: 24 Jul 2004 by Stephen J. Turnbull + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in GNU Emacs. */ + +#include +#include /* for ULONG_MAX */ +#include /* for malloc() */ +#include +#include +#include +#include /* for ShellWidget */ +#include "lwlib-colors.h" + +static int debug_colors = 1; + +#ifdef __cplusplus +#define X_CLASSFIELD c_class +#else +#define X_CLASSFIELD class +#endif + +#define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \ + ? ((unsigned long) (x)) : ((unsigned long) (y))) + +/* WIDGET is an Xt widget, VISUAL and DEPTH are return values */ +void +visual_info_from_widget (Widget widget, Visual **visual, int *depth) +{ + /* grab the visual and depth from the nearest shell ancestor */ + Widget p = XtParent(widget); + + *visual = CopyFromParent; + *depth = -1; + while (*visual == CopyFromParent && p) + { + if (XtIsShell(p)) + { + *visual = ((ShellWidget)p)->shell.visual; + *depth = p->core.depth; + } + p = XtParent(p); + } + if (*visual == CopyFromParent || !*visual) + { + if (debug_colors > 1) + fprintf (stderr, "\nvisual_info_from_widget:" + " failed, using DefaultVisualOfScreen"); + *visual = DefaultVisualOfScreen (XtScreen (widget)); + *depth = DefaultDepthOfScreen (XtScreen (widget)); + } + else if (debug_colors > 1) + fprintf (stderr, "\nvisual_info_from_widget: succeeded"); +} + +/* Do we need all this hair on modern hardware? */ + +/* Replacement for XAllocColor() that tries to return the nearest + available color if the colormap is full. Original was from FSFmacs, + but rewritten by Jareth Hein 97/11/25 + Modified by Lee Kindness 31/08/99 to handle previous + total failure which was due to a read/write colorcell being the nearest + match - tries the next nearest... + + Return value is 1 for normal success, 2 for nearest color success, + 3 for Non-deallocable success. */ +int +x_allocate_nearest_color (Display *display, Colormap colormap, + Visual *visual, XColor *color_def) +{ + int status; + + /* #### [[Apparently this is often called with data derived from a widget + with no ShellWidget ancestor, or before the shell has a visual. + Currently this recovery code is in xlwmenu.c and xlwscrollbar.c, but + likely should come here.]] + I suspect the problem is that the visual-tracing code was improperly + written, missing a level of indirection. + CopyFromParent == NULL in XFree86/Darwin. + */ + if (visual == CopyFromParent || !visual) + { + Screen *screen = DefaultScreenOfDisplay (display); + fprintf (stderr, "\nx_allocate_nearest_color: bad visual (%08lx)", + (unsigned long) visual); + visual = DefaultVisualOfScreen (screen); + } + + if (visual->X_CLASSFIELD == DirectColor || visual->X_CLASSFIELD == TrueColor) + { + if (XAllocColor (display, colormap, color_def) != 0) + { + status = 1; + } + else + { + /* We're dealing with a TrueColor/DirectColor visual, so play games + with the RGB values in the XColor struct. */ + /* #### JH: I'm not sure how a call to XAllocColor can fail in a + TrueColor or DirectColor visual, so I will just reformat the + request to match the requirements of the visual, and re-issue + the request. If this fails for anybody, I wanna know about it + so I can come up with a better plan */ + + unsigned long rshift,gshift,bshift,rbits,gbits,bbits,junk; + junk = visual->red_mask; + rshift = 0; + while ((junk & 0x1) == 0) { + junk = junk >> 1; + rshift ++; + } + rbits = 0; + while (junk != 0) { + junk = junk >> 1; + rbits++; + } + junk = visual->green_mask; + gshift = 0; + while ((junk & 0x1) == 0) { + junk = junk >> 1; + gshift ++; + } + gbits = 0; + while (junk != 0) { + junk = junk >> 1; + gbits++; + } + junk = visual->blue_mask; + bshift = 0; + while ((junk & 0x1) == 0) { + junk = junk >> 1; + bshift ++; + } + bbits = 0; + while (junk != 0) { + junk = junk >> 1; + bbits++; + } + + color_def->red = color_def->red >> (16 - rbits); + color_def->green = color_def->green >> (16 - gbits); + color_def->blue = color_def->blue >> (16 - bbits); + if (XAllocColor (display, colormap, color_def) != 0) + status = 1; + else + { + int rd, gr, bl; + /* #### JH: I'm punting here, knowing that doing this will at + least draw the color correctly. However, unless we convert + all of the functions that allocate colors (graphics + libraries, etc) to use this function doing this is very + likely to cause problems later... */ + + if (rbits > 8) + rd = color_def->red << (rbits - 8); + else + rd = color_def->red >> (8 - rbits); + if (gbits > 8) + gr = color_def->green << (gbits - 8); + else + gr = color_def->green >> (8 - gbits); + if (bbits > 8) + bl = color_def->blue << (bbits - 8); + else + bl = color_def->blue >> (8 - bbits); + color_def->pixel = (rd << rshift) | (gr << gshift) | (bl << + bshift); + status = 3; + } + } + } + else + { + XColor *cells = NULL; + /* JH: I can't believe there's no way to go backwards from a + colormap ID and get its visual and number of entries, but X + apparently isn't built that way... */ + int no_cells = visual->map_entries; + status = 0; + + if (XAllocColor (display, colormap, color_def) != 0) + status = 1; + else while( status != 2 ) + { + /* If we got to this point, the colormap is full, so we're + going to try and get the next closest color. The algorithm used + is a least-squares matching, which is what X uses for closest + color matching with StaticColor visuals. */ + int nearest; + long nearest_delta, trial_delta; + int x; + + if( cells == NULL ) + { + /* #### this could be annoyingly slow + tell me again why lwlib can't use alloca & friends? */ + cells = (XColor *) malloc (sizeof(XColor)*no_cells); + for (x = 0; x < no_cells; x++) + cells[x].pixel = x; + + /* read the current colormap */ + XQueryColors (display, colormap, cells, no_cells); + } + + nearest = 0; + /* I'm assuming CSE so I'm not going to condense this. */ + nearest_delta = ((((color_def->red >> 8) - (cells[0].red >> 8)) + * ((color_def->red >> 8) - (cells[0].red >> 8))) + + + (((color_def->green >> 8) - (cells[0].green >> 8)) + * ((color_def->green >> 8) - (cells[0].green >> + 8))) + + + (((color_def->blue >> 8) - (cells[0].blue >> 8)) + * ((color_def->blue >> 8) - (cells[0].blue >> + 8)))); + for (x = 1; x < no_cells; x++) + { + trial_delta = ((((color_def->red >> 8) - (cells[x].red >> 8)) + * ((color_def->red >> 8) - (cells[x].red >> 8))) + + + (((color_def->green >> 8) - (cells[x].green >> 8)) + * ((color_def->green >> 8) - (cells[x].green >> + 8))) + + + (((color_def->blue >> 8) - (cells[x].blue >> 8)) + * ((color_def->blue >> 8) - (cells[x].blue >> + 8)))); + + /* less? Ignore cells marked as previously failing */ + if( (trial_delta < nearest_delta) && + (cells[x].pixel != ULONG_MAX) ) + { + nearest = x; + nearest_delta = trial_delta; + } + } + color_def->red = cells[nearest].red; + color_def->green = cells[nearest].green; + color_def->blue = cells[nearest].blue; + if (XAllocColor (display, colormap, color_def) != 0) + status = 2; + else + /* LSK: Either the colour map has changed since + * we read it, or the colour is allocated + * read/write... Mark this cmap entry so it's + * ignored in the next iteration. + */ + cells[nearest].pixel = ULONG_MAX; + } + } + return status; +} + +#if 0 +/* Replacement for XAllocColor() that tries to return the nearest + available color if the colormap is full. From GNU Emacs. + #### Review this to see if there's anything our hairy version could use. */ + +int +FIXME_allocate_nearest_color (Display *display, Colormap screen_colormap, + XColor *color_def) +{ + int status = XAllocColor (display, screen_colormap, color_def); + if (status) + return status; + + { + /* If we got to this point, the colormap is full, so we're + going to try to get the next closest color. + The algorithm used is a least-squares matching, which is + what X uses for closest color matching with StaticColor visuals. */ + + int nearest, x; + unsigned long nearest_delta = ULONG_MAX; + + int no_cells = XDisplayCells (display, XDefaultScreen (display)); + /* Don't use alloca here because lwlib doesn't have the + necessary configuration information that src does. */ + XColor *cells = (XColor *) malloc (sizeof (XColor) * no_cells); + + for (x = 0; x < no_cells; x++) + cells[x].pixel = x; + + XQueryColors (display, screen_colormap, cells, no_cells); + + for (nearest = 0, x = 0; x < no_cells; x++) + { + long dred = (color_def->red >> 8) - (cells[x].red >> 8); + long dgreen = (color_def->green >> 8) - (cells[x].green >> 8); + long dblue = (color_def->blue >> 8) - (cells[x].blue >> 8); + unsigned long delta = dred * dred + dgreen * dgreen + dblue * dblue; + + if (delta < nearest_delta) + { + nearest = x; + nearest_delta = delta; + } + } + color_def->red = cells[nearest].red; + color_def->green = cells[nearest].green; + color_def->blue = cells[nearest].blue; + free (cells); + return XAllocColor (display, screen_colormap, color_def); + } +} +#endif + + +#ifdef USE_XFT + +XftColor +xft_convert_color (Display *dpy, Colormap cmap, Visual *visual, int c, int dim) +{ + static XColor color; /* #### why is this static ?? */ + XftColor result; + + color.pixel = c; + XQueryColor(dpy, cmap, &color); + + if (dim) + { + color.red = MINL (65535, color.red * 1.5); + color.green = MINL (65535, color.green * 1.5); + color.blue = MINL (65535, color.blue * 1.5); + x_allocate_nearest_color (dpy, cmap, visual, &color); + } + + result.pixel = color.pixel; + result.color.red = color.red; + result.color.green = color.green; + result.color.blue = color.blue; + result.color.alpha = 0xffff; + + return result; +} + +#endif /* USE_XFT */ + +/* end of lwlib-colors.c */ diff -urN 21.5.23/lwlib/lwlib-colors.h 21.5.24/lwlib/lwlib-colors.h --- 21.5.23/lwlib/lwlib-colors.h Thu Jan 1 09:00:00 1970 +++ 21.5.24/lwlib/lwlib-colors.h Sat Nov 26 20:45:59 2005 @@ -0,0 +1,59 @@ +/* Color data structures for X and Xft. + +Copyright (C) 2004 Free Software Foundation, Inc. + +Author: Stephen J. Turnbull +Created: 24 Jul 2004 by Stephen J. Turnbull + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in GNU Emacs. */ + +#ifndef INCLUDED_lwlib_colors_h_ +#define INCLUDED_lwlib_colors_h_ + +#include + +/* WIDGET is an Xt widget, VISUAL and DEPTH are return values */ +void visual_info_from_widget (Widget widget, Visual **visual, int *depth); + +/* basic version from xlwmenu.c */ +int FIXME_allocate_nearest_color (Display *display, Colormap screen_colormap, + XColor *color_def); +/* haired-up version from ../src/objects-x.c */ +int x_allocate_nearest_color (Display *display, Colormap screen_colormap, + Visual *visual, XColor *color_def); + +#ifdef USE_XFT +#define _XFT_NO_COMPAT_ +/* shut up GCC */ +#define face_index face_index_arg +#define glyph_index glyph_index_arg +#include +#undef glyph_index +#undef face_index + +#if XFT_MAJOR < 2 +#error Xft versions < 2 not supported +#endif + +XftColor xft_convert_color (Display *dpy, Colormap cmap, Visual *visual, + int c, int dim); +#endif /* USE_XFT */ + +#endif /* INCLUDED_lwlib_colors_h_ */ diff -urN 21.5.23/lwlib/lwlib-fonts.c 21.5.24/lwlib/lwlib-fonts.c --- 21.5.23/lwlib/lwlib-fonts.c Thu Jan 1 09:00:00 1970 +++ 21.5.24/lwlib/lwlib-fonts.c Sat Nov 26 20:45:59 2005 @@ -0,0 +1,115 @@ +/* Font handling code for X and Xft. + +Copyright (C) 2003 Eric Knauel +Copyright (C) 2004 Free Software Foundation, Inc. + +Author: Stephen J. Turnbull +Created: 24 Jul 2004 by Stephen J. Turnbull + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in GNU Emacs. */ + +#include +#include +#include +#include "lwlib-fonts.h" + +#if 0 +/* these are all from ../src; if we need them move the code */ +#include "lisp.h" +#include "device.h" +#include "device-impl.h" +#include "console-x-impl.h" +#include "xft-fonts.h" +#endif + +/* + * code for handling Xft + */ + +#ifdef USE_XFT + +/* helper function to correctly open Xft/core fonts by name + #### Can't we use FcParseName here? + #### Is this done so often that the logic needs to be hard-coded in C? + + Daniel Pittman sez: Older code tried to enforce that an XLFD font was + not scaled, while this version just doesn't care. I think that is a + better behavior, since if someone really wants a scaled font we should + oblige them. + + Stephen sez: This whole function was ill-conceived, and I'm not sure it + succeeds at any of the things it attempts to do. First, we should be + using fontconfig directly. I'm not sure what Xft (or fontconfig) will + try to do if passed an XLFD. As for scaled fonts, both options are + equally bad. The problem is that the X server will often scale bitmap + fonts willy-nilly; it's worth trying to avoid that, but I can't say + whether that's worth overriding somebody who knows what they're doing. + In any case, I think we should find out what Xft (fontconfig?) is able + and willing to do with XLFDs, and probably move the logic to LISP. +*/ +XftFont * +xft_open_font_by_name (Display *dpy, char *name) +{ + XftFont *res = NULL; + + /* if (!NILP (Fxft_xlfd_font_name_p (make_string (name, strlen (name))))) */ + /* #### this is bogus but ... */ + int count = 0; + char *pos = name; + /* extra parens shut up gcc */ + while ((pos = index (pos, '-'))) + { + count++; + pos++; + } + + /* #### hard-coding DefaultScreen is evil! */ + if (count == 14 /* fully-qualified XLFD */ + || (count < 14 /* heuristic for wildcarded XLFD */ + && count >= 5 + && index (name, '*'))) + res = XftFontOpenXlfd (dpy, DefaultScreen (dpy), name); + else + res = XftFontOpenName (dpy, DefaultScreen (dpy), name); + + /* Try for a generic monospace font + #### Why? Menus don't need to line up in columns! */ + if (!res) + res = XftFontOpenName (dpy, DefaultScreen (dpy), "monospace"); + /* Try for anything we can get */ + if (!res) + res = XftFontOpenName (dpy, DefaultScreen (dpy), ""); + + if (!res) + { + /* #### This is Just So Wrong ... ! */ + /* sorry folks ... */ + fprintf (stderr, + "Unable to find any usable XFT font, even the defaults!\n"); + abort (); + return 0; + } + + return res; +} + +#endif /* USE_XFT */ + +/* End of lwlib-fonts.c */ diff -urN 21.5.23/lwlib/lwlib-fonts.h 21.5.24/lwlib/lwlib-fonts.h --- 21.5.23/lwlib/lwlib-fonts.h Thu Jan 1 09:00:00 1970 +++ 21.5.24/lwlib/lwlib-fonts.h Sat Nov 26 20:45:59 2005 @@ -0,0 +1,67 @@ +/* Font data structures for X and Xft. + +Copyright (C) 2004 Free Software Foundation, Inc. + +Author: Stephen J. Turnbull +Created: 24 Jul 2004 by Stephen J. Turnbull + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in GNU Emacs. */ + +#ifndef INCLUDED_lwlib_fonts_h_ +#define INCLUDED_lwlib_fonts_h_ + +/* get headers */ + +#ifdef USE_XFT +#define _XFT_NO_COMPAT_ +/* shut up GCC */ +#define face_index face_index_arg +#define glyph_index glyph_index_arg +#include +#undef glyph_index +#undef face_index + +#if XFT_MAJOR < 2 +#error Xft versions < 2 not supported +#endif +#endif /* USE_XFT */ + +/* Xt name macros */ + +#ifdef USE_XFT +#ifndef XtNxftFont +#define XtNxftFont "xftFont" +#endif +#ifndef XtCXftFont +#define XtCXftFont "XftFont" +#endif +#endif /* USE_XFT */ + +/* code 'n' stuff */ + +#ifdef USE_XFT +#define FCSTRLEN 512 + +/* non-Lisp prototypes */ +/* #### change this back to _open_name */ +XftFont *xft_open_font_by_name (Display *dpy, char *name); +#endif /* USE_XFT */ + +#endif /* INCLUDED_lwlib_fonts_h_ */ diff -urN 21.5.23/lwlib/xlwcheckbox.c 21.5.24/lwlib/xlwcheckbox.c --- 21.5.23/lwlib/xlwcheckbox.c Tue Sep 21 04:19:17 2004 +++ 21.5.24/lwlib/xlwcheckbox.c Wed Nov 16 16:22:43 2005 @@ -225,13 +225,13 @@ #if DRAW_CHECK Widget new, #else - Widget UNUSED (new), + Widget UNUSED (new_), #endif ArgList UNUSED (args), Cardinal *UNUSED (num_args)) { #if DRAW_CHECK - CheckboxWidget cw = (CheckboxWidget) new; + CheckboxWidget cw = (CheckboxWidget) new_; cw->checkbox.checkmark = None ; cw->checkbox.checkmark_GC = None ; #endif @@ -280,17 +280,13 @@ */ /* ARGSUSED */ +#if DRAW_CHECK static void CheckboxDestroy ( -#if DRAW_CHECK Widget w, -#else - Widget UNUSED (w), -#endif XtPointer UNUSED (junk), XtPointer UNUSED (garbage)) { -#if DRAW_CHECK CheckboxWidget cw = (CheckboxWidget) w; /* TODO: cache this via xmu */ @@ -298,8 +294,8 @@ XFreePixmap( XtDisplay(w), cw->checkbox.checkmark ) ; if( cw->checkbox.checkmark_GC != None ) XtReleaseGC(w, cw->checkbox.checkmark_GC) ; -#endif } +#endif /* DRAW_CHECK */ diff -urN 21.5.23/lwlib/xlwgauge.c 21.5.24/lwlib/xlwgauge.c --- 21.5.23/lwlib/xlwgauge.c Tue Sep 21 04:19:17 2004 +++ 21.5.24/lwlib/xlwgauge.c Fri Nov 11 00:47:33 2005 @@ -240,11 +240,11 @@ /* ARGSUSED */ static void GaugeInit (Widget request, - Widget new, + Widget new_, ArgList UNUSED (args), Cardinal *UNUSED (num_args)) { - GaugeWidget gw = (GaugeWidget) new; + GaugeWidget gw = (GaugeWidget) new_; if( gw->gauge.v0 == 0 && gw->gauge.v1 == 0 ) { gw->gauge.autoScaleUp = gw->gauge.autoScaleDown = TRUE ; @@ -258,10 +258,10 @@ Dimension w,h ; GaugeSize(gw, &w,&h, DEF_LEN) ; if( request->core.width == 0 ) - new->core.width = w ; + new_->core.width = w ; if( request->core.height == 0 ) - new->core.height = h ; - gw->core.widget_class->core_class.resize(new) ; + new_->core.height = h ; + gw->core.widget_class->core_class.resize(new_) ; } gw->gauge.selected = None ; @@ -501,16 +501,16 @@ static Boolean GaugeSetValues (Widget old, Widget UNUSED (request), - Widget new, + Widget new_, ArgList UNUSED (args), Cardinal *UNUSED (num_args)) { GaugeWidget oldgw = (GaugeWidget) old; - GaugeWidget gw = (GaugeWidget) new; + GaugeWidget gw = (GaugeWidget) new_; Boolean was_resized = False; if( gw->gauge.selected != None ) { - XtDisownSelection(new, gw->gauge.selected, CurrentTime) ; + XtDisownSelection(new_, gw->gauge.selected, CurrentTime) ; gw->gauge.selected = None ; } @@ -535,7 +535,7 @@ if( gw->label.resize ) GaugeSize(gw, &gw->core.width, &gw->core.height, DEF_LEN) ; else - GaugeResize(new) ; + GaugeResize(new_) ; } if( gw->gauge.update != oldgw->gauge.update ) @@ -548,12 +548,12 @@ if( gw->core.background_pixel != oldgw->core.background_pixel ) { - XtReleaseGC(new, gw->gauge.inverse_GC) ; + XtReleaseGC(new_, gw->gauge.inverse_GC) ; gw->gauge.inverse_GC = Get_GC(gw, gw->core.background_pixel) ; } return was_resized || gw->gauge.value != oldgw->gauge.value || - XtIsSensitive(old) != XtIsSensitive(new); + XtIsSensitive(old) != XtIsSensitive(new_); } diff -urN 21.5.23/lwlib/xlwmenu.c 21.5.24/lwlib/xlwmenu.c --- 21.5.23/lwlib/xlwmenu.c Tue Sep 21 04:19:17 2004 +++ 21.5.24/lwlib/xlwmenu.c Sat Nov 26 20:45:59 2005 @@ -45,6 +45,11 @@ #define XmFONTLIST_DEFAULT_TAG XmSTRING_DEFAULT_CHARSET #endif /* XmVersion < 1.2 */ #endif + +/* #### we may want to turn off USE_XFT here if !USE_XFT_MENUBARS + In fact, maybe that's the right interface overall? */ +#include "lwlib-fonts.h" +#include "lwlib-colors.h" #include "xlwmenuP.h" #ifdef USE_DEBUG_MALLOC @@ -69,7 +74,7 @@ static XtResource xlwMenuResources[] = { -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) /* There are three font list resources, so that we can accept either of the resources *fontList: or *font:, and so that we can tell the difference between them being specified, and being defaulted to a @@ -87,6 +92,11 @@ #else {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), offset(menu.font), XtRString, (XtPointer) "XtDefaultFont"}, +#ifdef USE_XFT_MENUBARS + {XtNxftFont, XtCXftFont, XtRString, sizeof (String), + offset(menu.renderFontSpec), + XtRString, (XtPointer) "Helvetica-12:bold"}, +#endif # ifdef USE_XFONTSET /* #### Consider using the same method as for Motif; see the comment in XlwMenuInitialize(). */ @@ -165,7 +175,7 @@ static void Drag (Widget w, XEvent *ev, String *params, Cardinal *num_params); static void Select(Widget w, XEvent *ev, String *params, Cardinal *num_params); -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) static XFontStruct *default_font_of_font_list (XmFontList); #endif @@ -241,57 +251,6 @@ #endif /* 0 */ -/* Replacement for XAllocColor() that tries to return the nearest - available color if the colormap is full. From FSF Emacs. */ - -static int -allocate_nearest_color (Display *display, Colormap screen_colormap, - XColor *color_def) -{ - int status = XAllocColor (display, screen_colormap, color_def); - if (status) - return status; - - { - /* If we got to this point, the colormap is full, so we're - going to try to get the next closest color. - The algorithm used is a least-squares matching, which is - what X uses for closest color matching with StaticColor visuals. */ - - int nearest, x; - unsigned long nearest_delta = ULONG_MAX; - - int no_cells = XDisplayCells (display, XDefaultScreen (display)); - /* Don't use alloca here because lwlib doesn't have the - necessary configuration information that src does. */ - XColor *cells = (XColor *) malloc (sizeof (XColor) * no_cells); - - for (x = 0; x < no_cells; x++) - cells[x].pixel = x; - - XQueryColors (display, screen_colormap, cells, no_cells); - - for (nearest = 0, x = 0; x < no_cells; x++) - { - long dred = (color_def->red >> 8) - (cells[x].red >> 8); - long dgreen = (color_def->green >> 8) - (cells[x].green >> 8); - long dblue = (color_def->blue >> 8) - (cells[x].blue >> 8); - unsigned long delta = dred * dred + dgreen * dgreen + dblue * dblue; - - if (delta < nearest_delta) - { - nearest = x; - nearest_delta = delta; - } - } - color_def->red = cells[nearest].red; - color_def->green = cells[nearest].green; - color_def->blue = cells[nearest].blue; - free (cells); - return XAllocColor (display, screen_colormap, color_def); - } -} - static void push_new_stack (XlwMenuWidget mw, widget_value *val) { @@ -355,14 +314,14 @@ /* Size code */ static int string_width (XlwMenuWidget mw, -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) XmString s #else char *s #endif ) { -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) Dimension width, height; XmStringExtent (mw->menu.font_list, s, &width, &height); return width; @@ -372,10 +331,17 @@ XmbTextExtents (mw->menu.font_set, s, strlen (s), &ri, &rl); return rl.width; # else +#ifdef USE_XFT_MENUBARS + XGlyphInfo glyphinfo; + XftTextExtents8 (XtDisplay (mw), mw->menu.renderFont, s, strlen (s), + &glyphinfo); + return glyphinfo.xOff; +#else XCharStruct xcs; int drop; XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs); return xcs.width; +#endif # endif /* USE_XFONTSET */ #endif } @@ -402,22 +368,26 @@ static int string_width_u (XlwMenuWidget mw, -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) XmString string #else char *string #endif ) { -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) Dimension width, height; XmString newstring; #else # ifdef USE_XFONTSET XRectangle ri, rl; # else /* ! USE_XFONTSET */ +#ifdef USE_XFT_MENUBARS + XGlyphInfo glyphinfo; +#else XCharStruct xcs; int drop; +#endif # endif #endif char* newchars; @@ -425,7 +395,7 @@ char *chars; int i, j; -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) chars = ""; if (!XmStringGetLtoR (string, XmFONTLIST_DEFAULT_TAG, &chars)) chars = ""; @@ -442,7 +412,7 @@ newchars[j++] = chars[i]; newchars[j] = '\0'; -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) newstring = XmStringLtoRCreate (newchars, XmFONTLIST_DEFAULT_TAG); XmStringExtent (mw->menu.font_list, newstring, &width, &height); XmStringFree (newstring); @@ -453,8 +423,14 @@ XmbTextExtents (mw->menu.font_set, newchars, j, &ri, &rl); return rl.width; # else /* ! USE_XFONTSET */ +#ifdef USE_XFT_MENUBARS + XftTextExtents8 (XtDisplay (mw), mw->menu.renderFont, newchars, j, + &glyphinfo); + return glyphinfo.xOff; +#else XTextExtents (mw->menu.font, newchars, j, &drop, &drop, &drop, &xcs); return xcs.width; +#endif # endif /* USE_XFONTSET */ #endif } @@ -621,7 +597,7 @@ return result; } -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) static XmString resource_widget_value (XlwMenuWidget mw, widget_value *val) @@ -769,20 +745,41 @@ #endif /* !Motif */ +#define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \ + ? ((unsigned long) (x)) : ((unsigned long) (y))) + +#ifdef USE_XFT_MENUBARS +static int +x_xft_text_width (Display *dpy, XftFont *xft_font, char *run, int len) +{ + static XGlyphInfo glyphinfo; + + XftTextExtents8 (dpy, + xft_font, + run, len, &glyphinfo); + return glyphinfo.xOff; +} +#endif + /* Code for drawing strings. */ static void string_draw (XlwMenuWidget mw, Window window, int x, int y, +#ifdef USE_XFT_MENUBARS + XftColor *color, + XftColor *colorBg, +#else GC gc, -#ifdef NEED_MOTIF +#endif +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) XmString string #else char *string #endif ) { -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) XmStringDraw (XtDisplay (mw), window, mw->menu.font_list, string, gc, @@ -792,15 +789,31 @@ 0, /* ???? layout_direction */ 0); #else -# ifdef USE_XFONTSET +# ifdef USE_XFT_MENUBARS + Display *display = XtDisplay (mw); + Visual *visual = DefaultVisualOfScreen (XtScreen (mw)); + Colormap cmap = mw->core.colormap; + XftDraw *xftDraw = XftDrawCreate (display, window, visual, cmap); + XftFont *renderFont = mw->menu.renderFont; + /* draw background rect */ + XftDrawRect (xftDraw, colorBg, + x, y, + x_xft_text_width (display, renderFont, string, strlen (string)), + renderFont->ascent + renderFont->descent); /* XXX */ + /* draw text */ + XftDrawString8 (xftDraw, color, renderFont, + x, y + mw->menu.font_ascent, string, strlen (string)); + XftDrawDestroy (xftDraw); +# else +# ifdef USE_XFONTSET XmbDrawString (XtDisplay (mw), window, mw->menu.font_set, gc, x, y + mw->menu.font_ascent, string, strlen (string)); -# else +# else XDrawString (XtDisplay (mw), window, gc, x, y + mw->menu.font_ascent, string, strlen (string)); -# endif /* USE_XFONTSET */ - -#endif +# endif /* USE_XFONTSET */ +# endif /* USE_XFT_MENUBARS */ +#endif /* NEED_MOTIF */ } static int @@ -808,13 +821,18 @@ XlwMenuWidget mw, Window window, int x, int y, +#ifdef USE_XFT_MENUBARS + XftColor *color, + XftColor *colorBg, +#else GC gc, +#endif char *string, int start, int end ) { -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) Dimension width, height; XmString newstring; int c; @@ -851,18 +869,50 @@ mw->menu.font_set, &string[start], end - start, &ri, &rl); return rl.width; # else +#ifdef USE_XFT_MENUBARS + if (end <= start) + return 0; + else + { + XGlyphInfo glyphinfo; + Display *display = XtDisplay (mw); + Visual *visual = DefaultVisualOfScreen (XtScreen (mw)); + Colormap cmap = mw->core.colormap; + XftFont *renderFont = mw->menu.renderFont; + /* #### should use parent frame's .xftDraw? */ + XftDraw *xftDraw = XftDrawCreate (display, window, visual, cmap); + /* draw background rect */ + XftDrawRect (xftDraw, colorBg, + x, y, + x_xft_text_width (display, + renderFont, &string[start], end - start), + renderFont->ascent + renderFont->descent); /* XXX */ + /* draw text */ + XftDrawString8 (xftDraw, color, renderFont, + x, y + mw->menu.font_ascent, + &string[start], end - start); + + XftTextExtents8 (display, renderFont, &string[start], end - start, + &glyphinfo); + + /* #### should use parent frame's .xftDraw */ + XftDrawDestroy (xftDraw); + return glyphinfo.xOff; + } +#else XCharStruct xcs; int drop; if (end <= start) return 0; - XDrawString ( + XDrawString ( /* XXX */ XtDisplay (mw), window, gc, x, y + mw->menu.font_ascent, &string[start], end - start); XTextExtents ( mw->menu.font, &string[start], end - start, &drop, &drop, &drop, &xcs); return xcs.width; +#endif # endif #endif } @@ -871,8 +921,12 @@ string_draw_u (XlwMenuWidget mw, Window window, int x, int y, +#ifdef USE_XFT_MENUBARS + XftColor *color, XftColor *colorBg, GC gc, +#else GC gc, -#ifdef NEED_MOTIF +#endif +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) XmString string #else char *string @@ -882,7 +936,7 @@ int i, s = 0; char *chars; -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) chars = ""; if (!XmStringGetLtoR (string, XmFONTLIST_DEFAULT_TAG, &chars)) chars = ""; @@ -893,8 +947,13 @@ if (chars[i] == '%' && chars[i+1] == '_') { int w; +#ifdef USE_XFT_MENUBARS + x += string_draw_range (mw, window, x, y, color, colorBg, chars, s, i); + w = string_draw_range (mw, window, x, y, color, colorBg, chars, i+2, i+3); +#else x += string_draw_range (mw, window, x, y, gc, chars, s, i); w = string_draw_range (mw, window, x, y, gc, chars, i+2, i+3); +#endif /* underline next character */ XDrawLine (XtDisplay (mw), window, gc, x - 1, @@ -905,22 +964,37 @@ i += 2; } } +#ifdef USE_XFT_MENUBARS + x += string_draw_range (mw, window, x, y, color, colorBg, chars, s, i); +#else x += string_draw_range (mw, window, x, y, gc, chars, s, i); -#ifdef NEED_MOTIF +#endif +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) XtFree (chars); #endif } -static void -binding_draw (XlwMenuWidget mw, Window w, int x, int y, GC gc, char *value) +static void /* XXX */ +binding_draw (XlwMenuWidget mw, Window w, int x, int y, +#ifdef USE_XFT_MENUBARS + XftColor *color, + XftColor *colorBg, +#else + GC gc, +#endif + char *value) { -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) XmString xm_value = XmStringCreateLtoR(value, XmSTRING_DEFAULT_CHARSET); string_draw (mw, w, x, y, gc, xm_value); XmStringFree (xm_value); #else +#ifdef USE_XFT_MENUBARS + string_draw (mw, w, x, y, color, colorBg, value); +#else string_draw (mw, w, x, y, gc, value); #endif +#endif } /* Low level code for drawing 3-D edges. */ @@ -1562,21 +1636,57 @@ int y_offset = mw->menu.shadow_thickness + mw->menu.vertical_margin; GC gc; +#ifdef USE_XFT_MENUBARS + XftColor color, colorBg; + Display *display = XtDisplay (mw); + Colormap cmap = mw->core.colormap; + Visual *visual; + int ignored, pixel, pixelBg; + + visual_info_from_widget ((Widget) mw, &visual, &ignored); +#endif + if (!label_offset) label_offset = mw->menu.shadow_thickness + mw->menu.horizontal_margin; - if (highlighted && (in_menubar || val->contents)) - gc = mw->menu.highlight_gc; + if (highlighted && (in_menubar || val->contents)) + { +#ifdef USE_XFT_MENUBARS + pixel = mw->menu.highlight_foreground; + pixelBg = mw->core.background_pixel; +#endif + gc = mw->menu.highlight_gc; + } else if (in_menubar || val->contents) - gc = mw->menu.foreground_gc; + { +#ifdef USE_XFT_MENUBARS + pixel = mw->menu.foreground; + pixelBg = mw->core.background_pixel; +#endif + gc = mw->menu.foreground_gc; + } else - gc = mw->menu.title_gc; + { +#ifdef USE_XFT_MENUBARS + pixel = mw->menu.title_foreground; + pixelBg = mw->core.background_pixel; +#endif + gc = mw->menu.title_gc; + } +#ifdef USE_XFT_MENUBARS + color = xft_convert_color (display, cmap, visual, pixel, 0); + colorBg = xft_convert_color (display, cmap, visual, pixelBg, 0); +#endif /* Draw the label string. */ - string_draw_u (mw, - window, - x + label_offset, y + y_offset, + string_draw_u (mw, /* XXX */ + window, + x + label_offset, y + y_offset, +#ifdef USE_XFT_MENUBARS + &color, &colorBg, gc, +#else gc, +#endif resource_widget_value (mw, val)); } @@ -1598,7 +1708,7 @@ if (!in_menubar && val->key) { int w; -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) XmString key = XmStringCreateLtoR (val->key, XmSTRING_DEFAULT_CHARSET); w = string_width (mw, key); XmStringFree (key); @@ -1627,6 +1737,16 @@ shadow_type type; Boolean menu_pb = in_menubar && (menu_item_type (val) == BUTTON_TYPE); +#ifdef USE_XFT_MENUBARS + XftColor color, colorBg; + Display *display = XtDisplay (mw); + Colormap cmap = mw->core.colormap; + Visual *visual; + int ignored, pixel, pixelBg, dim = 0; + + visual_info_from_widget ((Widget) mw, &visual, &ignored); +#endif + /* Draw the label string. */ if (!label_offset) label_offset = mw->menu.shadow_thickness + mw->menu.horizontal_margin; @@ -1634,29 +1754,77 @@ if (highlighted) { if (val->enabled) - gc = mw->menu.highlight_gc; + { +#ifdef USE_XFT_MENUBARS + pixel = mw->menu.highlight_foreground; + pixelBg = mw->core.background_pixel; +#endif + gc = mw->menu.highlight_gc; + } else - gc = mw->menu.inactive_gc; + { +#ifdef USE_XFT_MENUBARS + dim = 1; + pixel = mw->menu.foreground; + pixelBg = mw->core.background_pixel; +#endif + gc = mw->menu.inactive_gc; + } } else if (menu_pb) { if (val->enabled) - gc = mw->menu.button_gc; + { +#ifdef USE_XFT_MENUBARS + pixel = mw->menu.button_foreground; + pixelBg = mw->core.background_pixel; +#endif + gc = mw->menu.button_gc; + } else - gc = mw->menu.inactive_button_gc; + { +#ifdef USE_XFT_MENUBARS + dim = 1; + pixel = mw->menu.button_foreground; + pixelBg = mw->core.background_pixel; +#endif + gc = mw->menu.inactive_button_gc; + } } else { if (val->enabled) - gc = mw->menu.foreground_gc; + { +#ifdef USE_XFT_MENUBARS + pixel = mw->menu.foreground; + pixelBg = mw->core.background_pixel; +#endif + gc = mw->menu.foreground_gc; + } else - gc = mw->menu.inactive_gc; + { +#ifdef USE_XFT_MENUBARS + dim = 1; + pixel = mw->menu.foreground; + pixelBg = mw->core.background_pixel; +#endif + gc = mw->menu.inactive_gc; + } } +#ifdef USE_XFT_MENUBARS + color = xft_convert_color (display, cmap, visual, pixel, dim); + colorBg = xft_convert_color (display, cmap, visual, pixelBg, 0); +#endif + string_draw_u (mw, - window, - x + label_offset, y + y_offset, - gc, + window, + x + label_offset, y + y_offset, +#ifdef USE_XFT_MENUBARS + &color, &colorBg, gc, +#else + gc, +#endif resource_widget_value (mw, val)); /* Draw the keybindings */ @@ -1670,7 +1838,13 @@ } binding_draw (mw, window, x + binding_offset + mw->menu.column_spacing, - y + y_offset, gc, val->key); + y + y_offset, +#ifdef USE_XFT_MENUBARS + &color, &colorBg, +#else + gc, +#endif + val->key); } /* Draw the shadow */ @@ -2336,6 +2510,7 @@ return; root = RootWindowOfScreen (XtScreen(mw)); + /* use visual_info_from_widget() from lwlib-colors.c */ /* grab the visual and depth from the nearest shell ancestor */ visual = CopyFromParent; depth = CopyFromParent; @@ -2615,13 +2790,19 @@ make_drawing_gcs (XlwMenuWidget mw) { XGCValues xgcv; +#ifdef USE_XFT_MENUBARS + unsigned long flags = (GCForeground | GCBackground); +#else unsigned long flags = (GCFont | GCForeground | GCBackground); +#endif -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) xgcv.font = default_font_of_font_list (mw->menu.font_list)->fid; #else +#ifndef USE_XFT_MENUBARS xgcv.font = mw->menu.font->fid; #endif +#endif xgcv.foreground = mw->core.background_pixel; xgcv.background = mw->menu.foreground; @@ -2645,18 +2826,21 @@ else { /* color */ XColor xcolor; + Visual *visual; + int ignore; + visual_info_from_widget ((Widget) mw, &visual, &ignore); Colormap cmap = mw->core.colormap; xcolor.pixel = mw->core.background_pixel; XQueryColor (dpy, cmap, &xcolor); xcolor.red = (xcolor.red * 17) / 20; xcolor.green = (xcolor.green * 17) / 20; xcolor.blue = (xcolor.blue * 17) / 20; - if (allocate_nearest_color (dpy, cmap, &xcolor)) + if (x_allocate_nearest_color (dpy, cmap, visual, &xcolor)) xgcv.foreground = xcolor.pixel; } } xgcv.background = mw->core.background_pixel; - mw->menu.select_gc = XtGetGC ((Widget)mw, flags, &xgcv); + mw->menu.select_gc = XtGetGC ((Widget) mw, flags, &xgcv); xgcv.foreground = mw->menu.foreground; xgcv.background = mw->core.background_pixel; @@ -2688,6 +2872,7 @@ static void release_drawing_gcs (XlwMenuWidget mw) { + XtReleaseGC ((Widget) mw, mw->menu.foreground_gc); XtReleaseGC ((Widget) mw, mw->menu.button_gc); XtReleaseGC ((Widget) mw, mw->menu.highlight_gc); @@ -2707,9 +2892,6 @@ mw->menu.select_gc = (GC) -1; } -#define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \ - ? ((unsigned long) (x)) : ((unsigned long) (y))) - static void make_shadow_gcs (XlwMenuWidget mw) { @@ -2717,9 +2899,20 @@ unsigned long pm = 0; Display *dpy = XtDisplay ((Widget) mw); Colormap cmap = mw->core.colormap; + Visual *visual; + int ignored; XColor topc, botc; int top_frobbed = 0, bottom_frobbed = 0; + visual_info_from_widget ((Widget) mw, &visual, &ignored); + /* #### Apparently this is called before any shell has a visual? + or maybe the widget doesn't have a parent yet? */ + if (visual == CopyFromParent) + { + Screen *screen = DefaultScreenOfDisplay (dpy); + visual = DefaultVisualOfScreen (screen); + } + if (mw->menu.top_shadow_color == (Pixel) (-1)) mw->menu.top_shadow_color = mw->core.background_pixel; if (mw->menu.bottom_shadow_color == (Pixel) (-1)) @@ -2734,7 +2927,7 @@ topc.red = MINL (65535, topc.red * 1.2); topc.green = MINL (65535, topc.green * 1.2); topc.blue = MINL (65535, topc.blue * 1.2); - if (allocate_nearest_color (dpy, cmap, &topc)) + if (x_allocate_nearest_color (dpy, cmap, visual, &topc)) { if (topc.pixel == mw->core.background_pixel) { @@ -2742,7 +2935,7 @@ topc.red = MINL (65535, topc.red + 0x8000); topc.green = MINL (65535, topc.green + 0x8000); topc.blue = MINL (65535, topc.blue + 0x8000); - if (allocate_nearest_color (dpy, cmap, &topc)) + if (x_allocate_nearest_color (dpy, cmap, visual, &topc)) { mw->menu.top_shadow_color = topc.pixel; } @@ -2763,7 +2956,7 @@ botc.red = (botc.red * 3) / 5; botc.green = (botc.green * 3) / 5; botc.blue = (botc.blue * 3) / 5; - if (allocate_nearest_color (dpy, cmap, &botc)) + if (x_allocate_nearest_color (dpy, cmap, visual, &botc)) { if (botc.pixel == mw->core.background_pixel) { @@ -2771,7 +2964,7 @@ botc.red = MINL (65535, botc.red + 0x4000); botc.green = MINL (65535, botc.green + 0x4000); botc.blue = MINL (65535, botc.blue + 0x4000); - if (allocate_nearest_color (dpy, cmap, &botc)) + if (x_allocate_nearest_color (dpy, cmap, visual, &botc)) { mw->menu.bottom_shadow_color = botc.pixel; } @@ -2854,7 +3047,7 @@ static void extract_font_extents (XlwMenuWidget mw) { -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) /* Find the maximal ascent/descent of the fonts in the font list so that all menu items can be the same height... */ mw->menu.font_ascent = 0; @@ -2939,13 +3132,18 @@ mw->menu.font_descent = font->descent; } # else /* ! USE_XFONTSET */ +#ifdef USE_XFT_MENUBARS + mw->menu.font_ascent = mw->menu.renderFont->ascent; + mw->menu.font_descent = mw->menu.renderFont->descent; +#else mw->menu.font_ascent = mw->menu.font->ascent; mw->menu.font_descent = mw->menu.font->descent; +#endif # endif #endif /* NEED_MOTIF */ } -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) static XFontStruct * default_font_of_font_list (XmFontList font_list) { @@ -3015,7 +3213,7 @@ XCreatePixmapFromBitmapData (display, window, (char *) gray_bits, gray_width, gray_height, 1, 0, 1); -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) /* #### Even if it's a kludge!!!, we should consider doing the same for X Font Sets. */ /* The menu.font_list slot came from the *fontList resource (Motif standard.) @@ -3037,6 +3235,14 @@ mw->menu.font_list = mw->menu.fallback_font_list; #endif +#ifdef USE_XFT_MENUBARS + /* to do this right, we should add a new Xt Resource type + + conversion function + */ + mw->menu.renderFont = + xft_open_font_by_name (XtDisplay (mw), mw->menu.renderFontSpec); +#endif + make_drawing_gcs (mw); make_shadow_gcs (mw); extract_font_extents (mw); @@ -3179,12 +3385,16 @@ if (newmw->core.background_pixel != oldmw->core.background_pixel || newmw->menu.foreground != oldmw->menu.foreground /* For the XEditResource protocol, which may want to change the font. */ -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) || newmw->menu.font_list != oldmw->menu.font_list || newmw->menu.font_list_2 != oldmw->menu.font_list_2 || newmw->menu.fallback_font_list != oldmw->menu.fallback_font_list #else +#ifdef USE_XFT_MENUBARS + || newmw->menu.renderFont != oldmw->menu.renderFont +#else || newmw->menu.font != oldmw->menu.font +#endif #endif ) { diff -urN 21.5.23/lwlib/xlwmenuP.h 21.5.24/lwlib/xlwmenuP.h --- 21.5.23/lwlib/xlwmenuP.h Fri Apr 13 03:21:55 2001 +++ 21.5.24/lwlib/xlwmenuP.h Sat Nov 26 20:46:00 2005 @@ -4,6 +4,11 @@ #include "xlwmenu.h" #include +#ifdef USE_XFT_MENUBARS +#include +#endif + + /* Elements in the stack arrays. */ typedef struct _window_state { @@ -22,12 +27,17 @@ { /* slots set by the resources */ -#ifdef NEED_MOTIF +#if defined(NEED_MOTIF) && !defined(USE_XFT_MENUBARS) XmFontList font_list; XmFontList font_list_2; XmFontList fallback_font_list; #else XFontStruct * font; +#ifdef USE_XFT_MENUBARS + /* #### Fix naming convention here */ + String renderFontSpec; + XftFont *renderFont; +#endif # ifdef USE_XFONTSET XFontSet font_set; # endif @@ -47,6 +57,8 @@ Pixel top_shadow_color; Pixel bottom_shadow_color; Pixel select_color; +#ifdef USE_XFT_MENUBARS +#endif Pixmap top_shadow_pixmap; Pixmap bottom_shadow_pixmap; Cursor cursor_shape; diff -urN 21.5.23/lwlib/xlwradio.c 21.5.24/lwlib/xlwradio.c --- 21.5.23/lwlib/xlwradio.c Tue Sep 21 04:19:17 2004 +++ 21.5.24/lwlib/xlwradio.c Wed Nov 16 16:22:43 2005 @@ -89,13 +89,17 @@ static void RadioInit (Widget, Widget, ArgList, Cardinal *); static void RadioExpose (Widget, XEvent *, Region); static void RadioResize (Widget); -static void RadioDestroy (Widget, XtPointer, XtPointer); static void RadioClassInit (void); static void RadioClassPartInit (WidgetClass); static Boolean RadioSetValues (Widget, Widget, Widget, ArgList, Cardinal *); static void DrawDiamond (Widget); static XtGeometryResult RadioQueryGeometry (Widget, XtWidgetGeometry *, XtWidgetGeometry *); +#if 0 +/* #### This function isn't used and is slated for destruction. + Can we just nuke it? */ +static void RadioDestroy (Widget, XtPointer, XtPointer); +#endif /* Action procs */ @@ -218,11 +222,11 @@ /*ARGSUSED*/ static void RadioInit (Widget request, - Widget new, + Widget new_, ArgList UNUSED (args), Cardinal *UNUSED (num_args)) { - RadioWidget rw = (RadioWidget) new; + RadioWidget rw = (RadioWidget) new_; RadioWidget rw_req = (RadioWidget) request; Dimension w,h ; @@ -234,7 +238,7 @@ rw->core.width = w ; if( rw_req->core.height == 0 ) rw->core.height = h ; - rw->core.widget_class->core_class.resize(new) ; + rw->core.widget_class->core_class.resize(new_) ; } } @@ -245,6 +249,9 @@ * Returns: none. */ +#if 0 +/* #### This function isn't used and is slated for destruction. + Can we just nuke it? */ /* ARGSUSED */ static void RadioDestroy (Widget UNUSED (w), @@ -253,7 +260,7 @@ { /* TODO: get rid of this */ } - +#endif /* React to size change from manager. Label widget will compute some internal * stuff, but we need to override. This code requires knowledge of the @@ -345,12 +352,12 @@ static Boolean RadioSetValues (Widget current, Widget UNUSED (request), - Widget new, + Widget new_, ArgList UNUSED (args), Cardinal *UNUSED (num_args)) { RadioWidget oldrw = (RadioWidget) current; - RadioWidget newrw = (RadioWidget) new; + RadioWidget newrw = (RadioWidget) new_; /* Need to find out if the size of the widget changed. Set new size * if it did and resize is permitted. One way to determine of the @@ -373,7 +380,7 @@ */ if (newrw->label.label_x != oldrw->label.label_x) { - RadioResize (new); + RadioResize (new_); } return FALSE ; } diff -urN 21.5.23/lwlib/xlwscrollbar.c 21.5.24/lwlib/xlwscrollbar.c --- 21.5.23/lwlib/xlwscrollbar.c Tue Sep 21 04:19:18 2004 +++ 21.5.24/lwlib/xlwscrollbar.c Sat Nov 26 20:46:00 2005 @@ -78,6 +78,8 @@ #include #include +#include "lwlib-colors.h" + #include "xlwscrollbarP.h" #include "xlwscrollbar.h" @@ -523,65 +525,25 @@ return XtGetGC((Widget) w, mask, &values); } -/* Replacement for XAllocColor() that tries to return the nearest - available color if the colormap is full. From FSF Emacs. */ - -static int -allocate_nearest_color (Display *display, Colormap screen_colormap, - XColor *color_def) -{ - int status = XAllocColor (display, screen_colormap, color_def); - if (status) - return status; - - { - /* If we got to this point, the colormap is full, so we're - going to try to get the next closest color. - The algorithm used is a least-squares matching, which is - what X uses for closest color matching with StaticColor visuals. */ - - int nearest, x; - unsigned long nearest_delta = ULONG_MAX; - - int no_cells = XDisplayCells (display, XDefaultScreen (display)); - /* Don't use alloca here because lwlib doesn't have the - necessary configuration information that src does. */ - XColor *cells = (XColor *) malloc (sizeof (XColor) * no_cells); - - for (x = 0; x < no_cells; x++) - cells[x].pixel = x; - - XQueryColors (display, screen_colormap, cells, no_cells); - - for (nearest = 0, x = 0; x < no_cells; x++) - { - long dred = (color_def->red >> 8) - (cells[x].red >> 8); - long dgreen = (color_def->green >> 8) - (cells[x].green >> 8); - long dblue = (color_def->blue >> 8) - (cells[x].blue >> 8); - unsigned long delta = dred * dred + dgreen * dgreen + dblue * dblue; - - if (delta < nearest_delta) - { - nearest = x; - nearest_delta = delta; - } - } - color_def->red = cells[nearest].red; - color_def->green = cells[nearest].green; - color_def->blue = cells[nearest].blue; - free (cells); - return XAllocColor (display, screen_colormap, color_def); - } -} - static void make_shadow_pixels (XlwScrollBarWidget w) { - Display *dpy = XtDisplay((Widget) w); + Display *dpy = XtDisplay ((Widget) w); Colormap cmap = w->core.colormap; XColor topc, botc; int top_frobbed, bottom_frobbed; Pixel bg, fg; + Visual *visual; + int ignored; + + visual_info_from_widget ((Widget) w, &visual, &ignored); + /* #### Apparently this is called before any shell has a visual? + or maybe the widget doesn't have a parent yet? */ + if (visual == CopyFromParent) + { + Screen *screen = DefaultScreenOfDisplay (dpy); + visual = DefaultVisualOfScreen (screen); + } top_frobbed = bottom_frobbed = 0; @@ -595,11 +557,12 @@ { topc.pixel = bg; XQueryColor (dpy, cmap, &topc); + /* #### can we use a (generalized) xft_convert_color here? */ /* don't overflow/wrap! */ topc.red = MINL(65535, topc.red * 1.2); topc.green = MINL(65535, topc.green * 1.2); topc.blue = MINL(65535, topc.blue * 1.2); - if (allocate_nearest_color (dpy, cmap, &topc)) + if (x_allocate_nearest_color (dpy, cmap, visual, &topc)) { if (topc.pixel == bg) { @@ -607,7 +570,7 @@ topc.red = MINL(65535, topc.red + 0x8000); topc.green = MINL(65535, topc.green + 0x8000); topc.blue = MINL(65535, topc.blue + 0x8000); - if (allocate_nearest_color (dpy, cmap, &topc)) + if (x_allocate_nearest_color (dpy, cmap, visual, &topc)) { w->sb.topShadowColor = topc.pixel; } @@ -628,7 +591,7 @@ botc.red = (botc.red * 3) / 5; botc.green = (botc.green * 3) / 5; botc.blue = (botc.blue * 3) / 5; - if (allocate_nearest_color (dpy, cmap, &botc)) + if (x_allocate_nearest_color (dpy, cmap, visual, &botc)) { if (botc.pixel == bg) { @@ -636,7 +599,7 @@ botc.red = MINL(65535, botc.red + 0x4000); botc.green = MINL(65535, botc.green + 0x4000); botc.blue = MINL(65535, botc.blue + 0x4000); - if (allocate_nearest_color (dpy, cmap, &botc)) + if (x_allocate_nearest_color (dpy, cmap, visual, &botc)) { w->sb.bottomShadowColor = botc.pixel; } @@ -703,6 +666,17 @@ Display *dpy = XtDisplay((Widget) w); Colormap cmap = w->core.colormap; XColor troughC; + Visual *visual; + int ignored; + + visual_info_from_widget ((Widget) w, &visual, &ignored); + /* #### Apparently this is called before any shell has a visual? + or maybe the widget doesn't have a parent yet? */ + if (visual == CopyFromParent) + { + Screen *screen = DefaultScreenOfDisplay (dpy); + visual = DefaultVisualOfScreen (screen); + } if (w->sb.troughColor == (Pixel)~0) w->sb.troughColor = w->core.background_pixel; @@ -713,7 +687,7 @@ troughC.red = (troughC.red * 4) / 5; troughC.green = (troughC.green * 4) / 5; troughC.blue = (troughC.blue * 4) / 5; - if (allocate_nearest_color (dpy, cmap, &troughC)) + if (x_allocate_nearest_color (dpy, cmap, visual, &troughC)) w->sb.troughColor = troughC.pixel; } } diff -urN 21.5.23/lwlib/xlwtabs.c 21.5.24/lwlib/xlwtabs.c --- 21.5.23/lwlib/xlwtabs.c Tue Oct 25 20:16:49 2005 +++ 21.5.24/lwlib/xlwtabs.c Sat Nov 26 20:46:00 2005 @@ -18,13 +18,6 @@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - /* Synched up with: Tabs.c 1.27. - - #### This file contains essential XEmacs related fixes to the original - verison of the Tabs widget. Be VERY careful about syncing if you ever - update to a more recent version. In general this is probably now a - bad idea. */ - /* * Tabs.c - Index Tabs composite widget * @@ -56,6 +49,18 @@ * the frame. */ + /* Synched up with: Tabs.c 1.27. + + This file contains essential XEmacs-related fixes to the original + version of the Tabs widget. Be VERY careful about syncing if you ever + update to a more recent version. In general this is probably now a + bad idea. + + #### We need to check that various windows (the whole widget, or a single + tab) are of "reasonable" size, ie, we need to try for more sanity in the + geometry management routines. + */ + /* * TODO: min child height = tab height */ @@ -67,11 +72,17 @@ #include #include +/* #### This may be risky, lwlib-internal.h redefines abort() */ +#include "lwlib-fonts.h" +#include "lwlib-colors.h" #include "lwlib-internal.h" #include "../src/xmu.h" #include "xlwtabsP.h" #include "xlwgcs.h" +#define XFT_USE_HEIGHT_NOT_ASCENT_DESCENT 0 + +/* #### These should probably be resources. */ #define MIN_WID 10 #define MIN_HGT 10 #define INDENT 3 /* tabs indented from edge by this much */ @@ -138,6 +149,12 @@ offset(selectInsensitive), XtRImmediate, (XtPointer) True}, {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), offset(font), XtRString, (XtPointer) XtDefaultFont}, +#ifdef USE_XFT_TABS + /* #### Maybe use "-*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-1" here? */ + {XtNxftFont, XtCXftFont, XtRString, sizeof (String), + offset(renderFontSpec), XtRString, + (XtPointer) "AirCut-16" /* XtDefaultFont */}, +#endif {XtNinternalWidth, XtCWidth, XtRDimension, sizeof(Dimension), offset(internalWidth), XtRImmediate, (XtPointer)4 }, {XtNinternalHeight, XtCHeight, XtRDimension, sizeof(Dimension), @@ -400,6 +417,27 @@ ((TabsConstraints)((tab)->core.constraints))->tabs.visible) + +static int debug_tabs = 0; /* increase for more verbosity */ + +#ifdef USE_XFT_TABS +/* #### duplicated from xlwmenu.c -- CLEAN THIS SHIT UP! + Undeclared so define at top. */ +#define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \ + ? ((unsigned long) (x)) : ((unsigned long) (y))) + +static int +x_xft_text_width (Display *dpy, XftFont *xft_font, FcChar8 *run, int len) +{ + static XGlyphInfo glyphinfo; /* #### static? */ + + XftTextExtents8 (dpy, + xft_font, + run, len, &glyphinfo); + return glyphinfo.xOff; +} +#endif + /**************************************************************** * * Member Procedures @@ -436,11 +474,26 @@ */ newTw->tabs.tab_height = 2 * newTw->tabs.internalHeight + SHADWID ; - if( newTw->tabs.font != NULL ) +#ifdef USE_XFT_TABS + /* must get font here + to do this right, we should add a new Xt Resource type + + conversion function + */ + newTw->tabs.renderFont = + xft_open_font_by_name (XtDisplay ((Widget) newTw), + newTw->tabs.renderFontSpec); + if (newTw->tabs.renderFont != NULL) +#if XFT_USE_HEIGHT_NOT_ASCENT_DESCENT + newTw->tabs.tab_height += newTw->tabs.renderFont->height; +#else + newTw->tabs.tab_height += newTw->tabs.renderFont->ascent + + newTw->tabs.renderFont->descent; +#endif /* XFT_USE_HEIGHT_NOT_ASCENT_DESCENT */ +#else /* ! USE_XFT_TABS */ + if (newTw->tabs.font != NULL) newTw->tabs.tab_height += newTw->tabs.font->max_bounds.ascent + - newTw->tabs.font->max_bounds.descent ; - - /* GC allocation is deferred until XtRealize() */ + newTw->tabs.font->max_bounds.descent; +#endif /* ! USE_XFT_TABS */ /* if size not explicitly set, set it to our preferred size now. */ @@ -614,16 +667,30 @@ Widget *childP ; int i ; - - if( tw->tabs.font != curtw->tabs.font || - tw->tabs.internalWidth != curtw->tabs.internalWidth || - tw->tabs.internalHeight != curtw->tabs.internalHeight ) + if( +#ifdef USE_XFT_TABS + tw->tabs.renderFont != curtw->tabs.renderFont || +#else + tw->tabs.font != curtw->tabs.font || +#endif + tw->tabs.internalWidth != curtw->tabs.internalWidth || + tw->tabs.internalHeight != curtw->tabs.internalHeight) { - tw->tabs.tab_height = 2 * tw->tabs.internalHeight + SHADWID ; + tw->tabs.tab_height = 2 * tw->tabs.internalHeight + SHADWID; - if( tw->tabs.font != NULL ) +#ifdef USE_XFT_TABS + if (tw->tabs.renderFont != NULL) +#if XFT_USE_HEIGHT_NOT_ASCENT_DESCENT + tw->tabs.tab_height += tw->tabs.renderFont->height; +#else + tw->tabs.tab_height += tw->tabs.renderFont->ascent + + tw->tabs.renderFont->descent; +#endif /* XFT_USE_HEIGHT_NOT_ASCENT_DESCENT */ +#else /* ! USE_XFT_TABS */ + if (tw->tabs.font != NULL) tw->tabs.tab_height += tw->tabs.font->max_bounds.ascent + - tw->tabs.font->max_bounds.descent ; + tw->tabs.font->max_bounds.descent; +#endif /* ! USE_XFT_TABS */ /* Tab size has changed. Resize all tabs and request a new size */ for(i=0, childP=tw->composite.children; @@ -640,7 +707,12 @@ if( tw->core.background_pixel != curtw->core.background_pixel || tw->core.background_pixmap != curtw->core.background_pixmap || - tw->tabs.font != curtw->tabs.font ) +#ifdef USE_XFT_TABS + tw->tabs.renderFont != curtw->tabs.renderFont +#else + tw->tabs.font != curtw->tabs.font +#endif + ) if( XtIsRealized(new_) ) { TabsFreeGCs(tw) ; @@ -755,83 +827,167 @@ /* - * Return preferred size. Happily accept anything >= our preferred size. - * (TODO: is that the right thing to do? Should we always return "almost" - * if offered more than we need?) + * Return status, with preferred size in PREFERRED. + * + * According to the X Toolkit Intrinsics manual + * XtGeometryYes = accept INTENDED without change + * XtGeometryNo = request to stay _exactly_ the same + * XtGeometryAlmost = suggest PREFERRED as a compromise + * and the PREFERRED argument must be filled in completely (ie, any fields + * whose bits are set in the request_mode mask must correspond to the + * preferred geometry, which must be consistent with the return value). + * + * Assuming horizontal orientation, in XEmacs, we should always accept if + * the width is more than we need. There's no problem if there are only a + * couple of tabs packed to the left. OTOH there's probably something wrong + * if we're offered a height more than 1.5x or 2x the preferred height. + * (#### Do tab controls do vertical?) */ -static XtGeometryResult -TabsQueryGeometry(Widget w, - XtWidgetGeometry *intended, XtWidgetGeometry *preferred) -{ - register TabsWidget tw = (TabsWidget)w ; - XtGeometryMask mode = intended->request_mode ; - - preferred->request_mode = CWWidth | CWHeight ; - PreferredSize(tw, &preferred->width, &preferred->height, NULL,NULL) ; +/* compute the height above which we complain */ +#define TAB_HEIGHT_TOLERANCE(x) (2*x) - if( (!(mode & CWWidth) || intended->width == w->core.width) && - (!(mode & CWHeight) || intended->height == w->core.height) ) - return XtGeometryNo ; - - if( (!(mode & CWWidth) || intended->width >= preferred->width) && - (!(mode & CWHeight) || intended->height >= preferred->height) ) +static XtGeometryResult +TabsQueryGeometry (Widget w, + XtWidgetGeometry *intended, + XtWidgetGeometry *preferred) /* RETURN */ +{ + TabsWidget tw = (TabsWidget) w; + XtGeometryMask mode = intended->request_mode; + + preferred->request_mode = CWWidth | CWHeight; + PreferredSize (tw, &preferred->width, &preferred->height, NULL, NULL); + + /* If width is big enough, accept it. */ + if ((mode & CWWidth) && intended->width >= preferred->width) + preferred->width = intended->width; + + /* If height is within range, accept it. + #### If too tall, we could offer a compromise at TAB_HEIGHT_TOLERANCE. + Should we? */ + if ((mode & CWHeight) && intended->height >= preferred->height + && intended->height <= TAB_HEIGHT_TOLERANCE (preferred->height)) + preferred->height = intended->height; + + /* Compute return value. */ + if (preferred->width == ((mode & CWWidth) ? intended->width + : w->core.width) + && preferred->height == ((mode & CWHeight) ? intended->height + : w->core.height)) return XtGeometryYes; - - return XtGeometryAlmost; + else if (preferred->width == w->core.width + && preferred->height == w->core.height) + return XtGeometryNo; + else + return XtGeometryAlmost; } /* - * Geometry Manager; called when a child wants to be resized. + * Geometry Manager; called when TAB (a child) wants to be resized. + * + * According to the X Toolkit Intrinsics manual + * XtGeometryDone = accept REQUEST and do it (#### check this) + * XtGeometryYes = accept REQUEST without change + * XtGeometryNo = refuse REQUEST (ie, stay _exactly_ the same) + * XtGeometryAlmost = suggest REPLY as a compromise */ static XtGeometryResult -TabsGeometryManager(Widget w, XtWidgetGeometry *req, XtWidgetGeometry *reply) -{ - TabsWidget tw = (TabsWidget) XtParent(w); - Dimension s = SHADWID ; - TabsConstraints tab = (TabsConstraints)w->core.constraints; - XtGeometryResult result ; - Dimension rw, rh ; +TabsGeometryManager (Widget tab, + XtWidgetGeometry *request, + XtWidgetGeometry *reply) /* RETURN */ +{ + TabsWidget control = (TabsWidget) XtParent(tab); + Dimension s = SHADWID; + TabsConstraints constraint = (TabsConstraints) tab->core.constraints; + XtGeometryResult result, best_offer = XtGeometryYes; + Dimension rw, rh; + + static int debug_count = 0; + static int debug_mask = 1; + + /* Position request cannot be satisfied, so if tabs are not resizable, + no nontrivial request can be satisfied: return XGeometryNo. */ + if (!constraint->tabs.resizable) + return XtGeometryNo; + + fprintf (stderr, "Urk! label is resizable!\n"); + + /* Assume we will refuse these; toggle iff we accept them. + Reply won't specify any fields not in the request. */ + reply->request_mode = request->request_mode; + reply->x = tab->core.x; + reply->y = tab->core.y; + + /* If a position request would result in a change, best offer is + XtGeometryAlmost. Otherwise toggle reply->request_mode. */ + if ((request->request_mode & CWX) && request->x != tab->core.x) + best_offer = XtGeometryAlmost; + else + reply->request_mode &= ~CWX; + if ((request->request_mode & CWY) && request->y != tab->core.y) + best_offer = XtGeometryAlmost; + else + reply->request_mode &= ~CWY; - /* Position request always denied */ + /* Make all three fields in the reply valid */ + reply->width = (request->request_mode & CWWidth) + ? request->width : tab->core.width; + reply->height = (request->request_mode & CWHeight) + ? request->height : tab->core.height; + reply->border_width = (request->request_mode & CWBorderWidth) + ? request->border_width : tab->core.border_width; + + /* check if we can already offer a compromise */ + if (best_offer == XtGeometryAlmost && + reply->width == tab->core.width && + reply->height == tab->core.height && + reply->border_width == tab->core.border_width) + { + reply->request_mode &= ~(CWWidth | CWHeight | CWBorderWidth); + return best_offer; + } - if( ((req->request_mode & CWX) && req->x != w->core.x) || - ((req->request_mode & CWY) && req->y != w->core.y) || - !tab->tabs.resizable ) - return XtGeometryNo ; - - /* Make all three fields in the request valid */ - if( !(req->request_mode & CWWidth) ) - req->width = w->core.width; - if( !(req->request_mode & CWHeight) ) - req->height = w->core.height; - if( !(req->request_mode & CWBorderWidth) ) - req->border_width = w->core.border_width; - - if( req->width == w->core.width && - req->height == w->core.height && - req->border_width == w->core.border_width ) - return XtGeometryNo ; +#ifndef DONT_DEBUG_REQUESTS +#define DBG_REQUEST_PRINT(name,field,size) \ +do { \ + if (reply->field > size) \ + { \ + if (++debug_count == debug_mask) \ + { \ + debug_mask <<= 1; \ + fprintf (stderr, "ridiculous %s request #%d: %d > %d\n", \ + name, debug_count, reply->field, size); \ + } \ + reply->field = tab->core.field; \ + } \ +} while (0) + + DBG_REQUEST_PRINT ("width",width,1024); + DBG_REQUEST_PRINT ("height",height,768); + DBG_REQUEST_PRINT ("border_width",border_width,30); +#undef DBG_REQUEST_PRINT +#endif - rw = req->width + 2 * req->border_width ; - rh = req->height + 2 * req->border_width ; + rw = reply->width + 2 * reply->border_width; + rh = reply->height + 2 * reply->border_width; /* find out how big the children want to be now */ - MaxChild(tw, w, rw, rh) ; + MaxChild (control, tab, rw, rh); /* Size changes must see if the new size can be accommodated. - * The Tabs widget keeps all of its children the same - * size. A request to shrink will be accepted only if the + * The Tabs widget keeps all of its children the same height, but + * widths may vary. + * A request to shrink will be accepted only if the * new size is still big enough for all other children. A * request to shrink that is not big enough for all children * returns an "almost" response with the new proposed size * or a "no" response if unable to shrink at all. * - * A request to grow will be accepted only if the Tabs parent can + * A request to grow will be accepted only if the Tabs control can * grow to accommodate. * * TODO: @@ -840,25 +996,33 @@ * for another day. */ - if (req->request_mode & (CWWidth | CWHeight | CWBorderWidth)) + if (request->request_mode & (CWWidth | CWHeight | CWBorderWidth)) { Dimension cw,ch ; /* children's preferred size */ Dimension aw,ah ; /* available size we can give child */ Dimension th ; /* space used by tabs */ Dimension wid,hgt ; /* Tabs widget size */ + int check_nrows; - cw = tw->tabs.max_cw ; - ch = tw->tabs.max_ch ; + cw = control->tabs.max_cw ; + ch = control->tabs.max_ch ; /* find out what *my* resulting preferred size would be */ - - PreferredSize2(tw, cw, ch, &wid, &hgt) ; + /* #### this whole API is wrong; what should happen is + 1. app should hint as to #rows and/or aspect ratio + 2. tab control should attempt to layout in current space + 3. if not all tabs fit, should request resize to achieve + layout hints + Probably can and should cache preferred size in widget, with + cache cleared when labels or core size changes. */ + PreferredSize2(control, cw, ch, &wid, &hgt) ; /* Would my size change? If so, ask to be resized. */ - if( wid != tw->core.width || hgt != tw->core.height ) + if (wid != control->core.width || hgt != control->core.height) { - Dimension oldWid = tw->core.width, oldHgt = tw->core.height ; + Dimension oldWid = control->core.width, + oldHgt = control->core.height; XtWidgetGeometry myrequest, myreply ; myrequest.width = wid ; @@ -870,10 +1034,11 @@ * offer the child a compromise, then make this a query only. */ - if( (req->request_mode & XtCWQueryOnly) || rw < cw || rh < ch ) - myrequest.request_mode |= XtCWQueryOnly ; + if ((request->request_mode & XtCWQueryOnly) || rw < cw || rh < ch) + myrequest.request_mode |= XtCWQueryOnly; - result = XtMakeGeometryRequest((Widget)tw, &myrequest, &myreply) ; + result = XtMakeGeometryRequest ((Widget) control, + &myrequest, &myreply); /* !$@# Athena Box widget changes the core size even if QueryOnly * is set. I'm convinced this is a bug. At any rate, to work @@ -881,81 +1046,104 @@ * query geometry request. This is only partly effective, * as there may be other boxes further up the tree. */ - if( myrequest.request_mode & XtCWQueryOnly ) { - tw->core.width = oldWid ; - tw->core.height = oldHgt ; + if (myrequest.request_mode & XtCWQueryOnly) { + control->core.width = oldWid; + control->core.height = oldHgt; } /* based on the parent's response, determine what the * resulting Tabs widget size would be. */ - switch( result ) { + switch (result) { case XtGeometryYes: case XtGeometryDone: - tw->tabs.needs_layout = True ; - break ; + control->tabs.needs_layout = True; + break; case XtGeometryNo: - wid = tw->core.width ; - hgt = tw->core.height ; - break ; + wid = control->core.width; + hgt = control->core.height; + break; case XtGeometryAlmost: - wid = myreply.width ; - hgt = myreply.height ; - tw->tabs.needs_layout = True ; - break ; + wid = myreply.width; + hgt = myreply.height; + control->tabs.needs_layout = True; + break; } } /* Within the constraints imposed by the parent, what is * the max size we can give the child? */ - (void) TabLayout(tw, wid, hgt, &th, True) ; - aw = wid - 2*s ; - ah = hgt - th - 2*s ; + check_nrows = TabLayout (control, wid, hgt, &th, True); + aw = wid - 2*s; + if (check_nrows == 1) + { + ah = hgt - th - 2*s; + } + else + { + /* this rarely gets triggered, but when it does it seems to + get triggered forever after */ + int n = control->composite.num_children; + ah = control->tabs.tab_height; + if (debug_tabs > 0) + fprintf (stderr, "Kludging around %d != 1 rows," + " #children = %d, total height %d, using %d.\n", + check_nrows, n, th, ah); + } /* OK, make our decision. If requested size is >= max sibling * preferred size, AND requested size <= available size, then * we accept. Otherwise, we offer a compromise. */ - if( rw == aw && rh == ah ) + if (rw == aw && rh == ah) { /* Acceptable. If this wasn't a query, change *all* children * to this size. */ - if( req->request_mode & XtCWQueryOnly ) - return XtGeometryYes ; + if (request->request_mode & XtCWQueryOnly) + { + control->tabs.needs_layout = False; + return XtGeometryYes ; + } else { - Widget *childP = tw->composite.children ; - int i,bw ; - w->core.border_width = req->border_width ; - for(i=TabsNumChildren (tw); --i >= 0; ++childP) - if( TabVisible(*childP) ) + Widget *childP = control->composite.children; + int i, bw; + tab->core.border_width = request->border_width; + for (i = TabsNumChildren (control); --i >= 0; ++childP) + if (TabVisible (*childP)) { - bw = (*childP)->core.border_width ; - XtConfigureWidget(*childP, s,tw->tabs.tab_total+s, - rw-2*bw, rh-2*bw, bw) ; + bw = (*childP)->core.border_width; + XtConfigureWidget (*childP, s, control->tabs.tab_total+s, + rw-2*bw, rh-2*bw, bw); } #ifdef COMMENT /* TODO: under what conditions will we need to redraw? */ - XClearWindow(XtDisplay((Widget)tw), XtWindow((Widget)tw)) ; - XtClass(tw)->core_class.expose((Widget)tw,NULL,NULL) ; + XClearWindow (XtDisplay ((Widget) control), + XtWindow ((Widget) control)); + XtClass (control)->core_class.expose ((Widget)control, + NULL, NULL); #endif /* COMMENT */ - return XtGeometryDone ; + return XtGeometryDone; } } /* Cannot grant child's request. Describe what we *can* do * and return counter-offer. */ - reply->width = aw - 2 * req->border_width ; - reply->height = ah - 2 * req->border_width ; - reply->border_width = req->border_width ; - reply->request_mode = CWWidth | CWHeight | CWBorderWidth ; + control->tabs.needs_layout = False; + reply->width = aw - 2 * request->border_width ; + reply->height = ah - 2 * request->border_width ; + reply->request_mode &= + ~((reply->border_width == tab->core.border_width + ? CWBorderWidth : 0) + |(reply->width == tab->core.width ? CWWidth : 0) + |(reply->height == tab->core.height ? CWHeight : 0)); return XtGeometryAlmost ; } @@ -1428,6 +1616,8 @@ GC gc ; int x,y ; + if (debug_tabs > 1) fprintf (stderr, "DrawTab called.\n"); + if( !XtIsRealized((Widget)tw)) return ; @@ -1440,55 +1630,142 @@ Window win = XtWindow((Widget)tw) ; String lbl = tab->tabs.label != NULL ? tab->tabs.label : XtName(child) ; +#ifdef USE_XFT_TABS + XftColor color; + XftColor colorBG; + Colormap cmap = tw->core.colormap; + Visual *visual; + int ignored; + + visual_info_from_widget ((Widget) tw, &visual, &ignored); + colorBG = xft_convert_color (dpy, cmap, visual, + tw->core.background_pixel, 0); +#endif + + if (debug_tabs > 2) + fprintf (stderr, "(Re)drawing labels.\n"); - if( XtIsSensitive(child) ) + if (XtIsSensitive(child)) { - gc = tw->tabs.foregroundGC ; - XSetForeground(dpy, gc, tab->tabs.foreground) ; + gc = tw->tabs.foregroundGC; +#ifdef USE_XFT_TABS + color = xft_convert_color (dpy, cmap, visual, + tab->tabs.foreground, 0); +#else + XSetForeground(dpy, gc, tab->tabs.foreground); +#endif } else { /* grey pixel allocation deferred until now */ - if( !tab->tabs.greyAlloc ) + if (!tab->tabs.greyAlloc) { - if( tw->tabs.be_nice_to_cmap || tw->core.depth == 1 ) - tab->tabs.grey = tab->tabs.foreground ; + if (tw->tabs.be_nice_to_cmap || tw->core.depth == 1) + tab->tabs.grey = tab->tabs.foreground; else - tab->tabs.grey = AllocGreyPixel((Widget)tw, + tab->tabs.grey = AllocGreyPixel ((Widget) tw, tab->tabs.foreground, tw->core.background_pixel, - tw->tabs.insensitive_contrast ) ; - tab->tabs.greyAlloc = True ; + tw->tabs.insensitive_contrast); + tab->tabs.greyAlloc = True; } - gc = tw->tabs.greyGC ; - XSetForeground(dpy, gc, tab->tabs.grey) ; + gc = tw->tabs.greyGC; +#ifdef USE_XFT_TABS + color = xft_convert_color (dpy, cmap, visual, tab->tabs.grey, 0); +#else + XSetForeground(dpy, gc, tab->tabs.grey); +#endif } - x = tab->tabs.x ; - y = tab->tabs.y ; - if( child == tw->tabs.topWidget ) - y -= TABLDELTA ; + x = tab->tabs.x; + y = tab->tabs.y; + if (child == tw->tabs.topWidget) + y -= TABLDELTA; - if( tab->tabs.left_bitmap != None && tab->tabs.lbm_width > 0 ) + if (tab->tabs.left_bitmap != None && tab->tabs.lbm_width > 0) { - if( tab->tabs.lbm_depth == 1 ) + if (tab->tabs.lbm_depth == 1) XCopyPlane(dpy, tab->tabs.left_bitmap, win,gc, 0,0, tab->tabs.lbm_width, tab->tabs.lbm_height, - x+tab->tabs.lbm_x, y+tab->tabs.lbm_y, 1L) ; + x+tab->tabs.lbm_x, y+tab->tabs.lbm_y, 1L); else XCopyArea(dpy, tab->tabs.left_bitmap, win,gc, 0,0, tab->tabs.lbm_width, tab->tabs.lbm_height, - x+tab->tabs.lbm_x, y+tab->tabs.lbm_y) ; + x+tab->tabs.lbm_x, y+tab->tabs.lbm_y); } - if( lbl != NULL && tw->tabs.font != NULL ) - XDrawString(dpy,win,gc, - x+tab->tabs.l_x, y+tab->tabs.l_y, - lbl, (int)strlen(lbl)) ; + if (lbl != NULL && +#ifdef USE_XFT_TABS + tw->tabs.renderFont != NULL +#else + tw->tabs.font != NULL +#endif + ) + { +#ifdef USE_XFT_TABS + XftDraw *xftDraw = XftDrawCreate (dpy, win, visual, cmap); + XftFont *renderFont = tw->tabs.renderFont; + XGlyphInfo glyphinfo; + XftColor colorDBG; + XftColorAllocName (dpy, visual, cmap, "wheat", &colorDBG); + XftTextExtents8 (dpy, renderFont, lbl, (int) strlen (lbl), + &glyphinfo); + /* #### unnecessary? for the moment, give visual extent */ + /* draw background rect */ +#if 1 + if (debug_tabs > 2) + { + fprintf (stderr, "background color: pixel=%08lx, r=%04x," + " g=%04x, b=%04x, alpha=%04x.\n", + colorDBG.pixel, colorDBG.color.red, + colorDBG.color.green, colorDBG.color.blue, + colorDBG.color.alpha); + fprintf (stderr, "label geometry: x=%d, y=%d, xOff=%d," + " yOff=%d, width=%d, height=%d\n", + glyphinfo.x, glyphinfo.y, glyphinfo.xOff, + glyphinfo.yOff, glyphinfo.width, glyphinfo.height); + } + XftDrawRect (xftDraw, &colorDBG, + /* left, top, width, height */ + x+tab->tabs.l_x-glyphinfo.x, + y+tab->tabs.l_y-glyphinfo.y, + glyphinfo.width, glyphinfo.height); +#endif + /* draw text */ + if (debug_tabs > 2) + { + FcValue name; + FcValue size; + FcPatternGet (renderFont->pattern, FC_FAMILY, 0, &name); + FcPatternGet (renderFont->pattern, FC_SIZE, 0, &size); + fprintf (stderr, "label: %s.\n", lbl); + fprintf (stderr, "foreground color: pixel=%08lx, r=%04x," + " g=%04x, b=%04x, alpha=%04x.\n", + color.pixel, color.color.red, color.color.green, + color.color.blue, color.color.alpha); + fprintf (stderr, "extent: x=%d, y=%d, xOffset=%d," + " yOffset=%d, height=%d, width=%d.\n", + glyphinfo.x, glyphinfo.y, glyphinfo.xOff, + glyphinfo.yOff, glyphinfo.height, glyphinfo.width); + fprintf (stderr, "font: name=%s-%.1f," + " height=%d, ascent=%d, descent=%d.\n", + name.u.s, size.u.d, renderFont->height, + renderFont->ascent, renderFont->descent); + } + XftDrawString8 (xftDraw, &color, renderFont, + x+tab->tabs.l_x, y+tab->tabs.l_y, + lbl, (int) strlen (lbl)); + XftDrawDestroy (xftDraw); +#else + XDrawString(dpy,win,gc, + x+tab->tabs.l_x, y+tab->tabs.l_y, + lbl, (int)strlen(lbl)); +#endif + } } - if( child == tw->tabs.hilight ) - DrawHighlight(tw, child, False) ; + if (child == tw->tabs.hilight) + DrawHighlight(tw, child, False); } @@ -1689,9 +1966,13 @@ TabsConstraints tab = (TabsConstraints) w->core.constraints ; TabsWidget tw = (TabsWidget)XtParent(w) ; String lbl = tab->tabs.label != NULL ? - tab->tabs.label : XtName(w) ; - XFontStruct *font = tw->tabs.font ; - int iw = tw->tabs.internalWidth ; + tab->tabs.label : XtName(w); +#ifdef USE_XFT_TABS + XftFont *font = tw->tabs.renderFont; +#else + XFontStruct *font = tw->tabs.font; +#endif + int iw = tw->tabs.internalWidth; tab->tabs.width = iw + SHADWID*2 ; tab->tabs.l_x = tab->tabs.lbm_x = SHADWID + iw ; @@ -1705,10 +1986,27 @@ if( lbl != NULL && font != NULL ) { - tab->tabs.width += XTextWidth( font, lbl, (int)strlen(lbl) ) + iw ; +#ifdef USE_XFT_TABS + tab->tabs.width += x_xft_text_width (XtDisplay(tw), font, + lbl, (int)strlen(lbl)) + iw; + tab->tabs.l_y = (tw->tabs.tab_height + + tw->tabs.renderFont->ascent + /* #### how can this subtraction be correct? */ + - tw->tabs.renderFont->descent)/2; + if (debug_tabs > 2) + fprintf (stderr, "tab: height=%d, width=%d, baseline=%d.\n", + tw->tabs.tab_height, tab->tabs.width, tab->tabs.l_y); + if (debug_tabs > 1) + fprintf (stderr, "font: height=%d, ascent=%d, descent=%d.\n", + tw->tabs.renderFont->height, + tw->tabs.renderFont->ascent, + tw->tabs.renderFont->descent); +#else + tab->tabs.width += XTextWidth (font, lbl, (int)strlen(lbl)) + iw; tab->tabs.l_y = (tw->tabs.tab_height + tw->tabs.font->max_bounds.ascent - - tw->tabs.font->max_bounds.descent)/2 ; + tw->tabs.font->max_bounds.descent)/2; +#endif } } @@ -1723,19 +2021,32 @@ * * TODO: if they require more than two rows and the total height:width * ratio is more than 2:1, then try something else. + * Gaak! This is actually already done in PreferredSize()! + * + * TODO SOONER: for reasons unclear, some applications (specifically + * XEmacs) give a nominal geometry (in the core record) which doesn't + * make much sense (eg, may be smaller than some of the tab children). + * This results in bizarre values for DISPLAY_ROWS and REPLY_HEIGHT. + * Specify a way to say "tell me what you really want" (eg, with WID + * and/or HGT == 0 or == Dimension_MAX), and use it where appropriate. + * LATE-BREAKING LOSE: This happens in PreferredSize(), not XEmacs! + * + * TODO EVEN SOONER: some applications lay out the tab control by + * repeatedly querying until a fixed width and height has been filled + * by the tabs (XEmacs). There should be an API to cache this? */ static int TabLayout(TabsWidget tw, - Dimension wid, - Dimension hgt, + Dimension wid, /* if 0, use core.width as guess */ + Dimension hgt, /* if 0, use core.height as guess */ Dimension *reply_height, Bool query_only) { int i, row, done = 0, display_rows = 0 ; int num_children = tw->composite.num_children ; Widget *childP ; Dimension w ; - Position x,y ; + Position x,y ; /* #### gaak, these are dimensions! */ TabsConstraints tab ; /* Algorithm: loop through children, assign X positions. If a tab @@ -1750,22 +2061,33 @@ row = 0 ; x = INDENT ; y = 0 ; - wid -= INDENT ; + /* If wid or hgt is 0, we want to guess our own dimensions. + Currently the guessing functions are broken.... + #### When PreferredSize*() get fixed, fix this too. */ + if (debug_tabs > 0) + fprintf (stderr, "arg=%d,", wid); + wid = (wid ? wid : tw->core.width) - INDENT ; + hgt = hgt ? hgt : tw->core.height; + if (debug_tabs > 0) + fprintf (stderr, "wid=%d: x,w,y=", wid); for(i=num_children, childP=tw->composite.children; --i >= 0; ++childP) if( XtIsManaged(*childP) ) { tab = (TabsConstraints) (*childP)->core.constraints ; w = tab->tabs.width ; + if (debug_tabs > 0) + fprintf (stderr, "%d,%d,%d;", x, w, y); if( x + w > wid ) { /* new row */ - if (y + tw->tabs.tab_height > hgt && !done) + /* #### algorithm is not robust to wid < child's width */ + ++row; + x = INDENT ; + y += tw->tabs.tab_height ; + if (y > hgt && !done) { display_rows = row; done = 1; } - ++row; - x = INDENT ; - y += tw->tabs.tab_height ; } if( !query_only ) { tab->tabs.x = x ; @@ -1777,10 +2099,11 @@ tab->tabs.visible = 1; } + if (debug_tabs > 0) + fprintf (stderr, "\n"); /* If there was only one row, increase the height by TABDELTA */ if( ++display_rows == 1 ) { - row++; y = TABDELTA ; if( !query_only ) for(i=num_children, childP=tw->composite.children; @@ -1791,6 +2114,7 @@ tab->tabs.y = y ; } } + row++; y += tw->tabs.tab_height ; } else @@ -1802,6 +2126,12 @@ tw->tabs.realRows = row; } + if (debug_tabs > 0 && (row > 1 || display_rows > 1)) + fprintf (stderr, "tab: %d display rows, #children = %d," + " total height %d, total rows %d%s.\n", + display_rows, num_children, y, row, + query_only ? " (query)" : ""); + if( reply_height != NULL ) *reply_height = y ; @@ -1822,8 +2152,8 @@ - /* Find max preferred child size. Returned sizes include child - * border widths. If except is non-null, don't ask that one. + /* Find max preferred child size and store in control widget. + * If except is non-null, don't ask that one. */ static void @@ -2009,7 +2339,10 @@ int nrows ; if( tw->composite.num_children > 0 ) - nrows = TabLayout(tw, wid, hgt, &th, True) ; + /* used to be wid, hgt not 0, 0 but that's obviously wrong + since TabLayout wants dimensions of control parent but + wid, hgt are dimensions of some child */ + nrows = TabLayout(tw, 0, 0, &th, True) ; else { th = 0 ; nrows = 0 ; @@ -2091,17 +2424,29 @@ Widget w = (Widget) tw; XGCValues values ; - values.background = tw->core.background_pixel ; - values.font = tw->tabs.font->fid ; - values.line_style = LineOnOffDash ; - values.line_style = LineSolid ; + values.background = tw->core.background_pixel; + values.font = +#ifdef USE_XFT_TABS + None; +#else + tw->tabs.font->fid; +#endif + values.line_style = LineOnOffDash; + values.line_style = LineSolid; tw->tabs.foregroundGC = XtAllocateGC(w, w->core.depth, - GCBackground|GCFont|GCLineStyle, &values, - GCForeground, - GCSubwindowMode|GCGraphicsExposures|GCDashOffset| - GCDashList|GCArcMode) ; +#ifndef USE_XFT_TABS + GCFont| +#endif + GCBackground|GCLineStyle, + &values, + GCForeground, +#ifdef USE_XFT_TABS + GCFont| +#endif + GCSubwindowMode|GCGraphicsExposures|GCDashOffset| + GCDashList|GCArcMode); } static void @@ -2110,30 +2455,49 @@ Widget w = (Widget) tw; XGCValues values ; - values.background = tw->core.background_pixel ; - values.font = tw->tabs.font->fid ; + values.background = tw->core.background_pixel; + values.font = +#ifdef USE_XFT_TABS + None; +#else + tw->tabs.font->fid; +#endif #ifdef HAVE_XMU - if( tw->tabs.be_nice_to_cmap || w->core.depth == 1) + if (tw->tabs.be_nice_to_cmap || w->core.depth == 1) { - values.fill_style = FillStippled ; + values.fill_style = FillStippled; tw->tabs.grey50 = - values.stipple = XmuCreateStippledPixmap(XtScreen(w), 1L, 0L, 1) ; + values.stipple = XmuCreateStippledPixmap(XtScreen(w), 1L, 0L, 1); tw->tabs.greyGC = XtAllocateGC(w, w->core.depth, - GCBackground|GCFont|GCStipple|GCFillStyle, &values, +#ifndef USE_XFT_TABS + GCFont| +#endif + GCBackground|GCStipple|GCFillStyle, &values, GCForeground, +#ifdef USE_XFT_TABS + GCFont| +#endif GCSubwindowMode|GCGraphicsExposures|GCDashOffset| - GCDashList|GCArcMode) ; + GCDashList|GCArcMode); } else #endif { tw->tabs.greyGC = XtAllocateGC(w, w->core.depth, - GCFont, &values, +#ifdef USE_XFT_TABS + 0L, +#else + GCFont, +#endif + &values, GCForeground, +#ifdef USE_XFT_TABS + GCFont| +#endif GCBackground|GCSubwindowMode|GCGraphicsExposures|GCDashOffset| - GCDashList|GCArcMode) ; + GCDashList|GCArcMode); } } diff -urN 21.5.23/lwlib/xlwtabsP.h 21.5.24/lwlib/xlwtabsP.h --- 21.5.23/lwlib/xlwtabsP.h Fri Apr 13 03:21:57 2001 +++ 21.5.24/lwlib/xlwtabsP.h Sat Nov 26 20:46:00 2005 @@ -41,6 +41,9 @@ #endif #include "xlwtabs.h" +#ifdef USE_XFT_TABS +#include +#endif /* New fields for the Tabs widget class record */ typedef struct {XtPointer extension;} TabsClassPart; @@ -70,6 +73,10 @@ typedef struct { /* resources */ XFontStruct *font ; +#ifdef USE_XFT_TABS + String renderFontSpec; + XftFont *renderFont; +#endif Dimension internalHeight, internalWidth ; Widget topWidget ; XtCallbackList callbacks ; diff -urN 21.5.23/man/CVS/Entries 21.5.24/man/CVS/Entries --- 21.5.23/man/CVS/Entries Mon Dec 19 04:20:41 2005 +++ 21.5.24/man/CVS/Entries Mon Dec 19 04:23:03 2005 @@ -1,18 +1,18 @@ -/ChangeLog/1.319/Wed Oct 26 15:14:05 2005//Tr21-5-23 -/Makefile/1.34/Mon Jan 31 20:08:47 2005//Tr21-5-23 -/README/1.1.1.1/Wed Dec 18 22:43:41 1996//Tr21-5-23 -/beta.texi/1.3/Thu Mar 10 11:44:17 2005//Tr21-5-23 -/cl.texi/1.11/Wed Mar 12 17:35:06 2003//Tr21-5-23 -/custom.texi/1.27/Fri Oct 10 12:39:27 2003//Tr21-5-23 -/emodules.texi/1.7/Tue Oct 4 17:00:33 2005//Tr21-5-23 -/external-widget.texi/1.9/Tue Jun 4 06:04:35 2002//Tr21-5-23 -/info.texi/1.9/Fri Apr 13 09:11:28 2001//Tr21-5-23 -/make-stds.texi/1.4/Mon May 7 07:24:15 2001//Tr21-5-23 -/standards.texi/1.6/Tue Mar 15 06:15:35 2005//Tr21-5-23 -/term.texi/1.4/Mon Jul 29 21:52:15 2002//Tr21-5-23 -/termcap.texi/1.5/Sat Jul 6 18:56:24 2002//Tr21-5-23 -/texinfo.tex/1.6/Thu Apr 12 18:22:01 2001//Tr21-5-23 -/texinfo.texi/1.16/Fri Jul 5 20:35:47 2002//Tr21-5-23 -/widget.texi/1.41/Mon Apr 19 08:02:27 2004//Tr21-5-23 -/xemacs-faq.texi/1.87/Mon Oct 24 20:39:47 2005//Tr21-5-23 +/ChangeLog/1.330/Sun Dec 18 19:06:17 2005//Tr21-5-24 +/Makefile/1.35/Sun Nov 13 10:39:30 2005//Tr21-5-24 +/README/1.1.1.1/Wed Dec 18 22:43:41 1996//Tr21-5-24 +/beta.texi/1.3/Thu Mar 10 11:44:17 2005//Tr21-5-24 +/cl.texi/1.11/Wed Mar 12 17:35:06 2003//Tr21-5-24 +/custom.texi/1.28/Tue Dec 6 23:14:50 2005//Tr21-5-24 +/emodules.texi/1.7/Tue Oct 4 17:00:33 2005//Tr21-5-24 +/external-widget.texi/1.9/Tue Jun 4 06:04:35 2002//Tr21-5-24 +/info.texi/1.9/Fri Apr 13 09:11:28 2001//Tr21-5-24 +/make-stds.texi/1.4/Mon May 7 07:24:15 2001//Tr21-5-24 +/standards.texi/1.6/Tue Mar 15 06:15:35 2005//Tr21-5-24 +/term.texi/1.4/Mon Jul 29 21:52:15 2002//Tr21-5-24 +/termcap.texi/1.5/Sat Jul 6 18:56:24 2002//Tr21-5-24 +/texinfo.tex/1.6/Thu Apr 12 18:22:01 2001//Tr21-5-24 +/texinfo.texi/1.16/Fri Jul 5 20:35:47 2002//Tr21-5-24 +/widget.texi/1.41/Mon Apr 19 08:02:27 2004//Tr21-5-24 +/xemacs-faq.texi/1.87/Mon Oct 24 20:39:47 2005//Tr21-5-24 D diff -urN 21.5.23/man/CVS/Tag 21.5.24/man/CVS/Tag --- 21.5.23/man/CVS/Tag Mon Dec 19 04:20:41 2005 +++ 21.5.24/man/CVS/Tag Mon Dec 19 04:23:03 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/man/ChangeLog 21.5.24/man/ChangeLog --- 21.5.23/man/ChangeLog Thu Oct 27 00:14:05 2005 +++ 21.5.24/man/ChangeLog Mon Dec 19 04:06:17 2005 @@ -1,3 +1,46 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-12-09 Malcolm Purvis + + * internals/internals.texi (The configure Script): Documented + more fully the behaviour of complex options. Provided examples. + +2005-12-03 Adrian Aichner + + * custom.texi (Declaring Variables): Typo fixes. + +2005-11-29 Stephen J. Turnbull + + * xemacs/custom.texi (Faces): Describe some of the more important + font naming syntaxes under `set-face-font'. Fix a typo. + +2005-11-22 Stephen J. Turnbull + + * internals/internals.texi (Working with Lisp Objects): Explain + better why DEFSYMBOL is usually preferable to intern. + +2005-11-08 Malcolm Purvis + + * internals/internals.texi (The configure Script): Added the + definition of the new macro XE_HELP_SUBSECTION. + +2005-11-13 Ben Wing + + * Makefile: + Add targets distclean-noconfig, realclean-noconfig, extraclean-noconfig. + Do some refactoring for cleanliness. + +2005-11-13 Ben Wing + + * internals/internals.texi (Top): + * internals/internals.texi (CVS Techniques): + * internals/internals.texi (Creating a Branch): + * internals/internals.texi (Merging a Branch into the Trunk): + Add node on Creating a Branch. Update info concerning problems + with rtag on symlinks. (#### Is this still valid?) + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. @@ -163,7 +206,7 @@ for evaluation in Lisp interaction mode, and should be documented as such. -2005-04-18 Turnbull Stephen +2005-04-18 Stephen J. Turnbull * internals/internals.texi (Better Rendering Support -- Modern Font Support): diff -urN 21.5.23/man/Makefile 21.5.24/man/Makefile --- 21.5.23/man/Makefile Tue Feb 1 05:08:47 2005 +++ 21.5.24/man/Makefile Sun Nov 13 19:39:30 2005 @@ -1,6 +1,7 @@ # Makefile for man subdirectory in XEmacs # Copyright (C) 1995 Board of Trustees, University of Illinois # Copyright (C) 1994, 1995 Sun Microsystems. +# Copyright (C) 2005 Ben Wing. # This file is part of XEmacs. @@ -335,14 +336,19 @@ pdf: $(pdf_files) .PHONY: mostlyclean clean distclean realclean extraclean +.PHONY: distclean-noconfig realclean-noconfig extraclean-noconfig mostlyclean: $(RM) *.toc *.aux *.log *.op *.cp *.cps *.fn *.fns $(RM) *.ky *.kys *.pg *.pgs *.tp *.tps *.vr *.vrs clean: mostlyclean $(RM) core *.dvi *.pdf -distclean: clean +distclean-noconfig: clean +distclean: distclean-noconfig +realclean-noconfig: distclean-noconfig realclean: distclean -extraclean: distclean +extraclean-noconfig: realclean-noconfig + $(RM) *~ \#* */*~ */\#* +extraclean: realclean $(RM) *~ \#* */*~ */\#* ############################################################################ diff -urN 21.5.23/man/custom.texi 21.5.24/man/custom.texi --- 21.5.23/man/custom.texi Fri Oct 10 21:39:27 2003 +++ 21.5.24/man/custom.texi Wed Dec 7 08:14:50 2005 @@ -165,13 +165,13 @@ user, and @code{variable-documentation} for the documentation string. Use @code{custom-add-option} to specify that a specific function is -useful as an member of a hook. +useful as a member of a hook. @defun custom-add-option symbol option To the variable @var{symbol} add @var{option}. If @var{symbol} is a hook variable, @var{option} should be a hook -member. For other types variables, the effect is undefined." +member. For other types of variables, the effect is undefined." @end defun @node Declaring Faces, Usage for Package Authors, Declaring Variables, Top diff -urN 21.5.23/man/internals/CVS/Entries 21.5.24/man/internals/CVS/Entries --- 21.5.23/man/internals/CVS/Entries Mon Dec 19 04:20:43 2005 +++ 21.5.24/man/internals/CVS/Entries Mon Dec 19 04:23:06 2005 @@ -1,2 +1,2 @@ -/internals.texi/1.69/Thu Oct 20 12:38:04 2005//Tr21-5-23 +/internals.texi/1.73/Sun Dec 18 12:22:03 2005//Tr21-5-24 D diff -urN 21.5.23/man/internals/CVS/Tag 21.5.24/man/internals/CVS/Tag --- 21.5.23/man/internals/CVS/Tag Mon Dec 19 04:20:43 2005 +++ 21.5.24/man/internals/CVS/Tag Mon Dec 19 04:23:06 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/man/internals/internals.texi 21.5.24/man/internals/internals.texi --- 21.5.23/man/internals/internals.texi Thu Oct 20 21:38:04 2005 +++ 21.5.24/man/internals/internals.texi Sun Dec 18 21:22:03 2005 @@ -393,6 +393,7 @@ CVS Techniques +* Creating a Branch:: * Merging a Branch into the Trunk:: Low-Level Allocation @@ -4594,7 +4595,11 @@ Declare an option that can be selected by either @samp{--enable} or @samp{--with}. The value of the option is stored in both @code{with_FEATURE} and @code{enable_FEATURE}. +@end table +@table @code +@item XE_HELP_SUBSECTION(heading) +Add a subsection heading to the help output of merged arguments. @end table @heading XEmacs keyword option support @@ -4690,21 +4695,18 @@ XE_COMPLEX_OPTION([esd],[no])]) @end example -@c #### verify for INSTALL and xemacs Texinfo. +@c #### verify xemacs Texinfo. Each option is interpreted as a separate feature to be enabled or -disabled. As usual, the distinction between ``with'' and ``enable'' is -that ``with'' features require specific support from the system, usually -one or more optional libraries, and ``enable'' features are supported -entirely by code in XEmacs, but the user might want to switch it off for -some reason. Option values are stored in the variables -@code{with_@var{package}_@var{component}} or -@code{enable_@var{feature}_@var{component}} (@i{e.g.} -@code{enable_sound_native}). +disabled. In keeping with @samp{XE_MERGED_ARG}, option values are +stored in the variables @code{with_@var{package}_@var{component}} and +@code{enable_@var{feature}_@var{component}} (@i{e.g.} +@code{with_sound_native} and @code{enable_sound_native}). The user of @code{configure} specifies the configuration by providing a list of components. The special components @samp{all} and @samp{none} may occur first in the list, setting the defaults for all components to -@samp{yes} or @samp{no} respectively. +@samp{yes} or @samp{no} respectively. Prefixing a component with +@samp{no} (eg @samp{nofoo}) disables the component. In @file{configure.ac}, default values of option values may be @samp{yes} which means that the option must be used and an error must @@ -4727,6 +4729,49 @@ during development of a feature. Perhaps specialized APIs should be provided, see comment on @code{XE_COMPLEX_OPTION_HELP_STRING} below. +@subheading Examples + +Given a complex option @code{--with-quux} with three values: @samp{foo}, +@samp{bar} and @samp{baz} that have defaults of @samp{yes}, @samp{no} and "" the +corresponding shell variables under different conditions are: + +@example +$ configure +with_quux_foo=yes +with_quux_bar=no +with_quux_baz="" + +$ configure --with-quux +with_quux_foo=yes +with_quux_bar=no +with_quux_baz="" + +$ configure --without-quux +with_quux_foo=no +with_quux_bar=no +with_quux_baz=no + +$ configure --with-quux=bar +with_quux_foo=yes +with_quux_bar=yes +with_quux_baz=no + +$ configure --with-quux=all +with_quux_foo=yes +with_quux_bar=yes +with_quux_baz=yes + +$ configure --with-quux=none,bar +with_quux_foo=no +with_quux_bar=yes +with_quux_baz=no + +$ configure --with-quux=all,nofoo +with_quux_foo=no +with_quux_bar=yes +with_quux_baz=yes +@end example + @table @code @item XE_COMPLEX_OPTION(option, yesno) Declare a complex option and its default value. The value @strong{must} @@ -5109,10 +5154,15 @@ be derived from the name of the symbol using the same rules as for Lisp primitives. Such variables allow the C code to check whether a particular @code{Lisp_Object} is equal to a given symbol. Symbols are -Lisp objects, so these variables may be passed to Lisp primitives. (An -alternative to the use of @samp{Q...} variables is to call the +Lisp objects, so these variables may be passed to Lisp primitives. (A +tempting alternative to the use of @samp{Q...} variables is to call the @code{intern} function at initialization in the -@code{vars_of_@var{module}} function, which is hardly less efficient.) +@code{vars_of_@var{module}} function. But this does not +@code{staticpro} the symbol, which in theory could get uninterned, and +then garbage collected while you're not looking. You could +@code{staticpro} yourself, but in a production XEmacs @code{intern} and +@code{staticpro} is all that @code{DEFSYMBOL} does, while in a debugging +XEmacs it also does some error-checking, which you normally want.) @strong{Convention}: Global variables whose names begin with @samp{V} are variables that contain Lisp objects. The convention here is that @@ -6532,12 +6582,120 @@ @cindex CVS techniques @menu +* Creating a Branch:: * Merging a Branch into the Trunk:: @end menu -@node Merging a Branch into the Trunk, , CVS Techniques, CVS Techniques +@node Creating a Branch, Merging a Branch into the Trunk, CVS Techniques, CVS Techniques +@section Creating a Branch +@cindex creating a branch +@cindex branch, creating + +This assumes that you have an existing workspace modified off of the +main line, and you want to put it onto a branch. + +@enumerate +@item +Preliminary comment: @emph{All} commands are to be executed at the +top level of your workspace, unless otherwise indicated (which will be +rare, if ever). Don't ever forget this and screw up, or you will get a real +mess. + +@item +First, make a backup copy of your entire repository using @code{cp -a} +(in the directory above your repository!) before doing anything. + +@item + +Now, rule #1: @strong{Never try to create a branch from a workspace +with added or deleted files.} If you are lucky, the operation will +simply fail. If you are less lucky, it will proceed, but make the +adds and deletes on the main line, which you do not want at all. +Therefore, you must undo all adds and deletes. To find out what is +added and deleted, use something like @code{cvs -n update >&! +cvs.out}, which does a "dry run". (You did make a backup copy first, +right? What if you forgot the @samp{-n}, for example, and wasn't +prepared for the sudden onslaught of merging action?) Take a look at +the output file @file{cvs.out} and check very carefully for newly +added files (marked with an @samp{A}) and newly removed files (marked +with an @samp{R}). Double check that your newly added files are in +your backup copy, then @code{rm} and @code{crw rm} each of them to +undo the addition. For each removed file, do @code{crw add} to undo +the removal. + +@item +create a branch point. (This is a tag marking the point at which +your branch split from the main line. It is @strong{extremely} +important to create such a branch point! The creation of the actual +branch only creates a tag that marks the end of the branch, which will +move as you check in changes to your branch. The CVS designers, in +their infinite wisdom, didn't provide any automatic mechanism for +tracking the branching point, so you need to do it manually.) + +@example +crw tag ben-mule-21-5-bp +@end example + +@item +Next, create the actual branch: + +@example +crw tag -b ben-mule-21-5 +@end example + +Note that this doesn't actually do anything to your local workspace! +It basically just creates another tag in the repository, identical to +the branch point tag but internally marked as a "branch tag" rather +than a regular tag. + +@item +Now, move your workspace onto the branch: + +@example +cvs update -r ben-mule-21-5 +@end example + +For unknown reasons, this may generate conflicts for each file that +you have modified locally. If so, you can fix this by touching the +conflicting files (the conflicts are bogus if you followed the above +procedure). Run the following command in the top-level directory: + +@example +cvs-mods | xargs touch --no-create +@end example + +@item +Now, carefully redo all adds and deletes; refer to the @file{cvs.out} +file to remember what needs to be redone. + +@item +Now, check in the files on the branch: + +@example +crw commit -m "first commit of ben-mule-21-5 branch" +@end example +@end enumerate + +@node Merging a Branch into the Trunk, , Creating a Branch, CVS Techniques @section Merging a Branch into the Trunk @cindex merging a branch into the trunk +@cindex branch, merging into the trunk + +Preliminary comment: Beware of the symlink problem with `cvs rtag': + +@example +cvs [rtag aborted]: received abort signal +cvs [rtag aborted]: received abort signal +lock.c:178: failed assertion `strncmp (repository, current_parsed_root->directory, strlen (current_parsed_root->directory)) == 0' +lock.c:178: failed assertion `strncmp (repository, current_parsed_root->directory, strlen (current_parsed_root->directory)) == 0' +@end example + +It will fail with a message like this if the directory component of +your root (CVSROOT environment variable or `-d' option) is a symbolic +link, which is the case for the standard /pack/xemacscvs. You need to +find the real directory name; one trick is to execute a command that +attempts to write to the repository, using read-only access. This +will output an error message showing the actual repository directory. @enumerate @item @@ -6547,12 +6705,15 @@ former case, create the last-sync tag, e.g. @example -crw rtag -r ben-mule-21-5-bp last-sync-ben-mule-21-5 xemacs +cvs -d :ext:xemacs@@cvs.xemacs.org:/mnt/home1/cvsroots/xemacscvs rtag -r ben-mule-21-5-bp last-sync-ben-mule-21-5 xemacs @end example (You did create a branch point tag when you created the branch, didn't you?) +Note the way this command is specified, overriding the root to avoid +the symlink problem, as described above. + @item Check everything in on your branch. @@ -6560,7 +6721,7 @@ Tag your branch with a pre-sync tag, e.g. @example -crw rtag -r ben-mule-21-5 ben-mule-21-5-pre-feb-20-2002-sync xemacs +cvs -d :ext:xemacs@@cvs.xemacs.org:/mnt/home1/cvsroots/xemacscvs rtag -r ben-mule-21-5 ben-mule-21-5-pre-feb-20-2002-sync xemacs @end example Note, you need to use rtag and specify a version with @samp{-r} (use @@ -6572,8 +6733,8 @@ are asynchronously committing to the trunk, e.g. @example -crw rtag -r HEAD main-branch-ben-mule-21-5-syncpoint-feb-20-2002 xemacs -crw rtag -F -r main-branch-ben-mule-21-5-syncpoint-feb-20-2002 next-sync-ben-mule-21-5 xemacs +cvs -d :ext:xemacs@@cvs.xemacs.org:/mnt/home1/cvsroots/xemacscvs rtag -r HEAD main-branch-ben-mule-21-5-syncpoint-feb-20-2002 xemacs +cvs -d :ext:xemacs@@cvs.xemacs.org:/mnt/home1/cvsroots/xemacscvs rtag -F -r main-branch-ben-mule-21-5-syncpoint-feb-20-2002 next-sync-ben-mule-21-5 xemacs @end example Use -F in the second case because the name might already exist, e.g. if @@ -6605,14 +6766,14 @@ Tag your branch with a post-sync tag, e.g. @example -crw rtag -r ben-mule-21-5 ben-mule-21-5-post-feb-20-2002-sync xemacs +cvs -d :ext:xemacs@@cvs.xemacs.org:/mnt/home1/cvsroots/xemacscvs rtag -r ben-mule-21-5 ben-mule-21-5-post-feb-20-2002-sync xemacs @end example @item Update the last-sync tag, e.g. @example -crw rtag -F -r next-sync-ben-mule-21-5 last-sync-ben-mule-21-5 xemacs +cvs -d :ext:xemacs@@cvs.xemacs.org:/mnt/home1/cvsroots/xemacscvs rtag -F -r next-sync-ben-mule-21-5 last-sync-ben-mule-21-5 xemacs @end example @end enumerate diff -urN 21.5.23/man/lispref/CVS/Entries 21.5.24/man/lispref/CVS/Entries --- 21.5.23/man/lispref/CVS/Entries Mon Dec 19 04:20:48 2005 +++ 21.5.24/man/lispref/CVS/Entries Mon Dec 19 04:23:11 2005 @@ -1,71 +1,71 @@ -/abbrevs.texi/1.3/Thu Apr 12 18:22:10 2001//Tr21-5-23 -/annotations.texi/1.3/Thu Apr 12 18:22:10 2001//Tr21-5-23 -/back.texi/1.2/Tue Jun 30 06:35:35 1998//Tr21-5-23 -/backups.texi/1.6/Mon Sep 22 20:15:13 2003//Tr21-5-23 -/buffers.texi/1.2/Thu Apr 12 18:22:11 2001//Tr21-5-23 -/building.texi/1.6/Sun Jun 19 20:49:47 2005//Tr21-5-23 -/commands.texi/1.13/Sun Jul 17 20:08:45 2005//Tr21-5-23 -/compile.texi/1.8/Tue Sep 27 21:43:22 2005//Tr21-5-23 -/consoles-devices.texi/1.4/Thu Apr 12 18:22:11 2001//Tr21-5-23 -/control.texi/1.4/Wed Sep 22 02:06:27 2004//Tr21-5-23 -/customize.texi/1.5/Fri Dec 19 14:29:07 2003//Tr21-5-23 -/databases.texi/1.4/Thu Apr 12 18:22:12 2001//Tr21-5-23 -/debugging.texi/1.4/Thu Apr 12 18:22:12 2001//Tr21-5-23 -/dialog.texi/1.2/Thu Apr 12 18:22:12 2001//Tr21-5-23 -/display.texi/1.9/Fri Oct 10 12:39:34 2003//Tr21-5-23 -/dragndrop.texi/1.7/Sat Jul 6 18:56:29 2002//Tr21-5-23 -/edebug-inc.texi/1.4/Thu Apr 12 18:22:12 2001//Tr21-5-23 -/edebug.texi/1.3/Thu Apr 12 18:22:13 2001//Tr21-5-23 -/errors.texi/1.3/Thu Apr 12 18:22:13 2001//Tr21-5-23 -/eval.texi/1.6/Fri Jan 21 09:43:11 2005//Tr21-5-23 -/extents.texi/1.11/Mon Jul 19 08:24:28 2004//Tr21-5-23 -/faces.texi/1.7/Wed Jul 20 07:36:44 2005//Tr21-5-23 -/files.texi/1.6/Thu Apr 12 18:22:13 2001//Tr21-5-23 -/frames.texi/1.5/Thu Apr 12 18:22:14 2001//Tr21-5-23 -/functions.texi/1.3/Fri Jan 21 09:43:12 2005//Tr21-5-23 -/glyphs.texi/1.10/Mon Sep 26 08:41:56 2005//Tr21-5-23 -/gutter.texi/1.3/Mon Apr 19 08:02:38 2004//Tr21-5-23 -/hash-tables.texi/1.2/Thu Apr 12 18:22:14 2001//Tr21-5-23 -/help.texi/1.6/Fri Dec 17 18:11:47 2004//Tr21-5-23 -/hooks.texi/1.2/Thu Apr 12 18:22:15 2001//Tr21-5-23 -/index.texi/1.2/Thu Apr 12 18:22:15 2001//Tr21-5-23 -/internationalization.texi/1.3/Thu Apr 12 18:22:15 2001//Tr21-5-23 -/intro.texi/1.7/Fri Dec 14 07:50:10 2001//Tr21-5-23 -/keymaps.texi/1.5/Sun Jun 26 18:04:59 2005//Tr21-5-23 -/ldap.texi/1.3/Fri Oct 10 12:39:34 2003//Tr21-5-23 -/lispref.texi/1.23/Mon Sep 26 08:41:56 2005//Tr21-5-23 -/lists.texi/1.4/Tue Jul 1 04:33:46 2003//Tr21-5-23 -/loading.texi/1.5/Thu Apr 12 18:22:16 2001//Tr21-5-23 -/locals.texi/1.3/Thu Apr 12 18:22:16 2001//Tr21-5-23 -/macros.texi/1.3/Fri Jan 21 09:43:12 2005//Tr21-5-23 -/maps.texi/1.2/Thu Apr 12 18:22:17 2001//Tr21-5-23 -/markers.texi/1.4/Fri Oct 10 12:39:34 2003//Tr21-5-23 -/menus.texi/1.8/Fri Oct 10 12:39:34 2003//Tr21-5-23 -/minibuf.texi/1.3/Thu Apr 12 18:22:17 2001//Tr21-5-23 -/modes.texi/1.7/Thu Jun 17 03:01:17 2004//Tr21-5-23 -/mouse.texi/1.2/Thu Apr 12 18:22:17 2001//Tr21-5-23 -/mule.texi/1.14/Sun Jun 19 20:49:47 2005//Tr21-5-23 -/numbers.texi/1.11/Mon Jul 19 08:24:28 2004//Tr21-5-23 -/objects.texi/1.7/Mon Jun 30 09:31:01 2003//Tr21-5-23 -/os.texi/1.6/Thu Apr 12 18:22:18 2001//Tr21-5-23 -/packaging.texi/1.12/Mon Sep 26 22:19:05 2005//Tr21-5-23 -/positions.texi/1.10/Fri Aug 13 09:28:23 2004//Tr21-5-23 -/postgresql.texi/1.3/Fri Oct 10 12:39:34 2003//Tr21-5-23 -/processes.texi/1.2/Thu Apr 12 18:22:19 2001//Tr21-5-23 -/range-tables.texi/1.3/Mon Dec 6 03:51:41 2004//Tr21-5-23 -/scrollbars.texi/1.4/Thu Apr 12 18:22:19 2001//Tr21-5-23 -/searching.texi/1.13/Wed Feb 23 15:33:38 2005//Tr21-5-23 -/sequences.texi/1.5/Thu Apr 12 18:22:20 2001//Tr21-5-23 -/specifiers.texi/1.15/Mon Sep 26 08:41:57 2005//Tr21-5-23 -/streams.texi/1.4/Thu Apr 12 18:22:20 2001//Tr21-5-23 -/strings.texi/1.7/Thu May 22 07:41:24 2003//Tr21-5-23 -/symbols.texi/1.5/Fri Jan 21 09:43:12 2005//Tr21-5-23 -/syntax.texi/1.3/Wed Oct 2 09:30:52 2002//Tr21-5-23 -/text.texi/1.5/Wed Sep 8 17:40:20 2004//Tr21-5-23 -/tips.texi/1.4/Thu Oct 16 04:10:23 2003//Tr21-5-23 -/toolbar.texi/1.4/Mon Dec 2 17:57:09 2002//Tr21-5-23 -/tooltalk.texi/1.5/Thu Apr 12 18:22:21 2001//Tr21-5-23 -/variables.texi/1.7/Fri Jan 21 09:43:12 2005//Tr21-5-23 -/windows.texi/1.11/Thu Oct 28 10:51:17 2004//Tr21-5-23 -/x-windows.texi/1.4/Mon Jul 2 20:45:08 2001//Tr21-5-23 +/abbrevs.texi/1.3/Thu Apr 12 18:22:10 2001//Tr21-5-24 +/annotations.texi/1.3/Thu Apr 12 18:22:10 2001//Tr21-5-24 +/back.texi/1.2/Tue Jun 30 06:35:35 1998//Tr21-5-24 +/backups.texi/1.6/Mon Sep 22 20:15:13 2003//Tr21-5-24 +/buffers.texi/1.2/Thu Apr 12 18:22:11 2001//Tr21-5-24 +/building.texi/1.6/Sun Jun 19 20:49:47 2005//Tr21-5-24 +/commands.texi/1.13/Sun Jul 17 20:08:45 2005//Tr21-5-24 +/compile.texi/1.8/Tue Sep 27 21:43:22 2005//Tr21-5-24 +/consoles-devices.texi/1.4/Thu Apr 12 18:22:11 2001//Tr21-5-24 +/control.texi/1.4/Wed Sep 22 02:06:27 2004//Tr21-5-24 +/customize.texi/1.5/Fri Dec 19 14:29:07 2003//Tr21-5-24 +/databases.texi/1.4/Thu Apr 12 18:22:12 2001//Tr21-5-24 +/debugging.texi/1.4/Thu Apr 12 18:22:12 2001//Tr21-5-24 +/dialog.texi/1.2/Thu Apr 12 18:22:12 2001//Tr21-5-24 +/display.texi/1.9/Fri Oct 10 12:39:34 2003//Tr21-5-24 +/dragndrop.texi/1.7/Sat Jul 6 18:56:29 2002//Tr21-5-24 +/edebug-inc.texi/1.4/Thu Apr 12 18:22:12 2001//Tr21-5-24 +/edebug.texi/1.3/Thu Apr 12 18:22:13 2001//Tr21-5-24 +/errors.texi/1.3/Thu Apr 12 18:22:13 2001//Tr21-5-24 +/eval.texi/1.6/Fri Jan 21 09:43:11 2005//Tr21-5-24 +/extents.texi/1.11/Mon Jul 19 08:24:28 2004//Tr21-5-24 +/faces.texi/1.7/Wed Jul 20 07:36:44 2005//Tr21-5-24 +/files.texi/1.6/Thu Apr 12 18:22:13 2001//Tr21-5-24 +/frames.texi/1.5/Thu Apr 12 18:22:14 2001//Tr21-5-24 +/functions.texi/1.3/Fri Jan 21 09:43:12 2005//Tr21-5-24 +/glyphs.texi/1.10/Mon Sep 26 08:41:56 2005//Tr21-5-24 +/gutter.texi/1.3/Mon Apr 19 08:02:38 2004//Tr21-5-24 +/hash-tables.texi/1.2/Thu Apr 12 18:22:14 2001//Tr21-5-24 +/help.texi/1.6/Fri Dec 17 18:11:47 2004//Tr21-5-24 +/hooks.texi/1.2/Thu Apr 12 18:22:15 2001//Tr21-5-24 +/index.texi/1.2/Thu Apr 12 18:22:15 2001//Tr21-5-24 +/internationalization.texi/1.3/Thu Apr 12 18:22:15 2001//Tr21-5-24 +/intro.texi/1.7/Fri Dec 14 07:50:10 2001//Tr21-5-24 +/keymaps.texi/1.5/Sun Jun 26 18:04:59 2005//Tr21-5-24 +/ldap.texi/1.3/Fri Oct 10 12:39:34 2003//Tr21-5-24 +/lispref.texi/1.23/Mon Sep 26 08:41:56 2005//Tr21-5-24 +/lists.texi/1.4/Tue Jul 1 04:33:46 2003//Tr21-5-24 +/loading.texi/1.5/Thu Apr 12 18:22:16 2001//Tr21-5-24 +/locals.texi/1.3/Thu Apr 12 18:22:16 2001//Tr21-5-24 +/macros.texi/1.3/Fri Jan 21 09:43:12 2005//Tr21-5-24 +/maps.texi/1.2/Thu Apr 12 18:22:17 2001//Tr21-5-24 +/markers.texi/1.4/Fri Oct 10 12:39:34 2003//Tr21-5-24 +/menus.texi/1.8/Fri Oct 10 12:39:34 2003//Tr21-5-24 +/minibuf.texi/1.3/Thu Apr 12 18:22:17 2001//Tr21-5-24 +/modes.texi/1.7/Thu Jun 17 03:01:17 2004//Tr21-5-24 +/mouse.texi/1.2/Thu Apr 12 18:22:17 2001//Tr21-5-24 +/mule.texi/1.14/Sun Jun 19 20:49:47 2005//Tr21-5-24 +/numbers.texi/1.11/Mon Jul 19 08:24:28 2004//Tr21-5-24 +/objects.texi/1.7/Mon Jun 30 09:31:01 2003//Tr21-5-24 +/os.texi/1.6/Thu Apr 12 18:22:18 2001//Tr21-5-24 +/packaging.texi/1.12/Mon Sep 26 22:19:05 2005//Tr21-5-24 +/positions.texi/1.10/Fri Aug 13 09:28:23 2004//Tr21-5-24 +/postgresql.texi/1.3/Fri Oct 10 12:39:34 2003//Tr21-5-24 +/processes.texi/1.2/Thu Apr 12 18:22:19 2001//Tr21-5-24 +/range-tables.texi/1.3/Mon Dec 6 03:51:41 2004//Tr21-5-24 +/scrollbars.texi/1.4/Thu Apr 12 18:22:19 2001//Tr21-5-24 +/searching.texi/1.13/Wed Feb 23 15:33:38 2005//Tr21-5-24 +/sequences.texi/1.5/Thu Apr 12 18:22:20 2001//Tr21-5-24 +/specifiers.texi/1.15/Mon Sep 26 08:41:57 2005//Tr21-5-24 +/streams.texi/1.4/Thu Apr 12 18:22:20 2001//Tr21-5-24 +/strings.texi/1.7/Thu May 22 07:41:24 2003//Tr21-5-24 +/symbols.texi/1.5/Fri Jan 21 09:43:12 2005//Tr21-5-24 +/syntax.texi/1.3/Wed Oct 2 09:30:52 2002//Tr21-5-24 +/text.texi/1.5/Wed Sep 8 17:40:20 2004//Tr21-5-24 +/tips.texi/1.4/Thu Oct 16 04:10:23 2003//Tr21-5-24 +/toolbar.texi/1.4/Mon Dec 2 17:57:09 2002//Tr21-5-24 +/tooltalk.texi/1.5/Thu Apr 12 18:22:21 2001//Tr21-5-24 +/variables.texi/1.7/Fri Jan 21 09:43:12 2005//Tr21-5-24 +/windows.texi/1.11/Thu Oct 28 10:51:17 2004//Tr21-5-24 +/x-windows.texi/1.4/Mon Jul 2 20:45:08 2001//Tr21-5-24 D diff -urN 21.5.23/man/lispref/CVS/Tag 21.5.24/man/lispref/CVS/Tag --- 21.5.23/man/lispref/CVS/Tag Mon Dec 19 04:20:48 2005 +++ 21.5.24/man/lispref/CVS/Tag Mon Dec 19 04:23:11 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/man/new-users-guide/CVS/Entries 21.5.24/man/new-users-guide/CVS/Entries --- 21.5.23/man/new-users-guide/CVS/Entries Mon Dec 19 04:20:48 2005 +++ 21.5.24/man/new-users-guide/CVS/Entries Mon Dec 19 04:23:11 2005 @@ -1,12 +1,12 @@ -/custom1.texi/1.4/Sat Jul 6 18:56:31 2002//Tr21-5-23 -/custom2.texi/1.6/Fri Oct 10 12:39:41 2003//Tr21-5-23 -/edit.texi/1.3/Sat Jul 15 00:45:02 2000//Tr21-5-23 -/enter.texi/1.2/Sat Jun 13 04:28:24 1998//Tr21-5-23 -/files.texi/1.4/Fri Oct 10 12:39:41 2003//Tr21-5-23 -/help.texi/1.3/Thu Apr 12 18:22:24 2001//Tr21-5-23 -/modes.texi/1.5/Thu Apr 12 18:22:24 2001//Tr21-5-23 -/new-users-guide.texi/1.5/Thu Apr 12 18:22:24 2001//Tr21-5-23 -/region.texi/1.4/Sat Jul 15 00:45:03 2000//Tr21-5-23 -/search.texi/1.4/Fri Oct 10 12:39:41 2003//Tr21-5-23 -/xmenu.texi/1.3/Thu Apr 12 18:22:24 2001//Tr21-5-23 +/custom1.texi/1.4/Sat Jul 6 18:56:31 2002//Tr21-5-24 +/custom2.texi/1.6/Fri Oct 10 12:39:41 2003//Tr21-5-24 +/edit.texi/1.3/Sat Jul 15 00:45:02 2000//Tr21-5-24 +/enter.texi/1.2/Sat Jun 13 04:28:24 1998//Tr21-5-24 +/files.texi/1.4/Fri Oct 10 12:39:41 2003//Tr21-5-24 +/help.texi/1.3/Thu Apr 12 18:22:24 2001//Tr21-5-24 +/modes.texi/1.5/Thu Apr 12 18:22:24 2001//Tr21-5-24 +/new-users-guide.texi/1.5/Thu Apr 12 18:22:24 2001//Tr21-5-24 +/region.texi/1.4/Sat Jul 15 00:45:03 2000//Tr21-5-24 +/search.texi/1.4/Fri Oct 10 12:39:41 2003//Tr21-5-24 +/xmenu.texi/1.3/Thu Apr 12 18:22:24 2001//Tr21-5-24 D diff -urN 21.5.23/man/new-users-guide/CVS/Tag 21.5.24/man/new-users-guide/CVS/Tag --- 21.5.23/man/new-users-guide/CVS/Tag Mon Dec 19 04:20:48 2005 +++ 21.5.24/man/new-users-guide/CVS/Tag Mon Dec 19 04:23:11 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/man/xemacs/CVS/Entries 21.5.24/man/xemacs/CVS/Entries --- 21.5.23/man/xemacs/CVS/Entries Mon Dec 19 04:20:50 2005 +++ 21.5.24/man/xemacs/CVS/Entries Mon Dec 19 04:23:13 2005 @@ -1,41 +1,41 @@ -/abbrevs.texi/1.4/Thu Apr 12 18:22:26 2001//Tr21-5-23 -/basic.texi/1.4/Thu Apr 12 18:22:26 2001//Tr21-5-23 -/buffers.texi/1.3/Thu Apr 12 18:22:26 2001//Tr21-5-23 -/building.texi/1.5/Thu May 5 17:10:44 2005//Tr21-5-23 -/calendar.texi/1.6/Thu Apr 12 18:22:26 2001//Tr21-5-23 -/cmdargs.texi/1.4/Thu Apr 12 18:22:27 2001//Tr21-5-23 -/custom.texi/1.20/Mon Apr 18 04:00:10 2005//Tr21-5-23 -/display.texi/1.2/Sun May 3 00:24:11 1998//Tr21-5-23 -/entering.texi/1.3/Thu May 5 17:10:44 2005//Tr21-5-23 -/files.texi/1.5/Mon Feb 4 10:13:49 2002//Tr21-5-23 -/fixit.texi/1.1.1.1/Wed Dec 18 22:43:51 1996//Tr21-5-23 -/frame.texi/1.6/Thu Mar 27 12:57:50 2003//Tr21-5-23 -/glossary.texi/1.3/Thu Apr 12 18:22:28 2001//Tr21-5-23 -/gnu.texi/1.2/Sat Jul 15 00:45:06 2000//Tr21-5-23 -/help.texi/1.5/Mon Jan 31 20:08:50 2005//Tr21-5-23 -/indent.texi/1.1.1.1/Wed Dec 18 22:43:51 1996//Tr21-5-23 -/keystrokes.texi/1.4/Thu Apr 12 18:22:28 2001//Tr21-5-23 -/killing.texi/1.3/Sun May 3 00:24:11 1998//Tr21-5-23 -/m-x.texi/1.1.1.1/Wed Dec 18 22:43:51 1996//Tr21-5-23 -/major.texi/1.4/Mon Apr 18 04:00:10 2005//Tr21-5-23 -/mark.texi/1.3/Thu Mar 4 15:44:51 1999//Tr21-5-23 -/menus.texi/1.6/Thu May 5 17:10:45 2005//Tr21-5-23 -/mini.texi/1.3/Sat Sep 20 01:47:00 2003//Tr21-5-23 -/misc.texi/1.3/Mon Jul 29 21:52:17 2002//Tr21-5-23 -/mouse.texi/1.1.1.1/Wed Dec 18 22:43:51 1996//Tr21-5-23 -/mule.texi/1.7/Fri Jan 3 12:12:40 2003//Tr21-5-23 -/new.texi/1.3/Mon Jan 31 20:08:50 2005//Tr21-5-23 -/packages.texi/1.24/Mon Dec 6 03:51:46 2004//Tr21-5-23 -/picture.texi/1.1.1.1/Wed Dec 18 22:43:51 1996//Tr21-5-23 -/programs.texi/1.7/Fri Jan 28 00:12:39 2005//Tr21-5-23 -/reading.texi/1.2/Wed Aug 27 18:07:10 2003//Tr21-5-23 -/regs.texi/1.2/Thu Apr 12 18:22:29 2001//Tr21-5-23 -/search.texi/1.4/Thu Apr 12 18:22:30 2001//Tr21-5-23 -/sending.texi/1.5/Tue May 10 17:36:05 2005//Tr21-5-23 -/startup.texi/1.10/Wed Feb 5 08:18:58 2003//Tr21-5-23 -/text.texi/1.3/Thu May 5 17:10:45 2005//Tr21-5-23 -/trouble.texi/1.2/Thu Apr 12 18:22:30 2001//Tr21-5-23 -/undo.texi/1.1.1.1/Wed Dec 18 22:43:52 1996//Tr21-5-23 -/windows.texi/1.3/Thu Apr 12 18:22:30 2001//Tr21-5-23 -/xemacs.texi/1.18/Mon Jan 31 20:08:50 2005//Tr21-5-23 +/abbrevs.texi/1.4/Thu Apr 12 18:22:26 2001//Tr21-5-24 +/basic.texi/1.4/Thu Apr 12 18:22:26 2001//Tr21-5-24 +/buffers.texi/1.3/Thu Apr 12 18:22:26 2001//Tr21-5-24 +/building.texi/1.5/Thu May 5 17:10:44 2005//Tr21-5-24 +/calendar.texi/1.6/Thu Apr 12 18:22:26 2001//Tr21-5-24 +/cmdargs.texi/1.4/Thu Apr 12 18:22:27 2001//Tr21-5-24 +/custom.texi/1.21/Tue Nov 29 12:08:41 2005//Tr21-5-24 +/display.texi/1.2/Sun May 3 00:24:11 1998//Tr21-5-24 +/entering.texi/1.3/Thu May 5 17:10:44 2005//Tr21-5-24 +/files.texi/1.5/Mon Feb 4 10:13:49 2002//Tr21-5-24 +/fixit.texi/1.1.1.1/Wed Dec 18 22:43:51 1996//Tr21-5-24 +/frame.texi/1.6/Thu Mar 27 12:57:50 2003//Tr21-5-24 +/glossary.texi/1.3/Thu Apr 12 18:22:28 2001//Tr21-5-24 +/gnu.texi/1.2/Sat Jul 15 00:45:06 2000//Tr21-5-24 +/help.texi/1.5/Mon Jan 31 20:08:50 2005//Tr21-5-24 +/indent.texi/1.1.1.1/Wed Dec 18 22:43:51 1996//Tr21-5-24 +/keystrokes.texi/1.4/Thu Apr 12 18:22:28 2001//Tr21-5-24 +/killing.texi/1.3/Sun May 3 00:24:11 1998//Tr21-5-24 +/m-x.texi/1.1.1.1/Wed Dec 18 22:43:51 1996//Tr21-5-24 +/major.texi/1.4/Mon Apr 18 04:00:10 2005//Tr21-5-24 +/mark.texi/1.3/Thu Mar 4 15:44:51 1999//Tr21-5-24 +/menus.texi/1.6/Thu May 5 17:10:45 2005//Tr21-5-24 +/mini.texi/1.3/Sat Sep 20 01:47:00 2003//Tr21-5-24 +/misc.texi/1.3/Mon Jul 29 21:52:17 2002//Tr21-5-24 +/mouse.texi/1.1.1.1/Wed Dec 18 22:43:51 1996//Tr21-5-24 +/mule.texi/1.7/Fri Jan 3 12:12:40 2003//Tr21-5-24 +/new.texi/1.3/Mon Jan 31 20:08:50 2005//Tr21-5-24 +/packages.texi/1.24/Mon Dec 6 03:51:46 2004//Tr21-5-24 +/picture.texi/1.1.1.1/Wed Dec 18 22:43:51 1996//Tr21-5-24 +/programs.texi/1.7/Fri Jan 28 00:12:39 2005//Tr21-5-24 +/reading.texi/1.2/Wed Aug 27 18:07:10 2003//Tr21-5-24 +/regs.texi/1.2/Thu Apr 12 18:22:29 2001//Tr21-5-24 +/search.texi/1.4/Thu Apr 12 18:22:30 2001//Tr21-5-24 +/sending.texi/1.5/Tue May 10 17:36:05 2005//Tr21-5-24 +/startup.texi/1.10/Wed Feb 5 08:18:58 2003//Tr21-5-24 +/text.texi/1.3/Thu May 5 17:10:45 2005//Tr21-5-24 +/trouble.texi/1.2/Thu Apr 12 18:22:30 2001//Tr21-5-24 +/undo.texi/1.1.1.1/Wed Dec 18 22:43:52 1996//Tr21-5-24 +/windows.texi/1.3/Thu Apr 12 18:22:30 2001//Tr21-5-24 +/xemacs.texi/1.18/Mon Jan 31 20:08:50 2005//Tr21-5-24 D diff -urN 21.5.23/man/xemacs/CVS/Tag 21.5.24/man/xemacs/CVS/Tag --- 21.5.23/man/xemacs/CVS/Tag Mon Dec 19 04:20:50 2005 +++ 21.5.24/man/xemacs/CVS/Tag Mon Dec 19 04:23:13 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/man/xemacs/custom.texi 21.5.24/man/xemacs/custom.texi --- 21.5.23/man/xemacs/custom.texi Mon Apr 18 13:00:10 2005 +++ 21.5.24/man/xemacs/custom.texi Tue Nov 29 21:08:41 2005 @@ -2148,7 +2148,7 @@ Alternately, you can use a simpler version of @code{set-face-background-pixmap} called @code{set-face-background-pixmap-file}. This function does not give you -as much control on the pixmap instanciator, but provides filename +as much control on the pixmap instantiator, but provides filename completion. @findex set-face-font @@ -2157,6 +2157,49 @@ name of a font. When called from a program, if the optional @var{frame} argument is provided, the face is changed only in that frame; otherwise, it is changed in all frames. + +The syntax of the @var{font} argument varies according to platform. In +each of the following syntaxes, the example shows how to specify a +14-point upright bold Courier font. + +@table @strong +@item X11 +The X11 syntax is defined by the @dfn{X Logical Font Descriptor} (XLFD) +standard. An XLFD contains 14 fields each preceded by a hyphen: +foundry, family, weight, slant, swidth, adstyle, pixelsize, pointsize, +xresolution, yresolution, spacing, averagewidth, registry, and encoding. +It is usually sufficient to specify family, weight, slant, pointsize, +registry, and encoding, wildcarding the rest with @samp{*}. If you're +not sure what's available, you can wildcard some of the fields usually +specified, too. Here's our example font in XLFD syntax: +@code{"-*-courier-bold-r-*-*-*-140-*-*-*-*-iso8859-*"}. +The XLFD syntax is also used for GTK+ version 1. XLFD names must be +encoding in ISO-8859-1. + +@item Xft +The Xft syntax is defined by the @file{fontconfig} library +@ref{Font Names,,,fontconfig}. It is less a font naming convention than +a way to express any arbitrary subset of the font's properties in a +syntax that is both human- and machine-readable. A @file{fontconfig} +font name contains the family, a hyphen, and the pointsize, followed by +an arbitrary sequence of properties. Each property consists of a colon, +a keyword, an equals sign, and the property value. Here's our example +font in @file{fontconfig} syntax: @code{"Courier-14:weight=bold"}. This +syntax admits ``style abbreviations'' which can be user-defined. A +style is a single keyword denoting a sequence of properties. So the +example font may be abbreviated to @code{"Courier-14:bold"} ("bold" is a +standard abbreviation for "weight=bold"). The @file{fontconfig} syntax +is also used for GTK+ version 2. @file{fontconfig} names must be +encoded in UTF-8. + +@item MS-Windows +The MS Windows syntax is superficially similar to that of Xft but +actually is more like XLFD. A font name consists of five fields, +family, size, slant, weight, and encoding, each expressed as a keyword +taking on standardized values (except family, which is just a name). +Here's our example font in MS Windows syntax: +@code{"Courier:14:Bold:Western"}. +@end table @findex set-face-foreground You can set the foreground color of the specified @var{face} with the diff -urN 21.5.23/modules/CVS/Entries 21.5.24/modules/CVS/Entries --- 21.5.23/modules/CVS/Entries Mon Dec 19 04:20:50 2005 +++ 21.5.24/modules/CVS/Entries Mon Dec 19 04:23:13 2005 @@ -1,4 +1,4 @@ -/.cvsignore/1.1/Tue Sep 10 15:27:12 2002//Tr21-5-23 -/ChangeLog/1.48/Wed Oct 26 15:14:13 2005//Tr21-5-23 -/README/1.3/Tue Sep 10 15:27:12 2002//Tr21-5-23 +/.cvsignore/1.1/Tue Sep 10 15:27:12 2002//Tr21-5-24 +/ChangeLog/1.55/Sun Dec 18 19:06:26 2005//Tr21-5-24 +/README/1.3/Tue Sep 10 15:27:12 2002//Tr21-5-24 D diff -urN 21.5.23/modules/CVS/Tag 21.5.24/modules/CVS/Tag --- 21.5.23/modules/CVS/Tag Mon Dec 19 04:20:50 2005 +++ 21.5.24/modules/CVS/Tag Mon Dec 19 04:23:13 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/modules/ChangeLog 21.5.24/modules/ChangeLog --- 21.5.23/modules/ChangeLog Thu Oct 27 00:14:13 2005 +++ 21.5.24/modules/ChangeLog Mon Dec 19 04:06:26 2005 @@ -1,3 +1,33 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-11-22 Ben Wing + + * common/Makefile.common (mostlyclean): + Ignore errors from rm during clean. + +2005-11-16 Stephen J. Turnbull + + * canna/canna_api.c: Small fixes to Mule-ization patch. + +2005-11-01 Ben Wing + + * canna/canna_api.c: Mule-ization. + +2005-11-13 Ben Wing + + * common/Makefile.common: + * common/Makefile.common (.PHONY): + * common/Makefile.common (install): + Add targets distclean-noconfig, realclean-noconfig, extraclean-noconfig. + Do some refactoring for cleanliness. Put in some magic cookies in + comments so this file gets read as a make file by XEmacs. + +2005-11-02 Marcus Crestani + + * canna/.cvsignore: New. + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. diff -urN 21.5.23/modules/base64/CVS/Entries 21.5.24/modules/base64/CVS/Entries --- 21.5.23/modules/base64/CVS/Entries Mon Dec 19 04:20:50 2005 +++ 21.5.24/modules/base64/CVS/Entries Mon Dec 19 04:23:13 2005 @@ -1,4 +1,4 @@ -/.cvsignore/1.2/Thu Apr 12 18:22:33 2001//Tr21-5-23 -/Makefile/1.2/Thu Apr 12 18:22:33 2001//Tr21-5-23 -/base64.c/1.3/Fri Feb 15 20:57:58 2002//Tr21-5-23 +/.cvsignore/1.2/Thu Apr 12 18:22:33 2001//Tr21-5-24 +/Makefile/1.2/Thu Apr 12 18:22:33 2001//Tr21-5-24 +/base64.c/1.3/Fri Feb 15 20:57:58 2002//Tr21-5-24 D diff -urN 21.5.23/modules/base64/CVS/Tag 21.5.24/modules/base64/CVS/Tag --- 21.5.23/modules/base64/CVS/Tag Mon Dec 19 04:20:50 2005 +++ 21.5.24/modules/base64/CVS/Tag Mon Dec 19 04:23:13 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/modules/canna/.cvsignore 21.5.24/modules/canna/.cvsignore --- 21.5.23/modules/canna/.cvsignore Thu Jan 1 09:00:00 1970 +++ 21.5.24/modules/canna/.cvsignore Wed Nov 2 12:33:17 2005 @@ -0,0 +1,5 @@ +*.ell +*_i.c +GNUmakefile +Makefile +Makefile.in diff -urN 21.5.23/modules/canna/CVS/Entries 21.5.24/modules/canna/CVS/Entries --- 21.5.23/modules/canna/CVS/Entries Mon Dec 19 04:20:50 2005 +++ 21.5.24/modules/canna/CVS/Entries Mon Dec 19 04:23:14 2005 @@ -1,6 +1,7 @@ -/Makefile.in.in/1.3/Fri Oct 21 15:48:35 2005//Tr21-5-23 -/canna_api.c/1.2/Fri Oct 21 15:48:35 2005//Tr21-5-23 -/configure/1.2/Mon Oct 24 10:07:30 2005//Tr21-5-23 -/configure.ac/1.3/Fri Oct 21 15:48:36 2005//Tr21-5-23 -/install-sh/1.2/Tue Oct 4 17:51:32 2005//Tr21-5-23 +/.cvsignore/1.1/Wed Nov 2 03:33:17 2005//Tr21-5-24 +/Makefile.in.in/1.3/Fri Oct 21 15:48:35 2005//Tr21-5-24 +/canna_api.c/1.3/Wed Nov 16 07:14:16 2005//Tr21-5-24 +/configure/1.2/Mon Oct 24 10:07:30 2005//Tr21-5-24 +/configure.ac/1.3/Fri Oct 21 15:48:36 2005//Tr21-5-24 +/install-sh/1.2/Tue Oct 4 17:51:32 2005//Tr21-5-24 D diff -urN 21.5.23/modules/canna/CVS/Tag 21.5.24/modules/canna/CVS/Tag --- 21.5.23/modules/canna/CVS/Tag Mon Dec 19 04:20:50 2005 +++ 21.5.24/modules/canna/CVS/Tag Mon Dec 19 04:23:14 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/modules/canna/canna_api.c 21.5.24/modules/canna/canna_api.c --- 21.5.23/modules/canna/canna_api.c Sat Oct 22 00:48:35 2005 +++ 21.5.24/modules/canna/canna_api.c Wed Nov 16 16:14:16 2005 @@ -2,6 +2,7 @@ Copyright (C) 1995 Free Software Foundation, Inc. Copyright (C) 1995 Sun Microsystems, Inc. + Copyright (C) 2005 Ben Wing. This file is part of XEmacs. @@ -175,8 +176,7 @@ /* #### is this global really necessary? */ #define KEYTOSTRSIZE 2048 -static char key_buffer[KEYTOSTRSIZE]; -static char **warning; +static Extbyte key_buffer[KEYTOSTRSIZE]; static int canna_empty_info, canna_through_info; static int canna_underline; @@ -200,13 +200,15 @@ static Lisp_Object storeResults (char *, int, jrKanjiStatus *); static Lisp_Object kanjiYomiList (int, int); static Lisp_Object CANNA_mode_keys (void); +static Lisp_Object Qeuc_jp; + +#define make_euc_string(p, len) make_ext_string ((Extbyte *) p, len, Qeuc_jp) +#define build_euc_string(p) build_ext_string ((Extbyte *) p, Qeuc_jp) #ifdef CANNA_MULE -static void m2c (unsigned char *, int, unsigned char *); -static Lisp_Object mule_make_string (unsigned char *, int); -static int mule_strlen (unsigned char *, int); -static void count_char (unsigned char *,int, int, int, Fixnum *, Fixnum *, Fixnum *); -#define make_string mule_make_string +static int euc_jp_num_chars (unsigned char *, int); +static void count_char (unsigned char *,int, int, int, Fixnum *, Fixnum *, + Fixnum *); #endif /* Lisp functions definition */ @@ -234,12 +236,12 @@ if (len < 0) { /* Error detected */ - val = make_string ((unsigned char*) jrKanjiError, strlen (jrKanjiError)); + val = build_euc_string (jrKanjiError); } else { /* ³ÎÄꤷ¤¿Ê¸»úÎó (the confirmed string) */ - Vcanna_kakutei_string = make_string ((unsigned char *) buf, len); + Vcanna_kakutei_string = make_euc_string (buf, len); val = make_int (len); /* ³ÎÄꤷ¤¿Ê¸»úÎó¤ÎÆɤߤξðÊó... (info about the reading of the confirmed string) */ @@ -254,13 +256,13 @@ int yomilen2; Vcanna_kakutei_yomi = - make_string ((unsigned char *) p, yomilen); /* ÆÉ¤ß (reading) */ + make_euc_string (p, yomilen); /* ÆÉ¤ß (reading) */ p += yomilen + 1; yomilen2 = strlen (p); if (len + yomilen + yomilen2 + 2 < KEYTOSTRSIZE) { Vcanna_kakutei_romaji = - make_string ((unsigned char *) p, yomilen2); + make_euc_string (p, yomilen2); /* ¥í¡¼¥Þ»ú (romanization) */ } } @@ -272,7 +274,7 @@ Vcanna_henkan_string = Qnil; if (ks->length >= 0) { - Vcanna_henkan_string = make_string (ks->echoStr, ks->length); + Vcanna_henkan_string = make_euc_string (ks->echoStr, ks->length); #ifndef CANNA_MULE canna_henkan_length = ks->length; canna_henkan_revPos = ks->revPos; @@ -280,10 +282,10 @@ #else /* CANNA_MULE */ if (canna_underline) { - canna_henkan_length = mule_strlen (ks->echoStr,ks->length); - canna_henkan_revPos = mule_strlen (ks->echoStr,ks->revPos); - canna_henkan_revLen = mule_strlen (ks->echoStr+ks->revPos, - ks->revLen); + canna_henkan_length = euc_jp_num_chars (ks->echoStr,ks->length); + canna_henkan_revPos = euc_jp_num_chars (ks->echoStr,ks->revPos); + canna_henkan_revLen = euc_jp_num_chars (ks->echoStr+ks->revPos, + ks->revLen); } else { @@ -298,8 +300,8 @@ Vcanna_ichiran_string = Qnil; if (ks->info & KanjiGLineInfo && ks->gline.length >= 0) { - Vcanna_ichiran_string = make_string (ks->gline.line, - ks->gline.length); + Vcanna_ichiran_string = make_euc_string (ks->gline.line, + ks->gline.length); #ifndef CANNA_MULE canna_ichiran_length = ks->gline.length; canna_ichiran_revPos = ks->gline.revPos; @@ -316,8 +318,7 @@ Vcanna_mode_string = Qnil; if (ks->info & KanjiModeInfo) { - Vcanna_mode_string = - make_string (ks->mode, strlen ((const char *) ks->mode)); + Vcanna_mode_string = build_euc_string ((Extbyte *) ks->mode); } /* ¤½¤Î¾¤Î¾ðÊó (other information) */ @@ -365,7 +366,7 @@ { Lisp_Object val; int res; - unsigned char **p, **q; + char **p, **q; int kugiri; /* ʸÀá¶èÀÚ¤ê¤ò¤¹¤ë¤«¡© (display clause separator?) */ @@ -388,13 +389,10 @@ } else { - char servername[256]; - CHECK_STRING (server); - strncpy (servername, (const char *) XSTRING_DATA (server), - XSTRING_LENGTH (server)); - servername[XSTRING_LENGTH (server)] = '\0'; - jrKanjiControl (0, KC_SETSERVERNAME, servername); + jrKanjiControl (0, KC_SETSERVERNAME, + /* !!#### Check encoding */ + NEW_LISP_STRING_TO_EXTERNAL (server, Qnative)); } if (NILP (rcfile)) @@ -403,40 +401,37 @@ } else { - char rcname[256]; - CHECK_STRING (rcfile); - strncpy (rcname, (const char *) XSTRING_DATA (rcfile), - XSTRING_LENGTH (rcfile)); - rcname[XSTRING_LENGTH (rcfile)] = '\0'; - jrKanjiControl (0, KC_SETINITFILENAME, rcname); + jrKanjiControl (0, KC_SETINITFILENAME, + NEW_LISP_STRING_TO_EXTERNAL (rcfile, Qfile_name)); } - warning = (char **) 0; + { + char **warning = (char **) 0; #ifdef nec_ews_svr4 - stop_polling (); + stop_polling (); #endif /* nec_ews_svr4 */ - res = jrKanjiControl (0, KC_INITIALIZE, (char *)&warning); + res = jrKanjiControl (0, KC_INITIALIZE, (char *) &warning); #ifdef nec_ews_svr4 - start_polling (); + start_polling (); #endif /* nec_ews_svr4 */ - val = Qnil; - if (warning) - { - for (p = q = (unsigned char **) warning ; *q ; q++) - ; - while (p < q) - { - q--; - val = Fcons (make_string (*q, strlen ((const char *) *q)), val); - } - } - val = Fcons (val, Qnil); + val = Qnil; + if (warning) + { + for (p = q = warning ; *q ; q++) + ; + while (p < q) + { + q--; + val = Fcons (build_euc_string (*q), val); + } + } + val = Fcons (val, Qnil); + } if (res == -1) { - val = Fcons (make_string ((unsigned char *) jrKanjiError, - strlen (jrKanjiError)), val); + val = Fcons (build_euc_string (jrKanjiError), val); /* ¥¤¥Ë¥·¥ã¥é¥¤¥º¤Ç¼ºÇÔ¤·¤¿¾ì¹ç¡£ (on initialization failure) */ return Fcons (Qnil, val); } @@ -477,16 +472,20 @@ ()) { Lisp_Object val; - unsigned char **p; + char **p; + char **warning = (char **) 0; - jrKanjiControl (0, KC_FINALIZE, (char *)&warning); + jrKanjiControl (0, KC_FINALIZE, (char *) &warning); val = Qnil; if (warning) { - for (p = (unsigned char**) warning ; *p ; p++) + for (p = warning ; *p; p++) { - val = Fcons (make_string (*p, strlen ((const char *) *p)), val); + /* !!#### This is almost certainly wrong; `canna-initialize + starts at the end of the warnings so the resulting list is + in the correct order. We should do the same. */ + val = Fcons (build_euc_string (*p), val); } } val = Fcons (val, Qnil); @@ -501,21 +500,11 @@ { jrKanjiStatusWithValue ksv; jrKanjiStatus ks; -#ifdef CANNA_MULE - unsigned char cbuf[4096]; -#endif CHECK_STRING (str); ksv.buffer = (unsigned char *) key_buffer; ksv.bytes_buffer = KEYTOSTRSIZE; -#ifndef CANNA_MULE - ks.echoStr = XSTRING_DATA (str); - ks.length = XSTRING_LENGTH (str); -#else /* CANNA_MULE */ - m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), cbuf); - ks.echoStr = cbuf; - ks.length = strlen ((const char *) cbuf); -#endif /* CANNA_MULE */ + LISP_STRING_TO_SIZED_EXTERNAL (str, ks.echoStr, ks.length, Qeuc_jp); ksv.ks = &ks; jrKanjiControl (0, KC_DEFINEKANJI, (char *)&ksv); return storeResults (key_buffer, ksv.val, ksv.ks); @@ -577,17 +566,13 @@ { jrKanjiStatusWithValue ksv; jrKanjiStatus ks; + Extbyte *ext; CHECK_STRING (yomi); -#ifndef CANNA_MULE - strncpy (key_buffer, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi)); - ks.length = XSTRING_LENGTH (yomi); - key_buffer[ks.length] = '\0'; -#else /* CANNA_MULE */ - m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), - (unsigned char *) key_buffer); + LISP_STRING_TO_EXTERNAL (yomi, ext, Qeuc_jp); + strncpy (key_buffer, ext, sizeof (key_buffer)); + key_buffer[sizeof (key_buffer) - 1] = '\0'; ks.length = strlen (key_buffer); -#endif /* CANNA_MULE */ if (NILP (roma)) { @@ -596,17 +581,11 @@ else { CHECK_STRING (roma); - -#ifndef CANNA_MULE - strncpy (key_buffer + XSTRING_LENGTH (yomi) + 1, XSTRING_DATA (roma), - XSTRING_LENGTH (roma)); - key_buffer[XSTRING_LENGTH (yomi) + 1 + XSTRING_LENGTH (roma)] = '\0'; - ks.mode = (unsigned char *)(key_buffer + XSTRING_LENGTH (yomi) + 1); -#else /* CANNA_MULE */ - ks.mode = (unsigned char *)(key_buffer + ks.length + 1); - m2c (XSTRING_DATA (roma), XSTRING_LENGTH (roma), - (unsigned char *) ks.mode); -#endif /* CANNA_MULE */ + LISP_STRING_TO_EXTERNAL (roma, ext, Qeuc_jp); + ks.mode = (unsigned char *) (key_buffer + ks.length + 1); + strncpy (key_buffer + ks.length + 1, ext, + sizeof (key_buffer) - ks.length - 1); + key_buffer[sizeof (key_buffer) - 1] = '\0'; } ks.echoStr = (unsigned char *) key_buffer; @@ -653,24 +632,21 @@ (str)) { Lisp_Object val; - unsigned char **p; + Extbyte **p; int n; + Extbyte *ext; CHECK_STRING (str); - -#ifndef CANNA_MULE - strncpy (key_buffer, XSTRING_DATA (str), XSTRING_LENGTH (str)); - key_buffer[XSTRING_LENGTH (str)] = '\0'; -#else /* CANNA_MULE */ - m2c (XSTRING_DATA (str), XSTRING_LENGTH (str), (unsigned char *) key_buffer); -#endif /* CANNA_MULE */ - p = (unsigned char**) key_buffer; + LISP_STRING_TO_EXTERNAL (str, ext, Qeuc_jp); + strncpy (key_buffer, ext, sizeof (key_buffer)); + key_buffer[sizeof (key_buffer) - 1] = '\0'; + p = (Extbyte **) key_buffer; n = jrKanjiControl (0, KC_PARSE, (char *) &p); val = Qnil; while (n > 0) { n--; - val = Fcons (make_string (p[n], strlen ((const char *) p[n])), val); + val = Fcons (build_euc_string (p[n]), val); } return val; } @@ -683,7 +659,7 @@ char buf[256]; jrKanjiControl (0, KC_QUERYMODE, buf); - return make_string ((unsigned char *) buf, strlen (buf)); + return build_euc_string (buf); } /* @@ -740,23 +716,20 @@ (yomi)) { int nbun; + Extbyte *ext; CHECK_STRING (yomi); if (confirmContext () == 0) { return Qnil; } -#ifndef CANNA_MULE - strncpy (yomibuf, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi)); - yomibuf[XSTRING_LENGTH (yomi)] = '\0'; - nbun = RkBgnBun (IRCP_context, XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), - (RK_XFER << RK_XFERBITS) | RK_KFER); -#else /* CANNA_MULE */ - m2c (XSTRING_DATA (yomi), XSTRING_LENGTH (yomi), yomibuf); - nbun = RkBgnBun (IRCP_context, (char *) yomibuf, - strlen ((const char *) yomibuf), + + LISP_STRING_TO_EXTERNAL (yomi, ext, Qeuc_jp); + strncpy ((char *) yomibuf, ext, sizeof (yomibuf)); + yomibuf[sizeof (yomibuf) - 1] = '\0'; + + nbun = RkBgnBun (IRCP_context, yomibuf, strlen ((char *) yomibuf), (RK_XFER << RK_XFERBITS) | RK_KFER); -#endif /* CANNA_MULE */ return kanjiYomiList (IRCP_context, nbun); } @@ -765,7 +738,7 @@ kanjiYomiList (int context, int nbun) { Lisp_Object val, res = Qnil; - unsigned char RkBuf[RKBUFSIZE]; + UExtbyte RkBuf[RKBUFSIZE]; int len, i, total; for (i = nbun ; i > 0 ; ) @@ -773,9 +746,9 @@ i--; RkGoTo (context, i); len = RkGetKanji (context, RkBuf, RKBUFSIZE); - val = make_string (RkBuf, len); + val = make_euc_string (RkBuf, len); len = RkGetYomi (context, RkBuf, RKBUFSIZE); - res = Fcons (Fcons (val, make_string (RkBuf, len)), res); + res = Fcons (Fcons (val, make_euc_string (RkBuf, len)), res); if (i < RKBUFSIZE / 2) { kugiri[i] = len; @@ -796,7 +769,7 @@ (bunsetsu)) { int i, slen, len; - unsigned char *p, RkBuf[RKBUFSIZE]; + UExtbyte *p, RkBuf[RKBUFSIZE]; Lisp_Object res = Qnil; CHECK_INT (bunsetsu); @@ -809,14 +782,14 @@ p = RkBuf; for (i = 0 ; i < len ; i++) { - slen = strlen ((const char *) p); + slen = strlen ((char *) p); if (NILP(res)) { - res = Fcons (make_string (p, slen), Qnil); + res = Fcons (make_euc_string (p, slen), Qnil); } else { - XCDR (res) = Fcons (make_string (p, slen), Qnil); + XCDR (res) = Fcons (make_euc_string (p, slen), Qnil); } p += slen + 1; } @@ -1104,6 +1077,8 @@ DEFSUBR (Fcanna_henkan_kakutei); DEFSUBR (Fcanna_henkan_end); DEFSUBR (Fcanna_henkan_quit); + + DEFSYMBOL (Qeuc_jp); } void @@ -1850,84 +1825,10 @@ #endif #ifdef CANNA_MULE -/* To handle MULE internal code and EUC. - I assume CANNA can handle only Japanese EUC. */ - -/* EUC multibyte string to MULE internal string */ - -static void -c2mu (unsigned char *cp, int l, unsigned char *mp) -{ - unsigned char ch, *ep = cp+l; - - while ((cp < ep) && (ch = *cp)) - { - if ((unsigned char) ch == ISO_CODE_SS2) - { - *mp++ = LEADING_BYTE_KATAKANA_JISX0201; - cp++; - } - else if ((unsigned char) ch == ISO_CODE_SS3) - { - *mp++ = LEADING_BYTE_JAPANESE_JISX0212; - cp++; - *mp++ = *cp++; - } - else if (ch & 0x80) - { - *mp++ = LEADING_BYTE_JAPANESE_JISX0208; - *mp++ = *cp++; - } - *mp++ = *cp++; - } - *mp = 0; -} - -/* MULE internal string to EUC multibyte string */ - -static void -m2c (unsigned char *mp, int l, unsigned char *cp) -{ - unsigned char ch, *ep = mp + l; - - while ((mp < ep) && (ch = *mp++)) - { - switch (ch) - { - case LEADING_BYTE_KATAKANA_JISX0201: - *cp++ = ISO_CODE_SS2; - *cp++ = *mp++; - break; - case LEADING_BYTE_JAPANESE_JISX0212: - *cp++ = ISO_CODE_SS3; - case LEADING_BYTE_JAPANESE_JISX0208: - *cp++ = *mp++; - *cp++ = *mp++; - break; - default: - *cp++ = ch; - break; - } - } - *cp = 0; -} - -#undef make_string - -/* make_string after converting EUC string to MULE internal string */ -static Lisp_Object -mule_make_string (unsigned char *p, int l) -{ - unsigned char cbuf[4096]; - - c2mu (p,l,cbuf); - return (make_string (cbuf, strlen ((const char *) cbuf))); -} -/* return the MULE internal string length of EUC string */ -/* Modified by sb to return a character count not byte count. */ +/* Return the number of characters in an EUC-JP string. */ static int -mule_strlen (unsigned char *p, int l) +euc_jp_num_chars (unsigned char *p, int l) { unsigned char ch, *cp = p; int len = 0; diff -urN 21.5.23/modules/common/CVS/Entries 21.5.24/modules/common/CVS/Entries --- 21.5.23/modules/common/CVS/Entries Mon Dec 19 04:20:50 2005 +++ 21.5.24/modules/common/CVS/Entries Mon Dec 19 04:23:14 2005 @@ -1,4 +1,4 @@ -/Makefile.common/1.10/Mon Nov 8 15:14:52 2004//Tr21-5-23 -/configure-post.ac/1.1/Mon Nov 4 05:19:49 2002//Tr21-5-23 -/configure-pre.ac/1.1/Mon Nov 4 05:19:54 2002//Tr21-5-23 +/Makefile.common/1.12/Tue Nov 22 07:14:54 2005//Tr21-5-24 +/configure-post.ac/1.1/Mon Nov 4 05:19:49 2002//Tr21-5-24 +/configure-pre.ac/1.1/Mon Nov 4 05:19:54 2002//Tr21-5-24 D diff -urN 21.5.23/modules/common/CVS/Tag 21.5.24/modules/common/CVS/Tag --- 21.5.23/modules/common/CVS/Tag Mon Dec 19 04:20:50 2005 +++ 21.5.24/modules/common/CVS/Tag Mon Dec 19 04:23:14 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/modules/common/Makefile.common 21.5.24/modules/common/Makefile.common --- 21.5.23/modules/common/Makefile.common Tue Nov 9 00:14:52 2004 +++ 21.5.24/modules/common/Makefile.common Tue Nov 22 16:14:54 2005 @@ -1,5 +1,6 @@ ## Common Makefile section for modules in XEmacs. ## Copyright (C) 2002 Jerry James. +## Copyright (C) 2005 Ben Wing. ## This file is part of XEmacs. @@ -62,7 +63,7 @@ IMPORT_LIB=../../src/xemacs-import.a #endif -.PHONY: clean distclean install +.PHONY: install all: $(OBJECT_TO_BUILD) .c.o: @@ -77,13 +78,30 @@ --mod-name=$(MODNAME) --mod-version=$(MODVER) \ --mod-title=$(MODTITLE) $(SRC_SRCS) -clean: - $(RM) $(MODNAME).ell $(OBJS) $(MODNAME)_i.* *~ - -distclean: clean - $(RM) Makefile config.* configure - -extraclean: distclean +.PHONY: mostlyclean clean distclean realclean extraclean +.PHONY: distclean-noconfig realclean-noconfig extraclean-noconfig +mostlyclean: + -$(RM) $(OBJS) $(MODNAME)_i.* core +clean: mostlyclean + -$(RM) $(MODNAME).ell +distclean-noconfig: clean + -$(RM) config.* TAGS +## This is used in making a distribution. +## Do not use it on development directories! +distclean: distclean-noconfig + -$(RM) GNUmakefile Makefile Makefile.in configure +realclean-noconfig: distclean-noconfig +realclean: distclean +extraclean-noconfig: realclean-noconfig + -$(RM) *~ \#* +extraclean: realclean + -$(RM) *~ \#* install: $(OBJECT_TO_BUILD) $(INSTALL_PROGRAM) $< $(INSTALLPATH) + +## +## Local Variables: +## mode: makefile +## End: +## diff -urN 21.5.23/modules/ldap/CVS/Entries 21.5.24/modules/ldap/CVS/Entries --- 21.5.23/modules/ldap/CVS/Entries Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/ldap/CVS/Entries Mon Dec 19 04:23:14 2005 @@ -1,8 +1,8 @@ -/.cvsignore/1.3/Wed Jun 15 09:28:44 2005//Tr21-5-23 -/Makefile.in.in/1.3/Mon Nov 18 06:52:32 2002//Tr21-5-23 -/configure/1.1/Tue Sep 10 15:27:14 2002//Tr21-5-23 -/configure.ac/1.2/Mon Nov 18 06:52:32 2002//Tr21-5-23 -/eldap.c/1.15/Wed Oct 26 13:01:45 2005//Tr21-5-23 -/eldap.h/1.4/Tue Oct 25 08:32:42 2005//Tr21-5-23 -/install-sh/1.1/Tue Sep 10 15:27:14 2002//Tr21-5-23 +/.cvsignore/1.3/Wed Jun 15 09:28:44 2005//Tr21-5-24 +/Makefile.in.in/1.3/Mon Nov 18 06:52:32 2002//Tr21-5-24 +/configure/1.1/Tue Sep 10 15:27:14 2002//Tr21-5-24 +/configure.ac/1.2/Mon Nov 18 06:52:32 2002//Tr21-5-24 +/eldap.c/1.15/Wed Oct 26 13:01:45 2005//Tr21-5-24 +/eldap.h/1.4/Tue Oct 25 08:32:42 2005//Tr21-5-24 +/install-sh/1.1/Tue Sep 10 15:27:14 2002//Tr21-5-24 D diff -urN 21.5.23/modules/ldap/CVS/Tag 21.5.24/modules/ldap/CVS/Tag --- 21.5.23/modules/ldap/CVS/Tag Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/ldap/CVS/Tag Mon Dec 19 04:23:14 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/modules/postgresql/CVS/Entries 21.5.24/modules/postgresql/CVS/Entries --- 21.5.23/modules/postgresql/CVS/Entries Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/postgresql/CVS/Entries Mon Dec 19 04:23:14 2005 @@ -1,8 +1,8 @@ -/.cvsignore/1.2/Sun Mar 16 21:02:06 2003//Tr21-5-23 -/Makefile.in.in/1.3/Mon Nov 18 06:52:33 2002//Tr21-5-23 -/configure/1.2/Mon Nov 18 06:52:33 2002//Tr21-5-23 -/configure.ac/1.2/Mon Nov 18 06:52:33 2002//Tr21-5-23 -/install-sh/1.1/Tue Sep 10 15:27:18 2002//Tr21-5-23 -/postgresql.c/1.8/Tue Oct 25 08:32:44 2005//Tr21-5-23 -/postgresql.h/1.3/Tue Oct 25 08:32:44 2005//Tr21-5-23 +/.cvsignore/1.2/Sun Mar 16 21:02:06 2003//Tr21-5-24 +/Makefile.in.in/1.3/Mon Nov 18 06:52:33 2002//Tr21-5-24 +/configure/1.2/Mon Nov 18 06:52:33 2002//Tr21-5-24 +/configure.ac/1.2/Mon Nov 18 06:52:33 2002//Tr21-5-24 +/install-sh/1.1/Tue Sep 10 15:27:18 2002//Tr21-5-24 +/postgresql.c/1.8/Tue Oct 25 08:32:44 2005//Tr21-5-24 +/postgresql.h/1.3/Tue Oct 25 08:32:44 2005//Tr21-5-24 D diff -urN 21.5.23/modules/postgresql/CVS/Tag 21.5.24/modules/postgresql/CVS/Tag --- 21.5.23/modules/postgresql/CVS/Tag Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/postgresql/CVS/Tag Mon Dec 19 04:23:14 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/modules/sample/CVS/Tag 21.5.24/modules/sample/CVS/Tag --- 21.5.23/modules/sample/CVS/Tag Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/sample/CVS/Tag Mon Dec 19 04:23:14 2005 @@ -1 +1 @@ -Tr21-5-23 +Tr21-5-24 diff -urN 21.5.23/modules/sample/external/CVS/Entries 21.5.24/modules/sample/external/CVS/Entries --- 21.5.23/modules/sample/external/CVS/Entries Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/sample/external/CVS/Entries Mon Dec 19 04:23:14 2005 @@ -1,6 +1,6 @@ -/.cvsignore/1.2/Wed Jun 15 09:28:49 2005//Tr21-5-23 -/Makefile.in.in/1.3/Tue May 20 15:00:27 2003//Tr21-5-23 -/configure.ac/1.1/Tue Sep 10 15:27:24 2002//Tr21-5-23 -/install-sh/1.1/Tue Sep 10 15:27:24 2002//Tr21-5-23 -/sample.c/1.1/Tue Sep 10 15:27:24 2002//Tr21-5-23 +/.cvsignore/1.2/Wed Jun 15 09:28:49 2005//Tr21-5-24 +/Makefile.in.in/1.3/Tue May 20 15:00:27 2003//Tr21-5-24 +/configure.ac/1.1/Tue Sep 10 15:27:24 2002//Tr21-5-24 +/install-sh/1.1/Tue Sep 10 15:27:24 2002//Tr21-5-24 +/sample.c/1.1/Tue Sep 10 15:27:24 2002//Tr21-5-24 D diff -urN 21.5.23/modules/sample/external/CVS/Tag 21.5.24/modules/sample/external/CVS/Tag --- 21.5.23/modules/sample/external/CVS/Tag Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/sample/external/CVS/Tag Mon Dec 19 04:23:14 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/modules/sample/internal/CVS/Entries 21.5.24/modules/sample/internal/CVS/Entries --- 21.5.23/modules/sample/internal/CVS/Entries Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/sample/internal/CVS/Entries Mon Dec 19 04:23:14 2005 @@ -1,6 +1,6 @@ -/.cvsignore/1.2/Wed Jun 15 09:28:53 2005//Tr21-5-23 -/Makefile.in.in/1.3/Tue May 20 15:00:28 2003//Tr21-5-23 -/configure.ac/1.1/Tue Sep 10 15:27:28 2002//Tr21-5-23 -/install-sh/1.1/Tue Sep 10 15:27:28 2002//Tr21-5-23 -/sample.c/1.1/Tue Sep 10 15:27:28 2002//Tr21-5-23 +/.cvsignore/1.2/Wed Jun 15 09:28:53 2005//Tr21-5-24 +/Makefile.in.in/1.3/Tue May 20 15:00:28 2003//Tr21-5-24 +/configure.ac/1.1/Tue Sep 10 15:27:28 2002//Tr21-5-24 +/install-sh/1.1/Tue Sep 10 15:27:28 2002//Tr21-5-24 +/sample.c/1.1/Tue Sep 10 15:27:28 2002//Tr21-5-24 D diff -urN 21.5.23/modules/sample/internal/CVS/Tag 21.5.24/modules/sample/internal/CVS/Tag --- 21.5.23/modules/sample/internal/CVS/Tag Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/sample/internal/CVS/Tag Mon Dec 19 04:23:14 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/modules/zlib/CVS/Entries 21.5.24/modules/zlib/CVS/Entries --- 21.5.23/modules/zlib/CVS/Entries Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/zlib/CVS/Entries Mon Dec 19 04:23:14 2005 @@ -1,4 +1,4 @@ -/.cvsignore/1.2/Thu Apr 12 18:22:40 2001//Tr21-5-23 -/Makefile/1.2/Thu Apr 12 18:22:40 2001//Tr21-5-23 -/zlib.c/1.2/Thu Apr 12 18:22:40 2001//Tr21-5-23 +/.cvsignore/1.2/Thu Apr 12 18:22:40 2001//Tr21-5-24 +/Makefile/1.2/Thu Apr 12 18:22:40 2001//Tr21-5-24 +/zlib.c/1.2/Thu Apr 12 18:22:40 2001//Tr21-5-24 D diff -urN 21.5.23/modules/zlib/CVS/Tag 21.5.24/modules/zlib/CVS/Tag --- 21.5.23/modules/zlib/CVS/Tag Mon Dec 19 04:20:51 2005 +++ 21.5.24/modules/zlib/CVS/Tag Mon Dec 19 04:23:14 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/netinstall/CVS/Entries 21.5.24/netinstall/CVS/Entries --- 21.5.23/netinstall/CVS/Entries Mon Dec 19 04:20:52 2005 +++ 21.5.24/netinstall/CVS/Entries Mon Dec 19 04:23:15 2005 @@ -1,79 +1,79 @@ -/ChangeLog/1.37/Wed Oct 26 15:14:20 2005//Tr21-5-23 -/Makefile.in.in/1.5/Thu Dec 20 05:49:40 2001/-ko/Tr21-5-23 -/README/1.2/Thu Apr 12 18:22:42 2001//Tr21-5-23 -/autoload.c/1.2/Thu Apr 12 18:22:43 2001//Tr21-5-23 -/check-na.bmp/1.2/Thu Apr 12 18:22:43 2001/-kb/Tr21-5-23 -/check-no.bmp/1.2/Thu Apr 12 18:22:43 2001/-kb/Tr21-5-23 -/check-yes.bmp/1.2/Thu Apr 12 18:22:43 2001/-kb/Tr21-5-23 -/choose-rtarrow.bmp/1.2/Thu Apr 12 18:22:43 2001/-kb/Tr21-5-23 -/choose-spin.bmp/1.2/Thu Apr 12 18:22:43 2001/-kb/Tr21-5-23 -/choose.cc/1.3/Sun Sep 9 04:37:46 2001//Tr21-5-23 -/concat.cc/1.2/Thu Apr 12 18:22:44 2001//Tr21-5-23 -/concat.h/1.2/Thu Apr 12 18:22:44 2001//Tr21-5-23 -/desktop.cc/1.7/Thu Apr 25 18:03:41 2002//Tr21-5-23 -/desktop.h/1.2/Thu Dec 20 05:49:40 2001//Tr21-5-23 -/dialog.cc/1.2/Thu Apr 12 18:22:45 2001//Tr21-5-23 -/dialog.h/1.3/Sun Sep 9 04:37:46 2001//Tr21-5-23 -/diskfull.cc/1.2/Thu Apr 12 18:22:45 2001//Tr21-5-23 -/diskfull.h/1.2/Thu Apr 12 18:22:45 2001//Tr21-5-23 -/download.cc/1.3/Sun Sep 9 04:37:46 2001//Tr21-5-23 -/find.cc/1.2/Thu Apr 12 18:22:45 2001//Tr21-5-23 -/find.h/1.2/Thu Apr 12 18:22:46 2001//Tr21-5-23 -/fromcwd.cc/1.2/Thu Apr 12 18:22:46 2001//Tr21-5-23 -/geturl.cc/1.3/Fri Oct 26 02:42:53 2001//Tr21-5-23 -/geturl.h/1.2/Thu Apr 12 18:22:46 2001//Tr21-5-23 -/gnu.bmp/1.2/Thu Apr 12 18:22:46 2001/-kb/Tr21-5-23 -/hash.cc/1.2/Thu Apr 12 18:22:47 2001//Tr21-5-23 -/hash.h/1.2/Thu Apr 12 18:22:47 2001//Tr21-5-23 -/ini.cc/1.2/Thu Apr 12 18:22:47 2001//Tr21-5-23 -/ini.h/1.3/Sun Sep 9 04:37:47 2001//Tr21-5-23 -/inilex.l/1.2/Thu Apr 12 18:22:47 2001//Tr21-5-23 -/iniparse.h/1.2/Thu Apr 12 18:22:47 2001//Tr21-5-23 -/iniparse.y/1.2/Thu Apr 12 18:22:48 2001//Tr21-5-23 -/init.cc/1.2/Thu Apr 25 18:03:42 2002//Tr21-5-23 -/install.cc/1.4/Thu Apr 25 18:03:42 2002//Tr21-5-23 -/localdir.cc/1.3/Tue Oct 30 05:13:28 2001//Tr21-5-23 -/log.cc/1.3/Tue Oct 30 05:13:28 2001//Tr21-5-23 -/log.h/1.2/Thu Apr 12 18:22:48 2001//Tr21-5-23 -/main.cc/1.3/Sun Sep 9 04:37:47 2001//Tr21-5-23 -/mkdir.cc/1.2/Thu Apr 12 18:22:49 2001//Tr21-5-23 -/mkdir.h/1.2/Thu Apr 12 18:22:49 2001//Tr21-5-23 -/mklink2.c/1.2/Thu Apr 12 18:22:49 2001//Tr21-5-23 -/msg.cc/1.4/Tue Oct 30 05:13:28 2001//Tr21-5-23 -/msg.h/1.2/Thu Apr 12 18:22:50 2001//Tr21-5-23 -/net.cc/1.3/Tue Oct 30 05:13:28 2001//Tr21-5-23 -/netio.cc/1.2/Thu Apr 12 18:22:50 2001//Tr21-5-23 -/netio.h/1.2/Thu Apr 12 18:22:50 2001//Tr21-5-23 -/nio-file.cc/1.2/Thu Apr 12 18:22:50 2001//Tr21-5-23 -/nio-file.h/1.2/Thu Apr 12 18:22:51 2001//Tr21-5-23 -/nio-ftp.cc/1.3/Fri Oct 26 02:42:53 2001//Tr21-5-23 -/nio-ftp.h/1.2/Thu Apr 12 18:22:51 2001//Tr21-5-23 -/nio-http.cc/1.2/Thu Apr 12 18:22:51 2001//Tr21-5-23 -/nio-http.h/1.2/Thu Apr 12 18:22:51 2001//Tr21-5-23 -/nio-ie5.cc/1.4/Sun Sep 9 04:37:47 2001//Tr21-5-23 -/nio-ie5.h/1.2/Thu Apr 12 18:22:52 2001//Tr21-5-23 -/other.cc/1.2/Thu Apr 12 18:22:52 2001//Tr21-5-23 -/port.h/1.2/Thu Apr 12 18:22:52 2001//Tr21-5-23 -/postinstall.cc/1.2/Thu Apr 12 18:22:52 2001//Tr21-5-23 -/regedit.cc/1.4/Tue Sep 25 02:35:32 2001//Tr21-5-23 -/regedit.h/1.4/Tue Sep 25 02:35:32 2001//Tr21-5-23 -/reginfo.h/1.3/Sun Sep 9 04:37:47 2001//Tr21-5-23 -/res.rc/1.9/Thu Apr 25 18:03:43 2002//Tr21-5-23 -/resource.h/1.6/Wed Mar 13 08:52:27 2002//Tr21-5-23 -/root.cc/1.3/Sun Sep 9 04:37:47 2001//Tr21-5-23 -/setup.mak/1.3/Tue Sep 25 02:35:32 2001//Tr21-5-23 -/simpsock.cc/1.2/Thu Apr 12 18:22:54 2001//Tr21-5-23 -/simpsock.h/1.2/Thu Apr 12 18:22:54 2001//Tr21-5-23 -/site.cc/1.2/Thu Apr 12 18:22:54 2001//Tr21-5-23 -/source.cc/1.4/Thu Dec 20 05:49:40 2001//Tr21-5-23 -/splash.cc/1.3/Sun Sep 9 04:37:47 2001//Tr21-5-23 -/state.cc/1.2/Thu Apr 12 18:22:55 2001//Tr21-5-23 -/state.h/1.4/Fri Oct 26 02:42:53 2001//Tr21-5-23 -/tar.cc/1.2/Thu Apr 12 18:22:55 2001//Tr21-5-23 -/tar.h/1.2/Thu Apr 12 18:22:56 2001//Tr21-5-23 -/uninstall.cc/1.3/Thu Dec 20 05:49:40 2001//Tr21-5-23 -/version.h/1.2/Thu Apr 12 18:22:56 2001//Tr21-5-23 -/version.pl/1.2/Thu Apr 12 18:22:56 2001//Tr21-5-23 -/win32.h/1.4/Thu Dec 20 05:49:41 2001//Tr21-5-23 -/xemacs.ico/1.2/Thu Apr 12 18:22:56 2001/-kb/Tr21-5-23 +/ChangeLog/1.43/Sun Dec 18 19:06:35 2005//Tr21-5-24 +/Makefile.in.in/1.7/Tue Nov 22 07:14:39 2005/-ko/Tr21-5-24 +/README/1.2/Thu Apr 12 18:22:42 2001//Tr21-5-24 +/autoload.c/1.2/Thu Apr 12 18:22:43 2001//Tr21-5-24 +/check-na.bmp/1.2/Thu Apr 12 18:22:43 2001/-kb/Tr21-5-24 +/check-no.bmp/1.2/Thu Apr 12 18:22:43 2001/-kb/Tr21-5-24 +/check-yes.bmp/1.2/Thu Apr 12 18:22:43 2001/-kb/Tr21-5-24 +/choose-rtarrow.bmp/1.2/Thu Apr 12 18:22:43 2001/-kb/Tr21-5-24 +/choose-spin.bmp/1.2/Thu Apr 12 18:22:43 2001/-kb/Tr21-5-24 +/choose.cc/1.3/Sun Sep 9 04:37:46 2001//Tr21-5-24 +/concat.cc/1.2/Thu Apr 12 18:22:44 2001//Tr21-5-24 +/concat.h/1.2/Thu Apr 12 18:22:44 2001//Tr21-5-24 +/desktop.cc/1.7/Thu Apr 25 18:03:41 2002//Tr21-5-24 +/desktop.h/1.2/Thu Dec 20 05:49:40 2001//Tr21-5-24 +/dialog.cc/1.2/Thu Apr 12 18:22:45 2001//Tr21-5-24 +/dialog.h/1.3/Sun Sep 9 04:37:46 2001//Tr21-5-24 +/diskfull.cc/1.2/Thu Apr 12 18:22:45 2001//Tr21-5-24 +/diskfull.h/1.2/Thu Apr 12 18:22:45 2001//Tr21-5-24 +/download.cc/1.3/Sun Sep 9 04:37:46 2001//Tr21-5-24 +/find.cc/1.2/Thu Apr 12 18:22:45 2001//Tr21-5-24 +/find.h/1.2/Thu Apr 12 18:22:46 2001//Tr21-5-24 +/fromcwd.cc/1.2/Thu Apr 12 18:22:46 2001//Tr21-5-24 +/geturl.cc/1.3/Fri Oct 26 02:42:53 2001//Tr21-5-24 +/geturl.h/1.2/Thu Apr 12 18:22:46 2001//Tr21-5-24 +/gnu.bmp/1.2/Thu Apr 12 18:22:46 2001/-kb/Tr21-5-24 +/hash.cc/1.2/Thu Apr 12 18:22:47 2001//Tr21-5-24 +/hash.h/1.2/Thu Apr 12 18:22:47 2001//Tr21-5-24 +/ini.cc/1.2/Thu Apr 12 18:22:47 2001//Tr21-5-24 +/ini.h/1.3/Sun Sep 9 04:37:47 2001//Tr21-5-24 +/inilex.l/1.2/Thu Apr 12 18:22:47 2001//Tr21-5-24 +/iniparse.h/1.2/Thu Apr 12 18:22:47 2001//Tr21-5-24 +/iniparse.y/1.2/Thu Apr 12 18:22:48 2001//Tr21-5-24 +/init.cc/1.2/Thu Apr 25 18:03:42 2002//Tr21-5-24 +/install.cc/1.4/Thu Apr 25 18:03:42 2002//Tr21-5-24 +/localdir.cc/1.3/Tue Oct 30 05:13:28 2001//Tr21-5-24 +/log.cc/1.3/Tue Oct 30 05:13:28 2001//Tr21-5-24 +/log.h/1.2/Thu Apr 12 18:22:48 2001//Tr21-5-24 +/main.cc/1.3/Sun Sep 9 04:37:47 2001//Tr21-5-24 +/mkdir.cc/1.2/Thu Apr 12 18:22:49 2001//Tr21-5-24 +/mkdir.h/1.2/Thu Apr 12 18:22:49 2001//Tr21-5-24 +/mklink2.c/1.2/Thu Apr 12 18:22:49 2001//Tr21-5-24 +/msg.cc/1.4/Tue Oct 30 05:13:28 2001//Tr21-5-24 +/msg.h/1.2/Thu Apr 12 18:22:50 2001//Tr21-5-24 +/net.cc/1.3/Tue Oct 30 05:13:28 2001//Tr21-5-24 +/netio.cc/1.2/Thu Apr 12 18:22:50 2001//Tr21-5-24 +/netio.h/1.2/Thu Apr 12 18:22:50 2001//Tr21-5-24 +/nio-file.cc/1.2/Thu Apr 12 18:22:50 2001//Tr21-5-24 +/nio-file.h/1.2/Thu Apr 12 18:22:51 2001//Tr21-5-24 +/nio-ftp.cc/1.3/Fri Oct 26 02:42:53 2001//Tr21-5-24 +/nio-ftp.h/1.2/Thu Apr 12 18:22:51 2001//Tr21-5-24 +/nio-http.cc/1.2/Thu Apr 12 18:22:51 2001//Tr21-5-24 +/nio-http.h/1.2/Thu Apr 12 18:22:51 2001//Tr21-5-24 +/nio-ie5.cc/1.4/Sun Sep 9 04:37:47 2001//Tr21-5-24 +/nio-ie5.h/1.2/Thu Apr 12 18:22:52 2001//Tr21-5-24 +/other.cc/1.2/Thu Apr 12 18:22:52 2001//Tr21-5-24 +/port.h/1.2/Thu Apr 12 18:22:52 2001//Tr21-5-24 +/postinstall.cc/1.2/Thu Apr 12 18:22:52 2001//Tr21-5-24 +/regedit.cc/1.4/Tue Sep 25 02:35:32 2001//Tr21-5-24 +/regedit.h/1.4/Tue Sep 25 02:35:32 2001//Tr21-5-24 +/reginfo.h/1.3/Sun Sep 9 04:37:47 2001//Tr21-5-24 +/res.rc/1.9/Thu Apr 25 18:03:43 2002//Tr21-5-24 +/resource.h/1.6/Wed Mar 13 08:52:27 2002//Tr21-5-24 +/root.cc/1.3/Sun Sep 9 04:37:47 2001//Tr21-5-24 +/setup.mak/1.3/Tue Sep 25 02:35:32 2001//Tr21-5-24 +/simpsock.cc/1.2/Thu Apr 12 18:22:54 2001//Tr21-5-24 +/simpsock.h/1.2/Thu Apr 12 18:22:54 2001//Tr21-5-24 +/site.cc/1.2/Thu Apr 12 18:22:54 2001//Tr21-5-24 +/source.cc/1.4/Thu Dec 20 05:49:40 2001//Tr21-5-24 +/splash.cc/1.3/Sun Sep 9 04:37:47 2001//Tr21-5-24 +/state.cc/1.2/Thu Apr 12 18:22:55 2001//Tr21-5-24 +/state.h/1.4/Fri Oct 26 02:42:53 2001//Tr21-5-24 +/tar.cc/1.2/Thu Apr 12 18:22:55 2001//Tr21-5-24 +/tar.h/1.2/Thu Apr 12 18:22:56 2001//Tr21-5-24 +/uninstall.cc/1.3/Thu Dec 20 05:49:40 2001//Tr21-5-24 +/version.h/1.2/Thu Apr 12 18:22:56 2001//Tr21-5-24 +/version.pl/1.2/Thu Apr 12 18:22:56 2001//Tr21-5-24 +/win32.h/1.4/Thu Dec 20 05:49:41 2001//Tr21-5-24 +/xemacs.ico/1.2/Thu Apr 12 18:22:56 2001/-kb/Tr21-5-24 D diff -urN 21.5.23/netinstall/CVS/Tag 21.5.24/netinstall/CVS/Tag --- 21.5.23/netinstall/CVS/Tag Mon Dec 19 04:20:52 2005 +++ 21.5.24/netinstall/CVS/Tag Mon Dec 19 04:23:15 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/netinstall/ChangeLog 21.5.24/netinstall/ChangeLog --- 21.5.23/netinstall/ChangeLog Thu Oct 27 00:14:20 2005 +++ 21.5.24/netinstall/ChangeLog Mon Dec 19 04:06:35 2005 @@ -1,3 +1,22 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-11-22 Ben Wing + + * Makefile.in.in: + Ignore errors from rm during clean. + +2005-11-13 Ben Wing + + * Makefile.in.in: + Add targets distclean-noconfig, realclean-noconfig, extraclean-noconfig. + Do some refactoring for cleanliness. + +2005-11-06 Stephen J. Turnbull + + * ChangeLog: Nuke useless CVS keyword. + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. @@ -523,7 +542,4 @@ 2000-11-12 Andy Piper * all: port from cygwin setup. - -%%% $Id: ChangeLog,v 1.37 2005/10/26 15:14:20 stephent Exp $ -$Revision: 1.37 $ diff -urN 21.5.23/netinstall/Makefile.in.in 21.5.24/netinstall/Makefile.in.in --- 21.5.23/netinstall/Makefile.in.in Thu Dec 20 14:49:40 2001 +++ 21.5.24/netinstall/Makefile.in.in Tue Nov 22 16:14:39 2005 @@ -1,4 +1,5 @@ ## Copyright (c) 2000, Red Hat, Inc. +## Copyright (C) 2005 Ben Wing. ## ## 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 @@ -199,19 +200,23 @@ mv lex.yy.c inilex.c .PHONY: mostlyclean clean distclean realclean extraclean - +.PHONY: distclean-noconfig realclean-noconfig extraclean-noconfig mostlyclean: - $(RM) *.o *.i *.ini core $(PROGS) - + -$(RM) *.o *.i *.ini core clean: mostlyclean - -distclean: clean - $(RM) GNUmakefile Makefile Makefile.in TAGS - + -$(RM) $(PROGS) +distclean-noconfig: clean + -$(RM) TAGS +## This is used in making a distribution. +## Do not use it on development directories! +distclean: distclean-noconfig + -$(RM) GNUmakefile Makefile Makefile.in +realclean-noconfig: distclean-noconfig realclean: distclean - -extraclean: distclean - $(RM) *~ \#* +extraclean-noconfig: realclean-noconfig + -$(RM) *~ \#* +extraclean: realclean + -$(RM) *~ \#* choose.o: choose.cc win32.h dialog.h resource.h state.h ini.h concat.h \ msg.h log.h find.h reginfo.h diff -urN 21.5.23/nt/CVS/Entries 21.5.24/nt/CVS/Entries --- 21.5.23/nt/CVS/Entries Mon Dec 19 04:20:52 2005 +++ 21.5.24/nt/CVS/Entries Mon Dec 19 04:23:15 2005 @@ -1,27 +1,27 @@ -/.cvsignore/1.7/Wed Nov 27 07:15:09 2002//Tr21-5-23 -/ChangeLog/1.191/Wed Oct 26 15:14:28 2005//Tr21-5-23 -/Emacs.ad.h/1.1/Mon Feb 24 00:49:23 1997//Tr21-5-23 -/Installation.el/1.1/Tue Mar 17 06:53:55 1998//Tr21-5-23 -/README/1.27/Mon Sep 26 08:13:00 2005//Tr21-5-23 -/Win32.cf/1.1/Fri Jun 6 00:58:11 1997//Tr21-5-23 -/Xmd.patch/1.2/Thu Apr 12 18:22:58 2001//Tr21-5-23 -/Xpm.def/1.2/Thu Apr 12 18:22:58 2001//Tr21-5-23 -/ad2c.sed/1.1/Mon Feb 24 00:37:39 1997//Tr21-5-23 -/compface.mak/1.5/Sat Apr 28 21:04:49 2001//Tr21-5-23 -/config.inc.samp/1.22/Mon Sep 26 08:13:00 2005//Tr21-5-23 -/file.ico/1.1/Sat Jun 20 00:58:39 1998/-kb/Tr21-5-23 -/lisp.ico/1.1/Sat Jun 20 00:58:39 1998/-kb/Tr21-5-23 -/make-build-dir/1.1/Sat Mar 1 07:25:32 2003//Tr21-5-23 -/make-nt-depend/1.3/Sat Mar 1 07:25:32 2003//Tr21-5-23 -/minitar.c/1.9/Mon Sep 26 08:13:00 2005//Tr21-5-23 -/paths.h/1.1/Mon Feb 24 00:49:23 1997//Tr21-5-23 -/site.def/1.1/Tue Jun 3 05:54:16 1997//Tr21-5-23 -/tiff.mak/1.2/Tue Sep 29 21:19:37 1998//Tr21-5-23 -/x11.patch/1.1/Sun Jul 6 19:10:22 1997//Tr21-5-23 -/xemacs.dsp/1.7/Fri Apr 8 23:11:07 2005//Tr21-5-23 -/xemacs.dsw/1.2/Thu Apr 12 18:23:00 2001//Tr21-5-23 -/xemacs.ico/1.1/Sun Dec 21 06:29:57 1997/-kb/Tr21-5-23 -/xemacs.mak/1.116/Mon Sep 26 08:13:00 2005//Tr21-5-23 -/xemacs.rc/1.3/Thu Apr 12 18:23:01 2001//Tr21-5-23 -/xpm.mak/1.3/Tue Apr 23 00:44:30 2002//Tr21-5-23 +/.cvsignore/1.7/Wed Nov 27 07:15:09 2002//Tr21-5-24 +/ChangeLog/1.197/Sun Dec 18 19:06:44 2005//Tr21-5-24 +/Emacs.ad.h/1.1/Mon Feb 24 00:49:23 1997//Tr21-5-24 +/Installation.el/1.1/Tue Mar 17 06:53:55 1998//Tr21-5-24 +/README/1.27/Mon Sep 26 08:13:00 2005//Tr21-5-24 +/Win32.cf/1.1/Fri Jun 6 00:58:11 1997//Tr21-5-24 +/Xmd.patch/1.2/Thu Apr 12 18:22:58 2001//Tr21-5-24 +/Xpm.def/1.2/Thu Apr 12 18:22:58 2001//Tr21-5-24 +/ad2c.sed/1.1/Mon Feb 24 00:37:39 1997//Tr21-5-24 +/compface.mak/1.5/Sat Apr 28 21:04:49 2001//Tr21-5-24 +/config.inc.samp/1.23/Fri Nov 25 01:41:50 2005//Tr21-5-24 +/file.ico/1.1/Sat Jun 20 00:58:39 1998/-kb/Tr21-5-24 +/lisp.ico/1.1/Sat Jun 20 00:58:39 1998/-kb/Tr21-5-24 +/make-build-dir/1.1/Sat Mar 1 07:25:32 2003//Tr21-5-24 +/make-nt-depend/1.3/Sat Mar 1 07:25:32 2003//Tr21-5-24 +/minitar.c/1.9/Mon Sep 26 08:13:00 2005//Tr21-5-24 +/paths.h/1.1/Mon Feb 24 00:49:23 1997//Tr21-5-24 +/site.def/1.1/Tue Jun 3 05:54:16 1997//Tr21-5-24 +/tiff.mak/1.2/Tue Sep 29 21:19:37 1998//Tr21-5-24 +/x11.patch/1.1/Sun Jul 6 19:10:22 1997//Tr21-5-24 +/xemacs.dsp/1.8/Fri Nov 25 01:41:50 2005//Tr21-5-24 +/xemacs.dsw/1.2/Thu Apr 12 18:23:00 2001//Tr21-5-24 +/xemacs.ico/1.1/Sun Dec 21 06:29:57 1997/-kb/Tr21-5-24 +/xemacs.mak/1.119/Fri Nov 25 01:41:50 2005//Tr21-5-24 +/xemacs.rc/1.3/Thu Apr 12 18:23:01 2001//Tr21-5-24 +/xpm.mak/1.3/Tue Apr 23 00:44:30 2002//Tr21-5-24 D diff -urN 21.5.23/nt/CVS/Tag 21.5.24/nt/CVS/Tag --- 21.5.23/nt/CVS/Tag Mon Dec 19 04:20:52 2005 +++ 21.5.24/nt/CVS/Tag Mon Dec 19 04:23:15 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/nt/ChangeLog 21.5.24/nt/ChangeLog --- 21.5.23/nt/ChangeLog Thu Oct 27 00:14:28 2005 +++ 21.5.24/nt/ChangeLog Mon Dec 19 04:06:44 2005 @@ -1,3 +1,30 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-11-21 Marcus Crestani + + Incremental Garbage Collector + + * config.inc.samp: Add NEW_GC option. + * xemacs.dsp: Add files gc.c, gc.h, vdb.c, vdb.h, and vdb-win32.c. + * xemacs.mak: Add NEW_GC option; if NEW_GC, turn on KKCC and + MC_ALLOC. + +2005-11-08 Marcus Crestani + + * xemacs.mak: + * xemacs.mak ($(OUTDIR)): + * xemacs.mak (all): Fix build output directory structure. + +2005-10-28 Ben Wing + + * xemacs.mak (HAVE_BIGNUM): + Set default values for BUILD_BIGNUM_MINGW_SHARED, + BUILD_BIGNUM_NATIVE_SHARED to 0 to avoid make problems. + * xemacs.mak (OPT_INCLUDES): + Don't look in gmp-dynamic, gmp-static; the include file doesn't vary. + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. diff -urN 21.5.23/nt/config.inc.samp 21.5.24/nt/config.inc.samp --- 21.5.23/nt/config.inc.samp Mon Sep 26 17:13:00 2005 +++ 21.5.24/nt/config.inc.samp Fri Nov 25 10:41:50 2005 @@ -223,6 +223,9 @@ # Set this to use the new experimental allocator routines MC_ALLOC=1 +# Set this to use the new experimental incremental garbage collector routines +NEW_GC=0 + # Set this to turn on the use of the union type, which gets you improved # type checking of Lisp_Objects -- they're declared as unions instead of # ints, and so places where a Lisp_Object is mistakenly passed to a routine diff -urN 21.5.23/nt/installer/CVS/Tag 21.5.24/nt/installer/CVS/Tag --- 21.5.23/nt/installer/CVS/Tag Mon Dec 19 04:20:52 2005 +++ 21.5.24/nt/installer/CVS/Tag Mon Dec 19 04:23:16 2005 @@ -1 +1 @@ -Tr21-5-23 +Tr21-5-24 diff -urN 21.5.23/nt/installer/Wise/CVS/Entries 21.5.24/nt/installer/Wise/CVS/Entries --- 21.5.23/nt/installer/Wise/CVS/Entries Mon Dec 19 04:20:52 2005 +++ 21.5.24/nt/installer/Wise/CVS/Entries Mon Dec 19 04:23:17 2005 @@ -1,17 +1,17 @@ -/ChangeLog/1.26/Wed Oct 26 15:14:35 2005//Tr21-5-23 -/README/1.2/Thu Apr 12 18:23:10 2001//Tr21-5-23 -/dirs.py/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-23 -/display-readme.dlg/1.2/Wed Nov 17 02:32:16 2004//Tr21-5-23 -/el.reg/1.2/Thu Apr 12 18:23:11 2001//Tr21-5-23 -/filelist.py/1.2/Thu Apr 12 18:23:13 2001//Tr21-5-23 -/files.py/1.2/Thu Apr 12 18:23:13 2001//Tr21-5-23 -/gnu.bmp/1.2/Thu Apr 12 18:23:13 2001/-kb/Tr21-5-23 -/libs.dlg/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-23 -/packages.py/1.2/Thu Apr 12 18:23:13 2001//Tr21-5-23 -/pre_wise.py/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-23 -/type.dlg/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-23 -/version.py/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-23 -/welcome.dlg/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-23 -/xemacs-beta.bmp/1.2/Thu Apr 12 18:23:15 2001/-kb/Tr21-5-23 -/xemacs.tmpl/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-23 +/ChangeLog/1.29/Sun Dec 18 19:06:52 2005//Tr21-5-24 +/README/1.2/Thu Apr 12 18:23:10 2001//Tr21-5-24 +/dirs.py/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-24 +/display-readme.dlg/1.2/Wed Nov 17 02:32:16 2004//Tr21-5-24 +/el.reg/1.2/Thu Apr 12 18:23:11 2001//Tr21-5-24 +/filelist.py/1.2/Thu Apr 12 18:23:13 2001//Tr21-5-24 +/files.py/1.2/Thu Apr 12 18:23:13 2001//Tr21-5-24 +/gnu.bmp/1.2/Thu Apr 12 18:23:13 2001/-kb/Tr21-5-24 +/libs.dlg/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-24 +/packages.py/1.2/Thu Apr 12 18:23:13 2001//Tr21-5-24 +/pre_wise.py/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-24 +/type.dlg/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-24 +/version.py/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-24 +/welcome.dlg/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-24 +/xemacs-beta.bmp/1.2/Thu Apr 12 18:23:15 2001/-kb/Tr21-5-24 +/xemacs.tmpl/1.3/Fri Nov 5 23:11:42 2004//Tr21-5-24 D diff -urN 21.5.23/nt/installer/Wise/CVS/Tag 21.5.24/nt/installer/Wise/CVS/Tag --- 21.5.23/nt/installer/Wise/CVS/Tag Mon Dec 19 04:20:52 2005 +++ 21.5.24/nt/installer/Wise/CVS/Tag Mon Dec 19 04:23:17 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/nt/installer/Wise/ChangeLog 21.5.24/nt/installer/Wise/ChangeLog --- 21.5.23/nt/installer/Wise/ChangeLog Thu Oct 27 00:14:35 2005 +++ 21.5.24/nt/installer/Wise/ChangeLog Mon Dec 19 04:06:52 2005 @@ -1,3 +1,7 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. diff -urN 21.5.23/nt/xemacs.dsp 21.5.24/nt/xemacs.dsp --- 21.5.23/nt/xemacs.dsp Sat Apr 9 08:11:07 2005 +++ 21.5.24/nt/xemacs.dsp Fri Nov 25 10:41:50 2005 @@ -555,6 +555,14 @@ # End Source File # Begin Source File +SOURCE=..\src\gc.c +# End Source File +# Begin Source File + +SOURCE=..\src\gc.h +# End Source File +# Begin Source File + SOURCE=..\src\general.c # End Source File # Begin Source File @@ -1336,6 +1344,18 @@ # Begin Source File SOURCE=..\src\universe.h +# End Source File +# Begin Source File + +SOURCE=..\src\vdb.h +# End Source File +# Begin Source File + +SOURCE=..\src\vdb.c +# End Source File +# Begin Source File + +SOURCE=..\src\vdb-win32.c # End Source File # Begin Source File diff -urN 21.5.23/nt/xemacs.mak 21.5.24/nt/xemacs.mak --- 21.5.23/nt/xemacs.mak Mon Sep 26 17:13:00 2005 +++ 21.5.24/nt/xemacs.mak Fri Nov 25 10:41:50 2005 @@ -97,6 +97,8 @@ ########################### Figure out current version of VC++. +!if [if not exist $(OUTDIR) mkdir "$(OUTDIR)"] +!endif !if [echo MSC_VER=_MSC_VER > $(OUTDIR)\vcversion.c] !endif !if [cl /nologo /EP $(OUTDIR)\vcversion.c > $(OUTDIR)\vcversion.tmp] @@ -171,6 +173,12 @@ !if !defined(HAVE_BIGNUM) HAVE_BIGNUM=0 !endif +!if !defined(BUILD_BIGNUM_MINGW_SHARED) +BUILD_BIGNUM_MINGW_SHARED=0 +!endif +!if !defined(BUILD_BIGNUM_NATIVE_SHARED) +BUILD_BIGNUM_NATIVE_SHARED=0 +!endif !if !defined(OPTIMIZED_BUILD) OPTIMIZED_BUILD=1 !endif @@ -210,6 +218,9 @@ !if !defined(MC_ALLOC) MC_ALLOC=0 !endif +!if !defined(NEW_GC) +NEW_GC=0 +!endif !if !defined(USE_UNION_TYPE) USE_UNION_TYPE=0 !endif @@ -564,10 +575,10 @@ !else !if $(BUILD_BIGNUM_NATIVE_SHARED) OPT_LIBS=$(OPT_LIBS) "$(BIGNUM_DIR)\gmp-dynamic\gmp.lib" -OPT_INCLUDES=$(OPT_INCLUDES) -I"$(BIGNUM_DIR)\gmp-dynamic" +OPT_INCLUDES=$(OPT_INCLUDES) -I"$(BIGNUM_DIR)" !else OPT_LIBS=$(OPT_LIBS) "$(BIGNUM_DIR)\gmp-static\gmp.lib" -OPT_INCLUDES=$(OPT_INCLUDES) -I"$(BIGNUM_DIR)\gmp-static" +OPT_INCLUDES=$(OPT_INCLUDES) -I"$(BIGNUM_DIR)" !endif !endif OPT_OBJS=$(OPT_OBJS) $(OUTDIR)\number-gmp.obj $(OUTDIR)\number.obj @@ -631,9 +642,17 @@ OPT_OBJS=$(OPT_OBJS) $(OUTDIR)\unexnt.obj !endif +!if $(NEW_GC) +OPT_DEFINES=$(OPT_DEFINES) -DNEW_GC +OPT_OBJS=$(OPT_OBJS) $(OUTDIR)\vdb.obj $(OUTDIR)\vdb-win32.obj +USE_KKCC=1 +MC_ALLOC=1 +!endif + !if $(USE_KKCC) OPT_DEFINES=$(OPT_DEFINES) -DUSE_KKCC !endif + !if $(MC_ALLOC) OPT_DEFINES=$(OPT_DEFINES) -DMC_ALLOC OPT_OBJS=$(OPT_OBJS) $(OUTDIR)\mc-alloc.obj @@ -840,6 +859,7 @@ $(OUTDIR)\fns.obj \ $(OUTDIR)\font-lock.obj \ $(OUTDIR)\frame.obj \ + $(OUTDIR)\gc.obj \ $(OUTDIR)\general.obj \ $(OUTDIR)\getloadavg.obj \ $(OUTDIR)\glyphs.obj \ @@ -930,7 +950,7 @@ # Whether to use dependency information generated by make-src-depend # !if $(DEPEND) && exist("$(SRC)\depend") -! if [if not exist $(OUTDIR)\nul mkdir "$(OUTDIR)"] +! if [if not exist $(OUTDIR) mkdir "$(OUTDIR)"] ! endif # This perl script used to be inline but that caused too many quoting problems ! if [perl $(NT)\make-nt-depend -s=$(SRC) -c=$(NT) -o=$(OUTDIR) < $(SRC)\depend > $(OUTDIR)\depend.tmp] @@ -947,18 +967,18 @@ !if $(SEPARATE_BUILD) # #### `if not exist' does not like the quotes around file names. # But what if one of them has spaces? Fucking Microsoft! -! if [if not exist $(BLDROOT)\nul mkdir "$(BLDROOT)"] +! if [if not exist $(BLDROOT) mkdir "$(BLDROOT)"] ! endif -! if [if not exist $(BLDLIB_SRC)\nul mkdir "$(BLDLIB_SRC)"] +! if [if not exist $(BLDLIB_SRC) mkdir "$(BLDLIB_SRC)"] ! endif -! if [if not exist $(BLDNT)\nul mkdir "$(BLDNT)"] +! if [if not exist $(BLDNT) mkdir "$(BLDNT)"] ! endif -! if [if not exist $(OUTDIR)\nul mkdir "$(OUTDIR)"] +! if [if not exist $(OUTDIR) mkdir "$(OUTDIR)"] ! endif -! if [if not exist $(BLDSRC)\nul mkdir "$(BLDSRC)"] +! if [if not exist $(BLDSRC) mkdir "$(BLDSRC)"] ! endif # No point. -# ! if [if not exist "$(BLDROOT)\nul" mkdir "$(BLDROOT)"] +# ! if [if not exist "$(BLDROOT)" mkdir "$(BLDROOT)"] # ! endif !endif @@ -981,7 +1001,7 @@ ###################### Generated source files -$(OUTDIR)\nul: +$(OUTDIR): -@mkdir $(OUTDIR) XEMACS_INCLUDES=\ @@ -1251,6 +1271,9 @@ !if $(MC_ALLOC) Using new experimental allocator. !endif +!if $(NEW_GC) + Using new experimental incremental garbage collector. +!endif <> 1)] - type=$Lisp_Type_Int - else - type=$[(int)(((void*)$obj) & $dbg_typemask)] - if test $type = $Lisp_Type_Char; then - val=$[(void*)(long)(((unsigned long long)($obj & $dbg_valmask)) >> $dbg_gctypebits)] - else - # It's a record pointer - val=$[(void*)$obj] - if test "$val" = "(nil)"; then type=null_pointer; fi - fi - fi - - if test $type = $Lisp_Type_Record; then - lheader="((struct lrecord_header *) $val)" - lrecord_type=$[(enum lrecord_type) $lheader->type] - imp=$[(void*)(`alloc.c`lrecord_implementations_table[$lheader->type])] - else - lheader="((struct lrecord_header *) -1)" - lrecord_type=-1 - imp="0xdeadbeef" - fi - # printvar obj val type imp -} - -function xint { - decode_object "$*" - print (long) ($val) -} - -document xtype << 'end' -Usage: xtype lisp_object -Print the Lisp type of a lisp object. -end - -function xtype { - decode_object "$*" - if test $type = $Lisp_Type_Int; then echo "int" - elif test $type = $Lisp_Type_Char; then echo "char" - elif test $type = null_pointer; then echo "null_pointer" - else - echo "record type with name: $[((struct lrecord_implementation *)$imp)->name]" - fi -} - -function lisp-shadows { - run -batch -vanilla -f list-load-path-shadows -} - -function environment-to-run-temacs { - unset EMACSLOADPATH - export EMACSBOOTSTRAPLOADPATH=../lisp/:.. - export EMACSBOOTSTRAPMODULEPATH=../modules/:.. -} - -document run-temacs << 'end' -Usage: run-temacs -Run temacs interactively, like xemacs. -Use this with debugging tools (like purify) that cannot deal with dumping, -or when temacs builds successfully, but xemacs does not. -end - -function run-temacs { - environment-to-run-temacs - run -nd -batch -l ../lisp/loadup.el run-temacs -q ${1+"$@"} -} - -document check-xemacs << 'end' -Usage: check-xemacs -Run the test suite. Equivalent to 'make check'. -end - -function check-xemacs { - run -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated -} - -document check-temacs << 'end' -Usage: check-temacs -Run the test suite on temacs. Equivalent to 'make check-temacs'. -Use this with debugging tools (like purify) that cannot deal with dumping, -or when temacs builds successfully, but xemacs does not. -end - -function check-temacs { - run-temacs -q -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated -} - -document update-elc << 'end' -Usage: update-elc -Run the core lisp byte compilation part of the build procedure. -Use when debugging temacs, not xemacs! -Use this when temacs builds successfully, but xemacs does not. -end - -function update-elc { - environment-to-run-temacs - run -nd -batch -l ../lisp/update-elc.el -} - -document dmp << 'end' -Usage: dmp -Run the dumping part of the build procedure. -Use when debugging temacs, not xemacs! -Use this when temacs builds successfully, but xemacs does not. -end - -function dmp { - environment-to-run-temacs - run -nd -batch -l ../lisp/loadup.el dump -} - -function pstruct { # pstruct foo.c struct-name - module "$1" > /dev/null - type_ptr="((struct $2 *) $val)" - print $type_ptr - print *$type_ptr -} - -document pobj << 'end' -Usage: pobj lisp_object -Print the internal C representation of a Lisp Object. -end - -function pobj { - decode_object $1 - if test $type = $Lisp_Type_Int; then - print -f"Integer: %d" $val - elif test $type = $Lisp_Type_Char; then - if test $[$val > 32 && $val < 128] = 1; then - print -f"Char: %c" $val - else - print -f"Char: %d" $val - fi - elif test $lrecord_type = lrecord_type_string; then - pstruct alloc.c Lisp_String - elif test $lrecord_type = lrecord_type_cons; then - pstruct alloc.c Lisp_Cons - elif test $lrecord_type = lrecord_type_symbol; then - pstruct symbols.c Lisp_Symbol - echo "Symbol name: $[(char *)($type_ptr->name->data)]" - elif test $lrecord_type = lrecord_type_vector; then - pstruct alloc.c Lisp_Vector - echo "Vector of length $[$type_ptr->size]" - elif test $lrecord_type = lrecord_type_bit_vector; then - pstruct fns.c Lisp_Bit_Vector - elif test $lrecord_type = lrecord_type_buffer; then - pstruct buffer.c buffer - elif test $lrecord_type = lrecord_type_char_table; then - pstruct chartab.c Lisp_Char_Table - elif test $lrecord_type = lrecord_type_char_table_entry; then - pstruct chartab.c Lisp_Char_Table_Entry - elif test $lrecord_type = lrecord_type_charset; then - pstruct mule-charset.c Lisp_Charset - elif test $lrecord_type = lrecord_type_coding_system; then - pstruct file-coding.c Lisp_Coding_System - elif test $lrecord_type = lrecord_type_color_instance; then - pstruct objects.c Lisp_Color_Instance - elif test $lrecord_type = lrecord_type_command_builder; then - pstruct event-stream.c command_builder - elif test $lrecord_type = lrecord_type_compiled_function; then - pstruct bytecode.c Lisp_Compiled_Function - elif test $lrecord_type = lrecord_type_console; then - pstruct console.c console - elif test $lrecord_type = lrecord_type_database; then - pstruct database.c Lisp_Database - elif test $lrecord_type = lrecord_type_device; then - pstruct device.c device - elif test $lrecord_type = lrecord_type_event; then - pstruct events.c Lisp_Event - elif test $lrecord_type = lrecord_type_extent; then - pstruct extents.c extent - elif test $lrecord_type = lrecord_type_extent_auxiliary; then - pstruct extents.c extent_auxiliary - elif test $lrecord_type = lrecord_type_extent_info; then - pstruct extents.c extent_info - elif test $lrecord_type = lrecord_type_face; then - pstruct faces.c Lisp_Face - elif test $lrecord_type = lrecord_type_float; then - pstruct floatfns.c Lisp_Float - elif test $lrecord_type = lrecord_type_font_instance; then - pstruct objects.c Lisp_Font_Instance - elif test $lrecord_type = lrecord_type_frame; then - pstruct frame.c frame - elif test $lrecord_type = lrecord_type_glyph; then - pstruct glyph.c Lisp_Glyph - elif test $lrecord_type = lrecord_type_gui_item; then - pstruct gui.c Lisp_Gui_Item - elif test $lrecord_type = lrecord_type_hash_table; then - pstruct elhash.c Lisp_Hash_Table - elif test $lrecord_type = lrecord_type_image_instance; then - pstruct glyphs.c Lisp_Image_Instance - elif test $lrecord_type = lrecord_type_keymap; then - pstruct keymap.c Lisp_Keymap - elif test $lrecord_type = lrecord_type_lcrecord_list; then - pstruct alloc.c lcrecord_list - elif test $lrecord_type = lrecord_type_ldap; then - pstruct ldap.c Lisp_LDAP - elif test $lrecord_type = lrecord_type_lstream; then - pstruct lstream.c lstream - elif test $lrecord_type = lrecord_type_marker; then - pstruct marker.c Lisp_Marker - elif test $lrecord_type = lrecord_type_opaque; then - pstruct opaque.c Lisp_Opaque - elif test $lrecord_type = lrecord_type_opaque_ptr; then - pstruct opaque.c Lisp_Opaque_Ptr - elif test $lrecord_type = lrecord_type_popup_data; then - pstruct gui-x.c popup_data - elif test $lrecord_type = lrecord_type_process; then - pstruct process.c Lisp_Process - elif test $lrecord_type = lrecord_type_range_table; then - pstruct rangetab.c Lisp_Range_Table - elif test $lrecord_type = lrecord_type_specifier; then - pstruct specifier.c Lisp_Specifier - elif test $lrecord_type = lrecord_type_subr; then - pstruct eval.c Lisp_Subr - elif test $lrecord_type = lrecord_type_symbol_value_buffer_local; then - pstruct symbols.c symbol_value_buffer_local - elif test $lrecord_type = lrecord_type_symbol_value_forward; then - pstruct symbols.c symbol_value_forward - elif test $lrecord_type = lrecord_type_symbol_value_lisp_magic; then - pstruct symbols.c symbol_value_lisp_magic - elif test $lrecord_type = lrecord_type_symbol_value_varalias; then - pstruct symbols.c symbol_value_varalias - elif test $lrecord_type = lrecord_type_timeout; then - pstruct event-stream.c Lisp_Timeout - elif test $lrecord_type = lrecord_type_toolbar_button; then - pstruct toolbar.c toolbar_button - elif test $lrecord_type = lrecord_type_tooltalk_message; then - pstruct tooltalk.c Lisp_Tooltalk_Message - elif test $lrecord_type = lrecord_type_tooltalk_pattern; then - pstruct tooltalk.c Lisp_Tooltalk_Pattern - elif test $lrecord_type = lrecord_type_weak_list; then - pstruct data.c weak_list - elif test $lrecord_type = lrecord_type_window; then - pstruct window.c window - elif test $lrecord_type = lrecord_type_window_configuration; then - pstruct window.c window_config - elif test "$type" = "null_pointer"; then - echo "Lisp Object is a null pointer!!" - else - echo "Unknown Lisp Object type" - print $1 - fi -} - -dbxenv suppress_startup_message 4.0 -# dbxenv mt_watchpoints on - -function dp_core { - print ((struct x_frame *)(((struct frame*)(Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget->core -} - -# Barf! -function print_shell { - print *(`frame-x.c`TopLevelShellRec*) (((struct `frame-x.c`x_frame*) (((struct `frame-x.c`frame*) (Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget) -} - -# ------------------------------------------------------------- -# functions to test the debugging support itself. -# If you change this file, make sure the following still work... -# ------------------------------------------------------------- -function test_xtype { - function doit { echo -n "$1: "; xtype "$1"; } - test_various_objects -} - -function test_pobj { - function doit { echo '==============================='; echo -n "$1: "; pobj "$1"; } - test_various_objects -} - -function test_various_objects { - doit Vemacs_major_version - doit Vhelp_char - doit Qnil - doit Qunbound - doit Vobarray - doit Vall_weak_lists - doit Vxemacs_codename -} diff -urN 21.5.23/src/.dbxrc.in 21.5.24/src/.dbxrc.in --- 21.5.23/src/.dbxrc.in Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/.dbxrc.in Fri Nov 25 10:41:53 2005 @@ -0,0 +1,395 @@ +## -*- ksh -*- +## Copyright (C) 1998 Free Software Foundation, Inc. + +## This file is part of XEmacs. + +## XEmacs 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, or (at your option) any +## later version. + +## XEmacs 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 XEmacs; see the file COPYING. If not, write to +## the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +## Boston, MA 02111-1307, USA. + +## Author: Martin Buchholz + +## You can use this file to debug XEmacs using Sun WorkShop's dbx. + +## Some functions defined here require a running process, but most +## don't. Considerable effort has been expended to this end. + +## Since this file is called `.dbxrc', it will be read by dbx +## automatically when dbx is run in the build directory, which is where +## developers usually debug their xemacs. + +## See also the comments in .gdbinit. + +## See also the question of the XEmacs FAQ, titled +## "How to Debug an XEmacs problem with a debugger". + +## gdb sources the ./.gdbinit in _addition_ to ~/.gdbinit. +## But dbx does _not_ source ~/.dbxrc if it found ./.dbxrc. +## So we simulate the gdb algorithm by doing it ourselves here. + +#define NOT_C_CODE +#include "config.h" + +if test -r $HOME/.dbxrc; then . $HOME/.dbxrc; fi + +dbxenv language_mode ansic + +ignore POLL +ignore IO + +#ifdef VDB_POSIX +ignore SIGSEGV SIGBUS +#endif + +document lbt << 'end' +Usage: lbt +Print the current Lisp stack trace. +Requires a running xemacs process. +end + +function lbt { + call debug_backtrace() +} + +document ldp << 'end' +Usage: ldp lisp_object +Print a Lisp Object value using the Lisp printer. +Requires a running xemacs process. +end + +function ldp { + call debug_print ($1); +} + +Lisp_Type_Int=-2 + +## A bug in dbx prevents string variables from having values beginning with `-'!! +function XEmacsInit { + function ToInt { eval "$1=\$[(int) \`alloc.c\`$1]"; } + ToInt dbg_USE_UNION_TYPE + ToInt Lisp_Type_Char + ToInt Lisp_Type_Record + ToInt dbg_valbits + ToInt dbg_gctypebits + function ToLong { eval "$1=\$[(\`alloc.c\`unsigned long) \`alloc.c\`$1]"; } + ToLong dbg_valmask + ToLong dbg_typemask + xemacs_initted=yes +} + +function printvar { + for i in $*; do eval "echo $i=\$$i"; done +} + +document decode_object << 'end' +Usage: decode_object lisp_object +Extract implementation information from a Lisp Object. +Defines variables $val, $type and $imp. +end + +## Various dbx bugs cause ugliness in following code +function decode_object { + if test -z "$xemacs_initted"; then XEmacsInit; fi; + if test $dbg_USE_UNION_TYPE = 1; then + ## Repeat after me... dbx sux, dbx sux, dbx sux... + ## Allow both `pobj Qnil' and `pobj 0x82746834' to work + case $(whatis $1) in + *Lisp_Object*) obj="$[(`alloc.c`unsigned long)(($1).i)]";; + *) obj="$[(`alloc.c`unsigned long)($1)]";; + esac + else + obj="$[(`alloc.c`unsigned long)($1)]"; + fi + if test $[(int)($obj & 1)] = 1; then + ## It's an int + val=$[(long)(((unsigned long long)$obj) >> 1)] + type=$Lisp_Type_Int + else + type=$[(int)(((void*)$obj) & $dbg_typemask)] + if test $type = $Lisp_Type_Char; then + val=$[(void*)(long)(((unsigned long long)($obj & $dbg_valmask)) >> $dbg_gctypebits)] + else + ## It's a record pointer + val=$[(void*)$obj] + if test "$val" = "(nil)"; then type=null_pointer; fi + fi + fi + + if test $type = $Lisp_Type_Record; then + lheader="((struct lrecord_header *) $val)" + lrecord_type=$[(enum lrecord_type) $lheader->type] + imp=$[(void*)(`alloc.c`lrecord_implementations_table[$lheader->type])] + else + lheader="((struct lrecord_header *) -1)" + lrecord_type=-1 + imp="0xdeadbeef" + fi + ## printvar obj val type imp +} + +function xint { + decode_object "$*" + print (long) ($val) +} + +document xtype << 'end' +Usage: xtype lisp_object +Print the Lisp type of a lisp object. +end + +function xtype { + decode_object "$*" + if test $type = $Lisp_Type_Int; then echo "int" + elif test $type = $Lisp_Type_Char; then echo "char" + elif test $type = null_pointer; then echo "null_pointer" + else + echo "record type with name: $[((struct lrecord_implementation *)$imp)->name]" + fi +} + +function lisp-shadows { + run -batch -vanilla -f list-load-path-shadows +} + +function environment-to-run-temacs { + unset EMACSLOADPATH + export EMACSBOOTSTRAPLOADPATH=../lisp/:.. + export EMACSBOOTSTRAPMODULEPATH=../modules/:.. +} + +document run-temacs << 'end' +Usage: run-temacs +Run temacs interactively, like xemacs. +Use this with debugging tools (like purify) that cannot deal with dumping, +or when temacs builds successfully, but xemacs does not. +end + +function run-temacs { + environment-to-run-temacs + run -nd -batch -l ../lisp/loadup.el run-temacs -q ${1+"$@"} +} + +document check-xemacs << 'end' +Usage: check-xemacs +Run the test suite. Equivalent to 'make check'. +end + +function check-xemacs { + run -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated +} + +document check-temacs << 'end' +Usage: check-temacs +Run the test suite on temacs. Equivalent to 'make check-temacs'. +Use this with debugging tools (like purify) that cannot deal with dumping, +or when temacs builds successfully, but xemacs does not. +end + +function check-temacs { + run-temacs -q -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated +} + +document update-elc << 'end' +Usage: update-elc +Run the core lisp byte compilation part of the build procedure. +Use when debugging temacs, not xemacs! +Use this when temacs builds successfully, but xemacs does not. +end + +function update-elc { + environment-to-run-temacs + run -nd -batch -l ../lisp/update-elc.el +} + +document dmp << 'end' +Usage: dmp +Run the dumping part of the build procedure. +Use when debugging temacs, not xemacs! +Use this when temacs builds successfully, but xemacs does not. +end + +function dmp { + environment-to-run-temacs + run -nd -batch -l ../lisp/loadup.el dump +} + +function pstruct { ## pstruct foo.c struct-name + module "$1" > /dev/null + type_ptr="((struct $2 *) $val)" + print $type_ptr + print *$type_ptr +} + +document pobj << 'end' +Usage: pobj lisp_object +Print the internal C representation of a Lisp Object. +end + +function pobj { + decode_object $1 + if test $type = $Lisp_Type_Int; then + print -f"Integer: %d" $val + elif test $type = $Lisp_Type_Char; then + if test $[$val > 32 && $val < 128] = 1; then + print -f"Char: %c" $val + else + print -f"Char: %d" $val + fi + elif test $lrecord_type = lrecord_type_string; then + pstruct alloc.c Lisp_String + elif test $lrecord_type = lrecord_type_cons; then + pstruct alloc.c Lisp_Cons + elif test $lrecord_type = lrecord_type_symbol; then + pstruct symbols.c Lisp_Symbol + echo "Symbol name: $[(char *)($type_ptr->name->data)]" + elif test $lrecord_type = lrecord_type_vector; then + pstruct alloc.c Lisp_Vector + echo "Vector of length $[$type_ptr->size]" + elif test $lrecord_type = lrecord_type_bit_vector; then + pstruct fns.c Lisp_Bit_Vector + elif test $lrecord_type = lrecord_type_buffer; then + pstruct buffer.c buffer + elif test $lrecord_type = lrecord_type_char_table; then + pstruct chartab.c Lisp_Char_Table + elif test $lrecord_type = lrecord_type_char_table_entry; then + pstruct chartab.c Lisp_Char_Table_Entry + elif test $lrecord_type = lrecord_type_charset; then + pstruct mule-charset.c Lisp_Charset + elif test $lrecord_type = lrecord_type_coding_system; then + pstruct file-coding.c Lisp_Coding_System + elif test $lrecord_type = lrecord_type_color_instance; then + pstruct objects.c Lisp_Color_Instance + elif test $lrecord_type = lrecord_type_command_builder; then + pstruct event-stream.c command_builder + elif test $lrecord_type = lrecord_type_compiled_function; then + pstruct bytecode.c Lisp_Compiled_Function + elif test $lrecord_type = lrecord_type_console; then + pstruct console.c console + elif test $lrecord_type = lrecord_type_database; then + pstruct database.c Lisp_Database + elif test $lrecord_type = lrecord_type_device; then + pstruct device.c device + elif test $lrecord_type = lrecord_type_event; then + pstruct events.c Lisp_Event + elif test $lrecord_type = lrecord_type_extent; then + pstruct extents.c extent + elif test $lrecord_type = lrecord_type_extent_auxiliary; then + pstruct extents.c extent_auxiliary + elif test $lrecord_type = lrecord_type_extent_info; then + pstruct extents.c extent_info + elif test $lrecord_type = lrecord_type_face; then + pstruct faces.c Lisp_Face + elif test $lrecord_type = lrecord_type_float; then + pstruct floatfns.c Lisp_Float + elif test $lrecord_type = lrecord_type_font_instance; then + pstruct objects.c Lisp_Font_Instance + elif test $lrecord_type = lrecord_type_frame; then + pstruct frame.c frame + elif test $lrecord_type = lrecord_type_glyph; then + pstruct glyph.c Lisp_Glyph + elif test $lrecord_type = lrecord_type_gui_item; then + pstruct gui.c Lisp_Gui_Item + elif test $lrecord_type = lrecord_type_hash_table; then + pstruct elhash.c Lisp_Hash_Table + elif test $lrecord_type = lrecord_type_image_instance; then + pstruct glyphs.c Lisp_Image_Instance + elif test $lrecord_type = lrecord_type_keymap; then + pstruct keymap.c Lisp_Keymap + elif test $lrecord_type = lrecord_type_lcrecord_list; then + pstruct alloc.c lcrecord_list + elif test $lrecord_type = lrecord_type_ldap; then + pstruct ldap.c Lisp_LDAP + elif test $lrecord_type = lrecord_type_lstream; then + pstruct lstream.c lstream + elif test $lrecord_type = lrecord_type_marker; then + pstruct marker.c Lisp_Marker + elif test $lrecord_type = lrecord_type_opaque; then + pstruct opaque.c Lisp_Opaque + elif test $lrecord_type = lrecord_type_opaque_ptr; then + pstruct opaque.c Lisp_Opaque_Ptr + elif test $lrecord_type = lrecord_type_popup_data; then + pstruct gui-x.c popup_data + elif test $lrecord_type = lrecord_type_process; then + pstruct process.c Lisp_Process + elif test $lrecord_type = lrecord_type_range_table; then + pstruct rangetab.c Lisp_Range_Table + elif test $lrecord_type = lrecord_type_specifier; then + pstruct specifier.c Lisp_Specifier + elif test $lrecord_type = lrecord_type_subr; then + pstruct eval.c Lisp_Subr + elif test $lrecord_type = lrecord_type_symbol_value_buffer_local; then + pstruct symbols.c symbol_value_buffer_local + elif test $lrecord_type = lrecord_type_symbol_value_forward; then + pstruct symbols.c symbol_value_forward + elif test $lrecord_type = lrecord_type_symbol_value_lisp_magic; then + pstruct symbols.c symbol_value_lisp_magic + elif test $lrecord_type = lrecord_type_symbol_value_varalias; then + pstruct symbols.c symbol_value_varalias + elif test $lrecord_type = lrecord_type_timeout; then + pstruct event-stream.c Lisp_Timeout + elif test $lrecord_type = lrecord_type_toolbar_button; then + pstruct toolbar.c toolbar_button + elif test $lrecord_type = lrecord_type_tooltalk_message; then + pstruct tooltalk.c Lisp_Tooltalk_Message + elif test $lrecord_type = lrecord_type_tooltalk_pattern; then + pstruct tooltalk.c Lisp_Tooltalk_Pattern + elif test $lrecord_type = lrecord_type_weak_list; then + pstruct data.c weak_list + elif test $lrecord_type = lrecord_type_window; then + pstruct window.c window + elif test $lrecord_type = lrecord_type_window_configuration; then + pstruct window.c window_config + elif test "$type" = "null_pointer"; then + echo "Lisp Object is a null pointer!!" + else + echo "Unknown Lisp Object type" + print $1 + fi +} + +dbxenv suppress_startup_message 4.0 +## dbxenv mt_watchpoints on + +function dp_core { + print ((struct x_frame *)(((struct frame*)(Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget->core +} + +## Barf! +function print_shell { + print *(`frame-x.c`TopLevelShellRec*) (((struct `frame-x.c`x_frame*) (((struct `frame-x.c`frame*) (Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget) +} + +## ------------------------------------------------------------- +## functions to test the debugging support itself. +## If you change this file, make sure the following still work... +## ------------------------------------------------------------- +function test_xtype { + function doit { echo -n "$1: "; xtype "$1"; } + test_various_objects +} + +function test_pobj { + function doit { echo '==============================='; echo -n "$1: "; pobj "$1"; } + test_various_objects +} + +function test_various_objects { + doit Vemacs_major_version + doit Vhelp_char + doit Qnil + doit Qunbound + doit Vobarray + doit Vall_weak_lists + doit Vxemacs_codename +} diff -urN 21.5.23/src/.gdbinit 21.5.24/src/.gdbinit --- 21.5.23/src/.gdbinit Thu Oct 28 19:48:15 2004 +++ 21.5.24/src/.gdbinit Thu Jan 1 09:00:00 1970 @@ -1,522 +0,0 @@ -# -*- ksh -*- -# Copyright (C) 1998 Free Software Foundation, Inc. - -# This file is part of XEmacs. - -# XEmacs 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, or (at your option) any -# later version. - -# XEmacs 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 XEmacs; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# Author: Martin Buchholz - -# Some useful commands for debugging emacs with gdb 4.16 or better. -# -# Since this file is called `.gdbinit', it will be read by gdb -# automatically when gdb is run in the build directory, which is where -# developers usually debug their xemacs. You can also source this -# file from your ~/.gdbinit, if you like. -# -# Configure xemacs with --debug, and compile with -g. -# -# See also the question of the XEmacs FAQ, titled -# "How to Debug an XEmacs problem with a debugger". -# -# This can be used to debug XEmacs no matter how the following are -# specified: - -# USE_UNION_TYPE - -# (the above all have configure equivalents) - -# Some functions defined here require a running process, but most -# don't. Considerable effort has been expended to this end. - -# See the dbg_ C support code in src/alloc.c that allows the functions -# defined in this file to work correctly. - -set print union off -set print pretty off - -set $Lisp_Type_Int = -2 - -define decode_object - set $obj = (unsigned long) $arg0 - if $obj & 1 - # It's an int - set $val = $obj >> 1 - set $type = $Lisp_Type_Int - else - set $type = $obj & dbg_typemask - if $type == Lisp_Type_Char - set $val = ($obj & dbg_valmask) >> dbg_gctypebits - else - # It's a record pointer - set $val = $obj - end - end - - if $type == Lisp_Type_Record - set $lheader = ((struct lrecord_header *) $val) - set $lrecord_type = ($lheader->type) - set $imp = ((struct lrecord_implementation *) lrecord_implementations_table[(int) $lrecord_type]) - else - set $lrecord_type = -1 - set $lheader = -1 - set $imp = -1 - end -end - -document decode_object -Usage: decode_object lisp_object -Extract implementation information from a Lisp Object. -Defines variables $val, $type and $imp. -end - -define xint -decode_object $arg0 -print ((long) $val) -end - -define xtype - decode_object $arg0 - if $type == $Lisp_Type_Int - echo int\n - else - if $type == Lisp_Type_Char - echo char\n - else - printf "record type: %s\n", $imp->name - end - end -end - -document xtype -Usage: xtype lisp_object -Print the Lisp type of a lisp object. -end - -define lisp-shadows - run -batch -vanilla -f list-load-path-shadows -end - -document lisp-shadows -Usage: lisp-shadows -Run xemacs to check for lisp shadows -end - -define environment-to-run-temacs - unset env EMACSLOADPATH - set env EMACSBOOTSTRAPLOADPATH=../lisp/:.. - set env EMACSBOOTSTRAPMODULEPATH=../modules/:.. -end - -define run-temacs - environment-to-run-temacs - run -nd -batch -l ../lisp/loadup.el run-temacs -q -end - -document run-temacs -Usage: run-temacs -Run temacs interactively, like xemacs. -Use this with debugging tools (like purify) that cannot deal with dumping, -or when temacs builds successfully, but xemacs does not. -end - -define check-xemacs - run -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated -end - -document check-xemacs -Usage: check-xemacs -Run the test suite. Equivalent to 'make check'. -end - -define check-temacs - environment-to-run-temacs - run -nd -batch -l ../lisp/loadup.el run-temacs -q -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated -end - -document check-temacs -Usage: check-temacs -Run the test suite on temacs. Equivalent to 'make check-temacs'. -Use this with debugging tools (like purify) that cannot deal with dumping, -or when temacs builds successfully, but xemacs does not. -end - -define update-elc - environment-to-run-temacs - run -nd -batch -l ../lisp/update-elc.el -end - -document update-elc -Usage: update-elc -Run the core lisp byte compilation part of the build procedure. -Use when debugging temacs, not xemacs! -Use this when temacs builds successfully, but xemacs does not. -end - -define dmp - environment-to-run-temacs - run -nd -batch -l ../lisp/loadup.el dump -end - -document dmp -Usage: dmp -Run the dumping part of the build procedure. -Use when debugging temacs, not xemacs! -Use this when temacs builds successfully, but xemacs does not. -end - -define ldp - printf "%s", "Lisp => " - call debug_print($arg0) -end - -document ldp -Usage: ldp lisp_object -Print a Lisp Object value using the Lisp printer. -Requires a running xemacs process. -end - -define lbt -call debug_backtrace() -end - -document lbt -Usage: lbt -Print the current Lisp stack trace. -Requires a running xemacs process. -end - - -define leval -ldp Feval(Fcar(Fread_from_string(build_string($arg0),Qnil,Qnil))) -end - -document leval -Usage: leval "SEXP" -Eval a lisp expression. -Requires a running xemacs process. - -Example: -(gdb) leval "(+ 1 2)" -Lisp ==> 3 -end - - -define wtype -print $arg0->core.widget_class->core_class.class_name -end - -define xtname -print XrmQuarkToString(((Object)($arg0))->object.xrm_name) -end - -# GDB's command language makes you want to ... - -define pptype - set $type_ptr = ($arg0 *) $val - print $type_ptr - print *$type_ptr -end - -define pstructtype - set $type_ptr = (struct $arg0 *) $val - print $type_ptr - print *$type_ptr -end - -define pobj - decode_object $arg0 - if $type == $Lisp_Type_Int - printf "Integer: %d\n", $val - else - if $type == Lisp_Type_Char - if $val > 32 && $val < 128 - printf "Char: %c\n", $val - else - printf "Char: %d\n", $val - end - else - if $lrecord_type == lrecord_type_string - pptype Lisp_String - else - if $lrecord_type == lrecord_type_cons - pptype Lisp_Cons - else - if $lrecord_type == lrecord_type_symbol - pptype Lisp_Symbol - printf "Symbol name: %s\n", ((Lisp_String *)$type_ptr->name)->data_ - else - if $lrecord_type == lrecord_type_vector - pptype Lisp_Vector - printf "Vector of length %d\n", $type_ptr->size - #print *($type_ptr->data) @ $type_ptr->size - else - if $lrecord_type == lrecord_type_bit_vector - pptype Lisp_Bit_Vector - else - if $lrecord_type == lrecord_type_buffer - pstructtype buffer - else - if $lrecord_type == lrecord_type_char_table - pptype Lisp_Char_Table - else - if $lrecord_type == lrecord_type_char_table_entry - pptype Lisp_Char_Table_Entry - else - if $lrecord_type == lrecord_type_charset - pptype Lisp_Charset - else - if $lrecord_type == lrecord_type_coding_system - pptype Lisp_Coding_System - else - if $lrecord_type == lrecord_type_color_instance - pptype Lisp_Color_Instance - else - if $lrecord_type == lrecord_type_command_builder - pptype command_builder - else - if $lrecord_type == lrecord_type_compiled_function - pptype Lisp_Compiled_Function - else - if $lrecord_type == lrecord_type_console - pstructtype console - else - if $lrecord_type == lrecord_type_database - pptype Lisp_Database - else - if $lrecord_type == lrecord_type_device - pstructtype device - else - if $lrecord_type == lrecord_type_event - pptype Lisp_Event - else - if $lrecord_type == lrecord_type_extent - pstructtype extent - else - if $lrecord_type == lrecord_type_extent_auxiliary - pstructtype extent_auxiliary - else - if $lrecord_type == lrecord_type_extent_info - pstructtype extent_info - else - if $lrecord_type == lrecord_type_face - pptype Lisp_Face - else - if $lrecord_type == lrecord_type_float - pptype Lisp_Float - else - if $lrecord_type == lrecord_type_font_instance - pptype Lisp_Font_Instance - else - if $lrecord_type == lrecord_type_frame - pstructtype frame - else - if $lrecord_type == lrecord_type_glyph - pptype Lisp_Glyph - else - if $lrecord_type == lrecord_type_gui_item - pptype Lisp_Gui_Item - else - if $lrecord_type == lrecord_type_hash_table - pptype Lisp_Hash_Table - else - if $lrecord_type == lrecord_type_image_instance - pptype Lisp_Image_Instance - else - if $lrecord_type == lrecord_type_keymap - pptype Lisp_Keymap - else - if $lrecord_type == lrecord_type_lcrecord_list - pstructtype lcrecord_list - else - if $lrecord_type == lrecord_type_ldap - pptype Lisp_LDAP - else - if $lrecord_type == lrecord_type_lstream - pstructtype lstream - else - if $lrecord_type == lrecord_type_marker - pptype Lisp_Marker - else - if $lrecord_type == lrecord_type_opaque - pptype Lisp_Opaque - else - if $lrecord_type == lrecord_type_opaque_ptr - pptype Lisp_Opaque_Ptr - else - if $lrecord_type == lrecord_type_popup_data - pptype popup_data - else - if $lrecord_type == lrecord_type_process - pptype Lisp_Process - else - if $lrecord_type == lrecord_type_range_table - pptype Lisp_Range_Table - else - if $lrecord_type == lrecord_type_specifier - pptype Lisp_Specifier - else - if $lrecord_type == lrecord_type_subr - pptype Lisp_Subr - else - if $lrecord_type == lrecord_type_symbol_value_buffer_local - pstructtype symbol_value_buffer_local - else - if $lrecord_type == lrecord_type_symbol_value_forward - pstructtype symbol_value_forward - else - if $lrecord_type == lrecord_type_symbol_value_lisp_magic - pstructtype symbol_value_lisp_magic - else - if $lrecord_type == lrecord_type_symbol_value_varalias - pstructtype symbol_value_varalias - else - if $lrecord_type == lrecord_type_timeout - pptype Lisp_Timeout - else - if $lrecord_type == lrecord_type_toolbar_button - pstructtype toolbar_button - else - if $lrecord_type == lrecord_type_tooltalk_message - pptype Lisp_Tooltalk_Message - else - if $lrecord_type == lrecord_type_tooltalk_pattern - pptype Lisp_Tooltalk_Pattern - else - if $lrecord_type == lrecord_type_weak_list - pstructtype weak_list - else - if $lrecord_type == lrecord_type_window - pstructtype window - else - if $lrecord_type == lrecord_type_window_configuration - pstructtype window_config - else - if $lrecord_type == lrecord_type_fc_pattern - pstructtype fc_pattern - else - if $lrecord_type == lrecord_type_fc_objectset - pstructtype fc_objectset - else - if $lrecord_type == lrecord_type_fc_fontset - pstructtype fc_fontset - else - echo Unknown Lisp Object type\n - print $arg0 - # Barf, gag, retch - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - # Repeat after me... gdb sux, gdb sux, gdb sux... - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - # Are we having fun yet?? - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end -end - -document pobj -Usage: pobj lisp_object -Print the internal C representation of a Lisp Object. -end - -# ------------------------------------------------------------- -# functions to test the debugging support itself. -# If you change this file, make sure the following still work... -# ------------------------------------------------------------- -define test_xtype - printf "Vemacs_major_version: " - xtype Vemacs_major_version - printf "Vhelp_char: " - xtype Vhelp_char - printf "Qnil: " - xtype Qnil - printf "Qunbound: " - xtype Qunbound - printf "Vobarray: " - xtype Vobarray - printf "Vall_weak_lists: " - xtype Vall_weak_lists - printf "Vxemacs_codename: " - xtype Vxemacs_codename -end - -define test_pobj - printf "Vemacs_major_version: " - pobj Vemacs_major_version - printf "Vhelp_char: " - pobj Vhelp_char - printf "Qnil: " - pobj Qnil - printf "Qunbound: " - pobj Qunbound - printf "Vobarray: " - pobj Vobarray - printf "Vall_weak_lists: " - pobj Vall_weak_lists - printf "Vxemacs_codename: " - pobj Vxemacs_codename -end - diff -urN 21.5.23/src/.gdbinit.in 21.5.24/src/.gdbinit.in --- 21.5.23/src/.gdbinit.in Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/.gdbinit.in Fri Nov 25 10:41:53 2005 @@ -0,0 +1,529 @@ +## -*- ksh -*- +## Copyright (C) 1998 Free Software Foundation, Inc. + +## This file is part of XEmacs. + +## XEmacs 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, or (at your option) any +## later version. + +## XEmacs 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 XEmacs; see the file COPYING. If not, write to +## the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +## Boston, MA 02111-1307, USA. + +## Author: Martin Buchholz + +## Some useful commands for debugging emacs with gdb 4.16 or better. +## +## Since this file is called `.gdbinit', it will be read by gdb +## automatically when gdb is run in the build directory, which is where +## developers usually debug their xemacs. You can also source this +## file from your ~/.gdbinit, if you like. +## +## Configure xemacs with --debug, and compile with -g. +## +## See also the question of the XEmacs FAQ, titled +## "How to Debug an XEmacs problem with a debugger". +## +## This can be used to debug XEmacs no matter how the following are +## specified: + +## USE_UNION_TYPE + +## (the above all have configure equivalents) + +## Some functions defined here require a running process, but most +## don't. Considerable effort has been expended to this end. + +## See the dbg_ C support code in src/alloc.c that allows the functions +## defined in this file to work correctly. + +#define NOT_C_CODE +#include "config.h" + +set print union off +set print pretty off + +#ifdef VDB_POSIX +handle SIGSEGV SIGBUS nostop noprint +#endif + +set $Lisp_Type_Int = -2 + +define decode_object + set $obj = (unsigned long) $arg0 + if $obj & 1 + ## It's an int + set $val = $obj >> 1 + set $type = $Lisp_Type_Int + else + set $type = $obj & dbg_typemask + if $type == Lisp_Type_Char + set $val = ($obj & dbg_valmask) >> dbg_gctypebits + else + ## It's a record pointer + set $val = $obj + end + end + + if $type == Lisp_Type_Record + set $lheader = ((struct lrecord_header *) $val) + set $lrecord_type = ($lheader->type) + set $imp = ((struct lrecord_implementation *) lrecord_implementations_table[(int) $lrecord_type]) + else + set $lrecord_type = -1 + set $lheader = -1 + set $imp = -1 + end +end + +document decode_object +Usage: decode_object lisp_object +Extract implementation information from a Lisp Object. +Defines variables $val, $type and $imp. +end + +define xint +decode_object $arg0 +print ((long) $val) +end + +define xtype + decode_object $arg0 + if $type == $Lisp_Type_Int + echo int\n + else + if $type == Lisp_Type_Char + echo char\n + else + printf "record type: %s\n", $imp->name + end + end +end + +document xtype +Usage: xtype lisp_object +Print the Lisp type of a lisp object. +end + +define lisp-shadows + run -batch -vanilla -f list-load-path-shadows +end + +document lisp-shadows +Usage: lisp-shadows +Run xemacs to check for lisp shadows +end + +define environment-to-run-temacs + unset env EMACSLOADPATH + set env EMACSBOOTSTRAPLOADPATH=../lisp/:.. + set env EMACSBOOTSTRAPMODULEPATH=../modules/:.. +end + +define run-temacs + environment-to-run-temacs + run -nd -batch -l ../lisp/loadup.el run-temacs -q +end + +document run-temacs +Usage: run-temacs +Run temacs interactively, like xemacs. +Use this with debugging tools (like purify) that cannot deal with dumping, +or when temacs builds successfully, but xemacs does not. +end + +define check-xemacs + run -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated +end + +document check-xemacs +Usage: check-xemacs +Run the test suite. Equivalent to 'make check'. +end + +define check-temacs + environment-to-run-temacs + run -nd -batch -l ../lisp/loadup.el run-temacs -q -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated +end + +document check-temacs +Usage: check-temacs +Run the test suite on temacs. Equivalent to 'make check-temacs'. +Use this with debugging tools (like purify) that cannot deal with dumping, +or when temacs builds successfully, but xemacs does not. +end + +define update-elc + environment-to-run-temacs + run -nd -batch -l ../lisp/update-elc.el +end + +document update-elc +Usage: update-elc +Run the core lisp byte compilation part of the build procedure. +Use when debugging temacs, not xemacs! +Use this when temacs builds successfully, but xemacs does not. +end + +define dmp + environment-to-run-temacs + run -nd -batch -l ../lisp/loadup.el dump +end + +document dmp +Usage: dmp +Run the dumping part of the build procedure. +Use when debugging temacs, not xemacs! +Use this when temacs builds successfully, but xemacs does not. +end + +define ldp + printf "%s", "Lisp => " + call debug_print($arg0) +end + +document ldp +Usage: ldp lisp_object +Print a Lisp Object value using the Lisp printer. +Requires a running xemacs process. +end + +define lbt +call debug_backtrace() +end + +document lbt +Usage: lbt +Print the current Lisp stack trace. +Requires a running xemacs process. +end + + +define leval +ldp Feval(Fcar(Fread_from_string(build_string($arg0),Qnil,Qnil))) +end + +document leval +Usage: leval "SEXP" +Eval a lisp expression. +Requires a running xemacs process. + +Example: +(gdb) leval "(+ 1 2)" +Lisp ==> 3 +end + + +define wtype +print $arg0->core.widget_class->core_class.class_name +end + +define xtname +print XrmQuarkToString(((Object)($arg0))->object.xrm_name) +end + +## GDB's command language makes you want to ... + +define pptype + set $type_ptr = ($arg0 *) $val + print $type_ptr + print *$type_ptr +end + +define pstructtype + set $type_ptr = (struct $arg0 *) $val + print $type_ptr + print *$type_ptr +end + +define pobj + decode_object $arg0 + if $type == $Lisp_Type_Int + printf "Integer: %d\n", $val + else + if $type == Lisp_Type_Char + if $val > 32 && $val < 128 + printf "Char: %c\n", $val + else + printf "Char: %d\n", $val + end + else + if $lrecord_type == lrecord_type_string + pptype Lisp_String + else + if $lrecord_type == lrecord_type_cons + pptype Lisp_Cons + else + if $lrecord_type == lrecord_type_symbol + pptype Lisp_Symbol + printf "Symbol name: %s\n", ((Lisp_String *)$type_ptr->name)->data_ + else + if $lrecord_type == lrecord_type_vector + pptype Lisp_Vector + printf "Vector of length %d\n", $type_ptr->size + ##print *($type_ptr->data) @ $type_ptr->size + else + if $lrecord_type == lrecord_type_bit_vector + pptype Lisp_Bit_Vector + else + if $lrecord_type == lrecord_type_buffer + pstructtype buffer + else + if $lrecord_type == lrecord_type_char_table + pptype Lisp_Char_Table + else + if $lrecord_type == lrecord_type_char_table_entry + pptype Lisp_Char_Table_Entry + else + if $lrecord_type == lrecord_type_charset + pptype Lisp_Charset + else + if $lrecord_type == lrecord_type_coding_system + pptype Lisp_Coding_System + else + if $lrecord_type == lrecord_type_color_instance + pptype Lisp_Color_Instance + else + if $lrecord_type == lrecord_type_command_builder + pptype command_builder + else + if $lrecord_type == lrecord_type_compiled_function + pptype Lisp_Compiled_Function + else + if $lrecord_type == lrecord_type_console + pstructtype console + else + if $lrecord_type == lrecord_type_database + pptype Lisp_Database + else + if $lrecord_type == lrecord_type_device + pstructtype device + else + if $lrecord_type == lrecord_type_event + pptype Lisp_Event + else + if $lrecord_type == lrecord_type_extent + pstructtype extent + else + if $lrecord_type == lrecord_type_extent_auxiliary + pstructtype extent_auxiliary + else + if $lrecord_type == lrecord_type_extent_info + pstructtype extent_info + else + if $lrecord_type == lrecord_type_face + pptype Lisp_Face + else + if $lrecord_type == lrecord_type_float + pptype Lisp_Float + else + if $lrecord_type == lrecord_type_font_instance + pptype Lisp_Font_Instance + else + if $lrecord_type == lrecord_type_frame + pstructtype frame + else + if $lrecord_type == lrecord_type_glyph + pptype Lisp_Glyph + else + if $lrecord_type == lrecord_type_gui_item + pptype Lisp_Gui_Item + else + if $lrecord_type == lrecord_type_hash_table + pptype Lisp_Hash_Table + else + if $lrecord_type == lrecord_type_image_instance + pptype Lisp_Image_Instance + else + if $lrecord_type == lrecord_type_keymap + pptype Lisp_Keymap + else + if $lrecord_type == lrecord_type_lcrecord_list + pstructtype lcrecord_list + else + if $lrecord_type == lrecord_type_ldap + pptype Lisp_LDAP + else + if $lrecord_type == lrecord_type_lstream + pstructtype lstream + else + if $lrecord_type == lrecord_type_marker + pptype Lisp_Marker + else + if $lrecord_type == lrecord_type_opaque + pptype Lisp_Opaque + else + if $lrecord_type == lrecord_type_opaque_ptr + pptype Lisp_Opaque_Ptr + else + if $lrecord_type == lrecord_type_popup_data + pptype popup_data + else + if $lrecord_type == lrecord_type_process + pptype Lisp_Process + else + if $lrecord_type == lrecord_type_range_table + pptype Lisp_Range_Table + else + if $lrecord_type == lrecord_type_specifier + pptype Lisp_Specifier + else + if $lrecord_type == lrecord_type_subr + pptype Lisp_Subr + else + if $lrecord_type == lrecord_type_symbol_value_buffer_local + pstructtype symbol_value_buffer_local + else + if $lrecord_type == lrecord_type_symbol_value_forward + pstructtype symbol_value_forward + else + if $lrecord_type == lrecord_type_symbol_value_lisp_magic + pstructtype symbol_value_lisp_magic + else + if $lrecord_type == lrecord_type_symbol_value_varalias + pstructtype symbol_value_varalias + else + if $lrecord_type == lrecord_type_timeout + pptype Lisp_Timeout + else + if $lrecord_type == lrecord_type_toolbar_button + pstructtype toolbar_button + else + if $lrecord_type == lrecord_type_tooltalk_message + pptype Lisp_Tooltalk_Message + else + if $lrecord_type == lrecord_type_tooltalk_pattern + pptype Lisp_Tooltalk_Pattern + else + if $lrecord_type == lrecord_type_weak_list + pstructtype weak_list + else + if $lrecord_type == lrecord_type_window + pstructtype window + else + if $lrecord_type == lrecord_type_window_configuration + pstructtype window_config + else + if $lrecord_type == lrecord_type_fc_pattern + pstructtype fc_pattern + else + if $lrecord_type == lrecord_type_fc_objectset + pstructtype fc_objectset + else + if $lrecord_type == lrecord_type_fc_fontset + pstructtype fc_fontset + else + echo Unknown Lisp Object type\n + print $arg0 + ## Barf, gag, retch + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + ## Repeat after me... gdb sux, gdb sux, gdb sux... + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + ## Are we having fun yet?? + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end +end + +document pobj +Usage: pobj lisp_object +Print the internal C representation of a Lisp Object. +end + +## ------------------------------------------------------------- +## functions to test the debugging support itself. +## If you change this file, make sure the following still work... +## ------------------------------------------------------------- +define test_xtype + printf "Vemacs_major_version: " + xtype Vemacs_major_version + printf "Vhelp_char: " + xtype Vhelp_char + printf "Qnil: " + xtype Qnil + printf "Qunbound: " + xtype Qunbound + printf "Vobarray: " + xtype Vobarray + printf "Vall_weak_lists: " + xtype Vall_weak_lists + printf "Vxemacs_codename: " + xtype Vxemacs_codename +end + +define test_pobj + printf "Vemacs_major_version: " + pobj Vemacs_major_version + printf "Vhelp_char: " + pobj Vhelp_char + printf "Qnil: " + pobj Qnil + printf "Qunbound: " + pobj Qunbound + printf "Vobarray: " + pobj Vobarray + printf "Vall_weak_lists: " + pobj Vall_weak_lists + printf "Vxemacs_codename: " + pobj Vxemacs_codename +end + diff -urN 21.5.23/src/CVS/Entries 21.5.24/src/CVS/Entries --- 21.5.23/src/CVS/Entries Mon Dec 19 04:21:30 2005 +++ 21.5.24/src/CVS/Entries Mon Dec 19 04:23:49 2005 @@ -1,414 +1,424 @@ -/.cvsignore/1.10/Tue Jun 28 12:02:42 2005//Tr21-5-23 -/.dbxrc/1.2/Thu Apr 12 18:23:17 2001//Tr21-5-23 -/.gdbinit/1.4/Thu Oct 28 10:48:15 2004//Tr21-5-23 -/ChangeLog/1.878/Wed Oct 26 15:14:53 2005//Tr21-5-23 -/ChangeLog.GTK/1.2/Thu Apr 12 18:23:21 2001//Tr21-5-23 -/EmacsFrame.c/1.28/Tue Oct 25 11:16:20 2005//Tr21-5-23 -/EmacsFrame.h/1.5/Thu Apr 12 18:23:22 2001//Tr21-5-23 -/EmacsFrameP.h/1.7/Sun May 4 02:34:35 2003//Tr21-5-23 -/EmacsManager.c/1.7/Wed Dec 22 10:59:09 2004//Tr21-5-23 -/EmacsManager.h/1.3/Thu Apr 12 18:23:22 2001//Tr21-5-23 -/EmacsManagerP.h/1.2/Thu Apr 12 18:23:22 2001//Tr21-5-23 -/EmacsShell-sub.c/1.7/Mon Jan 24 23:33:46 2005//Tr21-5-23 -/EmacsShell.c/1.3/Mon Jan 24 23:33:46 2005//Tr21-5-23 -/EmacsShell.h/1.3/Thu Apr 12 18:23:22 2001//Tr21-5-23 -/EmacsShellP.h/1.2/Thu Apr 12 18:23:23 2001//Tr21-5-23 -/ExternalClient-Xlib.c/1.2/Wed Jun 2 09:16:20 2004//Tr21-5-23 -/ExternalClient.c/1.8/Tue Oct 25 11:16:21 2005//Tr21-5-23 -/ExternalClient.h/1.2/Thu Apr 12 18:23:23 2001//Tr21-5-23 -/ExternalClientP.h/1.2/Thu Apr 12 18:23:23 2001//Tr21-5-23 -/ExternalShell.c/1.8/Tue Oct 25 11:16:21 2005//Tr21-5-23 -/ExternalShell.h/1.2/Thu Apr 12 18:23:23 2001//Tr21-5-23 -/ExternalShellP.h/1.2/Thu Apr 12 18:23:23 2001//Tr21-5-23 -/Makefile.in.in/1.119/Fri Oct 21 15:48:42 2005//Tr21-5-23 -/README/1.4/Thu Apr 12 18:23:24 2001//Tr21-5-23 -/README.global-renaming/1.1/Wed Jun 5 12:01:09 2002//Tr21-5-23 -/README.kkcc/1.3/Thu Jul 31 13:32:25 2003//Tr21-5-23 -/abbrev.c/1.20/Thu Nov 4 23:06:15 2004//Tr21-5-23 -/alloc.c/1.118/Tue Oct 25 08:32:46 2005//Tr21-5-23 -/alloca.c/1.10/Fri Sep 30 02:15:08 2005//Tr21-5-23 -/alloca.s/1.2/Thu Apr 12 18:23:25 2001//Tr21-5-23 -/backtrace.h/1.11/Sat Jan 29 09:15:58 2005//Tr21-5-23 -/balloon-x.c/1.9/Thu Jun 20 21:18:21 2002//Tr21-5-23 -/balloon_help.c/1.11/Mon Sep 20 19:19:35 2004//Tr21-5-23 -/balloon_help.h/1.6/Thu Apr 12 18:23:25 2001//Tr21-5-23 -/bitmaps.h/1.4/Thu Apr 12 18:23:25 2001//Tr21-5-23 -/blocktype.c/1.5/Thu Sep 20 06:28:48 2001//Tr21-5-23 -/blocktype.h/1.5/Thu Sep 20 06:28:48 2001//Tr21-5-23 -/broken-sun.h/1.6/Thu May 22 07:41:25 2003//Tr21-5-23 -/buffer.c/1.73/Tue Oct 25 08:32:47 2005//Tr21-5-23 -/buffer.h/1.33/Mon Oct 24 10:07:34 2005//Tr21-5-23 -/bufslots.h/1.10/Sun Jan 12 11:08:08 2003//Tr21-5-23 -/bytecode.c/1.47/Fri Apr 8 23:11:19 2005//Tr21-5-23 -/bytecode.h/1.8/Sun Apr 14 12:42:14 2002//Tr21-5-23 -/callint.c/1.29/Thu Nov 4 23:06:16 2004//Tr21-5-23 -/casefiddle.c/1.13/Thu Nov 4 23:06:16 2004//Tr21-5-23 -/casetab.c/1.17/Mon Oct 24 10:07:34 2005//Tr21-5-23 -/casetab.h/1.7/Mon Oct 24 10:07:34 2005//Tr21-5-23 -/charset.h/1.12/Mon Oct 24 10:07:34 2005//Tr21-5-23 -/chartab.c/1.38/Tue Oct 25 11:16:21 2005//Tr21-5-23 -/chartab.h/1.16/Mon Oct 24 10:07:34 2005//Tr21-5-23 -/cm.c/1.10/Mon Jan 24 23:33:48 2005//Tr21-5-23 -/cm.h/1.3/Thu Apr 12 18:23:28 2001//Tr21-5-23 -/cmdloop.c/1.24/Tue Oct 25 11:16:21 2005//Tr21-5-23 -/cmds.c/1.19/Sun Jul 17 20:08:47 2005//Tr21-5-23 -/coding-system-slots.h/1.1/Sun Jan 12 11:08:09 2003//Tr21-5-23 -/commands.h/1.5/Tue Sep 14 14:32:46 2004//Tr21-5-23 -/compiler.h/1.10/Tue Oct 25 11:16:21 2005//Tr21-5-23 -/config.h.in/1.102/Tue Oct 25 11:19:58 2005//Tr21-5-23 -/conslots.h/1.6/Sun Jan 12 11:08:09 2003//Tr21-5-23 -/console-gtk-impl.h/1.5/Wed Jul 7 12:01:06 2004//Tr21-5-23 -/console-gtk.c/1.6/Sun Jun 26 18:05:02 2005//Tr21-5-23 -/console-gtk.h/1.9/Wed Jul 7 12:01:06 2004//Tr21-5-23 -/console-impl.h/1.12/Mon Oct 24 10:07:34 2005//Tr21-5-23 -/console-msw-impl.h/1.5/Mon Oct 24 10:07:34 2005//Tr21-5-23 -/console-msw.c/1.20/Fri Jul 8 08:27:34 2005//Tr21-5-23 -/console-msw.h/1.46/Thu Nov 4 23:06:18 2004//Tr21-5-23 -/console-stream-impl.h/1.2/Sun Jan 12 11:08:09 2003//Tr21-5-23 -/console-stream.c/1.25/Mon Jan 24 23:33:48 2005//Tr21-5-23 -/console-stream.h/1.7/Sun Jan 12 11:08:09 2003//Tr21-5-23 -/console-tty-impl.h/1.1/Thu Jun 20 21:18:24 2002//Tr21-5-23 -/console-tty.c/1.33/Fri Jul 8 08:27:34 2005//Tr21-5-23 -/console-tty.h/1.13/Sun Jan 12 11:08:10 2003//Tr21-5-23 -/console-x-impl.h/1.3/Thu Nov 4 23:06:18 2004//Tr21-5-23 -/console-x.c/1.15/Wed Jun 29 09:47:35 2005//Tr21-5-23 -/console-x.h/1.21/Mon Jan 17 10:10:18 2005//Tr21-5-23 -/console.c/1.44/Tue Oct 25 11:16:21 2005//Tr21-5-23 -/console.h/1.42/Mon Mar 8 15:23:02 2004//Tr21-5-23 -/data.c/1.65/Mon Oct 24 10:07:35 2005//Tr21-5-23 -/database.c/1.37/Tue Oct 25 11:16:22 2005//Tr21-5-23 -/database.h/1.4/Thu Apr 12 18:23:31 2001//Tr21-5-23 -/debug.c/1.10/Thu Nov 4 23:06:19 2004//Tr21-5-23 -/debug.h/1.6/Mon Jan 24 23:33:49 2005//Tr21-5-23 -/depend/1.58/Tue Oct 4 21:51:35 2005//Tr21-5-23 -/device-gtk.c/1.15/Sun Jun 26 18:05:03 2005//Tr21-5-23 -/device-impl.h/1.6/Mon Oct 24 10:07:35 2005//Tr21-5-23 -/device-msw.c/1.59/Tue Oct 25 11:16:22 2005//Tr21-5-23 -/device-tty.c/1.18/Mon Jan 24 23:33:49 2005//Tr21-5-23 -/device-x.c/1.65/Tue Oct 25 11:16:22 2005//Tr21-5-23 -/device.c/1.36/Tue Oct 25 11:16:22 2005//Tr21-5-23 -/device.h/1.18/Sun Jan 12 11:08:11 2003//Tr21-5-23 -/devslots.h/1.3/Sun Jan 12 11:08:11 2003//Tr21-5-23 -/dgif_lib.c/1.13/Thu May 6 12:12:13 2004//Tr21-5-23 -/dialog-gtk.c/1.7/Mon Sep 20 19:19:38 2004//Tr21-5-23 -/dialog-msw.c/1.34/Mon Oct 24 10:07:35 2005//Tr21-5-23 -/dialog-x.c/1.15/Mon Sep 20 19:19:38 2004//Tr21-5-23 -/dialog.c/1.6/Thu Jun 20 21:18:27 2002//Tr21-5-23 -/dired-msw.c/1.19/Fri Jan 28 02:36:24 2005//Tr21-5-23 -/dired.c/1.38/Thu Nov 4 23:06:21 2004//Tr21-5-23 -/doc.c/1.35/Tue Oct 25 11:16:22 2005//Tr21-5-23 -/doprnt.c/1.30/Mon Jan 24 23:33:50 2005//Tr21-5-23 -/dragdrop.c/1.9/Tue Oct 25 11:16:22 2005//Tr21-5-23 -/dragdrop.h/1.4/Thu Nov 4 23:06:22 2004//Tr21-5-23 -/dump-data.c/1.3/Thu Nov 4 23:06:22 2004//Tr21-5-23 -/dump-data.h/1.3/Thu Nov 4 23:06:22 2004//Tr21-5-23 -/dumper.c/1.31/Fri Oct 14 01:22:00 2005//Tr21-5-23 -/dumper.h/1.8/Fri Apr 8 23:11:23 2005//Tr21-5-23 -/dynarr.c/1.12/Mon Jan 24 23:33:50 2005//Tr21-5-23 -/ecrt0.c/1.4/Tue Nov 12 18:58:28 2002//Tr21-5-23 -/editfns.c/1.53/Sun Jul 17 20:08:47 2005//Tr21-5-23 -/elhash.c/1.43/Mon Oct 24 10:07:35 2005//Tr21-5-23 -/elhash.h/1.15/Wed Jan 26 10:22:25 2005//Tr21-5-23 -/emacs-marshals.c/1.9/Wed Jan 26 10:22:25 2005//Tr21-5-23 -/emacs-widget-accessors.c/1.4/Thu May 31 02:00:31 2001//Tr21-5-23 -/emacs.c/1.160/Tue Oct 25 08:32:47 2005//Tr21-5-23 -/emodules.c/1.23/Thu Nov 4 23:06:24 2004//Tr21-5-23 -/emodules.h/1.11/Thu Nov 4 23:06:24 2004//Tr21-5-23 -/esd.c/1.8/Thu Nov 4 23:06:25 2004//Tr21-5-23 -/eval.c/1.90/Tue Oct 25 11:16:23 2005//Tr21-5-23 -/event-Xt.c/1.87/Tue Sep 27 05:29:44 2005//Tr21-5-23 -/event-gtk.c/1.31/Sun Jul 3 21:48:00 2005//Tr21-5-23 -/event-gtk.h/1.2/Thu Nov 4 23:06:26 2004//Tr21-5-23 -/event-msw.c/1.105/Tue Oct 25 11:16:23 2005//Tr21-5-23 -/event-stream.c/1.92/Tue Oct 25 11:16:23 2005//Tr21-5-23 -/event-tty.c/1.16/Thu Nov 4 23:06:27 2004//Tr21-5-23 -/event-unixoid.c/1.21/Fri Feb 7 11:50:53 2003//Tr21-5-23 -/event-xlike-inc.c/1.2/Sun Jun 26 18:05:04 2005//Tr21-5-23 -/events.c/1.69/Tue Oct 25 11:16:23 2005//Tr21-5-23 -/events.h/1.42/Mon Oct 24 10:07:36 2005//Tr21-5-23 -/extents-impl.h/1.3/Mon Oct 24 10:07:36 2005//Tr21-5-23 -/extents.c/1.62/Tue Oct 25 11:16:23 2005//Tr21-5-23 -/extents.h/1.19/Wed Jan 26 05:11:12 2005//Tr21-5-23 -/extw-Xlib.c/1.1.1.1/Wed Dec 18 22:44:06 1996//Tr21-5-23 -/extw-Xlib.h/1.2/Thu Apr 12 18:23:43 2001//Tr21-5-23 -/extw-Xt.c/1.6/Sun Jun 6 12:35:45 2004//Tr21-5-23 -/extw-Xt.h/1.2/Thu Apr 12 18:23:43 2001//Tr21-5-23 -/faces.c/1.48/Mon Oct 24 10:07:36 2005//Tr21-5-23 -/faces.h/1.14/Mon Oct 24 10:07:36 2005//Tr21-5-23 -/file-coding.c/1.49/Tue Oct 25 11:16:24 2005//Tr21-5-23 -/file-coding.h/1.27/Mon Oct 24 10:07:37 2005//Tr21-5-23 -/fileio.c/1.104/Fri Jan 28 02:36:24 2005//Tr21-5-23 -/filelock.c/1.23/Thu Nov 4 23:06:29 2004//Tr21-5-23 -/filemode.c/1.4/Mon Sep 20 19:19:43 2004//Tr21-5-23 -/floatfns.c/1.22/Mon Sep 20 19:19:43 2004//Tr21-5-23 -/fns.c/1.64/Tue Oct 25 11:16:24 2005//Tr21-5-23 -/font-lock.c/1.16/Mon Jan 24 23:33:55 2005//Tr21-5-23 -/frame-gtk.c/1.20/Mon Jan 24 23:33:56 2005//Tr21-5-23 -/frame-impl.h/1.6/Mon Oct 24 10:07:37 2005//Tr21-5-23 -/frame-msw.c/1.58/Tue Oct 25 07:30:42 2005//Tr21-5-23 -/frame-tty.c/1.15/Tue Oct 25 11:16:24 2005//Tr21-5-23 -/frame-x.c/1.70/Wed Apr 27 09:01:48 2005//Tr21-5-23 -/frame.c/1.73/Tue Oct 25 11:16:24 2005//Tr21-5-23 -/frame.h/1.29/Fri Feb 21 06:56:57 2003//Tr21-5-23 -/frameslots.h/1.9/Sun Mar 9 02:27:43 2003//Tr21-5-23 -/free-hook.c/1.13/Wed Jan 26 10:36:08 2005//Tr21-5-23 -/gccache-gtk.c/1.7/Wed Jan 26 10:22:26 2005//Tr21-5-23 -/gccache-gtk.h/1.5/Tue Feb 15 03:17:08 2005//Tr21-5-23 -/general-slots.h/1.16/Sun Jul 3 21:48:01 2005//Tr21-5-23 -/general.c/1.16/Tue Aug 19 02:07:16 2003//Tr21-5-23 -/getloadavg.c/1.18/Thu Feb 20 08:19:42 2003//Tr21-5-23 -/getpagesize.h/1.4/Thu Apr 12 18:23:49 2001//Tr21-5-23 -/gif_io.c/1.6/Tue Sep 14 14:32:50 2004//Tr21-5-23 -/gifrlib.h/1.7/Wed Sep 15 04:26:16 2004//Tr21-5-23 -/glade.c/1.5/Sun May 2 04:06:59 2004//Tr21-5-23 -/glyphs-eimage.c/1.26/Tue Sep 27 05:48:25 2005//Tr21-5-23 -/glyphs-gtk.c/1.31/Tue Sep 27 05:48:26 2005//Tr21-5-23 -/glyphs-gtk.h/1.3/Sat May 15 07:43:09 2004//Tr21-5-23 -/glyphs-msw.c/1.56/Tue Sep 27 05:48:26 2005//Tr21-5-23 -/glyphs-msw.h/1.10/Sun May 5 11:31:38 2002//Tr21-5-23 -/glyphs-shared.c/1.8/Thu Nov 4 23:06:33 2004//Tr21-5-23 -/glyphs-widget.c/1.17/Thu Nov 4 23:06:33 2004//Tr21-5-23 -/glyphs-x.c/1.83/Tue Sep 27 05:48:26 2005//Tr21-5-23 -/glyphs-x.h/1.5/Thu Apr 12 18:23:52 2001//Tr21-5-23 -/glyphs.c/1.54/Mon Oct 24 10:07:37 2005//Tr21-5-23 -/glyphs.h/1.40/Mon Oct 24 10:07:37 2005//Tr21-5-23 -/gmalloc.c/1.18/Mon Sep 27 18:51:22 2004//Tr21-5-23 -/gpmevent.c/1.21/Tue Oct 25 11:16:25 2005//Tr21-5-23 -/gpmevent.h/1.4/Thu Apr 12 18:23:53 2001//Tr21-5-23 -/gtk-glue.c/1.7/Mon Jan 24 23:33:59 2005//Tr21-5-23 -/gtk-xemacs.c/1.14/Sat Oct 16 13:08:58 2004//Tr21-5-23 -/gtk-xemacs.h/1.3/Tue Oct 14 05:03:05 2003//Tr21-5-23 -/gui-gtk.c/1.8/Thu Feb 3 16:30:37 2005//Tr21-5-23 -/gui-msw.c/1.10/Thu Nov 4 23:06:34 2004//Tr21-5-23 -/gui-x.c/1.39/Thu Feb 3 16:30:37 2005//Tr21-5-23 -/gui.c/1.31/Mon Oct 24 10:07:37 2005//Tr21-5-23 -/gui.h/1.20/Mon Oct 24 10:07:38 2005//Tr21-5-23 -/gutter.c/1.19/Tue Oct 25 11:16:25 2005//Tr21-5-23 -/gutter.h/1.5/Sun May 5 11:31:45 2002//Tr21-5-23 -/hash.c/1.14/Tue Oct 25 11:16:25 2005//Tr21-5-23 -/hash.h/1.10/Wed Jan 26 10:22:25 2005//Tr21-5-23 -/hftctl.c/1.5/Thu Nov 4 23:06:35 2004//Tr21-5-23 -/hpplay.c/1.13/Thu Nov 4 23:06:35 2004//Tr21-5-23 -/imgproc.c/1.9/Tue Oct 25 11:16:25 2005//Tr21-5-23 -/imgproc.h/1.3/Thu Apr 12 18:23:56 2001//Tr21-5-23 -/indent.c/1.21/Tue Oct 25 11:16:25 2005//Tr21-5-23 -/inline.c/1.20/Sun Mar 9 02:27:44 2003//Tr21-5-23 -/input-method-motif.c/1.17/Mon Sep 20 19:19:49 2004//Tr21-5-23 -/input-method-xlib.c/1.21/Mon Jan 24 23:33:59 2005//Tr21-5-23 -/insdel.c/1.34/Mon Jan 24 23:33:59 2005//Tr21-5-23 -/insdel.h/1.5/Wed Jun 5 09:56:09 2002//Tr21-5-23 -/intl-auto-encap-win32.c/1.10/Mon Jan 24 23:34:00 2005//Tr21-5-23 -/intl-auto-encap-win32.h/1.10/Mon Jan 24 23:34:00 2005//Tr21-5-23 -/intl-encap-win32.c/1.13/Mon Jan 24 23:34:00 2005//Tr21-5-23 -/intl-win32.c/1.16/Fri Sep 16 08:51:26 2005//Tr21-5-23 -/intl-x.c/1.4/Thu Oct 14 17:26:24 2004//Tr21-5-23 -/intl.c/1.10/Sat Sep 24 16:31:39 2005//Tr21-5-23 -/keymap.c/1.59/Tue Oct 25 11:16:25 2005//Tr21-5-23 -/keymap.h/1.9/Sun Jan 12 11:08:18 2003//Tr21-5-23 -/lastfile.c/1.3/Thu Apr 12 18:23:58 2001//Tr21-5-23 -/libinterface.c/1.1/Mon Jun 10 12:43:41 2002//Tr21-5-23 -/libinterface.h/1.2/Tue Oct 14 05:03:05 2003//Tr21-5-23 -/libsst.c/1.5/Thu Nov 4 23:06:39 2004//Tr21-5-23 -/libsst.h/1.3/Thu May 24 07:51:21 2001//Tr21-5-23 -/libst.h/1.2/Thu Apr 12 18:23:58 2001//Tr21-5-23 -/line-number.c/1.11/Wed Jun 5 09:56:15 2002//Tr21-5-23 -/line-number.h/1.5/Wed Jun 5 09:56:16 2002//Tr21-5-23 -/linuxplay.c/1.20/Thu Nov 4 23:06:39 2004//Tr21-5-23 -/lisp-disunion.h/1.18/Mon Nov 18 06:52:40 2002//Tr21-5-23 -/lisp-union.h/1.20/Tue Oct 25 11:16:26 2005//Tr21-5-23 -/lisp.h/1.132/Mon Oct 24 10:07:38 2005//Tr21-5-23 -/lread.c/1.76/Tue Jul 12 23:26:49 2005//Tr21-5-23 -/lrecord.h/1.42/Wed Oct 26 13:01:42 2005//Tr21-5-23 -/lstream.c/1.36/Tue Oct 25 08:32:48 2005//Tr21-5-23 -/lstream.h/1.20/Mon Oct 24 10:07:38 2005//Tr21-5-23 -/macros.c/1.15/Tue Oct 25 11:16:26 2005//Tr21-5-23 -/macros.h/1.3/Thu Apr 12 18:24:00 2001//Tr21-5-23 -/make-src-depend/1.8/Sun Mar 2 09:38:54 2003//Tr21-5-23 -/malloc.c/1.13/Tue Oct 25 11:16:26 2005//Tr21-5-23 -/marker.c/1.18/Tue Oct 25 11:16:26 2005//Tr21-5-23 -/mc-alloc.c/1.5/Fri Oct 14 01:22:01 2005//Tr21-5-23 -/mc-alloc.h/1.2/Fri Oct 14 01:22:01 2005//Tr21-5-23 -/md5.c/1.15/Wed Jun 5 09:56:26 2002//Tr21-5-23 -/mem-limits.h/1.14/Sat Sep 11 05:28:41 2004//Tr21-5-23 -/menubar-gtk.c/1.22/Mon Jan 24 23:34:03 2005//Tr21-5-23 -/menubar-msw.c/1.44/Mon Jan 24 23:34:03 2005//Tr21-5-23 -/menubar-x.c/1.46/Tue Oct 25 11:16:26 2005//Tr21-5-23 -/menubar.c/1.30/Tue Oct 25 11:16:26 2005//Tr21-5-23 -/menubar.h/1.8/Sun Feb 9 09:33:48 2003//Tr21-5-23 -/minibuf.c/1.21/Thu Nov 4 23:06:42 2004//Tr21-5-23 -/miscplay.c/1.10/Thu Nov 4 23:06:42 2004//Tr21-5-23 -/miscplay.h/1.4/Thu Nov 4 23:06:42 2004//Tr21-5-23 -/mule-ccl.c/1.28/Sun Jun 26 19:05:07 2005//Tr21-5-23 -/mule-ccl.h/1.3/Sun Jun 10 10:42:32 2001//Tr21-5-23 -/mule-charset.c/1.46/Tue Oct 25 11:16:26 2005//Tr21-5-23 -/mule-coding.c/1.35/Sun Jun 19 21:08:31 2005//Tr21-5-23 -/mule-wnnfns.c/1.26/Thu Nov 4 23:06:43 2004//Tr21-5-23 -/nas.c/1.18/Thu Nov 4 23:06:43 2004//Tr21-5-23 -/native-gtk-toolbar.c/1.5/Mon Jan 24 23:34:04 2005//Tr21-5-23 -/ndir.h/1.7/Wed Jun 5 09:56:36 2002//Tr21-5-23 -/nsselect.m/1.1.1.1/Wed Dec 18 22:44:08 1996//Tr21-5-23 -/nt.c/1.47/Tue Sep 27 05:32:22 2005//Tr21-5-23 -/ntheap.c/1.17/Thu Nov 4 23:06:44 2004//Tr21-5-23 -/ntplay.c/1.13/Fri Jan 28 02:36:26 2005//Tr21-5-23 -/number-gmp.c/1.5/Tue Sep 27 05:29:45 2005//Tr21-5-23 -/number-gmp.h/1.4/Tue Sep 27 05:29:45 2005//Tr21-5-23 -/number-mp.c/1.3/Wed Apr 7 02:41:30 2004//Tr21-5-23 -/number-mp.h/1.1/Mon Apr 5 22:49:56 2004//Tr21-5-23 -/number.c/1.16/Tue Oct 25 11:16:26 2005//Tr21-5-23 -/number.h/1.4/Fri May 21 20:56:32 2004//Tr21-5-23 -/objects-gtk-impl.h/1.1/Thu Jun 20 21:18:38 2002//Tr21-5-23 -/objects-gtk.c/1.16/Fri Jan 28 02:58:51 2005//Tr21-5-23 -/objects-gtk.h/1.6/Thu Jun 20 21:18:39 2002//Tr21-5-23 -/objects-impl.h/1.5/Mon Oct 24 10:07:39 2005//Tr21-5-23 -/objects-msw-impl.h/1.1/Thu Jun 20 21:18:39 2002//Tr21-5-23 -/objects-msw.c/1.47/Fri Jan 28 02:58:51 2005//Tr21-5-23 -/objects-msw.h/1.6/Thu Jun 20 21:18:39 2002//Tr21-5-23 -/objects-tty-impl.h/1.1/Thu Jun 20 21:18:39 2002//Tr21-5-23 -/objects-tty.c/1.16/Fri Jan 28 02:58:51 2005//Tr21-5-23 -/objects-tty.h/1.4/Thu Jun 20 21:18:40 2002//Tr21-5-23 -/objects-x-impl.h/1.1/Thu Jun 20 21:18:40 2002//Tr21-5-23 -/objects-x.c/1.28/Fri Jan 28 02:58:52 2005//Tr21-5-23 -/objects-x.h/1.4/Thu Jun 20 21:18:40 2002//Tr21-5-23 -/objects.c/1.29/Mon Oct 24 10:07:39 2005//Tr21-5-23 -/objects.h/1.10/Tue Sep 14 14:32:52 2004//Tr21-5-23 -/offix-cursors.h/1.2/Mon Jan 19 01:57:56 1998//Tr21-5-23 -/offix-types.h/1.2/Thu Apr 12 18:24:10 2001//Tr21-5-23 -/offix.c/1.6/Mon Aug 13 04:46:34 2001//Tr21-5-23 -/offix.h/1.4/Mon Aug 13 04:46:34 2001//Tr21-5-23 -/opaque.c/1.21/Mon Oct 24 10:07:39 2005//Tr21-5-23 -/opaque.h/1.11/Mon Oct 24 10:07:39 2005//Tr21-5-23 -/paths.h.in/1.10/Thu Apr 12 18:24:10 2001//Tr21-5-23 -/ppc.ldscript/1.2/Fri Apr 17 05:41:45 1998//Tr21-5-23 -/pre-crt0.c/1.1.1.1/Wed Dec 18 22:44:03 1996//Tr21-5-23 -/print.c/1.56/Tue Oct 25 08:32:48 2005//Tr21-5-23 -/process-nt.c/1.38/Fri Jan 28 02:36:26 2005//Tr21-5-23 -/process-slots.h/1.1/Sun Jan 12 11:08:19 2003//Tr21-5-23 -/process-unix.c/1.57/Fri Feb 4 04:06:34 2005//Tr21-5-23 -/process.c/1.69/Tue Oct 25 11:16:27 2005//Tr21-5-23 -/process.h/1.23/Tue Oct 14 05:03:06 2003//Tr21-5-23 -/procimpl.h/1.14/Mon Oct 24 10:07:39 2005//Tr21-5-23 -/profile.c/1.25/Thu Mar 10 09:12:38 2005//Tr21-5-23 -/profile.h/1.3/Tue Oct 25 11:16:27 2005//Tr21-5-23 -/ralloc.c/1.21/Tue Oct 25 11:16:27 2005//Tr21-5-23 -/rangetab.c/1.25/Mon Oct 24 10:07:40 2005//Tr21-5-23 -/rangetab.h/1.8/Mon Oct 24 10:07:40 2005//Tr21-5-23 -/realpath.c/1.21/Fri Jan 28 02:36:26 2005//Tr21-5-23 -/redisplay-gtk.c/1.17/Mon Jan 24 23:34:06 2005//Tr21-5-23 -/redisplay-msw.c/1.42/Mon Jan 24 23:34:07 2005//Tr21-5-23 -/redisplay-output.c/1.26/Mon Jan 24 23:34:07 2005//Tr21-5-23 -/redisplay-tty.c/1.25/Mon Jan 24 23:34:07 2005//Tr21-5-23 -/redisplay-x.c/1.40/Mon Jan 24 23:34:07 2005//Tr21-5-23 -/redisplay.c/1.97/Tue Oct 25 11:16:27 2005//Tr21-5-23 -/redisplay.h/1.23/Wed Mar 9 19:47:41 2005//Tr21-5-23 -/regex.c/1.56/Wed Mar 9 04:59:31 2005//Tr21-5-23 -/regex.h/1.14/Wed Mar 9 04:59:31 2005//Tr21-5-23 -/scrollbar-gtk.c/1.19/Tue Oct 25 08:32:48 2005//Tr21-5-23 -/scrollbar-gtk.h/1.3/Thu Sep 20 06:29:13 2001//Tr21-5-23 -/scrollbar-msw.c/1.31/Tue Oct 25 08:32:49 2005//Tr21-5-23 -/scrollbar-msw.h/1.5/Thu Apr 12 18:24:17 2001//Tr21-5-23 -/scrollbar-x.c/1.31/Tue Oct 25 08:32:49 2005//Tr21-5-23 -/scrollbar-x.h/1.6/Thu Sep 20 06:29:13 2001//Tr21-5-23 -/scrollbar.c/1.36/Tue Oct 25 08:32:49 2005//Tr21-5-23 -/scrollbar.h/1.7/Mon Oct 24 10:07:40 2005//Tr21-5-23 -/search.c/1.46/Mon Jan 24 23:34:09 2005//Tr21-5-23 -/select-common.h/1.6/Tue Oct 25 11:16:27 2005//Tr21-5-23 -/select-gtk.c/1.17/Mon Feb 28 20:21:50 2005//Tr21-5-23 -/select-msw.c/1.15/Mon Sep 20 19:19:59 2004//Tr21-5-23 -/select-x.c/1.23/Wed Mar 2 18:31:57 2005//Tr21-5-23 -/select.c/1.9/Tue Oct 25 11:16:27 2005//Tr21-5-23 -/select.h/1.3/Mon Feb 28 20:21:50 2005//Tr21-5-23 -/sgiplay.c/1.10/Thu Nov 4 23:06:53 2004//Tr21-5-23 -/sheap.c/1.21/Thu Feb 20 08:19:42 2003//Tr21-5-23 -/signal.c/1.29/Wed Jan 26 10:33:42 2005//Tr21-5-23 -/sound.c/1.24/Thu May 5 17:10:54 2005//Tr21-5-23 -/sound.h/1.10/Fri Jan 28 02:36:26 2005//Tr21-5-23 -/specifier.c/1.42/Mon Oct 24 10:07:40 2005//Tr21-5-23 -/specifier.h/1.18/Mon Oct 24 10:07:41 2005//Tr21-5-23 -/src-headers/1.2/Thu Apr 12 18:24:20 2001//Tr21-5-23 -/strcat.c/1.3/Thu Apr 12 18:24:20 2001//Tr21-5-23 -/strcmp.c/1.3/Thu Apr 12 18:24:20 2001//Tr21-5-23 -/strcpy.c/1.3/Thu Apr 12 18:24:20 2001//Tr21-5-23 -/strftime.c/1.7/Mon Jan 24 23:34:10 2005//Tr21-5-23 -/sunOS-fix.c/1.4/Wed Mar 13 08:52:59 2002//Tr21-5-23 -/sunplay.c/1.12/Mon Jan 24 23:34:10 2005//Tr21-5-23 -/sunpro.c/1.3/Mon Sep 20 19:20:00 2004//Tr21-5-23 -/symbols.c/1.54/Tue Oct 25 08:32:49 2005//Tr21-5-23 -/symeval.h/1.16/Tue Oct 25 08:32:49 2005//Tr21-5-23 -/symsinit.h/1.53/Tue Oct 4 17:51:24 2005//Tr21-5-23 -/syntax.c/1.24/Tue Oct 25 11:16:28 2005//Tr21-5-23 -/syntax.h/1.12/Thu Feb 20 08:19:43 2003//Tr21-5-23 -/sysdep.c/1.83/Tue Sep 27 05:32:21 2005//Tr21-5-23 -/sysdep.h/1.22/Wed Feb 25 20:05:33 2004//Tr21-5-23 -/sysdir.h/1.7/Wed Jun 5 09:57:18 2002//Tr21-5-23 -/sysdll.c/1.20/Tue Jul 12 12:22:13 2005//Tr21-5-23 -/sysdll.h/1.7/Fri May 14 15:34:40 2004//Tr21-5-23 -/sysfile.h/1.21/Tue Oct 25 11:16:28 2005//Tr21-5-23 -/sysfloat.h/1.7/Wed Mar 13 08:53:00 2002//Tr21-5-23 -/sysproc.h/1.18/Tue Oct 25 11:16:28 2005//Tr21-5-23 -/syspwd.h/1.5/Wed Jun 5 09:57:19 2002//Tr21-5-23 -/syssignal.h/1.17/Sat Mar 12 11:00:29 2005//Tr21-5-23 -/systime.h/1.19/Tue Oct 25 11:16:28 2005//Tr21-5-23 -/systty.h/1.11/Wed Mar 13 08:53:01 2002//Tr21-5-23 -/syswait.h/1.5/Mon Sep 20 19:20:02 2004//Tr21-5-23 -/syswindows.h/1.27/Tue Oct 25 11:16:28 2005//Tr21-5-23 -/termcap.c/1.6/Tue Sep 30 15:26:59 2003//Tr21-5-23 -/terminfo.c/1.5/Mon Sep 20 19:20:02 2004//Tr21-5-23 -/tests.c/1.11/Fri Apr 8 23:11:33 2005//Tr21-5-23 -/text.c/1.26/Tue Sep 27 05:29:44 2005//Tr21-5-23 -/text.h/1.28/Fri Jan 28 02:36:27 2005//Tr21-5-23 -/toolbar-common.c/1.11/Mon Jan 24 23:34:12 2005//Tr21-5-23 -/toolbar-common.h/1.2/Sat Jul 6 21:05:56 2002//Tr21-5-23 -/toolbar-gtk.c/1.7/Mon Sep 20 19:20:03 2004//Tr21-5-23 -/toolbar-msw.c/1.25/Mon Jan 24 23:34:12 2005//Tr21-5-23 -/toolbar-x.c/1.18/Mon Sep 20 19:20:03 2004//Tr21-5-23 -/toolbar.c/1.37/Tue Oct 25 11:16:28 2005//Tr21-5-23 -/toolbar.h/1.15/Mon Oct 24 10:07:41 2005//Tr21-5-23 -/tooltalk.c/1.36/Tue Oct 25 11:16:28 2005//Tr21-5-23 -/tooltalk.doc/1.4/Thu Apr 12 18:24:25 2001//Tr21-5-23 -/tooltalk.h/1.5/Fri Mar 29 04:48:44 2002//Tr21-5-23 -/tparam.c/1.8/Tue Oct 25 11:16:29 2005//Tr21-5-23 -/ui-byhand.c/1.8/Thu Nov 4 23:06:56 2004//Tr21-5-23 -/ui-gtk.c/1.24/Mon Oct 24 10:07:41 2005//Tr21-5-23 -/ui-gtk.h/1.7/Mon Oct 24 10:07:41 2005//Tr21-5-23 -/undo.c/1.14/Thu Nov 4 23:06:57 2004//Tr21-5-23 -/unexaix.c/1.13/Tue Oct 25 11:16:29 2005//Tr21-5-23 -/unexalpha.c/1.11/Tue Oct 25 11:16:29 2005//Tr21-5-23 -/unexapollo.c/1.4/Sun Jun 10 10:42:34 2001//Tr21-5-23 -/unexconvex.c/1.6/Tue Oct 25 11:16:29 2005//Tr21-5-23 -/unexcw.c/1.16/Mon Dec 6 03:52:22 2004//Tr21-5-23 -/unexec.c/1.11/Tue Oct 25 11:16:29 2005//Tr21-5-23 -/unexelf.c/1.19/Mon Oct 10 03:16:25 2005//Tr21-5-23 -/unexelfsgi.c/1.13/Mon Sep 20 19:20:05 2004//Tr21-5-23 -/unexencap.c/1.2/Mon Sep 20 19:20:06 2004//Tr21-5-23 -/unexenix.c/1.2/Mon Sep 20 19:20:06 2004//Tr21-5-23 -/unexfreebsd.c/1.7/Mon Sep 20 19:20:06 2004//Tr21-5-23 -/unexfx2800.c/1.2/Mon Sep 20 19:20:06 2004//Tr21-5-23 -/unexhp9k3.c/1.6/Mon Sep 20 19:20:06 2004//Tr21-5-23 -/unexhp9k800.c/1.7/Tue Oct 25 11:16:29 2005//Tr21-5-23 -/unexmips.c/1.4/Tue Oct 25 11:16:29 2005//Tr21-5-23 -/unexnext.c/1.3/Mon Dec 6 03:52:23 2004//Tr21-5-23 -/unexnt.c/1.20/Mon Jan 24 23:34:13 2005//Tr21-5-23 -/unexsni.c/1.4/Mon Sep 20 19:20:07 2004//Tr21-5-23 -/unexsol2-6.c/1.2/Mon Sep 20 19:20:07 2004//Tr21-5-23 -/unexsol2.c/1.4/Mon Sep 20 19:20:07 2004//Tr21-5-23 -/unexsunos4.c/1.4/Mon Sep 20 19:20:07 2004//Tr21-5-23 -/unicode.c/1.31/Tue Oct 25 11:16:29 2005//Tr21-5-23 -/universe.h/1.3/Tue Feb 15 03:17:07 2005//Tr21-5-23 -/vm-limit.c/1.5/Mon Sep 20 19:20:07 2004//Tr21-5-23 -/widget.c/1.3/Thu May 24 07:51:33 2001//Tr21-5-23 -/win32.c/1.25/Fri Jan 28 02:36:28 2005//Tr21-5-23 -/window-impl.h/1.3/Mon Oct 24 10:07:42 2005//Tr21-5-23 -/window.c/1.88/Tue Oct 25 11:16:30 2005//Tr21-5-23 -/window.h/1.20/Sun Dec 8 10:25:14 2002//Tr21-5-23 -/winslots.h/1.11/Sun Feb 9 09:33:48 2003//Tr21-5-23 -/xemacs.def.in.in/1.10/Tue Oct 25 08:32:50 2005//Tr21-5-23 -/xgccache.c/1.12/Tue Feb 15 03:17:07 2005//Tr21-5-23 -/xgccache.h/1.4/Tue Feb 15 03:17:07 2005//Tr21-5-23 -/xintrinsic.h/1.5/Thu Apr 12 18:24:30 2001//Tr21-5-23 -/xintrinsicp.h/1.3/Fri Feb 14 07:38:30 2003//Tr21-5-23 -/xmmanagerp.h/1.4/Thu Feb 20 08:19:44 2003//Tr21-5-23 -/xmotif.h/1.1/Thu Feb 20 08:19:44 2003//Tr21-5-23 -/xmprimitivep.h/1.4/Thu Feb 20 08:19:44 2003//Tr21-5-23 -/xmu.c/1.11/Mon Aug 13 04:46:43 2001//Tr21-5-23 -/xmu.h/1.3/Thu Apr 12 18:24:30 2001//Tr21-5-23 +/.cvsignore/1.11/Fri Nov 25 01:41:52 2005//Tr21-5-24 +/.dbxrc.in/1.1/Fri Nov 25 01:41:53 2005//Tr21-5-24 +/.gdbinit.in/1.1/Fri Nov 25 01:41:53 2005//Tr21-5-24 +/ChangeLog/1.907/Sun Dec 18 19:07:07 2005//Tr21-5-24 +/ChangeLog.GTK/1.2/Thu Apr 12 18:23:21 2001//Tr21-5-24 +/EmacsFrame.c/1.28/Tue Oct 25 11:16:20 2005//Tr21-5-24 +/EmacsFrame.h/1.5/Thu Apr 12 18:23:22 2001//Tr21-5-24 +/EmacsFrameP.h/1.7/Sun May 4 02:34:35 2003//Tr21-5-24 +/EmacsManager.c/1.7/Wed Dec 22 10:59:09 2004//Tr21-5-24 +/EmacsManager.h/1.3/Thu Apr 12 18:23:22 2001//Tr21-5-24 +/EmacsManagerP.h/1.2/Thu Apr 12 18:23:22 2001//Tr21-5-24 +/EmacsShell-sub.c/1.7/Mon Jan 24 23:33:46 2005//Tr21-5-24 +/EmacsShell.c/1.3/Mon Jan 24 23:33:46 2005//Tr21-5-24 +/EmacsShell.h/1.3/Thu Apr 12 18:23:22 2001//Tr21-5-24 +/EmacsShellP.h/1.2/Thu Apr 12 18:23:23 2001//Tr21-5-24 +/ExternalClient-Xlib.c/1.2/Wed Jun 2 09:16:20 2004//Tr21-5-24 +/ExternalClient.c/1.8/Tue Oct 25 11:16:21 2005//Tr21-5-24 +/ExternalClient.h/1.2/Thu Apr 12 18:23:23 2001//Tr21-5-24 +/ExternalClientP.h/1.2/Thu Apr 12 18:23:23 2001//Tr21-5-24 +/ExternalShell.c/1.8/Tue Oct 25 11:16:21 2005//Tr21-5-24 +/ExternalShell.h/1.2/Thu Apr 12 18:23:23 2001//Tr21-5-24 +/ExternalShellP.h/1.2/Thu Apr 12 18:23:23 2001//Tr21-5-24 +/Makefile.in.in/1.123/Sat Nov 26 11:46:06 2005//Tr21-5-24 +/README/1.4/Thu Apr 12 18:23:24 2001//Tr21-5-24 +/README.global-renaming/1.1/Wed Jun 5 12:01:09 2002//Tr21-5-24 +/README.kkcc/1.3/Thu Jul 31 13:32:25 2003//Tr21-5-24 +/abbrev.c/1.20/Thu Nov 4 23:06:15 2004//Tr21-5-24 +/alloc.c/1.120/Fri Nov 25 01:41:55 2005//Tr21-5-24 +/alloca.c/1.10/Fri Sep 30 02:15:08 2005//Tr21-5-24 +/alloca.s/1.2/Thu Apr 12 18:23:25 2001//Tr21-5-24 +/backtrace.h/1.11/Sat Jan 29 09:15:58 2005//Tr21-5-24 +/balloon-x.c/1.9/Thu Jun 20 21:18:21 2002//Tr21-5-24 +/balloon_help.c/1.11/Mon Sep 20 19:19:35 2004//Tr21-5-24 +/balloon_help.h/1.6/Thu Apr 12 18:23:25 2001//Tr21-5-24 +/bitmaps.h/1.4/Thu Apr 12 18:23:25 2001//Tr21-5-24 +/blocktype.c/1.5/Thu Sep 20 06:28:48 2001//Tr21-5-24 +/blocktype.h/1.5/Thu Sep 20 06:28:48 2001//Tr21-5-24 +/broken-sun.h/1.6/Thu May 22 07:41:25 2003//Tr21-5-24 +/buffer.c/1.75/Sat Dec 17 21:04:16 2005//Tr21-5-24 +/buffer.h/1.34/Fri Nov 25 01:41:56 2005//Tr21-5-24 +/bufslots.h/1.10/Sun Jan 12 11:08:08 2003//Tr21-5-24 +/bytecode.c/1.48/Fri Nov 25 01:41:56 2005//Tr21-5-24 +/bytecode.h/1.9/Fri Nov 25 01:41:56 2005//Tr21-5-24 +/callint.c/1.29/Thu Nov 4 23:06:16 2004//Tr21-5-24 +/casefiddle.c/1.13/Thu Nov 4 23:06:16 2004//Tr21-5-24 +/casetab.c/1.17/Mon Oct 24 10:07:34 2005//Tr21-5-24 +/casetab.h/1.7/Mon Oct 24 10:07:34 2005//Tr21-5-24 +/charset.h/1.12/Mon Oct 24 10:07:34 2005//Tr21-5-24 +/chartab.c/1.39/Sun Dec 18 10:59:14 2005//Tr21-5-24 +/chartab.h/1.16/Mon Oct 24 10:07:34 2005//Tr21-5-24 +/cm.c/1.10/Mon Jan 24 23:33:48 2005//Tr21-5-24 +/cm.h/1.3/Thu Apr 12 18:23:28 2001//Tr21-5-24 +/cmdloop.c/1.24/Tue Oct 25 11:16:21 2005//Tr21-5-24 +/cmds.c/1.19/Sun Jul 17 20:08:47 2005//Tr21-5-24 +/coding-system-slots.h/1.1/Sun Jan 12 11:08:09 2003//Tr21-5-24 +/commands.h/1.5/Tue Sep 14 14:32:46 2004//Tr21-5-24 +/compiler.h/1.11/Sat Nov 26 11:46:07 2005//Tr21-5-24 +/config.h.in/1.104/Sat Nov 26 11:46:07 2005//Tr21-5-24 +/conslots.h/1.6/Sun Jan 12 11:08:09 2003//Tr21-5-24 +/console-gtk-impl.h/1.6/Fri Nov 25 01:41:57 2005//Tr21-5-24 +/console-gtk.c/1.6/Sun Jun 26 18:05:02 2005//Tr21-5-24 +/console-gtk.h/1.9/Wed Jul 7 12:01:06 2004//Tr21-5-24 +/console-impl.h/1.12/Mon Oct 24 10:07:34 2005//Tr21-5-24 +/console-msw-impl.h/1.6/Fri Nov 25 01:41:57 2005//Tr21-5-24 +/console-msw.c/1.20/Fri Jul 8 08:27:34 2005//Tr21-5-24 +/console-msw.h/1.46/Thu Nov 4 23:06:18 2004//Tr21-5-24 +/console-stream-impl.h/1.3/Fri Nov 25 01:41:57 2005//Tr21-5-24 +/console-stream.c/1.26/Fri Nov 25 01:41:57 2005//Tr21-5-24 +/console-stream.h/1.8/Fri Nov 25 01:41:57 2005//Tr21-5-24 +/console-tty-impl.h/1.2/Fri Nov 25 01:41:57 2005//Tr21-5-24 +/console-tty.c/1.34/Fri Nov 25 01:41:58 2005//Tr21-5-24 +/console-tty.h/1.13/Sun Jan 12 11:08:10 2003//Tr21-5-24 +/console-x-impl.h/1.5/Sat Nov 26 11:46:07 2005//Tr21-5-24 +/console-x.c/1.16/Sat Dec 17 19:47:02 2005//Tr21-5-24 +/console-x.h/1.22/Sat Nov 26 11:46:07 2005//Tr21-5-24 +/console.c/1.46/Sun Dec 18 11:44:28 2005//Tr21-5-24 +/console.h/1.42/Mon Mar 8 15:23:02 2004//Tr21-5-24 +/data.c/1.65/Mon Oct 24 10:07:35 2005//Tr21-5-24 +/database.c/1.38/Wed Nov 16 07:22:46 2005//Tr21-5-24 +/database.h/1.4/Thu Apr 12 18:23:31 2001//Tr21-5-24 +/debug.c/1.10/Thu Nov 4 23:06:19 2004//Tr21-5-24 +/debug.h/1.6/Mon Jan 24 23:33:49 2005//Tr21-5-24 +/depend/1.60/Sat Nov 26 12:09:39 2005//Tr21-5-24 +/device-gtk.c/1.16/Fri Nov 25 01:41:58 2005//Tr21-5-24 +/device-impl.h/1.6/Mon Oct 24 10:07:35 2005//Tr21-5-24 +/device-msw.c/1.60/Fri Nov 25 01:41:58 2005//Tr21-5-24 +/device-tty.c/1.19/Fri Nov 25 01:41:59 2005//Tr21-5-24 +/device-x.c/1.66/Fri Nov 25 01:41:59 2005//Tr21-5-24 +/device.c/1.37/Fri Nov 25 01:41:59 2005//Tr21-5-24 +/device.h/1.18/Sun Jan 12 11:08:11 2003//Tr21-5-24 +/devslots.h/1.3/Sun Jan 12 11:08:11 2003//Tr21-5-24 +/dgif_lib.c/1.13/Thu May 6 12:12:13 2004//Tr21-5-24 +/dialog-gtk.c/1.7/Mon Sep 20 19:19:38 2004//Tr21-5-24 +/dialog-msw.c/1.34/Mon Oct 24 10:07:35 2005//Tr21-5-24 +/dialog-x.c/1.15/Mon Sep 20 19:19:38 2004//Tr21-5-24 +/dialog.c/1.6/Thu Jun 20 21:18:27 2002//Tr21-5-24 +/dired-msw.c/1.19/Fri Jan 28 02:36:24 2005//Tr21-5-24 +/dired.c/1.38/Thu Nov 4 23:06:21 2004//Tr21-5-24 +/doc.c/1.35/Tue Oct 25 11:16:22 2005//Tr21-5-24 +/doprnt.c/1.30/Mon Jan 24 23:33:50 2005//Tr21-5-24 +/dragdrop.c/1.9/Tue Oct 25 11:16:22 2005//Tr21-5-24 +/dragdrop.h/1.4/Thu Nov 4 23:06:22 2004//Tr21-5-24 +/dump-data.c/1.3/Thu Nov 4 23:06:22 2004//Tr21-5-24 +/dump-data.h/1.3/Thu Nov 4 23:06:22 2004//Tr21-5-24 +/dumper.c/1.33/Mon Nov 28 15:44:06 2005//Tr21-5-24 +/dumper.h/1.8/Fri Apr 8 23:11:23 2005//Tr21-5-24 +/dynarr.c/1.13/Fri Nov 25 01:41:59 2005//Tr21-5-24 +/ecrt0.c/1.4/Tue Nov 12 18:58:28 2002//Tr21-5-24 +/editfns.c/1.53/Sun Jul 17 20:08:47 2005//Tr21-5-24 +/elhash.c/1.44/Fri Nov 25 01:42:00 2005//Tr21-5-24 +/elhash.h/1.16/Fri Nov 25 01:42:00 2005//Tr21-5-24 +/emacs-marshals.c/1.9/Wed Jan 26 10:22:25 2005//Tr21-5-24 +/emacs-widget-accessors.c/1.4/Thu May 31 02:00:31 2001//Tr21-5-24 +/emacs.c/1.162/Sat Nov 26 11:46:07 2005//Tr21-5-24 +/emodules.c/1.23/Thu Nov 4 23:06:24 2004//Tr21-5-24 +/emodules.h/1.11/Thu Nov 4 23:06:24 2004//Tr21-5-24 +/esd.c/1.8/Thu Nov 4 23:06:25 2004//Tr21-5-24 +/eval.c/1.91/Fri Nov 25 01:42:00 2005//Tr21-5-24 +/event-Xt.c/1.90/Sat Dec 17 19:47:03 2005//Tr21-5-24 +/event-gtk.c/1.31/Sun Jul 3 21:48:00 2005//Tr21-5-24 +/event-gtk.h/1.2/Thu Nov 4 23:06:26 2004//Tr21-5-24 +/event-msw.c/1.106/Fri Nov 25 01:42:01 2005//Tr21-5-24 +/event-stream.c/1.92/Tue Oct 25 11:16:23 2005//Tr21-5-24 +/event-tty.c/1.16/Thu Nov 4 23:06:27 2004//Tr21-5-24 +/event-unixoid.c/1.21/Fri Feb 7 11:50:53 2003//Tr21-5-24 +/event-xlike-inc.c/1.2/Sun Jun 26 18:05:04 2005//Tr21-5-24 +/events.c/1.71/Fri Nov 25 01:42:01 2005//Tr21-5-24 +/events.h/1.42/Mon Oct 24 10:07:36 2005//Tr21-5-24 +/extents-impl.h/1.3/Mon Oct 24 10:07:36 2005//Tr21-5-24 +/extents.c/1.63/Fri Nov 25 01:42:01 2005//Tr21-5-24 +/extents.h/1.20/Fri Nov 25 01:42:02 2005//Tr21-5-24 +/extw-Xlib.c/1.1.1.1/Wed Dec 18 22:44:06 1996//Tr21-5-24 +/extw-Xlib.h/1.2/Thu Apr 12 18:23:43 2001//Tr21-5-24 +/extw-Xt.c/1.6/Sun Jun 6 12:35:45 2004//Tr21-5-24 +/extw-Xt.h/1.2/Thu Apr 12 18:23:43 2001//Tr21-5-24 +/faces.c/1.49/Sat Nov 26 11:46:08 2005//Tr21-5-24 +/faces.h/1.16/Sat Nov 26 11:46:08 2005//Tr21-5-24 +/file-coding.c/1.50/Sat Dec 17 19:47:03 2005//Tr21-5-24 +/file-coding.h/1.27/Mon Oct 24 10:07:37 2005//Tr21-5-24 +/fileio.c/1.104/Fri Jan 28 02:36:24 2005//Tr21-5-24 +/filelock.c/1.23/Thu Nov 4 23:06:29 2004//Tr21-5-24 +/filemode.c/1.4/Mon Sep 20 19:19:43 2004//Tr21-5-24 +/floatfns.c/1.22/Mon Sep 20 19:19:43 2004//Tr21-5-24 +/fns.c/1.64/Tue Oct 25 11:16:24 2005//Tr21-5-24 +/font-lock.c/1.16/Mon Jan 24 23:33:55 2005//Tr21-5-24 +/frame-gtk.c/1.22/Fri Nov 25 01:42:02 2005//Tr21-5-24 +/frame-impl.h/1.6/Mon Oct 24 10:07:37 2005//Tr21-5-24 +/frame-msw.c/1.59/Fri Nov 25 01:42:02 2005//Tr21-5-24 +/frame-tty.c/1.15/Tue Oct 25 11:16:24 2005//Tr21-5-24 +/frame-x.c/1.72/Sat Nov 26 11:46:08 2005//Tr21-5-24 +/frame.c/1.74/Fri Nov 25 01:42:03 2005//Tr21-5-24 +/frame.h/1.29/Fri Feb 21 06:56:57 2003//Tr21-5-24 +/frameslots.h/1.9/Sun Mar 9 02:27:43 2003//Tr21-5-24 +/free-hook.c/1.13/Wed Jan 26 10:36:08 2005//Tr21-5-24 +/gc.c/1.1/Fri Nov 25 01:42:03 2005//Tr21-5-24 +/gc.h/1.1/Fri Nov 25 01:42:04 2005//Tr21-5-24 +/gccache-gtk.c/1.7/Wed Jan 26 10:22:26 2005//Tr21-5-24 +/gccache-gtk.h/1.5/Tue Feb 15 03:17:08 2005//Tr21-5-24 +/general-slots.h/1.16/Sun Jul 3 21:48:01 2005//Tr21-5-24 +/general.c/1.16/Tue Aug 19 02:07:16 2003//Tr21-5-24 +/getloadavg.c/1.18/Thu Feb 20 08:19:42 2003//Tr21-5-24 +/getpagesize.h/1.4/Thu Apr 12 18:23:49 2001//Tr21-5-24 +/gif_io.c/1.6/Tue Sep 14 14:32:50 2004//Tr21-5-24 +/gifrlib.h/1.7/Wed Sep 15 04:26:16 2004//Tr21-5-24 +/glade.c/1.5/Sun May 2 04:06:59 2004//Tr21-5-24 +/glyphs-eimage.c/1.27/Sat Nov 26 11:46:08 2005//Tr21-5-24 +/glyphs-gtk.c/1.32/Tue Nov 22 11:24:44 2005//Tr21-5-24 +/glyphs-gtk.h/1.4/Tue Nov 22 11:24:45 2005//Tr21-5-24 +/glyphs-msw.c/1.56/Tue Sep 27 05:48:26 2005//Tr21-5-24 +/glyphs-msw.h/1.10/Sun May 5 11:31:38 2002//Tr21-5-24 +/glyphs-shared.c/1.8/Thu Nov 4 23:06:33 2004//Tr21-5-24 +/glyphs-widget.c/1.18/Sat Nov 26 11:46:08 2005//Tr21-5-24 +/glyphs-x.c/1.84/Sat Nov 26 11:46:08 2005//Tr21-5-24 +/glyphs-x.h/1.5/Thu Apr 12 18:23:52 2001//Tr21-5-24 +/glyphs.c/1.55/Fri Nov 25 01:42:04 2005//Tr21-5-24 +/glyphs.h/1.41/Fri Nov 25 01:42:04 2005//Tr21-5-24 +/gmalloc.c/1.18/Mon Sep 27 18:51:22 2004//Tr21-5-24 +/gpmevent.c/1.21/Tue Oct 25 11:16:25 2005//Tr21-5-24 +/gpmevent.h/1.4/Thu Apr 12 18:23:53 2001//Tr21-5-24 +/gtk-glue.c/1.7/Mon Jan 24 23:33:59 2005//Tr21-5-24 +/gtk-xemacs.c/1.15/Tue Nov 22 11:24:45 2005//Tr21-5-24 +/gtk-xemacs.h/1.3/Tue Oct 14 05:03:05 2003//Tr21-5-24 +/gui-gtk.c/1.8/Thu Feb 3 16:30:37 2005//Tr21-5-24 +/gui-msw.c/1.10/Thu Nov 4 23:06:34 2004//Tr21-5-24 +/gui-x.c/1.39/Thu Feb 3 16:30:37 2005//Tr21-5-24 +/gui.c/1.31/Mon Oct 24 10:07:37 2005//Tr21-5-24 +/gui.h/1.20/Mon Oct 24 10:07:38 2005//Tr21-5-24 +/gutter.c/1.19/Tue Oct 25 11:16:25 2005//Tr21-5-24 +/gutter.h/1.5/Sun May 5 11:31:45 2002//Tr21-5-24 +/hash.c/1.14/Tue Oct 25 11:16:25 2005//Tr21-5-24 +/hash.h/1.10/Wed Jan 26 10:22:25 2005//Tr21-5-24 +/hftctl.c/1.5/Thu Nov 4 23:06:35 2004//Tr21-5-24 +/hpplay.c/1.13/Thu Nov 4 23:06:35 2004//Tr21-5-24 +/imgproc.c/1.9/Tue Oct 25 11:16:25 2005//Tr21-5-24 +/imgproc.h/1.3/Thu Apr 12 18:23:56 2001//Tr21-5-24 +/indent.c/1.21/Tue Oct 25 11:16:25 2005//Tr21-5-24 +/inline.c/1.22/Sat Nov 26 11:46:09 2005//Tr21-5-24 +/input-method-motif.c/1.17/Mon Sep 20 19:19:49 2004//Tr21-5-24 +/input-method-xlib.c/1.21/Mon Jan 24 23:33:59 2005//Tr21-5-24 +/insdel.c/1.34/Mon Jan 24 23:33:59 2005//Tr21-5-24 +/insdel.h/1.5/Wed Jun 5 09:56:09 2002//Tr21-5-24 +/intl-auto-encap-win32.c/1.10/Mon Jan 24 23:34:00 2005//Tr21-5-24 +/intl-auto-encap-win32.h/1.10/Mon Jan 24 23:34:00 2005//Tr21-5-24 +/intl-encap-win32.c/1.13/Mon Jan 24 23:34:00 2005//Tr21-5-24 +/intl-win32.c/1.16/Fri Sep 16 08:51:26 2005//Tr21-5-24 +/intl-x.c/1.4/Thu Oct 14 17:26:24 2004//Tr21-5-24 +/intl.c/1.10/Sat Sep 24 16:31:39 2005//Tr21-5-24 +/keymap.c/1.61/Sat Nov 26 13:20:23 2005//Tr21-5-24 +/keymap.h/1.9/Sun Jan 12 11:08:18 2003//Tr21-5-24 +/lastfile.c/1.3/Thu Apr 12 18:23:58 2001//Tr21-5-24 +/libinterface.c/1.1/Mon Jun 10 12:43:41 2002//Tr21-5-24 +/libinterface.h/1.2/Tue Oct 14 05:03:05 2003//Tr21-5-24 +/libsst.c/1.5/Thu Nov 4 23:06:39 2004//Tr21-5-24 +/libsst.h/1.3/Thu May 24 07:51:21 2001//Tr21-5-24 +/libst.h/1.2/Thu Apr 12 18:23:58 2001//Tr21-5-24 +/line-number.c/1.11/Wed Jun 5 09:56:15 2002//Tr21-5-24 +/line-number.h/1.5/Wed Jun 5 09:56:16 2002//Tr21-5-24 +/linuxplay.c/1.20/Thu Nov 4 23:06:39 2004//Tr21-5-24 +/lisp-disunion.h/1.18/Mon Nov 18 06:52:40 2002//Tr21-5-24 +/lisp-union.h/1.20/Tue Oct 25 11:16:26 2005//Tr21-5-24 +/lisp.h/1.136/Sat Nov 26 11:46:09 2005//Tr21-5-24 +/lread.c/1.76/Tue Jul 12 23:26:49 2005//Tr21-5-24 +/lrecord.h/1.46/Sun Nov 27 10:51:25 2005//Tr21-5-24 +/lstream.c/1.36/Tue Oct 25 08:32:48 2005//Tr21-5-24 +/lstream.h/1.20/Mon Oct 24 10:07:38 2005//Tr21-5-24 +/macros.c/1.15/Tue Oct 25 11:16:26 2005//Tr21-5-24 +/macros.h/1.3/Thu Apr 12 18:24:00 2001//Tr21-5-24 +/make-src-depend/1.8/Sun Mar 2 09:38:54 2003//Tr21-5-24 +/malloc.c/1.13/Tue Oct 25 11:16:26 2005//Tr21-5-24 +/marker.c/1.18/Tue Oct 25 11:16:26 2005//Tr21-5-24 +/mc-alloc.c/1.6/Fri Nov 25 01:42:05 2005//Tr21-5-24 +/mc-alloc.h/1.3/Fri Nov 25 01:42:05 2005//Tr21-5-24 +/md5.c/1.15/Wed Jun 5 09:56:26 2002//Tr21-5-24 +/mem-limits.h/1.14/Sat Sep 11 05:28:41 2004//Tr21-5-24 +/menubar-gtk.c/1.22/Mon Jan 24 23:34:03 2005//Tr21-5-24 +/menubar-msw.c/1.44/Mon Jan 24 23:34:03 2005//Tr21-5-24 +/menubar-x.c/1.46/Tue Oct 25 11:16:26 2005//Tr21-5-24 +/menubar.c/1.30/Tue Oct 25 11:16:26 2005//Tr21-5-24 +/menubar.h/1.8/Sun Feb 9 09:33:48 2003//Tr21-5-24 +/minibuf.c/1.21/Thu Nov 4 23:06:42 2004//Tr21-5-24 +/miscplay.c/1.10/Thu Nov 4 23:06:42 2004//Tr21-5-24 +/miscplay.h/1.4/Thu Nov 4 23:06:42 2004//Tr21-5-24 +/mule-ccl.c/1.28/Sun Jun 26 19:05:07 2005//Tr21-5-24 +/mule-ccl.h/1.3/Sun Jun 10 10:42:32 2001//Tr21-5-24 +/mule-charset.c/1.46/Tue Oct 25 11:16:26 2005//Tr21-5-24 +/mule-coding.c/1.36/Tue Nov 22 07:19:32 2005//Tr21-5-24 +/mule-wnnfns.c/1.26/Thu Nov 4 23:06:43 2004//Tr21-5-24 +/nas.c/1.18/Thu Nov 4 23:06:43 2004//Tr21-5-24 +/native-gtk-toolbar.c/1.5/Mon Jan 24 23:34:04 2005//Tr21-5-24 +/ndir.h/1.7/Wed Jun 5 09:56:36 2002//Tr21-5-24 +/nsselect.m/1.1.1.1/Wed Dec 18 22:44:08 1996//Tr21-5-24 +/nt.c/1.47/Tue Sep 27 05:32:22 2005//Tr21-5-24 +/ntheap.c/1.17/Thu Nov 4 23:06:44 2004//Tr21-5-24 +/ntplay.c/1.13/Fri Jan 28 02:36:26 2005//Tr21-5-24 +/number-gmp.c/1.5/Tue Sep 27 05:29:45 2005//Tr21-5-24 +/number-gmp.h/1.4/Tue Sep 27 05:29:45 2005//Tr21-5-24 +/number-mp.c/1.3/Wed Apr 7 02:41:30 2004//Tr21-5-24 +/number-mp.h/1.1/Mon Apr 5 22:49:56 2004//Tr21-5-24 +/number.c/1.16/Tue Oct 25 11:16:26 2005//Tr21-5-24 +/number.h/1.4/Fri May 21 20:56:32 2004//Tr21-5-24 +/objects-gtk-impl.h/1.1/Thu Jun 20 21:18:38 2002//Tr21-5-24 +/objects-gtk.c/1.16/Fri Jan 28 02:58:51 2005//Tr21-5-24 +/objects-gtk.h/1.6/Thu Jun 20 21:18:39 2002//Tr21-5-24 +/objects-impl.h/1.6/Sat Nov 26 11:46:09 2005//Tr21-5-24 +/objects-msw-impl.h/1.1/Thu Jun 20 21:18:39 2002//Tr21-5-24 +/objects-msw.c/1.47/Fri Jan 28 02:58:51 2005//Tr21-5-24 +/objects-msw.h/1.6/Thu Jun 20 21:18:39 2002//Tr21-5-24 +/objects-tty-impl.h/1.2/Fri Nov 25 01:42:05 2005//Tr21-5-24 +/objects-tty.c/1.17/Fri Nov 25 01:42:06 2005//Tr21-5-24 +/objects-tty.h/1.4/Thu Jun 20 21:18:40 2002//Tr21-5-24 +/objects-x-impl.h/1.2/Sat Nov 26 11:46:09 2005//Tr21-5-24 +/objects-x.c/1.30/Sat Nov 26 18:25:03 2005//Tr21-5-24 +/objects-x.h/1.5/Sat Nov 26 11:46:10 2005//Tr21-5-24 +/objects.c/1.31/Sat Nov 26 11:46:10 2005//Tr21-5-24 +/objects.h/1.11/Sat Nov 26 11:46:10 2005//Tr21-5-24 +/offix-cursors.h/1.2/Mon Jan 19 01:57:56 1998//Tr21-5-24 +/offix-types.h/1.2/Thu Apr 12 18:24:10 2001//Tr21-5-24 +/offix.c/1.6/Mon Aug 13 04:46:34 2001//Tr21-5-24 +/offix.h/1.4/Mon Aug 13 04:46:34 2001//Tr21-5-24 +/opaque.c/1.21/Mon Oct 24 10:07:39 2005//Tr21-5-24 +/opaque.h/1.11/Mon Oct 24 10:07:39 2005//Tr21-5-24 +/paths.h.in/1.10/Thu Apr 12 18:24:10 2001//Tr21-5-24 +/ppc.ldscript/1.2/Fri Apr 17 05:41:45 1998//Tr21-5-24 +/pre-crt0.c/1.1.1.1/Wed Dec 18 22:44:03 1996//Tr21-5-24 +/print.c/1.59/Fri Nov 25 01:42:06 2005//Tr21-5-24 +/process-nt.c/1.38/Fri Jan 28 02:36:26 2005//Tr21-5-24 +/process-slots.h/1.1/Sun Jan 12 11:08:19 2003//Tr21-5-24 +/process-unix.c/1.57/Fri Feb 4 04:06:34 2005//Tr21-5-24 +/process.c/1.69/Tue Oct 25 11:16:27 2005//Tr21-5-24 +/process.h/1.23/Tue Oct 14 05:03:06 2003//Tr21-5-24 +/procimpl.h/1.14/Mon Oct 24 10:07:39 2005//Tr21-5-24 +/profile.c/1.25/Thu Mar 10 09:12:38 2005//Tr21-5-24 +/profile.h/1.3/Tue Oct 25 11:16:27 2005//Tr21-5-24 +/ralloc.c/1.21/Tue Oct 25 11:16:27 2005//Tr21-5-24 +/rangetab.c/1.25/Mon Oct 24 10:07:40 2005//Tr21-5-24 +/rangetab.h/1.8/Mon Oct 24 10:07:40 2005//Tr21-5-24 +/realpath.c/1.23/Wed Nov 2 10:01:58 2005//Tr21-5-24 +/redisplay-gtk.c/1.18/Tue Nov 22 11:24:45 2005//Tr21-5-24 +/redisplay-msw.c/1.42/Mon Jan 24 23:34:07 2005//Tr21-5-24 +/redisplay-output.c/1.26/Mon Jan 24 23:34:07 2005//Tr21-5-24 +/redisplay-tty.c/1.25/Mon Jan 24 23:34:07 2005//Tr21-5-24 +/redisplay-x.c/1.41/Sat Nov 26 11:46:10 2005//Tr21-5-24 +/redisplay.c/1.98/Sat Nov 26 11:46:10 2005//Tr21-5-24 +/redisplay.h/1.23/Wed Mar 9 19:47:41 2005//Tr21-5-24 +/regex.c/1.56/Wed Mar 9 04:59:31 2005//Tr21-5-24 +/regex.h/1.14/Wed Mar 9 04:59:31 2005//Tr21-5-24 +/scrollbar-gtk.c/1.19/Tue Oct 25 08:32:48 2005//Tr21-5-24 +/scrollbar-gtk.h/1.3/Thu Sep 20 06:29:13 2001//Tr21-5-24 +/scrollbar-msw.c/1.31/Tue Oct 25 08:32:49 2005//Tr21-5-24 +/scrollbar-msw.h/1.5/Thu Apr 12 18:24:17 2001//Tr21-5-24 +/scrollbar-x.c/1.31/Tue Oct 25 08:32:49 2005//Tr21-5-24 +/scrollbar-x.h/1.6/Thu Sep 20 06:29:13 2001//Tr21-5-24 +/scrollbar.c/1.36/Tue Oct 25 08:32:49 2005//Tr21-5-24 +/scrollbar.h/1.7/Mon Oct 24 10:07:40 2005//Tr21-5-24 +/search.c/1.46/Mon Jan 24 23:34:09 2005//Tr21-5-24 +/select-common.h/1.6/Tue Oct 25 11:16:27 2005//Tr21-5-24 +/select-gtk.c/1.17/Mon Feb 28 20:21:50 2005//Tr21-5-24 +/select-msw.c/1.15/Mon Sep 20 19:19:59 2004//Tr21-5-24 +/select-x.c/1.23/Wed Mar 2 18:31:57 2005//Tr21-5-24 +/select.c/1.9/Tue Oct 25 11:16:27 2005//Tr21-5-24 +/select.h/1.3/Mon Feb 28 20:21:50 2005//Tr21-5-24 +/sgiplay.c/1.10/Thu Nov 4 23:06:53 2004//Tr21-5-24 +/sheap.c/1.21/Thu Feb 20 08:19:42 2003//Tr21-5-24 +/signal.c/1.29/Wed Jan 26 10:33:42 2005//Tr21-5-24 +/sound.c/1.25/Wed Nov 16 07:22:46 2005//Tr21-5-24 +/sound.h/1.10/Fri Jan 28 02:36:26 2005//Tr21-5-24 +/specifier.c/1.43/Fri Nov 25 01:42:06 2005//Tr21-5-24 +/specifier.h/1.19/Fri Nov 25 01:42:06 2005//Tr21-5-24 +/src-headers/1.2/Thu Apr 12 18:24:20 2001//Tr21-5-24 +/strcat.c/1.3/Thu Apr 12 18:24:20 2001//Tr21-5-24 +/strcmp.c/1.3/Thu Apr 12 18:24:20 2001//Tr21-5-24 +/strcpy.c/1.3/Thu Apr 12 18:24:20 2001//Tr21-5-24 +/strftime.c/1.7/Mon Jan 24 23:34:10 2005//Tr21-5-24 +/sunOS-fix.c/1.4/Wed Mar 13 08:52:59 2002//Tr21-5-24 +/sunplay.c/1.12/Mon Jan 24 23:34:10 2005//Tr21-5-24 +/sunpro.c/1.3/Mon Sep 20 19:20:00 2004//Tr21-5-24 +/symbols.c/1.54/Tue Oct 25 08:32:49 2005//Tr21-5-24 +/symeval.h/1.16/Tue Oct 25 08:32:49 2005//Tr21-5-24 +/symsinit.h/1.54/Sat Nov 26 11:46:10 2005//Tr21-5-24 +/syntax.c/1.25/Fri Nov 25 01:42:06 2005//Tr21-5-24 +/syntax.h/1.13/Fri Nov 25 01:42:07 2005//Tr21-5-24 +/sysdep.c/1.83/Tue Sep 27 05:32:21 2005//Tr21-5-24 +/sysdep.h/1.22/Wed Feb 25 20:05:33 2004//Tr21-5-24 +/sysdir.h/1.7/Wed Jun 5 09:57:18 2002//Tr21-5-24 +/sysdll.c/1.20/Tue Jul 12 12:22:13 2005//Tr21-5-24 +/sysdll.h/1.7/Fri May 14 15:34:40 2004//Tr21-5-24 +/sysfile.h/1.21/Tue Oct 25 11:16:28 2005//Tr21-5-24 +/sysfloat.h/1.7/Wed Mar 13 08:53:00 2002//Tr21-5-24 +/sysproc.h/1.18/Tue Oct 25 11:16:28 2005//Tr21-5-24 +/syspwd.h/1.5/Wed Jun 5 09:57:19 2002//Tr21-5-24 +/syssignal.h/1.17/Sat Mar 12 11:00:29 2005//Tr21-5-24 +/systime.h/1.19/Tue Oct 25 11:16:28 2005//Tr21-5-24 +/systty.h/1.11/Wed Mar 13 08:53:01 2002//Tr21-5-24 +/syswait.h/1.5/Mon Sep 20 19:20:02 2004//Tr21-5-24 +/syswindows.h/1.27/Tue Oct 25 11:16:28 2005//Tr21-5-24 +/termcap.c/1.6/Tue Sep 30 15:26:59 2003//Tr21-5-24 +/terminfo.c/1.5/Mon Sep 20 19:20:02 2004//Tr21-5-24 +/tests.c/1.11/Fri Apr 8 23:11:33 2005//Tr21-5-24 +/text.c/1.26/Tue Sep 27 05:29:44 2005//Tr21-5-24 +/text.h/1.29/Sun Nov 13 10:48:04 2005//Tr21-5-24 +/toolbar-common.c/1.12/Sat Nov 26 11:46:11 2005//Tr21-5-24 +/toolbar-common.h/1.2/Sat Jul 6 21:05:56 2002//Tr21-5-24 +/toolbar-gtk.c/1.7/Mon Sep 20 19:20:03 2004//Tr21-5-24 +/toolbar-msw.c/1.25/Mon Jan 24 23:34:12 2005//Tr21-5-24 +/toolbar-x.c/1.18/Mon Sep 20 19:20:03 2004//Tr21-5-24 +/toolbar.c/1.38/Tue Nov 22 09:02:43 2005//Tr21-5-24 +/toolbar.h/1.15/Mon Oct 24 10:07:41 2005//Tr21-5-24 +/tooltalk.c/1.36/Tue Oct 25 11:16:28 2005//Tr21-5-24 +/tooltalk.doc/1.4/Thu Apr 12 18:24:25 2001//Tr21-5-24 +/tooltalk.h/1.5/Fri Mar 29 04:48:44 2002//Tr21-5-24 +/tparam.c/1.8/Tue Oct 25 11:16:29 2005//Tr21-5-24 +/ui-byhand.c/1.8/Thu Nov 4 23:06:56 2004//Tr21-5-24 +/ui-gtk.c/1.24/Mon Oct 24 10:07:41 2005//Tr21-5-24 +/ui-gtk.h/1.7/Mon Oct 24 10:07:41 2005//Tr21-5-24 +/undo.c/1.14/Thu Nov 4 23:06:57 2004//Tr21-5-24 +/unexaix.c/1.13/Tue Oct 25 11:16:29 2005//Tr21-5-24 +/unexalpha.c/1.11/Tue Oct 25 11:16:29 2005//Tr21-5-24 +/unexapollo.c/1.4/Sun Jun 10 10:42:34 2001//Tr21-5-24 +/unexconvex.c/1.6/Tue Oct 25 11:16:29 2005//Tr21-5-24 +/unexcw.c/1.16/Mon Dec 6 03:52:22 2004//Tr21-5-24 +/unexec.c/1.11/Tue Oct 25 11:16:29 2005//Tr21-5-24 +/unexelf.c/1.20/Sat Oct 29 07:18:21 2005//Tr21-5-24 +/unexelfsgi.c/1.13/Mon Sep 20 19:20:05 2004//Tr21-5-24 +/unexencap.c/1.2/Mon Sep 20 19:20:06 2004//Tr21-5-24 +/unexenix.c/1.2/Mon Sep 20 19:20:06 2004//Tr21-5-24 +/unexfreebsd.c/1.7/Mon Sep 20 19:20:06 2004//Tr21-5-24 +/unexfx2800.c/1.2/Mon Sep 20 19:20:06 2004//Tr21-5-24 +/unexhp9k3.c/1.6/Mon Sep 20 19:20:06 2004//Tr21-5-24 +/unexhp9k800.c/1.7/Tue Oct 25 11:16:29 2005//Tr21-5-24 +/unexmips.c/1.4/Tue Oct 25 11:16:29 2005//Tr21-5-24 +/unexnext.c/1.3/Mon Dec 6 03:52:23 2004//Tr21-5-24 +/unexnt.c/1.20/Mon Jan 24 23:34:13 2005//Tr21-5-24 +/unexsni.c/1.4/Mon Sep 20 19:20:07 2004//Tr21-5-24 +/unexsol2-6.c/1.2/Mon Sep 20 19:20:07 2004//Tr21-5-24 +/unexsol2.c/1.4/Mon Sep 20 19:20:07 2004//Tr21-5-24 +/unexsunos4.c/1.4/Mon Sep 20 19:20:07 2004//Tr21-5-24 +/unicode.c/1.31/Tue Oct 25 11:16:29 2005//Tr21-5-24 +/universe.h/1.3/Tue Feb 15 03:17:07 2005//Tr21-5-24 +/vdb-fake.c/1.1/Fri Nov 25 01:42:07 2005//Tr21-5-24 +/vdb-mach.c/1.1/Fri Nov 25 01:42:07 2005//Tr21-5-24 +/vdb-posix.c/1.1/Fri Nov 25 01:42:07 2005//Tr21-5-24 +/vdb-win32.c/1.1/Fri Nov 25 01:42:07 2005//Tr21-5-24 +/vdb.c/1.1/Fri Nov 25 01:42:08 2005//Tr21-5-24 +/vdb.h/1.1/Fri Nov 25 01:42:08 2005//Tr21-5-24 +/vm-limit.c/1.5/Mon Sep 20 19:20:07 2004//Tr21-5-24 +/widget.c/1.3/Thu May 24 07:51:33 2001//Tr21-5-24 +/win32.c/1.25/Fri Jan 28 02:36:28 2005//Tr21-5-24 +/window-impl.h/1.3/Mon Oct 24 10:07:42 2005//Tr21-5-24 +/window.c/1.90/Fri Nov 25 01:42:08 2005//Tr21-5-24 +/window.h/1.20/Sun Dec 8 10:25:14 2002//Tr21-5-24 +/winslots.h/1.11/Sun Feb 9 09:33:48 2003//Tr21-5-24 +/xemacs.def.in.in/1.13/Wed Nov 30 11:28:58 2005//Tr21-5-24 +/xft-fonts.c/1.3/Sat Nov 26 18:25:03 2005//Tr21-5-24 +/xft-fonts.h/1.2/Sat Nov 26 11:46:11 2005//Tr21-5-24 +/xgccache.c/1.13/Sat Nov 26 11:46:11 2005//Tr21-5-24 +/xgccache.h/1.5/Sat Nov 26 11:46:11 2005//Tr21-5-24 +/xintrinsic.h/1.5/Thu Apr 12 18:24:30 2001//Tr21-5-24 +/xintrinsicp.h/1.3/Fri Feb 14 07:38:30 2003//Tr21-5-24 +/xmmanagerp.h/1.4/Thu Feb 20 08:19:44 2003//Tr21-5-24 +/xmotif.h/1.1/Thu Feb 20 08:19:44 2003//Tr21-5-24 +/xmprimitivep.h/1.4/Thu Feb 20 08:19:44 2003//Tr21-5-24 +/xmu.c/1.11/Mon Aug 13 04:46:43 2001//Tr21-5-24 +/xmu.h/1.3/Thu Apr 12 18:24:30 2001//Tr21-5-24 D diff -urN 21.5.23/src/CVS/Tag 21.5.24/src/CVS/Tag --- 21.5.23/src/CVS/Tag Mon Dec 19 04:21:30 2005 +++ 21.5.24/src/CVS/Tag Mon Dec 19 04:23:49 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/src/ChangeLog 21.5.24/src/ChangeLog --- 21.5.23/src/ChangeLog Thu Oct 27 00:14:53 2005 +++ 21.5.24/src/ChangeLog Mon Dec 19 04:07:07 2005 @@ -1,3 +1,1067 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-12-14 Malcolm Purvis + + * console.c (stuff_buffered_input): Compile body only if + HAVE_TTY. + +2005-12-18 Aidan Kehoe + + * chartab.c (Fmake_char_table): + Set the default character class to word, not whitespace. + +2005-12-17 Aidan Kehoe + + * buffer.c: + standard-syntax-table and standard-category-table are not + available from Lisp any more, don't mention as Lisp variables. + +2005-12-17 Aidan Kehoe + + * console-x.c (x_perhaps_init_unseen_key_defaults): + If the key name is a single character, and the keysym is NoSymbol, + give it a default binding, if that is possible. This addresses the + problem Zhang Wei points out in <871x118lc4.fsf@gmail.com> + * event-Xt.c (x_to_emacs_keysym): + Print the characters of a keysym's name directly if it's printable + ASCII, or as an octal escape if it's not. + + Use keyboard-coding-system rather than undecided for decoding the + keysym name passed to us by an input method. + * file-coding.c (vars_of_file_coding): + Document that keyboard-coding-system is also used for X11. + +2005-11-29 Marcus Crestani + + * xemacs.def.in.in: Condition error_check_* symbols on + ERROR_CHECK_TYPES. + +2005-11-29 Stephen J. Turnbull + + * xemacs.def.in.in (error_check_cons, error_check_ldap): + (error_check_opaque_ptr, error_check_pgconn, error_check_pgresult): + (error_check_string, wrap_record_1, XINT_1): Add. Patch by Rick + Rankin <20051129041305.35172.qmail@web61022.mail.yahoo.com>. + +2005-11-29 Stephen J. Turnbull + + * xemacs.def.in.in (lrecord_uid_counter): Add it. Patch by Rick + Rankin <20051120054349.52906.qmail@web61019.mail.yahoo.com>. + +2005-11-26 Stephen J. Turnbull + + * dumper.c: Move comment to where it apparently belongs. + +2005-11-27 Marcus Crestani + + * lrecord.h: Remove NEWGC junk. + +2005-11-27 Stephen J. Turnbull + + Build fixes and dead code removal. + + * xft-fonts.c (Ffc_pattern_destroy): Delete. + (syms_of_xft_fonts): Delete Ffc_pattern_destroy and comment out + Fxft_name_unparse. + + * objects-x.c (DECLARE_DEBUG_FONTNAME): Renamed improved + SET_DEBUG_FONTNAME. Remove redundant debug level checks. + +2004-12-19 Stephen J. Turnbull + + * keymap.c (Fwhere_is_internal): Rewrite docstring. + +2005-11-26 Stephen J. Turnbull + + Merge Xft. + + 2005-11-25 Stephen J. Turnbull + + * objects-x.c: Improve comments. + + 2005-11-25 Stephen J. Turnbull + + * xft-fonts.h: + * xft-fonts.c: + * redisplay-x.c: + Remove or comment out dead code. + + 2005-11-25 Stephen J. Turnbull + + * objects-x.c (x_find_charset_font): Encapsulate debug print in macro. + + 2005-11-25 Stephen J. Turnbull + + * xft-fonts.h: + * xft-fonts.c: + * objects-x.c: + Xft font names are encoded in UTF-8 (Qxft_font_name_encoding). + + 2005-11-06 Stephen J. Turnbull + + * xft-fonts.h: + * xft-fonts.c: + Substitute new *LCRECORD* macros for #ifdef MC_ALLOC. + + 2005-09-10 Clemens Fruhwirth + + * glyphs-x.c (update_widget_face): Wrap error checking of rf in an + #ifdef USE_XFT. + + 2005-09-25 Stephen J. Turnbull + + * objects-x.c (x_initialize_font_instance): Must encode extname + twice, Qxft_font_name_encoding != Qx_font_name_encoding. + + 2005-09-25 Stephen J. Turnbull + + * objects-x.c (x_finalize_font_instance): Add newline to message. + + 2005-09-24 Stephen J. Turnbull + + * objects-x.c (x_find_charset_font): Give user more control of + debug verbosity. Reduce verbosity at debug_xft=1. Reduce + verbosity of truename by removing properties that are rarely + specified from fontconfig font name. + + 2005-09-24 Stephen J. Turnbull + + * objects-x.c (x_find_charset_font): Work around buggy return + value in FcInit(). + + 2005-09-24 Stephen J. Turnbull + + * objects-x.c: Improve various header comments. + (x_font_instance_truename): Remove obsolete #ifdef 0 code. + + 2005-09-06 Stephen J. Turnbull + + * console-x-impl.h (struct x_frame): Rewrite comment. + + * redisplay-x.c (x_output_string): + * frame-x.c (x_delete_frame): + Improve style, let compiler optimize. + + 2005-09-05 Daniel Pittman + + * console-x-impl.h (struct x_frame): New member xftDraw. + (FRAME_X_XFTDRAW): Accessor for xftDraw member. + + * redisplay-x.c (x_output_string): Lazily initialize frame's + xftDraw member, and don't destroy it here. + + * frame-x.c (x_delete_frame): Destroy xftDraw here. + + 2005-08-17 Stephen J. Turnbull + + * xft-fonts.c (Ffc_pattern_create): Improve docstring, remove todo. + (fc_intern): Add todo. + + 2005-08-04 Stephen J. Turnbull + + * xft-fonts.c (finalize_fc_pattern): New static function. + Add it to lcrecord implementation of fc_pattern. + + * xft-fonts.c (Ffc_pattern_destroy): Disable with #if 0. + + 2005-08-03 Stephen J. Turnbull + + -- Minor cleanups. -- + + * xft-fonts.c (Ffc_font_real_pattern): + Update FIXME at top. + (Ffc_font_sort): + (Ffc_font_match): + Improve docstrings. + + * xft-fonts.c (Ffc_pattern_destroy): + Partially protect against double frees. + + -- Eliminate Lisp fc_fontset objects. -- + + * xft-fonts.c (fontset_to_list): New helper function. + (Ffc_list_fonts_pattern_objects): + (Ffc_font_sort): + Made to use `fontset_to_list' and return list. Updated docstrings. + + * xft-fonts.h (struct fc_pattern): Removed fc_fontset member. + (fc_fontset): Removed struct and lrecord declarations and typedef. + (XFCFONTSET): + (wrap_fcfontset): + (FCFONTSETP): + (CHECK_FCFONTSET): + (CONCHECK_FCFONTSET): + (XFCFONTSET_PTR): + Removed macros. + + * xft-fonts.c (fcfontset_description): + (fc_fontset): + (Ffc_fontset_p): + (Ffc_fontset_count): + (Ffc_fontset_destroy): + (Ffc_fontset_ref): + Removed unused functions. + (fcpattern_description): Removed fc_fontset member. + (Ffc_pattern_create): + (Ffc_name_parse): + (Ffc_pattern_duplicate): + (Ffc_pattern_destroy): + (Ffc_font_match): + (Ffc_font_real_pattern): + Removed reference to fc_fontset member. + (syms_of_xft_fonts): Removed DEFSYMBOLs, DEFSUBRs for fc_fontset. + + * lrecord.h (enum lrecord_type): Removed lrecord_fc_fontset. + Removed indicies, which depended on #ifdefs so can't be accurate. + + 2005-07-31 Daniel Pittman + + * xft-fonts.c: Update Ffc_list_fonts_pattern_objects to use the + FontConfig API nicely, preventing it from rebuilding the list of + available fonts on *every* access. + + 2005-06-16 Stephen J. Turnbull + + * xft-fonts.c: MC_ALLOC-ify. + * xft-fonts.h: MC_ALLOC-ify. + + 2005-04-16 Stephen J. Turnbull + + * xft-fonts.c: Improve comment on property name hash table. + + (Ffc_list_fonts_pattern_objects): + (Ffc_font_sort): + (reinit_vars_of_xft_fonts): + Call FcInit only once in reinit_vars_of_xft_fonts. + + (Ffc_list_fonts_pattern_objects): + (Ffc_font_sort): + Signal error if returned FcFontSet object is NULL. + + (string_list_to_fcobjectset): Use fc_intern. + + * objects-x.c (): Move declaration of `name' out of #ifdef. + + 2005-04-14 Stephen J. Turnbull + + * xft-fonts.c (fc_intern): val is const. + (xft_get_color): Use dead_wrong_type_argument. + + * objects-x.c (Qxft_font_name_encoding): New documentary #define. + (truename_via_XListFonts): Improve comments. + + Followup on Aidan's partial cleanup/Mulization. + + * objects-x.c (DEBUG_XFT0): + (DEBUG_XFT1): + (DEBUG_XFT2): + (PRINT_XFT_PATTERN): + (CHECKING_LANG): + Move to top of font object block. + (DEBUG_XFT3): + (DEBUG_XFT4): + New. + (x_initialize_font_instance): + (x_finalize_font_instance): + Use them. + + (x_font_instance_truename): Comment complaint about structure. + Clarify variable usage by moving declaration inside block. + + (x_find_charset_font): Clarify block structure by eliminating + early returns. Remove bogus "must free" comments. Free FcPattern + objects that were leaking. Use block structure to indicate + lifetimes of FcPattern objects. Use "font" rather than "pattern" + in names of FcPatterns that name fonts rather than search + criteria. Use shortnames more consistently in debug messages. + #ifdef shortname vs longname return values. Correct comment to + note that FcCharSets are Unparsed to ASCII. Don't ever fall + through to X core fonts if we had an Xft font (it should be NULL + anyway). Use Qxft_font_name_encoding; this means we have to parse + FONT separately for Qx_font_name_encoding. + + 2005-04-10 Stephen J. Turnbull + + Xft/fontconfig assumes that strings used as object names are + statically allocated. Implement a hash table to keep track of + them: + + * xft-fonts.c (reinit_vars_of_xft_fonts): Initialize hash table. + (fc_intern): + New static functions. + + (fc_property_name_hash_table): + (fc_standard_properties): + New static variables. + + * symsinit.h (reinit_vars_of_xft_fonts): Declare it. + + * emacs.c (main_1): Call it. Reorder complex_vars_of_xft_fonts. + + Renaming and reorganization: + + * xft-fonts.c: Group FcPattern stuff separately from FcFontSet in + preparation for removing latter from LISP visibility. Use + "pattern" for Lisp_Objects, reserve "fcpat" for FcPatterns. + Similarly change "object" to "property". + + (Ffc_pattern_destroy): + (Ffc_fontset_destroy): + Deprecate these; they should not be LISP-visible. + + (Ffc_pattern_print): Removed. + + (extract_fcapi_string): Make this a macro, because + in C "inline" is a hint. But this _must_ be a macro because it + implicitly uses alloca. + + 2005-04-09 Stephen J. Turnbull + + * xft-fonts.c (fc-pattern-get-antialias): + (fc-pattern-get-dpi): + (fc-pattern-get-family): + (fc-pattern-get-file): + (fc-pattern-get-foundry): + (fc-pattern-get-minspace): + (fc-pattern-get-outline): + (fc-pattern-get-pixelsize): + (fc-pattern-get-rasterizer): + (fc-pattern-get-scalable): + (fc-pattern-get-scale): + (fc-pattern-get-size): + (fc-pattern-get-style): + (fc-pattern-get-xlfd): + (xft-pattern-get-core): + (xft-pattern-get-encoding): + (xft-pattern-get-render): + (fc_get_pattern_bool): + (fc_get_pattern_double): + (fc_get_pattern_integer): + (fc_get_pattern_string): + (xft_font_open_name): + Delete definitions of long-unused functions. + + (syms_of_xft_fonts): + Delete references. + + * xft-fonts.h (fc_get_pattern_bool): + (fc_get_pattern_double): + (fc_get_pattern_integer): + (fc_get_pattern_string): + Delete declarations of long-unused helper functions. + + * xft-fonts.c (Ffc_font_match): s/poosible/possible/ in docstring. + + 2005-04-01 Aidan Kehoe + + * objects-x.c: + * objects-x.c (x_initialize_font_instance): + * objects-x.c (CHECKING_LANG): + General mule-sanity cleanup for the debug messages, to eliminate + the issue Giacomo Boffi saw in + 16970.44359.621213.994821@boffi95.stru.polimi.it. + + * objects-x.c (x_find_charset_font): + Font names are also treated as UTF-8; relatedly, when passing back + the font's full name, the character coverage bitmap isn't included + any more, because that would make it an invalid UTF-8 string. + + 2005-03-10 Stephen J. Turnbull + + * objects-x.c (charset_table): Fix ISO 639 code for Greek. Reported + by Stefan Holst . + (charset_table): Add information for Hebrew, whine about ISO prices. + + 2005-03-09 Stephen J. Turnbull + + * objects-x.c (x_font_instance_truename): Try to fix XListFonts + crash by not handing random Xft results to core Xlib functions. + Replace bizarre gymnastics with simple FcNameUnparse. + + 2005-03-07 Stephen J. Turnbull + + * objects-x-impl.h: Include lwlib-fonts.h + + * objects-x.c (x_font_instance_truename): + * glyphs-x.c (update_widget_face): + * frame-x.c (x_update_frame_external_traits): + Use the correct variant of FONT_INSTANCE_{X,XFT}_FONT. + Protect against access of uninitialized objects. + + * redisplay-x.c (x_get_gc): Fix typo. + * (x_output_string): Add comments, clarify logic slightly. + + 2005-03-05 Stephen J. Turnbull + + Refactor language/charset checking in Xft. + + * objects-x.c (struct charset_reporter): New type. + (charset_table): New internal table. + (DEBUG_XFT0): + (DEBUG_XFT1): + (DEBUG_XFT2): + (PRINT_XFT_PATTERN): + (CHECKING_LANG): + New debugging macros. + (mule_to_fc_charset): New function. + (x_find_charset_font): Completely rewrite Xft part using the above. + + Cache knowledge of charset in font instances. + + * objects-impl.h (struct Lisp_Font_Instance): New member charset. + Update comment on use of truename. + * objects.c (syms_of_objects): DEFSUBR Ffont_instance_charset. + (Ffont_instance_charset): New accessor. + (Fmake_font_instance): New argument CHARSET, update charset member. + (font_instantiate): Update call to Fmake_font_instance. + (font_instance_description): Add charset member. + * objects.h (Fmake_font_instance): Update EXFUN. + (Ffont_instance_charset): New EXFUN. + + Make Xft debug level adjustable from Lisp. + + * xft-fonts.c (vars_of_xft_fonts): New DEFVAR_INT + xft-debug-level (from debug_xft), adjust style of xft-version. + * xft-fonts.h (debug_xft): Now Lisp-visible, change declaration. + + Miscellaneous. + + * lisp.h (Vcharset_iso8859_15): Export it. + * faces.h (struct face_cachel): Update comment on space usage. + * faces.c: Comment proposed changes to improve font handling. + * frame-x.c: + * EmacsShell-sub.c: + Disable geometry debugging. + + 2005-02-24 Stephen J. Turnbull + + * xft-fonts.h: + * xft-fonts.c: + Update copyright notices. + + * xft.fonts.h (string_list_to_fcobjectset): + (extract_fcapi_string): + Delete; static function declarations don't belong in headers. + + * xft.fonts.c (string_list_to_fcobjectset): + (extract_fcapi_string): + Declare. + + 2005-02-24 Stephen J. Turnbull + + * objects-x.c (x_find_charset_font): ConfigSubstitute in the + _pattern_ before matching. + + 2005-02-24 Stephen J. Turnbull + + * faces.c (complex_vars_of_faces): Default to monospace-12 for + Xft. (Suggestion by Aidan Kehoe.) + + 2005-02-24 Hrvoje Niksic + + * xgccache.h (XE_GCONTEXT): Move out of DEBUG_XEMACS block. + + 2005-02-22 Stephen J. Turnbull + + * xft-fonts.c (debug_xft): Suppress all debug output for now. + + 2005-02-21 Stephen J. Turnbull + + * emacs.c (xemacs-release-date): New version info variable. + * config.h.in (XEMACS_RELEASE_DATE): New config.h macro. + + * emacs.c (inhibit-early-packages): + (inhibit-all-packages): + (xemacs-extra-name): Improve docstrings. + + 2005-02-21 Stephen J. Turnbull + + * objects-x.c (x_finalize_font_instance): Improve debug message. + + 2005-02-20 Stephen J. Turnbull + + * objects-x.c (x_initialize_font_instance): Estimate average cell + width based on dimensions of "representative" string. Suppress + some excessive debug output. Get rid of spurious tests. + + 2005-02-11 Eric Knauel + + * xft-fonts.c: throw away old code that was wrapped inside + comments + + 2005-02-11 Eric Knauel + + * xft-fonts.h: New prototype + + * xft-fonts.c (Ffc_name_parse, Ffc_pattern_add, Ffc_pattern_del) + (Ffc_pattern_get, fc_font_real_pattern) + (string_list_to_fcobjectset): Use extract_fcapi_string() + (extract_fcapi_string): New function + + 2005-02-09 Eric Knauel + + * xft-fonts.c (string_list_to_fcobjectset): Use loop macro instead + of for. + + 2005-02-03 Eric Knauel + + * lrecord.h (enum lrecord_type): remove lrecord for FcObjectSets + + * xft-fonts.h (struct fc_fontset): remove lrecord for FcObjectSets + + * xft-fonts.c (DEFINE_LRECORD_IMPLEMENTATION): + (Ffc_objectset_create, Ffc_objectset_p, Ffc_objectset_add) + (Ffc_objectset_destroy): remove lrecord for FcObjectSets + (Ffc_list_fonts_pattern_objects): adapt for new representation of + FcObjectSets + (string_list_to_fcobjectset): New utility function + + 2005-02-01 Stephen J. Turnbull + + * redisplay-x.c (separate_textual_runs): Check for MULE properly. + + 2005-01-28 Stephen J. Turnbull + + * glyphs-widget.c (Fwidget_logical_to_character_height): + (Fwidget_logical_to_character_width): + (layout_query_geometry): + (widget_update): + Fix typos in docstrings and preceding comments. + + 2005-01-26 Stephen J. Turnbull + + * redisplay-x.c (x_output_string): Position strikethru by dl + geometry. Kludge to fix remnants from antialiased underscores. + + 2004-12-19 Stephen J. Turnbull + + * compiler.h (UNUSED): Document make-docfile.c hack. + + 2004-12-19 Stephen J. Turnbull + + * glyphs-x.c,objects-x.c: Deemphasize warnings (to debug or alert). + + * redisplay-x.c: Don't abort() when ichar_to_unicode returns error. + + 2004-12-17 Stephen J. Turnbull + + * regex.c (re_match_2_internal): DEBUG_PRINT "can match null". + + 2004-12-10 Stephen J. Turnbull + + * redisplay-x.c (x_text_width_single_run): Whitespace improvement. + + 2004-12-09 Stephen J. Turnbull + + * glyphs-widget.c (image_instantiator_progress_gauge): + (image_instantiator_format_create_glyphs_widget): + Fix typo guage->gauge. + + * emacs.c (main_1): Casting out devils (size_t). + + * compiler.h (USED_IF_XFT): New variant. + * objects-x.c (x_font_spec_matches_charset): + * redisplay-x.c (x_text_width_single_run): + Use it. + + * config.h.in: Support USE_XFT_TABS and USE_XFT_GAUGE. + + 2004-11-28 Stephen J. Turnbull + + * objects-x.c (x_initialize_font_instance): Make sure + FONT_INSTANCE_X_FONT is cleared for Xft fonts. Add comments. + Fiddle whitespace. + (x_print_font_instance): Clarify printed font instance. + + 2004-11-27 Stephen J. Turnbull + + * xft-fonts.h: Declare debug_xft. + + * objects-x.c (x_font_instance_truename): + Convert Xft* identifiers to Fc* versions. + + (x_initialize_font_instance): + (x_find_charset_font): + Condition debugging on debug_xft. Get rid of unneeded "#### + debug" markers. Change fprintf to stderr_out. + + (x_find_charset_font): Restore missing argument to + DebugFcTypeOfValue. Remove nonworking debug cruft. + + (FcResultToString): + (FcTypeOfValueToString): + (x_find_charset_font): + Change DebugFc* to Fc*ToString. + + 2004-11-20 Stephen J. Turnbull + + Xft branch based on "Xft reloaded #3" patch by Eric Knauel and + Mathias Neuebaur, and other contributors. + + * xft-fonts.h: New file. Declares new Lisp objects wrapping + FcPattern, FcFontSet, and FcObjectSet. + * xft-fonts.c: New file. Implements new Lisp objects wrapping + FcPattern, FcFontSet, and FcObjectSet. + * objects-x-impl.h: Declare XftFont component of font instance. + * objects-x.c: Implement XftFont component of font instance. + * redisplay-x.c: Implement drawing via Xft. + +2005-11-21 Marcus Crestani + + Incremental Garbage Collector + + * .cvsignore: Add .dbxrc and .gdbinit. + + * .dbxrc: Remove. + * .dbxrc.in: New, used to generate .dbxrc: If newgc is enabled, do + not break on SIGBUS and SIGSEGV. + * .gdbinit: Remove. + * .gdbinit: New, used to generate .gdbinit: If newgc is enabled, + do not break on SIGBUS and SIGSEGV. + + * Makefile.in.in: Add gc.c, newgc_objs and vdb_objs. + + * alloc.c: Move the GC related code to gc.c: marking, gc hooks, + garbage_collect_1, GC related Lisp functions and variables. Left + in alloc.c are the allocation functions, the definition of + lrecords, the sweep functions of the old garbage collector, and + root-set code like staticpro and mcpro. Remove + lrecord_string_data_stats. + * alloc.c (DECREMENT_CONS_COUNTER): Remove call to + recompute_need_to_garbage_collect. + * alloc.c (init_lrecord_stats): Remove additionally allocated + memory statistics, i.e. statistics for string data. + * alloc.c (alloc_lrecord_array): New. + * alloc.c (free_lrecord): Do not explicitly free during gc. Add + recompute_need_to_garbage_collect. + * alloc.c (make_compiled_function): Field arguments is now a Lisp + object, thus init it to Qnil rather than NULL. + * alloc.c (struct string_chars_block): + * alloc.c (finalize_string): + * alloc.c (struct string_chars): + * alloc.c (make_uninit_string): + * alloc.c (resize_string): + * alloc.c (make_string_nocopy): + String data is now a Lisp object. Remove code that handled string + data specially. + * alloc.c (init_lrecord_stats): Remove lrecord_string_data_stats. + * alloc.c (common_init_alloc_early): + * alloc.c (init_alloc_once_early): + * alloc.c (syms_of_alloc): + * alloc.c (vars_of_alloc): + * alloc.c (complex_vars_of_alloc): + Move init code to gc.c's inizializers. + + * buffer.c: + * buffer.c (syms_of_buffer): + * buffer.h: + * buffer.h (struct buffer_text): Add new Lisp object: buffer_text. + + * bytecode.c: + * bytecode.c (make_compiled_function_args): + * bytecode.c (optimize_compiled_function): + * bytecode.c (mark_compiled_function): + * bytecode.c (finalize_compiled_function): + * bytecode.c (syms_of_bytecode): + * bytecode.h: + * bytecode.h (struct compiled_function_args): + * bytecode.h (struct Lisp_Compiled_Function): Add new Lisp object: + compiled_function_args. + + * config.h.in: Add NEW_GC symbol, add VDB_* symbols, and symbols + for functions and structs checked for vdb. + + * console-gtk-impl.h: + * console-gtk-impl.h (struct gtk_device): + * console-gtk-impl.h (struct gtk_frame): + * console-msw-impl.h: + * console-msw-impl.h (struct mswindows_device): + * console-msw-impl.h (struct msprinter_device): + * console-msw-impl.h (struct mswindows_frame): + * console-stream-impl.h: + * console-stream-impl.h (struct stream_console): + * console-stream.c: + * console-stream.c (stream_init_console): + * console-stream.c (stream_delete_console): + * console-stream.h: + * console-tty-impl.h: + * console-tty-impl.h (struct tty_console): + * console-tty-impl.h (struct tty_device): + * console-tty.c: + * console-tty.c (allocate_tty_console_struct): + * console-tty.c (free_tty_console_struct): + * console-x-impl.h: + * console-x-impl.h (struct x_device): + * console-x-impl.h (struct x_frame): + * console.c: + * console.c (syms_of_console): Add new Lisp objects: tty_console, + stream_consle. + + * device-gtk.c: + * device-gtk.c (allocate_gtk_device_struct): + * device-gtk.c (free_gtk_device_struct): + * device-gtk.c (syms_of_device_gtk): + * device-msw.c: + * device-msw.c (mswindows_init_device): + * device-msw.c (mswindows_delete_device): + * device-msw.c (msprinter_init_device): + * device-msw.c (msprinter_delete_device): + * device-msw.c (syms_of_device_mswindows): + * device-tty.c: + * device-tty.c (free_tty_device_struct): + * device-tty.c (syms_of_device_tty): + * device-x.c: + * device-x.c (allocate_x_device_struct): + * device-x.c (free_x_device_struct): + * device-x.c (syms_of_device_x): + * device.c: Add new Lisp objects: x_device, gtk_device, + tty_device, mswindows_device, msprinter_device. + + * dumper.c: + * dumper.c (pdump_register_sub): Add XD_LISP_OBJECT_PTR. + * dumper.c (pdump_register_object_array): New. + * dumper.c (pdump_store_new_pointer_offsets): Add XD_LISP_OBJECT_PTR. + * dumper.c (pdump_scan_lisp_objects_by_alignment): Remove assert, + XD_LISP_OBJECT_PTR may occur as arrays. + * dumper.c (pdump_reloc_one_mc): Add XD_LISP_OBJECT_PTR. + * dumper.c (pdump_dump_rtables): Dump arrays. + * dumper.c (pdump_load_finish): Store and restore state of + allow_incremental_gc. Remove lrecord_string_data_stats. + + * dynarr.c: + * dynarr.c (Dynarr_lisp_newf): Special case dynamic Lisp array. + * dynarr.c (Dynarr_resize): Special case dynamic Lisp array. + * dynarr.c (Dynarr_free): Add dynamic Lisp array. + + * elhash.c: + * elhash.c (htentry): + * elhash.c (make_general_lisp_hash_table): + * elhash.c (Fcopy_hash_table): + * elhash.c (resize_hash_table): + * elhash.c (pdump_reorganize_hash_table): + * elhash.c (init_elhash_once_early): + * elhash.h: Add new Lisp object: hash_table_entry. Make + hash_table_entries Lisp objects. + + * emacs.c (main_1): Install platform's vdb signal handler, add GC + init, add syms of GC and vdb, . + * emacs.c: Replace garbage_collect_1 calls with gc_full calls. + * emacs.c (fatal_error_signal): With vdb enabled, convert SIGSEGV + and SIGBUS to SIGABRT. + + * eval.c (Fsignal): Incremental GC may always run, changes are + caught by the write barrier. + * eval.c (handle_compiled_function_with_and_rest): + * eval.c (funcall_compiled_function): + * eval.c (Feval): Invoke incremental GC if need to GC. + * eval.c (Ffuncall): Invoke incremental GC if need to GC. + * eval.c (run_hook_with_args_in_buffer): Add new Lisp object: + compiled_function_args. + + * event-msw.c (mswindows_wnd_proc): Incremental GC may always run, + changes are caught by the write barrier. + * events.c (reinit_vars_of_events): Vevent_resource now + collectible, staticpro it. + + * extents.c: + * extents.c (gap_array_marker): + * extents.c (gap_array): + * extents.c (extent_list_marker): + * extents.c (extent_list): + * extents.c (stack_of_extents): + * extents.c (gap_array_make_gap): + * extents.c (gap_array_make_marker): + * extents.c (gap_array_delete_marker): + * extents.c (gap_array_delete_all_markers): + * extents.c (make_gap_array): + * extents.c (free_gap_array): + * extents.c (extent_list_insert): + * extents.c (extent_list_make_marker): + * extents.c (extent_list_delete_marker): + * extents.c (allocate_extent_list): + * extents.c (free_extent_list): + * extents.c (finalize_extent_info): + * extents.c (flush_cached_extent_info): + * extents.c (uninit_buffer_extents): + * extents.c (allocate_soe): + * extents.c (free_soe): + * extents.c (syms_of_extents): + * extents.h: Add new Lisp object: gap_array_marker, gap_array, + extent_list_marker, extent_list, and stack_of_extents. + + * faces.h: + * faces.h (struct face_cachel): Add new Lisp object: face cachel. + + * frame-gtk.c: + * frame-gtk.c (allocate_gtk_frame_struct): + * frame-gtk.c (gtk_delete_frame): + * frame-gtk.c (syms_of_frame_gtk): + * frame-msw.c: + * frame-msw.c (mswindows_init_frame_1): + * frame-msw.c (mswindows_delete_frame): + * frame-msw.c (syms_of_frame_mswindows): + * frame-x.c: + * frame-x.c (allocate_x_frame_struct): + * frame-x.c (x_delete_frame): + * frame-x.c (syms_of_frame_x): + * frame.c: + * frame.c (change_frame_size): + * frame.c (syms_of_frame): Add new Lisp object: gtk_console, + mswindows_console, and x_console. + + * glyphs.c (struct expose_ignore_blocktype): + * glyphs.c (check_for_ignored_expose): + * glyphs.c (register_ignored_expose): + * glyphs.c (reinit_vars_of_glyphs): + * glyphs.h: + * glyphs.h (struct glyph_cachel): + * glyphs.h (struct expose_ignore): Add new Lisp object: + glyph_cachel and expose_ignore. + + * lisp.h: Move dynamic array definition down after lrecord + inclusion. Add dynamic lisp array macros. Add direct and + indirect string data. Add string accessors. Remove + lrecord_string_data_stats. + * lisp.h (struct Lisp_String_Direct_Data): New. + * lisp.h (struct Lisp_String_Indirect_Data): New. + * lisp.h (struct Lisp_String): Add indirect flag and Lisp object + data. + + * lrecord.h: Remove lrecord_type numbering. + * lrecord.h (enum lrecord_type): Add new Lisp objects. + * lrecord.h (MC_ALLOC_CALL_FINALIZER): Add GC statistics. + * lrecord.h (enum memory_description_type): Add + XD_LISP_OBJECT_BLOCK_PTR. + * lrecord.h (XD_LISP_DYNARR_DESC): New. + * lrecord.h (alloc_lrecord_array): New. + + * mc-alloc.c: + * mc-alloc.c (MIN_HEAP_INCREASE): + * mc-alloc.c (free_link): + * mc-alloc.c (page_header): + * mc-alloc.c (FREE_HEAP_PAGES): + * mc-alloc.c (PH_BLACK_BIT): + * mc-alloc.c (get_mark_bit_index): + * mc-alloc.c (add_pages_to_lookup_table): + * mc-alloc.c (alloc_bit_array): + * mc-alloc.c (get_bit): + * mc-alloc.c (set_bit): + * mc-alloc.c (USE_PNTR_MARK_BITS): + * mc-alloc.c (GET_BIT_WORD): + * mc-alloc.c (SET_BIT_WORD): + * mc-alloc.c (ZERO_MARK_BITS_PNTR): + * mc-alloc.c (alloc_mark_bits): + * mc-alloc.c (free_mark_bits): + * mc-alloc.c (set_mark_bit): + * mc-alloc.c (alloc_page_header): + * mc-alloc.c (free_page_header): + * mc-alloc.c (get_used_list_index): + * mc-alloc.c (get_free_list_index): + * mc-alloc.c (install_cell_free_list): + * mc-alloc.c (install_page_in_used_list): + * mc-alloc.c (remove_page_from_used_list): + * mc-alloc.c (allocate_new_page): + * mc-alloc.c (mc_alloc_1): + * mc-alloc.c (mc_alloc_array): + * mc-alloc.c (mc_alloc): + * mc-alloc.c (mark_free_list): + * mc-alloc.c (finalize_page): + * mc-alloc.c (finalize_page_for_disksave): + * mc-alloc.c (sweep_page): + * mc-alloc.c (mc_free): + * mc-alloc.c (mc_realloc_1): + * mc-alloc.c (mc_realloc_array): + * mc-alloc.c (init_mc_allocator): + * mc-alloc.c (Fmc_alloc_memory_usage): + * mc-alloc.c (maybe_mark_black): + * mc-alloc.h: Add incremental garbage collector support, various + cleanups. + + * objects-tty-impl.h: + * objects-tty-impl.h (struct tty_color_instance_data): + * objects-tty-impl.h (struct tty_font_instance_data): + * objects-tty.c: + * objects-tty.c (tty_initialize_color_instance): + * objects-tty.c (tty_finalize_color_instance): + * objects-tty.c (tty_initialize_font_instance): + * objects-tty.c (tty_finalize_font_instance): + * objects-tty.c (syms_of_objects_tty): + * objects.c: New Lisp objects: color_instance_data and + font_instance_data. + + * print.c (print_internal): New Lisp object: string_data. + + * specifier.c: + * specifier.c (finalize_specifier): + * specifier.c (set_specifier_caching): + * specifier.c (syms_of_specifier): + * specifier.h: + * specifier.h (struct specifier_caching): New Lisp object: + specifier caching. + + * syntax.c: + * syntax.c (init_buffer_syntax_cache): + * syntax.c (uninit_buffer_syntax_cache): + * syntax.c (syms_of_syntax): + * syntax.h: + * syntax.h (struct syntax_cache): New Lisp object: syntax_cache. + + * window.c: + * window.c (allocate_window): + * window.c (make_dummy_parent): + * window.c (syms_of_window): New Lisp objects: face_cachel, + fache_cachel_dynarr, glyph_cachel, and glyph_cachel_dynarr. + + + New files: + * gc.c: Moved code from alloc.c. Split up garbage_collect_1 in a + couple of smaller functions. + * gc.h: Incremental Garbage Collector + + * vdb-fake.c: Virtual dirty bit fake implementation. + * vdb-mach.c: Virtual dirty bit implementation for Mach systems. + * vdb-posix.c: Virtual dirty bit implementation for POSIX systems. + * vdb-win32.c: Virtual dirty bit implementation for Win32 systems. + + * vdb.c: + * vdb.h: Platform independent virtual dirty bit implementation. + + + Remove files: + * .dbxrc: + * .gdbinit: Now generated by configure script. + +2005-11-22 Malcolm Purvis + + * frame-gtk.c (gtk_internal_frame_property_p): + * glyphs-gtk.c (image_instance_convert_to_pointer): + * glyphs-gtk.c (gtk_xpm_instantiate): + * glyphs-gtk.h (IMAGE_INSTANCE_GTK_MASK): + * gtk-xemacs.c (gtk_xemacs_expose): + * redisplay-gtk.c (gtk_output_vertical_divider): + Fix compilation errors and warnings that have appeared over the + last few months. + +2005-11-22 Stephen J. Turnbull + + * keymap.c (Fdefine_key): More focused docstring. + +2005-11-20 Marcus Crestani + + * lisp.h: Add default_object_printer prototype. + * print.c (default_object_printer): Remove static. + * print.c (print_internal): Use internal_object_printer if a + object has no print method. + * toolbar.c: Use default_object_printer for toolbar-button. + +2005-11-22 Ben Wing + + * mule-coding.c (FROB): + Fix crashes printing ISO2022 coding systems. + +2005-11-22 Ben Wing + + * Makefile.in.in (mostlyclean): + Ignore errors from rm during clean. + +2005-11-18 Aidan Kehoe + + * window.c (change_window_height): Have change_window_height + change the window width when requested to do so; fixes bugs and + error messages with VM, BBDB. + +2005-11-16 Stephen J. Turnbull + + * sound.c (USED_IF_HAVE_NATIVE_OR_NAS, USED_IF_HAVE_ANY): + New conditional UNUSED macros. + (Fplay_sound_file, Fdevice_sound_enabled_p, init_device_sound): + Use them. + +2005-11-16 Stephen J. Turnbull + + * event-Xt.c (x_to_emacs_keysym): Initialize len. + +2005-11-16 Stephen J. Turnbull + + * database.c: Don't redefine integer types for Mac OS X, either. + +2005-11-13 Ben Wing + + * alloc.c: + * alloc.c (alloc_lrecord): + * alloc.c (noseeum_alloc_lrecord): + * alloc.c (make_uninit_string): + * alloc.c (Fmake_string): + * alloc.c (make_string_nocopy): + * lrecord.h: + * lrecord.h (struct lrecord_header): + * lrecord.h (set_lheader_implementation): + Move around the handling of setting of lheader->uid so it's in + set_lheader_implementation() -- that way, even non-MC-ALLOC builds + get useful uid's in their bare lrecords. Redo related code for + strings so the non-ascii count that is stored in the uid isn't hosed. + + * events.c: + * events.c (deinitialize_event): + * events.c (zero_event): + Save and restore the uid around event zeroing/deadbeefing. + + * lisp.h: + Set the correct value of MAX_STRING_ASCII_BEGIN under MC_ALLOC. + + * lisp.h (ZEROP): + * lisp.h (XINT): + * lisp.h (CHECK_INT): + * lisp.h (CONCHECK_INT): + * lisp.h (NATNUMP): + * lisp.h (CHECK_NATNUM): + * lisp.h (CONCHECK_NATNUM): + * lisp.h (XCHAR): + * lisp.h (XCHAR_OR_INT): + * lisp.h (CHAR_INTP): + rearrange the basic code handling ints and chars. basic int stuff goes + first, followed by basic char stuff, followed in turn by stuff that + mixes ints and chars. this is required since some basic defn's have + become inline functions. + + XCHAR and CHARP have additional error-checking in that they check to make + sure that the value in question is not just a character but a valid + character (i.e. its numeric value is valid). + + * print.c: + * print.c (debug_p4): + debug_p4 now has a useful UID in all cases and uses it; but it also prints + the raw header address (previously, you just got one of them). + * text.h: + some basic char defn's that belonged in lisp.h have been moved there. + valid_ichar_p() is moved too since the inline functions need it. + +2005-11-13 Ben Wing + + * Makefile.in.in (distclean-noconfig): + Add targets distclean-noconfig, realclean-noconfig, extraclean-noconfig. + Do some refactoring for cleanliness. + +2005-11-07 Stephen J. Turnbull + + * inline.c: Include modules headers regardless of HAVE_SHLIB. + +2005-11-02 Marcus Crestani + + * realpath.c (readlink_or_correct_case): Move the closing paren + outside the ifdef. + +2005-11-02 Marcus Crestani + + * realpath.c (readlink_or_correct_case): Mark parameter as unused. + +2005-10-29 Steve Youngs + + * unexelf.c (unexec): Fix data types. + From: Andrey Slusar + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. @@ -2351,7 +3415,9 @@ 2004-12-15 Stephen J. Turnbull - * EmacsManager.c (EmacsManagerChangeSize): Respect XtGeometryNo. + * EmacsManager.c (EmacsManagerChangeSize): + Respect XtGeometryNo, and exit immediately if geometry change + refused. Fixes notorious metacity maximize bug. 2004-12-07 Malcolm Purvis diff -urN 21.5.23/src/Makefile.in.in 21.5.24/src/Makefile.in.in --- 21.5.23/src/Makefile.in.in Sat Oct 22 00:48:42 2005 +++ 21.5.24/src/Makefile.in.in Sat Nov 26 20:46:06 2005 @@ -3,7 +3,7 @@ ## Copyright (C) 1994, 1995 Board of Trustees, University of Illinois ## Copyright (C) 1996, 1997 Sun Microsystems, Inc. ## Copyright (C) 1998, 1999 J. Kean Johnston. -## Copyright (C) 2001, 2002, 2003 Ben Wing. +## Copyright (C) 2001, 2002, 2003, 2005 Ben Wing. ## This file is part of XEmacs. @@ -133,6 +133,9 @@ #ifdef HAVE_X_WINDOWS x_objs=console-x.o device-x.o event-Xt.o frame-x.o \ glyphs-x.o objects-x.o redisplay-x.o select-x.o xgccache.o intl-x.o +#ifdef USE_XFT +x_objs += xft-fonts.o +#endif x_gui_objs=$(gui_objs:.o=-x.o) #ifdef HAVE_TOOLBARS x_gui_objs += toolbar-common.o @@ -255,6 +258,19 @@ mc_alloc_objs=mc-alloc.o #endif +#ifdef NEW_GC +new_gc_objs=vdb.o +# if defined (WIN32_ANY) || defined (VDB_WIN32) +vdb_objs=vdb-win32.o +# elif defined (VDB_MACH) +vdb_objs=vdb-mach.o +# elif defined (VDB_POSIX) +vdb_objs=vdb-posix.o +# else /* VDB_FAKE */ +vdb_objs=vdb-fake.o +# endif +#endif /* NEW_GC */ + ## lastfile must follow all files whose initialized data areas should ## be dumped as pure by dump-emacs. @@ -273,12 +289,12 @@ event-stream.o $(event_unixoid_objs) $(extra_objs) extents.o\ faces.o file-coding.o fileio.o $(LOCK_OBJ) filemode.o floatfns.o fns.o \ font-lock.o frame.o\ - general.o $(gif_objs) glyphs.o glyphs-eimage.o glyphs-shared.o\ + gc.o general.o $(gif_objs) glyphs.o glyphs-eimage.o glyphs-shared.o\ glyphs-widget.o $(gpm_objs) $(gtk_objs) $(gtk_gui_objs) $(gui_objs) \ gutter.o\ hash.o imgproc.o indent.o insdel.o intl.o\ keymap.o $(RTC_patch_objs) line-number.o $(ldap_objs) lread.o lstream.o\ - $(mc_alloc_objs) \ + $(mc_alloc_objs) $(new_gc_objs) $(vdb_objs) \ macros.o marker.o md5.o minibuf.o $(mswindows_objs) $(mswindows_gui_objs)\ $(mule_objs) $(mule_canna_objs) $(mule_wnn_objs) $(number_objs) objects.o\ opaque.o $(postgresql_objs) print.o process.o $(process_objs) $(profile_objs)\ @@ -1005,28 +1021,35 @@ ###################### Clean .PHONY: mostlyclean clean distclean realclean versionclean extraclean +.PHONY: distclean-noconfig realclean-noconfig extraclean-noconfig mostlyclean: - $(RM) *.o *.i *.rtl *.ln core \ + -$(RM) *.o *.i *.rtl *.ln core \ temacs puremacs quantmacs covmacs rtcmacs temacs.exe \ sheap-adjust.h dump-id.c $(BLDSRC)/NEEDTODUMP SATISFIED \ $(LIB_SRC)/*.po $(LIB_SRC)/*.mo versionclean: - $(RM) $(RAW_EXE) $(DUMP_TARGET) $(LIB_SRC)/DOC + -$(RM) $(RAW_EXE) $(DUMP_TARGET) $(LIB_SRC)/DOC ## Remove the generated load files here; they cause lots of problems ## when they don't work right. clean: mostlyclean versionclean - $(RM) libextcli* $(LISP)/auto-autoloads.el* $(LISP)/custom-load.el* \ + -$(RM) libextcli* $(LISP)/auto-autoloads.el* $(LISP)/custom-load.el* \ $(LISP)/mule/auto-autoloads.el* $(LISP)/mule/custom-load.el* \ $(SRCMODULES)/auto-autoloads.el* $(SRCMODULES)/custom-load.el* ## This is used in making a distribution. ## Do not use it on development directories! -distclean: clean - $(RM) config.h paths.h Emacs.ad.h $(LISP)/finder-inf.el* \ - GNUmakefile Makefile Makefile.in TAGS $(DUMP_TARGET) $(RAW_EXE) \ - xemacs.def xemacs.def.in +distclean-noconfig: clean + -$(RM) config.h paths.h Emacs.ad.h $(LISP)/finder-inf.el* \ + TAGS xemacs.def xemacs.def.in +## This is used in making a distribution. +## Do not use it on development directories! +distclean: distclean-noconfig + -$(RM) GNUmakefile Makefile Makefile.in +realclean-noconfig: distclean-noconfig realclean: distclean +extraclean-noconfig: realclean-noconfig + -$(RM) *~ \#* m/*~ m/\#* s/*~ s/\#* extraclean: realclean - $(RM) *~ \#* m/*~ m/\#* s/*~ s/\#* + -$(RM) *~ \#* m/*~ m/\#* s/*~ s/\#* ###################### Lock, unlock diff -urN 21.5.23/src/alloc.c 21.5.24/src/alloc.c --- 21.5.23/src/alloc.c Tue Oct 25 17:32:46 2005 +++ 21.5.24/src/alloc.c Fri Nov 25 10:41:55 2005 @@ -52,6 +52,7 @@ #include "extents-impl.h" #include "file-coding.h" #include "frame-impl.h" +#include "gc.h" #include "glyphs.h" #include "opaque.h" #include "lstream.h" @@ -62,6 +63,9 @@ #include "sysfile.h" #include "sysdep.h" #include "window.h" +#ifdef NEW_GC +#include "vdb.h" +#endif /* NEW_GC */ #include "console-stream.h" #ifdef DOUG_LEA_MALLOC @@ -70,8 +74,6 @@ EXFUN (Fgarbage_collect, 0); -static void recompute_need_to_garbage_collect (void); - #if 0 /* this is _way_ too slow to be part of the standard debug options */ #if defined(DEBUG_XEMACS) && defined(MULE) #define VERIFY_STRING_CHARS_INTEGRITY @@ -91,13 +93,6 @@ static Fixnum debug_allocation_backtrace_length; #endif -/* Number of bytes of consing done since the last gc */ -static EMACS_INT consing_since_gc; -EMACS_UINT total_consing; -EMACS_INT total_gc_usage; -int total_gc_usage_set; - -int need_to_garbage_collect; int need_to_check_c_alloca; int need_to_signal_post_gc; int funcall_allocation_flag; @@ -149,6 +144,20 @@ INCREMENT_CONS_COUNTER_1 (size) #endif +#ifdef NEW_GC +/* The call to recompute_need_to_garbage_collect is moved to + free_lrecord, since DECREMENT_CONS_COUNTER is extensively called + during sweep and recomputing need_to_garbage_collect all the time + is not needed. */ +#define DECREMENT_CONS_COUNTER(size) do { \ + consing_since_gc -= (size); \ + total_consing -= (size); \ + if (profiling_active) \ + profile_record_unconsing (size); \ + if (consing_since_gc < 0) \ + consing_since_gc = 0; \ +} while (0) +#else /* not NEW_GC */ #define DECREMENT_CONS_COUNTER(size) do { \ consing_since_gc -= (size); \ total_consing -= (size); \ @@ -158,50 +167,10 @@ consing_since_gc = 0; \ recompute_need_to_garbage_collect (); \ } while (0) - -/* Number of bytes of consing since gc before another gc should be done. */ -static EMACS_INT gc_cons_threshold; - -/* Percentage of consing of total data size before another GC. */ -static EMACS_INT gc_cons_percentage; - -#ifdef ERROR_CHECK_GC -int always_gc; /* Debugging hack; equivalent to - (setq gc-cons-thresold -1) */ -#else -#define always_gc 0 -#endif - -/* Nonzero during gc */ -int gc_in_progress; - -/* Nonzero means display messages at beginning and end of GC. */ - -int garbage_collection_messages; - -/* Number of times GC has happened at this level or below. - * Level 0 is most volatile, contrary to usual convention. - * (Of course, there's only one level at present) */ -EMACS_INT gc_generation_number[1]; +#endif /*not NEW_GC */ /* This is just for use by the printer, to allow things to print uniquely */ -static int lrecord_uid_counter; - -/* Nonzero when calling certain hooks or doing other things where - a GC would be bad */ -int gc_currently_forbidden; - -/* Hooks. */ -Lisp_Object Vpre_gc_hook, Qpre_gc_hook; -Lisp_Object Vpost_gc_hook, Qpost_gc_hook; - -/* "Garbage collecting" */ -Lisp_Object Vgc_message; -Lisp_Object Vgc_pointer_glyph; -static const Ascbyte gc_default_message[] = "Garbage collecting"; -Lisp_Object Qgarbage_collecting; - -static Lisp_Object QSin_garbage_collection; +int lrecord_uid_counter; /* Non-zero means we're in the process of doing the dump */ int purify_flag; @@ -248,7 +217,7 @@ #ifndef MC_ALLOC -static void *breathing_space; +void *breathing_space; void release_breathing_space (void) @@ -282,6 +251,7 @@ DOESNT_RETURN memory_full (void) { + fprintf (stderr, "##### M E M O R Y F U L L #####\n"); /* Force a GC next time eval is called. It's better to loop garbage-collecting (we might reclaim enough to win) than to loop beeping and barfing "Memory exhausted" @@ -521,33 +491,10 @@ } lrecord_stats [countof (lrecord_implementations_table) + MODULE_DEFINABLE_TYPE_COUNT]; -int lrecord_string_data_instances_in_use; -int lrecord_string_data_bytes_in_use; -int lrecord_string_data_bytes_in_use_including_overhead; - void init_lrecord_stats () { xzero (lrecord_stats); - lrecord_string_data_instances_in_use = 0; - lrecord_string_data_bytes_in_use = 0; - lrecord_string_data_bytes_in_use_including_overhead = 0; -} - -void -inc_lrecord_string_data_stats (Bytecount size) -{ - lrecord_string_data_instances_in_use++; - lrecord_string_data_bytes_in_use += size; - lrecord_string_data_bytes_in_use_including_overhead += size; -} - -void -dec_lrecord_string_data_stats (Bytecount size) -{ - lrecord_string_data_instances_in_use--; - lrecord_string_data_bytes_in_use -= size; - lrecord_string_data_bytes_in_use_including_overhead -= size; } void @@ -581,6 +528,17 @@ DECREMENT_CONS_COUNTER (size); } + +int +lrecord_stats_heap_size (void) +{ + int i; + int size = 0; + for (i = 0; i < (countof (lrecord_implementations_table) + + MODULE_DEFINABLE_TYPE_COUNT); i++) + size += lrecord_stats[i].bytes_in_use; + return size; +} #endif /* not (MC_ALLOC && ALLOC_TYPE_STATS) */ #ifndef MC_ALLOC @@ -606,7 +564,6 @@ lheader = (struct lrecord_header *) mc_alloc (size); gc_checking_assert (LRECORD_FREE_P (lheader)); set_lheader_implementation (lheader, implementation); - lheader->uid = lrecord_uid_counter++; #ifdef ALLOC_TYPE_STATS inc_lrecord_stats (size, lheader); #endif /* ALLOC_TYPE_STATS */ @@ -614,6 +571,7 @@ return lheader; } + void * noseeum_alloc_lrecord (Bytecount size, const struct lrecord_implementation *implementation) @@ -628,7 +586,6 @@ lheader = (struct lrecord_header *) mc_alloc (size); gc_checking_assert (LRECORD_FREE_P (lheader)); set_lheader_implementation (lheader, implementation); - lheader->uid = lrecord_uid_counter++; #ifdef ALLOC_TYPE_STATS inc_lrecord_stats (size, lheader); #endif /* ALLOC_TYPE_STATS */ @@ -636,15 +593,59 @@ return lheader; } +#ifdef NEW_GC +void * +alloc_lrecord_array (Bytecount size, int elemcount, + const struct lrecord_implementation *implementation) +{ + struct lrecord_header *lheader; + Rawbyte *start, *stop; + + type_checking_assert + ((implementation->static_size == 0 ? + implementation->size_in_bytes_method != NULL : + implementation->static_size == size)); + + lheader = (struct lrecord_header *) mc_alloc_array (size, elemcount); + gc_checking_assert (LRECORD_FREE_P (lheader)); + + for (start = (Rawbyte *) lheader, + stop = ((Rawbyte *) lheader) + (size * elemcount -1); + start < stop; start += size) + { + struct lrecord_header *lh = (struct lrecord_header *) start; + set_lheader_implementation (lh, implementation); + lh->uid = lrecord_uid_counter++; +#ifdef ALLOC_TYPE_STATS + inc_lrecord_stats (size, lh); +#endif /* not ALLOC_TYPE_STATS */ + } + INCREMENT_CONS_COUNTER (size * elemcount, implementation->name); + return lheader; +} +#endif /* NEW_GC */ + void free_lrecord (Lisp_Object lrecord) { +#ifndef NEW_GC gc_checking_assert (!gc_in_progress); +#endif /* not NEW_GC */ gc_checking_assert (!LRECORD_FREE_P (XRECORD_LHEADER (lrecord))); gc_checking_assert (!XRECORD_LHEADER (lrecord)->free); +#ifdef NEW_GC + GC_STAT_EXPLICITLY_TRIED_FREED; + /* Ignore requests to manual free objects while in garbage collection. */ + if (write_barrier_enabled || gc_in_progress) + return; + + GC_STAT_EXPLICITLY_FREED; +#endif /* NEW_GC */ + MC_ALLOC_CALL_FINALIZER (XPNTR (lrecord)); mc_free (XPNTR (lrecord)); + recompute_need_to_garbage_collect (); } #else /* not MC_ALLOC */ @@ -957,16 +958,6 @@ remain free for the next 1000 (or whatever) times that an object of that type is allocated. */ -#ifndef MALLOC_OVERHEAD -#ifdef GNU_MALLOC -#define MALLOC_OVERHEAD 0 -#elif defined (rcheck) -#define MALLOC_OVERHEAD 20 -#else -#define MALLOC_OVERHEAD 8 -#endif -#endif /* MALLOC_OVERHEAD */ - #if !defined(HAVE_MMAP) || defined(DOUG_LEA_MALLOC) /* If we released our reserve (due to running out of memory), and we have a fair amount free once again, @@ -1834,7 +1825,11 @@ f->instructions = Qzero; f->constants = Qzero; f->arglist = Qnil; +#ifdef NEW_GC + f->arguments = Qnil; +#else /* not NEW_GC */ f->args = NULL; +#endif /* not NEW_GC */ f->max_args = f->min_args = f->args_in_array = 0; f->doc_and_interactive = Qnil; #ifdef COMPILED_FUNCTION_ANNOTATION_HACK @@ -2240,8 +2235,12 @@ } static const struct memory_description string_description[] = { +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (Lisp_String, data_object) }, +#else /* not NEW_GC */ { XD_BYTECOUNT, offsetof (Lisp_String, size_) }, { XD_OPAQUE_DATA_PTR, offsetof (Lisp_String, data_), XD_INDIRECT(0, 1) }, +#endif /* not NEW_GC */ { XD_LISP_OBJECT, offsetof (Lisp_String, plist) }, { XD_END } }; @@ -2312,6 +2311,10 @@ Lisp_String); #endif /* not MC_ALLOC */ +#ifdef NEW_GC +#define STRING_FULLSIZE(size) \ + ALIGN_SIZE (FLEXIBLE_ARRAY_STRUCT_SIZEOF (Lisp_String_Direct_Data, Lisp_Object, data, (size) + 1), sizeof (Lisp_Object *)); +#else /* not NEW_GC */ /* String blocks contain this many useful bytes. */ #define STRING_CHARS_BLOCK_SIZE \ ((Bytecount) (8192 - MALLOC_OVERHEAD - \ @@ -2343,8 +2346,10 @@ #define STRING_CHARS_FREE_P(ptr) ((ptr)->string == NULL) #define MARK_STRING_CHARS_AS_FREE(ptr) ((void) ((ptr)->string = NULL)) +#endif /* not NEW_GC */ #ifdef MC_ALLOC +#ifndef NEW_GC static void finalize_string (void *header, int for_disksave) { @@ -2352,9 +2357,6 @@ { Lisp_String *s = (Lisp_String *) header; Bytecount size = s->size_; -#ifdef ALLOC_TYPE_STATS - dec_lrecord_string_data_stats (size); -#endif /* ALLOC_TYPE_STATS */ if (BIG_STRING_SIZE_P (size)) xfree (s->data_, Ibyte *); } @@ -2371,9 +2373,58 @@ string_remprop, string_plist, Lisp_String); +#else /* NEW_GC */ +DEFINE_LRECORD_IMPLEMENTATION_WITH_PROPS ("string", string, + 1, /*dumpable-flag*/ + mark_string, print_string, + 0, + string_equal, 0, + string_description, + string_getprop, + string_putprop, + string_remprop, + string_plist, + Lisp_String); + + +static const struct memory_description string_direct_data_description[] = { + { XD_BYTECOUNT, offsetof (Lisp_String_Indirect_Data, size) }, + { XD_END } +}; +static Bytecount +size_string_direct_data (const void *lheader) +{ + return STRING_FULLSIZE (((Lisp_String_Direct_Data *) lheader)->size); +} + + +DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION ("string-direct-data", + string_direct_data, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + string_direct_data_description, + size_string_direct_data, + Lisp_String_Direct_Data); + + +static const struct memory_description string_indirect_data_description[] = { + { XD_BYTECOUNT, offsetof (Lisp_String_Indirect_Data, size) }, + { XD_OPAQUE_DATA_PTR, offsetof (Lisp_String_Indirect_Data, data), + XD_INDIRECT(0, 1) }, + { XD_END } +}; + +DEFINE_LRECORD_IMPLEMENTATION ("string-indirect-data", + string_indirect_data, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + string_indirect_data_description, + Lisp_String_Indirect_Data); +#endif /* NEW_GC */ #endif /* MC_ALLOC */ +#ifndef NEW_GC struct string_chars { Lisp_String *string; @@ -2440,6 +2491,7 @@ return s_chars; } +#endif /* not NEW_GC */ #ifdef SLEDGEHAMMER_CHECK_ASCII_BEGIN void @@ -2474,9 +2526,6 @@ #ifdef MC_ALLOC s = alloc_lrecord_type (Lisp_String, &lrecord_string); -#ifdef ALLOC_TYPE_STATS - inc_lrecord_string_data_stats (length); -#endif /* ALLOC_TYPE_STATS */ #else /* not MC_ALLOC */ /* Allocate the string header */ ALLOCATE_FIXED_TYPE (string, Lisp_String, s); @@ -2484,10 +2533,20 @@ set_lheader_implementation (&s->u.lheader, &lrecord_string); #endif /* not MC_ALLOC */ + /* The above allocations set the UID field, which overlaps with the + ascii-length field, to some non-zero value. We need to zero it. */ + XSET_STRING_ASCII_BEGIN (wrap_string (s), 0); + +#ifdef NEW_GC + STRING_DATA_OBJECT (s) = + wrap_string_direct_data (alloc_lrecord (fullsize, + &lrecord_string_direct_data)); +#else /* not NEW_GC */ set_lispstringp_data (s, BIG_STRING_FULLSIZE_P (fullsize) ? allocate_big_string_chars (length + 1) : allocate_string_chars_struct (wrap_string (s), fullsize)->chars); +#endif /* not NEW_GC */ set_lispstringp_length (s, length); s->plist = Qnil; @@ -2509,7 +2568,11 @@ void resize_string (Lisp_Object s, Bytecount pos, Bytecount delta) { +#ifdef NEW_GC + Bytecount newfullsize, len; +#else /* not NEW_GC */ Bytecount oldfullsize, newfullsize; +#endif /* not NEW_GC */ #ifdef VERIFY_STRING_CHARS_INTEGRITY verify_string_chars_integrity (); #endif @@ -2537,6 +2600,23 @@ so convert this to the appropriate form. */ pos += -delta; +#ifdef NEW_GC + newfullsize = STRING_FULLSIZE (XSTRING_LENGTH (s) + delta); + + len = XSTRING_LENGTH (s) + 1 - pos; + + if (delta < 0 && pos >= 0) + memmove (XSTRING_DATA (s) + pos + delta, + XSTRING_DATA (s) + pos, len); + + XSTRING_DATA_OBJECT (s) = + wrap_string_direct_data (mc_realloc (XPNTR (XSTRING_DATA_OBJECT (s)), + newfullsize)); + if (delta > 0 && pos >= 0) + memmove (XSTRING_DATA (s) + pos + delta, XSTRING_DATA (s) + pos, + len); + +#else /* NEW_GC */ oldfullsize = STRING_FULLSIZE (XSTRING_LENGTH (s)); newfullsize = STRING_FULLSIZE (XSTRING_LENGTH (s) + delta); @@ -2629,6 +2709,7 @@ } } } +#endif /* not NEW_GC */ XSET_STRING_LENGTH (s, XSTRING_LENGTH (s) + delta); /* If pos < 0, the string won't be zero-terminated. @@ -2712,16 +2793,6 @@ EMACS_INT i; Ibyte *ptr = XSTRING_DATA (val); -#ifdef MC_ALLOC - /* Need this for the new allocator: strings are using the uid - field for ascii_begin. The uid field is set for debugging, - but the string code assumes here that ascii_begin is always - zero, when not touched. This assumption is not true with - the new allocator, so ascii_begin has to be set to zero - here. */ - XSET_STRING_ASCII_BEGIN (val, 0); -#endif /* not MC_ALLOC */ - for (i = XINT (length); i; i--) { Ibyte *init_ptr = init_str; @@ -2860,9 +2931,6 @@ #ifdef MC_ALLOC s = alloc_lrecord_type (Lisp_String, &lrecord_string); -#ifdef ALLOC_TYPE_STATS - inc_lrecord_string_data_stats (length); -#endif /* ALLOC_TYPE_STATS */ mcpro (wrap_pointer_1 (s)); /* otherwise nocopy_strings get collected and static data is tried to be freed. */ @@ -2872,9 +2940,21 @@ set_lheader_implementation (&s->u.lheader, &lrecord_string); SET_C_READONLY_RECORD_HEADER (&s->u.lheader); #endif /* not MC_ALLOC */ + /* Don't need to XSET_STRING_ASCII_BEGIN() here because it happens in + init_string_ascii_begin(). */ s->plist = Qnil; +#ifdef NEW_GC + set_lispstringp_indirect (s); + STRING_DATA_OBJECT (s) = + wrap_string_indirect_data + (alloc_lrecord_type (Lisp_String_Indirect_Data, + &lrecord_string_indirect_data)); + XSTRING_INDIRECT_DATA_DATA (STRING_DATA_OBJECT (s)) = (Ibyte *) contents; + XSTRING_INDIRECT_DATA_SIZE (STRING_DATA_OBJECT (s)) = length; +#else /* not NEW_GC */ set_lispstringp_data (s, (Ibyte *) contents); set_lispstringp_length (s, length); +#endif /* not NEW_GC */ val = wrap_string (s); init_string_ascii_begin (val); sledgehammer_check_ascii_begin (val); @@ -3343,897 +3423,116 @@ #endif /* not DEBUG_XEMACS */ #endif /* MC_ALLOC */ -#ifdef ERROR_CHECK_GC -#ifdef MC_ALLOC -#define GC_CHECK_LHEADER_INVARIANTS(lheader) do { \ - struct lrecord_header * GCLI_lh = (lheader); \ - assert (GCLI_lh != 0); \ - assert (GCLI_lh->type < (unsigned int) lrecord_type_count); \ -} while (0) -#else /* not MC_ALLOC */ -#define GC_CHECK_LHEADER_INVARIANTS(lheader) do { \ - struct lrecord_header * GCLI_lh = (lheader); \ - assert (GCLI_lh != 0); \ - assert (GCLI_lh->type < (unsigned int) lrecord_type_count); \ - assert (! C_READONLY_RECORD_HEADER_P (GCLI_lh) || \ - (MARKED_RECORD_HEADER_P (GCLI_lh) && \ - LISP_READONLY_RECORD_HEADER_P (GCLI_lh))); \ -} while (0) -#endif /* not MC_ALLOC */ -#else -#define GC_CHECK_LHEADER_INVARIANTS(lheader) -#endif - -static const struct memory_description lisp_object_description_1[] = { - { XD_LISP_OBJECT, 0 }, - { XD_END } -}; - -const struct sized_memory_description lisp_object_description = { - sizeof (Lisp_Object), - lisp_object_description_1 -}; - -#if defined (USE_KKCC) || defined (PDUMP) +#ifndef MC_ALLOC +static int gc_count_num_short_string_in_use; +static Bytecount gc_count_string_total_size; +static Bytecount gc_count_short_string_total_size; -/* This function extracts the value of a count variable described somewhere - else in the description. It is converted corresponding to the type */ -EMACS_INT -lispdesc_indirect_count_1 (EMACS_INT code, - const struct memory_description *idesc, - const void *idata) -{ - EMACS_INT count; - const void *irdata; - - int line = XD_INDIRECT_VAL (code); - int delta = XD_INDIRECT_DELTA (code); - - irdata = ((char *) idata) + - lispdesc_indirect_count (idesc[line].offset, idesc, idata); - switch (idesc[line].type) - { - case XD_BYTECOUNT: - count = * (Bytecount *) irdata; - break; - case XD_ELEMCOUNT: - count = * (Elemcount *) irdata; - break; - case XD_HASHCODE: - count = * (Hashcode *) irdata; - break; - case XD_INT: - count = * (int *) irdata; - break; - case XD_LONG: - count = * (long *) irdata; - break; - default: - stderr_out ("Unsupported count type : %d (line = %d, code = %ld)\n", - idesc[line].type, line, (long) code); -#if defined(USE_KKCC) && defined(DEBUG_XEMACS) - if (gc_in_progress) - kkcc_backtrace (); -#endif -#ifdef PDUMP - if (in_pdump) - pdump_backtrace (); -#endif - count = 0; /* warning suppression */ - ABORT (); - } - count += delta; - return count; -} +/* static int gc_count_total_records_used, gc_count_records_total_size; */ -/* SDESC is a "description map" (basically, a list of offsets used for - successive indirections) and OBJ is the first object to indirect off of. - Return the description ultimately found. */ + +/* stats on lcrecords in use - kinda kludgy */ -const struct sized_memory_description * -lispdesc_indirect_description_1 (const void *obj, - const struct sized_memory_description *sdesc) +static struct { - int pos; - - for (pos = 0; sdesc[pos].size >= 0; pos++) - obj = * (const void **) ((const char *) obj + sdesc[pos].size); - - return (const struct sized_memory_description *) obj; -} - -/* Compute the size of the data at RDATA, described by a single entry - DESC1 in a description array. OBJ and DESC are used for - XD_INDIRECT references. */ + int instances_in_use; + int bytes_in_use; + int instances_freed; + int bytes_freed; + int instances_on_free_list; +} lcrecord_stats [countof (lrecord_implementations_table) + + MODULE_DEFINABLE_TYPE_COUNT]; -static Bytecount -lispdesc_one_description_line_size (void *rdata, - const struct memory_description *desc1, - const void *obj, - const struct memory_description *desc) +static void +tick_lcrecord_stats (const struct lrecord_header *h, int free_p) { - union_switcheroo: - switch (desc1->type) - { - case XD_LISP_OBJECT_ARRAY: - { - EMACS_INT val = lispdesc_indirect_count (desc1->data1, desc, obj); - return (val * sizeof (Lisp_Object)); - } - case XD_LISP_OBJECT: - case XD_LO_LINK: - return sizeof (Lisp_Object); - case XD_OPAQUE_PTR: - return sizeof (void *); - case XD_BLOCK_PTR: - { - EMACS_INT val = lispdesc_indirect_count (desc1->data1, desc, obj); - return val * sizeof (void *); - } - case XD_BLOCK_ARRAY: - { - EMACS_INT val = lispdesc_indirect_count (desc1->data1, desc, obj); - - return (val * - lispdesc_block_size - (rdata, - lispdesc_indirect_description (obj, desc1->data2.descr))); - } - case XD_OPAQUE_DATA_PTR: - return sizeof (void *); - case XD_UNION_DYNAMIC_SIZE: - { - /* If an explicit size was given in the first-level structure - description, use it; else compute size based on current union - constant. */ - const struct sized_memory_description *sdesc = - lispdesc_indirect_description (obj, desc1->data2.descr); - if (sdesc->size) - return sdesc->size; - else - { - desc1 = lispdesc_process_xd_union (desc1, desc, obj); - if (desc1) - goto union_switcheroo; - break; - } - } - case XD_UNION: - { - /* If an explicit size was given in the first-level structure - description, use it; else compute size based on maximum of all - possible structures. */ - const struct sized_memory_description *sdesc = - lispdesc_indirect_description (obj, desc1->data2.descr); - if (sdesc->size) - return sdesc->size; - else - { - int count; - Bytecount max_size = -1, size; - - desc1 = sdesc->description; + int type_index = h->type; - for (count = 0; desc1[count].type != XD_END; count++) - { - size = lispdesc_one_description_line_size (rdata, - &desc1[count], - obj, desc); - if (size > max_size) - max_size = size; - } - return max_size; - } - } - case XD_ASCII_STRING: - return sizeof (void *); - case XD_DOC_STRING: - return sizeof (void *); - case XD_INT_RESET: - return sizeof (int); - case XD_BYTECOUNT: - return sizeof (Bytecount); - case XD_ELEMCOUNT: - return sizeof (Elemcount); - case XD_HASHCODE: - return sizeof (Hashcode); - case XD_INT: - return sizeof (int); - case XD_LONG: - return sizeof (long); - default: - stderr_out ("Unsupported dump type : %d\n", desc1->type); - ABORT (); + if (((struct old_lcrecord_header *) h)->free) + { + gc_checking_assert (!free_p); + lcrecord_stats[type_index].instances_on_free_list++; } - - return 0; -} - - -/* Return the size of the memory block (NOT necessarily a structure!) - described by SDESC and pointed to by OBJ. If SDESC records an - explicit size (i.e. non-zero), it is simply returned; otherwise, - the size is calculated by the maximum offset and the size of the - object at that offset, rounded up to the maximum alignment. In - this case, we may need the object, for example when retrieving an - "indirect count" of an inlined array (the count is not constant, - but is specified by one of the elements of the memory block). (It - is generally not a problem if we return an overly large size -- we - will simply end up reserving more space than necessary; but if the - size is too small we could be in serious trouble, in particular - with nested inlined structures, where there may be alignment - padding in the middle of a block. #### In fact there is an (at - least theoretical) problem with an overly large size -- we may - trigger a protection fault when reading from invalid memory. We - need to handle this -- perhaps in a stupid but dependable way, - i.e. by trapping SIGSEGV and SIGBUS.) */ - -Bytecount -lispdesc_block_size_1 (const void *obj, Bytecount size, - const struct memory_description *desc) -{ - EMACS_INT max_offset = -1; - int max_offset_pos = -1; - int pos; - - if (size) - return size; - - for (pos = 0; desc[pos].type != XD_END; pos++) + else { - EMACS_INT offset = lispdesc_indirect_count (desc[pos].offset, desc, obj); - if (offset == max_offset) + Bytecount sz = detagged_lisp_object_size (h); + + if (free_p) { - stderr_out ("Two relocatable elements at same offset?\n"); - ABORT (); + lcrecord_stats[type_index].instances_freed++; + lcrecord_stats[type_index].bytes_freed += sz; } - else if (offset > max_offset) + else { - max_offset = offset; - max_offset_pos = pos; + lcrecord_stats[type_index].instances_in_use++; + lcrecord_stats[type_index].bytes_in_use += sz; } } - - if (max_offset_pos < 0) - return 0; - - { - Bytecount size_at_max; - size_at_max = - lispdesc_one_description_line_size ((char *) obj + max_offset, - &desc[max_offset_pos], obj, desc); - - /* We have no way of knowing the required alignment for this structure, - so just make it maximally aligned. */ - return MAX_ALIGN_SIZE (max_offset + size_at_max); - } } +#endif /* not MC_ALLOC */ -#endif /* defined (USE_KKCC) || defined (PDUMP) */ + +#ifndef MC_ALLOC +/* Free all unmarked records */ +static void +sweep_lcrecords_1 (struct old_lcrecord_header **prev, int *used) +{ + struct old_lcrecord_header *header; + int num_used = 0; + /* int total_size = 0; */ -#ifdef MC_ALLOC -#define GC_CHECK_NOT_FREE(lheader) \ - gc_checking_assert (! LRECORD_FREE_P (lheader)); -#else /* MC_ALLOC */ -#define GC_CHECK_NOT_FREE(lheader) \ - gc_checking_assert (! LRECORD_FREE_P (lheader)); \ - gc_checking_assert (LHEADER_IMPLEMENTATION (lheader)->basic_p || \ - ! ((struct old_lcrecord_header *) lheader)->free) -#endif /* MC_ALLOC */ + xzero (lcrecord_stats); /* Reset all statistics to 0. */ -#ifdef USE_KKCC -/* The following functions implement the new mark algorithm. - They mark objects according to their descriptions. They - are modeled on the corresponding pdumper procedures. */ + /* First go through and call all the finalize methods. + Then go through and free the objects. There used to + be only one loop here, with the call to the finalizer + occurring directly before the xfree() below. That + is marginally faster but much less safe -- if the + finalize method for an object needs to reference any + other objects contained within it (and many do), + we could easily be screwed by having already freed that + other object. */ -#ifdef DEBUG_XEMACS -/* The backtrace for the KKCC mark functions. */ -#define KKCC_INIT_BT_STACK_SIZE 4096 + for (header = *prev; header; header = header->next) + { + struct lrecord_header *h = &(header->lheader); -typedef struct -{ - void *obj; - const struct memory_description *desc; - int pos; -} kkcc_bt_stack_entry; - -static kkcc_bt_stack_entry *kkcc_bt; -static int kkcc_bt_stack_size; -static int kkcc_bt_depth = 0; + GC_CHECK_LHEADER_INVARIANTS (h); -static void -kkcc_bt_init (void) -{ - kkcc_bt_depth = 0; - kkcc_bt_stack_size = KKCC_INIT_BT_STACK_SIZE; - kkcc_bt = (kkcc_bt_stack_entry *) - malloc (kkcc_bt_stack_size * sizeof (kkcc_bt_stack_entry)); - if (!kkcc_bt) - { - stderr_out ("KKCC backtrace stack init failed for size %d\n", - kkcc_bt_stack_size); - ABORT (); + if (! MARKED_RECORD_HEADER_P (h) && ! header->free) + { + if (LHEADER_IMPLEMENTATION (h)->finalizer) + LHEADER_IMPLEMENTATION (h)->finalizer (h, 0); + } } -} -void -kkcc_backtrace (void) -{ - int i; - stderr_out ("KKCC mark stack backtrace :\n"); - for (i = kkcc_bt_depth - 1; i >= 0; i--) + for (header = *prev; header; ) { - Lisp_Object obj = wrap_pointer_1 (kkcc_bt[i].obj); - stderr_out (" [%d]", i); -#ifdef MC_ALLOC - if ((XRECORD_LHEADER (obj)->type >= lrecord_type_last_built_in_type) -#else /* not MC_ALLOC */ - if ((XRECORD_LHEADER (obj)->type >= lrecord_type_free) -#endif /* not MC_ALLOC */ - || (!LRECORDP (obj)) - || (!XRECORD_LHEADER_IMPLEMENTATION (obj))) + struct lrecord_header *h = &(header->lheader); + if (MARKED_RECORD_HEADER_P (h)) { - stderr_out (" non Lisp Object"); + if (! C_READONLY_RECORD_HEADER_P (h)) + UNMARK_RECORD_HEADER (h); + num_used++; + /* total_size += n->implementation->size_in_bytes (h);*/ + /* #### May modify header->next on a C_READONLY lcrecord */ + prev = &(header->next); + header = *prev; + tick_lcrecord_stats (h, 0); } else { - stderr_out (" %s", - XRECORD_LHEADER_IMPLEMENTATION (obj)->name); + struct old_lcrecord_header *next = header->next; + *prev = next; + tick_lcrecord_stats (h, 1); + /* used to call finalizer right here. */ + xfree (header, struct old_lcrecord_header *); + header = next; } - stderr_out (" (addr: 0x%x, desc: 0x%x, ", - (int) kkcc_bt[i].obj, - (int) kkcc_bt[i].desc); - if (kkcc_bt[i].pos >= 0) - stderr_out ("pos: %d)\n", kkcc_bt[i].pos); - else - stderr_out ("root set)\n"); } -} - -static void -kkcc_bt_stack_realloc (void) -{ - kkcc_bt_stack_size *= 2; - kkcc_bt = (kkcc_bt_stack_entry *) - realloc (kkcc_bt, kkcc_bt_stack_size * sizeof (kkcc_bt_stack_entry)); - if (!kkcc_bt) - { - stderr_out ("KKCC backtrace stack realloc failed for size %d\n", - kkcc_bt_stack_size); - ABORT (); - } -} - -static void -kkcc_bt_free (void) -{ - free (kkcc_bt); - kkcc_bt = 0; - kkcc_bt_stack_size = 0; -} - -static void -kkcc_bt_push (void *obj, const struct memory_description *desc, - int level, int pos) -{ - kkcc_bt_depth = level; - kkcc_bt[kkcc_bt_depth].obj = obj; - kkcc_bt[kkcc_bt_depth].desc = desc; - kkcc_bt[kkcc_bt_depth].pos = pos; - kkcc_bt_depth++; - if (kkcc_bt_depth >= kkcc_bt_stack_size) - kkcc_bt_stack_realloc (); -} - -#else /* not DEBUG_XEMACS */ -#define kkcc_bt_init() -#define kkcc_bt_push(obj, desc, level, pos) -#endif /* not DEBUG_XEMACS */ - -/* Object memory descriptions are in the lrecord_implementation structure. - But copying them to a parallel array is much more cache-friendly. */ -const struct memory_description *lrecord_memory_descriptions[countof (lrecord_implementations_table)]; - -/* the initial stack size in kkcc_gc_stack_entries */ -#define KKCC_INIT_GC_STACK_SIZE 16384 - -typedef struct -{ - void *data; - const struct memory_description *desc; -#ifdef DEBUG_XEMACS - int level; - int pos; -#endif -} kkcc_gc_stack_entry; - -static kkcc_gc_stack_entry *kkcc_gc_stack_ptr; -static kkcc_gc_stack_entry *kkcc_gc_stack_top; -static kkcc_gc_stack_entry *kkcc_gc_stack_last_entry; -static int kkcc_gc_stack_size; - -static void -kkcc_gc_stack_init (void) -{ - kkcc_gc_stack_size = KKCC_INIT_GC_STACK_SIZE; - kkcc_gc_stack_ptr = (kkcc_gc_stack_entry *) - malloc (kkcc_gc_stack_size * sizeof (kkcc_gc_stack_entry)); - if (!kkcc_gc_stack_ptr) - { - stderr_out ("stack init failed for size %d\n", kkcc_gc_stack_size); - ABORT (); - } - kkcc_gc_stack_top = kkcc_gc_stack_ptr - 1; - kkcc_gc_stack_last_entry = kkcc_gc_stack_ptr + kkcc_gc_stack_size - 1; -} - -static void -kkcc_gc_stack_free (void) -{ - free (kkcc_gc_stack_ptr); - kkcc_gc_stack_ptr = 0; - kkcc_gc_stack_top = 0; - kkcc_gc_stack_size = 0; -} - -static void -kkcc_gc_stack_realloc (void) -{ - int current_offset = (int)(kkcc_gc_stack_top - kkcc_gc_stack_ptr); - kkcc_gc_stack_size *= 2; - kkcc_gc_stack_ptr = (kkcc_gc_stack_entry *) - realloc (kkcc_gc_stack_ptr, - kkcc_gc_stack_size * sizeof (kkcc_gc_stack_entry)); - if (!kkcc_gc_stack_ptr) - { - stderr_out ("stack realloc failed for size %d\n", kkcc_gc_stack_size); - ABORT (); - } - kkcc_gc_stack_top = kkcc_gc_stack_ptr + current_offset; - kkcc_gc_stack_last_entry = kkcc_gc_stack_ptr + kkcc_gc_stack_size - 1; -} - -#define KKCC_GC_STACK_FULL (kkcc_gc_stack_top >= kkcc_gc_stack_last_entry) -#define KKCC_GC_STACK_EMPTY (kkcc_gc_stack_top < kkcc_gc_stack_ptr) - -static void -#ifdef DEBUG_XEMACS -kkcc_gc_stack_push_1 (void *data, const struct memory_description *desc, - int level, int pos) -#else -kkcc_gc_stack_push_1 (void *data, const struct memory_description *desc) -#endif -{ - if (KKCC_GC_STACK_FULL) - kkcc_gc_stack_realloc(); - kkcc_gc_stack_top++; - kkcc_gc_stack_top->data = data; - kkcc_gc_stack_top->desc = desc; -#ifdef DEBUG_XEMACS - kkcc_gc_stack_top->level = level; - kkcc_gc_stack_top->pos = pos; -#endif -} - -#ifdef DEBUG_XEMACS -#define kkcc_gc_stack_push(data, desc, level, pos) \ - kkcc_gc_stack_push_1 (data, desc, level, pos) -#else -#define kkcc_gc_stack_push(data, desc, level, pos) \ - kkcc_gc_stack_push_1 (data, desc) -#endif - -static kkcc_gc_stack_entry * -kkcc_gc_stack_pop (void) -{ - if (KKCC_GC_STACK_EMPTY) - return 0; - kkcc_gc_stack_top--; - return kkcc_gc_stack_top + 1; -} - -void -#ifdef DEBUG_XEMACS -kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj, int level, int pos) -#else -kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj) -#endif -{ - if (XTYPE (obj) == Lisp_Type_Record) - { - struct lrecord_header *lheader = XRECORD_LHEADER (obj); - const struct memory_description *desc; - GC_CHECK_LHEADER_INVARIANTS (lheader); - desc = RECORD_DESCRIPTION (lheader); - if (! MARKED_RECORD_HEADER_P (lheader)) - { - MARK_RECORD_HEADER (lheader); - kkcc_gc_stack_push ((void*) lheader, desc, level, pos); - } - } -} - -#ifdef DEBUG_XEMACS -#define kkcc_gc_stack_push_lisp_object(obj, level, pos) \ - kkcc_gc_stack_push_lisp_object_1 (obj, level, pos) -#else -#define kkcc_gc_stack_push_lisp_object(obj, level, pos) \ - kkcc_gc_stack_push_lisp_object_1 (obj) -#endif - -#ifdef ERROR_CHECK_GC -#define KKCC_DO_CHECK_FREE(obj, allow_free) \ -do \ -{ \ - if (!allow_free && XTYPE (obj) == Lisp_Type_Record) \ - { \ - struct lrecord_header *lheader = XRECORD_LHEADER (obj); \ - GC_CHECK_NOT_FREE (lheader); \ - } \ -} while (0) -#else -#define KKCC_DO_CHECK_FREE(obj, allow_free) -#endif - -#ifdef ERROR_CHECK_GC -#ifdef DEBUG_XEMACS -static void -mark_object_maybe_checking_free_1 (Lisp_Object obj, int allow_free, - int level, int pos) -#else -static void -mark_object_maybe_checking_free_1 (Lisp_Object obj, int allow_free) -#endif -{ - KKCC_DO_CHECK_FREE (obj, allow_free); - kkcc_gc_stack_push_lisp_object (obj, level, pos); -} - -#ifdef DEBUG_XEMACS -#define mark_object_maybe_checking_free(obj, allow_free, level, pos) \ - mark_object_maybe_checking_free_1 (obj, allow_free, level, pos) -#else -#define mark_object_maybe_checking_free(obj, allow_free, level, pos) \ - mark_object_maybe_checking_free_1 (obj, allow_free) -#endif -#else /* not ERROR_CHECK_GC */ -#define mark_object_maybe_checking_free(obj, allow_free, level, pos) \ - kkcc_gc_stack_push_lisp_object (obj, level, pos) -#endif /* not ERROR_CHECK_GC */ - - -/* This function loops all elements of a struct pointer and calls - mark_with_description with each element. */ -static void -#ifdef DEBUG_XEMACS -mark_struct_contents_1 (const void *data, - const struct sized_memory_description *sdesc, - int count, int level, int pos) -#else -mark_struct_contents_1 (const void *data, - const struct sized_memory_description *sdesc, - int count) -#endif -{ - int i; - Bytecount elsize; - elsize = lispdesc_block_size (data, sdesc); - - for (i = 0; i < count; i++) - { - kkcc_gc_stack_push (((char *) data) + elsize * i, sdesc->description, - level, pos); - } -} - -#ifdef DEBUG_XEMACS -#define mark_struct_contents(data, sdesc, count, level, pos) \ - mark_struct_contents_1 (data, sdesc, count, level, pos) -#else -#define mark_struct_contents(data, sdesc, count, level, pos) \ - mark_struct_contents_1 (data, sdesc, count) -#endif - -/* This function implements the KKCC mark algorithm. - Instead of calling mark_object, all the alive Lisp_Objects are pushed - on the kkcc_gc_stack. This function processes all elements on the stack - according to their descriptions. */ -static void -kkcc_marking (void) -{ - kkcc_gc_stack_entry *stack_entry = 0; - void *data = 0; - const struct memory_description *desc = 0; - int pos; -#ifdef DEBUG_XEMACS - int level = 0; - kkcc_bt_init (); -#endif - - while ((stack_entry = kkcc_gc_stack_pop ()) != 0) - { - data = stack_entry->data; - desc = stack_entry->desc; -#ifdef DEBUG_XEMACS - level = stack_entry->level + 1; -#endif - - kkcc_bt_push (data, desc, stack_entry->level, stack_entry->pos); - - gc_checking_assert (data); - gc_checking_assert (desc); - - for (pos = 0; desc[pos].type != XD_END; pos++) - { - const struct memory_description *desc1 = &desc[pos]; - const void *rdata = - (const char *) data + lispdesc_indirect_count (desc1->offset, - desc, data); - union_switcheroo: - - /* If the flag says don't mark, then don't mark. */ - if ((desc1->flags) & XD_FLAG_NO_KKCC) - continue; - - switch (desc1->type) - { - case XD_BYTECOUNT: - case XD_ELEMCOUNT: - case XD_HASHCODE: - case XD_INT: - case XD_LONG: - case XD_INT_RESET: - case XD_LO_LINK: - case XD_OPAQUE_PTR: - case XD_OPAQUE_DATA_PTR: - case XD_ASCII_STRING: - case XD_DOC_STRING: - break; - case XD_LISP_OBJECT: - { - const Lisp_Object *stored_obj = (const Lisp_Object *) rdata; - - /* Because of the way that tagged objects work (pointers and - Lisp_Objects have the same representation), XD_LISP_OBJECT - can be used for untagged pointers. They might be NULL, - though. */ - if (EQ (*stored_obj, Qnull_pointer)) - break; -#ifdef MC_ALLOC - mark_object_maybe_checking_free (*stored_obj, 0, level, pos); -#else /* not MC_ALLOC */ - mark_object_maybe_checking_free - (*stored_obj, (desc1->flags) & XD_FLAG_FREE_LISP_OBJECT, - level, pos); -#endif /* not MC_ALLOC */ - break; - } - case XD_LISP_OBJECT_ARRAY: - { - int i; - EMACS_INT count = - lispdesc_indirect_count (desc1->data1, desc, data); - - for (i = 0; i < count; i++) - { - const Lisp_Object *stored_obj = - (const Lisp_Object *) rdata + i; - - if (EQ (*stored_obj, Qnull_pointer)) - break; -#ifdef MC_ALLOC - mark_object_maybe_checking_free (*stored_obj, 0, level, pos); -#else /* not MC_ALLOC */ - mark_object_maybe_checking_free - (*stored_obj, (desc1->flags) & XD_FLAG_FREE_LISP_OBJECT, - level, pos); -#endif /* not MC_ALLOC */ - } - break; - } - case XD_BLOCK_PTR: - { - EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc, - data); - const struct sized_memory_description *sdesc = - lispdesc_indirect_description (data, desc1->data2.descr); - const char *dobj = * (const char **) rdata; - if (dobj) - mark_struct_contents (dobj, sdesc, count, level, pos); - break; - } - case XD_BLOCK_ARRAY: - { - EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc, - data); - const struct sized_memory_description *sdesc = - lispdesc_indirect_description (data, desc1->data2.descr); - - mark_struct_contents (rdata, sdesc, count, level, pos); - break; - } - case XD_UNION: - case XD_UNION_DYNAMIC_SIZE: - desc1 = lispdesc_process_xd_union (desc1, desc, data); - if (desc1) - goto union_switcheroo; - break; - - default: - stderr_out ("Unsupported description type : %d\n", desc1->type); - kkcc_backtrace (); - ABORT (); - } - } - } -#ifdef DEBUG_XEMACS - kkcc_bt_free (); -#endif -} -#endif /* USE_KKCC */ - -/* Mark reference to a Lisp_Object. If the object referred to has not been - seen yet, recursively mark all the references contained in it. */ - -void -mark_object ( -#ifdef USE_KKCC - Lisp_Object UNUSED (obj) -#else - Lisp_Object obj -#endif - ) -{ -#ifdef USE_KKCC - /* this code should never be reached when configured for KKCC */ - stderr_out ("KKCC: Invalid mark_object call.\n"); - stderr_out ("Replace mark_object with kkcc_gc_stack_push_lisp_object.\n"); - ABORT (); -#else /* not USE_KKCC */ - - tail_recurse: - - /* Checks we used to perform */ - /* if (EQ (obj, Qnull_pointer)) return; */ - /* if (!POINTER_TYPE_P (XGCTYPE (obj))) return; */ - /* if (PURIFIED (XPNTR (obj))) return; */ - - if (XTYPE (obj) == Lisp_Type_Record) - { - struct lrecord_header *lheader = XRECORD_LHEADER (obj); - - GC_CHECK_LHEADER_INVARIANTS (lheader); - - /* We handle this separately, above, so we can mark free objects */ - GC_CHECK_NOT_FREE (lheader); - - /* All c_readonly objects have their mark bit set, - so that we only need to check the mark bit here. */ - if (! MARKED_RECORD_HEADER_P (lheader)) - { - MARK_RECORD_HEADER (lheader); - - if (RECORD_MARKER (lheader)) - { - obj = RECORD_MARKER (lheader) (obj); - if (!NILP (obj)) goto tail_recurse; - } - } - } -#endif /* not KKCC */ -} - - -#ifndef MC_ALLOC -static int gc_count_num_short_string_in_use; -static Bytecount gc_count_string_total_size; -static Bytecount gc_count_short_string_total_size; - -/* static int gc_count_total_records_used, gc_count_records_total_size; */ - - -/* stats on lcrecords in use - kinda kludgy */ - -static struct -{ - int instances_in_use; - int bytes_in_use; - int instances_freed; - int bytes_freed; - int instances_on_free_list; -} lcrecord_stats [countof (lrecord_implementations_table) - + MODULE_DEFINABLE_TYPE_COUNT]; - -static void -tick_lcrecord_stats (const struct lrecord_header *h, int free_p) -{ - int type_index = h->type; - - if (((struct old_lcrecord_header *) h)->free) - { - gc_checking_assert (!free_p); - lcrecord_stats[type_index].instances_on_free_list++; - } - else - { - Bytecount sz = detagged_lisp_object_size (h); - - if (free_p) - { - lcrecord_stats[type_index].instances_freed++; - lcrecord_stats[type_index].bytes_freed += sz; - } - else - { - lcrecord_stats[type_index].instances_in_use++; - lcrecord_stats[type_index].bytes_in_use += sz; - } - } -} -#endif /* not MC_ALLOC */ - - -#ifndef MC_ALLOC -/* Free all unmarked records */ -static void -sweep_lcrecords_1 (struct old_lcrecord_header **prev, int *used) -{ - struct old_lcrecord_header *header; - int num_used = 0; - /* int total_size = 0; */ - - xzero (lcrecord_stats); /* Reset all statistics to 0. */ - - /* First go through and call all the finalize methods. - Then go through and free the objects. There used to - be only one loop here, with the call to the finalizer - occurring directly before the xfree() below. That - is marginally faster but much less safe -- if the - finalize method for an object needs to reference any - other objects contained within it (and many do), - we could easily be screwed by having already freed that - other object. */ - - for (header = *prev; header; header = header->next) - { - struct lrecord_header *h = &(header->lheader); - - GC_CHECK_LHEADER_INVARIANTS (h); - - if (! MARKED_RECORD_HEADER_P (h) && ! header->free) - { - if (LHEADER_IMPLEMENTATION (h)->finalizer) - LHEADER_IMPLEMENTATION (h)->finalizer (h, 0); - } - } - - for (header = *prev; header; ) - { - struct lrecord_header *h = &(header->lheader); - if (MARKED_RECORD_HEADER_P (h)) - { - if (! C_READONLY_RECORD_HEADER_P (h)) - UNMARK_RECORD_HEADER (h); - num_used++; - /* total_size += n->implementation->size_in_bytes (h);*/ - /* #### May modify header->next on a C_READONLY lcrecord */ - prev = &(header->next); - header = *prev; - tick_lcrecord_stats (h, 0); - } - else - { - struct old_lcrecord_header *next = header->next; - *prev = next; - tick_lcrecord_stats (h, 1); - /* used to call finalizer right here. */ - xfree (header, struct old_lcrecord_header *); - header = next; - } - } - *used = num_used; - /* *total = total_size; */ + *used = num_used; + /* *total = total_size; */ } /* And the Lord said: Thou shalt use the `c-backslash-region' command @@ -4801,9 +4100,10 @@ #endif /* defined (MULE) && defined (VERIFY_STRING_CHARS_INTEGRITY) */ +#ifndef NEW_GC /* Compactify string chars, relocating the reference to each -- free any empty string_chars_block we see. */ -static void +void compact_string_chars (void) { struct string_chars_block *to_sb = first_string_chars_block; @@ -4899,6 +4199,7 @@ current_string_chars_block->next = 0; } } +#endif /* not NEW_GC */ #ifndef MC_ALLOC #if 1 /* Hack to debug missing purecopy's */ @@ -4960,28 +4261,9 @@ } #endif /* not MC_ALLOC */ -/* I hate duplicating all this crap! */ -int -marked_p (Lisp_Object obj) -{ - /* Checks we used to perform. */ - /* if (EQ (obj, Qnull_pointer)) return 1; */ - /* if (!POINTER_TYPE_P (XGCTYPE (obj))) return 1; */ - /* if (PURIFIED (XPNTR (obj))) return 1; */ - - if (XTYPE (obj) == Lisp_Type_Record) - { - struct lrecord_header *lheader = XRECORD_LHEADER (obj); - - GC_CHECK_LHEADER_INVARIANTS (lheader); - - return MARKED_RECORD_HEADER_P (lheader); - } - return 1; -} - -static void -gc_sweep (void) +#ifndef NEW_GC +void +gc_sweep_1 (void) { #ifdef MC_ALLOC compact_string_chars (); @@ -5070,6 +4352,7 @@ #endif #endif /* not MC_ALLOC */ } +#endif /* not NEW_GC */ /* Clearing for disksave. */ @@ -5107,11 +4390,16 @@ #endif Vshell_file_name = Qnil; +#ifdef NEW_GC + gc_full (); +#else /* not NEW_GC */ garbage_collect_1 (); +#endif /* not NEW_GC */ /* Run the disksave finalization methods of all live objects. */ disksave_object_finalization_1 (); +#ifndef NEW_GC /* Zero out the uninitialized (really, unused) part of the containers for the live strings. */ { @@ -5128,405 +4416,12 @@ } } } +#endif /* not NEW_GC */ /* There, that ought to be enough... */ } - -int -begin_gc_forbidden (void) -{ - return internal_bind_int (&gc_currently_forbidden, 1); -} - -void -end_gc_forbidden (int count) -{ - unbind_to (count); -} - -/* Maybe we want to use this when doing a "panic" gc after memory_full()? */ -static int gc_hooks_inhibited; - -struct post_gc_action -{ - void (*fun) (void *); - void *arg; -}; - -typedef struct post_gc_action post_gc_action; - -typedef struct -{ - Dynarr_declare (post_gc_action); -} post_gc_action_dynarr; - -static post_gc_action_dynarr *post_gc_actions; - -/* Register an action to be called at the end of GC. - gc_in_progress is 0 when this is called. - This is used when it is discovered that an action needs to be taken, - but it's during GC, so it's not safe. (e.g. in a finalize method.) - - As a general rule, do not use Lisp objects here. - And NEVER signal an error. -*/ - -void -register_post_gc_action (void (*fun) (void *), void *arg) -{ - post_gc_action action; - - if (!post_gc_actions) - post_gc_actions = Dynarr_new (post_gc_action); - - action.fun = fun; - action.arg = arg; - - Dynarr_add (post_gc_actions, action); -} - -static void -run_post_gc_actions (void) -{ - int i; - - if (post_gc_actions) - { - for (i = 0; i < Dynarr_length (post_gc_actions); i++) - { - post_gc_action action = Dynarr_at (post_gc_actions, i); - (action.fun) (action.arg); - } - - Dynarr_reset (post_gc_actions); - } -} - - -void -garbage_collect_1 (void) -{ -#if MAX_SAVE_STACK > 0 - char stack_top_variable; - extern char *stack_bottom; -#endif - struct frame *f; - int speccount; - int cursor_changed; - Lisp_Object pre_gc_cursor; - struct gcpro gcpro1; - PROFILE_DECLARE (); - - assert (!in_display || gc_currently_forbidden); - - if (gc_in_progress - || gc_currently_forbidden - || in_display - || preparing_for_armageddon) - return; - - PROFILE_RECORD_ENTERING_SECTION (QSin_garbage_collection); - - /* We used to call selected_frame() here. - - The following functions cannot be called inside GC - so we move to after the above tests. */ - { - Lisp_Object frame; - Lisp_Object device = Fselected_device (Qnil); - if (NILP (device)) /* Could happen during startup, eg. if always_gc */ - return; - frame = Fselected_frame (device); - if (NILP (frame)) - invalid_state ("No frames exist on device", device); - f = XFRAME (frame); - } - - pre_gc_cursor = Qnil; - cursor_changed = 0; - - GCPRO1 (pre_gc_cursor); - - /* Very important to prevent GC during any of the following - stuff that might run Lisp code; otherwise, we'll likely - have infinite GC recursion. */ - speccount = begin_gc_forbidden (); - - need_to_signal_post_gc = 0; - recompute_funcall_allocation_flag (); - - if (!gc_hooks_inhibited) - run_hook_trapping_problems - (Qgarbage_collecting, Qpre_gc_hook, - INHIBIT_EXISTING_PERMANENT_DISPLAY_OBJECT_DELETION); - - /* Now show the GC cursor/message. */ - if (!noninteractive) - { - if (FRAME_WIN_P (f)) - { - Lisp_Object frame = wrap_frame (f); - Lisp_Object cursor = glyph_image_instance (Vgc_pointer_glyph, - FRAME_SELECTED_WINDOW (f), - ERROR_ME_NOT, 1); - pre_gc_cursor = f->pointer; - if (POINTER_IMAGE_INSTANCEP (cursor) - /* don't change if we don't know how to change back. */ - && POINTER_IMAGE_INSTANCEP (pre_gc_cursor)) - { - cursor_changed = 1; - Fset_frame_pointer (frame, cursor); - } - } - - /* Don't print messages to the stream device. */ - if (!cursor_changed && !FRAME_STREAM_P (f)) - { - if (garbage_collection_messages) - { - Lisp_Object args[2], whole_msg; - args[0] = (STRINGP (Vgc_message) ? Vgc_message : - build_msg_string (gc_default_message)); - args[1] = build_string ("..."); - whole_msg = Fconcat (2, args); - echo_area_message (f, (Ibyte *) 0, whole_msg, 0, -1, - Qgarbage_collecting); - } - } - } - - /***** Now we actually start the garbage collection. */ - - gc_in_progress = 1; - inhibit_non_essential_conversion_operations = 1; - - gc_generation_number[0]++; - -#if MAX_SAVE_STACK > 0 - - /* Save a copy of the contents of the stack, for debugging. */ - if (!purify_flag) - { - /* Static buffer in which we save a copy of the C stack at each GC. */ - static char *stack_copy; - static Bytecount stack_copy_size; - - ptrdiff_t stack_diff = &stack_top_variable - stack_bottom; - Bytecount stack_size = (stack_diff > 0 ? stack_diff : -stack_diff); - if (stack_size < MAX_SAVE_STACK) - { - if (stack_copy_size < stack_size) - { - stack_copy = (char *) xrealloc (stack_copy, stack_size); - stack_copy_size = stack_size; - } - - memcpy (stack_copy, - stack_diff > 0 ? stack_bottom : &stack_top_variable, - stack_size); - } - } -#endif /* MAX_SAVE_STACK > 0 */ - - /* Do some totally ad-hoc resource clearing. */ - /* #### generalize this? */ - clear_event_resource (); - cleanup_specifiers (); - cleanup_buffer_undo_lists (); - - /* Mark all the special slots that serve as the roots of accessibility. */ - -#ifdef USE_KKCC - /* initialize kkcc stack */ - kkcc_gc_stack_init(); -#define mark_object(obj) kkcc_gc_stack_push_lisp_object (obj, 0, -1) -#endif /* USE_KKCC */ - - { /* staticpro() */ - Lisp_Object **p = Dynarr_begin (staticpros); - Elemcount count; - for (count = Dynarr_length (staticpros); count; count--) - mark_object (**p++); - } - - { /* staticpro_nodump() */ - Lisp_Object **p = Dynarr_begin (staticpros_nodump); - Elemcount count; - for (count = Dynarr_length (staticpros_nodump); count; count--) - mark_object (**p++); - } - -#ifdef MC_ALLOC - { /* mcpro () */ - Lisp_Object *p = Dynarr_begin (mcpros); - Elemcount count; - for (count = Dynarr_length (mcpros); count; count--) - mark_object (*p++); - } -#endif /* MC_ALLOC */ - - { /* GCPRO() */ - struct gcpro *tail; - int i; - for (tail = gcprolist; tail; tail = tail->next) - for (i = 0; i < tail->nvars; i++) - mark_object (tail->var[i]); - } - - { /* specbind() */ - struct specbinding *bind; - for (bind = specpdl; bind != specpdl_ptr; bind++) - { - mark_object (bind->symbol); - mark_object (bind->old_value); - } - } - - { - struct catchtag *c; - for (c = catchlist; c; c = c->next) - { - mark_object (c->tag); - mark_object (c->val); - mark_object (c->actual_tag); - mark_object (c->backtrace); - } - } - - { - struct backtrace *backlist; - for (backlist = backtrace_list; backlist; backlist = backlist->next) - { - int nargs = backlist->nargs; - int i; - - mark_object (*backlist->function); - if (nargs < 0 /* nargs == UNEVALLED || nargs == MANY */ - /* might be fake (internal profiling entry) */ - && backlist->args) - mark_object (backlist->args[0]); - else - for (i = 0; i < nargs; i++) - mark_object (backlist->args[i]); - } - } - - mark_profiling_info (); - - /* OK, now do the after-mark stuff. This is for things that - are only marked when something else is marked (e.g. weak hash tables). - There may be complex dependencies between such objects -- e.g. - a weak hash table might be unmarked, but after processing a later - weak hash table, the former one might get marked. So we have to - iterate until nothing more gets marked. */ -#ifdef USE_KKCC - kkcc_marking (); -#endif /* USE_KKCC */ - init_marking_ephemerons (); - while (finish_marking_weak_hash_tables () > 0 || - finish_marking_weak_lists () > 0 || - continue_marking_ephemerons () > 0) -#ifdef USE_KKCC - { - kkcc_marking (); - } -#else /* NOT USE_KKCC */ - ; -#endif /* USE_KKCC */ - - /* At this point, we know which objects need to be finalized: we - still need to resurrect them */ - - while (finish_marking_ephemerons () > 0 || - finish_marking_weak_lists () > 0 || - finish_marking_weak_hash_tables () > 0) -#ifdef USE_KKCC - { - kkcc_marking (); - } - kkcc_gc_stack_free (); -#undef mark_object -#else /* NOT USE_KKCC */ - ; -#endif /* USE_KKCC */ - - /* And prune (this needs to be called after everything else has been - marked and before we do any sweeping). */ - /* #### this is somewhat ad-hoc and should probably be an object - method */ - prune_weak_hash_tables (); - prune_weak_lists (); - prune_specifiers (); - prune_syntax_tables (); - - prune_ephemerons (); - prune_weak_boxes (); - - gc_sweep (); - - consing_since_gc = 0; -#ifndef DEBUG_XEMACS - /* Allow you to set it really fucking low if you really want ... */ - if (gc_cons_threshold < 10000) - gc_cons_threshold = 10000; -#endif - recompute_need_to_garbage_collect (); - - inhibit_non_essential_conversion_operations = 0; - gc_in_progress = 0; - - run_post_gc_actions (); - - /******* End of garbage collection ********/ - - /* Now remove the GC cursor/message */ - if (!noninteractive) - { - if (cursor_changed) - Fset_frame_pointer (wrap_frame (f), pre_gc_cursor); - else if (!FRAME_STREAM_P (f)) - { - /* Show "...done" only if the echo area would otherwise be empty. */ - if (NILP (clear_echo_area (selected_frame (), - Qgarbage_collecting, 0))) - { - if (garbage_collection_messages) - { - Lisp_Object args[2], whole_msg; - args[0] = (STRINGP (Vgc_message) ? Vgc_message : - build_msg_string (gc_default_message)); - args[1] = build_msg_string ("... done"); - whole_msg = Fconcat (2, args); - echo_area_message (selected_frame (), (Ibyte *) 0, - whole_msg, 0, -1, - Qgarbage_collecting); - } - } - } - } - - /* now stop inhibiting GC */ - unbind_to (speccount); - -#ifndef MC_ALLOC - if (!breathing_space) - { - breathing_space = malloc (4096 - MALLOC_OVERHEAD); - } -#endif /* not MC_ALLOC */ - - UNGCPRO; - - need_to_signal_post_gc = 1; - funcall_allocation_flag = 1; - - PROFILE_RECORD_EXITING_SECTION (QSin_garbage_collection); - - return; -} - #ifdef ALLOC_TYPE_STATS static Lisp_Object @@ -5579,13 +4474,6 @@ pl = gc_plist_hack (buf, lrecord_stats[i].instances_in_use, pl); } } - pl = gc_plist_hack ("string-data-storage-including-overhead", - lrecord_string_data_bytes_in_use_including_overhead, pl); - pl = gc_plist_hack ("string-data-storage-additional", - lrecord_string_data_bytes_in_use, pl); - pl = gc_plist_hack ("string-data-used", - lrecord_string_data_instances_in_use, pl); - tgu_val += lrecord_string_data_bytes_in_use_including_overhead; #else /* not MC_ALLOC */ @@ -5726,7 +4614,11 @@ ()) { /* Record total usage for purposes of determining next GC */ +#ifdef NEW_GC + gc_full (); +#else /* not NEW_GC */ garbage_collect_1 (); +#endif /* not NEW_GC */ /* This will get set to 1, and total_gc_usage computed, as part of the call to object_memory_usage_stats() -- if ALLOC_TYPE_STATS is enabled. */ @@ -5825,28 +4717,6 @@ need_to_signal_post_gc; } -/* True if it's time to garbage collect now. */ -static void -recompute_need_to_garbage_collect (void) -{ - if (always_gc) - need_to_garbage_collect = 1; - else - need_to_garbage_collect = - (consing_since_gc > gc_cons_threshold - && -#if 0 /* #### implement this better */ - (100 * consing_since_gc) / total_data_usage () >= - gc_cons_percentage -#else - (!total_gc_usage_set || - (100 * consing_since_gc) / total_gc_usage >= - gc_cons_percentage) -#endif - ); - recompute_funcall_allocation_flag (); -} - int object_dead_p (Lisp_Object obj) @@ -6013,11 +4883,9 @@ Qnull_pointer = wrap_pointer_1 (0); #endif - gc_generation_number[0] = 0; #ifndef MC_ALLOC breathing_space = 0; #endif /* not MC_ALLOC */ - Vgc_message = Qzero; #ifndef MC_ALLOC all_lcrecords = 0; #endif /* not MC_ALLOC */ @@ -6029,7 +4897,9 @@ mallopt (M_MMAP_MAX, 64); /* max. number of mmap'ed areas */ #endif #endif +#ifndef NEW_GC init_string_chars_alloc (); +#endif /* not NEW_GC */ #ifndef MC_ALLOC init_string_alloc (); init_string_chars_alloc (); @@ -6087,26 +4957,15 @@ #endif /* MC_ALLOC */ consing_since_gc = 0; - need_to_garbage_collect = always_gc; need_to_check_c_alloca = 0; funcall_allocation_flag = 0; funcall_alloca_count = 0; -#if 1 - gc_cons_threshold = 2000000; /* XEmacs change */ -#else - gc_cons_threshold = 15000; /* debugging */ -#endif - gc_cons_percentage = 40; /* #### what is optimal? */ - total_gc_usage_set = 0; lrecord_uid_counter = 259; #ifndef MC_ALLOC debug_string_purity = 0; #endif /* not MC_ALLOC */ - gc_currently_forbidden = 0; - gc_hooks_inhibited = 0; - #ifdef ERROR_CHECK_TYPES ERROR_ME.really_unlikely_name_to_have_accidentally_in_a_non_errb_structure = 666; @@ -6173,6 +5032,10 @@ INIT_LRECORD_IMPLEMENTATION (cons); INIT_LRECORD_IMPLEMENTATION (vector); INIT_LRECORD_IMPLEMENTATION (string); +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (string_indirect_data); + INIT_LRECORD_IMPLEMENTATION (string_direct_data); +#endif /* NEW_GC */ #ifndef MC_ALLOC INIT_LRECORD_IMPLEMENTATION (lcrecord_list); INIT_LRECORD_IMPLEMENTATION (free); @@ -6206,8 +5069,6 @@ void syms_of_alloc (void) { - DEFSYMBOL (Qpre_gc_hook); - DEFSYMBOL (Qpost_gc_hook); DEFSYMBOL (Qgarbage_collecting); DEFSUBR (Fcons); @@ -6238,49 +5099,6 @@ void vars_of_alloc (void) { - QSin_garbage_collection = build_msg_string ("(in garbage collection)"); - staticpro (&QSin_garbage_collection); - - DEFVAR_INT ("gc-cons-threshold", &gc_cons_threshold /* -*Number of bytes of consing between garbage collections. -\"Consing\" is a misnomer in that this actually counts allocation -of all different kinds of objects, not just conses. -Garbage collection can happen automatically once this many bytes have been -allocated since the last garbage collection. All data types count. - -Garbage collection happens automatically when `eval' or `funcall' are -called. (Note that `funcall' is called implicitly as part of evaluation.) -By binding this temporarily to a large number, you can effectively -prevent garbage collection during a part of the program. - -Normally, you cannot set this value less than 10,000 (if you do, it is -automatically reset during the next garbage collection). However, if -XEmacs was compiled with DEBUG_XEMACS, this does not happen, allowing -you to set this value very low to track down problems with insufficient -GCPRO'ing. If you set this to a negative number, garbage collection will -happen at *EVERY* call to `eval' or `funcall'. This is an extremely -effective way to check GCPRO problems, but be warned that your XEmacs -will be unusable! You almost certainly won't have the patience to wait -long enough to be able to set it back. - -See also `consing-since-gc' and `gc-cons-percentage'. -*/ ); - - DEFVAR_INT ("gc-cons-percentage", &gc_cons_percentage /* -*Percentage of memory allocated between garbage collections. - -Garbage collection will happen if this percentage of the total amount of -memory used for data (see `lisp-object-memory-usage') has been allocated -since the last garbage collection. However, it will not happen if less -than `gc-cons-threshold' bytes have been allocated -- this sets an absolute -minimum in case very little data has been allocated or the percentage is -set very low. Set this to 0 to have garbage collection always happen after -`gc-cons-threshold' bytes have been allocated, regardless of current memory -usage. - -See also `consing-since-gc' and `gc-cons-threshold'. -*/ ); - #ifdef DEBUG_XEMACS DEFVAR_INT ("debug-allocation", &debug_allocation /* If non-zero, print out information to stderr about all objects allocated. @@ -6299,49 +5117,4 @@ Non-nil means loading Lisp code in order to dump an executable. This means that certain objects should be allocated in readonly space. */ ); - - DEFVAR_BOOL ("garbage-collection-messages", &garbage_collection_messages /* - Non-nil means display messages at start and end of garbage collection. -*/ ); - garbage_collection_messages = 0; - - DEFVAR_LISP ("pre-gc-hook", &Vpre_gc_hook /* -Function or functions to be run just before each garbage collection. -Interrupts, garbage collection, and errors are inhibited while this hook -runs, so be extremely careful in what you add here. In particular, avoid -consing, and do not interact with the user. -*/ ); - Vpre_gc_hook = Qnil; - - DEFVAR_LISP ("post-gc-hook", &Vpost_gc_hook /* -Function or functions to be run just after each garbage collection. -Interrupts, garbage collection, and errors are inhibited while this hook -runs. Each hook is called with one argument which is an alist with -finalization data. -*/ ); - Vpost_gc_hook = Qnil; - - DEFVAR_LISP ("gc-message", &Vgc_message /* -String to print to indicate that a garbage collection is in progress. -This is printed in the echo area. If the selected frame is on a -window system and `gc-pointer-glyph' specifies a value (i.e. a pointer -image instance) in the domain of the selected frame, the mouse pointer -will change instead of this message being printed. -*/ ); - Vgc_message = build_string (gc_default_message); - - DEFVAR_LISP ("gc-pointer-glyph", &Vgc_pointer_glyph /* -Pointer glyph used to indicate that a garbage collection is in progress. -If the selected window is on a window system and this glyph specifies a -value (i.e. a pointer image instance) in the domain of the selected -window, the pointer will be changed as specified during garbage collection. -Otherwise, a message will be printed in the echo area, as controlled -by `gc-message'. -*/ ); -} - -void -complex_vars_of_alloc (void) -{ - Vgc_pointer_glyph = Fmake_glyph_internal (Qpointer); } diff -urN 21.5.23/src/buffer.c 21.5.24/src/buffer.c --- 21.5.23/src/buffer.c Tue Oct 25 17:32:47 2005 +++ 21.5.24/src/buffer.c Sun Dec 18 06:04:16 2005 @@ -233,6 +233,14 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("buffer-text", buffer_text, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + buffer_text_description_1, + Lisp_Buffer_Text); +#endif /* NEW_GC */ + static const struct sized_memory_description buffer_text_description = { sizeof (struct buffer_text), buffer_text_description_1 @@ -244,10 +252,16 @@ { XD_LISP_OBJECT, offsetof (struct buffer, extent_info) }, +#ifdef NEW_GC + { XD_BLOCK_PTR, offsetof (struct buffer, text), + 1, { &buffer_text_description } }, + { XD_LISP_OBJECT, offsetof (struct buffer, syntax_cache) }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (struct buffer, text), 1, { &buffer_text_description } }, { XD_BLOCK_PTR, offsetof (struct buffer, syntax_cache), 1, { &syntax_cache_description } }, +#endif /* not NEW_GC */ { XD_LISP_OBJECT, offsetof (struct buffer, indirect_children) }, { XD_LISP_OBJECT, offsetof (struct buffer, base_buffer) }, @@ -1696,8 +1710,8 @@ Switch to Fundamental mode by killing current buffer's local variables. Most local variable bindings are eliminated so that the default values become effective once more. Also, the syntax table is set from -`standard-syntax-table', the category table is set from -`standard-category-table' (if support for Mule exists), local keymap is set +the standard syntax table, the category table is set from the +standard category table (if support for Mule exists), local keymap is set to nil, the abbrev table is set from `fundamental-mode-abbrev-table', and all specifier specifications whose locale is the current buffer are removed. This function also forces redisplay of the modeline. @@ -1889,6 +1903,9 @@ syms_of_buffer (void) { INIT_LRECORD_IMPLEMENTATION (buffer); +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (buffer_text); +#endif /* NEW_GC */ DEFSYMBOL (Qbuffer_live_p); DEFSYMBOL (Qbuffer_or_string_p); diff -urN 21.5.23/src/buffer.h 21.5.24/src/buffer.h --- 21.5.23/src/buffer.h Mon Oct 24 19:07:34 2005 +++ 21.5.24/src/buffer.h Fri Nov 25 10:41:56 2005 @@ -79,6 +79,9 @@ struct buffer_text { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ Ibyte *beg; /* Actual address of buffer contents. */ Bytebpos gpt; /* Index of gap in buffer. */ Charbpos bufgpt; /* Equivalent as a Charbpos. */ @@ -137,6 +140,20 @@ /* Change data that goes with the text. */ struct buffer_text_change_data *changes; }; + +#ifdef NEW_GC +typedef struct buffer_text Lisp_Buffer_Text; + +DECLARE_LRECORD (buffer_text, Lisp_Buffer_Text); + +#define XBUFFER_TEXT(x) \ + XRECORD (x, buffer_text, Lisp_Buffer_Text) +#define wrap_buffer_text(p) wrap_record (p, buffer_text) +#define BUFFER_TEXT_P(x) RECORDP (x, buffer_text) +#define CHECK_BUFFER_TEXT(x) CHECK_RECORD (x, buffer_text) +#define CONCHECK_BUFFER_TEXT(x) CONCHECK_RECORD (x, buffer_text) +#endif /* NEW_GC */ + struct buffer { diff -urN 21.5.23/src/bytecode.c 21.5.24/src/bytecode.c --- 21.5.23/src/bytecode.c Sat Apr 9 08:11:19 2005 +++ 21.5.24/src/bytecode.c Fri Nov 25 10:41:56 2005 @@ -58,6 +58,45 @@ #include "syntax.h" #include "window.h" +#ifdef NEW_GC +static Lisp_Object +make_compiled_function_args (int totalargs) +{ + Lisp_Compiled_Function_Args *args; + args = (Lisp_Compiled_Function_Args *) + alloc_lrecord + (FLEXIBLE_ARRAY_STRUCT_SIZEOF (Lisp_Compiled_Function_Args, + Lisp_Object, args, totalargs), + &lrecord_compiled_function_args); + args->size = totalargs; + return wrap_compiled_function_args (args); +} + +static Bytecount +size_compiled_function_args (const void *lheader) +{ + return FLEXIBLE_ARRAY_STRUCT_SIZEOF (Lisp_Compiled_Function_Args, + Lisp_Object, args, + ((Lisp_Compiled_Function_Args *) + lheader)->size); +} + +static const struct memory_description compiled_function_args_description[] = { + { XD_LONG, offsetof (Lisp_Compiled_Function_Args, size) }, + { XD_LISP_OBJECT_ARRAY, offsetof (Lisp_Compiled_Function_Args, args), + XD_INDIRECT(0, 0) }, + { XD_END } +}; + +DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION ("compiled-function-args", + compiled_function_args, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + compiled_function_args_description, + size_compiled_function_args, + Lisp_Compiled_Function_Args); +#endif /* NEW_GC */ + EXFUN (Ffetch_bytecode, 1); Lisp_Object Qbyte_code, Qcompiled_functionp, Qinvalid_byte_code; @@ -2022,13 +2061,21 @@ } if (totalargs) +#ifdef NEW_GC + f->arguments = make_compiled_function_args (totalargs); +#else /* not NEW_GC */ f->args = xnew_array (Lisp_Object, totalargs); +#endif /* not NEW_GC */ { LIST_LOOP_2 (arg, f->arglist) { if (!EQ (arg, Qand_optional) && !EQ (arg, Qand_rest)) +#ifdef NEW_GC + XCOMPILED_FUNCTION_ARGS_DATA (f->arguments)[i++] = arg; +#else /* not NEW_GC */ f->args[i++] = arg; +#endif /* not NEW_GC */ } } @@ -2061,6 +2108,7 @@ /************************************************************************/ /* The compiled-function object type */ /************************************************************************/ + static void print_compiled_function (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) @@ -2143,7 +2191,11 @@ mark_object (f->annotated); #endif for (i = 0; i < f->args_in_array; i++) +#ifdef NEW_GC + mark_object (XCOMPILED_FUNCTION_ARGS_DATA (f->arguments)[i]); +#else /* not NEW_GC */ mark_object (f->args[i]); +#endif /* not NEW_GC */ /* tail-recurse on constants */ return f->constants; @@ -2179,8 +2231,12 @@ static const struct memory_description compiled_function_description[] = { { XD_INT, offsetof (Lisp_Compiled_Function, args_in_array) }, - { XD_BLOCK_PTR, offsetof (Lisp_Compiled_Function, args), +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (Lisp_Compiled_Function, arguments) }, +#else /* not NEW_GC */ + { XD_BLOCK_PTR, offsetof (Lisp_Compiled_Function, args), XD_INDIRECT (0, 0), { &lisp_object_description } }, +#endif /* not NEW_GC */ { XD_LISP_OBJECT, offsetof (Lisp_Compiled_Function, instructions) }, { XD_LISP_OBJECT, offsetof (Lisp_Compiled_Function, constants) }, { XD_LISP_OBJECT, offsetof (Lisp_Compiled_Function, arglist) }, @@ -2191,7 +2247,7 @@ { XD_END } }; -#ifdef MC_ALLOC +#if defined(MC_ALLOC) && !defined(NEW_GC) static void finalize_compiled_function (void *header, int for_disksave) { @@ -2213,7 +2269,7 @@ compiled_function_hash, compiled_function_description, Lisp_Compiled_Function); -#else /* not MC_ALLOC */ +#else /* !MC_ALLOC || NEW_GC */ DEFINE_BASIC_LRECORD_IMPLEMENTATION ("compiled-function", compiled_function, 1, /*dumpable_flag*/ mark_compiled_function, @@ -2222,7 +2278,8 @@ compiled_function_hash, compiled_function_description, Lisp_Compiled_Function); -#endif /* not MC_ALLOC */ +#endif /* !MC_ALLOC || NEW_GC */ + DEFUN ("compiled-function-p", Fcompiled_function_p, 1, 1, 0, /* Return t if OBJECT is a byte-compiled function object. @@ -2594,6 +2651,9 @@ syms_of_bytecode (void) { INIT_LRECORD_IMPLEMENTATION (compiled_function); +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (compiled_function_args); +#endif /* NEW_GC */ DEFERROR_STANDARD (Qinvalid_byte_code, Qinvalid_state); DEFSYMBOL (Qbyte_code); diff -urN 21.5.23/src/bytecode.h 21.5.24/src/bytecode.h --- 21.5.23/src/bytecode.h Sun Apr 14 21:42:14 2002 +++ 21.5.24/src/bytecode.h Fri Nov 25 10:41:56 2005 @@ -31,6 +31,32 @@ #ifndef INCLUDED_bytecode_h_ #define INCLUDED_bytecode_h_ +#ifdef NEW_GC +struct compiled_function_args +{ + struct lrecord_header header; + long size; + Lisp_Object args[1]; +}; + +typedef struct compiled_function_args Lisp_Compiled_Function_Args; + +DECLARE_LRECORD (compiled_function_args, Lisp_Compiled_Function_Args); + +#define XCOMPILED_FUNCTION_ARGS(x) \ + XRECORD (x, compiled_function_args, Lisp_Compiled_Function_Args) +#define wrap_compiled_function_args(p) wrap_record (p, compiled_function_args) +#define COMPILED_FUNCTION_ARGS_P(x) RECORDP (x, compiled_function_args) +#define CHECK_COMPILED_FUNCTION_ARGS(x) \ + CHECK_RECORD (x, compiled_function_args) +#define CONCHECK_COMPILED_FUNCTION_ARGS(x) \ + CONCHECK_RECORD (x, compiled_function_args) + +#define compiled_function_args_data(v) ((v)->args) +#define XCOMPILED_FUNCTION_ARGS_DATA(s) \ + compiled_function_args_data (XCOMPILED_FUNCTION_ARGS (s)) +#endif /* not NEW_GC */ + /* Meanings of slots in a Lisp_Compiled_Function. Don't use these! For backward compatibility only. */ #define COMPILED_ARGLIST 0 @@ -64,7 +90,11 @@ Lisp_Object arglist; /* For speed, we unroll arglist into an array of argument symbols, so we don't have to process arglist every time we make a function call. */ +#ifdef NEW_GC + Lisp_Object arguments; +#else /* not NEW_GC */ Lisp_Object *args; +#endif /* not NEW_GC */ /* Minimum and maximum number of arguments. If MAX_ARGS == MANY, the function was declared with &rest, and (args_in_array - 1) indicates how many arguments there are before the &rest argument. (We could diff -urN 21.5.23/src/chartab.c 21.5.24/src/chartab.c --- 21.5.23/src/chartab.c Tue Oct 25 20:16:21 2005 +++ 21.5.24/src/chartab.c Sun Dec 18 19:59:14 2005 @@ -600,7 +600,7 @@ /* Qgeneric not Qsyntax because a syntax table has a mirror table and we don't want infinite recursion */ ct->mirror_table = Fmake_char_table (Qgeneric); - set_char_table_default (ct->mirror_table, make_int (Spunct)); + set_char_table_default (ct->mirror_table, make_int (Sword)); XCHAR_TABLE (ct->mirror_table)->mirror_table_p = 1; XCHAR_TABLE (ct->mirror_table)->mirror_table = obj; } diff -urN 21.5.23/src/compiler.h 21.5.24/src/compiler.h --- 21.5.23/src/compiler.h Tue Oct 25 20:16:21 2005 +++ 21.5.24/src/compiler.h Sat Nov 26 20:46:07 2005 @@ -211,6 +211,13 @@ #endif /* ATTRIBUTE_CONST */ /* Unused declarations; g++ and icc do not support this. */ +/* + NOTE: These macros MUST be named UNUSED (exactly) or something + prefixed with USED_IF_, or DEFUN docstrings will be parsed incorrectly. + See comments in make_docfile.c (write_c_args). You'd think that this + wouldn't happen, but unfortunately we do indeed have some arguments + of DEFUNs unused for GNU compatibility or because features are missing. +*/ #ifndef UNUSED_ARG # define UNUSED_ARG(decl) unused_##decl #endif @@ -230,6 +237,11 @@ # define USED_IF_MULE_OR_CHECK_TEXT(decl) decl # else # define USED_IF_MULE_OR_CHECK_TEXT(decl) UNUSED (decl) +# endif +# ifdef USE_XFT +# define USED_IF_XFT(decl) decl +# else +# define USED_IF_XFT(decl) UNUSED (decl) # endif #endif /* UNUSED */ diff -urN 21.5.23/src/config.h.in 21.5.24/src/config.h.in --- 21.5.23/src/config.h.in Tue Oct 25 20:19:58 2005 +++ 21.5.24/src/config.h.in Sat Nov 26 20:46:07 2005 @@ -206,6 +206,13 @@ /* Compile in support for the X window system? */ #undef HAVE_X_WINDOWS +/* Compile with support for Xft? */ +#undef USE_XFT +/* Per-widget stuff will go away? */ +#undef USE_XFT_MENUBARS +#undef USE_XFT_TABS +#undef USE_XFT_GAUGE + /* Defines for building X applications */ #ifdef HAVE_X_WINDOWS /* The following will be defined if xmkmf thinks they are necessary */ @@ -414,6 +421,14 @@ #undef HAVE_WCSCMP #undef HAVE_WCSLEN +/* Functions and structs checked for vdb. */ +#undef HAVE_MPROTECT +#undef HAVE_SIGACTION +#undef HAVE_STRUCT_SIGINFO_SI_ADDR +#undef HAVE_SIGINFO_T_SI_ADDR +#undef HAVE_SIGNAL +#undef HAVE_STRUCT_SIGCONTEXT_CR2 + #undef HAVE_UTIME #undef HAVE_UTIMES #undef HAVE_SIGSETJMP @@ -680,6 +695,15 @@ /* If defined, use experimental allocator. */ #undef MC_ALLOC + +/* If defined, use experimental incremental garbage collector. */ +#undef NEW_GC + +/* Virtual dirty bit implementation for incremental gc. */ +#undef VDB_POSIX +#undef VDB_MACH +#undef VDB_WIN32 +#undef VDB_FAKE /* Enable special GNU Make features in the Makefiles. */ #undef USE_GNU_MAKE diff -urN 21.5.23/src/console-gtk-impl.h 21.5.24/src/console-gtk-impl.h --- 21.5.23/src/console-gtk-impl.h Wed Jul 7 21:01:06 2004 +++ 21.5.24/src/console-gtk-impl.h Fri Nov 25 10:41:57 2005 @@ -49,6 +49,9 @@ struct gtk_device { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ /* Gtk application info. */ GtkWidget *gtk_app_shell; @@ -109,6 +112,17 @@ #endif }; +#ifdef NEW_GC +typedef struct gtk_device Lisp_Gtk_Device; + +DECLARE_LRECORD (gtk_device, Lisp_Gtk_Device); + +#define XGTK_DEVICE(x) \ + XRECORD (x, gtk_device, Lisp_Gtk_Device) +#define wrap_gtk_device(p) wrap_record (p, gtk_device) +#define GTK_DEVICE_P(x) RECORDP (x, gtk_device) +#endif /* NEW_GC */ + #define DEVICE_GTK_DATA(d) DEVICE_TYPE_DATA (d, gtk) #define DEVICE_GTK_VISUAL(d) (DEVICE_GTK_DATA (d)->visual) @@ -129,6 +143,10 @@ struct gtk_frame { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ + /* The widget of this frame. */ GtkWidget *widget; /* This is really a GtkWindow */ @@ -181,6 +199,17 @@ Lisp_Object widget_callback_hash_table; Lisp_Object widget_callback_ex_hash_table; }; + +#ifdef NEW_GC +typedef struct gtk_frame Lisp_Gtk_Frame; + +DECLARE_LRECORD (gtk_frame, Lisp_Gtk_Frame); + +#define XGTK_FRAME(x) \ + XRECORD (x, gtk_frame, Lisp_Gtk_Frame) +#define wrap_gtk_frame(p) wrap_record (p, gtk_frame) +#define GTK_FRAME_P(x) RECORDP (x, gtk_frame) +#endif /* NEW_GC */ #define FRAME_GTK_DATA(f) FRAME_TYPE_DATA (f, gtk) diff -urN 21.5.23/src/console-msw-impl.h 21.5.24/src/console-msw-impl.h --- 21.5.23/src/console-msw-impl.h Mon Oct 24 19:07:34 2005 +++ 21.5.24/src/console-msw-impl.h Fri Nov 25 10:41:57 2005 @@ -81,6 +81,9 @@ struct mswindows_device { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ Lisp_Object fontlist; /* List of (STRING . FIXED-P), device fonts */ HDC hcdc; /* Compatible DC */ DWORD update_tick; /* Used when device is modified through @@ -88,6 +91,17 @@ in event-msw.c */ }; +#ifdef NEW_GC +typedef struct mswindows_device Lisp_Mswindows_Device; + +DECLARE_LRECORD (mswindows_device, Lisp_Mswindows_Device); + +#define XMSWINDOWS_DEVICE(x) \ + XRECORD (x, mswindows_device, Lisp_Mswindows_Device) +#define wrap_mswindows_device(p) wrap_record (p, mswindows_device) +#define MSWINDOWS_DEVICE_P(x) RECORDP (x, mswindows_device) +#endif /* NEW_GC */ + #define DEVICE_MSWINDOWS_DATA(d) DEVICE_TYPE_DATA (d, mswindows) #define DEVICE_MSWINDOWS_FONTLIST(d) (DEVICE_MSWINDOWS_DATA (d)->fontlist) #define DEVICE_MSWINDOWS_HCDC(d) (DEVICE_MSWINDOWS_DATA (d)->hcdc) @@ -95,6 +109,9 @@ struct msprinter_device { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ HDC hdc, hcdc; /* Printer and the comp. DCs */ HANDLE hprinter; Lisp_Object name; @@ -102,6 +119,17 @@ Lisp_Object fontlist; }; +#ifdef NEW_GC +typedef struct msprinter_device Lisp_Msprinter_Device; + +DECLARE_LRECORD (msprinter_device, Lisp_Msprinter_Device); + +#define XMSPRINTER_DEVICE(x) \ + XRECORD (x, msprinter_device, Lisp_Msprinter_Device) +#define wrap_msprinter_device(p) wrap_record (p, msprinter_device) +#define MSPRINTER_DEVICE_P(x) RECORDP (x, msprinter_device) +#endif /* NEW_GC */ + #define DEVICE_MSPRINTER_DATA(d) DEVICE_TYPE_DATA (d, msprinter) #define DEVICE_MSPRINTER_HDC(d) (DEVICE_MSPRINTER_DATA (d)->hdc) #define DEVICE_MSPRINTER_HCDC(d) (DEVICE_MSPRINTER_DATA (d)->hcdc) @@ -139,6 +167,10 @@ struct mswindows_frame { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ + /* win32 window handle */ HWND hwnd; @@ -198,6 +230,17 @@ creation. Members are set to -1 for unspecified */ XEMACS_RECT_WH *target_rect; }; + +#ifdef NEW_GC +typedef struct mswindows_frame Lisp_Mswindows_Frame; + +DECLARE_LRECORD (mswindows_frame, Lisp_Mswindows_Frame); + +#define XMSWINDOWS_FRAME(x) \ + XRECORD (x, mswindows_frame, Lisp_Mswindows_Frame) +#define wrap_mswindows_frame(p) wrap_record (p, mswindows_frame) +#define MSWINDOWS_FRAME_P(x) RECORDP (x, mswindows_frame) +#endif /* NEW_GC */ #define FRAME_MSWINDOWS_DATA(f) FRAME_TYPE_DATA (f, mswindows) diff -urN 21.5.23/src/console-stream-impl.h 21.5.24/src/console-stream-impl.h --- 21.5.23/src/console-stream-impl.h Sun Jan 12 20:08:09 2003 +++ 21.5.24/src/console-stream-impl.h Fri Nov 25 10:41:57 2005 @@ -34,12 +34,26 @@ struct stream_console { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ FILE *in; FILE *out; FILE *err; int needs_newline; Lisp_Object instream; }; + +#ifdef NEW_GC +typedef struct stream_console Lisp_Stream_Console; + +DECLARE_LRECORD (stream_console, Lisp_Stream_Console); + +#define XSTREAM_CONSOLE(x) \ + XRECORD (x, stream_console, Lisp_Stream_Console) +#define wrap_stream_console(p) wrap_record (p, stream_console) +#define STREAM_CONSOLE_P(x) RECORDP (x, stream_console) +#endif /* NEW_GC */ #define CONSOLE_STREAM_DATA(con) CONSOLE_TYPE_DATA (con, stream) diff -urN 21.5.23/src/console-stream.c 21.5.24/src/console-stream.c --- 21.5.23/src/console-stream.c Tue Jan 25 08:33:48 2005 +++ 21.5.24/src/console-stream.c Fri Nov 25 10:41:57 2005 @@ -53,9 +53,17 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("stream-console", stream_console, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + stream_console_data_description_1, + Lisp_Stream_Console); +#else /* not NEW_GC */ const struct sized_memory_description stream_console_data_description = { sizeof (struct stream_console), stream_console_data_description_1 }; +#endif /* not NEW_GC */ static void stream_init_console (struct console *con, Lisp_Object UNUSED (params)) @@ -63,8 +71,14 @@ Lisp_Object tty = CONSOLE_CONNECTION (con); struct stream_console *stream_con; +#ifdef NEW_GC + if (CONSOLE_STREAM_DATA (con) == NULL) + CONSOLE_STREAM_DATA (con) = alloc_lrecord_type (struct stream_console, + &lrecord_stream_console); +#else /* not NEW_GC */ if (CONSOLE_STREAM_DATA (con) == NULL) CONSOLE_STREAM_DATA (con) = xnew_and_zero (struct stream_console); +#endif /* not NEW_GC */ stream_con = CONSOLE_STREAM_DATA (con); @@ -123,7 +137,11 @@ if (stream_con->in != stdin) retry_fclose (stream_con->in); +#ifdef NEW_GC + mc_free (stream_con); +#else /* not NEW_GC */ xfree (stream_con, struct stream_console *); +#endif /* not NEW_GC */ CONSOLE_STREAM_DATA (con) = NULL; } } diff -urN 21.5.23/src/console-stream.h 21.5.24/src/console-stream.h --- 21.5.23/src/console-stream.h Sun Jan 12 20:08:09 2003 +++ 21.5.24/src/console-stream.h Fri Nov 25 10:41:57 2005 @@ -29,7 +29,9 @@ #include "console.h" +#ifndef NEW_GC extern const struct sized_memory_description stream_console_data_description; +#endif /* not NEW_GC */ extern Lisp_Object Vterminal_console, Vterminal_frame, Vterminal_device; diff -urN 21.5.23/src/console-tty-impl.h 21.5.24/src/console-tty-impl.h --- 21.5.23/src/console-tty-impl.h Fri Jun 21 06:18:24 2002 +++ 21.5.24/src/console-tty-impl.h Fri Nov 25 10:41:57 2005 @@ -39,6 +39,9 @@ struct tty_console { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ int infd, outfd; Lisp_Object instream, outstream; Lisp_Object terminal_type; @@ -199,6 +202,17 @@ unsigned int is_stdio :1; }; +#ifdef NEW_GC +typedef struct tty_console Lisp_Tty_Console; + +DECLARE_LRECORD (tty_console, Lisp_Tty_Console); + +#define XTTY_CONSOLE(x) \ + XRECORD (x, tty_console, Lisp_Tty_Console) +#define wrap_tty_console(p) wrap_record (p, tty_console) +#define TTY_CONSOLE_P(x) RECORDP (x, tty_console) +#endif /* NEW_GC */ + #define CONSOLE_TTY_DATA(c) CONSOLE_TYPE_DATA (c, tty) #define CONSOLE_TTY_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->cursor_x) #define CONSOLE_TTY_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->cursor_y) @@ -228,12 +242,26 @@ struct tty_device { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ #ifdef HAVE_TERMIOS speed_t ospeed; /* Output speed (from sg_ospeed) */ #else short ospeed; /* Output speed (from sg_ospeed) */ #endif }; + +#ifdef NEW_GC +typedef struct tty_device Lisp_Tty_Device; + +DECLARE_LRECORD (tty_device, Lisp_Tty_Device); + +#define XTTY_DEVICE(x) \ + XRECORD (x, tty_device, Lisp_Tty_Device) +#define wrap_tty_device(p) wrap_record (p, tty_device) +#define TTY_DEVICE_P(x) RECORDP (x, tty_device) +#endif /* NEW_GC */ #define DEVICE_TTY_DATA(d) DEVICE_TYPE_DATA (d, tty) diff -urN 21.5.23/src/console-tty.c 21.5.24/src/console-tty.c --- 21.5.23/src/console-tty.c Fri Jul 8 17:27:34 2005 +++ 21.5.24/src/console-tty.c Fri Nov 25 10:41:58 2005 @@ -59,16 +59,29 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("tty-console", tty_console, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + tty_console_data_description_1, + Lisp_Tty_Console); +#else /* not NEW_GC */ const struct sized_memory_description tty_console_data_description = { sizeof (struct tty_console), tty_console_data_description_1 }; +#endif /* not NEW_GC */ static void allocate_tty_console_struct (struct console *con) { /* zero out all slots except the lisp ones ... */ +#ifdef NEW_GC + CONSOLE_TTY_DATA (con) = alloc_lrecord_type (struct tty_console, + &lrecord_tty_console); +#else /* not NEW_GC */ CONSOLE_TTY_DATA (con) = xnew_and_zero (struct tty_console); +#endif /* not NEW_GC */ CONSOLE_TTY_DATA (con)->terminal_type = Qnil; CONSOLE_TTY_DATA (con)->instream = Qnil; CONSOLE_TTY_DATA (con)->outstream = Qnil; @@ -202,7 +215,11 @@ xfree (tty_con->term_entry_buffer, char *); tty_con->term_entry_buffer = NULL; } +#ifdef NEW_GC + mc_free (tty_con); +#else /* not NEW_GC */ xfree (tty_con, struct tty_console *); +#endif /* not NEW_GC */ CONSOLE_TTY_DATA (con) = NULL; } } diff -urN 21.5.23/src/console-x-impl.h 21.5.24/src/console-x-impl.h --- 21.5.23/src/console-x-impl.h Fri Nov 5 08:06:18 2004 +++ 21.5.24/src/console-x-impl.h Sat Nov 26 20:46:07 2005 @@ -42,6 +42,9 @@ struct x_device { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ /* The X connection of this device. */ Display *display; @@ -159,6 +162,17 @@ Time modifier_release_time; }; +#ifdef NEW_GC +typedef struct x_device Lisp_X_Device; + +DECLARE_LRECORD (x_device, Lisp_X_Device); + +#define XX_DEVICE(x) \ + XRECORD (x, x_device, Lisp_X_Device) +#define wrap_x_device(p) wrap_record (p, x_device) +#define X_DEVICE_P(x) RECORDP (x, x_device) +#endif /* NEW_GC */ + #define DEVICE_X_DATA(d) DEVICE_TYPE_DATA (d, x) #define FRAME_X_DISPLAY(f) (DEVICE_X_DISPLAY (XDEVICE (f->device))) @@ -225,6 +239,10 @@ struct x_frame { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ + /* The widget of this frame. This is an EmacsShell or an ExternalShell. */ Widget widget; @@ -290,6 +308,17 @@ #endif /* XIM_XLIB */ #endif /* HAVE_XIM */ +#ifdef USE_XFT + /* The Xft Drawable wrapper for this device. + #### Should this be per-device, or per-frame? */ + /* This is persistent to take advantage of the ability of Xft's glyph + cache in the server, and avoid rendering the font again and again... + + This is created the first time through redisplay, and destroyed when our + connection to the X display is destroyed. */ + XftDraw *xftDraw; +#endif + /* 1 if the frame is completely visible on the display, 0 otherwise. if 0 the frame may have been iconified or may be totally or partially hidden by another X window */ @@ -311,6 +340,16 @@ #endif /* EXTERNAL_WIDGET */ }; +#ifdef NEW_GC +typedef struct x_frame Lisp_X_Frame; + +DECLARE_LRECORD (x_frame, Lisp_X_Frame); + +#define XX_FRAME(x) \ + XRECORD (x, x_frame, Lisp_X_Frame) +#define wrap_x_frame(p) wrap_record (p, x_frame) +#define X_FRAME_P(x) RECORDP (x, x_frame) +#endif /* NEW_GC */ #define FRAME_X_DATA(f) FRAME_TYPE_DATA (f, x) #define FRAME_X_SHELL_WIDGET(f) (FRAME_X_DATA (f)->widget) @@ -338,6 +377,10 @@ #endif /* HAVE_TOOLBARS */ #define FRAME_X_GEOM_FREE_ME_PLEASE(f) (FRAME_X_DATA (f)->geom_free_me_please) + +#ifdef USE_XFT +#define FRAME_X_XFTDRAW(f) (FRAME_X_DATA (f)->xftDraw) +#endif #define FRAME_X_TOTALLY_VISIBLE_P(f) (FRAME_X_DATA (f)->totally_visible_p) #define FRAME_X_TOP_LEVEL_FRAME_P(f) (FRAME_X_DATA (f)->top_level_frame_p) diff -urN 21.5.23/src/console-x.c 21.5.24/src/console-x.c --- 21.5.23/src/console-x.c Wed Jun 29 18:47:35 2005 +++ 21.5.24/src/console-x.c Sun Dec 18 04:47:02 2005 @@ -349,6 +349,26 @@ xkeysym = XStringToKeysym(keysym_ext); if (NoSymbol == xkeysym) { + /* Keysym is NoSymbol; this may mean the key event passed to us came + from an input method, which stored the actual character intended to + be inserted in the key name, and didn't trouble itself to set the + keycode to anything useful. Thus, if the key name is a single + character, and the keysym is NoSymbol, give it a default binding, + if that is possible. */ + Lisp_Object keychar; + + if (1 != string_char_length(key_name)) + { + /* Don't let them pass us more than one character. */ + return Qnil; + } + keychar = make_char(itext_ichar(XSTRING_DATA(key_name))); + if (NILP (Flookup_key (Vcurrent_global_map, keychar, Qnil))) + { + Fdefine_key (Vcurrent_global_map, keychar, Qself_insert_command); + Fputhash (keychar, Qt, DEVICE_X_KEYSYM_MAP_HASH_TABLE (d)); + return Qt; + } return Qnil; } diff -urN 21.5.23/src/console-x.h 21.5.24/src/console-x.h --- 21.5.23/src/console-x.h Mon Jan 17 19:10:18 2005 +++ 21.5.24/src/console-x.h Sat Nov 26 20:46:07 2005 @@ -51,6 +51,19 @@ #include #endif +#ifdef USE_XFT +/* shut up GCC */ +#define face_index face_index_arg +#define glyph_index glyph_index_arg +#include +#undef glyph_index +#undef face_index +/* #### this should be made gone */ +#ifndef XFT_VERSION +#define XFT_VERSION 1 +#endif +#endif + /* R5 defines the XPointer type, but R4 doesn't. R4 also doesn't define a version number, but R5 does. */ #if (XlibSpecificationRelease < 5) diff -urN 21.5.23/src/console.c 21.5.24/src/console.c --- 21.5.23/src/console.c Tue Oct 25 20:16:21 2005 +++ 21.5.24/src/console.c Sun Dec 18 20:44:28 2005 @@ -115,9 +115,17 @@ static const struct memory_description console_data_description_1 []= { #ifdef HAVE_TTY +#ifdef NEW_GC + { XD_LISP_OBJECT, tty_console }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, tty_console, 1, { &tty_console_data_description} }, +#endif /* not NEW_GC */ #endif +#ifdef NEW_GC + { XD_LISP_OBJECT, stream_console }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, stream_console, 1, { &stream_console_data_description} }, +#endif /* not NEW_GC */ { XD_END } }; @@ -982,7 +990,7 @@ void stuff_buffered_input ( -#ifdef BSD +#if defined(BSD) && defined(HAVE_TTY) Lisp_Object stuffstring #else Lisp_Object UNUSED (stuffstring) @@ -990,7 +998,7 @@ ) { /* stuff_char works only in BSD, versions 4.2 and up. */ -#if defined (BSD) +#if defined(BSD) && defined(HAVE_TTY) if (!CONSOLEP (Vcontrolling_terminal) || !CONSOLE_LIVE_P (XCONSOLE (Vcontrolling_terminal))) return; @@ -1016,7 +1024,7 @@ stuff_char (XCONSOLE (Vcontrolling_terminal), *kbd_fetch_ptr++); } # endif -#endif /* BSD */ +#endif /* BSD && HAVE_TTY */ } DEFUN ("suspend-console", Fsuspend_console, 0, 1, "", /* @@ -1189,6 +1197,12 @@ syms_of_console (void) { INIT_LRECORD_IMPLEMENTATION (console); +#ifdef NEW_GC +#ifdef HAVE_TTY + INIT_LRECORD_IMPLEMENTATION (tty_console); +#endif + INIT_LRECORD_IMPLEMENTATION (stream_console); +#endif /* not NEW_GC */ DEFSUBR (Fvalid_console_type_p); DEFSUBR (Fconsole_type_list); diff -urN 21.5.23/src/database.c 21.5.24/src/database.c --- 21.5.23/src/database.c Tue Oct 25 20:16:22 2005 +++ 21.5.24/src/database.c Wed Nov 16 16:22:46 2005 @@ -47,7 +47,7 @@ #ifdef HAVE_INTTYPES_H #define __BIT_TYPES_DEFINED__ #include -#if !defined(__FreeBSD__) && !defined(__NetBSD__) +#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__APPLE__) typedef uint8_t u_int8_t; typedef uint16_t u_int16_t; typedef uint32_t u_int32_t; diff -urN 21.5.23/src/depend 21.5.24/src/depend --- 21.5.23/src/depend Wed Oct 5 06:51:35 2005 +++ 21.5.24/src/depend Sat Nov 26 21:09:39 2005 @@ -11,7 +11,7 @@ LISP_H= #else CONFIG_H=config.h -LISP_H=lisp.h compiler.h config.h dumper.h general-slots.h lrecord.h mc-alloc.h number-gmp.h number-mp.h number.h symeval.h symsinit.h text.h $(LISP_UNION_H) +LISP_H=lisp.h compiler.h config.h dumper.h gc.h general-slots.h lisp.h lrecord.h mc-alloc.h number-gmp.h number-mp.h number.h symeval.h symsinit.h text.h vdb.h $(LISP_UNION_H) #endif #if defined(HAVE_MS_WINDOWS) @@ -48,7 +48,7 @@ gui-x.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h buffer.h bufslots.h casetab.h charset.h chartab.h conslots.h console-impl.h console-x-impl.h console-x.h console.h device-impl.h device.h devslots.h events.h frame.h glyphs.h gui.h menubar.h opaque.h redisplay.h scrollbar.h specifier.h systime.h window-impl.h window.h winslots.h xintrinsic.h xmotif.h intl-x.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h console-x.h console.h xintrinsic.h menubar-x.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h EmacsFrame.h buffer.h bufslots.h casetab.h charset.h chartab.h commands.h conslots.h console-impl.h console-x-impl.h console-x.h console.h device-impl.h device.h devslots.h events.h frame-impl.h frame.h frameslots.h gui.h keymap.h menubar.h opaque.h redisplay.h scrollbar.h systime.h window-impl.h window.h winslots.h xintrinsic.h -objects-x.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h charset.h conslots.h console-impl.h console-x-impl.h console-x.h console.h device-impl.h device.h devslots.h insdel.h objects-impl.h objects-x-impl.h objects-x.h objects.h specifier.h xintrinsic.h +objects-x.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h charset.h conslots.h console-impl.h console-x-impl.h console-x.h console.h device-impl.h device.h devslots.h insdel.h objects-impl.h objects-x-impl.h objects-x.h objects.h specifier.h xft-fonts.h xintrinsic.h redisplay-x.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h EmacsFrame.h EmacsFrameP.h buffer.h bufslots.h casetab.h charset.h chartab.h coding-system-slots.h conslots.h console-impl.h console-x-impl.h console-x.h console.h debug.h device-impl.h device.h devslots.h faces.h file-coding.h frame-impl.h frame.h frameslots.h glyphs-x.h glyphs.h gutter.h mule-ccl.h objects-impl.h objects-x-impl.h objects-x.h objects.h redisplay.h scrollbar.h specifier.h sysdep.h sysproc.h syssignal.h systime.h window-impl.h window.h winslots.h xgccache.h xintrinsic.h xintrinsicp.h xmotif.h xmprimitivep.h scrollbar-x.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h EmacsFrame.h conslots.h console-impl.h console-x-impl.h console-x.h console.h device-impl.h device.h devslots.h frame-impl.h frame.h frameslots.h glyphs-x.h glyphs.h redisplay.h scrollbar-x.h scrollbar.h specifier.h window-impl.h window.h winslots.h xintrinsic.h select-x.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h charset.h conslots.h console-impl.h console-x-impl.h console-x.h console.h device-impl.h device.h devslots.h frame-impl.h frame.h frameslots.h objects-x.h objects.h opaque.h redisplay.h select-common.h select.h systime.h xintrinsic.h xmotif.h @@ -152,6 +152,7 @@ font-lock.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h insdel.h syntax.h frame.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h conslots.h console-impl.h console.h device-impl.h device.h devslots.h events.h extents.h faces.h frame-impl.h frame.h frameslots.h glyphs.h gui.h gutter.h menubar.h process.h redisplay.h scrollbar.h specifier.h systime.h toolbar.h window-impl.h window.h winslots.h free-hook.o: $(LISP_H) hash.h +gc.o: $(LISP_H) backtrace.h buffer.h bufslots.h bytecode.h casetab.h charset.h chartab.h coding-system-slots.h conslots.h console-impl.h console-stream.h console.h device.h elhash.h events.h extents-impl.h extents.h file-coding.h frame-impl.h frame.h frameslots.h glyphs.h lstream.h opaque.h process.h profile.h redisplay.h scrollbar.h specifier.h sysdep.h sysfile.h systime.h window-impl.h window.h winslots.h general.o: $(LISP_H) general-slots.h getloadavg.o: $(LISP_H) sysfile.h syssignal.h gif_io.o: $(LISP_H) gifrlib.h sysfile.h @@ -168,7 +169,7 @@ hpplay.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h sound.h imgproc.o: $(LISP_H) imgproc.h indent.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h console.h device.h extents.h faces.h frame.h glyphs.h insdel.h redisplay.h scrollbar.h specifier.h window-impl.h window.h winslots.h -inline.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h buffer.h bufslots.h bytecode.h casetab.h charset.h chartab.h coding-system-slots.h conslots.h console-gtk.h console-impl.h console-msw.h console.h database.h device-impl.h device.h devslots.h elhash.h events.h extents-impl.h extents.h faces.h file-coding.h frame-impl.h frame.h frameslots.h glyphs-x.h glyphs.h gui.h intl-auto-encap-win32.h keymap.h lstream.h objects-impl.h objects.h opaque.h process.h rangetab.h redisplay.h scrollbar.h specifier.h syntax.h sysdll.h sysfile.h systime.h syswindows.h toolbar.h tooltalk.h ui-gtk.h window-impl.h window.h winslots.h xintrinsic.h +inline.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h buffer.h bufslots.h bytecode.h casetab.h charset.h chartab.h coding-system-slots.h conslots.h console-gtk.h console-impl.h console-msw.h console.h database.h device-impl.h device.h devslots.h elhash.h events.h extents-impl.h extents.h faces.h file-coding.h frame-impl.h frame.h frameslots.h glyphs-x.h glyphs.h gui.h intl-auto-encap-win32.h keymap.h lstream.h objects-impl.h objects.h opaque.h process.h rangetab.h redisplay.h scrollbar.h specifier.h syntax.h sysdll.h sysfile.h systime.h syswindows.h toolbar.h tooltalk.h ui-gtk.h window-impl.h window.h winslots.h xft-fonts.h xintrinsic.h input-method-motif.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h EmacsFrame.h conslots.h console-impl.h console-x-impl.h console-x.h console.h device.h frame-impl.h frame.h frameslots.h redisplay.h xintrinsic.h xmotif.h input-method-xlib.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h EmacsFrame.h buffer.h bufslots.h casetab.h charset.h chartab.h conslots.h console-impl.h console-x-impl.h console-x.h console.h device-impl.h device.h devslots.h events.h frame-impl.h frame.h frameslots.h redisplay.h scrollbar.h systime.h window-impl.h window.h winslots.h xintrinsic.h insdel.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h console.h device.h extents.h frame.h insdel.h line-number.h lstream.h redisplay.h @@ -187,7 +188,7 @@ macros.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h commands.h conslots.h console-impl.h console.h device.h events.h frame.h keymap.h macros.h redisplay.h scrollbar.h systime.h window.h malloc.o: $(CONFIG_H) getpagesize.h syssignal.h marker.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h -mc-alloc.o: $(LISP_H) +mc-alloc.o: $(LISP_H) blocktype.h getpagesize.h md5.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h coding-system-slots.h file-coding.h lstream.h menubar.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h conslots.h console-impl.h console.h device-impl.h device.h devslots.h frame-impl.h frame.h frameslots.h gui.h keymap.h menubar.h redisplay.h scrollbar.h specifier.h window-impl.h window.h winslots.h minibuf.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h commands.h conslots.h console-impl.h console-stream.h console.h events.h frame-impl.h frame.h frameslots.h insdel.h redisplay.h scrollbar.h systime.h window-impl.h window.h winslots.h @@ -261,8 +262,14 @@ unexsol2.o: compiler.h unexsunos4.o: $(CONFIG_H) compiler.h unicode.o: $(LISP_H) charset.h coding-system-slots.h file-coding.h opaque.h sysfile.h +vdb-fake.o: $(LISP_H) +vdb-mach.o: $(LISP_H) +vdb-posix.o: $(LISP_H) +vdb-win32.o: $(LISP_H) intl-auto-encap-win32.h syswindows.h +vdb.o: $(LISP_H) vm-limit.o: $(LISP_H) mem-limits.h widget.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h win32.o: $(LISP_H) backtrace.h buffer.h bufslots.h casetab.h charset.h chartab.h console-msw.h console.h hash.h intl-auto-encap-win32.h profile.h sysfile.h sysproc.h syssignal.h systime.h syswindows.h window.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h commands.h conslots.h console-impl.h console.h device-impl.h device.h devslots.h elhash.h faces.h frame-impl.h frame.h frameslots.h glyphs.h gutter.h objects.h redisplay.h scrollbar.h specifier.h window-impl.h window.h winslots.h +xft-fonts.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h conslots.h console-impl.h console-x-impl.h console-x.h console.h device-impl.h device.h devslots.h hash.h objects-impl.h objects-x-impl.h objects-x.h objects.h specifier.h xft-fonts.h xintrinsic.h xmu.o: $(CONFIG_H) diff -urN 21.5.23/src/device-gtk.c 21.5.24/src/device-gtk.c --- 21.5.23/src/device-gtk.c Mon Jun 27 03:05:03 2005 +++ 21.5.24/src/device-gtk.c Fri Nov 25 10:41:58 2005 @@ -75,11 +75,19 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("gtk-device", gtk_device, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + gtk_device_data_description_1, + Lisp_Gtk_Device); +#else /* not NEW_GC */ extern const struct sized_memory_description gtk_device_data_description; const struct sized_memory_description gtk_device_data_description = { sizeof (struct gtk_device), gtk_device_data_description_1 }; +#endif /* not NEW_GC */ /************************************************************************/ @@ -108,7 +116,11 @@ static void allocate_gtk_device_struct (struct device *d) { +#ifdef NEW_GC + d->device_data = alloc_lrecord_type (struct gtk_device, &lrecord_gtk_device); +#else /* not NEW_GC */ d->device_data = xnew_and_zero (struct gtk_device); +#endif /* not NEW_GC */ DEVICE_GTK_DATA (d)->x_keysym_map_hashtable = Qnil; } @@ -350,7 +362,11 @@ static void free_gtk_device_struct (struct device *d) { +#ifdef NEW_GC + mc_free (d->device_data); +#else /* not NEW_GC */ xfree (d->device_data, void *); +#endif /* not NEW_GC */ } static void @@ -681,6 +697,10 @@ void syms_of_device_gtk (void) { +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (gtk_device); +#endif /* NEW_GC */ + DEFSUBR (Fgtk_keysym_on_keyboard_p); DEFSUBR (Fgtk_display_visual_class); DEFSUBR (Fgtk_display_visual_depth); diff -urN 21.5.23/src/device-msw.c 21.5.24/src/device-msw.c --- 21.5.23/src/device-msw.c Tue Oct 25 20:16:22 2005 +++ 21.5.24/src/device-msw.c Fri Nov 25 10:41:58 2005 @@ -73,11 +73,19 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("mswindows-device", mswindows_device, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + mswindows_device_data_description_1, + Lisp_Mswindows_Device); +#else /* not NEW_GC */ extern const struct sized_memory_description mswindows_device_data_description; const struct sized_memory_description mswindows_device_data_description = { sizeof (struct mswindows_device), mswindows_device_data_description_1 }; +#endif /* not NEW_GC */ static const struct memory_description msprinter_device_data_description_1 [] = { { XD_LISP_OBJECT, offsetof (struct msprinter_device, name) }, @@ -86,11 +94,19 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("msprinter-device", msprinter_device, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + msprinter_device_data_description_1, + Lisp_Msprinter_Device); +#else /* not NEW_GC */ extern const struct sized_memory_description msprinter_device_data_description; const struct sized_memory_description msprinter_device_data_description = { sizeof (struct msprinter_device), msprinter_device_data_description_1 }; +#endif /* not NEW_GC */ static Lisp_Object allocate_devmode (DEVMODEW *src_devmode, int do_copy, Lisp_Object src_name, struct device *d); @@ -146,7 +162,12 @@ init_baud_rate (d); init_one_device (d); +#ifdef NEW_GC + d->device_data = alloc_lrecord_type (struct mswindows_device, + &lrecord_mswindows_device); +#else /* not NEW_GC */ d->device_data = xnew_and_zero (struct mswindows_device); +#endif /* not NEW_GC */ hdc = CreateCompatibleDC (NULL); assert (hdc != NULL); DEVICE_MSWINDOWS_HCDC (d) = hdc; @@ -279,7 +300,11 @@ #endif DeleteDC (DEVICE_MSWINDOWS_HCDC (d)); +#ifdef NEW_GC + mc_free (d->device_data); +#else /* not NEW_GC */ xfree (d->device_data, void *); +#endif /* not NEW_GC */ } void @@ -495,7 +520,12 @@ LONG dm_size; Extbyte *printer_name; +#ifdef NEW_GC + d->device_data = alloc_lrecord_type (struct msprinter_device, + &lrecord_msprinter_device); +#else /* not NEW_GC */ d->device_data = xnew_and_zero (struct msprinter_device); +#endif /* not NEW_GC */ DEVICE_INFD (d) = DEVICE_OUTFD (d) = -1; DEVICE_MSPRINTER_DEVMODE (d) = Qnil; @@ -546,7 +576,11 @@ DEVICE_MSPRINTER_DEVMODE (d) = Qnil; } +#ifdef NEW_GC + mc_free (d->device_data); +#else /* not NEW_GC */ xfree (d->device_data, void *); +#endif /* not NEW_GC */ } } @@ -1344,6 +1378,11 @@ syms_of_device_mswindows (void) { INIT_LRECORD_IMPLEMENTATION (devmode); + +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (mswindows_device); + INIT_LRECORD_IMPLEMENTATION (msprinter_device); +#endif /* NEW_GC */ DEFSUBR (Fmsprinter_get_settings); DEFSUBR (Fmsprinter_select_settings); diff -urN 21.5.23/src/device-tty.c 21.5.24/src/device-tty.c --- 21.5.23/src/device-tty.c Tue Jan 25 08:33:49 2005 +++ 21.5.24/src/device-tty.c Fri Nov 25 10:41:59 2005 @@ -44,10 +44,26 @@ Lisp_Object Qinit_pre_tty_win, Qinit_post_tty_win; +#ifdef NEW_GC +static const struct memory_description tty_device_data_description_1 [] = { + { XD_END } +}; + +DEFINE_LRECORD_IMPLEMENTATION ("tty-device", tty_device, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + tty_device_data_description_1, + Lisp_Tty_Device); +#endif /* NEW_GC */ + static void allocate_tty_device_struct (struct device *d) { +#ifdef NEW_GC + d->device_data = alloc_lrecord_type (struct tty_device, &lrecord_tty_device); +#else /* not NEW_GC */ d->device_data = xnew_and_zero (struct tty_device); +#endif /* not NEW_GC */ } static void @@ -97,6 +113,7 @@ call0 (Qinit_pre_tty_win); } +#ifndef NEW_GC static void free_tty_device_struct (struct device *d) { @@ -109,6 +126,7 @@ { free_tty_device_struct (d); } +#endif /* not NEW_GC */ #ifdef SIGWINCH @@ -189,6 +207,10 @@ void syms_of_device_tty (void) { +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (tty_device); +#endif /* NEW_GC */ + DEFSYMBOL (Qinit_pre_tty_win); DEFSYMBOL (Qinit_post_tty_win); } @@ -198,7 +220,9 @@ { /* device methods */ CONSOLE_HAS_METHOD (tty, init_device); +#ifndef NEW_GC CONSOLE_HAS_METHOD (tty, delete_device); +#endif /* not NEW_GC */ #ifdef SIGWINCH CONSOLE_HAS_METHOD (tty, asynch_device_change); #endif /* SIGWINCH */ diff -urN 21.5.23/src/device-x.c 21.5.24/src/device-x.c --- 21.5.23/src/device-x.c Tue Oct 25 20:16:22 2005 +++ 21.5.24/src/device-x.c Fri Nov 25 10:41:59 2005 @@ -109,11 +109,19 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("x-device", x_device, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + x_device_data_description_1, + Lisp_X_Device); +#else /* not NEW_GC */ extern const struct sized_memory_description x_device_data_description; const struct sized_memory_description x_device_data_description = { sizeof (struct x_device), x_device_data_description_1 }; +#endif /* not NEW_GC */ /* Functions to synchronize mirroring resources and specifiers */ int in_resource_setting; @@ -202,7 +210,11 @@ static void allocate_x_device_struct (struct device *d) { +#ifdef NEW_GC + d->device_data = alloc_lrecord_type (struct x_device, &lrecord_x_device); +#else /* not NEW_GC */ d->device_data = xnew_and_zero (struct x_device); +#endif /* not NEW_GC */ } static void @@ -885,7 +897,11 @@ static void free_x_device_struct (struct device *d) { +#ifdef NEW_GC + mc_free (d->device_data); +#else /* not NEW_GC */ xfree (d->device_data, void *); +#endif /* not NEW_GC */ } static void @@ -2037,6 +2053,10 @@ void syms_of_device_x (void) { +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (x_device); +#endif /* NEW_GC */ + DEFSUBR (Fx_debug_mode); DEFSUBR (Fx_get_resource); DEFSUBR (Fx_get_resource_prefix); diff -urN 21.5.23/src/device.c 21.5.24/src/device.c --- 21.5.23/src/device.c Tue Oct 25 20:16:22 2005 +++ 21.5.24/src/device.c Fri Nov 25 10:41:59 2005 @@ -86,12 +86,26 @@ +#ifndef NEW_GC extern const struct sized_memory_description gtk_device_data_description; extern const struct sized_memory_description mswindows_device_data_description; extern const struct sized_memory_description msprinter_device_data_description; extern const struct sized_memory_description x_device_data_description; +#endif /* not NEW_GC */ static const struct memory_description device_data_description_1 []= { +#ifdef NEW_GC +#ifdef HAVE_GTK + { XD_LISP_OBJECT, gtk_console }, +#endif +#ifdef HAVE_MS_WINDOWS + { XD_LISP_OBJECT, mswindows_console }, + { XD_LISP_OBJECT, msprinter_console }, +#endif +#ifdef HAVE_X_WINDOWS + { XD_LISP_OBJECT, x_console }, +#endif +#else /* not NEW_GC */ #ifdef HAVE_GTK { XD_BLOCK_PTR, gtk_console, 1, { >k_device_data_description} }, #endif @@ -102,6 +116,7 @@ #ifdef HAVE_X_WINDOWS { XD_BLOCK_PTR, x_console, 1, { &x_device_data_description} }, #endif +#endif /* not NEW_GC */ { XD_END } }; diff -urN 21.5.23/src/dumper.c 21.5.24/src/dumper.c --- 21.5.23/src/dumper.c Fri Oct 14 10:22:00 2005 +++ 21.5.24/src/dumper.c Tue Nov 29 00:44:06 2005 @@ -686,6 +686,12 @@ } static void pdump_register_object (Lisp_Object obj); +#ifdef NEW_GC +static void pdump_register_object_array (Lisp_Object data, + Bytecount size, + const struct memory_description *desc, + int count); +#endif /* NEW_GC */ static void pdump_register_block_contents (const void *data, Bytecount size, const struct memory_description * @@ -781,6 +787,20 @@ } break; } +#ifdef NEW_GC + case XD_LISP_OBJECT_BLOCK_PTR: + { + EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc, + data); + const struct sized_memory_description *sdesc = + lispdesc_indirect_description (data, desc1->data2.descr); + const Lisp_Object *pobj = (const Lisp_Object *) rdata; + if (pobj) + pdump_register_object_array + (*pobj, sdesc->size, sdesc->description, count); + break; + } +#endif /* NEW_GC */ case XD_BLOCK_PTR: { EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc, @@ -876,6 +896,47 @@ } } +#ifdef NEW_GC +static void +pdump_register_object_array (Lisp_Object obj, + Bytecount size, + const struct memory_description *desc, + int count) +{ + struct lrecord_header *objh; + const struct lrecord_implementation *imp; + + if (!POINTER_TYPE_P (XTYPE (obj))) + return; + + objh = XRECORD_LHEADER (obj); + if (!objh) + return; + + if (pdump_get_block (objh)) + return; + + imp = LHEADER_IMPLEMENTATION (objh); + + if (imp->description + && RECORD_DUMPABLE (objh)) + { + pdump_bump_depth (); + backtrace[pdump_depth - 1].obj = objh; + pdump_add_block (pdump_object_table + objh->type, + objh, lispdesc_block_size_1 (objh, size, desc), count); + pdump_register_block_contents (objh, size, desc, count); + --pdump_depth; + } + else + { + pdump_alert_undump_object[objh->type]++; + stderr_out ("Undumpable object type : %s\n", imp->name); + pdump_backtrace (); + } +} +#endif /* NEW_GC */ + /* Register the referenced objects in the array of COUNT blocks located at DATA; each block is described by SIZE and DESC. "Block" here simply means any block of memory. @@ -994,6 +1055,9 @@ * (int *) rdata = val; break; } +#ifdef NEW_GC + case XD_LISP_OBJECT_BLOCK_PTR: +#endif /* NEW_GC */ case XD_OPAQUE_DATA_PTR: case XD_ASCII_STRING: case XD_BLOCK_PTR: @@ -1173,7 +1237,9 @@ if (pdump_object_table[i].align == align) for (elt = pdump_object_table[i].first; elt; elt = elt->next) { +#ifndef NEW_GC assert (elt->count == 1); +#endif /* not NEW_GC */ f (elt, lrecord_implementations_table[i]->description); } } @@ -1234,6 +1300,9 @@ case XD_LONG: case XD_INT_RESET: break; +#ifdef NEW_GC + case XD_LISP_OBJECT_BLOCK_PTR: +#endif /* NEW_GC */ case XD_OPAQUE_DATA_PTR: case XD_ASCII_STRING: case XD_BLOCK_PTR: @@ -1252,7 +1321,7 @@ if (POINTER_TYPE_P (XTYPE (*pobj)) && ! EQ (*pobj, Qnull_pointer)) - *pobj = wrap_pointer_1 ((char *) pdump_get_mc_addr + *pobj = wrap_pointer_1 ((Rawbyte *) pdump_get_mc_addr (XPNTR (*pobj))); break; } @@ -1268,7 +1337,7 @@ if (POINTER_TYPE_P (XTYPE (*pobj)) && ! EQ (*pobj, Qnull_pointer)) - *pobj = wrap_pointer_1 ((char *) pdump_get_mc_addr + *pobj = wrap_pointer_1 ((Rawbyte *) pdump_get_mc_addr (XPNTR (*pobj))); } break; @@ -1603,11 +1672,6 @@ retry_fwrite (data, sizeof (pdump_cv_data_dump_info), count, pdump_out); } -/* Dump out the root block pointers, part of stage 3 (the "WRITE" stage) of - dumping. For each pointer we dump out a structure containing the - location of the pointer and its value, replaced by the appropriate - offset into the dumped data. */ - static void pdump_dump_cv_ptr_info (void) { @@ -1624,6 +1688,11 @@ retry_fwrite (data, sizeof (pdump_cv_ptr_dump_info), count, pdump_out); } +/* Dump out the root block pointers, part of stage 3 (the "WRITE" stage) of + dumping. For each pointer we dump out a structure containing the + location of the pointer and its value, replaced by the appropriate + offset into the dumped data. */ + static void pdump_dump_root_block_ptrs (void) { @@ -1687,7 +1756,16 @@ while (elt) { EMACS_INT rdata = pdump_get_block (elt->obj)->save_offset; +#ifdef NEW_GC + int j; + for (j=0; jcount; j++) + { + PDUMP_WRITE_ALIGNED (EMACS_INT, rdata); + rdata += elt->size; + } +#else /* not NEW_GC */ PDUMP_WRITE_ALIGNED (EMACS_INT, rdata); +#endif /* not NEW_GC */ elt = elt->next; } } @@ -2136,6 +2214,14 @@ EMACS_INT count; pdump_header *header = (pdump_header *) pdump_start; +#ifdef NEW_GC + /* This is a DEFVAR_BOOL and gets dumped, but the actual value was + already determined by vdb_install_signal_handler () in + vdb-mprotect.c, which could be different from the value in the + dump file. So store it here and restore it after loading the dump + file. */ + int allow_inc_gc = allow_incremental_gc; +#endif /* NEW_GC */ pdump_end = pdump_start + pdump_length; delta = ((EMACS_INT) pdump_start) - header->reloc_address; @@ -2163,16 +2249,16 @@ Bytecount real_size = size * elt_count; if (count == 2) { - mc_addr = (Rawbyte *) mc_alloc (real_size); + if (elt_count <= 1) + mc_addr = (Rawbyte *) mc_alloc (real_size); +#ifdef NEW_GC + else + mc_addr = (Rawbyte *) mc_alloc_array (size, elt_count); +#endif /* NEW_GC */ #ifdef ALLOC_TYPE_STATS inc_lrecord_stats (real_size, (const struct lrecord_header *) - ((char *) rdata + delta)); - if (((const struct lrecord_header *) - ((char *) rdata + delta))->type - == lrecord_type_string) - inc_lrecord_string_data_stats - (((Lisp_String *) ((char *) rdata + delta))->size_); + ((Rawbyte *) rdata + delta)); #endif /* ALLOC_TYPE_STATS */ } else @@ -2182,7 +2268,7 @@ mc_addr += size; pdump_put_mc_addr ((void *) rdata, (EMACS_INT) mc_addr); - memcpy (mc_addr, (char *) rdata + delta, size); + memcpy (mc_addr, (Rawbyte *) rdata + delta, size); } } else if (!(--count)) @@ -2217,13 +2303,13 @@ p = (Rawbyte *) ALIGN_PTR (p, Rawbyte *); if (rt.desc) { - char **reloc = (char **) p; + Rawbyte **reloc = (Rawbyte **) p; for (i = 0; i < rt.count; i++) { - reloc[i] = (char *) pdump_get_mc_addr (reloc[i]); + reloc[i] = (Rawbyte *) pdump_get_mc_addr (reloc[i]); pdump_reloc_one_mc (reloc[i], rt.desc); } - p += rt.count * sizeof (char *); + p += rt.count * sizeof (Rawbyte *); } else if (!(--count)) break; @@ -2319,6 +2405,10 @@ #ifdef MC_ALLOC xfree (pdump_mc_hash, mc_addr_elt *); #endif /* MC_ALLOC */ + +#ifdef NEW_GC + allow_incremental_gc = allow_inc_gc; +#endif /* NEW_GC */ return 1; } diff -urN 21.5.23/src/dynarr.c 21.5.24/src/dynarr.c --- 21.5.23/src/dynarr.c Tue Jan 25 08:33:50 2005 +++ 21.5.24/src/dynarr.c Fri Nov 25 10:41:59 2005 @@ -150,6 +150,39 @@ return d; } +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("dynarr", dynarr, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + 0, + Dynarr); + +static void +Dynarr_lisp_realloc (Dynarr *dy, Elemcount new_size) +{ + void *new_base = alloc_lrecord_array (dy->elsize, new_size, dy->lisp_imp); + void *old_base = dy->base; + if (dy->base) + memcpy (new_base, dy->base, + (dy->max > new_size ? dy->max : new_size) * dy->elsize); + dy->base = new_base; + if (old_base) + mc_free (old_base); +} + +void * +Dynarr_lisp_newf (int elsize, + const struct lrecord_implementation *dynarr_imp, + const struct lrecord_implementation *imp) +{ + Dynarr *d = (Dynarr *) alloc_lrecord (sizeof (Dynarr), dynarr_imp); + d->elsize = elsize; + d->lisp_imp = imp; + + return d; +} +#endif /* not NEW_GC */ + void Dynarr_resize (void *d, Elemcount size) { @@ -168,7 +201,14 @@ /* Don't do anything if the array is already big enough. */ if (newsize > dy->max) { +#ifdef NEW_GC + if (dy->lisp_imp) + Dynarr_lisp_realloc (dy, newsize); + else + Dynarr_realloc (dy, newsize*dy->elsize); +#else /* not NEW_GC */ Dynarr_realloc (dy, newsize*dy->elsize); +#endif /* not NEW_GC */ dy->max = newsize; } } @@ -222,10 +262,27 @@ { Dynarr *dy = (Dynarr *) d; +#ifdef NEW_GC + if (dy->base && !DUMPEDP (dy->base)) + { + if (dy->lisp_imp) + mc_free (dy->base); + else + xfree (dy->base, void *); + } + if(!DUMPEDP (dy)) + { + if (dy->lisp_imp) + mc_free (dy); + else + xfree (dy, Dynarr *); + } +#else /* not NEW_GC */ if (dy->base && !DUMPEDP (dy->base)) xfree (dy->base, void *); if(!DUMPEDP (dy)) xfree (dy, Dynarr *); +#endif /* not NEW_GC */ } #ifdef MEMORY_USAGE_STATS diff -urN 21.5.23/src/elhash.c 21.5.24/src/elhash.c --- 21.5.23/src/elhash.c Mon Oct 24 19:07:35 2005 +++ 21.5.24/src/elhash.c Fri Nov 25 10:42:00 2005 @@ -96,6 +96,9 @@ typedef struct htentry { +#ifdef NEW_GC + struct lrecord_header lheader; +#endif /* NEW_GC */ Lisp_Object key; Lisp_Object value; } htentry; @@ -406,7 +409,12 @@ } static void -free_hentries (htentry *hentries, +free_hentries ( +#if defined (NEW_GC) && !defined (ERROR_CHECK_STRUCTURES) + htentry *UNUSED (hentries), +#else + htentry *hentries, +#endif #ifdef ERROR_CHECK_STRUCTURES size_t size #else @@ -414,6 +422,14 @@ #endif ) { +#ifdef NEW_GC +#ifdef ERROR_CHECK_STRUCTURES + htentry *e, *sentinel; + + for (e = hentries, sentinel = e + size; e < sentinel; e++) + mc_free (e); +#endif +#else /* not NEW_GC */ #ifdef ERROR_CHECK_STRUCTURES /* Ensure a crash if other code uses the discarded entries afterwards. */ htentry *e, *sentinel; @@ -424,6 +440,7 @@ if (!DUMPEDP (hentries)) xfree (hentries, htentry *); +#endif /* not NEW_GC */ } static void @@ -448,13 +465,39 @@ htentry_description_1 }; +#ifdef NEW_GC +static const struct memory_description htentry_weak_description_1[] = { + { XD_LISP_OBJECT, offsetof (htentry, key), 0, { 0 }, XD_FLAG_NO_KKCC}, + { XD_LISP_OBJECT, offsetof (htentry, value), 0, { 0 }, XD_FLAG_NO_KKCC}, + { XD_END } +}; + +static const struct sized_memory_description htentry_weak_description = { + sizeof (htentry), + htentry_weak_description_1 +}; + +DEFINE_LRECORD_IMPLEMENTATION ("hash-table-entry", hash_table_entry, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + htentry_description_1, + Lisp_Hash_Table_Entry); +#endif /* NEW_GC */ + static const struct memory_description htentry_union_description_1[] = { /* Note: XD_INDIRECT in this table refers to the surrounding table, and so this will work. */ +#ifdef NEW_GC + { XD_LISP_OBJECT_BLOCK_PTR, HASH_TABLE_NON_WEAK, + XD_INDIRECT (0, 1), { &htentry_description } }, + { XD_LISP_OBJECT_BLOCK_PTR, 0, XD_INDIRECT (0, 1), + { &htentry_weak_description }, XD_FLAG_UNION_DEFAULT_ENTRY }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, HASH_TABLE_NON_WEAK, XD_INDIRECT (0, 1), { &htentry_description } }, { XD_BLOCK_PTR, 0, XD_INDIRECT (0, 1), { &htentry_description }, XD_FLAG_UNION_DEFAULT_ENTRY | XD_FLAG_NO_KKCC }, +#endif /* not NEW_GC */ { XD_END } }; @@ -572,7 +615,13 @@ compute_hash_table_derived_values (ht); /* We leave room for one never-occupied sentinel htentry at the end. */ +#ifdef NEW_GC + ht->hentries = (htentry *) alloc_lrecord_array (sizeof (htentry), + ht->size + 1, + &lrecord_hash_table_entry); +#else /* not NEW_GC */ ht->hentries = xnew_array_and_zero (htentry, ht->size + 1); +#endif /* not NEW_GC */ hash_table = wrap_hash_table (ht); @@ -970,7 +1019,13 @@ Lisp_Hash_Table *ht = ALLOC_LCRECORD_TYPE (Lisp_Hash_Table, &lrecord_hash_table); COPY_LCRECORD (ht, ht_old); +#ifdef NEW_GC + ht->hentries = (htentry *) alloc_lrecord_array (sizeof (htentry), + ht_old->size + 1, + &lrecord_hash_table_entry); +#else /* not NEW_GC */ ht->hentries = xnew_array (htentry, ht_old->size + 1); +#endif /* not NEW_GC */ memcpy (ht->hentries, ht_old->hentries, (ht_old->size + 1) * sizeof (htentry)); hash_table = wrap_hash_table (ht); @@ -995,7 +1050,13 @@ old_entries = ht->hentries; +#ifdef NEW_GC + ht->hentries = (htentry *) alloc_lrecord_array (sizeof (htentry), + new_size + 1, + &lrecord_hash_table_entry); +#else /* not NEW_GC */ ht->hentries = xnew_array_and_zero (htentry, new_size + 1); +#endif /* not NEW_GC */ new_entries = ht->hentries; compute_hash_table_derived_values (ht); @@ -1019,7 +1080,13 @@ pdump_reorganize_hash_table (Lisp_Object hash_table) { const Lisp_Hash_Table *ht = xhash_table (hash_table); +#ifdef NEW_GC + htentry *new_entries = + (htentry *) alloc_lrecord_array (sizeof (htentry), ht->size + 1, + &lrecord_hash_table_entry); +#else /* not NEW_GC */ htentry *new_entries = xnew_array_and_zero (htentry, ht->size + 1); +#endif /* not NEW_GC */ htentry *e, *sentinel; for (e = ht->hentries, sentinel = e + ht->size; e < sentinel; e++) @@ -1033,7 +1100,11 @@ memcpy (ht->hentries, new_entries, ht->size * sizeof (htentry)); +#ifdef NEW_GC + mc_free (new_entries); +#else /* not NEW_GC */ xfree (new_entries, htentry *); +#endif /* not NEW_GC */ } static void @@ -1761,6 +1832,9 @@ init_elhash_once_early (void) { INIT_LRECORD_IMPLEMENTATION (hash_table); +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (hash_table_entry); +#endif /* NEW_GC */ /* This must NOT be staticpro'd */ Vall_weak_hash_tables = Qnil; diff -urN 21.5.23/src/elhash.h 21.5.24/src/elhash.h --- 21.5.23/src/elhash.h Wed Jan 26 19:22:25 2005 +++ 21.5.24/src/elhash.h Fri Nov 25 10:42:00 2005 @@ -33,6 +33,19 @@ #define CHECK_HASH_TABLE(x) CHECK_RECORD (x, hash_table) #define CONCHECK_HASH_TABLE(x) CONCHECK_RECORD (x, hash_table) +#ifdef NEW_GC +typedef struct htentry Lisp_Hash_Table_Entry; + +DECLARE_LRECORD (hash_table_entry, Lisp_Hash_Table_Entry); + +#define XHASH_TABLE_ENTRY(x) \ + XRECORD (x, hash_table_entry, Lisp_Hash_Table_Entry) +#define wrap_hash_table_entry(p) wrap_record (p, hash_table_entry) +#define HASH_TABLE_ENTRYP(x) RECORDP (x, hash_table_entry) +#define CHECK_HASH_TABLE_ENTRY(x) CHECK_RECORD (x, hash_table_entry) +#define CONCHECK_HASH_TABLE_ENTRY(x) CONCHECK_RECORD (x, hash_table_entry) +#endif /* NEW_GC */ + enum hash_table_weakness { HASH_TABLE_NON_WEAK, diff -urN 21.5.23/src/emacs.c 21.5.24/src/emacs.c --- 21.5.23/src/emacs.c Tue Oct 25 17:32:47 2005 +++ 21.5.24/src/emacs.c Sat Nov 26 20:46:07 2005 @@ -1021,7 +1021,10 @@ if (argmatch (argv, argc, "-si", "--show-inline-info", 0, NULL, &skip_args)) { #if defined (PDUMP) && defined (DUMP_IN_EXEC) && !defined (WIN32_NATIVE) - printf ("%u %u\n", dumped_data_max_size (), dumped_data_align_offset ()); + /* #### We really should check for sizeof (size_t) > sizeof (long) */ + printf ("%lu %lu\n", (unsigned long) dumped_data_max_size (), + (unsigned long) dumped_data_align_offset ()); + #else printf ("Portable dumper not configured for dumping into executable or windows native; -si just forces exit.\n"); #endif @@ -1312,6 +1315,9 @@ the Lisp engine and need to be done both at dump time and at run time. */ init_signals_very_early (); +#ifdef NEW_GC + vdb_install_signal_handler (); +#endif init_data_very_early (); /* Catch math errors. */ init_floatfns_very_early (); /* Catch floating-point math errors. */ init_process_times_very_early (); /* Initialize our process timers. @@ -1397,6 +1403,8 @@ init_alloc_early (); + init_gc_early (); + if (!initialized) { /* Initialize things so that new Lisp objects @@ -1406,6 +1414,8 @@ routines below create new objects. */ init_alloc_once_early (); + init_gc_once_early (); + /* Initialize Qnil, Qt, Qunbound, and the obarray. After this, symbols can be interned. This depends on init_alloc_once_early(). */ @@ -1444,6 +1454,10 @@ #ifdef MC_ALLOC syms_of_mc_alloc (); #endif /* MC_ALLOC */ + syms_of_gc (); +#ifdef NEW_GC + syms_of_vdb (); +#endif /* NEW_GC */ syms_of_buffer (); syms_of_bytecode (); syms_of_callint (); @@ -1601,6 +1615,11 @@ syms_of_input_method_xlib (); #endif #endif /* HAVE_XIM */ + +#ifdef USE_XFT + syms_of_xft_fonts(); +#endif + #endif /* HAVE_X_WINDOWS */ #ifdef HAVE_MS_WINDOWS @@ -1850,6 +1869,7 @@ (note, we are inside ifdef PDUMP) */ { reinit_alloc_early (); + reinit_gc_early (); reinit_symbols_early (); #ifndef MC_ALLOC reinit_opaque_early (); @@ -2054,6 +2074,7 @@ vars_of_font_lock (); #endif /* USE_C_FONT_LOCK */ vars_of_frame (); + vars_of_gc (); vars_of_glyphs (); vars_of_glyphs_eimage (); vars_of_glyphs_widget (); @@ -2179,6 +2200,11 @@ #if defined (HAVE_MENUBARS) || defined (HAVE_SCROLLBARS) || defined (HAVE_X_DIALOGS) || defined (HAVE_TOOLBARS) vars_of_gui_x (); #endif + +#ifdef USE_XFT + vars_of_xft_fonts (); +#endif + #endif /* HAVE_X_WINDOWS */ @@ -2305,6 +2331,9 @@ #if defined (HAVE_MENUBARS) || defined (HAVE_SCROLLBARS) || defined (HAVE_X_DIALOGS) || defined (HAVE_TOOLBARS) reinit_vars_of_gui_x (); #endif +#ifdef USE_XFT + reinit_vars_of_xft_fonts (); +#endif #endif /* HAVE_X_WINDOWS */ #ifdef MULE @@ -2372,6 +2401,12 @@ quite soon, e.g. in complex_vars_of_glyphs_x(). */ inhibit_non_essential_conversion_operations = 0; +#ifdef USE_XFT + /* This uses coding systems. Must be done before faces are init'ed. */ + /* not in xft reloaded #3 */ + complex_vars_of_xft_fonts (); +#endif + /* Depends on specifiers. */ complex_vars_of_faces (); @@ -2394,9 +2429,6 @@ #endif /* This calls Fmake_glyph_internal(). */ - complex_vars_of_alloc (); - - /* This calls Fmake_glyph_internal(). */ #ifdef HAVE_MENUBARS complex_vars_of_menubar (); #endif @@ -2439,6 +2471,8 @@ might depend on all sorts of things; I'm not sure. */ complex_vars_of_emacs (); + complex_vars_of_gc (); + /* This creates a couple of basic keymaps and depends on Lisp hash tables and Ffset() (both of which depend on some variables initialized in the vars_of_*() section) and possibly other @@ -2449,7 +2483,11 @@ { extern int always_gc; if (always_gc) /* purification debugging hack */ +#ifdef NEW_GC + gc_full (); +#else /* not NEW_GC */ garbage_collect_1 (); +#endif /* not NEW_GC */ } #endif } @@ -2928,7 +2966,11 @@ { int i; +#ifdef NEW_GC + if (gc_in_progress) gc_full (); +#else /* not NEW_GC */ assert (!gc_in_progress); +#endif /* not NEW_GC */ if (run_temacs_argc < 0) invalid_operation ("I've lost my temacs-hood", Qunbound); @@ -3204,7 +3246,11 @@ memory_warnings (my_edata, malloc_warning); #endif +#ifdef NEW_GC + gc_full (); +#else /* not NEW_GC */ garbage_collect_1 (); +#endif /* not NEW_GC */ #ifdef PDUMP pdump (); @@ -3728,12 +3774,28 @@ guts_of_fatal_error_signal (sig); +#ifdef NEW_GC + /* This time the signal will really be fatal. To be able to debug + SIGSEGV and SIGBUS also during write barrier, send SIGABRT. */ +#ifdef WIN32_NATIVE + if (sig == SIGSEGV) + raise (SIGABRT); + else + raise (sig); +#else + if ((sig == SIGSEGV) || (sig == SIGBUS)) + kill (qxe_getpid (), SIGABRT); + else + kill (qxe_getpid (), sig); +#endif +#else /* not NEW_GC */ /* Signal the same code; this time it will really be fatal. */ #ifdef WIN32_NATIVE raise (sig); #else kill (qxe_getpid (), sig); #endif +#endif /* not NEW_GC */ SIGRETURN; } diff -urN 21.5.23/src/eval.c 21.5.24/src/eval.c --- 21.5.23/src/eval.c Tue Oct 25 20:16:23 2005 +++ 21.5.24/src/eval.c Fri Nov 25 10:42:00 2005 @@ -2238,7 +2238,9 @@ ABORT (); } +#ifndef NEW_GC assert (!gc_in_progress); +#endif /* not NEW_GC */ /* We abort if in_display and we are not protected, as garbage collections and non-local exits will invariably be fatal, but in @@ -3371,14 +3373,32 @@ int bindargs = min (nargs, max_non_rest_args); for (i = 0; i < bindargs; i++) +#ifdef NEW_GC + SPECBIND_FAST_UNSAFE (XCOMPILED_FUNCTION_ARGS_DATA (f->arguments)[i], + args[i]); +#else /* not NEW_GC */ SPECBIND_FAST_UNSAFE (f->args[i], args[i]); +#endif /* not NEW_GC */ for (i = bindargs; i < max_non_rest_args; i++) +#ifdef NEW_GC + SPECBIND_FAST_UNSAFE (XCOMPILED_FUNCTION_ARGS_DATA (f->arguments)[i], + Qnil); +#else /* not NEW_GC */ SPECBIND_FAST_UNSAFE (f->args[i], Qnil); +#endif /* not NEW_GC */ +#ifdef NEW_GC + SPECBIND_FAST_UNSAFE + (XCOMPILED_FUNCTION_ARGS_DATA (f->arguments)[max_non_rest_args], + nargs > max_non_rest_args ? + Flist (nargs - max_non_rest_args, &args[max_non_rest_args]) : + Qnil); +#else /* not NEW_GC */ SPECBIND_FAST_UNSAFE (f->args[max_non_rest_args], nargs > max_non_rest_args ? Flist (nargs - max_non_rest_args, &args[max_non_rest_args]) : Qnil); +#endif /* not NEW_GC */ } /* Apply compiled-function object FUN to the NARGS evaluated arguments @@ -3405,7 +3425,12 @@ { #if 1 for (i = 0; i < nargs; i++) +#ifdef NEW_GC + SPECBIND_FAST_UNSAFE (XCOMPILED_FUNCTION_ARGS_DATA (f->arguments)[i], + args[i]); +#else /* not NEW_GC */ SPECBIND_FAST_UNSAFE (f->args[i], args[i]); +#endif /* not NEW_GC */ #else /* Here's an alternate way to write the loop that tries to further optimize funcalls for functions with few arguments by partially @@ -3436,9 +3461,19 @@ else if (nargs < f->max_args) { for (i = 0; i < nargs; i++) +#ifdef NEW_GC + SPECBIND_FAST_UNSAFE (XCOMPILED_FUNCTION_ARGS_DATA (f->arguments)[i], + args[i]); +#else /* not NEW_GC */ SPECBIND_FAST_UNSAFE (f->args[i], args[i]); +#endif /* not NEW_GC */ for (i = nargs; i < f->max_args; i++) +#ifdef NEW_GC + SPECBIND_FAST_UNSAFE (XCOMPILED_FUNCTION_ARGS_DATA (f->arguments)[i], + Qnil); +#else /* not NEW_GC */ SPECBIND_FAST_UNSAFE (f->args[i], Qnil); +#endif /* not NEW_GC */ } else if (f->max_args == MANY) handle_compiled_function_with_and_rest (f, nargs, args); @@ -3527,7 +3562,11 @@ { struct gcpro gcpro1; GCPRO1 (form); +#ifdef NEW_GC + gc_incremental (); +#else /* not NEW_GC */ garbage_collect_1 (); +#endif /* not NEW_GC */ UNGCPRO; } @@ -3779,7 +3818,11 @@ { if (need_to_garbage_collect) /* Callers should gcpro lexpr args */ +#ifdef NEW_GC + gc_incremental (); +#else /* not NEW_GC */ garbage_collect_1 (); +#endif /* not NEW_GC */ if (need_to_check_c_alloca) { if (++funcall_alloca_count >= MAX_FUNCALLS_BETWEEN_ALLOCA_CLEANUP) @@ -4305,9 +4348,11 @@ /* We need to bail out of here pronto. */ return Qnil; +#ifndef NEW_GC /* Whenever gc_in_progress is true, preparing_for_armageddon will also be true unless something is really hosed. */ assert (!gc_in_progress); +#endif /* not NEW_GC */ sym = args[0]; val = symbol_value_in_buffer (sym, wrap_buffer (buf)); diff -urN 21.5.23/src/event-Xt.c 21.5.24/src/event-Xt.c --- 21.5.23/src/event-Xt.c Tue Sep 27 14:29:44 2005 +++ 21.5.24/src/event-Xt.c Sun Dec 18 04:47:03 2005 @@ -836,7 +836,7 @@ KeySym keysym = 0; #ifdef HAVE_XIM - int len; + int len = 0; /* Some implementations of XmbLookupString don't return XBufferOverflow correctly, so increase the size of the xim input buffer from 64 to the more reasonable size 513, as Emacs has done. @@ -893,12 +893,21 @@ stderr_out (" keysym=%s", XKeysymToString (keysym)); if (status == XLookupChars || status == XLookupBoth) { - if (len != 1) + if (len > 1) { int j; stderr_out (" chars=\""); for (j=0; j= 0177) + { + stderr_out ("%c", bufptr[j]); + } + else + { + stderr_out ("\\%o", (unsigned)(bufptr[j])); + } + } stderr_out ("\""); } else if (bufptr[0] <= 32 || bufptr[0] >= 127) @@ -928,10 +937,18 @@ fb_instream = make_fixed_buffer_input_stream (bufptr, len); - /* #### Use get_coding_system_for_text_file (Vcomposed_input_coding_system, 0) */ + /* [[ Use get_coding_system_for_text_file + (Vcomposed_input_coding_system, 0) ]] + + Nope. If it is possible for the X libraries to have multiple IM + connections on different DISPLAYs active at once, this should be + a console-specific variable (like a TTY's coding system) but I've + seen no evidence that that is possible. Aidan Kehoe, + 2005-12-17. */ + instream = make_coding_input_stream - (XLSTREAM (fb_instream), Qundecided, CODING_DECODE, 0); + (XLSTREAM (fb_instream), Qkeyboard, CODING_DECODE, 0); istr = XLSTREAM (instream); @@ -2986,7 +3003,7 @@ } else { status = XParseColor (dpy, colormap, (char*)str, &screenColor); if (status) { - status = allocate_nearest_color (dpy, colormap, visual, &screenColor); + status = x_allocate_nearest_color (dpy, colormap, visual, &screenColor); } } } else { diff -urN 21.5.23/src/event-msw.c 21.5.24/src/event-msw.c --- 21.5.23/src/event-msw.c Tue Oct 25 20:16:23 2005 +++ 21.5.24/src/event-msw.c Fri Nov 25 10:42:01 2005 @@ -2498,9 +2498,11 @@ struct frame *frame; struct mswindows_frame *msframe; +#ifndef NEW_GC /* If you hit this, rewrite the offending API call to occur after GC, using register_post_gc_action(). */ assert (!gc_in_progress); +#endif /* NEW_GC */ #ifdef DEBUG_XEMACS if (debug_mswindows_events) diff -urN 21.5.23/src/events.c 21.5.24/src/events.c --- 21.5.23/src/events.c Tue Oct 25 20:16:23 2005 +++ 21.5.24/src/events.c Fri Nov 25 10:42:01 2005 @@ -1,7 +1,7 @@ /* Events: printing them, converting them to and from characters. Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. Copyright (C) 1994, 1995 Board of Trustees, University of Illinois. - Copyright (C) 2001, 2002 Ben Wing. + Copyright (C) 2001, 2002, 2005 Ben Wing. This file is part of XEmacs. @@ -86,11 +86,14 @@ deinitialize_event (Lisp_Object ev) { Lisp_Event *event = XEVENT (ev); - int i; + /* Preserve the old UID for this event, for tracking it */ + unsigned int old_uid = event->lheader.uid; + for (i = 0; i < (int) (sizeof (Lisp_Event) / sizeof (int)); i++) ((int *) event) [i] = 0xdeadbeef; /* -559038737 base 10 */ set_lheader_implementation (&event->lheader, &lrecord_event); + event->lheader.uid = old_uid; set_event_type (event, dead_event); SET_EVENT_CHANNEL (event, Qnil); XSET_EVENT_NEXT (ev, Qnil); @@ -100,8 +103,12 @@ void zero_event (Lisp_Event *e) { + /* Preserve the old UID for this event, for tracking it */ + unsigned int old_uid = e->lheader.uid; + xzero (*e); set_lheader_implementation (&e->lheader, &lrecord_event); + e->lheader.uid = old_uid; set_event_type (e, empty_event); SET_EVENT_CHANNEL (e, Qnil); SET_EVENT_NEXT (e, Qnil); @@ -2643,6 +2650,9 @@ reinit_vars_of_events (void) { Vevent_resource = Qnil; +#ifdef NEW_GC + staticpro (&Vevent_resource); +#endif /* NEW_GC */ } void diff -urN 21.5.23/src/extents.c 21.5.24/src/extents.c --- 21.5.23/src/extents.c Tue Oct 25 20:16:23 2005 +++ 21.5.24/src/extents.c Fri Nov 25 10:42:01 2005 @@ -242,6 +242,9 @@ typedef struct gap_array_marker { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ int pos; struct gap_array_marker *next; } Gap_Array_Marker; @@ -269,6 +272,9 @@ typedef struct gap_array { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ Elemcount gap; Elemcount gapsize; Elemcount numels; @@ -281,7 +287,9 @@ char array[1]; } Gap_Array; +#ifndef NEW_GC static Gap_Array_Marker *gap_array_marker_freelist; +#endif /* not NEW_GC */ /* Convert a "memory position" (i.e. taking the gap into account) into the address of the element at (i.e. after) that position. "Memory @@ -310,6 +318,9 @@ typedef struct extent_list_marker { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ Gap_Array_Marker *m; int endp; struct extent_list_marker *next; @@ -317,12 +328,17 @@ typedef struct extent_list { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ Gap_Array *start; Gap_Array *end; Extent_List_Marker *markers; } Extent_List; +#ifndef NEW_GC static Extent_List_Marker *extent_list_marker_freelist; +#endif /* not NEW_GC */ #define EXTENT_LESS_VALS(e,st,nd) ((extent_start (e) < (st)) || \ ((extent_start (e) == (st)) && \ @@ -377,6 +393,9 @@ typedef struct stack_of_extents { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ Extent_List *extents; Memxpos pos; /* Position of stack of extents. EXTENTS is the list of all extents that overlap this position. This position @@ -569,10 +588,17 @@ a geometric progression that saves on realloc space. */ increment += 100 + ga->numels / 8; +#ifdef NEW_GC + ga = (Gap_Array *) mc_realloc (ga, + offsetof (Gap_Array, array) + + (ga->numels + ga->gapsize + increment) * + ga->elsize); +#else /* not NEW_GC */ ga = (Gap_Array *) xrealloc (ga, offsetof (Gap_Array, array) + (ga->numels + ga->gapsize + increment) * ga->elsize); +#endif /* not NEW_GC */ if (ga == 0) memory_full (); @@ -664,6 +690,9 @@ Gap_Array_Marker *m; assert (pos >= 0 && pos <= ga->numels); +#ifdef NEW_GC + m = alloc_lrecord_type (Gap_Array_Marker, &lrecord_gap_array_marker); +#else /* not NEW_GC */ if (gap_array_marker_freelist) { m = gap_array_marker_freelist; @@ -671,6 +700,7 @@ } else m = xnew (Gap_Array_Marker); +#endif /* not NEW_GC */ m->pos = GAP_ARRAY_ARRAY_TO_MEMORY_POS (ga, pos); m->next = ga->markers; @@ -690,11 +720,16 @@ prev->next = p->next; else ga->markers = p->next; +#ifdef NEW_GC + mc_free (m); +#else /* not NEW_GC */ m->next = gap_array_marker_freelist; m->pos = 0xDEADBEEF; /* -559038737 base 10 */ gap_array_marker_freelist = m; +#endif /* not NEW_GC */ } +#ifndef NEW_GC static void gap_array_delete_all_markers (Gap_Array *ga) { @@ -708,6 +743,7 @@ gap_array_marker_freelist = p; } } +#endif /* not NEW_GC */ static void gap_array_move_marker (Gap_Array *ga, Gap_Array_Marker *m, Elemcount pos) @@ -722,17 +758,23 @@ static Gap_Array * make_gap_array (Elemcount elsize) { +#ifdef NEW_GC + Gap_Array *ga = alloc_lrecord_type (Gap_Array, &lrecord_gap_array); +#else /* not NEW_GC */ Gap_Array *ga = xnew_and_zero (Gap_Array); +#endif /* not NEW_GC */ ga->elsize = elsize; return ga; } +#ifndef NEW_GC static void free_gap_array (Gap_Array *ga) { gap_array_delete_all_markers (ga); xfree (ga, Gap_Array *); } +#endif /* not NEW_GC */ /************************************************************************/ @@ -887,6 +929,9 @@ { Extent_List_Marker *m; +#ifdef NEW_GC + m = alloc_lrecord_type (Extent_List_Marker, &lrecord_extent_list_marker); +#else /* not NEW_GC */ if (extent_list_marker_freelist) { m = extent_list_marker_freelist; @@ -894,6 +939,7 @@ } else m = xnew (Extent_List_Marker); +#endif /* not NEW_GC */ m->m = gap_array_make_marker (endp ? el->end : el->start, pos); m->endp = endp; @@ -917,9 +963,13 @@ prev->next = p->next; else el->markers = p->next; +#ifdef NEW_GC + gap_array_delete_marker (m->endp ? el->end : el->start, m->m); +#else /* not NEW_GC */ m->next = extent_list_marker_freelist; extent_list_marker_freelist = m; gap_array_delete_marker (m->endp ? el->end : el->start, m->m); +#endif /* not NEW_GC */ } #define extent_list_marker_pos(el, mkr) \ @@ -928,13 +978,18 @@ static Extent_List * allocate_extent_list (void) { +#ifdef NEW_GC + Extent_List *el = alloc_lrecord_type (Extent_List, &lrecord_extent_list); +#else /* not NEW_GC */ Extent_List *el = xnew (Extent_List); +#endif /* not NEW_GC */ el->start = make_gap_array (sizeof (EXTENT)); el->end = make_gap_array (sizeof (EXTENT)); el->markers = 0; return el; } +#ifndef NEW_GC static void free_extent_list (Extent_List *el) { @@ -942,6 +997,7 @@ free_gap_array (el->end); xfree (el, Extent_List *); } +#endif /* not NEW_GC */ /************************************************************************/ @@ -1021,28 +1077,46 @@ structure to be there. */ static struct stack_of_extents *allocate_soe (void); +#ifndef NEW_GC static void free_soe (struct stack_of_extents *soe); +#endif /* not NEW_GC */ static void soe_invalidate (Lisp_Object obj); extern const struct sized_memory_description gap_array_marker_description; static const struct memory_description gap_array_marker_description_1[] = { +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (Gap_Array_Marker, next) }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (Gap_Array_Marker, next), 1, { &gap_array_marker_description } }, +#endif /* not NEW_GC */ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("gap-array-marker", gap_array_marker, + 0, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + gap_array_marker_description_1, + struct gap_array_marker); +#else /* not NEW_GC */ const struct sized_memory_description gap_array_marker_description = { sizeof (Gap_Array_Marker), gap_array_marker_description_1 }; +#endif /* not NEW_GC */ static const struct memory_description lispobj_gap_array_description_1[] = { { XD_ELEMCOUNT, offsetof (Gap_Array, gap) }, { XD_BYTECOUNT, offsetof (Gap_Array, offset_past_gap) }, { XD_ELEMCOUNT, offsetof (Gap_Array, els_past_gap) }, +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (Gap_Array, markers) }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (Gap_Array, markers), 1, { &gap_array_marker_description }, XD_FLAG_NO_KKCC }, +#endif /* not NEW_GC */ { XD_BLOCK_ARRAY, offsetof (Gap_Array, array), XD_INDIRECT (0, 0), { &lisp_object_description } }, { XD_BLOCK_ARRAY, XD_INDIRECT (1, offsetof (Gap_Array, array)), @@ -1050,57 +1124,118 @@ { XD_END } }; +#ifdef NEW_GC + +static Bytecount +size_gap_array (const void *lheader) +{ + Gap_Array *ga = (Gap_Array *) lheader; + return offsetof (Gap_Array, array) + (ga->numels + ga->gapsize) * ga->elsize; +} + +DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION ("gap-array", gap_array, + 0, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + lispobj_gap_array_description_1, + size_gap_array, + struct gap_array); +#else /* not NEW_GC */ static const struct sized_memory_description lispobj_gap_array_description = { sizeof (Gap_Array), lispobj_gap_array_description_1 }; extern const struct sized_memory_description extent_list_marker_description; +#endif /* not NEW_GC */ static const struct memory_description extent_list_marker_description_1[] = { +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (Extent_List_Marker, m) }, + { XD_LISP_OBJECT, offsetof (Extent_List_Marker, next) }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (Extent_List_Marker, m), 1, { &gap_array_marker_description } }, { XD_BLOCK_PTR, offsetof (Extent_List_Marker, next), 1, { &extent_list_marker_description } }, +#endif /* not NEW_GC */ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("extent-list-marker", extent_list_marker, + 0, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + extent_list_marker_description_1, + struct extent_list_marker); +#else /* not NEW_GC */ const struct sized_memory_description extent_list_marker_description = { sizeof (Extent_List_Marker), extent_list_marker_description_1 }; +#endif /* not NEW_GC */ static const struct memory_description extent_list_description_1[] = { +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (Extent_List, start) }, + { XD_LISP_OBJECT, offsetof (Extent_List, end) }, + { XD_LISP_OBJECT, offsetof (Extent_List, markers) }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (Extent_List, start), 1, { &lispobj_gap_array_description } }, { XD_BLOCK_PTR, offsetof (Extent_List, end), 1, { &lispobj_gap_array_description }, XD_FLAG_NO_KKCC }, { XD_BLOCK_PTR, offsetof (Extent_List, markers), 1, { &extent_list_marker_description }, XD_FLAG_NO_KKCC }, +#endif /* not NEW_GC */ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("extent-list", extent_list, + 0, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + extent_list_description_1, + struct extent_list); +#else /* not NEW_GC */ static const struct sized_memory_description extent_list_description = { sizeof (Extent_List), extent_list_description_1 }; +#endif /* not NEW_GC */ static const struct memory_description stack_of_extents_description_1[] = { +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (Stack_Of_Extents, extents) }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (Stack_Of_Extents, extents), 1, { &extent_list_description } }, +#endif /* not NEW_GC */ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("stack-of-extents", stack_of_extents, + 0, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + stack_of_extents_description_1, + struct stack_of_extents); +#else /* not NEW_GC */ static const struct sized_memory_description stack_of_extents_description = { sizeof (Stack_Of_Extents), stack_of_extents_description_1 }; +#endif /* not NEW_GC */ static const struct memory_description extent_info_description [] = { +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (struct extent_info, extents) }, + { XD_LISP_OBJECT, offsetof (struct extent_info, soe) }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (struct extent_info, extents), 1, { &extent_list_description } }, { XD_BLOCK_PTR, offsetof (struct extent_info, soe), 1, { &stack_of_extents_description }, XD_FLAG_NO_KKCC }, +#endif /* not NEW_GC */ { XD_END } }; @@ -1142,6 +1277,10 @@ if (for_disksave) return; +#ifdef NEW_GC + data->soe = 0; + data->extents = 0; +#else /* not NEW_GC */ if (data->soe) { free_soe (data->soe); @@ -1152,6 +1291,7 @@ free_extent_list (data->extents); data->extents = 0; } +#endif /* not NEW_GC */ } DEFINE_LRECORD_IMPLEMENTATION ("extent-info", extent_info, @@ -1181,7 +1321,9 @@ if (data->soe) { +#ifndef NEW_GC free_soe (data->soe); +#endif /* not NEW_GC */ data->soe = 0; } } @@ -1326,12 +1468,16 @@ void uninit_buffer_extents (struct buffer *b) { +#ifndef NEW_GC struct extent_info *data = XEXTENT_INFO (b->extent_info); +#endif /* not NEW_GC */ /* Don't destroy the extents here -- there may still be children extents pointing to the extents. */ detach_all_extents (wrap_buffer (b)); +#ifndef NEW_GC finalize_extent_info (data, 0); +#endif /* not NEW_GC */ } /* Retrieve the extent list that an extent is a member of; the @@ -1649,18 +1795,25 @@ static struct stack_of_extents * allocate_soe (void) { +#ifdef NEW_GC + struct stack_of_extents *soe = + alloc_lrecord_type (struct stack_of_extents, &lrecord_stack_of_extents); +#else /* not NEW_GC */ struct stack_of_extents *soe = xnew_and_zero (struct stack_of_extents); +#endif /* not NEW_GC */ soe->extents = allocate_extent_list (); soe->pos = -1; return soe; } +#ifndef NEW_GC static void free_soe (struct stack_of_extents *soe) { free_extent_list (soe->extents); xfree (soe, struct stack_of_extents *); } +#endif /* not NEW_GC */ /* ------------------------------- */ /* other primitives */ @@ -7299,6 +7452,13 @@ INIT_LRECORD_IMPLEMENTATION (extent); INIT_LRECORD_IMPLEMENTATION (extent_info); INIT_LRECORD_IMPLEMENTATION (extent_auxiliary); +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (gap_array_marker); + INIT_LRECORD_IMPLEMENTATION (gap_array); + INIT_LRECORD_IMPLEMENTATION (extent_list_marker); + INIT_LRECORD_IMPLEMENTATION (extent_list); + INIT_LRECORD_IMPLEMENTATION (stack_of_extents); +#endif /* not NEW_GC */ DEFSYMBOL (Qextentp); DEFSYMBOL (Qextent_live_p); diff -urN 21.5.23/src/extents.h 21.5.24/src/extents.h --- 21.5.23/src/extents.h Wed Jan 26 14:11:12 2005 +++ 21.5.24/src/extents.h Fri Nov 25 10:42:02 2005 @@ -49,6 +49,56 @@ #define CHECK_EXTENT_INFO(x) CHECK_RECORD (x, extent_info) #define CONCHECK_EXTENT_INFO(x) CONCHECK_RECORD (x, extent_info) +#ifdef NEW_GC +struct gap_array_marker; + +DECLARE_LRECORD (gap_array_marker, struct gap_array_marker); +#define XGAP_ARRAY_MARKER(x) \ + XRECORD (x, gap_array_marker, struct gap_array_marker) +#define wrap_gap_array_marker(p) wrap_record (p, gap_array_marker) +#define GAP_ARRAY_MARKERP(x) RECORDP (x, gap_array_marker) +#define CHECK_GAP_ARRAY_MARKER(x) CHECK_RECORD (x, gap_array_marker) +#define CONCHECK_GAP_ARRAY_MARKER(x) CONCHECK_RECORD (x, gap_array_marker) + +struct gap_array; + +DECLARE_LRECORD (gap_array, struct gap_array); +#define XGAP_ARRAY(x) XRECORD (x, gap_array, struct gap_array) +#define wrap_gap_array(p) wrap_record (p, gap_array) +#define GAP_ARRAYP(x) RECORDP (x, gap_array) +#define CHECK_GAP_ARRAY(x) CHECK_RECORD (x, gap_array) +#define CONCHECK_GAP_ARRAY(x) CONCHECK_RECORD (x, gap_array) + +struct extent_list_marker; + +DECLARE_LRECORD (extent_list_marker, struct extent_list_marker); +#define XEXTENT_LIST_MARKER(x) \ + XRECORD (x, extent_list_marker, struct extent_list_marker) +#define wrap_extent_list_marker(p) wrap_record (p, extent_list_marker) +#define EXTENT_LIST_MARKERP(x) RECORDP (x, extent_list_marker) +#define CHECK_EXTENT_LIST_MARKER(x) CHECK_RECORD (x, extent_list_marker) +#define CONCHECK_EXTENT_LIST_MARKER(x) CONCHECK_RECORD (x, extent_list_marker) + +struct extent_list; + +DECLARE_LRECORD (extent_list, struct extent_list); +#define XEXTENT_LIST(x) XRECORD (x, extent_list, struct extent_list) +#define wrap_extent_list(p) wrap_record (p, extent_list) +#define EXTENT_LISTP(x) RECORDP (x, extent_list) +#define CHECK_EXTENT_LIST(x) CHECK_RECORD (x, extent_list) +#define CONCHECK_EXTENT_LIST(x) CONCHECK_RECORD (x, extent_list) + +struct stack_of_extents; + +DECLARE_LRECORD (stack_of_extents, struct stack_of_extents); +#define XSTACK_OF_EXTENTS(x) \ + XRECORD (x, stack_of_extents, struct stack_of_extents) +#define wrap_stack_of_extents(p) wrap_record (p, stack_of_extents) +#define STACK_OF_EXTENTSP(x) RECORDP (x, stack_of_extents) +#define CHECK_STACK_OF_EXTENTS(x) CHECK_RECORD (x, stack_of_extents) +#define CONCHECK_STACK_OF_EXTENTS(x) CONCHECK_RECORD (x, stack_of_extents) +#endif /* NEW_GC */ + /* the layouts for glyphs (extent->flags.glyph_layout). Must fit in 2 bits. */ typedef enum glyph_layout { diff -urN 21.5.23/src/faces.c 21.5.24/src/faces.c --- 21.5.23/src/faces.c Mon Oct 24 19:07:36 2005 +++ 21.5.24/src/faces.c Sat Nov 26 20:46:08 2005 @@ -1060,7 +1060,10 @@ } /* ensure that the given cachel contains an updated font value for - the given charset. Return the updated font value. */ + the given charset. Return the updated font value (which can be + Qunbound, so this value must not be passed unchecked to Lisp). + + #### Xft: This function will need to be updated for new font model. */ Lisp_Object ensure_face_cachel_contains_charset (struct face_cachel *cachel, @@ -1411,6 +1414,7 @@ } /* Initialize a cachel. */ +/* #### Xft: this function will need to be changed for new font model. */ void reset_face_cachel (struct face_cachel *cachel) @@ -1492,6 +1496,7 @@ Dynarr_atp (w->face_cachels, elt)->dirty = 0; } +/* #### Xft: this function will need to be changed for new font model. */ void mark_face_cachels_as_not_updated (struct window *w) { @@ -1686,6 +1691,43 @@ } } +/* Return a cache index for window W from merging the faces in FACE_LIST. + COUNT is the number of faces in the list. + + The default face should not be included in the list, as it is always + implicitly merged into the cachel. + + WARNING: this interface may change. */ + +face_index +merge_face_list_to_cache_index (struct window *w, + Lisp_Object *face_list, int count) +{ + int i; + face_index findex = 0; + struct face_cachel cachel; + + reset_face_cachel (&cachel); + + for (i = 0; i < count; i++) + { + Lisp_Object face = face_list[i]; + + if (!NILP (face)) + { + CHECK_FACE(face); /* #### presumably unnecessary */ + findex = get_builtin_face_cache_index (w, face); + merge_face_cachel_data (w, findex, &cachel); + } + } + + /* Now finally merge in the default face. */ + findex = get_builtin_face_cache_index (w, Vdefault_face); + merge_face_cachel_data (w, findex, &cachel); + + return get_merged_face_cache_index (w, &cachel); +} + /***************************************************************************** interface functions @@ -2006,9 +2048,24 @@ const Ascbyte *fonts[] = { +#ifdef USE_XFT + /************** Xft fonts *************/ + + /* Note that fontconfig can search for several font families in one + call. We should use this facility. */ + "monospace-12", /* Western #### add encoding info? */ + /* do we need to worry about non-Latin characters for monospace? + No, at least in Debian's implementation of Xft. + We should recommend that "gothic" and "mincho" aliases be created? */ + "Sazanami Mincho-12", /* Japanese #### add encoding info? */ + /* Arphic for Chinese? */ + /* Korean */ +#else + /************** ISO-8859 fonts *************/ "-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*", + /* under USE_XFT, we always succeed, so let's not waste the effort */ "-*-fixed-medium-r-*-*-*-120-*-*-*-*-iso8859-*", "-*-courier-*-r-*-*-*-120-*-*-*-*-iso8859-*", "-*-fixed-*-r-*-*-*-120-*-*-*-*-iso8859-*", @@ -2086,6 +2143,13 @@ check whether we have support for some of the chars in the charset. (#### Bogus, but that's the way it currently works) + sjt sez: With Xft/fontconfig that information is available as a + language support property. The character set (actually a bit + vector) is also available. So what we need to do is to map charset + -> language (Mule redesign Phase 1) and eventually use language + information in the buffer, then map to charsets (Phase 2) at font + instantiation time. + (2) Record in the font instance a flag indicating when we're dealing with a Unicode font. @@ -2133,6 +2197,7 @@ "-*-*-*-*-*-*-*-120-*-*-*-*-*-*", "-*-*-*-*-*-*-*-*-*-*-*-*-*-*", "*" +#endif }; const Ascbyte **fontptr; @@ -2212,6 +2277,8 @@ { Lisp_Object fg_fb = Qnil, bg_fb = Qnil; + /* #### gui-element face doesn't have a font property? + But it gets referred to later! */ #ifdef HAVE_GTK /* We need to put something in there, or error checking gets #%!@#ed up before the styles are set, which override the @@ -2283,6 +2350,7 @@ Vwidget_face = Fmake_face (Qwidget, build_msg_string ("widget face"), Qnil); + /* #### weird ... the gui-element face doesn't have its own font yet */ set_specifier_fallback (Fget (Vwidget_face, Qfont, Qunbound), Fget (Vgui_element_face, Qfont, Qunbound)); set_specifier_fallback (Fget (Vwidget_face, Qforeground, Qunbound), diff -urN 21.5.23/src/faces.h 21.5.24/src/faces.h --- 21.5.23/src/faces.h Mon Oct 24 19:07:36 2005 +++ 21.5.24/src/faces.h Sat Nov 26 20:46:08 2005 @@ -117,6 +117,9 @@ typedef struct face_cachel face_cachel; struct face_cachel { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* not NEW_GC */ /* There are two kinds of cachels; those created from a single face and those created by merging more than one face. In the former case, the FACE element specifies the face used. In the latter @@ -161,7 +164,9 @@ of them. This avoids messing with Dynarrs. #### We should look into this and probably clean it up - to use Dynarrs. This may be a big space hog as is. */ + to use Dynarrs. This may be a big space hog as is. + sjt sez: doesn't look like it, my total face cache is 170KB. + Could be reduced to maybe 50KB. */ Lisp_Object font[NUM_LEADING_BYTES]; Lisp_Object display_table; @@ -222,6 +227,19 @@ unsigned char font_updated[NUM_LEADING_BYTES]; }; +#ifdef NEW_GC +typedef struct face_cachel Lisp_Face_Cachel; + +DECLARE_LRECORD (face_cachel, Lisp_Face_Cachel); + +#define XFACE_CACHEL(x) \ + XRECORD (x, face_cachel, Lisp_Face_Cachel) +#define wrap_face_cachel(p) wrap_record (p, face_cachel) +#define FACE_CACHEL_P(x) RECORDP (x, face_cachel) +#define CHECK_FACE_CACHEL(x) CHECK_RECORD (x, face_cachel) +#define CONCHECK_FACE_CACHEL(x) CONCHECK_RECORD (x, face_cachel) +#endif /* NEW_GC */ + DECLARE_LRECORD (face, Lisp_Face); #define XFACE(x) XRECORD (x, face, Lisp_Face) #define wrap_face(p) wrap_record (p, face) @@ -247,6 +265,10 @@ void reset_face_cachels (struct window *w); face_index get_builtin_face_cache_index (struct window *w, Lisp_Object face); +/* WARNING: this interface may change. */ +face_index merge_face_list_to_cache_index (struct window *w, + Lisp_Object *face_list, int count); + #ifdef MEMORY_USAGE_STATS int compute_face_cachel_usage (face_cachel_dynarr *face_cachels, struct overhead_stats *ovstats); diff -urN 21.5.23/src/file-coding.c 21.5.24/src/file-coding.c --- 21.5.23/src/file-coding.c Tue Oct 25 20:16:24 2005 +++ 21.5.24/src/file-coding.c Sun Dec 18 04:47:03 2005 @@ -4600,8 +4600,14 @@ #endif DEFVAR_LISP ("keyboard-coding-system", &Vkeyboard_coding_system /* -Coding system used for TTY keyboard input. -Not used under a windowing system. +Default coding system used for TTY and X11 keyboard input. +Under X11, used only to interpet the character for a key event when that +event has a KeySym of NoSymbol but does have an associated string keysym, +something that's seen with input methods. + +If you need to set these things to different coding systems, call the +function `set-console-tty-coding-system' for the TTY and use this variable +for X11. */ ); Vkeyboard_coding_system = Qnil; diff -urN 21.5.23/src/frame-gtk.c 21.5.24/src/frame-gtk.c --- 21.5.23/src/frame-gtk.c Tue Jan 25 08:33:56 2005 +++ 21.5.24/src/frame-gtk.c Fri Nov 25 10:42:02 2005 @@ -102,11 +102,19 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("gtk-frame", gtk_frame, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + gtk_frame_data_description_1, + Lisp_Gtk_Frame); +#else /* not NEW_GC */ extern const struct sized_memory_description gtk_frame_data_description; const struct sized_memory_description gtk_frame_data_description = { sizeof (struct gtk_frame), gtk_frame_data_description_1 }; +#endif /* not NEW_GC */ /************************************************************************/ @@ -265,7 +273,7 @@ } static int -gtk_internal_frame_property_p (struct frame *f, Lisp_Object property) +gtk_internal_frame_property_p (struct frame *UNUSED(f), Lisp_Object property) { return EQ (property, Qleft) || EQ (property, Qtop) @@ -966,7 +974,11 @@ int i; /* zero out all slots. */ +#ifdef NEW_GC + f->frame_data = alloc_lrecord_type (struct gtk_frame, &lrecord_gtk_frame); +#else /* not NEW_GC */ f->frame_data = xnew_and_zero (struct gtk_frame); +#endif /* not NEW_GC */ /* yeah, except the lisp ones */ FRAME_GTK_ICON_PIXMAP (f) = Qnil; @@ -1342,7 +1354,11 @@ if (FRAME_GTK_GEOM_FREE_ME_PLEASE (f)) xfree (FRAME_GTK_GEOM_FREE_ME_PLEASE (f), char *); +#ifdef NEW_GC + mc_free (f->frame_data); +#else /* not NEW_GC */ xfree (f->frame_data, void *); +#endif /* not NEW_GC */ f->frame_data = 0; } @@ -1447,6 +1463,10 @@ void syms_of_frame_gtk (void) { +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (gtk_frame); +#endif /* NEW_GC */ + DEFSYMBOL (Qtext_widget); DEFSYMBOL (Qcontainer_widget); DEFSYMBOL (Qshell_widget); diff -urN 21.5.23/src/frame-msw.c 21.5.24/src/frame-msw.c --- 21.5.23/src/frame-msw.c Tue Oct 25 16:30:42 2005 +++ 21.5.24/src/frame-msw.c Fri Nov 25 10:42:02 2005 @@ -92,11 +92,19 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("mswindows-frame", mswindows_frame, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + mswindows_frame_data_description_1, + Lisp_Mswindows_Frame); +#else /* not NEW_GC */ extern const struct sized_memory_description mswindows_frame_data_description; const struct sized_memory_description mswindows_frame_data_description = { sizeof (struct mswindows_frame), mswindows_frame_data_description_1 }; +#endif /* not NEW_GC */ /*---------------------------------------------------------------------*/ /*----- DISPLAY FRAME -----*/ @@ -165,7 +173,12 @@ if (!NILP (height)) CHECK_INT (height); +#ifdef NEW_GC + f->frame_data = alloc_lrecord_type (struct mswindows_frame, + &lrecord_mswindows_frame); +#else /* not NEW_GC */ f->frame_data = xnew_and_zero (struct mswindows_frame); +#endif /* not NEW_GC */ FRAME_MSWINDOWS_TARGET_RECT (f) = xnew_and_zero (XEMACS_RECT_WH); FRAME_MSWINDOWS_TARGET_RECT (f)->left = NILP (left) ? -1 : abs (XINT (left)); @@ -340,7 +353,11 @@ #endif ReleaseDC (FRAME_MSWINDOWS_HANDLE (f), FRAME_MSWINDOWS_DC (f)); DestroyWindow (FRAME_MSWINDOWS_HANDLE (f)); +#ifdef NEW_GC + mc_free (f->frame_data); +#else /* not NEW_GC */ xfree (f->frame_data, void *); +#endif /* not NEW_GC */ } f->frame_data = 0; } @@ -1185,6 +1202,9 @@ void syms_of_frame_mswindows (void) { +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (mswindows_frame); +#endif /* NEW_GC */ } void diff -urN 21.5.23/src/frame-x.c 21.5.24/src/frame-x.c --- 21.5.23/src/frame-x.c Wed Apr 27 18:01:48 2005 +++ 21.5.24/src/frame-x.c Sat Nov 26 20:46:08 2005 @@ -77,11 +77,19 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("x-frame", x_frame, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + x_frame_data_description_1, + Lisp_X_Frame); +#else /* not NEW_GC */ extern const struct sized_memory_description x_frame_data_description; const struct sized_memory_description x_frame_data_description = { sizeof (struct x_frame), x_frame_data_description_1 }; +#endif /* not NEW_GC */ EXFUN (Fx_window_id, 1); @@ -2073,7 +2081,11 @@ allocate_x_frame_struct (struct frame *f) { /* zero out all slots. */ +#ifdef NEW_GC + f->frame_data = alloc_lrecord_type (struct x_frame, &lrecord_x_frame); +#else /* not NEW_GC */ f->frame_data = xnew_and_zero (struct x_frame); +#endif /* not NEW_GC */ /* yeah, except the lisp ones */ FRAME_X_LAST_MENUBAR_BUFFER (f) = Qnil; @@ -2613,6 +2625,19 @@ DtDndDropUnregister (FRAME_X_TEXT_WIDGET (f)); #endif /* HAVE_CDE */ +#ifdef USE_XFT + /* If we have an XftDraw structure, we need to free it here. + We can't ever have an XftDraw without a Display, so we are safe + to free it in here, and we avoid too much playing around with the + malloc checking hooks this way. */ + if (FRAME_X_XFTDRAW (f)) + { + XftDrawDestroy (FRAME_X_XFTDRAW (f)); + FRAME_X_XFTDRAW (f) = NULL; + } +#endif + + assert (FRAME_X_SHELL_WIDGET (f) != 0); dpy = XtDisplay (FRAME_X_SHELL_WIDGET (f)); @@ -2642,7 +2667,11 @@ if (f->frame_data) { +#ifdef NEW_GC + mc_free (f->frame_data); +#else /* not NEW_GC */ xfree (f->frame_data, void *); +#endif /* not NEW_GC */ f->frame_data = 0; } } @@ -2686,11 +2715,28 @@ { Lisp_Object font = FACE_FONT (Vdefault_face, frame, Vcharset_ascii); + /* #### what to do about Xft? I don't think the font is actually used + to compute cell size for computing frame pixel dimensions (see call + to EmacsFrameRecomputeCellSize() below); where is it used? -- sjt + What does XtSetValues() do if that resource isn't present? */ if (!EQ (font, Vthe_null_font_instance)) { - XtSetArg (al[ac], XtNfont, - (void *) FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font))); - ac++; + if (0) + ; +#ifdef USE_XFT + else if (FONT_INSTANCE_X_XFTFONT (XFONT_INSTANCE (font))) + { + XtSetArg (al[ac], XtNxftFont, + (void *) FONT_INSTANCE_X_XFTFONT (XFONT_INSTANCE (font))); + ac++; + } +#endif + else if (FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font))) + { + XtSetArg (al[ac], XtNfont, + (void *) FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font))); + ac++; + } } } else @@ -2720,6 +2766,10 @@ void syms_of_frame_x (void) { +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (x_frame); +#endif /* NEW_GC */ + DEFSYMBOL (Qoverride_redirect); DEFSYMBOL (Qx_resource_name); diff -urN 21.5.23/src/frame.c 21.5.24/src/frame.c --- 21.5.23/src/frame.c Tue Oct 25 20:16:24 2005 +++ 21.5.24/src/frame.c Fri Nov 25 10:42:03 2005 @@ -139,11 +139,24 @@ +#ifndef NEW_GC extern const struct sized_memory_description gtk_frame_data_description; extern const struct sized_memory_description mswindows_frame_data_description; extern const struct sized_memory_description x_frame_data_description; +#endif /* not NEW_GC */ static const struct memory_description frame_data_description_1 []= { +#ifdef NEW_GC +#ifdef HAVE_GTK + { XD_LISP_OBJECT, gtk_console }, +#endif +#ifdef HAVE_MS_WINDOWS + { XD_LISP_OBJECT, mswindows_console }, +#endif +#ifdef HAVE_X_WINDOWS + { XD_LISP_OBJECT, x_console }, +#endif +#else /* not NEW_GC */ #ifdef HAVE_GTK { XD_BLOCK_PTR, gtk_console, 1, { >k_frame_data_description} }, #endif @@ -153,6 +166,7 @@ #ifdef HAVE_X_WINDOWS { XD_BLOCK_PTR, x_console, 1, { &x_frame_data_description} }, #endif +#endif /* not NEW_GC */ { XD_END } }; @@ -160,6 +174,19 @@ sizeof (void *), frame_data_description_1 }; +#ifdef NEW_GC +static const struct memory_description expose_ignore_description_1 [] = { + { XD_LISP_OBJECT, offsetof (struct expose_ignore, next) }, + { XD_END } +}; + +DEFINE_LRECORD_IMPLEMENTATION ("expose-ignore", + expose_ignore, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + expose_ignore_description_1, + struct expose_ignore); +#else /* not NEW_GC */ extern const struct sized_memory_description expose_ignore_description; static const struct memory_description expose_ignore_description_1 [] = { @@ -172,6 +199,7 @@ sizeof (struct expose_ignore), expose_ignore_description_1 }; +#endif /* not NEW_GC */ static const struct memory_description display_line_dynarr_pointer_description_1 []= { { XD_BLOCK_PTR, 0, 1, { &display_line_dynarr_description} }, @@ -189,10 +217,15 @@ { XD_LISP_OBJECT_ARRAY, offsetof (struct frame, slot), size }, #include "frameslots.h" +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (struct frame, subwindow_exposures) }, + { XD_LISP_OBJECT, offsetof (struct frame, subwindow_exposures_tail) }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (struct frame, subwindow_exposures), 1, { &expose_ignore_description } }, { XD_BLOCK_PTR, offsetof (struct frame, subwindow_exposures_tail), 1, { &expose_ignore_description } }, +#endif /* not NEW_GC */ #ifdef HAVE_SCROLLBARS { XD_LISP_OBJECT, offsetof (struct frame, sb_vcache) }, @@ -3406,7 +3439,11 @@ --andy. */ MARK_FRAME_SIZE_CHANGED (f); +#ifdef NEW_GC + if (delay || hold_frame_size_changes) +#else /* not NEW_GC */ if (delay || hold_frame_size_changes || gc_in_progress) +#endif /* not NEW_GC */ { f->new_width = newwidth; f->new_height = newheight; @@ -3576,6 +3613,9 @@ syms_of_frame (void) { INIT_LRECORD_IMPLEMENTATION (frame); +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (expose_ignore); +#endif /* NEW_GC */ DEFSYMBOL (Qdelete_frame_hook); DEFSYMBOL (Qselect_frame_hook); diff -urN 21.5.23/src/gc.c 21.5.24/src/gc.c --- 21.5.23/src/gc.c Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/gc.c Fri Nov 25 10:42:03 2005 @@ -0,0 +1,2184 @@ +/* New incremental garbage collector for XEmacs. + Copyright (C) 2005 Marcus Crestani. + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF. */ + +#include +#include "lisp.h" + +#include "backtrace.h" +#include "buffer.h" +#include "bytecode.h" +#include "chartab.h" +#include "console-stream.h" +#include "device.h" +#include "elhash.h" +#include "events.h" +#include "extents-impl.h" +#include "file-coding.h" +#include "frame-impl.h" +#include "gc.h" +#include "glyphs.h" +#include "opaque.h" +#include "lrecord.h" +#include "lstream.h" +#include "process.h" +#include "profile.h" +#include "redisplay.h" +#include "specifier.h" +#include "sysfile.h" +#include "sysdep.h" +#include "window.h" +#include "vdb.h" + + +#define GC_CONS_THRESHOLD 2000000 +#define GC_CONS_INCREMENTAL_THRESHOLD 200000 +#define GC_INCREMENTAL_TRAVERSAL_THRESHOLD 100000 + +/* Number of bytes of consing done since the last GC. */ +EMACS_INT consing_since_gc; + +/* Number of bytes of consing done since startup. */ +EMACS_UINT total_consing; + +/* Number of bytes of current allocated heap objects. */ +EMACS_INT total_gc_usage; + +/* If the above is set. */ +int total_gc_usage_set; + +/* Number of bytes of consing since gc before another gc should be done. */ +EMACS_INT gc_cons_threshold; + +/* Nonzero during gc */ +int gc_in_progress; + +/* Percentage of consing of total data size before another GC. */ +EMACS_INT gc_cons_percentage; + +#ifdef NEW_GC +/* Number of bytes of consing since gc before another cycle of the gc + should be done in incremental mode. */ +EMACS_INT gc_cons_incremental_threshold; + +/* Number of elements marked in one cycle of incremental GC. */ +EMACS_INT gc_incremental_traversal_threshold; + +/* Nonzero during write barrier */ +int write_barrier_enabled; +#endif /* NEW_GC */ + + + +#ifdef NEW_GC +/************************************************************************/ +/* Incremental State and Statistics */ +/************************************************************************/ + +enum gc_phase +{ + NONE, + INIT_GC, + PUSH_ROOT_SET, + MARK, + REPUSH_ROOT_SET, + FINISH_MARK, + FINALIZE, + SWEEP, + FINISH_GC +}; + +#ifndef ERROR_CHECK_GC +struct +{ + enum gc_phase phase; +} gc_state; +#else /* ERROR_CHECK_GC */ +enum gc_stat_id +{ + GC_STAT_TOTAL, + GC_STAT_IN_LAST_GC, + GC_STAT_IN_THIS_GC, + GC_STAT_IN_LAST_CYCLE, + GC_STAT_IN_THIS_CYCLE, + GC_STAT_COUNT /* has to be last */ +}; + +struct +{ + enum gc_phase phase; + EMACS_INT n_gc[GC_STAT_COUNT]; + EMACS_INT n_cycles[GC_STAT_COUNT]; + EMACS_INT enqueued[GC_STAT_COUNT]; + EMACS_INT dequeued[GC_STAT_COUNT]; + EMACS_INT repushed[GC_STAT_COUNT]; + EMACS_INT enqueued2[GC_STAT_COUNT]; + EMACS_INT dequeued2[GC_STAT_COUNT]; + EMACS_INT finalized[GC_STAT_COUNT]; + EMACS_INT freed[GC_STAT_COUNT]; + EMACS_INT explicitly_freed; + EMACS_INT explicitly_tried_freed; +} gc_state; +#endif /* ERROR_CHECK_GC */ + +#define GC_PHASE gc_state.phase +#define GC_SET_PHASE(p) GC_PHASE = p + +#ifdef ERROR_CHECK_GC +# define GC_STAT_START_NEW_GC gc_stat_start_new_gc () +# define GC_STAT_RESUME_GC gc_stat_resume_gc () + +#define GC_STAT_TICK(STAT) \ + gc_state.STAT[GC_STAT_TOTAL]++; \ + gc_state.STAT[GC_STAT_IN_THIS_GC]++; \ + gc_state.STAT[GC_STAT_IN_THIS_CYCLE]++ + +# define GC_STAT_ENQUEUED \ + if (GC_PHASE == REPUSH_ROOT_SET) \ + { \ + GC_STAT_TICK (enqueued2); \ + } \ + else \ + { \ + GC_STAT_TICK (enqueued); \ + } + +# define GC_STAT_DEQUEUED \ + if (gc_state.phase == REPUSH_ROOT_SET) \ + { \ + GC_STAT_TICK (dequeued2); \ + } \ + else \ + { \ + GC_STAT_TICK (dequeued); \ + } +# define GC_STAT_REPUSHED GC_STAT_TICK (repushed) + +#define GC_STAT_RESUME(stat) \ + gc_state.stat[GC_STAT_IN_LAST_CYCLE] = \ + gc_state.stat[GC_STAT_IN_THIS_CYCLE]; \ + gc_state.stat[GC_STAT_IN_THIS_CYCLE] = 0 + +#define GC_STAT_RESTART(stat) \ + gc_state.stat[GC_STAT_IN_LAST_GC] = \ + gc_state.stat[GC_STAT_IN_THIS_GC]; \ + gc_state.stat[GC_STAT_IN_THIS_GC] = 0; \ + GC_STAT_RESUME (stat) + +void +gc_stat_start_new_gc (void) +{ + gc_state.n_gc[GC_STAT_TOTAL]++; + gc_state.n_cycles[GC_STAT_TOTAL]++; + gc_state.n_cycles[GC_STAT_IN_LAST_GC] = gc_state.n_cycles[GC_STAT_IN_THIS_GC]; + gc_state.n_cycles[GC_STAT_IN_THIS_GC] = 1; + + GC_STAT_RESTART (enqueued); + GC_STAT_RESTART (dequeued); + GC_STAT_RESTART (repushed); + GC_STAT_RESTART (finalized); + GC_STAT_RESTART (enqueued2); + GC_STAT_RESTART (dequeued2); + GC_STAT_RESTART (freed); +} + +void +gc_stat_resume_gc (void) +{ + gc_state.n_cycles[GC_STAT_TOTAL]++; + gc_state.n_cycles[GC_STAT_IN_THIS_GC]++; + GC_STAT_RESUME (enqueued); + GC_STAT_RESUME (dequeued); + GC_STAT_RESUME (repushed); + GC_STAT_RESUME (finalized); + GC_STAT_RESUME (enqueued2); + GC_STAT_RESUME (dequeued2); + GC_STAT_RESUME (freed); +} + +void +gc_stat_finalized (void) +{ + GC_STAT_TICK (finalized); +} + +void +gc_stat_freed (void) +{ + GC_STAT_TICK (freed); +} + +void +gc_stat_explicitly_freed (void) +{ + gc_state.explicitly_freed++; +} + +void +gc_stat_explicitly_tried_freed (void) +{ + gc_state.explicitly_tried_freed++; +} + +#define GC_STAT_PRINT_ONE(stat) \ + printf (" | %9s %10d %10d %10d %10d %10d\n", \ + #stat, \ + (int) gc_state.stat[GC_STAT_TOTAL], \ + (int) gc_state.stat[GC_STAT_IN_LAST_GC], \ + (int) gc_state.stat[GC_STAT_IN_THIS_GC], \ + (int) gc_state.stat[GC_STAT_IN_LAST_CYCLE], \ + (int) gc_state.stat[GC_STAT_IN_THIS_CYCLE]) + +void +gc_stat_print_stats (void) +{ + printf (" | PHASE %d TOTAL_GC %d\n", + (int) GC_PHASE, + (int) gc_state.n_gc[GC_STAT_TOTAL]); + printf (" | %9s %10s %10s %10s %10s %10s\n", + "stat", "total", "last_gc", "this_gc", + "last_cycle", "this_cycle"); + printf (" | %9s %10d %10d %10d \n", + "cycle", (int) gc_state.n_cycles[GC_STAT_TOTAL], + (int) gc_state.n_cycles[GC_STAT_IN_LAST_GC], + (int) gc_state.n_cycles[GC_STAT_IN_THIS_GC]); + + GC_STAT_PRINT_ONE (enqueued); + GC_STAT_PRINT_ONE (dequeued); + GC_STAT_PRINT_ONE (repushed); + GC_STAT_PRINT_ONE (enqueued2); + GC_STAT_PRINT_ONE (dequeued2); + GC_STAT_PRINT_ONE (finalized); + GC_STAT_PRINT_ONE (freed); + + printf (" | explicitly freed %d tried %d\n", + (int) gc_state.explicitly_freed, + (int) gc_state.explicitly_tried_freed); +} + +DEFUN("gc-stats", Fgc_stats, 0, 0 ,"", /* +Return statistics about garbage collection cycles in a property list. +*/ + ()) +{ + Lisp_Object pl = Qnil; +#define PL(name,value) \ + pl = cons3 (intern (name), make_int ((int) gc_state.value), pl) + + PL ("explicitly-tried-freed", explicitly_tried_freed); + PL ("explicitly-freed", explicitly_freed); + PL ("freed-in-this-cycle", freed[GC_STAT_IN_THIS_CYCLE]); + PL ("freed-in-this-gc", freed[GC_STAT_IN_THIS_GC]); + PL ("freed-in-last-cycle", freed[GC_STAT_IN_LAST_CYCLE]); + PL ("freed-in-last-gc", freed[GC_STAT_IN_LAST_GC]); + PL ("freed-total", freed[GC_STAT_TOTAL]); + PL ("finalized-in-this-cycle", finalized[GC_STAT_IN_THIS_CYCLE]); + PL ("finalized-in-this-gc", finalized[GC_STAT_IN_THIS_GC]); + PL ("finalized-in-last-cycle", finalized[GC_STAT_IN_LAST_CYCLE]); + PL ("finalized-in-last-gc", finalized[GC_STAT_IN_LAST_GC]); + PL ("finalized-total", finalized[GC_STAT_TOTAL]); + PL ("repushed-in-this-cycle", repushed[GC_STAT_IN_THIS_CYCLE]); + PL ("repushed-in-this-gc", repushed[GC_STAT_IN_THIS_GC]); + PL ("repushed-in-last-cycle", repushed[GC_STAT_IN_LAST_CYCLE]); + PL ("repushed-in-last-gc", repushed[GC_STAT_IN_LAST_GC]); + PL ("repushed-total", repushed[GC_STAT_TOTAL]); + PL ("dequeued2-in-this-cycle", dequeued2[GC_STAT_IN_THIS_CYCLE]); + PL ("dequeued2-in-this-gc", dequeued2[GC_STAT_IN_THIS_GC]); + PL ("dequeued2-in-last-cycle", dequeued2[GC_STAT_IN_LAST_CYCLE]); + PL ("dequeued2-in-last-gc", dequeued2[GC_STAT_IN_LAST_GC]); + PL ("dequeued2-total", dequeued2[GC_STAT_TOTAL]); + PL ("enqueued2-in-this-cycle", enqueued2[GC_STAT_IN_THIS_CYCLE]); + PL ("enqueued2-in-this-gc", enqueued2[GC_STAT_IN_THIS_GC]); + PL ("enqueued2-in-last-cycle", enqueued2[GC_STAT_IN_LAST_CYCLE]); + PL ("enqueued2-in-last-gc", enqueued2[GC_STAT_IN_LAST_GC]); + PL ("enqueued2-total", enqueued2[GC_STAT_TOTAL]); + PL ("dequeued-in-this-cycle", dequeued[GC_STAT_IN_THIS_CYCLE]); + PL ("dequeued-in-this-gc", dequeued[GC_STAT_IN_THIS_GC]); + PL ("dequeued-in-last-cycle", dequeued[GC_STAT_IN_LAST_CYCLE]); + PL ("dequeued-in-last-gc", dequeued[GC_STAT_IN_LAST_GC]); + PL ("dequeued-total", dequeued[GC_STAT_TOTAL]); + PL ("enqueued-in-this-cycle", enqueued[GC_STAT_IN_THIS_CYCLE]); + PL ("enqueued-in-this-gc", enqueued[GC_STAT_IN_THIS_GC]); + PL ("enqueued-in-last-cycle", enqueued[GC_STAT_IN_LAST_CYCLE]); + PL ("enqueued-in-last-gc", enqueued[GC_STAT_IN_LAST_GC]); + PL ("enqueued-total", enqueued[GC_STAT_TOTAL]); + PL ("n-cycles-in-this-gc", n_cycles[GC_STAT_IN_THIS_GC]); + PL ("n-cycles-in-last-gc", n_cycles[GC_STAT_IN_LAST_GC]); + PL ("n-cycles-total", n_cycles[GC_STAT_TOTAL]); + PL ("n-gc-total", n_gc[GC_STAT_TOTAL]); + PL ("phase", phase); + return pl; +} +#else /* not ERROR_CHECK_GC */ +# define GC_STAT_START_NEW_GC +# define GC_STAT_RESUME_GC +# define GC_STAT_ENQUEUED +# define GC_STAT_DEQUEUED +# define GC_STAT_REPUSHED +# define GC_STAT_REMOVED +#endif /* not ERROR_CHECK_GC */ +#endif /* NEW_GC */ + + +/************************************************************************/ +/* Recompute need to garbage collect */ +/************************************************************************/ + +int need_to_garbage_collect; + +#ifdef ERROR_CHECK_GC +int always_gc = 0; /* Debugging hack; equivalent to + (setq gc-cons-thresold -1) */ +#else +#define always_gc 0 +#endif + +/* True if it's time to garbage collect now. */ +void +recompute_need_to_garbage_collect (void) +{ + if (always_gc) + need_to_garbage_collect = 1; + else + need_to_garbage_collect = +#ifdef NEW_GC + write_barrier_enabled ? + (consing_since_gc > gc_cons_incremental_threshold) : +#endif /* NEW_GC */ + (consing_since_gc > gc_cons_threshold + && +#if 0 /* #### implement this better */ + (100 * consing_since_gc) / total_data_usage () >= + gc_cons_percentage +#else + (!total_gc_usage_set || + (100 * consing_since_gc) / total_gc_usage >= + gc_cons_percentage) +#endif + ); + recompute_funcall_allocation_flag (); +} + + + +/************************************************************************/ +/* Mark Phase */ +/************************************************************************/ + +static const struct memory_description lisp_object_description_1[] = { + { XD_LISP_OBJECT, 0 }, + { XD_END } +}; + +const struct sized_memory_description lisp_object_description = { + sizeof (Lisp_Object), + lisp_object_description_1 +}; + +#if defined (USE_KKCC) || defined (PDUMP) + +/* This function extracts the value of a count variable described somewhere + else in the description. It is converted corresponding to the type */ +EMACS_INT +lispdesc_indirect_count_1 (EMACS_INT code, + const struct memory_description *idesc, + const void *idata) +{ + EMACS_INT count; + const void *irdata; + + int line = XD_INDIRECT_VAL (code); + int delta = XD_INDIRECT_DELTA (code); + + irdata = ((char *) idata) + + lispdesc_indirect_count (idesc[line].offset, idesc, idata); + switch (idesc[line].type) + { + case XD_BYTECOUNT: + count = * (Bytecount *) irdata; + break; + case XD_ELEMCOUNT: + count = * (Elemcount *) irdata; + break; + case XD_HASHCODE: + count = * (Hashcode *) irdata; + break; + case XD_INT: + count = * (int *) irdata; + break; + case XD_LONG: + count = * (long *) irdata; + break; + default: + stderr_out ("Unsupported count type : %d (line = %d, code = %ld)\n", + idesc[line].type, line, (long) code); +#if defined(USE_KKCC) && defined(DEBUG_XEMACS) + if (gc_in_progress) + kkcc_backtrace (); +#endif +#ifdef PDUMP + if (in_pdump) + pdump_backtrace (); +#endif + count = 0; /* warning suppression */ + ABORT (); + } + count += delta; + return count; +} + +/* SDESC is a "description map" (basically, a list of offsets used for + successive indirections) and OBJ is the first object to indirect off of. + Return the description ultimately found. */ + +const struct sized_memory_description * +lispdesc_indirect_description_1 (const void *obj, + const struct sized_memory_description *sdesc) +{ + int pos; + + for (pos = 0; sdesc[pos].size >= 0; pos++) + obj = * (const void **) ((const char *) obj + sdesc[pos].size); + + return (const struct sized_memory_description *) obj; +} + +/* Compute the size of the data at RDATA, described by a single entry + DESC1 in a description array. OBJ and DESC are used for + XD_INDIRECT references. */ + +static Bytecount +lispdesc_one_description_line_size (void *rdata, + const struct memory_description *desc1, + const void *obj, + const struct memory_description *desc) +{ + union_switcheroo: + switch (desc1->type) + { + case XD_LISP_OBJECT_ARRAY: + { + EMACS_INT val = lispdesc_indirect_count (desc1->data1, desc, obj); + return (val * sizeof (Lisp_Object)); + } + case XD_LISP_OBJECT: + case XD_LO_LINK: + return sizeof (Lisp_Object); + case XD_OPAQUE_PTR: + return sizeof (void *); +#ifdef NEW_GC + case XD_LISP_OBJECT_BLOCK_PTR: +#endif /* NEW_GC */ + case XD_BLOCK_PTR: + { + EMACS_INT val = lispdesc_indirect_count (desc1->data1, desc, obj); + return val * sizeof (void *); + } + case XD_BLOCK_ARRAY: + { + EMACS_INT val = lispdesc_indirect_count (desc1->data1, desc, obj); + + return (val * + lispdesc_block_size + (rdata, + lispdesc_indirect_description (obj, desc1->data2.descr))); + } + case XD_OPAQUE_DATA_PTR: + return sizeof (void *); + case XD_UNION_DYNAMIC_SIZE: + { + /* If an explicit size was given in the first-level structure + description, use it; else compute size based on current union + constant. */ + const struct sized_memory_description *sdesc = + lispdesc_indirect_description (obj, desc1->data2.descr); + if (sdesc->size) + return sdesc->size; + else + { + desc1 = lispdesc_process_xd_union (desc1, desc, obj); + if (desc1) + goto union_switcheroo; + break; + } + } + case XD_UNION: + { + /* If an explicit size was given in the first-level structure + description, use it; else compute size based on maximum of all + possible structures. */ + const struct sized_memory_description *sdesc = + lispdesc_indirect_description (obj, desc1->data2.descr); + if (sdesc->size) + return sdesc->size; + else + { + int count; + Bytecount max_size = -1, size; + + desc1 = sdesc->description; + + for (count = 0; desc1[count].type != XD_END; count++) + { + size = lispdesc_one_description_line_size (rdata, + &desc1[count], + obj, desc); + if (size > max_size) + max_size = size; + } + return max_size; + } + } + case XD_ASCII_STRING: + return sizeof (void *); + case XD_DOC_STRING: + return sizeof (void *); + case XD_INT_RESET: + return sizeof (int); + case XD_BYTECOUNT: + return sizeof (Bytecount); + case XD_ELEMCOUNT: + return sizeof (Elemcount); + case XD_HASHCODE: + return sizeof (Hashcode); + case XD_INT: + return sizeof (int); + case XD_LONG: + return sizeof (long); + default: + stderr_out ("Unsupported dump type : %d\n", desc1->type); + ABORT (); + } + + return 0; +} + + +/* Return the size of the memory block (NOT necessarily a structure!) + described by SDESC and pointed to by OBJ. If SDESC records an + explicit size (i.e. non-zero), it is simply returned; otherwise, + the size is calculated by the maximum offset and the size of the + object at that offset, rounded up to the maximum alignment. In + this case, we may need the object, for example when retrieving an + "indirect count" of an inlined array (the count is not constant, + but is specified by one of the elements of the memory block). (It + is generally not a problem if we return an overly large size -- we + will simply end up reserving more space than necessary; but if the + size is too small we could be in serious trouble, in particular + with nested inlined structures, where there may be alignment + padding in the middle of a block. #### In fact there is an (at + least theoretical) problem with an overly large size -- we may + trigger a protection fault when reading from invalid memory. We + need to handle this -- perhaps in a stupid but dependable way, + i.e. by trapping SIGSEGV and SIGBUS.) */ + +Bytecount +lispdesc_block_size_1 (const void *obj, Bytecount size, + const struct memory_description *desc) +{ + EMACS_INT max_offset = -1; + int max_offset_pos = -1; + int pos; + + if (size) + return size; + + for (pos = 0; desc[pos].type != XD_END; pos++) + { + EMACS_INT offset = lispdesc_indirect_count (desc[pos].offset, desc, obj); + if (offset == max_offset) + { + stderr_out ("Two relocatable elements at same offset?\n"); + ABORT (); + } + else if (offset > max_offset) + { + max_offset = offset; + max_offset_pos = pos; + } + } + + if (max_offset_pos < 0) + return 0; + + { + Bytecount size_at_max; + size_at_max = + lispdesc_one_description_line_size ((char *) obj + max_offset, + &desc[max_offset_pos], obj, desc); + + /* We have no way of knowing the required alignment for this structure, + so just make it maximally aligned. */ + return MAX_ALIGN_SIZE (max_offset + size_at_max); + } +} +#endif /* defined (USE_KKCC) || defined (PDUMP) */ + +#ifdef MC_ALLOC +#define GC_CHECK_NOT_FREE(lheader) \ + gc_checking_assert (! LRECORD_FREE_P (lheader)); +#else /* MC_ALLOC */ +#define GC_CHECK_NOT_FREE(lheader) \ + gc_checking_assert (! LRECORD_FREE_P (lheader)); \ + gc_checking_assert (LHEADER_IMPLEMENTATION (lheader)->basic_p || \ + ! ((struct old_lcrecord_header *) lheader)->free) +#endif /* MC_ALLOC */ + +#ifdef USE_KKCC +/* The following functions implement the new mark algorithm. + They mark objects according to their descriptions. They + are modeled on the corresponding pdumper procedures. */ + +#if 0 +# define KKCC_STACK_AS_QUEUE 1 +#endif + +#ifdef DEBUG_XEMACS +/* The backtrace for the KKCC mark functions. */ +#define KKCC_INIT_BT_STACK_SIZE 4096 + +typedef struct +{ + void *obj; + const struct memory_description *desc; + int pos; +} kkcc_bt_stack_entry; + +static kkcc_bt_stack_entry *kkcc_bt; +static int kkcc_bt_stack_size; +static int kkcc_bt_depth = 0; + +static void +kkcc_bt_init (void) +{ + kkcc_bt_depth = 0; + kkcc_bt_stack_size = KKCC_INIT_BT_STACK_SIZE; + kkcc_bt = (kkcc_bt_stack_entry *) + xmalloc_and_zero (kkcc_bt_stack_size * sizeof (kkcc_bt_stack_entry)); + if (!kkcc_bt) + { + stderr_out ("KKCC backtrace stack init failed for size %d\n", + kkcc_bt_stack_size); + ABORT (); + } +} + +void +kkcc_backtrace (void) +{ + int i; + stderr_out ("KKCC mark stack backtrace :\n"); + for (i = kkcc_bt_depth - 1; i >= 0; i--) + { + Lisp_Object obj = wrap_pointer_1 (kkcc_bt[i].obj); + stderr_out (" [%d]", i); + if ((XRECORD_LHEADER (obj)->type >= lrecord_type_last_built_in_type) + || (!LRECORDP (obj)) + || (!XRECORD_LHEADER_IMPLEMENTATION (obj))) + { + stderr_out (" non Lisp Object"); + } + else + { + stderr_out (" %s", + XRECORD_LHEADER_IMPLEMENTATION (obj)->name); + } + stderr_out (" (addr: 0x%x, desc: 0x%x, ", + (int) kkcc_bt[i].obj, + (int) kkcc_bt[i].desc); + if (kkcc_bt[i].pos >= 0) + stderr_out ("pos: %d)\n", kkcc_bt[i].pos); + else + if (kkcc_bt[i].pos == -1) + stderr_out ("root set)\n"); + else if (kkcc_bt[i].pos == -2) + stderr_out ("dirty object)\n"); + } +} + +static void +kkcc_bt_stack_realloc (void) +{ + kkcc_bt_stack_size *= 2; + kkcc_bt = (kkcc_bt_stack_entry *) + xrealloc (kkcc_bt, kkcc_bt_stack_size * sizeof (kkcc_bt_stack_entry)); + if (!kkcc_bt) + { + stderr_out ("KKCC backtrace stack realloc failed for size %d\n", + kkcc_bt_stack_size); + ABORT (); + } +} + +static void +kkcc_bt_free (void) +{ + xfree_1 (kkcc_bt); + kkcc_bt = 0; + kkcc_bt_stack_size = 0; +} + +static void +kkcc_bt_push (void *obj, const struct memory_description *desc, + int level, int pos) +{ + kkcc_bt_depth = level; + kkcc_bt[kkcc_bt_depth].obj = obj; + kkcc_bt[kkcc_bt_depth].desc = desc; + kkcc_bt[kkcc_bt_depth].pos = pos; + kkcc_bt_depth++; + if (kkcc_bt_depth >= kkcc_bt_stack_size) + kkcc_bt_stack_realloc (); +} + +#else /* not DEBUG_XEMACS */ +#define kkcc_bt_init() +#define kkcc_bt_push(obj, desc, level, pos) +#endif /* not DEBUG_XEMACS */ + +/* Object memory descriptions are in the lrecord_implementation structure. + But copying them to a parallel array is much more cache-friendly. */ +const struct memory_description *lrecord_memory_descriptions[countof (lrecord_implementations_table)]; + +/* the initial stack size in kkcc_gc_stack_entries */ +#define KKCC_INIT_GC_STACK_SIZE 16384 + +typedef struct +{ + void *data; + const struct memory_description *desc; +#ifdef DEBUG_XEMACS + int level; + int pos; +#endif +} kkcc_gc_stack_entry; + + +static kkcc_gc_stack_entry *kkcc_gc_stack_ptr; +static int kkcc_gc_stack_front; +static int kkcc_gc_stack_rear; +static int kkcc_gc_stack_size; + +#define KKCC_INC(i) ((i + 1) % kkcc_gc_stack_size) +#define KKCC_INC2(i) ((i + 2) % kkcc_gc_stack_size) + +#define KKCC_GC_STACK_FULL (KKCC_INC2 (kkcc_gc_stack_rear) == kkcc_gc_stack_front) +#define KKCC_GC_STACK_EMPTY (KKCC_INC (kkcc_gc_stack_rear) == kkcc_gc_stack_front) + +static void +kkcc_gc_stack_init (void) +{ + kkcc_gc_stack_size = KKCC_INIT_GC_STACK_SIZE; + kkcc_gc_stack_ptr = (kkcc_gc_stack_entry *) + xmalloc_and_zero (kkcc_gc_stack_size * sizeof (kkcc_gc_stack_entry)); + if (!kkcc_gc_stack_ptr) + { + stderr_out ("stack init failed for size %d\n", kkcc_gc_stack_size); + ABORT (); + } + kkcc_gc_stack_front = 0; + kkcc_gc_stack_rear = kkcc_gc_stack_size - 1; +} + +static void +kkcc_gc_stack_free (void) +{ + xfree_1 (kkcc_gc_stack_ptr); + kkcc_gc_stack_ptr = 0; + kkcc_gc_stack_front = 0; + kkcc_gc_stack_rear = 0; + kkcc_gc_stack_size = 0; +} + +static void +kkcc_gc_stack_realloc (void) +{ + kkcc_gc_stack_entry *old_ptr = kkcc_gc_stack_ptr; + int old_size = kkcc_gc_stack_size; + kkcc_gc_stack_size *= 2; + kkcc_gc_stack_ptr = (kkcc_gc_stack_entry *) + xmalloc_and_zero (kkcc_gc_stack_size * sizeof (kkcc_gc_stack_entry)); + if (!kkcc_gc_stack_ptr) + { + stderr_out ("stack realloc failed for size %d\n", kkcc_gc_stack_size); + ABORT (); + } + if (kkcc_gc_stack_rear >= kkcc_gc_stack_front) + { + int number_elements = kkcc_gc_stack_rear - kkcc_gc_stack_front + 1; + memcpy (kkcc_gc_stack_ptr, &old_ptr[kkcc_gc_stack_front], + number_elements * sizeof (kkcc_gc_stack_entry)); + kkcc_gc_stack_front = 0; + kkcc_gc_stack_rear = number_elements - 1; + } + else + { + int number_elements = old_size - kkcc_gc_stack_front; + memcpy (kkcc_gc_stack_ptr, &old_ptr[kkcc_gc_stack_front], + number_elements * sizeof (kkcc_gc_stack_entry)); + memcpy (&kkcc_gc_stack_ptr[number_elements], &old_ptr[0], + (kkcc_gc_stack_rear + 1) * sizeof (kkcc_gc_stack_entry)); + kkcc_gc_stack_front = 0; + kkcc_gc_stack_rear = kkcc_gc_stack_rear + number_elements; + } + xfree_1 (old_ptr); +} + +static void +#ifdef DEBUG_XEMACS +kkcc_gc_stack_push_1 (void *data, const struct memory_description *desc, + int level, int pos) +#else +kkcc_gc_stack_push_1 (void *data, const struct memory_description *desc) +#endif +{ +#ifdef NEW_GC + GC_STAT_ENQUEUED; +#endif /* NEW_GC */ + if (KKCC_GC_STACK_FULL) + kkcc_gc_stack_realloc(); + kkcc_gc_stack_rear = KKCC_INC (kkcc_gc_stack_rear); + kkcc_gc_stack_ptr[kkcc_gc_stack_rear].data = data; + kkcc_gc_stack_ptr[kkcc_gc_stack_rear].desc = desc; +#ifdef DEBUG_XEMACS + kkcc_gc_stack_ptr[kkcc_gc_stack_rear].level = level; + kkcc_gc_stack_ptr[kkcc_gc_stack_rear].pos = pos; +#endif +} + +#ifdef DEBUG_XEMACS +#define kkcc_gc_stack_push(data, desc, level, pos) \ + kkcc_gc_stack_push_1 (data, desc, level, pos) +#else +#define kkcc_gc_stack_push(data, desc, level, pos) \ + kkcc_gc_stack_push_1 (data, desc) +#endif + +static kkcc_gc_stack_entry * +kkcc_gc_stack_pop (void) +{ + if (KKCC_GC_STACK_EMPTY) + return 0; +#ifdef NEW_GC + GC_STAT_DEQUEUED; +#endif /* NEW_GC */ +#ifndef KKCC_STACK_AS_QUEUE + /* stack behaviour */ + return &kkcc_gc_stack_ptr[kkcc_gc_stack_rear--]; +#else + /* queue behaviour */ + { + int old_front = kkcc_gc_stack_front; + kkcc_gc_stack_front = KKCC_INC (kkcc_gc_stack_front); + return &kkcc_gc_stack_ptr[old_front]; + } +#endif +} + +void +#ifdef DEBUG_XEMACS +kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj, int level, int pos) +#else +kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj) +#endif +{ + if (XTYPE (obj) == Lisp_Type_Record) + { + struct lrecord_header *lheader = XRECORD_LHEADER (obj); + const struct memory_description *desc; + GC_CHECK_LHEADER_INVARIANTS (lheader); + desc = RECORD_DESCRIPTION (lheader); + if (! MARKED_RECORD_HEADER_P (lheader)) + { +#ifdef NEW_GC + MARK_GREY (lheader); +#else /* not NEW_GC */ + MARK_RECORD_HEADER (lheader); +#endif /* not NEW_GC */ + kkcc_gc_stack_push ((void *) lheader, desc, level, pos); + } + } +} + +#ifdef NEW_GC +#ifdef DEBUG_XEMACS +#define kkcc_gc_stack_push_lisp_object(obj, level, pos) \ + kkcc_gc_stack_push_lisp_object_1 (obj, level, pos) +#else +#define kkcc_gc_stack_push_lisp_object(obj, level, pos) \ + kkcc_gc_stack_push_lisp_object_1 (obj) +#endif + +void +#ifdef DEBUG_XEMACS +kkcc_gc_stack_repush_dirty_object_1 (Lisp_Object obj, int level, int pos) +#else +kkcc_gc_stack_repush_dirty_object_1 (Lisp_Object obj) +#endif +{ + if (XTYPE (obj) == Lisp_Type_Record) + { + struct lrecord_header *lheader = XRECORD_LHEADER (obj); + const struct memory_description *desc; + GC_STAT_REPUSHED; + GC_CHECK_LHEADER_INVARIANTS (lheader); + desc = RECORD_DESCRIPTION (lheader); + MARK_GREY (lheader); + kkcc_gc_stack_push ((void*) lheader, desc, level, pos); + } +} +#endif /* NEW_GC */ + +#ifdef ERROR_CHECK_GC +#define KKCC_DO_CHECK_FREE(obj, allow_free) \ +do \ +{ \ + if (!allow_free && XTYPE (obj) == Lisp_Type_Record) \ + { \ + struct lrecord_header *lheader = XRECORD_LHEADER (obj); \ + GC_CHECK_NOT_FREE (lheader); \ + } \ +} while (0) +#else +#define KKCC_DO_CHECK_FREE(obj, allow_free) +#endif + +#ifdef ERROR_CHECK_GC +#ifdef DEBUG_XEMACS +static void +mark_object_maybe_checking_free_1 (Lisp_Object obj, int allow_free, + int level, int pos) +#else +static void +mark_object_maybe_checking_free_1 (Lisp_Object obj, int allow_free) +#endif +{ + KKCC_DO_CHECK_FREE (obj, allow_free); + kkcc_gc_stack_push_lisp_object (obj, level, pos); +} + +#ifdef DEBUG_XEMACS +#define mark_object_maybe_checking_free(obj, allow_free, level, pos) \ + mark_object_maybe_checking_free_1 (obj, allow_free, level, pos) +#else +#define mark_object_maybe_checking_free(obj, allow_free, level, pos) \ + mark_object_maybe_checking_free_1 (obj, allow_free) +#endif +#else /* not ERROR_CHECK_GC */ +#define mark_object_maybe_checking_free(obj, allow_free, level, pos) \ + kkcc_gc_stack_push_lisp_object (obj, level, pos) +#endif /* not ERROR_CHECK_GC */ + + +/* This function loops all elements of a struct pointer and calls + mark_with_description with each element. */ +static void +#ifdef DEBUG_XEMACS +mark_struct_contents_1 (const void *data, + const struct sized_memory_description *sdesc, + int count, int level, int pos) +#else +mark_struct_contents_1 (const void *data, + const struct sized_memory_description *sdesc, + int count) +#endif +{ + int i; + Bytecount elsize; + elsize = lispdesc_block_size (data, sdesc); + + for (i = 0; i < count; i++) + { + kkcc_gc_stack_push (((char *) data) + elsize * i, sdesc->description, + level, pos); + } +} + +#ifdef DEBUG_XEMACS +#define mark_struct_contents(data, sdesc, count, level, pos) \ + mark_struct_contents_1 (data, sdesc, count, level, pos) +#else +#define mark_struct_contents(data, sdesc, count, level, pos) \ + mark_struct_contents_1 (data, sdesc, count) +#endif + + +#ifdef NEW_GC +/* This function loops all elements of a struct pointer and calls + mark_with_description with each element. */ +static void +#ifdef DEBUG_XEMACS +mark_lisp_object_block_contents_1 (const void *data, + const struct sized_memory_description *sdesc, + int count, int level, int pos) +#else +mark_lisp_object_block_contents_1 (const void *data, + const struct sized_memory_description *sdesc, + int count) +#endif +{ + int i; + Bytecount elsize; + elsize = lispdesc_block_size (data, sdesc); + + for (i = 0; i < count; i++) + { + const Lisp_Object obj = wrap_pointer_1 (((char *) data) + elsize * i); + if (XTYPE (obj) == Lisp_Type_Record) + { + struct lrecord_header *lheader = XRECORD_LHEADER (obj); + const struct memory_description *desc; + GC_CHECK_LHEADER_INVARIANTS (lheader); + desc = sdesc->description; + if (! MARKED_RECORD_HEADER_P (lheader)) + { + MARK_GREY (lheader); + kkcc_gc_stack_push ((void *) lheader, desc, level, pos); + } + } + } +} + +#ifdef DEBUG_XEMACS +#define mark_lisp_object_block_contents(data, sdesc, count, level, pos) \ + mark_lisp_object_block_contents_1 (data, sdesc, count, level, pos) +#else +#define mark_lisp_object_block_contents(data, sdesc, count, level, pos) \ + mark_lisp_object_block_contents_1 (data, sdesc, count) +#endif +#endif /* not NEW_GC */ + +/* This function implements the KKCC mark algorithm. + Instead of calling mark_object, all the alive Lisp_Objects are pushed + on the kkcc_gc_stack. This function processes all elements on the stack + according to their descriptions. */ +static void +kkcc_marking ( +#ifdef NEW_GC + int cnt +#else /* not NEW_GC */ + int UNUSED(cnt) +#endif /* not NEW_GC */ + ) +{ + kkcc_gc_stack_entry *stack_entry = 0; + void *data = 0; + const struct memory_description *desc = 0; + int pos; +#ifdef NEW_GC + int count = cnt; +#endif /* NEW_GC */ +#ifdef DEBUG_XEMACS + int level = 0; +#endif + + while ((stack_entry = kkcc_gc_stack_pop ()) != 0) + { + data = stack_entry->data; + desc = stack_entry->desc; +#ifdef DEBUG_XEMACS + level = stack_entry->level + 1; +#endif + kkcc_bt_push (data, desc, stack_entry->level, stack_entry->pos); + +#ifdef NEW_GC + /* Mark black if object is currently grey. This first checks, + if the object is really allocated on the mc-heap. If it is, + it can be marked black; if it is not, it cannot be marked. */ + maybe_mark_black (data); +#endif /* NEW_GC */ + + if (!data) continue; + + gc_checking_assert (data); + gc_checking_assert (desc); + + for (pos = 0; desc[pos].type != XD_END; pos++) + { + const struct memory_description *desc1 = &desc[pos]; + const void *rdata = + (const char *) data + lispdesc_indirect_count (desc1->offset, + desc, data); + union_switcheroo: + + /* If the flag says don't mark, then don't mark. */ + if ((desc1->flags) & XD_FLAG_NO_KKCC) + continue; + + switch (desc1->type) + { + case XD_BYTECOUNT: + case XD_ELEMCOUNT: + case XD_HASHCODE: + case XD_INT: + case XD_LONG: + case XD_INT_RESET: + case XD_LO_LINK: + case XD_OPAQUE_PTR: + case XD_OPAQUE_DATA_PTR: + case XD_ASCII_STRING: + case XD_DOC_STRING: + break; + case XD_LISP_OBJECT: + { + const Lisp_Object *stored_obj = (const Lisp_Object *) rdata; + + /* Because of the way that tagged objects work (pointers and + Lisp_Objects have the same representation), XD_LISP_OBJECT + can be used for untagged pointers. They might be NULL, + though. */ + if (EQ (*stored_obj, Qnull_pointer)) + break; +#ifdef MC_ALLOC + mark_object_maybe_checking_free (*stored_obj, 0, level, pos); +#else /* not MC_ALLOC */ + mark_object_maybe_checking_free + (*stored_obj, (desc1->flags) & XD_FLAG_FREE_LISP_OBJECT, + level, pos); +#endif /* not MC_ALLOC */ + break; + } + case XD_LISP_OBJECT_ARRAY: + { + int i; + EMACS_INT count = + lispdesc_indirect_count (desc1->data1, desc, data); + + for (i = 0; i < count; i++) + { + const Lisp_Object *stored_obj = + (const Lisp_Object *) rdata + i; + + if (EQ (*stored_obj, Qnull_pointer)) + break; +#ifdef MC_ALLOC + mark_object_maybe_checking_free + (*stored_obj, 0, level, pos); +#else /* not MC_ALLOC */ + mark_object_maybe_checking_free + (*stored_obj, (desc1->flags) & XD_FLAG_FREE_LISP_OBJECT, + level, pos); +#endif /* not MC_ALLOC */ + } + break; + } +#ifdef NEW_GC + case XD_LISP_OBJECT_BLOCK_PTR: + { + EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc, + data); + const struct sized_memory_description *sdesc = + lispdesc_indirect_description (data, desc1->data2.descr); + const char *dobj = * (const char **) rdata; + if (dobj) + mark_lisp_object_block_contents + (dobj, sdesc, count, level, pos); + break; + } +#endif /* NEW_GC */ + case XD_BLOCK_PTR: + { + EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc, + data); + const struct sized_memory_description *sdesc = + lispdesc_indirect_description (data, desc1->data2.descr); + const char *dobj = * (const char **) rdata; + if (dobj) + mark_struct_contents (dobj, sdesc, count, level, pos); + break; + } + case XD_BLOCK_ARRAY: + { + EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc, + data); + const struct sized_memory_description *sdesc = + lispdesc_indirect_description (data, desc1->data2.descr); + + mark_struct_contents (rdata, sdesc, count, level, pos); + break; + } + case XD_UNION: + case XD_UNION_DYNAMIC_SIZE: + desc1 = lispdesc_process_xd_union (desc1, desc, data); + if (desc1) + goto union_switcheroo; + break; + + default: + stderr_out ("Unsupported description type : %d\n", desc1->type); + kkcc_backtrace (); + ABORT (); + } + } + +#ifdef NEW_GC + if (cnt) + if (!--count) + break; +#endif /* NEW_GC */ + } +} +#endif /* USE_KKCC */ + +/* I hate duplicating all this crap! */ +int +marked_p (Lisp_Object obj) +{ + /* Checks we used to perform. */ + /* if (EQ (obj, Qnull_pointer)) return 1; */ + /* if (!POINTER_TYPE_P (XGCTYPE (obj))) return 1; */ + /* if (PURIFIED (XPNTR (obj))) return 1; */ + + if (XTYPE (obj) == Lisp_Type_Record) + { + struct lrecord_header *lheader = XRECORD_LHEADER (obj); + + GC_CHECK_LHEADER_INVARIANTS (lheader); + + return MARKED_RECORD_HEADER_P (lheader); + } + return 1; +} + + +/* Mark reference to a Lisp_Object. If the object referred to has not been + seen yet, recursively mark all the references contained in it. */ +void +mark_object ( +#ifdef USE_KKCC + Lisp_Object UNUSED (obj) +#else + Lisp_Object obj +#endif + ) +{ +#ifdef USE_KKCC + /* this code should never be reached when configured for KKCC */ + stderr_out ("KKCC: Invalid mark_object call.\n"); + stderr_out ("Replace mark_object with kkcc_gc_stack_push_lisp_object.\n"); + ABORT (); +#else /* not USE_KKCC */ + + tail_recurse: + + /* Checks we used to perform */ + /* if (EQ (obj, Qnull_pointer)) return; */ + /* if (!POINTER_TYPE_P (XGCTYPE (obj))) return; */ + /* if (PURIFIED (XPNTR (obj))) return; */ + + if (XTYPE (obj) == Lisp_Type_Record) + { + struct lrecord_header *lheader = XRECORD_LHEADER (obj); + + GC_CHECK_LHEADER_INVARIANTS (lheader); + + /* We handle this separately, above, so we can mark free objects */ + GC_CHECK_NOT_FREE (lheader); + + /* All c_readonly objects have their mark bit set, + so that we only need to check the mark bit here. */ + if (! MARKED_RECORD_HEADER_P (lheader)) + { + MARK_RECORD_HEADER (lheader); + + if (RECORD_MARKER (lheader)) + { + obj = RECORD_MARKER (lheader) (obj); + if (!NILP (obj)) goto tail_recurse; + } + } + } +#endif /* not KKCC */ +} + + +/************************************************************************/ +/* Hooks */ +/************************************************************************/ + +/* Nonzero when calling certain hooks or doing other things where a GC + would be bad. It prevents infinite recursive calls to gc. */ +int gc_currently_forbidden; + +int +begin_gc_forbidden (void) +{ + return internal_bind_int (&gc_currently_forbidden, 1); +} + +void +end_gc_forbidden (int count) +{ + unbind_to (count); +} + +/* Hooks. */ +Lisp_Object Vpre_gc_hook, Qpre_gc_hook; +Lisp_Object Vpost_gc_hook, Qpost_gc_hook; + +/* Maybe we want to use this when doing a "panic" gc after memory_full()? */ +static int gc_hooks_inhibited; + +struct post_gc_action +{ + void (*fun) (void *); + void *arg; +}; + +typedef struct post_gc_action post_gc_action; + +typedef struct +{ + Dynarr_declare (post_gc_action); +} post_gc_action_dynarr; + +static post_gc_action_dynarr *post_gc_actions; + +/* Register an action to be called at the end of GC. + gc_in_progress is 0 when this is called. + This is used when it is discovered that an action needs to be taken, + but it's during GC, so it's not safe. (e.g. in a finalize method.) + + As a general rule, do not use Lisp objects here. + And NEVER signal an error. +*/ + +void +register_post_gc_action (void (*fun) (void *), void *arg) +{ + post_gc_action action; + + if (!post_gc_actions) + post_gc_actions = Dynarr_new (post_gc_action); + + action.fun = fun; + action.arg = arg; + + Dynarr_add (post_gc_actions, action); +} + +static void +run_post_gc_actions (void) +{ + int i; + + if (post_gc_actions) + { + for (i = 0; i < Dynarr_length (post_gc_actions); i++) + { + post_gc_action action = Dynarr_at (post_gc_actions, i); + (action.fun) (action.arg); + } + + Dynarr_reset (post_gc_actions); + } +} + + + +/************************************************************************/ +/* Garbage Collection */ +/************************************************************************/ + +/* Enable/disable incremental garbage collection during runtime. */ +int allow_incremental_gc; + +/* For profiling. */ +static Lisp_Object QSin_garbage_collection; + +/* Nonzero means display messages at beginning and end of GC. */ +int garbage_collection_messages; + +/* "Garbage collecting" */ +Lisp_Object Vgc_message; +Lisp_Object Vgc_pointer_glyph; +static const Ascbyte gc_default_message[] = "Garbage collecting"; +Lisp_Object Qgarbage_collecting; + +/* "Locals" during GC. */ +struct frame *f; +int speccount; +int cursor_changed; +Lisp_Object pre_gc_cursor; + +/* PROFILE_DECLARE */ +int do_backtrace; +struct backtrace backtrace; + +/* Maximum amount of C stack to save when a GC happens. */ +#ifndef MAX_SAVE_STACK +#define MAX_SAVE_STACK 0 /* 16000 */ +#endif + +void +gc_prepare (void) +{ +#if MAX_SAVE_STACK > 0 + char stack_top_variable; + extern char *stack_bottom; +#endif + +#ifdef NEW_GC + GC_STAT_START_NEW_GC; + GC_SET_PHASE (INIT_GC); +#endif /* NEW_GC */ + + do_backtrace = profiling_active || backtrace_with_internal_sections; + + assert (!gc_in_progress); + assert (!in_display || gc_currently_forbidden); + + PROFILE_RECORD_ENTERING_SECTION (QSin_garbage_collection); + + /* We used to call selected_frame() here. + + The following functions cannot be called inside GC + so we move to after the above tests. */ + { + Lisp_Object frame; + Lisp_Object device = Fselected_device (Qnil); + if (NILP (device)) /* Could happen during startup, eg. if always_gc */ + return; + frame = Fselected_frame (device); + if (NILP (frame)) + invalid_state ("No frames exist on device", device); + f = XFRAME (frame); + } + + pre_gc_cursor = Qnil; + cursor_changed = 0; + + need_to_signal_post_gc = 0; + recompute_funcall_allocation_flag (); + + if (!gc_hooks_inhibited) + run_hook_trapping_problems + (Qgarbage_collecting, Qpre_gc_hook, + INHIBIT_EXISTING_PERMANENT_DISPLAY_OBJECT_DELETION); + + /* Now show the GC cursor/message. */ + if (!noninteractive) + { + if (FRAME_WIN_P (f)) + { + Lisp_Object frame = wrap_frame (f); + Lisp_Object cursor = glyph_image_instance (Vgc_pointer_glyph, + FRAME_SELECTED_WINDOW (f), + ERROR_ME_NOT, 1); + pre_gc_cursor = f->pointer; + if (POINTER_IMAGE_INSTANCEP (cursor) + /* don't change if we don't know how to change back. */ + && POINTER_IMAGE_INSTANCEP (pre_gc_cursor)) + { + cursor_changed = 1; + Fset_frame_pointer (frame, cursor); + } + } + + /* Don't print messages to the stream device. */ + if (!cursor_changed && !FRAME_STREAM_P (f)) + { + if (garbage_collection_messages) + { + Lisp_Object args[2], whole_msg; + args[0] = (STRINGP (Vgc_message) ? Vgc_message : + build_msg_string (gc_default_message)); + args[1] = build_string ("..."); + whole_msg = Fconcat (2, args); + echo_area_message (f, (Ibyte *) 0, whole_msg, 0, -1, + Qgarbage_collecting); + } + } + } + + /***** Now we actually start the garbage collection. */ + + gc_in_progress = 1; +#ifndef NEW_GC + inhibit_non_essential_conversion_operations = 1; +#endif /* NEW_GC */ + +#if MAX_SAVE_STACK > 0 + + /* Save a copy of the contents of the stack, for debugging. */ + if (!purify_flag) + { + /* Static buffer in which we save a copy of the C stack at each GC. */ + static char *stack_copy; + static Bytecount stack_copy_size; + + ptrdiff_t stack_diff = &stack_top_variable - stack_bottom; + Bytecount stack_size = (stack_diff > 0 ? stack_diff : -stack_diff); + if (stack_size < MAX_SAVE_STACK) + { + if (stack_copy_size < stack_size) + { + stack_copy = (char *) xrealloc (stack_copy, stack_size); + stack_copy_size = stack_size; + } + + memcpy (stack_copy, + stack_diff > 0 ? stack_bottom : &stack_top_variable, + stack_size); + } + } +#endif /* MAX_SAVE_STACK > 0 */ + + /* Do some totally ad-hoc resource clearing. */ + /* #### generalize this? */ + clear_event_resource (); + cleanup_specifiers (); + cleanup_buffer_undo_lists (); +} + +void +gc_mark_root_set ( +#ifdef NEW_GC + enum gc_phase phase +#else /* not NEW_GC */ + void +#endif /* not NEW_GC */ + ) +{ +#ifdef NEW_GC + GC_SET_PHASE (phase); +#endif /* NEW_GC */ + + /* Mark all the special slots that serve as the roots of accessibility. */ + +#ifdef USE_KKCC +# define mark_object(obj) kkcc_gc_stack_push_lisp_object (obj, 0, -1) +#endif /* USE_KKCC */ + + { /* staticpro() */ + Lisp_Object **p = Dynarr_begin (staticpros); + Elemcount count; + for (count = Dynarr_length (staticpros); count; count--) + /* Need to check if the pointer in the staticpro array is not + NULL. A gc can occur after variable is added to the staticpro + array and _before_ it is correctly initialized. In this case + its value is NULL, which we have to catch here. */ + if (*p) + mark_object (**p++); + else + **p++; + } + + { /* staticpro_nodump() */ + Lisp_Object **p = Dynarr_begin (staticpros_nodump); + Elemcount count; + for (count = Dynarr_length (staticpros_nodump); count; count--) + /* Need to check if the pointer in the staticpro array is not + NULL. A gc can occur after variable is added to the staticpro + array and _before_ it is correctly initialized. In this case + its value is NULL, which we have to catch here. */ + if (*p) + mark_object (**p++); + else + **p++; + } + +#ifdef MC_ALLOC + { /* mcpro () */ + Lisp_Object *p = Dynarr_begin (mcpros); + Elemcount count; + for (count = Dynarr_length (mcpros); count; count--) + mark_object (*p++); + } +#endif /* MC_ALLOC */ + + { /* GCPRO() */ + struct gcpro *tail; + int i; + for (tail = gcprolist; tail; tail = tail->next) + for (i = 0; i < tail->nvars; i++) + mark_object (tail->var[i]); + } + + { /* specbind() */ + struct specbinding *bind; + for (bind = specpdl; bind != specpdl_ptr; bind++) + { + mark_object (bind->symbol); + mark_object (bind->old_value); + } + } + + { + struct catchtag *c; + for (c = catchlist; c; c = c->next) + { + mark_object (c->tag); + mark_object (c->val); + mark_object (c->actual_tag); + mark_object (c->backtrace); + } + } + + { + struct backtrace *backlist; + for (backlist = backtrace_list; backlist; backlist = backlist->next) + { + int nargs = backlist->nargs; + int i; + + mark_object (*backlist->function); + if (nargs < 0 /* nargs == UNEVALLED || nargs == MANY */ + /* might be fake (internal profiling entry) */ + && backlist->args) + mark_object (backlist->args[0]); + else + for (i = 0; i < nargs; i++) + mark_object (backlist->args[i]); + } + } + + mark_profiling_info (); +#ifdef USE_KKCC +# undef mark_object +#endif +} + +void +gc_finish_mark (void) +{ +#ifdef NEW_GC + GC_SET_PHASE (FINISH_MARK); +#endif /* NEW_GC */ + init_marking_ephemerons (); + + while (finish_marking_weak_hash_tables () > 0 || + finish_marking_weak_lists () > 0 || + continue_marking_ephemerons () > 0) +#ifdef USE_KKCC + { + kkcc_marking (0); + } +#else /* not USE_KKCC */ + ; +#endif /* not USE_KKCC */ + + /* At this point, we know which objects need to be finalized: we + still need to resurrect them */ + + while (finish_marking_ephemerons () > 0 || + finish_marking_weak_lists () > 0 || + finish_marking_weak_hash_tables () > 0) +#ifdef USE_KKCC + { + kkcc_marking (0); + } +#else /* not USE_KKCC */ + ; +#endif /* not USE_KKCC */ + + /* And prune (this needs to be called after everything else has been + marked and before we do any sweeping). */ + /* #### this is somewhat ad-hoc and should probably be an object + method */ + prune_weak_hash_tables (); + prune_weak_lists (); + prune_specifiers (); + prune_syntax_tables (); + + prune_ephemerons (); + prune_weak_boxes (); +} + +#ifdef NEW_GC +void +gc_finalize (void) +{ + GC_SET_PHASE (FINALIZE); + mc_finalize (); +} + +void +gc_sweep (void) +{ + GC_SET_PHASE (SWEEP); + mc_sweep (); +} +#endif /* NEW_GC */ + + +void +gc_finish (void) +{ +#ifdef NEW_GC + GC_SET_PHASE (FINISH_GC); +#endif /* NEW_GC */ + consing_since_gc = 0; +#ifndef DEBUG_XEMACS + /* Allow you to set it really fucking low if you really want ... */ + if (gc_cons_threshold < 10000) + gc_cons_threshold = 10000; +#endif + recompute_need_to_garbage_collect (); + +#ifndef NEW_GC + inhibit_non_essential_conversion_operations = 0; +#endif /* not NEW_GC */ + gc_in_progress = 0; + + run_post_gc_actions (); + + /******* End of garbage collection ********/ + + /* Now remove the GC cursor/message */ + if (!noninteractive) + { + if (cursor_changed) + Fset_frame_pointer (wrap_frame (f), pre_gc_cursor); + else if (!FRAME_STREAM_P (f)) + { + /* Show "...done" only if the echo area would otherwise be empty. */ + if (NILP (clear_echo_area (selected_frame (), + Qgarbage_collecting, 0))) + { + if (garbage_collection_messages) + { + Lisp_Object args[2], whole_msg; + args[0] = (STRINGP (Vgc_message) ? Vgc_message : + build_msg_string (gc_default_message)); + args[1] = build_msg_string ("... done"); + whole_msg = Fconcat (2, args); + echo_area_message (selected_frame (), (Ibyte *) 0, + whole_msg, 0, -1, + Qgarbage_collecting); + } + } + } + } + +#ifndef MC_ALLOC + if (!breathing_space) + { + breathing_space = malloc (4096 - MALLOC_OVERHEAD); + } +#endif /* not MC_ALLOC */ + + need_to_signal_post_gc = 1; + funcall_allocation_flag = 1; + + PROFILE_RECORD_EXITING_SECTION (QSin_garbage_collection); + +#ifdef NEW_GC + GC_SET_PHASE (NONE); +#endif /* NEW_GC */ +} + +#ifdef NEW_GC +void +gc_suspend_mark_phase (void) +{ + PROFILE_RECORD_EXITING_SECTION (QSin_garbage_collection); + write_barrier_enabled = 1; + consing_since_gc = 0; + vdb_start_dirty_bits_recording (); +} + +int +gc_resume_mark_phase (void) +{ + PROFILE_RECORD_ENTERING_SECTION (QSin_garbage_collection); + assert (write_barrier_enabled); + vdb_stop_dirty_bits_recording (); + write_barrier_enabled = 0; + return vdb_read_dirty_bits (); +} + +int +gc_mark (int incremental) +{ + GC_SET_PHASE (MARK); + if (!incremental) + { + kkcc_marking (0); + } + else + { + kkcc_marking (gc_incremental_traversal_threshold); + if (!KKCC_GC_STACK_EMPTY) + { + gc_suspend_mark_phase (); + return 0; + } + } + return 1; +} + +int +gc_resume_mark (int incremental) +{ + if (!incremental) + { + if (!KKCC_GC_STACK_EMPTY) + { + GC_STAT_RESUME_GC; + /* An incremental garbage collection is already running --- + now wrap it up and resume it atomically. */ + gc_resume_mark_phase (); + gc_mark_root_set (REPUSH_ROOT_SET); + kkcc_marking (0); + } + } + else + { + int repushed_objects; + int mark_work; + GC_STAT_RESUME_GC; + repushed_objects = gc_resume_mark_phase (); + mark_work = (gc_incremental_traversal_threshold > repushed_objects) ? + gc_incremental_traversal_threshold : repushed_objects; + kkcc_marking (mark_work); + if (KKCC_GC_STACK_EMPTY) + { + /* Mark root set again and finish up marking. */ + gc_mark_root_set (REPUSH_ROOT_SET); + kkcc_marking (0); + } + else + { + gc_suspend_mark_phase (); + return 0; + } + } + return 1; +} + + +void +gc_1 (int incremental) +{ + switch (GC_PHASE) + { + case NONE: + gc_prepare (); + kkcc_gc_stack_init(); +#ifdef DEBUG_XEMACS + kkcc_bt_init (); +#endif + case INIT_GC: + gc_mark_root_set (PUSH_ROOT_SET); + case PUSH_ROOT_SET: + if (!gc_mark (incremental)) + return; /* suspend gc */ + case MARK: + if (!KKCC_GC_STACK_EMPTY) + if (!gc_resume_mark (incremental)) + return; /* suspend gc */ + gc_finish_mark (); + kkcc_gc_stack_free (); +#ifdef DEBUG_XEMACS + kkcc_bt_free (); +#endif + case FINISH_MARK: + gc_finalize (); + case FINALIZE: + gc_sweep (); + case SWEEP: + gc_finish (); + case FINISH_GC: + break; + } +} + +void gc (int incremental) +{ + if (gc_currently_forbidden + || in_display + || preparing_for_armageddon) + return; + + /* Very important to prevent GC during any of the following + stuff that might run Lisp code; otherwise, we'll likely + have infinite GC recursion. */ + speccount = begin_gc_forbidden (); + + gc_1 (incremental); + + /* now stop inhibiting GC */ + unbind_to (speccount); +} + +void +gc_full (void) +{ + gc (0); +} + +DEFUN ("gc-full", Fgc_full, 0, 0, "", /* +This function performs a full garbage collection. If an incremental +garbage collection is already running, it completes without any +further interruption. This function guarantees that unused objects +are freed when it returns. Garbage collection happens automatically if +the client allocates more than `gc-cons-threshold' bytes of Lisp data +since the previous garbage collection. +*/ + ()) +{ + gc_full (); + return Qt; +} + +void +gc_incremental (void) +{ + gc (allow_incremental_gc); +} + +DEFUN ("gc-incremental", Fgc_incremental, 0, 0, "", /* +This function starts an incremental garbage collection. If an +incremental garbage collection is already running, the next cycle +starts. Note that this function has not necessarily freed any memory +when it returns. This function only guarantees, that the traversal of +the heap makes progress. The next cycle of incremental garbage +collection happens automatically if the client allocates more than +`gc-incremental-cons-threshold' bytes of Lisp data since previous +garbage collection. +*/ + ()) +{ + gc_incremental (); + return Qt; +} +#else /* not NEW_GC */ +void garbage_collect_1 (void) +{ + if (gc_in_progress + || gc_currently_forbidden + || in_display + || preparing_for_armageddon) + return; + + /* Very important to prevent GC during any of the following + stuff that might run Lisp code; otherwise, we'll likely + have infinite GC recursion. */ + speccount = begin_gc_forbidden (); + + gc_prepare (); +#ifdef USE_KKCC + kkcc_gc_stack_init(); +#ifdef DEBUG_XEMACS + kkcc_bt_init (); +#endif +#endif /* USE_KKCC */ + gc_mark_root_set (); +#ifdef USE_KKCC + kkcc_marking (0); +#endif /* USE_KKCC */ + gc_finish_mark (); +#ifdef USE_KKCC + kkcc_gc_stack_free (); +#ifdef DEBUG_XEMACS + kkcc_bt_free (); +#endif +#endif /* USE_KKCC */ + gc_sweep_1 (); + gc_finish (); + + /* now stop inhibiting GC */ + unbind_to (speccount); +} +#endif /* not NEW_GC */ + + +/************************************************************************/ +/* Initializations */ +/************************************************************************/ + +/* Initialization */ +static void +common_init_gc_early (void) +{ + Vgc_message = Qzero; + + gc_currently_forbidden = 0; + gc_hooks_inhibited = 0; + + need_to_garbage_collect = always_gc; + + gc_cons_threshold = GC_CONS_THRESHOLD; + gc_cons_percentage = 40; /* #### what is optimal? */ + total_gc_usage_set = 0; +#ifdef NEW_GC + gc_cons_incremental_threshold = GC_CONS_INCREMENTAL_THRESHOLD; + gc_incremental_traversal_threshold = GC_INCREMENTAL_TRAVERSAL_THRESHOLD; +#endif /* not NEW_GC */ +} + +void +init_gc_early (void) +{ +} + +void +reinit_gc_early (void) +{ + common_init_gc_early (); +} + +void +init_gc_once_early (void) +{ + common_init_gc_early (); +} + +void +syms_of_gc (void) +{ + DEFSYMBOL (Qpre_gc_hook); + DEFSYMBOL (Qpost_gc_hook); +#ifdef NEW_GC + DEFSUBR (Fgc_full); + DEFSUBR (Fgc_incremental); +#ifdef ERROR_CHECK_GC + DEFSUBR (Fgc_stats); +#endif /* not ERROR_CHECK_GC */ +#endif /* NEW_GC */ +} + +void +vars_of_gc (void) +{ + staticpro_nodump (&pre_gc_cursor); + + QSin_garbage_collection = build_msg_string ("(in garbage collection)"); + staticpro (&QSin_garbage_collection); + + DEFVAR_INT ("gc-cons-threshold", &gc_cons_threshold /* +*Number of bytes of consing between full garbage collections. +\"Consing\" is a misnomer in that this actually counts allocation +of all different kinds of objects, not just conses. +Garbage collection can happen automatically once this many bytes have been +allocated since the last garbage collection. All data types count. + +Garbage collection happens automatically when `eval' or `funcall' are +called. (Note that `funcall' is called implicitly as part of evaluation.) +By binding this temporarily to a large number, you can effectively +prevent garbage collection during a part of the program. + +Normally, you cannot set this value less than 10,000 (if you do, it is +automatically reset during the next garbage collection). However, if +XEmacs was compiled with DEBUG_XEMACS, this does not happen, allowing +you to set this value very low to track down problems with insufficient +GCPRO'ing. If you set this to a negative number, garbage collection will +happen at *EVERY* call to `eval' or `funcall'. This is an extremely +effective way to check GCPRO problems, but be warned that your XEmacs +will be unusable! You almost certainly won't have the patience to wait +long enough to be able to set it back. + +See also `consing-since-gc' and `gc-cons-percentage'. +*/ ); + + DEFVAR_INT ("gc-cons-percentage", &gc_cons_percentage /* +*Percentage of memory allocated between garbage collections. + +Garbage collection will happen if this percentage of the total amount of +memory used for data (see `lisp-object-memory-usage') has been allocated +since the last garbage collection. However, it will not happen if less +than `gc-cons-threshold' bytes have been allocated -- this sets an absolute +minimum in case very little data has been allocated or the percentage is +set very low. Set this to 0 to have garbage collection always happen after +`gc-cons-threshold' bytes have been allocated, regardless of current memory +usage. + +See also `consing-since-gc' and `gc-cons-threshold'. +*/ ); + +#ifdef NEW_GC + DEFVAR_INT ("gc-cons-incremental-threshold", + &gc_cons_incremental_threshold /* +*Number of bytes of consing between cycles of incremental garbage +collections. \"Consing\" is a misnomer in that this actually counts +allocation of all different kinds of objects, not just conses. The +next garbage collection cycle can happen automatically once this many +bytes have been allocated since the last garbage collection cycle. +All data types count. + +See also `gc-cons-threshold'. +*/ ); + + DEFVAR_INT ("gc-incremental-traversal-threshold", + &gc_incremental_traversal_threshold /* +*Number of elements processed in one cycle of incremental travesal. +*/ ); +#endif /* NEW_GC */ + + DEFVAR_BOOL ("purify-flag", &purify_flag /* +Non-nil means loading Lisp code in order to dump an executable. +This means that certain objects should be allocated in readonly space. +*/ ); + + DEFVAR_BOOL ("garbage-collection-messages", &garbage_collection_messages /* + Non-nil means display messages at start and end of garbage collection. +*/ ); + garbage_collection_messages = 0; + + DEFVAR_LISP ("pre-gc-hook", &Vpre_gc_hook /* +Function or functions to be run just before each garbage collection. +Interrupts, garbage collection, and errors are inhibited while this hook +runs, so be extremely careful in what you add here. In particular, avoid +consing, and do not interact with the user. +*/ ); + Vpre_gc_hook = Qnil; + + DEFVAR_LISP ("post-gc-hook", &Vpost_gc_hook /* +Function or functions to be run just after each garbage collection. +Interrupts, garbage collection, and errors are inhibited while this hook +runs. Each hook is called with one argument which is an alist with +finalization data. +*/ ); + Vpost_gc_hook = Qnil; + + DEFVAR_LISP ("gc-message", &Vgc_message /* +String to print to indicate that a garbage collection is in progress. +This is printed in the echo area. If the selected frame is on a +window system and `gc-pointer-glyph' specifies a value (i.e. a pointer +image instance) in the domain of the selected frame, the mouse pointer +will change instead of this message being printed. +*/ ); + Vgc_message = build_string (gc_default_message); + + DEFVAR_LISP ("gc-pointer-glyph", &Vgc_pointer_glyph /* +Pointer glyph used to indicate that a garbage collection is in progress. +If the selected window is on a window system and this glyph specifies a +value (i.e. a pointer image instance) in the domain of the selected +window, the pointer will be changed as specified during garbage collection. +Otherwise, a message will be printed in the echo area, as controlled +by `gc-message'. +*/ ); + +#ifdef NEW_GC + DEFVAR_BOOL ("allow-incremental-gc", &allow_incremental_gc /* +*Non-nil means to allow incremental garbage collection. Nil prevents +*incremental garbage collection, the garbage collector then only does +*full collects (even if (gc-incremental) is called). +*/ ); +#endif /* NEW_GC */ +} + +void +complex_vars_of_gc (void) +{ + Vgc_pointer_glyph = Fmake_glyph_internal (Qpointer); +} diff -urN 21.5.23/src/gc.h 21.5.24/src/gc.h --- 21.5.23/src/gc.h Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/gc.h Fri Nov 25 10:42:04 2005 @@ -0,0 +1,179 @@ +/* New incremental garbage collector for XEmacs. + Copyright (C) 2005 Marcus Crestani. + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF. */ + +#ifndef INCLUDED_gc_h_ +#define INCLUDED_gc_h_ + +BEGIN_C_DECLS + + +#ifdef NEW_GC +/************************************************************************/ +/* Incremental Statistics */ +/************************************************************************/ +#ifdef ERROR_CHECK_GC +void gc_stat_print_stats (void); +void gc_stat_finalized (void); +void gc_stat_freed (void); +void gc_stat_explicitly_freed (void); +void gc_stat_explicitly_tried_freed (void); +# define GC_STAT_FINALIZED gc_stat_finalized () +# define GC_STAT_FREED gc_stat_freed () +# define GC_STAT_EXPLICITLY_FREED gc_stat_explicitly_freed () +# define GC_STAT_EXPLICITLY_TRIED_FREED gc_stat_explicitly_tried_freed () +#else /* not ERROR_CHECK_GC */ +# define GC_STAT_FINALIZED +# define GC_STAT_FREED +# define GC_STAT_EXPLICITLY_FREED +# define GC_STAT_EXPLICITLY_TRIED_FREED +#endif /* not ERROR_CHECK_GC */ +#endif /* not NEW_GC */ + + +/************************************************************************/ +/* Global Variables */ +/************************************************************************/ +/* Number of bytes of consing done since the last GC. */ +extern EMACS_INT consing_since_gc; + +/* Number of bytes of consing done since startup. */ +extern EMACS_UINT total_consing; + +/* Number of bytes of current allocated heap objects. */ +extern EMACS_INT total_gc_usage; + +/* If the above is set. */ +extern int total_gc_usage_set; + +/* Number of bytes of consing since gc before another gc should be done. */ +extern EMACS_INT gc_cons_threshold; + +/* Percentage of consing of total data size before another GC. */ +extern EMACS_INT gc_cons_percentage; + +#ifdef NEW_GC +/* Number of bytes of consing since gc before another cycle of the gc + should be done in incremental mode. */ +extern EMACS_INT gc_cons_incremental_threshold; + +/* Nonzero during gc */ +extern int gc_in_progress; + +/* Nonzero during write barrier */ +extern int write_barrier_enabled; + +/* Enable/disable incremental garbage collection during runtime. */ +extern int allow_incremental_gc; +#endif /* NEW_GC */ + + +/************************************************************************/ +/* Prototypes */ +/************************************************************************/ + +#ifndef MALLOC_OVERHEAD +#ifdef GNU_MALLOC +#define MALLOC_OVERHEAD 0 +#elif defined (rcheck) +#define MALLOC_OVERHEAD 20 +#else +#define MALLOC_OVERHEAD 8 +#endif +#endif /* MALLOC_OVERHEAD */ + +#ifdef ERROR_CHECK_GC +#define GC_CHECK_LHEADER_INVARIANTS(lheader) do { \ + struct lrecord_header * GCLI_lh = (lheader); \ + assert (GCLI_lh != 0); \ + assert (GCLI_lh->type < (unsigned int) lrecord_type_count); \ +} while (0) +#else +#define GC_CHECK_LHEADER_INVARIANTS(lheader) +#endif + +void recompute_need_to_garbage_collect (void); + + +/* KKCC mark algorithm. */ +#ifdef DEBUG_XEMACS +void kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj, int level, int pos); +#define kkcc_gc_stack_push_lisp_object(obj, level, pos) \ + kkcc_gc_stack_push_lisp_object_1 (obj, level, pos) +void kkcc_gc_stack_repush_dirty_object_1 (Lisp_Object obj, int level, int pos); +#define kkcc_gc_stack_repush_dirty_object(obj) \ + kkcc_gc_stack_repush_dirty_object_1 (obj, 0, -2) +void kkcc_backtrace (void); +#else +void kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj); +#define kkcc_gc_stack_push_lisp_object(obj, level, pos) \ + kkcc_gc_stack_push_lisp_object_1 (obj) +void kkcc_gc_stack_repush_dirty_object_1 (Lisp_Object obj); +#define kkcc_gc_stack_repush_dirty_object(obj) \ + kkcc_gc_stack_repush_dirty_object_1 (obj) +#define kkcc_backtrace() +#endif + +#ifdef NEW_GC + +/* Repush objects that are caught by the write barrier. */ +#define gc_write_barrier(obj) kkcc_gc_stack_repush_dirty_object (obj); + + +/* GC functions: */ + +/* Perform a full garbage collection without interruption. If an + incremental garbage collection is already running it is completed + without further interruption. This function calls gc() with a + negative or zero argument. */ +void gc_full (void); + +/* This function starts an incremental garbage collection. If an + incremental garbage collection is already running, the next cycle + of traversal work is done, or the garbage collection is completed + when no more traversal work has to be done. This function calls gc + with a positive argument, indicating how many objects can be + traversed in this cycle. */ +void gc_incremental (void); +#endif /* NEW_GC */ + +/* Initializers */ +void init_gc_early (void); +void reinit_gc_early (void); +void init_gc_once_early (void); + +void syms_of_gc (void); +void vars_of_gc (void); +void complex_vars_of_gc (void); + +#ifndef NEW_GC +/* Needed prototypes due to the garbage collector code move from + alloc.c to gc.c. */ +void gc_sweep_1 (void); + +#ifndef MC_ALLOC +extern void *breathing_space; +#endif /* not MC_ALLOC */ +#endif /* not NEW_GC */ + +END_C_DECLS + +#endif /* INCLUDED_gc_h_ */ diff -urN 21.5.23/src/glyphs-eimage.c 21.5.24/src/glyphs-eimage.c --- 21.5.23/src/glyphs-eimage.c Tue Sep 27 14:48:25 2005 +++ 21.5.24/src/glyphs-eimage.c Sat Nov 26 20:46:08 2005 @@ -36,6 +36,7 @@ TIFF code by Jareth Hein for 21.0 TODO: Convert images.el to C and stick it in here? + This file is really repetitious; can we refactor? */ #include diff -urN 21.5.23/src/glyphs-gtk.c 21.5.24/src/glyphs-gtk.c --- 21.5.23/src/glyphs-gtk.c Tue Sep 27 14:48:26 2005 +++ 21.5.24/src/glyphs-gtk.c Tue Nov 22 20:24:44 2005 @@ -686,8 +686,8 @@ Lisp_Object pointer_bg) { Lisp_Object device = IMAGE_INSTANCE_DEVICE (ii); - GdkPixmap *pixmap = IMAGE_INSTANCE_X_PIXMAP (ii); - GdkPixmap *mask = (GdkPixmap *) IMAGE_INSTANCE_PIXMAP_MASK (ii); + GdkPixmap *pixmap = IMAGE_INSTANCE_GTK_PIXMAP (ii); + GdkPixmap *mask = (GdkPixmap *) IMAGE_INSTANCE_GTK_MASK (ii); GdkColor fg, bg; int xhot = 0, yhot = 0; int w, h; @@ -1310,7 +1310,7 @@ gdk_window_get_geometry (pixmap, NULL, NULL, &w, &h, &depth); IMAGE_INSTANCE_GTK_PIXMAP (ii) = pixmap; - IMAGE_INSTANCE_PIXMAP_MASK (ii) = (void*)mask; + IMAGE_INSTANCE_PIXMAP_MASK (ii) = mask; IMAGE_INSTANCE_GTK_COLORMAP (ii) = cmap; IMAGE_INSTANCE_GTK_PIXELS (ii) = 0; IMAGE_INSTANCE_GTK_NPIXELS (ii) = 0; @@ -1329,11 +1329,12 @@ break; case IMAGE_POINTER: - if (xpmattrs.valuemask & XpmHotspot) - IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = make_int (xpmattrs.x_hotspot); - if (xpmattrs.valuemask & XpmHotspot) - IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) = make_int (xpmattrs.y_hotspot); - + /* #### Gtk does not give us access to the hotspots of a pixmap */ + + IMAGE_INSTANCE_PIXMAP_HOTSPOT_X (ii) = 1; + IMAGE_INSTANCE_PIXMAP_HOTSPOT_Y (ii) = 1; + + image_instance_convert_to_pointer (ii, instantiator, pointer_fg, pointer_bg); break; diff -urN 21.5.23/src/glyphs-gtk.h 21.5.24/src/glyphs-gtk.h --- 21.5.23/src/glyphs-gtk.h Sat May 15 16:43:09 2004 +++ 21.5.24/src/glyphs-gtk.h Tue Nov 22 20:24:45 2005 @@ -86,7 +86,7 @@ (GTK_IMAGE_INSTANCE_DATA (i)->pixmaps[slice]) #define IMAGE_INSTANCE_GTK_PIXMAP_SLICES(i) \ (GTK_IMAGE_INSTANCE_DATA (i)->pixmaps) -#define IMAGE_INSTANCE_GTK_MASK(i) (GdkPixmap*)(IMAGE_INSTANCE_PIXMAP_MASK (i)) +#define IMAGE_INSTANCE_GTK_MASK(i) ((GdkPixmap*)(IMAGE_INSTANCE_PIXMAP_MASK (i))) #define IMAGE_INSTANCE_GTK_CURSOR(i) (GTK_IMAGE_INSTANCE_DATA (i)->cursor) #define IMAGE_INSTANCE_GTK_COLORMAP(i) (GTK_IMAGE_INSTANCE_DATA (i)->colormap) #define IMAGE_INSTANCE_GTK_PIXELS(i) (GTK_IMAGE_INSTANCE_DATA (i)->pixels) diff -urN 21.5.23/src/glyphs-widget.c 21.5.24/src/glyphs-widget.c --- 21.5.23/src/glyphs-widget.c Fri Nov 5 08:06:33 2004 +++ 21.5.24/src/glyphs-widget.c Sat Nov 26 20:46:08 2005 @@ -346,7 +346,7 @@ #### property is still a valid function since we have to be able to extract information from the actual widget. - #### update_widget should probably be re-written to use the + #### widget_update should probably be re-written to use the instantiator. We probably want to keep a record of the differences also to make this easy. We would also need a pending_instantiator so that changes could be delayed. */ @@ -1296,7 +1296,7 @@ allow users to stack widgets vertically or horizontally. These layouts also allow the widgets to be centered (space evenly distributed), left or right justified (fixed spacing widgets - stacked against the left, righ, top or bottom edge). Unfortunately + stacked against the left, right, top or bottom edge). Unfortunately this doesn't allow widgets in different layouts to be aligned. For instance how should the search dialog be organized for alignment? The obvious choice of two vertical columns does not work since the @@ -1642,8 +1642,8 @@ DEFUN ("widget-logical-to-character-width", Fwidget_logical_to_character_width, 1, 3, 0, /* Convert the width in logical widget units to characters. -Logical widget units do not take into account adjusments made for -layout borders, so this adjusment is approximated. +Logical widget units do not take into account adjustments made for +layout borders, so this adjustment is approximated. */ (width, UNUSED (face), domain)) { @@ -1668,7 +1668,7 @@ DEFUN ("widget-logical-to-character-height", Fwidget_logical_to_character_height, 1, 3, 0, /* Convert the height in logical widget units to characters. -Logical widget units do not take into account adjusments made for +Logical widget units do not take into account adjustments made for layout borders, so this adjustment is approximated. If the components of a widget layout are justified to the top or the @@ -1819,7 +1819,7 @@ IIFORMAT_VALID_KEYWORD (scrollbar, Q_face, check_valid_face); } -static void image_instantiator_progress_guage (void) +static void image_instantiator_progress_gauge (void) { INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (progress_gauge, "progress-gauge"); IIFORMAT_HAS_SHARED_METHOD (progress_gauge, validate, widget); @@ -1927,7 +1927,7 @@ image_instantiator_edit_fields(); image_instantiator_combo_box(); image_instantiator_scrollbar(); - image_instantiator_progress_guage(); + image_instantiator_progress_gauge(); image_instantiator_tree_view(); image_instantiator_tab_control(); image_instantiator_labels(); diff -urN 21.5.23/src/glyphs-x.c 21.5.24/src/glyphs-x.c --- 21.5.23/src/glyphs-x.c Tue Sep 27 14:48:26 2005 +++ 21.5.24/src/glyphs-x.c Sat Nov 26 20:46:08 2005 @@ -239,7 +239,7 @@ color.green = qtable->gm[i] ? qtable->gm[i] << 8 : 0; color.blue = qtable->bm[i] ? qtable->bm[i] << 8 : 0; color.flags = DoRed | DoGreen | DoBlue; - res = allocate_nearest_color (dpy, cmap, vis, &color); + res = x_allocate_nearest_color (dpy, cmap, vis, &color); if (res > 0 && res < 3) { DO_REALLOC(*pixtbl, pixcount, n+1, unsigned long); @@ -2364,21 +2364,41 @@ bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel); + { + Lisp_Object face = IMAGE_INSTANCE_WIDGET_FACE (ii); + Lisp_Font_Instance *fi = + XFONT_INSTANCE (query_string_font (IMAGE_INSTANCE_WIDGET_TEXT (ii), + face, + domain)); + XFontStruct *fs = FONT_INSTANCE_X_FONT (fi); +#ifdef USE_XFT + XftFont *rf = FONT_INSTANCE_X_XFTFONT (fi); + + if (rf) + { + /* #### What to do about Motif? */ + lw_add_widget_value_arg (wv, XtNxftFont, (XtArgVal) rf); + } +#endif + + if (fs) + { #ifdef LWLIB_WIDGETS_MOTIF - fontList = XmFontListCreate - (FONT_INSTANCE_X_FONT - (XFONT_INSTANCE (query_string_font - (IMAGE_INSTANCE_WIDGET_TEXT (ii), - IMAGE_INSTANCE_WIDGET_FACE (ii), - domain))), XmSTRING_DEFAULT_CHARSET); - lw_add_widget_value_arg (wv, XmNfontList, (XtArgVal)fontList); + fontList = XmFontListCreate (fs, XmSTRING_DEFAULT_CHARSET); + lw_add_widget_value_arg (wv, XmNfontList, (XtArgVal) fontList); #endif - lw_add_widget_value_arg - (wv, XtNfont, (XtArgVal)FONT_INSTANCE_X_FONT - (XFONT_INSTANCE (query_string_font - (IMAGE_INSTANCE_WIDGET_TEXT (ii), - IMAGE_INSTANCE_WIDGET_FACE (ii), - domain)))); + lw_add_widget_value_arg (wv, XtNfont, (XtArgVal) fs); + } + +#ifdef USE_XFT + /* #### sanity check, should wrap in appropriate ERROR_CHECK macro */ + if (!rf && !fs) + warn_when_safe_lispobj + (intern ("xft"), Qdebug, + Fcons (build_string ("missing font in update_widget_face"), + Fface_name (face))); +#endif + } wv->change = VISIBLE_CHANGE; /* #### Megahack - but its just getting too complicated to do this in the right place. */ diff -urN 21.5.23/src/glyphs.c 21.5.24/src/glyphs.c --- 21.5.23/src/glyphs.c Mon Oct 24 19:07:37 2005 +++ 21.5.24/src/glyphs.c Fri Nov 25 10:42:04 2005 @@ -4540,10 +4540,12 @@ expose events that are going to come and ignore them as required. */ +#ifndef NEW_GC struct expose_ignore_blocktype { Blocktype_declare (struct expose_ignore); } *the_expose_ignore_blocktype; +#endif /* not NEW_GC */ int check_for_ignored_expose (struct frame* f, int x, int y, int width, int height) @@ -4574,7 +4576,11 @@ if (ei == f->subwindow_exposures_tail) f->subwindow_exposures_tail = prev; +#ifdef NEW_GC + mc_free (ei); +#else /* not NEW_GC */ Blocktype_free (the_expose_ignore_blocktype, ei); +#endif /* not NEW_GC */ return 1; } prev = ei; @@ -4589,7 +4595,11 @@ { struct expose_ignore *ei; +#ifdef NEW_GC + ei = alloc_lrecord_type (struct expose_ignore, &lrecord_expose_ignore); +#else /* not NEW_GC */ ei = Blocktype_alloc (the_expose_ignore_blocktype); +#endif /* not NEW_GC */ ei->next = NULL; ei->x = x; @@ -5430,8 +5440,10 @@ void reinit_vars_of_glyphs (void) { +#ifndef NEW_GC the_expose_ignore_blocktype = Blocktype_new (struct expose_ignore_blocktype); +#endif /* not NEW_GC */ hold_ignored_expose_registration = 0; } diff -urN 21.5.23/src/glyphs.h 21.5.24/src/glyphs.h --- 21.5.23/src/glyphs.h Mon Oct 24 19:07:37 2005 +++ 21.5.24/src/glyphs.h Fri Nov 25 10:42:04 2005 @@ -1067,6 +1067,9 @@ typedef struct glyph_cachel glyph_cachel; struct glyph_cachel { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* not NEW_GC */ Lisp_Object glyph; unsigned int dirty :1; /* I'm copying faces here. I'm not @@ -1082,6 +1085,19 @@ unsigned short descent; }; +#ifdef NEW_GC +typedef struct glyph_cachel Lisp_Glyph_Cachel; + +DECLARE_LRECORD (glyph_cachel, Lisp_Glyph_Cachel); + +#define XGLYPH_CACHEL(x) \ + XRECORD (x, glyph_cachel, Lisp_Glyph_Cachel) +#define wrap_glyph_cachel(p) wrap_record (p, glyph_cachel) +#define GLYPH_CACHEL_P(x) RECORDP (x, glyph_cachel) +#define CHECK_GLYPH_CACHEL(x) CHECK_RECORD (x, glyph_cachel) +#define CONCHECK_GLYPH_CACHEL(x) CONCHECK_RECORD (x, glyph_cachel) +#endif /* NEW_GC */ + #define CONT_GLYPH_INDEX (glyph_index) 0 #define TRUN_GLYPH_INDEX (glyph_index) 1 #define HSCROLL_GLYPH_INDEX (glyph_index) 2 @@ -1179,10 +1195,22 @@ struct expose_ignore { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ int x, y; int width, height; struct expose_ignore *next; }; + +#ifdef NEW_GC +DECLARE_LRECORD (expose_ignore, struct expose_ignore); +#define XEXPOSE_IGNORE(x) XRECORD (x, expose_ignore, struct expose_ignore) +#define wrap_expose_ignore(p) wrap_record (p, expose_ignore) +#define EXPOSE_IGNOREP(x) RECORDP (x, expose_ignore) +#define CHECK_EXPOSE_IGNORE(x) CHECK_RECORD (x, expose_ignore) +#define CONCHECK_EXPOSE_IGNORE(x) CONCHECK_RECORD (x, expose_ignore) +#endif /* NEW_GC */ int check_for_ignored_expose (struct frame* f, int x, int y, int width, int height); diff -urN 21.5.23/src/gtk-xemacs.c 21.5.24/src/gtk-xemacs.c --- 21.5.23/src/gtk-xemacs.c Sat Oct 16 22:08:58 2004 +++ 21.5.24/src/gtk-xemacs.c Tue Nov 22 20:24:45 2005 @@ -410,6 +410,8 @@ redisplay_redraw_exposed_area (f, a->x, a->y, a->width, a->height); return (TRUE); } + + return FALSE; } Lisp_Object diff -urN 21.5.23/src/inline.c 21.5.24/src/inline.c --- 21.5.23/src/inline.c Sun Mar 9 11:27:44 2003 +++ 21.5.24/src/inline.c Sat Nov 26 20:46:09 2005 @@ -67,11 +67,22 @@ #include "syntax.h" #include "window.h" -#if defined (HAVE_LDAP) && !defined (HAVE_SHLIB) +/* If we demand !defined (HAVE_SHLIB) the INLINE_HEADERS aren't instantiated. + This only shows up in --with-error-checking=types builds AFAIK. + On Mac OS X 10.3.9 with the Apple toolchain (GCC 3.3) gives a buildtime + link error (the lrecord error_check functions are undefined). + Debian GNU/Linux `sid' with GCC 4.0.3 prerelease & binutils 2.16.91 gives + a runtime link error (the lrecord error_check functions are undefined). + It is possible that this can be fixed trickily by appropriately defining + INLINE, or that it should be done in the module itself somehow. If you + can do it better or more elegantly, please feel free to consult me. + --stephen 2005-11-07 */ +#if defined (HAVE_LDAP) #include "../modules/ldap/eldap.h" #endif -#if defined (HAVE_POSTGRESQL) && !defined (HAVE_SHLIB) +/* We can't ask for !defined (HAVE_SHLIB). See HAVE_LDAP, above. */ +#if defined (HAVE_POSTGRESQL) #include "../modules/postgresql/postgresql.h" #endif @@ -89,6 +100,9 @@ #ifdef HAVE_X_WINDOWS #include "glyphs-x.h" +#ifdef USE_XFT +#include "xft-fonts.h" +#endif #endif #ifdef HAVE_MS_WINDOWS diff -urN 21.5.23/src/keymap.c 21.5.24/src/keymap.c --- 21.5.23/src/keymap.c Tue Oct 25 20:16:25 2005 +++ 21.5.24/src/keymap.c Sat Nov 26 22:20:23 2005 @@ -1331,7 +1331,7 @@ #endif /* unused */ ) invalid_argument - ("Invalid (FSF Emacs) key format (see doc of define-key)", + ("Invalid (GNU Emacs) key format (see doc of define-key)", *keysym); /* #### Ok, this is a bit more dubious - make people not lose if they @@ -1780,7 +1780,7 @@ DEFUN ("define-key", Fdefine_key, 3, 3, 0, /* Define key sequence KEYS, in KEYMAP, as DEF. KEYMAP is a keymap object. -KEYS is the sequence of keystrokes to bind, described below. +KEYS is the key sequence to bind, described below. DEF is anything that can be a key's definition: nil (means key is undefined in this keymap); a command (a Lisp function suitable for interactive calling); @@ -1793,68 +1793,96 @@ (DEFN should be a valid definition in its own right); or a cons (KEYMAP . CHAR), meaning use definition of CHAR in map KEYMAP. -Contrary to popular belief, the world is not ASCII. When running under a -window system, XEmacs can tell the difference between, for example, the -keystrokes control-h, control-shift-h, and backspace. You can, in fact, -bind different commands to each of these. - -A `key sequence' is a set of keystrokes. A `keystroke' is a keysym and some -set of modifiers (such as control and meta). A `keysym' is what is printed -on the keys on your keyboard. - -A keysym may be represented by a symbol, or (if and only if it is equivalent -to a character with a code in the range 32 - 255) by a character or its -equivalent code. The `A' key may be represented by the symbol `A', the -character `?A', or by the number 65. The `break' key may be represented -only by the symbol `break'. - -A keystroke may be represented by a list: the last element of the list -is the key (a symbol, character, or number, as above) and the -preceding elements are the symbolic names of modifier keys (control, -meta, super, hyper, alt, and shift). Thus, the sequence control-b is -represented by the forms `(control b)', `(control ?b)', and `(control -98)'. A keystroke may also be represented by an event object, as -returned by the `next-command-event' and `read-key-sequence' -functions. - -Note that in this context, the keystroke `control-b' is *not* represented -by the number 2 (the ASCII code for ^B) or the character `?\^B'. See below. - -The `shift' modifier is somewhat of a special case. You should not (and -cannot) use `(meta shift a)' to mean `(meta A)', since for characters that -have ASCII equivalents, the state of the shift key is implicit in the -keysym (a vs. A). You also cannot say `(shift =)' to mean `+', as that -sort of thing varies from keyboard to keyboard. The shift modifier is for -use only with characters that do not have a second keysym on the same key, -such as `backspace' and `tab'. - -A key sequence is a vector of keystrokes. As a degenerate case, elements -of this vector may also be keysyms if they have no modifiers. That is, -the `A' keystroke is represented by all of these forms: +A `key sequence' is a vector of one or more keystrokes. +A `keystroke' is a list containing a key and zero or more modifiers. The +key must be the last element of the list. +A `key' is a symbol corresponding to a key on the keyboard, or to a mouse +gesture. Mouse clicks are denoted by symbols prefixed with "button", +followed by a digit for which button, and optionally "up". Thus `button1' +means the down-stroke and `button1up' means the up-stroke when clicking +mouse button 1. +A `modifier' is a symbol naming a physical key which is only "noticed" by +XEmacs when chorded with another key. The `shift' modifier is a special +case. You cannot use `(meta shift a)' to mean `(meta A)', since for +characters that have ASCII equivalents, the state of the shift key is +implicit in the keysym (a vs. A). You also cannot say `(shift =)' to mean +`+', as that correspondence varies from keyboard to keyboard. The shift +modifier can only be applied to keys that do not have a second keysym on the +same key, such as `backspace' and `tab'. A mouse click may be combined with +modifiers to create a compound "keystroke". + +The keys, mouse gestures, and modifiers that are available depend on your +console and its driver. At a minimum the ASCII graphic characters will be +available as keys, and shift, control, and meta as modifiers. + +To find out programmatically what a key is bound to, use `key-binding' to +check all applicable keymaps, or `lookup-key' to check a specific keymap. +The documentation for `key-binding' also contains a description of which +keymaps are applicable in various situations. `where-is-internal' does +the opposite of `key-binding', i.e. searches keymaps for the keys that +map to a particular binding. + +If you are confused about why a particular key sequence is generating a +particular binding, and looking through the keymaps doesn't help, setting +the variable `debug-emacs-events' may help. If not, try checking +what's in `function-key-map' and `key-translation-map'. + +When running under a window system, typically the repertoire of keys is +vastly expanded. XEmacs does its best to use the names defined on each +platform. Also, when running under a window system, XEmacs can tell the +difference between the keystrokes control-h, control-shift-h, and backspace. +If the symbols differ, you can bind different actions to each. For mouse +clicks, different commands may be bound to the up and down strokes, though +that is probably not what you want, so be careful. + +Variant representations: + +Besides the canonical representation as a vector of lists of symbols, +`define-key' also accepts a number of abbreviations, aliases, and variants +for convenience, compatibility, and internal use. + +A keystroke may be represented by a key; this is treated as though it were a +list containing that key as the only element. A keystroke may also be +represented by an event object, as returned by the `next-command-event' and +`read-key-sequence' functions. A key sequence may be represented by a +single keystroke; this is treated as a vector containing that keystroke as +its only element. + +A key may be represented by a character or its equivalent integer code, +if and only if it is equivalent to a character with a code in the range +32 - 255. + +For backward compatibility, a key sequence may also be represented by a +string. In this case, it represents the key sequence(s) that would +produce that sequence of ASCII characters in a purely ASCII world. An +alternative string representation is keyboard macro notation, which can +be translated to the canonical representation with `kbd'. + +Examples: + +The key sequence `A' (which invokes `self-insert-command') is represented +by all of these forms: A ?A 65 (A) (?A) (65) [A] [?A] [65] [(A)] [(?A)] [(65)] -the `control-a' keystroke is represented by these forms: +The key sequence `control-a' is represented by these forms: (control A) (control ?A) (control 65) [(control A)] [(control ?A)] [(control 65)] -the key sequence `control-c control-a' is represented by these forms: + +The key sequence `control-c control-a' is represented by these forms: [(control c) (control a)] [(control ?c) (control ?a)] [(control 99) (control 65)] etc. +The keystroke `control-b' *may not* be represented by the number 2 (the +ASCII code for ^B) or the character `?\^B'. + +The `break' key may be represented only by the symbol `break'. + Mouse button clicks work just like keypresses: (control button1) means pressing the left mouse button while holding down the control key. -\[(control c) (shift button3)] means control-c, hold shift, click right. - -Commands may be bound to the mouse-button up-stroke rather than the down- -stroke as well. `button1' means the down-stroke, and `button1up' means the -up-stroke. Different commands may be bound to the up and down strokes, -though that is probably not what you want, so be careful. -For backward compatibility, a key sequence may also be represented by a -string. In this case, it represents the key sequence(s) that would -produce that sequence of ASCII characters in a purely ASCII world. For -example, a string containing the ASCII backspace character, "\\^H", would -represent two key sequences: `(control h)' and `backspace'. Binding a +A string containing the ASCII backspace character, "\\^H", would represent +two key sequences: `(control h)' and `backspace'. Binding a command to this will actually bind both of those key sequences. Likewise for the following pairs: @@ -1873,22 +1901,6 @@ (define-key global-map [(control x) (control i)] \'command-2) (define-key global-map [(control x) tab] \'command-3) - -Of course, all of this applies only when running under a window system. If -you're talking to XEmacs through a TTY connection, you don't get any of -these features. - -To find out programmatically what a key is bound to, use `key-binding' to -check all applicable keymaps, or `lookup-key' to check a specific keymap. -The documentation for `key-binding' also contains a description of which -keymaps are applicable in various situations. `where-is-internal' does -the opposite of `key-binding', i.e. searches keymaps for the keys that -map to a particular binding. - -If you are confused about why a particular key sequence is generating a -particular binding, and looking through the keymaps doesn't help, setting -the variable `debug-emacs-events' may help. If not, try checking -what's in `function-key-map' and `key-translation-map'. */ (keymap, keys, def)) { @@ -1925,8 +1937,8 @@ for example) then the binding will be made for both keysyms. This is done if the user binds a command to a string, as in - (define-key map "\^H" 'something), but not when using one of the new - syntaxes, like (define-key map '(control h) 'something). + (define-key map "\^H" 'something), but not when using the canonical + syntax (define-key map '(control h) 'something). */ ascii_hack = (STRINGP (keys)); @@ -3462,17 +3474,20 @@ Return list of keys that invoke DEFINITION in KEYMAPS. KEYMAPS can be either a keymap (meaning search in that keymap and the current global keymap) or a list of keymaps (meaning search in exactly -those keymaps and no others). If KEYMAPS is nil, search in the currently -applicable maps for EVENT-OR-KEYS (this is equivalent to specifying -`(current-keymaps EVENT-OR-KEYS)' as the argument to KEYMAPS). +those keymaps and no others). If optional 3rd arg FIRSTONLY is non-nil, return a vector representing the first key sequence found, rather than a list of all possible key sequences. -If optional 4th arg NOINDIRECT is non-nil, don't follow indirections - to other keymaps or slots. This makes it possible to search for an - indirect definition itself. +Optional 4th argument NOINDIRECT is ignored. (GNU Emacs uses it to allow +searching for an indirect keymap by inhibiting following of indirections to +keymaps or slots, but XEmacs doesn't need it because keymaps are a type.) + +If optional 5th argument EVENT-OR-KEYS is non-nil and KEYMAPS is nil, +search in the currently applicable maps for EVENT-OR-KEYS (this is +equivalent to specifying `(current-keymaps EVENT-OR-KEYS)' as the +argument to KEYMAPS). */ (definition, keymaps, firstonly, UNUSED (noindirect), event_or_keys)) { diff -urN 21.5.23/src/lisp.h 21.5.24/src/lisp.h --- 21.5.23/src/lisp.h Mon Oct 24 19:07:38 2005 +++ 21.5.24/src/lisp.h Sat Nov 26 20:46:09 2005 @@ -1253,6 +1253,7 @@ /* ------------------------ dynamic arrays ------------------- */ +#ifndef NEW_GC #ifdef ERROR_CHECK_STRUCTURES #define Dynarr_declare(type) \ type *base; \ @@ -1380,6 +1381,7 @@ void *stack_like_malloc (Bytecount size); void stack_like_free (void *val); +#endif /* not NEW_GC */ /************************************************************************/ /** Definitions of more complex types **/ @@ -1466,6 +1468,7 @@ typedef struct Lisp_Image_Instance Lisp_Image_Instance; /* glyphs.h */ typedef struct Lisp_Gui_Item Lisp_Gui_Item; +#ifndef NEW_GC /* ------------------------------- */ /* Dynarr typedefs */ /* ------------------------------- */ @@ -1550,6 +1553,7 @@ { Dynarr_declare (struct console_type_entry); } console_type_entry_dynarr; +#endif /* not NEW_GC */ /* ------------------------------- */ /* enum typedefs */ @@ -1666,6 +1670,7 @@ #define XPNTR(x) ((void *) XPNTRVAL(x)) +#ifndef NEW_GC /* WARNING WARNING WARNING. You must ensure on your own that proper GC protection is provided for the elements in this array. */ typedef struct @@ -1677,6 +1682,7 @@ { Dynarr_declare (Lisp_Object *); } Lisp_Object_ptr_dynarr; +#endif /* not NEW_GC */ /* Close your eyes now lest you vomit or spontaneously combust ... */ @@ -1707,6 +1713,284 @@ BEGIN_C_DECLS +#ifdef NEW_GC +/* ------------------------ dynamic arrays ------------------- */ + +#ifdef ERROR_CHECK_STRUCTURES +#define Dynarr_declare(type) \ + struct lrecord_header header; \ + type *base; \ + const struct lrecord_implementation *lisp_imp; \ + int locked; \ + int elsize; \ + int cur; \ + int largest; \ + int max +#else +#define Dynarr_declare(type) \ + struct lrecord_header header; \ + type *base; \ + const struct lrecord_implementation *lisp_imp; \ + int elsize; \ + int cur; \ + int largest; \ + int max +#endif /* ERROR_CHECK_STRUCTURES */ + +typedef struct dynarr +{ + Dynarr_declare (void); +} Dynarr; + +MODULE_API void *Dynarr_newf (int elsize); +MODULE_API void Dynarr_resize (void *dy, Elemcount size); +MODULE_API void Dynarr_insert_many (void *d, const void *el, int len, int start); +MODULE_API void Dynarr_delete_many (void *d, int start, int len); +MODULE_API void Dynarr_free (void *d); + +MODULE_API void *Dynarr_lisp_newf (int elsize, + const struct lrecord_implementation + *dynarr_imp, + const struct lrecord_implementation *imp); + +#define Dynarr_lisp_new(type, dynarr_imp, imp) \ + ((type##_dynarr *) Dynarr_lisp_newf (sizeof (type), dynarr_imp, imp)) +#define Dynarr_lisp_new2(dynarr_type, type, dynarr_imp, imp) \ + ((dynarr_type *) Dynarr_lisp_newf (sizeof (type)), dynarr_imp, imp) +#define Dynarr_new(type) ((type##_dynarr *) Dynarr_newf (sizeof (type))) +#define Dynarr_new2(dynarr_type, type) \ + ((dynarr_type *) Dynarr_newf (sizeof (type))) +#define Dynarr_at(d, pos) ((d)->base[pos]) +#define Dynarr_atp(d, pos) (&Dynarr_at (d, pos)) +#define Dynarr_begin(d) Dynarr_atp (d, 0) +#define Dynarr_end(d) Dynarr_atp (d, Dynarr_length (d) - 1) +#define Dynarr_sizeof(d) ((d)->cur * (d)->elsize) + +#ifdef ERROR_CHECK_STRUCTURES +DECLARE_INLINE_HEADER ( +Dynarr * +Dynarr_verify_1 (void *d, const Ascbyte *file, int line) +) +{ + Dynarr *dy = (Dynarr *) d; + assert_at_line (dy->cur >= 0 && dy->cur <= dy->largest && + dy->largest <= dy->max, file, line); + return dy; +} + +DECLARE_INLINE_HEADER ( +Dynarr * +Dynarr_verify_mod_1 (void *d, const Ascbyte *file, int line) +) +{ + Dynarr *dy = (Dynarr *) d; + assert_at_line (!dy->locked, file, line); + assert_at_line (dy->cur >= 0 && dy->cur <= dy->largest && + dy->largest <= dy->max, file, line); + return dy; +} + +#define Dynarr_verify(d) Dynarr_verify_1 (d, __FILE__, __LINE__) +#define Dynarr_verify_mod(d) Dynarr_verify_mod_1 (d, __FILE__, __LINE__) +#define Dynarr_lock(d) (Dynarr_verify_mod (d)->locked = 1) +#define Dynarr_unlock(d) ((d)->locked = 0) +#else +#define Dynarr_verify(d) (d) +#define Dynarr_verify_mod(d) (d) +#define Dynarr_lock(d) +#define Dynarr_unlock(d) +#endif /* ERROR_CHECK_STRUCTURES */ + +#define Dynarr_length(d) (Dynarr_verify (d)->cur) +#define Dynarr_largest(d) (Dynarr_verify (d)->largest) +#define Dynarr_reset(d) (Dynarr_verify_mod (d)->cur = 0) +#define Dynarr_add_many(d, el, len) Dynarr_insert_many (d, el, len, (d)->cur) +#define Dynarr_insert_many_at_start(d, el, len) \ + Dynarr_insert_many (d, el, len, 0) +#define Dynarr_add_literal_string(d, s) Dynarr_add_many (d, s, sizeof (s) - 1) +#define Dynarr_add_lisp_string(d, s, codesys) \ +do { \ + Lisp_Object dyna_ls_s = (s); \ + Lisp_Object dyna_ls_cs = (codesys); \ + Extbyte *dyna_ls_eb; \ + Bytecount dyna_ls_bc; \ + \ + LISP_STRING_TO_SIZED_EXTERNAL (dyna_ls_s, dyna_ls_eb, \ + dyna_ls_bc, dyna_ls_cs); \ + Dynarr_add_many (d, dyna_ls_eb, dyna_ls_bc); \ +} while (0) + +#if 1 +#define Dynarr_add(d, el) \ +do { \ + if (Dynarr_verify_mod (d)->cur >= (d)->max) \ + Dynarr_resize ((d), (d)->cur+1); \ + ((d)->base)[(d)->cur] = (el); \ + \ + if ((d)->lisp_imp) \ + set_lheader_implementation \ + ((struct lrecord_header *)&(((d)->base)[(d)->cur]), \ + (d)->lisp_imp); \ + \ + (d)->cur++; \ + if ((d)->cur > (d)->largest) \ + (d)->largest = (d)->cur; \ +} while (0) +#else +#define Dynarr_add(d, el) ( \ + Dynarr_verify_mod (d)->cur >= (d)->max ? Dynarr_resize ((d), (d)->cur+1) : \ + (void) 0, \ + ((d)->base)[(d)->cur++] = (el), \ + (d)->cur > (d)->largest ? (d)->largest = (d)->cur : (int) 0) +#endif + + +/* The following defines will get you into real trouble if you aren't + careful. But they can save a lot of execution time when used wisely. */ +#define Dynarr_increment(d) (Dynarr_verify_mod (d)->cur++) +#define Dynarr_set_size(d, n) (Dynarr_verify_mod (d)->cur = n) + +#define Dynarr_pop(d) \ + (assert ((d)->cur > 0), Dynarr_verify_mod (d)->cur--, \ + Dynarr_at (d, (d)->cur)) +#define Dynarr_delete(d, i) Dynarr_delete_many (d, i, 1) +#define Dynarr_delete_by_pointer(d, p) \ + Dynarr_delete_many (d, (p) - ((d)->base), 1) + +#define Dynarr_delete_object(d, el) \ +do \ +{ \ + REGISTER int i; \ + for (i = Dynarr_length (d) - 1; i >= 0; i--) \ + { \ + if (el == Dynarr_at (d, i)) \ + Dynarr_delete_many (d, i, 1); \ + } \ +} while (0) + +#ifdef MEMORY_USAGE_STATS +struct overhead_stats; +Bytecount Dynarr_memory_usage (void *d, struct overhead_stats *stats); +#endif + +void *stack_like_malloc (Bytecount size); +void stack_like_free (void *val); + +/* ------------------------------- */ +/* Dynarr typedefs */ +/* ------------------------------- */ + +/* Dynarr typedefs -- basic types first */ + +typedef struct +{ + Dynarr_declare (Ibyte); +} Ibyte_dynarr; + +typedef struct +{ + Dynarr_declare (Extbyte); +} Extbyte_dynarr; + +typedef struct +{ + Dynarr_declare (Ichar); +} Ichar_dynarr; + +typedef struct +{ + Dynarr_declare (char); +} char_dynarr; + +typedef struct +{ + Dynarr_declare (char *); +} char_ptr_dynarr; + +typedef unsigned char unsigned_char; +typedef struct +{ + Dynarr_declare (unsigned char); +} unsigned_char_dynarr; + +typedef unsigned long unsigned_long; +typedef struct +{ + Dynarr_declare (unsigned long); +} unsigned_long_dynarr; + +typedef struct +{ + Dynarr_declare (int); +} int_dynarr; + +typedef struct +{ + Dynarr_declare (Charbpos); +} Charbpos_dynarr; + +typedef struct +{ + Dynarr_declare (Bytebpos); +} Bytebpos_dynarr; + +typedef struct +{ + Dynarr_declare (Charcount); +} Charcount_dynarr; + +typedef struct +{ + Dynarr_declare (Bytecount); +} Bytecount_dynarr; + +/* Dynarr typedefs -- more complex types */ + +typedef struct +{ + Dynarr_declare (struct face_cachel); +} face_cachel_dynarr; + +DECLARE_LRECORD (face_cachel_dynarr, face_cachel_dynarr); +#define XFACE_CACHEL_DYNARR(x) \ + XRECORD (x, face_cachel_dynarr, face_cachel_dynarr) +#define wrap_face_cachel_dynarr(p) wrap_record (p, face_cachel_dynarr) +#define FACE_CACHEL_DYNARRP(x) RECORDP (x, face_cachel_dynarr) +#define CHECK_FACE_CACHEL_DYNARR(x) CHECK_RECORD (x, face_cachel_dynarr) +#define CONCHECK_FACE_CACHEL_DYNARR(x) CONCHECK_RECORD (x, face_cachel_dynarr) + +typedef struct +{ + Dynarr_declare (struct glyph_cachel); +} glyph_cachel_dynarr; + +DECLARE_LRECORD (glyph_cachel_dynarr, glyph_cachel_dynarr); +#define XGLYPH_CACHEL_DYNARR(x) \ + XRECORD (x, glyph_cachel_dynarr, glyph_cachel_dynarr) +#define wrap_glyph_cachel_dynarr(p) wrap_record (p, glyph_cachel_dynarr) +#define GLYPH_CACHEL_DYNARRP(x) RECORDP (x, glyph_cachel_dynarr) +#define CHECK_GLYPH_CACHEL_DYNARR(x) CHECK_RECORD (x, glyph_cachel_dynarr) +#define CONCHECK_GLYPH_CACHEL_DYNARR(x) \ + CONCHECK_RECORD (x, glyph_cachel_dynarr) + +typedef struct +{ + Dynarr_declare (struct console_type_entry); +} console_type_entry_dynarr; + +/* WARNING WARNING WARNING. You must ensure on your own that proper + GC protection is provided for the elements in this array. */ +typedef struct +{ + Dynarr_declare (Lisp_Object); +} Lisp_Object_dynarr; + +typedef struct +{ + Dynarr_declare (Lisp_Object *); +} Lisp_Object_ptr_dynarr; +#endif /* NEW_GC */ + /*------------------------------ unbound -------------------------------*/ /* Qunbound is a special Lisp_Object (actually of type @@ -2282,6 +2566,67 @@ /*------------------------------ string --------------------------------*/ +#ifdef NEW_GC +struct Lisp_String_Direct_Data +{ + struct lrecord_header header; + Bytecount size; + Ibyte data[1]; +}; +typedef struct Lisp_String_Direct_Data Lisp_String_Direct_Data; + +DECLARE_MODULE_API_LRECORD (string_direct_data, Lisp_String_Direct_Data); +#define XSTRING_DIRECT_DATA(x) \ + XRECORD (x, string_direct_data, Lisp_String_Direct_Data) +#define wrap_string_direct_data(p) wrap_record (p, string_direct_data) +#define STRING_DIRECT_DATAP(x) RECORDP (x, string_direct_data) +#define CHECK_STRING_DIRECT_DATA(x) CHECK_RECORD (x, string_direct_data) +#define CONCHECK_STRING_DIRECT_DATA(x) CONCHECK_RECORD (x, string_direct_data) + +#define XSTRING_DIRECT_DATA_SIZE(x) XSTRING_DIRECT_DATA (x)->size +#define XSTRING_DIRECT_DATA_DATA(x) XSTRING_DIRECT_DATA (x)->data + + +struct Lisp_String_Indirect_Data +{ + struct lrecord_header header; + Bytecount size; + Ibyte *data; +}; +typedef struct Lisp_String_Indirect_Data Lisp_String_Indirect_Data; + +DECLARE_MODULE_API_LRECORD (string_indirect_data, Lisp_String_Indirect_Data); +#define XSTRING_INDIRECT_DATA(x) \ + XRECORD (x, string_indirect_data, Lisp_String_Indirect_Data) +#define wrap_string_indirect_data(p) wrap_record (p, string_indirect_data) +#define STRING_INDIRECT_DATAP(x) RECORDP (x, string_indirect_data) +#define CHECK_STRING_INDIRECT_DATA(x) CHECK_RECORD (x, string_indirect_data) +#define CONCHECK_STRING_INDIRECT_DATA(x) \ + CONCHECK_RECORD (x, string_indirect_data) + +#define XSTRING_INDIRECT_DATA_SIZE(x) XSTRING_INDIRECT_DATA (x)->size +#define XSTRING_INDIRECT_DATA_DATA(x) XSTRING_INDIRECT_DATA (x)->data + + +#define XSTRING_DATA_SIZE(s) ((s)->indirect)? \ + XSTRING_INDIRECT_DATA_SIZE ((s)->data_object): \ + XSTRING_DIRECT_DATA_SIZE ((s)->data_object) +#define XSTRING_DATA_DATA(s) ((s)->indirect)? \ + XSTRING_INDIRECT_DATA_DATA ((s)->data_object): \ + XSTRING_DIRECT_DATA_DATA ((s)->data_object) + +#define XSET_STRING_DATA_SIZE(s, len) \ + if ((s)->indirect) \ + XSTRING_INDIRECT_DATA_SIZE ((s)->data_object) = len; \ + else \ + XSTRING_DIRECT_DATA_SIZE ((s)->data_object) = len +#define XSET_STRING_DATA_DATA(s, ptr) \ + if ((s)->indirect) \ + XSTRING_INDIRECT_DATA_DATA ((s)->data_object) = ptr; \ + else \ + XSTRING_DIRECT_DATA_DATA ((s)->data_object) = ptr +#endif /* NEW_GC */ + struct Lisp_String { union @@ -2308,13 +2653,22 @@ #endif /* not MC_ALLOC */ } v; } u; +#ifdef NEW_GC + int indirect; + Lisp_Object data_object; +#else /* not NEW_GC */ Bytecount size_; Ibyte *data_; +#endif /* not NEW_GC */ Lisp_Object plist; }; typedef struct Lisp_String Lisp_String; +#ifdef MC_ALLOC +#define MAX_STRING_ASCII_BEGIN ((1 << 22) - 1) +#else #define MAX_STRING_ASCII_BEGIN ((1 << 21) - 1) +#endif DECLARE_MODULE_API_LRECORD (string, Lisp_String); #define XSTRING(x) XRECORD (x, string, Lisp_String) @@ -2328,14 +2682,30 @@ stuff there. */ /* Operations on Lisp_String *'s; only ones left */ +#ifdef NEW_GC +#define set_lispstringp_indirect(s) ((s)->indirect = 1) +#define set_lispstringp_length(s, len) XSET_STRING_DATA_SIZE (s, len) +#define set_lispstringp_data(s, ptr) XSET_STRING_DATA_DATA (s, ptr) +#else /* not NEW_GC */ #define set_lispstringp_length(s, len) ((void) ((s)->size_ = (len))) #define set_lispstringp_data(s, ptr) ((void) ((s)->data_ = (ptr))) +#endif /* not NEW_GC */ /* Operations on strings as Lisp_Objects. Don't manipulate Lisp_String *'s in any new code. */ +#ifdef NEW_GC +#define STRING_DATA_OBJECT(s) ((s)->data_object) +#define XSTRING_DATA_OBJECT(s) (STRING_DATA_OBJECT (XSTRING (s))) +#define XSTRING_LENGTH(s) (XSTRING_DATA_SIZE (XSTRING (s))) +#else /* not NEW_GC */ #define XSTRING_LENGTH(s) (XSTRING (s)->size_) +#endif /* not NEW_GC */ #define XSTRING_PLIST(s) (XSTRING (s)->plist) +#ifdef NEW_GC +#define XSTRING_DATA(s) (XSTRING_DATA_DATA (XSTRING (s))) +#else /* not NEW_GC */ #define XSTRING_DATA(s) (XSTRING (s)->data_ + 0) +#endif /* not NEW_GC */ #define XSTRING_ASCII_BEGIN(s) (XSTRING (s)->u.v.ascii_begin + 0) #define XSET_STRING_LENGTH(s, ptr) set_lispstringp_length (XSTRING (s), ptr) #define XSET_STRING_DATA(s, ptr) set_lispstringp_data (XSTRING (s), ptr) @@ -2559,89 +2929,146 @@ #define marker_next(m) ((m)->next) #define marker_prev(m) ((m)->prev) -/*------------------------------- char ---------------------------------*/ +/*-------------------basic int (no connection to char)------------------*/ -#define CHARP(x) (XTYPE (x) == Lisp_Type_Char) +#define ZEROP(x) EQ (x, Qzero) #ifdef ERROR_CHECK_TYPES +#define XINT(x) XINT_1 (x, __FILE__, __LINE__) + DECLARE_INLINE_HEADER ( -Ichar -XCHAR_1 (Lisp_Object obj, const Ascbyte *file, int line) +EMACS_INT +XINT_1 (Lisp_Object obj, const Ascbyte *file, int line) ) { - assert_at_line (CHARP (obj), file, line); - return XCHARVAL (obj); + assert_at_line (INTP (obj), file, line); + return XREALINT (obj); } -#define XCHAR(x) XCHAR_1 (x, __FILE__, __LINE__) - #else /* no error checking */ -#define XCHAR(x) ((Ichar) XCHARVAL (x)) +#define XINT(obj) XREALINT (obj) #endif /* no error checking */ -#define CHECK_CHAR(x) CHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp) -#define CONCHECK_CHAR(x) CONCHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp) +#define CHECK_INT(x) do { \ + if (!INTP (x)) \ + dead_wrong_type_argument (Qintegerp, x); \ +} while (0) +#define CONCHECK_INT(x) do { \ + if (!INTP (x)) \ + x = wrong_type_argument (Qintegerp, x); \ +} while (0) -/*------------------------------ float ---------------------------------*/ +#define NATNUMP(x) (INTP (x) && XINT (x) >= 0) -/* Note: the 'unused_next_' field exists only to ensure that the - `next' pointer fits within the structure, for the purposes of the - free list. This makes a difference in the unlikely case of - sizeof(double) being smaller than sizeof(void *). */ +#define CHECK_NATNUM(x) do { \ + if (!NATNUMP (x)) \ + dead_wrong_type_argument (Qnatnump, x); \ +} while (0) -struct Lisp_Float -{ - struct lrecord_header lheader; - union { double d; struct Lisp_Float *unused_next_; } data; -}; -typedef struct Lisp_Float Lisp_Float; +#define CONCHECK_NATNUM(x) do { \ + if (!NATNUMP (x)) \ + x = wrong_type_argument (Qnatnump, x); \ +} while (0) -DECLARE_LRECORD (float, Lisp_Float); -#define XFLOAT(x) XRECORD (x, float, Lisp_Float) -#define wrap_float(p) wrap_record (p, float) -#define FLOATP(x) RECORDP (x, float) -#define CHECK_FLOAT(x) CHECK_RECORD (x, float) -#define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float) +/*------------------------------- char ---------------------------------*/ -#define float_data(f) ((f)->data.d) -#define XFLOAT_DATA(x) float_data (XFLOAT (x)) +/* NOTE: There are basic functions for converting between a character and + the string representation of a character in text.h, as well as lots of + other character-related stuff. There are other functions/macros for + working with Ichars in charset.h, for retrieving the charset of an + Ichar, the length of an Ichar when converted to text, etc. +*/ -#define XFLOATINT(n) extract_float (n) +#ifdef MULE -#define CHECK_INT_OR_FLOAT(x) do { \ - if (!INT_OR_FLOATP (x)) \ - dead_wrong_type_argument (Qnumberp, x); \ -} while (0) +MODULE_API int non_ascii_valid_ichar_p (Ichar ch); -#define CONCHECK_INT_OR_FLOAT(x) do { \ - if (!INT_OR_FLOATP (x)) \ - x = wrong_type_argument (Qnumberp, x); \ -} while (0) +/* Return whether the given Ichar is valid. + */ -# define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x)) +DECLARE_INLINE_HEADER ( +int +valid_ichar_p (Ichar ch) +) +{ + return (! (ch & ~0xFF)) || non_ascii_valid_ichar_p (ch); +} -/*-------------------------------- int ---------------------------------*/ +#else /* not MULE */ -#define ZEROP(x) EQ (x, Qzero) +/* This works when CH is negative, and correctly returns non-zero only when CH + is in the range [0, 255], inclusive. */ +#define valid_ichar_p(ch) (! (ch & ~0xFF)) + +#endif /* not MULE */ #ifdef ERROR_CHECK_TYPES -#define XCHAR_OR_INT(x) XCHAR_OR_INT_1 (x, __FILE__, __LINE__) -#define XINT(x) XINT_1 (x, __FILE__, __LINE__) +DECLARE_INLINE_HEADER ( +int +CHARP_1 (Lisp_Object obj, const Ascbyte *file, int line) +) +{ + if (XTYPE (obj) != Lisp_Type_Char) + return 0; + assert_at_line (valid_ichar_p (XCHARVAL (obj)), file, line); + return 1; +} + +#define CHARP(x) CHARP_1 (x, __FILE__, __LINE__) DECLARE_INLINE_HEADER ( -EMACS_INT -XINT_1 (Lisp_Object obj, const Ascbyte *file, int line) +Ichar +XCHAR_1 (Lisp_Object obj, const Ascbyte *file, int line) ) { - assert_at_line (INTP (obj), file, line); - return XREALINT (obj); + Ichar ch; + assert_at_line (CHARP (obj), file, line); + ch = XCHARVAL (obj); + assert_at_line (valid_ichar_p (ch), file, line); + return ch; } +#define XCHAR(x) XCHAR_1 (x, __FILE__, __LINE__) + +#else /* not ERROR_CHECK_TYPES */ + +#define CHARP(x) (XTYPE (x) == Lisp_Type_Char) +#define XCHAR(x) ((Ichar) XCHARVAL (x)) + +#endif /* (else) not ERROR_CHECK_TYPES */ + +#define CONCHECK_CHAR(x) do { \ + if (!CHARP (x)) \ + x = wrong_type_argument (Qcharacterp, x); \ + } while (0) + +#define CHECK_CHAR(x) do { \ + if (!CHARP (x)) \ + dead_wrong_type_argument (Qcharacterp, x); \ + } while (0) + + +DECLARE_INLINE_HEADER ( +Lisp_Object +make_char (Ichar val) +) +{ + type_checking_assert (valid_ichar_p (val)); + /* This is defined in lisp-union.h or lisp-disunion.h */ + return make_char_1 (val); +} + +/*------------------------- int-char connection ------------------------*/ + +#ifdef ERROR_CHECK_TYPES + +#define XCHAR_OR_INT(x) XCHAR_OR_INT_1 (x, __FILE__, __LINE__) + DECLARE_INLINE_HEADER ( EMACS_INT XCHAR_OR_INT_1 (Lisp_Object obj, const Ascbyte *file, int line) @@ -2653,31 +3080,39 @@ #else /* no error checking */ -#define XINT(obj) XREALINT (obj) #define XCHAR_OR_INT(obj) (CHARP (obj) ? XCHAR (obj) : XINT (obj)) #endif /* no error checking */ -#define CHECK_INT(x) do { \ - if (!INTP (x)) \ - dead_wrong_type_argument (Qintegerp, x); \ -} while (0) +/* True of X is an integer whose value is the valid integral equivalent of a + character. */ -#define CONCHECK_INT(x) do { \ - if (!INTP (x)) \ - x = wrong_type_argument (Qintegerp, x); \ -} while (0) +#define CHAR_INTP(x) (INTP (x) && valid_ichar_p (XINT (x))) -#define NATNUMP(x) (INTP (x) && XINT (x) >= 0) +/* True of X is a character or an integral value that can be converted into a + character. */ +#define CHAR_OR_CHAR_INTP(x) (CHARP (x) || CHAR_INTP (x)) -#define CHECK_NATNUM(x) do { \ - if (!NATNUMP (x)) \ - dead_wrong_type_argument (Qnatnump, x); \ -} while (0) +DECLARE_INLINE_HEADER ( +Ichar +XCHAR_OR_CHAR_INT (Lisp_Object obj) +) +{ + return CHARP (obj) ? XCHAR (obj) : XINT (obj); +} -#define CONCHECK_NATNUM(x) do { \ - if (!NATNUMP (x)) \ - x = wrong_type_argument (Qnatnump, x); \ +/* Signal an error if CH is not a valid character or integer Lisp_Object. + If CH is an integer Lisp_Object, convert it to a character Lisp_Object, + but merely by repackaging, without performing tests for char validity. + */ + +#define CHECK_CHAR_COERCE_INT(x) do { \ + if (CHARP (x)) \ + ; \ + else if (CHAR_INTP (x)) \ + x = make_char (XINT (x)); \ + else \ + x = wrong_type_argument (Qcharacterp, x); \ } while (0) /* next three always continuable because they coerce their arguments. */ @@ -2710,6 +3145,43 @@ x = wrong_type_argument (Qinteger_char_or_marker_p, x); \ } while (0) +/*------------------------------ float ---------------------------------*/ + +/* Note: the 'unused_next_' field exists only to ensure that the + `next' pointer fits within the structure, for the purposes of the + free list. This makes a difference in the unlikely case of + sizeof(double) being smaller than sizeof(void *). */ + +struct Lisp_Float +{ + struct lrecord_header lheader; + union { double d; struct Lisp_Float *unused_next_; } data; +}; +typedef struct Lisp_Float Lisp_Float; + +DECLARE_LRECORD (float, Lisp_Float); +#define XFLOAT(x) XRECORD (x, float, Lisp_Float) +#define wrap_float(p) wrap_record (p, float) +#define FLOATP(x) RECORDP (x, float) +#define CHECK_FLOAT(x) CHECK_RECORD (x, float) +#define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float) + +#define float_data(f) ((f)->data.d) +#define XFLOAT_DATA(x) float_data (XFLOAT (x)) + +#define XFLOATINT(n) extract_float (n) + +#define CHECK_INT_OR_FLOAT(x) do { \ + if (!INT_OR_FLOATP (x)) \ + dead_wrong_type_argument (Qnumberp, x); \ +} while (0) + +#define CONCHECK_INT_OR_FLOAT(x) do { \ + if (!INT_OR_FLOATP (x)) \ + x = wrong_type_argument (Qnumberp, x); \ +} while (0) + +# define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x)) /*--------------------------- readonly objects -------------------------*/ @@ -3518,7 +3990,7 @@ } while (0) extern Lisp_Object_ptr_dynarr *staticpros; - +extern Lisp_Object_ptr_dynarr *staticpros_nodump; #ifdef DEBUG_XEMACS /* Help debug crashes gc-marking a staticpro'ed object. */ @@ -3628,7 +4100,9 @@ Lisp_Object make_bit_vector (Elemcount, Lisp_Object); Lisp_Object make_bit_vector_from_byte_vector (unsigned char *, Elemcount); Lisp_Object noseeum_make_marker (void); +#ifndef NEW_GC void garbage_collect_1 (void); +#endif /* not NEW_GC */ MODULE_API Lisp_Object acons (Lisp_Object, Lisp_Object, Lisp_Object); MODULE_API Lisp_Object cons3 (Lisp_Object, Lisp_Object, Lisp_Object); MODULE_API Lisp_Object list1 (Lisp_Object); @@ -3643,7 +4117,9 @@ DECLARE_DOESNT_RETURN (memory_full (void)); void disksave_object_finalization (void); extern int purify_flag; +#ifndef NEW_GC extern EMACS_INT gc_generation_number[1]; +#endif /* not NEW_GC */ int c_readonly (Lisp_Object); int lisp_readonly (Lisp_Object); MODULE_API void copy_lisp_object (Lisp_Object dst, Lisp_Object src); @@ -3664,6 +4140,7 @@ void free_marker (Lisp_Object); int object_dead_p (Lisp_Object); void mark_object (Lisp_Object obj); +#ifndef NEW_GC #ifdef USE_KKCC #ifdef DEBUG_XEMACS void kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj, int level, int pos); @@ -3677,6 +4154,7 @@ #define kkcc_backtrace() #endif #endif /* USE_KKCC */ +#endif /* not NEW_GC */ int marked_p (Lisp_Object obj); extern int funcall_allocation_flag; extern int need_to_garbage_collect; @@ -4638,6 +5116,7 @@ /* Lower-level ways to output data: */ +void default_object_printer (Lisp_Object, Lisp_Object, int); void print_internal (Lisp_Object, Lisp_Object, int); void debug_print (Lisp_Object); void debug_p4 (Lisp_Object obj); @@ -4936,6 +5415,7 @@ extern Lisp_Object Vcharset_latin_jisx0201; extern Lisp_Object Vcharset_cyrillic_iso8859_5; extern Lisp_Object Vcharset_latin_iso8859_9; +extern Lisp_Object Vcharset_latin_iso8859_15; extern Lisp_Object Vcharset_japanese_jisx0208_1978; extern Lisp_Object Vcharset_chinese_gb2312; extern Lisp_Object Vcharset_japanese_jisx0208; diff -urN 21.5.23/src/lrecord.h 21.5.24/src/lrecord.h --- 21.5.23/src/lrecord.h Wed Oct 26 22:01:42 2005 +++ 21.5.24/src/lrecord.h Sun Nov 27 19:51:25 2005 @@ -120,9 +120,9 @@ debugging. */ unsigned int free :1; - /* The `uid' field is just for debugging/printing convenience. - Having this slot doesn't hurt us much spacewise, since the - bits are unused anyway. */ + /* The `uid' field is just for debugging/printing convenience. Having + this slot doesn't hurt us spacewise, since the bits are unused + anyway. (The bits are used for strings, though.) */ unsigned int uid :22; #else /* not MC_ALLOC */ @@ -140,13 +140,17 @@ /* 1 if the object is readonly from lisp */ unsigned int lisp_readonly :1; - unsigned int unused :21; + /* The `uid' field is just for debugging/printing convenience. Having + this slot doesn't hurt us spacewise, since the bits are unused + anyway. (The bits are used for strings, though.) */ + unsigned int uid :21; #endif /* not MC_ALLOC */ }; struct lrecord_implementation; int lrecord_type_index (const struct lrecord_implementation *implementation); +extern int lrecord_uid_counter; #ifdef MC_ALLOC #define set_lheader_implementation(header,imp) do { \ @@ -154,6 +158,7 @@ SLI_header->type = (imp)->lrecord_type_index; \ SLI_header->lisp_readonly = 0; \ SLI_header->free = 0; \ + SLI_header->uid = lrecord_uid_counter++; \ } while (0) #else /* not MC_ALLOC */ #define set_lheader_implementation(header,imp) do { \ @@ -162,6 +167,7 @@ SLI_header->mark = 0; \ SLI_header->c_readonly = 0; \ SLI_header->lisp_readonly = 0; \ + SLI_header->uid = lrecord_uid_counter++; \ } while (0) #endif /* not MC_ALLOC */ @@ -211,38 +217,38 @@ #### This should be replaced by a symbol_value_magic_p flag in the Lisp_Symbol lrecord_header. */ lrecord_type_symbol_value_forward, /* 0 */ - lrecord_type_symbol_value_varalias, /* 1 */ - lrecord_type_symbol_value_lisp_magic, /* 2 */ - lrecord_type_symbol_value_buffer_local, /* 3 */ + lrecord_type_symbol_value_varalias, + lrecord_type_symbol_value_lisp_magic, + lrecord_type_symbol_value_buffer_local, lrecord_type_max_symbol_value_magic = lrecord_type_symbol_value_buffer_local, - lrecord_type_symbol, /* 4 */ - lrecord_type_subr, /* 5 */ - lrecord_type_cons, /* 6 */ - lrecord_type_vector, /* 7 */ - lrecord_type_string, /* 8 */ + lrecord_type_symbol, + lrecord_type_subr, + lrecord_type_cons, + lrecord_type_vector, + lrecord_type_string, #ifndef MC_ALLOC lrecord_type_lcrecord_list, #endif /* not MC_ALLOC */ - lrecord_type_compiled_function, /* 9 */ - lrecord_type_weak_list, /* 10 */ - lrecord_type_bit_vector, /* 11 */ - lrecord_type_float, /* 12 */ - lrecord_type_hash_table, /* 13 */ - lrecord_type_lstream, /* 14 */ - lrecord_type_process, /* 15 */ - lrecord_type_charset, /* 16 */ - lrecord_type_coding_system, /* 17 */ - lrecord_type_char_table, /* 18 */ - lrecord_type_char_table_entry, /* 19 */ - lrecord_type_range_table, /* 20 */ - lrecord_type_opaque, /* 21 */ - lrecord_type_opaque_ptr, /* 22 */ - lrecord_type_buffer, /* 23 */ - lrecord_type_extent, /* 24 */ - lrecord_type_extent_info, /* 25 */ - lrecord_type_extent_auxiliary, /* 26 */ - lrecord_type_marker, /* 27 */ - lrecord_type_event, /* 28 */ + lrecord_type_compiled_function, + lrecord_type_weak_list, + lrecord_type_bit_vector, + lrecord_type_float, + lrecord_type_hash_table, + lrecord_type_lstream, + lrecord_type_process, + lrecord_type_charset, + lrecord_type_coding_system, + lrecord_type_char_table, + lrecord_type_char_table_entry, + lrecord_type_range_table, + lrecord_type_opaque, + lrecord_type_opaque_ptr, + lrecord_type_buffer, + lrecord_type_extent, + lrecord_type_extent_info, + lrecord_type_extent_auxiliary, + lrecord_type_marker, + lrecord_type_event, #ifdef EVENT_DATA_AS_OBJECTS /* not defined */ lrecord_type_key_data, lrecord_type_button_data, @@ -254,47 +260,80 @@ lrecord_type_magic_eval_data, lrecord_type_magic_data, #endif /* EVENT_DATA_AS_OBJECTS */ - lrecord_type_keymap, /* 29 */ - lrecord_type_command_builder, /* 30 */ - lrecord_type_timeout, /* 31 */ - lrecord_type_specifier, /* 32 */ - lrecord_type_console, /* 33 */ - lrecord_type_device, /* 34 */ - lrecord_type_frame, /* 35 */ - lrecord_type_window, /* 36 */ - lrecord_type_window_mirror, /* 37 */ - lrecord_type_window_configuration, /* 38 */ - lrecord_type_gui_item, /* 39 */ - lrecord_type_popup_data, /* 40 */ - lrecord_type_toolbar_button, /* 41 */ - lrecord_type_scrollbar_instance, /* 42 */ - lrecord_type_color_instance, /* 43 */ - lrecord_type_font_instance, /* 44 */ - lrecord_type_image_instance, /* 45 */ - lrecord_type_glyph, /* 46 */ - lrecord_type_face, /* 47 */ - lrecord_type_database, /* 48 */ - lrecord_type_tooltalk_message, /* 49 */ - lrecord_type_tooltalk_pattern, /* 50 */ - lrecord_type_ldap, /* 51 */ - lrecord_type_pgconn, /* 52 */ - lrecord_type_pgresult, /* 53 */ - lrecord_type_devmode, /* 54 */ - lrecord_type_mswindows_dialog_id, /* 55 */ - lrecord_type_case_table, /* 56 */ - lrecord_type_emacs_ffi, /* 57 */ - lrecord_type_emacs_gtk_object, /* 58 */ - lrecord_type_emacs_gtk_boxed, /* 59 */ - lrecord_type_weak_box, /* 60 */ - lrecord_type_ephemeron, /* 61 */ - lrecord_type_bignum, /* 62 */ - lrecord_type_ratio, /* 63 */ - lrecord_type_bigfloat, /* 64 */ + lrecord_type_keymap, + lrecord_type_command_builder, + lrecord_type_timeout, + lrecord_type_specifier, + lrecord_type_console, + lrecord_type_device, + lrecord_type_frame, + lrecord_type_window, + lrecord_type_window_mirror, + lrecord_type_window_configuration, + lrecord_type_gui_item, + lrecord_type_popup_data, + lrecord_type_toolbar_button, + lrecord_type_scrollbar_instance, + lrecord_type_color_instance, + lrecord_type_font_instance, + lrecord_type_image_instance, + lrecord_type_glyph, + lrecord_type_face, + lrecord_type_fc_pattern, + lrecord_type_database, + lrecord_type_tooltalk_message, + lrecord_type_tooltalk_pattern, + lrecord_type_ldap, + lrecord_type_pgconn, + lrecord_type_pgresult, + lrecord_type_devmode, + lrecord_type_mswindows_dialog_id, + lrecord_type_case_table, + lrecord_type_emacs_ffi, + lrecord_type_emacs_gtk_object, + lrecord_type_emacs_gtk_boxed, + lrecord_type_weak_box, + lrecord_type_ephemeron, + lrecord_type_bignum, + lrecord_type_ratio, + lrecord_type_bigfloat, #ifndef MC_ALLOC lrecord_type_free, /* only used for "free" lrecords */ lrecord_type_undefined, /* only used for debugging */ #endif /* not MC_ALLOC */ - lrecord_type_last_built_in_type /* 65 */ /* must be last */ +#ifdef NEW_GC + lrecord_type_string_indirect_data, + lrecord_type_string_direct_data, + lrecord_type_hash_table_entry, + lrecord_type_syntax_cache, + lrecord_type_buffer_text, + lrecord_type_compiled_function_args, + lrecord_type_tty_console, + lrecord_type_stream_console, + lrecord_type_dynarr, + lrecord_type_face_cachel, + lrecord_type_face_cachel_dynarr, + lrecord_type_glyph_cachel, + lrecord_type_glyph_cachel_dynarr, + lrecord_type_x_device, + lrecord_type_gtk_device, + lrecord_type_tty_device, + lrecord_type_mswindows_device, + lrecord_type_msprinter_device, + lrecord_type_x_frame, + lrecord_type_gtk_frame, + lrecord_type_mswindows_frame, + lrecord_type_gap_array_marker, + lrecord_type_gap_array, + lrecord_type_extent_list_marker, + lrecord_type_extent_list, + lrecord_type_stack_of_extents, + lrecord_type_tty_color_instance_data, + lrecord_type_tty_font_instance_data, + lrecord_type_specifier_caching, + lrecord_type_expose_ignore, +#endif /* NEW_GC */ + lrecord_type_last_built_in_type /* must be last */ }; extern MODULE_API int lrecord_type_count; @@ -394,6 +433,12 @@ LHEADER_IMPLEMENTATION (XRECORD_LHEADER (obj)) #define LHEADER_IMPLEMENTATION(lh) lrecord_implementations_table[(lh)->type] +#include "gc.h" + +#ifdef NEW_GC +#include "vdb.h" +#endif /* NEW_GC */ + extern int gc_in_progress; #ifdef MC_ALLOC @@ -401,14 +446,31 @@ #ifdef ALLOC_TYPE_STATS void init_lrecord_stats (void); -void inc_lrecord_string_data_stats (Bytecount size); -void dec_lrecord_string_data_stats (Bytecount size); void inc_lrecord_stats (Bytecount size, const struct lrecord_header *h); void dec_lrecord_stats (Bytecount size_including_overhead, const struct lrecord_header *h); +int lrecord_stats_heap_size (void); #endif /* ALLOC_TYPE_STATS */ /* Tell mc-alloc how to call a finalizer. */ +#ifdef NEW_GC +#define MC_ALLOC_CALL_FINALIZER(ptr) \ +{ \ + Lisp_Object MCACF_obj = wrap_pointer_1 (ptr); \ + struct lrecord_header *MCACF_lheader = XRECORD_LHEADER (MCACF_obj); \ + if (XRECORD_LHEADER (MCACF_obj) && LRECORDP (MCACF_obj) \ + && !LRECORD_FREE_P (MCACF_lheader) ) \ + { \ + const struct lrecord_implementation *MCACF_implementation \ + = LHEADER_IMPLEMENTATION (MCACF_lheader); \ + if (MCACF_implementation && MCACF_implementation->finalizer) \ + { \ + GC_STAT_FINALIZED; \ + MCACF_implementation->finalizer (ptr, 0); \ + } \ + } \ +} while (0) +#else /* not NEW_GC */ #define MC_ALLOC_CALL_FINALIZER(ptr) \ { \ Lisp_Object MCACF_obj = wrap_pointer_1 (ptr); \ @@ -422,6 +484,7 @@ MCACF_implementation->finalizer (ptr, 0); \ } \ } while (0) +#endif /* not NEW_GC */ /* Tell mc-alloc how to call a finalizer for disksave. */ #define MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE(ptr) \ @@ -946,6 +1009,9 @@ { XD_LISP_OBJECT_ARRAY, XD_LISP_OBJECT, +#ifdef NEW_GC + XD_LISP_OBJECT_BLOCK_PTR, +#endif /* NEW_GC */ XD_LO_LINK, XD_OPAQUE_PTR, XD_OPAQUE_PTR_CONVERTIBLE, @@ -1082,6 +1148,14 @@ { XD_INT, offsetof (base_type, cur) }, \ { XD_INT_RESET, offsetof (base_type, max), XD_INDIRECT(1, 0) } \ +#ifdef NEW_GC +#define XD_LISP_DYNARR_DESC(base_type, sub_desc) \ + { XD_LISP_OBJECT_BLOCK_PTR, offsetof (base_type, base), \ + XD_INDIRECT(1, 0), {sub_desc} }, \ + { XD_INT, offsetof (base_type, cur) }, \ + { XD_INT_RESET, offsetof (base_type, max), XD_INDIRECT(1, 0) } +#endif /* not NEW_GC */ + /* DEFINE_LRECORD_IMPLEMENTATION is for objects with constant size. DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION is for objects whose size varies. */ @@ -1667,6 +1741,9 @@ void *alloc_lrecord (Bytecount size, const struct lrecord_implementation *); + +void *alloc_lrecord_array (Bytecount size, int elemcount, + const struct lrecord_implementation *); #define alloc_lrecord_type(type, lrecord_implementation) \ ((type *) alloc_lrecord (sizeof (type), lrecord_implementation)) diff -urN 21.5.23/src/m/CVS/Entries 21.5.24/src/m/CVS/Entries --- 21.5.23/src/m/CVS/Entries Mon Dec 19 04:21:31 2005 +++ 21.5.24/src/m/CVS/Entries Mon Dec 19 04:23:50 2005 @@ -1,100 +1,100 @@ -/7300.h/1.6/Thu Nov 4 23:07:51 2004//Tr21-5-23 -/README/1.2/Tue Mar 31 20:12:23 1998//Tr21-5-23 -/acorn.h/1.6/Thu Nov 4 23:07:51 2004//Tr21-5-23 -/alliant-2800.h/1.5/Thu Nov 4 23:07:51 2004//Tr21-5-23 -/alliant.h/1.5/Thu Nov 4 23:07:51 2004//Tr21-5-23 -/alliant1.h/1.1.1.1/Wed Dec 18 22:44:10 1996//Tr21-5-23 -/alliant4.h/1.1.1.1/Wed Dec 18 22:44:10 1996//Tr21-5-23 -/alpha.h/1.9/Sun Dec 17 02:08:55 2000//Tr21-5-23 -/altos.h/1.7/Thu Nov 4 23:07:51 2004//Tr21-5-23 -/amdahl.h/1.5/Thu Nov 4 23:07:52 2004//Tr21-5-23 -/apollo.h/1.4/Thu Nov 4 23:07:52 2004//Tr21-5-23 -/arm.h/1.5/Sat Mar 1 07:25:39 2003//Tr21-5-23 -/att3b.h/1.6/Thu Nov 4 23:07:52 2004//Tr21-5-23 -/aviion.h/1.6/Thu Nov 4 23:07:53 2004//Tr21-5-23 -/celerity.h/1.4/Thu Nov 4 23:07:53 2004//Tr21-5-23 -/clipper.h/1.4/Thu Nov 4 23:07:53 2004//Tr21-5-23 -/cnvrgnt.h/1.4/Thu Nov 4 23:07:53 2004//Tr21-5-23 -/convex.h/1.6/Thu Nov 4 23:07:53 2004//Tr21-5-23 -/cydra5.h/1.5/Thu Nov 4 23:07:54 2004//Tr21-5-23 -/delta.h/1.8/Thu Nov 4 23:07:54 2004//Tr21-5-23 -/delta88k.h/1.8/Thu Nov 4 23:07:54 2004//Tr21-5-23 -/dpx2.h/1.9/Thu Nov 4 23:07:54 2004//Tr21-5-23 -/dual.h/1.2/Thu Apr 12 18:24:34 2001//Tr21-5-23 -/elxsi.h/1.5/Thu Nov 4 23:07:54 2004//Tr21-5-23 -/ews4800r.h/1.5/Thu Nov 4 23:07:55 2004//Tr21-5-23 -/gould-np1.h/1.4/Thu Apr 12 18:24:34 2001//Tr21-5-23 -/gould.h/1.7/Thu Nov 4 23:07:55 2004//Tr21-5-23 -/hp300bsd.h/1.3/Thu Nov 4 23:07:55 2004//Tr21-5-23 -/hp800.h/1.6/Thu Nov 4 23:07:55 2004//Tr21-5-23 -/hp9000s300.h/1.5/Thu Nov 4 23:07:56 2004//Tr21-5-23 -/i860.h/1.4/Thu Nov 4 23:07:56 2004//Tr21-5-23 -/ibm370aix.h/1.2/Sat Jun 21 20:04:26 1997//Tr21-5-23 -/ibmps2-aix.h/1.10/Thu Nov 4 23:07:56 2004//Tr21-5-23 -/ibmrs6000.h/1.8/Thu Nov 4 23:07:56 2004//Tr21-5-23 -/ibmrt-aix.h/1.7/Thu Nov 4 23:07:56 2004//Tr21-5-23 -/ibmrt.h/1.5/Thu Nov 4 23:07:56 2004//Tr21-5-23 -/intel386.h/1.10/Thu Nov 4 23:07:56 2004//Tr21-5-23 -/iris4d.h/1.8/Thu Nov 4 23:07:57 2004//Tr21-5-23 -/iris5d.h/1.8/Thu Nov 4 23:07:57 2004//Tr21-5-23 -/iris6d.h/1.4/Thu Nov 4 23:07:57 2004//Tr21-5-23 -/irist.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-23 -/is386.h/1.2/Sat Jun 21 20:04:27 1997//Tr21-5-23 -/isi-ov.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-23 -/luna88k.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-23 -/m68k.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-23 -/masscomp.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-23 -/mega68.h/1.2/Thu Apr 12 18:24:36 2001//Tr21-5-23 -/mg1.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-23 -/mips-nec.h/1.4/Thu Nov 4 23:07:59 2004//Tr21-5-23 -/mips-siemens.h/1.6/Thu Nov 4 23:07:59 2004//Tr21-5-23 -/mips.h/1.10/Thu Nov 4 23:07:59 2004//Tr21-5-23 -/mips4.h/1.3/Sun Jul 13 22:43:06 1997//Tr21-5-23 -/ncr386.h/1.2/Sat Jun 21 20:04:28 1997//Tr21-5-23 -/news-risc.h/1.4/Tue Mar 31 20:12:25 1998//Tr21-5-23 -/news.h/1.3/Thu Nov 4 23:07:59 2004//Tr21-5-23 -/next.h/1.6/Wed Mar 13 08:53:20 2002//Tr21-5-23 -/nh3000.h/1.4/Thu Nov 4 23:07:59 2004//Tr21-5-23 -/nh4000.h/1.4/Thu Nov 4 23:07:59 2004//Tr21-5-23 -/ns16000.h/1.1.1.1/Wed Dec 18 22:44:11 1996//Tr21-5-23 -/ns32000.h/1.6/Thu Nov 4 23:08:00 2004//Tr21-5-23 -/nu.h/1.3/Thu Apr 12 18:24:37 2001//Tr21-5-23 -/orion.h/1.2/Thu Apr 12 18:24:37 2001//Tr21-5-23 -/orion105.h/1.3/Thu Nov 4 23:08:00 2004//Tr21-5-23 -/paragon.h/1.2/Sat Jun 21 20:04:30 1997//Tr21-5-23 -/pfa50.h/1.6/Thu Nov 4 23:08:00 2004//Tr21-5-23 -/plexus.h/1.5/Thu Nov 4 23:08:00 2004//Tr21-5-23 -/pmax.h/1.5/Thu Nov 4 23:08:00 2004//Tr21-5-23 -/powerpc.h/1.11/Thu Nov 4 23:08:00 2004//Tr21-5-23 -/pyramid.h/1.3/Thu Apr 12 18:24:37 2001//Tr21-5-23 -/pyrmips.h/1.2/Thu Nov 4 23:08:01 2004//Tr21-5-23 -/sequent-ptx.h/1.5/Thu Nov 4 23:08:01 2004//Tr21-5-23 -/sequent.h/1.4/Thu Nov 4 23:08:01 2004//Tr21-5-23 -/sgi-challenge.h/1.7/Thu Nov 4 23:08:01 2004//Tr21-5-23 -/sgi3000.h/1.1.1.1/Wed Dec 18 22:44:11 1996//Tr21-5-23 -/sparc.h/1.7/Thu Apr 12 18:24:39 2001//Tr21-5-23 -/sps7.h/1.4/Mon May 14 04:52:28 2001//Tr21-5-23 -/stride.h/1.5/Sat Mar 1 07:25:40 2003//Tr21-5-23 -/sun1.h/1.3/Thu Apr 12 18:24:39 2001//Tr21-5-23 -/sun2.h/1.4/Wed Mar 13 08:53:20 2002//Tr21-5-23 -/sun3-68881.h/1.2/Sat Jun 21 20:04:32 1997//Tr21-5-23 -/sun3-fpa.h/1.2/Sat Jun 21 20:04:32 1997//Tr21-5-23 -/sun3-soft.h/1.2/Sat Jun 21 20:04:32 1997//Tr21-5-23 -/sun3.h/1.2/Sat Jun 21 20:04:32 1997//Tr21-5-23 -/sun386.h/1.5/Wed Mar 13 08:53:20 2002//Tr21-5-23 -/symmetry.h/1.2/Thu Nov 4 23:08:02 2004//Tr21-5-23 -/tad68k.h/1.7/Thu Nov 4 23:08:02 2004//Tr21-5-23 -/tahoe.h/1.3/Thu Nov 4 23:08:03 2004//Tr21-5-23 -/tandem-s2.h/1.2/Sat Jun 21 20:04:33 1997//Tr21-5-23 -/targon31.h/1.4/Thu Nov 4 23:08:03 2004//Tr21-5-23 -/tek4300.h/1.2/Thu Apr 12 18:24:40 2001//Tr21-5-23 -/tekxd88.h/1.8/Thu Nov 4 23:08:03 2004//Tr21-5-23 -/template.h/1.4/Thu Nov 4 23:08:03 2004//Tr21-5-23 -/tower32.h/1.5/Thu Nov 4 23:08:03 2004//Tr21-5-23 -/tower32v3.h/1.5/Thu Nov 4 23:08:03 2004//Tr21-5-23 -/ustation.h/1.6/Thu Nov 4 23:08:03 2004//Tr21-5-23 -/vax.h/1.4/Thu Nov 4 23:08:04 2004//Tr21-5-23 -/wicat.h/1.7/Thu Nov 4 23:08:04 2004//Tr21-5-23 -/windowsnt.h/1.4/Wed Mar 13 08:53:20 2002//Tr21-5-23 -/xps100.h/1.5/Thu Nov 4 23:08:04 2004//Tr21-5-23 +/7300.h/1.6/Thu Nov 4 23:07:51 2004//Tr21-5-24 +/README/1.2/Tue Mar 31 20:12:23 1998//Tr21-5-24 +/acorn.h/1.6/Thu Nov 4 23:07:51 2004//Tr21-5-24 +/alliant-2800.h/1.5/Thu Nov 4 23:07:51 2004//Tr21-5-24 +/alliant.h/1.5/Thu Nov 4 23:07:51 2004//Tr21-5-24 +/alliant1.h/1.1.1.1/Wed Dec 18 22:44:10 1996//Tr21-5-24 +/alliant4.h/1.1.1.1/Wed Dec 18 22:44:10 1996//Tr21-5-24 +/alpha.h/1.9/Sun Dec 17 02:08:55 2000//Tr21-5-24 +/altos.h/1.7/Thu Nov 4 23:07:51 2004//Tr21-5-24 +/amdahl.h/1.5/Thu Nov 4 23:07:52 2004//Tr21-5-24 +/apollo.h/1.4/Thu Nov 4 23:07:52 2004//Tr21-5-24 +/arm.h/1.5/Sat Mar 1 07:25:39 2003//Tr21-5-24 +/att3b.h/1.6/Thu Nov 4 23:07:52 2004//Tr21-5-24 +/aviion.h/1.6/Thu Nov 4 23:07:53 2004//Tr21-5-24 +/celerity.h/1.4/Thu Nov 4 23:07:53 2004//Tr21-5-24 +/clipper.h/1.4/Thu Nov 4 23:07:53 2004//Tr21-5-24 +/cnvrgnt.h/1.4/Thu Nov 4 23:07:53 2004//Tr21-5-24 +/convex.h/1.6/Thu Nov 4 23:07:53 2004//Tr21-5-24 +/cydra5.h/1.5/Thu Nov 4 23:07:54 2004//Tr21-5-24 +/delta.h/1.8/Thu Nov 4 23:07:54 2004//Tr21-5-24 +/delta88k.h/1.8/Thu Nov 4 23:07:54 2004//Tr21-5-24 +/dpx2.h/1.9/Thu Nov 4 23:07:54 2004//Tr21-5-24 +/dual.h/1.2/Thu Apr 12 18:24:34 2001//Tr21-5-24 +/elxsi.h/1.5/Thu Nov 4 23:07:54 2004//Tr21-5-24 +/ews4800r.h/1.5/Thu Nov 4 23:07:55 2004//Tr21-5-24 +/gould-np1.h/1.4/Thu Apr 12 18:24:34 2001//Tr21-5-24 +/gould.h/1.7/Thu Nov 4 23:07:55 2004//Tr21-5-24 +/hp300bsd.h/1.3/Thu Nov 4 23:07:55 2004//Tr21-5-24 +/hp800.h/1.6/Thu Nov 4 23:07:55 2004//Tr21-5-24 +/hp9000s300.h/1.5/Thu Nov 4 23:07:56 2004//Tr21-5-24 +/i860.h/1.4/Thu Nov 4 23:07:56 2004//Tr21-5-24 +/ibm370aix.h/1.2/Sat Jun 21 20:04:26 1997//Tr21-5-24 +/ibmps2-aix.h/1.10/Thu Nov 4 23:07:56 2004//Tr21-5-24 +/ibmrs6000.h/1.8/Thu Nov 4 23:07:56 2004//Tr21-5-24 +/ibmrt-aix.h/1.7/Thu Nov 4 23:07:56 2004//Tr21-5-24 +/ibmrt.h/1.5/Thu Nov 4 23:07:56 2004//Tr21-5-24 +/intel386.h/1.10/Thu Nov 4 23:07:56 2004//Tr21-5-24 +/iris4d.h/1.8/Thu Nov 4 23:07:57 2004//Tr21-5-24 +/iris5d.h/1.8/Thu Nov 4 23:07:57 2004//Tr21-5-24 +/iris6d.h/1.4/Thu Nov 4 23:07:57 2004//Tr21-5-24 +/irist.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-24 +/is386.h/1.2/Sat Jun 21 20:04:27 1997//Tr21-5-24 +/isi-ov.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-24 +/luna88k.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-24 +/m68k.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-24 +/masscomp.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-24 +/mega68.h/1.2/Thu Apr 12 18:24:36 2001//Tr21-5-24 +/mg1.h/1.4/Thu Nov 4 23:07:58 2004//Tr21-5-24 +/mips-nec.h/1.4/Thu Nov 4 23:07:59 2004//Tr21-5-24 +/mips-siemens.h/1.6/Thu Nov 4 23:07:59 2004//Tr21-5-24 +/mips.h/1.10/Thu Nov 4 23:07:59 2004//Tr21-5-24 +/mips4.h/1.3/Sun Jul 13 22:43:06 1997//Tr21-5-24 +/ncr386.h/1.2/Sat Jun 21 20:04:28 1997//Tr21-5-24 +/news-risc.h/1.4/Tue Mar 31 20:12:25 1998//Tr21-5-24 +/news.h/1.3/Thu Nov 4 23:07:59 2004//Tr21-5-24 +/next.h/1.6/Wed Mar 13 08:53:20 2002//Tr21-5-24 +/nh3000.h/1.4/Thu Nov 4 23:07:59 2004//Tr21-5-24 +/nh4000.h/1.4/Thu Nov 4 23:07:59 2004//Tr21-5-24 +/ns16000.h/1.1.1.1/Wed Dec 18 22:44:11 1996//Tr21-5-24 +/ns32000.h/1.6/Thu Nov 4 23:08:00 2004//Tr21-5-24 +/nu.h/1.3/Thu Apr 12 18:24:37 2001//Tr21-5-24 +/orion.h/1.2/Thu Apr 12 18:24:37 2001//Tr21-5-24 +/orion105.h/1.3/Thu Nov 4 23:08:00 2004//Tr21-5-24 +/paragon.h/1.2/Sat Jun 21 20:04:30 1997//Tr21-5-24 +/pfa50.h/1.6/Thu Nov 4 23:08:00 2004//Tr21-5-24 +/plexus.h/1.5/Thu Nov 4 23:08:00 2004//Tr21-5-24 +/pmax.h/1.5/Thu Nov 4 23:08:00 2004//Tr21-5-24 +/powerpc.h/1.11/Thu Nov 4 23:08:00 2004//Tr21-5-24 +/pyramid.h/1.3/Thu Apr 12 18:24:37 2001//Tr21-5-24 +/pyrmips.h/1.2/Thu Nov 4 23:08:01 2004//Tr21-5-24 +/sequent-ptx.h/1.5/Thu Nov 4 23:08:01 2004//Tr21-5-24 +/sequent.h/1.4/Thu Nov 4 23:08:01 2004//Tr21-5-24 +/sgi-challenge.h/1.7/Thu Nov 4 23:08:01 2004//Tr21-5-24 +/sgi3000.h/1.1.1.1/Wed Dec 18 22:44:11 1996//Tr21-5-24 +/sparc.h/1.7/Thu Apr 12 18:24:39 2001//Tr21-5-24 +/sps7.h/1.4/Mon May 14 04:52:28 2001//Tr21-5-24 +/stride.h/1.5/Sat Mar 1 07:25:40 2003//Tr21-5-24 +/sun1.h/1.3/Thu Apr 12 18:24:39 2001//Tr21-5-24 +/sun2.h/1.4/Wed Mar 13 08:53:20 2002//Tr21-5-24 +/sun3-68881.h/1.2/Sat Jun 21 20:04:32 1997//Tr21-5-24 +/sun3-fpa.h/1.2/Sat Jun 21 20:04:32 1997//Tr21-5-24 +/sun3-soft.h/1.2/Sat Jun 21 20:04:32 1997//Tr21-5-24 +/sun3.h/1.2/Sat Jun 21 20:04:32 1997//Tr21-5-24 +/sun386.h/1.5/Wed Mar 13 08:53:20 2002//Tr21-5-24 +/symmetry.h/1.2/Thu Nov 4 23:08:02 2004//Tr21-5-24 +/tad68k.h/1.7/Thu Nov 4 23:08:02 2004//Tr21-5-24 +/tahoe.h/1.3/Thu Nov 4 23:08:03 2004//Tr21-5-24 +/tandem-s2.h/1.2/Sat Jun 21 20:04:33 1997//Tr21-5-24 +/targon31.h/1.4/Thu Nov 4 23:08:03 2004//Tr21-5-24 +/tek4300.h/1.2/Thu Apr 12 18:24:40 2001//Tr21-5-24 +/tekxd88.h/1.8/Thu Nov 4 23:08:03 2004//Tr21-5-24 +/template.h/1.4/Thu Nov 4 23:08:03 2004//Tr21-5-24 +/tower32.h/1.5/Thu Nov 4 23:08:03 2004//Tr21-5-24 +/tower32v3.h/1.5/Thu Nov 4 23:08:03 2004//Tr21-5-24 +/ustation.h/1.6/Thu Nov 4 23:08:03 2004//Tr21-5-24 +/vax.h/1.4/Thu Nov 4 23:08:04 2004//Tr21-5-24 +/wicat.h/1.7/Thu Nov 4 23:08:04 2004//Tr21-5-24 +/windowsnt.h/1.4/Wed Mar 13 08:53:20 2002//Tr21-5-24 +/xps100.h/1.5/Thu Nov 4 23:08:04 2004//Tr21-5-24 D diff -urN 21.5.23/src/m/CVS/Tag 21.5.24/src/m/CVS/Tag --- 21.5.23/src/m/CVS/Tag Mon Dec 19 04:21:31 2005 +++ 21.5.24/src/m/CVS/Tag Mon Dec 19 04:23:50 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/src/mc-alloc.c 21.5.24/src/mc-alloc.c --- 21.5.23/src/mc-alloc.c Fri Oct 14 10:22:01 2005 +++ 21.5.24/src/mc-alloc.c Fri Nov 25 10:42:05 2005 @@ -21,17 +21,43 @@ /* Synched up with: Not in FSF. */ #include + #include "lisp.h" #include "mc-alloc.h" +#include "getpagesize.h" -/*--- configurable values ----------------------------------------------*/ +#if 0 +# define USE_MARK_BITS_FREE_LIST 1 +#endif +#if 1 +# define BLOCKTYPE_ALLOC_PAGE_HEADER 1 +#endif -/* Valid page sizes are powers of 2. */ -#undef PAGE_SIZE /* for FreeBSD */ -#define PAGE_SIZE 2048 +/* Memory protection needs the real system-dependent pagesize. */ +#ifndef WIN32_NATIVE +#include /* for getpagesize () */ +#endif +#if defined (HAVE_GETPAGESIZE) +# define SYS_PAGE_SIZE getpagesize () +#elif defined (_SC_PAGESIZE) +# define SYS_PAGE_SIZE sysconf (_SC_PAGESIZE) +#elif defined (_SC_PAGE_SIZE) +# define SYS_PAGE_SIZE sysconf (_SC_PAGE_SIZE) +#elif defined(get_page_size) +# define SYS_PAGE_SIZE get_page_size () +#elif defined(PAGESIZE) +# define SYS_PAGE_SIZE PAGESIZE +#elif defined(PAGE_SIZE) +# define SYS_PAGE_SIZE PAGE_SIZE +#else + /* Valid page sizes are powers of 2. */ +# define SYS_PAGE_SIZE 4096 +#endif +/*--- configurable values ----------------------------------------------*/ + /* Definition of size classes */ /* Heap used list constants: In the used heap, it is important to @@ -41,11 +67,19 @@ avoid wasting memory. */ /* Minimum object size in bytes. */ -#define USED_LIST_MIN_OBJECT_SIZE 8 +#if BITS_PER_EMACS_INT > 32 +# define USED_LIST_MIN_OBJECT_SIZE 16 +#else +# define USED_LIST_MIN_OBJECT_SIZE 8 +#endif /* The step size by which the size classes increase (up to upper threshold). This many bytes are mapped to a single used list: */ -#define USED_LIST_LIN_STEP 4 +#if BITS_PER_EMACS_INT > 32 +# define USED_LIST_LIN_STEP 8 +#else +# define USED_LIST_LIN_STEP 4 +#endif /* The upper threshold should always be set to PAGE_SIZE/2, because if a object is larger than PAGE_SIZE/2 there is no room for any other @@ -53,26 +87,7 @@ the multiple pages, since a quick search for free spots is not needed for this kind of pages (because there are no free spots). PAGE_SIZES_DIV_2 defines maximum size of a used space list. */ -#define USED_LIST_UPPER_THRESHOLD PAGE_SIZE_DIV_2 - - -/* Unmanaged memory used list constants: Like in the used heap, it is - important to quickly find a free spot for a new object. Therefore - the size classes of the unmanaged heap are defined by the size of - the cells on the pages. The size classes should match common object - sizes, to avoid wasting memory. */ -/* Minimum object size in bytes. */ -#define UNMANAGED_LIST_MIN_OBJECT_SIZE 8 -/* The step size by which the size classes increase (up to upper - threshold). This many bytes are mapped to a single unmanaged list: */ -#define UNMANAGED_LIST_LIN_STEP 4 -/* The upper threshold should always be set to PAGE_SIZE/2, because if - a object is larger than PAGE_SIZE/2 there is no room for any other - object on this page. Objects this big are kept in the page list of - the multiple pages, since a quick search for free spots is not - needed for this kind of pages (because there are no free spots). - PAGE_SIZES defines maximum size of a unmanaged space list. */ -#define UNMANAGED_LIST_UPPER_THRESHOLD PAGE_SIZE_DIV_2 +#define USED_LIST_UPPER_THRESHOLD PAGE_SIZE_DIV_2 /* Heap free list constants: In the unused heap, the size of @@ -93,6 +108,18 @@ #define FREE_LIST_UPPER_THRESHOLD 256 +/* used heap list count */ +#define N_USED_PAGE_LISTS (((USED_LIST_UPPER_THRESHOLD \ + - USED_LIST_MIN_OBJECT_SIZE) \ + / USED_LIST_LIN_STEP) + 1 ) + 1 + +/* free heap list count */ +#define N_FREE_PAGE_LISTS (((FREE_LIST_UPPER_THRESHOLD \ + - FREE_LIST_LOWER_THRESHOLD) \ + / FREE_LIST_LIN_STEP) \ + + FREE_LIST_LOWER_THRESHOLD) + + /* Maximum number of separately added heap sections. */ #if BITS_PER_EMACS_INT > 32 # define MAX_HEAP_SECTS 2048 @@ -103,7 +130,7 @@ /* Heap growth constants. Heap increases by any number between the boundaries (unit is PAGE_SIZE). */ -#define MIN_HEAP_INCREASE 32 +#define MIN_HEAP_INCREASE 256 #define MAX_HEAP_INCREASE 256 /* not used */ /* Every heap growth is calculated like this: @@ -120,96 +147,22 @@ #define ZERO_MEM 1 - - -/*--- calculations done by macros --------------------------------------*/ - #ifndef CHAR_BIT /* should be included by limits.h */ # define CHAR_BIT BITS_PER_CHAR #endif -#if PAGE_SIZE == 512 -# define CPP_LOG_PAGE_SIZE 9 -#endif -#if PAGE_SIZE == 1024 -# define CPP_LOG_PAGE_SIZE 10 -#endif -#if PAGE_SIZE == 2048 -# define CPP_LOG_PAGE_SIZE 11 -#endif -#if PAGE_SIZE == 4096 -# define CPP_LOG_PAGE_SIZE 12 -#endif -#if PAGE_SIZE == 8192 -# define CPP_LOG_PAGE_SIZE 13 -#endif -#if PAGE_SIZE == 16384 -# define CPP_LOG_PAGE_SIZE 14 -#endif -#ifndef CPP_LOG_PAGE_SIZE ---> fix PAGE_SIZE -#endif -#undef PAGE_SIZE -#define CPP_PAGE_SIZE (1 << CPP_LOG_PAGE_SIZE) -#define LOG_PAGE_SIZE ((EMACS_INT) CPP_LOG_PAGE_SIZE) -#define PAGE_SIZE ((EMACS_INT) CPP_PAGE_SIZE) -#define PAGE_SIZE_DIV_2 (PAGE_SIZE >> 1) - - -/* NOT USED ANYMORE */ -#ifdef USE_EXPONENTIAL_USED_LIST_GROWTH -/* used heap list logarithms */ -#if USED_LIST_LOWER_THRESHOLD == 8 -# define CPP_LOG_USED_LIST_LOWER_THRESHOLD 3 -#endif -#if USED_LIST_LOWER_THRESHOLD == 16 -# define CPP_LOG_USED_LIST_LOWER_THRESHOLD 4 -#endif -#if USED_LIST_LOWER_THRESHOLD == 32 -# define CPP_LOG_USED_LIST_LOWER_THRESHOLD 5 -#endif -#if USED_LIST_LOWER_THRESHOLD == 64 -# define CPP_LOG_USED_LIST_LOWER_THRESHOLD 6 -#endif -#if USED_LIST_LOWER_THRESHOLD == 128 -# define CPP_LOG_USED_LIST_LOWER_THRESHOLD 7 -#endif -#if USED_LIST_LOWER_THRESHOLD == 256 -# define CPP_LOG_USED_LIST_LOWER_THRESHOLD 8 -#endif -#ifndef CPP_LOG_USED_LIST_LOWER_THRESHOLD ---> fix USED_LIST_LOWER_THRESHOLD -#endif -#define LOG_USED_LIST_LOWER_THRESHOLD CPP_LOG_USED_LIST_LOWER_THRESHOLD -#endif /* USE_EXPONENTIAL_USED_LIST_GROWTH */ -/* used heap list count */ -#define N_USED_PAGE_LISTS (((USED_LIST_UPPER_THRESHOLD \ - - USED_LIST_MIN_OBJECT_SIZE) \ - / USED_LIST_LIN_STEP) + 1 ) + 1 + +/*--- values depending on PAGE_SIZE ------------------------------------*/ -/* unmanaged memory list count */ -#define N_UNMANAGED_PAGE_LISTS (((UNMANAGED_LIST_UPPER_THRESHOLD \ - - UNMANAGED_LIST_MIN_OBJECT_SIZE) \ - / UNMANAGED_LIST_LIN_STEP) + 1 ) + 1 - -/* NOT USED ANYMORE */ -#ifdef USE_EXPONENTIAL_USED_LIST_GROWTH -#define N_USED_PAGE_LISTS_LIN (((USED_LIST_LOWER_THRESHOLD \ - - USED_LIST_MIN_OBJECT_SIZE) \ - / USED_LIST_LIN_STEP) + 1 ) -#define N_USED_PAGE_LISTS_EXP \ - (LOG_PAGE_SIZE - LOG_USED_LIST_LOWER_THRESHOLD) - -#define N_USED_PAGE_LISTS \ - (N_USED_PAGE_LISTS_LIN + N_USED_PAGE_LISTS_EXP + 1) -#endif /* USE_EXPONENTIAL_USED_LIST_GROWTH */ +/* initialized in init_mc_allocator () */ +static EMACS_INT log_page_size; +static EMACS_INT page_size_div_2; -/* free heap list count */ -#define N_FREE_PAGE_LISTS (((FREE_LIST_UPPER_THRESHOLD \ - - FREE_LIST_LOWER_THRESHOLD) \ - / FREE_LIST_LIN_STEP) \ - + FREE_LIST_LOWER_THRESHOLD) +#undef PAGE_SIZE +#define PAGE_SIZE SYS_PAGE_SIZE +#define LOG_PAGE_SIZE log_page_size +#define PAGE_SIZE_DIV_2 page_size_div_2 /* Constants for heap address to page header mapping. */ @@ -237,8 +190,7 @@ /*--- structs and typedefs ---------------------------------------------*/ -/* Links the free lists (mark_bit_free_list, page_header_free_list, - cell free list). */ +/* Links the free lists (mark_bit_free_list and cell free list). */ typedef struct free_link { struct lrecord_header lheader; @@ -246,7 +198,7 @@ } free_link; -/* Header for pages. They are hold in a doubly linked list. */ +/* Header for pages. They are held in a doubly linked list. */ typedef struct page_header { struct page_header *next; /* next page_header */ @@ -263,7 +215,11 @@ mark_bits holds the pointer to this area. Is the number of objects smaller than BITS_PER_EMACS_INT, the mark bits are held in the mark_bit EMACS_INT directly, without an additional indirection. */ - char *mark_bits; /* pointer to mark bits */ + unsigned int black_bit:1; /* objects on page are black */ + unsigned int dirty_bit:1; /* page is dirty */ + unsigned int protection_bit:1; /* page is write protected */ + unsigned int array_bit:1; /* page holds arrays */ + Rawbyte *mark_bits; /* pointer to mark bits */ void *heap_space; /* pointer to heap, where objects are stored */ } page_header; @@ -272,7 +228,6 @@ /* Different list types. */ enum list_type_enum { USED_LIST, - UNMANAGED_LIST, FREE_LIST }; @@ -339,20 +294,19 @@ /* Holds all allocated pages, each object size class in its separate list, to guarantee fast allocation on partially filled pages. */ - page_list_header used_heap_pages[N_USED_PAGE_LISTS]; - - /* Holds all unmanaged pages. */ - page_list_header unmanaged_heap_pages[N_UNMANAGED_PAGE_LISTS]; + page_list_header *used_heap_pages; /* Holds all free pages in the heap. N multiples of PAGE_SIZE are kept on the Nth free list. Contiguos pages are coalesced. */ page_list_header free_heap_pages[N_FREE_PAGE_LISTS]; /* ptr lookup table */ - level_2_lookup_tree *ptr_lookup_table[LEVEL1_SIZE]; + level_2_lookup_tree **ptr_lookup_table; +#ifndef BLOCKTYPE_ALLOC_PAGE_HEADER /* page header free list */ free_link *page_header_free_list; +#endif /* not BLOCKTYPE_ALLOC_PAGE_HEADER */ #ifdef MEMORY_USAGE_STATS EMACS_INT malloced_bytes; @@ -369,9 +323,6 @@ #define USED_HEAP_PAGES(i) \ ((page_list_header*) &mc_allocator_globals.used_heap_pages[i]) -#define UNMANAGED_HEAP_PAGES(i) \ - ((page_list_header*) &mc_allocator_globals.unmanaged_heap_pages[i]) - #define FREE_HEAP_PAGES(i) \ ((page_list_header*) &mc_allocator_globals.free_heap_pages[i]) @@ -398,6 +349,10 @@ # define PH_CELL_SIZE(ph) PH (ph)->cell_size # define PH_CELLS_ON_PAGE(ph) PH (ph)->cells_on_page # define PH_CELLS_USED(ph) PH (ph)->cells_used +# define PH_BLACK_BIT(ph) PH (ph)->black_bit +# define PH_DIRTY_BIT(ph) PH (ph)->dirty_bit +# define PH_PROTECTION_BIT(ph) PH (ph)->protection_bit +# define PH_ARRAY_BIT(ph) PH (ph)->array_bit # define PH_MARK_BITS(ph) PH (ph)->mark_bits # define PH_HEAP_SPACE(ph) PH (ph)->heap_space #define PH_LIST_TYPE(ph) PLH_LIST_TYPE (PH_PLH (ph)) @@ -412,7 +367,9 @@ #define HEAP_SECTION(index) mc_allocator_globals.heap_sections[index] #define N_HEAP_SECTIONS mc_allocator_globals.n_heap_sections +#ifndef BLOCKTYPE_ALLOC_PAGE_HEADER #define PAGE_HEADER_FREE_LIST mc_allocator_globals.page_header_free_list +#endif /* not BLOCKTYPE_ALLOC_PAGE_HEADER */ #define NEXT_FREE(free_list) ((free_link*) free_list)->next_free #define FREE_LIST(free_list) (free_link*) (free_list) @@ -444,9 +401,13 @@ #define PH_ON_USED_LIST_P(ph) \ (ph && PH_PLH (ph) && (PLH_LIST_TYPE (PH_PLH (ph)) == USED_LIST)) -#define PH_ON_UNMANAGED_LIST_P(ph) \ - (ph && PH_PLH (ph) && (PLH_LIST_TYPE (PH_PLH (ph)) == UNMANAGED_LIST)) +/* Number of mark bits: minimum 1, maximum 8. */ +#ifdef NEW_GC +#define N_MARK_BITS 2 +#else /* not NEW_GC */ +#define N_MARK_BITS 1 +#endif /* not NEW_GC */ @@ -455,12 +416,6 @@ /************************************************************************/ -/* ###TODO### */ -#if 1 -# define ALLOC_MB_UNMANAGED 1 -#endif - - /*--- misc functions ---------------------------------------------------*/ /* moved here from alloc.c */ @@ -483,7 +438,7 @@ static void visit_all_used_page_headers (void (*f) (page_header *ph)) { - int i; + EMACS_INT i; for (i = 0; i < N_USED_PAGE_LISTS; i++) if (PLH_FIRST (USED_HEAP_PAGES (i))) { @@ -507,7 +462,7 @@ static void set_lookup_table (void *ptr, page_header *ph) { - int l1_index = L1_INDEX (ptr); + EMACS_INT l1_index = L1_INDEX (ptr); level_2_lookup_tree *l2 = PTR_LOOKUP_TABLE (l1_index); #ifdef USE_HASH_TABLE while ((l2) && (LEVEL2_KEY (l2) != l1_index)) @@ -537,7 +492,7 @@ static void unset_lookup_table (void *ptr) { - int l1_index = L1_INDEX (ptr); + EMACS_INT l1_index = L1_INDEX (ptr); level_2_lookup_tree *l2 = PTR_LOOKUP_TABLE (l1_index); #ifdef USE_HASH_TABLE while ((l2) && (LEVEL2_KEY (l2) != l1_index)) @@ -554,7 +509,7 @@ static page_header * get_page_header_internal (void *ptr) { - int l1_index = L1_INDEX (ptr); + EMACS_INT l1_index = L1_INDEX (ptr); level_2_lookup_tree *l2 = PTR_LOOKUP_TABLE (l1_index); #ifdef USE_HASH_TABLE while ((l2) && (LEVEL2_KEY (l2) != l1_index)) @@ -569,7 +524,7 @@ static page_header * get_page_header (void *ptr) { - int l1_index = L1_INDEX (ptr); + EMACS_INT l1_index = L1_INDEX (ptr); level_2_lookup_tree *l2 = PTR_LOOKUP_TABLE (l1_index); assert (l2); #ifdef USE_HASH_TABLE @@ -580,14 +535,14 @@ return LEVEL2 (l2, L2_INDEX (ptr)); } - /* Returns the mark bit index of a given heap address. */ static EMACS_INT get_mark_bit_index (void *ptr, page_header *ph) { EMACS_INT cell_size = PH_CELL_SIZE (ph); if (cell_size) - return (((EMACS_INT) ptr - (EMACS_INT)(PH_HEAP_SPACE (ph))) / cell_size); + return (((EMACS_INT) ptr - (EMACS_INT)(PH_HEAP_SPACE (ph))) / cell_size) + * N_MARK_BITS; else /* only one object on page */ return 0; } @@ -597,9 +552,9 @@ static void add_pages_to_lookup_table (page_header *ph, EMACS_INT n_pages) { - char *p = (char*) PH_HEAP_SPACE (ph); + Rawbyte *p = (Rawbyte *) PH_HEAP_SPACE (ph); EMACS_INT end_of_section = (EMACS_INT) p + (PAGE_SIZE * n_pages); - for (p = (char*) PH_HEAP_SPACE (ph); + for (p = (Rawbyte *) PH_HEAP_SPACE (ph); (EMACS_INT) p < end_of_section; p += PAGE_SIZE) set_lookup_table (p, ph); } @@ -609,7 +564,7 @@ static void init_lookup_table (void) { - int i; + EMACS_INT i; for (i = 0; i < LEVEL1_SIZE; i++) PTR_LOOKUP_TABLE (i) = 0; } @@ -619,35 +574,32 @@ /*--- mark bits --------------------------------------------------------*/ -/* Number of mark bits: minimum 1, maximum 8. */ -#define N_MARK_BITS 1 - /*--- bit operations --- */ /* Allocates a bit array of length bits. */ -static char * +static Rawbyte * alloc_bit_array(size_t bits) { -#ifdef ALLOC_MB_UNMANAGED - size_t size = ((bits + CHAR_BIT - 1) / CHAR_BIT) * sizeof(char); + Rawbyte *bit_array; +#ifdef USE_MARK_BITS_FREE_LIST + size_t size = ((bits + CHAR_BIT - 1) / CHAR_BIT) * sizeof (Rawbyte); +#else /* not USE_MARK_BITS_FREE_LIST */ + size_t size = + ALIGN_FOR_TYPE (((bits + CHAR_BIT - 1) / CHAR_BIT) * sizeof (Rawbyte), + Rawbyte *); +#endif /* not USE_MARK_BITS_FREE_LIST */ if (size < sizeof (free_link)) size = sizeof (free_link); - return (char *) mc_alloc_unmanaged (size); -#else /* not ALLOC_MB_UNMANAGED */ - size_t size = ((bits + CHAR_BIT - 1) / CHAR_BIT) * sizeof(char); - char *bit_array; - if (size < sizeof (free_link)) size = sizeof (free_link); - bit_array = (char*) xmalloc_and_zero (size); #ifdef MEMORY_USAGE_STATS MC_MALLOCED_BYTES += malloced_storage_size (0, size, 0); #endif + bit_array = (Rawbyte *) xmalloc_and_zero (size); return bit_array; -#endif /* not ALLOC_MB_UNMANAGED */ } /* Returns the bit value at pos. */ static EMACS_INT -get_bit (char *bit_array, EMACS_INT pos) +get_bit (Rawbyte *bit_array, EMACS_INT pos) { #if N_MARK_BITS > 1 EMACS_INT result = 0; @@ -656,8 +608,8 @@ bit_array += pos / CHAR_BIT; #if N_MARK_BITS > 1 for (i = 0; i < N_MARK_BITS; i++) - result |= (*bit_array & (1 << ((pos + i) % CHAR_BIT))); - return result >> pos; + result |= ((*bit_array & (1 << ((pos + i) % CHAR_BIT))) != 0) << i; + return result; #else return (*bit_array & (1 << (pos % CHAR_BIT))) != 0; #endif @@ -666,10 +618,9 @@ /* Bit_Arrays bit at pos to val. */ static void -set_bit(char *bit_array, EMACS_INT pos, EMACS_INT val) +set_bit (Rawbyte *bit_array, EMACS_INT pos, EMACS_INT val) { #if N_MARK_BITS > 1 - EMACS_INT result = 0; EMACS_INT i; #endif bit_array += pos / CHAR_BIT; @@ -689,21 +640,23 @@ /*--- mark bit functions ---*/ -#define USE_PNTR_MARK_BITS(ph) (PH_CELLS_ON_PAGE (ph) > BITS_PER_EMACS_INT) -#define USE_WORD_MARK_BITS(ph) (PH_CELLS_ON_PAGE (ph) <= BITS_PER_EMACS_INT) +#define USE_PNTR_MARK_BITS(ph) \ + ((PH_CELLS_ON_PAGE (ph) * N_MARK_BITS) > BITS_PER_EMACS_INT) +#define USE_WORD_MARK_BITS(ph) \ + ((PH_CELLS_ON_PAGE (ph) * N_MARK_BITS) <= BITS_PER_EMACS_INT) -#define GET_BIT_WORD(b, p) get_bit ((char*) &b, p) +#define GET_BIT_WORD(b, p) get_bit ((Rawbyte *) &b, p) #define GET_BIT_PNTR(b, p) get_bit (b, p) -#define SET_BIT_WORD(b, p, v) set_bit ((char*) &b, p, v) +#define SET_BIT_WORD(b, p, v) set_bit ((Rawbyte *) &b, p, v) #define SET_BIT_PNTR(b, p, v) set_bit (b, p, v) #define ZERO_MARK_BITS_WORD(ph) PH_MARK_BITS (ph) = 0 -#define ZERO_MARK_BITS_PNTR(ph) \ -do { \ - memset (PH_MARK_BITS (ph), '\0', \ - (PH_CELLS_ON_PAGE (ph) + CHAR_BIT - 1) \ - / CHAR_BIT * sizeof(char)); \ +#define ZERO_MARK_BITS_PNTR(ph) \ +do { \ + memset (PH_MARK_BITS (ph), '\0', \ + ((PH_CELLS_ON_PAGE (ph) * N_MARK_BITS) \ + + CHAR_BIT - 1) / CHAR_BIT * sizeof (Rawbyte)); \ } while (0) #define GET_BIT(bit, ph, p) \ @@ -733,17 +686,21 @@ /* Allocates mark-bit space either from a free list or from the OS for the given page header. */ -static char * +static Rawbyte * alloc_mark_bits (page_header *ph) { - char *result; + Rawbyte *result; +#ifdef USE_MARK_BITS_FREE_LIST if (PH_MARK_BIT_FREE_LIST (ph) == 0) - result = (char*) alloc_bit_array (PH_CELLS_ON_PAGE (ph) * N_MARK_BITS); + result = (Rawbyte *) alloc_bit_array (PH_CELLS_ON_PAGE (ph) * N_MARK_BITS); else { - result = (char*) PH_MARK_BIT_FREE_LIST (ph); + result = (Rawbyte *) PH_MARK_BIT_FREE_LIST (ph); PH_MARK_BIT_FREE_LIST (ph) = NEXT_FREE (result); } +#else /* not USE_MARK_BITS_FREE_LIST */ + result = (Rawbyte *) alloc_bit_array (PH_CELLS_ON_PAGE (ph) * N_MARK_BITS); +#endif /* not USE_MARK_BITS_FREE_LIST */ return result; } @@ -752,15 +709,13 @@ static void free_mark_bits (page_header *ph) { -#ifdef ALLOC_MB_UNMANAGED +#ifdef USE_MARK_BITS_FREE_LIST + NEXT_FREE (PH_MARK_BITS (ph)) = PH_MARK_BIT_FREE_LIST (ph); + PH_MARK_BIT_FREE_LIST (ph) = FREE_LIST (PH_MARK_BITS (ph)); +#else /* not USE_MARK_BITS_FREE_LIST */ if (PH_MARK_BITS (ph)) - mc_free (PH_MARK_BITS (ph)); -#else /* not ALLOC_MB_UNMANAGED */ - if (PH_MARK_BITS (ph)) { - NEXT_FREE (PH_MARK_BITS (ph)) = PH_MARK_BIT_FREE_LIST (ph); - PH_MARK_BIT_FREE_LIST (ph) = FREE_LIST (PH_MARK_BITS (ph)); - } -#endif /* not ALLOC_MB_UNMANAGED */ + free (PH_MARK_BITS (ph)); +#endif /* not USE_MARK_BITS_FREE_LIST */ } @@ -818,6 +773,11 @@ assert (ph && PH_ON_USED_LIST_P (ph)); if (ph) { +#ifdef NEW_GC + if (value == BLACK) + if (!PH_BLACK_BIT (ph)) + PH_BLACK_BIT (ph) = 1; +#endif /* NEW_GC */ SET_BIT (ph, get_mark_bit_index (ptr, ph), value); } } @@ -827,10 +787,28 @@ /*--- page header functions --------------------------------------------*/ +#ifdef BLOCKTYPE_ALLOC_PAGE_HEADER +#include "blocktype.h" + +struct page_header_blocktype +{ + Blocktype_declare (page_header); +} *the_page_header_blocktype; +#endif /* BLOCKTYPE_ALLOC_PAGE_HEADER */ + /* Allocates a page header either from a free list or from the OS. */ static page_header * alloc_page_header (void) { +#ifdef BLOCKTYPE_ALLOC_PAGE_HEADER + page_header *result; +#ifdef MEMORY_USAGE_STATS + MC_MALLOCED_BYTES += malloced_storage_size (0, sizeof (page_header), 0); +#endif + result = Blocktype_alloc (the_page_header_blocktype); + ZERO_PAGE_HEADER (result); + return result; +#else /* not BLOCKTYPE_ALLOC_PAGE_HEADER */ page_header *result; if (PAGE_HEADER_FREE_LIST == 0) { @@ -839,7 +817,6 @@ #ifdef MEMORY_USAGE_STATS MC_MALLOCED_BYTES += malloced_storage_size (0, sizeof (page_header), 0); #endif - } else { @@ -847,6 +824,7 @@ PAGE_HEADER_FREE_LIST = NEXT_FREE (result); } return result; +#endif /* not BLOCKTYPE_ALLOC_PAGE_HEADER */ } @@ -854,11 +832,15 @@ static void free_page_header (page_header *ph) { +#ifdef BLOCKTYPE_ALLOC_PAGE_HEADER + Blocktype_free (the_page_header_blocktype, ph); +#else /* not BLOCKTYPE_ALLOC_PAGE_HEADER */ #if ZERO_MEM ZERO_PAGE_HEADER (ph); #endif NEXT_FREE (ph) = PAGE_HEADER_FREE_LIST; PAGE_HEADER_FREE_LIST = FREE_LIST (ph); +#endif /* not BLOCKTYPE_ALLOC_PAGE_HEADER */ } @@ -940,14 +922,22 @@ get_used_list_index (size_t size) { if (size <= USED_LIST_MIN_OBJECT_SIZE) - return 0; - if (size <= USED_LIST_UPPER_THRESHOLD) - return ((size - USED_LIST_MIN_OBJECT_SIZE - 1) - / USED_LIST_LIN_STEP) + 1; + { + // printf ("size %d -> index %d\n", size, 0); + return 0; + } + if (size <= (size_t) USED_LIST_UPPER_THRESHOLD) + { + // printf ("size %d -> index %d\n", size, + // ((size - USED_LIST_MIN_OBJECT_SIZE - 1) + // / USED_LIST_LIN_STEP) + 1); + return ((size - USED_LIST_MIN_OBJECT_SIZE - 1) + / USED_LIST_LIN_STEP) + 1; + } + // printf ("size %d -> index %d\n", size, N_USED_PAGE_LISTS - 1); return N_USED_PAGE_LISTS - 1; } - /* Returns the size of the used heap list according to given index. */ static size_t get_used_list_size_value (int used_index) @@ -958,32 +948,8 @@ } -/* Returns the index of the used heap list according to given size. */ -static int -get_unmanaged_list_index (size_t size) -{ - if (size <= UNMANAGED_LIST_MIN_OBJECT_SIZE) - return 0; - if (size <= UNMANAGED_LIST_UPPER_THRESHOLD) - return ((size - UNMANAGED_LIST_MIN_OBJECT_SIZE - 1) - / UNMANAGED_LIST_LIN_STEP) + 1; - return N_UNMANAGED_PAGE_LISTS - 1; -} - - -/* Returns the size of the unmanaged heap list according to given index. */ -static size_t -get_unmanaged_list_size_value (int unmanaged_index) -{ - if (unmanaged_index < N_UNMANAGED_PAGE_LISTS - 1) - return (unmanaged_index * UNMANAGED_LIST_LIN_STEP) - + UNMANAGED_LIST_MIN_OBJECT_SIZE; - return 0; -} - - /* Returns the index of the free heap list according to given size. */ -static int +static EMACS_INT get_free_list_index (EMACS_INT n_pages) { if (n_pages == 0) @@ -1000,7 +966,7 @@ /* Returns the size in number of pages of the given free list at index. */ static size_t -get_free_list_size_value (int free_index) +get_free_list_size_value (EMACS_INT free_index) { if (free_index < FREE_LIST_LOWER_THRESHOLD) return free_index + 1; @@ -1038,8 +1004,8 @@ static EMACS_INT free_heap_section (page_header *ph) { - int i; - int removed = 0; + EMACS_INT i; + EMACS_INT removed = 0; for (i = 0; i < N_HEAP_SECTIONS; i++) if (!removed) { @@ -1220,22 +1186,23 @@ /*--- used heap functions ----------------------------------------------*/ /* Installs initial free list. */ static void -install_cell_free_list (page_header *ph) +install_cell_free_list (page_header *ph, EMACS_INT elemcount) { - char *p; - int i; + Rawbyte *p; + EMACS_INT i; EMACS_INT cell_size = PH_CELL_SIZE (ph); /* write initial free list if cell_size is < PAGE_SIZE */ - p = (char *) PH_HEAP_SPACE (ph); + p = (Rawbyte *) PH_HEAP_SPACE (ph); for (i = 0; i < PH_CELLS_ON_PAGE (ph) - 1; i++) { #ifdef ERROR_CHECK_GC assert (!LRECORD_FREE_P (p)); MARK_LRECORD_AS_FREE (p); #endif - NEXT_FREE (p) = FREE_LIST (p + cell_size); + if (elemcount == 1) + NEXT_FREE (p) = FREE_LIST (p + cell_size); set_lookup_table (p, ph); - p += cell_size; + p += cell_size; } #ifdef ERROR_CHECK_GC assert (!LRECORD_FREE_P (p)); @@ -1263,7 +1230,7 @@ /* Installs a new page and hooks it into given page_list_header. */ static page_header * install_page_in_used_list (page_header *ph, page_list_header *plh, - size_t size, int managed) + size_t size, EMACS_INT elemcount) { /* add to list */ add_page_header_to_plh (ph, plh); @@ -1273,16 +1240,21 @@ PH_CELL_SIZE (ph) = PLH_SIZE (plh); else PH_CELL_SIZE (ph) = size; - PH_CELLS_ON_PAGE (ph) = (PAGE_SIZE * PH_N_PAGES (ph)) / PH_CELL_SIZE (ph); + if (elemcount == 1) + PH_CELLS_ON_PAGE (ph) = (PAGE_SIZE * PH_N_PAGES (ph)) / PH_CELL_SIZE (ph); + else + { + PH_CELLS_ON_PAGE (ph) = elemcount; + PH_ARRAY_BIT (ph) = 1; + } /* init cell count */ PH_CELLS_USED (ph) = 0; /* install mark bits and initialize cell free list */ - if (managed) - install_mark_bits (ph); + install_mark_bits (ph); - install_cell_free_list (ph); + install_cell_free_list (ph, elemcount); #ifdef MEMORY_USAGE_STATS PLH_TOTAL_CELLS (plh) += PH_CELLS_ON_PAGE (ph); @@ -1299,6 +1271,11 @@ { page_list_header *plh = PH_PLH (ph); +#ifdef NEW_GC + if (gc_in_progress && PH_PROTECTION_BIT (ph)) ABORT(); + /* cleanup: remove memory protection, zero page_header bits. */ +#endif /* not NEW_GC */ + #ifdef MEMORY_USAGE_STATS PLH_TOTAL_CELLS (plh) -= PH_CELLS_ON_PAGE (ph); PLH_TOTAL_SPACE (plh) -= PAGE_SIZE * PH_N_PAGES (ph); @@ -1377,7 +1354,7 @@ allocate_page_from_free_list (EMACS_INT needed_pages) { page_header *ph = 0; - int i; + EMACS_INT i; for (i = get_free_list_index (needed_pages); i < N_FREE_PAGE_LISTS; i++) if ((ph = find_free_page_first_fit (needed_pages, PLH_FIRST (FREE_HEAP_PAGES (i)))) != 0) @@ -1396,15 +1373,15 @@ /* Allocates a new page, either from free list or by expanding the heap. */ static page_header * -allocate_new_page (page_list_header *plh, size_t size, int managed) +allocate_new_page (page_list_header *plh, size_t size, EMACS_INT elemcount) { - EMACS_INT needed_pages = BYTES_TO_PAGES (size); + EMACS_INT needed_pages = BYTES_TO_PAGES (size * elemcount); /* first check free list */ page_header *result = allocate_page_from_free_list (needed_pages); if (!result) /* expand heap */ result = expand_heap (needed_pages); - install_page_in_used_list (result, plh, size, managed); + install_page_in_used_list (result, plh, size, elemcount); return result; } @@ -1412,63 +1389,56 @@ /* Selects the correct size class, tries to allocate a cell of this size from the free list, if this fails, a new page is allocated. */ static void * -mc_alloc_1 (size_t size, int managed) +mc_alloc_1 (size_t size, EMACS_INT elemcount) { page_list_header *plh = 0; page_header *ph = 0; void *result = 0; - if (managed) - plh = USED_HEAP_PAGES (get_used_list_index (size)); - else - plh = UNMANAGED_HEAP_PAGES (get_unmanaged_list_index (size)); + plh = USED_HEAP_PAGES (get_used_list_index (size)); if (size == 0) return 0; - if (size < PAGE_SIZE_DIV_2) + if ((elemcount == 1) && (size < (size_t) PAGE_SIZE_DIV_2)) /* first check any free cells */ ph = allocate_cell (plh); if (!ph) /* allocate a new page */ - ph = allocate_new_page (plh, size, managed); + ph = allocate_new_page (plh, size, elemcount); /* return first element of free list and remove it from the list */ result = (void*) PH_FREE_LIST (ph); PH_FREE_LIST (ph) = NEXT_FREE (PH_FREE_LIST (ph)); - memset (result, '\0', size); - if (managed) - MARK_LRECORD_AS_FREE (result); + memset (result, '\0', (size * elemcount)); + MARK_LRECORD_AS_FREE (result); /* bump used cells counter */ - PH_CELLS_USED (ph)++; + PH_CELLS_USED (ph) += elemcount; #ifdef MEMORY_USAGE_STATS - PLH_USED_CELLS (plh)++; - if (managed) - PLH_USED_SPACE (plh) += size; - else - PLH_USED_SPACE (plh) += PLH_SIZE (plh); + PLH_USED_CELLS (plh) += elemcount; + PLH_USED_SPACE (plh) += size * elemcount; #endif return result; } +/* Array allocation. */ void * -mc_alloc (size_t size) +mc_alloc_array (size_t size, EMACS_INT elemcount) { - return mc_alloc_1 (size, 1); + return mc_alloc_1 (size, elemcount); } void * -mc_alloc_unmanaged (size_t size) +mc_alloc (size_t size) { - return mc_alloc_1 (size, 0); + return mc_alloc_1 (size, 1); } - /*--- sweep & free & finalize-------------------------------------------*/ @@ -1512,7 +1482,11 @@ free_link *fl = PH_FREE_LIST (ph); while (fl) { +#ifdef NEW_GC + SET_BIT (ph, get_mark_bit_index (fl, ph), BLACK); +#else /* not NEW_GC */ SET_BIT (ph, get_mark_bit_index (fl, ph), 1); +#endif /* not NEW_GC */ fl = NEXT_FREE (fl); } } @@ -1529,14 +1503,31 @@ EMACS_INT heap_space_step = PH_CELL_SIZE (ph); EMACS_INT mark_bit = 0; EMACS_INT mark_bit_max_index = PH_CELLS_ON_PAGE (ph); - int bit = 0; + unsigned int bit = 0; mark_free_list (ph); +#ifdef NEW_GC + /* ARRAY_BIT_HACK */ + if (PH_ARRAY_BIT (ph)) + for (mark_bit = 0; mark_bit < mark_bit_max_index; mark_bit++) + { + GET_BIT (bit, ph, mark_bit * N_MARK_BITS); + if (bit) + { + return; + } + } +#endif /* NEW_GC */ + for (mark_bit = 0; mark_bit < mark_bit_max_index; mark_bit++) { - GET_BIT (bit, ph, mark_bit); - if (!bit) + GET_BIT (bit, ph, mark_bit * N_MARK_BITS); +#ifdef NEW_GC + if (bit == WHITE) +#else /* not NEW_GC */ + if (bit == 0) +#endif /* not NEW_GC */ { EMACS_INT ptr = (heap_space + (heap_space_step * mark_bit)); MC_ALLOC_CALL_FINALIZER ((void *) ptr); @@ -1559,8 +1550,6 @@ EMACS_INT mark_bit = 0; EMACS_INT mark_bit_max_index = PH_CELLS_ON_PAGE (ph); - mark_free_list (ph); - for (mark_bit = 0; mark_bit < mark_bit_max_index; mark_bit++) { EMACS_INT ptr = (heap_space + (heap_space_step * mark_bit)); @@ -1591,23 +1580,46 @@ static void sweep_page (page_header *ph) { - char *heap_space = (char *) PH_HEAP_SPACE (ph); + Rawbyte *heap_space = (Rawbyte *) PH_HEAP_SPACE (ph); EMACS_INT heap_space_step = PH_CELL_SIZE (ph); EMACS_INT mark_bit = 0; EMACS_INT mark_bit_max_index = PH_CELLS_ON_PAGE (ph); - int bit = 0; + unsigned int bit = 0; mark_free_list (ph); +#ifdef NEW_GC + /* ARRAY_BIT_HACK */ + if (PH_ARRAY_BIT (ph)) + for (mark_bit = 0; mark_bit < mark_bit_max_index; mark_bit++) + { + GET_BIT (bit, ph, mark_bit * N_MARK_BITS); + if (bit) + { + zero_mark_bits (ph); + PH_BLACK_BIT (ph) = 0; + return; + } + } +#endif /* NEW_GC */ + for (mark_bit = 0; mark_bit < mark_bit_max_index; mark_bit++) { - GET_BIT (bit, ph, mark_bit); - if (!bit) + GET_BIT (bit, ph, mark_bit * N_MARK_BITS); +#ifdef NEW_GC + if (bit == WHITE) +#else /* not NEW_GC */ + if (bit == 0) +#endif /* not NEW_GC */ { +#ifdef NEW_GC + GC_STAT_FREED; +#endif /* NEW_GC */ remove_cell (heap_space + (heap_space_step * mark_bit), ph); } } zero_mark_bits (ph); + PH_BLACK_BIT (ph) = 0; if (PH_CELLS_USED (ph) == 0) remove_page_from_used_list (ph); else if (PH_CELLS_USED (ph) < PH_CELLS_ON_PAGE (ph)) @@ -1627,9 +1639,24 @@ void mc_free (void *ptr) { - page_header *ph = get_page_header (ptr); - assert (!PH_ON_FREE_LIST_P (ph)); + page_header *ph; + +#ifdef NEW_GC + /* Do not allow manual freeing while a gc is running. Data is going + to be freed next gc cycle. */ + if (write_barrier_enabled || gc_in_progress) + return; +#endif /* NEW_GC */ + + ph = get_page_header (ptr); + assert (ph); + assert (PH_PLH (ph)); + assert (PLH_LIST_TYPE (PH_PLH (ph)) != FREE_LIST); +#ifdef NEW_GC + if (PH_ON_USED_LIST_P (ph)) + SET_BIT (ph, get_mark_bit_index (ptr, ph), WHITE); +#endif /* NEW_GC */ remove_cell (ptr, ph); if (PH_CELLS_USED (ph) == 0) @@ -1642,29 +1669,32 @@ /* Changes the size of the cell pointed to by ptr. Returns the new address of the new cell with new size. */ void * -mc_realloc_1 (void *ptr, size_t size, int managed) +mc_realloc_1 (void *ptr, size_t size, int elemcount) { if (ptr) { - if (size) + if (size * elemcount) { - void *result = mc_alloc_1 (size, managed); + void *result = mc_alloc_1 (size, elemcount); size_t from_size = PH_CELL_SIZE (get_page_header (ptr)); - size_t cpy_size = size; - if (size > from_size) + size_t cpy_size = size * elemcount; + if (cpy_size > from_size) cpy_size = from_size; memcpy (result, ptr, cpy_size); - mc_free (ptr); +#ifdef ALLOC_TYPE_STATS + inc_lrecord_stats (size, (struct lrecord_header *) result); +#endif /* not ALLOC_TYPE_STATS */ + /* mc_free (ptr); not needed, will be collected next gc */ return result; } else { - mc_free (ptr); + /* mc_free (ptr); not needed, will be collected next gc */ return 0; } } else - return mc_alloc_1 (size, managed); + return mc_alloc_1 (size, elemcount); } void * @@ -1674,13 +1704,12 @@ } void * -mc_realloc_unmanaged (void *ptr, size_t size) +mc_realloc_array (void *ptr, size_t size, EMACS_INT elemcount) { - return mc_realloc_1 (ptr, size, 0); + return mc_realloc_1 (ptr, size, elemcount); } - /*--- initialization ---------------------------------------------------*/ @@ -1688,32 +1717,49 @@ void init_mc_allocator (void) { - int i; + EMACS_INT i; - memset (&mc_allocator_globals, '\0', sizeof (mc_allocator_globals_type)); +#ifdef MEMORY_USAGE_STATS + MC_MALLOCED_BYTES = 0; +#endif - for (i = 0; i < N_USED_PAGE_LISTS; i++) + /* init of pagesize dependent values */ + switch (SYS_PAGE_SIZE) { - page_list_header *plh = USED_HEAP_PAGES (i); - PLH_LIST_TYPE (plh) = USED_LIST; - PLH_SIZE (plh) = get_used_list_size_value (i); - PLH_FIRST (plh) = 0; - PLH_LAST (plh) = 0; - PLH_MARK_BIT_FREE_LIST (plh) = 0; + case 512: log_page_size = 9; break; + case 1024: log_page_size = 10; break; + case 2048: log_page_size = 11; break; + case 4096: log_page_size = 12; break; + case 8192: log_page_size = 13; break; + case 16384: log_page_size = 14; break; + default: ABORT (); + } + + page_size_div_2 = (EMACS_INT) SYS_PAGE_SIZE >> 1; + + mc_allocator_globals.used_heap_pages = + (page_list_header *) xmalloc_and_zero ((N_USED_PAGE_LISTS + 1) + * sizeof (page_list_header)); #ifdef MEMORY_USAGE_STATS - PLH_PAGE_COUNT (plh) = 0; - PLH_USED_CELLS (plh) = 0; - PLH_USED_SPACE (plh) = 0; - PLH_TOTAL_CELLS (plh) = 0; - PLH_TOTAL_SPACE (plh) = 0; + MC_MALLOCED_BYTES += (N_USED_PAGE_LISTS + 1) * sizeof (page_list_header); #endif - } - for (i = 0; i < N_UNMANAGED_PAGE_LISTS; i++) + mc_allocator_globals.ptr_lookup_table = + (level_2_lookup_tree **) + xmalloc_and_zero ((LEVEL1_SIZE + 1) * sizeof (level_2_lookup_tree *)); +#ifdef MEMORY_USAGE_STATS + MC_MALLOCED_BYTES += (LEVEL1_SIZE + 1) * sizeof (level_2_lookup_tree *); +#endif + +#ifdef BLOCKTYPE_ALLOC_PAGE_HEADER + the_page_header_blocktype = Blocktype_new (struct page_header_blocktype); +#endif /* BLOCKTYPE_ALLOC_PAGE_HEADER */ + + for (i = 0; i < N_USED_PAGE_LISTS; i++) { - page_list_header *plh = UNMANAGED_HEAP_PAGES (i); - PLH_LIST_TYPE (plh) = UNMANAGED_LIST; - PLH_SIZE (plh) = get_unmanaged_list_size_value (i); + page_list_header *plh = USED_HEAP_PAGES (i); + PLH_LIST_TYPE (plh) = USED_LIST; + PLH_SIZE (plh) = get_used_list_size_value (i); PLH_FIRST (plh) = 0; PLH_LAST (plh) = 0; PLH_MARK_BIT_FREE_LIST (plh) = 0; @@ -1743,10 +1789,12 @@ #endif } +#ifndef BLOCKTYPE_ALLOC_PAGE_HEADER PAGE_HEADER_FREE_LIST = 0; +#endif /* not BLOCKTYPE_ALLOC_PAGE_HEADER */ #ifdef MEMORY_USAGE_STATS - MC_MALLOCED_BYTES = sizeof (mc_allocator_globals); + MC_MALLOCED_BYTES += sizeof (mc_allocator_globals); #endif init_lookup_table (); @@ -1765,12 +1813,11 @@ { Lisp_Object free_plhs = Qnil; Lisp_Object used_plhs = Qnil; - Lisp_Object unmanaged_plhs = Qnil; Lisp_Object heap_sects = Qnil; - int used_size = 0; - int real_size = 0; + EMACS_INT used_size = 0; + EMACS_INT real_size = 0; - int i; + EMACS_INT i; for (i = 0; i < N_FREE_PAGE_LISTS; i++) if (PLH_PAGE_COUNT (FREE_HEAP_PAGES(i)) > 0) @@ -1779,17 +1826,6 @@ list1 (make_int (PLH_PAGE_COUNT (FREE_HEAP_PAGES(i)))), free_plhs); - for (i = 0; i < N_UNMANAGED_PAGE_LISTS; i++) - if (PLH_PAGE_COUNT (UNMANAGED_HEAP_PAGES(i)) > 0) - unmanaged_plhs = - acons (make_int (PLH_SIZE (UNMANAGED_HEAP_PAGES(i))), - list5 (make_int (PLH_PAGE_COUNT (UNMANAGED_HEAP_PAGES(i))), - make_int (PLH_USED_CELLS (UNMANAGED_HEAP_PAGES(i))), - make_int (PLH_USED_SPACE (UNMANAGED_HEAP_PAGES(i))), - make_int (PLH_TOTAL_CELLS (UNMANAGED_HEAP_PAGES(i))), - make_int (PLH_TOTAL_SPACE (UNMANAGED_HEAP_PAGES(i)))), - unmanaged_plhs); - for (i = 0; i < N_USED_PAGE_LISTS; i++) if (PLH_PAGE_COUNT (USED_HEAP_PAGES(i)) > 0) used_plhs = @@ -1813,9 +1849,8 @@ make_int (real_size)); return Fcons (make_int (PAGE_SIZE), - list6 (heap_sects, + list5 (heap_sects, Fnreverse (used_plhs), - Fnreverse (unmanaged_plhs), Fnreverse (free_plhs), make_int (sizeof (mc_allocator_globals)), make_int (MC_MALLOCED_BYTES))); @@ -1829,3 +1864,198 @@ DEFSUBR (Fmc_alloc_memory_usage); #endif /* MEMORY_USAGE_STATS */ } + + +#ifdef NEW_GC +/*--- incremental garbage collector ----------------------------------*/ + +/* access dirty bit of page header */ +void +set_dirty_bit (page_header *ph, unsigned int value) +{ + PH_DIRTY_BIT (ph) = value; +} + +void +set_dirty_bit_for_address (void *ptr, unsigned int value) +{ + set_dirty_bit (get_page_header (ptr), value); +} + +unsigned int +get_dirty_bit (page_header *ph) +{ + return PH_DIRTY_BIT (ph); +} + +unsigned int +get_dirty_bit_for_address (void *ptr) +{ + return get_dirty_bit (get_page_header (ptr)); +} + + +/* access protection bit of page header */ +void +set_protection_bit (page_header *ph, unsigned int value) +{ + PH_PROTECTION_BIT (ph) = value; +} + +void +set_protection_bit_for_address (void *ptr, unsigned int value) +{ + set_protection_bit (get_page_header (ptr), value); +} + +unsigned int +get_protection_bit (page_header *ph) +{ + return PH_PROTECTION_BIT (ph); +} + +unsigned int +get_protection_bit_for_address (void *ptr) +{ + return get_protection_bit (get_page_header (ptr)); +} + + +/* Returns the start of the page of the object pointed to by ptr. */ +void * +get_page_start (void *ptr) +{ + return PH_HEAP_SPACE (get_page_header (ptr)); +} + +/* Make PAGE_SIZE globally available. */ +EMACS_INT +mc_get_page_size () +{ + return PAGE_SIZE; +} + +/* Is the fault at ptr on a protected page? */ +EMACS_INT +fault_on_protected_page (void *ptr) +{ + page_header *ph = get_page_header_internal (ptr); + return (ph + && PH_HEAP_SPACE (ph) + && (PH_HEAP_SPACE (ph) <= ptr) + && ((void *) ((EMACS_INT) PH_HEAP_SPACE (ph) + + PH_N_PAGES (ph) * PAGE_SIZE) > ptr) + && (PH_PROTECTION_BIT (ph) == 1)); +} + + +/* Protect the heap page of given page header ph if black objects are + on the page. */ +static void +protect_heap_page (page_header *ph) +{ + if (PH_BLACK_BIT (ph)) + { + void *heap_space = PH_HEAP_SPACE (ph); + EMACS_INT heap_space_size = PH_N_PAGES (ph) * PAGE_SIZE; + vdb_protect ((void *) heap_space, heap_space_size); + PH_PROTECTION_BIT (ph) = 1; + } +} + +/* Protect all heap pages with black objects. */ +void +protect_heap_pages (void) +{ + visit_all_used_page_headers (protect_heap_page); +} + + +/* Remove protection (if there) of heap page of given page header + ph. */ +static void +unprotect_heap_page (page_header *ph) +{ + if (PH_PROTECTION_BIT (ph)) + { + void *heap_space = PH_HEAP_SPACE (ph); + EMACS_INT heap_space_size = PH_N_PAGES (ph) * PAGE_SIZE; + vdb_unprotect (heap_space, heap_space_size); + PH_PROTECTION_BIT (ph) = 0; + } +} + +/* Remove protection for all heap pages which are protected. */ +void +unprotect_heap_pages (void) +{ + visit_all_used_page_headers (unprotect_heap_page); +} + +/* Remove protection and mark page dirty. */ +void +unprotect_page_and_mark_dirty (void *ptr) +{ + page_header *ph = get_page_header (ptr); + unprotect_heap_page (ph); + PH_DIRTY_BIT (ph) = 1; +} + +/* Repush all objects on dirty pages onto the mark stack. */ +int +repush_all_objects_on_page (void *ptr) +{ + int repushed_objects = 0; + page_header *ph = get_page_header (ptr); + Rawbyte *heap_space = (Rawbyte *) PH_HEAP_SPACE (ph); + EMACS_INT heap_space_step = PH_CELL_SIZE (ph); + EMACS_INT mark_bit = 0; + EMACS_INT mark_bit_max_index = PH_CELLS_ON_PAGE (ph); + unsigned int bit = 0; + for (mark_bit = 0; mark_bit < mark_bit_max_index; mark_bit++) + { + GET_BIT (bit, ph, mark_bit * N_MARK_BITS); + if (bit == BLACK) + { + repushed_objects++; + gc_write_barrier + (wrap_pointer_1 ((heap_space + (heap_space_step * mark_bit)))); + } + } + PH_BLACK_BIT (ph) = 0; + PH_DIRTY_BIT (ph) = 0; + return repushed_objects; +} + +/* Mark black if object is currently grey. This first checks, if the + object is really allocated on the mc-heap. If it is, it can be + marked black; if it is not, it cannot be marked. */ +EMACS_INT +maybe_mark_black (void *ptr) +{ + page_header *ph = get_page_header_internal (ptr); + unsigned int bit = 0; + + if (ph && PH_PLH (ph) && PH_ON_USED_LIST_P (ph)) + { + GET_BIT (bit, ph, get_mark_bit_index (ptr, ph)); + if (bit == GREY) + { + if (!PH_BLACK_BIT (ph)) + PH_BLACK_BIT (ph) = 1; + SET_BIT (ph, get_mark_bit_index (ptr, ph), BLACK); + } + return 1; + } + return 0; +} + +/* Only for debugging --- not used anywhere in the sources. */ +EMACS_INT +object_on_heap_p (void *ptr) +{ + page_header *ph = get_page_header_internal (ptr); + return (ph && PH_ON_USED_LIST_P (ph)); +} + +#endif /* NEW_GC */ diff -urN 21.5.23/src/mc-alloc.h 21.5.24/src/mc-alloc.h --- 21.5.23/src/mc-alloc.h Fri Oct 14 10:22:01 2005 +++ 21.5.24/src/mc-alloc.h Fri Nov 25 10:42:05 2005 @@ -23,43 +23,87 @@ #ifndef INCLUDED_mc_alloc_h_ #define INCLUDED_mc_alloc_h_ - -/* This is moved here from alloc.c. */ -#ifndef MALLOC_OVERHEAD -# ifdef GNU_MALLOC -# define MALLOC_OVERHEAD 0 -# elif defined (rcheck) -# define MALLOC_OVERHEAD 20 -# else -# define MALLOC_OVERHEAD 8 -# endif -#endif /* MALLOC_OVERHEAD */ - /*--- prototypes -------------------------------------------------------*/ BEGIN_C_DECLS -/* Allocation related functions and macros: */ +/* Internal Allocator Functions: */ -/* Builds and initializes all needed datastructures of the new allocator. */ +/* Initialize the allocator. This has to be called prior to + requesting memory. */ void init_mc_allocator (void); -/* Returns a pointer to a block of memory of given size on the used heap. */ +/* Allocate a block of memory of given size and return the pointer to + it. */ void *mc_alloc (size_t size); -/* Frees the object pointed to by pointer. */ +/* Allocate a block of memory as an array with elemcount elements of + given size and return the pointer to it. Arrays contain several + objects that are allocated in one consecutive block of memory with + each element being a fully qualified object---that is, it has a + Lisp object header and a mark bit. Objects like hash tables and + dynamic arrays use this function. */ +void *mc_alloc_array (size_t size, EMACS_INT elemcount); + +/* Free the object pointed to by ptr and make its memory re-usable + again. The memory must have been returned by a previous call to + mc_alloc(). This can be used to free memory explicitly, outside a + garbage collection. */ void mc_free (void *ptr); -/* Modifies the size of the memory block pointed to by ptr. The - Address of the new block of given size is returned. */ +/* Modify the size of the memory block pointed to by ptr. Return the + address of the new block of given size. The content of the memory + block will be unchanged to the minimum of the old and new sizes: if + the new size is smaller, the overlaying data is cut off; if the new + size is bigger, the newly allocated memory will be uninitialized.*/ void *mc_realloc (void *ptr, size_t size); +/* Modify the size of the array pointed to by ptr. Return the address + of the new array block with elemcount elements of given size. The + content of the memory block will be unchanged to the minimum of the + old and new sizes: if the new size is smaller, the overlaying data + is cut off; if the new size is bigger, the newly allocated memory + will be uninitialized.*/ +void *mc_realloc_array (void *ptr, size_t size, EMACS_INT elemcount); + /* Garbage collection related functions and macros: */ +#ifdef NEW_GC +enum mark_bit_colors +{ + WHITE = 0, + BLACK = 1, + GREY = 2 +}; + +/* Set the mark bit of the object pointed to by ptr to value.*/ +void set_mark_bit (void *ptr, EMACS_INT value); + +/* Return the mark bit of the object pointed to by ptr. */ +EMACS_INT get_mark_bit (void *ptr); + +/* mark bit macros */ +/* Returns true if the mark bit of the object pointed to by ptr is set. */ +#define MARKED_P(ptr) (get_mark_bit (ptr) != WHITE) + +/* Marks the object pointed to by ptr (sets the mark bit to 1). */ +#define MARK(ptr) set_mark_bit (ptr, BLACK) + +/* Unmarks the object pointed to by ptr (sets the mark bit to 0). */ +#define UNMARK(ptr) set_mark_bit (ptr, WHITE) + +#define MARK_WHITE(ptr) set_mark_bit (ptr, WHITE) +#define MARK_GREY(ptr) set_mark_bit (ptr, GREY) +#define MARK_BLACK(ptr) set_mark_bit (ptr, BLACK) + +#define MARKED_WHITE_P(ptr) (get_mark_bit (ptr) == WHITE) +#define MARKED_GREY_P(ptr) (get_mark_bit (ptr) == GREY) +#define MARKED_BLACK_P(ptr) (get_mark_bit (ptr) == BLACK) +#else /* not NEW_GC */ /* Set the mark bit of the object pointed to by ptr to value.*/ void set_mark_bit (void *ptr, EMACS_INT value); @@ -75,8 +119,9 @@ /* Unmarks the object pointed to by ptr (sets the mark bit to 0). */ #define UNMARK(ptr) set_mark_bit (ptr, 0) +#endif /* not NEW_GC */ -/* The finalizer of every not marked object is called. The macro +/* The finalizer of every not marked object is called. The macro MC_ALLOC_CALL_FINALIZER has to be defined and call the finalizer of the object. */ void mc_finalize (void); @@ -89,24 +134,12 @@ /* Portable dumper related functions and macros: */ /* The finalizer for disksave of every object is called to shrink the - dump image. The macro MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE has to + dump image. The macro MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE has to be defined and call the finalizer for disksave of the object. */ void mc_finalize_for_disksave (void); -/* Allocation function for the unmanaged heap: */ - -/* Returns a pointer to a block of memory of given size on the - unmanaged heap. */ -void *mc_alloc_unmanaged (size_t size); - -/* Modifies the size of the memory block pointed to by ptr. The - Address of the new block of given size is returned. */ -void *mc_realloc_unmanaged (void *ptr, size_t size); - - - /* Functions and macros related with allocation statistics: */ #ifdef MEMORY_USAGE_STATS @@ -115,6 +148,39 @@ Bytecount mc_alloced_storage_size (Bytecount claimed_size, struct overhead_stats *stats); #endif /* MEMORY_USAGE_STATS */ + + +#ifdef NEW_GC +/* Incremental Garbage Collector / Write Barrier Support: */ + +/* Return the PAGESIZE the allocator uses. Generally equals to the + system's PAGESIZE. */ +EMACS_INT mc_get_page_size (void); + +/* Is the fault at ptr on a protected page? */ +EMACS_INT fault_on_protected_page (void *ptr); + +/* Remove protection (if there) of heap page of given page header + ph. */ +void protect_heap_pages (void); + +/* Remove protection for all heap pages which are protected. */ +void unprotect_heap_pages (void); + +/* Remove protection and mark page dirty. */ +void unprotect_page_and_mark_dirty (void *ptr); + +/* Repush all objects on dirty pages onto the mark stack. Return + number of repushed objects. */ +int repush_all_objects_on_page (void *ptr); + +/* Mark black if object is currently grey. */ +EMACS_INT maybe_mark_black (void *ptr); + +/* Only for debugging---not used anywhere in the sources. */ +EMACS_INT object_on_heap_p (void *ptr); + +#endif /* NEW_GC */ END_C_DECLS diff -urN 21.5.23/src/mule-coding.c 21.5.24/src/mule-coding.c --- 21.5.23/src/mule-coding.c Mon Jun 20 06:08:31 2005 +++ 21.5.24/src/mule-coding.c Tue Nov 22 16:19:32 2005 @@ -2643,10 +2643,10 @@ write_c_string (printcharfun, "(force)"); } -#define FROB(prop) \ - if (!NILP (iso2022_getprop (cs, prop))) \ - { \ - write_fmt_string (printcharfun, ", %s", prop); \ +#define FROB(prop) \ + if (!NILP (iso2022_getprop (cs, prop))) \ + { \ + write_fmt_string_lisp (printcharfun, ", %s", 1, prop); \ } FROB (Qshort); diff -urN 21.5.23/src/objects-impl.h 21.5.24/src/objects-impl.h --- 21.5.23/src/objects-impl.h Mon Oct 24 19:07:39 2005 +++ 21.5.24/src/objects-impl.h Sat Nov 26 20:46:09 2005 @@ -125,8 +125,13 @@ call them to get the truename (#### in reality, they all probably just store the truename here if they know it, and nil otherwise; we should - check this and enforce it as a general policy) */ + check this and enforce it as a general policy + X and GTK do this, except that when they don't + know they return NAME and don't update TRUENAME. + MS Windows initializes TRUENAME when the font is + initialized. TTY doesn't do truename.) */ Lisp_Object device; + Lisp_Object charset; /* Mule charset, or whatever */ /* See comment in struct console about console variants. */ enum console_variant font_instance_type; @@ -142,7 +147,8 @@ }; #define FONT_INSTANCE_NAME(f) ((f)->name) -#define FONT_INSTANCE_TRUENAME(f) ((f)->name) +#define FONT_INSTANCE_TRUENAME(f) ((f)->truename) +#define FONT_INSTANCE_CHARSET(f) ((f)->charset) #define FONT_INSTANCE_DEVICE(f) ((f)->device) #define FONT_INSTANCE_ASCENT(f) ((f)->ascent) #define FONT_INSTANCE_DESCENT(f) ((f)->descent) @@ -151,6 +157,7 @@ #define XFONT_INSTANCE_NAME(f) FONT_INSTANCE_NAME (XFONT_INSTANCE (f)) #define XFONT_INSTANCE_TRUENAME(f) FONT_INSTANCE_TRUENAME (XFONT_INSTANCE (f)) +#define XFONT_INSTANCE_CHARSET(f) FONT_INSTANCE_CHARSET (XFONT_INSTANCE (f)) #define XFONT_INSTANCE_DEVICE(f) FONT_INSTANCE_DEVICE (XFONT_INSTANCE (f)) #define XFONT_INSTANCE_ASCENT(f) FONT_INSTANCE_ASCENT (XFONT_INSTANCE (f)) #define XFONT_INSTANCE_DESCENT(f) FONT_INSTANCE_DESCENT (XFONT_INSTANCE (f)) diff -urN 21.5.23/src/objects-tty-impl.h 21.5.24/src/objects-tty-impl.h --- 21.5.23/src/objects-tty-impl.h Fri Jun 21 06:18:39 2002 +++ 21.5.24/src/objects-tty-impl.h Fri Nov 25 10:42:05 2005 @@ -29,9 +29,25 @@ struct tty_color_instance_data { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ Lisp_Object symbol; /* so we don't have to constantly call Fintern() */ }; +#ifdef NEW_GC +DECLARE_LRECORD (tty_color_instance_data, struct tty_color_instance_data); +#define XTTY_COLOR_INSTANCE_DATA(x) \ + XRECORD (x, tty_color_instance_data, struct tty_color_instance_data) +#define wrap_tty_color_instance_data(p) \ + wrap_record (p, tty_color_instance_data) +#define TTY_COLOR_INSTANCE_DATAP(x) RECORDP (x, tty_color_instance_data) +#define CHECK_TTY_COLOR_INSTANCE_DATA(x) \ + CHECK_RECORD (x, tty_color_instance_data) +#define CONCHECK_TTY_COLOR_INSTANCE_DATA(x) \ + CONCHECK_RECORD (x, tty_color_instance_data) +#endif /* NEW_GC */ + #define TTY_COLOR_INSTANCE_DATA(c) \ ((struct tty_color_instance_data *) (c)->data) @@ -39,8 +55,24 @@ struct tty_font_instance_data { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ Lisp_Object charset; }; + +#ifdef NEW_GC +DECLARE_LRECORD (tty_font_instance_data, struct tty_font_instance_data); +#define XTTY_FONT_INSTANCE_DATA(x) \ + XRECORD (x, tty_font_instance_data, struct tty_font_instance_data) +#define wrap_tty_font_instance_data(p) \ + wrap_record (p, tty_font_instance_data) +#define TTY_FONT_INSTANCE_DATAP(x) RECORDP (x, tty_font_instance_data) +#define CHECK_TTY_FONT_INSTANCE_DATA(x) \ + CHECK_RECORD (x, tty_font_instance_data) +#define CONCHECK_TTY_FONT_INSTANCE_DATA(x) \ + CONCHECK_RECORD (x, tty_font_instance_data) +#endif /* NEW_GC */ #define TTY_FONT_INSTANCE_DATA(c) \ ((struct tty_font_instance_data *) (c)->data) diff -urN 21.5.23/src/objects-tty.c 21.5.24/src/objects-tty.c --- 21.5.23/src/objects-tty.c Fri Jan 28 11:58:51 2005 +++ 21.5.24/src/objects-tty.c Fri Nov 25 10:42:06 2005 @@ -42,18 +42,36 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("tty-color-instance-data", + tty_color_instance_data, + 0, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + tty_color_instance_data_description_1, + struct tty_color_instance_data); +#else /* not NEW_GC */ const struct sized_memory_description tty_color_instance_data_description = { sizeof (struct tty_color_instance_data), tty_color_instance_data_description_1 }; +#endif /* not NEW_GC */ static const struct memory_description tty_font_instance_data_description_1 [] = { { XD_LISP_OBJECT, offsetof (struct tty_font_instance_data, charset) }, { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("tty-font-instance-data", + tty_font_instance_data, + 0, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + tty_font_instance_data_description_1, + struct tty_font_instance_data); +#else /* not NEW_GC */ const struct sized_memory_description tty_font_instance_data_description = { sizeof (struct tty_font_instance_data), tty_font_instance_data_description_1 }; +#endif /* not NEW_GC */ DEFUN ("register-tty-color", Fregister_tty_color, 3, 3, 0, /* Register COLOR as a recognized TTY color. @@ -176,7 +194,12 @@ } /* Don't allocate the data until we're sure that we will succeed. */ +#ifdef NEW_GC + c->data = alloc_lrecord_type (struct tty_color_instance_data, + &lrecord_tty_color_instance_data); +#else /* not NEW_GC */ c->data = xnew (struct tty_color_instance_data); +#endif /* not NEW_GC */ COLOR_INSTANCE_TTY_SYMBOL (c) = name; return 1; @@ -199,7 +222,11 @@ tty_finalize_color_instance (Lisp_Color_Instance *c) { if (c->data) +#ifdef NEW_GC + mc_free (c->data); +#else /* not NEW_GC */ xfree (c->data, void *); +#endif /* not NEW_GC */ } static int @@ -254,7 +281,12 @@ } /* Don't allocate the data until we're sure that we will succeed. */ +#ifdef NEW_GC + f->data = alloc_lrecord_type (struct tty_font_instance_data, + &lrecord_tty_font_instance_data); +#else /* not NEW_GC */ f->data = xnew (struct tty_font_instance_data); +#endif /* not NEW_GC */ FONT_INSTANCE_TTY_CHARSET (f) = charset; #ifdef MULE if (CHARSETP (charset)) @@ -287,7 +319,11 @@ tty_finalize_font_instance (Lisp_Font_Instance *f) { if (f->data) +#ifdef NEW_GC + mc_free (f->data); +#else /* not NEW_GC */ xfree (f->data, void *); +#endif /* not NEW_GC */ } static Lisp_Object @@ -363,6 +399,11 @@ void syms_of_objects_tty (void) { +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (tty_color_instance_data); + INIT_LRECORD_IMPLEMENTATION (tty_font_instance_data); +#endif /* NEW_GC */ + DEFSUBR (Fregister_tty_color); DEFSUBR (Funregister_tty_color); DEFSUBR (Ffind_tty_color); diff -urN 21.5.23/src/objects-x-impl.h 21.5.24/src/objects-x-impl.h --- 21.5.23/src/objects-x-impl.h Fri Jun 21 06:18:40 2002 +++ 21.5.24/src/objects-x-impl.h Sat Nov 26 20:46:09 2005 @@ -29,6 +29,10 @@ #include "objects-impl.h" #include "objects-x.h" +#ifdef USE_XFT +/* for resource name definitions, etc */ +#include "../lwlib/lwlib-fonts.h" +#endif #ifdef HAVE_X_WINDOWS @@ -39,11 +43,19 @@ struct x_color_instance_data { XColor color; + /* Yes, it looks crazy to have both the XColor and the XftColor, but + pragmatically both are used. */ +#ifdef USE_XFT + XftColor xftColor; +#endif char dealloc_on_gc; }; #define X_COLOR_INSTANCE_DATA(c) ((struct x_color_instance_data *) (c)->data) #define COLOR_INSTANCE_X_COLOR(c) (X_COLOR_INSTANCE_DATA (c)->color) +#ifdef USE_XFT +#define COLOR_INSTANCE_X_XFTCOLOR(c) (X_COLOR_INSTANCE_DATA (c)->xftColor) +#endif #define COLOR_INSTANCE_X_DEALLOC(c) (X_COLOR_INSTANCE_DATA (c)->dealloc_on_gc) /***************************************************************************** @@ -53,11 +65,21 @@ struct x_font_instance_data { /* X-specific information */ - XFontStruct *font; + /* Yes, it looks crazy to have both the XFontStruct and the XftFont, but + pragmatically both are used (lwlib delegates labels to the widget sets, + which internally use XFontStructs). */ + XFontStruct * font; +#ifdef USE_XFT + XftFont *xftFont; +#endif + }; #define X_FONT_INSTANCE_DATA(f) ((struct x_font_instance_data *) (f)->data) #define FONT_INSTANCE_X_FONT(f) (X_FONT_INSTANCE_DATA (f)->font) +#ifdef USE_XFT +#define FONT_INSTANCE_X_XFTFONT(f) (X_FONT_INSTANCE_DATA (f)->xftFont) +#endif #endif /* HAVE_X_WINDOWS */ diff -urN 21.5.23/src/objects-x.c 21.5.24/src/objects-x.c --- 21.5.23/src/objects-x.c Fri Jan 28 11:58:52 2005 +++ 21.5.24/src/objects-x.c Sun Nov 27 03:25:03 2005 @@ -38,6 +38,10 @@ #include "console-x-impl.h" #include "objects-x-impl.h" +#ifdef USE_XFT +#include "xft-fonts.h" +#endif + int x_handle_non_fully_specified_fonts; @@ -45,185 +49,6 @@ /* color instances */ /************************************************************************/ -/* Replacement for XAllocColor() that tries to return the nearest - available color if the colormap is full. Original was from FSFmacs, - but rewritten by Jareth Hein 97/11/25 - Modified by Lee Kindness 31/08/99 to handle previous - total failure which was due to a read/write colorcell being the nearest - match - tries the next nearest... - - Return value is 1 for normal success, 2 for nearest color success, - 3 for Non-deallocable success. */ -int -allocate_nearest_color (Display *display, Colormap colormap, Visual *visual, - XColor *color_def) -{ - int status; - - if (visual->X_CLASSFIELD == DirectColor || visual->X_CLASSFIELD == TrueColor) - { - if (XAllocColor (display, colormap, color_def) != 0) - { - status = 1; - } - else - { - /* We're dealing with a TrueColor/DirectColor visual, so play games - with the RGB values in the XColor struct. */ - /* #### JH: I'm not sure how a call to XAllocColor can fail in a - TrueColor or DirectColor visual, so I will just reformat the - request to match the requirements of the visual, and re-issue - the request. If this fails for anybody, I wanna know about it - so I can come up with a better plan */ - - unsigned long rshift,gshift,bshift,rbits,gbits,bbits,junk; - junk = visual->red_mask; - rshift = 0; - while ((junk & 0x1) == 0) { - junk = junk >> 1; - rshift ++; - } - rbits = 0; - while (junk != 0) { - junk = junk >> 1; - rbits++; - } - junk = visual->green_mask; - gshift = 0; - while ((junk & 0x1) == 0) { - junk = junk >> 1; - gshift ++; - } - gbits = 0; - while (junk != 0) { - junk = junk >> 1; - gbits++; - } - junk = visual->blue_mask; - bshift = 0; - while ((junk & 0x1) == 0) { - junk = junk >> 1; - bshift ++; - } - bbits = 0; - while (junk != 0) { - junk = junk >> 1; - bbits++; - } - - color_def->red = color_def->red >> (16 - rbits); - color_def->green = color_def->green >> (16 - gbits); - color_def->blue = color_def->blue >> (16 - bbits); - if (XAllocColor (display, colormap, color_def) != 0) - status = 1; - else - { - int rd, gr, bl; - /* #### JH: I'm punting here, knowing that doing this will at - least draw the color correctly. However, unless we convert - all of the functions that allocate colors (graphics - libraries, etc) to use this function doing this is very - likely to cause problems later... */ - - if (rbits > 8) - rd = color_def->red << (rbits - 8); - else - rd = color_def->red >> (8 - rbits); - if (gbits > 8) - gr = color_def->green << (gbits - 8); - else - gr = color_def->green >> (8 - gbits); - if (bbits > 8) - bl = color_def->blue << (bbits - 8); - else - bl = color_def->blue >> (8 - bbits); - color_def->pixel = (rd << rshift) | (gr << gshift) | (bl << - bshift); - status = 3; - } - } - } - else - { - XColor *cells = NULL; - /* JH: I can't believe there's no way to go backwards from a - colormap ID and get its visual and number of entries, but X - apparently isn't built that way... */ - int no_cells = visual->map_entries; - status = 0; - - if (XAllocColor (display, colormap, color_def) != 0) - status = 1; - else while( status != 2 ) - { - /* If we got to this point, the colormap is full, so we're - going to try and get the next closest color. The algorithm used - is a least-squares matching, which is what X uses for closest - color matching with StaticColor visuals. */ - int nearest; - long nearest_delta, trial_delta; - int x; - - if( cells == NULL ) - { - cells = alloca_array (XColor, no_cells); - for (x = 0; x < no_cells; x++) - cells[x].pixel = x; - - /* read the current colormap */ - XQueryColors (display, colormap, cells, no_cells); - } - - nearest = 0; - /* I'm assuming CSE so I'm not going to condense this. */ - nearest_delta = ((((color_def->red >> 8) - (cells[0].red >> 8)) - * ((color_def->red >> 8) - (cells[0].red >> 8))) - + - (((color_def->green >> 8) - (cells[0].green >> 8)) - * ((color_def->green >> 8) - (cells[0].green >> - 8))) - + - (((color_def->blue >> 8) - (cells[0].blue >> 8)) - * ((color_def->blue >> 8) - (cells[0].blue >> - 8)))); - for (x = 1; x < no_cells; x++) - { - trial_delta = ((((color_def->red >> 8) - (cells[x].red >> 8)) - * ((color_def->red >> 8) - (cells[x].red >> 8))) - + - (((color_def->green >> 8) - (cells[x].green >> 8)) - * ((color_def->green >> 8) - (cells[x].green >> - 8))) - + - (((color_def->blue >> 8) - (cells[x].blue >> 8)) - * ((color_def->blue >> 8) - (cells[x].blue >> - 8)))); - - /* less? Ignore cells marked as previously failing */ - if( (trial_delta < nearest_delta) && - (cells[x].pixel != ULONG_MAX) ) - { - nearest = x; - nearest_delta = trial_delta; - } - } - color_def->red = cells[nearest].red; - color_def->green = cells[nearest].green; - color_def->blue = cells[nearest].blue; - if (XAllocColor (display, colormap, color_def) != 0) - status = 2; - else - /* LSK: Either the colour map has changed since - * we read it, or the colour is allocated - * read/write... Mark this cmap entry so it's - * ignored in the next iteration. - */ - cells[nearest].pixel = ULONG_MAX; - } - } - return status; -} - static int x_parse_nearest_color (struct device *d, XColor *color, Lisp_Object name, Error_Behavior errb) @@ -246,7 +71,7 @@ name, Qcolor, errb); return 0; } - result = allocate_nearest_color (dpy, cmap, visual, color); + result = x_allocate_nearest_color (dpy, cmap, visual, color); if (!result) { maybe_signal_error (Qgui_error, "Couldn't allocate color", @@ -262,6 +87,9 @@ Lisp_Object device, Error_Behavior errb) { XColor color; +#ifdef USE_XFT + XftColor xftColor; +#endif int result; result = x_parse_nearest_color (XDEVICE (device), &color, name, errb); @@ -277,6 +105,17 @@ else COLOR_INSTANCE_X_DEALLOC (c) = 1; COLOR_INSTANCE_X_COLOR (c) = color; + +#ifdef USE_XFT + xftColor.pixel = color.pixel; + xftColor.color.red = color.red; + xftColor.color.green = color.green; + xftColor.color.blue = color.blue; + xftColor.color.alpha = 0xffff; + + COLOR_INSTANCE_X_XFTCOLOR (c) = xftColor; +#endif + return 1; } @@ -366,95 +205,247 @@ /* font instances */ /************************************************************************/ +#ifdef USE_XFT +/* #### all these #defines should probably move to xft-fonts.h */ + +/* + The format of a fontname (as returned by fontconfig) is not well-documented, + But the character repertoire is represented in an ASCII-compatible way. See + fccharset.c (FcCharSetUnparse). So we can use UTF-8 for long names. + + Currently we have a hack where different versions of the unparsed name are + used in different contexts fairly arbitrarily. I don't think this is close + to coherency; even without the charset and lang properties fontconfig names + are too unwieldy to use. We need to rethink the approach here. I think + probably Lisp_Font_Instance.name should contain the font name as specified + to Lisp (almost surely much shorter than shortname, even, and most likely + wildcarded), while Lisp_Font_Instance.truename should contain the longname. + For now, I'm going to #ifdef the return values defaulting to short. -- sjt +*/ + +/* DEBUGGING STUFF */ + +/* print message to stderr: one internal-format string argument */ +#define DEBUG_XFT0(level,s) \ + if (debug_xft > level) stderr_out (s) + +/* print message to stderr: one formatted argument */ +#define DEBUG_XFT1(level,format,x1) \ + if (debug_xft > level) stderr_out (format, x1) + +/* print message to stderr: two formatted arguments */ +#define DEBUG_XFT2(level,format,x1,x2) \ + if (debug_xft > level) stderr_out (format, x1, x2) + +/* print message to stderr: three formatted arguments */ +#define DEBUG_XFT3(level,format,x1,x2,x3) \ + if (debug_xft > level) stderr_out (format, x1, x2, x3) + +/* print message to stderr: four formatted arguments */ +#define DEBUG_XFT4(level,format,x1,x2,x3,x4) \ + if (debug_xft > level) stderr_out (format, x1, x2, x3, x4) + +/* print an Xft pattern to stderr + LEVEL is the debug level (to compare to debug_xft) + FORMAT is a newline-terminated printf format with one %s for the pattern + and must be internal format (eg, pure ASCII) + PATTERN is an FcPattern *. */ +#define PRINT_XFT_PATTERN(level,format,pattern) \ + do { \ + DECLARE_EISTRING (eistrpxft_name); \ + FcChar8 *name = FcNameUnparse (pattern); \ + \ + eicpy_ext(eistrpxft_name, name, Qxft_font_name_encoding); \ + DEBUG_XFT1 (level, format, eidata(eistrpxft_name)); \ + free (name); \ + } while (0) + +/* print a progress message + LEVEL is the debug level (to compare to debug_xft) + FONT is the Xft font name in UTF-8 (the native encoding of Xft) + LANG is the language being checked for support (must be ASCII). */ +#define CHECKING_LANG(level,font,lang) \ + do { \ + DECLARE_EISTRING (eistrcl_name); \ + eicpy_ext(eistrcl_name, font, Qxft_font_name_encoding); \ + DEBUG_XFT2 (level, "checking if %s handles %s\n", \ + eidata(eistrcl_name), lang); \ + } while (0) + +#endif /* USE_XFT */ + static int x_initialize_font_instance (Lisp_Font_Instance *f, Lisp_Object UNUSED (name), Lisp_Object device, Error_Behavior errb) { Display *dpy = DEVICE_X_DISPLAY (XDEVICE (device)); - XFontStruct *xf; - const Extbyte *extname; + Extbyte *extname; + XFontStruct *fs = NULL; /* _F_ont _S_truct */ +#ifdef USE_XFT + XftFont *rf = NULL; /* _R_ender _F_ont (X Render extension) */ +#else +#define rf (0) +#endif +#ifdef USE_XFT + DEBUG_XFT1 (2, "attempting to initialize font spec %s\n", + XSTRING_DATA(f->name)); + /* #### serialize (optimize) these later... */ + /* #### This function really needs to go away. + The problem is that the fontconfig/Xft functions work much too hard + to ensure that something is returned; but that something need not be + at all close to what we asked for. */ + LISP_STRING_TO_EXTERNAL (f->name, extname, Qxft_font_name_encoding); + rf = xft_open_font_by_name (dpy, extname); +#endif LISP_STRING_TO_EXTERNAL (f->name, extname, Qx_font_name_encoding); - xf = XLoadQueryFont (dpy, extname); - - if (!xf) + fs = XLoadQueryFont (dpy, extname); + + if (!fs && !rf) { - maybe_signal_error (Qgui_error, "Couldn't load font", f->name, Qfont, - errb); + /* #### should this refer to X and/or Xft? */ + maybe_signal_error (Qgui_error, "Couldn't load font", f->name, + Qfont, errb); return 0; } - if (!xf->max_bounds.width) + if (fs && !fs->max_bounds.width) { /* yes, this has been known to happen. */ - XFreeFont (dpy, xf); + XFreeFont (dpy, fs); + fs = NULL; maybe_signal_error (Qgui_error, "X font is too small", f->name, Qfont, errb); - return 0; + if (!rf) + return 0; } - /* Don't allocate the data until we're sure that we will succeed, - or the finalize method may get fucked. */ + /* Now that we're sure that we will succeed, we can allocate data without + fear that the finalize method may get fucked. */ f->data = xnew (struct x_font_instance_data); - FONT_INSTANCE_X_FONT (f) = xf; - f->ascent = xf->ascent; - f->descent = xf->descent; - f->height = xf->ascent + xf->descent; - { - /* following change suggested by Ted Phelps */ - int def_char = 'n'; /*xf->default_char;*/ - int byte1, byte2; - - once_more: - byte1 = def_char >> 8; - byte2 = def_char & 0xFF; - if (xf->per_char) +#ifdef USE_XFT + FONT_INSTANCE_X_XFTFONT (f) = rf; + if (rf) + /* Have an Xft font, initialize font info from it. */ + { + DEBUG_XFT4 (2, "pre-initial ascent %d descent %d width %d height %d\n", + f->ascent, f->descent, f->width, f->height); + + /* #### This shit is just plain wrong unless we have a character cell + font. It really hoses us on large repertoire Unicode fonts with + "double-width" characters. */ + f->ascent = rf->ascent; + f->descent = rf->descent; { - /* Old versions of the R5 font server have garbage (>63k) as - def_char. 'n' might not be a valid character. */ - if (byte1 < (int) xf->min_byte1 || - byte1 > (int) xf->max_byte1 || - byte2 < (int) xf->min_char_or_byte2 || - byte2 > (int) xf->max_char_or_byte2) - f->width = 0; - else - f->width = xf->per_char[(byte1 - xf->min_byte1) * - (xf->max_char_or_byte2 - - xf->min_char_or_byte2 + 1) + - (byte2 - xf->min_char_or_byte2)].width; + /* This is an approximation that AFAIK only gets used to compute + cell size for estimating window dimensions. The test_string8 + is an ASCII string whose characters should approximate the + distribution of widths expected in real text. */ + static const char test_string8[] = "Mmneei"; + static const int len = sizeof (test_string8) - 1; + XGlyphInfo glyphinfo; + + XftTextExtents8 (dpy, rf, test_string8, len, &glyphinfo); + /* #### maybe should be glyphinfo.xOff - glyphinfo.x? */ + f->width = (2*glyphinfo.width + len)/(2*len); } - else - f->width = xf->max_bounds.width; + f->height = rf->height; + f->proportional_p = 1; /* we can't recognize monospaced fonts! */ - /* Some fonts have a default char whose width is 0. This is no good. - If that's the case, first try 'n' as the default char, and if n has - 0 width too (unlikely) then just use the max width. */ - if (f->width == 0) + DEBUG_XFT4 (0, "initialized metrics ascent %d descent %d width %d height %d\n", + f->ascent, f->descent, f->width, f->height); + /* we also output on initialization of any font below */ + DEBUG_XFT1 (2, "initialized Xft font %s\n", XSTRING_DATA(f->name)); + fs = NULL; /* we don' need no steenkin' X font */ + } + else + { + DEBUG_XFT1 (0, "couldn't initialize Xft font %s\n", + XSTRING_DATA(f->name)); + } +#endif + + FONT_INSTANCE_X_FONT (f) = fs; + if (fs) + /* Have to use a core font, initialize font info from it. */ + { + f->ascent = fs->ascent; + f->descent = fs->descent; + f->height = fs->ascent + fs->descent; { - if (def_char == (int) xf->default_char) - f->width = xf->max_bounds.width; + /* following change suggested by Ted Phelps */ + int def_char = 'n'; /*fs->default_char;*/ + int byte1, byte2; + + once_more: + byte1 = def_char >> 8; + byte2 = def_char & 0xFF; + + if (fs->per_char) + { + /* Old versions of the R5 font server have garbage (>63k) as + def_char. 'n' might not be a valid character. */ + if (byte1 < (int) fs->min_byte1 || + byte1 > (int) fs->max_byte1 || + byte2 < (int) fs->min_char_or_byte2 || + byte2 > (int) fs->max_char_or_byte2) + f->width = 0; + else + f->width = fs->per_char[(byte1 - fs->min_byte1) * + (fs->max_char_or_byte2 - + fs->min_char_or_byte2 + 1) + + (byte2 - fs->min_char_or_byte2)].width; + } else + f->width = fs->max_bounds.width; + + /* Some fonts have a default char whose width is 0. This is no good. + If that's the case, first try 'n' as the default char, and if n has + 0 width too (unlikely) then just use the max width. */ + if (f->width == 0) { - def_char = xf->default_char; - goto once_more; + if (def_char == (int) fs->default_char) + f->width = fs->max_bounds.width; + else + { + def_char = fs->default_char; + goto once_more; + } } } - } - /* If all characters don't exist then there could potentially be - 0-width characters lurking out there. Not setting this flag - trips an optimization that would make them appear to have width - to redisplay. This is bad. So we set it if not all characters - have the same width or if not all characters are defined. - */ - /* #### This sucks. There is a measurable performance increase - when using proportional width fonts if this flag is not set. - Unfortunately so many of the fucking X fonts are not fully - defined that we could almost just get rid of this damn flag and - make it an assertion. */ - f->proportional_p = (xf->min_bounds.width != xf->max_bounds.width || - (x_handle_non_fully_specified_fonts && - !xf->all_chars_exist)); + + /* If all characters don't exist then there could potentially be + 0-width characters lurking out there. Not setting this flag + trips an optimization that would make them appear to have width + to redisplay. This is bad. So we set it if not all characters + have the same width or if not all characters are defined. */ + /* #### This sucks. There is a measurable performance increase + when using proportional width fonts if this flag is not set. + Unfortunately so many of the fucking X fonts are not fully + defined that we could almost just get rid of this damn flag and + make it an assertion. */ + f->proportional_p = (fs->min_bounds.width != fs->max_bounds.width || + (x_handle_non_fully_specified_fonts && + !fs->all_chars_exist)); + } + +#ifdef USE_XFT + if (debug_xft > 0) + { + int n = 3, d = 5; + /* check for weirdness */ + if (n * f->height < d * f->width) + stderr_out ("font %s: width:height is %d:%d, larger than %d:%d\n", + XSTRING_DATA(f->name), f->width, f->height, n, d); + if (f->height <= 0 || f->width <= 0) + stderr_out ("bogus dimensions of font %s: width = %d, height = %d\n", + XSTRING_DATA(f->name), f->width, f->height); + stderr_out ("initialized font %s\n", XSTRING_DATA(f->name)); + } +#else +#undef rf +#endif return 1; } @@ -464,21 +455,39 @@ Lisp_Object printcharfun, int UNUSED (escapeflag)) { - write_fmt_string (printcharfun, " 0x%lx", - (unsigned long) FONT_INSTANCE_X_FONT (f)->fid); + if (FONT_INSTANCE_X_FONT (f)) + write_fmt_string (printcharfun, " font id: 0x%lx", + (unsigned long) FONT_INSTANCE_X_FONT (f)->fid); +#ifdef USE_XFT + /* #### What should we do here? For now, print the address. */ + if (FONT_INSTANCE_X_XFTFONT (f)) + write_fmt_string (printcharfun, " xft font: 0x%lx", + (unsigned long) FONT_INSTANCE_X_XFTFONT (f)); +#endif } static void x_finalize_font_instance (Lisp_Font_Instance *f) { +#ifdef USE_XFT + DEBUG_XFT1 (0, "finalizing %s\n", (STRINGP (f->name) + ? (char *) XSTRING_DATA (f->name) + : "(unnamed font)")); +#endif + if (f->data) { if (DEVICE_LIVE_P (XDEVICE (f->device))) { Display *dpy = DEVICE_X_DISPLAY (XDEVICE (f->device)); - XFreeFont (dpy, FONT_INSTANCE_X_FONT (f)); + if (FONT_INSTANCE_X_FONT (f)) + XFreeFont (dpy, FONT_INSTANCE_X_FONT (f)); +#ifdef USE_XFT + if (FONT_INSTANCE_X_XFTFONT (f)) + XftFontClose (dpy, FONT_INSTANCE_X_XFTFONT (f)); +#endif } xfree (f->data, void *); f->data = 0; @@ -487,6 +496,13 @@ /* Determining the truename of a font is hard. (Big surprise.) + This is not true for fontconfig. Each font has a (nearly) canonical + representation up to permutation of the order of properties. It is + possible to construct a name which exactly identifies the properties of + the current font. However, it is theoretically possible that there exists + another font with a super set of those properties that would happen to get + selected. -- sjt + By "truename" we mean an XLFD-form name which contains no wildcards, yet which resolves to *exactly* the same font as the one which we already have the (probably wildcarded) name and `XFontStruct' of. @@ -695,10 +711,12 @@ #else /* But the world I live in is much more perverse. */ names = XListFonts (dpy, font_name, MAX_FONT_COUNT, &count); + /* Find the lexicographic minimum of names[]. + (#### Should we be comparing case-insensitively?) */ while (count--) - /* !!#### Not Mule-friendly */ - /* If names[count] is lexicographically less than result, use it. - (#### Should we be comparing case-insensitively?) */ + /* [[ !!#### Not Mule-friendly ]] + Doesn't matter, XLFDs are HPC (old) or Latin1 (modern). If they + aren't, who knows what they are? -- sjt */ if (result == 0 || (strcmp (result, names [count]) < 0)) result = names [count]; #endif @@ -773,29 +791,61 @@ x_font_instance_truename (Lisp_Font_Instance *f, Error_Behavior errb) { struct device *d = XDEVICE (f->device); + Display *dpy = DEVICE_X_DISPLAY (d); + Extbyte *nameext; + char* xlfd; - if (NILP (FONT_INSTANCE_TRUENAME (f))) + /* #### restructure this so that we return a valid truename at the end, + and otherwise only return when we return something desperate that + doesn't get stored for future use. */ + +#ifdef USE_XFT + /* First, try an Xft font. */ + if (NILP (FONT_INSTANCE_TRUENAME (f)) && FONT_INSTANCE_X_XFTFONT (f)) { - Display *dpy = DEVICE_X_DISPLAY (d); - { - Extbyte *nameext; - - LISP_STRING_TO_EXTERNAL (f->name, nameext, Qx_font_name_encoding); - FONT_INSTANCE_TRUENAME (f) = - x_font_truename (dpy, nameext, FONT_INSTANCE_X_FONT (f)); - } - if (NILP (FONT_INSTANCE_TRUENAME (f))) + /* The font is already open, we just unparse. */ + FcChar8 *res = FcNameUnparse (FONT_INSTANCE_X_XFTFONT (f)->pattern); + if (res) + { + FONT_INSTANCE_TRUENAME (f) = make_string (res, strlen (res)); + free (res); + return FONT_INSTANCE_TRUENAME (f); + } + else { - Lisp_Object font_instance = wrap_font_instance (f); + maybe_signal_error (Qgui_error, + "Couldn't unparse Xft font to truename", + Qnil, Qfont, errb); + /* used to return Qnil here */ + } + } +#endif /* USE_XFT */ + /* OK, fall back to core font. */ + if (NILP (FONT_INSTANCE_TRUENAME (f)) + && FONT_INSTANCE_X_FONT (f)) + { + nameext = &xlfd[0]; + LISP_STRING_TO_EXTERNAL (f->name, nameext, Qx_font_name_encoding); - maybe_signal_error (Qgui_error, "Couldn't determine font truename", - font_instance, Qfont, errb); - /* Ok, just this once, return the font name as the truename. - (This is only used by Fequal() right now.) */ - return f->name; - } + FONT_INSTANCE_TRUENAME (f) = + x_font_truename (dpy, nameext, FONT_INSTANCE_X_FONT (f)); + } + + if (NILP (FONT_INSTANCE_TRUENAME (f))) + { + /* Urk, no luck. Whine about our bad luck and exit. */ + Lisp_Object font_instance = wrap_font_instance (f); + + + maybe_signal_error (Qgui_error, "Couldn't determine font truename", + font_instance, Qfont, errb); + /* Ok, just this once, return the font name as the truename. + (This is only used by Fequal() right now.) */ + return f->name; } + + /* Return what we found. */ return FONT_INSTANCE_TRUENAME (f); } @@ -806,8 +856,13 @@ int i; Lisp_Object result = Qnil; Display *dpy = DEVICE_X_DISPLAY (d); - XFontProp *props = FONT_INSTANCE_X_FONT (f)->properties; + XFontProp *props = NULL; + /* #### really should hack Xft fonts, too + Strategy: fontconfig must have an iterator for this purpose. */ + if (! FONT_INSTANCE_X_FONT (f)) return result; + + props = FONT_INSTANCE_X_FONT (f)->properties; for (i = FONT_INSTANCE_X_FONT (f)->n_properties - 1; i >= 0; i--) { Lisp_Object name, value; @@ -887,13 +942,31 @@ #ifdef MULE static int -x_font_spec_matches_charset (struct device *UNUSED (d), Lisp_Object charset, +x_font_spec_matches_charset (struct device * USED_IF_XFT (d), + Lisp_Object charset, const Ibyte *nonreloc, Lisp_Object reloc, Bytecount offset, Bytecount length, int stage) { if (stage) +#ifdef USE_XFT + { + Display *dpy = DEVICE_X_DISPLAY (d); + Extbyte *extname; + XftFont *rf; + const Ibyte *the_nonreloc; + + if (!NILP(reloc)) + { + the_nonreloc = XSTRING_DATA (reloc); + LISP_STRING_TO_EXTERNAL (reloc, extname, Qx_font_name_encoding); + rf = xft_open_font_by_name (dpy, extname); + return 0; /* #### maybe this will compile and run ;) */ + } + } +#else return 0; +#endif if (UNBOUNDP (charset)) return 1; @@ -901,6 +974,12 @@ so we just assume the user knows what they're doing in the case of ASCII. For other charsets, you gotta give the long form; sorry buster. + #### FMH: this screws fontconfig/Xft? + STRATEGY: use fontconfig's ability to hack languages and character + sets (lang and charset properties). + #### Maybe we can use the fontconfig model to eliminate the difference + between faces and fonts? No - it looks like that would be an abuse + (fontconfig doesn't know about colors, although Xft does). */ if (EQ (charset, Vcharset_ascii)) { @@ -939,6 +1018,154 @@ ERROR_ME, 0) >= 0); } +#ifdef USE_XFT +/* #### debug functions: find a better place for us */ +const char *FcResultToString (FcResult r); +const char * +FcResultToString (FcResult r) +{ + static char buffer[256]; + switch (r) + { + case FcResultMatch: + return "FcResultMatch"; + case FcResultNoMatch: + return "FcResultNoMatch"; + case FcResultTypeMismatch: + return "FcResultTypeMismatch"; + case FcResultNoId: + return "FcResultNoId"; + default: + snprintf (buffer, 255, "FcResultUndocumentedValue (%d)", r); + return buffer; + } +} + +const char *FcTypeOfValueToString (FcValue v); +const char * +FcTypeOfValueToString (FcValue v) +{ + static char buffer[256]; + switch (v.type) + { + case FcTypeMatrix: + return "FcTypeMatrix"; + case FcTypeString: + return "FcTypeString"; + case FcTypeVoid: + return "FcTypeVoid"; + case FcTypeDouble: + return "FcTypeDouble"; + case FcTypeInteger: + return "FcTypeInteger"; + case FcTypeBool: + return "FcTypeBool"; + case FcTypeCharSet: + return "FcTypeCharSet"; + case FcTypeLangSet: + return "FcTypeLangSet"; + /* #### There is no union member of this type, but there are void* and + FcPattern* members, as of fontconfig.h FC_VERSION 10002 */ + case FcTypeFTFace: + return "FcTypeFTFace"; + default: + snprintf (buffer, 255, "FcTypeUndocumentedType (%d)", v.type); + return buffer; + } +} + +static FcCharSet * +mule_to_fc_charset (Lisp_Object cs) +{ + int ucode, i, j; + FcCharSet *fccs; + + CHECK_CHARSET (cs); + fccs = FcCharSetCreate (); + /* #### do we also need to deal with 94 vs. 96 charsets? + ie, how are SP and DEL treated in ASCII? non-graphic should return -1 */ + if (1 == XCHARSET_DIMENSION (cs)) + /* Unicode tables are indexed by offsets from ASCII SP, not by ASCII */ + for (i = 0; i < 96; i++) + { + ucode = ((int *) XCHARSET_TO_UNICODE_TABLE (cs))[i]; + if (ucode >= 0) + /* #### should check for allocation failure */ + FcCharSetAddChar (fccs, (FcChar32) ucode); + } + else if (2 == XCHARSET_DIMENSION (cs)) + /* Unicode tables are indexed by offsets from ASCII SP, not by ASCII */ + for (i = 0; i < 96; i++) + for (j = 0; j < 96; j++) + { + ucode = ((int **) XCHARSET_TO_UNICODE_TABLE (cs))[i][j]; + if (ucode >= 0) + /* #### should check for allocation failure */ + FcCharSetAddChar (fccs, (FcChar32) ucode); + } + else + { + FcCharSetDestroy (fccs); + fccs = NULL; + } + return fccs; +} + +struct charset_reporter { + Lisp_Object *charset; + /* This is a debug facility, require ASCII. */ + Extbyte *language; /* ASCII, please */ + FcChar8 *rfc3066; /* ASCII, please */ +}; + +static struct charset_reporter charset_table[] = + { + /* #### It's my branch, my favorite charsets get checked first! + That's a joke, Son. + Ie, I don't know what I'm doing, so my charsets first is as good as + any other arbitrary order. If you have a better idea, speak up! */ + { &Vcharset_ascii, "English", "en" }, + { &Vcharset_japanese_jisx0208, "Japanese", "ja" }, + { &Vcharset_japanese_jisx0212, "Japanese", "ja" }, + { &Vcharset_katakana_jisx0201, "Japanese", "ja" }, + { &Vcharset_latin_jisx0201, "Japanese", "ja" }, + { &Vcharset_japanese_jisx0208_1978, "Japanese", "ja" }, + { &Vcharset_greek_iso8859_7, "Greek", "el" }, + /* #### all the Chinese need checking + Damn the blood-sucking ISO anyway. */ + { &Vcharset_chinese_gb2312, "simplified Chinese", "zh-CN" }, + { &Vcharset_korean_ksc5601, "Korean", "ko" }, + { &Vcharset_chinese_cns11643_1, "traditional Chinese", "zh-TW" }, + { &Vcharset_chinese_cns11643_2, "traditional Chinese", "zh-TW" }, + { &Vcharset_latin_iso8859_1, NULL, NULL }, + { &Vcharset_latin_iso8859_2, NULL, NULL }, + { &Vcharset_latin_iso8859_3, NULL, NULL }, + { &Vcharset_latin_iso8859_4, NULL, NULL }, + { &Vcharset_latin_iso8859_9, NULL, NULL }, + { &Vcharset_latin_iso8859_15, NULL, NULL }, + { &Vcharset_thai_tis620, NULL, NULL }, + { &Vcharset_arabic_iso8859_6, NULL, NULL }, + { &Vcharset_hebrew_iso8859_8, "Hebrew", "he" }, + { &Vcharset_cyrillic_iso8859_5, NULL, NULL }, + /* #### these probably are not quite right */ + { &Vcharset_chinese_big5_1, "traditional Chinese", "zh-TW" }, + { &Vcharset_chinese_big5_2, "traditional Chinese", "zh-TW" }, + { NULL, NULL, NULL } + }; + +/* Choose appropriate font name for debug messages. + Use only in the top half of next function (enforced with #undef). */ +#define DECLARE_DEBUG_FONTNAME(__xemacs_name) \ + Eistring *__xemacs_name; \ + do \ + { \ + __xemacs_name = debug_xft > 2 ? eistr_fullname \ + : debug_xft > 1 ? eistr_longname \ + : eistr_shortname; \ + } while (0) + +#endif /* USE_XFT */ + /* find a font spec that matches font spec FONT and also matches (the registry of) CHARSET. */ static Lisp_Object @@ -947,18 +1174,262 @@ { Extbyte **names; int count = 0; - Lisp_Object result = Qnil; const Extbyte *patternext; + Lisp_Object result = Qunbound; int i; + /* #### with Xft need to handle second stage here -- sjt + Hm. Or maybe not. That would be cool. :-) */ if (stage) return Qnil; - LISP_STRING_TO_EXTERNAL (font, patternext, Qx_font_name_encoding); +#ifdef USE_XFT + /* Fontconfig converts all FreeType names to UTF-8 before passing them + back to callers---see fcfreetype.c (FcFreeTypeQuery). + I don't believe this is documented. */ + + DEBUG_XFT1 (1, "confirming charset for font instance %s\n", + XSTRING_DATA(font)); + + /* #### this looks like a fair amount of work, but the basic design + has never been rethought, and it should be + + what really should happen here is that we use FcFontSort (FcFontList?) + to get a list of matching fonts, then pick the first (best) one that + gives language or repertoire coverage. + */ + + FcInit (); /* No-op if already initialized. + In fontconfig 2.3.2, this cannot return + failure, but that looks like a bug. We + check for it with FcGetCurrentConfig(), + which *can* fail. */ + if (!FcConfigGetCurrent()) /* #### We should expose FcInit* interfaces + to LISP and decide when to reinitialize + intelligently. */ + stderr_out ("Failed fontconfig initialization\n"); + else + { + FcPattern *fontxft; /* long-lived, freed at end of this block */ + FcResult fcresult; + FcConfig *fcc; + FcChar8 *lang = "en"; /* #### fix this bogus hack! */ + FcCharSet *fccs = NULL; + DECLARE_EISTRING (eistr_shortname); /* user-friendly nickname */ + DECLARE_EISTRING (eistr_longname); /* omit FC_LANG and FC_CHARSET */ + DECLARE_EISTRING (eistr_fullname); /* everything */ + + LISP_STRING_TO_EXTERNAL (font, patternext, Qxft_font_name_encoding); + fcc = FcConfigGetCurrent (); + + /* parse the name, do the substitutions, and match the font */ + + { + FcPattern *p = FcNameParse (patternext); + PRINT_XFT_PATTERN (3, "FcNameParse'ed name is %s\n", p); + /* #### Next two return FcBool, but what does the return mean? */ + /* The order is correct according the fontconfig docs. */ + FcConfigSubstitute (fcc, p, FcMatchPattern); + PRINT_XFT_PATTERN (2, "FcConfigSubstitute'ed name is %s\n", p); + FcDefaultSubstitute (p); + PRINT_XFT_PATTERN (3, "FcDefaultSubstitute'ed name is %s\n", p); + /* #### check fcresult of following match? */ + fontxft = FcFontMatch (fcc, p, &fcresult); + /* this prints the long fontconfig name */ + PRINT_XFT_PATTERN (1, "FcFontMatch'ed name is %s\n", fontxft); + FcPatternDestroy (p); + } + + /* heuristic to give reasonable-length names for debug reports + + I considered #ifdef SUPPORT_FULL_FONTCONFIG_NAME etc but that's + pointless. We're just going to remove this code once the font/ + face refactoring is done, but until then it could be very useful. + */ + { + FcPattern *p = FcFontRenderPrepare (fcc, fontxft, fontxft); + FcChar8 *name; + + /* full name, including language coverage and repertoire */ + name = FcNameUnparse (p); + eicpy_ext (eistr_fullname, name, Qxft_font_name_encoding); + free (name); + + /* long name, omitting coverage and repertoire, plus a number + of rarely useful properties */ + FcPatternDel (p, FC_CHARSET); + FcPatternDel (p, FC_LANG); + FcPatternDel (p, FC_WIDTH); + FcPatternDel (p, FC_SPACING); + FcPatternDel (p, FC_HINTING); + FcPatternDel (p, FC_VERTICAL_LAYOUT); + FcPatternDel (p, FC_AUTOHINT); + FcPatternDel (p, FC_GLOBAL_ADVANCE); + FcPatternDel (p, FC_INDEX); + FcPatternDel (p, FC_SCALE); + FcPatternDel (p, FC_FONTVERSION); + name = FcNameUnparse (p); + eicpy_ext (eistr_longname, name, Qxft_font_name_encoding); + free (name); + + /* nickname, just family and size, but + "family" names usually have style, slant, and weight */ + FcPatternDel (p, FC_FOUNDRY); + FcPatternDel (p, FC_STYLE); + FcPatternDel (p, FC_SLANT); + FcPatternDel (p, FC_WEIGHT); + FcPatternDel (p, FC_PIXEL_SIZE); + FcPatternDel (p, FC_OUTLINE); + FcPatternDel (p, FC_SCALABLE); + FcPatternDel (p, FC_DPI); + name = FcNameUnparse (p); + eicpy_ext (eistr_shortname, name, Qxft_font_name_encoding); + free (name); + FcPatternDestroy (p); + } + + /* The language approach may better in the long run, but we can't use + it based on Mule charsets; fontconfig doesn't provide a way to test + for unions of languages, etc. That will require support from the + text module. + + Optimization: cache the generated FcCharSet in the Mule charset. + Don't forget to destroy it if the Mule charset gets deallocated. */ + + struct charset_reporter *cr; + for (cr = charset_table; + cr->charset && !EQ (*(cr->charset), charset); + cr++) + ; + + if (cr->rfc3066) + { + DECLARE_DEBUG_FONTNAME (name); + CHECKING_LANG (0, eidata(name), cr->language); + lang = cr->rfc3066; + } + else if (cr->charset) + { + /* what the hey, build 'em on the fly */ + /* #### in the case of error this could return NULL! */ + fccs = mule_to_fc_charset (charset); + lang = XSTRING_DATA (XSYMBOL (XCHARSET_NAME (charset))-> name); + } + else + { + /* OK, we fell off the end of the table */ + warn_when_safe_lispobj (intern ("xft"), intern ("alert"), + list2 (build_string ("unchecked charset"), + charset)); + /* default to "en" + #### THIS IS WRONG, WRONG, WRONG!! + It is why we never fall through to XLFD-checking. */ + } + + ASSERT_ASCTEXT_ASCII(lang); + + if (fccs) + { + /* check for character set coverage */ + int i = 0; + FcCharSet *v; + FcResult r = FcPatternGetCharSet (fontxft, FC_CHARSET, i, &v); + + if (r == FcResultTypeMismatch) + { + DEBUG_XFT0 (0, "Unexpected type return in charset value\n"); + result = Qnil; + } + else if (r == FcResultMatch && FcCharSetIsSubset (fccs, v)) + { + /* The full pattern with the bitmap coverage is massively + unwieldy, but the shorter names are's just *wrong*. We + should have the full thing internally as truename, and + filter stuff the client doesn't want to see on output. + Should we just store it into the truename right here? */ + DECLARE_DEBUG_FONTNAME (name); + DEBUG_XFT2 (0, "Xft font %s supports %s\n", + eidata(name), lang); +#ifdef RETURN_LONG_FONTCONFIG_NAMES + result = eimake_string(eistr_fullname); +#else + result = eimake_string(eistr_longname); +#endif + } + else + { + DECLARE_DEBUG_FONTNAME (name); + DEBUG_XFT2 (0, "Xft font %s doesn't support %s\n", + eidata(name), lang); + result = Qnil; + } + + /* clean up */ + FcCharSetDestroy (fccs); + } + else + { + /* check for language coverage */ + int i = 0; + FcValue v; + /* the main event */ + FcResult r = FcPatternGet (fontxft, FC_LANG, i, &v); + + if (r == FcResultMatch) + { + if (v.type != FcTypeLangSet) /* excessive paranoia */ + { + ASSERT_ASCTEXT_ASCII(FcTypeOfValueToString(v)); + /* Urk! Fall back and punt to core font. */ + DEBUG_XFT1 (0, "Unexpected type of lang value (%s)\n", + FcTypeOfValueToString (v)); + result = Qnil; + } + else if (FcLangSetHasLang (v.u.l, lang) != FcLangDifferentLang) + { + DECLARE_DEBUG_FONTNAME (name); + DEBUG_XFT2 (0, "Xft font %s supports %s\n", + eidata(name), lang); +#ifdef RETURN_LONG_FONTCONFIG_NAMES + result = eimake_string(eistr_fullname); +#else + result = eimake_string(eistr_longname); +#endif + } + else + { + DECLARE_DEBUG_FONTNAME (name); + DEBUG_XFT2 (0, "Xft font %s doesn't support %s\n", + eidata(name), lang); + result = Qnil; + } + } + else + { + ASSERT_ASCTEXT_ASCII(FcResultToString(r)); + DEBUG_XFT1 (0, "Getting lang: unexpected result=%s\n", + FcResultToString (r)); + result = Qnil; + } + } + + /* clean up and maybe return */ + FcPatternDestroy (fontxft); + if (!UNBOUNDP (result)) + return result; + } + + DEBUG_XFT1 (0, "shit happens, try X11 charset match for %s\n", + XSTRING_DATA(font)); +#undef DECLARE_DEBUG_FONTNAME +#endif /* USE_XFT */ + + LISP_STRING_TO_EXTERNAL (font, patternext, Qx_font_name_encoding); names = XListFonts (DEVICE_X_DISPLAY (XDEVICE (device)), patternext, MAX_FONT_COUNT, &count); /* #### This code seems awfully bogus -- mrb */ + /* #### fontconfig does it better -- sjt */ for (i = 0; i < count; i ++) { const Ibyte *intname; @@ -1041,6 +1512,10 @@ cause problems this is set to nil by default. */ ); x_handle_non_fully_specified_fonts = 0; + +#ifdef USE_XFT + Fprovide (intern ("xft-fonts")); +#endif } void diff -urN 21.5.23/src/objects-x.h 21.5.24/src/objects-x.h --- 21.5.23/src/objects-x.h Fri Jun 21 06:18:40 2002 +++ 21.5.24/src/objects-x.h Sat Nov 26 20:46:10 2005 @@ -28,11 +28,16 @@ #define INCLUDED_objects_x_h_ #include "objects.h" +#include "../lwlib/lwlib-colors.h" /* for x_allocate_nearest_color */ #ifdef HAVE_X_WINDOWS -int allocate_nearest_color (Display *display, Colormap screen_colormap, - Visual *visual, XColor *color_def); +#ifdef USE_XFT +EXFUN (Ffc_font_real_pattern, 2); +#endif + +/* Lisp_Object Fxlfd_font_name_p; */ + #endif /* HAVE_X_WINDOWS */ #endif /* INCLUDED_objects_x_h_ */ diff -urN 21.5.23/src/objects.c 21.5.24/src/objects.c --- 21.5.23/src/objects.c Mon Oct 24 19:07:39 2005 +++ 21.5.24/src/objects.c Sat Nov 26 20:46:10 2005 @@ -63,7 +63,11 @@ static const struct memory_description color_instance_data_description_1 []= { #ifdef HAVE_TTY +#ifdef NEW_GC + { XD_LISP_OBJECT, tty_console }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, tty_console, 1, { &tty_color_instance_data_description } }, +#endif /* not NEW_GC */ #endif { XD_END } }; @@ -272,7 +276,11 @@ static const struct memory_description font_instance_data_description_1 []= { #ifdef HAVE_TTY - { XD_BLOCK_PTR, tty_console, 1, { &tty_font_instance_data_description} }, +#ifdef NEW_GC + { XD_LISP_OBJECT, tty_console }, +#else /* not NEW_GC */ + { XD_BLOCK_PTR, tty_console, 1, { &tty_font_instance_data_description } }, +#endif /* not NEW_GC */ #endif { XD_END } }; @@ -286,6 +294,7 @@ { XD_LISP_OBJECT, offsetof (Lisp_Font_Instance, name)}, { XD_LISP_OBJECT, offsetof (Lisp_Font_Instance, truename)}, { XD_LISP_OBJECT, offsetof (Lisp_Font_Instance, device)}, + { XD_LISP_OBJECT, offsetof (Lisp_Font_Instance, charset)}, { XD_UNION, offsetof (Lisp_Font_Instance, data), XD_INDIRECT (0, 0), { &font_instance_data_description } }, { XD_END } @@ -362,19 +371,23 @@ Lisp_Font_Instance); -DEFUN ("make-font-instance", Fmake_font_instance, 1, 3, 0, /* +/* #### Why is this exposed to Lisp? Used in: +x-frob-font-size, gtk-font-menu-load-font, x-font-menu-load-font-xft, +x-font-menu-load-font-core, mswindows-font-menu-load-font, +mswindows-frob-font-style-and-sizify, mswindows-frob-font-size. */ +DEFUN ("make-font-instance", Fmake_font_instance, 1, 4, 0, /* Return a new `font-instance' object named NAME. DEVICE specifies the device this object applies to and defaults to the selected device. An error is signalled if the font is unknown or cannot be allocated; however, if NOERROR is non-nil, nil is simply returned in -this case. +this case. CHARSET is used internally. #### make helper function? The returned object is a normal, first-class lisp object. The way you `deallocate' the font is the way you deallocate any other lisp object: you drop all pointers to it and allow it to be garbage collected. When -these objects are GCed, the underlying X data is deallocated as well. +these objects are GCed, the underlying GUI data is deallocated as well. */ - (name, device, noerror)) + (name, device, noerror, charset)) { Lisp_Font_Instance *f; int retval = 0; @@ -399,6 +412,7 @@ f->ascent = f->height = 1; f->descent = 0; f->width = 1; + f->charset = charset; f->proportional_p = 0; retval = MAYBE_INT_DEVMETH (XDEVICE (device), initialize_font_instance, @@ -501,6 +515,15 @@ return font_instance_truename_internal (font_instance, ERROR_ME); } +DEFUN ("font-instance-charset", Ffont_instance_charset, 1, 1, 0, /* +Return the Mule charset that FONT-INSTANCE was allocated to handle. +*/ + (font_instance)) +{ + CHECK_FONT_INSTANCE (font_instance); + return XFONT_INSTANCE (font_instance)->charset; +} + DEFUN ("font-instance-properties", Ffont_instance_properties, 1, 1, 0, /* Return the properties (an alist or nil) of FONT-INSTANCE. */ @@ -890,7 +913,7 @@ if (UNBOUNDP (instance)) { /* make sure we cache the failures, too. */ - instance = Fmake_font_instance (instantiator, device, Qt); + instance = Fmake_font_instance (instantiator, device, Qt, charset); Fputhash (instantiator, instance, cache); } @@ -1142,6 +1165,7 @@ DEFSUBR (Ffont_instance_ascent); DEFSUBR (Ffont_instance_descent); DEFSUBR (Ffont_instance_width); + DEFSUBR (Ffont_instance_charset); DEFSUBR (Ffont_instance_proportional_p); DEFSUBR (Ffont_instance_truename); DEFSUBR (Ffont_instance_properties); diff -urN 21.5.23/src/objects.h 21.5.24/src/objects.h --- 21.5.23/src/objects.h Tue Sep 14 23:32:52 2004 +++ 21.5.24/src/objects.h Sat Nov 26 20:46:10 2005 @@ -58,10 +58,11 @@ #define CHECK_FONT_INSTANCE(x) CHECK_RECORD (x, font_instance) #define CONCHECK_FONT_INSTANCE(x) CONCHECK_RECORD (x, font_instance) -EXFUN (Fmake_font_instance, 3); +EXFUN (Fmake_font_instance, 4); EXFUN (Ffont_instance_name, 1); EXFUN (Ffont_instance_p, 1); EXFUN (Ffont_instance_truename, 1); +EXFUN (Ffont_instance_charset, 1); extern Lisp_Object Vthe_null_font_instance; diff -urN 21.5.23/src/print.c 21.5.24/src/print.c --- 21.5.23/src/print.c Tue Oct 25 17:32:48 2005 +++ 21.5.24/src/print.c Fri Nov 25 10:42:06 2005 @@ -1,6 +1,6 @@ /* Lisp object printing and output streams. Copyright (C) 1985, 1986, 1988, 1992-1995 Free Software Foundation, Inc. - Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003 Ben Wing. + Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003, 2005 Ben Wing. This file is part of XEmacs. @@ -1449,7 +1449,7 @@ UNGCPRO; } -static void +void default_object_printer (Lisp_Object obj, Lisp_Object printcharfun, int UNUSED (escapeflag)) { @@ -1733,6 +1733,17 @@ if (STRINGP (obj)) { +#ifdef NEW_GC + if (!debug_can_access_memory (XSTRING_DATA (obj), + XSTRING_LENGTH (obj))) + { + write_fmt_string + (printcharfun, + "#", + lheader, XSTRING_DATA (obj)); + break; + } +#else /* not NEW_GC */ Lisp_String *l = (Lisp_String *) lheader; if (!debug_can_access_memory (l->data_, l->size_)) { @@ -1742,6 +1753,7 @@ lheader, l->data_); break; } +#endif /* not NEW_GC */ } } @@ -1749,7 +1761,7 @@ ((LHEADER_IMPLEMENTATION (lheader)->printer) (obj, printcharfun, escapeflag)); else - default_object_printer (obj, printcharfun, escapeflag); + internal_object_printer (obj, printcharfun, escapeflag); break; } @@ -2211,15 +2223,17 @@ (EMACS_INT) header); else #ifdef MC_ALLOC - debug_out ("#<%s 0x%lx>", + debug_out ("#<%s addr=0x%lx uid=0x%lx>", LHEADER_IMPLEMENTATION (header)->name, + (EMACS_INT) header, (EMACS_INT) ((struct lrecord_header *) header)->uid); #else /* not MC_ALLOC */ - debug_out ("#<%s 0x%lx>", + debug_out ("#<%s addr=0x%lx uid=0x%lx>", LHEADER_IMPLEMENTATION (header)->name, - LHEADER_IMPLEMENTATION (header)->basic_p ? - (EMACS_INT) header : - ((struct old_lcrecord_header *) header)->uid); + (EMACS_INT) header, + (EMACS_INT) (LHEADER_IMPLEMENTATION (header)->basic_p ? + ((struct lrecord_header *) header)->uid : + ((struct old_lcrecord_header *) header)->uid)); #endif /* not MC_ALLOC */ } diff -urN 21.5.23/src/realpath.c 21.5.24/src/realpath.c --- 21.5.23/src/realpath.c Fri Jan 28 11:36:26 2005 +++ 21.5.24/src/realpath.c Wed Nov 2 19:01:58 2005 @@ -80,7 +80,12 @@ static int readlink_or_correct_case (const Ibyte *name, Ibyte *buf, Bytecount size, - Boolint links_only) +#ifndef WIN32_ANY + Boolint UNUSED (links_only) +#else + Boolint links_only +#endif + ) { #ifndef WIN32_ANY return qxe_readlink (name, buf, (size_t) size); diff -urN 21.5.23/src/redisplay-gtk.c 21.5.24/src/redisplay-gtk.c --- 21.5.23/src/redisplay-gtk.c Tue Jan 25 08:34:06 2005 +++ 21.5.24/src/redisplay-gtk.c Tue Nov 22 20:24:45 2005 @@ -1176,7 +1176,7 @@ Draw a vertical divider down the right side of the given window. ****************************************************************************/ static void -gtk_output_vertical_divider (struct window *w, int clear) +gtk_output_vertical_divider (struct window *w, int UNUSED(clear)) { struct frame *f = XFRAME (w->frame); struct device *d = XDEVICE (f->device); diff -urN 21.5.23/src/redisplay-x.c 21.5.24/src/redisplay-x.c --- 21.5.23/src/redisplay-x.c Tue Jan 25 08:34:07 2005 +++ 21.5.24/src/redisplay-x.c Sat Nov 26 20:46:10 2005 @@ -58,7 +58,7 @@ #include /* Number of pixels below each line. */ -int x_interline_space; /* #### implement me */ +int x_interline_space; /* #### this needs to be implemented, but per-font */ #define EOL_CURSOR_WIDTH 5 @@ -73,6 +73,11 @@ static void x_clear_frame (struct frame *f); static void x_clear_frame_windows (Lisp_Object window); +#ifdef USE_XFT +#define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \ + ? ((unsigned long) (x)) : ((unsigned long) (y))) +#endif /* USE_XFT */ + /* Note: We do not use the Xmb*() functions and XFontSets. Those functions are generally losing for a number of reasons: @@ -83,6 +88,11 @@ to try to deal with this, but that would generally fail because an XFontSet is tied to one locale and won't have the other character sets in it. + + The following aren't true any more, but that doesn't make Xmb*() + usable. One wonders about Xft and Pango, etc, tho'. Except they + aren't cross-platform solutions. FMH, as jwz would say. -- sjt + [[ 2) Not all (or even very many) OS's support the useful locales. For example, as far as I know SunOS and Solaris only support the Japanese locale if you get the @@ -98,8 +108,10 @@ I can find what the multi-byte text format for the Japanese locale under SunOS and Solaris is, but I assume it's EUC. + ]] */ +/* #### Break me out into a separate header */ struct textual_run { Lisp_Object charset; @@ -120,6 +132,25 @@ Returns the number of runs actually used. */ +/* Notes on Xft implementation + + - Xft Reloaded, v.4, uses a function like that in redisplay-msw.c to + handle all characters. However, instead of using an appropriate + character width for each run, it just uses UTF-8 for all runs. This + is not obviously a bad idea, but (for Han characters etc) the estimate + of TEXT_STORAGE allocation needed is (3 * len), and for characters not + in the BMP, it's (4 * len). + - With Unicode, we're no longer going to have repertoires reified as + charsets. (Not that we ever really did, what with corporate variants, + and so on.) So we really should be querying the face for the desired + font, rather than the character for the charset, and that's what would + determine the separation into runs. + - The widechar versions of fontconfig (and therefore Xft) functions + seem to be just bigendian Unicode. So there's actually no need to use + the 8-bit versions in computing runs and runes, it would seem. + - Mule won't "just work"; substantially more effort seems needed. +*/ + static int separate_textual_runs (unsigned char *text_storage, struct textual_run *run_storage, @@ -139,7 +170,7 @@ { Ichar ch = str[i]; Lisp_Object charset; - int byte1, byte2; + int byte1, byte2; /* #### why aren't these UExtbytes? */ int dimension; int graphic; @@ -151,7 +182,11 @@ { run_storage[runs_so_far].ptr = text_storage; run_storage[runs_so_far].charset = charset; +#ifdef USE_XFT + run_storage[runs_so_far].dimension = 2; +#else run_storage[runs_so_far].dimension = dimension; +#endif if (runs_so_far) { @@ -172,6 +207,7 @@ #endif } +#ifndef USE_XFT if (graphic == 0) { byte1 &= 0x7F; @@ -192,10 +228,53 @@ byte1 = char_converter.reg[1]; byte2 = char_converter.reg[2]; } -#endif +#endif /* MULE */ *text_storage++ = (unsigned char) byte1; if (dimension == 2) *text_storage++ = (unsigned char) byte2; +#else /* USE_XFT */ + /* #### This is bogus as hell. XftChar16, aka FcChar16, is actually + unsigned short, and therefore is not suitable for indexing matrix + fonts such as the JIS fonts supplied with X11. But if this were + consistent, the XftDraw*8 and XftDraw*16 functions are pretty + incoherent, as then we not should allow anything but ISO 8859/1 + (ie, the first 256 code points of Unicode) in XftDraw*8. So it + looks like this depends on the font, not the charset. */ + { + XftChar16 xftchar16 = 0xFFFD; /* unsigned short */ +#ifndef MULE + int unicode = ch; +#else + int unicode = ichar_to_unicode (ch); + if (unicode < 0) + /* abort(); */ /* #### serious error, tables are corrupt + Unfortunately, not a valid assumption; this can happen with + composite characters. Fake it. */ + unicode = 0xFFFD; /* REPLACEMENT CHARACTER, can't represent */ + else if (need_ccl_conversion) + /* #### maybe we should just ignore this and hope the font wins? */ + unicode = 0xFFFD; /* REPLACEMENT CHARACTER, can't represent */ + else if (unicode > 65535) + unicode = 0xFFFD; /* REPLACEMENT CHARACTER, can't represent */ + else +#endif + xftchar16 = (XftChar16) unicode; + /* #### endianness dependency? No, + apparently xft handles endianness for us; + the "big-endian" code works on Intel and PPC */ +#if 1 + /* big-endian or auto-endian */ + byte1 = ((unsigned char *) (&xftchar16))[0]; + byte2 = ((unsigned char *) (&xftchar16))[1]; +#else + /* little-endian */ + byte1 = ((unsigned char *) (&xftchar16))[1]; + byte2 = ((unsigned char *) (&xftchar16))[0]; +#endif + } + *text_storage++ = (unsigned char) byte1; + *text_storage++ = (unsigned char) byte2; +#endif /* USE_XFT */ } if (runs_so_far) @@ -216,13 +295,34 @@ /****************************************************************************/ static int -x_text_width_single_run (struct face_cachel *cachel, struct textual_run *run) +x_text_width_single_run (struct frame * USED_IF_XFT (f), + struct face_cachel *cachel, struct textual_run *run) { Lisp_Object font_inst = FACE_CACHEL_FONT (cachel, run->charset); Lisp_Font_Instance *fi = XFONT_INSTANCE (font_inst); if (!fi->proportional_p) return fi->width * run->len; - else +#ifdef USE_XFT + else if (FONT_INSTANCE_X_XFTFONT(fi)) + { + static XGlyphInfo glyphinfo; + struct device *d = XDEVICE (f->device); + Display *dpy = DEVICE_X_DISPLAY (d); + + if (run->dimension == 2) { + XftTextExtents16 (dpy, + FONT_INSTANCE_X_XFTFONT(fi), + (XftChar16 *) run->ptr, run->len, &glyphinfo); + } else { + XftTextExtents8 (dpy, + FONT_INSTANCE_X_XFTFONT(fi), + run->ptr, run->len, &glyphinfo); + } + + return glyphinfo.xOff; + } +#endif + else if (FONT_INSTANCE_X_FONT (fi)) { if (run->dimension == 2) return XTextWidth16 (FONT_INSTANCE_X_FONT (fi), @@ -231,17 +331,23 @@ return XTextWidth (FONT_INSTANCE_X_FONT (fi), (char *) run->ptr, run->len); } + else + abort(); + return 0; /* shut up GCC */ } /* x_text_width - Given a string and a face, return the string's length in pixels when - displayed in the font associated with the face. + Given a string and a merged face, return the string's length in pixels + when displayed in the fonts associated with the face. */ -static int -x_text_width (struct frame *UNUSED (f), struct face_cachel *cachel, +/* #### Break me out into a separate header */ +int x_text_width (struct frame *f, struct face_cachel *cachel, + const Ichar *str, Charcount len); +int +x_text_width (struct frame *f, struct face_cachel *cachel, const Ichar *str, Charcount len) { /* !!#### Needs review */ @@ -254,7 +360,7 @@ nruns = separate_textual_runs (text_storage, runs, str, len); for (i = 0; i < nruns; i++) - width_so_far += x_text_width_single_run (cachel, runs + i); + width_so_far += x_text_width_single_run (f, cachel, runs + i); return width_so_far; } @@ -319,7 +425,9 @@ int start, int end, int start_pixpos, int cursor_start, int cursor_width, int cursor_height) { +#ifndef USE_XFT struct frame *f = XFRAME (w->frame); +#endif Ichar_dynarr *buf = Dynarr_new (Ichar); Lisp_Object window; @@ -502,13 +610,17 @@ x_output_string (w, dl, buf, xpos, 0, start_pixpos, width, findex, 0, cursor_start, cursor_width, cursor_height); - /* #### This is really conditionalized well for optimized - performance. */ if (dl->modeline && !EQ (Qzero, w->modeline_shadow_thickness) +#ifndef USE_XFT + /* This optimization doesn't work right with some Xft fonts, which + leave antialiasing turds at the boundary. I don't know if this + is an Xft bug or not, but I think it is. See x_output_string. */ && (f->clear || f->windows_structure_changed - || w->shadow_thickness_changed)) + || w->shadow_thickness_changed) +#endif + ) bevel_modeline (w, dl); Dynarr_free (buf); @@ -662,7 +774,13 @@ mask = GCGraphicsExposures | GCClipMask | GCClipXOrigin | GCClipYOrigin; mask |= GCFillStyle; - if (!NILP (font)) + if (!NILP (font) +#ifdef USE_XFT + /* Only set the font if it's a core font */ + /* the renderfont will be set elsewhere (not part of gc) */ + && !FONT_INSTANCE_X_XFTFONT (XFONT_INSTANCE (font)) +#endif + ) { gcv.font = FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font))->fid; mask |= GCFont; @@ -671,7 +789,7 @@ /* evil kludge! */ if (!NILP (fg) && !COLOR_INSTANCEP (fg) && !INTP (fg)) { - /* #### I fixed once case where this was getting it. It was a + /* #### I fixed one case where this was getting hit. It was a bad macro expansion (compiler bug). */ stderr_out ("Help! x_get_gc got a bogus fg value! fg = "); debug_print (fg); @@ -729,6 +847,9 @@ mask |= GCLineWidth; } +#if 0 + debug_out ("\nx_get_gc: calling gc_cache_lookup\n"); +#endif return gc_cache_lookup (DEVICE_X_GC_CACHE (d), &gcv, mask); } @@ -774,7 +895,7 @@ /* General variables */ struct frame *f = XFRAME (w->frame); struct device *d = XDEVICE (f->device); - Lisp_Object window; + Lisp_Object window = wrap_window (w); Display *dpy = DEVICE_X_DISPLAY (d); Window x_win = XtWindow (FRAME_X_TEXT_WIDGET (f)); @@ -790,7 +911,8 @@ /* Text-related variables */ Lisp_Object bg_pmap; GC bgc, gc; - int height; + int height = DISPLAY_LINE_HEIGHT (dl); + int ypos = DISPLAY_LINE_YPOS (dl); int len = Dynarr_length (buf); unsigned char *text_storage = (unsigned char *) ALLOCA (2 * len); struct textual_run *runs = alloca_array (struct textual_run, len); @@ -798,11 +920,31 @@ int i; struct face_cachel *cachel = WINDOW_FACE_CACHEL (w, findex); - window = wrap_window (w); + int use_x_font = 1; /* #### bogus!! + The logic of this function needs review! */ +#ifdef USE_XFT + Colormap cmap = DEVICE_X_COLORMAP (d); + Visual *visual = DEVICE_X_VISUAL (d); + static XftColor fg, bg; + XftDraw *xftDraw; + + /* Lazily initialize frame's xftDraw member. */ + if (!FRAME_X_XFTDRAW (f)) { + FRAME_X_XFTDRAW (f) = XftDrawCreate (dpy, x_win, visual, cmap); + } + xftDraw = FRAME_X_XFTDRAW (f); + + /* #### This will probably cause asserts when passed a Lisp integer for a + color. See ca. line 759 this file. + #### Maybe xft_convert_color should take an XColor, not a pixel. */ +#define XFT_FROB_LISP_COLOR(color, dim) \ + xft_convert_color (dpy, cmap, visual, \ + COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (color)).pixel, \ + (dim)) +#endif if (width < 0) width = x_text_width (f, cachel, Dynarr_atp (buf, 0), Dynarr_length (buf)); - height = DISPLAY_LINE_HEIGHT (dl); /* Regularize the variables passed in. */ @@ -816,11 +958,8 @@ xpos -= xoffset; /* make sure the area we are about to display is subwindow free. */ - redisplay_unmap_subwindows_maybe (f, clip_start, DISPLAY_LINE_YPOS (dl), - clip_end - clip_start, DISPLAY_LINE_HEIGHT (dl)); - - nruns = separate_textual_runs (text_storage, runs, Dynarr_atp (buf, 0), - Dynarr_length (buf)); + redisplay_unmap_subwindows_maybe (f, clip_start, ypos, + clip_end - clip_start, height); cursor_clip = (cursor_start >= clip_start && cursor_start < clip_end); @@ -858,13 +997,20 @@ && !NILP (w->text_cursor_visible_p)) || NILP (bg_pmap)) bgc = 0; else - bgc = x_get_gc (d, Qnil, cachel->foreground, cachel->background, - bg_pmap, Qnil); + { + bgc = x_get_gc (d, Qnil, cachel->foreground, cachel->background, + bg_pmap, Qnil); + } if (bgc) - XFillRectangle (dpy, x_win, bgc, clip_start, - DISPLAY_LINE_YPOS (dl), clip_end - clip_start, - height); + { + XFillRectangle (dpy, x_win, bgc, clip_start, + ypos, clip_end - clip_start, + height); + } + + nruns = separate_textual_runs (text_storage, runs, Dynarr_atp (buf, 0), + Dynarr_length (buf)); for (i = 0; i < nruns; i++) { @@ -876,7 +1022,7 @@ if (EQ (font, Vthe_null_font_instance)) continue; - this_width = x_text_width_single_run (cachel, runs + i); + this_width = x_text_width_single_run (f, cachel, runs + i); need_clipping = (dl->clip || clip_start > xpos || clip_end < xpos + this_width); @@ -895,8 +1041,8 @@ ypos1_string = dl->ypos - fi->ascent; ypos2_string = dl->ypos + fi->descent; - ypos1_line = DISPLAY_LINE_YPOS (dl); - ypos2_line = ypos1_line + DISPLAY_LINE_HEIGHT (dl); + ypos1_line = ypos; + ypos2_line = ypos1_line + height; /* Make sure we don't clear below the real bottom of the line. */ @@ -922,14 +1068,20 @@ else { redisplay_clear_region (window, findex, clear_start, - DISPLAY_LINE_YPOS (dl), clear_end - clear_start, + ypos, clear_end - clear_start, height); } } if (cursor && cursor_cachel && focus && NILP (bar_cursor_value)) - gc = x_get_gc (d, font, cursor_cachel->foreground, - cursor_cachel->background, Qnil, Qnil); + { +#ifdef USE_XFT + fg = XFT_FROB_LISP_COLOR (cursor_cachel->foreground, 0); + bg = XFT_FROB_LISP_COLOR (cursor_cachel->background, 0); +#endif + gc = x_get_gc (d, font, cursor_cachel->foreground, + cursor_cachel->background, Qnil, Qnil); + } else if (cachel->dim) { /* Ensure the gray bitmap exists */ @@ -939,53 +1091,135 @@ gray_width, gray_height); /* Request a GC with the gray stipple pixmap to draw dimmed text */ +#ifdef USE_XFT + fg = XFT_FROB_LISP_COLOR (cachel->foreground, 1); + bg = XFT_FROB_LISP_COLOR (cachel->background, 0); +#endif gc = x_get_gc (d, font, cachel->foreground, cachel->background, Qdim, Qnil); } else - gc = x_get_gc (d, font, cachel->foreground, cachel->background, - Qnil, Qnil); - - if (need_clipping) { - XRectangle clip_box[1]; - - clip_box[0].x = 0; - clip_box[0].y = 0; - clip_box[0].width = clip_end - clip_start; - clip_box[0].height = height; - - XSetClipRectangles (dpy, gc, clip_start, DISPLAY_LINE_YPOS (dl), - clip_box, 1, Unsorted); +#ifdef USE_XFT + fg = XFT_FROB_LISP_COLOR (cachel->foreground, 0); + bg = XFT_FROB_LISP_COLOR (cachel->background, 0); +#endif + gc = x_get_gc (d, font, cachel->foreground, cachel->background, + Qnil, Qnil); } +#ifdef USE_XFT + { + XftFont *rf = FONT_INSTANCE_X_XFTFONT (fi); - if (runs[i].dimension == 1) - (bgc ? XDrawString : XDrawImageString) (dpy, x_win, gc, xpos, - dl->ypos, (char *) runs[i].ptr, - runs[i].len); - else - (bgc ? XDrawString16 : XDrawImageString16) (dpy, x_win, gc, xpos, - dl->ypos, - (XChar2b *) runs[i].ptr, - runs[i].len); + if (rf) + { + use_x_font = 0; + if (need_clipping) + { + Region clip_reg = XCreateRegion(); + XRectangle clip_box = { clip_start, ypos, + clip_end - clip_start, height }; + + XUnionRectWithRegion (&clip_box, clip_reg, clip_reg); + XftDrawSetClip(xftDraw, clip_reg); + XDestroyRegion(clip_reg); + } + + if (!bgc) + { + /* #### Neither rect_height nor XftTextExtents as computed + below handles the vertical space taken up by antialiasing, + which for some fonts (eg, Bitstream Vera Sans Mono-16 on + my Mac PowerBook G4) leaves behind orphaned dots on + insertion or deletion earlier in the line, especially in + the case of the underscore character. + Interestingly, insertion or deletion of a single character + immediately after a refresh does not leave any droppings, + but any further insertions or deletions do. + While adding a pixel to rect_height (mostly) takes care of + this, it trashes aggressively laid-out elements like the + modeline (overwriting part of the bevel). + OK, unconditionally redraw the bevel, and increment + rect_height by 1. See x_output_display_block. -- sjt */ + struct textual_run *run = &runs[i]; + int rect_width = x_text_width_single_run (f, cachel, run); +#ifndef USE_XFTTEXTENTS_TO_AVOID_FONT_DROPPINGS + int rect_height = FONT_INSTANCE_ASCENT(fi) + + FONT_INSTANCE_DESCENT(fi) + 1; +#else + int rect_height = FONT_INSTANCE_ASCENT(fi) + + FONT_INSTANCE_DESCENT(fi); + XGlyphInfo gi; + if (run->dimension == 2) { + XftTextExtents16 (dpy, + FONT_INSTANCE_X_XFTFONT(fi), + (XftChar16 *) run->ptr, run->len, &gi); + } else { + XftTextExtents8 (dpy, + FONT_INSTANCE_X_XFTFONT(fi), + run->ptr, run->len, &gi); + } + rect_height = rect_height > gi.height + ? rect_height : gi.height; +#endif + + XftDrawRect (xftDraw, &bg, + xpos, ypos, rect_width, rect_height); + } + + if (runs[i].dimension == 1) + XftDrawString8 (xftDraw, &fg, rf, xpos, dl->ypos, + runs[i].ptr, runs[i].len); + else + XftDrawString16 (xftDraw, &fg, rf, xpos, dl->ypos, + (XftChar16 *) runs[i].ptr, runs[i].len); + } + } +#endif + { + if (use_x_font) + { + if (need_clipping) + { + XRectangle clip_box[1]; + + clip_box[0].x = 0; + clip_box[0].y = 0; + clip_box[0].width = clip_end - clip_start; + clip_box[0].height = height; + + XSetClipRectangles (dpy, gc, clip_start, ypos, + clip_box, 1, YXBanded); + } + + if (runs[i].dimension == 1) + (bgc ? XDrawString : XDrawImageString) + (dpy, x_win, gc, xpos, dl->ypos, + (char *) runs[i].ptr, runs[i].len); + else + (bgc ? XDrawString16 : XDrawImageString16) + (dpy, x_win, gc, xpos, dl->ypos, + (XChar2b *) runs[i].ptr, runs[i].len); + } + } /* We draw underlines in the same color as the text. */ if (cachel->underline) { int upos, uthick; unsigned long upos_ext, uthick_ext; - XFontStruct *xfont; - - xfont = FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font)); - if (!XGetFontProperty (xfont, XA_UNDERLINE_POSITION, &upos_ext)) - upos = dl->descent / 2; - else + XFontStruct *fs = + use_x_font ? FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font)) : 0; + /* #### the logic of the next two may be suboptimal: we may want + to use the POSITION and/or THICKNESS information with Xft */ + if (fs && XGetFontProperty (fs, XA_UNDERLINE_POSITION, &upos_ext)) upos = (int) upos_ext; - if (!XGetFontProperty (xfont, XA_UNDERLINE_THICKNESS, &uthick_ext)) - uthick = 1; else + upos = dl->descent / 2; + if (fs && XGetFontProperty (fs, XA_UNDERLINE_THICKNESS, &uthick_ext)) uthick = (int) uthick_ext; - + else + uthick = 1; if (dl->ypos + upos < dl->ypos + dl->descent - dl->clip) { if (dl->ypos + upos + uthick > dl->ypos + dl->descent - dl->clip) @@ -1008,22 +1242,29 @@ { int ascent, descent, upos, uthick; unsigned long ascent_ext, descent_ext, uthick_ext; - XFontStruct *xfont; - - xfont = FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font)); + XFontStruct *fs = FONT_INSTANCE_X_FONT (fi); - if (!XGetFontProperty (xfont, XA_STRIKEOUT_ASCENT, &ascent_ext)) - ascent = xfont->ascent; - else - ascent = (int) ascent_ext; - if (!XGetFontProperty (xfont, XA_STRIKEOUT_DESCENT, &descent_ext)) - descent = xfont->descent; - else - descent = (int) descent_ext; - if (!XGetFontProperty (xfont, XA_UNDERLINE_THICKNESS, &uthick_ext)) - uthick = 1; + if (!use_x_font) + { + ascent = dl->ascent; + descent = dl->descent; + uthick = 1; + } else - uthick = (int) uthick_ext; + { + if (!XGetFontProperty (fs, XA_STRIKEOUT_ASCENT, &ascent_ext)) + ascent = fs->ascent; + else + ascent = (int) ascent_ext; + if (!XGetFontProperty (fs, XA_STRIKEOUT_DESCENT, &descent_ext)) + descent = fs->descent; + else + descent = (int) descent_ext; + if (!XGetFontProperty (fs, XA_UNDERLINE_THICKNESS, &uthick_ext)) + uthick = 1; + else + uthick = (int) uthick_ext; + } upos = ascent - ((ascent + descent) / 2) + 1; @@ -1046,37 +1287,88 @@ /* Restore the GC */ if (need_clipping) { - XSetClipMask (dpy, gc, None); - XSetClipOrigin (dpy, gc, 0, 0); +#ifdef USE_XFT + if (!use_x_font) + { + XftDrawSetClip(xftDraw, 0); + } + else + { +#endif + XSetClipMask (dpy, gc, None); + XSetClipOrigin (dpy, gc, 0, 0); +#ifdef USE_XFT + } +#endif } /* If we are actually superimposing the cursor then redraw with just the appropriate section highlighted. */ if (cursor_clip && !cursor && focus && cursor_cachel) { - GC cgc; - XRectangle clip_box[1]; - - cgc = x_get_gc (d, font, cursor_cachel->foreground, - cursor_cachel->background, Qnil, Qnil); - - clip_box[0].x = 0; - clip_box[0].y = 0; - clip_box[0].width = cursor_width; - clip_box[0].height = height; - - XSetClipRectangles (dpy, cgc, cursor_start, DISPLAY_LINE_YPOS (dl), - clip_box, 1, Unsorted); - - if (runs[i].dimension == 1) - XDrawImageString (dpy, x_win, cgc, xpos, dl->ypos, - (char *) runs[i].ptr, runs[i].len); - else - XDrawImageString16 (dpy, x_win, cgc, xpos, dl->ypos, - (XChar2b *) runs[i].ptr, runs[i].len); +#ifdef USE_XFT + if (!use_x_font) /* Xft */ + { + XftFont *rf = FONT_INSTANCE_X_XFTFONT (fi); + + { /* set up clipping */ + Region clip_reg = XCreateRegion(); + XRectangle clip_box = { cursor_start, ypos, + cursor_width, height }; + + XUnionRectWithRegion (&clip_box, clip_reg, clip_reg); + XftDrawSetClip(xftDraw, clip_reg); + XDestroyRegion(clip_reg); + } + { /* draw background rectangle & draw text */ + int rect_height = FONT_INSTANCE_ASCENT(fi) + + FONT_INSTANCE_DESCENT(fi); + int rect_width = x_text_width_single_run(f, cachel, &runs[i]); + XftColor xft_color; + + xft_color = XFT_FROB_LISP_COLOR (cursor_cachel->background, 0); + XftDrawRect (xftDraw, &xft_color, + xpos, ypos, rect_width, rect_height); + + xft_color = XFT_FROB_LISP_COLOR (cursor_cachel->foreground, 0); + if (runs[i].dimension == 1) + XftDrawString8 (xftDraw, &xft_color, rf, xpos, dl->ypos, + runs[i].ptr, runs[i].len); + else + XftDrawString16 (xftDraw, &xft_color, rf, xpos, dl->ypos, + (XftChar16 *) runs[i].ptr, runs[i].len); + } - XSetClipMask (dpy, cgc, None); - XSetClipOrigin (dpy, cgc, 0, 0); + XftDrawSetClip(xftDraw, 0); + } + else /* core font, not Xft */ + { +#endif + GC cgc; + XRectangle clip_box[1]; + + cgc = x_get_gc (d, font, cursor_cachel->foreground, + cursor_cachel->background, Qnil, Qnil); + + clip_box[0].x = 0; + clip_box[0].y = 0; + clip_box[0].width = cursor_width; + clip_box[0].height = height; + + XSetClipRectangles (dpy, cgc, cursor_start, ypos, + clip_box, 1, YXBanded); + if (runs[i].dimension == 1) + XDrawImageString (dpy, x_win, cgc, xpos, dl->ypos, + (char *) runs[i].ptr, runs[i].len); + else + XDrawImageString16 (dpy, x_win, cgc, xpos, dl->ypos, + (XChar2b *) runs[i].ptr, runs[i].len); + + XSetClipMask (dpy, cgc, None); + XSetClipOrigin (dpy, cgc, 0, 0); +#ifdef USE_XFT + } +#endif } xpos += this_width; @@ -1102,11 +1394,11 @@ This is bogus as all hell, however. The cursor handling in this function is way bogus and desperately needs to be - cleaned up. (In particular, the drawing of the cursor should + cleaned up. (In particular, the drawing of the cursor should really really be separated out of this function. This may be a bit tricky now because this function itself does way too much stuff, a lot of which needs to be moved into - redisplay.c) This is the only way to be able to easily add + redisplay.c.) This is the only way to be able to easily add new cursor types or (e.g.) make the bar cursor be able to span two characters instead of overlaying just one. */ int bogusly_obtained_ascent_value = @@ -1125,12 +1417,12 @@ tmp_y = dl->ypos - bogusly_obtained_ascent_value; tmp_height = cursor_height; - if (tmp_y + tmp_height > (int) (DISPLAY_LINE_YPOS(dl) + height)) + if (tmp_y + tmp_height > (int) (ypos + height)) { - tmp_y = DISPLAY_LINE_YPOS (dl) + height - tmp_height; - if (tmp_y < (int) DISPLAY_LINE_YPOS (dl)) - tmp_y = DISPLAY_LINE_YPOS (dl); - tmp_height = DISPLAY_LINE_YPOS (dl) + height - tmp_y; + tmp_y = ypos + height - tmp_height; + if (tmp_y < (int) ypos) + tmp_y = ypos; + tmp_height = ypos + height - tmp_y; } if (need_clipping) @@ -1141,7 +1433,8 @@ clip_box[0].width = clip_end - clip_start; clip_box[0].height = tmp_height; XSetClipRectangles (dpy, gc, clip_start, tmp_y, - clip_box, 1, Unsorted); + /* #### why not Unsorted? */ + clip_box, 1, YXBanded); } if (!focus && NILP (bar_cursor_value)) @@ -1162,6 +1455,11 @@ XSetClipOrigin (dpy, gc, 0, 0); } } + +#ifdef USE_XFT +#undef XFT_FROB_LISP_COLOR +#endif + } void @@ -1625,7 +1923,7 @@ topc.red = MINL (65535, (unsigned long) topc.red * 6 / 5); topc.green = MINL (65535, (unsigned long) topc.green * 6 / 5); topc.blue = MINL (65535, (unsigned long) topc.blue * 6 / 5); - if (allocate_nearest_color (dpy, cmap, visual, &topc)) + if (x_allocate_nearest_color (dpy, cmap, visual, &topc)) { *top_shadow = topc.pixel; top_frobbed = 1; @@ -1641,7 +1939,7 @@ botc.red = (unsigned short) ((unsigned long) botc.red * 3 / 5); botc.green = (unsigned short) ((unsigned long) botc.green * 3 / 5); botc.blue = (unsigned short) ((unsigned long) botc.blue * 3 / 5); - if (allocate_nearest_color (dpy, cmap, visual, &botc)) + if (x_allocate_nearest_color (dpy, cmap, visual, &botc)) { *bottom_shadow = botc.pixel; bottom_frobbed = 1; diff -urN 21.5.23/src/redisplay.c 21.5.24/src/redisplay.c --- 21.5.23/src/redisplay.c Tue Oct 25 20:16:27 2005 +++ 21.5.24/src/redisplay.c Sat Nov 26 20:46:10 2005 @@ -4177,9 +4177,13 @@ dash_pixsize = redisplay_text_width_string (w, findex, &ch, Qnil, 0, 1); - - num_to_add = (max_pixsize - cur_pixsize) / dash_pixsize; - num_to_add++; + + if (dash_pixsize == 0) + num_to_add = 0; + else { + num_to_add = (max_pixsize - cur_pixsize) / dash_pixsize; + num_to_add++; + } } while (num_to_add--) diff -urN 21.5.23/src/s/CVS/Entries 21.5.24/src/s/CVS/Entries --- 21.5.23/src/s/CVS/Entries Mon Dec 19 04:21:32 2005 +++ 21.5.24/src/s/CVS/Entries Mon Dec 19 04:23:51 2005 @@ -1,113 +1,113 @@ -/3700.h/1.1.1.1/Wed Dec 18 22:44:12 1996//Tr21-5-23 -/386-ix.h/1.3/Sat Apr 4 23:14:01 1998//Tr21-5-23 -/386bsd.h/1.4/Sat Apr 4 23:14:01 1998//Tr21-5-23 -/README/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-23 -/aix3-1.h/1.8/Sun Jun 10 10:42:35 2001//Tr21-5-23 -/aix3-2-5.h/1.6/Fri Apr 17 05:41:52 1998//Tr21-5-23 -/aix3-2.h/1.4/Thu Apr 12 18:24:42 2001//Tr21-5-23 -/aix4-1.h/1.5/Fri Apr 17 05:41:52 1998//Tr21-5-23 -/aix4-2.h/1.4/Mon May 18 05:42:21 1998//Tr21-5-23 -/aix4.h/1.8/Wed Mar 13 08:53:22 2002//Tr21-5-23 -/alliant-2800.h/1.1.1.1/Wed Dec 18 22:44:12 1996//Tr21-5-23 -/alliant.h/1.1.1.1/Wed Dec 18 22:44:12 1996//Tr21-5-23 -/altos.h/1.1.1.1/Wed Dec 18 22:44:12 1996//Tr21-5-23 -/amdahl.h/1.1.1.1/Wed Dec 18 22:44:12 1996//Tr21-5-23 -/bsd386.h/1.11/Tue May 8 05:23:54 2001//Tr21-5-23 -/bsd4-1.h/1.5/Sun Jun 10 10:42:36 2001//Tr21-5-23 -/bsd4-2.h/1.6/Sun Jun 10 10:42:36 2001//Tr21-5-23 -/bsd4-3.h/1.2/Sun Jun 10 10:42:36 2001//Tr21-5-23 -/bsdos2-1.h/1.3/Fri Apr 17 05:41:52 1998//Tr21-5-23 -/bsdos2.h/1.3/Sat Jun 21 20:04:36 1997//Tr21-5-23 -/bsdos3.h/1.1/Thu Mar 13 02:56:26 1997//Tr21-5-23 -/bsdos4.h/1.3/Tue May 8 05:16:05 2001//Tr21-5-23 -/cxux.h/1.9/Thu Nov 4 23:08:28 2004//Tr21-5-23 -/cxux7.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-23 -/cygwin.sc/1.2/Wed Jan 15 08:46:22 2003//Tr21-5-23 -/cygwin32.h/1.28/Mon Nov 18 06:52:45 2002//Tr21-5-23 -/darwin.h/1.3/Sun Feb 9 14:49:20 2003//Tr21-5-23 -/decosf1-2.h/1.3/Sun Jun 29 23:14:28 1997//Tr21-5-23 -/decosf1-3.h/1.4/Thu Apr 12 18:24:42 2001//Tr21-5-23 -/decosf3-1.h/1.4/Thu May 29 23:51:05 1997//Tr21-5-23 -/decosf3-2.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-23 -/decosf4-0.h/1.12/Sat Jul 15 00:45:19 2000//Tr21-5-23 -/dgux.h/1.8/Wed Mar 13 08:53:22 2002//Tr21-5-23 -/dgux5-4r2.h/1.3/Sun Jun 10 10:42:36 2001//Tr21-5-23 -/dgux5-4r3.h/1.3/Sun Jun 10 10:42:36 2001//Tr21-5-23 -/dgux5-4r4.h/1.3/Sun Jun 10 10:42:36 2001//Tr21-5-23 -/domain.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-23 -/esix.h/1.5/Mon Aug 13 04:46:48 2001//Tr21-5-23 -/esix5r4.h/1.3/Fri Apr 17 05:41:53 1998//Tr21-5-23 -/ewsux5r4.h/1.3/Sun Jun 10 10:42:36 2001//Tr21-5-23 -/freebsd.h/1.23/Tue Feb 22 11:05:06 2005//Tr21-5-23 -/gnu.h/1.11/Sun Jun 10 10:42:36 2001//Tr21-5-23 -/hpux.h/1.10/Sun Jun 10 10:42:37 2001//Tr21-5-23 -/hpux10-shr.h/1.2/Sat Jun 21 20:04:38 1997//Tr21-5-23 -/hpux10.h/1.5/Sat Jun 21 20:04:38 1997//Tr21-5-23 -/hpux11-shr.h/1.1/Fri Mar 27 20:40:21 1998//Tr21-5-23 -/hpux11.h/1.1/Fri Mar 27 20:40:22 1998//Tr21-5-23 -/hpux8-shr.h/1.1.1.1/Wed Dec 18 22:55:26 1996//Tr21-5-23 -/hpux8.h/1.4/Fri Apr 17 05:41:53 1998//Tr21-5-23 -/hpux9-shr.h/1.3/Fri Apr 17 05:41:53 1998//Tr21-5-23 -/hpux9-x11r4.h/1.3/Fri Apr 17 05:41:53 1998//Tr21-5-23 -/hpux9.h/1.8/Fri Apr 17 05:41:53 1998//Tr21-5-23 -/hpux9shxr4.h/1.3/Fri Apr 17 05:41:53 1998//Tr21-5-23 -/iris3-5.h/1.4/Sun Jun 10 10:42:37 2001//Tr21-5-23 -/iris3-6.h/1.4/Sun Jun 10 10:42:37 2001//Tr21-5-23 -/irix3-3.h/1.4/Sun Jun 10 10:42:37 2001//Tr21-5-23 -/irix4-0.h/1.7/Thu Apr 12 18:24:43 2001//Tr21-5-23 -/irix5-0.h/1.9/Thu Apr 12 18:24:43 2001//Tr21-5-23 -/irix5-1.h/1.2/Sat Jun 21 20:04:40 1997//Tr21-5-23 -/irix5-2.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-23 -/irix5-3.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-23 -/irix6-0.h/1.4/Thu Apr 12 18:24:43 2001//Tr21-5-23 -/isc2-2.h/1.5/Mon May 14 04:52:19 2001//Tr21-5-23 -/isc3-0.h/1.3/Fri Apr 17 05:41:54 1998//Tr21-5-23 -/isc4-0.h/1.3/Fri Apr 17 05:41:54 1998//Tr21-5-23 -/isc4-1.h/1.2/Sat Jun 21 20:04:41 1997//Tr21-5-23 -/linux.h/1.19/Mon Aug 12 14:45:34 2002//Tr21-5-23 -/mach-bsd4-3.h/1.2/Fri Jun 6 00:58:44 1997//Tr21-5-23 -/mingw32.h/1.8/Thu Nov 4 23:08:28 2004//Tr21-5-23 -/netbsd.h/1.11/Mon May 7 07:42:40 2001//Tr21-5-23 -/newsos5.h/1.3/Sun Jun 10 10:42:37 2001//Tr21-5-23 -/nextstep.h/1.9/Sun Jun 10 10:42:37 2001//Tr21-5-23 -/openbsd.h/1.1/Sun May 24 05:45:53 1998//Tr21-5-23 -/osf1.h/1.3/Sun Jun 29 23:14:30 1997//Tr21-5-23 -/ptx.h/1.6/Sun Jun 10 10:42:38 2001//Tr21-5-23 -/riscix1-1.h/1.2/Sun Jun 10 10:42:38 2001//Tr21-5-23 -/riscix1-2.h/1.2/Sun Jun 10 10:42:38 2001//Tr21-5-23 -/riscos5.h/1.3/Sun Jun 29 23:14:31 1997//Tr21-5-23 -/rtu.h/1.5/Sun Jun 10 10:42:38 2001//Tr21-5-23 -/sco4.h/1.7/Sun Jun 10 10:42:38 2001//Tr21-5-23 -/sco5-shr.h/1.3/Thu Apr 12 18:24:44 2001//Tr21-5-23 -/sco5.h/1.10/Sun Jun 10 10:42:38 2001//Tr21-5-23 -/sco7.h/1.2/Thu Apr 12 18:24:44 2001//Tr21-5-23 -/sol2.h/1.12/Thu Sep 18 05:14:00 2003//Tr21-5-23 -/sunos4-0-shr.h/1.3/Sat Jun 21 20:04:43 1997//Tr21-5-23 -/sunos4-0.h/1.9/Mon May 21 05:26:17 2001//Tr21-5-23 -/sunos4-1-1.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-23 -/sunos4-1-2-shr.h/1.3/Sat Jun 21 20:04:43 1997//Tr21-5-23 -/sunos4-1-2.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-23 -/sunos4-1-3-shr.h/1.3/Sat Jun 21 20:04:43 1997//Tr21-5-23 -/sunos4-1-3.h/1.2/Sat Jun 21 20:04:43 1997//Tr21-5-23 -/sunos4-1-4-shr.h/1.3/Sat Jun 21 20:04:44 1997//Tr21-5-23 -/sunos4-1-4.h/1.2/Sun Mar 16 03:06:47 1997//Tr21-5-23 -/sunos4-1-shr.h/1.3/Sat Jun 21 20:04:44 1997//Tr21-5-23 -/sunos4-1.h/1.6/Tue Mar 31 20:12:29 1998//Tr21-5-23 -/template.h/1.4/Sun Jun 10 10:42:38 2001//Tr21-5-23 -/ultrix.h/1.3/Sun Jun 10 10:42:38 2001//Tr21-5-23 -/ultrix4-3.h/1.1/Sat Mar 22 22:19:20 1997//Tr21-5-23 -/umax.h/1.6/Wed Mar 13 08:53:23 2002//Tr21-5-23 -/umips.h/1.7/Sun Jun 10 10:42:38 2001//Tr21-5-23 -/unipl5-0.h/1.6/Sun Jun 10 10:42:38 2001//Tr21-5-23 -/unipl5-2.h/1.6/Sun Jun 10 10:42:39 2001//Tr21-5-23 -/usg5-0.h/1.4/Sun Jun 10 10:42:39 2001//Tr21-5-23 -/usg5-2-2.h/1.2/Sun Jun 10 10:42:39 2001//Tr21-5-23 -/usg5-2.h/1.3/Sun Jun 10 10:42:39 2001//Tr21-5-23 -/usg5-3.h/1.5/Sun Jun 10 10:42:39 2001//Tr21-5-23 -/usg5-4-2.h/1.4/Thu Nov 4 23:08:28 2004//Tr21-5-23 -/usg5-4.h/1.9/Thu Aug 29 19:45:34 2002//Tr21-5-23 -/win32-common.h/1.4/Thu Nov 4 23:08:28 2004//Tr21-5-23 -/win32-native.h/1.4/Thu Nov 4 23:08:28 2004//Tr21-5-23 -/windowsnt.h/1.33/Mon Jan 24 23:34:34 2005//Tr21-5-23 -/xenix.h/1.6/Sun Jun 10 10:42:39 2001//Tr21-5-23 +/3700.h/1.1.1.1/Wed Dec 18 22:44:12 1996//Tr21-5-24 +/386-ix.h/1.3/Sat Apr 4 23:14:01 1998//Tr21-5-24 +/386bsd.h/1.4/Sat Apr 4 23:14:01 1998//Tr21-5-24 +/README/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-24 +/aix3-1.h/1.8/Sun Jun 10 10:42:35 2001//Tr21-5-24 +/aix3-2-5.h/1.6/Fri Apr 17 05:41:52 1998//Tr21-5-24 +/aix3-2.h/1.4/Thu Apr 12 18:24:42 2001//Tr21-5-24 +/aix4-1.h/1.5/Fri Apr 17 05:41:52 1998//Tr21-5-24 +/aix4-2.h/1.4/Mon May 18 05:42:21 1998//Tr21-5-24 +/aix4.h/1.8/Wed Mar 13 08:53:22 2002//Tr21-5-24 +/alliant-2800.h/1.1.1.1/Wed Dec 18 22:44:12 1996//Tr21-5-24 +/alliant.h/1.1.1.1/Wed Dec 18 22:44:12 1996//Tr21-5-24 +/altos.h/1.1.1.1/Wed Dec 18 22:44:12 1996//Tr21-5-24 +/amdahl.h/1.1.1.1/Wed Dec 18 22:44:12 1996//Tr21-5-24 +/bsd386.h/1.11/Tue May 8 05:23:54 2001//Tr21-5-24 +/bsd4-1.h/1.5/Sun Jun 10 10:42:36 2001//Tr21-5-24 +/bsd4-2.h/1.6/Sun Jun 10 10:42:36 2001//Tr21-5-24 +/bsd4-3.h/1.2/Sun Jun 10 10:42:36 2001//Tr21-5-24 +/bsdos2-1.h/1.3/Fri Apr 17 05:41:52 1998//Tr21-5-24 +/bsdos2.h/1.3/Sat Jun 21 20:04:36 1997//Tr21-5-24 +/bsdos3.h/1.1/Thu Mar 13 02:56:26 1997//Tr21-5-24 +/bsdos4.h/1.3/Tue May 8 05:16:05 2001//Tr21-5-24 +/cxux.h/1.9/Thu Nov 4 23:08:28 2004//Tr21-5-24 +/cxux7.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-24 +/cygwin.sc/1.2/Wed Jan 15 08:46:22 2003//Tr21-5-24 +/cygwin32.h/1.28/Mon Nov 18 06:52:45 2002//Tr21-5-24 +/darwin.h/1.3/Sun Feb 9 14:49:20 2003//Tr21-5-24 +/decosf1-2.h/1.3/Sun Jun 29 23:14:28 1997//Tr21-5-24 +/decosf1-3.h/1.4/Thu Apr 12 18:24:42 2001//Tr21-5-24 +/decosf3-1.h/1.4/Thu May 29 23:51:05 1997//Tr21-5-24 +/decosf3-2.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-24 +/decosf4-0.h/1.12/Sat Jul 15 00:45:19 2000//Tr21-5-24 +/dgux.h/1.8/Wed Mar 13 08:53:22 2002//Tr21-5-24 +/dgux5-4r2.h/1.3/Sun Jun 10 10:42:36 2001//Tr21-5-24 +/dgux5-4r3.h/1.3/Sun Jun 10 10:42:36 2001//Tr21-5-24 +/dgux5-4r4.h/1.3/Sun Jun 10 10:42:36 2001//Tr21-5-24 +/domain.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-24 +/esix.h/1.5/Mon Aug 13 04:46:48 2001//Tr21-5-24 +/esix5r4.h/1.3/Fri Apr 17 05:41:53 1998//Tr21-5-24 +/ewsux5r4.h/1.3/Sun Jun 10 10:42:36 2001//Tr21-5-24 +/freebsd.h/1.23/Tue Feb 22 11:05:06 2005//Tr21-5-24 +/gnu.h/1.11/Sun Jun 10 10:42:36 2001//Tr21-5-24 +/hpux.h/1.10/Sun Jun 10 10:42:37 2001//Tr21-5-24 +/hpux10-shr.h/1.2/Sat Jun 21 20:04:38 1997//Tr21-5-24 +/hpux10.h/1.5/Sat Jun 21 20:04:38 1997//Tr21-5-24 +/hpux11-shr.h/1.1/Fri Mar 27 20:40:21 1998//Tr21-5-24 +/hpux11.h/1.1/Fri Mar 27 20:40:22 1998//Tr21-5-24 +/hpux8-shr.h/1.1.1.1/Wed Dec 18 22:55:26 1996//Tr21-5-24 +/hpux8.h/1.4/Fri Apr 17 05:41:53 1998//Tr21-5-24 +/hpux9-shr.h/1.3/Fri Apr 17 05:41:53 1998//Tr21-5-24 +/hpux9-x11r4.h/1.3/Fri Apr 17 05:41:53 1998//Tr21-5-24 +/hpux9.h/1.8/Fri Apr 17 05:41:53 1998//Tr21-5-24 +/hpux9shxr4.h/1.3/Fri Apr 17 05:41:53 1998//Tr21-5-24 +/iris3-5.h/1.4/Sun Jun 10 10:42:37 2001//Tr21-5-24 +/iris3-6.h/1.4/Sun Jun 10 10:42:37 2001//Tr21-5-24 +/irix3-3.h/1.4/Sun Jun 10 10:42:37 2001//Tr21-5-24 +/irix4-0.h/1.7/Thu Apr 12 18:24:43 2001//Tr21-5-24 +/irix5-0.h/1.9/Thu Apr 12 18:24:43 2001//Tr21-5-24 +/irix5-1.h/1.2/Sat Jun 21 20:04:40 1997//Tr21-5-24 +/irix5-2.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-24 +/irix5-3.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-24 +/irix6-0.h/1.4/Thu Apr 12 18:24:43 2001//Tr21-5-24 +/isc2-2.h/1.5/Mon May 14 04:52:19 2001//Tr21-5-24 +/isc3-0.h/1.3/Fri Apr 17 05:41:54 1998//Tr21-5-24 +/isc4-0.h/1.3/Fri Apr 17 05:41:54 1998//Tr21-5-24 +/isc4-1.h/1.2/Sat Jun 21 20:04:41 1997//Tr21-5-24 +/linux.h/1.19/Mon Aug 12 14:45:34 2002//Tr21-5-24 +/mach-bsd4-3.h/1.2/Fri Jun 6 00:58:44 1997//Tr21-5-24 +/mingw32.h/1.8/Thu Nov 4 23:08:28 2004//Tr21-5-24 +/netbsd.h/1.11/Mon May 7 07:42:40 2001//Tr21-5-24 +/newsos5.h/1.3/Sun Jun 10 10:42:37 2001//Tr21-5-24 +/nextstep.h/1.9/Sun Jun 10 10:42:37 2001//Tr21-5-24 +/openbsd.h/1.1/Sun May 24 05:45:53 1998//Tr21-5-24 +/osf1.h/1.3/Sun Jun 29 23:14:30 1997//Tr21-5-24 +/ptx.h/1.6/Sun Jun 10 10:42:38 2001//Tr21-5-24 +/riscix1-1.h/1.2/Sun Jun 10 10:42:38 2001//Tr21-5-24 +/riscix1-2.h/1.2/Sun Jun 10 10:42:38 2001//Tr21-5-24 +/riscos5.h/1.3/Sun Jun 29 23:14:31 1997//Tr21-5-24 +/rtu.h/1.5/Sun Jun 10 10:42:38 2001//Tr21-5-24 +/sco4.h/1.7/Sun Jun 10 10:42:38 2001//Tr21-5-24 +/sco5-shr.h/1.3/Thu Apr 12 18:24:44 2001//Tr21-5-24 +/sco5.h/1.10/Sun Jun 10 10:42:38 2001//Tr21-5-24 +/sco7.h/1.2/Thu Apr 12 18:24:44 2001//Tr21-5-24 +/sol2.h/1.12/Thu Sep 18 05:14:00 2003//Tr21-5-24 +/sunos4-0-shr.h/1.3/Sat Jun 21 20:04:43 1997//Tr21-5-24 +/sunos4-0.h/1.9/Mon May 21 05:26:17 2001//Tr21-5-24 +/sunos4-1-1.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-24 +/sunos4-1-2-shr.h/1.3/Sat Jun 21 20:04:43 1997//Tr21-5-24 +/sunos4-1-2.h/1.1.1.1/Wed Dec 18 22:44:13 1996//Tr21-5-24 +/sunos4-1-3-shr.h/1.3/Sat Jun 21 20:04:43 1997//Tr21-5-24 +/sunos4-1-3.h/1.2/Sat Jun 21 20:04:43 1997//Tr21-5-24 +/sunos4-1-4-shr.h/1.3/Sat Jun 21 20:04:44 1997//Tr21-5-24 +/sunos4-1-4.h/1.2/Sun Mar 16 03:06:47 1997//Tr21-5-24 +/sunos4-1-shr.h/1.3/Sat Jun 21 20:04:44 1997//Tr21-5-24 +/sunos4-1.h/1.6/Tue Mar 31 20:12:29 1998//Tr21-5-24 +/template.h/1.4/Sun Jun 10 10:42:38 2001//Tr21-5-24 +/ultrix.h/1.3/Sun Jun 10 10:42:38 2001//Tr21-5-24 +/ultrix4-3.h/1.1/Sat Mar 22 22:19:20 1997//Tr21-5-24 +/umax.h/1.6/Wed Mar 13 08:53:23 2002//Tr21-5-24 +/umips.h/1.7/Sun Jun 10 10:42:38 2001//Tr21-5-24 +/unipl5-0.h/1.6/Sun Jun 10 10:42:38 2001//Tr21-5-24 +/unipl5-2.h/1.6/Sun Jun 10 10:42:39 2001//Tr21-5-24 +/usg5-0.h/1.4/Sun Jun 10 10:42:39 2001//Tr21-5-24 +/usg5-2-2.h/1.2/Sun Jun 10 10:42:39 2001//Tr21-5-24 +/usg5-2.h/1.3/Sun Jun 10 10:42:39 2001//Tr21-5-24 +/usg5-3.h/1.5/Sun Jun 10 10:42:39 2001//Tr21-5-24 +/usg5-4-2.h/1.4/Thu Nov 4 23:08:28 2004//Tr21-5-24 +/usg5-4.h/1.9/Thu Aug 29 19:45:34 2002//Tr21-5-24 +/win32-common.h/1.4/Thu Nov 4 23:08:28 2004//Tr21-5-24 +/win32-native.h/1.4/Thu Nov 4 23:08:28 2004//Tr21-5-24 +/windowsnt.h/1.33/Mon Jan 24 23:34:34 2005//Tr21-5-24 +/xenix.h/1.6/Sun Jun 10 10:42:39 2001//Tr21-5-24 D diff -urN 21.5.23/src/s/CVS/Tag 21.5.24/src/s/CVS/Tag --- 21.5.23/src/s/CVS/Tag Mon Dec 19 04:21:32 2005 +++ 21.5.24/src/s/CVS/Tag Mon Dec 19 04:23:51 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/src/sound.c 21.5.24/src/sound.c --- 21.5.23/src/sound.c Fri May 6 02:10:54 2005 +++ 21.5.24/src/sound.c Wed Nov 16 16:22:46 2005 @@ -51,6 +51,25 @@ #include "syswindows.h" #endif +#ifdef HAVE_NAS_SOUND +#define USED_IF_HAVE_NAS(decl) decl +#else +#define USED_IF_HAVE_NAS(decl) UNUSED (decl) +#endif + +#if defined(HAVE_NATIVE_SOUND) || defined(HAVE_NAS_SOUND) +#define USED_IF_HAVE_NATIVE_OR_NAS(decl) decl +#else +#define USED_IF_HAVE_NATIVE_OR_NAS(decl) UNUSED (decl) +#endif + +#if defined(HAVE_NATIVE_SOUND) || defined(HAVE_NAS_SOUND) \ + || defined(HAVE_ESD_SOUND) +#define USED_IF_HAVE_ANY(decl) decl +#else +#define USED_IF_HAVE_ANY(decl) UNUSED (decl) +#endif + #ifdef HAVE_ESD_SOUND extern int esd_play_sound_file (Extbyte *file, int vol); extern int esd_play_sound_data (Binbyte *data, size_t length, int vol); @@ -87,7 +106,7 @@ Windows the sound file must be in WAV format. DEVICE defaults to the selected device. */ - (file, volume, device)) + (file, volume, USED_IF_HAVE_ANY (device))) { /* This function can call lisp */ int vol; @@ -402,7 +421,7 @@ DEFUN ("device-sound-enabled-p", Fdevice_sound_enabled_p, 0, 1, 0, /* Return t if DEVICE is able to play sound. Defaults to selected device. */ - (device)) + (USED_IF_HAVE_NATIVE_OR_NAS (device))) { #ifdef HAVE_NAS_SOUND if (DEVICE_CONNECTED_TO_NAS_P (decode_device (device))) @@ -487,12 +506,6 @@ return Qnil; } -#ifdef HAVE_NAS_SOUND -#define USED_IF_HAVE_NAS(decl) decl -#else -#define USED_IF_HAVE_NAS(decl) UNUSED (decl) -#endif - DEFUN ("wait-for-sounds", Fwait_for_sounds, 0, 1, 0, /* Wait for all sounds to finish playing on DEVICE. */ @@ -608,7 +621,7 @@ #endif /* HAVE_NATIVE_SOUND */ void -init_device_sound (struct device *d) +init_device_sound (struct device * USED_IF_HAVE_NATIVE_OR_NAS (d)) { #ifdef HAVE_NAS_SOUND init_nas_sound (d); diff -urN 21.5.23/src/specifier.c 21.5.24/src/specifier.c --- 21.5.23/src/specifier.c Mon Oct 24 19:07:40 2005 +++ 21.5.24/src/specifier.c Fri Nov 25 10:42:06 2005 @@ -302,7 +302,11 @@ /* don't be snafued by the disksave finalization. */ if (!for_disksave && !GHOST_SPECIFIER_P(sp) && sp->caching) { +#ifdef NEW_GC + mc_free (sp->caching); +#else /* not NEW_GC */ xfree (sp->caching, struct specifier_caching *); +#endif /* not NEW_GC */ sp->caching = 0; } } @@ -382,10 +386,19 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("specifier-caching", + specifier_caching, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + specifier_caching_description_1, + struct specifier_caching); +#else /* not NEW_GC */ static const struct sized_memory_description specifier_caching_description = { sizeof (struct specifier_caching), specifier_caching_description_1 }; +#endif /* not NEW_GC */ static const struct sized_memory_description specifier_extra_description_map[] = { @@ -403,8 +416,12 @@ { XD_LISP_OBJECT, offsetof (Lisp_Specifier, frame_specs) }, { XD_LISP_OBJECT, offsetof (Lisp_Specifier, window_specs) }, { XD_LISP_OBJECT, offsetof (Lisp_Specifier, buffer_specs) }, +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (Lisp_Specifier, caching) }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (Lisp_Specifier, caching), 1, { &specifier_caching_description } }, +#endif /* not NEW_GC */ { XD_LISP_OBJECT, offsetof (Lisp_Specifier, magic_parent) }, { XD_LISP_OBJECT, offsetof (Lisp_Specifier, fallback) }, { XD_BLOCK_ARRAY, offsetof (Lisp_Specifier, data), 1, @@ -2996,7 +3013,12 @@ assert (!GHOST_SPECIFIER_P (sp)); if (!sp->caching) +#ifdef NEW_GC + sp->caching = alloc_lrecord_type (struct specifier_caching, + &lrecord_specifier_caching); +#else /* not NEW_GC */ sp->caching = xnew_and_zero (struct specifier_caching); +#endif /* not NEW_GC */ sp->caching->offset_into_struct_window = struct_window_offset; sp->caching->value_changed_in_window = value_changed_in_window; sp->caching->offset_into_struct_frame = struct_frame_offset; @@ -3349,6 +3371,9 @@ syms_of_specifier (void) { INIT_LRECORD_IMPLEMENTATION (specifier); +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (specifier_caching); +#endif /* NEW_GC */ DEFSYMBOL (Qspecifierp); diff -urN 21.5.23/src/specifier.h 21.5.24/src/specifier.h --- 21.5.23/src/specifier.h Mon Oct 24 19:07:41 2005 +++ 21.5.24/src/specifier.h Fri Nov 25 10:42:06 2005 @@ -423,6 +423,9 @@ struct specifier_caching { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ int offset_into_struct_window; void (*value_changed_in_window) (Lisp_Object specifier, struct window *w, Lisp_Object oldval); @@ -431,6 +434,19 @@ Lisp_Object oldval); int always_recompute; }; + +#ifdef NEW_GC +DECLARE_LRECORD (specifier_caching, struct specifier_caching); +#define XSPECIFIER_CACHING(x) \ + XRECORD (x, specifier_caching, struct specifier_caching) +#define wrap_specifier_caching(p) \ + wrap_record (p, specifier_caching) +#define SPECIFIER_CACHINGP(x) RECORDP (x, specifier_caching) +#define CHECK_SPECIFIER_CACHING(x) \ + CHECK_RECORD (x, specifier_caching) +#define CONCHECK_SPECIFIER_CACHING(x) \ + CONCHECK_RECORD (x, specifier_caching) +#endif /* NEW_GC */ /* #### get image instances out of domains! */ diff -urN 21.5.23/src/symsinit.h 21.5.24/src/symsinit.h --- 21.5.23/src/symsinit.h Wed Oct 5 02:51:24 2005 +++ 21.5.24/src/symsinit.h Sat Nov 26 20:46:10 2005 @@ -160,6 +160,7 @@ void syms_of_objects_mswindows (void); void syms_of_objects_tty (void); void syms_of_objects_x (void); +void syms_of_xft_fonts (void); EXTERN_C void syms_of_postgresql (void); void syms_of_print (void); void syms_of_process (void); @@ -397,6 +398,8 @@ void vars_of_nt (void); void vars_of_number (void); void vars_of_objects (void); +void vars_of_xft_fonts (void); +void reinit_vars_of_xft_fonts (void); void reinit_vars_of_objects (void); void vars_of_objects_tty (void); void vars_of_objects_mswindows (void); @@ -481,6 +484,7 @@ void complex_vars_of_minibuf (void); void reinit_complex_vars_of_minibuf (void); void complex_vars_of_keymap (void); +void complex_vars_of_xft_fonts (void); /* Late initialization -- stuff pertaining only to interactive usage, I/O, or Lisp reading. (Dump-time and run-time, but the code itself diff -urN 21.5.23/src/syntax.c 21.5.24/src/syntax.c --- 21.5.23/src/syntax.c Tue Oct 25 20:16:28 2005 +++ 21.5.24/src/syntax.c Fri Nov 25 10:42:06 2005 @@ -309,10 +309,19 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("syntax-cache", syntax_cache, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + syntax_cache_description_1, + Lisp_Syntax_Cache); +#else /* not NEW_GC */ + const struct sized_memory_description syntax_cache_description = { sizeof (struct syntax_cache), syntax_cache_description_1 }; +#endif /* not NEW_GC */ void mark_buffer_syntax_cache (struct buffer *buf) @@ -344,7 +353,12 @@ init_buffer_syntax_cache (struct buffer *buf) { struct syntax_cache *cache; +#ifdef NEW_GC + buf->syntax_cache = alloc_lrecord_type (struct syntax_cache, + &lrecord_syntax_cache); +#else /* not NEW_GC */ buf->syntax_cache = xnew_and_zero (struct syntax_cache); +#endif /* not NEW_GC */ cache = buf->syntax_cache; cache->object = wrap_buffer (buf); cache->buffer = buf; @@ -359,7 +373,11 @@ void uninit_buffer_syntax_cache (struct buffer *buf) { +#ifdef NEW_GC + mc_free (buf->syntax_cache); +#else /* not NEW_GC */ xfree (buf->syntax_cache, struct syntax_cache *); +#endif /* not NEW_GC */ buf->syntax_cache = 0; } @@ -2313,6 +2331,9 @@ void syms_of_syntax (void) { +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (syntax_cache); +#endif /* NEW_GC */ DEFSYMBOL (Qsyntax_table_p); DEFSYMBOL (Qsyntax_table); diff -urN 21.5.23/src/syntax.h 21.5.24/src/syntax.h --- 21.5.23/src/syntax.h Thu Feb 20 17:19:43 2003 +++ 21.5.24/src/syntax.h Fri Nov 25 10:42:07 2005 @@ -295,6 +295,9 @@ faster than if we did the whole calculation from scratch. */ struct syntax_cache { +#ifdef NEW_GC + struct lrecord_header header; +#endif /* NEW_GC */ int use_code; /* Whether to use syntax_code or syntax_table. This is set depending on whether the @@ -332,6 +335,21 @@ Charxpos prev_change; /* Position of the previous extent change. */ }; + +#ifdef NEW_GC +typedef struct syntax_cache Lisp_Syntax_Cache; + +DECLARE_LRECORD (syntax_cache, Lisp_Syntax_Cache); + +#define XSYNTAX_CACHE(x) \ + XRECORD (x, syntax_cache, Lisp_Syntax_Cache) +#define wrap_syntax_cache(p) wrap_record (p, syntax_cache) +#define SYNTAX_CACHE_P(x) RECORDP (x, syntax_cache) +#define CHECK_SYNTAX_CACHE(x) CHECK_RECORD (x, syntax_cache) +#define CONCHECK_SYNTAX_CACHE(x) CONCHECK_RECORD (x, syntax_cache) +#endif /* NEW_GC */ + + extern const struct sized_memory_description syntax_cache_description; diff -urN 21.5.23/src/text.h 21.5.24/src/text.h --- 21.5.23/src/text.h Fri Jan 28 11:36:27 2005 +++ 21.5.24/src/text.h Sun Nov 13 19:48:04 2005 @@ -1,7 +1,7 @@ /* Header file for text manipulation primitives and macros. Copyright (C) 1985-1995 Free Software Foundation, Inc. Copyright (C) 1995 Sun Microsystems, Inc. - Copyright (C) 2000, 2001, 2002, 2003, 2004 Ben Wing. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Ben Wing. This file is part of XEmacs. @@ -1005,73 +1005,6 @@ #define itext_ichar_n(ptr, offset) \ itext_ichar (itext_n_addr (ptr, offset)) - - -/* ---------------------------- */ -/* Working with Ichars */ -/* ---------------------------- */ - -/* NOTE: There are other functions/macros for working with Ichars in - charset.h, for retrieving the charset of an Ichar, the length of an - Ichar when converted to text, etc. -*/ - -#ifdef MULE - -MODULE_API int non_ascii_valid_ichar_p (Ichar ch); - -/* Return whether the given Ichar is valid. - */ - -DECLARE_INLINE_HEADER ( -int -valid_ichar_p (Ichar ch) -) -{ - return (! (ch & ~0xFF)) || non_ascii_valid_ichar_p (ch); -} - -#else /* not MULE */ - -#define valid_ichar_p(ch) (! (ch & ~0xFF)) - -#endif /* not MULE */ - -DECLARE_INLINE_HEADER ( -Lisp_Object -make_char (Ichar val) -) -{ - type_checking_assert (valid_ichar_p (val)); - return make_char_1 (val); -} - -#define CHAR_INTP(x) (INTP (x) && valid_ichar_p (XINT (x))) - -#define CHAR_OR_CHAR_INTP(x) (CHARP (x) || CHAR_INTP (x)) - -DECLARE_INLINE_HEADER ( -Ichar -XCHAR_OR_CHAR_INT (Lisp_Object obj) -) -{ - return CHARP (obj) ? XCHAR (obj) : XINT (obj); -} - -/* Signal an error if CH is not a valid character or integer Lisp_Object. - If CH is an integer Lisp_Object, convert it to a character Lisp_Object, - but merely by repackaging, without performing tests for char validity. - */ - -#define CHECK_CHAR_COERCE_INT(x) do { \ - if (CHARP (x)) \ - ; \ - else if (CHAR_INTP (x)) \ - x = make_char (XINT (x)); \ - else \ - x = wrong_type_argument (Qcharacterp, x); \ -} while (0) - /************************************************************************/ diff -urN 21.5.23/src/toolbar-common.c 21.5.24/src/toolbar-common.c --- 21.5.23/src/toolbar-common.c Tue Jan 25 08:34:12 2005 +++ 21.5.24/src/toolbar-common.c Sat Nov 26 20:46:11 2005 @@ -144,7 +144,8 @@ (w, toolbar_findex, sx + x_adj, sy + y_adj, swidth + width_adj, sheight + height_adj, abs(shadow_thickness), - EDGE_ALL, (shadow_thickness < 0) ? EDGE_BEVEL_IN : EDGE_BEVEL_OUT)); + EDGE_ALL, (shadow_thickness < 0) ? EDGE_BEVEL_IN + : EDGE_BEVEL_OUT)); } /* Handle the borders... */ @@ -173,7 +174,7 @@ struct window *w; int vertical = tb->vertical; int border_width = tb->border_width; - face_index toolbar_findex; + face_index button_findex; if (vertical) { @@ -211,16 +212,23 @@ shadow_thickness = 0; } - toolbar_findex = get_builtin_face_cache_index (w, Vtoolbar_face); - - __prepare_button_area (f, tb); - /* #### It is currently possible for users to trash us by directly changing the toolbar glyphs. Avoid crashing in that case. */ if (GLYPHP (glyph)) - instance = glyph_image_instance (glyph, window, ERROR_ME_DEBUG_WARN, 1); + { + /* WARNING: this interface may change */ + Lisp_Object face_list[2] = { XGLYPH_FACE (glyph), Vtoolbar_face }; + + button_findex = merge_face_list_to_cache_index (w, face_list, 2); + instance = glyph_image_instance (glyph, window, ERROR_ME_DEBUG_WARN, 1); + } else - instance = Qnil; + { + button_findex = get_builtin_face_cache_index (w, Vtoolbar_face); + instance = Qnil; + } + + __prepare_button_area (f, tb); if (IMAGE_INSTANCEP (instance)) { @@ -263,7 +271,7 @@ redisplay_output_pixmap (w, instance, &db, &dga, - toolbar_findex, 0, 0, 0, 0); + button_findex, 0, 0, 0, 0); } else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_TEXT) { @@ -309,7 +317,7 @@ MAYBE_DEVMETH (d, output_string, (w, &dl, buf, tb->x + x_offset, 0, 0, width, - toolbar_findex, 0, 0, 0, 0)); + button_findex, 0, 0, 0, 0)); Dynarr_free (buf); } diff -urN 21.5.23/src/toolbar.c 21.5.24/src/toolbar.c --- 21.5.23/src/toolbar.c Tue Oct 25 20:16:28 2005 +++ 21.5.24/src/toolbar.c Tue Nov 22 18:02:43 2005 @@ -90,7 +90,9 @@ DEFINE_LRECORD_IMPLEMENTATION ("toolbar-button", toolbar_button, 0, /*dumpable-flag*/ - mark_toolbar_button, 0, 0, 0, 0, + mark_toolbar_button, + default_object_printer, + 0, 0, 0, toolbar_button_description, struct toolbar_button); diff -urN 21.5.23/src/unexelf.c 21.5.24/src/unexelf.c --- 21.5.23/src/unexelf.c Mon Oct 10 12:16:25 2005 +++ 21.5.24/src/unexelf.c Sat Oct 29 16:18:21 2005 @@ -565,8 +565,8 @@ * */ int -unexec (Extbyte *new_name, Extbyte *old_name, unsigned int UNUSED (data_start), - unsigned int UNUSED (bss_start), unsigned int UNUSED (entry_address)) +unexec (Extbyte *new_name, Extbyte *old_name, uintptr_t UNUSED (data_start), + uintptr_t UNUSED (bss_start), uintptr_t UNUSED (entry_address)) { int new_file, old_file, new_file_size; diff -urN 21.5.23/src/vdb-fake.c 21.5.24/src/vdb-fake.c --- 21.5.23/src/vdb-fake.c Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/vdb-fake.c Fri Nov 25 10:42:07 2005 @@ -0,0 +1,50 @@ +/* Virtual diry bit implementation for XEmacs. + Copyright (C) 2005 Marcus Crestani. + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF. */ + +#include +#include "lisp.h" + +void +fake_error (void) +{ + fprintf (stderr, "Incremental garbage collection not yet available on this"); + fprintf (stderr, "system.\nDon't try to set allow-incremental-gc to t.\n"); + ABORT (); +} + +void +vdb_install_signal_handler (void) +{ + allow_incremental_gc = 0; +} + +void +vdb_protect (void *UNUSED (ptr), EMACS_INT UNUSED (len)) +{ + fake_error (); +} + +void +vdb_unprotect (void *UNUSED (ptr), EMACS_INT UNUSED (len)) +{ + fake_error (); +} diff -urN 21.5.23/src/vdb-mach.c 21.5.24/src/vdb-mach.c --- 21.5.23/src/vdb-mach.c Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/vdb-mach.c Fri Nov 25 10:42:07 2005 @@ -0,0 +1,261 @@ +/* Virtual diry bit implementation for XEmacs. + Copyright (C) 2005 Marcus Crestani. + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF. */ + +#include +#include "lisp.h" +#include "gc.h" +#include "mc-alloc.h" +#include "vdb.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/* the structure of an exception msg and its reply */ +typedef struct rep_msg { + mach_msg_header_t head; + NDR_record_t NDR; + kern_return_t ret_code; +} mach_reply_msg_t; + +typedef struct exc_msg { + mach_msg_header_t head; + /* start of the kernel processed data */ + mach_msg_body_t msgh_body; + mach_msg_port_descriptor_t thread; + mach_msg_port_descriptor_t task; + /* end of the kernel processed data */ + NDR_record_t NDR; + exception_type_t exception; + mach_msg_type_number_t code_cnt; + exception_data_t code; + /* some padding */ + char pad[512]; +} mach_exc_msg_t; + +/* this is a neat little mach callback */ +extern boolean_t exc_server(mach_msg_header_t *in, mach_msg_header_t *out); + +/* these are the globals everyone needs */ +static size_t page_size = 16384; +static mach_port_t task_self = NULL; +static mach_port_t exc_port = NULL; + +/* these are some less neat mach callbacks */ +kern_return_t +catch_exception_raise_state +(mach_port_t UNUSED (port), + exception_type_t UNUSED (exception_type), + exception_data_t UNUSED (exception_data), + mach_msg_type_number_t UNUSED (data_cnt), + thread_state_flavor_t *UNUSED (flavor), + thread_state_t UNUSED (in_state), + mach_msg_type_number_t UNUSED (is_cnt), + thread_state_t UNUSED (out_state), + mach_msg_type_number_t UNUSED (os_cnt)) +{ + return KERN_FAILURE; +} + +kern_return_t +catch_exception_raise_state_identitity +(mach_port_t UNUSED (port), + mach_port_t UNUSED (thread_port), + mach_port_t UNUSED (task_port), + exception_type_t UNUSED (exception_type), + exception_data_t UNUSED (exception_data), + mach_msg_type_number_t UNUSED (data_count), + thread_state_flavor_t *UNUSED (state_flavor), + thread_state_t UNUSED (in_state), + mach_msg_type_number_t UNUSED (in_state_count), + thread_state_t UNUSED (out_state), + mach_msg_type_number_t UNUSED (out_state_count)) +{ + return KERN_FAILURE; +} + +kern_return_t +catch_exception_raise +(mach_port_t UNUSED (port), + mach_port_t UNUSED (thread_port), + mach_port_t UNUSED (task_port), + exception_type_t UNUSED (exception_type), + exception_data_t exception_data, + mach_msg_type_number_t UNUSED (data_count)) +{ + /* kernel return value is in exception_data[0], faulting address in + exception_data[1] */ + if (write_barrier_enabled + && (fault_on_protected_page ((void *) exception_data[1])) + && exception_data[0] == KERN_PROTECTION_FAILURE) + { + vdb_designate_modified ((void *) exception_data[1]); + unprotect_page_and_mark_dirty ((void *) exception_data[1]); + return KERN_SUCCESS; + } + else /* default sigsegv handler */ + { + fprintf (stderr, "\n\nFatal Error: Received %s (%d) for address 0x%x\n", + "EXC_BAD_ACCESS", exception_data[0], (int) exception_data[1]); + return KERN_FAILURE; + } +} + +/* this is the thread which forwards of exceptions read from the exception + server off to our exception catchers and then back out to the other + thread */ +void +exception_thread(void) +{ + mach_msg_header_t *message; + mach_msg_header_t *reply; + kern_return_t retval; + + /* allocate the space for the message and reply */ + message = (mach_msg_header_t *) malloc (sizeof (mach_exc_msg_t)); + reply = (mach_msg_header_t *) malloc (sizeof (mach_reply_msg_t)); + /* do this loop forever */ + while (1) + { + /* block until we get an exception message */ + retval = mach_msg (message, MACH_RCV_MSG, 0, sizeof (mach_exc_msg_t), + exc_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + /* forward off the handling of this message */ + if (!exc_server (message, reply)) + { + fprintf (stderr, "INTERNAL ERROR: exc_server() failed.\n"); + ABORT (); + } + /* send the message back out to the thread */ + retval = mach_msg (reply, MACH_SEND_MSG, sizeof (mach_reply_msg_t), 0, + MACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE, + MACH_PORT_NULL); + } +} + +/* this initializes the subsystem (sets the exception port, starts the + exception handling thread, etc) */ +void +vdb_install_signal_handler (void) +{ + mach_port_t thread_self, exc_port_s, exc_thread; + ppc_thread_state_t *exc_thread_state; + mach_msg_type_name_t type; + void *subthread_stack; + kern_return_t retval; + + /* get ids for ourself */ + if (!task_self) + task_self = mach_task_self (); + thread_self = mach_thread_self (); + + /* allocate the port we're going to get exceptions on */ + retval = mach_port_allocate (task_self, MACH_PORT_RIGHT_RECEIVE, &exc_port); + if (retval != KERN_SUCCESS) + { + fprintf (stderr, "Couldn't allocate exception port: %s\n", + mach_error_string (retval)); + ABORT (); + } + + /* extract out the send rights for that port, which the OS needs */ + retval = mach_port_extract_right (task_self, exc_port, + MACH_MSG_TYPE_MAKE_SEND, + &exc_port_s, &type); + if(retval != KERN_SUCCESS) + { + fprintf (stderr, "Couldn't extract send rights: %s\n", + mach_error_string (retval)); + ABORT (); + } + + /* set the exception ports for this thread to the above */ + retval = thread_set_exception_ports(thread_self, EXC_MASK_BAD_ACCESS, + exc_port_s, EXCEPTION_DEFAULT, + PPC_THREAD_STATE); + if(retval != KERN_SUCCESS) + { + fprintf (stderr, "Couldn't set exception ports: %s\n", + mach_error_string (retval)); + ABORT (); + } + + /* set up the subthread */ + retval = thread_create(task_self, &exc_thread); + if(retval != KERN_SUCCESS) + { + fprintf (stderr , "Couldn't create exception thread: %s\n", + mach_error_string (retval)); + ABORT (); + } + subthread_stack = (void *) malloc (page_size); + subthread_stack = + (char *) subthread_stack + (page_size - C_ARGSAVE_LEN - C_RED_ZONE); + exc_thread_state = + (ppc_thread_state_t *) malloc (sizeof (ppc_thread_state_t)); + exc_thread_state->srr0 = (unsigned int) exception_thread; + exc_thread_state->r1 = (unsigned int) subthread_stack; + retval = thread_set_state (exc_thread, PPC_THREAD_STATE, + (thread_state_t) exc_thread_state, + PPC_THREAD_STATE_COUNT); + if (retval != KERN_SUCCESS) + { + fprintf (stderr, "Couldn't set subthread state: %s\n", + mach_error_string (retval)); + ABORT (); + } + retval = thread_resume (exc_thread); + if (retval != KERN_SUCCESS) + { + fprintf (stderr, "Couldn't resume subthread: %s\n", + mach_error_string (retval)); + ABORT (); + } + allow_incremental_gc = 1; +} + +void +vdb_protect (void *ptr, EMACS_INT len) +{ + if (mprotect (ptr, len, PROT_READ)) + { + perror ("Couldn't mprotect"); + ABORT (); + } +} + +void +vdb_unprotect (void *ptr, EMACS_INT len) +{ + if (mprotect (ptr, len, PROT_READ | PROT_WRITE)) + { + perror ("Couldn't mprotect"); + ABORT (); + } +} diff -urN 21.5.23/src/vdb-posix.c 21.5.24/src/vdb-posix.c --- 21.5.23/src/vdb-posix.c Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/vdb-posix.c Fri Nov 25 10:42:07 2005 @@ -0,0 +1,153 @@ +/* Virtual diry bit implementation for XEmacs. + Copyright (C) 2005 Marcus Crestani. + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF. */ + +#include +#include "lisp.h" +#include "gc.h" +#include "mc-alloc.h" +#include "vdb.h" + +#include +#include +#include + +#if defined (HAVE_SIGACTION) +# if defined (HAVE_STRUCT_SIGINFO_SI_ADDR) +# define FAULT_HANDLER_ARGUMENTS \ + int signum, struct siginfo *siginfo, void *UNUSED (ctx) +# define GET_FAULT_ADDRESS siginfo->si_addr +# elif defined (HAVE_SIGINFO_T_SI_ADDR) +# define FAULT_HANDLER_ARGUMENTS \ + int signum, siginfo_t *siginfo, void *UNUSED (ctx) +# define GET_FAULT_ADDRESS siginfo->si_addr +# endif +# define USE_SIGACTION +# define FAULT_HANDLER_REMOVE_HANDLER +#elif defined (HAVE_SIGNAL) +# define FAULT_HANDLER_ARGUMENTS int signum, struct sigcontext sc +# define GET_FAULT_ADDRESS (void *) sc.cr2 +# define USE_SIGNAL +#endif + + +#ifdef USE_SIGACTION +struct sigaction act, segv_oact, bus_oact; +#endif /* USE_SIGACTION */ + +#ifdef USE_SIGNAL +sighandler_t segv_oact, bus_oact; +#endif /* USE_SIGNAL */ + +void vdb_remove_signal_handler (void); + +void +vdb_fault_handler (FAULT_HANDLER_ARGUMENTS) +{ + if (write_barrier_enabled + && (fault_on_protected_page (GET_FAULT_ADDRESS))) + { + vdb_designate_modified (GET_FAULT_ADDRESS); + unprotect_page_and_mark_dirty (GET_FAULT_ADDRESS); +#ifdef FAULT_HANDLER_REINSTALL_HANDLER + vdb_install_signal_handler (); +#endif /* FAULT_HANDLER_REINSTALL_HANDLER */ + } + else /* default sigsegv handler */ + { + char *signal_name; + if (signum == SIGSEGV) + signal_name = "SIGSEGV"; + else if (signum == SIGBUS) + signal_name = "SIGBUS"; + else + ABORT (); /* something weird happened: wrong signal caught */ + fprintf (stderr, "\n\nFatal Error: Received %s (%d) for address 0x%x\n", + signal_name, signum, (int) GET_FAULT_ADDRESS); +#ifdef FAULT_HANDLER_CALL_PREVIOUS_HANDLER + if (signum == SIGSEGV) + segv_oact (signum); + else if (signum == SIGBUS) + bus_oact (signum); +#endif /* FAULT_HANDLER_CALL_PREVIOUS_HANDLER */ +#ifdef FAULT_HANDLER_REMOVE_HANDLER + vdb_remove_signal_handler (); +#endif /* FAULT_HANDLER_REMOVE_HANDLER */ + } +} + +void +vdb_remove_signal_handler (void) +{ +#ifdef USE_SIGACTION + sigaction(SIGSEGV, &segv_oact, 0); + sigaction(SIGBUS, &bus_oact, 0); +#endif /* USE_SIGACTION */ +#ifdef USE_SIGNAL + signal (SIGSEGV, segv_oact); + signal (SIGBUS, bus_oact); +#endif +} + +void +vdb_install_signal_handler (void) +{ + /* See init_signals_very_early () in signal.c. */ + if (noninteractive && !initialized) + { + allow_incremental_gc = 0; + return; + } + +#ifdef USE_SIGACTION + memset(&act, sizeof(struct sigaction), 0); + act.sa_sigaction = vdb_fault_handler; + sigemptyset (&act.sa_mask); + act.sa_flags = SA_SIGINFO; + sigaction (SIGSEGV, &act, &segv_oact); + sigaction (SIGBUS, &act, &bus_oact); + allow_incremental_gc = 1; +#endif /* USE_SIGACTION */ +#ifdef USE_SIGNAL + segv_oact = signal (SIGSEGV, (void (*)(int)) vdb_fault_handler); + bus_oact = signal (SIGBUS, (void (*)(int)) vdb_fault_handler); +#endif /* USE_SIGNAL */ +} + +void +vdb_protect (void *ptr, EMACS_INT len) +{ + if (mprotect (ptr, len, PROT_READ)) + { + perror ("Couldn't mprotect"); + ABORT (); + } +} + +void +vdb_unprotect (void *ptr, EMACS_INT len) +{ + if (mprotect (ptr, len, PROT_READ | PROT_WRITE)) + { + perror ("Couldn't mprotect"); + ABORT (); + } +} diff -urN 21.5.23/src/vdb-win32.c 21.5.24/src/vdb-win32.c --- 21.5.23/src/vdb-win32.c Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/vdb-win32.c Fri Nov 25 10:42:07 2005 @@ -0,0 +1,100 @@ +/* Virtual diry bit implementation for XEmacs. + Copyright (C) 2005 Marcus Crestani. + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF. */ + +#include +#include "lisp.h" +#include "gc.h" +#include "mc-alloc.h" +#include "vdb.h" + +#include "syswindows.h" + + +DWORD WINAPI +win32_fault_handler (LPEXCEPTION_POINTERS e) +{ +#define GET_FAULT_ADDRESS (void *) e->ExceptionRecord->ExceptionInformation[1] + if ((e->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION) + && (e->ExceptionRecord->ExceptionInformation[0] == 1) + && write_barrier_enabled + && (fault_on_protected_page (GET_FAULT_ADDRESS))) + { + vdb_designate_modified (GET_FAULT_ADDRESS); + unprotect_page_and_mark_dirty (GET_FAULT_ADDRESS); + return EXCEPTION_CONTINUE_EXECUTION; + } + else + return EXCEPTION_CONTINUE_SEARCH; +} + +typedef DWORD (WINAPI *gcPVECTORED_EXCEPTION_HANDLER) (LPEXCEPTION_POINTERS e); + + +void +vdb_install_signal_handler (void) +{ + HMODULE hm; + PVOID (WINAPI *aveh) (ULONG, gcPVECTORED_EXCEPTION_HANDLER); + + /* See init_signals_very_early () in signal.c. */ + if (noninteractive && !initialized) + { + allow_incremental_gc = 0; + return; + } + + hm = qxeGetModuleHandle (XETEXT ("kernel32")); + if (hm) + aveh = (PVOID (WINAPI *) (ULONG, gcPVECTORED_EXCEPTION_HANDLER)) + GetProcAddress (hm, "AddVectoredExceptionHandler"); + else + { + fprintf (stderr, "\nFAILED TO LOAD LIBRARY\n"); + aveh = NULL; + } + if (aveh) + { + allow_incremental_gc = 1; + aveh (TRUE, win32_fault_handler); + } + else + { + fprintf (stderr, "\nFAILED TO INSTALL SIGNAL HANDLER\n"); + ABORT (); + } +} + + +void +vdb_protect (void *ptr, EMACS_INT len) +{ + DWORD old; + VirtualProtect (ptr, len, PAGE_READONLY, &old); +} + + +void +vdb_unprotect (void *ptr, EMACS_INT len) +{ + DWORD old; + VirtualProtect (ptr, len, PAGE_READWRITE, &old); +} diff -urN 21.5.23/src/vdb.c 21.5.24/src/vdb.c --- 21.5.23/src/vdb.c Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/vdb.c Fri Nov 25 10:42:08 2005 @@ -0,0 +1,157 @@ +/* Virtual diry bit implementation (platform independent) for XEmacs. + Copyright (C) 2005 Marcus Crestani. + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF. */ + +#include +#include "lisp.h" +#include "gc.h" +#include "mc-alloc.h" +#include "vdb.h" + + +typedef struct +{ + Dynarr_declare (void *); +} void_ptr_dynarr; + +void_ptr_dynarr *page_fault_table; + +/* Init page fault table and protect heap. */ +void +vdb_start_dirty_bits_recording (void) +{ + page_fault_table = Dynarr_new2 (void_ptr_dynarr, void *); + protect_heap_pages (); +} + +/* Remove heap protection. */ +void +vdb_stop_dirty_bits_recording (void) +{ + unprotect_heap_pages (); +} + +/* Read page fault table and pass page faults to garbage collector. */ +int +vdb_read_dirty_bits (void) +{ + int repushed_objects = 0; + Elemcount count; + for (count = Dynarr_length (page_fault_table); count; count--) + repushed_objects += + repush_all_objects_on_page (Dynarr_at (page_fault_table, count - 1)); + Dynarr_free (page_fault_table); + page_fault_table = 0; + return repushed_objects; +} + +/* Called by the page fault handler: add address to page fault table. */ +void +vdb_designate_modified (void *addr) +{ + Dynarr_add (page_fault_table, addr); +} + + +/* For testing and debugging... */ + +DEFUN ("test-vdb", Ftest_vdb, 0, 0, "", /* +Test virtual dirty bit implementation. Prints results to stderr. +*/ + ()) +{ + Rawbyte *p; + char c; + Elemcount count; + + /* Wrap up gc (if currently running). */ + gc_full (); + + /* Allocate a buffer; it will have the default + protection of PROT_READ|PROT_WRITE. */ + p = (Rawbyte *) mc_alloc (mc_get_page_size()); + set_lheader_implementation ((struct lrecord_header *) p, &lrecord_cons); + fprintf (stderr, "Allocate p: [%x ... %x], length %d\n", + (int) p, (int) (p + mc_get_page_size ()), + (int) mc_get_page_size ()); + + /* Test read. */ + fprintf (stderr, "Attempt to read p[666]... "); + c = p[666]; + fprintf (stderr, "read ok.\n"); + + /* Test write. */ + fprintf (stderr, "Attempt to write 42 to p[666]... "); + p[666] = 42; + fprintf (stderr, "write ok, p[666] = %d\n", p[666]); + + /* Mark the buffer read-only and set environemnt for write-barrier. */ + fprintf (stderr, "Write-protect the page.\n"); + MARK_BLACK (p); + vdb_start_dirty_bits_recording (); + write_barrier_enabled = 1; + + /* Test write-barrier read. */ + fprintf (stderr, "Attempt to read p[666]... "); + c = p[666]; + fprintf (stderr, "read ok.\n"); + + /* Test write-barrier write, program receives SIGSEGV. */ + fprintf (stderr, "Attempt to write 23 to p[666]... "); + p[666] = 23; + fprintf (stderr, "Written p[666] = %d\n", p[666]); + + /* Stop write-barrier mode. */ + write_barrier_enabled = 0; + MARK_WHITE (p); + vdb_unprotect (p, mc_get_page_size ()); + for (count = Dynarr_length (page_fault_table); count; count--) + if (Dynarr_at (page_fault_table, count - 1) == &p[666]) + fprintf (stderr, "VALID page fault at %x\n", + (int) Dynarr_at (page_fault_table, count - 1)); + else + fprintf (stderr, "WRONG page fault at %x\n", + (int) Dynarr_at (page_fault_table, count - 1)); + Dynarr_free (page_fault_table); + mc_free (p); + return Qnil; +} + +DEFUN ("test-segfault", Ftest_segfault, 0, 0, "", /* +Test virtual dirty bit implementation: provoke a segfault on purpose. +WARNING: this function causes a SEGFAULT on purpose and thus crashes +XEmacs! This is only used for debbugging, e.g. for testing how the +debugger behaves when XEmacs segfaults and the write barrier is +enabled. +*/ + ()) +{ + Rawbyte *q = 0; + q[0] = 23; + return Qnil; +} + +void +syms_of_vdb (void) +{ + DEFSUBR (Ftest_vdb); + DEFSUBR (Ftest_segfault); +} diff -urN 21.5.23/src/vdb.h 21.5.24/src/vdb.h --- 21.5.23/src/vdb.h Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/vdb.h Fri Nov 25 10:42:08 2005 @@ -0,0 +1,70 @@ +/* Virtual diry bit implementation for XEmacs. + Copyright (C) 2005 Marcus Crestani. + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF. */ + +#include "lisp.h" + +#ifndef INCLUDED_vdb_h_ +#define INCLUDED_vdb_h_ + + +/*--- prototypes -------------------------------------------------------*/ + +BEGIN_C_DECLS + +/* Platform dependent signal handling: */ + +/* Install the platform-dependent signal handler. */ +void vdb_install_signal_handler (void); + +/* Platform dependent memory protection. */ +void vdb_protect (void *ptr, EMACS_INT len); +void vdb_unprotect (void *ptr, EMACS_INT len); + + + +/* Common (platform independent) virtual diry bit stuff: */ + +/* Start the write barrier. This function is called when a garbage + collection is suspendend and the client is resumed. */ +void vdb_start_dirty_bits_recording (void); +/* Stop the write barrier. This function is called when the client is + suspendend and garbage collection is resumed. */ +void vdb_stop_dirty_bits_recording (void); + +/* Record page faults: Add the object pointed to by addr to the write + barrer's internal data structure that stores modified objects. + This function is called by the write barrier's fault handler. */ +void vdb_designate_modified (void *addr); + +/* Propagate page faults to garbage collector: Read out the write + barrier's internal data structure that stores modified objects and + pass the information to the garbage collector. This function is + called by vdb_stop_dirty_bits_recording(). Return how many objects + have to be re-examined by the garbage collector. */ +int vdb_read_dirty_bits (void); + +/* Provides Lisp functions for testing vdb implementation. */ +void syms_of_vdb (void); + +END_C_DECLS + +#endif /* INCLUDED_vdb_h_ */ diff -urN 21.5.23/src/window.c 21.5.24/src/window.c --- 21.5.23/src/window.c Tue Oct 25 20:16:30 2005 +++ 21.5.24/src/window.c Fri Nov 25 10:42:08 2005 @@ -181,40 +181,80 @@ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("face-cachel", face_cachel, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + face_cachel_description_1, + Lisp_Face_Cachel); +#endif /* NEW_GC */ + static const struct sized_memory_description face_cachel_description = { sizeof (face_cachel), face_cachel_description_1 }; static const struct memory_description face_cachel_dynarr_description_1[] = { +#ifdef NEW_GC + XD_LISP_DYNARR_DESC (face_cachel_dynarr, &face_cachel_description), +#else /* not NEW_GC */ XD_DYNARR_DESC (face_cachel_dynarr, &face_cachel_description), +#endif /* not NEW_GC */ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("face-cachel-dynarr", face_cachel_dynarr, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + face_cachel_dynarr_description_1, + face_cachel_dynarr); +#else /* not NEW_GC */ static const struct sized_memory_description face_cachel_dynarr_description = { sizeof (face_cachel_dynarr), face_cachel_dynarr_description_1 }; +#endif /* not NEW_GC */ static const struct memory_description glyph_cachel_description_1[] = { { XD_LISP_OBJECT, offsetof (glyph_cachel, glyph) }, { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("glyph-cachel", glyph_cachel, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + glyph_cachel_description_1, + Lisp_Glyph_Cachel); +#endif /* NEW_GC */ + static const struct sized_memory_description glyph_cachel_description = { sizeof (glyph_cachel), glyph_cachel_description_1 }; static const struct memory_description glyph_cachel_dynarr_description_1[] = { +#ifdef NEW_GC + XD_LISP_DYNARR_DESC (glyph_cachel_dynarr, &glyph_cachel_description), +#else /* not NEW_GC */ XD_DYNARR_DESC (glyph_cachel_dynarr, &glyph_cachel_description), +#endif /* not NEW_GC */ { XD_END } }; +#ifdef NEW_GC +DEFINE_LRECORD_IMPLEMENTATION ("glyph-cachel-dynarr", glyph_cachel_dynarr, + 1, /*dumpable-flag*/ + 0, 0, 0, 0, 0, + glyph_cachel_dynarr_description_1, + glyph_cachel_dynarr); +#else /* not NEW_GC */ static const struct sized_memory_description glyph_cachel_dynarr_description = { sizeof (glyph_cachel_dynarr), glyph_cachel_dynarr_description_1 }; +#endif /* not NEW_GC */ static const struct memory_description line_start_cache_description_1[] = { { XD_END } @@ -241,10 +281,15 @@ { XD_LISP_OBJECT_ARRAY, offsetof (struct window, slot), size }, #include "winslots.h" +#ifdef NEW_GC + { XD_LISP_OBJECT, offsetof (struct window, face_cachels) }, + { XD_LISP_OBJECT, offsetof (struct window, glyph_cachels) }, +#else /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (struct window, face_cachels), 1, { &face_cachel_dynarr_description } }, { XD_BLOCK_PTR, offsetof (struct window, glyph_cachels), 1, { &glyph_cachel_dynarr_description } }, +#endif /* not NEW_GC */ { XD_BLOCK_PTR, offsetof (struct window, line_start_cache), 1, { &line_start_cache_dynarr_description }, XD_FLAG_NO_KKCC }, { XD_END } @@ -362,8 +407,17 @@ INIT_DISP_VARIABLE (last_point, Fmake_marker ()); INIT_DISP_VARIABLE (last_start, Fmake_marker ()); INIT_DISP_VARIABLE (last_facechange, Qzero); +#ifdef NEW_GC + p->face_cachels = Dynarr_lisp_new (face_cachel, + &lrecord_face_cachel_dynarr, + &lrecord_face_cachel); + p->glyph_cachels = Dynarr_lisp_new (glyph_cachel, + &lrecord_glyph_cachel_dynarr, + &lrecord_glyph_cachel); +#else /* not NEW_GC */ p->face_cachels = Dynarr_new (face_cachel); p->glyph_cachels = Dynarr_new (glyph_cachel); +#endif /* not NEW_GC */ p->line_start_cache = Dynarr_new (line_start_cache); p->subwindow_instance_cache = make_image_instance_cache_hash_table (); @@ -3810,8 +3864,17 @@ /* Don't copy the pointers to the line start cache or the face instances. */ p->line_start_cache = Dynarr_new (line_start_cache); +#ifdef NEW_GC + p->face_cachels = Dynarr_lisp_new (face_cachel, + &lrecord_face_cachel_dynarr, + &lrecord_face_cachel); + p->glyph_cachels = Dynarr_lisp_new (glyph_cachel, + &lrecord_glyph_cachel_dynarr, + &lrecord_glyph_cachel); +#else /* not NEW_GC */ p->face_cachels = Dynarr_new (face_cachel); p->glyph_cachels = Dynarr_new (glyph_cachel); +#endif /* not NEW_GC */ p->subwindow_instance_cache = make_image_instance_cache_hash_table (); @@ -4314,7 +4377,14 @@ if (NILP (parent)) { if (widthflag) - invalid_operation ("No other window to side of this one", Qunbound); + { + int new_pixsize; + sizep = &CURSIZE (w); + dim = CURCHARSIZE (w); + new_pixsize = inpixels?(*sizep + delta):(dim+delta); + set_window_pixsize (window, new_pixsize, 0, 0); + return; + } break; } if (widthflag @@ -5377,6 +5447,12 @@ { INIT_LRECORD_IMPLEMENTATION (window); INIT_LRECORD_IMPLEMENTATION (window_mirror); +#ifdef NEW_GC + INIT_LRECORD_IMPLEMENTATION (face_cachel); + INIT_LRECORD_IMPLEMENTATION (face_cachel_dynarr); + INIT_LRECORD_IMPLEMENTATION (glyph_cachel); + INIT_LRECORD_IMPLEMENTATION (glyph_cachel_dynarr); +#endif /* NEW_GC */ DEFSYMBOL (Qwindowp); DEFSYMBOL (Qwindow_live_p); diff -urN 21.5.23/src/xemacs.def.in.in 21.5.24/src/xemacs.def.in.in --- 21.5.23/src/xemacs.def.in.in Tue Oct 25 17:32:50 2005 +++ 21.5.24/src/xemacs.def.in.in Wed Nov 30 20:28:58 2005 @@ -83,6 +83,22 @@ #ifdef DEBUG_XEMACS eq_with_ebola_notice /* EQ_WITH_EBOLA_NOTICE */ #endif +#ifdef ERROR_CHECK_TYPES +error_check_cons +#ifdef HAVE_LDAP +error_check_ldap +#endif +error_check_opaque_ptr +#ifdef HAVE_POSTGRESQL +error_check_pgconn +error_check_pgresult +#endif +error_check_string +#ifdef NEW_GC +error_check_string_direct_data +error_check_string_indirect_data +#endif +#endif free_opaque_ptr get_coding_system_for_text_file intern @@ -144,6 +160,9 @@ vector2 vector3 warn_when_safe +#ifdef ERROR_CHECK_TYPES +wrap_record_1 +#endif write_c_string write_fmt_string write_fmt_string_lisp @@ -187,6 +206,9 @@ Fsignal Fthrow Fvector +#ifdef ERROR_CHECK_TYPES +XINT_1 +#endif /* Exported variables */ __temp_alloca_size__ /* ALLOCA */ @@ -207,6 +229,7 @@ lrecord_string /* STRINGP */ lrecord_symbol /* SYMBOLP */ lrecord_type_count /* INIT_EXTERNAL_LRECORD_IMPLEMENTATION */ +lrecord_uid_counter need_to_check_c_alloca /* ALLOCA */ print_readably quit_check_signal_happened /* QUITP */ diff -urN 21.5.23/src/xft-fonts.c 21.5.24/src/xft-fonts.c --- 21.5.23/src/xft-fonts.c Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/xft-fonts.c Sun Nov 27 03:25:03 2005 @@ -0,0 +1,823 @@ +/* Lisp font handling implementation for X with Xft. + +Copyright (C) 2003 Eric Knauel and Matthias Neubauer +Copyright (C) 2005 Eric Knauel +Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +Authors: Eric Knauel + Matthias Neubauer + Stephen J. Turnbull +Created: 27 Oct 2003 +Updated: 05 Mar 2005 by Stephen J. Turnbull + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in GNU Emacs. */ + +/* This module provides the Lisp interface to fonts in X11, including Xft, + but (at least at first) not GTK+ or Qt. + + It should be renamed to fonts-x.h. + + Sealevel code should be in ../lwlib/lwlib-fonts.c or + ../lwlib/lwlib-colors.c. +*/ + +#include +#include "lisp.h" +#include "device.h" +#include "device-impl.h" +#include "console-x-impl.h" +#include "objects-x.h" +#include "objects-x-impl.h" +#include "hash.h" +#include "xft-fonts.h" + +/* #### TO DO #### + . The "x-xft-*" and "x_xft_*" nomenclature is mostly redundant, especially + if we separate X fonts from Xft fonts, and use fontconfig more generally. + . We should support the most recent Xft first, old Xft libraries later. + . We may (think about it) wish to use fontconfig generally, even if we're + not using Xft. Either way, names that are really from fontconfig should + use the Fc* namespace. + . Mule-ize this file. + . Separate X Font Struct ops from Xft Font ops; give precedence to Xft but + allow fallback to X. + . Push decisions about font choice, defaults, fallbacks to Lisp; if we + really need efficiency, can reimplement in C later. + . Implement symbols interned in this file in the Q* namespace. + . Implement FcMatrix (Lisp vector). + . Implement FcCharSets (Lisp chartable? For implementation hints, see + FcCharSetFirstPage and FcCharSetNextPage). + . Implement FcConfigs. + DONE + . Fontconfig fontnames are encoded in UTF-8. +*/ + +Lisp_Object Qxft_font; +Lisp_Object Qfc_patternp; +Lisp_Object Qfc_fontsetp; +/* Lisp_Object Qfc_result_match; */ /* FcResultMatch */ +Lisp_Object Qfc_result_type_mismatch; /* FcResultTypeMismatch */ +Lisp_Object Qfc_result_no_match; /* FcResultNoMatch */ +Lisp_Object Qfc_result_no_id; /* FcResultNoId */ +Lisp_Object Qfc_internal_error; +Lisp_Object Vxlfd_font_name_regexp; /* #### Really needed? */ +Lisp_Object Vxft_version; +/* Lisp_Object Vfc_version; */ /* #### Should have this, too! */ +Fixnum debug_xft; /* Set to 1 enables lots of obnoxious messages. + Setting it to 2 or 3 enables even more. */ + +/**************************************************************** +* FcPattern objects * +****************************************************************/ + +static void +finalize_fc_pattern (void *header, int UNUSED (for_disksave)) +{ + struct fc_pattern *p = (struct fc_pattern *) header; + if (p->fcpatPtr) + { + FcPatternDestroy (p->fcpatPtr); + p->fcpatPtr = 0; + } +} + +static const struct memory_description fcpattern_description [] = { + /* #### nothing here, is this right?? */ + { XD_END } +}; + +DEFINE_LRECORD_IMPLEMENTATION("fc-pattern", fc_pattern, + 0, 0, 0, finalize_fc_pattern, 0, 0, + fcpattern_description, + struct fc_pattern); + +/* + * Helper Functions + */ +static Lisp_Object make_xlfd_font_regexp (void); +static void string_list_to_fcobjectset (Lisp_Object list, FcObjectSet *os); + +/* + extract the C representation of the Lisp string STR and convert it + to the encoding used by the Fontconfig API for property and font + names. I suppose that Qnative is the right encoding, the manual + doesn't say much about this topic. This functions assumes that STR + is a Lisp string. +*/ +#define extract_fcapi_string(str) \ + ((FcChar8 *) NEW_LISP_STRING_TO_EXTERNAL ((str), Qnative)) + +/* fontconfig assumes that objects (property names) are statically allocated, + and you will get bizarre results if you pass Lisp string data or strings + allocated on the stack as objects. fontconfig _does_ copy values, so we + (I hope) don't have to worry about that member. + + Probably these functions don't get called so often that the memory leak + due to strdup'ing every time we add a property would matter, but XEmacs + _is_ a long-running process. So we hash them. + + I suspect that using symbol names or even keywords does not provide + assurance that the string won't move in memory. So we hash them + ourselves; hash.c hashtables do not interpret the value pointers. */ +static FcChar8 *fc_standard_properties[] = { + "antialias", "aspect", "autohint", "charset", "dpi", "family", "file", + "foundry", "ftface", "globaladvance", "hinting", "index", "lang", + "minspace", "outline", "pixelsize", "rasterizer", "rgba", "scalable", + "scale", "size", "slant", "spacing", "style", "verticallayout", "weight", + /* obsolete after Xft v. 1 */ + "charwidth", "charheight", "core", "encoding", "render" +}; + +static struct hash_table *fc_property_name_hash_table; + +/* #### Maybe fc_intern should be exposed to LISP? The idea is that + fc-pattern-add could warn or error if the property isn't interned. */ + +static FcChar8 * +fc_intern (Lisp_Object property) +{ + const void *dummy; + FcChar8 *prop = extract_fcapi_string (property); + const void *val = gethash (prop, fc_property_name_hash_table, &dummy); + + /* extract_fcapi_string returns something alloca'd + so we can just drop the old value of prop on the floor */ + if (val) + prop = (FcChar8 *) val; + else + { + prop = FcStrCopy (prop); + puthash (prop, NULL, fc_property_name_hash_table); + } + return prop; +} + +DEFUN("fc-pattern-p", Ffc_pattern_p, 1, 1, 0, /* +Returns t if OBJECT is of type fc-pattern, nil otherwise. +*/ + (object)) +{ + return FCPATTERNP(object) ? Qt : Qnil; +} + +DEFUN("fc-pattern-create", Ffc_pattern_create, 0, 0, 0, /* +Return a new, empty fc-pattern object. +*/ + ()) +{ + fc_pattern *fcpat = + ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); + + fcpat->fcpatPtr = FcPatternCreate(); + return wrap_fcpattern(fcpat); +} + +DEFUN("fc-name-parse", Ffc_name_parse, 1, 1, 0, /* +Parse an Fc font name and return its representation as a fc pattern object. +*/ + (name)) +{ + struct fc_pattern *fcpat = + ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); + + CHECK_STRING(name); /* #### MEMORY LEAK!! maybe not ... */ + + fcpat->fcpatPtr = FcNameParse (extract_fcapi_string (name)); + return wrap_fcpattern(fcpat); +} + +/* #### Ga-a-ack! Xft's similar function is actually a different API. + We provide both. */ +DEFUN("fc-name-unparse", Ffc_name_unparse, 1, 1, 0, /* +Unparse an fc pattern object to a string. +*/ + (pattern)) +{ + CHECK_FCPATTERN(pattern); + { + FcChar8 *temp = FcNameUnparse(XFCPATTERN_PTR(pattern)); + Lisp_Object res = build_ext_string (temp, Qxft_font_name_encoding); + free (temp); + return res; + } +} + +#if 0 +/* #### This seems to not work? */ +DEFUN("xft-name-unparse", Fxft_name_unparse, 1, 1, 0, /* +Unparse an fc pattern object to a string (using the Xft API). +*/ + (pattern)) +{ + char temp[FCSTRLEN]; + Bool res; + + CHECK_FCPATTERN(pattern); + res = XftNameUnparse(XFCPATTERN_PTR(pattern), temp, FCSTRLEN-1); + return res ? build_ext_string (temp, Qxft_font_name_encoding) : Qnil; +} +#endif + +DEFUN("fc-pattern-duplicate", Ffc_pattern_duplicate, 1, 1, 0, /* +Make a copy of the fc pattern object PATTERN and return it. +*/ + (pattern)) +{ + struct fc_pattern *copy = NULL; + CHECK_FCPATTERN(pattern); + + copy = ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); + copy->fcpatPtr = FcPatternDuplicate(XFCPATTERN_PTR(pattern)); + return wrap_fcpattern(copy); +} + +DEFUN("fc-pattern-add", Ffc_pattern_add, 3, 3, 0, /* +Add attributes to the pattern object PATTERN. PROPERTY is a string naming +the attribute to add, VALUE the value for this attribute. + +VALUE may be a string, integer, float, or symbol, in which case the value +will be added as an FcChar8[], int, double, or FcBool respectively. +*/ + (pattern, property, value)) +{ + Bool res = 0; + Extbyte *obj; + FcPattern *fcpat; + + CHECK_FCPATTERN(pattern); + CHECK_STRING(property); + + obj = fc_intern (property); + fcpat = XFCPATTERN_PTR (pattern); + + if (STRINGP(value)) + { + FcChar8 *str = (FcChar8 *) extract_fcapi_string (value); + res = FcPatternAddString (fcpat, obj, str); + } + else if (INTP(value)) + { + res = FcPatternAddInteger (fcpat, obj, XINT(value)); + } + else if (FLOATP(value)) + { + res = FcPatternAddDouble (fcpat, obj, (double) XFLOAT_DATA(value)); + } + else if (SYMBOLP(value)) + { + res = FcPatternAddBool (fcpat, obj, !NILP(value)); + } + /* else ... maybe we should wta here? */ + + return res ? Qt : Qnil; +} + +DEFUN("fc-pattern-del", Ffc_pattern_del, 2, 2, 0, /* +Remove attribute PROPERTY from fc pattern object OBJECT. +*/ + (pattern, property)) +{ + Bool res; + + CHECK_FCPATTERN(pattern); + CHECK_STRING(property); + + res = FcPatternDel(XFCPATTERN_PTR(pattern), + extract_fcapi_string (property)); + return res ? Qt : Qnil; +} + +/* Generic interface to FcPatternGet() + * Don't support the losing symbol-for-property interface. + */ +DEFUN("fc-pattern-get", Ffc_pattern_get, 2, 4, 0, /* +From PATTERN, extract PROPERTY for the ID'th member, of type TYPE. + +PATTERN is an Xft (fontconfig) pattern object. +PROPERTY is a string naming an fontconfig font property. +Optional ID is a nonnegative integer indexing the list of values for PROPERTY + stored in PATTERN, defaulting to 0 (the first value). +Optional TYPE is a symbol, one of 'string, 'boolean, 'integer, 'float, + 'double, 'matrix, 'charset, or 'void, corresponding to the FcValue types. + ('float is an alias for 'double). + +The Lisp types returned will conform to TYPE: + string string + boolean `t' or `nil' + integer integer + double (float) float + matrix not implemented + charset not implemented + void not implemented + +Symbols with names of the form "fc-result-DESCRIPTION" are returned when +the desired value is not available. These are + + fc-result-type-mismatch the value found has an unexpected type + fc-result-no-match there is no such attribute + fc-result-no-id there is no value for the requested ID + +The types of the following standard properties are predefined by fontconfig. +The symbol 'fc-result-type-mismatch will be returned if the object exists but +TYPE does not match the predefined type. It is best not to specify a type +for predefined properties, as a mistake here ensures error returns on the +correct type. + +Each standard property has a convenience accessor defined in fontconfig.el, +named in the form "fc-pattern-get-PROPERTY". The convenience functions are +preferred to `fc-pattern-get' since a typo in the string naming a property +will result in a silent null return, while a typo in a function name will +usually result in a compiler or runtime \"not fboundp\" error. You may use +`defsubst' to define convenience functions for non-standard properties. + +family String Font family name +style String Font style. Overrides weight and slant +slant Int Italic, oblique or roman +weight Int Light, medium, demibold, bold or black +size Double Point size +aspect Double Stretches glyphs horizontally before hinting +pixelsize Double Pixel size +spacing Int Proportional, monospace or charcell +foundry String Font foundry name +antialias Bool Whether glyphs can be antialiased +hinting Bool Whether the rasterizer should use hinting +verticallayout Bool Use vertical layout +autohint Bool Use autohinter instead of normal hinter +globaladvance Bool Use font global advance data +file String The filename holding the font +index Int The index of the font within the file +ftface FT_Face Use the specified FreeType face object +rasterizer String Which rasterizer is in use +outline Bool Whether the glyphs are outlines +scalable Bool Whether glyphs can be scaled +scale Double Scale factor for point->pixel conversions +dpi Double Target dots per inch +rgba Int unknown, rgb, bgr, vrgb, vbgr, none - subpixel geometry +minspace Bool Eliminate leading from line spacing +charset CharSet Unicode chars encoded by the font +lang String List of RFC-3066-style languages this font supports + +The FT_Face, Matrix, CharSet types are unimplemented, so the corresponding +properties are not accessible from Lisp at this time. If the value of a +property returned has type FT_Face, FcCharSet, or FcMatrix, +`fc-result-type-mismatch' is returned. + +The following properties which were standard in Xft v.1 are obsolete in +Xft v.2: encoding, charwidth, charheight, core, and render. */ + (pattern, property, id, type)) +{ + FcChar8 *fc_property; /* UExtbyte * */ + FcResult fc_result; + FcValue fc_value; + + /* + process arguments + */ + CHECK_FCPATTERN (pattern); + +#if 0 + /* Don't support the losing symbol-for-property interface. */ + property = SYMBOLP (property) ? symbol_name (XSYMBOL (property)) : property; +#endif + if (STRINGP (property)) + { + fc_property = (FcChar8 *) extract_fcapi_string (property); + } + else + { + /* if we allow symbols, this would need to be + list3 (Qlambda, list1 (Qobject), + list3 (Qor, list2 (Qstringp, Qobject), + list2 (Qsymbolp, Qobject))) + or something like that? */ + dead_wrong_type_argument (Qstringp, property); + } + + if (!NILP (id)) CHECK_NATNUM (id); + if (!NILP (type)) CHECK_SYMBOL (type); + + /* get property */ + fc_result = FcPatternGet (XFCPATTERN_PTR (pattern), + fc_property, + NILP (id) ? 0 : XINT(id), + &fc_value); + + switch (fc_result) + { + case FcResultMatch: + /* wrap it and return */ + switch (fc_value.type) + { + case FcTypeInteger: + return ((!NILP (type) && !EQ (type, Qinteger)) + ? Qfc_result_type_mismatch : make_int (fc_value.u.i)); + case FcTypeDouble: + return ((!NILP (type) && !EQ (type, intern ("double")) + && !EQ (type, Qfloat)) + ? Qfc_result_type_mismatch : make_float (fc_value.u.d)); + case FcTypeString: + return ((!NILP (type) && !EQ (type, Qstring)) + ? Qfc_result_type_mismatch + : build_ext_string (fc_value.u.s, Qxft_font_name_encoding)); + case FcTypeBool: + return ((!NILP (type) && !EQ (type, Qboolean)) + ? Qfc_result_type_mismatch : fc_value.u.b ? Qt : Qnil); + case FcTypeMatrix: + return Qfc_result_type_mismatch; + /* #### unimplemented + return ((!NILP (type) && !EQ (type, intern ("matrix"))) + ? Qfc_result_type_mismatch : make_int (fc_value.u.m)); + */ + case FcTypeCharSet: + return Qfc_result_type_mismatch; + /* #### unimplemented + return ((!NILP (type) && !EQ (type, intern ("charset"))) + ? Qfc_result_type_mismatch : make_int (fc_value.u.c)); + */ + } + case FcResultTypeMismatch: + return Qfc_result_type_mismatch; + case FcResultNoMatch: + return Qfc_result_no_match; + case FcResultNoId: + return Qfc_result_no_id; + default: + return Qfc_internal_error; + } +} + +DEFUN("fc-font-match", Ffc_font_match, 2, 2, 0, /* +Return the font on DEVICE that most closely matches PATTERN. + +DEVICE is an X11 device. +PATTERN is a fontconfig pattern object. +Returns a fontconfig pattern object representing the closest match to the +given pattern, or an error code. Possible error codes are +`fc-result-no-match' and `fc-result-no-id'. */ + (device, pattern)) +{ + Display *dpy; + FcResult res; + + struct fc_pattern *res_fcpat = + ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); + CHECK_FCPATTERN(pattern); /* #### MEMORY LEAKS!!! */ + if (NILP(device)) + return Qnil; + CHECK_X_DEVICE(device); + if (!DEVICE_LIVE_P(XDEVICE(device))) + return Qnil; + + dpy = DEVICE_X_DISPLAY(XDEVICE(device)); + /* More Xft vs fontconfig brain damage? */ + res_fcpat->fcpatPtr = XftFontMatch(dpy, DefaultScreen (dpy), + XFCPATTERN_PTR(pattern), &res); + + if (res_fcpat->fcpatPtr == NULL) + switch (res) { + case FcResultNoMatch: + return Qfc_result_no_match; + case FcResultNoId: + return Qfc_result_no_id; + default: + return Qfc_internal_error; + } + else + return wrap_fcpattern(res_fcpat); +} + +/* NOTE NOTE NOTE This function destroys the FcFontSet passed to it. */ +static Lisp_Object +fontset_to_list (FcFontSet *fontset) +{ + int idx; + Lisp_Object fontlist = Qnil; + fc_pattern *fcpat; + + /* #### improve this error message */ + if (!fontset) + Fsignal (Qinvalid_state, + list1 (build_string ("failed to create FcFontSet"))); + for (idx = 0; idx < fontset->nfont; ++idx) + { + fcpat = + ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); + fcpat->fcpatPtr = FcPatternDuplicate (fontset->fonts[idx]); + fontlist = Fcons (wrap_fcpattern(fcpat), fontlist); + } + FcFontSetDestroy (fontset); + return fontlist; +} + +/* #### fix this name to correspond to Ben's new nomenclature */ +DEFUN("fc-list-fonts-pattern-objects", Ffc_list_fonts_pattern_objects, + 3, 3, 0, /* +Return a list of fonts on DEVICE that match PATTERN for PROPERTIES. +Each font is represented by a fontconfig pattern object. + +DEVICE is an X11 device. +PATTERN is a fontconfig pattern to be matched. +PROPERTIES is a list of property names (strings) that should match. + +#### DEVICE is unused, ignored, and may be removed if it's not needed to +match other font-listing APIs. */ + (UNUSED (device), pattern, properties)) +{ + FcObjectSet *os; + FcFontSet *fontset; + + CHECK_FCPATTERN (pattern); + CHECK_LIST (properties); + + os = FcObjectSetCreate (); + string_list_to_fcobjectset (properties, os); + /* #### why don't we need to do the "usual substitutions"? */ + fontset = FcFontList (NULL, XFCPATTERN_PTR (pattern), os); + FcObjectSetDestroy (os); + + return fontset_to_list (fontset); + +} + +/* #### maybe this can/should be folded into fc-list-fonts-pattern-objects? */ +DEFUN("fc-font-sort", Ffc_font_sort, 2, 4, 0, /* +Return a list of all fonts sorted by proximity to PATTERN. +Each font is represented by a fontconfig pattern object. + +DEVICE is an X11 device. +PATTERN is a fontconfig pattern to be matched. +Optional argument TRIM, if non-nil, means to trim trailing fonts that do not +contribute new characters to the union repertoire. + +#### Optional argument NOSUB, if non-nil, suppresses some of the usual +property substitutions. DON'T USE THIS in production code, it is intended +for exploring behavior of fontconfig and will be removed when this code is +stable. + +#### DEVICE is unused, ignored, and may be removed if it's not needed to +match other font-listing APIs. */ + (UNUSED (device), pattern, trim, nosub)) +{ + CHECK_FCPATTERN (pattern); + + { + FcConfig *fcc = FcConfigGetCurrent(); + FcFontSet *fontset; + FcPattern *p = XFCPATTERN_PTR (pattern); + FcResult fcresult; + + if (NILP(nosub)) /* #### temporary debug hack */ + FcDefaultSubstitute (p); + FcConfigSubstitute (fcc, p, FcMatchPattern); + fontset = FcFontSort (fcc, p, !NILP(trim), NULL, &fcresult); + + return fontset_to_list (fontset); + } +} + +/* #### this actually is an Xft function, should split those out + or get rid of them entirely? */ +/* #### be consistent about argument order. */ +DEFUN("fc-font-real-pattern", Ffc_font_real_pattern, 2, 2, 0, /* +Temporarily open FONTNAME (a string) and return the actual +fc pattern matched by the Fc library. */ + (fontname, xdevice)) +{ + FcPattern *copy; + Display *dpy; + XftFont *font; + struct fc_pattern *fcpat = + ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern); + + CHECK_STRING (fontname); /* #### MEMORY LEAK?! maybe not ... */ + if (NILP(xdevice)) + return Qnil; + CHECK_X_DEVICE (xdevice); + if (!DEVICE_LIVE_P(XDEVICE(xdevice))) + return Qnil; + + /* #### these gymnastics should be unnecessary, just use FcFontMatch */ + dpy = DEVICE_X_DISPLAY (XDEVICE (xdevice)); + font = XftFontOpenName (dpy, DefaultScreen(dpy), + extract_fcapi_string (fontname)); + if (font == NULL) + return Qnil; + copy = FcPatternDuplicate(font->pattern); + XftFontClose(dpy, font); + if (copy == NULL) + return Qnil; + fcpat->fcpatPtr = copy; + return wrap_fcpattern(fcpat); +} + +DEFUN("xlfd-font-name-p", Fxlfd_font_name_p, 1, 1, 0, /* +Check whether the string FONTNAME is a XLFD font name. */ + (fontname)) +{ + CHECK_STRING(fontname); + /* #### should bind `case-fold-search' here? */ + return Fstring_match(Vxlfd_font_name_regexp, fontname, Qnil, Qnil); +} + +/* FcPatternPrint: there is no point in having wrappers fc-pattern-print, + Ffc_pattern_print since this function prints to stdout. */ + +/* Initialization of xft-fonts */ + +#define XE_XLFD_SEPARATOR "-" + /* XLFD specifies ISO 8859-1 encoding, but we can't handle non-ASCII + in Mule when this function is called. So use HPC. */ +#if 0 +#define XE_XLFD_PREFIX "\\(\\+[\040-\176\240-\377]*\\)?-" +#define XE_XLFD_OPT_TEXT "\\([\040-\044\046-\176\240-\377]*\\)" +#define XE_XLFD_TEXT "\\([\040-\044\046-\176\240-\377]+\\)" +#else +#define XE_XLFD_PREFIX "\\(\\+[\040-\176]*\\)?-" +#define XE_XLFD_OPT_TEXT "\\([^-]*\\)" +#define XE_XLFD_TEXT "\\([^-]+\\)" +#endif + +#define XE_XLFD_SLANT "\\([0-9ior?*][iot]?\\)" +#define XE_XLFD_SPACING "\\([cmp?*]\\)" + /* Hyphen as minus conflicts with use as separator. */ +#define XE_XLFD_OPT_NEGATE "~?" +#define XE_XLFD_NUMBER "\\([0-9?*]+\\)" +#define XE_XLFD_PSIZE "\\([0-9?*]+\\|\\[[ 0-9+~.e?*]+\\]\\)" + +/* Call this only from the init code + #### This is really horrible, let's get rid of it, please. */ +static Lisp_Object +make_xlfd_font_regexp (void) +{ + struct gcpro gcpro1; + unsigned i; + Lisp_Object reg = Qnil; + const Extbyte *re[] = /* #### This could just be catenated by + cpp and passed to build_ext_string. */ + { + /* Regular expression matching XLFDs as defined by XLFD v. 1.5. + Matches must be case-insensitive. + PSIZE is a pixel or point size, which may be a "matrix". The + syntax of a matrix is not checked, just some lexical properties. + AFAICT none of the TEXT fields except adstyle is optional. + + NB. It should not be a problem if this matches "too much", since + an "old" server will simply not be able to find a matching font. */ + "\\`", + XE_XLFD_PREFIX, /* prefix */ + XE_XLFD_TEXT, /* foundry */ + XE_XLFD_SEPARATOR, + XE_XLFD_TEXT, /* family */ + XE_XLFD_SEPARATOR, + XE_XLFD_TEXT, /* weight */ + XE_XLFD_SEPARATOR, + XE_XLFD_SLANT, /* slant */ + XE_XLFD_SEPARATOR, + XE_XLFD_TEXT, /* swidth */ + XE_XLFD_SEPARATOR, + XE_XLFD_OPT_TEXT, /* adstyle */ + XE_XLFD_SEPARATOR, + XE_XLFD_PSIZE, /* pixelsize */ + XE_XLFD_SEPARATOR, + XE_XLFD_PSIZE, /* pointsize */ + XE_XLFD_SEPARATOR, + XE_XLFD_NUMBER, /* resx */ + XE_XLFD_SEPARATOR, + XE_XLFD_NUMBER, /* resy */ + XE_XLFD_SEPARATOR, + XE_XLFD_SPACING, /* spacing */ + XE_XLFD_SEPARATOR, + XE_XLFD_OPT_NEGATE, /* avgwidth */ + XE_XLFD_NUMBER, + XE_XLFD_SEPARATOR, + XE_XLFD_TEXT, /* registry */ + XE_XLFD_SEPARATOR, + XE_XLFD_TEXT, /* encoding */ + "\\'" + }; + + GCPRO1 (reg); + for (i = 0; i < sizeof(re)/sizeof(Extbyte *); i++) + { + /* #### Currently this is Host Portable Coding, not ISO 8859-1. */ + reg = concat2(reg, build_ext_string (re[i], Qx_font_name_encoding)); + } + + RETURN_UNGCPRO (reg); +} +#undef XE_XLFD_SEPARATOR +#undef XE_XLFD_PREFIX +#undef XE_XLFD_OPT_TEXT +#undef XE_XLFD_TEXT +#undef XE_XLFD_OPT_SLANT +#undef XE_XLFD_OPT_SPACING +#undef XE_XLFD_OPT_NEGATE +#undef XE_XLFD_NUMBER +#undef XE_XLFD_PSIZE + +#define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \ + ? ((unsigned long) (x)) : ((unsigned long) (y))) + +static void +string_list_to_fcobjectset (Lisp_Object list, FcObjectSet *os) +{ + EXTERNAL_LIST_LOOP_2 (elt, list) + { + FcChar8 *s; + + CHECK_STRING (elt); + s = fc_intern (elt); + fprintf (stderr, "%s\n", s); + FcObjectSetAdd (os, s); + } +} + +void +syms_of_xft_fonts (void) +{ + INIT_LRECORD_IMPLEMENTATION(fc_pattern); + + DEFSYMBOL_MULTIWORD_PREDICATE(Qfc_patternp); + + DEFSYMBOL(Qfc_result_type_mismatch); + DEFSYMBOL(Qfc_result_no_match); + DEFSYMBOL(Qfc_result_no_id); + DEFSYMBOL(Qfc_internal_error); + DEFSYMBOL(Qxft_font); + + DEFSUBR(Ffc_pattern_p); + DEFSUBR(Ffc_pattern_create); + DEFSUBR(Ffc_name_parse); + DEFSUBR(Ffc_name_unparse); +#if 0 + DEFSUBR(Fxft_name_unparse); /* URK! */ +#endif + DEFSUBR(Ffc_pattern_duplicate); + DEFSUBR(Ffc_pattern_add); + DEFSUBR(Ffc_pattern_del); + DEFSUBR(Ffc_pattern_get); + DEFSUBR(Ffc_list_fonts_pattern_objects); + DEFSUBR(Ffc_font_sort); + DEFSUBR(Ffc_font_match); + DEFSUBR(Ffc_font_real_pattern); + DEFSUBR(Fxlfd_font_name_p); +} + +void +vars_of_xft_fonts (void) +{ + /* #### I know, but the right fix is use the generic debug facility. */ + DEFVAR_INT ("xft-debug-level", &debug_xft /* +Level of debugging messages to issue to stderr for Xft. +A nonnegative integer. Set to 0 to suppress all warnings. +Default is 1 to ensure a minimum of debugging output at initialization. +Higher levels give even more information. +*/ ); + debug_xft = 1; + + DEFVAR_LISP("xft-version", &Vxft_version /* +The major version number of the Xft library being used. +*/ ); + Vxft_version = make_int(XFT_VERSION); + + Fprovide (intern ("xft")); +} + +void +complex_vars_of_xft_fonts (void) +{ + DEFVAR_LISP("xft-xlfd-font-regexp", &Vxlfd_font_name_regexp /* +The regular expression used to match XLFD font names. */ + ); + Vxlfd_font_name_regexp = make_xlfd_font_regexp(); +} + +void +reinit_vars_of_xft_fonts (void) +{ + int i, size = (int) countof (fc_standard_properties); + + FcInit (); + + fc_property_name_hash_table = make_string_hash_table (size); + for (i = 0; i < size; ++i) + puthash (fc_standard_properties[i], NULL, fc_property_name_hash_table); +} + diff -urN 21.5.23/src/xft-fonts.h 21.5.24/src/xft-fonts.h --- 21.5.23/src/xft-fonts.h Thu Jan 1 09:00:00 1970 +++ 21.5.24/src/xft-fonts.h Sat Nov 26 20:46:11 2005 @@ -0,0 +1,71 @@ +/* Lisp font data structures for X and Xft. + +Copyright (C) 2003 Eric Knauel and Matthias Neubauer +Copyright (C) 2005 Eric Knauel +Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +Authors: Eric Knauel + Matthias Neubauer + Stephen J. Turnbull +Created: 27 Oct 2003 +Updated: 05 Mar 2005 by Stephen J. Turnbull + +This file is part of XEmacs. + +XEmacs 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, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in GNU Emacs. */ + +/* This module provides the Lisp interface to fonts in X11, including Xft, + but (at least at first) not GTK+ or Qt. + + It should be renamed to fonts-x.h. + + Sealevel code should be in ../lwlib/lwlib-fonts.h or + ../lwlib/lwlib-colors.h. +*/ + + +#ifndef INCLUDED_xft_fonts_h_ +#define INCLUDED_xft_fonts_h_ + +#include "../lwlib/lwlib-fonts.h" +#include "../lwlib/lwlib-colors.h" + +extern Fixnum debug_xft; + +/* Standard for fontconfig. Use a macro to show we're not guessing. */ +#define Qxft_font_name_encoding Qutf_8 + +#define XE_XLFD_MAKE_LISP_STRING(s) (make_string(s, strlen(s))) + +struct fc_pattern +{ + struct LCRECORD_HEADER header; + FcPattern *fcpatPtr; +}; + +typedef struct fc_pattern fc_pattern; + +DECLARE_LRECORD(fc_pattern, struct fc_pattern); +#define XFCPATTERN(x) XRECORD (x, fc_pattern, struct fc_pattern) +#define wrap_fcpattern(p) wrap_record (p, fc_pattern) +#define FCPATTERNP(x) RECORDP (x, fc_pattern) +#define CHECK_FCPATTERN(x) CHECK_RECORD (x, fc_pattern) +#define CONCHECK_FCPATTERN(x) CONCHECK_RECORD (x, fc_pattern) +#define XFCPATTERN_PTR(x) (XFCPATTERN(x)->fcpatPtr) + +#endif /* INCLUDED_xft_fonts_h_ */ diff -urN 21.5.23/src/xgccache.c 21.5.24/src/xgccache.c --- 21.5.23/src/xgccache.c Tue Feb 15 12:17:07 2005 +++ 21.5.24/src/xgccache.c Sat Nov 26 20:46:11 2005 @@ -158,6 +158,10 @@ struct gc_cache_cell *cell, *next, *prev; struct gcv_and_mask gcvm; +#ifdef DEBUG_XEMACS + (void) describe_gc_cache (cache, DGCCFLAG_DISABLE); +#endif + if ((!!cache->head) != (!!cache->tail)) ABORT (); if (cache->head && (cache->head->prev || cache->tail->next)) ABORT (); @@ -196,6 +200,9 @@ will be less likely to be collected than a cell that was accessed less recently. */ +#if 0 + debug_out ("Returning cached GC: %08lx\n", XE_GCONTEXT(cell)); +#endif if (cell == cache->tail) return cell->gc; @@ -226,6 +233,7 @@ cache->head = cell->next; cache->head->prev = 0; if (cache->tail == cell) cache->tail = 0; /* only one */ + debug_out ("Cache full, freeing GC: %08lx\n ", XE_GCONTEXT(cell)); XFreeGC (cache->dpy, cell->gc); cache->delete_count++; #ifdef GCCACHE_HASH @@ -264,68 +272,92 @@ /* debug */ assert (cell->gc == gc_cache_lookup (cache, gcv, mask)); +#if 0 + debug_out ("Returning new GC: %08lx\n ", XE_GCONTEXT(cell)); +#endif return cell->gc; } #ifdef DEBUG_XEMACS -void describe_gc_cache (struct gc_cache *cache); +/* FLAGS + The flags argument is a bitwise or of any of the following: + + DGCCFLAG_SUMMARY Summary statistics for cache + DGCCFLAG_LIST_CELLS If summary is being printed, print cell IDs too. + DGCCFLAG_CELL_DETAILS If cell IDs are being printed, additionally + print the internal fields used and values. + + DGCCFLAG_DEFAULT A predefined combination giving whatever the + maintainers are currently interested in seeing. +*/ void -describe_gc_cache (struct gc_cache *cache) +describe_gc_cache (struct gc_cache *cache, int flags) { int count = 0; struct gc_cache_cell *cell = cache->head; + + if (! flags & DGCCFLAG_SUMMARY) return; + stderr_out ("\nsize: %d", cache->size); stderr_out ("\ncreated: %d", cache->create_count); stderr_out ("\ndeleted: %d", cache->delete_count); - while (cell) - { - struct gc_cache_cell *cell2; - int i = 0; - stderr_out ("\n%d:\t0x%lx GC: 0x%08lx hash: 0x%08lx\n", - count, (long) cell, (long) cell->gc, gc_cache_hash (&cell->gcvm)); - for (cell2 = cache->head; cell2; cell2 = cell2->next, i++) - if (count != i && - gc_cache_hash (&cell->gcvm) == gc_cache_hash (&cell2->gcvm)) - stderr_out ("\tHASH COLLISION with cell %d\n", i); - stderr_out ("\tmask: %8lx\n", cell->gcvm.mask); + if (flags & DGCCFLAG_LIST_CELLS) + while (cell) + { + struct gc_cache_cell *cell2; + int i = 0; + stderr_out ("\n%d:\t0x%lx GC: 0x%08lx hash: 0x%08lx\n", + count, (long) cell, (long) XE_GCONTEXT(cell), + gc_cache_hash (&cell->gcvm)); + + for (cell2 = cache->head; cell2; cell2 = cell2->next, i++) + if (count != i && + gc_cache_hash (&cell->gcvm) == gc_cache_hash (&cell2->gcvm)) + stderr_out ("\tHASH COLLISION with cell %d\n", i); + stderr_out ("\tmask: %8lx\n", cell->gcvm.mask); + + if (flags & DGCCFLAG_CELL_DETAILS) + { #define FROB(field) do { \ if ((int)cell->gcvm.gcv.field != (~0)) \ stderr_out ("\t%-12s%8x\n", #field ":", (int)cell->gcvm.gcv.field); \ } while (0) - FROB (function); - FROB (plane_mask); - FROB (foreground); - FROB (background); - FROB (line_width); - FROB (line_style); - FROB (cap_style); - FROB (join_style); - FROB (fill_style); - FROB (fill_rule); - FROB (arc_mode); - FROB (tile); - FROB (stipple); - FROB (ts_x_origin); - FROB (ts_y_origin); - FROB (font); - FROB (subwindow_mode); - FROB (graphics_exposures); - FROB (clip_x_origin); - FROB (clip_y_origin); - FROB (clip_mask); - FROB (dash_offset); + FROB (function); + FROB (plane_mask); + FROB (foreground); + FROB (background); + FROB (line_width); + FROB (line_style); + FROB (cap_style); + FROB (join_style); + FROB (fill_style); + FROB (fill_rule); + FROB (arc_mode); + FROB (tile); + FROB (stipple); + FROB (ts_x_origin); + FROB (ts_y_origin); + FROB (font); + FROB (subwindow_mode); + FROB (graphics_exposures); + FROB (clip_x_origin); + FROB (clip_y_origin); + FROB (clip_mask); + FROB (dash_offset); #undef FROB + } + + count++; + if (cell->next && cell == cache->tail) + stderr_out ("\nERROR! tail is here!\n\n"); + else if (!cell->next && cell != cache->tail) + stderr_out ("\nERROR! tail is not at the end\n\n"); + cell = cell->next; + } /* while (cell) */ - count++; - if (cell->next && cell == cache->tail) - stderr_out ("\nERROR! tail is here!\n\n"); - else if (!cell->next && cell != cache->tail) - stderr_out ("\nERROR! tail is not at the end\n\n"); - cell = cell->next; - } if (count != cache->size) stderr_out ("\nERROR! count should be %d\n\n", cache->size); } diff -urN 21.5.23/src/xgccache.h 21.5.24/src/xgccache.h --- 21.5.23/src/xgccache.h Tue Feb 15 12:17:07 2005 +++ 21.5.24/src/xgccache.h Sat Nov 26 20:46:11 2005 @@ -31,4 +31,18 @@ void free_gc_cache (struct gc_cache *cache); GC gc_cache_lookup (struct gc_cache *, XGCValues *, unsigned long mask); +#define XE_GCONTEXT(cell) (XGContextFromGC(cell->gc)) + +#ifdef DEBUG_XEMACS + +void describe_gc_cache (struct gc_cache *cache, int flags); + +#define DGCCFLAG_DISABLE 0 +#define DGCCFLAG_SUMMARY 1 << 0 +#define DGCCFLAG_LIST_CELLS 1 << 1 +#define DGCCFLAG_CELL_DETAILS 1 << 2 +/* A combination of the flags above. */ +#define DGCCFLAG_DEFAULT DGCCFLAG_SUMMARY | DGCCFLAG_LIST_CELLS +#endif + #endif /* INCLUDED_xgccache_h_ */ diff -urN 21.5.23/tests/CVS/Entries 21.5.24/tests/CVS/Entries --- 21.5.23/tests/CVS/Entries Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/CVS/Entries Mon Dec 19 04:23:51 2005 @@ -1,9 +1,9 @@ -/ChangeLog/1.71/Wed Oct 26 15:15:03 2005//Tr21-5-23 -/auc-tex-test/1.1/Sun Apr 13 03:14:37 1997//Tr21-5-23 -/frame.el/1.1/Sat Mar 8 23:38:15 1997//Tr21-5-23 -/glyph-test.el/1.2/Thu Apr 12 18:24:47 2001//Tr21-5-23 -/gutter-test.el/1.3/Tue Jun 4 06:05:51 2002//Tr21-5-23 -/redisplay-tests.el/1.2/Thu Apr 12 18:24:48 2001//Tr21-5-23 -/reproduce-bugs.el/1.2/Sun Oct 12 01:40:20 1997//Tr21-5-23 -/sigpipe.c/1.1/Thu Jan 23 11:24:08 2003//Tr21-5-23 +/ChangeLog/1.75/Sun Dec 18 19:07:19 2005//Tr21-5-24 +/auc-tex-test/1.1/Sun Apr 13 03:14:37 1997//Tr21-5-24 +/frame.el/1.1/Sat Mar 8 23:38:15 1997//Tr21-5-24 +/glyph-test.el/1.2/Thu Apr 12 18:24:47 2001//Tr21-5-24 +/gutter-test.el/1.3/Tue Jun 4 06:05:51 2002//Tr21-5-24 +/redisplay-tests.el/1.2/Thu Apr 12 18:24:48 2001//Tr21-5-24 +/reproduce-bugs.el/1.2/Sun Oct 12 01:40:20 1997//Tr21-5-24 +/sigpipe.c/1.1/Thu Jan 23 11:24:08 2003//Tr21-5-24 D diff -urN 21.5.23/tests/CVS/Tag 21.5.24/tests/CVS/Tag --- 21.5.23/tests/CVS/Tag Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/CVS/Tag Mon Dec 19 04:23:51 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/tests/ChangeLog 21.5.24/tests/ChangeLog --- 21.5.23/tests/ChangeLog Thu Oct 27 00:15:03 2005 +++ 21.5.24/tests/ChangeLog Mon Dec 19 04:07:19 2005 @@ -1,3 +1,12 @@ +2005-12-18 Stephen J. Turnbull + + * XEmacs 21.5.24 "dandelion" is released. + +2005-12-08 Stephen J. Turnbull + + * automated/syntax-tests.el (backward-up-list): New test. + Thanks to Zacjev Evgeny for report, Aidan Kehoe for reproduction. + 2005-10-26 Stephen J. Turnbull * XEmacs 21.5.23 "daikon" is released. diff -urN 21.5.23/tests/DLL/CVS/Entries 21.5.24/tests/DLL/CVS/Entries --- 21.5.23/tests/DLL/CVS/Entries Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/DLL/CVS/Entries Mon Dec 19 04:23:51 2005 @@ -1,2 +1,2 @@ -/dltest.c/1.2/Thu Apr 12 18:24:49 2001//Tr21-5-23 +/dltest.c/1.2/Thu Apr 12 18:24:49 2001//Tr21-5-24 D diff -urN 21.5.23/tests/DLL/CVS/Tag 21.5.24/tests/DLL/CVS/Tag --- 21.5.23/tests/DLL/CVS/Tag Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/DLL/CVS/Tag Mon Dec 19 04:23:51 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/tests/Dnd/CVS/Entries 21.5.24/tests/Dnd/CVS/Entries --- 21.5.23/tests/Dnd/CVS/Entries Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/Dnd/CVS/Entries Mon Dec 19 04:23:51 2005 @@ -1,4 +1,4 @@ -/README/1.4/Sat Jun 13 04:29:00 1998//Tr21-5-23 -/droptest.el/1.7/Sat Jun 13 04:29:01 1998//Tr21-5-23 -/droptest.sh/1.2/Thu Apr 12 18:24:50 2001//Tr21-5-23 +/README/1.4/Sat Jun 13 04:29:00 1998//Tr21-5-24 +/droptest.el/1.7/Sat Jun 13 04:29:01 1998//Tr21-5-24 +/droptest.sh/1.2/Thu Apr 12 18:24:50 2001//Tr21-5-24 D diff -urN 21.5.23/tests/Dnd/CVS/Tag 21.5.24/tests/Dnd/CVS/Tag --- 21.5.23/tests/Dnd/CVS/Tag Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/Dnd/CVS/Tag Mon Dec 19 04:23:51 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/tests/autoconf/CVS/Entries 21.5.24/tests/autoconf/CVS/Entries --- 21.5.23/tests/autoconf/CVS/Entries Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/autoconf/CVS/Entries Mon Dec 19 04:23:51 2005 @@ -1,2 +1,2 @@ -/regressiontest.pl/1.2/Fri Mar 11 11:20:34 2005//Tr21-5-23 +/regressiontest.pl/1.3/Sat Nov 26 11:46:25 2005//Tr21-5-24 D diff -urN 21.5.23/tests/autoconf/CVS/Tag 21.5.24/tests/autoconf/CVS/Tag --- 21.5.23/tests/autoconf/CVS/Tag Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/autoconf/CVS/Tag Mon Dec 19 04:23:51 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/tests/autoconf/regressiontest.pl 21.5.24/tests/autoconf/regressiontest.pl --- 21.5.23/tests/autoconf/regressiontest.pl Fri Mar 11 20:20:34 2005 +++ 21.5.24/tests/autoconf/regressiontest.pl Sat Nov 26 20:46:25 2005 @@ -83,6 +83,7 @@ "--libdir=/tmp/foo" => undef, "--exec-prefix=/tmp/foo" => undef, "--with-athena=3d" => undef, + "--with-mule --with-xft=emacs --debug --error-checking=all --with-xim=xlib --with-widgets=athena --with-athena=3d --with-dialogs=athena --memory-usage-stats --use-number-lib=gmp --site-prefixes=/opt/local:/sw --with-ldap=no --use-union-type" => "--enable-mule --with-xft=emacs --enable-debug --enable-error-checking=all --with-xim=xlib --enable-widgets=athena --with-athena=3d --enable-dialogs=athena --enable-memory-usage-stats --enable-bignum=gmp --with-site-prefixes=/opt/local:/sw --with-ldap=no --enable-union-type" ); die "Usage: $0 /path/to/configure-2.13 /path/to/configure-2.59\n" if scalar(@ARGV) != 2; diff -urN 21.5.23/tests/automated/CVS/Entries 21.5.24/tests/automated/CVS/Entries --- 21.5.23/tests/automated/CVS/Entries Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/automated/CVS/Entries Mon Dec 19 04:23:52 2005 @@ -1,21 +1,21 @@ -/README/1.2/Thu Apr 12 18:24:52 2001//Tr21-5-23 -/base64-tests.el/1.2/Thu Apr 12 18:24:52 2001//Tr21-5-23 -/byte-compiler-tests.el/1.2/Thu Apr 12 18:24:53 2001//Tr21-5-23 -/c-tests.el/1.2/Thu Apr 12 18:24:53 2001//Tr21-5-23 -/case-tests.el/1.2/Thu Apr 12 18:24:53 2001//Tr21-5-23 -/ccl-tests.el/1.3/Wed Mar 13 08:53:26 2002//Tr21-5-23 -/database-tests.el/1.2/Thu Apr 12 18:24:54 2001//Tr21-5-23 -/extent-tests.el/1.2/Fri Apr 13 09:11:46 2001//Tr21-5-23 -/hash-table-tests.el/1.3/Thu Oct 23 12:48:49 2003//Tr21-5-23 -/lisp-tests.el/1.7/Thu May 13 15:33:18 2004//Tr21-5-23 -/md5-tests.el/1.2/Thu Apr 12 18:24:54 2001//Tr21-5-23 -/mule-tests.el/1.8/Mon Apr 19 06:22:34 2004//Tr21-5-23 -/os-tests.el/1.1/Thu Oct 28 11:31:23 2004//Tr21-5-23 -/regexp-tests.el/1.15/Wed Feb 2 11:37:21 2005//Tr21-5-23 -/region-tests.el/1.1/Thu Feb 24 23:02:37 2005//Tr21-5-23 -/symbol-tests.el/1.4/Tue Apr 15 15:56:58 2003//Tr21-5-23 -/syntax-tests.el/1.5/Mon Nov 11 15:39:07 2002//Tr21-5-23 -/tag-tests.el/1.3/Thu May 13 16:41:27 2004//Tr21-5-23 -/test-harness.el/1.20/Mon May 3 15:08:51 2004//Tr21-5-23 -/weak-tests.el/1.4/Sat Nov 1 14:55:00 2003//Tr21-5-23 +/README/1.2/Thu Apr 12 18:24:52 2001//Tr21-5-24 +/base64-tests.el/1.2/Thu Apr 12 18:24:52 2001//Tr21-5-24 +/byte-compiler-tests.el/1.2/Thu Apr 12 18:24:53 2001//Tr21-5-24 +/c-tests.el/1.2/Thu Apr 12 18:24:53 2001//Tr21-5-24 +/case-tests.el/1.2/Thu Apr 12 18:24:53 2001//Tr21-5-24 +/ccl-tests.el/1.3/Wed Mar 13 08:53:26 2002//Tr21-5-24 +/database-tests.el/1.2/Thu Apr 12 18:24:54 2001//Tr21-5-24 +/extent-tests.el/1.2/Fri Apr 13 09:11:46 2001//Tr21-5-24 +/hash-table-tests.el/1.3/Thu Oct 23 12:48:49 2003//Tr21-5-24 +/lisp-tests.el/1.7/Thu May 13 15:33:18 2004//Tr21-5-24 +/md5-tests.el/1.2/Thu Apr 12 18:24:54 2001//Tr21-5-24 +/mule-tests.el/1.8/Mon Apr 19 06:22:34 2004//Tr21-5-24 +/os-tests.el/1.1/Thu Oct 28 11:31:23 2004//Tr21-5-24 +/regexp-tests.el/1.15/Wed Feb 2 11:37:21 2005//Tr21-5-24 +/region-tests.el/1.1/Thu Feb 24 23:02:37 2005//Tr21-5-24 +/symbol-tests.el/1.4/Tue Apr 15 15:56:58 2003//Tr21-5-24 +/syntax-tests.el/1.6/Thu Dec 8 10:58:59 2005//Tr21-5-24 +/tag-tests.el/1.3/Thu May 13 16:41:27 2004//Tr21-5-24 +/test-harness.el/1.20/Mon May 3 15:08:51 2004//Tr21-5-24 +/weak-tests.el/1.4/Sat Nov 1 14:55:00 2003//Tr21-5-24 D diff -urN 21.5.23/tests/automated/CVS/Tag 21.5.24/tests/automated/CVS/Tag --- 21.5.23/tests/automated/CVS/Tag Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/automated/CVS/Tag Mon Dec 19 04:23:52 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/tests/automated/syntax-tests.el 21.5.24/tests/automated/syntax-tests.el --- 21.5.23/tests/automated/syntax-tests.el Tue Nov 12 00:39:07 2002 +++ 21.5.24/tests/automated/syntax-tests.el Thu Dec 8 19:58:59 2005 @@ -150,3 +150,42 @@ ;; this last used to crash (parse-partial-sexp point (point-max))))) + +;; Test backward-up-list +;; Known-Bug: report = Evgeny Zacjev ca 2005-12-01, confirm = Aidan Kehoe + +(with-temp-buffer + ;; We are now using the standard syntax table. Thus there's no need to + ;; worry about a bogus syntax setting, eg, in a Gnus Article buffer the + ;; bug doesn't manifest. + + ;; value of point to the immediate left of this character + ;; 0 1 2 + ;; 1234 56789 012 34567 890 12 3456 7 + (insert "a ( \"b (c\" (\"defg\") \")\") h\n") + + ;; #### This test should check *every* position. + (flet ((backward-up-list-moves-point-from-to (start expected-end) + (goto-char start) + (backward-up-list 1) + (= (point) expected-end))) + (Known-Bug-Expect-Failure + ;; Evgeny's case + (Assert (backward-up-list-moves-point-from-to 16 12))) + (Assert (backward-up-list-moves-point-from-to 19 12)) + (Assert (backward-up-list-moves-point-from-to 20 3)) + (Known-Bug-Expect-Failure + (Assert (backward-up-list-moves-point-from-to 22 3))) + (Known-Bug-Expect-Failure + (Assert (backward-up-list-moves-point-from-to 23 3))) + (Assert (backward-up-list-moves-point-from-to 24 3)) + ;; This is maybe a little tricky, since we don't expect the position + ;; check to happen -- so use an illegal expected position + ;; I don't think there's any other way for this to fail that way, + ;; barring hardware error.... + (Check-Error-Message syntax-error + "Unbalanced parentheses" + (backward-up-list-moves-point-from-to 25 nil)) + ;; special-case check that point didn't move + (Assert (= (point) 25)))) + diff -urN 21.5.23/tests/gtk/CVS/Entries 21.5.24/tests/gtk/CVS/Entries --- 21.5.23/tests/gtk/CVS/Entries Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/gtk/CVS/Entries Mon Dec 19 04:23:52 2005 @@ -1,11 +1,11 @@ -/UNIMPLEMENTED/1.2/Thu Apr 12 18:24:57 2001//Tr21-5-23 -/event-stream-tests.el/1.2/Thu Apr 12 18:24:57 2001//Tr21-5-23 -/gnome-test.el/1.2/Thu Apr 12 18:24:58 2001//Tr21-5-23 -/gtk-embedded-test.el/1.2/Thu Apr 12 18:24:58 2001//Tr21-5-23 -/gtk-extra-test.el/1.2/Thu Apr 12 18:24:58 2001//Tr21-5-23 -/gtk-test.el/1.2/Thu Apr 12 18:24:58 2001//Tr21-5-23 -/gtk-test.glade/1.2/Thu Apr 12 18:25:00 2001//Tr21-5-23 -/statusbar-test.el/1.2/Thu Apr 12 18:25:00 2001//Tr21-5-23 -/toolbar-test.el/1.2/Thu Apr 12 18:25:00 2001//Tr21-5-23 -/xemacs-toolbar.el/1.2/Thu Apr 12 18:25:01 2001//Tr21-5-23 +/UNIMPLEMENTED/1.2/Thu Apr 12 18:24:57 2001//Tr21-5-24 +/event-stream-tests.el/1.2/Thu Apr 12 18:24:57 2001//Tr21-5-24 +/gnome-test.el/1.2/Thu Apr 12 18:24:58 2001//Tr21-5-24 +/gtk-embedded-test.el/1.2/Thu Apr 12 18:24:58 2001//Tr21-5-24 +/gtk-extra-test.el/1.2/Thu Apr 12 18:24:58 2001//Tr21-5-24 +/gtk-test.el/1.2/Thu Apr 12 18:24:58 2001//Tr21-5-24 +/gtk-test.glade/1.2/Thu Apr 12 18:25:00 2001//Tr21-5-24 +/statusbar-test.el/1.2/Thu Apr 12 18:25:00 2001//Tr21-5-24 +/toolbar-test.el/1.2/Thu Apr 12 18:25:00 2001//Tr21-5-24 +/xemacs-toolbar.el/1.2/Thu Apr 12 18:25:01 2001//Tr21-5-24 D diff -urN 21.5.23/tests/gtk/CVS/Tag 21.5.24/tests/gtk/CVS/Tag --- 21.5.23/tests/gtk/CVS/Tag Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/gtk/CVS/Tag Mon Dec 19 04:23:52 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/tests/mule/CVS/Entries 21.5.24/tests/mule/CVS/Entries --- 21.5.23/tests/mule/CVS/Entries Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/mule/CVS/Entries Mon Dec 19 04:23:52 2005 @@ -1,2 +1,2 @@ -/match.el/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-23 +/match.el/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-24 D diff -urN 21.5.23/tests/mule/CVS/Tag 21.5.24/tests/mule/CVS/Tag --- 21.5.23/tests/mule/CVS/Tag Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/mule/CVS/Tag Mon Dec 19 04:23:52 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/tests/tooltalk/CVS/Entries 21.5.24/tests/tooltalk/CVS/Entries --- 21.5.23/tests/tooltalk/CVS/Entries Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/tooltalk/CVS/Entries Mon Dec 19 04:23:52 2005 @@ -1,7 +1,7 @@ -/Makefile/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-23 -/beeps.el/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-23 -/emacs-eval.c/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-23 -/load-file.c/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-23 -/make-client-frame.c/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-23 -/simple.el/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-23 +/Makefile/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-24 +/beeps.el/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-24 +/emacs-eval.c/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-24 +/load-file.c/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-24 +/make-client-frame.c/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-24 +/simple.el/1.1.1.1/Wed Dec 18 22:44:15 1996//Tr21-5-24 D diff -urN 21.5.23/tests/tooltalk/CVS/Tag 21.5.24/tests/tooltalk/CVS/Tag --- 21.5.23/tests/tooltalk/CVS/Tag Mon Dec 19 04:21:32 2005 +++ 21.5.24/tests/tooltalk/CVS/Tag Mon Dec 19 04:23:52 2005 @@ -1 +1 @@ -Nr21-5-23 +Nr21-5-24 diff -urN 21.5.23/version.sh 21.5.24/version.sh --- 21.5.23/version.sh Thu Oct 27 00:12:46 2005 +++ 21.5.24/version.sh Mon Dec 19 04:04:51 2005 @@ -2,11 +2,11 @@ emacs_is_beta=t emacs_major_version=21 emacs_minor_version=5 -emacs_beta_version=23 -xemacs_codename="daikon" +emacs_beta_version=24 +xemacs_codename="dandelion" emacs_kit_version= infodock_major_version=4 infodock_minor_version=0 infodock_build_version=8 xemacs_extra_name="" -xemacs_release_date="2005-10-26" +xemacs_release_date="2005-12-19"