User: stephent
Date: 05/03/15 06:28:28
Modified: xemacs/tests/automated Tag: sjt-xft regexp-tests.el
Added: xemacs Tag: sjt-xft ChangeLog.Xft
xemacs/etc Tag: sjt-xft configure-2.13
xemacs/etc/photos Tag: sjt-xft chr.png chrm.png
xemacs/lisp Tag: sjt-xft ChangeLog.Xft easy-mmode.el
regexp-opt.el
xemacs/lwlib Tag: sjt-xft ChangeLog.Xft
xemacs/man Tag: sjt-xft beta.texi
xemacs/src Tag: sjt-xft ChangeLog.Xft
xemacs/tests/automated Tag: sjt-xft region-tests.el
Removed: xemacs Tag: sjt-xft BUGS GETTING.GNU.SOFTWARE
README.packages
xemacs/etc Tag: sjt-xft BETA CHARSETS CODING-STANDARDS
CODINGS COPYING.LIB DEBUG DISTRIB FTP GNU LPF
MACHINES MAILINGLISTS MORE.STUFF MOTIVATION ORDERS
ORDERS.EUROPE ORDERS.JAPAN PACKAGES
README.HYPERBOLE README.OO-BROWSER SERVICE TERMS
aliases.ksh check_cygwin_setup.sh chr.png chrm.png
gnu.xbm gnu.xpm ms-kermit ms-kermit-7bit sink.xbm
Log:
synch sjt-xft to 21.5.20
Revision Changes Path
No revision
No revision
1.3.20.1 +1 -0 XEmacs/xemacs/.cvsignore
Index: .cvsignore
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/.cvsignore,v
retrieving revision 1.3
retrieving revision 1.3.20.1
diff -u -r1.3 -r1.3.20.1
--- .cvsignore 2001/04/12 18:20:30 1.3
+++ .cvsignore 2005/03/15 05:18:50 1.3.20.1
@@ -11,3 +11,4 @@
mule-packages
site-packages
gmon.out
+autom4te.cache
1.218.2.1 +177 -0 XEmacs/xemacs/CHANGES-beta
Index: CHANGES-beta
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/CHANGES-beta,v
retrieving revision 1.218
retrieving revision 1.218.2.1
diff -u -r1.218 -r1.218.2.1
--- CHANGES-beta 2004/10/22 02:14:14 1.218
+++ CHANGES-beta 2005/03/15 05:18:50 1.218.2.1
@@ -1,3 +1,180 @@
+to 21.5.20 "cilantro"
+
+Major Features
+
+-- New: Handle various X selection targets properly. (Aidan Kehoe)
+
+User-Visible Bug Fixes and Minor Improvements
+
+-- Fix: Handle active regions properly. (Adrian Aichner)
+-- Fix: pui-list-packages handles longer filenames. (Norbert Koch)
+
+Build Infrastructure
+
+-- Improve: Port configure to autoconf 2.59. (Malcolm Purvis)
+-- Fix: make-docfile.c misparsed UNUSED macro in defuns. (Stephen Turnbull)
+-- Fix: Don't copy non-existent BUGS file on NT. (Adrian Aichner)
+-- Fix: Typo in PDUMP section of Makefile.in.in. (Mike Alexander)
+
+Documentation
+
+-- Improve: Update info/dir. (Adrian Aichner)
+-- Improve: Automate updating of release date in about.el. (Stephen Turnbull)
+-- New: about.el entry for Simon Josefsson. (Simon Joseffson)
+-- Fix: Typos. (Adrian Aichner)
+-- Improve: Sort memory usage report sections by usage. (Adrian Aichner)
+-- Improve: Glyphs documentation. (Ben Wing)
+-- Improve: Description of build configuration system. (Malcolm Purvis)
+-- New: Description of build configuration system. (Stephen Turnbull)
+-- New: Lispref node on CCL Example. (Aidan Kehoe)
+-- Improve: Describe \c and \C in Syntax of Regexps. (Aidan Kehoe)
+-- Improve: Future Work -- Better Rendering Support. (Stephen Turnbull)
+-- Improve: Comments. (Stephen Turnbull, Aidan Kehoe)
+
+Lisp API
+
+-- New: GNU semi-compatible decode-char and encode-char. (Aidan Kehoe)
+
+Internal API and Implementation
+
+-- Fix: Avoid consing in operate-on-matching-lines. (Adrian Aichner)
+-- Fix: Correctly disable geometry negotiation in tabs widget. (Stephen Turnbull)
+-- New: Backtrace feature for KKCC. (Marcus Crestani)
+-- Fix: Type casts in database.c. (Marcus Crestani)
+-- Fix: Adjust s&m to FreeBSD 6.x reality. (Andrey Slusar)
+
+Quality Assurance Infrastructure
+
+-- New: USED_IF_BIGFLOAT macro. (Jerry James)
+-- New: region-tests.el. (Adrian Aichner)
+-- New: autoconf/regressiontest.pl. (Malcolm Purvis)
+
+to 21.5.19 "chives"
+
+Major Features
+
+-- Improve: major reorganization of source tree docs. (Ben Wing)
+-- Improve: behaviors get new code and many new implementations. (Ben Wing)
+
+User-Visible Bug Fixes and Minor Improvements
+
+-- Fix: security hole (CAN-2005-0100) in movemail. (Vin Shelton)
+-- Fix: data truncation in i.c. (Ben Wing)
+-- Fix: region deletion bug. (Stephen Turnbull)
+-- Fix: crash in Frecord_buffer. (Yoshiki Hayashi)
+-- Fix: Metacity maximize bug. (Stephen Turnbull)
+-- Fix: data truncation bugs in unix_send_process. (David Evers, Jerry James)
+-- Fix: recognise AltGr as a valid modifier in GTK. (Malcolm Purvis)
+-- Fix: recognize ISO keysyms. (Ville Skyttä)
+-- New: on Windows, dump Unicode tables to allow non-ASCII invocation.
+ (Ben Wing)
+-- New: splash screen. (Ben Wing)
+-- New: support treating shortcuts under Windows as symbolic links. (Ben Wing)
+-- Improve: GNU-compatible coding system aliases. (Aidan Kehoe)
+-- Improve: help system. (Ben Wing)
+-- Improve: mouse-track. (Ben Wing)
+-- Improve: support ISO 8859/16 by default. (Aidan Kehoe)
+
+Build Infrastructure
+
+-- Fix: copy BUGS, README, COPYING and Installation on installation on
+ Windows. (Ben Wing)
+-- Fix: installation for Cygwin. (Marcus Crestani)
+-- Fix: various build problems. (Ben Wing)
+-- Fix: various things in configure. (Ben Wing)
+-- New: default pdump on for Cygwin. (Marcus Crestani)
+-- New: support NetBSD sound via Linux API. (Aidan Kehoe)
+-- Improve: generation of CFLAGS (Jerry James, Ben Wing)
+-- Improve: parallel build support. (Malcolm Purvis)
+-- Improve: support --package-prefix as simple interface to --package-path
+ facility. (Ben Wing)
+-- Improve: support mmdf and pop arguments to --mail-locking. (Ben Wing)
+
+Documentation
+
+-- Fix: beta.texi. (Stephen Turnbull, Robert Royar)
+-- Fix: typos. (Alexey Mahotkin, Andreas Eder)
+-- New: "Future Work -- Better Rendering Support". (Stephen turnbull)
+-- New: "Future Work" collects feature proposals in Internals. (Ben Wing)
+-- New: empty ChangeLog entry. (Ben Wing)
+-- New: personal photos. (Malcolm Purvis)
+-- Improve: Lispref (Shyamal Prasad, Stephen Turnbull, Aidan Kehoe)
+-- Improve: Users' Guide. (Ben Wing)
+-- Improve: about.el. (Malcolm Purvis, Ben Wing)
+-- Improve: docstrings. (Ben Wing, Stephen Turnbull, Adrian Aichner,
+ Aidan Kehoe)
+-- Improve: gnuserv docs. (Stephen J. Turnbull)
+-- Improve: incorporate source tree docs in FAQ. (Ben Wing)
+-- Improve: major overhauls of FAQ, Internals. (Ben Wing)
+-- Improve: various comments. (Ben Wing)
+
+Lisp API
+
+-- Improve: sync bytecomp-runtime.el (make-obsolete, make-obsolete-variable).
+ (Ville Skyttä)
+-- Improve: sync paragraphs.el, custom.el, subr.el, newcomment.el,
+ fill.el, page.el, register.el. (Ben Wing)
+-- New: move regexp-opt.el and easy-mmode.el from packages to core. (Ben Wing)
+-- New: next/previous-single-char-property-change and make
+ next/previous-single-property-change work like in FSF. (Ben Wing)
+-- New: xemacs-font-lock-c-keywords and friends. (Ben Wing)
+
+Internal API and Implementation
+
+-- Fix: ^M brokenness in res.rc. (Ben Wing)
+-- Fix: adapt to recent changes in Cygwin. (Ben Wing)
+-- Fix: byte-char conversion, should speed up Mule if there are
+ non-ASCII characters in the buffer. (Ben Wing)
+-- Fix: coding cookie recognition in .elc. (Ben Wing)
+-- Fix: data-in-executable problems. (Olivier Galibert, Ben Wing)
+-- Fix: find-coding-system-magic-cookie-in-file. (Ben Wing)
+-- Fix: leaking process handles. (Ben Wing)
+-- Fix: only call device method compute_scrollbar_instance_usage() if it
+ is defined. (Zajcev Evgeny)
+-- Fix: protect callers of MSFT syscalls from MSFT API randomization.
+ (Ben Wing)
+-- Fix: typos. (Robert Royar)
+-- Fix: warnings. (Aidan Kehoe, Ben Wing)
+-- New: Hashcode type. (Ben Wing)
+-- New: color API. (Ben Wing)
+-- New: rename abort() macro to ABORT() to placate VC 7. (Ben Wing)
+-- Improve: GCPRO macros. (Ben Wing)
+-- Improve: Mule-ize various things. (Ben Wing)
+-- Improve: Suppress aliasing warning in free_hook; Jerry says not a fix?
+ (Ben Wing)
+-- Improve: UNUSED parameter marking, UNO support. (Malcolm Purvis,
+ Jerry James)
+-- Improve: Unicode-ize various things. (Ben Wing)
+-- Improve: critical section protection. (Ben Wing)
+-- Improve: debug info on attempt to throw outside of a function where
+ call_trapping_problems() has been used. (Ben Wing)
+-- Improve: menubar support. (Ben Wing)
+-- Improve: more orthogonality in emacs-root-finding. (Mike Sperber)
+-- Improve: move etc/aliases.ksh to xemacs-builds CVS module. (Ben Wing)
+-- Improve: move etc/chr.png, etc/chrm.png to etc/photos/ (Ben Wing)
+-- Improve: partially rework Unicode support. (Ben Wing)
+-- Improve: path handling correctness. (Ben Wing)
+-- Improve: rangetabs get different types of ranges (open/closed start
+ and end). Change default to be start-closed, end-open. (Ben Wing)
+-- Improve: refactor Initialization changes: (Ben Wing)
+-- Improve: refer to init.el not .emacs in menus. (Stephen Turnbull)
+-- Improve: s&m files by removing autodetected stuff. (Ben Wing)
+-- Improve: support dumping bignums. (Jerry James, Olivier Galibert)
+-- Improve: support for crashing gently. (Ben Wing)
+-- Improve: type and keyword pedantry. (Jerry James, Ben Wing)
+-- Improve: update etags from upstream. (Jerry James)
+-- Remove: EXTERNAL_LIST_LOOP because it can infloop. (Ben Wing)
+-- Remove: etc/gnu.xpm, etc/gnu.xbm, etc/sink.xbm, etc/ms-kermit,
+ etc/ms-kermit-7bit (Ben Wing)
+-- Remove: unneeded/unused code. (Ben Wing, Stephen Turnbull)
+
+Quality Assurance Infrastructure
+
+-- Fix: conflict with builtin in .gdbinit. (Golubev I. N.)
+-- New: regexp tests. (Stephen Turnbull, Vin Shelton)
+-- New: os-tests.el. (Stephen Turnbull)
+-- Improve: profiling support. (Ben Wing)
+
to 21.5.18 "chestnut"
Major Features
1.418.2.12 +60 -127 XEmacs/xemacs/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/ChangeLog,v
retrieving revision 1.418.2.11
retrieving revision 1.418.2.12
diff -u -r1.418.2.11 -r1.418.2.12
--- ChangeLog 2005/03/05 03:03:48 1.418.2.11
+++ ChangeLog 2005/03/15 05:18:51 1.418.2.12
@@ -1,16 +1,31 @@
-2005-03-05 Malcolm Purvis <malcolmp(a)xemacs.org>
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
- * configure.ac: Correct the filename of the old copy of configure.
+ * XEmacs 21.5.20 "cilantro" is released.
-2005-03-05 Malcolm Purvis <malcolmp(a)xemacs.org>
+2005-03-07 Malcolm Purvis <malcolmp(a)xemacs.org>
+ * .cvsignore: Added autom4te.cache.
+ * aclocal.m4: Changes to support autoconf 2.59
* 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.
+ * config.sub: Upgraded to the latest upstream version
+ * configure.ac: Rewritten for autoconf 2.59 support.
+
+2005-03-06 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * INSTALL:
+ * PROBLEMS: Change configure arguments to the new autoconf 2.5
+ style configure.
+
+2005-03-01 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * configure: Regenerated.
+ * configure.in (XE_COMPUTE_RUNPATH): Check for the availability of
+ XtRegisterDrawable.
+
+2005-02-22 Adrian Aichner <adrian(a)xemacs.org>
+ * info/dir: Update to content generated by Info-rebuild-dir.
+
2005-02-21 Stephen J. Turnbull <stephen(a)xemacs.org>
* version.sh (XEMACS_RELEASE_DATE): New version info variable.
@@ -22,121 +37,50 @@
* configure.ac (sound):
AC_DEFINE_UNQUOTED seems OK, if it's not m4-quoted.
-2005-02-20 Stephen J. Turnbull <stephen(a)xemacs.org>
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
- * configure.ac (athena): Spells as 3d, not xaw3d, in declaration.
- (sound): quickfix: AC_DEFINE, not AC_DEFINE_UNQUOTED, at top level.
+ * XEmacs 21.5.19 "chives" is released.
-2005-02-19 Stephen J. Turnbull <stephen(a)xemacs.org>
+2005-02-17 Stephen J. Turnbull <stephen(a)xemacs.org>
- * 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 <stephen(a)xemacs.org>
-
- * configure.ac: Trap --with-style flags, now --enable.
-
-2005-02-03 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * configure.ac (Autodetect native sound):
- Handle NetBSD per Aidan's patch.
-
-2005-02-11 Malcolm Purvis <malcolmp(a)xemacs.org>
-
- * 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 <malcolmp(a)xemacs.org>
-
- * 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 <malcolmp(a)xemacs.org>
-
- * configure.ac Align with the current mainline version of
- configure.in.
-
-2005-02-01 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * configure.ac (Xrender, fontconfig, and Xft):
- Check /usr/include/freetype2.
-
-2005-01-30 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * 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 <stephen(a)xemacs.org>
+ * CHANGES-beta: Update.
- * INSTALL (CONFIGURATION OPTIONS):
- Insert Malcolm's notes on autoconf 2.59 support.
+2005-02-03 Ben Wing <ben(a)xemacs.org>
-2005-01-04 Malcolm Purvis <malcolmp(a)xemacs.org>
+ * BUGS, README.packages: Delete, incorporate into FAQ.
+ * README: Incorporate into FAQ. Delete everything but text
+ pointing to FAQ.
- * 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.
+2005-02-03 Jerry James <james(a)xemacs.org>
+
+ * configure.in: g++ 3.4.2 doesn't like -Wmissing-prototypes or
+ -Wstrict-prototypes.
+
+2005-01-31 Ben Wing <ben(a)xemacs.org>
+
+ * GETTING.GNU.SOFTWARE: Delete.
+ * Makefile.in.in (SOURCES):
+ Delete GETTING.GNU.SOFTWARE from SOURCES.
+ * PROBLEMS:
+ Delete reference to check_cygwin_setup.sh.
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * configure.in (AC_INIT_PARSE_ARGS):
+ * configure.in (CANONICALIZE_PATH):
+ * configure.in (TAB):
+ * configure.usage:
+ Add --with-optimization, cflags-optimization,
+ cflags-debugging. Separate out optimization and debugging arguments.
+ Document.
+
+2005-01-21 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * configure:
+ * configure.in (XE_COMPUTE_RUNPATH):
+ NetBSD can use Linux's sound API, but it needs an extra library at
+ link time to do so.
+
2004-12-07 Malcolm Purvis <malcolmp(a)xemacs.org>
* INSTALL: A POSIX compatible Make is no longer required for builds.
@@ -163,17 +107,6 @@
* configure:
Support --package-prefix and mmdf and pop arguments to --mail-locking.
Document in configure.usage.
-
-2004-12-10 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * configure.usage: Various minor improvements.
-
-2004-12-09 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * 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-12 Marcus Crestani <crestani(a)informatik.uni-tuebingen.de>
1.41.2.3 +94 -86 XEmacs/xemacs/INSTALL
Index: INSTALL
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/INSTALL,v
retrieving revision 1.41.2.2
retrieving revision 1.41.2.3
diff -u -r1.41.2.2 -r1.41.2.3
--- INSTALL 2005/02/01 15:46:04 1.41.2.2
+++ INSTALL 2005/03/15 05:18:54 1.41.2.3
@@ -36,7 +36,7 @@
Verify that your users have a high enough stack limit. On some systems
such as OpenBSD and OSF/Tru64 the default is 2MB which is too low. On
-MacOS/X (Darwin), it's 512kB. See 'PROBLEMS' for details.
+MacOS/X (Darwin) before 10.3, it's 512kB. See 'PROBLEMS' for details.
Building XEmacs requires about 100 Mb of disk space (including the
XEmacs sources). Once installed, XEmacs occupies between 20 and 100
@@ -93,19 +93,19 @@
each library does is available in the file
<
ftp://ftp.xemacs.org/pub/xemacs/aux/00README.txt>.
-Use the `--site-includes' and `--site-libraries' options when building
-XEmacs to allow configure to find the external software packages. For
-your convenience these can be set together by using the
-`--with-site-prefix' option. This will set these variables as needed
+Use the `--with-site-includes' and `--with-site-libraries' options when
+building XEmacs to allow configure to find the external software
+packages. For your convenience these can be set together by using the
+`--with-site-prefixes' option. This will set these variables as needed
assuming your libraries are organised as a typical /usr tree.
If you link dynamically with external libraries, usually denoted by
-".so" (Unix), ".dll" (Windows), or ".dylib" (MacOS) file
extensions,
-on some systems you may also need to add the library directories to
-the `--site-runtime-libraries' option. It is typically necessary only
+".so" (Unix), ".dll" (Windows), or ".dylib" (MacOS) file
extensions, on
+some systems you may also need to add the library directories to the
+`--with-site-runtime-libraries' option. It is typically necessary only
if you link with dynamic libraries that are installed in non-standard
-directories, or if you expect some of the libraries used to build
-XEmacs to be in a different directory at run time than at build time.
+directories, or if you expect some of the libraries used to build XEmacs
+to be in a different directory at run time than at build time.
NOTE: This option has unusual semantics. ONLY libraries found in the
directories specified in this option will be used at runtime. This
@@ -113,13 +113,13 @@
this option (perhaps excluding a very small number of standard system
library paths).
-Directories specified with `--site-libraries' are NOT automatically
-added. The rationale is that most users will not need this option,
-and this allows the builder to specify exactly the needed directories.
-Specifying unnecessary directories leads to obscure problems
-(typically startup delays) if those directories are mounted over a
-network, and the automounter configuration changes. Not all systems
-need this option; it's best to avoid using it if you can.
+Directories specified with `--with-site-libraries' are NOT automatically
+added. The rationale is that most users will not need this option, and
+this allows the builder to specify exactly the needed directories.
+Specifying unnecessary directories leads to obscure problems (typically
+startup delays) if those directories are mounted over a network, and the
+automounter configuration changes. Not all systems need this option;
+it's best to avoid using it if you can.
Dynamic linking has pros and cons. Dynamically linking 3rd party
libraries to XEmacs decreases the size of the binary, and means you
@@ -388,14 +388,14 @@
Specifying Location of Headers and Libraries
--------------------------------------------
-The `--site-includes=DIR' and `--site-libraries=DIR' options allow you
-to specify additional places the compiler should look for include
-files and object libraries. You may specify multiple DIR's by
+The `--with-site-includes=DIR' and `--with-site-libraries=DIR' options
+allow you to specify additional places the compiler should look for
+include files and object libraries. You may specify multiple DIR's by
enclosing the list in quotes. All the external libraries you want to
use with XEmacs (e.g. xpm, wnn, ...) described later should have their
include and library directories defined using these options.
-The `--site-runtime-libraries=DIR' option specifies directories to
+The `--with-site-runtime-libraries=DIR' option specifies directories to
search for shared libraries at run time. If you use this option, you
must specify ALL of the directories containing shared libraries at run
time, including system directories. Please read the information about
@@ -410,31 +410,42 @@
Configuring the Build Process
-----------------------------
-The `--with-gcc=PROGRAM' option specifies that the build process
-should compile XEmacs using GCC. The `--compiler' option allows you
-to specify some other compiler to be used to compile XEmacs. If
-neither option is specified, the environment variable CC is used
-instead. Otherwise the compiler will then default to 'cc'.
-
-The `--xemacs-compiler=PROGRAM' option specifies the compiler control
-program for the xemacs binary only. Other C code will be compiled
-according to the `--with-gcc' and `--compiler' options above. This is
-useful if you wish to compile XEmacs with a C++ compiler, because the
-utilities in ./lib-src cannot be compiled as C++. This option is
-primarily intended for use by the maintainers.
-
-The `--cflags=FLAGS' option specifies all of the CFLAGS the build process
-should use when compiling XEmacs, except for flags controlling warning
-generation. Otherwise the value of the environment variable CFLAGS is
-consulted. If that is also undefined, CFLAGS defaults to "-g -O" for
-gcc and "-g" for all other compilers.
+The `--with-gcc=PROGRAM' option specifies that the build process should
+compile XEmacs using GCC. The `--with-compiler' option allows you to
+specify some other compiler to be used to compile XEmacs. If neither
+option is specified, the environment variable CC is used instead.
+Otherwise the compiler will then default to 'cc'.
+
+The `--with-xemacs-compiler=PROGRAM' option specifies the compiler
+control program for the xemacs binary only. Other C code will be
+compiled according to the `--with-gcc' and `--with-compiler' options
+above. This is useful if you wish to compile XEmacs with a C++
+compiler, because the utilities in ./lib-src cannot be compiled as C++.
+This option is primarily intended for use by the maintainers.
+
+The `--with-cflags=FLAGS' option specifies all of the CFLAGS the build
+process should use when compiling XEmacs, except for flags controlling
+warning generation. Otherwise the value of the environment variable
+CFLAGS is consulted. If that is also undefined, CFLAGS defaults to "-g
+-O" for gcc and "-g" for all other compilers.
-The `--cflags_warning=FLAGS' option specifies the warnings to be
+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.
-The `--dynamic' option specifies that configure should try to link
+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.
+
+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.
You can build XEmacs for several different machine types from a single
@@ -490,28 +501,27 @@
The `--without-xmu' option can be used if your vendor doesn't ship
the Xmu library.
-The `--with-menubars=TYPE' option allows you to specify which X
+The `--enable-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 `--with-scrollbars=TYPE' option allows you to specify which X
+The `--enable-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.
+`lucid' which is a Motif-lookalike scrollbar. If `no' is specified then
+support for scrollbars will not be compiled in.
-The `--with-dialogs=TYPE' option allows you to specify which X toolkit
+The `--enable-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.
+`no' is specified then support for dialog boxes will not be compiled in.
-The `--with-toolbars' option allows you to enable or disable toolbar
+The `--enable-toolbars' option allows you to enable or disable toolbar
support. The default is `yes' if support for a windowing system is
included.
@@ -523,11 +533,11 @@
X-Faces. `configure' will attempt to detect if you have the compface
library and define `--with-xface' for you.
-The `--with-database' option specifies that XEmacs should be built
+The `--enable-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 `--with-database' for you.
+files and define `--enable-database' for you.
The `--with-postgresql' option specifies that XEmacs should be built
with PostgreSQL support, linking with libpq. `configure' will attempt
@@ -542,23 +552,23 @@
The `--with-socks' option specifies that XEmacs should be built with
SOCKS support. This requires the libsocks library.
-The `--external-widget' option specifies that XEmacs should be built
-with support for being used as a widget by other X11 applications.
+The `--enable-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 `--with-sound=TYPE' option specifies that XEmacs should be built
-with sound support. Native (`--with-sound=native') sound support is
+The `--enable-sound=TYPE' option specifies that XEmacs should be built
+with sound support. Native (`--enable-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)
-(`--with-sound=nas' or `--with-sound=both') 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 `--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 `--native-sound-lib=LIB'
-flag. For Linux, `/dev/audio' is required for SunAudio files and
-`/dev/dsp' is required for raw data and WAVE format files.
+(`--enable-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
+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
+for raw data and WAVE format files.
The `--with-tooltalk' option specifies that XEmacs should be built
with ToolTalk support for interconnecting with other applications.
@@ -584,7 +594,7 @@
Internationalization Options
----------------------------
-The `--with-mule' option enables MUlti-Lingual Emacs (Mule) support,
+The `--enable-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
@@ -642,14 +652,14 @@
Options for Developers and Special Requirements
-----------------------------------------------
-The `--rel-alloc' option can be used to either enable or disable use
-of the relocating allocator. Turning on --rel-alloc will allow XEmacs
-to return unused memory to the operating system, thereby reducing its
-memory footprint. However, it may make XEmacs runs more slowly,
+The `--with-rel-alloc' option can be used to either enable or disable
+use of the relocating allocator. Turning on --with-rel-alloc will allow
+XEmacs to return unused memory to the operating system, thereby reducing
+its memory footprint. However, it may make XEmacs runs more slowly,
especially if your system's `mmap' implementation is missing or
-inefficient. Generally, it's best to go with the default
-configuration for your system. You can tweak this based on how you
-use XEmacs, and the memory and cpu resources available on your system.
+inefficient. Generally, it's best to go with the default configuration
+for your system. You can tweak this based on how you use XEmacs, and
+the memory and cpu resources available on your system.
The `--with-system-malloc' option can be used to either enable or
disable use of the system malloc. Generally, it's best to go with the
@@ -660,18 +670,16 @@
debugging version of malloc. Debug Malloc is not included with XEmacs
and is intended for use only by the developers. It may be obtained
from <
URL:http://www.letters.com/dmalloc/>.
+
+The `--enable-debug' and `--enable-error-checking' options are primarily
+useful to the developers. `--enable-debug' incorporates code for
+performing various tests, but does not impose a speed penalty.
+`--enable-error-checking' adds additional tests to many of the commonly
+used macros, and imposes a speed penalty. Using either or both of these
+options can make bug reports more useful to the developers.
-The `--debug' and `--error-checking' options are primarily useful to
-the developers. `--debug' incorporates code for performing various
-tests, but does not impose a speed penalty. `--error-checking' adds
-additional tests to many of the commonly used macros, and imposes a
-speed penalty. Using either or both of these options can make bug
-reports more useful to the developers.
-
-The `--verbose' and `--extra-verbose' options are useful only to the
-developers. `--verbose' causes the results of all configure tests to
-be displayed. `--extra-verbose' displays additional information,
-useful for debugging `configure'.
+The `--verbose' option is useful only to the developers. It displays
+additional information, useful for debugging `configure'.
MAIL LOCKING
============
@@ -683,9 +691,9 @@
utilities on your system, or you WILL lose mail.
Presently, XEmacs supports lockf, flock, and dot locking. Specify the
-locking method via the --mail-locking=METHOD option to configure.
-Valid values for METHOD are --mail-locking are `lockf', `flock', and
-`dot'.
+locking method via the --with-mail-locking=METHOD option to configure.
+Valid values for METHOD are --with-mail-locking are `lockf', `flock',
+and `dot'.
RUNNING CONFIGURE
=================
1.22.2.2 +1 -1 XEmacs/xemacs/Makefile.in.in
Index: Makefile.in.in
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/Makefile.in.in,v
retrieving revision 1.22.2.1
retrieving revision 1.22.2.2
diff -u -r1.22.2.1 -r1.22.2.2
--- Makefile.in.in 2004/12/11 05:12:27 1.22.2.1
+++ Makefile.in.in 2005/03/15 05:18:54 1.22.2.2
@@ -598,7 +598,7 @@
## Note: it's no disaster if these productions miss a file or two; tar
## and VC will swiftly let you know if this happens, and it is easily
## corrected.
-SOURCES = ChangeLog GETTING.GNU.SOFTWARE INSTALL Makefile.in.in PROBLEMS \
+SOURCES = ChangeLog INSTALL Makefile.in.in PROBLEMS \
README build-install.in configure make-dist move-if-change
.PHONY: unlock relock TAGS tags dist info dvi mcs
1.68.2.1 +36 -37 XEmacs/xemacs/PROBLEMS
Index: PROBLEMS
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/PROBLEMS,v
retrieving revision 1.68
retrieving revision 1.68.2.1
diff -u -r1.68 -r1.68.2.1
--- PROBLEMS 2003/09/19 16:24:33 1.68
+++ PROBLEMS 2005/03/15 05:18:55 1.68.2.1
@@ -47,7 +47,7 @@
*** How do I configure to get the buffer tabs/progress bars?
These features depend on support for "native widgets". Use the
---with-widgets option to configure. Configuration of widgets is
+--enable-widgets option to configure. Configuration of widgets is
automatic for "modern" toolkits (MS Windows, GTK, and Motif), but if
you are using Xt and the Athena widgets, you will probably want to
specify a "3d" widget set. See configure --usage, and don't forget to
@@ -278,7 +278,7 @@
Larry Auton <lda(a)control.att.com> writes:
Beware of not specifying
- --with-dialogs=athena
+ --enable-dialogs=athena
if it builds with the motif dialogs [boom!] you're a dead man.
@@ -301,7 +301,7 @@
defined in string.h - basically anything the compiler knows how to
inline.)
-*** On AIX 4.3, you must specify --with-dialogs=athena with configure
+*** On AIX 4.3, you must specify --enable-dialogs=athena with configure
*** The libXt shipped with AIX 4.3 up to 4.3.2 is broken. This causes
xemacs -nw to fail in various ways. The official APAR is this:
@@ -369,7 +369,7 @@
are caused by using GNU ld. There are several workarounds available:
In XEmacs 21.2 or later, configure using the new portable dumper
-(--pdump).
+(--enable-pdump).
Alternatively, you can link using the Sun version of ld, which is
normally held in /usr/ccs/bin. This can be done by one of:
@@ -536,9 +536,9 @@
passes the result to something that things foo_struct is a bit bigger,
trashing memory....
-Here's typical crash backtrace. With --pdump, this occurs usually at
-startup under X windows and xemacs -nw at least starts, while without
---pdump a similar crash is observed during build.
+Here's typical crash backtrace. With --enable-pdump, this occurs
+usually at startup under X windows and xemacs -nw at least starts, while
+without --pdump a similar crash is observed during build.
#0 0x0fa460b8 in kill () at regcomp.c:637
637 regcomp.c: No such file or directory.
@@ -559,7 +559,7 @@
The MIPSpro Compiler (at least version 7.2.1) can't seem to handle the
union type properly, and fails to compile src/glyphs.c. To avoid this
-problem, always build ---use-union-type=no (but that's the default, so
+problem, always build --enable-union-type=no (but that's the default, so
you should only see this problem if you're an XEmacs maintainer).
*** Linking with -rpath on IRIX.
@@ -569,9 +569,9 @@
1. The ld in IRIX 5.3 ignores all but the last -rpath
spec, so the patched configure spits out a warning
- if --x-libraries or --site-runtime-libraries are
+ if --x-libraries or --with-site-runtime-libraries are
specified under irix 5.x, and it only adds -rpath
- entries for the --site-runtime-libraries. This bug was
+ entries for the --with-site-runtime-libraries. This bug was
fixed sometime between 5.3 and 6.2.
2. IRIX gcc 2.7.2 doesn't accept -rpath directly, so
@@ -580,8 +580,8 @@
${CC-cc} $CFLAGS $LDFLAGS ...
rather than quoting $LDFLAGS with prefix-args, like
src/Makefile does. So if you specify --x-libraries
- or --site-runtime-libraries, you must use --use-gcc=no,
- or configure will fail.
+ or --with-site-runtime-libraries, you must use
+ --with--gcc=no, or configure will fail.
*** On Irix 6.3, the SGI ld quits with segmentation fault when linking temacs
@@ -686,16 +686,18 @@
configuration for COFF with:
/path_to_xemacs_source/configure --with-gcc=no \
- --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
- --with-xpm --with-xface --with-sound=nas
+ --with-site-includes=/usr/local/include \
+ --with-site-libraries=/usr/local/lib \
+ --with-xpm --with-xface --enable-sound=nas
This version now supports ELF builds. I highly recommend this to
reduce the in-core footprint of XEmacs. This is now how I compile
all my test releases. Build it like this:
/path_to_XEmacs_source/configure --with-gcc=no \
- --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
- --with-xpm --with-xface --with-sound=nas --dynamic
+ --with-site-includes=/usr/local/include
+ --with-site-libraries=/usr/local/lib \
+ --with-xpm --with-xface --enable-sound=nas --with-dynamic
The compiler known as icc [ supplied with the OpenServer 5 Development
System ] generates a working binary, but it takes forever to generate
@@ -706,8 +708,10 @@
The way I handle the build procedure is:
/path_to_XEmacs_source/configure --with-gcc=no \
- --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
- --with-xpm --with-xface --with-sound=nas --dynamic --compiler="icc"
+ --with-site-includes=/usr/local/include \
+ --with-site-libraries=/usr/local/lib \
+ --with-xpm --with-xface --enable-sound=nas --with-dynamic \
+ --with-compiler="icc"
NOTE I have the xpm, xface, and audio libraries and includes in
/usr/local/lib, /usr/local/include. If you don't have these,
@@ -783,12 +787,6 @@
Try configuring with pdump or without system malloc.
-*** In general use etc/check_cygwin_setup.sh to trap environment problems.
-
-The script etc/check_cygwin_setup.sh will attempt to detect whether
-you have a suitable environment for building. This script may not work
-correctly if you are using ash instead of bash (see below).
-
*** Syntax errors running configure scripts, make failing with exit code 127
in inexplicable situations, etc.
@@ -1004,7 +1002,7 @@
or in /usr/openwin/lib/. If you keep yours in a different place, set the
environment variable $XKEYSYMDB to point to it before starting emacs. If
you still have the problem after doing that, perhaps your version of X is
-too old. There is a copy of the MIT X11R5 XKeysymDB file in the emacs `etc'
+too old. There is a copy of the MIT X11R6 XKeysymDB file in the emacs `etc'
directory. Try using that one.
*** My X resources used to work, and now some of them are being ignored.
@@ -1367,8 +1365,8 @@
undefined symbols.
The only known case in which this happens is if you are using gcc, you
-configured with --error-checking=all and --with-modules, and you
-compiled with no optimization. If you encounter this problem in any
+configured with --enable-error-checking=all and --enable-modules, and
+you compiled with no optimization. If you encounter this problem in any
other situation, please inform xemacs-beta(a)xemacs.org.
This problem stems from a gcc bug. With no optimization, functions
@@ -1607,18 +1605,19 @@
make-frame(nil #<x-device on ":0.0" 0x2558>)
-somewhere near the top. The problem is due to an improvement in GNU
-ld that sorts the ELF reloc sections in the executable, giving
-dramatic speedups in startup for large executables. It also confuses
-the traditional unexec code in XEmacs, leading to the core dump. The
-solution is to use the --pdump or --ldflags='-z nocombreloc' options
-to configure. Recent 21.4 and 12.5 autodetect this in configure.
+somewhere near the top. The problem is due to an improvement in GNU ld
+that sorts the ELF reloc sections in the executable, giving dramatic
+speedups in startup for large executables. It also confuses the
+traditional unexec code in XEmacs, leading to the core dump. The
+solution is to use the --enable-pdump or --with-ldflags='-z nocombreloc'
+options to configure. Recent 21.4 and 12.5 autodetect this in
+configure.
Red Hat and SuSE (at least) distributed a prerelease version of ld
(versions around 2.11.90.x.y) where autodetection is impossible. The
recommended procedure is to upgrade to binutils >= 2.12 and rerun
-configure. Otherwise you must apply the flags by hand. --pdump is
-recommended.
+configure. Otherwise you must apply the flags by hand. --enable-pdump
+is recommended.
*** I want XEmacs to use the Alt key, not the XXX key, for Meta commands
@@ -1780,8 +1779,8 @@
SGI ships a really old Xpm library in /usr/lib which does not work at
all well with XEmacs. The solution is to install your own copy of the
-latest version of Xpm somewhere and then use the --site-includes and
---site-libraries flags to tell configure where to find it.
+latest version of Xpm somewhere and then use the --with-site-includes
+and --with-site-libraries flags to tell configure where to find it.
*** Trouble using ptys on IRIX, or running out of ptys.
1.17.6.1 +11 -241 XEmacs/xemacs/README
Index: README
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/README,v
retrieving revision 1.17
retrieving revision 1.17.6.1
diff -u -r1.17 -r1.17.6.1
--- README 2002/08/20 06:31:26 1.17
+++ README 2005/03/15 05:18:56 1.17.6.1
@@ -1,245 +1,15 @@
This directory tree holds version 21.5 of XEmacs.
+The information in this file has been superseded by the XEmacs FAQ.
-*** What is XEmacs?
+The easiest way to read the FAQ is to go to
-XEmacs is a powerful, highly customizable open source text editor and
-application development system, with full GUI support. It is protected
-under the GNU Public License and related to other versions of Emacs, in
-particular GNU Emacs. Its emphasis is on modern graphical user
-interface support and an open software development model, similar to
-Linux. XEmacs has an active development community numbering in the
-hundreds (and thousands of active beta testers on top of this), and runs
-on all versions of MS Windows, on Linux, and on nearly every other
-version of Unix in existence. Support for XEmacs has been supplied by
-Sun Microsystems, University of Illinois, Lucid, ETL/Electrotechnical
-Laboratory, Amdahl Corporation, BeOpen, and others, as well as the
-unpaid time of a great number of individual developers.
-
-
-
-*** What platforms does it run on?
-
- -- MS Windows (It has been tested on NT, 2000, 95, 98, and ME; you
- can also compile Cygwin and MinGW versions.)
- -- Unix (It is regularly tested on Linux, Solaris, SunOS, HP/UX,
- FreeBSD, OpenBSD, BSD/OS aka BSDI, Tru64 aka DEC/OSF, SCO5,
- and probably others. It should work on all versions of Unix
- created in the last 10 years or so, perhaps with a bit of
- work on more obscure platforms to correct bit-rot. It uses
- a sophisticated configuration system to auto-detect zillions
- of features that are implemented differently in different
- versions of Unix, so it will probably work on your vendor's
- version, possibly with a bit of tweaking, even if we've
- never heard of it.)
- -- MacOS/X (As an X Windows application. Unfortunately there is no
- support currently for MacOS-specific features.)
-
- There is also a port of XEmacs 19.14 (an older version, circa 1996)
- for all versions of MacOS, with extensive support for MacOS-specific
- features. See the FAQ for more details.
-
- There are rumors of an in-progress port to OS/2. See the FAQ.
-
- XEmacs will probably never work on MS/DOS or Windows 3.1, and we're
- not particularly interested in patches for these platforms, as they
- would introduce huge amounts of code clutter due to the woefully
- underfeatured nature of these systems. (See GNU Emacs for a port to
- MS/DOS.)
-
-
-
-*** Where's the FAQ?
-
-Look at `man/xemacs-faq.texi'.
-
-For the very latest version, see
-http://cvs.xemacs.org/cgi-bin/cvswebxe/xemacs/man/xemacs-faq.texi.
-
-
-
-*** Where's the latest version?
-
-For up-to-date information on XEmacs, see
http://www.xemacs.org.
-
-To download XEmacs, see
http://ftp.xemacs.org/ or
-ftp://ftp.xemacs.org/pub/xemacs/.
-
-For the latest experimental sources, see
http://cvs.xemacs.org/, which
-gives instructions on how to get started with CVS access.
-
-There are numerous mailing lists for discussion of XEmacs. The
-current description of these lists can be found at
-http://www.xemacs.org/Lists/, or see `etc/MAILINGLISTS'. General
-discussion of bugs, new features, etc. takes place on
-xemacs-beta(a)xemacs.org.
-
-
-
-*** How do I build and install XEmacs?
-
-See the file `etc/NEWS' for information on new features and other
-user-visible changes since the last version of XEmacs.
-
-The file `INSTALL' in this directory says how to bring up XEmacs on
-Unix and Cygwin, once you have loaded the entire subtree of this
-directory.
-
-See the file `nt/README' for instructions on building XEmacs for
-Microsoft Windows.
-
-The file 'README.packages' will guide you in the installation of
-(essential) add on packages.
-
-
-
-*** How do I deal with bugs or with problems building, installing, or running?
-
-The file `PROBLEMS' contains information on many common problems that
-occur in building, installing and running XEmacs.
-
-Reports of bugs in XEmacs should be sent to xemacs-beta(a)xemacs.org.
-You can also post to the newsgroup comp.emacs.xemacs (or equivalentlt,
-send to the mailing list xemacs(a)xemacs.org), but it is less likely
-that the developers will see it in a timely fashion. See the "Bugs"
-section of the XEmacs manual for more information on how to report
-bugs. (The file `BUGS' in this directory explains how you can find
-and read that section using the Info files that come with XEmacs.)
-See `etc/MAILINGLISTS' for more information on mailing lists relating
-to XEmacs.
-
-
-*** How do I get started developing XEmacs?
-
-First, get yourself set up under CVS so that you can access the CVS
-repositories containing the XEmacs sources and the XEmacs packages.
-
-Next, set up your layout. This is important, as a good layout will
-facilitate getting things done efficiently, while a bad layout will could
-lead to disaster, as you can't figure out which code is the most recent,
-which can be thrown away, etc. We suggest the following layout: (feel free
-to make changes)
-
--- Everything goes under /src/xemacs (use a different directory if you
- want). From now, instead of saying /src/xemacs, we use <xsrc-top>, to
- make it easier in case someone picked a different directory.
-
--- Package source is in <xsrc-top>/package-src.
-
--- Installed packages go under <xsrc-top>/xemacs-packages, and
- <xsrc-top>/mule-packages.
-
--- A "workspace" is a complete copy of the sources, in which you do work of
- a particular kind. Workspaces can be differentiated by which branch of
- the source tree they extend off of -- usually either the stable or
- experimental, unless other branches have been created (for example, Ben
- created a branch for his Mule work because (1) the project was long-term
- and involved an enormous number of changes, (2) people wanted to be able
- to look at what his work in progress, and (3) he wanted to be able to
- check things in and in general use source-code control, since it was a
- long-term project). Workspaces are also differentiated in what their
- purpose is -- general working workspace, workspace for particular
- projects, workspace keeping the latest copy of the code in one of the
- branches without mods, etc.
-
--- Various workspaces are subdirectories under <xsrc-top>, e.g.:
-
- -- <xsrc-top>/working (the workspace you're actively working on,
- periodically synched up with the latest trunk)
-
- -- <xsrc-top>/stable (for making changes to the stable version of
- XEmacs, which sits on a branch)
-
- -- <xsrc-top>/unsigned-removal (a workspace for a specific, difficult
- task that's going to affect lots of source and take a long time, and
- so best done in its own workspace without the interference of other
- work you're doing. Also, you can commit just this one large change,
- separate from all the other changes).
-
- -- <xsrc-top>/latest (a copy of the latest sources on the trunk,
- i.e. the experimental version of XEmacs, with no patches in it;
- either update it periodically, by hand, or set up a cron job to do it
- automatically). Set it up so it can be built, and build it so you
- have a working XEmacs. (Building it might also go into the cron job.)
-
- This workspace serves a number of purposes:
- -- 1. You always have a recent version of XEmacs you can compare
- against when something you're working on breaks. It's true
- that you can do this with cvs diff, but when you need to do
- some serious investigation, this method just fails.
- -- 2. You (almost) always have a working, up-to-date executable that
- can be used when your executable is crashing and you need to
- keep developing it, or when you need an `xemacs' to build
- packages, etc.
- -- 3. When creating new workspaces, you can just copy the `latest'
- workspace using GNU cp -a. You have all the .elc's built,
- everything else probably configured, any spare files in place
- (e.g. some annoying xpm.dll under Windows, etc.).
-
- -- <xsrc-top>/latest-stable/ (equivalent to <xsrc-top>/latest/, but
- for the Stable branch of XEmacs, rather than the Experimental branch
- of XEmacs). This may or may not be necessary depending on how much
- development you do of the stable branch.
-
--- <xsrc-top>/xemacsweb is a workspace for working on the XEmacs web site.
-
--- <xsrc-top>/in-patches for patches received from email and saved to files.
-
--- <xsrc-top>/out-patches for locally-generated patches to be sent to
- xemacs-patches(a)xemacs.org. Less useful now that the patcher util has been
- developed.
-
--- <xsrc-top>/build, for build trees when compiling and testing XEmacs with
- various configuration options turned off and on. The scripts in
- xemacs-builds/ben (see below) can be used to automate building XEmacs
- workspaces with many different configuration options and automatically
- filtering out the normal output so that you see only the abnormal
- output.
-
--- <xsrc-top>/xemacs-builds, for the xemacs-builds module, which you need
- to check out separately in CVS. This contains scripts used for building
- XEmacs, automating and simplifying using CVS, etc. Under various
- people's directories are their own build and other scripts. The
- currently most-maintained scripts are under ben/, where there are easily
- configurable scripts that can be used to easily build any workspace
- (esp. if you've more or less followed the layout presented above)
- unattended, with one or more configuration states (there's a
- pre-determined list of the most useful, but it's easy to change). The
- output is filtered and split up in various ways so that you can identify
- which output came from where, and you can see the output either full or
- with all "normal" output except occasional status messages filtered so
- that you only see the abnormal ones.
-
-*** What's the basic layout of the code?
-
-The file `configure' is a shell script to acclimate XEmacs to the
-oddities of your processor and operating system. It will create a
-file named `Makefile' (a script for the `make' program), which helps
-automate the process of building and installing emacs. See INSTALL
-for more detailed information.
-
-The file `configure.in' is the input used by the autoconf program to
-construct the `configure' script. Since XEmacs has configuration
-requirements that autoconf can't meet, `configure.in' uses an unholy
-marriage of custom-baked configuration code and autoconf macros; it
-may be wise to avoid rebuilding `configure' from `configure.in' when
-possible.
-
-The file `Makefile.in' is a template used by `configure' to create
-`Makefile'.
-
-There are several subdirectories:
-
-`src' holds the C code for XEmacs (the XEmacs Lisp interpreter and its
- primitives, the redisplay code, and some basic editing functions).
-`lisp' holds the XEmacs Lisp code for XEmacs (most everything else).
-`lib-src' holds the source code for some utility programs for use by
- or with XEmacs, like movemail and etags.
-`etc' holds miscellaneous architecture-independent data files
- XEmacs uses, like the tutorial text and the Zippy the Pinhead quote
- database. The contents of the `lisp', `info' and `man'
- subdirectories are architecture-independent too.
-`lwlib' holds the C code for the X toolkit objects used by XEmacs.
-`info' holds the Info documentation tree for XEmacs.
-`man' holds the source code for the XEmacs online documentation.
-`nt' holds files used compiling XEmacs under Microsoft Windows.
+http://www.xemacs.org/Documentation/21.5/html/xemacs-faq_1.html
+
+You can also the local copy of the FAQ inside XEmacs by using
+use Help->XEmacs FAQ from the menu, or `C-h F'.
+
+If you don't have XEmacs running and can't access the web,
+look directly at `man/xemacs-faq.texi' or `info/xemacs-faq.info'.
+
+
1.1.14.10 +1 -1 XEmacs/xemacs/configure.ac
Index: configure.ac
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/configure.ac,v
retrieving revision 1.1.14.9
retrieving revision 1.1.14.10
diff -u -r1.1.14.9 -r1.1.14.10
--- configure.ac 2005/03/05 03:04:15 1.1.14.9
+++ configure.ac 2005/03/15 05:18:56 1.1.14.10
@@ -3235,7 +3235,7 @@
esac
fi
- AC_CHECK_FUNCS(XConvertCase)
+ AC_CHECK_FUNCS(XConvertCase XtRegisterDrawable)
AC_CHECK_HEADERS(X11/Xlocale.h X11/Xfuncproto.h)
1.233.2.5 +108 -34 XEmacs/xemacs/configure.in
Index: configure.in
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/configure.in,v
retrieving revision 1.233.2.4
retrieving revision 1.233.2.5
diff -u -r1.233.2.4 -r1.233.2.5
--- configure.in 2005/02/22 10:17:07 1.233.2.4
+++ configure.in 2005/03/15 05:19:00 1.233.2.5
@@ -537,6 +537,7 @@
with_dnet | \
with_infodock | \
with_netinstall | \
+ with_optimization | \
with_ipv6_cname | \
external_widget | \
use_kkcc | \
@@ -566,6 +567,8 @@
xemacs_compiler | \
cflags | \
cflags_warning | \
+ cflags_optimization | \
+ cflags_debugging | \
cpp | \
cppflags | \
libs | \
@@ -1737,6 +1740,16 @@
else cflags_warning_specified=no;
fi
+if test "${cflags_optimization-unset}" != unset
+ then cflags_optimization_specified=yes;
+ else cflags_optimization_specified=no;
+fi
+
+if test "${cflags_debugging-unset}" != unset
+ then cflags_debugging_specified=yes;
+ else cflags_debugging_specified=no;
+fi
+
xe_save_CFLAGS="$CFLAGS"
AC_PROG_CC dnl Autoconf has its own magic for compiler autodetection
@@ -2072,36 +2085,68 @@
xemacs_cc_cc_mismatch=no
fi
fi
-
-dnl #### This may need to be overhauled so that all of XEMACS_CC's flags
-dnl are handled separately, not just the xe_cflags_warning stuff.
-AC_MSG_CHECKING([for preferred CFLAGS])
+dnl Calculate optimization flags. These will be off by default in beta
+dnl versions and on in release versions.
-dnl Use either command line flag, environment var, or autodetection
-if test "$cflags_specified" = "no"; then
- dnl Following values of CFLAGS are known to work well.
- dnl Should we take debugging options into consideration?
- if test "$GCC" = "yes"; then
- CFLAGS="-g -O3"
- elif test "$__SUNPRO_C" = "yes"; then
- case "$opsys" in
- sol2 ) CFLAGS="-xO4" ;;
- sunos4* ) CFLAGS="-xO2" ;;
- esac
- elif test "$__DECC" = "yes"; then
- CFLAGS="-O3"
- elif test "$CC" = "xlc"; then
- CFLAGS="-g -O3 -qstrict -qnoansialias -qlibansi -qro -qmaxmem=20000"
- elif test "$__ICC" = "yes"; then
- CFLAGS="-g -O3 -Ob2"
- dnl ### Add optimal CFLAGS support for other compilers HERE!
+if test -z "$with_optimization" ; then
+ if test -n "$emacs_is_beta" ; then
+ with_optimization=no
else
- CFLAGS="-O" ;dnl The only POSIX-approved flag
+ with_optimization=yes
fi
fi
-AC_MSG_RESULT([${CFLAGS}])
+dnl #### We should be checking C_OPTIMIZE_SWITCH in m/*, s/*.
+
+AC_MSG_CHECKING([for preferred optimization flags])
+if test "$with_optimization" = "yes" ; then
+ if test "$cflags_optimization_specified" = "no"; then
+ dnl Following values of cflags_optimization are known to work well.
+ dnl Should we take debugging options into consideration?
+ if test "$GCC" = "yes"; then
+ cflags_optimization="-O3"
+ elif test "$__SUNPRO_C" = "yes"; then
+ case "$opsys" in
+ sol2 ) cflags_optimization="-xO4" ;;
+ sunos4* ) cflags_optimization="-xO2" ;;
+ esac
+ elif test "$__DECC" = "yes"; then
+ cflags_optimization="-O3"
+ elif test "$CC" = "xlc"; then
+ dnl see
http://www.nersc.gov/vendor_docs/ibm/vac/sc094959.pdf
+ cflags_optimization="-O3 -qstrict -qnoansialias -qlibansi
-qmaxmem=20000"
+ elif test "$__ICC" = "yes"; then
+ cflags_optimization="-O3 -Ob2"
+ dnl ### Add optimal cflags_optimization support for other compilers HERE!
+ else
+ cflags_optimization="-O" ;dnl The only POSIX-approved flag
+ fi
+ fi
+else
+ cflags_optimization=
+fi
+
+AC_MSG_RESULT([${cflags_optimization}])
+
+dnl #### We should be checking C_DEBUG_SWITCH in m/*, s/*.
+
+AC_MSG_CHECKING([for preferred debugging flags])
+if test "$cflags_debugging_specified" = "no"; then
+ dnl ### Add optimal debugging support for other compilers HERE!
+ cflags_debugging="-g"
+
+ debugging_ok_with_optimization=no
+ if test "$GCC" = "yes" -o "$CC" = "xlc" -o
"$__ICC" = "yes"; then
+ debugging_ok_with_optimization=yes
+ fi
+
+ if test "$with_optimization" = "yes" -a
"$debugging_ok_with_optimization" = "no"; then
+ cflags_debugging=
+ fi
+fi
+AC_MSG_RESULT([${cflags_debugging}])
+
dnl Calculate warning flags. We separate the flags for warnings from
dnl the other flags because we want to force the warnings to be seen
dnl by everyone who doesn't specifically override them.
@@ -2120,7 +2165,7 @@
elif test "$CC" = "xlc"; then
cflags_warning="-qinfo"
elif test "$GCC" = "yes"; then
- cflags_warning="-Wall -Wno-switch -Wmissing-prototypes"
+ cflags_warning="-Wall -Wno-switch -Wundef"
dnl This is not very useful, as it issues warnings that may appear
dnl or disappear rather randomly, cannot easily be fixed, and are
dnl not a big deal. If you want it, add it yourself.
@@ -2130,7 +2175,6 @@
dnl Warnings about char subscripts are pretty pointless, though,
dnl and we use them in various places.
cflags_warning="$cflags_warning -Wsign-compare -Wno-char-subscripts"
- cflags_warning="$cflags_warning -Wundef -Wstrict-prototypes"
test "$__GCC3" = "yes" &&
cflags_warning="$cflags_warning -Wpacked"
dnl glibc is intentionally not `-Wpointer-arith'-clean.
dnl Ulrich Drepper has rejected patches to fix the glibc header files.
@@ -2151,6 +2195,7 @@
xe_cflags_warning="$cflags_warning -Wunused-parameter"
fi
cflags_warning="$cflags_warning -Wshadow -Wmissing-declarations"
+ cflags_warning="$cflags_warning -Wmissing-prototypes
-Wstrict-prototypes"
dnl **** If more gcc/g++ flags are added, from here on must handle
dnl **** cflags_warning and xe_cflags_warning in parallel
elif test "$__ICC" = "yes"; then
@@ -2163,14 +2208,34 @@
AC_MSG_CHECKING([for preferred warning flags for CC])
AC_MSG_RESULT([${cflags_warning}])
+
+dnl Calculate remaining cflags.
+dnl Use either command line flag, environment var, or autodetection
+
+AC_MSG_CHECKING([for remaining CFLAGS])
+
+if test "$cflags_specified" = "no"; then
+ dnl Following values of CFLAGS are known to work well.
+ if test "$CC" = "xlc"; then
+ CFLAGS="-qro"
+ dnl ### Add optimal CFLAGS support for other compilers HERE!
+ fi
+fi
+AC_MSG_RESULT([${CFLAGS}])
-dnl Now combine all C flags. Put the warning flags first so that
-dnl user-specified flags will override.
-dnl Do XE_CFLAGS before adding warning flags to CFLAGS.
+dnl Now combine all C flags. Put the warning and optimization flags first
+dnl so that user-specified flags will override.
+dnl Do XE_CFLAGS before adding flags to CFLAGS.
dnl Flags for XEMACS_CC:
-XE_CFLAGS="$xe_cflags_warning $CFLAGS"
+
+XE_CFLAGS="$xe_cflags_warning $cflags_debugging $cflags_optimization
$CFLAGS"
dnl Flags for CC:
-CFLAGS="$cflags_warning $CFLAGS"
+CFLAGS="$cflags_warning $cflags_debugging $cflags_optimization $CFLAGS"
+
+AC_MSG_CHECKING([total value of XE_CFLAGS])
+AC_MSG_RESULT([${XE_CFLAGS}])
+AC_MSG_CHECKING([total value of CFLAGS])
+AC_MSG_RESULT([${CFLAGS}])
dnl Search for GCC specific build problems we know about
if test "$GCC" = "yes"; then
@@ -3251,7 +3316,7 @@
esac
fi
- AC_CHECK_FUNCS(XConvertCase)
+ AC_CHECK_FUNCS(XConvertCase XtRegisterDrawable)
AC_CHECK_HEADERS(X11/Xlocale.h)
@@ -4362,7 +4427,7 @@
fi
dnl ----------------------------------------------------------------
-dnl Check for POSIX functions.
+dnl Check for POSIX functions
dnl ----------------------------------------------------------------
AC_CHECK_FUNCS(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)
@@ -4821,7 +4886,16 @@
done
fi
- test "$sound_found" = "yes" && with_native_sound=yes
+ if test "$sound_found" = "yes"; then
+ with_native_sound=yes
+
+ dnl NetBSD can use Linux's sound API, but it needs an extra library at
+ dnl link time to do so. (OpenBSD apparently needs the same; not written
+ dnl or tested.)
+ if test "$opsys" = "netbsd" ; then
+ AC_CHECK_LIB(ossaudio, _oss_ioctl, native_sound_lib="-lossaudio")
+ fi
+ fi
fi
if test "$with_native_sound" = "yes"; then
1.36.2.5 +26 -7 XEmacs/xemacs/configure.usage
Index: configure.usage
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/configure.usage,v
retrieving revision 1.36.2.4
retrieving revision 1.36.2.5
diff -u -r1.36.2.4 -r1.36.2.5
--- configure.usage 2005/02/01 15:46:18 1.36.2.4
+++ configure.usage 2005/03/15 05:19:03 1.36.2.5
@@ -40,8 +40,24 @@
all default compiler flags except those that control
warnings.
--cflags-warning=FLAGS Override compiler flags used to control warnings.
- Normally, use configure's defaults, and report
- warnings as bugs to xemacs-beta(a)xemacs.org.
+ 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.
+--cflags-optimization=FLAGS
+ Override compiler flags used to control optimization.
+ Only has an effect when optimization is enabled.
+ Normally, don't set this, as XEmacs will already set
+ the maximum safe optimization flags appropriate for
+ the compiler being invoked.
+--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).
--cpp=PROG C preprocessor to use (e.g. /usr/ccs/lib/cpp or cc -E)
--cppflags=FLAGS C preprocessor flags (e.g. -I/foo or -Dfoo=bar)
--libs=LIBS Additional libraries (e.g. -lfoo)
@@ -112,11 +128,14 @@
${package_prefix}/mule-packages"
(or the same without `.../mule-packages' if no
MULE support exists)
---package-path=PATH Directories to search for LISP packages.
- PATH has three parts separated by double colons (::),
- early, late, and last. Only the late part gets seen
- at dump time. Use of the "last" component should be
- avoided.
+--package-path=PATH Directories to search for packages to dump with xemacs.
+ PATH splits into three parts separated by double
+ colons (::), an early, a late, and a last part,
+ corresponding to their position in the various
+ system paths: The early part is always first,
+ the late part somewhere in the middle, and the
+ last part at the very back.
+ Only the late part gets seen at dump time.
If PATH has only one component, that component
is late.
If PATH has two components, the first is
1.984.2.4 +4 -4 XEmacs/xemacs/version.sh
Index: version.sh
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/version.sh,v
retrieving revision 1.984.2.3
retrieving revision 1.984.2.4
diff -u -r1.984.2.3 -r1.984.2.4
--- version.sh 2005/02/22 10:17:08 1.984.2.3
+++ version.sh 2005/03/15 05:19:04 1.984.2.4
@@ -2,11 +2,11 @@
emacs_is_beta=t
emacs_major_version=21
emacs_minor_version=5
-emacs_beta_version=18
-xemacs_codename="chestnut"
+emacs_beta_version=20
+xemacs_codename="cilantro"
emacs_kit_version=
infodock_major_version=4
infodock_minor_version=0
infodock_build_version=8
-xemacs_extra_name="(+Xft+CVS-20041209)"
-xemacs_release_date="2004-10-22"
+xemacs_extra_name="(+Xft+CVS-20050310)"
+xemacs_release_date="2005-03-11"
No revision
No revision
1.1.2.1 +140 -0 XEmacs/xemacs/Attic/ChangeLog.Xft
Index: ChangeLog.Xft
===================================================================
RCS file: ChangeLog.Xft
diff -N ChangeLog.Xft
--- /dev/null Tue Mar 15 06:19:20 2005
+++ /tmp/cvsAAA9dayTP Tue Mar 15 06:19:22 2005
@@ -0,0 +1,140 @@
+<<<<<<< ChangeLog
+2005-03-05 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * configure.ac: Correct the filename of the old copy of configure.
+
+2005-03-05 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * configure.ac: Trap --with-style flags, now --enable.
+
+2005-02-03 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * configure.ac (Autodetect native sound):
+ Handle NetBSD per Aidan's patch.
+
+2005-02-11 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * 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 <malcolmp(a)xemacs.org>
+
+ * 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 <malcolmp(a)xemacs.org>
+
+ * configure.ac Align with the current mainline version of
+ configure.in.
+
+2005-02-01 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * configure.ac (Xrender, fontconfig, and Xft):
+ Check /usr/include/freetype2.
+
+2005-01-30 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * INSTALL (CONFIGURATION OPTIONS):
+ Insert Malcolm's notes on autoconf 2.59 support.
+
+2005-01-04 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * configure.usage: Various minor improvements.
+
+2004-12-09 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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.
+
No revision
No revision
1.48.2.1 +56 -0 XEmacs/xemacs/etc/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/etc/ChangeLog,v
retrieving revision 1.48
retrieving revision 1.48.2.1
diff -u -r1.48 -r1.48.2.1
--- ChangeLog 2004/11/07 12:03:45 1.48
+++ ChangeLog 2005/03/15 05:19:36 1.48.2.1
@@ -1,3 +1,59 @@
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.20 "cilantro" is released.
+
+2005-03-11 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * configure-2.13: Added a copy of the old configure script in case
+ of major problems.
+
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.19 "chives" is released.
+
+2005-02-03 Jerry James <james(a)xemacs.org>
+
+ * ETAGS.EBNF: Update to author version 17.11.
+
+2005-01-31 Ben Wing <ben(a)xemacs.org>
+
+ Delete stuff that is irrelevant, mislocated or woefully out-of-date.
+
+ * GNU: Delete.
+ * SERVICE: Delete.
+ * ORDERS, ORDERS.EUROPE, ORDERS.JAPAN: Delete.
+ * CHARSETS, CODINGS: Delete.
+ * DEBUG, LPF, MORE.STUFF, MOTIVATION: Delete.
+ * aliases.ksh: Delete. (moved to xemacs-builds/steve)
+ * README.HYPERBOLE, README.OO-BROWSER: Delete.
+ * chr.png, chrm.png: Move to photos/.
+ * check_cygwin_setup.sh: Delete.
+ * gnu.xpm, gnu.xbm, sink.xbm: Delete.
+ * ms-kermit, ms-kermit-7bit: Delete.
+ * TERMS: Delete.
+
+ * DISTRIB, FTP, MACHINES, MAILINGLISTS, PACKAGES:
+ Delete and move to FAQ.
+
+ * BETA:
+ Delete and move to man/beta.texi.
+
+ * README: Update.
+
+2004-11-13 Ben Wing <ben(a)xemacs.org>
+
+ * CODING-STANDARDS: Delete and incorporate into Internals manual.
+
+2004-11-16 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * gnuserv.1: Various fixes and improvements.
+ * gnuserv.README: Strengthen self-deprecation.
+
+2004-11-22 Adrian Aichner <adrian(a)xemacs.org>
+
+ * TUTORIAL: Typo fixes, courtesy of Andreas Eder
+ <Andreas.Eder(a)gmx.net>.
+
2004-11-07 Malcolm Purvis <malcolmp(a)xemacs.org>
* photos/purvis.png, photos/purvism.png: New files.
1.2.2.1 +1 -1 XEmacs/xemacs/etc/ETAGS.EBNF
Index: ETAGS.EBNF
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/etc/ETAGS.EBNF,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- ETAGS.EBNF 2004/10/07 14:51:11 1.2
+++ ETAGS.EBNF 2005/03/15 05:19:36 1.2.2.1
@@ -2,7 +2,7 @@
This file contains two sections:
-1) An EBNF (Extended Backus Normal Form) description of the format of
+1) An EBNF (Extended Backus-Naur Form) description of the format of
the tags file created by etags.c and interpreted by etags.el;
2) A discussion of tag names and implicit tag names.
1.9.2.1 +12 -35 XEmacs/xemacs/etc/README
Index: README
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/etc/README,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -r1.9 -r1.9.2.1
--- README 2003/03/27 12:57:44 1.9
+++ README 2005/03/15 05:19:39 1.9.2.1
@@ -3,40 +3,21 @@
of interest to XEmacs users, some programs used by or with XEmacs, and
the file of on-line documentation for XEmacs.
-BETA Information about Beta versions
-CHARSETS Character set descriptions
-CODING-STANDARDS XEmacs C & Lisp coding standards
-CODINGS Character set codings
-COOKIES Urban Legend, or True Story? :-)
COPYING GNU Public License
-COPYING.LIB Library GNU Public License
-DEBUG Hints on how to debug XEmacs
-DISTRIB How to obtain copies of XEmacs and Emacs
+ChangeLog ChangeLog for etc/
+ETAGS.EBNF Description of TAGS file format
Emacs.ad Sample Resource file
-FTP XEmacs FTP Mirrors
-GNU GNU Manifesto
-GOATS Complete XEmacs internals documentation
+HELLO Hello in many languages (Mule test file)
InstallGuide Fast track to installation
-LPF Information about the League for Programming Freedom
-MACHINES List of known machines configurations (OLD)
-MAILINGLISTS List of available Mailing lists
-MORE.STUFF List of useful unbundled packages
-NEWS XEmacs 21.4 release information
-ORDERS
-ORDERS.EUROPE
-ORDERS.JAPAN Order forms for GNU software
-PACKAGES List of packages available for 21.4 release
+NEWS XEmacs 21.5 release information
+ONEWS Older release information
+OONEWS Even older release information
README This file
-README.HYPERBOLE
-README.OO-BROWSER How to obtain Hyperbole and the OO-Browser
-SERVICE How to obtain paid support for free software
-TERMS Information about termcap entries
TUTORIAL Tutorial for first time users (English version)
TUTORIAL.* Tutorials in non-English languages
+VEGETABLES XEmacs 21.5 code names
XKeysymDB X Keysym Database with Motif bindings
-aliases.sh Useful shell aliases
cbx.png "Created by XEmacs" logo
-check_cygwin_setup.sh Script to check for presence of Cygwin
ctags.1 Ctags man page
custom/ Images used in Custom mode
editclient.sh Either start up XEmacs or connect to a running one
@@ -44,18 +25,15 @@
emacsstrs.sco Special files for running on an SCO console
eos/ Images for EOS support (GUD)
etags.1 Etags man page
-gnu.xbm
-gnu.xpm Image of a Gnu.
gnuattach.1 Gnuattach man page
gnuclient.1 Gnuclient man page
gnudoit.1 Gnudoit man page
gnuserv.1 Gnuserv man page
gnuserv.README Original README file from gnuserv
-gnusref.tex Gnus reference card
gray1.xbm Gray bitmap
-ms-kermit
-ms-kermit-7bit Files for running XEmacs through kermit
-photos/*.Z Various pictures of XEmacs developers
+idd/ ?
+package-index.LATEST.gpg ?
+photos/* Various pictures of XEmacs developers
recycle.xpm
recycle2.xpm Two versions of oversized Recycle cursor
refcard.ps.gz Postscript version of XEmacs reference card
@@ -63,19 +41,18 @@
sample.Xdefaults (legacy -- to be removed)
sample.Xresources Example ~/.Xresources file
sample.init.el Example ~/.xemacs/init.el file
-sink.xbm A Gnu icon
sparcworks/ Support files for Sparcworks
tests/ Testcases for external widget
-time/ Image files for display-time
toolbar/ Image files for the toolbar
trash.xpm Garbage can icon
+unicode/ Unicode conversion tables
xemacs-beta.xpm XEmacs Beta logo
+xemacs-enhanced.png "XEmacs-enhanced" logo
xemacs-fe.sh XEmacs frontend driver
xemacs-icon.xpm
xemacs-icon2.xbm
xemacs-icon2.xpm
xemacs-icon3.xpm Various versions of an XEmacs WM icon
-xemacs-ja.1 Japanese XEmacs man page
xemacs.1 XEmacs man page
xemacs.xbm
xemacs.xpm XEmacs logo used on the splash screen
1.6.20.1 +55 -52 XEmacs/xemacs/etc/gnuserv.1
Index: gnuserv.1
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/etc/gnuserv.1,v
retrieving revision 1.6
retrieving revision 1.6.20.1
diff -u -r1.6 -r1.6.20.1
--- gnuserv.1 2001/04/12 18:20:50 1.6
+++ gnuserv.1 2005/03/15 05:19:41 1.6.20.1
@@ -17,29 +17,32 @@
.SH DESCRIPTION
.PP
+\fIgnuserv\fP is a server program run as a subprocess of XEmacs to handle
+all incoming and outgoing requests from \fIgnuclient\fP. It is not usually
+invoked directly, but is started from XEmacs by loading the \fIgnuserv\fP
+package and evaluating the Lisp form (gnuserv-start).
+.PP
\fIgnuclient\fP allows the user to request a running XEmacs process to
edit the named files or directories and/or evaluate lisp forms.
-Depending on your environment, it can be an X frame or a TTY frame.
+Depending on your environment, TTY, X, GTK, or MS Windows frames, as well as
+batch (frameless) execution of Lisp may be available.
One typical use for this is with a dialup connection to a machine on
which an XEmacs process is currently running.
.PP
\fIgnudoit\fP is a shell script frontend to ``gnuclient -batch -eval form''.
Its use is deprecated. Try to get used to calling gnuclient directly.
.PP
-\fIgnuserv\fP is the server program that is set running by XEmacs to
-handle all incoming and outgoing requests. It is not usually invoked
-directly, but is started from XEmacs by loading the \fIgnuserv\fP
-package and evaluating the Lisp form (gnuserv-start).
-.PP
\fIgnuattach\fP no longer exists. Its functionality has been replaced by
\fIgnuclient -nw\fP.
.SH OPTIONS
.PP
-\fIgnuclient\fP supports as much of the command line options of Emacs as
-makes sense in this context. In addition it adds a few of its own.
+\fIgnuclient\fP supports as many of the command line options of Emacs as
+make sense in this context. In addition it adds a few of its own.
.br
-Options with long names can also be specified using a double
-hyphen instead of a single one.
+For backward compatibility, ``long'' options (\fi.e.\fP, with doubled hyphen)
+may be specified using a single hyphen instead of a doubled one. Similarly,
+the ``-nw'' option is a historical artifact: a multiletter option with no
+double-hyphen version.
.TP 8
.BI \-nw
This option makes \fIgnuclient\fP act as a frontend such that XEmacs
@@ -49,7 +52,7 @@
the same machine as gnuclient. This is the default if the `DISPLAY'
environment variable is not set.
.TP 8
-.BI \-display " display, " \--display " display"
+.BI \--display " display, " \-display " display"
If this option is given or the `DISPLAY' environment variable is set
then gnuclient will tell XEmacs to edit files in a frame on the
specified X device.
@@ -59,7 +62,8 @@
made with the XEmacs process. Normally \fIgnuclient\fP waits until
all of the files on the command line have been finished with (their
buffers killed) by the XEmacs process, and all the forms have been
-evaluated.
+evaluated. Note that this is \fIdifferent\fP from XEmacs itself, where
+this option means to inhibit loading of the user init file.
.TP 8
.BI \-v
When this option is specified \fIgnuclient\fP will request for the
@@ -81,26 +85,25 @@
.BI \-f " function,"
Make Emacs execute the lisp function.
.TP 8
-.BI \-eval " form"
-Make Emacs execute the lisp form.
+.BI \--eval " form, " \-eval " form"
+Make Emacs execute the Lisp form.
.TP 8
.BI \-h " hostname"
Used only with Internet-domain sockets, this option specifies the host
machine which should be running \fIgnuserv\fP. If this option is not
specified then the value of the environment variable GNU_HOST is used
if set. If no hostname is specified, and the GNU_HOST variable is not
-set, an internet connection will not be attempted. N\.B.:
-\fIgnuserv\fP does NOT allow internet connections unless XAUTH
+set, an Internet connection will not be attempted. N\.B.:
+\fIgnuserv\fP does NOT allow Internet connections unless XAUTH
authentication is used or the GNU_SECURE variable has been specified
and points at a file listing all trusted hosts. (See SECURITY below.)
.br
-Note that an internet address may be specified instead of a hostname
-which can speed up connections to the server by quite a bit,
-especially if the client machine is running YP.
+An Internet address (``dotted-quad'') may be specified instead of a
+hostname. IPv6 support is not robust.
.br
-Note also that a hostname of \fBunix\fP can be used to specify that
+A hostname of \fBunix\fP can be used to specify that
the connection to the server should use a Unix-domain socket (if
supported) rather than an Internet-domain socket.
.TP 8
@@ -133,16 +136,15 @@
The cursor is put at line number 'n' if specified.
.SH SETUP
-\fIgnuserv\fP is packaged standardly with recent versions of XEmacs.
-Therefore, you should be able to start the server simply by evaluating
-the XEmacs Lisp form (gnuserv-start), or equivalently by typing
-`M-x gnuserv-start'.
+\fIgnuserv\fP is included with recent versions of XEmacs; no installation
+is required. The server must be started before clients may attempt to
+connect. Start the server by evaluating the Lisp form (gnuserv-start), or
+interactively by typing `M-x gnuserv-start'.
.SH CONFIGURATION
-The behavior of this suite of program is mostly controlled on the lisp
-side in Emacs and its behavior can be customized to a large extent.
-Type `M-x customize-group RET gnuserv RET' for easy access. More
-documentation can be found in the file `gnuserv.el'
+The behavior of this suite of programs can be customized to a large extent.
+Type `M-x customize-group RET gnuserv RET'. More documentation can be found
+in the file `gnuserv.el'
.SH EXAMPLE
.RS 4
@@ -156,62 +158,63 @@
.br
More examples and sample wrapper scripts are provided in the
-etc/gnuserv directory of the Emacs installation.
+etc/gnuserv directory of the XEmacs installation.
.SH SYSV IPC
-SysV IPC is used to communicate between \fIgnuclient\fP and
-\fIgnuserv\fP if the symbol SYSV_IPC is defined at the top of
-gnuserv.h. This is incompatible with both Unix-domain and
+SysV IPC is a build-time option, enabled by defining the symbol SYSV_IPC
+at the top of gnuserv.h. It is used to communicate between \fIgnuclient\fP
+and \fIgnuserv\fP. It is incompatible with both Unix-domain and
Internet-domain socket communication as described below. A file called
/tmp/gsrv??? is created as a key for the message queue, and if removed
will cause the communication between server and client to fail until
the server is restarted.
.SH UNIX-DOMAIN SOCKETS
-A Unix-domain socket is used to communicate between \fIgnuclient\fP
-and \fIgnuserv\fP if the symbol UNIX_DOMAIN_SOCKETS is defined at the
-top of gnuserv.h. A file called /tmp/gsrvdir????/gsrv is created for
+Unix-domain sockets are a build-time option, enabled by defining the symbol
+UNIX_DOMAIN_SOCKETS at the top of gnuserv.h. A Unix-domain socket is used
+to communicate between \fIgnuclient\fP
+and \fIgnuserv\fP. A file called /tmp/gsrvdir????/gsrv is created for
communication. If the symbol USE_TMPDIR is set at the top of gnuserv.h,
$TMPDIR, when set, is used instead of /tmp. If that file is deleted,
or TMPDIR has different values for the server and the client, communication
between server and client will fail. Only the user running gnuserv will be
able to connect to the socket.
.SH INTERNET-DOMAIN SOCKETS
-Internet-domain sockets are used to communicate between
-\fIgnuclient\fP and \fIgnuserv\fP if the symbol
-INTERNET_DOMAIN_SOCKETS is defined at the top of gnuserv.h. Both
-Internet-domain and Unix-domain sockets can be used at the same
-time. If a hostname is specified via -h or via the GNU_HOST
+Internet-domain sockets are a build-time option, enabled by defining the
+symbol INTERNET_DOMAIN_SOCKETS at the top of gnuserv.h. Internet-domain
+sockets are used to communicate between \fIgnuclient\fP and \fIgnuserv\fP.
+Both Internet-domain and Unix-domain sockets can be used at the same
+time. If a hostname is specified via -h or via the GNU_HOST
environment variable, \fIgnuclient\fP establish connections using an
-internet domain socket. If not, a local connection is attempted via
-either a unix-domain socket or SYSV IPC.
+Internet domain socket. If not, a local connection is attempted via
+either a Unix-domain socket or SYSV IPC.
.SH SECURITY
Using Internet-domain sockets, a more robust form of security is
needed that wasn't necessary with either Unix-domain sockets or SysV
IPC. Currently, two authentication protocols are supported to provide
this: MIT-MAGIC-COOKIE-1 (based on the X11 xauth(1) program) and a
simple host-based access control mechanism, hereafter called
-GNUSERV-1. The GNUSERV-1 protocol is always available, whereas support
-for MIT-MAGIC-COOKIE-1 may or may not have been enabled (via a #define
-at the top of gnuserv.h) at compile-time.
+GNUSERV-1. The GNUSERV-1 protocol is always available. Support
+for MIT-MAGIC-COOKIE-1 is enabled (by defining AUTH_MAGIC_COOKIE
+at the top of gnuserv.h.
.PP
\fIgnuserv\fP, using GNUSERV-1, performs a limited form of access
-control at the machine level. By default no internet-domain socket is
+control at the machine level. By default no Internet-domain socket is
opened. If the variable GNU_SECURE can be found in \fIgnuserv\fP's
environment, and it names a readable filename, then this file is
opened and assumed to be a list of hosts, one per line, from which the
server will allow requests. Connections from any other host will be
rejected. Even the machine on which \fIgnuserv\fP is running is not
-permitted to make connections via the internet socket unless its
+permitted to make connections via the Internet socket unless its
hostname is explicitly specified in this file. Note that a host may
be either a numeric IP address or a hostname, and that
.I any
user on an approved host may connect to your gnuserv and execute arbitrary
-elisp (e.g., delete all your files).
+Lisp (e.g., delete all your files).
If this file contains a lot of
-hostnames then the server may take quite a time to start up.
+hostnames then the server may take quite a long time to start up.
.PP
-When the MIT-MAGIC-COOKIE-1 protocol is enabled, an internet socket
+When the MIT-MAGIC-COOKIE-1 protocol is enabled, an Internet socket
\fIis\fP opened by default. \fIgnuserv\fP will accept a connection from
any host, and will wait for a "magic cookie" (essentially, a password)
to be presented by the client. If the client doesn't present the
@@ -267,7 +270,7 @@
.PP
.TP 8
.B DISPLAY
-Default X device to put edit frame.
+Default X (or GTK) device for display of edit frame.
.SH FILES
.PP
@@ -278,7 +281,7 @@
.B /tmp/gsrvdir???/gsrv
(unix domain sockets only)
.TP 8
-.B ~/.emacs
+.B ~/.xemacs/init.el
XEmacs customization file, see xemacs(1).
.SH SEE ALSO
.PP
1.2.34.1 +3 -2 XEmacs/xemacs/etc/gnuserv.README
Index: gnuserv.README
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/etc/gnuserv.README,v
retrieving revision 1.2
retrieving revision 1.2.34.1
diff -u -r1.2 -r1.2.34.1
--- gnuserv.README 1998/06/30 06:35:13 1.2
+++ gnuserv.README 2005/03/15 05:19:42 1.2.34.1
@@ -1,5 +1,6 @@
-This file is not meant to be proper documentation. See the file gnuserv.1 for
-more information.
+**** WARNING ****
+This file was never meant to be proper documentation, and now is bitrotted.
+See the file gnuserv.1 and/or the sources for more information.
****
NOTE: This version of gnuserv has some enhancements over the original version
No revision
No revision
1.1.2.1 +0 -0 XEmacs/xemacs/etc/configure-2.13
Index: configure-2.13
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/etc/configure-2.13,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
No revision
No revision
1.3.6.1 +0 -0 XEmacs/xemacs/etc/photos/chr.png
<<Binary file>>
1.3.6.1 +0 -0 XEmacs/xemacs/etc/photos/chrm.png
<<Binary file>>
No revision
No revision
1.33.4.1 +16 -16 XEmacs/xemacs/info/dir
Index: dir
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/info/dir,v
retrieving revision 1.33
retrieving revision 1.33.4.1
diff -u -r1.33 -r1.33.4.1
--- dir 2002/11/11 14:19:11 1.33
+++ dir 2005/03/15 05:20:21 1.33.4.1
@@ -36,23 +36,23 @@
XEmacs 21.5
===========
-* XEmacs:: XEmacs User's Manual.
-* Lispref:: XEmacs Lisp Reference Manual.
-* New-Users-Guide:: Getting Started with XEmacs.
-* XEmacs-FAQ:: XEmacs Frequently Asked Questions for 21.4.
-* Info:: Guide to Info, the XEmacs online documentation system.
-* Internals:: Guide to the internals of XEmacs.
+* XEmacs: (xemacs). XEmacs Editor.
+* Lispref: (lispref). XEmacs Lisp Reference Manual.
+* Intro: (new-users-guide). Introduction to the XEmacs Editor.
+* FAQ: (xemacs-faq). XEmacs FAQ.
+* Info: (info). Documentation browsing system.
+* Internals: (internals). XEmacs Internals Manual.
+
Other Documentation:
-* CL:: A Common Lisp compatibility package for Emacs-Lisp.
-* Custom:: Customization Library for Emacs.
-* Emodules:: XEmacs dynamically loadable module support.
-* External-Widget:: Use XEmacs as a text widget inside of another program.
-* Standards:: GNU coding standards.
-* Term:: A mode to control inferior processes (a comint replacement)
-* Termcap:: The termcap library, which enables application programs
- to handle all types of character-display terminals.
-* Texinfo:: The GNU documentation format.
-* Widget:: An Emacs Lisp widget library.
+* Common Lisp: (cl). XEmacs Common Lisp emulation package.
+* Customizations: (custom). Customization Library.
+* Emodules: (emodules). XEmacs dynamically loadable module support.
+* External Widget: (external-widget). External Client Widget.
+* Standards: (standards). GNU coding standards.
+* Term mode: (term). XEmacs Terminal Emulator Mode.
+* Termcap: (termcap). Termcap library of the GNU system.
+* Texinfo: (texinfo). The GNU documentation format.
+* Widgets: (widget). The Emacs Widget Library.
No revision
No revision
1.178.2.3 +29 -1 XEmacs/xemacs/lib-src/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lib-src/ChangeLog,v
retrieving revision 1.178.2.2
retrieving revision 1.178.2.3
diff -u -r1.178.2.2 -r1.178.2.3
--- ChangeLog 2005/02/01 15:46:35 1.178.2.2
+++ ChangeLog 2005/03/15 05:20:24 1.178.2.3
@@ -1,5 +1,10 @@
-2005-01-04 Malcolm Purvis <malcolmp(a)xemacs.org>
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
+ * XEmacs 21.5.20 "cilantro" is released.
+
+2005-03-07 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * config.values.in:
* config.values.sh (FileContents): Different regex for autoconf
2.59.
@@ -7,6 +12,29 @@
* make-docfile.c (write_c_args): Handle UNUSED, USED_IF macros.
(scan_c_file): Handle nested parens in DEFUN argument lists.
+
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.19 "chives" is released.
+
+2005-01-29 Vin Shelton <acs(a)xemacs.org>
+
+ * movemail.c (popmail): Pass error string as format parameter
+ instead of as part of format string. Security fixes for
+ CAN-2005-0100.
+
+2005-02-03 Jerry James <james(a)xemacs.org>
+
+ * etags.c: Update to author version 17.11.
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * fakemail.c (main): Add args to fix warning.
+
+2005-01-25 Ben Wing <ben(a)xemacs.org>
+
+ * insert-data-in-exec.c (main):
+ Need to open everything as binary.
2004-12-06 Ben Wing <ben(a)xemacs.org>
1.23.2.1 +30 -4 XEmacs/xemacs/lib-src/config.values.in
Index: config.values.in
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lib-src/config.values.in,v
retrieving revision 1.23
retrieving revision 1.23.2.1
diff -u -r1.23 -r1.23.2.1
--- config.values.in 2004/05/14 15:34:36 1.23
+++ config.values.in 2005/03/15 05:20:24 1.23.2.1
@@ -22,15 +22,18 @@
CFLAGS "@CFLAGS@"
CPP "@CPP@"
CPPFLAGS "@CPPFLAGS@"
-CXXFLAGS "@CXXFLAGS@"
DEFS "@DEFS@"
DOCDIR "@DOCDIR@"
DOCDIR_USER_DEFINED "@DOCDIR_USER_DEFINED@"
+ECHO_C "@ECHO_C@"
+ECHO_N "@ECHO_N@"
+ECHO_T "@ECHO_T@"
+EGREP "@EGREP@"
ETCDIR "@ETCDIR@"
ETCDIR_USER_DEFINED "@ETCDIR_USER_DEFINED@"
EXEC_PREFIX "@EXEC_PREFIX@"
EXEC_PREFIX_USER_DEFINED "@EXEC_PREFIX_USER_DEFINED@"
-FFLAGS "@FFLAGS@"
+EXEEXT "@EXEEXT@"
GTK_CONFIG "@GTK_CONFIG@"
INFODIR "@INFODIR@"
INFODIR_USER_DEFINED "@INFODIR_USER_DEFINED@"
@@ -43,11 +46,13 @@
INSTALL_PROGRAM "@INSTALL_PROGRAM@"
INSTALL_SCRIPT "@INSTALL_SCRIPT@"
LDFLAGS "@LDFLAGS@"
+LIBOBJS "@LIBOBJS@"
LIBS "@LIBS@"
LIBSTDCPP "@LIBSTDCPP@"
LISPDIR "@LISPDIR@"
LISPDIR_USER_DEFINED "@LISPDIR_USER_DEFINED@"
LN_S "@LN_S@"
+LTLIBOBJS "@LTLIBOBJS@"
MAKE_DOCFILE "@MAKE_DOCFILE@"
MAKE_SUBDIR "@MAKE_SUBDIR@"
MODARCHDIR "@MODARCHDIR@"
@@ -57,13 +62,20 @@
MOD_CC "@MOD_CC@"
MOD_INSTALL_PROGRAM "@MOD_INSTALL_PROGRAM@"
OBJECT_TO_BUILD "@OBJECT_TO_BUILD@"
+OBJEXT "@OBJEXT@"
+PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@"
+PACKAGE_NAME "@PACKAGE_NAME@"
PACKAGE_PATH "@PACKAGE_PATH@"
PACKAGE_PATH_USER_DEFINED "@PACKAGE_PATH_USER_DEFINED@"
+PACKAGE_STRING "@PACKAGE_STRING@"
+PACKAGE_TARNAME "@PACKAGE_TARNAME@"
+PACKAGE_VERSION "@PACKAGE_VERSION@"
+PATH_SEPARATOR "@PATH_SEPARATOR@"
PREFIX "@PREFIX@"
PREFIX_USER_DEFINED "@PREFIX_USER_DEFINED@"
PROGNAME "@PROGNAME@"
RANLIB "@RANLIB@"
-RECURSIVE_MAKE "@RECURSIVE_MAKE@"
+RECURSIVE_MAKE_ARGS "@RECURSIVE_MAKE_ARGS@"
SET_MAKE "@SET_MAKE@"
SHELL "@SHELL@"
SITELISPDIR "@SITELISPDIR@"
@@ -79,14 +91,25 @@
X_LIBS "@X_LIBS@"
X_PRE_LIBS "@X_PRE_LIBS@"
YACC "@YACC@"
+abs_builddir "@abs_builddir@"
+abs_srcdir "@abs_srcdir@"
+abs_top_builddir "@abs_top_builddir@"
+abs_top_srcdir "@abs_top_srcdir@"
+ac_ct_CC "@ac_ct_CC@"
+ac_ct_RANLIB "@ac_ct_RANLIB@"
archlibdir "@archlibdir@"
bindir "@bindir@"
bitmapdir "@bitmapdir@"
blddir "@blddir@"
+build "@build@"
+build_alias "@build_alias@"
+build_cpu "@build_cpu@"
+build_os "@build_os@"
+build_vendor "@build_vendor@"
+builddir "@builddir@"
c_switch_all "@c_switch_all@"
c_switch_general "@c_switch_general@"
c_switch_window_system "@c_switch_window_system@"
-canonical "@canonical@"
configuration "@configuration@"
configure_input "@configure_input@"
datadir "@datadir@"
@@ -103,6 +126,7 @@
extra_includes "@extra_includes@"
extra_objs "@extra_objs@"
have_esd_config "@have_esd_config@"
+host_alias "@host_alias@"
includedir "@includedir@"
infodir "@infodir@"
infopath "@infopath@"
@@ -147,6 +171,8 @@
start_flags "@start_flags@"
statedir "@statedir@"
sysconfdir "@sysconfdir@"
+target_alias "@target_alias@"
+top_builddir "@top_builddir@"
top_srcdir "@top_srcdir@"
version "@version@"
with_modules "@with_modules@"
1.32.2.1 +67 -17 XEmacs/xemacs/lib-src/etags.c
Index: etags.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lib-src/etags.c,v
retrieving revision 1.32
retrieving revision 1.32.2.1
diff -u -r1.32 -r1.32.2.1
--- etags.c 2004/10/07 14:51:19 1.32
+++ etags.c 2005/03/15 05:20:24 1.32.2.1
@@ -1,5 +1,5 @@
/* Tags file maker to go with GNU Emacs -*- coding: latin-1 -*-
- Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2001, 2002
+ Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2004
Free Software Foundation, Inc. and Ken Arnold
This file is not considered part of GNU Emacs.
@@ -40,7 +40,7 @@
* configuration file containing regexp definitions for etags.
*/
-char pot_etags_version[] = "@(#) pot revision number is 17.6";
+char pot_etags_version[] = "@(#) pot revision number is 17.11";
#define TRUE 1
#define FALSE 0
@@ -342,6 +342,7 @@
static void Cplusplus_entries __P((FILE *));
static void Cstar_entries __P((FILE *));
static void Erlang_functions __P((FILE *));
+static void Forth_words __P((FILE *));
static void Fortran_functions __P((FILE *));
static void HTML_labels __P((FILE *));
static void Lisp_functions __P((FILE *));
@@ -630,6 +631,12 @@
"In Erlang code, the tags are the functions, records and macros\n\
defined in the file.";
+char *Forth_suffixes [] =
+ { "fth", "tok", NULL };
+static char Forth_help [] =
+"In Forth code, tags are words defined by `:',\n\
+constant, code, create, defer, value, variable, buffer:, field.";
+
static char *Fortran_suffixes [] =
{ "F", "f", "f90", "for", NULL };
static char Fortran_help [] =
@@ -777,6 +784,7 @@
{ "c*", no_lang_help, Cstar_entries, Cstar_suffixes },
{ "cobol", Cobol_help, Cobol_paragraphs, Cobol_suffixes },
{ "erlang", Erlang_help, Erlang_functions, Erlang_suffixes },
+ { "forth", Forth_help, Forth_words, Forth_suffixes },
{ "fortran", Fortran_help, Fortran_functions, Fortran_suffixes },
{ "html", HTML_help, HTML_labels, HTML_suffixes },
{ "java", Cjava_help, Cjava_entries, Cjava_suffixes },
@@ -1179,12 +1187,14 @@
globals = TRUE;
}
+ /* When the optstring begins with a '-' getopt_long does not rearrange the
+ non-options arguments to be at the end, but leaves them alone. */
optstring = "-";
#ifdef ETAGS_REGEXPS
optstring = "-r:Rc:";
#endif /* ETAGS_REGEXPS */
- if (LONG_OPTIONS)
- optstring += 1;
+ if (!LONG_OPTIONS)
+ optstring += 1; /* remove the initial '-' */
optstring = concat (optstring,
"Cf:Il:o:SVhH",
(CTAGS) ? "BxdtTuvw" : "aDi:");
@@ -1284,6 +1294,7 @@
/* NOTREACHED */
}
+ /* No more options. Store the rest of arguments. */
for (; optind < argc; optind++)
{
argbuffer[current_arg].arg_type = at_filename;
@@ -4074,10 +4085,18 @@
char_pointer = line_buffer.buffer, \
TRUE); \
)
-#define LOOKING_AT(cp, keyword) /* keyword is a constant string */ \
- (strneq ((cp), keyword, sizeof(keyword)-1) /* cp points at keyword */ \
- && notinname ((cp)[sizeof(keyword)-1]) /* end of keyword */ \
- && ((cp) = skip_spaces((cp)+sizeof(keyword)-1))) /* skip spaces */
+
+#define LOOKING_AT(cp, kw) /* kw is the keyword, a literal string */ \
+ ((assert("" kw), TRUE) /* syntax error if not a literal string */ \
+ && strneq ((cp), kw, sizeof(kw)-1) /* cp points at kw */ \
+ && notinname ((cp)[sizeof(kw)-1]) /* end of kw */ \
+ && ((cp) = skip_spaces((cp)+sizeof(kw)-1))) /* skip spaces */
+
+/* Similar to LOOKING_AT but does not use notinname, does not skip */
+#define LOOKING_AT_NOCASE(cp, kw) /* the keyword is a literal string */ \
+ ((assert("" kw), TRUE) /* syntax error if not a literal string */ \
+ && strncaseeq ((cp), kw, sizeof(kw)-1) /* cp points at kw */ \
+ && ((cp) += sizeof(kw)-1)) /* skip spaces */
/*
* Read a file, but do no processing. This is used to do regexp
@@ -4955,7 +4974,7 @@
/*
- * Postscript tag functions
+ * Postscript tags
* Just look for lines where the first character is '/'
* Also look at "defineps" for PSWrap
* Ideas by:
@@ -4986,6 +5005,43 @@
/*
+ * Forth tags
+ * Ignore anything after \ followed by space or in ( )
+ * Look for words defined by :
+ * Look for constant, code, create, defer, value, and variable
+ * OBP extensions: Look for buffer:, field,
+ * Ideas by Eduardo Horvath <eeh(a)netbsd.org> (2004)
+ */
+static void
+Forth_words (inf)
+ FILE *inf;
+{
+ register char *bp;
+
+ LOOP_ON_INPUT_LINES (inf, lb, bp)
+ while ((bp = skip_spaces (bp))[0] != '\0')
+ if (bp[0] == '\\' && iswhite(bp[1]))
+ break; /* read next line */
+ else if (bp[0] == '(' && iswhite(bp[1]))
+ do /* skip to ) or eol */
+ bp++;
+ while (*bp != ')' && *bp != '\0');
+ else if ((bp[0] == ':' && iswhite(bp[1]) && bp++)
+ || LOOKING_AT_NOCASE (bp, "constant")
+ || LOOKING_AT_NOCASE (bp, "code")
+ || LOOKING_AT_NOCASE (bp, "create")
+ || LOOKING_AT_NOCASE (bp, "defer")
+ || LOOKING_AT_NOCASE (bp, "value")
+ || LOOKING_AT_NOCASE (bp, "variable")
+ || LOOKING_AT_NOCASE (bp, "buffer:")
+ || LOOKING_AT_NOCASE (bp, "field"))
+ get_tag (skip_spaces (bp), NULL); /* Yay! A definition! */
+ else
+ bp = skip_non_spaces (bp);
+}
+
+
+/*
* Scheme tag functions
* look for (def... xyzzy
* (def... (xyzzy
@@ -4993,7 +5049,6 @@
* (set! xyzzy
* Original code by Ken Haase (1985?)
*/
-
static void
Scheme_functions (inf)
FILE *inf;
@@ -5212,11 +5267,6 @@
}
-/* Similar to LOOKING_AT but does not use notinname, does not skip */
-#define LOOKING_AT_NOCASE(cp, kw) /* kw is a constant string */ \
- (strncaseeq ((cp), kw, sizeof(kw)-1) /* cp points at kw */ \
- && ((cp) += sizeof(kw)-1)) /* skip spaces */
-
/*
* HTML support.
* Contents of <title>, <h1>, <h2>, <h3> are tags.
@@ -6501,7 +6551,7 @@
: *s1 - *s2);
}
-/* Skip spaces, return new pointer. */
+/* Skip spaces (end of string is not space), return new pointer. */
static char *
skip_spaces (cp)
char *cp;
@@ -6511,7 +6561,7 @@
return cp;
}
-/* Skip non spaces, return new pointer. */
+/* Skip non spaces, except end of string, return new pointer. */
static char *
skip_non_spaces (cp)
char *cp;
1.7.2.1 +1 -1 XEmacs/xemacs/lib-src/fakemail.c
Index: fakemail.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lib-src/fakemail.c,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -r1.7 -r1.7.2.1
--- fakemail.c 2004/09/20 19:19:10 1.7
+++ fakemail.c 2005/03/15 05:20:25 1.7.2.1
@@ -34,7 +34,7 @@
#include <stdio.h>
#include <stdlib.h>
int
-main ()
+main (int argc, char *argv[])
{
/* Linux /bin/mail, if it exists, is NOT the Unix v7 mail that
fakemail depends on! This causes garbled mail. Better to
1.2.2.1 +1 -1 XEmacs/xemacs/lib-src/insert-data-in-exec.c
Index: insert-data-in-exec.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lib-src/insert-data-in-exec.c,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- insert-data-in-exec.c 2004/04/17 13:29:20 1.2
+++ insert-data-in-exec.c 2005/03/15 05:20:26 1.2.2.1
@@ -121,7 +121,7 @@
fprintf(stderr, "dumped_data found at offset 0x%lx, patching.\n", i);
sprintf(msg, "Opening %s failed", argv[2]);
- dump = fopen(argv[2], "r");
+ dump = fopen(argv[2], "rb");
if(!dump) {
perror(msg);
exit(1);
1.20.8.1 +5 -5 XEmacs/xemacs/lib-src/movemail.c
Index: movemail.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lib-src/movemail.c,v
retrieving revision 1.20
retrieving revision 1.20.8.1
diff -u -r1.20 -r1.20.8.1
--- movemail.c 2002/03/13 08:51:59 1.20
+++ movemail.c 2005/03/15 05:20:26 1.20.8.1
@@ -746,14 +746,14 @@
server = pop_open (0, user, password, POP_NO_GETPASS);
if (! server)
{
- error (pop_error, NULL, NULL);
+ error ("%s", pop_error, NULL);
return (1);
}
VERBOSE(("stat'ing messages\n"));
if (pop_stat (server, &nmsgs, &nbytes))
{
- error (pop_error, NULL, NULL);
+ error ("%s", pop_error, NULL);
return (1);
}
@@ -801,7 +801,7 @@
mbx_delimit_begin (mbf);
if (pop_retr (server, i, mbx_write, mbf) != POP_RETRIEVED)
{
- error (Errmsg, NULL, NULL);
+ error ("%s", Errmsg, NULL);
close (mbfi);
return (1);
}
@@ -849,7 +849,7 @@
VERBOSE(("deleting message %d \n", i));
if (pop_delete (server, i))
{
- error (pop_error, NULL, NULL);
+ error ("%s", pop_error, NULL);
pop_close (server);
return (1);
}
@@ -860,7 +860,7 @@
VERBOSE(("closing server \n"));
if (pop_quit (server))
{
- error (pop_error, NULL, NULL);
+ error ("%s", pop_error, NULL);
return (1);
}
No revision
No revision
1.599.2.6 +770 -41 XEmacs/xemacs/lisp/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/ChangeLog,v
retrieving revision 1.599.2.5
retrieving revision 1.599.2.6
diff -u -r1.599.2.5 -r1.599.2.6
--- ChangeLog 2005/03/05 18:09:20 1.599.2.5
+++ ChangeLog 2005/03/15 05:20:35 1.599.2.6
@@ -1,52 +1,781 @@
-2005-03-02 Stephen J. Turnbull <stephen(a)xemacs.org>
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
- * 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 <kehoea(a)parhasard.net>
-
- 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.
+ * XEmacs 21.5.20 "cilantro" is released.
+
+2005-03-04 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * unicode.el (decode-char): New. This is what the FSF Mule API
+ calls unicode-to-char. The API of the function is more general,
+ but support for anything beyond Unicode isn't implemented, and I
+ can't see why it would be, given that make-char does a fine job
+ already.
+ * unicode.el (encode-char): New. This is what the FSF Mule calls
+ char-to-unicode.
+
+2005-02-28 Simon Josefsson <jas(a)extundo.com>
+
+ * about.el (xemacs-hackers): Add jas.
+ (about-other-current-hackers): Likewise.
+ (about-url-alist): Add URL for jas.
+ (about-personal-info): Document jas.
+ (about-hacker-contribution): Describe jas contributions.
+
+2005-02-28 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * select.el (selected-text-type): Removed.
+ * select.el (selection-preferred-types): New.
+ * select.el ('selected-text-type): New.
+ Rename selected-text-type to selection-preferred-types, now that
+ it's full of image types as fallbacks. Define an alias to the old
+ name.
+ * select.el (kill-primary-selection): deleted -> delete
+
+ * select.el (get-selection-no-error):
+ * select.el (get-selection):
+ * select.el (get-selection-foreign):
+ Reference selection-preferred-types instead of giving details of
+ which types these functions default to wanting.
+
+ * select.el (select-make-extent-for-selection): Comment that we
+ need to hook something similar into the rectangle functions.
+
+ * select.el (select-convert-in):
+ If we don't have a handler for an X11 selection, pass the value
+ itself as a string. Fixes X11 atoms.
+
+ * select.el (select-convert-to-timestamp): New.
+ Uses get-xemacs-selection-timestamp.
+
+ * select.el (select-convert-to-utf-8-text): New.
+ * select.el (select-convert-from-text): Removed.
+ The change in select-convert-in makes this irrelevant.
+
+ * select.el (select-convert-from-length): Removed.
+ We have a more generic integer conversion routine here.
+
+ * select.el (select-convert-from-filename): Removed.
+ The generic string conversion handles this.
+
+ * select.el (select-convert-from-ip-address): New.
+ Whee.
+
+ * select.el (select-convert-from-utf-8-text): New.
+ * select.el (select-convert-from-utf-16-le-text): New.
+ The various Mozilla-specific types need the utf-16 conversion;
+ utf-8 conversion is _in_ this season, didn't you know?
+
+ * select.el (select-convert-from-image-data): New.
+ Generic convert-an-image-to-a-space-with-end-glyph function. Used
+ by the next six functions.
+
+ * select.el (select-convert-from-image/gif): New.
+ * select.el (select-convert-from-image/jpeg): New.
+ * select.el (select-convert-from-image/png): New.
+ * select.el (select-convert-from-image/tiff): New.
+ * select.el (select-convert-from-image/xpm): New.
+ * select.el (select-convert-from-image/xbm): New.
+ Check if we have support for a given image format; if so, pass
+ back a space with the corresponding selection's image attached as
+ glyph data.
+
+ * select.el (select-convert-from-cf-unicodetext):
+ * select.el (select-convert-to-cf-text):
+ * select.el (select-convert-to-cf-unicodetext):
+ Check that the corresponding Windows coding systems are available
+ before trying to convert.
+ * select.el (selection-converter-out-alist):
+ * select.el (selection-converter-in-alist):
+ Update both lists to reflect the other changes in the file.
+
+ * x-select.el (x-selected-text-type):
+ Update the define-obsolete-variable-alias now selected-text-type
+ is called something else.
+
+2005-02-25 Adrian Aichner <adrian(a)xemacs.org>
+
+ * diagnose.el: Fix typo.
+ * diagnose.el (show-memory-usage): Sort sections by total usage.
+
+2005-02-23 Adrian Aichner <adrian(a)xemacs.org>
+
+ * cmdloop.el (keyboard-quit): Remove workaround for
+ `region-active-p' not making sure active region is in current
+ buffer now that it does.
+ * minibuf.el (minibuffer-keyboard-quit): Ditto.
+ * simple.el (region-active-p): `region-active-p' to only return t
+ when active region is in current buffer.
+
+2005-02-20 Adrian Aichner <adrian(a)xemacs.org>
+
+ * replace.el (operate-on-non-matching-lines): Append matching
+ lines to temp buffer to avoid prohibitive GC as a result of
+ enormous string consing.
+ * replace.el (operate-on-matching-lines): Ditto.
+
+2005-02-21 Ben Wing <ben(a)xemacs.org>
+
+ * glyphs.el:
+ * glyphs.el (make-image-specifier):
+ * glyphs.el (glyph-property):
+ * glyphs.el (convert-glyph-property-into-specifier):
+ * glyphs.el (set-glyph-property):
+ * glyphs.el (glyph-image):
+ * glyphs.el (set-glyph-image):
+ * glyphs.el (glyph-contrib-p):
+ * glyphs.el (glyph-contrib-p-instance):
+ * glyphs.el (set-glyph-contrib-p):
+ * glyphs.el (glyph-baseline):
+ * glyphs.el (set-glyph-baseline):
+ * glyphs.el (make-glyph):
+ Update documentation of `make-glyph' and `make-image-specifier'
+ to more clearly document image instantiators and describe how
+ errors are handled in make-glyph. Also fix symbol references in
+ doc strings to use `symbol' format, not 'symbol.
+
2005-02-21 Stephen J. Turnbull <stephen(a)xemacs.org>
* about.el (about-xemacs):
Compute release date from xemacs-release-date.
+
+2005-02-19 Norbert Koch <viteno(a)xemacs.org>
+
+ * package-ui.el (pui-list-packages): The longest package name now
+ has 20 characters. Adapt the display.
+
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.19 "chives" is released.
+
+2005-02-16 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * buffer.el (pop-to-buffer):
+ * window-xemacs.el (display-buffer):
+ Document use of `same-window-buffer-names,' `same-window-regexps'
+ by pop-to-buffer and display-buffer.
+
+2005-02-09 Ben Wing <ben(a)xemacs.org>
+
+ * dumped-lisp.el (preloaded-file-list):
+ Move paragraphs later so that decode-coding-string is defined.
+
+2005-02-09 Ben Wing <ben(a)xemacs.org>
+
+ * paragraphs.el (sentence-end):
+ Don't have literal chars in the string and don't put the extended
+ chars in the string unless (featurep 'mule).
+
+2005-02-09 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * mule/european.el: Fix a comment typo pointed out by Jerry James
+ in psu0olr8z7.fsf(a)diannao.ittc.ku.edu.
+
+2005-02-09 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * mule/european.el: Create the 8859-16 character set and coding system.
+ * mule/european.el (latin-iso8859-16): Make the character set available.
+
+2005-02-09 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * unicode.el (load-unicode-tables):
+ Initialise mapping tables for ISO
+ 8859-16--cf. s3tk6pieyuk.fsf(a)magellan.suse.de , DOUBLE LOW-9
+ QUOTATION MARK is very much used for German and in Central Europe.
+
+2005-02-09 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * unicode.el:
+ Add coding system aliases for utf-16-be and utf-16-le, for
+ improved compatibility with Mule-UCS and the FSF.
+
+2005-02-07 Ben Wing <ben(a)xemacs.org>
+
+ * menubar.el (find-menu-item-1):
+ Forgot to rename this when find-menu-item-1 was extracted.
+
+2005-02-03 Ben Wing <ben(a)xemacs.org>
+
+ * autoload.el (batch-update-autoloads):
+ Use correct parameters when invoking older interface.
+
+2005-02-03 Ben Wing <ben(a)xemacs.org>
+
+ * shadow.el (find-emacs-lisp-shadows):
+ Ignore custom-defines.
+
+2005-02-03 Ben Wing <ben(a)xemacs.org>
+
+ * about.el:
+ * about.el (xemacs-hackers):
+ * about.el (about-personal-info):
+ * about.el (about-hacker-contribution):
+ * about.el (about-hackers):
+ Add Aidan, alexm. Update my info. Sort list of ancillary
+ contributors, delete a couple of duplicates.
+
+2005-02-03 Ben Wing <ben(a)xemacs.org>
+
+ * dumped-lisp.el (preloaded-file-list):
+ Document that paragraphs needs easy-mmode.
+
+2005-02-03 Ben Wing <ben(a)xemacs.org>
+
+ * packages.el (package-suppress): New.
+ Add actual command to suppress packages.
+
+2005-02-03 Jerry James <james(a)xemacs.org>
+
+ * dumped-lisp.el (preloaded-file-list): Add easy-mmode.
+ * paragraphs.el (paragraphs): Undo the require as it is now
+ unnecessary.
+
+2005-02-03 Jerry James <james(a)xemacs.org>
+
+ * paragraphs.el: Require easy-mmode, due to its move in core.
+ * paragraphs.el (sentence-end): Fix a typo.
+
+2005-02-03 Ben Wing <ben(a)xemacs.org>
+
+ * regexp-opt.el:
+ * regexp-opt.el (regexp-opt):
+ * regexp-opt.el (regexp-opt-not-groupie*-re): New.
+ * regexp-opt.el (regexp-opt-group):
+ Update to latest version in package tree.
+
+2005-02-03 Ben Wing <ben(a)xemacs.org>
+
+ * paragraphs.el:
+ * paragraphs.el (paragraphs): New.
+ * paragraphs.el (use-hard-newlines): Removed.
+ * paragraphs.el (paragraph-start):
+ * paragraphs.el (paragraph-separate):
+ * paragraphs.el (sentence-end-double-space): New.
+ * paragraphs.el (sentence-end-without-period): New.
+ * paragraphs.el (sentence-end):
+ * paragraphs.el (forward-paragraph):
+ * paragraphs.el (backward-paragraph):
+ * paragraphs.el (mark-paragraph):
+ * paragraphs.el (forward-sentence):
+ * paragraphs.el (mark-end-of-sentence):
+ * paragraphs.el (transpose-sentences):
+ Sync to 21.3. Depends on easy-mmode in core.
+
+2005-02-02 Ben Wing <ben(a)xemacs.org>
+
+ * easy-mmode.el, regexp-opt.el:
+ Move these files into core.
+ Uncomment stuff depending on new custom.el.
+
+ * autoload.el:
+ * autoload.el (generate-autoload-function): New.
+ * autoload.el (autoload-feature-suffix): New.
+ * autoload.el (generate-autoload-section-continuation): New.
+ * autoload.el (make-autoload):
+ * autoload.el (generate-file-autoloads):
+ * autoload.el (generate-autoload-type-section):
+ * autoload.el (process-one-lisp-autoload): New.
+ * autoload.el (generate-lisp-file-autoloads-1):
+ * autoload.el (generate-c-file-autoloads-1):
+ * autoload.el (generate-custom-defines): New.
+ * autoload.el (print-autoload): Removed.
+ * autoload.el (autoload-print-form): New.
+ * autoload.el (defcustom):
+ * autoload.el (autoload-read-section-header): New.
+ * autoload.el (update-file-autoloads):
+ * autoload.el (update-autoloads-here): Removed.
+ * autoload.el (batch-update-directory-custom-defines): New.
+ * autoload.el (update-autoload-files):
+ * autoload.el (autoload-update-directory-autoloads): Removed.
+ * autoload.el (batch-update-directory-autoloads): New.
+ * autoload.el (autoload-featurep-protect-autoloads):
+ * autoload.el (update-autoloads-from-directory): Removed.
+ * autoload.el (update-custom-define-files): New.
+ * autoload.el (autoload-make-feature-name):
+ * autoload.el (batch-update-autoloads):
+ * autoload.el (batch-update-directory): Removed.
+ * autoload.el (batch-update-one-directory): Removed.
+ * autoload.el (batch-force-update-one-directory): Removed.
+ Major update. Sync with FSF 21.2.
+ Create the ability to make custom-defines files.
+
+ * update-elc-2.el (batch-update-elc-2):
+ * update-elc.el (do-autoload-commands):
+ Rewrite to use new autoload API.
+
+ * update-elc.el (lisp-files-needing-early-byte-compilation):
+ Add easy-mmode.
+
+2005-02-02 Ben Wing <ben(a)xemacs.org>
+
+ * behavior.el:
+ * behavior.el (behavior-group-hash-table): New.
+ * behavior.el (behavior-override-hash-table): New.
+ * behavior.el (define-behavior): Removed.
+ * behavior.el (behavior-group-p): New.
+ * behavior.el (check-behavior-group): New.
+ * behavior.el (override-behavior):
+ * behavior.el (define-behavior-group):
+ * behavior.el (read-behavior):
+ * behavior.el (compute-behavior-group-children): New.
+ * behavior.el (behavior-menu-filter-1): New.
+ * behavior.el (behavior-menu-filter): New.
+ Major update. Add documentation of how it works.
+
+ * behavior-defs.el:
+ * behavior-defs.el (tty):
+ * behavior-defs.el ('scroll-in-place): Removed.
+ * behavior-defs.el ('mouse-avoidance): Removed.
+ * behavior-defs.el ('jka-compr): Removed.
+ * behavior-defs.el ('efs): Removed.
+ * behavior-defs.el ('resize-minibuffer): Removed.
+ * behavior-defs.el ('func-menu): Removed.
+ * behavior-defs.el ('mwheel): Removed.
+ * behavior-defs.el ('recent-files): Removed.
+ * behavior-defs.el ('filladapt): Removed.
+ * behavior-defs.el ('tty)): New.
+ * behavior-defs.el ('toolbars)): New.
+ * behavior-defs.el ('menus)): New.
+ * behavior-defs.el ('mouse)): New.
+ * behavior-defs.el ('editing)): New.
+ * behavior-defs.el ('keyboard)): New.
+ * behavior-defs.el ('files)): New.
+ * behavior-defs.el ('games)): New.
+ * behavior-defs.el ('processes)): New.
+ * behavior-defs.el ('display)): New.
+ * behavior-defs.el ('programming)): New.
+ * behavior-defs.el ('international)): New.
+ * behavior-defs.el ('buffers-and-windows)): New.
+ * behavior-defs.el ('internet)): New.
+ * behavior-defs.el ('compose-mail): New.
+ Only define the basic behavior groups here.
+ Move the definitions for particular packages to the
+ appropriate package files.
+
+ * mwheel.el:
+ * mwheel.el ('mwheel): New.
+ Add define-behavior for mwheel.
+
+2005-02-02 Ben Wing <ben(a)xemacs.org>
+
+ * easymenu.el (easy-menu-add):
+ * easymenu.el (easy-menu-remove):
+ * map-ynp.el (map-y-or-n-p):
+ Use normalize-menu-text not normalize-menu-item-name.
+
+ * menubar-items.el (submenu-generate-accelerator-spec): Removed.
+ * menubar.el (submenu-generate-accelerator-spec): New.
+ Move to menubar.el and rewrite for cleanliness.
+
+ * menubar-items.el (coding-system-menu-filter):
+ Use menu-split-long-menu-and-sort.
+
+ * menubar-items.el (menu-item-strip-accelerator-spec): Removed.
+ * menubar-items.el (menu-item-generate-accelerator-spec): Removed.
+ * menubar-items.el (menu-max-items): Removed.
+ * menubar-items.el (menu-submenu-max-items): Removed.
+ * menubar-items.el (menu-submenu-name-format): Removed.
+ * menubar-items.el (menu-split-long-menu): Removed.
+ * menubar-items.el (menu-sort-menu): Removed.
+ * menubar.el (menu-item-strip-accelerator-spec): New.
+ * menubar.el (menu-item-generate-accelerator-spec): New.
+ * menubar.el (menu-max-items): New.
+ * menubar.el (menu-submenu-max-items): New.
+ * menubar.el (menu-submenu-name-format): New.
+ * menubar.el (menu-split-long-menu): New.
+ * menubar.el (menu-sort-menu): New.
+ Move to menubar.el.
+
+ * menubar.el (menu-item-text): New.
+ * menubar.el (menu-split-long-menu-and-sort): New.
+ New funs.
+
+ * menubar.el (find-menu-item):
+ * menubar.el (find-menu-item-1): New.
+ Split up find-menu-item w/find-menu-item-1, since PARENT is not
+ an external item.
+ Rewrite to use compare-menu-text.
+
+ * menubar.el (add-menu-item-1):
+ Don't normalize items as find-menu-item does not need it.
+
+ * menubar-items.el (default-menubar):
+ Delete old Behavior menu defn, replaced by behavior-menu-filter.
+ Planning to [[Delete many menus from Tools menu -- they have been
+ integrated as part of the behavior system.]] Currently the new
+ Tools menu (very short, just a call to the behavior-menu-filter)
+ is commented out, and the old Toold menu defn remains. Once the
+ new packages are in place (c. 1 or 2 weeks), I'll make the
+ switchover.
+
+ Use menu-split-long-menu-and-sort.
+
+2005-02-02 Ben Wing <ben(a)xemacs.org>
+
+ * cus-dep.el (Custom-make-dependencies-1):
+ If a directory has no custom dependencies, write a blank
+ custom-load file rather than deleting the file, so that
+ time-based rebuild checking will work.
+
+ * cus-edit.el:
+ * cus-edit.el (custom-load-symbol):
+ * cus-edit.el (custom-load-symbol-1): New.
+ * cus-edit.el (custom-already-loaded-custom-defines): New.
+ * cus-edit.el (custom-define-current-source-file): New.
+ * cus-edit.el (custom-warn-when-reloading-necessary): New.
+ * cus-edit.el (custom-load-custom-defines): New.
+ * cus-edit.el (custom-load-custom-defines-1): New.
+ Split out code in custom-load-symbol. Support loading of
+ the new custom-defines file.
+
+ * cus-edit.el (custom-menu-create):
+ Split long menus.
+
+ * custom.el:
+ * custom.el (load):
+ * custom.el (custom-dont-initialize): New.
+ * custom.el (custom-current-group-alist): New.
+ * custom.el (custom-declare-variable):
+ * custom.el (defcustom):
+ * custom.el (custom-current-group): New.
+ * custom.el (custom-declare-group):
+ * custom.el (defgroup):
+ * custom.el (custom-add-to-group):
+ * custom.el (custom-group-of-mode): New.
+ * custom.el (custom-handle-all-keywords):
+ * custom.el (custom-autoload): New.
+ * custom.el (custom-variable-p): New.
+ * custom.el (custom-load-recursion): New.
+ * custom.el (custom-load-symbol): New.
+ * custom.el (custom-known-themes):
+ * custom.el (custom-declare-theme): New.
+ * custom.el (deftheme):
+ * custom.el (custom-make-theme-feature):
+ * custom.el (custom-check-theme):
+ * custom.el (custom-push-theme):
+ * custom.el (custom-set-variables):
+ * custom.el (custom-theme-set-variables):
+ * custom.el (custom-set-default): New.
+ * custom.el (custom-quote): New.
+ * custom.el (customize-mark-to-save): New.
+ * custom.el (provide-theme):
+ * custom.el (require-theme):
+ * custom.el (customize-mark-as-set): New.
+ * custom.el (custom-remove-theme): New.
+ * custom.el (custom-do-theme-reset):
+ * custom.el (custom-theme-load-themes):
+ * custom.el (custom-load-themes):
+ * custom.el (custom-theme-value):
+ * custom.el (custom-theme-variable-value):
+ * custom.el (custom-theme-reset-internal):
+ * custom.el (copy-upto-last): Removed.
+ * custom.el (custom-theme-reset-variables):
+ * custom.el (custom-reset-variables):
+ * custom.el:
+ * custom.el (load):
+ * custom.el (custom-dont-initialize): New.
+ * custom.el (custom-current-group-alist): New.
+ * custom.el (custom-declare-variable):
+ * custom.el (defcustom):
+ * custom.el (custom-current-group): New.
+ * custom.el (custom-declare-group):
+ * custom.el (defgroup):
+ * custom.el (custom-add-to-group):
+ * custom.el (custom-group-of-mode): New.
+ * custom.el (custom-handle-all-keywords):
+ * custom.el (custom-autoload): New.
+ * custom.el (custom-variable-p): New.
+ * custom.el (custom-load-recursion): New.
+ * custom.el (custom-load-symbol): New.
+ * custom.el (custom-known-themes):
+ * custom.el (custom-declare-theme): New.
+ * custom.el (deftheme):
+ * custom.el (custom-make-theme-feature):
+ * custom.el (custom-check-theme):
+ * custom.el (custom-push-theme):
+ * custom.el (custom-set-variables):
+ * custom.el (custom-theme-set-variables):
+ * custom.el (custom-set-default): New.
+ * custom.el (custom-quote): New.
+ * custom.el (customize-mark-to-save): New.
+ * custom.el (provide-theme):
+ * custom.el (require-theme):
+ * custom.el (customize-mark-as-set): New.
+ * custom.el (custom-remove-theme): New.
+ * custom.el (custom-do-theme-reset):
+ * custom.el (custom-theme-load-themes):
+ * custom.el (custom-load-themes):
+ * custom.el (custom-theme-value):
+ * custom.el (custom-theme-variable-value):
+ * custom.el (custom-theme-reset-internal):
+ * custom.el (copy-upto-last): Removed.
+ * custom.el (custom-theme-reset-variables):
+ * custom.el (custom-reset-variables):
+ Sync with FSF 21.3.
+
+2005-01-31 Ben Wing <ben(a)xemacs.org>
+
+ * help.el:
+ * help.el (describe-distribution): Go to appropriate FAQ entry.
+ * help.el (describe-beta): Go to info file.
+ * help.el (describe-project): Removed.
+
+2005-01-27 Ben Wing <ben(a)xemacs.org>
+
+ * font-menu.el:
+ * font.el:
+ * font.el (internal-facep):
+ * font.el (x-font-build-cache):
+ * font.el (font-lookup-rgb-components):
+ * frame.el (set-frame-font):
+ * gtk-font-menu.el (gtk-reset-device-font-menus):
+ * minibuf.el (read-color-completion-table):
+ * minibuf.el (x-library-search-path): Removed.
+ * minibuf.el (x-read-color-completion-table)): Removed.
+ * msw-faces.el (mswindows-available-font-sizes):
+ * msw-font-menu.el (mswindows-reset-device-font-menus):
+ * obsolete.el:
+ * x-faces.el:
+ * x-faces.el (x-available-font-sizes):
+ * x-faces.el (x-library-search-path): New.
+ * x-faces.el (x-color-list-internal-cache)): New.
+ * x-faces.el (x-color-list-internal): New.
+ * x-font-menu.el (x-reset-device-font-menus):
+ list-fonts->font-list. Create color-list. Abstract out
+ x/msw-specific versions and obsolete the x/msw-specific Lisp
+ functions.
+
+2005-01-27 Ben Wing <ben(a)xemacs.org>
+
+ * subr.el:
+ * subr.el (macro-declaration-function): New.
+ Some synching with FSF 21.2.
+
+2005-01-27 Ben Wing <ben(a)xemacs.org>
+
+ * gtk-marshal.el (find-file):
+ Propagate hash changes to gtk-marshal.el.
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * newcomment.el:
+ * newcomment.el (comment):
+ * newcomment.el (comment-fill-column): New.
+ * newcomment.el (comment-style):
+ * newcomment.el (comment-padding):
+ * newcomment.el (comment-multi-line):
+ * newcomment.el (comment-normalize-vars):
+ * newcomment.el (comment-indent):
+ * newcomment.el (uncomment-region):
+ * newcomment.el (comment-make-extra-lines):
+ * newcomment.el (comment-with-narrowing):
+ * newcomment.el (comment-region-internal):
+ * newcomment.el (comment-region):
+ * newcomment.el (comment-box):
+ * newcomment.el (comment-or-uncomment-region): New.
+ * newcomment.el (comment-dwim):
+ * newcomment.el (comment-auto-fill-only-comments):
+ * newcomment.el (comment-valid-prefix): New.
+ * newcomment.el (comment-indent-new-line):
+ Sync to FSF 21.3.
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * fill.el:
+ * fill.el (canonically-space-region):
+ * fill.el (fill-region-as-paragraph):
+ * fill.el (justify-current-line):
+ * fill.el (fill-individual-paragraphs):
+ Sync for real to FSF 19.34.
+
+ * page.el:
+ * page.el (narrow-to-page):
+ * register.el:
+ * register.el (set-register):
+ * register.el (point-to-register):
+ * register.el (register-swap-out):
+ * register.el (number-to-register):
+ * register.el (view-register):
+ * register.el (list-registers): New.
+ * register.el (describe-register-1): New.
+ * register.el (insert-register):
+ Sync to FSF 21.3.
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * frame.el (display-mouse-p):
+ Fix warning.
+
+ * cl.el (cl-random-time):
+ Conditionalize on coerce-number as Jerry says it's OK.
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * code-init.el (set-eol-detection):
+ * code-init.el (coding-system-default-variable-list):
+ * code-init.el (get-coding-system-variable):
+ * code-init.el (set-coding-system-variable):
+ Undo Stephen's change of 2004-05-11.
+ Implement no-conversion-coding-system-mapping as a coding
+ system variable.
+
+2005-01-25 Ben Wing <ben(a)xemacs.org>
+
+ * startup.el:
+ * startup.el (splash-frame-timeout): Removed.
+ * startup.el (command-line-1):
+ * startup.el (startup-presentation-hack-keymap): Removed.
+ * startup.el (startup-presentation-hack-help):
+ * startup.el (startup-presentation-hack): Removed.
+ * startup.el (splash-frame-present): Removed.
+ * startup.el (splash-screen-present): New.
+ * startup.el (splash-frame-present-hack): Removed.
+ * startup.el (startup-presentation-activate): New.
+ * startup.el (splash-screen-present-hack): New.
+ * startup.el (startup-center-spaces):
+ * startup.el (splash-frame-body): Removed.
+ * startup.el (splash-screen-window-body): New.
+ * startup.el (splash-screen-tty-body): New.
+ * startup.el (splash-frame-static-body): Removed.
+ * startup.el (circulate-splash-frame-elements): Removed.
+ * startup.el (display-splash-frame): Removed.
+ * startup.el (splash-screen-static-body): New.
+ * startup.el ('splash-frame-static-body): New.
+ * startup.el (display-splash-screen): New.
+ * startup.el (xemacs-splash-buffer): New.
+ Rename "splash-frame" -> "splash-screen" (its change
+ long ago from screen to frame happened during the general
+ screen->frame sub and was a mistake). Compress all info
+ onto one screen rather than cycling through 3 of them.
+ Update copyright years and some other random stuff.
+
+ * menubar-items.el:
+ * menubar-items.el (default-menubar):
+ * menubar-items.el (xemacs-splash-buffer): Removed.
+ frame->screen and rewrite to fix bugginess.
+ Add menu items for beta and distribution info.
+
+2005-01-25 Ben Wing <ben(a)xemacs.org>
+
+ * mouse.el:
+ * mouse.el (mouse-track-activate-strokes):
+ * mouse.el (mouse-track-conservative-activate-strokes): New.
+ * mouse.el (Mouse-track-gensym):
+ * mouse.el (mouse-track-do-activate): Removed.
+ * mouse.el (default-mouse-track-check-for-activation): New.
+ * mouse.el (default-mouse-track-click-hook): New.
+ * mouse.el (mouse-track-down-hook):
+ Redo mouse-track activation to separate out a "conservative"
+ activation that is only triggered by button2 or button1 double-click
+ and a regular activation also triggered by button1.
+
+2005-01-25 Ben Wing <ben(a)xemacs.org>
+
+ * font-lock.el (c-font-lock-keywords-2): Removed.
+ * font-lock.el (xemacs-c-font-lock-keywords-2): New.
+ * font-lock.el (c-font-lock-keywords-3): Removed.
+ * font-lock.el (xemacs-c-font-lock-keywords-3): New.
+ Proper defvars.
+
+2005-01-17 Adrian Aichner <adrian(a)xemacs.org>
+
+ * simple.el (shifted-motion-keys-select-region): Fix statement
+ about unshifted-motion-keys-deselect-region.
+
+2005-01-08 Mike Sperber <mike(a)xemacs.org>
+
+ * packages.el (packages-find-installation-package-directories): Add.
+
+ * find-paths.el (paths-for-each-emacs-directory): Abstract FUNC
+ parameter out of `paths-find-emacs-directory'.
+ (paths-find-emacs-directories): Add.
+ (paths-find-emacs-directory): Redefine in terms of
+ `paths-for-each-emacs-directory'.
+ (paths-for-each-site-directory): Add.
+ (paths-find-site-directory): Redefine in terms of
+ `paths-for-each-site-directory'.
+ (paths-find-site-directories): Add.
+ (paths-for-each-version-directory): Add.
+ (paths-find-version-directory): Redefine in terms of
+ `paths-for-each-version-directory'.
+ (paths-find-version-directories): Add.
+
+2005-01-09 Adrian Aichner <adrian(a)xemacs.org>
+
+ * dumped-lisp.el (preloaded-file-list): Fix typo in
+ "mule-win32-init" path in preloaded-file-list, as suggected by
+ Alejandro L~pez-Valencia.
+
+2005-01-09 Adrian Aichner <adrian(a)xemacs.org>
+
+ * process.el (start-process-shell-command): Correct docstring.
+
+2005-01-03 Mike Sperber <mike(a)xemacs.org>
+
+ * dumped-lisp.el (preloaded-file-list): Prefix Mule files with
+ mule/, unbreaking the build.
+
+2004-12-18 Mike Sperber <mike(a)xemacs.org>
+
+ * package-admin.el:
+ * startup.el: Reflect the changes made in packages.el.
+
+ * packages.el:
+ * loadup.el:
+ * make-docfile.el:
+ * package-admin.el:
+ * startup.el:
+ * update-elc.el (early-package-hierarchies)
+ (late-package-hierarchies)
+ (last-package-hierarchies): Renamed these from `early-packages',
+ `late-packages' and `last-packages'.
+
+ * packages.el: Rewrote package-finding logic to separate the
+ concepts of "package directories" and "package hierarchies".
+ Added explanation of these concepts.
+
+ * setup-paths.el:
+ * find-paths.el: Added parameter descriptions to some of the
+ docstrings.
+
+ * packages.el, setup-paths.el: Make terminology more explicit
+ about "package hierarchies"
+
+ * startup.el (emacs-roots, emacs-data-roots)
+ (user-init-directory-base, user-init-directory)
+ (user-init-file-base, user-init-file-base-list)
+ (user-home-init-file-base-list)
+ (load-home-init-file, load-user-init-file-p)
+ (startup-find-load-path, startup-setup-paths)
+ (startup-find-load-path-for-packages): Moved these back from
+ setup-paths.el where they belong---setup-paths.el now again, as
+ documented, contains no code that sets global variables. (They
+ were moved from startup.el to setup-paths.el on 2003-02-28.)
+ Clarify that in the comment at the top.
+
+ * setup-paths.el (paths-find-emacs-roots): Restored
+ `invocation-directory' 'invocation-name' parameters removed on
+ 2003-02-28; they're useful for debugging.
+
+2004-12-15 Ville Skyttä <scop(a)xemacs.org>
+
+ * bytecomp-runtime.el (make-obsolete): Add 3rd argument (no-op for
+ now) for GNU Emacs compatibility.
+ (make-obsolete-variable): Ditto.
+
+2004-11-16 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * gnuserv.el (gnuserv-edit-files): Improve docstring.
+
+2004-12-13 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * simple.el (next-line):
+ (previous-line):
+ Document effect of `signal-error-on-buffer-boundary'.
-2005-02-03 Eric Knauel <eric(a)xemacs.org>
+2004-12-11 Ben Wing <ben(a)xemacs.org>
- * fontconfig.el (fc-try-font):
- (fc-find-available-font-families):
- (fc-find-available-weights-for-family): adapt to new representation of
- FcObjectSets
+ * files.el (find-coding-system-magic-cookie-in-file):
+ File positions are 0 based not 1 based.
2004-12-05 Ben Wing <ben(a)xemacs.org>
1.63.2.2 +252 -223 XEmacs/xemacs/lisp/about.el
Index: about.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/about.el,v
retrieving revision 1.63.2.1
retrieving revision 1.63.2.2
diff -u -r1.63.2.1 -r1.63.2.2
--- about.el 2005/02/22 10:17:29 1.63.2.1
+++ about.el 2005/03/15 05:20:39 1.63.2.2
@@ -1,7 +1,7 @@
;;; about.el --- the About The Authors page (shameless self promotion).
-;; Copyright (c) 1997 Free Software Foundation, Inc.
-;; Copyright (C) 2001 Ben Wing.
+;; Copyright (c) 1997, 2005 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2005 Ben Wing.
;; Keywords: extensions
;; Version: 2.5
@@ -95,9 +95,11 @@
;; to sort the stuff below, use M-x sort-regexp-fields RET
;; ^.*$ RET (\([a-z]*\) RET
(adrian "Adrian Aichner" "adrian(a)xemacs.org")
+ (aidan "Aidan Kehoe" "aidan(a)xemacs.org")
(aj "Andreas Jaeger" "aj(a)xemacs.org")
(ajc "Andrew Cosgriff" "ajc(a)xemacs.org")
(alastair "Alastair Houghton" "alastair(a)xemacs.org")
+ (alexm "Alexey Mahotkin" "alexm(a)xemacs.org")
(baw "Barry Warsaw" "bwarsaw(a)xemacs.org")
(ben "Ben Wing" "ben(a)xemacs.org")
(bw "Bob Weiner" "weiner(a)xemacs.org")
@@ -124,6 +126,7 @@
(james "Jerry James" "james(a)xemacs.org")
(jan "Jan Vroonhof" "jan(a)xemacs.org")
(jareth "Jareth Hein" "jareth(a)xemacs.org")
+ (jas "Simon Josefsson" "simon(a)xemacs.org")
(jason "Jason R. Mastaler" "jason(a)xemacs.org")
(jens "Jens Lautenbacher" "jens(a)xemacs.org")
(jmiller "Jeff Miller" "jmiller(a)xemacs.org")
@@ -181,8 +184,8 @@
(defvar about-once-and-future-hackers
'(aj ajc alastair baw bw cgw chr craig cthomp dan devin dkindred dmoore eb
- gunnar hbs hisashi hmuller hobley jareth jens juhp jwz kyle marcpa mcook
- mly ograf pelegri pez rickc rose slb stig stigb thiessel vladimir))
+ gunnar hbs hisashi hmuller hobley jareth jas jens juhp jwz kyle marcpa
+ mcook mly ograf pelegri pez rickc rose slb stig stigb thiessel vladimir))
;; The CAR of alist elements is a valid argument to `about-url-link'.
;; It is preferred to a simple string, because it makes maintenance
@@ -205,6 +208,7 @@
(fabrice . "http://www.ese-metz.fr/~popineau/")
(fptex . "http://www.fptex.org/")
(james . "http://www.ittc.ku.edu/~james/")
+ (jas . "http://josefsson.org/")
(jason . "http://www.mastaler.com/")
(juhp . "http://www.01.246.ne.jp/~juhp/")
(jwz . "http://www.jwz.org/")
@@ -893,15 +897,15 @@
Since September 1992, I've worked on XEmacs as a contractor for
various companies and more recently as an unpaid volunteer.
-Alas, life has not been good to me recently. This former San
-Francisco \"Mission Critter\" developed insidious hand and neck
-problems after a brief stint working on a Java-based VRML toolkit for
-the now defunct Dimension X, and I was forced to quit working. I was
-exiled first to \"Stroller Valley\" and later all the way to Tucson,
-Arizona, and for two years was almost completely disabled due to pain.
-More recently I have fought my way back with loads and loads of
-narcotic painkillers, and currently I'm an art student at the
-University of Arizona.\n\n")
+Alas, life has not been good to me recently. This former San Francisco
+\"Mission Critter\" developed insidious hand and neck problems after a
+brief stint working on a Java-based VRML toolkit for the now defunct
+Dimension X, and I was forced to quit working. I was exiled first to
+\"Stroller Valley\" and later all the way to Tucson, Arizona, and for two
+years was almost completely disabled due to pain. More recently I have
+fought my way back with loads and loads of narcotic painkillers, and after
+a stint as an art student at the University of Arizona I'm currently a
+Ph.D. student in linguistics at the University of Texas, Austin.\n\n")
(widget-insert "Architecting XEmacs: ")
(about-url-link 'ben-xemacs nil "Find the miracles in store for
XEmacs")
(widget-insert "\nBen's home page: ")
@@ -1121,6 +1125,25 @@
graphics and a garbage collector, but is multithreaded to boot!
Unfortunately his XEmacs time is directly limited by the amount of
traffic on the M40.\n"))
+ (jas
+ (widget-insert "\
+
+Simon lives in Stockholm where he has discovered that computers
+can be a powerful procrastinating tool. Combined with a
+frustrating desire to see computers simply work, he spends most
+of his time complaining. Occasionally he rises up to the task
+and produces something that others may complain about, which
+brings him increased satisfaction with every bug report. Today
+he is pretending to be a network security guy, with a preference
+for standardization issues, while secretly longing to start a
+cafe or becoming a theoretical computer scientist. His personal
+interest is literature, and to some extent traveling, but will
+try anything for fun, such as juggling, skiing, wine, and
+long-distance biking.
+
+See: ")
+ (about-url-link 'jas nil "Visit Simon's homepage")
+ (widget-insert ".\n"))
(jareth
(widget-insert "\
Jareth Hein is a mountain boy who abandoned his home state of Colorado
@@ -1553,7 +1576,7 @@
Author of an earlier version of the MS Windows setup program for XEmacs.\n"))
(chr
(widget-insert "\
-Maintainer of the XEmacs FAQ and proud author of `zap-up-to-char'.\n"))
+Former maintainer of the XEmacs FAQ and proud author of
`zap-up-to-char'.\n"))
(craig
(widget-insert
"\
@@ -1688,6 +1711,14 @@
(widget-insert "\
Owner of
cvs.xemacs.org, the machine that holds the XEmacs CVS
repository, and author of some of the graphics code in XEmacs.\n"))
+ (jas
+ (widget-insert "\
+Wrote and/or integrated several packages for Gnus, such as
+support for IMAP, Sieve, format=flowed, GnuTLS, S/MIME, and PGP.
+Irregularly synchronizes lisp code between Emacs and XEmacs. He
+maintains the mail-lib, sieve, sasl, pgg and ecrypto XEmacs
+packages. Operates the secondary DNS and mail server for
+xemacs.org.\n"))
(jason
(widget-insert "\
Beta tester, manager of the various XEmacs mailing lists and binary
@@ -1987,243 +2018,241 @@
great deal of effort providing feedback, testing beta versions of
XEmacs, providing patches to the source code, or doing all of the
above. We couldn't have done it without them.\n\n")
- (print-short "Nagi M. Aboulenein"
"aboulene(a)ponder.csci.unt.edu")
- (print-short "Per Abrahamsen" "abraham(a)dina.kvl.dk")
- (print-short "Gary Adams" "gra(a)zeppo.East.Sun.COM")
- (print-short "Gennady Agranov"
"agranov(a)csa.CS.Technion.Ac.IL")
- (print-short "Mark Allender" "allender(a)vnet.IBM.COM")
- (print-short "Stephen R. Anderson"
"sra(a)bloch.ling.yale.edu")
- (print-short "Butch Anton" "butch(a)zaphod.uchicago.edu")
- (print-short "Fred Appelman" "Fred.Appelman(a)cv.ruu.nl")
- (print-short "Erik \"The Pope\" Arneson"
"lazarus(a)mind.net")
- (print-short "Tor Arntsen" "tor(a)spacetec.no")
- (print-short "Marc Aurel" "4-tea-2(a)bong.saar.de")
- (print-short "Larry Auton" "lda(a)control.att.com")
- (print-short "Larry Ayers" "layers(a)marktwain.net")
- (print-short "Oswald P. Backus IV" "backus(a)altagroup.com")
- (print-short "Mike Battaglia" "mbattagl(a)dsccc.com")
- (print-short "Neal Becker" "neal(a)ctd.comsat.com")
- (print-short "Paul Bibilo" "peb(a)delcam.com")
- (print-short "Leonard Blanks" "ltb(a)haruspex.demon.co.uk")
- (print-short "Jan Borchers" "job(a)tk.uni-linz.ac.at")
- (print-short "Mark Borges" "mdb(a)cdc.noaa.gov")
- (print-short "David P. Boswell"
"daveb(a)tau.space.thiokol.com")
- (print-short "Tim Bradshaw" "tfb(a)edinburgh.ac.uk")
- (print-short "Rick Braumoeller" "rickb(a)mti.sgi.com")
- (print-short "Matthew J. Brown" "mjb(a)doc.ic.ac.uk")
+ (print-short "Achim Oppelt"
"aoppelt(a)theorie3.physik.uni-erlangen.de")
+ (print-short "Adam Hammer" "hammer(a)cs.purdue.edu")
+ (print-short "Aki Vehtari" "Aki.Vehtari(a)hut.fi")
(print-short "Alastair Burt" "burt(a)dfki.uni-kl.de")
- (print-short "David Bush" "david.bush(a)adn.alcatel.com")
- (print-short "Richard Caley" "rjc(a)cstr.edinburgh.ac.uk")
- (print-short "Stephen Carney" "carney(a)gvc.dec.com")
- (print-short "Lorenzo M. Catucci"
"lorenzo(a)argon.roma2.infn.it")
- (print-short "Philippe Charton" "charton(a)lmd.ens.fr")
- (print-short "Peter Cheng" "peter.cheng(a)sun.com")
- (print-short "Jin S. Choi" "jin(a)atype.com")
- (print-short "Tomasz J. Cholewo"
"tjchol01(a)mecca.spd.louisville.edu")
- (print-short "Serenella Ciongoli"
"czs00(a)ladybug.oes.amdahl.com")
- (print-short "Glynn Clements" "glynn(a)sensei.co.uk")
- (print-short "Richard Cognot" "cognot(a)ensg.u-nancy.fr")
+ (print-short "Alexandre Oliva" "oliva(a)dcc.unicamp.br")
+ (print-short "Amir Katz" "amir(a)ndsoft.com")
+ (print-short "Anders Stenman" "stenman(a)isy.liu.se")
+ (print-short "Andreas Kaempf" "andreas(a)sccon.com")
+ (print-short "Andrew Innes" "andrewi(a)harlequin.co.uk")
(print-short "Andy Cohen" "cohen(a)andy.bu.edu")
- (print-short "Richard Coleman" "coleman(a)math.gatech.edu")
- (print-short "Mauro Condarelli" "MC5686(a)mclink.it")
- (print-short "Nick J. Crabtree" "nickc(a)scopic.com")
- (print-short "Christopher Davis" "ckd(a)kei.com")
- (print-short "Soren Dayton" "csdayton(a)cs.uchicago.edu")
- (print-short "Chris Dean" "ctdean(a)cogit.com")
- (print-short "Michael Diers" "mdiers(a)elego.de")
- (print-short "William G. Dubuque" "wgd(a)martigny.ai.mit.edu")
- (print-short "Steve Dunham" "dunham(a)dunham.tcimet.net")
- (print-short "Samuel J. Eaton" "samuele(a)cogs.susx.ac.uk")
+ (print-short "Andy Norman" "ange(a)hplb.hpl.hp.com")
+ (print-short "Art Rijos" "art.rijos(a)SNET.com")
+ (print-short "Arup Mukherjee" "arup+(a)cs.cmu.edu")
+ (print-short "August Hill" "awhill(a)inlink.com")
+ (print-short "Axel Seibert"
"seiberta(a)informatik.tu-muenchen.de")
+ (print-short "Barry Friedman" "friedman(a)nortel.ca")
+ (print-short "Ben Gross" "bgross(a)uiuc.edu")
+ (print-short "Benedikt Heinen" "beh(a)icemark.thenet.ch")
+ (print-short "Benjamin Fried" "bf(a)morgan.com")
+ (print-short "Blair Zajac" "blair(a)olympia.gps.caltech.edu")
+ (print-short "Brad Miller" "bmiller(a)cs.umn.edu")
+ (print-short "Butch Anton" "butch(a)zaphod.uchicago.edu")
(print-short "Carl Edman" "cedman(a)Princeton.EDU")
+ (print-short "Carsten Leonhardt" "leo(a)arioch.oche.de")
+ (print-short "Casey Nielson"
"knielson(a)joule.elee.calpoly.edu")
+ (print-short "ChangGil Han"
"cghan(a)phys401.phys.pusan.ac.kr")
+ (print-short "Charles Hines" "chuck_hines(a)VNET.IBM.COM")
+ (print-short "Chris Dean" "ctdean(a)cogit.com")
+ (print-short "Chris Holt" "xris(a)migraine.stanford.edu")
+ (print-short "Christian F. Goetze" "cg(a)bigbook.com")
+ (print-short "Christian Limpach"
"Christian.Limpach(a)nice.ch")
+ (print-short "Christoph Wedler" "wedler(a)fmi.uni-passau.de")
+ (print-short "Christopher Davis" "ckd(a)kei.com")
+ (print-short "Colas Nahaboo"
"Colas.Nahaboo(a)sophia.inria.fr")
+ (print-short "Colin Rafferty" "colin(a)xemacs.org")
+ (print-short "Cotton Seed" "cottons(a)cybercom.net")
+ (print-short "Damon Lipparelli" "lipp(a)aa.net")
+ (print-short "Daniel Rich" "drich(a)cisco.com")
+ (print-short "Daniel Schepler" "daniel(a)shep13.wustl.edu")
+ (print-short "Daniel Zivkovic" "daniel(a)canada.sun.com")
+ (print-short "Darrel Schneider" "darrel(a)slc.com")
(print-short "Dave Edmondson" "davided(a)sco.com")
- (print-short "Jonathan Edwards" "edwards(a)intranet.com")
- (print-short "Eric Eide" "eeide(a)asylum.cs.utah.edu")
- (print-short "EKR" "ekr(a)terisa.com")
+ (print-short "Dave Gillespie" "daveg(a)synaptics.com")
+ (print-short "Dave Mason" "dmason(a)plg.uwaterloo.ca")
+ (print-short "David Bush" "david.bush(a)adn.alcatel.com")
+ (print-short "David C Worenklein" "dcw(a)gcm.com")
(print-short "David Fletcher" "frodo(a)tsunami.com")
- (print-short "Paul Flinders" "ptf(a)delcam.co.uk")
- (print-short "Jered J Floyd" "jered(a)mit.edu")
+ (print-short "David Hughes" "djh(a)harston.cv.com")
+ (print-short "David M. Meyer" "meyer(a)ns.uoregon.edu")
+ (print-short "David Ofelt" "ofelt(a)getalife.Stanford.EDU")
+ (print-short "David P. Boswell"
"daveb(a)tau.space.thiokol.com")
+ (print-short "David Walte" "djw18(a)cornell.edu")
+ (print-short "Derek Harding" "dharding(a)lssec.bt.co.uk")
+ (print-short "Derrell Lipman" "derrell(a)vis-av.com")
+ (print-short "Dinesh Somasekhar" "somasekh(a)ecn.purdue.edu")
+ (print-short "Dipankar Gupta" "dg(a)hplb.hpl.hp.com")
+ (print-short "Dirk Grunwald"
"grunwald(a)foobar.cs.Colorado.EDU")
+ (print-short "Doug Keller" "dkeller(a)vnet.ibm.com")
+ (print-short "E. Rehmi Post" "rehmi(a)asylum.sf.ca.us")
+ (print-short "EKR" "ekr(a)terisa.com")
+ (print-short "Eric Eide" "eeide(a)asylum.cs.utah.edu")
+ (print-short "Erik \"The Pope\" Arneson"
"lazarus(a)mind.net")
+ (print-short "Francois Staes" "frans(a)kiwi.uia.ac.be")
+ (print-short "Fred Appelman" "Fred.Appelman(a)cv.ruu.nl")
+ (print-short "Frederic Poncin" "fp(a)info.ucl.ac.be")
+ (print-short "Gary Adams" "gra(a)zeppo.East.Sun.COM")
(print-short "Gary D. Foster" "Gary.Foster(a)Corp.Sun.COM")
- (print-short "Jerry Frain" "jerry(a)sneffels.tivoli.com")
+ (print-short "Gary Thomas" "g.thomas(a)opengroup.org")
+ (print-short "Gennady Agranov"
"agranov(a)csa.CS.Technion.Ac.IL")
+ (print-short "Georg Nikodym" "Georg.Nikodym(a)canada.sun.com")
+ (print-short "Glynn Clements" "glynn(a)sensei.co.uk")
+ (print-short "Greg Klanderman"
"greg.klanderman(a)alum.mit.edu")
+ (print-short "Greg Onufer" "Greg.Onufer(a)eng.sun.com")
+ (print-short "Gregor Kennedy" "gregork(a)dadd.ti.com")
+ (print-short "Gregory Neil Shapiro" "gshapiro(a)sendmail.org")
+ (print-short "Hajime Saitou" "hajime(a)jsk.t.u-tokyo.ac.jp")
+ (print-short "Hamish Macdonald" "hamish(a)bnr.ca")
+ (print-short "Hayden Schultz" "haydens(a)ll.mit.edu")
+ (print-short "Heiko Muenkel" "muenkel(a)tnt.uni-hannover.de")
(print-short "Holger Franz" "hfranz(a)physik.rwth-aachen.de")
- (print-short "Benjamin Fried" "bf(a)morgan.com")
- (print-short "Barry Friedman" "friedman(a)nortel.ca")
- (print-short "Noah Friedman" "friedman(a)splode.com")
- (print-short "Kazuyoshi Furutaka"
"furutaka(a)Flux.tokai.jaeri.go.jp")
- (print-short "Lew Gaiter III" "lew(a)StarFire.com")
+ (print-short "Holger Schauer"
"schauer(a)coling.uni-freiburg.de")
+ (print-short "Hunter Kelly" "retnuh@corona")
+ (print-short "Ian MacKinnon" "imackinnon(a)telia.co.uk")
(print-short "Itay Gat" "itay(a)cs.huji.ac.il")
- (print-short "Tim Geisler"
"Tim.Geisler(a)informatik.uni-muenchen.de")
- (print-short "Dave Gillespie" "daveg(a)synaptics.com")
- (print-short "Christian F. Goetze" "cg(a)bigbook.com")
- (print-short "Yusuf Goolamabbas" "yusufg(a)iss.nus.sg")
- (print-short "Wolfgang Grieskamp" "wg(a)cs.tu-berlin.de")
- (print-short "John Griffith"
"griffith(a)sfs.nphil.uni-tuebingen.de")
+ (print-short "J. Kean Johnston" "jkj(a)paradigm-sa.com")
+ (print-short "Jack Repenning" "jackr(a)sgi.com")
(print-short "James Grinter" "jrg(a)demon.net")
- (print-short "Ben Gross" "bgross(a)uiuc.edu")
- (print-short "Dirk Grunwald"
"grunwald(a)foobar.cs.Colorado.EDU")
- (print-short "Michael Guenther"
"michaelg(a)igor.stuttgart.netsurf.de")
- (print-short "Dipankar Gupta" "dg(a)hplb.hpl.hp.com")
- (print-short "Markus Gutschke"
"gutschk(a)GOEDEL.UNI-MUENSTER.DE")
- (print-short "Kai Haberzettl" "khaberz(a)synnet.de")
- (print-short "Adam Hammer" "hammer(a)cs.purdue.edu")
- (print-short "Magnus Hammerin" "magnush(a)epact.se")
- (print-short "ChangGil Han"
"cghan(a)phys401.phys.pusan.ac.kr")
- (print-short "Derek Harding" "dharding(a)lssec.bt.co.uk")
- (print-short "Michael Harnois" "mharnois(a)sbt.net")
+ (print-short "James LewisMoss" "moss(a)cs.sc.edu")
+ (print-short "James Thompson" "thompson(a)wg2.waii.com")
+ (print-short "Jan Borchers" "job(a)tk.uni-linz.ac.at")
+ (print-short "Jan Sandquist" "etxquist(a)iqa.ericsson.se")
+ (print-short "Jason McLaren" "mclaren(a)math.mcgill.ca")
+ (print-short "Jason Stewart" "jasons(a)cs.unm.edu")
+ (print-short "Jason Yanowitz"
"yanowitz(a)eternity.cs.umass.edu")
+ (print-short "Jaye Mathisen" "mrcpu(a)cdsnet.net")
+ (print-short "Jeffrey Sparkes" "jsparkes(a)bnr.ca")
+ (print-short "Jens Krinke" "krinke(a)ips.cs.tu-bs.de")
+ (print-short "Jered J Floyd" "jered(a)mit.edu")
+ (print-short "Jerry Frain" "jerry(a)sneffels.tivoli.com")
+ (print-short "Jin S. Choi" "jin(a)atype.com")
+ (print-short "Joe Nuspl" "nuspl(a)sequent.com")
+ (print-short "Joel Peterson" "tarzan(a)aosi.com")
+ (print-short "John Griffith"
"griffith(a)sfs.nphil.uni-tuebingen.de")
(print-short "John Haxby" "J.Haxby(a)isode.com")
+ (print-short "John Mignault" "jbm(a)panix.com")
+ (print-short "John Morey" "jmorey(a)crl.com")
+ (print-short "John Shen" "zfs60(a)cas.org")
+ (print-short "John Turner" "turner(a)xdiv.lanl.gov")
+ (print-short "John W. Jones" "jj(a)asu.edu")
+ (print-short "Jonathan Edwards" "edwards(a)intranet.com")
+ (print-short "Juan E. Villacis" "jvillaci(a)cs.indiana.edu")
+ (print-short "Justin Sheehy" "justin(a)linus.mitre.org")
+ (print-short "Kai Haberzettl" "khaberz(a)synnet.de")
+ (print-short "Karel Zuiderveld"
"Karel.Zuiderveld(a)cv.ruu.nl")
(print-short "Karl M. Hegbloom" "karlheg(a)inetarena.com")
- (print-short "Benedikt Heinen" "beh(a)icemark.thenet.ch")
- (print-short "Stephan Herrmann" "sh(a)first.gmd.de")
- (print-short "August Hill" "awhill(a)inlink.com")
- (print-short "Mike Hill" "mikehill(a)hgeng.com")
- (print-short "Charles Hines" "chuck_hines(a)VNET.IBM.COM")
- (print-short "Shane Holder" "holder(a)rsn.hp.com")
- (print-short "Chris Holt" "xris(a)migraine.stanford.edu")
- (print-short "Tetsuya HOYANO" "hoyano(a)ari.bekkoame.or.jp")
- (print-short "David Hughes" "djh(a)harston.cv.com")
- (print-short "Tudor Hulubei" "tudor(a)cs.unh.edu")
- (print-short "Tatsuya Ichikawa" "ichikawa(a)hv.epson.co.jp")
- (print-short "Andrew Innes" "andrewi(a)harlequin.co.uk")
+ (print-short "Katsumi Yamaoka" "yamaoka(a)ga.sony.co.jp")
+ (print-short "Kazuyoshi Furutaka"
"furutaka(a)Flux.tokai.jaeri.go.jp")
+ (print-short "Kenji Sato" "ken(a)ny.kdd.com")
+ (print-short "Ketil Z Malde" "ketil(a)ii.uib.no")
+ (print-short "Kevin Oberman" "oberman(a)es.net")
+ (print-short "Kim Nyberg" "kny(a)tekla.fi")
+ (print-short "La Monte Yarroll"
"piggy(a)hilbert.maths.utas.edu.au")
+ (print-short "Larry Auton" "lda(a)control.att.com")
+ (print-short "Larry Ayers" "layers(a)marktwain.net")
+ (print-short "Leonard Blanks" "ltb(a)haruspex.demon.co.uk")
+ (print-short "Lew Gaiter III" "lew(a)StarFire.com")
+ (print-short "Lorenzo M. Catucci"
"lorenzo(a)argon.roma2.infn.it")
+ (print-short "Lynn D. Newton" "lynn(a)ives.phx.mcd.mot.com")
+ (print-short "Magnus Hammerin" "magnush(a)epact.se")
+ (print-short "Manoj Srivastava"
"srivasta(a)pilgrim.umass.edu")
+ (print-short "Marc Aurel" "4-tea-2(a)bong.saar.de")
+ (print-short "Mark Allender" "allender(a)vnet.IBM.COM")
+ (print-short "Mark Borges" "mdb(a)cdc.noaa.gov")
(print-short "Markku Jarvinen"
"Markku.Jarvinen(a)simpukka.funet.fi")
- (print-short "Robin Jeffries" "robin.jeffries(a)sun.com")
- (print-short "Philip Johnson"
"johnson(a)uhics.ics.Hawaii.Edu")
- (print-short "J. Kean Johnston" "jkj(a)paradigm-sa.com")
- (print-short "John W. Jones" "jj(a)asu.edu")
- (print-short "Andreas Kaempf" "andreas(a)sccon.com")
- (print-short "Yoshiaki Kasahara"
"kasahara(a)nc.kyushu-u.ac.jp")
- (print-short "Amir Katz" "amir(a)ndsoft.com")
- (print-short "Doug Keller" "dkeller(a)vnet.ibm.com")
- (print-short "Hunter Kelly" "retnuh@corona")
- (print-short "Gregor Kennedy" "gregork(a)dadd.ti.com")
- (print-short "Michael Kifer" "kifer(a)cs.sunysb.edu")
- (print-short "Yasuhiko Kiuchi"
"kiuchi(a)dsp.ksp.fujixerox.co.jp")
- (print-short "Greg Klanderman"
"greg.klanderman(a)alum.mit.edu")
- (print-short "Valdis Kletnieks" "Valdis.Kletnieks(a)vt.edu")
- (print-short "Norbert Koch" "n.koch(a)delta-ii.de")
- (print-short "Rob Kooper" "kooper(a)cc.gatech.edu")
- (print-short "Peter Skov Knudsen" "knu(a)dde.dk")
- (print-short "Jens Krinke" "krinke(a)ips.cs.tu-bs.de")
- (print-short "Maximilien Lincourt" "max(a)toonboom.com")
+ (print-short "Markus Gutschke"
"gutschk(a)GOEDEL.UNI-MUENSTER.DE")
+ (print-short "Markus Linnala" "maage(a)b14b.tupsu.ton.tut.fi")
+ (print-short "Martin Pottendorfer"
"Martin.Pottendorfer(a)aut.alcatel.at")
+ (print-short "Marty Sasaki" "sasaki(a)spdcc.com")
(print-short "Mats Larsson" "Mats.Larsson(a)uab.ericsson.se")
- (print-short "Simon Leinen" "simon(a)instrumatic.ch")
- (print-short "Carsten Leonhardt" "leo(a)arioch.oche.de")
- (print-short "James LewisMoss" "moss(a)cs.sc.edu")
(print-short "Mats Lidell" "mats.lidell(a)contactor.se")
(print-short "Matt Liggett"
"mliggett(a)seven.ucs.indiana.edu")
- (print-short "Christian Limpach"
"Christian.Limpach(a)nice.ch")
+ (print-short "Matt Simmons" "simmonmt(a)acm.org")
+ (print-short "Matthew J. Brown" "mjb(a)doc.ic.ac.uk")
+ (print-short "Mauro Condarelli" "MC5686(a)mclink.it")
(print-short "Maximilien Lincourt" "max(a)toonboom.com")
- (print-short "Markus Linnala" "maage(a)b14b.tupsu.ton.tut.fi")
- (print-short "Robert Lipe" "robertl(a)arnet.com")
- (print-short "Derrell Lipman" "derrell(a)vis-av.com")
- (print-short "Damon Lipparelli" "lipp(a)aa.net")
- (print-short "Hamish Macdonald" "hamish(a)bnr.ca")
- (print-short "Ian MacKinnon" "imackinnon(a)telia.co.uk")
- (print-short "Patrick MacRoberts"
"macro(a)hpcobr30.cup.hp.com")
- (print-short "Tonny Madsen" "Tonny.Madsen(a)netman.dk")
- (print-short "Ketil Z Malde" "ketil(a)ii.uib.no")
- (print-short "Steve March"
"smarch(a)quaver.urbana.mcd.mot.com")
- (print-short "Ricardo Marek" "ricky(a)ornet.co.il")
- (print-short "Pekka Marjola" "pema(a)iki.fi")
- (print-short "Simon Marshall" "simon(a)gnu.ai.mit.edu")
- (print-short "Dave Mason" "dmason(a)plg.uwaterloo.ca")
- (print-short "Jaye Mathisen" "mrcpu(a)cdsnet.net")
- (print-short "Jason McLaren" "mclaren(a)math.mcgill.ca")
+ (print-short "Michael Diers" "mdiers(a)elego.de")
+ (print-short "Michael Guenther"
"michaelg(a)igor.stuttgart.netsurf.de")
+ (print-short "Michael Harnois" "mharnois(a)sbt.net")
+ (print-short "Michael Kifer" "kifer(a)cs.sunysb.edu")
(print-short "Michael McNamara" "mac(a)silicon-sorcery.com")
(print-short "Michael Meissner" "meissner(a)osf.org")
- (print-short "David M. Meyer" "meyer(a)ns.uoregon.edu")
- (print-short "John Mignault" "jbm(a)panix.com")
- (print-short "Brad Miller" "bmiller(a)cs.umn.edu")
- (print-short "John Morey" "jmorey(a)crl.com")
- (print-short "Rob Mori" "rob.mori(a)sun.com")
- (print-short "Heiko Muenkel" "muenkel(a)tnt.uni-hannover.de")
- (print-short "Arup Mukherjee" "arup+(a)cs.cmu.edu")
- (print-short "Colas Nahaboo"
"Colas.Nahaboo(a)sophia.inria.fr")
- (print-short "Lynn D. Newton" "lynn(a)ives.phx.mcd.mot.com")
- (print-short "Casey Nielson"
"knielson(a)joule.elee.calpoly.edu")
- (print-short "Georg Nikodym" "Georg.Nikodym(a)canada.sun.com")
- (print-short "Andy Norman" "ange(a)hplb.hpl.hp.com")
- (print-short "Joe Nuspl" "nuspl(a)sequent.com")
- (print-short "Kim Nyberg" "kny(a)tekla.fi")
- (print-short "Kevin Oberman" "oberman(a)es.net")
- (print-short "David Ofelt" "ofelt(a)getalife.Stanford.EDU")
- (print-short "Alexandre Oliva" "oliva(a)dcc.unicamp.br")
- (print-short "Tore Olsen" "toreo(a)colargol.idb.hist.no")
- (print-short "Greg Onufer" "Greg.Onufer(a)eng.sun.com")
- (print-short "Achim Oppelt"
"aoppelt(a)theorie3.physik.uni-erlangen.de")
- (print-short "Rebecca Ore" "rebecca.ore(a)op.net")
- (print-short "Sudeep Kumar Palat" "palat(a)idt.unit.no")
- (print-short "Joel Peterson" "tarzan(a)aosi.com")
- (print-short "Thomas A. Peterson" "tap(a)src.honeywell.com")
- (print-short "Tibor Polgar" "tibor(a)alteon.com")
- (print-short "Frederic Poncin" "fp(a)info.ucl.ac.be")
- (print-short "E. Rehmi Post" "rehmi(a)asylum.sf.ca.us")
- (print-short "Martin Pottendorfer"
"Martin.Pottendorfer(a)aut.alcatel.at")
- (print-short "Colin Rafferty" "colin(a)xemacs.org")
- (print-short "Rick Rankin"
"Rick_Rankin-P15254(a)email.mot.com")
- (print-short "Paul M Reilly" "pmr(a)pajato.com")
- (print-short "Jack Repenning" "jackr(a)sgi.com")
- (print-short "Daniel Rich" "drich(a)cisco.com")
- (print-short "Roland Rieke" "rol(a)darmstadt.gmd.de")
- (print-short "Art Rijos" "art.rijos(a)SNET.com")
- (print-short "Russell Ritchie"
"ritchier(a)britannia-life.co.uk")
- (print-short "Roland" "rol(a)darmstadt.gmd.de")
+ (print-short "Mike Battaglia" "mbattagl(a)dsccc.com")
+ (print-short "Mike Hill" "mikehill(a)hgeng.com")
(print-short "Mike Russell" "mjruss(a)rchland.vnet.ibm.com")
- (print-short "Hajime Saitou" "hajime(a)jsk.t.u-tokyo.ac.jp")
- (print-short "Jan Sandquist" "etxquist(a)iqa.ericsson.se")
- (print-short "Marty Sasaki" "sasaki(a)spdcc.com")
- (print-short "SATO Daisuke" "densuke(a)ga2.so-net.or.jp")
- (print-short "Kenji Sato" "ken(a)ny.kdd.com")
(print-short "Mike Scheidler" "c23mts(a)eng.delcoelect.com")
- (print-short "Daniel Schepler" "daniel(a)shep13.wustl.edu")
- (print-short "Holger Schauer"
"schauer(a)coling.uni-freiburg.de")
- (print-short "Darrel Schneider" "darrel(a)slc.com")
- (print-short "Hayden Schultz" "haydens(a)ll.mit.edu")
- (print-short "Cotton Seed" "cottons(a)cybercom.net")
- (print-short "Axel Seibert"
"seiberta(a)informatik.tu-muenchen.de")
- (print-short "Odd-Magne Sekkingstad" "oddms(a)ii.uib.no")
- (print-short "Gregory Neil Shapiro" "gshapiro(a)sendmail.org")
- (print-short "Justin Sheehy" "justin(a)linus.mitre.org")
- (print-short "John Shen" "zfs60(a)cas.org")
(print-short "Murata Shuuichirou"
"mrt(a)mickey.ai.kyutech.ac.jp")
- (print-short "Matt Simmons" "simmonmt(a)acm.org")
- (print-short "Dinesh Somasekhar" "somasekh(a)ecn.purdue.edu")
- (print-short "Jeffrey Sparkes" "jsparkes(a)bnr.ca")
- (print-short "Manoj Srivastava"
"srivasta(a)pilgrim.umass.edu")
- (print-short "Francois Staes" "frans(a)kiwi.uia.ac.be")
- (print-short "Anders Stenman" "stenman(a)isy.liu.se")
- (print-short "Jason Stewart" "jasons(a)cs.unm.edu")
- (print-short "Rick Tait" "rickt(a)gnu.ai.mit.edu")
- (print-short "TANAKA Hayashi" "tanakah(a)mxa.mesh.ne.jp")
- (print-short "Samuel Tardieu" "sam(a)inf.enst.fr")
- (print-short "James Thompson" "thompson(a)wg2.waii.com")
+ (print-short "Nagi M. Aboulenein"
"aboulene(a)ponder.csci.unt.edu")
+ (print-short "Neal Becker" "neal(a)ctd.comsat.com")
+ (print-short "Nick J. Crabtree" "nickc(a)scopic.com")
+ (print-short "Noah Friedman" "friedman(a)splode.com")
(print-short "Nobu Toge" "toge(a)accad1.kek.jp")
+ (print-short "Norbert Koch" "n.koch(a)delta-ii.de")
+ (print-short "Odd-Magne Sekkingstad" "oddms(a)ii.uib.no")
+ (print-short "Oswald P. Backus IV" "backus(a)altagroup.com")
+ (print-short "Patrick MacRoberts"
"macro(a)hpcobr30.cup.hp.com")
+ (print-short "Paul Bibilo" "peb(a)delcam.com")
+ (print-short "Paul Flinders" "ptf(a)delcam.co.uk")
+ (print-short "Paul M Reilly" "pmr(a)pajato.com")
+ (print-short "Pekka Marjola" "pema(a)iki.fi")
+ (print-short "Per Abrahamsen" "abraham(a)dina.kvl.dk")
+ (print-short "Peter B. West" "p.west(a)uq.net.au")
+ (print-short "Peter Cheng" "peter.cheng(a)sun.com")
+ (print-short "Peter Skov Knudsen" "knu(a)dde.dk")
+ (print-short "Peter Ware" "ware(a)cis.ohio-state.edu")
+ (print-short "Peter Windle" "peterw(a)SDL.UG.EDS.COM")
+ (print-short "Philip Johnson"
"johnson(a)uhics.ics.Hawaii.Edu")
+ (print-short "Philippe Charton" "charton(a)lmd.ens.fr")
(print-short "Raymond L. Toy" "toy(a)rtp.ericsson.se")
+ (print-short "Raymond Wiker" "raymond(a)orion.no")
+ (print-short "Rebecca Ore" "rebecca.ore(a)op.net")
(print-short "Remek Trzaska" "remek(a)npac.syr.edu")
- (print-short "TSUTOMU Nakamura"
"tsutomu(a)rs.kyoto.omronsoft.co.jp")
+ (print-short "Ricardo Marek" "ricky(a)ornet.co.il")
+ (print-short "Rich Williams" "rdw(a)hplb.hpl.hp.com")
+ (print-short "Richard Caley" "rjc(a)cstr.edinburgh.ac.uk")
+ (print-short "Richard Cognot" "cognot(a)ensg.u-nancy.fr")
+ (print-short "Richard Coleman" "coleman(a)math.gatech.edu")
+ (print-short "Rick Braumoeller" "rickb(a)mti.sgi.com")
+ (print-short "Rick Rankin"
"Rick_Rankin-P15254(a)email.mot.com")
+ (print-short "Rick Tait" "rickt(a)gnu.ai.mit.edu")
+ (print-short "Rob Kooper" "kooper(a)cc.gatech.edu")
+ (print-short "Rob Mori" "rob.mori(a)sun.com")
+ (print-short "Robert Lipe" "robertl(a)arnet.com")
+ (print-short "Robin Jeffries" "robin.jeffries(a)sun.com")
+ (print-short "Rod Whitby" "rwhitby(a)asc.corp.mot.com")
+ (print-short "Roland Rieke" "rol(a)darmstadt.gmd.de")
+ (print-short "Russell Ritchie"
"ritchier(a)britannia-life.co.uk")
+ (print-short "SATO Daisuke" "densuke(a)ga2.so-net.or.jp")
+ (print-short "Samuel J. Eaton" "samuele(a)cogs.susx.ac.uk")
+ (print-short "Samuel Tardieu" "sam(a)inf.enst.fr")
+ (print-short "Serenella Ciongoli"
"czs00(a)ladybug.oes.amdahl.com")
+ (print-short "Shane Holder" "holder(a)rsn.hp.com")
+ (print-short "Simon Leinen" "simon(a)instrumatic.ch")
+ (print-short "Simon Marshall" "simon(a)gnu.ai.mit.edu")
+ (print-short "Soren Dayton" "csdayton(a)cs.uchicago.edu")
(print-short "Stefanie Teufel" "s.teufel(a)ndh.net")
- (print-short "Gary Thomas" "g.thomas(a)opengroup.org")
- (print-short "John Turner" "turner(a)xdiv.lanl.gov")
+ (print-short "Stephan Herrmann" "sh(a)first.gmd.de")
+ (print-short "Stephen Carney" "carney(a)gvc.dec.com")
+ (print-short "Stephen R. Anderson"
"sra(a)bloch.ling.yale.edu")
+ (print-short "Steve Dunham" "dunham(a)dunham.tcimet.net")
+ (print-short "Steve March"
"smarch(a)quaver.urbana.mcd.mot.com")
+ (print-short "Sudeep Kumar Palat" "palat(a)idt.unit.no")
+ (print-short "TANAKA Hayashi" "tanakah(a)mxa.mesh.ne.jp")
+ (print-short "TSUTOMU Nakamura"
"tsutomu(a)rs.kyoto.omronsoft.co.jp")
+ (print-short "Takeshi Yamada" "yamada(a)sylvie.kecl.ntt.jp")
+ (print-short "Tatsuya Ichikawa" "ichikawa(a)hv.epson.co.jp")
+ (print-short "Tetsuya HOYANO" "hoyano(a)ari.bekkoame.or.jp")
+ (print-short "Thomas A. Peterson" "tap(a)src.honeywell.com")
+ (print-short "Tibor Polgar" "tibor(a)alteon.com")
+ (print-short "Tim Bradshaw" "tfb(a)edinburgh.ac.uk")
+ (print-short "Tim Geisler"
"Tim.Geisler(a)informatik.uni-muenchen.de")
+ (print-short "Tomasz J. Cholewo"
"tjchol01(a)mecca.spd.louisville.edu")
+ (print-short "Tonny Madsen" "Tonny.Madsen(a)netman.dk")
+ (print-short "Tor Arntsen" "tor(a)spacetec.no")
+ (print-short "Tore Olsen" "toreo(a)colargol.idb.hist.no")
+ (print-short "Tudor Hulubei" "tudor(a)cs.unh.edu")
(print-short "UENO Fumihiro" "7m2vej(a)ritp.ye.IHI.CO.JP")
- (print-short "Aki Vehtari" "Aki.Vehtari(a)hut.fi")
- (print-short "Juan E. Villacis" "jvillaci(a)cs.indiana.edu")
+ (print-short "Valdis Kletnieks" "Valdis.Kletnieks(a)vt.edu")
(print-short "Vladimir Vukicevic" "vladimir(a)intrepid.com")
- (print-short "David Walte" "djw18(a)cornell.edu")
- (print-short "Peter Ware" "ware(a)cis.ohio-state.edu")
- (print-short "Christoph Wedler" "wedler(a)fmi.uni-passau.de")
- (print-short "Yoav Weiss" "yoav(a)zeus.datasrv.co.il")
- (print-short "Peter B. West" "p.west(a)uq.net.au")
- (print-short "Rod Whitby" "rwhitby(a)asc.corp.mot.com")
- (print-short "Rich Williams" "rdw(a)hplb.hpl.hp.com")
- (print-short "Raymond Wiker" "raymond(a)orion.no")
- (print-short "Peter Windle" "peterw(a)SDL.UG.EDS.COM")
- (print-short "David C Worenklein" "dcw(a)gcm.com")
- (print-short "Takeshi Yamada" "yamada(a)sylvie.kecl.ntt.jp")
- (print-short "Katsumi Yamaoka" "yamaoka(a)ga.sony.co.jp")
- (print-short "Jason Yanowitz"
"yanowitz(a)eternity.cs.umass.edu")
- (print-short "La Monte Yarroll"
"piggy(a)hilbert.maths.utas.edu.au")
- (print-short "Blair Zajac" "blair(a)olympia.gps.caltech.edu")
(print-short "Volker Zell" "vzell(a)de.oracle.com")
- (print-short "Daniel Zivkovic" "daniel(a)canada.sun.com")
- (print-short "Karel Zuiderveld"
"Karel.Zuiderveld(a)cv.ruu.nl")
+ (print-short "William G. Dubuque" "wgd(a)martigny.ai.mit.edu")
+ (print-short "Wolfgang Grieskamp" "wg(a)cs.tu-berlin.de")
+ (print-short "Yasuhiko Kiuchi"
"kiuchi(a)dsp.ksp.fujixerox.co.jp")
+ (print-short "Yoav Weiss" "yoav(a)zeus.datasrv.co.il")
+ (print-short "Yoshiaki Kasahara"
"kasahara(a)nc.kyushu-u.ac.jp")
+ (print-short "Yusuf Goolamabbas" "yusufg(a)iss.nus.sg")
(widget-insert "\n"))
(about-finish-buffer)))
1.20.2.1 +597 -378 XEmacs/xemacs/lisp/autoload.el
Index: autoload.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/autoload.el,v
retrieving revision 1.20
retrieving revision 1.20.2.1
diff -u -r1.20 -r1.20.2.1
--- autoload.el 2003/10/15 09:19:10 1.20
+++ autoload.el 2005/03/15 05:20:40 1.20.2.1
@@ -2,9 +2,10 @@
;; Copyright (C) 1991-1994, 1997, 2003 Free Software Foundation, Inc.
;; Copyright (C) 1995 Tinker Systems and INS Engineering Corp.
-;; Copyright (C) 1996, 2000, 2002, 2003 Ben Wing.
+;; Copyright (C) 1996, 2000, 2002, 2003, 2004 Ben Wing.
-;; Author: Roland McGrath <roland(a)gnu.ai.mit.edu>
+;; Original Author: Roland McGrath <roland(a)gnu.ai.mit.edu>
+;; Heavily Modified: XEmacs Maintainers
;; Keywords: maint
;; This file is part of XEmacs.
@@ -24,13 +25,17 @@
;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
;; 02111-1307, USA.
-;;; Synched up with: Not synched with FSF.
+;;; Synched up with: FSF 21.2 by Ben Wing.
+;;; Note that update-file-autoloads is seriously modified and not really
+;;; syncable.
;;; Commentary:
;; This code keeps auto-autoloads.el files up to date. It interprets
;; magic cookies (of the form ";;;###autoload" in Lisp source files
;; and "/* ###autoload */" in C source files) in various useful ways.
+;; It is also used to maintain custom-defines.el files, since most of
+;; the logic for computing them is the same as for auto-autoloads.el.
;; Usage
;; =====
@@ -39,8 +44,7 @@
;; build process, is
;; xemacs -no-packages -batch \
-;; -eval "(setq generated-autoload-file \"PATH\")" \
-;; -l autoload -f autoload-update-directory-autoloads PREFIX DIRECTORY
+;; -l autoload -f batch-update-directory-autoloads PREFIX DIRECTORY
;; which causes XEmacs to update the file named by PATH from the .el
;; files in DIRECTORY (but not recursing into subdirectories) and (if
@@ -61,24 +65,13 @@
;; of XEmacs).
;; The probable next step is to fix up the packages to use the
-;; `autoload-update-directory-autoloads' API. However, for backward
+;; `batch-update-directory-autoloads' API. However, for backward
;; compatibility with XEmacs 21.4 and 21.1, this can't be done quickly.
-;; For now the API used in update-elc-2.el:
-
-;; (let* ((dir "DIRECTORY")
-;; (generated-autoload-file (expand-file-name "auto-autoloads.el"
dir))
-;; (autoload-package-name "PREFIX"))
-;; (update-autoload-files (list muledir))
-;; (byte-recompile-file generated-autoload-file 0))
-
-;; is available, but this ugly kludge is deprecated. It will be removed
-;; in favor of using proper arguments instead of special variables.
-
;; For backward compatibility the API used in the packages/XEmacs.rules:
;; xemacs -vanilla -batch -eval "$(AUTOLOAD_PACKAGE_NAME)" \
-;; -l autoload -f batch-update-directory $(AUTOLOAD_PATH)
+;; -l autoload -f batch-update-autoloads $(AUTOLOAD_PATH)
;; is supported, and the implementation is unchanged. However,
;; revision of the API (in a backward compatible way) and the
@@ -130,6 +123,10 @@
;;; Code:
+;; Need to load easy-mmode because we expand macro calls to easy-mmode
+;; macros in make-autoloads below.
+(require 'easy-mmode)
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Standard file and directory names
@@ -144,6 +141,10 @@
;; Dynamic variables for communication among functions
+;; FSF 21.2:
+;; The autoload file is assumed to contain a trailer starting with a FormFeed
+;; character.
+
(defvar generated-autoload-file
(expand-file-name autoload-file-name lisp-directory)
"*File `update-file-autoloads' puts autoloads into.
@@ -154,6 +155,11 @@
generally the file named by `autoload-file-name' in the directory being
updated. XEmacs.rules setq's this variable for package autoloads.")
+(defvar generate-autoload-function
+ #'generate-file-autoloads
+ "Function to generate the autoloads for a file and insert at point.
+Called with one argument, the file.")
+
(define-obsolete-variable-alias 'autoload-package-name
'autoload-feature-prefix)
(defvar autoload-feature-prefix nil
@@ -164,6 +170,9 @@
auto-autoloads file). Highest priority candidate except for an explicit
argument to `autoload-make-feature-name' (q.v.).")
+(defvar autoload-feature-suffix "-autoloads"
+ "String added to `autoload-feature-prefix' to create the autoload feature
name.")
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Magic strings in source files
@@ -210,40 +219,69 @@
(defconst generate-autoload-section-trailer "\n;;;***\n"
"String which indicates the end of the section of autoloads for a file.")
+(defconst generate-autoload-section-continuation ";;;;;; "
+ "String to add on each continuation of the section header form.")
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Parsing the source file text.
-;; Autoloads in C source differ from those in Lisp source. For historical
-;; reasons, functions handling only Lisp don't have "lisp" in their
names;
-;; maybe this should be changed.
+;; Autoloads in C source differ from those in Lisp source.
(defun make-autoload (form file)
- "Turn a definition generator FORM into an autoload for source file FILE.
-Returns nil if FORM is not a defun, defun*, defmacro, defmacro*,
-define-skeleton, or define-derived-mode."
- (let ((car (car-safe form)))
- (if (memq car '(defun defun* define-skeleton defmacro defmacro*
- define-derived-mode))
- (let ((macrop (memq car '(defmacro defmacro*)))
- name doc)
- (setq form (cdr form)
- name (car form)
- ;; Ignore the arguments.
- form (cdr (cond ((eq car 'define-skeleton)
- form)
- ((eq car 'define-derived-mode)
- (cddr form))
- (t
- (cdr form))))
- doc (car form))
- (if (stringp doc)
- (setq form (cdr form))
- (setq doc nil))
- (list 'autoload (list 'quote name) file doc
- (or (eq car 'define-skeleton)
- (eq car 'define-derived-mode)
- (eq (car-safe (car form)) 'interactive))
- (if macrop (list 'quote 'macro) nil)))
- nil)))
+ "Turn FORM into an autoload or defvar for source file FILE.
+Returns nil if FORM is not a special autoload form (i.e. a function definition
+or macro definition or a defcustom)."
+ (let ((car (car-safe form)) expand)
+ (cond
+ ;; For complex cases, try again on the macro-expansion.
+ ((and (memq car '(easy-mmode-define-global-mode
+ easy-mmode-define-minor-mode define-minor-mode))
+ (setq expand (let ((load-file-name file)) (macroexpand form)))
+ (eq (car expand) 'progn)
+ (memq :autoload-end expand))
+ (let ((end (memq :autoload-end expand)))
+ ;; Cut-off anything after the :autoload-end marker.
+ (setcdr end nil)
+ (cons 'progn
+ (mapcar (lambda (form) (make-autoload form file))
+ (cdr expand)))))
+
+ ;; For special function-like operators, use the `autoload' function.
+ ((memq car '(defun define-skeleton defmacro define-derived-mode
+ define-generic-mode easy-mmode-define-minor-mode
+ easy-mmode-define-global-mode
+ define-minor-mode defun* defmacro*))
+ (let* ((macrop (memq car '(defmacro defmacro*)))
+ (name (nth 1 form))
+ (body (nthcdr (get car 'doc-string-elt) form))
+ (doc (if (stringp (car body)) (pop body))))
+ ;; `define-generic-mode' quotes the name, so take care of that
+ (list 'autoload (if (listp name) name (list 'quote name)) file doc
+ (or (and (memq car '(define-skeleton define-derived-mode
+ define-generic-mode
+ easy-mmode-define-global-mode
+ easy-mmode-define-minor-mode
+ define-minor-mode)) t)
+ (eq (car-safe (car body)) 'interactive))
+ (if macrop (list 'quote 'macro) nil))))
+
+ ;; Convert defcustom to a simpler (and less space-consuming) defvar,
+ ;; but add some extra stuff if it uses :require.
+ ((eq car 'defcustom)
+ (let ((varname (car-safe (cdr-safe form)))
+ (init (car-safe (cdr-safe (cdr-safe form))))
+ (doc (car-safe (cdr-safe (cdr-safe (cdr-safe form)))))
+ (rest (cdr-safe (cdr-safe (cdr-safe (cdr-safe form))))))
+ (if (not (plist-get rest :require))
+ `(defvar ,varname ,init ,doc)
+ `(progn
+ (defvar ,varname ,init ,doc)
+ (custom-add-to-group ,(plist-get rest :group)
+ ',varname 'custom-variable)
+ (custom-add-load ',varname
+ ,(plist-get rest :require))))))
+
+ ;; nil here indicates that this is not a special autoload form.
+ (t nil))))
(defun make-c-autoload (module)
"Make an autoload list for the DEFUN at point in MODULE.
@@ -283,7 +321,7 @@
;; Generating autoloads for a single file
;;;###autoload
-(defun generate-file-autoloads (file &optional funlist)
+(defun generate-file-autoloads (file)
"Insert at point an autoload section for FILE.
autoloads are generated for defuns and defmacros in FILE
marked by `generate-autoload-cookie' (which see).
@@ -291,26 +329,26 @@
are used."
(interactive "fGenerate autoloads for file: ")
(cond ((string-match "\\.el$" file)
- (generate-autoload-ish-1
+ (generate-autoload-type-section
file
(replace-in-string (file-name-nondirectory file) "\\.elc?$" "")
- nil #'generate-file-autoloads-1
- funlist))
+ nil #'generate-lisp-file-autoloads-1))
;; #### jj, are C++ modules possible?
((string-match "\\.c$" file)
- (generate-autoload-ish-1
+ (generate-autoload-type-section
file
(replace-in-string (file-name-nondirectory file) "\\.c$" "")
- t #'generate-c-file-autoloads-1
- funlist))
+ t #'generate-c-file-autoloads-1))
(t
(error 'wrong-type-argument file "not a C or Elisp source file"))))
-(defun* generate-autoload-ish-1 (file load-name literal fun-to-call &rest args)
+(defun* generate-autoload-type-section (file load-name literal fun-to-call)
"Insert at point an autoload-type section for FILE.
-If LITERAL, open the file literally, without decoding.
-Calls FUN-TO-CALL to compute the autoloads, passing it OUTBUF, LOAD-NAME,
- TRIM-NAME, and ARGS."
+LOAD-NAME is the non-directory portion of the name, with the final .el, .elc
+or .c section removed. If LITERAL, open the file literally, without decoding.
+Calls FUN-TO-CALL to compute the autoloads, with the loaded file in the
+current buffer, passing it OUTBUF (where to write the autoloads), LOAD-NAME,
+and TRIM-NAME (result of calling `autoload-trim-file-name' on FILE)."
(let ((outbuf (current-buffer))
(trim-name (autoload-trim-file-name file))
(autoloads-done '())
@@ -318,6 +356,7 @@
(print-readably t) ; XEmacs
(float-output-format nil)
(visited (get-file-buffer file))
+ suppress-form
;; (done-any nil)
output-end)
@@ -329,21 +368,74 @@
;; subdirectory of the current buffer's directory, we'll make it
;; relative to the current buffer's directory.
(setq file (expand-file-name file))
+ ;; #### FSF 21.2. Do we want this?
+; (let* ((source-truename (file-truename file))
+; (dir-truename (file-name-as-directory
+; (file-truename default-directory)))
+; (len (length dir-truename)))
+; (if (and (< len (length source-truename))
+; (string= dir-truename (substring source-truename 0 len)))
+; (setq file (substring source-truename len))))
+
+ ;; Check for suppression form (XEmacs)
+ (let* ((dir (file-name-directory file))
+ (_pkg (expand-file-name "_pkg.el" dir))
+ (pkg-vis (get-file-buffer _pkg))
+ pkg-buf)
+ (save-excursion
+ (when (file-readable-p _pkg)
+ (unwind-protect
+ (progn
+ (let ((find-file-hooks nil)
+ (enable-local-variables nil))
+ (set-buffer (or pkg-vis (find-file-noselect _pkg)))
+ (set-syntax-table emacs-lisp-mode-syntax-table))
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (block nil
+ (while (search-forward "(package-suppress" nil t)
+ ;; skip over package-name
+ (forward-sexp 1)
+ (let ((supfile (read (current-buffer))))
+ (when (equal supfile load-name)
+ (setq suppress-form (eval (read (current-buffer))))
+ (return))))))))
+ (unless pkg-vis
+ ;; We created this buffer, so we should kill it.
+ (if pkg-buf (kill-buffer pkg-buf)))))))
(save-excursion
(unwind-protect
(progn
- (let ((find-file-hooks nil)
- (enable-local-variables nil))
+ (let (;(find-file-hooks nil)
+ ;(enable-local-variables nil)
+ )
(set-buffer (or visited (find-file-noselect file literal literal
)))
;; This doesn't look right for C files, but it is. The only
;; place we need the syntax table is when snarfing the Lisp
;; function name.
(set-syntax-table emacs-lisp-mode-syntax-table))
+; (if visited
+; (set-buffer visited)
+; ;; It is faster to avoid visiting the file.
+; (set-buffer (get-buffer-create " *generate-autoload-file*"))
+; (kill-all-local-variables)
+; (erase-buffer)
+; (setq buffer-undo-list t
+; buffer-read-only nil)
+; ;; This doesn't look right for C files, but it is. The only
+; ;; place we need the syntax table is when snarfing the Lisp
+; ;; function name.
+; (emacs-lisp-mode)
+; (if literal
+; (insert-file-contents-literally file nil)
+; (insert-file-contents file nil)))
(unless (setq autoloads-done
- (apply fun-to-call outbuf load-name trim-name args))
- (return-from generate-autoload-ish-1))
+ (funcall fun-to-call outbuf load-name trim-name))
+ (return-from generate-autoload-type-section))
)
(unless visited
;; We created this buffer, so we should kill it.
@@ -354,108 +446,124 @@
;; XEmacs -- always do this so that we cache the information
;; that we've processed the file already.
(progn
+ ;; Insert the section-header line
+ ;; which lists the file name and which functions are in it, etc.
(insert generate-autoload-section-header)
- (prin1 (list 'autoloads autoloads-done load-name trim-name)
+ (prin1 (list 'autoloads autoloads-done load-name trim-name
+ ;; In FSF 21.2. Also in FSF 19.30. Presumably
+ ;; deleted from XEmacs.
+ ;; (nth 5 (file-attributes file))
+ )
outbuf)
(terpri outbuf)
- ;;;; (insert ";;; Generated autoloads from "
- ;;;; (autoload-trim-file-name file) "\n")
- ;; Warn if we put a line in auto-autoloads.el
- ;; that is long enough to cause trouble.
- (when (< output-end (point))
- (setq output-end (point-marker)))
- (while (< (point) output-end)
- ;; (let ((beg (point)))
- (end-of-line)
- ;; Emacs -- I still haven't figured this one out.
- ;; (if (> (- (point) beg) 900)
- ;; (progn
- ;; (message "A line is too long--over 900 characters")
- ;; (sleep-for 2)
- ;; (goto-char output-end)))
- ;; )
- (forward-line 1))
+ ;; #### Alas, we will have to think about this. Adding this means
+ ;; that, once we have created or maintained an auto-autoloads file,
+ ;; we alone and our successors can update the file. The file itself
+ ;; will work fine in older XEmacsen, but they won't be able to
+ ;; update autoloads -- hence, to build.
+; ;; Break that line at spaces, to avoid very long lines.
+; ;; Make each sub-line into a comment.
+; (with-current-buffer outbuf
+; (save-excursion
+; (forward-line -1)
+; (while (not (eolp))
+; (move-to-column 64)
+; (skip-chars-forward "^ \n")
+; (or (eolp)
+; (insert "\n" generate-autoload-section-continuation)))))
+ ;; XEmacs: This was commented out before. #### Correct?
+; (insert ";;; Generated autoloads from "
+; (autoload-trim-file-name file) "\n")
+ ;; XEmacs -- handle suppression
+ (when suppress-form
+ (insert "\n;;; Suppress form from _pkg.el\n")
+ (insert "(unless " (prin1-to-string suppress-form) "\n\n"))
(goto-char output-end)
+ ;; XEmacs -- handle suppression
+ (when suppress-form
+ (insert "\n) ;; unless (suppressed)\n"))
(insert generate-autoload-section-trailer)))
- (or noninteractive ; XEmacs: only need one line in -batch mode.
- (message "Generating autoloads for %s...done" file))))
+ ))
-(defun* generate-file-autoloads-1 (outbuf load-name trim-name funlist)
- "Insert at point an autoload section for FILE.
-autoloads are generated for defuns and defmacros in FILE
-marked by `generate-autoload-cookie' (which see).
-If FILE is being visited in a buffer, the contents of the buffer
-are used."
+
+(defun process-one-lisp-autoload (autoloads-done outbuf load-name)
+ "Process a single autoload at point and write to OUTBUF.
+Point should be just after a magic cookie string (e.g. ;;;###autoload).
+Updates AUTOLOADS-DONE and returns the new value."
+ (skip-chars-forward " \t")
+ ;; (setq done-any t)
+ (if (eolp)
+ ;; Read the next form and make an autoload.
+ (let* ((form (prog1 (read (current-buffer))
+ (or (bolp) (forward-line 1))))
+ (autoload (make-autoload form load-name)))
+ (if autoload
+ (setq autoloads-done (cons (nth 1 form)
+ autoloads-done))
+ (setq autoload form))
+ (autoload-print-form autoload outbuf ""))
+ ;; Copy the rest of the line to the output.
+ (cond ((looking-at "immediate\\s *$") ; XEmacs
+ ;; This is here so that you can automatically
+ ;; have small hook functions copied to
+ ;; auto-autoloads.el so that it's not necessary
+ ;; to load a whole file just to get a two-line
+ ;; do-nothing find-file-hook... --Stig
+ (forward-line 1)
+ (let ((begin (point)))
+ (forward-sexp)
+ (forward-line 1)
+ (princ (buffer-substring begin (point)) outbuf)))
+ (t
+ (princ (buffer-substring
+ (progn
+ ;; Back up over whitespace, to preserve it.
+ (skip-chars-backward " \f\t")
+ (if (= (char-after (1+ (point))) ? )
+ ;; Eat one space.
+ (forward-char 1))
+ (point))
+ (progn (forward-line 1) (point)))
+ outbuf))))
+ autoloads-done)
+
+(defun* generate-lisp-file-autoloads-1 (outbuf load-name trim-name)
+ "Insert at point in OUTBUF an autoload section for an Elisp file.
+The file is assumed to be already loaded and in the current buffer.
+autoloads are generated for defuns and defmacros marked by
+`generate-autoload-cookie' (which see)."
(let ((autoloads-done '())
- (dofiles (not (null funlist)))
)
-
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(unless (search-forward generate-autoload-cookie nil t)
(message "No autoloads found in %s" trim-name)
- (return-from generate-file-autoloads-1 nil))
+ (return-from generate-lisp-file-autoloads-1 nil))
(message "Generating autoloads for %s..." trim-name)
(goto-char (point-min))
- (while (if dofiles funlist (not (eobp)))
- (if (not dofiles)
- (skip-chars-forward " \t\n\f")
- (goto-char (point-min))
- (re-search-forward
- (concat "(def\\(un\\|var\\|const\\|macro\\) "
- (regexp-quote (symbol-name (car funlist)))
- "\\s "))
- (goto-char (match-beginning 0)))
+ (while (not (eobp))
+ (skip-chars-forward " \t\n\f")
(cond
- ((or dofiles
- (looking-at (regexp-quote generate-autoload-cookie)))
- (if dofiles
- nil
- (search-forward generate-autoload-cookie)
- (skip-chars-forward " \t"))
- ;; (setq done-any t)
- (if (or dofiles (eolp))
- ;; Read the next form and make an autoload.
- (let* ((form (prog1 (read (current-buffer))
- (or (bolp) (forward-line 1))))
- (autoload (make-autoload form load-name))
- (doc-string-elt (get (car-safe form)
- 'doc-string-elt)))
- (if autoload
- (setq autoloads-done (cons (nth 1 form)
- autoloads-done))
- (setq autoload form))
- (print-autoload autoload doc-string-elt outbuf ""))
- ;; Copy the rest of the line to the output.
- (let ((begin (point)))
- ;; (terpri outbuf)
- (cond ((looking-at "immediate\\s *$") ; XEmacs
- ;; This is here so that you can automatically
- ;; have small hook functions copied to
- ;; auto-autoloads.el so that it's not necessary
- ;; to load a whole file just to get a two-line
- ;; do-nothing find-file-hook... --Stig
- (forward-line 1)
- (setq begin (point))
- (forward-sexp)
- (forward-line 1))
- (t
- (forward-line 1)))
- (princ (buffer-substring begin (point)) outbuf))))
+ ((looking-at (regexp-quote generate-autoload-cookie))
+ (search-forward generate-autoload-cookie)
+ (setq autoloads-done
+ (process-one-lisp-autoload autoloads-done outbuf load-name)))
((looking-at ";")
;; Don't read the comment.
(forward-line 1))
(t
(forward-sexp 1)
(forward-line 1)))
- (if dofiles
- (setq funlist (cdr funlist))))))
+ )))
+ (or noninteractive ; XEmacs: only need one line in -batch mode.
+ (message "Generating autoloads for %s...done" trim-name))
autoloads-done))
-(defun* generate-c-file-autoloads-1 (outbuf load-name trim-name funlist)
+(defun* generate-c-file-autoloads-1 (outbuf load-name trim-name
+ &optional funlist)
"Insert at point an autoload section for the C file FILE.
autoloads are generated for defuns and defmacros in FILE
marked by `generate-c-autoload-cookie' (which see).
@@ -488,7 +596,7 @@
(let ((autoload (make-c-autoload load-name)))
(when autoload
(push (nth 1 (nth 1 autoload)) autoloads-done)
- (print-autoload autoload 3 outbuf " "))))
+ (autoload-print-form autoload outbuf " "))))
;; close the princ'd `when' form
(princ ")" outbuf))
(goto-char (point-min))
@@ -505,91 +613,175 @@
(let ((autoload (make-c-autoload load-name)))
(when autoload
(push (nth 1 (nth 1 autoload)) autoloads-done)
- (print-autoload autoload 3 outbuf " ")))
+ (autoload-print-form autoload outbuf " ")))
(setq match
(search-forward generate-c-autoload-cookie nil t)))
;; close the princ'd `when' form
(princ ")" outbuf)))))
+ (or noninteractive ; XEmacs: only need one line in -batch mode.
+ (message "Generating autoloads for %s...done" trim-name))
+ autoloads-done))
+
+;;;###autoload
+(defun generate-custom-defines (file)
+ "Insert at point a custom-define section for FILE.
+If FILE is being visited in a buffer, the contents of the buffer
+are used."
+ (interactive "fGenerate custom defines for file: ")
+ (cond ((string-match "\\.el$" file)
+ (generate-autoload-type-section
+ file
+ (replace-in-string (file-name-nondirectory file) "\\.elc?$" "")
+ nil #'generate-custom-defines-1))
+ ((string-match "\\.c$" file)
+ ;; no way to generate custom-defines for C files (currently?),
+ ;; but cannot signal an error.
+ nil)
+ (t
+ (error 'wrong-type-argument file "not a C or Elisp source file"))))
+
+(defun* generate-custom-defines-1 (outbuf load-name trim-name)
+ "Insert at point in OUTBUF a custom-define section for an Elisp file.
+This contains all defcustoms and defgroups in the file.
+The file is assumed to be already loaded and in the current buffer."
+ (let* ((search-regexp-1 "^(\\(defcustom\\|defgroup\\) ")
+ (search-string-2 ";;;###custom-define")
+ (search-regexp-2 (regexp-quote search-string-2))
+ (autoloads-done '()))
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (unless (or (re-search-forward search-regexp-1 nil t)
+ (re-search-forward search-regexp-2 nil t))
+ (message "No custom defines found in %s" trim-name)
+ (return-from generate-custom-defines-1 nil))
+ (message "Generating custom defines for %s..." trim-name)
+ (princ "(defconst custom-define-current-source-file " outbuf)
+ (prin1 (file-relative-name (buffer-file-name)
+ (symbol-value-in-buffer 'default-directory
+ outbuf)) outbuf)
+ (princ ")\n" outbuf)
+
+ (goto-char (point-min))
+ (while (not (eobp))
+ (skip-chars-forward " \t\n\f")
+ (cond
+ ((looking-at search-regexp-1)
+ ;; Read the next form and copy it to make an autoload.
+ (let* ((form (prog1 (read (current-buffer))
+ (or (bolp) (forward-line 1))))
+ (autoload form ;(make-autoload form load-name)
+ ))
+ (if autoload
+ (setq autoloads-done (cons (nth 1 form)
+ autoloads-done))
+ (setq autoload form))
+ (autoload-print-form autoload outbuf ""))
+ )
+ ((looking-at search-regexp-2)
+ (search-forward search-string-2)
+ (beep)
+ (setq autoloads-done
+ (process-one-lisp-autoload autoloads-done outbuf load-name)))
+ ((looking-at ";")
+ ;; Don't read the comment.
+ (forward-line 1))
+ (t
+ (forward-sexp 1)
+ (forward-line 1)))
+ )))
+ (or noninteractive ; XEmacs: only need one line in -batch mode.
+ (message "Generating custom defines for %s...done" trim-name))
autoloads-done))
-;; Assorted utilities for generating autoloads and pieces thereof
+;; Assorted utilities for generating autoloads and pieces thereof
-(defun print-autoload (autoload doc-string-elt outbuf margin)
+(defun autoload-print-form (form outbuf margin)
"Print an autoload form, handling special characters.
In particular, print docstrings with escapes inserted before left parentheses
at the beginning of lines and ^L characters."
- (if (and doc-string-elt (stringp (nth doc-string-elt autoload)))
- ;; We need to hack the printing because the doc-string must be
- ;; printed specially for make-docfile (sigh).
- (let* ((p (nthcdr (1- doc-string-elt) autoload))
- (elt (cdr p))
- (start-string (format "\n%s(" margin)))
- (setcdr p nil)
- (princ start-string outbuf)
- ;; XEmacs change: don't let ^^L's get into
- ;; the file or sorting is hard.
- (let ((print-escape-newlines t)
- (p (save-excursion
- (set-buffer outbuf)
- (point)))
+ (cond
+ ;; If the form is a sequence, recurse.
+ ((eq (car form) 'progn)
+ (mapcar #'(lambda (x) (autoload-print-form x outbuf margin))
+ (cdr form)))
+ ;; Symbols at the toplevel are meaningless.
+ ((symbolp form) nil)
+ (t
+ (let ((doc-string-elt (get (car-safe form) 'doc-string-elt)))
+ (if (and doc-string-elt (stringp (nth doc-string-elt form)))
+ ;; We need to hack the printing because the doc-string must be
+ ;; printed specially for make-docfile (sigh).
+ (let* ((p (nthcdr (1- doc-string-elt) form))
+ (elt (cdr p))
+ (start-string (format "\n%s(" margin)))
+ (setcdr p nil)
+ (princ start-string outbuf)
+ ;; XEmacs change: don't let ^^L's get into
+ ;; the file or sorting is hard.
+ (let ((print-escape-newlines t)
+ ;;#### FSF 21.2 (print-escape-nonascii t)
+ (p (point outbuf))
+ p2)
+ (mapcar #'(lambda (elt)
+ (prin1 elt outbuf)
+ (princ " " outbuf))
+ form)
+ (with-current-buffer outbuf
+ (setq p2 (point-marker))
+ (goto-char p)
+ (save-match-data
+ (while (search-forward "\^L" p2 t)
+ (delete-char -1)
+ (insert "\\^L")))
+ (goto-char p2)))
+ (princ "\"\\\n" outbuf)
+ (let ((begin (point outbuf)))
+ (princ (substring (prin1-to-string (car elt)) 1) outbuf)
+ ;; Insert a backslash before each ( that appears at the beginning
+ ;; of a line in the doc string.
+ (with-current-buffer outbuf
+ (save-excursion
+ (while (search-backward start-string begin t)
+ (forward-char 1)
+ (insert "\\"))))
+ (if (null (cdr elt))
+ (princ ")" outbuf)
+ (princ " " outbuf)
+ (princ (substring (prin1-to-string (cdr elt)) 1) outbuf))
+ (terpri outbuf)
+ (princ margin outbuf)))
+ ;; XEmacs change: another ^L hack
+ (let ((p (point outbuf))
+ (print-escape-newlines t)
+ ;;#### FSF 21.2 (print-escape-nonascii t)
p2)
- (mapcar #'(lambda (elt)
- (prin1 elt outbuf)
- (princ " " outbuf))
- autoload)
- (save-excursion
- (set-buffer outbuf)
+ (print form outbuf)
+ (with-current-buffer outbuf
(setq p2 (point-marker))
(goto-char p)
(save-match-data
(while (search-forward "\^L" p2 t)
(delete-char -1)
(insert "\\^L")))
- (goto-char p2)))
- (princ "\"\\\n" outbuf)
- (let ((begin (save-excursion
- (set-buffer outbuf)
- (point))))
- (princ (substring (prin1-to-string (car elt)) 1) outbuf)
- ;; Insert a backslash before each ( that appears at the beginning
- ;; of a line in the doc string.
- (save-excursion
- (set-buffer outbuf)
- (save-excursion
- (while (search-backward start-string begin t)
- (forward-char 1)
- (insert "\\"))))
- (if (null (cdr elt))
- (princ ")" outbuf)
- (princ " " outbuf)
- (princ (substring (prin1-to-string (cdr elt)) 1) outbuf))
- (terpri outbuf)
- (princ margin outbuf)))
- ;; XEmacs change: another ^L hack
- (let ((p (save-excursion
- (set-buffer outbuf)
- (point)))
- (print-escape-newlines t)
- p2)
- (print autoload outbuf)
- (save-excursion
- (set-buffer outbuf)
- (setq p2 (point-marker))
- (goto-char p)
- (save-match-data
- (while (search-forward "\^L" p2 t)
- (delete-char -1)
- (insert "\\^L")))
- (goto-char p2)))))
+ (goto-char p2))))))))
;;; Forms which have doc-strings which should be printed specially.
;;; A doc-string-elt property of ELT says that (nth ELT FORM) is
;;; the doc-string in FORM.
+;;;
+;;; There used to be the following note here:
+;;; ;;; Note: defconst and defvar should NOT be marked in this way.
+;;; ;;; We don't want to produce defconsts and defvars that
+;;; ;;; make-docfile can grok, because then it would grok them twice,
+;;; ;;; once in foo.el (where they are given with ;;;###autoload) and
+;;; ;;; once in loaddefs.el.
;;;
-;;; defvar and defconst should be also be marked in this way. There is
-;;; no interference from make-docfile, which only processes those files
-;;; that are loaded into the dumped Emacs, and those files should
-;;; never have anything autoloaded here. Problems only occur with files
+;;; Counter-note: Yes, they should be marked in this way.
+;;; make-docfile only processes those files that are loaded into the
+;;; dumped Emacs, and those files should never have anything
+;;; autoloaded here. The above-feared problem only occurs with files
;;; which have autoloaded entries *and* are processed by make-docfile;
;;; there should be no such files.
@@ -597,11 +789,18 @@
(put 'defun 'doc-string-elt 3)
(put 'defun* 'doc-string-elt 3)
(put 'defvar 'doc-string-elt 3)
+(put 'defcustom 'doc-string-elt 3)
(put 'defconst 'doc-string-elt 3)
(put 'defmacro 'doc-string-elt 3)
(put 'defmacro* 'doc-string-elt 3)
-(put 'define-skeleton 'doc-string-elt 3)
+(put 'defsubst 'doc-string-elt 3)
+(put 'define-skeleton 'doc-string-elt 2)
(put 'define-derived-mode 'doc-string-elt 4)
+(put 'easy-mmode-define-minor-mode 'doc-string-elt 2)
+(put 'define-minor-mode 'doc-string-elt 2)
+(put 'define-generic-mode 'doc-string-elt 7)
+;; defin-global-mode has no explicit docstring.
+(put 'easy-mmode-define-global-mode 'doc-string-elt 1000)
(defun autoload-trim-file-name (file)
"Returns relative pathname of FILE including the last directory.
@@ -615,6 +814,27 @@
;; #### is this a good idea?
"\\\\" "/"))
+(defun autoload-read-section-header ()
+ "Read a section header form.
+Since continuation lines have been marked as comments,
+we must copy the text of the form and remove those comment
+markers before we call `read'."
+ (save-match-data
+ (let ((beginning (point))
+ string)
+ (forward-line 1)
+ (while (looking-at generate-autoload-section-continuation)
+ (forward-line 1))
+ (setq string (buffer-substring beginning (point)))
+ (with-current-buffer (get-buffer-create " *autoload*")
+ (erase-buffer)
+ (insert string)
+ (goto-char (point-min))
+ (while (search-forward generate-autoload-section-continuation nil t)
+ (replace-match " "))
+ (goto-char (point-min))
+ (read (current-buffer))))))
+
;;;###autoload
(defun update-file-autoloads (file)
"Update the autoloads for FILE in `generated-autoload-file'
@@ -633,16 +853,42 @@
(trim-name (autoload-trim-file-name file))
section-begin form)
(save-excursion
+ ;; FSF has: [[ We want to get a value for generated-autoload-file
+ ;; from the local variables section if it's there. ]] Not
+ ;; applicable in XEmacs, since we always keep the autoloads
+ ;; up-to-date.
+
+ ;; #### FSF 21.2 adds: [[ We must read/write the file without any
+ ;; code conversion, but still decode EOLs. ]] Not clear if we need
+ ;; this. --ben
+ ;; (let ((coding-system-for-read 'raw-text))
(let ((find-file-hooks nil))
(set-buffer (or (get-file-buffer generated-autoload-file)
(find-file-noselect generated-autoload-file))))
+ ;; FSF 21.2 says:
+
+ ;; [[ This is to make generated-autoload-file have Unix EOLs, so
+ ;; that it is portable to all platforms. ]]
+ ;; (setq buffer-file-coding-system 'raw-text-unix))
+ ;; Not applicable in XEmacs, since we always keep the autoloads
+ ;; up-to-date and recompile when we build.
+
+ ;; FSF 21.2: [not applicable to XEmacs]
+; (or (> (buffer-size) 0)
+; (error "Autoloads file %s does not exist" buffer-file-name))
+; (or (file-writable-p buffer-file-name)
+; (error "Autoloads file %s is not writable" buffer-file-name))
+
+ ;; NOTE: The rest of this function is totally changed from FSF.
+ ;; Hence, not synched.
+
;; Make sure we can scribble in it.
(setq buffer-read-only nil)
;; First delete all sections for this file.
(goto-char (point-min))
(while (search-forward generate-autoload-section-header nil t)
(setq section-begin (match-beginning 0))
- (setq form (read (current-buffer)))
+ (setq form (autoload-read-section-header))
(when (string= (nth 2 form) load-name)
(search-forward generate-autoload-section-trailer)
(delete-region section-begin (point))))
@@ -651,7 +897,7 @@
(block find-insertion-point
(goto-char (point-min))
(while (search-forward generate-autoload-section-header nil t)
- (setq form (read (current-buffer)))
+ (setq form (autoload-read-section-header))
(when (string< trim-name (nth 3 form))
;; Found alphabetically correct insertion point
(goto-char (match-beginning 0))
@@ -661,65 +907,15 @@
(goto-char (point-max)))) ; Append.
;; Add in new sections for file
- (generate-file-autoloads file))
+ (funcall generate-autoload-function file))
(when (interactive-p) (save-buffer)))))
-;;;###autoload
-(defun update-autoloads-here ()
- "Update sections of the current buffer generated by
`update-file-autoloads'."
- (interactive)
- (let ((generated-autoload-file (buffer-file-name)))
- (save-excursion
- (goto-char (point-min))
- (while (search-forward generate-autoload-section-header nil t)
- (let* ((form (condition-case ()
- (read (current-buffer))
- (end-of-file nil)))
- (file (nth 3 form)))
- ;; XEmacs change: if we can't find the file as specified, look
- ;; around a bit more.
- (cond ((and (stringp file)
- (or (get-file-buffer file)
- (file-exists-p file))))
- ((and (stringp file)
- (save-match-data
- (let ((loc (locate-file (file-name-nondirectory file)
- load-path)))
- (if (null loc)
- nil
- (setq loc (expand-file-name
- (autoload-trim-file-name loc)
- ".."))
- (if (or (get-file-buffer loc)
- (file-exists-p loc))
- (setq file loc)
- nil))))))
- (t
- (setq file
- (if (y-or-n-p
- (format
- "Can't find library `%s'; remove its autoloads? "
- (nth 2 form) file))
- t
- (condition-case ()
- (read-file-name
- (format "Find `%s' load file: "
- (nth 2 form))
- nil nil t)
- (quit nil))))))
- (if file
- (let ((begin (match-beginning 0)))
- (search-forward generate-autoload-section-trailer)
- (delete-region begin (point))))
- (if (stringp file)
- (generate-file-autoloads file)))))))
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Utilities for batch updates
;;;###autoload
-(defun autoload-update-directory-autoloads ()
+(defun batch-update-directory-autoloads ()
"Update the autoloads for a directory, using a specified feature prefix.
Must be used only with -batch. The feature prefix and directory to update
are taken from the first and second elements of `command-line-args-left',
@@ -730,16 +926,33 @@
applying `autoload-make-feature-name' to the specified feature prefix.
#### The API and semantics of this function are subject to change."
+ (unless noninteractive
+ (error "batch-update-directory-autoloads: may be used only with
-batch"))
+ (update-autoload-files (list (cadr command-line-args-left))
+ (car command-line-args-left) nil t)
+ (setq command-line-args-left (cddr command-line-args-left)))
+
+;;;###autoload
+(defun batch-update-directory-custom-defines ()
+ "Update the custom defines for a directory, using a specified feature prefix.
+Must be used only with -batch. The feature prefix and directory to update
+are taken from the first and second elements of `command-line-args-left',
+respectively, and they are then removed from `command-line-args-left'.
+
+Runs `update-file-autoloads' on each file in the given directory. Always
+rewrites the autoloads file, even if unchanged. Makes a feature name by
+applying `autoload-make-feature-name' to the specified feature prefix.
+
+#### The API and semantics of this function are subject to change."
(unless noninteractive
- (error "autoload-batch-update-autoloads: may be used only with -batch"))
- (let* ((autoload-feature-prefix (car command-line-args-left))
- (dir (cadr command-line-args-left))
- (generated-autoload-file (expand-file-name autoload-file-name dir)))
- (update-autoload-files (list dir) t t)
- (setq command-line-args-left (cddr command-line-args-left))))
+ (error "batch-update-directory-custom-defines: may be used only with
-batch"))
+ (update-custom-define-files (list (cadr command-line-args-left))
+ (car command-line-args-left) nil t)
+ (setq command-line-args-left (cddr command-line-args-left)))
;;;###autoload
-(defun update-autoload-files (files-or-dirs &optional all-into-one-file force)
+(defun update-autoload-files (files-or-dirs feature-prefix
+ &optional into-file force)
"Update all the autoload files associated with FILES-OR-DIRS.
FILES-OR-DIRS is a list of files and/or directories to be processed.
@@ -747,98 +960,144 @@
each element of FILES-OR-DIRS. Fixup code testing for the autoload file's
feature and to provide the feature is added.
-If optional ALL-INTO-ONE-FILE is non-`nil', `generated-autoload-file'
-should be set to the name of an autoload file and all autoloads will be
-placed in that file. `autoload-feature-prefix' should be set to an
-appropriate prefix which will be concatenated with \"-autoloads\" to
-produce the feature name. Otherwise the appropriate autoload file for
-each file or directory (located in that directory, or in the directory of
-the specified file) will be updated with the directory's or file's
-autoloads and the protective forms will be added, and the files will be
-saved. Use of the default here is unreliable, and therefore deprecated.
+If optional INTO-FILE is non-`nil', it should specify a file into which
+the autoloads will be placed. Otherwise, the autoloads will be placed into
+a file named `auto-autoloads.el' in the directory of each element in
+FILES-OR-DIRS.
+
+FEATURE-PREFIX should be set to an appropriate prefix which will
+be concatenated with \"-autoloads\" to produce the feature name. Otherwise
+the appropriate autoload file for each file or directory (located in that
+directory, or in the directory of the specified file) will be updated with
+the directory's or file's autoloads and the protective forms will be added,
+and the files will be saved. Use of the default here is unreliable, and
+therefore deprecated.
Note that if some of FILES-OR-DIRS are directories, recursion goes only
one level deep.
If FORCE is non-nil, always save out the autoload files even if unchanged."
+ (or (listp files-or-dirs) (setq files-or-dirs (list files-or-dirs)))
(let ((defdir (directory-file-name default-directory))
;; value for all-into-one-file
- (autoload-feature-name (autoload-make-feature-name))
- (enable-local-eval nil)) ; Don't query in batch mode.
+ (autoload-feature-name (autoload-make-feature-name feature-prefix))
+ (enable-local-eval nil) ; Don't query in batch mode.
+ (autoload-feature-prefix feature-prefix)
+ ;; protect from change
+ (generated-autoload-file generated-autoload-file))
(dolist (arg files-or-dirs)
(setq arg (expand-file-name arg defdir))
(cond
((file-directory-p arg)
+ (setq generated-autoload-file
+ (or into-file (expand-file-name autoload-file-name arg)))
(message "Updating autoloads for directory %s..." arg)
- (update-autoloads-from-directory arg))
+ (let ((simple-dir (file-name-as-directory
+ (file-name-nondirectory
+ (directory-file-name arg))))
+ (enable-local-eval nil))
+ (save-excursion
+ (let ((find-file-hooks nil))
+ (set-buffer (find-file-noselect generated-autoload-file)))
+ (goto-char (point-min))
+ (while (search-forward generate-autoload-section-header nil t)
+ (let* ((begin (match-beginning 0))
+ (form (autoload-read-section-header))
+ (file (nth 3 form)))
+ (when (and (stringp file)
+ (string= (file-name-directory file) simple-dir)
+ (not (file-exists-p
+ (expand-file-name
+ (file-name-nondirectory file) arg))))
+ ;; Remove the obsolete section.
+ (search-forward generate-autoload-section-trailer)
+ (delete-region begin (point)))))
+ ;; Update or create autoload sections for existing files.
+ (mapcar 'update-file-autoloads
+ (directory-files arg t "^[^=].*\\.\\(el\\|c\\)$")))))
((file-exists-p arg)
+ (setq generated-autoload-file
+ (or into-file (expand-file-name autoload-file-name
+ (file-name-directory arg))))
(update-file-autoloads arg))
(t (error "No such file or directory: %s" arg)))
- (when (not all-into-one-file)
+ (when (not into-file)
(autoload-featurep-protect-autoloads
(autoload-make-feature-name
- (file-name-nondirectory (directory-file-name arg))))
+ (or feature-prefix
+ (file-name-nondirectory (directory-file-name arg)))))
(if force (set-buffer-modified-p
t (find-file-noselect generated-autoload-file)))))
- (when all-into-one-file
+ (when into-file
(autoload-featurep-protect-autoloads autoload-feature-name)
(if force (set-buffer-modified-p
- t (find-file-noselect generated-autoload-file))))
+ t (find-file-noselect into-file))))
(save-some-buffers t)
))
;;;###autoload
-(defun update-autoloads-from-directory (dir)
- "Update `generated-autoload-file' with all the current autoloads from DIR.
-This runs `update-file-autoloads' on each .el and .c file in DIR.
-Obsolete autoload entries for files that no longer exist are deleted.
-Note that, if this function is called from `batch-update-directory',
-`generated-autoload-file' was rebound in that function.
-
-You don't really want to be calling this function. Try using
-`update-autoload-files' instead."
- (interactive "DUpdate autoloads for directory: ")
- (setq dir (expand-file-name dir))
- (let ((simple-dir (file-name-as-directory
- (file-name-nondirectory
- (directory-file-name dir))))
- (enable-local-eval nil))
- (save-excursion
- (let ((find-file-hooks nil))
- (set-buffer (find-file-noselect generated-autoload-file)))
- (goto-char (point-min))
- (while (search-forward generate-autoload-section-header nil t)
- (let* ((begin (match-beginning 0))
- (form (condition-case ()
- (read (current-buffer))
- (end-of-file nil)))
- (file (nth 3 form)))
- (when (and (stringp file)
- (string= (file-name-directory file) simple-dir)
- (not (file-exists-p
- (expand-file-name
- (file-name-nondirectory file) dir))))
- ;; Remove the obsolete section.
- (search-forward generate-autoload-section-trailer)
- (delete-region begin (point)))))
- ;; Update or create autoload sections for existing files.
- (mapcar 'update-file-autoloads
- (directory-files dir t "^[^=].*\\.\\(el\\|c\\)$"))
- (unless noninteractive
- (save-buffer)))))
+(defun update-custom-define-files (files-or-dirs feature-prefix
+ &optional into-file force)
+ "Update all the custom-define files associated with FILES-OR-DIRS.
+Works just like `update-file-autoloads'."
+ (let* ((autoload-feature-suffix "-custom-defines")
+ (autoload-file-name "custom-defines.el")
+ (generate-autoload-function #'generate-custom-defines))
+ (update-autoload-files files-or-dirs feature-prefix into-file force)))
(defun autoload-featurep-protect-autoloads (sym)
(save-excursion
(set-buffer (find-file-noselect generated-autoload-file))
(goto-char (point-min))
- (if (and (not (= (point-min) (point-max)))
- (not (looking-at ";;; DO NOT MODIFY THIS FILE")))
- (progn
- (insert ";;; DO NOT MODIFY THIS FILE\n")
- (insert "(if (featurep '" sym ")")
- (insert " (error \"Feature " sym " already
loaded\"))\n")
- (goto-char (point-max))
- (insert "\n(provide '" sym ")\n")))))
+ (cond ((eq (point-min) (point-max)) nil)
+ ;; if there's some junk in the file but no sections, just
+ ;; delete everything. the junk might be stuff inserted by
+ ;; an older version of this function.
+ ((not (search-forward generate-autoload-section-header nil t))
+ (delete-region (point-min) (point-max)))
+ (t
+ (goto-char (point-min))
+ (when (looking-at ";;; DO NOT MODIFY THIS FILE")
+ (delete-region (point-min)
+ (progn
+ (search-forward generate-autoload-section-header)
+ (match-beginning 0))))
+ ;; Determine and set the coding system for the file if under Mule.
+ ;; If there are any extended characters in the input file, use
+ ;; `escape-quoted' to make sure that both binary and extended
+ ;; characters are output properly and distinguished properly.
+ ;; Otherwise, use `raw-text' for maximum portability with non-Mule
+ ;; Emacsen.
+ (if (or (featurep '(not mule)) ;; Don't scan if no Mule support
+ (progn
+ (goto-char (point-min))
+ ;; mrb- There must be a better way than skip-chars-forward
+ (skip-chars-forward (concat (char-to-string 0) "-"
+ (char-to-string 255)))
+ (eq (point) (point-max))))
+ (setq buffer-file-coding-system 'raw-text-unix)
+ (setq buffer-file-coding-system 'escape-quoted))
+ (goto-char (point-min))
+ (insert ";;; DO NOT MODIFY THIS FILE")
+ ;; NOTE: XEmacs prior to 21.5.12 or so had a bug in that it
+ ;; recognized only one of the two magic-cookie styles (the -*- kind)
+ ;; in find-file, but both of them in load. We go ahead and put both
+ ;; in, just to be safe.
+ (when (eq buffer-file-coding-system 'escape-quoted)
+ (insert " -*- coding: escape-quoted; -*-
+\(or (featurep 'mule) (error \"Loading this file requires Mule
support\"))
+;;;###coding system: escape-quoted"))
+ (insert "\n(if (featurep '" sym ")")
+ (insert " (error \"Feature " sym " already
loaded\"))\n")
+ (goto-char (point-max))
+ (save-excursion
+ (forward-line -1)
+ (when (looking-at "(provide")
+ (delete-region (point) (point-max))))
+ (unless (bolp) (insert "\n"))
+ (unless (eq (char-before (1- (point))) ?\^L)
+ (insert "\^L\n"))
+ (insert "(provide '" sym ")\n")))))
(defun autoload-make-feature-name (&optional prefix)
"Generate the feature name to protect this auto-autoloads file from PREFIX.
@@ -864,19 +1123,23 @@
(file-name-directory generated-autoload-file))))
(t (error 'invalid-argument
"Could not compute a feature name")))
- "-autoloads"))
+ autoload-feature-suffix))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Deprecated entry points
;; A grep of the core and packages shows use of `batch-update-autoloads'
;; by XEmacs.rules, pcomplete, eshell, oort-gnus; `batch-update-directory'
-;; by liece.
+;; by liece. The other two entry points (`batch-update-one-directory',
+;; `batch-force-update-one-directory') were not used at all.
+;;
+;; All except the first are now history. liece has been updated.
+;; XEmacs.rules has been updated. The others will be, eventually.
+
+;; There don't seem to be very many packages that use the first one (the
+;; "all-into-one-file" variety), and do they actually rely on this
+;; functionality? --ben
-;; #### these entry points below are a big mess, especially the
-;; first two. there don't seem to be very many packages that use the
-;; first one (the "all-into-one-file" variety), and do they actually
-;; rely on this functionality? --ben
;; but XEmacs.rules does, though maybe it doesn't "rely" on it, and
;; modules do now, and that relies on it. --sjt
@@ -891,58 +1154,14 @@
on the command line."
(unless noninteractive
(error "batch-update-autoloads is to be used only with -batch"))
- (update-autoload-files command-line-args-left t)
+ (update-autoload-files command-line-args-left autoload-feature-prefix nil t)
(kill-emacs 0))
-;;;###autoload
-(defun batch-update-directory ()
- "Update the autoloads for the directories on the command line.
-Runs `update-file-autoloads' on each file in the given directory, and must
-be used only with -batch.
-
-Uses and removes the first element of `command-line-args-left'."
- (unless noninteractive
- (error "batch-update-directory is to be used only with -batch"))
- (update-autoload-files command-line-args-left)
- ;; (kill-emacs 0)
- (setq command-line-args-left nil))
-
-;;;###autoload
-(defun batch-update-one-directory ()
- "Update the autoloads for a single directory on the command line.
-Runs `update-file-autoloads' on each file in the given directory, and must
-be used only with -batch."
- (unless noninteractive
- (error "batch-update-one-directory is to be used only with -batch"))
- (let ((arg (car command-line-args-left)))
- (setq command-line-args-left (cdr command-line-args-left))
- (update-autoload-files (list arg))))
-
-;;;###autoload
-(defun batch-force-update-one-directory ()
- "Update the autoloads for a single directory on the command line.
-Runs `update-file-autoloads' on each file in the given directory, and must
-be used only with -batch. Always rewrites the autoloads file, even if
-unchanged.
-
-Uses and removes the first element of `command-line-args-left'."
- (unless noninteractive
- (error "batch-force-update-directory is to be used only with -batch"))
- (let ((arg (car command-line-args-left)))
- (setq command-line-args-left (cdr command-line-args-left))
- (update-autoload-files (list arg) nil t)))
-
;; Declare obsolescence
(make-obsolete-variable 'autoload-target-directory
"Don't use this. Bind `generated-autoload-file' to an absolute
path.")
(make-obsolete 'batch-update-autoloads
- 'autoload-update-directory-autoloads)
-(make-obsolete 'batch-update-directory
- 'autoload-update-directory-autoloads)
-(make-obsolete 'batch-update-one-directory
- 'autoload-update-directory-autoloads)
-(make-obsolete 'batch-force-update-one-directory
'autoload-update-directory-autoloads)
(provide 'autoload)
1.4.10.1 +22 -470 XEmacs/xemacs/lisp/behavior-defs.el
Index: behavior-defs.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/behavior-defs.el,v
retrieving revision 1.4
retrieving revision 1.4.10.1
diff -u -r1.4 -r1.4.10.1
--- behavior-defs.el 2002/03/15 07:43:18 1.4
+++ behavior-defs.el 2005/03/15 05:20:41 1.4.10.1
@@ -1,6 +1,6 @@
;;; behavior-defs.el --- definitions of specific behaviors
-;; Copyright (C) 2000, 2001, 2002 Ben Wing.
+;; Copyright (C) 2000, 2001, 2002, 2003 Ben Wing.
;; Author: Ben Wing
;; Maintainer: XEmacs Development Team
@@ -31,475 +31,27 @@
;;; Commentary:
-;; This file will be dumped with XEmacs.
+;; This file is dumped with XEmacs.
;;; Code:
-(require 'behavior)
-
-(define-behavior 'scroll-in-place
-"This package provides improved vertical scrolling commands for XEmacs.
-These new commands offer the following features:
-
-+ When a scrolling command is executed, XEmacs tries to keep point as
- close as possible to its original window position (window line and
- column). This is what \"scroll in place\" means: point stays \"in
place\"
- within the window. (There are times when point must be moved from its
- original window position in order to execute the scroll; see below.)
-
- The variable `scroll-in-place', which is true by default, determines
- whether or not the standard XEmacs scrolling commands (`scroll-down',
- `scroll-up', `scroll-other-window-down', and `scroll-other-window') use
- the \"in place\" features listed here. When `scroll-in-place' is
`nil'
- the standard XEmacs scrolling commands essentially just call the
- original versions of themselves. (Note that even when `scroll-in-place'
- is `nil' the new versions of `scroll-down' and `scroll-up' have slightly
- different behavior when a minibuffer window is the selected window. See
- below.)
-
- It is possible to turn off (or turn on) \"in place\" scrolling for certain
- buffers by making buffer-local bindings of the variable `scroll-in-
- place' for those buffers. The variable `scroll-in-place' is not usually
- buffer-local, but you can make it so if you desire.
-
-+ Because the improved scrolling commands keep point at its original
- window position, these scrolling commands are \"reversible.\" The
- `scroll-up' command undoes the effect of the immediately previous
- `scroll-down' command (if any) and vice versa. In other words, if you
- scroll up and then immediately scroll back down, the window config-
- uration is restored to its exact original state. This allows you to
- browse through a buffer more easily, as you can always get back to the
- original configuration.
-
- Note, however, that the improved scrolling commands are guaranteed to be
- reversible only if there are no intervening non-scrolling commands.
- Also, if you give a prefix argument to a scrolling command (in order to
- specify the number of lines to scroll by), previous scrolling commands
- may no longer be reversible. More specifically, if the new prefix
- argument has a different magnitude than the previous scrolling distance,
- then any previous scrolling commands are not reversible. The new prefix
- argument takes precedence.
-
- You might find it useful to think of the scrolling commands as forming
- \"chains.\" A scrolling command either starts or continues a chain. By
- issuing a non-scrolling command or by changing the number of lines to be
- scrolled, you break the chain. (Note that simply changing the scrolling
- direction won't break the chain; changing the absolute number of lines
- to be scrolled is what breaks the chain.) Scrolling commands are
- guaranteed to be reversible only within the current chain. Hopefully
- that's clear enough.
-
-+ When a scrolling command is given a prefix argument (which specifies the
- number of lines to scroll by), then that argument becomes the default
- scrolling distance for all immediately subsequent scrolling commands.
- This means that you can easily set the scrolling distance for a chain
- of scrolling commands. Note that a new prefix argument or any non-
- scrolling command breaks the chain (as described above), and any further
- scrolling commands will use the usual defaults (or the prefix argument
- you specify at that time, of course).
-
- However, there are cases in which one doesn't want the current scrolling
- command to use the default scrolling distance that was set by the
- previous scrolling command. For example, suppose that you had special
- commands that scrolled one line up and one line down. When you invoke
- one of these commands, the \"in place\" scrolling routines set the default
- scrolling distance to be just one line. Now suppose that you use one of
- your special commands and then immediately invoke `scroll-up' (`C-v'),
- expecting it to scroll by a near windowful of text. You would be
- disappointed --- because the previous command set the default scrolling
- distance to be just one line, `scroll-up' just scrolls by one line.
-
- To solve this problem, \"scroll-in-place\" allows you to divide scrolling
- commands into separate \"groups.\" Commands in a group can only form
- chains with (and therefore, inherit defaults from) commands in the same
- group. (Note that no command can be in more than one group.) If you
- invoke a scrolling command that is not in the same group as that of the
- immediately previous scrolling command, then the previous chain is
- broken and you start a new chain --- with a new set of defaults.
-
- So to solve the problem described above, you could put your one-line
- scrolling commands in their own group. Once that is done, the standard
- scrolling commands will not form chains with your one-line scrolling
- commands, and therefore will not use the default scrolling distance set
- by those commands. Problem solved!
-
- By default, all \"in place\" scrolling commands are in a single group. If
- you want to partition some commands into separate groups, you must do
- that yourself *before* any \"in place\" commands are invoked. For more
- information about grouping commands, see the documentation for the
- variables `scroll-command-groups' and `scroll-default-command-group'.
-
-+ The improved scrolling commands will avoid displaying empty lines past
- the end of the buffer when possible. In other words, just as you can't
- see \"dead space\" before the beginning of the buffer text, the new
- scrolling commands try to avoid displaying \"dead space\" past the end of
- the buffer text. This behavior is somewhat configurable; see the
- documentation for the variable `scroll-allow-blank-lines-past-eob'.
-
- Dead space will be displayed if it is necessary in order to make a
- previous scrolling action reversible, however.
-
-+ If the scrolling commands cannot keep point at its initial window
- position (because a buffer boundary is on screen and the window can't be
- scrolled as far as necessary to keep point at the right place), point is
- allowed to temporarily stray from its initial window position. That is,
- point moves the correct number of window lines, even if it means that it
- has to stray from its desired window position. This straying is undone
- when (and if) the scrolling action is reversed.
-
-+ If a scrolling command tries to move point past a buffer boundary, point
- is instead moved to the boundary (the beginning or the end of the buffer
- as appropriate) and an appropriate message is displayed. This motion is
- reversible, of course.
-
- However, if point was already at the buffer boundary when the scrolling
- command was invoked, the command signals an appropriate error instead.
-
-+ When a minibuffer window is the selected window, the new versions of
- `scroll-up' and `scroll-down' either scroll the window in the variable
- `minibuffer-scroll-window' (which is usually the window of completions)
- or the `next-window' if there is no `minibuffer-scroll-window'. This is
- usually much more useful than scrolling the minibuffer itself. (Note
- that this feature is available even when the variable `scroll-in-place'
- is `nil'.)
-
-+ When a scrolling command is scrolling a window other than the selected
- window, it will signal an appropriate buffer boundary error if the
- window cannot be scrolled (because the appropriate buffer boundary is
- already visible). This means that an error is signalled even in cases
- that would be allowed (by \"straying\" point or by moving it to the buffer
- boundary) if the window were selected.
-
- (If an error were not signalled in these cases, then there would be many
- cases in which the last scroll in a particular direction would appear to
- do nothing because only the point position would change --- the
- displayed text would stay the same! To avoid these cases the scrolling
- commands signal boundary errors \"prematurely\" when the window to be
- scrolled is not selected.)"
- :short-doc "Keep cursor on same line when scrolling"
- :require 'scroll-in-place
- :enable #'turn-on-scroll-in-place
- :disable #'turn-off-scroll-in-place)
-
-(define-behavior 'mouse-avoidance
-"For those who are annoyed by the mouse pointer obscuring text,
-this mode moves the mouse pointer - either just a little out of
-the way, or all the way to the corner of the frame.
-
-Customize `mouse-avoidance-mode' to one of the symbols `banish',
-`exile', `jump', `animate', `cat-and-mouse', `proteus', or
`none'.
-
-Effects of the different modes:
- * banish: Move the mouse to the upper-right corner on any keypress.
- * exile: Move the mouse to the corner only if the cursor gets too close,
- and allow it to return once the cursor is out of the way.
- * jump: If the cursor gets too close to the mouse, displace the mouse
- a random distance & direction.
- * animate: As `jump', but shows steps along the way for illusion of motion.
- * cat-and-mouse: Same as `animate'.
- * proteus: As `animate', but changes the shape of the mouse pointer too.
-
-Whenever the mouse is moved, the frame is also raised.
-
-\(see `mouse-avoidance-threshold' for definition of \"too close\",
-and `mouse-avoidance-nudge-dist' and `mouse-avoidance-nudge-var' for
-definition of \"random distance\".)"
- :short-doc "Keep mouse away from cursor"
- :enable #'(lambda ()
- (mouse-avoidance-mode 'animate))
- :disable #'(lambda ()
- (mouse-avoidance-mode 'none)))
-
-(define-behavior 'jka-compr
- "This package implements low-level support for reading, writing,
-and loading compressed files. It hooks into the low-level file
-I/O functions (including write-region and insert-file-contents) so
-that they automatically compress or uncompress a file if the file
-appears to need it (based on the extension of the file name).
-Packages like Rmail, VM, GNUS, and Info should be able to work
-with compressed files without modification."
- :short-doc "Transparently handle compressed files"
- :enable #'jka-compr-install
- :disable #'jka-compr-uninstall)
-
-(define-behavior 'efs
-"EFS is a system for transparent file-transfer between remote VMS, CMS,
-MTS, MVS, Twenex, Explorer (the last two are Lisp machines), TOPS-20,
-DOS (running the Distinct, Novell, FTP software, NCSA, Microsoft in both
-unix and DOS mode, Super TCP, and Hellsoft FTP servers), Windows NT
-\(running the Microsoft or Hummingbird ftp servers), Unix descriptive
-listings (dl), KA9Q, OS/2 hosts using FTP. This means that you can edit,
-copy and otherwise manipulate files on any machine you have access to
-from within Emacs as if it were a local file. EFS works by introducing
-an extended filename syntax, and overloading functions such as
-`insert-file-contents' so that accessing a remote file causes
-appropriate commands to be sent to an FTP process.
-
-The syntax to use is like this:
-
-\(for anonymous:) /ftp.xemacs.org:/pub/xemacs/
-\(for non-anonymous:) /ben@gwyn.tux.org:/etc/mail/xemacs/aliases-xemacs
-
-You can specify either a file or a directory (in the latter case,
-Dired will be brought up). All operations in XEmacs on such files
-should work exactly as on any other files, modulo the additional
-slowness."
- :short-doc "Transparent file access over FTP"
- :require 'efs-auto
- :enable #'ignore
- ;; can't :disable
- )
-
-
-(define-behavior 'resize-minibuffer
- "When this behavior is enabled, the minibuffer is dynamically resized to
-contain the entire region of text put in it as you type.
-
-The maximum height to which the minibuffer can grow is controlled by the
-variable `resize-minibuffer-window-max-height'.
-
-The variable `resize-minibuffer-window-exactly' determines whether the
-minibuffer window should ever be shrunk to make it no larger than needed to
-display its contents.
-
-When using a window system, it is possible for a minibuffer to be the sole
-window in a frame. Since that window is already its maximum size, the only
-way to make more text visible at once is to increase the size of the frame.
-The variable `resize-minibuffer-frame' controls whether this should be
-done. The variables `resize-minibuffer-frame-max-height' and
-`resize-minibuffer-frame-exactly' are analogous to their window
-counterparts."
- :short-doc "Resize minibuffer automatically"
- :enable #'(lambda ()
- (resize-minibuffer-mode 1))
- :disable #'(lambda ()
- (resize-minibuffer-mode -1)))
-
-(define-behavior 'func-menu
- "Suppose you have a file with a lot of functions in it. Well, this
-package makes it easy to jump to any of those functions. The names of
-the functions in the current buffer are automatically put into menubar
-menu, you select one of the function-names and the point is moved to
-that very function. The mark is pushed on the mark-ring, so you can
-easily go back to where you were. Alternatively, you can use enter the
-name of the desired function via the minibuffer which offers
-completing read input. In addition, the name of the function before
-point is optionally displayed in the modeline."
- :short-doc "Add a menu of defined functions"
- :require 'func-menu
- :enable #'(lambda ()
- (add-hook 'find-file-hooks 'fume-add-menubar-entry)
- (mapc #'(lambda (buffer)
- (with-current-buffer buffer
- (setq fume-display-in-modeline-p t)
- (fume-add-menubar-entry)))
- (buffer-list)))
- :disable #'(lambda ()
- (remove-hook 'find-file-hooks 'fume-add-menubar-entry)
- (fset 'widen (symbol-function 'fume-widen))
- (fset 'narrow-to-region (symbol-function 'narrow-to-region))
- (mapc #'(lambda (buffer)
- (with-current-buffer buffer
- (fume-remove-menubar-entry)
- (setq fume-display-in-modeline-p nil)
- (fume-remove-post-command-hook
- 'fume-tickle-modeline)
- (fume-remove-post-command-hook
- 'fume-maybe-install-modeline-feature)
- (fume-remove-post-command-hook
- 'fume-rescan-buffer-trigger)))
- (buffer-list))))
-
-(define-behavior 'mwheel
- "This code enables the use of the infamous 'wheel' on the new
-crop of mice. Under XFree86 and the XSuSE X Servers, the wheel
-events are sent as button4/button5 events, which are automatically
-set up to do scrolling in the expected way. The actual way that the
-scrolling works can be controlled by `mwheel-scroll-amount' and
-`mwheel-follow-mouse'."
- :short-doc "Mouse wheel support for X Windows"
- :enable 'mwheel-install)
-
-(define-behavior 'recent-files
-"Recent-files adds the menu \"Recent Files\" (or whatever name you
-choose, see \"Customization:\" below) to Emacs's menubar. Its
-entries are the files (and directories) that have recently been
-opened by Emacs. You can open one of these files again by
-selecting its entry in the \"Recent Files\" menu. The list of file
-entries in this menu is preserved from one Emacs session to
-another. You can prevent Emacs from saving this list by selecting
-\"Don't save recent-files list on exit\" from the menu. If you have
-disabled saving, you can re-enable it by selecting \"Save
-recent-files list on exit\".
-
-The menu has permanent and non-permanent entries. Permanent
-entries are marked with an asterisk in front of the filename. The
-non-permanent entries are hidden in a submenu.
-
-Each time you open a file in Emacs, it is added as a non-permanent
-entry to the menu. The value of `recent-files-number-of-entries'
-determines how many non-permanent entries are held in the
-menu. When the number of non-permanent entries reaches this value,
-the least recently added non-permanent entry is removed from the
-menu when another non-permanent entry is added. It is not removed
-from the list, though; it may reappear when entries are deleted
-from the list. The number of entries saved to disk is the value of
-the variable `recent-files-number-of-saved-entries'.
-
-Permanent entries are not removed from the menu. You can make a
-file entry permanent by selecting \"Make <buffer> permanent\" (where
-<buffer> is the name of the current buffer) when the current
-buffer holds this file. \"Make <buffer> non-permanent\" makes the
-file entry of the current buffer non-permanent.
-
-The command \"Kill buffer <buffer> and delete entry\" is handy when
-you have accidently opened a file but want to keep neither the
-buffer nor the entry.
-
-You can erase the list of non-permanent entries by selecting
-\"Erase non-permanent entries\" from the menu.
-
-Customization:
-
-There are lots of variables to control the behaviour of
-recent-files. You do not have to change any of them if you like it
-as it comes out of the box. However, you may want to look at these
-options to make it behave different.
-
-`recent-files-number-of-entries'
- Controls how many non-permanent entries are shown in the
- recent-files list. The default is 15.
-
-`recent-files-number-of-saved-entries'
- Controls how many non-permanent entries are saved to disk when
- Emacs exits or recent-files-save-the-list is called. The
- default is 50.
-
-`recent-files-save-file'
- The name of the file where the recent-files list is saved
- between Emacs session. You probably don't need to change this.
- The default is \".recent-files.el\" in your home directory.
-
-`recent-files-dont-include'
- A list of regular expressions for files that should not be
- included into the recent-files list. This list is empty by
- default. For instance, a list to exclude all .newsrc
- files, all auto-save-files, and all files in the /tmp
- directory (but not the /tmp directory itself) would look
- like this:
- (setq recent-files-dont-include
- '(\"/\\.newsrc\" \"~$\" \"^/tmp/.\"))
- The default is empty.
-
-`recent-files-use-full-names'
- If the value of this variable is non-nil, the full pathnames of
- the files are shown in the recent-files menu. Otherwise only
- the filename part (or the last name component if it is a
- directory) is shown in the menu. The default it t, i.e. show
- full names.
-
-`recent-files-filename-replacements'
- This is a list of pairs of regular expressions and replacement
- strings. If a filename matches one of the regular expressions,
- the matching part is replaced by the replacement string for
- display in the recent-files menu.
- Example: My home directory is \"/users/mmc/nickel/\". I want to
- replace it with \"~/\". I also want to replace the directory
- \"/imports/teleservices/mmc/avc2/\", where I work a lot, with
- \".../avc2/\". The list then looks like
- (setq recent-files-filename-replacements
- '((\"/users/mmc/nickel/\" . \"~/\")
- (\"/imports/teleservices/mmc/avc2/\" .
\".../avc2/\")))
- Only the first match is replaced. So, if you have several
- entries in this list that may match a filename simultaneously,
- put the one you want to match (usually the most special) in
- front of the others. The default is to replace the home
- directory with \"~\".
-
-`recent-files-sort-function'
- Contains a function symbol to sort the display of filenames in
- the recent-files menu. Supplied are two functions,
- 'recent-files-dont-sort and 'recent-files-sort-alphabetically.
- The first, which is the default, preserves the order of \"most
- recent on top\".
-
-`recent-files-permanent-submenu'
- If this variable is non-nil, the permanent entries are put into
- a separate submenu of the recent-files menu. The default is
- nil.
-
-`recent-files-non-permanent-submenu'
- If this variable is non-nil, the non-permanent entries are put
- into a separate submenu of the recent-files menu. The default
- is nil. (You can set both `recent-files-permanent-submenu' and
- `recent-files-non-permanent-submenu' to t to have both lists in
- separate submenus.)
-
-`recent-files-commands-submenu'
- If this variable is non-nil, the commands if recent-files are
- placed in a submenu of the recent-files menu. The default is
- nil.
-
-`recent-files-commands-submenu-title'
- If the commands are placed in a submenu, this string is used as
- the title of the submenu. The default is \"Commands...\".
-
-`recent-files-actions-on-top'
- If this variable is non-nil, the \"action\" menu entries (\"Make
- <buffer> permanent\" etc.) are put on top of the menu. Otherwise
- they appear below the file entries or submenus. The default is
- nil.
-
-`recent-files-permanent-first'
- If this variable is t, the permanent entries are put first in
- the recent-files menu, i.e. above the non-permanent entries. If
- the value is nil, non-permanent entries appear first. If the
- value is neither t nor nil, the entries are sorted according to
- recent-files-sort-function. The default is 'sort.
-
-`recent-files-find-file-command'
- This variable contains to commandto execute when a file entry
- is selected from the menu. Usually this will be `find-file',
- which is the default.
-
-KNOWN BUG:
- - recent-files overwrites the recent-files-save-file
- unconditionally when Emacs exits. If you have two Emacs
- processes running, the one exiting later will overwrite the
- file without merging in the new entries from the other Emacs
- process. This can be avoided by disabling the save on exit from
- the menu."
- :short-doc "`Recent Files' menu"
- :enable 'recent-files-initialize)
-
-(define-behavior 'filladapt
- "These functions enhance the default behavior of Emacs' Auto Fill
-mode and the commands `fill-paragraph', `lisp-fill-paragraph',
-`fill-region-as-paragraph' and `fill-region'.
-
-The chief improvement is that the beginning of a line to be
-filled is examined and, based on information gathered, an
-appropriate value for fill-prefix is constructed. Also the
-boundaries of the current paragraph are located. This occurs
-only if the fill prefix is not already non-nil.
-
-The net result of this is that blurbs of text that are offset
-from left margin by asterisks, dashes, and/or spaces, numbered
-examples, included text from USENET news articles, etc. are
-generally filled correctly with no fuss."
- :short-doc "Adaptive (smart) filling"
- :require 'filladapt
- :enable #'(lambda ()
- (setq-default filladapt-mode t)
- (mapc #'(lambda (buffer)
- (with-current-buffer buffer
- (unless filladapt-mode
- (filladapt-mode 1))))
- (buffer-list)))
- :disable #'(lambda ()
- (setq-default filladapt-mode nil)
- (mapc #'(lambda (buffer)
- (with-current-buffer buffer
- (when filladapt-mode
- (filladapt-mode -1))))
- (buffer-list))))
+(define-behavior-group 'tty)
+(define-behavior-group 'toolbars)
+(define-behavior-group 'menus)
+(define-behavior-group 'mouse)
+(define-behavior-group 'editing)
+(define-behavior-group 'keyboard)
+(define-behavior-group 'files)
+(define-behavior-group 'games)
+(define-behavior-group 'processes)
+(define-behavior-group 'display)
+(define-behavior-group 'programming)
+(define-behavior-group 'international)
+(define-behavior-group 'buffers-and-windows)
+(define-behavior-group 'internet)
+
+(define-behavior 'compose-mail
+ "Not documented."
+ :group 'internet
+ :commands
+ '(["Send %_Mail..." compose-mail]))
1.4.2.1 +349 -22 XEmacs/xemacs/lisp/behavior.el
Index: behavior.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/behavior.el,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- behavior.el 2003/03/09 02:27:32 1.4
+++ behavior.el 2005/03/15 05:20:41 1.4.2.1
@@ -1,6 +1,6 @@
-;;; behavior.el --- consistent interface onto behaviors
+;;; behavior.el --- consistent interface onto packages
-;; Copyright (C) 2000, 2001, 2002 Ben Wing.
+;; Copyright (C) 2000, 2001, 2002, 2003 Ben Wing.
;; Author: Ben Wing
;; Maintainer: XEmacs Development Team
@@ -31,13 +31,152 @@
;;; Commentary:
-;; This file will be dumped with XEmacs.
+;; This file is dumped with XEmacs.
+;; This file is part of the "Behaviors" project and is a work in progress.
+;; The purpose of the project is to provide (a) a consistent interface (at
+;; the API level) onto the functionality provided by packages, and (b) an
+;; easy-to-use user interface for this functionality, something that
+;; *really works*.
+;;
+;; First, what characteristics do/should packages have? (NOTE: In this
+;; discussion below, `package' and `behavior' are being used more or less
+;; interchangeably. Eventually this will get resolved.)
+
+;; 1) A file, or one or more file, containing the code of the package. In
+;; addition, a "head" file in the case that the package needs to be
+;; loaded in order to get its functionality (e.g. "load-to-enable"
+;; packages -- an abomination that is tolerated only with severe
+;; displeasure).
+;; 2) A Lisp name -- a fairly short symbol (2-3 words max), uncapitalized,
+;; without use of excessive abbreviation and with words set off by
+;; dashes. This should be the same as the name of the topmost custom
+;; group associated with the package (see next item), and preferably the
+;; same as the common prefix used for variables defined by your package
+;; and the name of the head file of the package.
+;; 3) Associated custom group listing the settings associated with the package.
+;; 4) Enable and disable methods for turning on or off the functionality of
+;; the package, if it's amenable to such a model. Most packages are of two
+;; types:
+;;
+;; (a) They add some functionality to XEmacs, which is incorporated
+;; into and makes changes to the normal functionality of XEmacs. Once the
+;; package is enabled, the user doesn't have to do anything specific for
+;; the package to do its thing -- it happens automatically if the user is
+;; using the area whose behavior has been changed. These include packages
+;; such as `avoid' (which makes the mouse poointer move when the cursor
+;; gets too close), EFS (which adds the ability to treat an FTP site as
+;; part of the local file system), the packages that supply the
+;; mode-specific handling for various files, etc
+;;
+;; (b) They provide functionality in the form of specific command to be
+;; invoked. This can be as simple as the `hippie-expand' command (tries
+;; lots of different expansion methods for the text before point, to
+;; try and get a result) and as complicated as GNUS or VM.
+;;
+;; Some packages might provide both -- you can enable them and they
+;; incorporate some functionality into the XEmacs base, but while
+;; they're enabled they provide certain commands. #### We need some
+;; thought here, and case-by-case analysis, to determine if this really
+;; makes sense -- can the enable/disable be removed and whatever needs
+;; to happen incorporated as part of the command? can the
+;; enable/disable just added to the commands?
+;;
+;; 5) Packages of type (b) just above will have a list of commands that can be
+;; run. They should be in standard menubar format -- i.e. just like a
+;; submenu, but without the initial string indidicating the name of the
+;; menu.
+;; 6) Short doc string, for use in a menu item. *NOT* necessarily the same
+;; as the documentation for the Custom group, which is often too long.
+;; 7) Long documentation.
+;;
+;; Good package etiquette:
+;;
+;;
+;; -- Never mess with the menu yourself, or try to "cheat" by putting
yourself
+;; high up in the hierarchy, e.g. at the top-level or directly off a
+;; top-level group that expects to contain only groups of groups, not
+;; end-level groups.
+;;
+;; -- Never use the `override-behavior' commands or the like for specifying
+;; (in an overriding fashion) the exact appearance of the hierarchies.
+;;
+;; -- For type (a), with enable/disable methods:
+;;
+;; (a) Loading the file should NOT DO ANYTHING. Not enable, not add hooks,
+;; nothing.
+;; (b) Both enable and disable hooks must exist. The disable hook must
+;; completely reset the environment to how it was before the package
+;; was enabled. This includes restoring the prior bindings for
+;; modified key bindings. #### We need some helper function to assist
+;; with remembering the old key bindings and putting them back only
+;; when new key bindings haven't been made -- but recognize when those
+;; new key bondings were attached as a result of loading another
+;; package, so that after any order of loading and unloading a series
+;; of packages, the original bindings will eventually occur. (Something
+;; like `advice' for key definitions.) Replacement of functions should
+;; happen through `advice'.
+;;
+;; We recognize that many packages out there don't follow these precepts at
+;; all. Many or most of them are install-only, often happening
+;; automatically when the file is loaded. Converting these will be a step
+;; at a time: First, redo the latter type so that the initialization code
+;; is put into a function and not run automatically upon load. Next step,
+;; try to provide some sort of disable. Third step, work on making sure
+;; that disable removes *everything* and enable puts it all back. Fourth
+;; step, work on properly advising keys and functions.
+;;
+
+;; Comparison/Integration with Custom:
+
+;; Custom only handles variable settings, and has no concept of standard
+;; enable/disable methods for a package, a standard way of specifying
+;; package documentation, or a list of commands associated with a package.
+;; Also, its groups do not always map very well onto packages and the
+;; resulting hierarchy is too big, confusing, difficult-to-navigate, and
+;; incoherent. More generally it does not address at all the basic problem
+;; that a hierarchy created in a decentralized fashion -- and by a large
+;; number of authors, some more competent than others -- will inevitably be
+;; incoherent when put together.
+;;
+
+;; In general, ease-of-use was not the overarching goal of Custom. The
+;; primary goal of Custom seems to have been to provide a consistent interface
+;; and get all the packages to use it. Ease-of-use -- or even following
+;; established user-interface standards -- has taken a far-distant second, and
+;; appears in many respects to be an afterthought that never had any serious
+;; effort investigated into it.
+;;
+;; The eventual intent of this project is to integrate with custom. The final
+;; intent of integration is that this project subsumes Custom completely,
+;; making Custom the unified, user-friendly means of controlling XEmacs that
+;; has never properly existed. However, that will take a lot of work. For
+;; the meantime, the plan is to develop the Behavior subsystem independent of
+;; Custom, with ease-of-use as the primary goal, and get it to the point where
+;; it encompasses most packages out there, has stabilized its interface, and
+;; works well. At that point, we will consider integration with Custom. (Note
+;; that the hard part of the Behavior work is not actually behaviorizing the
+;; packages, but developing the interface itself.)
+;;
+;; As for integrating with Custom -- ideally that would mean simply extending
+;; defgroup, but that is not really possible given that backward-compatibility
+;; would not work -- existing versions of `defgroup' give an error when
+;; presented with an unknown keyword. In practice, then, this might mean that
+;; a separate `define-behavior' command (or `defpackage', or the like) will
+;; still exist.
+
;;; Code:
;; Hash table mapping behavior names to property lists, with entries for
-;; :short-doc, :require, :enable, and :disable.
+;; :group, :custom-group, :short-doc, :require, :enable, :disable,
+;; and :commands.
(defconst behavior-hash-table (make-hash-table))
+;; Hash table mapping groups to property lists (entries for :group, :children,
+;; :short-doc).
+(defconst behavior-group-hash-table (make-hash-table))
+;; Hash table with override information for groups.
+;; :short-doc).
+(defconst behavior-override-hash-table (make-hash-table))
(defvar within-behavior-enabling-disabling nil)
@@ -68,40 +207,137 @@
(defvar behavior-history nil
"History of entered behaviors.")
-(defun define-behavior (name doc-string &rest cl-keys)
+(defun behavior-group-p (group)
+ "Non-nil if GROUP is the name of a valid behavior group."
+ (not (null (gethash group behavior-group-hash-table))))
+
+(defun check-behavior-group (group)
+ "Verify that GROUP is a valid behavior group, or nil.
+Return GROUP if so."
+ (or (behavior-group-p group)
+ (error 'invalid-argument "Invalid behavior group" group))
+ group)
+
+(defun* define-behavior (name doc-string &key
+ group custom-group
+ (short-doc
+ (capitalize-string-as-title
+ (replace-in-string (symbol-name name) "-" " ")))
+ require enable disable commands
+ &allow-other-keys)
+ ;; We allow other keys to allow for the possibility of extensions by
+ ;; later versions of XEmacs. Packages should be able to support those
+ ;; extensions without worrying about causing problems with older versions
+ ;; of XEmacs.
"Define a behavior named NAME.
DOC-STRING must be specified, a description of what the behavior does
when it's enabled and how to further control it (typically through
custom variables). Accepted keywords are
+:group Symbol naming the behavior group this behavior is within.
+:custom-group Symbol naming the custom group containing the options that
+ can be set in association with this behavior. If not specified,
+ the custom group with the same name as the behavior will be
+ used, if it exists.
:short-doc A \"pretty\" version of the name, for use in menus. If omitted
a prettified name will be generated.
:require A single symbol or a list of such symbols, which need to be
present at enable time, or will be loaded using `require'.
:enable A function of no variables, which turns the behavior on.
:disable A function of no variables, which turns the behavior off.
+:commands A list of interactive commands that can be invoked in
+ conjunction with the behavior. These will appear in a submenu
+ along with the rest of the items for the behavior.
Behaviors are assumed to be global, and to take effect immediately; if
the underlying package is per-buffer, it may have to scan all existing
buffers and frob them. When a behavior is disabled, it should completely
go away *everywhere*, as if it were never invoked at all.
-The :disable keywords can be missing, although this is considered bad
+The :disable keyword can be missing, although this is considered bad
practice. In such a case, attempting to disable the behavior will signal
-an error unless you use the `force' option."
- (cl-parsing-keywords
- ((:short-doc (capitalize-string-as-title (replace-in-string
- (symbol-name name) "-" " ")))
- :require
- :enable
- :disable)
- t
- (let ((entry (list :short-doc cl-short-doc :require cl-require
- :enable cl-enable :disable cl-disable)))
- (puthash name entry behavior-hash-table))))
+an error unless you use the `force' option.
+
+The :enable keyword can be missing. This is useful for behaviors that
+are really a series of related commands without anything semantically
+corresponding to \"turning on\" or \"turning off\" the behavior.
+
+A behavior with no :enable and no :command is possible. This might be
+used, for example, by a behavior that encapsulates a series of related
+Lisp functions. Such behaviors may be handled specially, e.g. not
+displayed in the menus or displayed in a separate location, since they
+have no user-invocable behavior."
+ (let ((entry (list :group (check-behavior-group group)
+ :custom-group custom-group
+ :short-doc short-doc :require require
+ :enable enable :disable disable
+ :commands commands)))
+ (puthash name entry behavior-hash-table))
+ ;; update the children list of the group we're in (maybe nil).
+ (unless (member name (getf (gethash group behavior-group-hash-table)
+ :children))
+ (push name (getf (gethash group behavior-group-hash-table) :children))))
+
+(defun* override-behavior (name &key
+ short-doc
+ group
+ include
+ demote-others)
+ "Override the default properties of a behavior group NAME.
+Normally, groups are created and assigned properties by individual packages.
+The resulting hierarchy may not make much sense globally. This function
+allows the hierarchy and appearance of a group to be specified globally,
+and will take precendence over the properties assigned by `define-behavior-group'.
This allows a global organization to be imposed on groups, while still allowing for
graceful handling of new or unknown groups.
+
+NAME can be a symbol specifying a group name, or a list of
+\(PARENT [...] NAME), where a path from a particular parent is explicitly
+given. (This latter form allows the same name to be assigned to more than one
+group.)
+
+Accepted keywords are
+
+:short-doc A \"pretty\" version of the name, for use in menus.
+:group Parent group, if any. Should not be given if the parents are
+ explicitly specified in NAME.
+:include A list of behaviors that are specifically included in this
+ group, in addition to those that are included by the behaviors
+ themselves.
+:demote-others If non-nil, exclude all behaviors not specified in the :include
+ list and put them instead (i.e. \"demote\" them) to another
group,
+ usually a subgroup."
+ (let ((entry (list :group (check-behavior-group group)
+ :short-doc short-doc
+ :include include
+ :demote-others demote-others)))
+ (puthash name entry behavior-override-hash-table)))
+
+(defun* define-behavior-group (name &key
+ (short-doc
+ (capitalize-string-as-title
+ (replace-in-string (symbol-name name) "-"
+ " ")))
+ group)
+ "Define a behavior group NAME.
+
+NAME can be a symbol specifying a group name, or a list of
+\(PARENT [...] NAME), where a path from a particular parent is explicitly
+given. (This latter form allows the same name to be assigned to more than one
+group.)
+
+Accepted keywords are
+
+:short-doc A \"pretty\" version of the name, for use in menus. If omitted
+ a prettified name will be generated.
+:group Parent group, if any. Should not be given if the parents are
+ explicitly specified in NAME."
+ (let ((entry (list :group (check-behavior-group group)
+ :short-doc short-doc)))
+ (puthash name entry behavior-group-hash-table))
+ ;; update the children list of the parent (maybe nil).
+ (push name (getf (gethash group behavior-group-hash-table) :children)))
(defun read-behavior (prompt &optional must-match initial-contents history
- default-value)
+ default-value)
"Return a behavior symbol from the minibuffer, prompting with string PROMPT.
If non-nil, optional second arg INITIAL-CONTENTS is a string to insert
in the minibuffer before reading.
@@ -119,12 +355,10 @@
behavior-hash-table)
(nreverse lis))))
(mapc #'(lambda (aentry)
- (setcar aentry (symbol-name
- (car aentry))))
+ (setcar aentry (symbol-name (car aentry))))
table)
table)
- nil must-match initial-contents
- (or history 'behavior-history)
+ nil must-match initial-contents (or history 'behavior-history)
default-value)))
(if (and result (stringp result))
(intern result)
@@ -178,6 +412,99 @@
(let ((within-behavior-enabling-disabling t))
(customize-set-variable 'enabled-behavior-list
(delq behavior enabled-behavior-list))))))
+
+(defun compute-behavior-group-children (group hash)
+ "Compute the actual children for GROUP and its subgroups.
+This takes into account the override information specified."
+ (let* ((group-plist (gethash group behavior-group-hash-table))
+ (override (gethash group behavior-override-hash-table))
+ (children (getf group-plist :children)))
+ )
+ )
+
+(defun behavior-menu-filter-1 (menu group)
+ (submenu-generate-accelerator-spec
+ (let* (
+ ;;options
+ ;;help
+ (enable
+ (menu-split-long-menu
+ (menu-sort-menu
+ (let ((group-plist (gethash group behavior-group-hash-table)))
+ (loop for behavior in (getf group-plist :children)
+ nconc (if (behavior-group-p behavior)
+ (list
+ (cons (getf
+ (gethash behavior behavior-group-hash-table)
+ :short-doc)
+ (behavior-menu-filter-1 menu behavior)))
+ (let* ((plist (gethash behavior behavior-hash-table))
+ (commands (getf plist :commands)))
+ (nconc
+ (if (getf plist :enable)
+ `([,(format "%s (%s) [toggle]"
+ (getf plist :short-doc)
+ behavior)
+ (if (memq ',behavior
+ enabled-behavior-list)
+ (disable-behavior ',behavior)
+ (enable-behavior ',behavior))
+ :active ,(if (getf plist :disable) t
+ (not (memq
+ ',behavior
+ enabled-behavior-list)))
+ :style toggle
+ :selected (memq ',behavior
+ enabled-behavior-list)]))
+ (cond ((null commands) nil)
+ ((and (eq (length commands) 1)
+ (vectorp (elt commands 0)))
+ (let ((comm (copy-sequence
+ (elt commands 0))))
+ (setf (elt comm 0)
+ (format "%s (%s)"
+ (elt comm 0) behavior))
+ (list comm)))
+ (t (list
+ (cons (format "%s (%s) Commands"
+ (getf plist :short-doc)
+ behavior)
+ commands)))))))))
+ ))
+ )
+ )
+ enable)
+ '(?p)))
+
+(defun behavior-menu-filter (menu)
+ (append
+ '(("%_Package Utilities"
+ ("%_Set Download Site"
+ ("%_Official Releases"
+ :filter (lambda (&rest junk)
+ (menu-split-long-menu
+ (submenu-generate-accelerator-spec
+ (package-ui-download-menu)))))
+ ("%_Pre-Releases"
+ :filter (lambda (&rest junk)
+ (menu-split-long-menu
+ (submenu-generate-accelerator-spec
+ (package-ui-pre-release-download-menu)))))
+ ("%_Site Releases"
+ :filter (lambda (&rest junk)
+ (menu-split-long-menu
+ (submenu-generate-accelerator-spec
+ (package-ui-site-release-download-menu))))))
+ "--:shadowEtchedIn"
+ ["%_Update Package Index" package-get-update-base]
+ ["%_List and Install" pui-list-packages]
+ ["U%_pdate Installed Packages" package-get-update-all]
+ ["%_Help" (Info-goto-node "(xemacs)Packages")])
+ "----")
+ (behavior-menu-filter-1 menu nil)))
+
+;; Initialize top-level group.
+(puthash nil '(:children nil :short-doc "Root")
behavior-group-hash-table)
(provide 'behavior)
1.4.20.1 +6 -1 XEmacs/xemacs/lisp/buffer.el
Index: buffer.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/buffer.el,v
retrieving revision 1.4
retrieving revision 1.4.20.1
diff -u -r1.4 -r1.4.20.1
--- buffer.el 2001/04/12 18:21:11 1.4
+++ buffer.el 2005/03/15 05:20:41 1.4.20.1
@@ -71,7 +71,12 @@
another window even if BUFNAME is already visible in the selected window.
If optional third arg is non-nil, it is the frame to pop to this
buffer on.
-If `focus-follows-mouse' is non-nil, keyboard focus is left unchanged."
+If `focus-follows-mouse' is non-nil, keyboard focus is left unchanged.
+
+Buffers with names that are members of the `same-window-buffer-names'
+list, or that match an element of the `same-window-regexps' list are
+treated specially by this function--they are always selected in the
+same window rather than in a different one."
;; #ifdef I18N3
;; #### Doc string should indicate that the buffer name will get
;; translated.
1.11.6.1 +8 -4 XEmacs/xemacs/lisp/bytecomp-runtime.el
Index: bytecomp-runtime.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/bytecomp-runtime.el,v
retrieving revision 1.11
retrieving revision 1.11.6.1
diff -u -r1.11 -r1.11.6.1
--- bytecomp-runtime.el 2002/09/03 05:36:52 1.11
+++ bytecomp-runtime.el 2005/03/15 05:20:41 1.11.6.1
@@ -92,10 +92,12 @@
; (list 'put (list 'quote name)
; ''byte-optimizer ''byte-compile-inline-expand))))
-(defun make-obsolete (fn new)
+(defun make-obsolete (fn new &optional when)
"Make the byte-compiler warn that function FN is obsolete.
The warning will say that NEW should be used instead.
-If NEW is a string, that is the `use instead' message."
+If NEW is a string, that is the `use instead' message.
+If provided, WHEN should be a string indicating when the function
+was first made obsolete, for example a date or a release number."
(interactive "aMake function obsolete: \nxObsoletion replacement: ")
(let ((handler (get fn 'byte-compile)))
(if (eq 'byte-compile-obsolete handler)
@@ -104,10 +106,12 @@
(put fn 'byte-compile 'byte-compile-obsolete)))
fn)
-(defun make-obsolete-variable (var new)
+(defun make-obsolete-variable (var new &optional when)
"Make the byte-compiler warn that variable VAR is obsolete,
and NEW should be used instead. If NEW is a string, then that is the
-`use instead' message."
+`use instead' message.
+If provided, WHEN should be a string indicating when the variable
+was first made obsolete, for example a date or a release number."
(interactive
(list
(let ((str (completing-read "Make variable obsolete: " obarray
'boundp t)))
1.14.2.1 +2 -2 XEmacs/xemacs/lisp/cl.el
Index: cl.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/cl.el,v
retrieving revision 1.14
retrieving revision 1.14.2.1
diff -u -r1.14 -r1.14.2.1
--- cl.el 2004/11/04 23:05:54 1.14
+++ cl.el 2005/03/15 05:20:41 1.14.2.1
@@ -307,8 +307,8 @@
(defun cl-random-time ()
(let* ((time (copy-sequence (current-time-string))) (i (length time)) (v 0))
(while (>= (decf i) 0) (setq v (+ (* v 3) (aref time i))))
- (if (featurep 'bignum)
- (declare-fboundp (coerce-number v 'fixnum))
+ (if-fboundp 'coerce-number
+ (coerce-number v 'fixnum)
v)))
(defvar *gensym-counter* (* (logand (cl-random-time) 1023) 100))
1.16.2.1 +1 -2 XEmacs/xemacs/lisp/cmdloop.el
Index: cmdloop.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/cmdloop.el,v
retrieving revision 1.16
retrieving revision 1.16.2.1
diff -u -r1.16 -r1.16.2.1
--- cmdloop.el 2003/05/02 06:32:29 1.16
+++ cmdloop.el 2005/03/15 05:20:42 1.16.2.1
@@ -72,8 +72,7 @@
If `zmacs-regions' is true, and the zmacs region is active in this buffer,
then this key deactivates the region without beeping or signalling."
(interactive)
- (if (and (region-active-p)
- (eq (current-buffer) (zmacs-region-buffer)))
+ (if (region-active-p)
;; pseudo-zmacs compatibility: don't beep if this ^G is simply
;; deactivating the region. If it is inactive, beep.
nil
1.9.2.1 +9 -7 XEmacs/xemacs/lisp/code-init.el
Index: code-init.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/code-init.el,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -r1.9 -r1.9.2.1
--- code-init.el 2004/09/22 02:05:49 1.9
+++ code-init.el 2005/03/15 05:20:42 1.9.2.1
@@ -62,14 +62,11 @@
if you do this."
(dolist (x '(buffer-file-coding-system-for-read
keyboard
- default-process-coding-system-read))
+ default-process-coding-system-read
+ no-conversion-coding-system-mapping))
(set-coding-system-variable
x (coding-system-change-eol-conversion (get-coding-system-variable x)
- (if flag nil 'lf))))
- (set-coding-category-system
- 'no-conversion
- (coding-system-change-eol-conversion (coding-category-system 'no-conversion)
- (if flag nil 'lf))))
+ (if flag nil 'lf)))))
(defun coding-system-current-system-configuration ()
(cond ((memq system-type '(windows-nt cygwin32))
@@ -117,7 +114,8 @@
keyboard
terminal
default-process-coding-system-read
- default-process-coding-system-write))
+ default-process-coding-system-write
+ no-conversion-coding-system-mapping))
(defun get-coding-system-variable (var)
"Return the value of a basic coding system variable.
@@ -134,6 +132,8 @@
(terminal (coding-system-aliasee 'terminal))
(default-process-coding-system-read (car default-process-coding-system))
(default-process-coding-system-write (cdr default-process-coding-system))
+ (no-conversion-coding-system-mapping
+ (coding-category-system 'no-conversion))
(t (error 'invalid-constant "Invalid coding system variable" var))))
(defun set-coding-system-variable (var value)
@@ -156,6 +156,8 @@
(default-process-coding-system-write
(setq default-process-coding-system
(cons (car default-process-coding-system) value)))
+ (no-conversion-coding-system-mapping
+ (set-coding-category-system 'no-conversion value))
(t (error 'invalid-constant "Invalid coding system variable" var))))
(defun coding-system-variable-default-value (var &optional config)
1.9.2.1 +2 -5 XEmacs/xemacs/lisp/cus-dep.el
Index: cus-dep.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/cus-dep.el,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -r1.9 -r1.9.2.1
--- cus-dep.el 2003/02/14 12:05:07 1.9
+++ cus-dep.el 2005/03/15 05:20:42 1.9.2.1
@@ -173,11 +173,8 @@
))
(cond
((zerop (hash-table-count hash))
- (if (not (file-exists-p cusload-file))
- (message "(No customization dependencies)")
- (message "(No customization dependencies, deleting %s)"
- cusload-file)
- (delete-file cusload-file)))
+ (message "(No customization dependencies)")
+ (write-region "" nil cusload-file))
(t
(message "Generating %s...\n" cusload-base-file)
(with-temp-file cusload-file
1.22.2.1 +143 -42 XEmacs/xemacs/lisp/cus-edit.el
Index: cus-edit.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/cus-edit.el,v
retrieving revision 1.22
retrieving revision 1.22.2.1
diff -u -r1.22 -r1.22.2.1
--- cus-edit.el 2004/06/10 12:20:01 1.22
+++ cus-edit.el 2005/03/15 05:20:42 1.22.2.1
@@ -1,6 +1,7 @@
;;; cus-edit.el --- Tools for customizating Emacs and Lisp packages.
;;
;; Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 2003 Ben Wing.
;;
;; Author: Per Abrahamsen <abraham(a)dina.kvl.dk>
;; Maintainer: Hrvoje Niksic <hniksic(a)xemacs.org>
@@ -1656,23 +1657,121 @@
(while loads
(setq load (car loads)
loads (cdr loads))
- (cond ((symbolp load)
- (condition-case nil
- (require load)
- (error nil)))
- ;; Don't reload a file already loaded.
- ((and (boundp 'preloaded-file-list)
- (member load preloaded-file-list)))
- ((assoc load load-history))
- ((assoc (locate-library load) load-history))
- (t
- (condition-case nil
- ;; Without this, we would load cus-edit recursively.
- ;; We are still loading it when we call this,
- ;; and it is not in load-history yet.
- (or (equal load "cus-edit")
- (load-library load))
- (error nil))))))))
+ (custom-load-symbol-1 load)))))
+
+(defun custom-load-symbol-1 (load)
+ (cond ((symbolp load)
+ (condition-case nil
+ (require load)
+ (error nil)))
+ ;; Don't reload a file already loaded.
+ ((and (boundp 'preloaded-file-list)
+ (member load preloaded-file-list)))
+ ((assoc load load-history))
+ ((assoc (locate-library load) load-history))
+ (t
+ (condition-case nil
+ ;; Without this, we would load cus-edit recursively.
+ ;; We are still loading it when we call this,
+ ;; and it is not in load-history yet.
+ (or (equal load "cus-edit")
+ (load-library load))
+ (error nil)))))
+
+(defvar custom-already-loaded-custom-defines nil
+ "List of already-loaded `custom-defines' files.")
+(defvar custom-define-current-source-file nil)
+(defvar custom-warn-when-reloading-necessary nil
+ "For package-debugging purposes: Warn when an error hit in custom-defines.el.
+When this happens, the file from which the defcustom or defgroup was taken
+is loaded, and custom-defines.el is then reloaded. This works in most
+cases, but may not be completely safe. It's better if the package itself
+arranges for the necessary functions and variables to be available, using
+\;;;###autoload declarations. When this variable is non-nil, warnings are
+issued (with backtrace), to aid in tracking down the problems.")
+
+(defun custom-load-custom-defines (symbol)
+ "Load custom-defines for SYMBOL."
+ (unless custom-load-recursion
+ (let ((custom-load-recursion t)
+ (loads (get symbol 'custom-loads))
+ load)
+ (while loads
+ (setq load (car loads)
+ loads (cdr loads))
+ (let* ((found (locate-library
+ (if (symbolp load) (symbol-name load) load)))
+ (dir (and found (file-name-directory found))))
+ ;; If we find a custom-defines file, assume the package is smart
+ ;; enough to have put all its defcustoms and defgroups here, and
+ ;; load it instead of the file itself. Otherwise, do it the
+ ;; hard way.
+ (if (and found (or (file-exists-p
+ (expand-file-name "custom-defines.elc" dir))
+ (file-exists-p
+ (expand-file-name "custom-defines.el" dir))))
+ (when (not (member dir custom-already-loaded-custom-defines))
+ (push dir custom-already-loaded-custom-defines)
+ (custom-load-custom-defines-1 dir))))))))
+
+(defun custom-load-custom-defines-1 (dir)
+ ;; Actually load the custom-defines.el file in DIR.
+
+ ;; If we get an error loading the custom-defines, it may be because of a
+ ;; reference to something (e.g. a constant) that hasn't yet been defined
+ ;; yet. Properly, these should have been marked, so they either go into
+ ;; the custom-defines.el file or are autoloaded. But not everyone is so
+ ;; careful, so for the moment we try to load the file that the
+ ;; error-generating defcustom came from, and then reload the
+ ;; custom-defines.el file. We might loop a number of times if we have
+ ;; various files that need loading. If at any point we get an error that
+ ;; can't be solved just by loading the appropriate file (e.g. we hit the
+ ;; same error as before, the file is already loaded, etc.) then we signal
+ ;; it as a real error.
+ (let (source)
+ ;; here's how this works: if we get an error loading custom-defines,
+ ;; the condition handler is called; if we need to reload, we
+ ;; `return-from', which throws out of the handler and returns nil from
+ ;; the `block', which continues the while statement, executing the
+ ;; `load' at the bottom of this function and then entering the block
+ ;; again. if the condition handler doesn't throw, but instead returns
+ ;; normally, `signal' will continue as if nothing happened, and end up
+ ;; signalling the error normally.
+ (while
+ (not
+ (block custom-load
+ ;; Use call-with-condition-handler so the error can be seen
+ ;; with the stack intact.
+ (call-with-condition-handler
+ #'(lambda (__custom_load_cd1__)
+ (when (and
+ custom-define-current-source-file
+ (progn
+ (setq source (expand-file-name
+ custom-define-current-source-file
+ dir))
+ (let ((nondir (file-name-nondirectory source)))
+ (and (file-exists-p source)
+ (not (assoc source load-history))
+ (not (assoc nondir load-history))
+ (not (and (boundp 'preloaded-file-list)
+ (member nondir
+ preloaded-file-list)))))))
+ (if custom-warn-when-reloading-necessary
+ (lwarn 'custom-defines 'warning
+ "Error while loading custom-defines, fetching source and reloading ...\n
+Error: %s\n
+Source file: %s\n\n
+Backtrace follows:\n\n%s"
+ (error-message-string __custom_load_cd1__)
+ source
+ (backtrace-in-condition-handler-eliminating-handler
+ '__custom_load_cd1__)))
+ (return-from custom-load nil)))
+ #'(lambda ()
+ (load (expand-file-name "custom-defines" dir))))))
+ ;; we get here only from the `return-from'; see above
+ (load source))))
(defun custom-load-widget (widget)
"Load all dependencies for WIDGET."
@@ -3709,31 +3808,33 @@
(defun custom-menu-create (symbol)
"Create menu for customization group SYMBOL.
The menu is in a format applicable to `easy-menu-define'."
- (let* ((item (vector (custom-unlispify-menu-entry symbol)
- `(customize-group ',symbol)
- t)))
- ;; Item is the entry for creating a menu buffer for SYMBOL.
- ;; We may nest, if the menu is not too big.
- (custom-load-symbol symbol)
- (if (< (length (get symbol 'custom-group)) widget-menu-max-size)
- ;; The menu is not too big.
- (let ((custom-prefix-list (custom-prefix-add symbol
- custom-prefix-list))
- (members (custom-sort-items (get symbol 'custom-group)
- custom-menu-sort-alphabetically
- custom-menu-order-groups)))
- ;; Create the menu.
- `(,(custom-unlispify-menu-entry symbol t)
- ,item
- "--"
- ,@(mapcar (lambda (entry)
- (widget-apply (if (listp (nth 1 entry))
- (nth 1 entry)
- (list (nth 1 entry)))
- :custom-menu (nth 0 entry)))
- members)))
- ;; The menu was too big.
- item)))
+ (menu-split-long-menu
+ (let* ((item (vector (custom-unlispify-menu-entry symbol)
+ `(customize-group ',symbol)
+ t)))
+ ;; Item is the entry for creating a menu buffer for SYMBOL.
+ ;; We may nest, if the menu is not too big.
+ (custom-load-custom-defines symbol)
+ (if t ;(< (length (get symbol 'custom-group)) widget-menu-max-size)
+ ;; The menu is not too big.
+ (let ((custom-prefix-list (custom-prefix-add symbol
+ custom-prefix-list))
+ (members (custom-sort-items (get symbol 'custom-group)
+ custom-menu-sort-alphabetically
+ custom-menu-order-groups)))
+ ;; Create the menu.
+ `(,(custom-unlispify-menu-entry symbol t)
+ ,item
+ "--"
+ ,@(mapcar (lambda (entry)
+ (widget-apply (if (listp (nth 1 entry))
+ (nth 1 entry)
+ (list (nth 1 entry)))
+ :custom-menu (nth 0 entry)))
+ members)))
+ ; else ;; The menu was too big.
+ item
+ ))))
;;;###autoload
(defun customize-menu-create (symbol &optional name)
1.12.2.1 +583 -265 XEmacs/xemacs/lisp/custom.el
Index: custom.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/custom.el,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -r1.12 -r1.12.2.1
--- custom.el 2003/03/03 10:17:40 1.12
+++ custom.el 2005/03/15 05:20:43 1.12.2.1
@@ -1,12 +1,10 @@
-;;; custom.el -- Tools for declaring and initializing options.
-
-;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-
+;;; custom.el --- tools for declaring and initializing options
+;;
+;; Copyright (C) 1996, 1997, 1999, 2001, 2002 Free Software Foundation, Inc.
+;;
;; Author: Per Abrahamsen <abraham(a)dina.kvl.dk>
-;; Maintainer: Hrvoje Niksic <hniksic(a)xemacs.org>
+;; Maintainer: XEmacs Development Group
;; Keywords: help, faces, dumped
-;; Version: 1.9960-x
-;; X-URL:
http://www.dina.kvl.dk/~abraham/custom/
;; This file is part of XEmacs.
@@ -25,18 +23,19 @@
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
-;;; Synched with: ??? Partially synched to 21.2 by Ben Wing.
+;;; Synched with: FSF 21.3.
;;; Commentary:
;; This file is dumped with XEmacs.
-;; This file only contain the code needed to declare and initialize
-;; user options. The code to customize options is autoloaded from
-;; `cus-edit.el'.
;;
-;; The code implementing face declarations is in `cus-face.el'
+;; This file only contains the code needed to declare and initialize
+;; user options. The code to customize options is autoloaded from
+;; `cus-edit.el' and is documented in the XEmacs Lisp Reference manual.
+;; The code implementing face declarations is in `cus-face.el'.
+
;;; Code:
;; it is now safe to put the `provide' anywhere. if an error occurs while
@@ -44,8 +43,6 @@
;; prevent require/provide loop with custom and cus-face.
(provide 'custom)
-;; BEGIN SYNC WITH FSF 21.2
-
(eval-when-compile
(load "cl-macs" nil t)
;; To elude warnings.
@@ -60,6 +57,14 @@
;; Customize information for this option is in `cus-edit.el'.
"Hook called after defining each customize option.")
+(defvar custom-dont-initialize nil
+ "Non-nil means `defcustom' should not initialize the variable.
+That is used for the sake of `custom-make-dependencies'.
+Users should not set it.")
+
+(defvar custom-current-group-alist nil
+ "Alist of (FILE . GROUP) indicating the current group to use for FILE.")
+
;;; The `defcustom' Macro.
(defun custom-initialize-default (symbol value)
@@ -131,8 +136,16 @@
(defun custom-declare-variable (symbol default doc &rest args)
"Like `defcustom', but SYMBOL and DEFAULT are evaluated as normal
arguments.
DEFAULT should be an expression to evaluate to compute the default value,
-not the default value itself."
- ;; Remember the standard setting.
+not the default value itself.
+
+DEFAULT is stored as SYMBOL's value in the standard theme. See
+`custom-known-themes' for a list of known themes. For backwards
+compatibility, DEFAULT is also stored in SYMBOL's property
+`standard-value'. At the same time, SYMBOL's property `force-value' is
+set to nil, as the value is no longer rogue."
+ ;; Remember the standard setting. The value should be in the standard
+ ;; theme, not in this property. However, his would require changeing
+ ;; the C source of defvar and others as well...
(put symbol 'standard-value (list default))
;; Maybe this option was rogue in an earlier version. It no longer is.
(when (eq (get symbol 'force-value) 'rogue)
@@ -141,43 +154,46 @@
(when doc
(put symbol 'variable-documentation doc))
(let ((initialize 'custom-initialize-reset)
- (requests nil))
+ (requests nil))
+ (unless (memq :group args)
+ (custom-add-to-group (custom-current-group) symbol 'custom-variable))
(while args
(let ((arg (car args)))
- (setq args (cdr args))
+ (setq args (cdr args))
(check-argument-type 'keywordp arg)
- (let ((keyword arg)
- (value (car args)))
- (unless args
+ (let ((keyword arg)
+ (value (car args)))
+ (unless args
(signal 'error (list "Keyword is missing an argument"
keyword)))
- (setq args (cdr args))
- (cond ((eq keyword :initialize)
- (setq initialize value))
- ((eq keyword :set)
- (put symbol 'custom-set value))
- ((eq keyword :get)
- (put symbol 'custom-get value))
- ((eq keyword :require)
- (setq requests (cons value requests)))
- ((eq keyword :type)
- (put symbol 'custom-type value))
- ((eq keyword :options)
- (if (get symbol 'custom-options)
- ;; Slow safe code to avoid duplicates.
- (mapc (lambda (option)
- (custom-add-option symbol option))
- value)
- ;; Fast code for the common case.
- (put symbol 'custom-options (copy-sequence value))))
- (t
- (custom-handle-keyword symbol keyword value
- 'custom-variable))))))
+ (setq args (cdr args))
+ (cond ((eq keyword :initialize)
+ (setq initialize value))
+ ((eq keyword :set)
+ (put symbol 'custom-set value))
+ ((eq keyword :get)
+ (put symbol 'custom-get value))
+ ((eq keyword :require)
+ (push value requests))
+ ((eq keyword :type)
+ (put symbol 'custom-type (purecopy value)))
+ ((eq keyword :options)
+ (if (get symbol 'custom-options)
+ ;; Slow safe code to avoid duplicates.
+ (mapc (lambda (option)
+ (custom-add-option symbol option))
+ value)
+ ;; Fast code for the common case.
+ (put symbol 'custom-options (copy-sequence value))))
+ (t
+ (custom-handle-keyword symbol keyword value
+ 'custom-variable))))))
(put symbol 'custom-requests requests)
;; Do the actual initialization.
- (funcall initialize symbol default))
+ (unless custom-dont-initialize
+ (funcall initialize symbol default)))
;; #### This is a rough equivalent of LOADHIST_ATTACH. However,
;; LOADHIST_ATTACH also checks for `initialized'.
- (push symbol current-load-list)
+ (push (cons 'defvar symbol) current-load-list)
(run-hooks 'custom-define-hook)
symbol)
@@ -193,16 +209,43 @@
The following keywords are meaningful:
-:type VALUE should be a widget type for editing the symbols value.
+:type VALUE should be a widget type for editing the symbol's value.
The default is `sexp'.
:options VALUE should be a list of valid members of the widget type.
:group VALUE should be a customization group.
Add SYMBOL to that group.
+:link LINK-DATA
+ Include an external link after the documentation string for this
+ item. This is a sentence containing an active field which
+ references some other documentation.
+
+ There are three alternatives you can use for LINK-DATA:
+
+ (custom-manual INFO-NODE)
+ Link to an Info node; INFO-NODE is a string which specifies
+ the node name, as in \"(emacs)Top\". The link appears as
+ `[manual]' in the customization buffer.
+
+ (info-link INFO-NODE)
+ Like `custom-manual' except that the link appears in the
+ customization buffer with the Info node name.
+
+ (url-link URL)
+ Link to a web page; URL is a string which specifies the URL.
+ The link appears in the customization buffer as URL.
+
+ You can specify the text to use in the customization buffer by
+ adding `:tag NAME' after the first element of the LINK-DATA; for
+ example, (info-link :tag \"foo\" \"(emacs)Top\") makes a
link to the
+ Emacs manual which appears in the buffer as `foo'.
+
+ An item can have more than one external link; however, most items
+ have none at all.
:initialize
- VALUE should be a function used to initialize the
- variable. It takes two arguments, the symbol and value
- given in the `defcustom' call. The default is
- `custom-initialize-reset'
+ VALUE should be a function used to initialize the
+ variable. It takes two arguments, the symbol and value
+ given in the `defcustom' call. The default is
+ `custom-initialize-reset'.
:set VALUE should be a function to set the value of the symbol.
It takes two arguments, the symbol to set and the value to
give it. The default choice of function is `custom-set-default'.
@@ -219,16 +262,21 @@
VALUE should be a string specifying that the variable was
first introduced, or its default value was changed, in Emacs
version VERSION.
-:set-after VARIABLE
- Specifies that SYMBOL should be set after VARIABLE when
- both have been customized.
+:tag LABEL
+ Use LABEL, a string, instead of the item's name, to label the item
+ in customization menus and buffers.
+:load FILE
+ Load file FILE (a string) before displaying this customization
+ item. Loading is done with `load', and only if the file is
+ not already loaded.
+:set-after VARIABLES
+ Specifies that SYMBOL should be set after the list of variables
+ VARIABLES when both have been customized.
Read the section about customization in the Emacs Lisp manual for more
information."
`(custom-declare-variable (quote ,symbol) (quote ,value) ,doc ,@args))
-;; END SYNC WITH FSF 21.2
-
;;; The `defface' Macro.
(defmacro defface (face spec doc &rest args)
@@ -278,12 +326,14 @@
;;; The `defgroup' Macro.
+(defun custom-current-group ()
+ (cdr (assoc load-file-name custom-current-group-alist)))
+
(defun custom-declare-group (symbol members doc &rest args)
"Like `defgroup', but SYMBOL is evaluated as a normal argument."
(while members
(apply 'custom-add-to-group symbol (car members))
(pop members))
- (put symbol 'custom-group (nconc members (get symbol 'custom-group)))
(when doc
(put symbol 'group-documentation doc))
(while args
@@ -291,15 +341,19 @@
(setq args (cdr args))
(check-argument-type 'keywordp arg)
(let ((keyword arg)
- (value (car args)))
+ (value (car args)))
(unless args
(signal 'error (list "Keyword is missing an argument"
keyword)))
- (setq args (cdr args))
- (cond ((eq keyword :prefix)
- (put symbol 'custom-prefix value))
- (t
- (custom-handle-keyword symbol keyword value
- 'custom-group))))))
+ (setq args (cdr args))
+ (cond ((eq keyword :prefix)
+ (put symbol 'custom-prefix value))
+ (t
+ (custom-handle-keyword symbol keyword value
+ 'custom-group))))))
+ ;; Record the group on the `current' list.
+ (let ((elt (assoc load-file-name custom-current-group-alist)))
+ (if elt (setcdr elt symbol)
+ (push (cons load-file-name symbol) custom-current-group-alist)))
(run-hooks 'custom-define-hook)
symbol)
@@ -318,13 +372,24 @@
[KEYWORD VALUE]...
-The following KEYWORD's are defined:
+The following KEYWORDs are defined:
:group VALUE should be a customization group.
Add SYMBOL to that group.
Read the section about customization in the Emacs Lisp manual for more
information."
+
+ ;; XEmacs: Evidently a purposeful omission from the docs:
+;:version VALUE should be a string specifying that the group was introduced
+; in Emacs version VERSION.
+;
+
+ ;; FSF: (not a problem for XEmacs)
+ ;; It is better not to use backquote in this file,
+ ;; because that makes a bootstrapping problem
+ ;; if you need to recompile all the Lisp files using interpreted code.
+; (nconc (list 'custom-declare-group (list 'quote symbol) members doc) args))
`(custom-declare-group (quote ,symbol) ,members ,doc ,@args))
(defvar custom-group-hash-table (make-hash-table :size 300 :test 'eq)
@@ -332,19 +397,31 @@
(defun custom-add-to-group (group option widget)
"To existing GROUP add a new OPTION of type WIDGET.
-If there already is an entry for that option, overwrite it."
- (let* ((members (get group 'custom-group))
- (old (assq option members)))
- (if old
- (setcar (cdr old) widget)
- (put group 'custom-group (nconc members (list (list option widget))))))
+If there already is an entry for OPTION and WIDGET, nothing is done."
+ (let ((members (get group 'custom-group))
+ (entry (list option widget)))
+ (unless (member entry members)
+ (put group 'custom-group (nconc members (list entry)))))
(puthash group t custom-group-hash-table))
+(defun custom-group-of-mode (mode)
+ "Return the custom group corresponding to the major or minor MODE.
+If no such group is found, return nil."
+ (or (get mode 'custom-mode-group)
+ (if (or (get mode 'custom-group)
+ (and (string-match "-mode\\'" (symbol-name mode))
+ (get (setq mode (intern (substring (symbol-name mode)
+ 0 (match-beginning 0))))
+ 'custom-group)))
+ mode)))
+
;;; Properties.
(defun custom-handle-all-keywords (symbol args type)
"For customization option SYMBOL, handle keyword arguments ARGS.
Third argument TYPE is the custom option type."
+ (unless (memq :group args)
+ (custom-add-to-group (custom-current-group) symbol type))
(while args
(let ((arg (car args)))
(setq args (cdr args))
@@ -420,78 +497,195 @@
(unless (member load loads)
(put symbol 'custom-loads (cons load loads)))))
-;;; deftheme macro
+(defun custom-autoload (symbol load)
+ "Mark SYMBOL as autoloaded custom variable and add dependency LOAD."
+ (put symbol 'custom-autoload t)
+ (custom-add-load symbol load))
+
+;; This test is also in the C code of `user-variable-p'.
+(defun custom-variable-p (variable)
+ "Return non-nil if VARIABLE is a custom variable."
+ (or (get variable 'standard-value)
+ (get variable 'custom-autoload)))
+
+;;; Loading files needed to customize a symbol.
+;;; This is in custom.el because menu-bar.el needs it for toggle cmds.
+
+(defvar custom-load-recursion nil
+ "Hack to avoid recursive dependencies.")
+
+(defun custom-load-symbol (symbol)
+ "Load all dependencies for SYMBOL."
+ (unless custom-load-recursion
+ (let ((custom-load-recursion t))
+ (dolist (load (get symbol 'custom-loads))
+ (cond ((symbolp load) (condition-case nil (require load) (error nil)))
+ ;; This is subsumed by the test below, but it's much faster.
+ ((assoc load load-history))
+ ;; This was just (assoc (locate-library load) load-history)
+ ;; but has been optimized not to load locate-library
+ ;; if not necessary.
+ ((let ((regexp (concat "\\(\\`\\|/\\)" (regexp-quote load)
+ "\\(\\'\\|\\.\\)"))
+ (found nil))
+ (dolist (loaded load-history)
+ (and (stringp (car loaded))
+ (string-match regexp (car loaded))
+ (setq found t)))
+ found))
+ ;; Without this, we would load cus-edit recursively.
+ ;; We are still loading it when we call this,
+ ;; and it is not in load-history yet.
+ ((equal load "cus-edit"))
+ (t (condition-case nil (load load) (error nil))))))))
(defvar custom-known-themes '(user standard)
- "Themes that have been defthemed.")
-
-;; #### add strings for group
-;; #### during bootstrap we cannot use cl-macs stuff
-(defun* custom-define-theme (theme feature &optional doc
- &key short-description immediate variable-reset-string
- variable-set-string face-set-string face-reset-string
- &allow-other-keys)
- (push theme custom-known-themes)
+ "Themes that have been define with `deftheme'.
+The default value is the list (user standard). The theme `standard'
+contains the Emacs standard settings from the original Lisp files. The
+theme `user' contains all the the settings the user customized and saved.
+Additional themes declared with the `deftheme' macro will be added to
+the front of this list.")
+
+(defun custom-declare-theme (theme feature &optional doc &rest args)
+ "Like `deftheme', but THEME is evaluated as a normal argument.
+FEATURE is the feature this theme provides. This symbol is created
+from THEME by `custom-make-theme-feature'."
+ (add-to-list 'custom-known-themes theme)
(put theme 'theme-feature feature)
- (put theme 'theme-documentation doc)
- (if immediate (put theme 'theme-immediate immediate))
- (if variable-reset-string
- (put theme 'theme-variable-reset-string variable-reset-string ))
- (if variable-set-string
- (put theme 'theme-variable-set-string variable-set-string ))
- (if face-reset-string
- (put theme 'theme-face-reset-string face-reset-string ))
- (if face-set-string
- (put theme 'theme-face-set-string face-set-string ))
- (if short-description
- (put theme 'theme-short-description short-description )))
+ (when doc
+ (put theme 'theme-documentation doc))
+ (while args
+ (let ((arg (car args)))
+ (setq args (cdr args))
+ (check-argument-type 'keywordp arg)
+ (let ((keyword arg)
+ (value (car args)))
+ (unless args
+ (signal 'error (list "Keyword is missing an argument"
keyword)))
+ (setq args (cdr args))
+ (cond ((eq keyword :short-description)
+ (put theme 'theme-short-description value))
+ ((eq keyword :immediate)
+ (put theme 'theme-immediate value))
+ ((eq keyword :variable-set-string)
+ (put theme 'theme-variable-set-string value))
+ ((eq keyword :variable-reset-string)
+ (put theme 'theme-variable-reset-string value))
+ ((eq keyword :face-set-string)
+ (put theme 'theme-face-set-string value))
+ ((eq keyword :face-reset-string)
+ (put theme 'theme-face-reset-string value)))))))
+
+(defmacro deftheme (theme &optional doc &rest args)
+ "Declare custom theme THEME.
+The optional argument DOC is a doc string describing the theme.
+The remaining arguments should have the form
-(defun custom-make-theme-feature (theme)
- (intern (concat (symbol-name theme) "-theme")))
+ [KEYWORD VALUE]...
-(defmacro deftheme (theme &rest body)
- "(deftheme THEME &optional DOC &key KEYWORDS)
+The following KEYWORD's are defined:
+
+:short-description
+ VALUE is a short (one line) description of the theme. If not
+ given, DOC is used.
+:immediate
+ If VALUE is non-nil, variables specified in this theme are set
+ immediately when loading the theme.
+:variable-set-string
+ VALUE is a string used to indicate that a variable takes its
+ setting from this theme. It is passed to FORMAT with the name
+ of the theme as an additional argument. If not given, a
+ generic description is used.
+:variable-reset-string
+ VALUE is a string used in the case a variable has been forced
+ to its value in this theme. It is passed to FORMAT with the
+ name of the theme as an additional argument. If not given, a
+ generic description is used.
+:face-set-string
+ VALUE is a string used to indicate that a face takes its
+ setting from this theme. It is passed to FORMAT with the name
+ of the theme as an additional argument. If not given, a
+ generic description is used.
+:face-reset-string
+ VALUE is a string used in the case a face has been forced to
+ its value in this theme. It is passed to FORMAT with the name
+ of the theme as an additional argument. If not given, a
+ generic description is used.
-Define a theme labeled by SYMBOL THEME. The optional argument DOC is a
-doc string describing the theme. It is optionally followed by the
-following keyword arguments
-
-:short-description DESC
- DESC is a short (one line) description of the theme. If not given DOC
- is used.
-:immediate FLAG
- If FLAG is non-nil variables set in this theme are bound
- immediately when loading the theme.
-:variable-set-string VARIABLE_-SET-STRING
- A string used by the UI to indicate that the value takes it
- setting from this theme. It is passed to FORMAT with the
- name of the theme a additional argument.
- If not given, a generic description is used.
-:variable-reset-string VARIABLE-RESET-STRING
- As above but used in the case the variable has been forced to
- the value in this theme.
-:face-set-string FACE-SET-STRING
-:face-reset-string FACE-RESET-STRING
- As above but for faces."
+Any theme `foo' should be defined in a file called `foo-theme.el';
+see `custom-make-theme-feature' for more information."
(let ((feature (custom-make-theme-feature theme)))
- `(custom-define-theme (quote ,theme) (quote ,feature) ,@body)))
+ ;; It is better not to use backquote in this file,
+ ;; because that makes a bootstrapping problem
+ ;; if you need to recompile all the Lisp files using interpreted code.
+ (nconc (list 'custom-declare-theme
+ (list 'quote theme)
+ (list 'quote feature)
+ doc) args)))
+
+(defun custom-make-theme-feature (theme)
+ "Given a symbol THEME, create a new symbol by appending \"-theme\".
+Store this symbol in the `theme-feature' property of THEME.
+Calling `provide-theme' to provide THEME actually puts `THEME-theme'
+into `features'.
+
+This allows for a file-name convention for autoloading themes:
+Every theme X has a property `provide-theme' whose value is \"X-theme\".
+\(require-theme X) then attempts to load the file `X-theme.el'."
+ (intern (concat (symbol-name theme) "-theme")))
(defsubst custom-theme-p (theme)
"Non-nil when THEME has been defined."
(memq theme custom-known-themes))
(defsubst custom-check-theme (theme)
- "Check whether THEME is valid and signal an error if NOT."
+ "Check whether THEME is valid, and signal an error if it is not."
(unless (custom-theme-p theme)
(error "Unknown theme `%s'" theme)))
-
-; #### do we need to deftheme 'user and/or 'standard here to make the
-; code in cus-edit cleaner?.
-
;;; Initializing.
(defun custom-push-theme (prop symbol theme mode value)
+ "Add (THEME MODE VALUE) to the list in property PROP of SYMBOL.
+If the first element in that list is already (THEME ...),
+discard it first.
+
+MODE can be either the symbol `set' or the symbol `reset'. If it is the
+symbol `set', then VALUE is the value to use. If it is the symbol
+`reset', then VALUE is the mode to query instead.
+
+In the following example for the variable `goto-address-url-face', the
+theme `subtle-hacker' uses the same value for the variable as the theme
+`gnome2':
+
+ \((standard set bold)
+ \(gnome2 set info-xref)
+ \(jonadab set underline)
+ \(subtle-hacker reset gnome2))
+
+
+If a value has been stored for themes A B and C, and a new value
+is to be stored for theme C, then the old value of C is discarded.
+If a new value is to be stored for theme B, however, the old value
+of B is not discarded because B is not the car of the list.
+
+For variables, list property PROP is `theme-value'.
+For faces, list property PROP is `theme-face'.
+This is used in `custom-do-theme-reset', for example.
+
+The list looks the same in any case; the examples shows a possible
+value of the `theme-face' property for the face `region':
+
+ \((gnome2 set ((t (:foreground \"cyan\" :background \"dark
cyan\"))))
+ \(standard set ((((class color) (background dark))
+ \(:background \"blue\"))
+ \(t (:background \"gray\")))))
+
+This records values for the `standard' and the `gnome2' themes.
+The user has not customized the face; had he done that,
+the list would contain an entry for the `user' theme, too.
+See `custom-known-themes' for a list of known themes."
(let ((old (get symbol prop)))
(if (eq (car-safe (car-safe old)) theme)
(setq old (cdr old)))
@@ -508,13 +702,14 @@
(defun custom-set-variables (&rest args)
"Initialize variables according to user preferences.
The settings are registered as theme `user'.
-Each argument should be a list of the form:
+The arguments should each be a list of the form:
(SYMBOL VALUE [NOW [REQUEST [COMMENT]]])
The unevaluated VALUE is stored as the saved value for SYMBOL.
If NOW is present and non-nil, VALUE is also evaluated and bound as
the default value for the SYMBOL.
+
REQUEST is a list of features we must 'require for SYMBOL.
COMMENT is a comment string about SYMBOL."
(apply 'custom-theme-set-variables 'user args))
@@ -522,71 +717,170 @@
(defun custom-theme-set-variables (theme &rest args)
"Initialize variables according to settings specified by args.
Records the settings as belonging to THEME.
+
+The arguments should be a list where each entry has the form:
+
+ (SYMBOL VALUE [NOW [REQUEST [COMMENT]]])
-See `custom-set-variables' for a description of the arguments ARGS."
+The unevaluated VALUE is stored as the saved value for SYMBOL.
+If NOW is present and non-nil, VALUE is also evaluated and bound as
+the default value for the SYMBOL.
+REQUEST is a list of features we must 'require for SYMBOL.
+COMMENT is a comment string about SYMBOL.
+
+Several properties of THEME and SYMBOL are used in the process:
+
+If THEME property `theme-immediate' is non-nil, this is equivalent of
+providing the NOW argument to all symbols in the argument list: SYMBOL
+is bound to the evaluated VALUE. The only difference is SYMBOL property
+`force-value': if NOW is non-nil, SYMBOL's property `force-value' is set
to
+the symbol `rogue', else if THEME's property `theme-immediate' is non-nil,
+FACE's property `force-face' is set to the symbol `immediate'.
+
+VALUE itself is saved unevaluated as SYMBOL property `saved-value' and
+in SYMBOL's list property `theme-value' \(using
`custom-push-theme')."
(custom-check-theme theme)
- (setq args
- (sort args
- (lambda (a1 a2)
- (let* ((sym1 (car a1))
- (sym2 (car a2))
- (1-then-2 (memq sym1 (get sym2 'custom-dependencies)))
- (2-then-1 (memq sym2 (get sym1 'custom-dependencies))))
- (cond ((and 1-then-2 2-then-1)
- (error "Circular custom dependency between `%s' and `%s'"
- sym1 sym2))
- (1-then-2 t)
- (2-then-1 nil)
- ;; Put symbols with :require last. The macro
- ;; define-minor-mode generates a defcustom
- ;; with a :require and a :set, where the
- ;; setter function calls the mode function.
- ;; Putting symbols with :require last ensures
- ;; that the mode function will see other
- ;; customized values rather than default
- ;; values.
- (t (nth 3 a2)))))))
(let ((immediate (get theme 'theme-immediate)))
+ (setq args
+ (sort args
+ (lambda (a1 a2)
+ (let* ((sym1 (car a1))
+ (sym2 (car a2))
+ (1-then-2 (memq sym1 (get sym2 'custom-dependencies)))
+ (2-then-1 (memq sym2 (get sym1 'custom-dependencies))))
+ (cond ((and 1-then-2 2-then-1)
+ (error "Circular custom dependency between `%s' and `%s'"
+ sym1 sym2))
+ (2-then-1 nil)
+ ;; Put symbols with :require last. The macro
+ ;; define-minor-mode generates a defcustom
+ ;; with a :require and a :set, where the
+ ;; setter function calls the mode function.
+ ;; Putting symbols with :require last ensures
+ ;; that the mode function will see other
+ ;; customized values rather than default
+ ;; values.
+ (t (nth 3 a2)))))))
(while args
(let ((entry (car args)))
- (if (listp entry)
- (let* ((symbol (nth 0 entry))
- (value (nth 1 entry))
- (now (nth 2 entry))
- (requests (nth 3 entry))
- (comment (nth 4 entry))
- (set (or (get symbol 'custom-set) 'custom-set-default)))
- (put symbol 'saved-value (list value))
+ (if (listp entry)
+ (let* ((symbol (nth 0 entry))
+ (value (nth 1 entry))
+ (now (nth 2 entry))
+ (requests (nth 3 entry))
+ (comment (nth 4 entry))
+ set)
+ (when requests
+ (put symbol 'custom-requests requests)
+ (mapc 'require requests))
+ (setq set (or (get symbol 'custom-set) 'custom-set-default))
+ (put symbol 'saved-value (list value))
+ (put symbol 'saved-variable-comment comment)
(custom-push-theme 'theme-value symbol theme 'set value)
- (put symbol 'saved-variable-comment comment)
- ;; Allow for errors in the case where the setter has
- ;; changed between versions, say, but let the user know.
- (condition-case data
- (cond ((or now immediate)
- ;; Rogue variable, set it now.
- (put symbol 'force-value (if now 'rogue 'immediate))
- (funcall set symbol (eval value)))
- ((default-boundp symbol)
- ;; Something already set this, overwrite it.
- (funcall set symbol (eval value))))
- (error
+ ;; Allow for errors in the case where the setter has
+ ;; changed between versions, say, but let the user know.
+ (condition-case data
+ (cond ((or now immediate)
+ ;; Rogue variable, set it now.
+ (put symbol 'force-value (if now 'rogue 'immediate))
+ (funcall set symbol (eval value)))
+ ((default-boundp symbol)
+ ;; Something already set this, overwrite it.
+ (funcall set symbol (eval value))))
+ (error
(message "Error setting %s: %s" symbol data)))
- (and (or now (default-boundp symbol))
- (put symbol 'variable-comment comment))
- (when requests
- (put symbol 'custom-requests requests)
- (mapc 'require requests))
- (setq args (cdr args)))
- ;; Old format, a plist of SYMBOL VALUE pairs.
- (message "Warning: old format `custom-set-variables'")
- (ding)
- (sit-for 2)
- (let ((symbol (nth 0 args))
- (value (nth 1 args)))
- (put symbol 'saved-value (list value))
+ (setq args (cdr args))
+ (and (or now (default-boundp symbol))
+ (put symbol 'variable-comment comment)))
+ ;; Old format, a plist of SYMBOL VALUE pairs.
+ (message "Warning: old format `custom-set-variables'")
+ (ding)
+ (sit-for 2)
+ (let ((symbol (nth 0 args))
+ (value (nth 1 args)))
+ (put symbol 'saved-value (list value))
(custom-push-theme 'theme-value symbol theme 'set value))
- (setq args (cdr (cdr args))))))))
+ (setq args (cdr (cdr args))))))))
+
+(defun custom-set-default (variable value)
+ "Default :set function for a customizable variable.
+Normally, this sets the default value of VARIABLE to VALUE,
+but if `custom-local-buffer' is non-nil,
+this sets the local binding in that buffer instead."
+ (if custom-local-buffer
+ (with-current-buffer custom-local-buffer
+ (set variable value))
+ (set-default variable value)))
+(defun custom-quote (sexp)
+ "Quote SEXP iff it is not self quoting."
+ (if (or (memq sexp '(t nil))
+ (keywordp sexp)
+ (and (listp sexp)
+ (memq (car sexp) '(lambda)))
+ (stringp sexp)
+ (numberp sexp)
+ (vectorp sexp)
+;;; (and (fboundp 'characterp)
+;;; (characterp sexp))
+ )
+ sexp
+ (list 'quote sexp)))
+
+(defun customize-mark-to-save (symbol)
+ "Mark SYMBOL for later saving.
+
+If the default value of SYMBOL is different from the standard value,
+set the `saved-value' property to a list whose car evaluates to the
+default value. Otherwise, set it to nil.
+
+To actually save the value, call `custom-save-all'.
+
+Return non-nil iff the `saved-value' property actually changed."
+ (let* ((get (or (get symbol 'custom-get) 'default-value))
+ (value (funcall get symbol))
+ (saved (get symbol 'saved-value))
+ (standard (get symbol 'standard-value))
+ (comment (get symbol 'customized-variable-comment)))
+ ;; Save default value iff different from standard value.
+ (if (or (null standard)
+ (not (equal value (condition-case nil
+ (eval (car standard))
+ (error nil)))))
+ (put symbol 'saved-value (list (custom-quote value)))
+ (put symbol 'saved-value nil))
+ ;; Clear customized information (set, but not saved).
+ (put symbol 'customized-value nil)
+ ;; Save any comment that might have been set.
+ (when comment
+ (put symbol 'saved-variable-comment comment))
+ (not (equal saved (get symbol 'saved-value)))))
+
+(defun customize-mark-as-set (symbol)
+ "Mark current value of SYMBOL as being set from customize.
+
+If the default value of SYMBOL is different from the saved value if any,
+or else if it is different from the standard value, set the
+`customized-value' property to a list whose car evaluates to the
+default value. Otherwise, set it to nil.
+
+Return non-nil iff the `customized-value' property actually changed."
+ (let* ((get (or (get symbol 'custom-get) 'default-value))
+ (value (funcall get symbol))
+ (customized (get symbol 'customized-value))
+ (old (or (get symbol 'saved-value) (get symbol 'standard-value))))
+ ;; Mark default value as set iff different from old value.
+ (if (or (null old)
+ (not (equal value (condition-case nil
+ (eval (car old))
+ (error nil)))))
+ (put symbol 'customized-value (list (custom-quote value)))
+ (put symbol 'customized-value nil))
+ ;; Changed?
+ (not (equal customized (get symbol 'customized-value)))))
+
+;;; Theme Manipulation
+
(defvar custom-loaded-themes nil
"Themes in the order they are loaded.")
@@ -595,103 +889,138 @@
(memq theme custom-loaded-themes))
(defun provide-theme (theme)
- "Indicate that this file provides THEME."
+ "Indicate that this file provides THEME.
+Add THEME to `custom-loaded-themes' and `provide' whatever
+is stored in THEME's property `theme-feature'.
+
+Usually the theme-feature property contains a symbol created
+by `custom-make-theme-feature'."
(custom-check-theme theme)
(provide (get theme 'theme-feature))
- (push theme custom-loaded-themes))
+ (setq custom-loaded-themes (nconc (list theme) custom-loaded-themes)))
-(defun require-theme (theme &optional soft)
- "Try to load a theme by requiring its feature."
+(defun require-theme (theme)
+ "Try to load a theme by requiring its feature.
+THEME's feature is stored in THEME's `theme-feature' property.
+
+Usually the `theme-feature' property contains a symbol created
+by `custom-make-theme-feature'."
;; Note we do no check for validity of the theme here.
;; This allows to pull in themes by a file-name convention
- (require (get theme 'theme-feature (custom-make-theme-feature theme))))
+ (require (or (get theme 'theme-feature)
+ (custom-make-theme-feature theme))))
+
+(defun custom-remove-theme (spec-alist theme)
+ "Delete all elements from SPEC-ALIST whose car is THEME."
+ (let ((elt (assoc theme spec-alist)))
+ (while elt
+ (setq spec-alist (delete elt spec-alist)
+ elt (assoc theme spec-alist))))
+ spec-alist)
(defun custom-do-theme-reset (theme)
- ; #### untested! slow!
+ "Undo all settings defined by THEME.
+
+A variable remains unchanged if its property `theme-value' does not
+contain a value for THEME. A face remains unchanged if its property
+`theme-face' does not contain a value for THEME. In either case, all
+settings for THEME are removed from the property and the variable or
+face is set to the `user' theme.
+
+See `custom-known-themes' for a list of known themes."
(let (spec-list)
(mapatoms (lambda (symbol)
+ ;; This works even if symbol is both a variable and a
+ ;; face.
(setq spec-list (get symbol 'theme-value))
(when spec-list
- (setq spec-list (delete-if (lambda (elt)
- (eq (car elt) theme))
- spec-list))
- (put symbol 'theme-value spec-list)
+ (put symbol 'theme-value (custom-remove-theme spec-list theme))
(custom-theme-reset-internal symbol 'user))
(setq spec-list (get symbol 'theme-face))
(when spec-list
- (setq spec-list (delete-if (lambda (elt)
- (eq (car elt) theme))
- spec-list))
- (put symbol 'theme-face spec-list)
+ (put symbol 'theme-face (custom-remove-theme spec-list theme))
(custom-theme-reset-internal-face symbol 'user))))))
(defun custom-theme-load-themes (by-theme &rest body)
- "Load the themes specified by BODY and record them as required by
-theme BY-THEME. BODY is a sequence of
- - a SYMBOL
- require the theme SYMBOL
- - a list (reset THEME)
- Undo all the settings made by THEME.
- - a list (hidden THEME)
- require the THEME but hide it from the user."
+ "Load the themes specified by BODY.
+Record them as required by theme BY-THEME. BODY is a sequence of either
+
+THEME
+ BY-THEME requires THEME
+\(reset THEME)
+ Undo all the settings made by THEME
+\(hidden THEME)
+ Require THEME but hide it from the user
+
+All the themes loaded for BY-THEME are recorded in BY-THEME's property
+`theme-loads-themes'. Any theme loaded with the hidden predicate will
+be given the property `theme-hidden' unless it has been loaded before.
+Whether a theme has been loaded before is determined by the function
+`custom-theme-loaded-p'."
(custom-check-theme by-theme)
- (dolist (theme body)
- (cond ((and (consp theme) (eq (car theme) 'reset))
- (custom-do-theme-reset (cadr theme)))
- ((and (consp theme) (eq (car theme) 'hidden))
- (require-theme (cadr theme))
- (unless (custom-theme-loaded-p (cadr theme))
- (put (cadr theme) 'theme-hidden t)))
- (t
- (require-theme theme)
- (remprop theme 'theme-hidden)))
- (push theme (get by-theme 'theme-loads-themes))))
+ (let ((theme)
+ (themes-loaded (get by-theme 'theme-loads-themes)))
+ (while theme
+ (setq theme (car body)
+ body (cdr body))
+ (cond ((and (consp theme) (eq (car theme) 'reset))
+ (custom-do-theme-reset (cadr theme)))
+ ((and (consp theme) (eq (car theme) 'hidden))
+ (require-theme (cadr theme))
+ (unless (custom-theme-loaded-p (cadr theme))
+ (put (cadr theme) 'theme-hidden t)))
+ (t
+ (require-theme theme)
+ (put theme 'theme-hidden nil)))
+ (setq themes-loaded (nconc (list theme) themes-loaded)))
+ (put by-theme 'theme-loads-themes themes-loaded)))
(defun custom-load-themes (&rest body)
"Load themes for the USER theme as specified by BODY.
-BODY is as with custom-theme-load-themes."
- (apply #'custom-theme-load-themes 'user body))
+See `custom-theme-load-themes' for more information on BODY."
+ (apply 'custom-theme-load-themes 'user body))
+; (defsubst copy-upto-last (elt list)
+; "Copy all the elements of the list upto the last occurrence of elt"
+; ;; Is it faster to do more work in C than to do less in elisp?
+; (nreverse (cdr (member elt (reverse list)))))
+(defun custom-theme-value (theme theme-spec-list)
+ "Determine the value for THEME defined by THEME-SPEC-LIST.
+Returns a list with the original value if found; nil otherwise.
+THEME-SPEC-LIST is an alist with themes as its key. As new themes are
+installed, these are added to the front of THEME-SPEC-LIST.
+Each element has the form
-(defsubst copy-upto-last (elt list)
- "Copy all the elements of the list upto the last occurrence of elt."
- ;; Is it faster to do more work in C than to do less in elisp?
- (nreverse (cdr (member elt (reverse list)))))
+ \(THEME MODE VALUE)
-(defun custom-theme-value (theme theme-spec-list)
- "Determine the value for THEME defined by THEME-SPEC-LIST.
-Returns (list value) if found. Nil otherwise."
+MODE is either the symbol `set' or the symbol `reset'. See
+`custom-push-theme' for more information on the format of
+THEME-SPEC-LIST."
;; Note we do _NOT_ signal an error if the theme is unknown
;; it might have gone away without the user knowing.
- (let ((theme-or-lower (memq theme (cons 'user custom-loaded-themes)))
- value)
- (mapc #'(lambda (theme-spec)
- (when (member (car theme-spec) theme-or-lower)
- (setq value (cdr theme-spec))
- ;; We need to continue because if theme =A and we found
- ;; B then if the load order is B A C B
- ;; we actually want the value in C.
- (setq theme-or-lower (copy-upto-last (car theme-spec)
- theme-or-lower))
- ;; We could should circuit if this is now nil.
- ))
- theme-spec-list)
+ (let ((value (cdr (assoc theme theme-spec-list))))
(if value
(if (eq (car value) 'set)
- (list (cadr value))
- ;; Yet another reset spec. car value = reset
+ (cdr value)
(custom-theme-value (cadr value) theme-spec-list)))))
-
(defun custom-theme-variable-value (variable theme)
- "Return (list value) value of VARIABLE in THEME if the THEME modifies the
-VARIABLE. Nil otherwise."
+ "Return (list value) indicating value of VARIABLE in THEME.
+If THEME does not define a value for VARIABLE, return nil. The value
+definitions per theme are stored in VARIABLE's property `theme-value'.
+The actual work is done by function `custom-theme-value', which see.
+See `custom-push-theme' for more information on how these definitions
+are stored."
(custom-theme-value theme (get variable 'theme-value)))
(defun custom-theme-reset-internal (symbol to-theme)
+ "Reset SYMBOL to the value defined by TO-THEME.
+If SYMBOL is not defined in TO-THEME, reset SYMBOL to the standard
+value. See `custom-theme-variable-value'. The standard value is
+stored in SYMBOL's property `standard-value'."
(let ((value (custom-theme-variable-value symbol to-theme))
was-in-theme)
(setq was-in-theme value)
@@ -699,46 +1028,37 @@
(when value
(put symbol 'saved-value was-in-theme)
(if (or (get 'force-value symbol) (default-boundp symbol))
- (funcall (get symbol 'custom-set 'set-default) symbol
+ (funcall (or (get symbol 'custom-set) 'set-default) symbol
(eval (car value)))))
value))
-
(defun custom-theme-reset-variables (theme &rest args)
"Reset the value of the variables to values previously defined.
Associate this setting with THEME.
ARGS is a list of lists of the form
- (variable to-theme)
+ (VARIABLE TO-THEME)
-This means reset variable to its value in to-theme."
+This means reset VARIABLE to its value in TO-THEME."
(custom-check-theme theme)
- (mapc #'(lambda (arg)
- (apply #'custom-theme-reset-internal arg)
- (custom-push-theme 'theme-value (car arg) theme 'reset (cadr
arg)))
- args))
+ (mapcar '(lambda (arg)
+ (apply 'custom-theme-reset-internal arg)
+ (custom-push-theme 'theme-value (car arg) theme 'reset (cadr arg)))
+ args))
(defun custom-reset-variables (&rest args)
- "Reset the value of the variables to values previously defined.
-Associate this setting with the `user' theme.
+ "Reset the value of the variables to values previously saved.
+This is the setting associated the `user' theme.
-The ARGS are as in `custom-theme-reset-variables'."
- (apply #'custom-theme-reset-variables 'user args))
+ARGS is a list of lists of the form
-(defun custom-set-default (variable value)
- "Default :set function for a customizable variable.
-Normally, this sets the default value of VARIABLE to VALUE,
-but if `custom-local-buffer' is non-nil,
-this sets the local binding in that buffer instead."
- (if custom-local-buffer
- (with-current-buffer custom-local-buffer
- (set variable value))
- (set-default variable value)))
+ (VARIABLE TO-THEME)
-;;; The End.
+This means reset VARIABLE to its value in TO-THEME."
+ (apply 'custom-theme-reset-variables 'user args))
-;; BEGIN SYNC WITH FSF 21.2
+;;; The End.
;; Process the defcustoms for variables loaded before this file.
;; `custom-declare-variable-list' is defvar'd in subr.el. Utility programs
@@ -747,7 +1067,5 @@
(while custom-declare-variable-list
(apply 'custom-declare-variable (car custom-declare-variable-list))
(setq custom-declare-variable-list (cdr custom-declare-variable-list)))
-
-;; END SYNC WITH FSF 21.2
;; custom.el ends here
1.1.10.1 +75 -35 XEmacs/xemacs/lisp/diagnose.el
Index: diagnose.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/diagnose.el,v
retrieving revision 1.1
retrieving revision 1.1.10.1
diff -u -r1.1 -r1.1.10.1
--- diagnose.el 2002/03/20 10:20:50 1.1
+++ diagnose.el 2005/03/15 05:20:43 1.1.10.1
@@ -1,4 +1,4 @@
-;;; debug.el --- routines for debugging problems in XEmacs
+;;; diagnose.el --- routines for debugging problems in XEmacs
;; Copyright (C) 2002 Ben Wing.
@@ -62,7 +62,7 @@
(incf linelen fieldlen)
(format "%%%ds" fieldlen)))
types "")
- (progn (incf linelen 8) "%8s\n")))
+ (progn (incf linelen 9) "%9s\n")))
(princ "\n")
(princ (apply 'format fmt objtypename
(append types (list 'total))))
@@ -85,41 +85,81 @@
(list totaltotal))))
totaltotal)))
- (let ((grandtotal 0))
- (with-output-to-temp-buffer "*memory usage*"
- (when-fboundp 'charset-list
+ (let ((grandtotal 0)
+ (buffer "*memory usage*")
+ begin)
+ (with-output-to-temp-buffer buffer
+ (save-excursion
+ (set-buffer buffer)
+ (when-fboundp 'charset-list
+ (setq begin (point))
+ (incf grandtotal
+ (show-foo-stats 'charset (charset-list)
+ #'charset-memory-usage))
+ (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 'charset (charset-list)
- #'charset-memory-usage))
- (princ "\n"))
- (incf grandtotal
- (show-foo-stats 'buffer (buffer-list) #'buffer-memory-usage))
- (princ "\n")
- (incf grandtotal
- (show-foo-stats 'window (mapcan #'(lambda (fr)
- (window-list fr t))
- (frame-list))
- #'window-memory-usage))
- (princ "\n")
- (let ((total 0)
- (fmt "%-30s%10s\n"))
- (princ (format fmt "object" "storage"))
- (princ (make-string 40 ?-))
+ (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)))
(princ "\n")
- (map-plist #'(lambda (stat num)
- (when (string-match "\\(.*\\)-storage$"
- (symbol-name stat))
- (incf total num)
- (princ (format fmt
- (match-string 1 (symbol-name stat))
- num)))
- (when (eq stat 'long-strings-total-length)
- (incf total num)
- (princ (format fmt stat num))))
- (sixth (garbage-collect)))
+ (setq begin (point))
+ (incf grandtotal
+ (show-foo-stats 'window (mapcan #'(lambda (fr)
+ (window-list fr t))
+ (frame-list))
+ #'window-memory-usage))
+ (sort-numeric-fields -1
+ (save-excursion
+ (goto-char begin)
+ (forward-line 3)
+ (point))
+ (save-excursion
+ (forward-line -2)
+ (point)))
(princ "\n")
- (princ (format fmt "total" total))
- (incf grandtotal total))
+ (let ((total 0)
+ (fmt "%-30s%10s\n"))
+ (setq begin (point))
+ (princ (format fmt "object" "storage"))
+ (princ (make-string 40 ?-))
+ (princ "\n")
+ (map-plist #'(lambda (stat num)
+ (when (string-match "\\(.*\\)-storage$"
+ (symbol-name stat))
+ (incf total num)
+ (princ (format fmt
+ (match-string 1 (symbol-name stat))
+ num)))
+ (when (eq stat 'long-strings-total-length)
+ (incf total num)
+ (princ (format fmt stat num))))
+ (sixth (garbage-collect)))
+ (princ "\n")
+ (princ (format fmt "total" total))
+ (incf grandtotal total))
+ (sort-numeric-fields -1
+ (save-excursion
+ (goto-char begin)
+ (forward-line 2)
+ (point))
+ (save-excursion
+ (forward-line -2)
+ (point)))
- (princ (format "\n\ngrand total: %s\n" grandtotal))
+ (princ (format "\n\ngrand total: %s\n" grandtotal)))
grandtotal))))
1.49.2.2 +35 -34 XEmacs/xemacs/lisp/dumped-lisp.el
Index: dumped-lisp.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/dumped-lisp.el,v
retrieving revision 1.49.2.1
retrieving revision 1.49.2.2
diff -u -r1.49.2.1 -r1.49.2.2
--- dumped-lisp.el 2004/11/25 12:43:59 1.49.2.1
+++ dumped-lisp.el 2005/03/15 05:20:43 1.49.2.2
@@ -107,7 +107,7 @@
"register"
"iso8859-1" ; This must be before any modes
; (sets standard syntax table.)
- "paragraphs"
+ "easy-mmode" ; Added for 21.5.
"easymenu" ; Added for 20.3.
"lisp-mode"
"text-mode"
@@ -160,23 +160,23 @@
"unicode"
;;;;;;;;;;;;;;;;;; MULE support
(when (featurep 'mule)
- '("mule-charset"
- "mule-cmds" ; to sync with Emacs 20.1
- "mule-coding"
- "mule-composite-stub"
- "mule-composite"
+ '("mule/mule-charset"
+ "mule/mule-cmds" ; to sync with Emacs 20.1
+ "mule/mule-coding"
+ "mule/mule-composite-stub"
+ "mule/mule-composite"
))
;; may initialize coding systems
- (when (featurep '(and mule x)) "mule-x-init")
- (when (featurep '(and mule tty)) "mule-tty-init")
+ (when (featurep '(and mule x)) "mule/mule-x-init")
+ (when (featurep '(and mule tty)) "mule/mule-tty-init")
(when (and (featurep 'mule) (memq system-type '(windows-nt cygwin32)))
- "mule-win32-init")
+ "mule/mule-win32-init")
"code-init" ; set up defaults
;; All files after this can have extended characters in them.
(when (featurep 'mule)
- '("mule-category"
- "mule-ccl"
- "kinsoku"
+ '("mule/mule-category"
+ "mule/mule-ccl"
+ "mule/kinsoku"
))
;; after this goes the specific lisp routines for a particular input system
@@ -198,35 +198,35 @@
;; compile with -no-packages.
(when (featurep 'mule)
- '("arabic"
- "chinese"
- "cyrillic"
- "english"
- "ethiopic"
- "european"
- "greek"
- "hebrew"
- "indian"
- "devanagari" ; must be loaded after indian.el
- "japanese"
- "korean"
- "lao"
- "latin"
- "misc-lang"
+ '("mule/arabic"
+ "mule/chinese"
+ "mule/cyrillic"
+ "mule/english"
+ "mule/ethiopic"
+ "mule/european"
+ "mule/greek"
+ "mule/hebrew"
+ "mule/indian"
+ "mule/devanagari" ; must be loaded after indian.el
+ "mule/japanese"
+ "mule/korean"
+ "mule/lao"
+ "mule/latin"
+ "mule/misc-lang"
;; "thai" #### merge thai and thai-xtis!!!
- "thai-xtis"
- "tibetan"
- "vietnamese"
+ "mule/thai-xtis"
+ "mule/tibetan"
+ "mule/vietnamese"
))
;; Specialized language support
- (when (featurep '(and mule CANNA)) "canna-leim")
+ (when (featurep '(and mule CANNA)) "mule/canna-leim")
;; Egg/Its is now a package
; (when (featurep '(and mule wnn))
; '("egg-leim" "egg-kwnn-leim"
"egg-cwnn-leim"))
-; (when (featurep 'mule) "egg-sj3-leim")
+; (when (featurep 'mule) "mule/egg-sj3-leim")
;; SKK is now a package
-; (when (featurep 'mule) "skk-leim")
+; (when (featurep 'mule) "mule/skk-leim")
;; Enable Mule capability for Gnus, mail, etc...
;; Moved to sunpro-load.el - the default only for Sun.
@@ -235,7 +235,7 @@
;; needs access to the charsets created by the above
;; language-specific files.
(when (and (featurep 'mule) (valid-console-type-p 'mswindows))
- "mule-msw-init-late")
+ "mule/mule-msw-init-late")
;;; mule-load.el ends here
@@ -285,6 +285,7 @@
;; "ediff-hook" ; Packaged.
"fontl-hooks"
"auto-show"
+ "paragraphs" ; needs easy-mmode, coding
"resize-minibuffer"
(when (featurep 'ldap) "ldap")
1.6.12.1 +2 -2 XEmacs/xemacs/lisp/easymenu.el
Index: easymenu.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/easymenu.el,v
retrieving revision 1.6
retrieving revision 1.6.12.1
diff -u -r1.6 -r1.6.12.1
--- easymenu.el 2001/05/04 22:42:01 1.6
+++ easymenu.el 2005/03/15 05:20:44 1.6.12.1
@@ -181,7 +181,7 @@
(reverse easy-menu-all-popups))
(let ((same-as-menu
(car easy-menu-all-popups)))
- (cons (normalize-menu-item-name
+ (cons (normalize-menu-text
(car same-as-menu))
(cdr same-as-menu)))))
@@ -208,7 +208,7 @@
(reverse easy-menu-all-popups))
(let ((same-as-menu
(car easy-menu-all-popups)))
- (cons (normalize-menu-item-name
+ (cons (normalize-menu-text
(car same-as-menu))
(cdr same-as-menu)))))
1.70.2.1 +1 -1 XEmacs/xemacs/lisp/files.el
Index: files.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/files.el,v
retrieving revision 1.70
retrieving revision 1.70.2.1
diff -u -r1.70 -r1.70.2.1
--- files.el 2004/06/06 23:58:44 1.70
+++ files.el 2005/03/15 05:20:44 1.70.2.1
@@ -2107,7 +2107,7 @@
(save-excursion
(with-temp-buffer
(let ((coding-system-for-read 'raw-text))
- (insert-file-contents file nil 1 3001))
+ (insert-file-contents file nil 0 3000))
(goto-char (point-min))
(or (and (looking-at
"^[^\n]*-\\*-[^\n]*coding: \\([^ \t\n;]+\\)[^\n]*-\\*-")
1.7.8.1 +10 -11 XEmacs/xemacs/lisp/fill.el
Index: fill.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/fill.el,v
retrieving revision 1.7
retrieving revision 1.7.8.1
diff -u -r1.7 -r1.7.8.1
--- fill.el 2002/03/15 07:43:19 1.7
+++ fill.el 2005/03/15 05:20:45 1.7.8.1
@@ -23,6 +23,10 @@
;; 02111-1307, USA.
;;; Synched up with: FSF 19.34.
+;;; NOTE: Merging past 19.34 is currently impossible. Later versions
+;;; contain FSF's own Kinsoku processing, conflicting with the current code
+;;; and depending on various features of their Mule implementation that
+;;; do not currently exist.
;;; Commentary:
@@ -201,9 +205,7 @@
;; We insert before markers in case a caller such as
;; do-auto-fill has done a save-excursion with point at the end
;; of the line and wants it to stay at the end of the line.
- (insert ? ))))
-;; XEmacs: we don't have this function.
-;; (insert-before-markers-and-inherit ? ))))
+ (insert-before-markers-and-inherit ? ))))
;; XEmacs -- added DONT-SKIP-FIRST. Port of older code changes by Stig.
;; #### probably this junk is broken -- do-auto-fill doesn't actually use
@@ -377,8 +379,7 @@
;; Make sure sentences ending at end of line get an extra space.
;; loses on split abbrevs ("Mr.\nSmith")
(while (re-search-forward "[.?!][])}\"']*$" nil t)
- ;; XEmacs change (no insert-and-inherit)
- (or (eobp) (insert ?\ ?\ )))
+ (or (eobp) (insert-and-inherit ?\ ?\ )))
(goto-char from)
(skip-chars-forward " \t")
;; Then change all newlines to spaces.
@@ -423,8 +424,7 @@
(canonically-space-region (or squeeze-after (point)) (point-max))
(goto-char (point-max))
(delete-horizontal-space)
- ;; XEmacs change (no insert-and-inherit)
- (insert " "))
+ (insert-and-inherit " "))
(goto-char (point-min))
;; This is the actual filling loop.
@@ -572,7 +572,7 @@
;; Set prefixcol so whitespace in the prefix won't get lost.
(and fill-prefix (not (equal fill-prefix ""))
(progn
- (insert fill-prefix)
+ (insert-and-inherit fill-prefix)
(setq prefixcol (current-column))))))
;; Justify the line just ended, if desired.
(if justify
@@ -930,8 +930,7 @@
(find-space-insertable-point))) ;(search-backward " ")))
(skip-chars-backward " ")
(setq nmove (1- nmove))))
- ;; XEmacs change
- (insert " ")
+ (insert-and-inherit " ")
(skip-chars-backward " ")
(setq ncols (1- ncols)))))))
(t (error "Unknown justification value"))))
@@ -1046,7 +1045,7 @@
fill-prefix-regexp (regexp-quote fill-prefix)))
(forward-line 1)
(if (bolp)
- ;; If forward-line went past a newline
+ ;; If forward-line went past a newline,
;; move further to the left margin.
(move-to-left-margin))
;; Now stop the loop if end of paragraph.
1.27.2.1 +161 -39 XEmacs/xemacs/lisp/find-paths.el
Index: find-paths.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/find-paths.el,v
retrieving revision 1.27
retrieving revision 1.27.2.1
diff -u -r1.27 -r1.27.2.1
--- find-paths.el 2004/09/22 02:05:50 1.27
+++ find-paths.el 2005/03/15 05:20:45 1.27.2.1
@@ -5,7 +5,7 @@
;; Copyright (C) 1995 Board of Trustees, University of Illinois
;; Copyright (C) 2003 Ben Wing.
-;; Author: Mike Sperber <sperber(a)informatik.uni-tuebingen.de>
+;; Author: Mike Sperber <mike(a)xemacs.org>
;; Maintainer: XEmacs Development Team
;; Keywords: internal, dumped
@@ -125,7 +125,10 @@
path)))
(defun paths-construct-emacs-directory (root suffix base)
- "Construct a directory name within the XEmacs hierarchy."
+ "Construct a directory name within the XEmacs hierarchy.
+ROOT must be a an installation root.
+SUFFIX is the subdirectory from there.
+BASE is the base to look for."
(file-name-as-directory
(expand-file-name
(concat
@@ -133,9 +136,13 @@
suffix
base))))
-(defun paths-find-emacs-directory (roots suffix base
- &optional envvar default keep-suffix)
- "Find a directory in the XEmacs hierarchy.
+
+(defun paths-for-each-emacs-directory (func
+ roots suffix base
+ &optional envvar default keep-suffix)
+ "Iterate over directories in the XEmacs hierarchy.
+FUNC is a function that called for each directory, with the directory
+as the only argument.
ROOTS must be a list of installation roots.
SUFFIX is the subdirectory from there.
BASE is the base to look for.
@@ -149,46 +156,160 @@
(if (and preferred-value
(paths-file-readable-directory-p preferred-value))
(file-name-as-directory preferred-value)
- (catch 'gotcha
- (while roots
- (let* ((root (car roots))
- ;; installed
- (path (paths-construct-emacs-directory root suffix base)))
- (if (paths-file-readable-directory-p path)
- (throw 'gotcha path)
- ;; in-place
- (if (null keep-suffix)
- (let ((path (paths-construct-emacs-directory root "" base)))
- (if (paths-file-readable-directory-p path)
- (throw 'gotcha path))))))
- (setq roots (cdr roots)))
- nil))))
+ (while roots
+ (let* ((root (car roots))
+ ;; installed
+ (path (paths-construct-emacs-directory root suffix base)))
+ (if (paths-file-readable-directory-p path)
+ (funcall func path)
+ ;; in-place
+ (if (null keep-suffix)
+ (let ((path (paths-construct-emacs-directory root "" base)))
+ (if (paths-file-readable-directory-p path)
+ (funcall func path))))))
+ (setq roots (cdr roots))))))
+
+(defun paths-find-emacs-directories (roots
+ suffix base
+ &optional envvar default keep-suffix)
+ "Find a list of directories in the XEmacs hierarchy.
+ROOTS must be a list of installation roots.
+SUFFIX is the subdirectory from there.
+BASE is the base to look for.
+ENVVAR is the name of the environment variable that might also
+specify the directory.
+DEFAULT is the preferred value.
+If KEEP-SUFFIX is non-nil, the suffix must be respected in searching
+the directory."
+ (let ((l '()))
+ (paths-for-each-emacs-directory #'(lambda (dir)
+ (setq l (cons dir l)))
+ roots
+ suffix base
+ envvar default keep-suffix)
+ (reverse l)))
+(defun paths-find-emacs-directory (roots suffix base
+ &optional envvar default keep-suffix)
+ "Find a directory in the XEmacs hierarchy.
+ROOTS must be a list of installation roots.
+SUFFIX is the subdirectory from there.
+BASE is the base to look for.
+ENVVAR is the name of the environment variable that might also
+specify the directory.
+DEFAULT is the preferred value.
+If KEEP-SUFFIX is non-nil, the suffix must be respected in searching
+the directory."
+ (catch 'gotcha
+ (paths-for-each-emacs-directory #'(lambda (dir)
+ (throw 'gotcha dir))
+ roots
+ suffix base
+ envvar default keep-suffix)))
+
+(defun paths-for-each-site-directory (func roots base &optional envvar default)
+ "Iterate over the site-specific directories in the XEmacs hierarchy.
+FUNC is a function that called for each directory, with the directory
+as the only argument.
+ROOT must be a an installation root.
+BASE is the base to look for.
+ENVVAR is the name of the environment variable that might also
+specify the directory.
+DEFAULT is the preferred value."
+ (paths-for-each-emacs-directory func
+ roots
+ (file-name-as-directory
+ (paths-construct-path (list
+ "lib"
+ emacs-program-name)))
+ base
+ envvar default))
+
(defun paths-find-site-directory (roots base &optional envvar default)
- "Find a site-specific directory in the XEmacs hierarchy."
- (paths-find-emacs-directory roots
- (file-name-as-directory
- (paths-construct-path (list
- "lib"
- emacs-program-name)))
- base
- envvar default))
+ "Find a site-specific directory in the XEmacs hierarchy.
+ROOT must be a an installation root.
+BASE is the base to look for.
+ENVVAR is the name of the environment variable that might also
+specify the directory.
+DEFAULT is the preferred value."
+ (catch 'gotcha
+ (paths-for-each-site-directory #'(lambda (dir)
+ (throw 'gotcha dir))
+ roots base
+ envvar default)))
+
+(defun paths-find-site-directories (roots base &optional envvar default)
+ "Find a list of site-specific directories in the XEmacs hierarchy.
+ROOT must be a an installation root.
+BASE is the base to look for.
+ENVVAR is the name of the environment variable that might also
+specify the directory.
+DEFAULT is the preferred value."
+ (let ((l '()))
+ (paths-for-each-site-directory #'(lambda (dir)
+ (setq l (cons dir l)))
+ roots base
+ envvar default)
+ (reverse l)))
+
+(defun paths-for-each-version-directory (func roots base
+ &optional envvar default enforce-version)
+ "Iterate over version-specific directories in the XEmacs hierarchy.
+FUNC is a function that called for each directory, with the directory
+as the only argument.
+ROOT must be a an installation root.
+BASE is the base to look for.
+ENVVAR is the name of the environment variable that might also
+specify the directory.
+DEFAULT is the preferred value.
+If ENFORCE-VERSION is non-nil, the directory must contain the XEmacs version."
+ (paths-for-each-emacs-directory func
+ roots
+ (file-name-as-directory
+ (paths-construct-path
+ (list "lib"
+ (construct-emacs-version-name))))
+ base
+ envvar default))
(defun paths-find-version-directory (roots base
&optional envvar default enforce-version)
"Find a version-specific directory in the XEmacs hierarchy.
+ROOT must be a an installation root.
+BASE is the base to look for.
+ENVVAR is the name of the environment variable that might also
+specify the directory.
+DEFAULT is the preferred value.
+If ENFORCE-VERSION is non-nil, the directory must contain the XEmacs version."
+ (catch 'gotcha
+ (paths-for-each-version-directory #'(lambda (dir)
+ (throw 'gotcha dir))
+ roots base
+ envvar default)))
+
+(defun paths-find-version-directories (roots base
+ &optional envvar default enforce-version)
+ "Find a list of version-specific directories in the XEmacs hierarchy.
+ROOT must be a an installation root.
+BASE is the base to look for.
+ENVVAR is the name of the environment variable that might also
+specify the directory.
+DEFAULT is the preferred value.
If ENFORCE-VERSION is non-nil, the directory must contain the XEmacs version."
- (paths-find-emacs-directory roots
- (file-name-as-directory
- (paths-construct-path
- (list "lib"
- (construct-emacs-version-name))))
- base
- envvar default
- enforce-version))
+ (let ((l '()))
+ (paths-for-each-site-directory #'(lambda (dir)
+ (setq l (cons dir l)))
+ roots base
+ envvar default)
+ (reverse l)))
(defun paths-find-architecture-directory (roots base &optional envvar default)
- "Find an architecture-specific directory in the XEmacs hierarchy."
+ "Find an architecture-specific directory in the XEmacs hierarchy.
+ROOT must be a an installation root.
+BASE is the base to look for.
+ENVVAR is the name of the environment variable that might also
+specify the directory.
+DEFAULT is the preferred value."
(or
;; from more to less specific
(paths-find-version-directory roots
@@ -203,11 +324,12 @@
envvar)))
(defun construct-emacs-version-name ()
- "Construct the raw XEmacs version number."
+ "Construct a string from the raw XEmacs version number."
(concat emacs-program-name "-" emacs-program-version))
(defun paths-directories-which-exist (directories)
- "Return the directories among DIRECTORIES."
+ "Return the directories among DIRECTORIES.
+DIRECTORIES is a list of strings."
(let ((reverse-directories '()))
(while directories
(if (paths-file-readable-directory-p (car directories))
@@ -218,7 +340,7 @@
(reverse reverse-directories)))
(defun paths-uniq-append (list-1 list-2)
- "Append LIST-1 and LIST-2, omitting duplicates."
+ "Append LIST-1 and LIST-2, omitting EQUAL duplicates."
(let ((reverse-survivors '()))
(while list-2
(if (null (member (car list-2) list-1))
1.28.2.1 +2 -2 XEmacs/xemacs/lisp/font-lock.el
Index: font-lock.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/font-lock.el,v
retrieving revision 1.28
retrieving revision 1.28.2.1
diff -u -r1.28 -r1.28.2.1
--- font-lock.el 2004/11/04 23:05:55 1.28
+++ font-lock.el 2005/03/15 05:20:46 1.28.2.1
@@ -2174,10 +2174,10 @@
(defconst c-font-lock-keywords-3 nil
"Gaudy level highlighting for C modes.")
-(defconst c-font-lock-keywords-2 nil
+(defconst xemacs-c-font-lock-keywords-2 nil
"Medium level highlighting for XEmacs C source code.")
-(defconst c-font-lock-keywords-3 nil
+(defconst xemacs-c-font-lock-keywords-3 nil
"Gaudy level highlighting for XEmacs C source code.")
(defconst c++-font-lock-keywords-1 nil
1.7.2.2 +1 -1 XEmacs/xemacs/lisp/font-menu.el
Index: font-menu.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/font-menu.el,v
retrieving revision 1.7.2.1
retrieving revision 1.7.2.2
diff -u -r1.7.2.1 -r1.7.2.2
--- font-menu.el 2004/11/25 12:44:00 1.7.2.1
+++ font-menu.el 2005/03/15 05:20:46 1.7.2.2
@@ -113,7 +113,7 @@
;;; ==>
;;; "-morisawa-ryumin light
kl-light-r-normal--10-100-72-72-m-50-jisx0201.1976-0"
;;;
-;;; (list-fonts "-dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*")
+;;; (font-list "-dt-interface user-medium-r-normal-s*-*-*-*-*-*-*-*-*")
;;; ==>
;;; ("-dt-interface user-medium-r-normal-s sans-12-120-72-72-m-70-iso8859-1"
;;; "-dt-interface
user-medium-r-normal-s-14-120-75-75-m-120-jisx0208.1983-0"
1.15.2.4 +5 -12 XEmacs/xemacs/lisp/font.el
Index: font.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/font.el,v
retrieving revision 1.15.2.3
retrieving revision 1.15.2.4
diff -u -r1.15.2.3 -r1.15.2.4
--- font.el 2005/03/05 18:09:21 1.15.2.3
+++ font.el 2005/03/15 05:20:46 1.15.2.4
@@ -2,7 +2,7 @@
;; Copyright (c) 1995, 1996 by William M. Perry (wmperry(a)cs.indiana.edu)
;; Copyright (c) 1996, 1997 Free Software Foundation, Inc.
-;; Copyright (C) 2002 Ben Wing.
+;; Copyright (C) 2002, 2004 Ben Wing.
;; Author: wmperry
;; Maintainer: XEmacs Development Team
@@ -44,8 +44,7 @@
;;; Code:
(globally-declare-fboundp
- '(x-list-fonts
- mswindows-list-fonts ns-list-fonts internal-facep fontsetp get-font-info
+ '(internal-facep fontsetp get-font-info
get-fontset-info mswindows-define-rgb-color cancel-function-timers
mswindows-font-regexp mswindows-canonicalize-font-name
mswindows-parse-font-style mswindows-construct-font-style
@@ -72,13 +71,7 @@
(defmacro defcustom (var value doc &rest args)
`(defvar ,var ,value ,doc))))
-(if (not (fboundp 'try-font-name))
- (defun try-font-name (fontname &rest args)
- (case window-system
- ((x pm) (car-safe (x-list-fonts fontname)))
- (mswindows (car-safe (mswindows-list-fonts fontname)))
- (ns (car-safe (ns-list-fonts fontname)))
- (otherwise nil))))
+; delete alternate defn of try-font-name
(if (not (fboundp 'facep))
(defun facep (face)
@@ -972,7 +965,7 @@
(defun x-font-build-cache (&optional device)
(let ((hash-table (make-hash-table :test 'equal :size 15))
(fonts (mapcar 'x-font-create-object
- (x-list-fonts "-*-*-*-*-*-*-*-*-*-*-*-*-*-*")))
+ (font-list "-*-*-*-*-*-*-*-*-*-*-*-*-*-*")))
(plist nil)
(cur nil))
(while fonts
@@ -1106,7 +1099,7 @@
(defun font-lookup-rgb-components (color)
"Lookup COLOR (a color name) in rgb.txt and return a list of RGB values.
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)
+ (let ((lib-list (if-boundp 'x-library-search-path
x-library-search-path
;; This default is from XEmacs 19.13 - hope it covers
;; everyone.
1.22.2.1 +2 -2 XEmacs/xemacs/lisp/frame.el
Index: frame.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/frame.el,v
retrieving revision 1.22
retrieving revision 1.22.2.1
diff -u -r1.22 -r1.22.2.1
--- frame.el 2004/11/04 23:05:55 1.22
+++ frame.el 2005/03/15 05:20:47 1.22.2.1
@@ -994,7 +994,7 @@
(completion-ignore-case t)
(font (completing-read "Font name: "
(mapcar #'list
- (list-fonts "*" frame))
+ (font-list "*" frame))
nil nil nil nil
(face-font-name 'default frame))))
(list font current-prefix-arg)))
@@ -1186,7 +1186,7 @@
(case (framep-on-display display)
;; We assume X, NeXTstep, and GTK *always* have a pointing device
((x ns gtk) t)
- (mswindows (> mswindows-num-mouse-buttons 0))
+ (mswindows (> (declare-boundp mswindows-num-mouse-buttons) 0))
(tty
(and-fboundp 'gpm-is-supported-p
(gpm-is-supported-p (display-device display))))
1.7.20.1 +321 -160 XEmacs/xemacs/lisp/glyphs.el
Index: glyphs.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/glyphs.el,v
retrieving revision 1.7
retrieving revision 1.7.20.1
diff -u -r1.7 -r1.7.20.1
--- glyphs.el 2001/04/12 18:21:21 1.7
+++ glyphs.el 2005/03/15 05:20:47 1.7.20.1
@@ -1,7 +1,7 @@
;;; glyphs.el --- Lisp interface to C glyphs
;; Copyright (C) 1994, 1997 Free Software Foundation, Inc.
-;; Copyright (C) 1995, 1996, 2000 Ben Wing.
+;; Copyright (C) 1995, 1996, 2000, 2005 Ben Wing.
;; Author: Chuck Thompson <cthomp(a)cs.uiuc.edu>, Ben Wing <ben(a)xemacs.org>
;; Maintainer: XEmacs Development Team
@@ -47,149 +47,129 @@
of instantiators. See `make-specifier' for more information about
specifiers.
-An image specifier is used for images (pixmaps, widgets and the like).
-It is used to describe the actual image in a glyph. It is instanced
-as an image-instance. Note that \"image\" as used in XEmacs does not
-actually refer to what the term \"image\" normally means (a picture,
-e.g. in .GIF or .JPG format, and called a \"pixmap\" in XEmacs), but
-includes all types of graphical elements, including pixmaps, widgets
-\(buttons, sliders, text fields, etc.) and even strings of text.
-
-Note that, in practice, you rarely, if ever, need to actually create
-an image specifier! (The function `make-image-specifier' exists mainly
-for completeness.) Pretty much the only use for image specifiers is to
-control how glyphs are displayed, and the image specifier associated
-with a glyph (the `image' property of a glyph) is created
-automatically when a glyph is created (see `make-glyph') and need not
-\(and cannot, for that matter) ever be changed. In fact, the design
-decision to create a separate image specifier type, rather than make
-glyphs themselves be specifiers, is debatable -- the other properties
-of glyphs are rarely used and could conceivably have been incorporated
-into the glyph's instantiator. The rarely used glyph types (buffer,
-pointer, icon) could also have been incorporated into the instantiator.
-
-Image instantiators come in many formats: `xbm', `xpm', `gif', `jpeg',
-etc. This describes the format of the data describing the image. The
-resulting image instances also come in many types -- `mono-pixmap',
-`color-pixmap', `text', `pointer', etc. This refers to the behavior of
-the image and the sorts of places it can appear. (For example, a
-color-pixmap image has fixed colors specified for it, while a
-mono-pixmap image comes in two unspecified shades \"foreground\" and
-\"background\" that are determined from the face of the glyph or
-surrounding text; a text image appears as a string of text and has an
-unspecified foreground, background, and font; a pointer image behaves
-like a mono-pixmap image but can only be used as a mouse pointer
-\[mono-pixmap images cannot be used as mouse pointers]; etc.) It is
-important to keep the distinction between image instantiator format and
-image instance type in mind. Typically, a given image instantiator
-format can result in many different image instance types (for example,
-`xpm' can be instanced as `color-pixmap', `mono-pixmap', or `pointer';
-whereas `cursor-font' can be instanced only as `pointer'), and a
-particular image instance type can be generated by many different
-image instantiator formats (e.g. `color-pixmap' can be generated by `xpm',
-`gif', `jpeg', etc.).
-
-See `make-image-instance' for a more detailed discussion of image
-instance types.
+The main purpose of this doc string is to describe the possible formats for
+image instantiators, as given as an argument to `make-glyph' or
+`set-glyph-image'.
An image instantiator should be a string or a vector of the form
[FORMAT :KEYWORD VALUE ...]
i.e. a format symbol followed by zero or more alternating keyword-value
-pairs. FORMAT should be one of
+pairs. The vector form of an image instantiator explicitly specifies the
+format of the image and other relevant properties. The string form
+specifies only a filename or gives inline data of an unspecified format,
+and XEmacs must guess the actual format. Once it has done this, it
+internally converts the instantiator into the vector format. This is
+described in more detail below.
+
+Following is a list of the possible values for FORMAT. After each
+description, the allowable keywords for the format are listed in brackets,
+followed by the possible image instance types that can be generated from
+this format. (Image instance types will be discussed below.)
-'nothing
+`nothing'
Don't display anything; no keywords are valid for this.
- Can only be instanced as `nothing'.
-'string
- Display this image as a text string. Can only be instanced
- as `text', although support for instancing as `mono-pixmap'
- and `color-pixmap' should be added.
-'formatted-string
- Display this image as a text string, with replaceable fields;
- not currently implemented. (It is, instead, equivalent to `string'.)
-'xbm
- An X bitmap; only if X or MS Windows support was compiled into this
- XEmacs. Can be instanced as `mono-pixmap', `color-pixmap', or
`pointer'.
-'xpm
- An XPM pixmap; only if XPM support was compiled into this XEmacs.
- Can be instanced as `color-pixmap', `mono-pixmap', or `pointer'.
-'xface
- An X-Face bitmap, used to encode people's faces in e-mail messages;
- only if X-Face support was compiled into this XEmacs. Can be
- instanced as `mono-pixmap', `color-pixmap', or `pointer'.
-'gif
+ [] (nothing)
+`string'
+ Display this image as a text string. Support for instantiating as
+ `mono-pixmap' and `color-pixmap' should probably be added.
+ [:data] (text)
+`formatted-string'
+ Display this image as a text string, with replaceable fields.
+ Not currently implemented -- it's treated like `string'.
+ [:data] (text)
+`gif'
A GIF87 or GIF89 image; only if GIF support was compiled into this
- XEmacs. NOTE: only the first frame of animated gifs will be displayed.
- Can be instanced as `color-pixmap'.
-'jpeg
+ XEmacs. NOTE: Only the first frame of animated gifs will be displayed.
+ [:data, :file] (color-pixmap, pointer)
+`jpeg'
A JPEG image; only if JPEG support was compiled into this XEmacs.
- Can be instanced as `color-pixmap'.
-'png
+ [:data, :file] (color-pixmap, pointer)
+`png'
A PNG image; only if PNG support was compiled into this XEmacs.
- Can be instanced as `color-pixmap'.
-'tiff
+ [:data, :file] (color-pixmap, pointer)
+`tiff'
A TIFF image; only if TIFF support was compiled into this XEmacs.
- Can be instanced as `color-pixmap'.
-'bmp
+ [:data, :file] (color-pixmap, pointer)
+`bmp'
A MS Windows BMP image; only if MS Windows support was compiled into
- this XEmacs. Can be instanced as `color-pixmap'.
-'cursor-font
- One of the standard cursor-font names, such as \"watch\" or
- \"right_ptr\" under X. Under X, this is, more specifically, any
+ this XEmacs.
+ [:data, :file] (color-pixmap, pointer)
+`xbm'
+ An X bitmap; exists if any window-system support was compiled into this
+ XEmacs.
+ [:data, :file, :foreground, :background, :mask-data, :mask-file,
+ :hotspot-x, :hotspot-y] (mono-pixmap, color-pixmap, pointer)
+`xpm'
+ An XPM pixmap; only if XPM support was compiled into this XEmacs.
+ [:data, :file, :color-symbols] (mono-pixmap, color-pixmap, pointer)
+`xface'
+ An X-Face bitmap, used to encode people's faces in e-mail messages;
+ only if X-Face support was compiled into this XEmacs.
+ [:data, :file, :foreground, :background, :mask-data, :mask-file,
+ :hotspot-x, :hotspot-y] (mono-pixmap, color-pixmap, pointer)
+`cursor-font'
+ X and GTK only. One of the standard cursor-font names, such as \"watch\"
+ or \"right_ptr\" under X. Under X, this is, more specifically, any
of the standard cursor names from appendix B of the Xlib manual
[also known as the file <X11/cursorfont.h>] minus the XC_ prefix.
On other window systems, the valid names will be specific to the
- type of window system. Can only be instanced as `pointer'.
-'mswindows-resource
+ type of window system.
+ [:data, :foreground, :background] (pointer)
+`mswindows-resource'
An MS Windows pointer resource. Specifies a resource to retrieve
directly from the system (an OEM resource) or from a file, particularly
an executable file. If the resource is to be retrieved from a file, use
:file and optionally :resource-id. Otherwise use :resource-id. Always
specify :resource-type to specify the type (cursor, bitmap or icon) of
- the resource. Possible values for :resource-id are listed below. Can
- be instanced as `pointer' or `color-pixmap'.
-'font
+ the resource. Possible values for :resource-id are listed below.
+ [:file, :resource-type, :resource-id] (pointer, color-pixmap)
+`font'
A glyph from a font; i.e. the name of a font, and glyph index into it
of the form \"FONT fontname index [[mask-font] mask-index]\".
- Currently can only be instanced as `pointer', although this should
+ Currently can only be instantiated as `pointer', although this should
probably be fixed.
-'subwindow
- An embedded windowing system window. Can only be instanced as
- `subwindow'.
-'button
+ [:data, :foreground, :background] (pointer)
+`subwindow'
+ An embedded windowing system window.
+ [:pixel-width, :pixel-height] (subwindow)
+`button'
A button widget; either a push button, radio button or toggle button.
- Can only be instanced as `widget'.
-'combo-box
+ [WIDGET-KEYWORDS, GUI-KEYWORDS, :image] (widget)
+`combo-box'
A drop list of selectable items in a widget, for editing text.
- Can only be instanced as `widget'.
-'edit-field
- A text editing widget. Can only be instanced as `widget'.
-'label
- A static, text-only, widget; for displaying text. Can only be instanced
- as `widget'.
-'layout
+ [GUI-KEYWORDS, :width, :height, :pixel-width, :face, :items] (widget)
+`edit-field'
+ A text editing widget.
+ [WIDGET-KEYWORDS, GUI-KEYWORDS] (widget)
+`label'
+ A static, text-only, widget; for displaying text.
+ [WIDGET-KEYWORDS, :descriptor] (widget)
+`layout'
A widget for controlling the positioning of children underneath it.
Through the use of nested layouts, a widget hierarchy can be created
which can have the appearance of any standard dialog box or similar
arrangement; all of this is counted as one \"glyph\" and could appear
- in many of the places that expect a single glyph. Can only be instanced
- as `widget'.
-'native-layout
+ in many of the places that expect a single glyph.
+ [WIDGET-KEYWORDS, GUI-KEYWORDS, :orientation, :justify, :vertically-justify,
+ :horizontally-justify, :border, :margin-width, :items] (widget)
+`native-layout'
The native version of a layout widget. #### Document me better!
- Can only be instanced as `widget'.
-'progress-gauge
- A sliding widget, for showing progress. Can only be instanced as
- `widget'.
-'tab-control
- A tab widget; a series of user selectable tabs. Can only be instanced
- as `widget'.
-'tree-view
- A folding widget. Can only be instanced as `widget'.
-'scrollbar
- A scrollbar widget. Can only be instanced as `widget'.
-'autodetect
+ [WIDGET-KEYWORDS, GUI-KEYWORDS] (widget)
+`progress-gauge'
+ A sliding widget, for showing progress.
+ [WIDGET-KEYWORDS, GUI-KEYWORDS, :value] (widget)
+`tab-control'
+ A tab widget; a series of user selectable tabs.
+ [WIDGET-KEYWORDS, GUI-KEYWORDS, :orientation, :items] (widget)
+`tree-view'
+ A folding widget.
+ [WIDGET-KEYWORDS, GUI-KEYWORDS, :items] (widget)
+`scrollbar'
+ A scrollbar widget.
+ [GUI-KEYWORDS, :pixel-width, :face, :items] (widget)
+`autodetect'
XEmacs tries to guess what format the data is in. If X support
exists, the data string will be checked to see if it names a filename.
If so, and this filename contains XBM or XPM data, the appropriate
@@ -198,11 +178,11 @@
is one of the allowable image-instance types and the string names a
valid cursor-font name, the image will be created as a pointer.
Otherwise, the image will be displayed as text. If no X support
- exists, the image will always be displayed as text. Can be instanced as
- `mono-pixmap', `color-pixmap', `pointer', or `text'.
-'inherit
- Inherit from the background-pixmap property of a face. Can only be
- instanced as `mono-pixmap'.
+ exists, the image will always be displayed as text.
+ [:data] (mono-pixmap, color-pixmap, pointer, text)
+`inherit'
+ Inherit from the background-pixmap property of a face.
+ [:face] (mono-pixmap)
The valid keywords are:
@@ -264,7 +244,7 @@
\"lfarrowi\", \"size\", \"btsize\",
\"check\", \"checkboxes\", and
\"btncorners\".
- -- For cursors:
+ -- For pointers:
\"normal\", \"ibeam\", \"wait\", \"cross\",
\"up\", \"sizenwse\",
\"sizenesw\", \"sizewe\", \"sizens\",
\"sizeall\", and \"no\".
@@ -273,18 +253,28 @@
\"sample\", \"hand\", \"ques\", \"bang\",
\"note\", and \"winlogo\".
:resource-type
- Only for `mswindows-resource'. This must be a symbol, either `cursor',
- `icon', or `bitmap', specifying the type of resource to be retrieved.
+ Only for `mswindows-resource'. This must be a symbol, either `cursor'
+ (i.e. pointer), `icon', or `bitmap', specifying the type of resource to
+ be retrieved.
:face
Only for `inherit'. This specifies the face to inherit from.
For widgets this also specifies the face to use for display. It defaults
to gui-element-face.
+:pixel-width, :pixel-height
+ Width and height of element, in pixels. For `subwindow', the values
+ must be integers. For widgets, the values can be integers or
+ expressions that evaluate to integers.
-Keywords accepted as menu item specs are also accepted by widgets.
+\[WIDGET-KEYWORDS] stands for the standard keywords accepted by widgets:
These are `:selected', `:active', `:suffix', `:keys', `:style',
`:filter', `:config', `:included', `:key-sequence',
`:accelerator',
-`:label' and `:callback'.
+`:label', `:callback', `:initial-focus', and `:descriptor'.
+#### Document me.
+\[GUI-KEYWORDS] stands for keywords accepted by many widgets.
+These are `:width', `:height', `:pixel-width', `:pixel-height', and
`:face'.
+#### Document me.
+
If instead of a vector, the instantiator is a string, it will be
converted into a vector by looking it up according to the specs in the
`console-type-image-conversion-list' (q.v.) for the console type of
@@ -299,7 +289,148 @@
file must exist when the instantiator is added to the image, but does
not need to exist at any other time (e.g. it may safely be a temporary
file).
-"
+
+NOTE: In practice, you rarely, if ever, need to actually
+create an image specifier! (The function `make-image-specifier' exists
+mainly for completeness.) Pretty much the only use for image specifiers is
+to control how glyphs are displayed, and the image specifier associated
+with a glyph (the `image' property of a glyph) is created automatically
+when a glyph is created (see `make-glyph') and need not \(and cannot, for
+that matter) ever be changed. In fact, the design decision to create a
+separate image specifier type, rather than make glyphs themselves be
+specifiers, is debatable -- the other properties of glyphs are rarely used
+and could conceivably have been incorporated into the glyph's instantiator.
+The rarely used glyph types (buffer, pointer, icon) could also have been
+incorporated into the instantiator.
+
+An image specifier is used for images (pixmaps, widgets and the like). It
+is used to describe the actual image in a glyph. It is instantiated \(see
+`specifier-instance') as an image-instance. Note that \"image\" as used
in
+XEmacs does not actually refer to what the term \"image\" normally means (a
+picture, e.g. in .GIF or .JPG format, and called a \"pixmap\" in XEmacs),
+but includes all types of graphical elements, including pixmaps, widgets
+\(buttons, sliders, text fields, etc.) and even strings of text.
+
+There is an important distinction to be made between image instantiators
+and image instances, and \"image instantiator formats\" and \"image
+instance types\", analogous to the distinction between source and
+destination. An image instantiator describes the source data for an image.
+An image instance encapsulates the resulting window-system object used to
+display the image. Image instantiator formats are the formats of the
+source: This includes familiar and less-familiar graphics formats such as
+`gif', `jpeg', `png' and `xpm'; widget types such as `button',
`edit-field'
+and `combo-box'; and other beasts such as `string' (plain text, which could
+potentially behave like text when placed in a buffer, such as wrapping),
+`font' (a single character from a particular font, specified by the index
+into the font), etc. Image instance types are the (destination) types of
+the resulting image instance. Different image instance types correspond to
+fundamentally different appearance and behaviors for the resulting image,
+specifically:
+
+-- `color-pixmap' (a color image);
+-- `mono-pixmap' (a \"monochrome\" image, technically a two-color image
+ that comes in two unspecified shades \"foreground\" and
\"background\",
+ determined from the face [see `make-face'] of the glyph or surrounding
+ text);
+-- `text' (a string of text appearing somewhere in a buffer's text or
+ margins, which has an unspecified foreground, background, and font
+ derived from the surrounding text or other external property and which
+ behaves in many respects like an image but can wrap across the end of a
+ line to the beginning of the next);
+-- `pointer' (the mouse pointer for a window; this is a combination of a
+ rectangular pixmap image, a monochrome mask that specifies the
+ transparency of the image [i.e. in which places the underlying screen
+ image can show through, and how much of it], and a \"hotspot\" that
+ indicates which pixel in the pointer's image is considered the actual
+ pointer location -- for example, this will be located near the tip of
+ an arrow, in the middle of a crosshairs, somewhere along an i-beam, etc.);
+-- `widget' (a window-system object or \"widget\" that interacts with
the
+ user, such as a button, edit-field or combo-box);
+-- `subwindow' (a rectangular area that another program can draw into);
+-- `nothing' (no display).
+
+There is not a one-to-one mapping between source (image instantiator)
+formats and destination (image instance) types. For example, the source
+format `xpm' can generate the image instance types `color-pixmap',
+`mono-pixmap', or `pointer', and the image instance type `color-pixmap'
can
+be generated by any of `gif', `jpeg', `png', `tiff', `xpm',
`xbm' and
+`xface'.
+
+In general, the user or programmer specifies the image instantiator format,
+while the appropriate image instance type is determined automatically by
+XEmacs from the image instantiator format, from the data in the
+instantiator and from the particular situation the image (and the glyph
+that holds it) is being used in. (However, it's possible to explicitly
+create image instances and control their types; see `make-image-instance'.)
+For example, a glyph used to specify the shape of a mouse pointer can only
+result in `pointer'-type image instances, and a glyph used for an icon can
+only result in `color-pixmap' image instances. A glyph used in a buffer
+can potentially result in any image instance type except for `pointer', but
+particular instantiator formats have only a limited set of image instance
+types they will support. Here is an example of how the image instance type
+for an `xpm' instantiator (which can potentially support `color-pixmap',
+`mono-pixmap', or `pointer') is determined:
+
+1. If the glyph is being used for a mouse pointer (hence its `glyph-type'
+ is `pointer'), it can be instantiated only a `pointer'-type image instance.
+2. If the glyph is being used for an icon (hence its `glyph-type' is `icon'),
+ it can be instantiated only a `color-pixmap'-type image instance.
+3. Otherwise, the glyph is being used somewhere inside a frame (`glyph-type'
+ of `buffer') and any image instance type except `pointer' can be
+ supported. In this case, this means `color-pixmap' or `mono-pixmap'.
+ Which one will result depends on the particular data being processed,
+ since XPM images can specify whether they are color or mono.
+
+Note again that \"mono\" does *NOT* simply mean \"an image with two
+colors\". The latter image has two prespecified colors, e.g. red and blue
+or black and white, and will always appear with those colors, no matter
+what the context. A mono image has two *unspecified* colors, symbolically
+named \"foreground\" and \"background\", and the actual values for
those
+colors depends on context. A mono pixmap displayed among text will take
+its foreground and background from that of the text and hence blend in
+nicely; a two-color color pixmap won't do that.
+
+Note also that `color-pixmap' image instances can be generated from the
+supported pixmap formats that are inherently mono (i.e. `xbm' and `xface')
+by specifying :foreground and :background values.
+
+A table of the various image instantiator formats and the possible
+destination (image instance) types that can be generated from them is as
+follows:
+
+
+ color-pixmap mono-pixmap text pointer widget subwindow noth.
+-------------------------------------------------------------------------------
+nothing +
+string +
+formatted-string +
+xbm + + +
+xpm + + +
+xface + + +
+gif + +
+jpeg + +
+png + +
+tiff + +
+bmp + +
+cursor-font +
+mswindows-resource + +
+font +
+subwindow +
+button +
+combo-box +
+edit-field +
+label +
+layout +
+native-layout +
+progress-gauge +
+tab-control +
+tree-view +
+scrollbar +
+autodetect + + + +
+inherit +
+
+See `make-image-instance' for a more detailed discussion of image
+instance types."
(make-specifier-and-init 'image spec-list))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; glyphs
@@ -328,11 +459,11 @@
specifying a font or color name), or a list of specifications, each
of which is a cons of a locale and a list of instantiators.
Specifically, if LOCALE is a particular locale (a buffer, window,
- frame, device, or 'global), a list of instantiators for that locale
+ frame, device, or `global'), a list of instantiators for that locale
will be returned. Otherwise, if LOCALE is a locale type (one of
- the symbols 'buffer, 'window, 'frame, 'device, 'device-class, or
- 'device-type), the specifications for all locales of that type will
- be returned. Finally, if LOCALE is 'all, the specifications for all
+ the symbols `buffer', `window', `frame', `device',
`device-class', or
+ `device-type'), the specifications for all locales of that type will
+ be returned. Finally, if LOCALE is `all', the specifications for all
locales of all types will be returned.
The specifications in a specifier determine what the value of
@@ -340,7 +471,7 @@
which is typically a particular Emacs window along with the buffer
it contains and the frame and device it lies within. The value
is derived from the instantiator associated with the most specific
- locale (in the order buffer, window, frame, device, and 'global)
+ locale (in the order buffer, window, frame, device, and `global')
that matches the domain in question. In other words, given a domain
(i.e. an Emacs window, usually), the specifier for PROPERTY will first
be searched for a specification whose locale is the buffer contained
@@ -368,7 +499,7 @@
;; if a user-property does not have a specifier but a
;; locale was specified, put a specifier there.
;; If there was already a value there, convert it to a
- ;; specifier with the value as its 'global instantiator.
+ ;; specifier with the value as its `global' instantiator.
(if (not (specifierp specifier))
(let ((new-specifier (make-specifier 'generic)))
(if (or (not (null specifier))
@@ -436,7 +567,7 @@
-- If VALUE is a simple instantiator (e.g. a string naming a font or
color) or a list of instantiators, then the instantiator(s) will
be added as a specification of the property for the given LOCALE
- (which defaults to 'global if omitted).
+ (which defaults to `global' if omitted).
-- If VALUE is a list of specifications (each of which is a cons of
a locale and a list of instantiators), then LOCALE must be nil
(it does not make sense to explicitly specify a locale in this
@@ -448,12 +579,12 @@
`copy-specifier' and LOCALE has the same semantics (if it is
a particular locale, the specification for the locale will be
copied; if a locale type, specifications for all locales of
- that type will be copied; if nil or 'all, then all
+ that type will be copied; if nil or `all', then all
specifications will be copied).
-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
+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
`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.
@@ -462,7 +593,7 @@
by `glyph-property-instance') as an instantiator in place of
an actual instantiator. In such a case, the instantiator used
to create that instance object will be used (for example, if
- you set a font-instance object as the value of the 'font
+ you set a font-instance object as the value of the `font'
property, then the font name used to create that object will
be used instead). If some cases, however, doing this
conversion does not make sense, and this will be noted in
@@ -473,7 +604,7 @@
given, then this function will attempt to add VALUE as the
instantiator for the given LOCALE, using `add-spec-to-specifier'.
If the value of the property is not a specifier, it will
- automatically be converted into a 'generic specifier.
+ automatically be converted into a `generic' specifier.
The following symbols have predefined meanings:
@@ -527,7 +658,7 @@
LOCALE may be a locale (the instantiators for that particular locale
will be returned), a locale type (the specifications for all locales
- of that type will be returned), 'all (all specifications will be
+ of that type will be returned), `all' (all specifications will be
returned), or nil (the actual specifier object will be returned).
See `glyph-property' for more information."
@@ -561,10 +692,10 @@
object.
If SPEC is an alist, LOCALE must be omitted. If SPEC is a
- specifier object, LOCALE can be a locale, a locale type, 'all,
+ 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"))
@@ -575,17 +706,17 @@
LOCALE may be a locale (the instantiators for that particular locale
will be returned), a locale type (the specifications for all locales
- of that type will be returned), 'all (all specifications will be
+ of that type will be returned), `all' (all specifications will be
returned), or nil (the actual specifier object will be returned).
See `glyph-property' for more information."
(glyph-property glyph 'contrib-p locale))
(defun glyph-contrib-p-instance (glyph &optional domain default no-fallback)
- "Return the instance of GLYPH's 'contrib-p property in DOMAIN.
+ "Return the instance of GLYPH's `contrib-p' property in DOMAIN.
Normally DOMAIN will be a window or nil (meaning the selected window),
- and an instance object describing what the 'contrib-p property is in
+ and an instance object describing what the `contrib-p' property is in
that particular window and buffer will be returned.
See `glyph-property-instance' for more information."
@@ -599,10 +730,10 @@
locale to an instantiator list), or a boolean specifier object.
If SPEC is an alist, LOCALE must be omitted. If SPEC is a
- specifier object, LOCALE can be a locale, a locale type, 'all,
+ 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"))
@@ -613,7 +744,7 @@
LOCALE may be a locale (the instantiators for that particular locale
will be returned), a locale type (the specifications for all locales
- of that type will be returned), 'all (all specifications will be
+ of that type will be returned), `all' (all specifications will be
returned), or nil (the actual specifier object will be returned).
See `glyph-property' for more information."
@@ -638,10 +769,10 @@
locale to an instantiator list), or a generic specifier object.
If SPEC is an alist, LOCALE must be omitted. If SPEC is a
- specifier object, LOCALE can be a locale, a locale type, 'all,
+ 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"))
@@ -668,13 +799,46 @@
normally think of as an image (which in XEmacs is called a
\"pixmap\"), but to any graphical element -- a pixmap, a widget, or
even a block of text, when used in the places that call for a glyph.)
-The format of the SPEC-LIST is typically an image instantiator (a
-string or a vector; see `make-image-specifier' for a detailed description
-of the valid image instantiators), but can also be a list of such
-instantiators (each one in turn is tried until an image is
-successfully produced), a cons of a locale (frame, buffer, etc.) and
-an instantiator, a list of such conses, or any other form accepted by
-`canonicalize-spec-list'.
+
+SPEC-LIST is typically an image instantiator, describing the source for the
+image data. This is either a vector of the form [FORMAT :KEYWORD DATA ...],
+for example
+
+ [jpeg :file \"/user/john/images/myimage.jpg\"]
+
+or
+
+ [xbm :data \"/* XPM */\nstatic char * copy[] = {\n...\"]
+
+or it is a string, either giving a file name or directly specifying inline
+data. See `make-image-specifier' for a detailed description of valid image
+instantiators. If the instantiator is a string, XEmacs will convert it
+into vector form by trying to guess whether a file name or inline data is
+intended, and what kind of data is inline or in the file. Usually it does
+a pretty good job. See `console-type-image-conversion-list' for details of
+how this works.
+
+If the instantiator specifies data from a file, the data will be read in
+when `make-glyph' is called and substituted inline into the instantiator,
+using the :data keyword. This means that the file must exist when the
+glyph is created, but does not need to exist afterwards (e.g. it may safely
+be a temporary file).
+
+When errors occur in the process of reading image data from a file
+\(e.g. the file does not exist or the data is of the wrong format or
+corrupted), no Lisp error will currently be signalled. Instead, the
+instantiator is skipped and warnings will be issued at level `debug'. \(A
+glyph with no instantiators in it cannot be displayed.) Normally, such
+warnings are ignored entirely, but you can change this by setting
+`log-warning-minimum-level'. This is useful if you're trying to debug why
+particular instantiators are not being processed. (#### We should probably
+provide a way of getting errors in such circumstances, or even make this
+the default behavior.)
+
+Technically, SPEC-LIST can also be a list of image instantiators (each one
+in turn is tried until an image is successfully produced), a cons of a
+locale (frame, buffer, etc.) and an instantiator, a list of such conses,
+or any other form accepted by `canonicalize-spec-list'.
If you're not familiar with specifiers, you should be in order to
understand how glyphs work. The clearest introduction to specifiers
@@ -734,7 +898,7 @@
value of the variable `toolbar-mail-icon' (in general, `toolbar-*-icon')
and then calling `(set-specifier-dirty-flag default-toolbar)'.
(#### Unfortunately this doesn't quite work the way it should; the
- change will appear in new frames, but not existing ones.
+ change will appear in new frames, but not existing ones.)
-- To insert a glyph into a gutter, create or modify a gutter instantiator
(typically set on the specifier `default-gutter'). Gutter instantiators
@@ -781,9 +945,6 @@
which controls the appearance of characters. You can also set an
overriding display table for use with text displayed in a particular
face; see `set-face-display-table' and `make-display-table'.
- #### Note: Display tables do not currently support general Mule
- characters. They will be overhauled at some point to support this
- and to provide other features required under Mule.
-- To use a glyph as the background pixmap of a face: Note that the
background pixmap of a face is actually an image specifier -- probably
@@ -972,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
1.13.2.1 +6 -3 XEmacs/xemacs/lisp/gnuserv.el
Index: gnuserv.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/gnuserv.el,v
retrieving revision 1.13
retrieving revision 1.13.2.1
diff -u -r1.13 -r1.13.2.1
--- gnuserv.el 2003/09/19 17:07:07 1.13
+++ gnuserv.el 2005/03/15 05:20:47 1.13.2.1
@@ -419,11 +419,14 @@
;; backbone of gnuserv.el.
(defun gnuserv-edit-files (type list &rest flags)
"For each (line-number . file) pair in LIST, edit the file at line-number.
-The visited buffers are memorized, so that when \\[gnuserv-edit] is invoked
+The visited buffers are recorded, so that when \\[gnuserv-edit] is invoked
in such a buffer, or when it is killed, or the client's device deleted, the
-client will be invoked that the edit is finished.
+client will be informed that the edit is finished.
-TYPE should either be a (tty TTY TERM PID) list, or (x DISPLAY) list.
+TYPE should be a list in one of the forms (tty TTY TERM PID), (x DISPLAY),
+\(gtk DISPLAY), or (mswindows DISPLAY). Currently GTK and MS Windows do not
+support multiple displays, so the DISPLAY member is ignored. Conventionally
+it is set to nil.
If a flag is `quick', just edit the files in Emacs.
If a flag is `view', view the files read-only."
(let (quick view)
1.5.2.1 +2 -2 XEmacs/xemacs/lisp/gtk-font-menu.el
Index: gtk-font-menu.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/gtk-font-menu.el,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -r1.5 -r1.5.2.1
--- gtk-font-menu.el 2004/09/22 02:05:50 1.5
+++ gtk-font-menu.el 2005/03/15 05:20:48 1.5.2.1
@@ -90,7 +90,7 @@
or if you change your font path, you can call this to re-initialize the menus."
;; by Stig(a)hackvan.com
;; #### - this should implement a `menus-only' option, which would
- ;; recalculate the menus from the cache w/o having to do list-fonts again.
+ ;; recalculate the menus from the cache w/o having to do font-list again.
(unless gtk-font-regexp-ascii
(setq gtk-font-regexp-ascii (if (featurep 'mule)
(declare-fboundp
@@ -102,7 +102,7 @@
family size weight entry monospaced-p
dev-cache cache families sizes weights)
(dolist (name (cond ((null debug) ; debugging kludge
- (list-fonts "*-*-*-*-*-*-*-*-*-*-*-*-*-*" device))
+ (font-list "*-*-*-*-*-*-*-*-*-*-*-*-*-*" device))
((stringp debug) (split-string debug "\n"))
(t debug)))
(when (and (string-match gtk-font-regexp-ascii name)
1.6.2.1 +1 -30 XEmacs/xemacs/lisp/gtk-marshal.el
Index: gtk-marshal.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/gtk-marshal.el,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -u -r1.6 -r1.6.2.1
--- gtk-marshal.el 2004/05/02 04:06:52 1.6
+++ gtk-marshal.el 2005/03/15 05:20:48 1.6.2.1
@@ -261,35 +261,6 @@
(insert "\n
#include \"hash.h\"
-static int
-our_string_eq (const void *st1, const void *st2)
-{
- if (!st1)
- return st2 ? 0 : 1;
- else if (!st2)
- return 0;
- else
- return !strcmp ( (const char *) st1, (const char *) st2);
-}
-
-static unsigned long
-our_string_hash (const void *xv)
-{
- unsigned int h = 0;
- unsigned const char *x = (unsigned const char *) xv;
-
- if (!x) return 0;
-
- while (*x)
- {
- unsigned int g;
- h = (h << 4) + *x++;
- if ((g = h & 0xf0000000) != 0)
- h = (h ^ (g >> 24)) ^ g;
- }
-
- return h;
-}
static struct hash_table *marshaller_hashtable;
@@ -297,7 +268,7 @@
{
if (!marshaller_hashtable)
{
- marshaller_hashtable = make_general_hash_table (100, our_string_hash,
our_string_eq);
+ marshaller_hashtable = make_string_hash_table (100);
")
(mapc (lambda (x)
1.43.2.1 +8 -8 XEmacs/xemacs/lisp/help.el
Index: help.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/help.el,v
retrieving revision 1.43
retrieving revision 1.43.2.1
diff -u -r1.43 -r1.43.2.1
--- help.el 2004/09/15 08:30:26 1.43
+++ help.el 2005/03/15 05:20:48 1.43.2.1
@@ -1,7 +1,7 @@
;;; help.el --- help commands for XEmacs.
;; Copyright (C) 1985, 1986, 1992-4, 1997 Free Software Foundation, Inc.
-;; Copyright (C) 2001, 2002 Ben Wing.
+;; Copyright (C) 2001, 2002, 2003 Ben Wing.
;; Maintainer: FSF
;; Keywords: help, internal, dumped
@@ -696,12 +696,17 @@
(defun describe-distribution ()
"Display info on how to obtain the latest version of XEmacs."
(interactive)
- (Help-find-file (locate-data-file "DISTRIB")))
+ (save-window-excursion
+ (info)
+ (Info-find-node "xemacs-faq" "Q1.1.1"))
+ (switch-to-buffer "*info*"))
(defun describe-beta ()
"Display info on how to deal with Beta versions of XEmacs."
(interactive)
- (Help-find-file (locate-data-file "BETA")))
+ (save-window-excursion
+ (info "(beta)Top"))
+ (switch-to-buffer "*info*"))
(defun describe-copying ()
"Display info on how you may redistribute copies of XEmacs."
@@ -712,11 +717,6 @@
"Show a list of all defined mouse buttons, and their definitions."
(interactive)
(describe-bindings nil t))
-
-(defun describe-project ()
- "Display info on the GNU project."
- (interactive)
- (Help-find-file (locate-data-file "GNU")))
(defun describe-no-warranty ()
"Display info on all the kinds of warranty XEmacs does NOT have."
1.30.2.1 +1 -1 XEmacs/xemacs/lisp/loadup.el
Index: loadup.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/loadup.el,v
retrieving revision 1.30
retrieving revision 1.30.2.1
diff -u -r1.30 -r1.30.2.1
--- loadup.el 2004/11/04 23:05:55 1.30
+++ loadup.el 2005/03/15 05:20:48 1.30.2.1
@@ -139,7 +139,7 @@
(external-debugging-output (format "\nLoad file %s: not found\n"
file))
;; Uncomment in case of trouble
- ;;(print (format "late-packages: %S" late-packages))
+ ;;(print (format "late-package-hierarchies: %S"
late-package-hierarchies))
;;(print (format "guessed-roots: %S" (paths-find-emacs-roots
invocation-directory invocation-name #'paths-emacs-root-p)))
;;(print (format "guessed-data-roots: %S" (paths-find-emacs-roots
invocation-directory invocation-name #'paths-emacs-data-root-p)))
nil)))
1.27.2.1 +1 -1 XEmacs/xemacs/lisp/make-docfile.el
Index: make-docfile.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/make-docfile.el,v
retrieving revision 1.27
retrieving revision 1.27.2.1
diff -u -r1.27 -r1.27.2.1
--- make-docfile.el 2003/03/02 09:38:39 1.27
+++ make-docfile.el 2005/03/15 05:20:49 1.27.2.1
@@ -170,7 +170,7 @@
(progn
(message "Error: dumped file %s does not exist" arg0)
;; Uncomment in case of difficulties
- ;;(message "late-packages: %S" late-packages)
+ ;;(message "late-package-hierarchies: %S" late-package-hierarchies)
;;(message "guessed-roots: %S" (paths-find-emacs-roots
invocation-directory invocation-name #'paths-emacs-root-p))
;;(message "guessed-data-roots: %S" (paths-find-emacs-roots
invocation-directory invocation-name #'paths-emacs-data-root-p))
)
1.3.20.1 +3 -2 XEmacs/xemacs/lisp/map-ynp.el
Index: map-ynp.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/map-ynp.el,v
retrieving revision 1.3
retrieving revision 1.3.20.1
diff -u -r1.3 -r1.3.20.1
--- map-ynp.el 2001/04/12 18:21:30 1.3
+++ map-ynp.el 2005/03/15 05:20:49 1.3.20.1
@@ -231,8 +231,9 @@
(lambda (elt)
(format "%c to %s"
(nth 0 elt)
- (normalize-menu-item-name
- (nth 2 elt)))))
+ (downcase
+ (normalize-menu-text
+ (nth 2 elt))))))
action-alist
";\n")
(if action-alist ";\n")
1.43.2.2 +56 -224 XEmacs/xemacs/lisp/menubar-items.el
Index: menubar-items.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/menubar-items.el,v
retrieving revision 1.43.2.1
retrieving revision 1.43.2.2
diff -u -r1.43.2.1 -r1.43.2.2
--- menubar-items.el 2004/12/11 05:13:22 1.43.2.1
+++ menubar-items.el 2005/03/15 05:20:49 1.43.2.2
@@ -67,148 +67,6 @@
list
(butlast list (- (length list) count)))))
-(defun submenu-generate-accelerator-spec (list &optional omit-chars-list)
- "Add auto-generated accelerator specifications to a submenu.
-This can be used to add accelerators to the return value of a menu filter
-function. It correctly ignores unselectable items. It will destructively
-modify the list passed to it. If an item already has an auto-generated
-accelerator spec, this will be removed before the new one is added, making
-this function idempotent.
-
-If OMIT-CHARS-LIST is given, it should be a list of lowercase characters,
-which will not be used as accelerators."
- (let ((n 0))
- (dolist (item list list)
- (cond
- ((vectorp item)
- (setq n (1+ n))
- (aset item 0
- (concat
- (menu-item-generate-accelerator-spec n omit-chars-list)
- (menu-item-strip-accelerator-spec (aref item 0)))))
- ((consp item)
- (setq n (1+ n))
- (setcar item
- (concat
- (menu-item-generate-accelerator-spec n omit-chars-list)
- (menu-item-strip-accelerator-spec (car item)))))))))
-
-(defun menu-item-strip-accelerator-spec (item)
- "Strip an auto-generated accelerator spec off of ITEM.
-ITEM should be a string. This removes specs added by
-`menu-item-generate-accelerator-spec' and
`submenu-generate-accelerator-spec'."
- (if (string-match "%_. " item)
- (substring item 4)
- item))
-
-(defun menu-item-generate-accelerator-spec (n &optional omit-chars-list)
- "Return an accelerator specification for use with auto-generated menus.
-This should be concat'd onto the beginning of each menu line. The spec
-allows the Nth line to be selected by the number N. '0' is used for the
-10th line, and 'a' through 'z' are used for the following 26 lines.
-
-If OMIT-CHARS-LIST is given, it should be a list of lowercase characters,
-which will not be used as accelerators."
- (cond ((< n 10) (concat "%_" (int-to-string n) " "))
- ((= n 10) "%_0 ")
- ((<= n 36)
- (setq n (- n 10))
- (let ((m 0))
- (while (> n 0)
- (setq m (1+ m))
- (while (memq (int-to-char (+ m (- (char-to-int ?a) 1)))
- omit-chars-list)
- (setq m (1+ m)))
- (setq n (1- n)))
- (if (<= m 26)
- (concat
- "%_"
- (char-to-string (int-to-char (+ m (- (char-to-int ?a) 1))))
- " ")
- "")))
- (t "")))
-
-(defcustom menu-max-items 25
- "*Maximum number of items in generated menus.
-If number of entries in such a menu is larger than this value, split menu
-into submenus of nearly equal length (see `menu-submenu-max-items'). If
-nil, never split menu into submenus."
- :group 'menu
- :type '(choice (const :tag "no submenus" nil)
- (integer)))
-
-(defcustom menu-submenu-max-items 20
- "*Maximum number of items in submenus when splitting menus.
-We split large menus into submenus of this many items, and then balance
-them out as much as possible (otherwise the last submenu may have very few
-items)."
- :group 'menu
- :type 'integer)
-
-(defcustom menu-submenu-name-format "%-12.12s ... %.12s"
- "*Format specification of the submenu name when splitting menus.
-Used by `menu-split-long-menu' if the number of entries in a menu is
-larger than `menu-menu-max-items'.
-This string should contain one %s for the name of the first entry and
-one %s for the name of the last entry in the submenu.
-If the value is a function, it should return the submenu name. The
-function is be called with two arguments, the names of the first and
-the last entry in the menu."
- :group 'menu
- :type '(choice (string :tag "Format string")
- (function)))
-
-(defun menu-split-long-menu (menu)
- "Split MENU according to `menu-max-items' and add accelerator specs.
-
-You should normally use the idiom
-
-\(menu-split-long-menu (menu-sort-menu menu))
-
-See also `menu-sort-menu'."
- (let ((len (length menu)))
- (if (or (null menu-max-items)
- (<= len menu-max-items))
- (submenu-generate-accelerator-spec menu)
- (let* ((outer (/ (+ len (1- menu-submenu-max-items))
- menu-submenu-max-items))
- (inner (/ (+ len (1- outer)) outer))
- (result nil))
- (while menu
- (let ((sub nil)
- (from (car menu)))
- (dotimes (foo (min inner len))
- (setq sub (cons (car menu) sub)
- menu (cdr menu)))
- (setq len (- len inner))
- (let ((to (car sub)))
- (setq sub (nreverse sub))
- (setq result
- (cons (cons (if (stringp menu-submenu-name-format)
- (format menu-submenu-name-format
- (menu-item-strip-accelerator-spec
- (aref from 0))
- (menu-item-strip-accelerator-spec
- (aref to 0)))
- (funcall menu-submenu-name-format
- (menu-item-strip-accelerator-spec
- (aref from 0))
- (menu-item-strip-accelerator-spec
- (aref to 0))))
- (submenu-generate-accelerator-spec sub))
- result)))))
- (submenu-generate-accelerator-spec (nreverse result))))))
-
-(defun menu-sort-menu (menu)
- "Sort MENU alphabetically.
-
-You should normally use the idiom
-
-\(menu-split-long-menu (menu-sort-menu menu))
-
-See also `menu-split-long-menu'."
- (sort menu
- #'(lambda (a b) (string-lessp (aref a 0) (aref b 0)))))
(defun coding-system-menu-filter (fun active &optional dots)
"Filter for menu entries with a submenu listing all coding systems.
@@ -225,21 +83,20 @@
(lambda (entry) ...)
(lambda (entry) ...))
"
- (menu-split-long-menu
- (menu-sort-menu
- (mapcar
- #'(lambda (_csmf_entry)
- `[ ,(concat (coding-system-description _csmf_entry)
- (if dots "..." ""))
- (funcall ,fun ',_csmf_entry)
- :active (funcall ,active ',_csmf_entry)
- ])
- (delete-if
- #'(lambda (name)
- (or (coding-system-alias-p name)
- (not (eq name (coding-system-name
- (coding-system-base name))))))
- (coding-system-list))))))
+ (menu-split-long-menu-and-sort
+ (mapcar
+ #'(lambda (_csmf_entry)
+ `[ ,(concat (coding-system-description _csmf_entry)
+ (if dots "..." ""))
+ (funcall ,fun ',_csmf_entry)
+ :active (funcall ,active ',_csmf_entry)
+ ])
+ (delete-if
+ #'(lambda (name)
+ (or (coding-system-alias-p name)
+ (not (eq name (coding-system-name
+ (coding-system-base name))))))
+ (coding-system-list)))))
(defconst default-menubar
; (purecopy-menubar ;purespace is dead
@@ -422,7 +279,6 @@
)
)
-
("C%_mds"
["Repeat Last Comple%_x Command..." repeat-complex-command]
["E%_valuate Lisp Expression..." eval-expression]
@@ -554,17 +410,27 @@
["Tab to Tab %_Stop" tab-to-tab-stop]
["Edit Ta%_b Stops" edit-tab-stops]
)
- "---"
- ("Spell-Chec%_k"
- ["%_Buffer" ispell-buffer
- :active (fboundp 'ispell-buffer)]
- "---"
- ["%_Word" ispell-word]
- ["%_Complete Word" ispell-complete-word]
- ["%_Region" ispell-region]
+ "---"
+ ("%_Tags"
+ ["%_Find Tag..." find-tag]
+ ["Find %_Other Window..." find-tag-other-window]
+ ["%_Next Tag..." (find-tag nil)]
+ ["N%_ext Other Window..." (find-tag-other-window nil)]
+ ["Next %_File" next-file]
+ "-----"
+ ["Tags %_Search..." tags-search]
+ ["Tags %_Replace..." tags-query-replace]
+ ["%_Continue Search/Replace" tags-loop-continue]
+ "-----"
+ ["%_Pop stack" pop-tag-mark]
+ ["%_Apropos..." tags-apropos]
+ "-----"
+ ["%_Set Tags Table File..." visit-tags-table]
)
)
-
+
+ ;; #### Delete this entire menu as soon as the new package source is
+ ;; committed.
("%_Tools"
("%_Packages"
("%_Set Download Site"
@@ -816,24 +682,10 @@
"----"
)
- ("%_Options"
- ("%_Behaviors"
- :filter
- (lambda (menu)
- (menu-split-long-menu
- (menu-sort-menu
- (loop for behavior being the hash-keys in behavior-hash-table
- using (hash-value plist)
- collect (vector (format "%s (%s)" behavior
- (getf plist :short-doc))
- `(if (memq ',behavior enabled-behavior-list)
- (disable-behavior ',behavior)
- (enable-behavior ',behavior))
- :style 'toggle
- :selected `(memq ',behavior
- enabled-behavior-list))
- )))))
+; ("%_Tools"
+; :filter behavior-menu-filter)
+ ("%_Options"
("%_Advanced (Customize)"
("%_Emacs" :filter (lambda (&rest junk)
(cdr (custom-menu-create 'emacs))))
@@ -1142,17 +994,16 @@
("Set %_Language Environment"
:filter
(lambda (menu)
- (menu-split-long-menu
- (menu-sort-menu
- (mapcar #'(lambda (entry)
- `[ ,(car entry)
- (set-language-environment ',(car entry))
- :style radio
- :selected
- ,(equal (car entry)
- current-language-environment)])
- language-info-alist)
- ))))
+ (menu-split-long-menu-and-sort
+ (mapcar #'(lambda (entry)
+ `[ ,(car entry)
+ (set-language-environment ',(car entry))
+ :style radio
+ :selected
+ ,(equal (car entry)
+ current-language-environment)])
+ language-info-alist)
+ )))
["%_Toggle Input Method" toggle-input-method]
["Select %_Input Method" set-input-method]
)))
@@ -1619,6 +1470,8 @@
["%_Home Page (
www.xemacs.org)" xemacs-www-page
:active (fboundp 'browse-url)]
["What's %_New in XEmacs" view-emacs-news]
+ ["B%_eta Info" describe-beta
+ :included (string-match "beta" emacs-version)]
"-----"
("%_Info (Online Docs)"
["%_Info Contents" (Info-goto-node "(dir)")]
@@ -1679,18 +1532,17 @@
("Describe %_Language Support"
:filter
(lambda (menu)
- (menu-split-long-menu
- (menu-sort-menu
- (mapcar #'(lambda (entry)
- `[ ,(car entry)
- (describe-language-environment
- ',(car entry))
+ (menu-split-long-menu-and-sort
+ (mapcar #'(lambda (entry)
+ `[ ,(car entry)
+ (describe-language-environment
+ ',(car entry))
:style radio
:selected
,(equal (car entry)
current-language-environment)])
- language-info-alist)
- ))))
+ language-info-alist)
+ )))
["Describe %_Input Method" describe-input-method]
["Describe Current %_Coding Systems"
describe-current-coding-system]
@@ -1702,6 +1554,7 @@
("%_Other"
["%_Current Installation Info" describe-installation
:active (boundp 'Installation-string)]
+ ["%_Obtaining the Latest Version" describe-distribution]
["%_No Warranty" describe-no-warranty]
["XEmacs %_License" describe-copying]
["Find %_Packages" finder-by-keyword]
@@ -2105,27 +1958,6 @@
;; In an effort to avoid massive menu clutter, this mostly worthless menu is
;; superseded by any local popup menu...
(setq-default mode-popup-menu default-popup-menu)
-
-
-;; misc
-
-(defun xemacs-splash-buffer ()
- "Redisplay XEmacs splash screen in a buffer."
- (interactive)
- (let ((buffer (get-buffer-create "*Splash*"))
- tmout)
- (set-buffer buffer)
- (setq buffer-read-only t)
- (erase-buffer buffer)
- (setq tmout (display-splash-frame))
- (when tmout
- (make-local-hook 'kill-buffer-hook)
- (add-hook 'kill-buffer-hook
- `(lambda ()
- (disable-timeout ,tmout))
- nil t))
- (pop-to-buffer buffer)
- (delete-other-windows)))
;;; backwards compatibility
1.10.8.1 +165 -16 XEmacs/xemacs/lisp/menubar.el
Index: menubar.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/menubar.el,v
retrieving revision 1.10
retrieving revision 1.10.8.1
diff -u -r1.10 -r1.10.8.1
--- menubar.el 2001/12/20 05:49:31 1.10
+++ menubar.el 2005/03/15 05:20:50 1.10.8.1
@@ -2,7 +2,7 @@
;; Copyright (C) 1991-4, 1997-1998 Free Software Foundation, Inc.
;; Copyright (C) 1995 Tinker Systems and INS Engineering Corp.
-;; Copyright (C) 1995, 1996 Ben Wing.
+;; Copyright (C) 1995, 1996, 2003 Ben Wing.
;; Maintainer: XEmacs Development Team
;; Keywords: internal, extensions, dumped
@@ -163,17 +163,27 @@
(setq menu (cdr menu)))))
-;;; menu manipulation functions
+;;; basic menu manipulation functions
-(defun find-menu-item (menubar item-path-list &optional parent)
- "Search MENUBAR for item given by ITEM-PATH-LIST starting from PARENT.
+(defun menu-item-text (item &optional normalize)
+ "Return the text that is displayed for a menu item.
+If ITEM is a string (unselectable text), it is returned; otherwise,
+the first element of the cons or vector is returned.
+If NORMALIZE is non-nil, pass the text through `normalize-menu-text'
+before being returned, to remove accelerator specs and convert %% to %."
+ (let ((val (if (stringp item) item (elt item 0))))
+ (if normalize (normalize-menu-text val) val)))
+
+(defun find-menu-item (menubar item-path-list)
+ "Search MENUBAR for item given by ITEM-PATH-LIST.
Returns (ITEM . PARENT), where PARENT is the immediate parent of
the item found.
If the item does not exist, the car of the returned value is nil.
If some menu in the ITEM-PATH-LIST does not exist, an error is signalled."
+ (find-menu-item-1 menubar item-path-list))
+
+(defun find-menu-item-1 (menubar item-path-list &optional parent)
(check-argument-type 'listp item-path-list)
- (unless parent
- (setq item-path-list (mapcar 'normalize-menu-item-name item-path-list)))
(if (not (consp menubar))
nil
(let ((rest menubar)
@@ -184,20 +194,15 @@
(setq rest (cddr rest)))
(while rest
(if (and (car rest)
- (equal (car item-path-list)
- (normalize-menu-item-name
- (cond ((vectorp (car rest))
- (aref (car rest) 0))
- ((stringp (car rest))
- (car rest))
- (t
- (caar rest))))))
+ (stringp (car item-path-list))
+ (= 0 (compare-menu-text (car item-path-list)
+ (menu-item-text (car rest)))))
(setq result (car rest)
rest nil)
(setq rest (cdr rest))))
(if (cdr item-path-list)
(cond ((consp result)
- (find-menu-item (cdr result) (cdr item-path-list) result))
+ (find-menu-item-1 (cdr result) (cdr item-path-list) result))
(result
(signal 'error (list (gettext "not a submenu") result)))
(t
@@ -208,7 +213,6 @@
(defun add-menu-item-1 (leaf-p menu-path new-item before in-menu)
;; This code looks like it could be cleaned up some more
;; Do we really need 6 calls to find-menu-item?
- (when before (setq before (normalize-menu-item-name before)))
(let* ((item-name
(cond ((vectorp new-item) (aref new-item 0))
((consp new-item) (car new-item))
@@ -463,6 +467,151 @@
menu item called \"Item\" under the \"Foo\" submenu of
\"Menu\"."
(enable-menu-item-1 path t nil))
+
+;;; functions for manipulating whole menus -- adding accelerators, sorting,
+;;; splitting long menus, etc.
+
+(defun submenu-generate-accelerator-spec (list &optional omit-chars-list)
+ "Add auto-generated accelerator specifications to a submenu.
+This can be used to add accelerators to the return value of a menu filter
+function. It correctly ignores unselectable items. It will destructively
+modify the list passed to it. If an item already has an auto-generated
+accelerator spec, this will be removed before the new one is added, making
+this function idempotent.
+
+If OMIT-CHARS-LIST is given, it should be a list of lowercase characters,
+which will not be used as accelerators."
+ (let ((n 0))
+ (dolist (item list list)
+ (cond
+ ((or (vectorp item) (consp item))
+ (incf n)
+ (setf (elt item 0)
+ (concat
+ (menu-item-generate-accelerator-spec n omit-chars-list)
+ (menu-item-strip-accelerator-spec (elt item 0)))))))))
+
+(defun menu-item-strip-accelerator-spec (item)
+ "Strip an auto-generated accelerator spec off of ITEM.
+ITEM should be a string. This removes specs added by
+`menu-item-generate-accelerator-spec' and
`submenu-generate-accelerator-spec'."
+ (if (string-match "%_. " item)
+ (substring item 4)
+ item))
+
+(defun menu-item-generate-accelerator-spec (n &optional omit-chars-list)
+ "Return an accelerator specification for use with auto-generated menus.
+This should be concat'd onto the beginning of each menu line. The spec
+allows the Nth line to be selected by the number N. '0' is used for the
+10th line, and 'a' through 'z' are used for the following 26 lines.
+
+If OMIT-CHARS-LIST is given, it should be a list of lowercase characters,
+which will not be used as accelerators."
+ (cond ((< n 10) (concat "%_" (int-to-string n) " "))
+ ((= n 10) "%_0 ")
+ ((<= n 36)
+ (setq n (- n 10))
+ (let ((m 0))
+ (while (> n 0)
+ (setq m (1+ m))
+ (while (memq (int-to-char (+ m (- (char-to-int ?a) 1)))
+ omit-chars-list)
+ (setq m (1+ m)))
+ (setq n (1- n)))
+ (if (<= m 26)
+ (concat
+ "%_"
+ (char-to-string (int-to-char (+ m (- (char-to-int ?a) 1))))
+ " ")
+ "")))
+ (t "")))
+
+(defcustom menu-max-items 25
+ "*Maximum number of items in generated menus.
+If number of entries in such a menu is larger than this value, split menu
+into submenus of nearly equal length (see `menu-submenu-max-items'). If
+nil, never split menu into submenus."
+ :group 'menu
+ :type '(choice (const :tag "no submenus" nil)
+ (integer)))
+
+(defcustom menu-submenu-max-items 20
+ "*Maximum number of items in submenus when splitting menus.
+We split large menus into submenus of this many items, and then balance
+them out as much as possible (otherwise the last submenu may have very few
+items)."
+ :group 'menu
+ :type 'integer)
+
+(defcustom menu-submenu-name-format "%-12.12s ... %.12s"
+ "*Format specification of the submenu name when splitting menus.
+Used by `menu-split-long-menu' if the number of entries in a menu is
+larger than `menu-menu-max-items'.
+This string should contain one %s for the name of the first entry and
+one %s for the name of the last entry in the submenu.
+If the value is a function, it should return the submenu name. The
+function is be called with two arguments, the names of the first and
+the last entry in the menu."
+ :group 'menu
+ :type '(choice (string :tag "Format string")
+ (function)))
+
+(defun menu-split-long-menu-and-sort (menu)
+ "Sort MENU, split according to `menu-max-items' and add accelerator specs.
+This is useful for menus generated by filter functions, to make them look
+nice. This is equivalent to
+
+\(menu-split-long-menu (menu-sort-menu menu))
+
+and you can call those functions individually if necessary.
+You can also call `submenu-generate-accelerator-spec' yourself to add
+accelerator specs -- this works even if the specs have already been added."
+ (menu-split-long-menu (menu-sort-menu menu)))
+
+(defun menu-split-long-menu (menu)
+ "Split MENU according to `menu-max-items' and add accelerator specs.
+If MENU already has accelerator specs, they will be removed and new ones
+generated. You should normally use `menu-split-long-menu-and-sort' instead.
+The menu should already be sorted to get meaningful results when it is
+split, since the outer menus are of the format `FROM ... TO'."
+ (let ((len (length menu)))
+ (if (or (null menu-max-items)
+ (<= len menu-max-items))
+ (submenu-generate-accelerator-spec menu)
+ (let* ((outer (/ (+ len (1- menu-submenu-max-items))
+ menu-submenu-max-items))
+ (inner (/ (+ len (1- outer)) outer))
+ (result nil))
+ (while menu
+ (let ((sub nil)
+ (from (car menu)))
+ (dotimes (foo (min inner len))
+ (setq sub (cons (car menu) sub)
+ menu (cdr menu)))
+ (setq len (- len inner))
+ (let* ((to (car sub))
+ (ftext (menu-item-strip-accelerator-spec
+ (menu-item-text from)))
+ (ttext (menu-item-strip-accelerator-spec
+ (menu-item-text to))))
+ (setq sub (nreverse sub))
+ (setq result
+ (cons (cons (if (stringp menu-submenu-name-format)
+ (format menu-submenu-name-format
+ ftext ttext)
+ (funcall menu-submenu-name-format
+ ftext ttext))
+ (submenu-generate-accelerator-spec sub))
+ result)))))
+ (submenu-generate-accelerator-spec (nreverse result))))))
+
+(defun menu-sort-menu (menu)
+ "Sort MENU alphabetically.
+You should normally use `menu-split-long-menu-and-sort' instead."
+ (sort menu
+ #'(lambda (a b) (< (compare-menu-text
+ (menu-item-text a) (menu-item-text b))
+ 0))))
;;;;;;; popup menus
1.26.2.1 +2 -70 XEmacs/xemacs/lisp/minibuf.el
Index: minibuf.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/minibuf.el,v
retrieving revision 1.26
retrieving revision 1.26.2.1
diff -u -r1.26 -r1.26.2.1
--- minibuf.el 2004/04/17 09:59:24 1.26
+++ minibuf.el 2005/03/15 05:20:50 1.26.2.1
@@ -271,8 +271,7 @@
If `zmacs-regions' is true, and the zmacs region is active in this buffer,
then this key deactivates the region without beeping."
(interactive)
- (if (and (region-active-p)
- (eq (current-buffer) (zmacs-region-buffer)))
+ (if (region-active-p)
;; pseudo-zmacs compatibility: don't beep if this ^G is simply
;; deactivating the region. If it is inactive, beep.
nil
@@ -2181,75 +2180,8 @@
"Read the name of a face from the minibuffer and return it as a symbol."
(intern (completing-read prompt obarray 'find-face must-match)))
-;; #### - wrong place for this variable? Exactly. We probably want
-;; `color-list' to be a console method, so `tty-color-list' becomes
-;; obsolete, and `read-color-completion-table' conses (mapcar #'list
-;; (color-list)), optionally caching the results.
-
-;; Ben wanted all of the possibilities from the `configure' script used
-;; here, but I think this is way too many. I already trimmed the R4 variants
-;; and a few obvious losers from the list. --Stig
-(defvar x-library-search-path '("/usr/X11R6/lib/X11/"
- "/usr/X11R5/lib/X11/"
- "/usr/lib/X11R6/X11/"
- "/usr/lib/X11R5/X11/"
- "/usr/local/X11R6/lib/X11/"
- "/usr/local/X11R5/lib/X11/"
- "/usr/local/lib/X11R6/X11/"
- "/usr/local/lib/X11R5/X11/"
- "/usr/X11/lib/X11/"
- "/usr/lib/X11/"
- "/usr/local/lib/X11/"
- "/usr/X386/lib/X11/"
- "/usr/x386/lib/X11/"
- "/usr/XFree86/lib/X11/"
- "/usr/unsupported/lib/X11/"
- "/usr/athena/lib/X11/"
- "/usr/local/x11r5/lib/X11/"
- "/usr/lpp/Xamples/lib/X11/"
- "/usr/openwin/lib/X11/"
- "/usr/openwin/share/lib/X11/")
- "Search path used by `read-color' to find rgb.txt.")
-
-(defvar x-read-color-completion-table)
-
(defun read-color-completion-table ()
- (case (device-type)
- ;; #### Evil device-type dependency
- ((x gtk)
- (if (boundp 'x-read-color-completion-table)
- x-read-color-completion-table
- (let ((rgb-file (locate-file "rgb.txt" x-library-search-path))
- clist color p)
- (if (not rgb-file)
- ;; prevents multiple searches for rgb.txt if we can't find it
- (setq x-read-color-completion-table nil)
- (with-current-buffer (get-buffer-create " *colors*")
- (reset-buffer (current-buffer))
- (insert-file-contents rgb-file)
- (while (not (eobp))
- ;; skip over comments
- (while (looking-at "^!")
- (end-of-line)
- (forward-char 1))
- (skip-chars-forward "0-9 \t")
- (setq p (point))
- (end-of-line)
- (setq color (buffer-substring p (point))
- clist (cons (list color) clist))
- ;; Ugh. If we want to be able to complete the lowercase form
- ;; of the color name, we need to add it twice! Yuck.
- (let ((dcase (downcase color)))
- (or (string= dcase color)
- (push (list dcase) clist)))
- (forward-char 1))
- (kill-buffer (current-buffer))))
- (setq x-read-color-completion-table clist)
- x-read-color-completion-table)))
- (mswindows
- (mapcar #'list (declare-fboundp (mswindows-color-list))))
- (tty
- (mapcar #'list (declare-fboundp (tty-color-list))))))
+ (mapcar #'list (color-list)))
(defun read-color (prompt &optional must-match initial-contents)
"Read the name of a color from the minibuffer.
1.30.8.1 +97 -54 XEmacs/xemacs/lisp/mouse.el
Index: mouse.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/mouse.el,v
retrieving revision 1.30
retrieving revision 1.30.8.1
diff -u -r1.30 -r1.30.8.1
--- mouse.el 2002/03/29 04:46:33 1.30
+++ mouse.el 2005/03/15 05:20:51 1.30.8.1
@@ -2,7 +2,7 @@
;; Copyright (C) 1988, 1992-4, 1997 Free Software Foundation, Inc.
;; Copyright (C) 1995 Tinker Systems
-;; Copyright (C) 1995, 1996, 2000, 2002 Ben Wing.
+;; Copyright (C) 1995, 1996, 2000, 2002, 2004, 2005 Ben Wing.
;; Maintainer: XEmacs Development Team
;; Keywords: mouse, dumped
@@ -507,12 +507,53 @@
:type '(choice integer (const :tag "Disabled" nil))
:group 'mouse)
-(defcustom mouse-track-activate-strokes '(button1-double-click button2-click)
- "List of mouse strokes that can cause \"activation\" of the text
extent
-under the mouse. The exact meaning of \"activation\" is dependent on the
-text clicked on and the mode of the buffer, but typically entails actions
-such as following a hyperlink or selecting an entry in a completion buffer.
+(defcustom mouse-track-activate-strokes '(button1-click button1-double-click
+ button2-click)
+ "Mouse strokes causing \"activation\" of the text extent under the
mouse.
+The exact meaning of \"activation\" is dependent on the text clicked on and
+the mode of the buffer, but typically entails actions such as following a
+hyperlink or selecting an entry in a completion buffer.
+See also `mouse-track-conservative-activate-strokes'.
+
+Possible list entries are
+
+button1-click
+button1-double-click
+button1-triple-click
+button1-down
+button2-click
+button2-double-click
+button2-triple-click
+button2-down
+
+As a general rule, you should not use the \"-down\" values, because this
+makes it impossible to have other simultaneous actions, such as selection."
+ :type '(set
+ button1-click
+ button1-double-click
+ button1-triple-click
+ button1-down
+ button2-click
+ button2-double-click
+ button2-triple-click
+ button2-down)
+ :group 'mouse)
+
+(defcustom mouse-track-conservative-activate-strokes
+ '(button1-double-click button2-click)
+ "Mouse strokes causing \"conservative activation\" of text extent
under mouse.
+The exact meaning of \"activation\" is dependent on the text clicked on and
+the mode of the buffer, but typically entails actions such as following a
+hyperlink or selecting an entry in a completion buffer.
+
+\"Conservative activation\" differs from regular activation in that it is
+not meant to be triggered by a button1 click, and thus is suitable for larger
+regions of text where the user might want to position the cursor inside of
+the region.
+
+See also `mouse-track-activate-strokes'.
+
Possible list entries are
button1-click
@@ -573,15 +614,6 @@
'mouse-track-scroll-undefined
(copy-event event)))))
-(defun mouse-track-do-activate (event)
- "Execute the activate function under EVENT, if any.
-Return true if the function was activated."
- (let ((ex (extent-at-event event 'activate-function)))
- (when ex
- (funcall (extent-property ex 'activate-function)
- event ex)
- t)))
-
(defvar Mouse-track-gensym (gensym))
(defun mouse-track-run-hook (hook override event &rest args)
@@ -1210,16 +1242,61 @@
(4 . button4) (5 . button5))))
(event-modifiers event)))))
+;; return t if an activation function was called. This checks to see
+;; if the appropriate stroke for the click count and the button that
+;; was pressed is present in `mouse-track-activate-strokes'; if so, it
+;; looks for an extent under the mouse with an `activate-function'
+;; property, calls it and returns t. Else, it repeats the whole
+;; process with `mouse-track-conservative-activate-strokes' and
+;; `conservative-activate-function'.
+(defun default-mouse-track-check-for-activation (event click-count
+ count-list button-list)
+ (flet ((do-activate (event property)
+ (let ((ex (extent-at-event event property)))
+ (when ex
+ (funcall (extent-property ex property) event ex)
+ t))))
+ (or
+ (and (some #'(lambda (count button)
+ (and (= click-count count)
+ (memq button
+ mouse-track-activate-strokes)))
+ count-list button-list)
+ (do-activate event 'activate-function))
+ (and (some #'(lambda (count button)
+ (and (= click-count count)
+ (memq button
+ mouse-track-conservative-activate-strokes)))
+ count-list button-list)
+ (do-activate event 'conservative-activate-function)))))
+
(defun default-mouse-track-down-hook (event click-count)
(cond ((default-mouse-track-event-is-with-button event 1)
- (if (and (memq 'button1-down mouse-track-activate-strokes)
- (mouse-track-do-activate event))
+ (if (default-mouse-track-check-for-activation
+ event 1 '(1) '(button1-down))
t
(setq default-mouse-track-down-event (copy-event event))
nil))
+ ((default-mouse-track-event-is-with-button event 2)
+ (default-mouse-track-check-for-activation
+ event 1 '(1) '(button2-down)))))
+
+(defun default-mouse-track-click-hook (event click-count)
+ (cond ((default-mouse-track-event-is-with-button event 1)
+ (if (default-mouse-track-check-for-activation
+ event click-count '(1 2 3) '(button1-click button1-double-click
+ button1-triple-click))
+ t
+ (default-mouse-track-drag-hook event click-count nil)
+ (default-mouse-track-drag-up-hook event click-count)
+ t))
((default-mouse-track-event-is-with-button event 2)
- (and (memq 'button2-down mouse-track-activate-strokes)
- (mouse-track-do-activate event)))))
+ (if (default-mouse-track-check-for-activation
+ event click-count '(1 2 3) '(button2-click button2-double-click
+ button2-triple-click))
+ t
+ (mouse-yank event)
+ t))))
(defun default-mouse-track-cleanup-extents-hook ()
(remove-hook 'pre-command-hook 'default-mouse-track-cleanup-extents-hook)
@@ -1329,44 +1406,10 @@
(default-mouse-track-maybe-own-selection result 'PRIMARY)))
t))
-(defun default-mouse-track-click-hook (event click-count)
- (cond ((default-mouse-track-event-is-with-button event 1)
- (if (and
- (or (and (= click-count 1)
- (memq 'button1-click
- mouse-track-activate-strokes))
- (and (= click-count 2)
- (memq 'button1-double-click
- mouse-track-activate-strokes))
- (and (= click-count 3)
- (memq 'button1-triple-click
- mouse-track-activate-strokes)))
- (mouse-track-do-activate event))
- t
- (default-mouse-track-drag-hook event click-count nil)
- (default-mouse-track-drag-up-hook event click-count)
- t))
- ((default-mouse-track-event-is-with-button event 2)
- (if (and
- (or (and (= click-count 1)
- (memq 'button2-click
- mouse-track-activate-strokes))
- (and (= click-count 2)
- (memq 'button2-double-click
- mouse-track-activate-strokes))
- (and (= click-count 3)
- (memq 'button2-triple-click
- mouse-track-activate-strokes)))
- (mouse-track-do-activate event))
- t
- (mouse-yank event)
- t))))
-
-
(add-hook 'mouse-track-down-hook 'default-mouse-track-down-hook)
+(add-hook 'mouse-track-click-hook 'default-mouse-track-click-hook)
(add-hook 'mouse-track-drag-hook 'default-mouse-track-drag-hook)
(add-hook 'mouse-track-drag-up-hook 'default-mouse-track-drag-up-hook)
-(add-hook 'mouse-track-click-hook 'default-mouse-track-click-hook)
(add-hook 'mouse-track-cleanup-hook 'default-mouse-track-cleanup-hook)
1.17.2.1 +1 -1 XEmacs/xemacs/lisp/msw-faces.el
Index: msw-faces.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/msw-faces.el,v
retrieving revision 1.17
retrieving revision 1.17.2.1
diff -u -r1.17 -r1.17.2.1
--- msw-faces.el 2003/03/09 02:27:33 1.17
+++ msw-faces.el 2005/03/15 05:20:51 1.17.2.1
@@ -271,7 +271,7 @@
(and (string-match mswindows-font-regexp name)
(string-to-int (substring name (match-beginning 3)
(match-end 3)))))
- (list-fonts font device)))
+ (font-list font device)))
#'<))
(defun mswindows-frob-font-size (font up-p device)
1.7.6.1 +1 -1 XEmacs/xemacs/lisp/msw-font-menu.el
Index: msw-font-menu.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/msw-font-menu.el,v
retrieving revision 1.7
retrieving revision 1.7.6.1
diff -u -r1.7 -r1.7.6.1
--- msw-font-menu.el 2002/06/20 21:18:04 1.7
+++ msw-font-menu.el 2005/03/15 05:20:51 1.7.6.1
@@ -74,7 +74,7 @@
family size weight entry
dev-cache cache families sizes weights)
(dolist (name (cond ((null debug) ; debugging kludge
- (list-fonts "::::" device))
+ (font-list "::::" device))
((stringp debug) (split-string debug "\n"))
(t debug)))
(when (and (string-match mswindows-font-regexp-ascii name)
1.6.2.1 +12 -0 XEmacs/xemacs/lisp/mwheel.el
Index: mwheel.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/mwheel.el,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -u -r1.6 -r1.6.2.1
--- mwheel.el 2003/08/13 11:22:43 1.6
+++ mwheel.el 2005/03/15 05:20:52 1.6.2.1
@@ -126,6 +126,18 @@
(setq keys (cdr keys)))
(error nil))))
+;;;###autoload
+(define-behavior 'mwheel
+ "This code enables the use of the infamous 'wheel' on the new
+crop of mice. Under XFree86 and the XSuSE X Servers, the wheel
+events are sent as button4/button5 events, which are automatically
+set up to do scrolling in the expected way. The actual way that the
+scrolling works can be controlled by `mwheel-scroll-amount' and
+`mwheel-follow-mouse'."
+ :group 'mouse
+ :short-doc "Mouse wheel support for X Windows"
+ :enable 'mwheel-install)
+
(provide 'mwheel)
;;; mwheel.el ends here
1.2.2.1 +169 -98 XEmacs/xemacs/lisp/newcomment.el
Index: newcomment.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/newcomment.el,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- newcomment.el 2004/06/06 23:58:44 1.2
+++ newcomment.el 2005/03/15 05:20:52 1.2.2.1
@@ -5,7 +5,6 @@
;; Author: code extracted from Emacs-20's simple.el
;; Maintainer: Stefan Monnier <monnier(a)cs.yale.edu>
;; Keywords: comment uncomment
-;; Revision: $Id: newcomment.el,v 1.2 2004/06/06 23:58:44 adrian Exp $
;; This file is part of GNU Emacs.
@@ -24,15 +23,19 @@
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
+;;; Synched up with: FSF 21.3.
+
;;; Commentary:
;; A replacement for simple.el's comment-related functions.
;;; Bugs:
+;; - boxed comments in Perl are not properly uncommented because they are
+;; uncommented one-line at a time.
+;; - nested comments in sgml-mode are not properly quoted.
;; - single-char nestable comment-start can only do the "\\s<+" stuff
;; if the corresponding closing marker happens to be right.
-;; - comment-box in TeXinfo generate bogus comments @ccccc@
;; - uncomment-region with a numeric argument can render multichar
;; comment markers invalid.
;; - comment-indent or comment-region when called inside a comment
@@ -43,15 +46,16 @@
;;; Todo:
-;; - quantized steps in comment-alignment
-;; - try to align tail comments
-;; - check what c-comment-line-break-function has to say
-;; - spill auto-fill of comments onto the end of the next line
+;; - rebox.el-style refill.
+;; - quantized steps in comment-alignment.
+;; - try to align tail comments.
+;; - check what c-comment-line-break-function has to say.
+;; - spill auto-fill of comments onto the end of the next line.
;; - uncomment-region with a consp (for blocks) or somehow make the
-;; deletion of continuation markers less dangerous
-;; - drop block-comment-<foo> unless it's really used
-;; - uncomment-region on a subpart of a comment
-;; - support gnu-style "multi-line with space in continue"
+;; deletion of continuation markers less dangerous.
+;; - drop block-comment-<foo> unless it's really used.
+;; - uncomment-region on a subpart of a comment.
+;; - support gnu-style "multi-line with space in continue".
;; - somehow allow comment-dwim to use the region even if transient-mark-mode
;; is not turned on.
@@ -71,7 +75,6 @@
;;;###autoload
(defalias 'indent-new-comment-line 'comment-indent-new-line)
-;;;###autoload
(defgroup comment nil
"Indenting and filling of comments."
:prefix "comment-"
@@ -85,14 +88,18 @@
to understand comments or not in the given buffer.
Major modes should set this variable.")
+(defcustom comment-fill-column nil
+ "Column to use for `comment-indent'. If nil, use `fill-column'
instead."
+ :type '(choice (const nil) integer))
+
;;;###autoload
(defcustom comment-column 32
"*Column to indent right-margin comments to.
-Setting this variable automatically makes it local to the current buffer.
Each mode establishes a different default value for this variable; you
-can set the value for a particular mode using that mode's hook."
- :type 'integer
- :group 'comment)
+can set the value for a particular mode using that mode's hook.
+Comments might be indented to a value smaller than this in order
+not to go beyond `comment-fill-column'."
+ :type 'integer)
(make-variable-buffer-local 'comment-column)
;;;###autoload
@@ -167,7 +174,6 @@
(defcustom comment-style 'plain
"*Style to be used for `comment-region'.
See `comment-styles' for a list of available styles."
- :group 'comment
:type (if (boundp 'comment-styles)
`(choice ,@(mapcar (lambda (s) `(const ,(car s))) comment-styles))
'symbol))
@@ -179,8 +185,7 @@
of the corresponding number of spaces.
Extra spacing between the comment characters and the comment text
-makes the comment easier to read. Default is \" \". nil means 0."
- :group 'comment
+makes the comment easier to read. Default is 1. nil means 0."
:type '(choice string integer (const nil)))
;;;###autoload
@@ -188,8 +193,7 @@
"*Non-nil means \\[indent-new-comment-line] should continue same comment
on new line, with no new terminator or starter.
This is obsolete because you might as well use \\[newline-and-indent]."
- :type 'boolean
- :group 'comment)
+ :type 'boolean)
;;;;
;;;; Helpers
@@ -206,6 +210,7 @@
"Return the mirror image of string S, without any trailing space."
(comment-string-strip (concat (nreverse (string-to-list s))) nil t))
+;;;###autoload
(defun comment-normalize-vars (&optional noerror)
(if (not comment-start) (or noerror (error "No comment syntax is
defined"))
;; comment-use-syntax
@@ -232,16 +237,24 @@
(unless (or comment-continue (string= comment-end ""))
(set (make-local-variable 'comment-continue)
(concat (if (string-match "\\S-\\S-" comment-start) " "
"|")
- (substring comment-start 1))))
+ (substring comment-start 1)))
+ ;; Hasn't been necessary yet.
+ ;; (unless (string-match comment-start-skip comment-continue)
+ ;; (kill-local-variable 'comment-continue))
+ )
;; comment-skip regexps
- (unless comment-start-skip
+ (unless (and comment-start-skip
+ ;; In case comment-start has changed since last time.
+ (string-match comment-start-skip comment-start))
(set (make-local-variable 'comment-start-skip)
(concat "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(\\s<+\\|"
(regexp-quote (comment-string-strip comment-start t t))
;; Let's not allow any \s- but only [ \t] since \n
;; might be both a comment-end marker and \s-.
"+\\)[ \t]*")))
- (unless comment-end-skip
+ (unless (and comment-end-skip
+ ;; In case comment-end has changed since last time.
+ (string-match comment-end-skip comment-end))
(let ((ce (if (string= "" comment-end) "\n"
(comment-string-strip comment-end t t))))
(set (make-local-variable 'comment-end-skip)
@@ -252,7 +265,7 @@
(if (and comment-quote-nested (<= (length ce) 1)) ""
"+")
(regexp-quote (substring ce 1))
"\\)"))))))
-
+
(defun comment-quote-re (str unp)
(concat (regexp-quote (substring str 0 1))
"\\\\" (if unp "+" "*")
@@ -468,13 +481,25 @@
(begpos (comment-search-forward eolpos t))
cpos indent)
;; An existing comment?
- (if begpos (setq cpos (point-marker))
+ (if begpos
+ (progn
+ (if (and (not (looking-at "[\t\n ]"))
+ (looking-at comment-end-skip))
+ ;; The comment is empty and we have skipped all its space
+ ;; and landed right before the comment-ender:
+ ;; Go back to the middle of the space.
+ (forward-char (/ (skip-chars-backward " \t") -2)))
+ (setq cpos (point-marker)))
;; If none, insert one.
(save-excursion
;; Some comment-indent-function insist on not moving comments that
;; are in column 0, so we first go to the likely target column.
(indent-to comment-column)
(setq begpos (point))
+ ;; Ensure there's a space before the comment for things
+ ;; like sh where it matters (as well as being neater).
+ (unless (eq ?\ (char-syntax (char-before)))
+ (insert ?\ ))
(insert starter)
(setq cpos (point-marker))
(insert ender)))
@@ -482,22 +507,20 @@
;; Compute desired indent.
(setq indent (save-excursion (funcall comment-indent-function)))
(if (not indent)
- ;; comment-indent-function refuses delegates to indent.
+ ;; comment-indent-function refuses: delegate to indent.
(indent-according-to-mode)
;; Avoid moving comments past the fill-column.
(unless (save-excursion (skip-chars-backward " \t") (bolp))
(setq indent
(min indent
(+ (current-column)
- (- fill-column
+ (- (or comment-fill-column fill-column)
(save-excursion (end-of-line) (current-column)))))))
;; XEmacs change: Preserve indentation of comments starting in
;; column 0, as documented.
- (if (or (= (current-column) 0) (= (current-column) indent))
- (goto-char begpos)
+ (unless (or (= (current-column) 0) (= (current-column) indent))
;; If that's different from current, change it.
- (skip-chars-backward " \t")
- (delete-region (point) begpos)
+ (delete-region (point) (progn (skip-chars-backward " \t") (point)))
(indent-to (if (bolp) indent
(max indent (1+ (current-column)))))))
(goto-char cpos)
@@ -619,7 +642,7 @@
;;;###autoload
(defun uncomment-region (beg end &optional arg)
- "Uncomment each line in the BEG..END region.
+ "Uncomment each line in the BEG .. END region.
The numeric prefix ARG can specify a number of chars to remove from the
comment markers."
(interactive "*r\nP")
@@ -649,31 +672,36 @@
(setq arg (list min-comments)))
(goto-char beg)))
- (let ((numarg (prefix-numeric-value arg))
- spt)
+ (let* ((numarg (prefix-numeric-value arg))
+ (ccs comment-continue)
+ (srei (comment-padright ccs 're))
+ (sre (and srei (concat "^\\s-*?\\(" srei "\\)")))
+ spt)
(while (and (< (point) end)
(setq spt (comment-search-forward end t)))
- (let* ((ipt (point))
- ;; Find the end of the comment.
- (ept (progn
- (goto-char spt)
- (unless (comment-forward)
- (error "Can't find the comment end"))
- (point)))
- (box nil)
- (ccs comment-continue)
- (srei (comment-padright ccs 're))
- (sre (and srei (concat "^\\s-*?\\(" srei "\\)"))))
+ (let ((ipt (point))
+ ;; Find the end of the comment.
+ (ept (progn
+ (goto-char spt)
+ (unless (comment-forward)
+ (error "Can't find the comment end"))
+ (point)))
+ (box nil)
+ (box-equal nil)) ;Whether we might be using `=' for boxes.
(save-restriction
(narrow-to-region spt ept)
+
;; Remove the comment-start.
(goto-char ipt)
(skip-syntax-backward " ")
- ;; Check for special `=' used sometimes in comment-box.
- (when (and (= (- (point) (point-min)) 1) (looking-at "=\\{7\\}"))
- (skip-chars-forward "="))
;; A box-comment starts with a looong comment-start marker.
- (when (> (- (point) (point-min) (length comment-start)) 7)
+ (when (and (or (and (= (- (point) (point-min)) 1)
+ (setq box-equal t)
+ (looking-at "=\\{7\\}")
+ (not (eq (char-before (point-max)) ?\n))
+ (skip-chars-forward "="))
+ (> (- (point) (point-min) (length comment-start)) 7))
+ (> (count-lines (point-min) (point-max)) 2))
(setq box t))
(when (looking-at (regexp-quote comment-padding))
(goto-char (match-end 0)))
@@ -686,7 +714,7 @@
;; Remove the end-comment (and leading padding and such).
(goto-char (point-max)) (comment-enter-backward)
;; Check for special `=' used sometimes in comment-box.
- (when (= (- (point-max) (point)) 1)
+ (when (and box-equal (not (eq (char-before (point-max)) ?\n)))
(let ((pos (point)))
;; skip `=' but only if there are at least 7.
(when (> (skip-chars-backward "=") -7) (goto-char pos))))
@@ -735,23 +763,32 @@
(s (concat cs "a=m" cce))
(e (concat ccs "a=m" ce))
(c (if (string-match ".*\\S-\\S-" cs)
- (aref cs (1- (match-end 0))) ?=))
- ; Huh? (_ (string-match "\\s-*a=m\\s-*" s))
+ (aref cs (1- (match-end 0)))
+ (if (and (equal comment-end "") (string-match ".*\\S-" cs))
+ (aref cs (1- (match-end 0))) ?=)))
+ (re "\\s-*a=m\\s-*")
+ ; Huh? (_ (string-match re s))
+ (lcs (length cs))
(fill
(make-string (+ width (- (match-end 0)
- (match-beginning 0) (length cs) 3)) c)))
+ (match-beginning 0) lcs 3)) c)))
(setq cs (replace-match fill t t s))
- (string-match "\\s-*a=m\\s-*" e)
+ (when (and (not (string-match comment-start-skip cs))
+ (string-match "a=m" s))
+ ;; The whitespace around CS cannot be ignored: put it back.
+ (setq re "a=m")
+ (setq fill (make-string (- width lcs) c))
+ (setq cs (replace-match fill t t s)))
+ (string-match re e)
(setq ce (replace-match fill t t e))))
(cons (concat cs "\n" (make-string min-indent ? ) ccs)
(concat cce "\n" (make-string (+ min-indent eindent) ? ) ce))))
-;(def-edebug-spec comment-with-narrowing t)
-(put 'comment-with-narrowing 'lisp-indent-function 2)
(defmacro comment-with-narrowing (beg end &rest body)
"Execute BODY with BEG..END narrowing.
Space is added (and then removed) at the beginning for the text's
indentation to be kept as it was before narrowing."
+ (declare (debug t) (indent 2))
(let ((bindent (make-symbol "bindent")))
`(let ((,bindent (save-excursion (goto-char beg) (current-column))))
(save-restriction
@@ -778,7 +815,7 @@
(defun comment-region-internal (beg end cs ce
&optional ccs cce block lines indent)
- "Comment region BEG..END.
+ "Comment region BEG .. END.
CS and CE are the comment start resp end string.
CCS and CCE are the comment continuation strings for the start resp end
of lines (default to CS and CE).
@@ -803,7 +840,7 @@
(unless block (setq cce nil))
;; Continuation defaults to the same as CS and CE.
(unless ccs (setq ccs cs cce ce))
-
+
(save-excursion
(goto-char end)
;; If the end is not at the end of a line and the comment-end
@@ -825,7 +862,7 @@
(end-of-line)
(setq max-indent (max max-indent (current-column)))
(not (or (eobp) (progn (forward-line) nil)))))
-
+
;; Inserting ccs can change max-indent by (1- tab-width).
(setq max-indent
(+ max-indent (max (length cs) (length ccs)) tab-width -1))
@@ -838,7 +875,7 @@
cs ce ccs cce min-indent max-indent block)))
(setq cs (car csce))
(setq ce (cdr csce))))
-
+
(goto-char (point-min))
;; Loop over all lines from BEG to END.
(while
@@ -857,7 +894,7 @@
;;;###autoload
(defun comment-region (beg end &optional arg)
"Comment or uncomment each line in the region.
-With just \\[universal-argument] prefix arg, uncomment each line in region BEG..END.
+With just \\[universal-argument] prefix arg, uncomment each line in region BEG .. END.
Numeric prefix arg ARG means use ARG comment characters.
If ARG is negative, delete that many comment characters instead.
By default, comments start at the left margin, are terminated on each line,
@@ -894,8 +931,8 @@
(>= (point) beg))
(progn (goto-char end) (end-of-line) (skip-syntax-backward " ")
(<= (point) end))
- (or (not (string= "" comment-end)) block)
- (progn (goto-char beg) (search-forward "\n" end t)))))
+ (or block (not (string= "" comment-end)))
+ (or block (progn (goto-char beg) (search-forward "\n" end t))))))
;; don't add end-markers just because the user asked for `block'
(unless (or lines (string= "" comment-end)) (setq block nil))
@@ -921,7 +958,7 @@
(nth 3 style))))))
(defun comment-box (beg end &optional arg)
- "Comment out the BEG..END region, putting it inside a box.
+ "Comment out the BEG .. END region, putting it inside a box.
The numeric prefix ARG specifies how many characters to add to begin- and
end- comment markers additionally to what `comment-add' already specifies."
(interactive "*r\np")
@@ -929,7 +966,21 @@
'box-multi 'box)))
(comment-region beg end (+ comment-add arg))))
+
;;;###autoload
+(defun comment-or-uncomment-region (beg end &optional arg)
+ "Call `comment-region', unless the region only consists of comments,
+in which case call `uncomment-region'. If a prefix arg is given, it
+is passed on to the respective function."
+ (interactive "*r\nP")
+ (funcall (if (save-excursion ;; check for already commented region
+ (goto-char beg)
+ (comment-forward (point-max))
+ (<= end (point)))
+ 'uncomment-region 'comment-region)
+ beg end arg))
+
+;;;###autoload
(defun comment-dwim (arg)
"Call the comment command you want (Do What I Mean).
If the region is active and `transient-mark-mode' is on, call
@@ -941,14 +992,7 @@
(interactive "*P")
(comment-normalize-vars)
(if (region-active-p) ;mark-active transient-mark-mode)
- (let ((beg (min (point) (mark)))
- (end (max (point) (mark))))
- (if (save-excursion ;; check for already commented region
- (goto-char beg)
- (comment-forward (point-max))
- (<= end (point)))
- (uncomment-region beg end arg)
- (comment-region beg end arg)))
+ (comment-or-uncomment-region (region-beginning) (region-end) arg)
(if (save-excursion (beginning-of-line) (not (looking-at "\\s-*$")))
;; FIXME: If there's no comment to kill on this line and ARG is
;; specified, calling comment-kill is not very clever.
@@ -967,9 +1011,16 @@
(defcustom comment-auto-fill-only-comments nil
"Non-nil means to only auto-fill inside comments.
This has no effect in modes that do not define a comment syntax."
- :type 'boolean
- :group 'comment)
+ :type 'boolean)
+(defun comment-valid-prefix (prefix compos)
+ (or
+ ;; Accept any prefix if the current comment is not EOL-terminated.
+ (save-excursion (goto-char compos) (comment-forward) (not (bolp)))
+ ;; Accept any prefix that starts with a comment-start marker.
+ (string-match (concat "\\`[ \t]*\\(?:" comment-start-skip
"\\)")
+ fill-prefix)))
+
;;;###autoload
(defun comment-indent-new-line (&optional soft)
"Break line at point and indent, continuing comment if within one.
@@ -992,42 +1043,59 @@
;; don't do anything (unless no comment syntax is defined).
(unless (and comment-start
comment-auto-fill-only-comments
+ (not (interactive-p))
(not (save-excursion
(prog1 (setq compos (comment-beginning))
(setq comin (point))))))
- ;; Now we know we should auto-fill.
;; XEmacs: next 3 lines from old version.
(skip-chars-backward " \t")
(if (featurep 'mule)
(declare-fboundp (kinsoku-process)))
- (delete-horizontal-space)
+
+ ;; Now we know we should auto-fill.
+ ;; Insert the newline before removing empty space so that markers
+ ;; get preserved better.
(if soft (insert-and-inherit ?\n) (newline 1))
- (if fill-prefix
+ (save-excursion (forward-char -1) (delete-horizontal-space))
+ (delete-horizontal-space)
+
+ (if (and fill-prefix (not adaptive-fill-mode))
+ ;; Blindly trust a non-adaptive fill-prefix.
(progn
(indent-to-left-margin)
- (insert-and-inherit fill-prefix))
+ (insert-before-markers-and-inherit fill-prefix))
;;#### jhod: probably need to fix this for kinsoku processing
;; If necessary check whether we're inside a comment.
- (unless (or comment-multi-line compos (null comment-start))
+ (unless (or compos (null comment-start))
(save-excursion
(backward-char)
(setq compos (comment-beginning))
(setq comin (point))))
- ;; If we're not inside a comment, just try to indent.
- ;; #### XEmacs: the line `(if comcol' was changed as follows.
- ;; I'm leaving it out since who knows if it's applicable any more.
- ;; --ben
- ;; (if (and comcol (not fill-prefix)) ; XEmacs - (ENE) from fa-extras.
- (if (not compos) (indent-according-to-mode)
+ (cond
+ ;; If there's an adaptive prefix, use it unless we're inside
+ ;; a comment and the prefix is not a comment starter.
+ ((and fill-prefix
+ (or (not compos)
+ (comment-valid-prefix fill-prefix compos)))
+ (indent-to-left-margin)
+ (insert-and-inherit fill-prefix))
+ ;; If we're not inside a comment, just try to indent.
+ ;; #### XEmacs: the line `(if comcol' was changed as follows.
+ ;; I'm leaving it out since who knows if it's applicable any more.
+ ;; --ben
+ ;; (if (and comcol (not fill-prefix)) ; XEmacs - (ENE) from fa-extras.
+ ((not compos) (indent-according-to-mode))
+ (t
(let* ((comment-column
;; The continuation indentation should be somewhere between
;; the current line's indentation (plus 2 for good measure)
;; and the current comment's indentation, with a preference
;; for comment-column.
(save-excursion
+ ;; FIXME: use prev line's info rather than first line's.
(goto-char compos)
(min (current-column) (max comment-column
(+ 2 (current-indentation))))))
@@ -1049,22 +1117,25 @@
(point))
nil t)))))
(comment-start comstart)
+ (continuep (or comment-multi-line
+ (cadr (assoc comment-style comment-styles))))
;; Force comment-continue to be recreated from comment-start.
;; FIXME: wrong if comment-continue was set explicitly!
+ ;; FIXME: use prev line's continuation if available.
(comment-continue nil))
- (insert-and-inherit ?\n)
- (forward-char -1)
- (comment-indent (cadr (assoc comment-style comment-styles)))
- (save-excursion
- (let ((pt (point)))
- (end-of-line)
- (let ((comend (buffer-substring pt (point))))
- ;; The 1+ is to make sure we delete the \n inserted above.
- (delete-region pt (1+ (point)))
- (beginning-of-line)
- (backward-char)
- (insert comend)
- (forward-char))))))))))
+ (if (and comment-multi-line (> (length comment-end) 0))
+ (indent-according-to-mode)
+ (insert-and-inherit ?\n)
+ (forward-char -1)
+ (comment-indent continuep)
+ (save-excursion
+ (let ((pt (point)))
+ (end-of-line)
+ (let ((comend (buffer-substring pt (point))))
+ ;; The 1+ is to make sure we delete the \n inserted above.
+ (delete-region pt (1+ (point)))
+ (end-of-line 0)
+ (insert comend))))))))))))
(provide 'newcomment)
1.17.2.1 +5 -1 XEmacs/xemacs/lisp/obsolete.el
Index: obsolete.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/obsolete.el,v
retrieving revision 1.17
retrieving revision 1.17.2.1
diff -u -r1.17 -r1.17.2.1
--- obsolete.el 2003/03/20 13:19:59 1.17
+++ obsolete.el 2005/03/15 05:20:52 1.17.2.1
@@ -3,7 +3,7 @@
;; Copyright (C) 1985-1994, 1997 Free Software Foundation, Inc.
;; Copyright (C) 1994, 1995 Amdahl Corporation.
;; Copyright (C) 1995 Sun Microsystems.
-;; Copyright (C) 2002 Ben Wing.
+;; Copyright (C) 2002, 2004 Ben Wing.
;; Maintainer: XEmacs Development Team
;; Keywords: internal, dumped
@@ -371,6 +371,10 @@
If FRAME is omitted or nil, use the selected frame."
(color-instance-rgb-components (make-color-instance color)))
(make-compatible 'x-color-values 'color-instance-rgb-components)
+
+(make-obsolete 'mswindows-color-list 'color-list)
+(make-obsolete 'tty-color-list 'color-list)
+(make-compatible 'list-fonts 'font-list)
;; Two loser functions which shouldn't be used.
(make-obsolete 'following-char 'char-after)
1.24.2.1 +4 -5 XEmacs/xemacs/lisp/package-admin.el
Index: package-admin.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/package-admin.el,v
retrieving revision 1.24
retrieving revision 1.24.2.1
diff -u -r1.24 -r1.24.2.1
--- package-admin.el 2003/07/05 08:40:37 1.24
+++ package-admin.el 2005/03/15 05:20:52 1.24.2.1
@@ -197,9 +197,8 @@
(expand-file-name "mule-packages" user-init-directory))))))
;; Finally check the normal places
(if (not top-dir)
- (let ((path-list (nth 1 (packages-find-packages
- emacs-data-roots
- (packages-compute-package-locations user-init-directory)))))
+ (let ((path-list (nth 1 (packages-find-all-package-hierarchies
+ emacs-data-roots))))
(cond ((eq type 'std)
(while path-list
(if (equal (substring (car path-list) -16)
@@ -226,7 +225,7 @@
see if the PACKAGE is already installed and return that location, if
it is writable. Finally, fall back to the `user-init-directory' if
all else fails. As a side effect of installing packages under
-`user-init-directory' these packages become part of `early-packages'."
+`user-init-directory' these packages become part of
`early-package-hierarchies'."
;; If pkg-dir specified, return that if writable.
(if (and pkg-dir
(file-writable-p (directory-file-name pkg-dir)))
@@ -255,7 +254,7 @@
(car-safe (member-if (lambda (h)
(string-match (concat "^" (regexp-quote h))
autoload-dir))
- (append (cdr early-packages) late-packages)))))
+ (append (cdr early-package-hierarchies) late-package-hierarchies)))))
(if (and pkg-dir
(file-writable-p (directory-file-name pkg-dir)))
pkg-dir
1.23.2.1 +6 -6 XEmacs/xemacs/lisp/package-ui.el
Index: package-ui.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/package-ui.el,v
retrieving revision 1.23
retrieving revision 1.23.2.1
diff -u -r1.23 -r1.23.2.1
--- package-ui.el 2004/11/04 23:05:55 1.23
+++ package-ui.el 2005/03/15 05:20:52 1.23.2.1
@@ -607,11 +607,11 @@
"))
(if pui-list-verbose
- (insert " Latest Installed
- Package name Vers. Vers. Description
+ (insert " Latest Installed
+ Package name Vers. Vers. Description
")
- (insert " Latest
- Package name Vers. Description
+ (insert " Latest
+ Package name Vers. Description
"))
(insert sep-string)
(setq start (point))
@@ -640,13 +640,13 @@
((numberp current-vers)
(setq current-vers (format "%.2f" current-vers))))
(insert
- (format "%s %-15s %-5.2f %-5s %s\n"
+ (format "%s %-20s %-5.2f %-5s %s\n"
(car disp) pkg-sym
(if (stringp version)
(string-to-number version)
version)
current-vers desc)))
- (insert (format "%s %-15s %-5s %s\n"
+ (insert (format "%s %-20s %-5s %s\n"
(car disp)
pkg-sym version desc)))
(save-excursion
1.50.2.1 +114 -118 XEmacs/xemacs/lisp/packages.el
Index: packages.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/packages.el,v
retrieving revision 1.50
retrieving revision 1.50.2.1
diff -u -r1.50 -r1.50.2.1
--- packages.el 2004/09/07 00:08:19 1.50
+++ packages.el 2005/03/15 05:20:53 1.50.2.1
@@ -1,7 +1,7 @@
;;; packages.el --- Low level support for XEmacs packages
;; Copyright (C) 1997 Free Software Foundation, Inc.
-;; Copyright (C) 2002, 2003 Ben Wing.
+;; Copyright (C) 2002, 2003, 2004 Ben Wing.
;; Author: Steven L Baur <steve(a)xemacs.org>
;; Maintainer: Steven L Baur <steve(a)xemacs.org>
@@ -58,57 +58,59 @@
(defvar packages-package-list nil
"Database of installed packages and version numbers")
-(defvar packages-hierarchy-depth 1
- "Depth of package hierarchies.")
+;;; Directories and paths
+;;; Terminology:
+
+;;; A *package hierarchy* is a directory that contains a collection of
+;;; packages; it has lisp/, info/, etc/ etc. subdirectories that
+;;; contain the files constituting the packages.
+
+;;; A *package directory* contains package hierarchies---the package
+;;; hierarchies are typically in directories "xemacs-packages",
+;;; "mule-packages", and so on. A package hierarchy might only be
+;;; applicable for specific variants of XEmacs.
+
+;;; Package hierarchies come in "early", "late", and
"last" variants,
+;;; depending on their relative location in the various paths.
+;;; "Early" hierarchies are typically in the user's home directory,
+;;; "late" hierarchies are typically part of the XEmacs installation,
+;;; and "last" package hierarchies are for special purposes, such as
+;;; making the packages of some previous XEmacs version available.
+
(defvar packages-load-path-depth 1
"Depth of load-path search in package hierarchies.")
(defvar packages-data-path-depth 1
"Depth of data-path search in package hierarchies.")
-(defvar early-packages nil
- "Packages early in the load path.")
+(defvar early-package-hierarchies nil
+ "Package hierarchies early in the load path.")
(defvar early-package-load-path nil
"Load path for packages early in the load path.")
-(defvar late-packages nil
- "Packages late in the load path.")
+(defvar late-package-hierarchies nil
+ "Package hierarchies late in the load path.")
(defvar late-package-load-path nil
"Load path for packages late in the load path.")
-(defvar last-packages nil
- "Packages last in the load path.")
+(defvar last-package-hierarchies nil
+ "Package hierarchies last in the load path.")
(defvar last-package-load-path nil
"Load path for packages last in the load path.")
-(defun packages-compute-package-locations (user-init-directory)
- "Compute locations of the various package directories.
-This is a list each of whose elements describes one directory.
-A directory description is a three-element list.
-The first element is either an absolute path or a subdirectory
-in the XEmacs hierarchy.
-The second component is one of the symbols EARLY, LATE, LAST,
-depending on the load-path segment the hierarchy is supposed to
-show up in.
-The third component is a thunk which, if it returns NIL, causes
-the directory to be ignored."
- (list
- (list (paths-construct-path (list user-init-directory "site-packages"))
- 'early #'(lambda () t))
- (list (paths-construct-path (list user-init-directory
"infodock-packages"))
- 'early #'(lambda () (featurep 'infodock)))
- (list (paths-construct-path (list user-init-directory "mule-packages"))
- 'early #'(lambda () (featurep 'mule)))
- (list (paths-construct-path (list user-init-directory "xemacs-packages"))
- 'early #'(lambda () t))
- (list "site-packages" 'late #'(lambda () t))
- (list "infodock-packages" 'late #'(lambda () (featurep
'infodock)))
- (list "mule-packages" 'late #'(lambda () (featurep
'mule)))
- (list "xemacs-packages" 'late #'(lambda () t))))
+(defun packages-package-hierarchy-directory-names ()
+ "Returns a list package hierarchy directory names.
+These are the valid immediate directory names of package
+directories, directories with higher priority first"
+ (paths-filter #'(lambda (x) x)
+ `("site-packages"
+ ,(when (featurep 'infodock) "infodock-packages")
+ ,(when (featurep 'mule) "mule-packages")
+ "xemacs-packages")))
(defun package-get-key-1 (info key)
"Locate keyword `key' in list."
@@ -131,6 +133,14 @@
(setq packages-package-list
(cons (cons name info) (remassq name packages-package-list)))))
+(defun package-suppress (package file form)
+ "Set up a package-suppress condition FORM for FILE in PACKAGE.
+When XEmacs searches for a file in the load path, it will ignore FILE
+if FORM evaluates to non-nil."
+ (setq load-suppress-alist
+ (acons (expand-file-name file load-file-name) form
+ load-suppress-alist)))
+
(defun package-require (name version)
(let ((pkg (assq name packages-package-list)))
(cond ((null pkg)
@@ -328,30 +338,15 @@
;; Path setup
-(defun packages-find-package-directories (roots base)
- "Find a set of package directories."
- ;; make sure paths-find-version-directory and paths-find-site-directory
- ;; don't both pick up version-independent directories ...
- (let ((version-directory (paths-find-version-directory roots base nil nil t))
- (site-directory (paths-find-site-directory roots base)))
- (paths-uniq-append
- (and version-directory (list version-directory))
- (and site-directory (list site-directory)))))
-
-(defvar packages-special-base-regexp
"^\\(etc\\|info\\|man\\|lisp\\|lib-src\\|bin\\|pkginfo\\)$"
- "Special subdirectories of packages.")
-
-(defvar packages-no-package-hierarchy-regexp
- (concat "\\(" paths-version-control-filename-regexp "\\)"
- "\\|"
- "\\(" packages-special-base-regexp "\\)")
- "Directories which can't be the roots of package hierarchies.")
-
-(defun packages-find-packages-in-directories (directories)
- "Find all packages underneath directories in DIRECTORIES."
- (paths-find-recursive-path directories
- packages-hierarchy-depth
- packages-no-package-hierarchy-regexp))
+(defun packages-find-package-hierarchies-named (package-directories base)
+ "Find a set of package hierarchies within an XEmacs installation.
+PACKAGE-DIRECTORIES is a list of package directories.
+BASE is a subdirectory name for the hierarchy.
+Returns list of hierarchies."
+ (paths-directories-which-exist
+ (mapcar #'(lambda (package-directory)
+ (file-name-as-directory (concat package-directory base)))
+ package-directories)))
(defun packages-split-path (path)
"Split PATH at \"\", return pair with two components.
@@ -368,7 +363,8 @@
(defun packages-split-package-path (package-path)
"Split up PACKAGE-PATH into early, late and last components.
The separation is by \"\" components.
-This returns (LIST EARLY-PACKAGES LATE-PACKAGES LAST-PACKAGES)."
+This returns
+(LIST EARLY-PACKAGE-HIERARCHIES LATE-PACKAGE-HIERARCHIES
LAST-PACKAGE-HIERARCHIES)."
;; When in doubt, it's late
(let* ((stuff (packages-split-path package-path))
(early (and (cdr stuff) (car stuff)))
@@ -376,99 +372,99 @@
(stuff (packages-split-path late+last))
(late (car stuff))
(last (cdr stuff)))
- (list (packages-find-packages-in-directories early)
- (packages-find-packages-in-directories late)
- (packages-find-packages-in-directories last))))
+ (list (mapcar #'file-name-as-directory early)
+ (mapcar #'file-name-as-directory late)
+ (mapcar #'file-name-as-directory last))))
(defun packages-deconstruct (list consumer)
- "Deconstruct LIST and feed it to CONSUMER."
+ "Deconstruct LIST and feed it to CONSUMER.
+CONSUMER is a function that accepts the elements of LISTS as separate arguments."
(apply consumer list))
-(defun packages-find-packages-by-name (roots name)
- "Find a package hierarchy by its name."
- (packages-find-packages-in-directories
- (if (and (file-name-absolute-p name)
- (file-name-directory (expand-file-name name)))
- (list (file-name-as-directory (expand-file-name name)))
- (packages-find-package-directories roots name))))
-
-(defun packages-find-packages-at-time
- (roots package-locations time &optional default)
- "Find packages at given time.
-For the format of PACKAGE-LOCATIONS, see the global variable of the same name.
-TIME is either 'EARLY, 'LATE, or 'LAST.
-DEFAULT is a default list of packages."
+(defun packages-find-installation-package-directories (roots)
+ "Find the package directories in the XEmacs installation.
+ROOTS is a list of installation roots."
+ (paths-uniq-append (paths-find-version-directories roots "" nil nil t)
+ (paths-find-site-directories roots "")))
+
+(defun packages-find-package-hierarchies (package-directories &optional default)
+ "Find package hierarchies in a list of package directories.
+PACKAGE-DIRECTORIES is a list of package directories.
+DEFAULT is a default list of package hierarchies."
(or default
- (let ((packages '()))
- (while package-locations
- (packages-deconstruct
- (car package-locations)
- #'(lambda (name a-time thunk)
- (if (and (eq time a-time)
- (funcall thunk))
- (setq packages
- (nconc packages
- (packages-find-packages-by-name roots name))))))
- (setq package-locations (cdr package-locations)))
- packages)))
-
-(defun packages-find-packages (roots package-locations)
- "Find the packages."
+ (let ((package-hierarchies '())
+ (hierarchy-directories (packages-package-hierarchy-directory-names)))
+ (while hierarchy-directories
+ (setq package-hierarchies
+ (nconc package-hierarchies
+ (packages-find-package-hierarchies-named
+ package-directories
+ (car hierarchy-directories))))
+ (setq hierarchy-directories (cdr hierarchy-directories)))
+ package-hierarchies)))
+
+(defun packages-find-all-package-hierarchies (roots)
+ "Find the package hierarchies.
+ROOTS is a list of installation roots.
+Returns a list of three directory lists, the first being the list of early
+hierarchies, the second that of the late hierarchies, and the third the
+list of the last hierarchies."
(let ((envvar-value (getenv "EMACSPACKAGEPATH")))
(if envvar-value
(packages-split-package-path (paths-decode-directory-path envvar-value))
(packages-deconstruct
(packages-split-package-path configure-package-path)
- #'(lambda (configure-early-packages
- configure-late-packages
- configure-last-packages)
- (list (packages-find-packages-at-time roots package-locations 'early
- configure-early-packages)
- (packages-find-packages-at-time roots package-locations 'late
- configure-late-packages)
- (packages-find-packages-at-time roots package-locations 'last
- configure-last-packages)))))))
+ #'(lambda (configure-early-package-hierarchies
+ configure-late-package-hierarchies
+ configure-last-package-hierarchies)
+ (list
+ (packages-find-package-hierarchies (list user-init-directory)
+ configure-early-package-hierarchies)
+ (packages-find-package-hierarchies (packages-find-installation-package-directories
roots)
+ configure-late-package-hierarchies)
+ (packages-find-package-hierarchies '()
+ configure-last-package-hierarchies)))))))
-(defun packages-find-package-library-path (packages suffixes)
+(defun packages-find-package-library-path (package-hierarchies suffixes)
"Construct a path into a component of the packages hierarchy.
-PACKAGES is a list of package directories.
-SUFFIXES is a list of names of package subdirectories to look for."
+PACKAGE-HIERARCHIES is a list of package hierarchies.
+SUFFIXES is a list of names of hierarchy subdirectories to look for."
(let ((directories
(apply
#'nconc
- (mapcar #'(lambda (package)
+ (mapcar #'(lambda (hierarchy)
(mapcar #'(lambda (suffix)
- (file-name-as-directory (concat package suffix)))
+ (file-name-as-directory (concat hierarchy suffix)))
suffixes))
- packages))))
+ package-hierarchies))))
(paths-directories-which-exist directories)))
-(defun packages-find-package-load-path (packages)
+(defun packages-find-package-load-path (package-hierarchies)
"Construct the load-path component for packages.
-PACKAGES is a list of package directories."
+PACKAGE-HIERARCHIES is a list of package hierarchies."
(paths-find-recursive-load-path
- (packages-find-package-library-path packages
+ (packages-find-package-library-path package-hierarchies
'("lisp"))
packages-load-path-depth))
-(defun packages-find-package-exec-path (packages)
+(defun packages-find-package-exec-path (package-hierarchies)
"Construct the exec-path component for packages.
-PACKAGES is a list of package directories."
- (packages-find-package-library-path packages
+PACKAGE-HIERARCHIES is a list of package hierarchies."
+ (packages-find-package-library-path package-hierarchies
(list (paths-construct-path
(list "bin" system-configuration))
"lib-src")))
-(defun packages-find-package-info-path (packages)
+(defun packages-find-package-info-path (package-hierarchies)
"Construct the info-path component for packages.
-PACKAGES is a list of package directories."
- (packages-find-package-library-path packages '("info")))
+PACKAGE-HIERARCHIES is a list of package directories."
+ (packages-find-package-library-path package-hierarchies '("info")))
-(defun packages-find-package-data-path (packages)
+(defun packages-find-package-data-path (package-hierarchies)
"Construct the data-path component for packages.
-PACKAGES is a list of package directories."
+PACKAGE-HIERARCHIES is a list of package hierachies."
(paths-find-recursive-load-path
- (packages-find-package-library-path packages
+ (packages-find-package-library-path package-hierarchies
'("etc"))
packages-data-path-depth))
1.3.20.1 +20 -6 XEmacs/xemacs/lisp/page.el
Index: page.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/page.el,v
retrieving revision 1.3
retrieving revision 1.3.20.1
diff -u -r1.3 -r1.3.20.1
--- page.el 2001/04/12 18:21:34 1.3
+++ page.el 2005/03/15 05:20:53 1.3.20.1
@@ -1,9 +1,10 @@
-;;; page.el --- page motion commands for emacs.
+;;; page.el --- page motion commands for Emacs
;; Copyright (C) 1985, 1997 Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: extensions, dumped
+;; Keywords: wp convenience
;; This file is part of XEmacs.
@@ -22,7 +23,7 @@
;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
;; 02111-1307, USA.
-;;; Synched up with: FSF 19.34.
+;;; Synched up with: FSF 21.3.
;;; Commentary:
@@ -94,15 +95,28 @@
(if (> arg 0)
(forward-page arg)
(if (< arg 0)
- (forward-page (1- arg))))
+ (let ((adjust 0)
+ (opoint (point)))
+ ;; If we are not now at the beginning of a page,
+ ;; move back one extra time, to get to the start of this page.
+ (save-excursion
+ (beginning-of-line)
+ (or (and (looking-at page-delimiter)
+ (eq (match-end 0) opoint))
+ (setq adjust 1)))
+ (forward-page (- arg adjust)))))
;; Find the end of the page.
+ (set-match-data nil)
(forward-page)
;; If we stopped due to end of buffer, stay there.
;; If we stopped after a page delimiter, put end of restriction
;; at the beginning of that line.
- (if (save-excursion
- (goto-char (match-beginning 0)) ; was (beginning-of-line)
- (looking-at page-delimiter))
+ ;; Before checking the match that was found,
+ ;; verify that forward-page actually set the match data.
+ (if (and (match-beginning 0)
+ (save-excursion
+ (goto-char (match-beginning 0)) ; was (beginning-of-line)
+ (looking-at page-delimiter)))
(beginning-of-line))
(narrow-to-region (point)
(progn
1.7.8.1 +205 -134 XEmacs/xemacs/lisp/paragraphs.el
Index: paragraphs.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/paragraphs.el,v
retrieving revision 1.7
retrieving revision 1.7.8.1
diff -u -r1.7 -r1.7.8.1
--- paragraphs.el 2001/12/05 04:09:25 1.7
+++ paragraphs.el 2005/03/15 05:20:54 1.7.8.1
@@ -1,7 +1,7 @@
-;;; paragraphs.el --- paragraph and sentence parsing.
+;;; paragraphs.el --- paragraph and sentence parsing
-;; Copyright (C) 1985, 86, 87, 91, 94, 95, 97, 2001
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1985, 86, 87, 91, 94, 95, 96, 1997, 1999, 2000, 2001
+;; Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: wp, dumped
@@ -23,7 +23,7 @@
;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
;; 02111-1307, USA.
-;;; Synched up with: FSF 19.34.
+;;; Synched up with: FSF 21.3.
;;; Commentary:
@@ -37,19 +37,11 @@
;;; Code:
-(defvar use-hard-newlines nil
- "Non-nil means to distinguish hard and soft newlines.
-When this is non-nil, the functions `newline' and `open-line' add the
-text-property `hard' to newlines that they insert. Also, a line is
-only considered as a candidate to match `paragraph-start' or
-`paragraph-separate' if it follows a hard newline. Newlines not
-marked hard are called \"soft\", and are always internal to
-paragraphs. The fill functions always insert soft newlines.
-
-Each buffer has its own value of this variable.")
-(make-variable-buffer-local 'use-hard-newlines)
+(defgroup paragraphs nil
+ "Paragraph and sentence parsing."
+ :group 'editing)
-(defun use-hard-newlines (&optional arg insert)
+(define-minor-mode use-hard-newlines
"Minor mode to distinguish hard and soft newlines.
When active, the functions `newline' and `open-line' add the
text-property `hard' to newlines that they insert, and a line is
@@ -58,25 +50,22 @@
Prefix argument says to turn mode on if positive, off if negative.
When the mode is turned on, if there are newlines in the buffer but no hard
-newlines, ask the user whether to mark as hard any newlines preceding a
+newlines, ask the user whether to mark as hard any newlines preceeding a
`paragraph-start' line. From a program, second arg INSERT specifies whether
to do this; it can be `never' to change nothing, t or `always' to force
-marking, `guess' to try to do the right thing with no questions, nil
+marking, `guess' to try to do the right thing with no questions, nil
or anything else to ask the user.
Newlines not marked hard are called \"soft\", and are always internal
to paragraphs. The fill functions insert and delete only soft newlines."
- (interactive (list current-prefix-arg nil))
- (if (or (<= (prefix-numeric-value arg) 0)
- (and use-hard-newlines (null arg)))
- ;; Turn mode off
- (setq use-hard-newlines nil)
+ :group 'paragraphs
+ :extra-args (insert)
+ (when use-hard-newlines
;; Turn mode on
;; Intuit hard newlines --
;; mark as hard any newlines preceding a paragraph-start line.
(if (or (eq insert t) (eq insert 'always)
(and (not (eq 'never insert))
- (not use-hard-newlines)
(not (text-property-any (point-min) (point-max) 'hard t))
(save-excursion
(goto-char (point-min))
@@ -88,19 +77,16 @@
(while (search-forward "\n" nil t)
(let ((pos (point)))
(move-to-left-margin)
- (if (looking-at paragraph-start)
- (progn
- (set-hard-newline-properties (1- pos) pos)
- ;; If paragraph-separate, newline after it is hard too.
- (if (looking-at paragraph-separate)
- (progn
- (end-of-line)
- (if (not (eobp))
- (set-hard-newline-properties
- (point) (1+ (point))))))))))))
- (setq use-hard-newlines t)))
+ (when (looking-at paragraph-start)
+ (set-hard-newline-properties (1- pos) pos))
+ ;; If paragraph-separate, newline after it is hard too.
+ (when (looking-at paragraph-separate)
+ (set-hard-newline-properties (1- pos) pos)
+ (end-of-line)
+ (unless (eobp)
+ (set-hard-newline-properties (point) (1+ (point)))))))))))
-(defconst paragraph-start "[ \t\n\f]" "\
+(defcustom paragraph-start "\f\\|[ \t]*$" "\
*Regexp for beginning of a line that starts OR separates paragraphs.
This regexp should match lines that separate paragraphs
and should also match lines that start a paragraph
@@ -115,7 +101,9 @@
lines that start paragraphs from lines that separate them.
If the variable `use-hard-newlines' is non-nil, then only lines following a
-hard newline are considered to match.")
+hard newline are considered to match."
+ :group 'paragraphs
+ :type 'regexp)
;; paragraph-start requires a hard newline, but paragraph-separate does not:
;; It is assumed that paragraph-separate is distinctive enough to be believed
@@ -123,8 +111,8 @@
;; something very minimal, even including "." (which makes every hard
newline
;; start a new paragraph).
-(defconst paragraph-separate "[ \t\f]*$" "\
-*Regexp for beginning of a line that separates paragraphs.
+(defcustom paragraph-separate "[ \t\f]*$"
+ "*Regexp for beginning of a line that separates paragraphs.
If you change this, you may have to change `paragraph-start' also.
A line matching this is not part of any paragraph.
@@ -132,34 +120,82 @@
This is matched against the text at the left margin, which is not necessarily
the beginning of the line, so it should not use \"^\" as an anchor. This
ensures that the paragraph functions will work equally within a region of
-text indented by a margin setting.")
-
-(defconst sentence-end "[.?!][]\"')}]*\\($\\| $\\|\t\\| \\)[
\t\n]*" "\
-*Regexp describing the end of a sentence.
+text indented by a margin setting."
+ :group 'paragraphs
+ :type 'regexp)
+
+(defcustom sentence-end-double-space t
+ "*Non-nil means a single space does not end a sentence.
+This is relevant for filling. See also `sentence-end-without-period'
+and `colon-double-space'.
+
+This variable applies only to filling, not motion commands. To
+change the behavior of motion commands, see `sentence-end'.
+
+If you change this, you should also change `sentence-end'. See Info
+node `Sentences'."
+ :type 'boolean
+ :group 'fill)
+
+(defcustom sentence-end-without-period nil
+ "*Non-nil means a sentence will end without a period.
+For example, a sentence in Thai text ends with double space but
+without a period."
+ :type 'boolean
+ :group 'fill)
+
+(defcustom sentence-end
+ (purecopy
+ ;; This is a bit stupid since it's not auto-updated when the
+ ;; other variables are changed, but it's still useful info.
+ (concat (if sentence-end-without-period "\\w \\|")
+ "[.?!"
+ (if (featurep 'mule)
+ (decode-coding-string
"\033$B!#!%!)!*\033$A!##.#?#!\033$(0!$!%!)!*\033$(G!$!%!)!*\033(B"
'iso-2022-7bit)
+ "")
+ "][]\"')}]*"
+ (if sentence-end-double-space
+ "\\($\\| $\\|\t\\| \\)" "\\($\\|[\t ]\\)")
+ "[ \t\n]*"))
+ "*Regexp describing the end of a sentence.
+The value includes the whitespace following the sentence.
All paragraph boundaries also end sentences, regardless.
-In order to be recognized as the end of a sentence, the ending period,
-question mark, or exclamation point must be followed by two spaces,
-unless it's inside some sort of quotes or parenthesis.")
-
-(defconst page-delimiter "^\014" "\
-*Regexp describing line-beginnings that separate pages.")
-
-(defvar paragraph-ignore-fill-prefix nil "\
-Non-nil means the paragraph commands are not affected by `fill-prefix'.
-This is desirable in modes where blank lines are the paragraph delimiters.")
+The default value specifies that in order to be recognized as the end
+of a sentence, the ending period, question mark, or exclamation point
+must be followed by two spaces, unless it's inside some sort of quotes
+or parenthesis.
+
+See also the variable `sentence-end-double-space', the variable
+`sentence-end-without-period' and Info node `Sentences'."
+ :group 'paragraphs
+ :type 'regexp)
+
+(defcustom page-delimiter "^\014"
+ "*Regexp describing line-beginnings that separate pages."
+ :group 'paragraphs
+ :type 'regexp)
+
+(defcustom paragraph-ignore-fill-prefix nil
+ "*Non-nil means the paragraph commands are not affected by `fill-prefix'.
+This is desirable in modes where blank lines are the paragraph delimiters."
+ :group 'paragraphs
+ :type 'boolean)
(defun forward-paragraph (&optional arg)
"Move forward to end of paragraph.
-With arg N, do it N times; negative arg -N means move backward N paragraphs.
+With argument ARG, do it ARG times;
+a negative argument ARG = -N means move backward N paragraphs.
A line which `paragraph-start' matches either separates paragraphs
\(if `paragraph-separate' matches it also) or is the first line of a paragraph.
A paragraph end is the beginning of a line which is not part of the paragraph
-to which the end of the previous line belongs, or the end of the buffer."
+to which the end of the previous line belongs, or the end of the buffer.
+Returns the count of paragraphs left to move."
(interactive "_p") ; XEmacs
(or arg (setq arg 1))
- (let* ((fill-prefix-regexp
+ (let* ((opoint (point))
+ (fill-prefix-regexp
(and fill-prefix (not (equal fill-prefix ""))
(not paragraph-ignore-fill-prefix)
(regexp-quote fill-prefix)))
@@ -168,70 +204,74 @@
;; starting at the left-margin. This allows paragraph commands to
;; work normally with indented text.
;; This hack will not find problem cases like "whatever\\|^something".
- (paragraph-start (if (and (not (equal "" paragraph-start))
- (equal ?^ (aref paragraph-start 0)))
- (substring paragraph-start 1)
- paragraph-start))
- (paragraph-separate (if (and (not (equal "" paragraph-start))
- (equal ?^ (aref paragraph-separate 0)))
- (substring paragraph-separate 1)
- paragraph-separate))
- (paragraph-separate
+ (parstart (if (and (not (equal "" paragraph-start))
+ (equal ?^ (aref paragraph-start 0)))
+ (substring paragraph-start 1)
+ paragraph-start))
+ (parsep (if (and (not (equal "" paragraph-separate))
+ (equal ?^ (aref paragraph-separate 0)))
+ (substring paragraph-separate 1)
+ paragraph-separate))
+ (parsep
(if fill-prefix-regexp
- (concat paragraph-separate "\\|"
+ (concat parsep "\\|"
fill-prefix-regexp "[ \t]*$")
- paragraph-separate))
+ parsep))
;; This is used for searching.
- (sp-paragraph-start (concat "^[ \t]*\\(" paragraph-start "\\)"))
- start)
+ (sp-parstart (concat "^[ \t]*\\(?:" parstart "\\|" parsep
"\\)"))
+ start found-start)
(while (and (< arg 0) (not (bobp)))
- (if (and (not (looking-at paragraph-separate))
+ (if (and (not (looking-at parsep))
(re-search-backward "^\n" (max (1- (point)) (point-min)) t)
- (looking-at paragraph-separate))
- nil
+ (looking-at parsep))
+ (setq arg (1+ arg))
(setq start (point))
;; Move back over paragraph-separating lines.
(backward-char 1) (beginning-of-line)
(while (and (not (bobp))
(progn (move-to-left-margin)
- (looking-at paragraph-separate)))
- (forward-line -1))
+ (looking-at parsep)))
+ (forward-line -1))
(if (bobp)
nil
+ (setq arg (1+ arg))
;; Go to end of the previous (non-separating) line.
(end-of-line)
;; Search back for line that starts or separates paragraphs.
(if (if fill-prefix-regexp
- ;; There is a fill prefix; it overrides paragraph-start.
+ ;; There is a fill prefix; it overrides parstart.
(let (multiple-lines)
(while (and (progn (beginning-of-line) (not (bobp)))
(progn (move-to-left-margin)
- (not (looking-at paragraph-separate)))
+ (not (looking-at parsep)))
(looking-at fill-prefix-regexp))
- (if (not (= (point) start))
- (setq multiple-lines t))
+ (unless (= (point) start)
+ (setq multiple-lines t))
(forward-line -1))
(move-to-left-margin)
- ;; Don't move back over a line before the paragraph
- ;; which doesn't start with fill-prefix
- ;; unless that is the only line we've moved over.
- (and (not (looking-at fill-prefix-regexp))
- multiple-lines
- (forward-line 1))
+ ;; This deleted code caused a long hanging-indent line
+ ;; not to be filled together with the following lines.
+ ;; ;; Don't move back over a line before the paragraph
+ ;; ;; which doesn't start with fill-prefix
+ ;; ;; unless that is the only line we've moved over.
+ ;; (and (not (looking-at fill-prefix-regexp))
+ ;; multiple-lines
+ ;; (forward-line 1))
(not (bobp)))
- (while (and (re-search-backward sp-paragraph-start nil 1)
+ (while (and (re-search-backward sp-parstart nil 1)
+ (setq found-start t)
;; Found a candidate, but need to check if it is a
- ;; REAL paragraph-start.
- (not (bobp))
+ ;; REAL parstart.
(progn (setq start (point))
(move-to-left-margin)
- (not (looking-at paragraph-separate)))
- (or (not (looking-at paragraph-start))
- (and use-hard-newlines
- (not (get-text-property (1- start)
- 'hard)))))
+ (not (looking-at parsep)))
+ (not (and (looking-at parstart)
+ (or (not use-hard-newlines)
+ (get-text-property (1- start) 'hard)
+ (bobp)))))
+ (setq found-start nil)
(goto-char start))
- (> (point) (point-min)))
+ found-start)
;; Found one.
(progn
;; Move forward over paragraph separators.
@@ -239,7 +279,7 @@
;; because we know we moved back over a non-separator.
(while (and (not (eobp))
(progn (move-to-left-margin)
- (looking-at paragraph-separate)))
+ (looking-at parsep)))
(forward-line 1))
;; If line before paragraph is just margin, back up to there.
(end-of-line 0)
@@ -249,38 +289,44 @@
(if (not (bolp))
(forward-line 1))))
;; No starter or separator line => use buffer beg.
- (goto-char (point-min)))))
- (setq arg (1+ arg)))
+ (goto-char (point-min))))))
+
(while (and (> arg 0) (not (eobp)))
- ;; Move forward over separator lines, and one more line.
- (while (prog1 (and (not (eobp))
- (progn (move-to-left-margin) (not (eobp)))
- (looking-at paragraph-separate))
- (forward-line 1)))
+ ;; Move forward over separator lines...
+ (while (and (not (eobp))
+ (progn (move-to-left-margin) (not (eobp)))
+ (looking-at parsep))
+ (forward-line 1))
+ (unless (eobp) (setq arg (1- arg)))
+ ;; ... and one more line.
+ (forward-line 1)
(if fill-prefix-regexp
- ;; There is a fill prefix; it overrides paragraph-start.
+ ;; There is a fill prefix; it overrides parstart.
(while (and (not (eobp))
(progn (move-to-left-margin) (not (eobp)))
- (not (looking-at paragraph-separate))
+ (not (looking-at parsep))
(looking-at fill-prefix-regexp))
(forward-line 1))
- (while (and (re-search-forward sp-paragraph-start nil 1)
+ (while (and (re-search-forward sp-parstart nil 1)
(progn (setq start (match-beginning 0))
(goto-char start)
(not (eobp)))
(progn (move-to-left-margin)
- (not (looking-at paragraph-separate)))
- (or (not (looking-at paragraph-start))
+ (not (looking-at parsep)))
+ (or (not (looking-at parstart))
(and use-hard-newlines
(not (get-text-property (1- start) 'hard)))))
(forward-char 1))
(if (< (point) (point-max))
- (goto-char start)))
- (setq arg (1- arg)))))
+ (goto-char start))))
+ (constrain-to-field nil opoint t)
+ ;; Return the number of steps that could not be done.
+ arg))
(defun backward-paragraph (&optional arg)
"Move backward to start of paragraph.
-With arg N, do it N times; negative arg -N means move forward N paragraphs.
+With argument ARG, do it ARG times;
+a negative argument ARG = -N means move forward N paragraphs.
A paragraph start is the beginning of a line which is a
`first-line-of-paragraph' or which is ordinary text and follows a
@@ -296,16 +342,29 @@
(defun mark-paragraph (&optional arg)
"Put point at beginning of this paragraph, mark at end.
The paragraph marked is the one that contains point or follows point.
-With arg N, puts mark at end of following N paragraphs;
-negative arg -N means point is put at end of this paragraph, mark is put
-at beginning of this or a previous paragraph."
+
+With argument ARG, puts mark at end of a following paragraph, so that
+the number of paragraphs marked equals ARG.
+
+If ARG is negative, point is put at end of this paragraph, mark is put
+at beginning of this or a previous paragraph.
+
+If this command is repeated, it marks the next ARG paragraphs after (or
+before, if arg is negative) the ones already marked."
(interactive "p")
(unless arg (setq arg 1))
(when (zerop arg)
(error "Cannot mark zero paragraphs"))
- (forward-paragraph arg)
- (push-mark nil t t)
- (backward-paragraph arg))
+ (cond ((and (eq last-command this-command) (mark t))
+ (set-mark
+ (save-excursion
+ (goto-char (mark))
+ (forward-paragraph arg)
+ (point))))
+ (t
+ (forward-paragraph arg)
+ (push-mark nil t t)
+ (backward-paragraph arg))))
(defun kill-paragraph (arg)
"Kill forward to end of paragraph.
@@ -359,18 +418,23 @@
sentences. A paragraph boundary also terminates a sentence."
(interactive "_p") ; XEmacs
(or arg (setq arg 1))
- (while (< arg 0)
- (let ((par-beg (save-excursion (start-of-paragraph-text) (point))))
- (if (re-search-backward (concat sentence-end "[^ \t\n]") par-beg t)
- (goto-char (1- (match-end 0)))
- (goto-char par-beg)))
- (setq arg (1+ arg)))
- (while (> arg 0)
- (let ((par-end (save-excursion (end-of-paragraph-text) (point))))
- (if (re-search-forward sentence-end par-end t)
- (skip-chars-backward " \t\n")
- (goto-char par-end)))
- (setq arg (1- arg))))
+ (let ((opoint (point)))
+ (while (< arg 0)
+ (let ((pos (point))
+ (par-beg (save-excursion (start-of-paragraph-text) (point))))
+ (if (and (re-search-backward sentence-end par-beg t)
+ (or (< (match-end 0) pos)
+ (re-search-backward sentence-end par-beg t)))
+ (goto-char (match-end 0))
+ (goto-char par-beg)))
+ (setq arg (1+ arg)))
+ (while (> arg 0)
+ (let ((par-end (save-excursion (end-of-paragraph-text) (point))))
+ (if (re-search-forward sentence-end par-end t)
+ (skip-chars-backward " \t\n")
+ (goto-char par-end)))
+ (setq arg (1- arg)))
+ (constrain-to-field nil opoint t)))
(defun backward-sentence (&optional arg)
"Move backward to start of sentence. With arg, do it arg times.
@@ -392,14 +456,18 @@
(kill-region (point) (progn (backward-sentence arg) (point))))
(defun mark-end-of-sentence (arg)
- "Put mark at end of sentence. Arg works as in `forward-sentence'."
+ "Put mark at end of sentence. Arg works as in `forward-sentence'.
+If this command is repeated, it marks the next ARG sentences after the
+ones already marked."
(interactive "p")
;; FSF Version:
-; (push-mark
-; (save-excursion
-; (forward-sentence arg)
-; (point))
-; nil t))
+; (push-mark
+; (save-excursion
+; (if (and (eq last-command this-command) (mark t))
+; (goto-char (mark)))
+; (forward-sentence arg)
+; (point))
+; nil t))
(mark-something 'mark-end-of-sentence 'forward-sentence arg))
(defun mark-end-of-line (arg)
@@ -407,10 +475,13 @@
(interactive "p")
(mark-something 'mark-end-of-line 'end-of-line arg))
-
(defun transpose-sentences (arg)
"Interchange this (next) and previous sentence."
(interactive "*p")
(transpose-subr 'forward-sentence arg))
+
+;;; Local Variables:
+;;; coding: iso-2022-7bit
+;;; End:
;;; paragraphs.el ends here
1.18.2.1 +3 -2 XEmacs/xemacs/lisp/process.el
Index: process.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/process.el,v
retrieving revision 1.18
retrieving revision 1.18.2.1
diff -u -r1.18 -r1.18.2.1
--- process.el 2003/01/05 18:38:37 1.18
+++ process.el 2005/03/15 05:20:54 1.18.2.1
@@ -66,8 +66,9 @@
Process output goes at end of that buffer, unless you specify
an output stream or filter function to handle the output.
BUFFER may be also nil, meaning that this process is not associated
- with any buffer
-Third arg is command name, the name of a shell command.
+ with any buffer.
+Variables `shell-file-name' and `shell-command-switch' are used to
+start the process.
Remaining arguments are the arguments for the command.
Wildcards and redirection are handled as usual in the shell."
;; We used to use `exec' to replace the shell with the command,
1.7.34.1 +95 -63 XEmacs/xemacs/lisp/register.el
Index: register.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/register.el,v
retrieving revision 1.7
retrieving revision 1.7.34.1
diff -u -r1.7 -r1.7.34.1
--- register.el 1998/07/12 07:30:39 1.7
+++ register.el 2005/03/15 05:20:54 1.7.34.1
@@ -1,4 +1,4 @@
-;;; register.el --- register commands for Emacs.
+;;; register.el --- register commands for Emacs
;; Copyright (C) 1985, 1993, 1994, 1997 Free Software Foundation, Inc.
@@ -22,7 +22,7 @@
;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
;; 02111-1307, USA.
-;;; Synched up with: FSF 20.3
+;;; Synched up with: FSF 21.3
;;; Commentary:
@@ -57,8 +57,7 @@
(let ((aelt (assq register register-alist)))
(if aelt
(setcdr aelt value)
- (setq aelt (cons register value))
- (setq register-alist (cons aelt register-alist)))
+ (push (cons register value) register-alist))
value))
(defun point-to-register (register &optional arg)
@@ -67,6 +66,8 @@
Use \\[jump-to-register] to go to that location or restore that configuration.
Argument is a character, naming the register."
(interactive "cPoint to register: \nP")
+ ;; Turn the marker into a file-ref if the buffer is killed.
+ (add-hook 'kill-buffer-hook 'register-swap-out nil t)
(set-register register
(if arg (list (current-frame-configuration) (point-marker))
(point-marker))))
@@ -125,21 +126,17 @@
(t
(error "Register doesn't contain a buffer position or
configuration")))))
-;; Turn markers into file-query references when a buffer is killed.
(defun register-swap-out ()
+ "Turn markers into file-query references when a buffer is killed."
(and buffer-file-name
- (let ((tail register-alist))
- (while tail
- (and (markerp (cdr (car tail)))
- (eq (marker-buffer (cdr (car tail))) (current-buffer))
- (setcdr (car tail)
- (list 'file-query
- buffer-file-name
- (marker-position (cdr (car tail))))))
- (setq tail (cdr tail))))))
+ (dolist (elem register-alist)
+ (and (markerp (cdr elem))
+ (eq (marker-buffer (cdr elem)) (current-buffer))
+ (setcdr elem
+ (list 'file-query
+ buffer-file-name
+ (marker-position (cdr elem))))))))
-(add-hook 'kill-buffer-hook 'register-swap-out)
-
(defun number-to-register (number register)
"Store a number in a register.
Two args, NUMBER and REGISTER (a character, naming the register).
@@ -147,7 +144,7 @@
at point, and point moves to the end of that number.
Interactively, NUMBER is the prefix arg (none means nil)."
(interactive "P\ncNumber to register: ")
- (set-register register
+ (set-register register
(if number
(prefix-numeric-value number)
(if (looking-at "\\s-*-?[0-9]+")
@@ -172,54 +169,89 @@
(if (null val)
(message "Register %s is empty" (single-key-description register))
(with-output-to-temp-buffer "*Output*"
- (princ "Register ")
- (princ (single-key-description register))
- (princ " contains ")
- (cond
- ((numberp val)
- (princ val))
+ (describe-register-1 register t)))))
+
+(defun list-registers ()
+ "Display a list of nonempty registers saying briefly what they contain."
+ (interactive)
+ (let ((list (copy-sequence register-alist)))
+ (setq list (sort list (lambda (a b) (< (car a) (car b)))))
+ (with-output-to-temp-buffer "*Output*"
+ (dolist (elt list)
+ (when (get-register (car elt))
+ (describe-register-1 (car elt))
+ (terpri))))))
+
+(defun describe-register-1 (register &optional verbose)
+ (princ "Register ")
+ (princ (single-key-description register))
+ (princ " contains ")
+ (let ((val (get-register register)))
+ (cond
+ ((numberp val)
+ (princ val))
+
+ ((markerp val)
+ (let ((buf (marker-buffer val)))
+ (if (null buf)
+ (princ "a marker in no buffer")
+ (princ "a buffer position:\n buffer ")
+ (princ (buffer-name buf))
+ (princ ", position ")
+ (princ (marker-position val)))))
+
+ ((and (consp val) (window-configuration-p (car val)))
+ (princ "a window configuration."))
- ((markerp val)
- (let ((buf (marker-buffer val)))
- (if (null buf)
- (princ "a marker in no buffer")
- (princ "a buffer position:\nbuffer ")
- (princ (buffer-name buf))
- (princ ", position ")
- (princ (marker-position val)))))
-
- ((and (consp val) (window-configuration-p (car val)))
- (princ "a window configuration."))
-
- ((and (consp val) (frame-configuration-p (car val)))
- (princ "a frame configuration."))
-
- ((and (consp val) (eq (car val) 'file))
- (princ "the file ")
- (prin1 (cdr val))
- (princ "."))
-
- ((and (consp val) (eq (car val) 'file-query))
- (princ "a file-query reference:\nfile ")
- (prin1 (car (cdr val)))
- (princ ",\nposition ")
- (princ (car (cdr (cdr val))))
- (princ "."))
-
- ((consp val)
- (princ "the rectangle:\n")
- (while val
- (princ (car val))
- (terpri)
- (setq val (cdr val))))
-
- ((stringp val)
- (princ "the text:\n")
- (princ val))
+ ((and (consp val) (frame-configuration-p (car val)))
+ (princ "a frame configuration."))
+
+ ((and (consp val) (eq (car val) 'file))
+ (princ "the file ")
+ (prin1 (cdr val))
+ (princ "."))
+
+ ((and (consp val) (eq (car val) 'file-query))
+ (princ "a file-query reference:\n file ")
+ (prin1 (car (cdr val)))
+ (princ ",\n position ")
+ (princ (car (cdr (cdr val))))
+ (princ "."))
+ ((consp val)
+ (if verbose
+ (progn
+ (princ "the rectangle:\n")
+ (while val
+ (princ " ")
+ (princ (car val))
+ (terpri)
+ (setq val (cdr val))))
+ (princ "a rectangle starting with ")
+ (princ (car val))))
+
+ ((stringp val)
+ (remove-list-of-text-properties 0 (length val)
+ yank-excluded-properties val)
+ (if verbose
+ (progn
+ (princ "the text:\n")
+ (princ val))
+ (cond
+ ;; Extract first N characters starting with first non-whitespace.
+ ((string-match (format "[^ \t\n].\\{,%d\\}"
+ ;; Deduct 6 for the spaces inserted below.
+ (min 20 (max 0 (- (window-width) 6))))
+ val)
+ (princ "text starting with\n ")
+ (princ (match-string 0 val)))
+ ((string-match "^[ \t\n]+$" val)
+ (princ "whitespace"))
(t
- (princ "Garbage:\n")
- (prin1 val)))))))
+ (princ "the empty string")))))
+ (t
+ (princ "Garbage:\n")
+ (if verbose (prin1 val))))))
(defun insert-register (register &optional arg)
"Insert contents of register REGISTER. (REGISTER is a character.)
@@ -233,7 +265,7 @@
((consp val)
(insert-rectangle val))
((stringp val)
- (insert val))
+ (insert-for-yank val))
((numberp val)
(princ val (current-buffer)))
((and (markerp val) (marker-position val))
1.10.2.1 +24 -20 XEmacs/xemacs/lisp/replace.el
Index: replace.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/replace.el,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -r1.10 -r1.10.2.1
--- replace.el 2003/05/12 05:12:10 1.10
+++ replace.el 2005/03/15 05:20:54 1.10.2.1
@@ -247,7 +247,9 @@
(let ((matched-text nil)
(curmatch-start (point))
- (limit (copy-marker (point-max))))
+ (limit (copy-marker (point-max)))
+ (matched-text-buffer (generate-new-buffer " *matched-text*"))
+ lines-matched)
;; Limit search if limits were specified.
(when end (setq limit (copy-marker end)))
@@ -259,32 +261,33 @@
;; curmatch-start is first char not preserved by previous match.
(if (not (re-search-forward regexp limit 'move))
(let ((curmatch-end limit))
- (setq matched-text (concat matched-text (buffer-substring
curmatch-start curmatch-end)))
+ (append-to-buffer matched-text-buffer curmatch-start curmatch-end)
(if delete (delete-region curmatch-start curmatch-end)))
(let ((curmatch-end (save-excursion (goto-char (match-beginning 0))
- (beginning-of-line)
- (point))))
+ (beginning-of-line)
+ (point))))
;; Now curmatch-end is first char preserved by the new match.
(if (< curmatch-start curmatch-end)
(progn
- (setq matched-text (concat matched-text (buffer-substring
curmatch-start curmatch-end)))
+ (append-to-buffer matched-text-buffer curmatch-start curmatch-end)
(if delete (delete-region curmatch-start curmatch-end))))))
(setq curmatch-start (save-excursion (forward-line 1)
- (point)))
+ (point)))
;; If the match was empty, avoid matching again at same place.
(and (not (eobp)) (= (match-beginning 0) (match-end 0))
(forward-char 1)))
;; If any lines were matched and KILL is non-nil, insert the
;; matched lines into the kill ring.
+ (setq matched-text (buffer-string matched-text-buffer))
(if (and matched-text kill) (kill-new matched-text))
;; Return the number of matched lines.
- (with-temp-buffer
- ;; Use concat to make a string even if matched-text is nil.
- (insert (concat matched-text))
- (count-lines (point-min) (point-max)))
- ))))
+ (setq lines-matched
+ (with-current-buffer matched-text-buffer
+ (count-lines (point-min) (point-max))))
+ (kill-buffer matched-text-buffer)
+ lines-matched))))
(define-function 'keep-lines 'delete-non-matching-lines)
(defun delete-non-matching-lines (regexp)
@@ -358,8 +361,9 @@
(let ((matched-text nil)
(curmatch-start nil)
(curmatch-end nil)
- (limit nil))
-
+ (limit nil)
+ (matched-text-buffer (generate-new-buffer " *matched-text*"))
+ lines-matched)
;; Limit search if limits were specified.
(when beg (goto-char beg))
(when end (setq limit (copy-marker end)))
@@ -370,17 +374,17 @@
(beginning-of-line)
(point)))
(setq curmatch-end (progn (forward-line 1) (point)))
- (setq matched-text (concat matched-text (buffer-substring curmatch-start
curmatch-end)))
+ (append-to-buffer matched-text-buffer curmatch-start curmatch-end)
(if delete (delete-region curmatch-start curmatch-end)))
-
+ (setq matched-text (buffer-string matched-text-buffer))
(if (and matched-text kill) (kill-new matched-text))
;; Return the number of matched lines.
- (with-temp-buffer
- ;; Use concat to make a string even if matched-text is nil.
- (insert (concat matched-text))
- (count-lines (point-min) (point-max)))
- ))))
+ (setq lines-matched
+ (with-current-buffer matched-text-buffer
+ (count-lines (point-min) (point-max))))
+ (kill-buffer matched-text-buffer)
+ lines-matched))))
(define-function 'flush-lines 'delete-matching-lines)
(defun delete-matching-lines (regexp)
1.13.6.1 +192 -70 XEmacs/xemacs/lisp/select.el
Index: select.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/select.el,v
retrieving revision 1.13
retrieving revision 1.13.6.1
diff -u -r1.13 -r1.13.6.1
--- select.el 2002/05/23 11:46:10 1.13
+++ select.el 2005/03/15 05:20:55 1.13.6.1
@@ -33,13 +33,25 @@
;;; Code:
-(defvar selected-text-type
- (if (featurep 'mule) '(COMPOUND_TEXT STRING) 'STRING)
- "The type atom used to obtain selections from the X server.
-Can be either a valid X selection data type, or a list of such types.
-COMPOUND_TEXT and STRING are the most commonly used data types.
-If a list is provided, the types are tried in sequence until
-there is a successful conversion.")
+;; We prefer UTF8_STRING to COMPOUND_TEXT because, even though the latter
+;; gives us more information when taking data from other XEmacs invocations,
+;; Mozilla will happily give us broken COMPOUND_TEXT where a non-broken
+;; UTF8_STRING is available.
+(defvar selection-preferred-types
+ (let ((res '(UTF8_STRING COMPOUND_TEXT STRING image/png image/gif
+ image/jpeg image/tiff image/xpm image/xbm)))
+ (unless (featurep 'mule) (delq 'COMPOUND_TEXT res))
+ res)
+ "An ordered list of X11 type atoms for selections we want to receive.
+We prefer UTF8_STRING over COMPOUND_TEXT, for compatibility with a certain
+widely-used browser suite, and COMPOUND_TEXT over STRING. (COMPOUND_TEXT
+isn't available on non-Mule.) We also accept several image types.
+
+For compatibility, this can be a single atom. ")
+
+;; Renamed because it was just ridiculous for it to be mostly image formats
+;; and named selected-text-type.
+(define-obsolete-variable-alias 'selected-text-type
'selection-preferred-types)
(defvar selection-sets-clipboard nil
"Controls the selection's relationship to the clipboard.
@@ -56,7 +68,7 @@
(cut-copy-clear-internal 'copy)))
(defun kill-primary-selection ()
- "Copy the selection to the Clipboard and the kill ring, then deleted it.
+ "Copy the selection to the Clipboard and the kill ring, then delete it.
This is similar to the command \\[kill-region] except that it will
save to the Clipboard even if that command doesn't, and it handles rectangles
properly."
@@ -97,34 +109,56 @@
(defun get-selection-no-error (&optional type data-type)
"Return the value of a window-system selection.
-The argument TYPE (default `PRIMARY') says which selection,
-and the argument DATA-TYPE (default `STRING', or `COMPOUND_TEXT' under Mule)
-says how to convert the data. Returns NIL if there is no selection."
+The argument TYPE (default `PRIMARY') says which selection, and the argument
+DATA-TYPE (defaulting to the value of `selection-preferred-types'), says how
+to convert the data. Returns NIL if there is no selection."
(condition-case nil (get-selection type data-type) (t nil)))
(defun get-selection (&optional type data-type)
"Return the value of a window-system selection.
-The argument TYPE (default `PRIMARY') says which selection,
-and the argument DATA-TYPE (default `STRING', or `COMPOUND_TEXT' under Mule)
-says how to convert the data. If there is no selection an error is signalled.
-Not suitable in a `interprogram-paste-function', q.v."
+The argument TYPE (default `PRIMARY') says which selection, and the argument
+DATA-TYPE (defaulting to the value of, and compatible with,
+`selection-preferred-types') says how to convert the data. If
+there is no selection an error is signalled. Not suitable in a
+`interprogram-paste-function', q.v."
(or type (setq type 'PRIMARY))
- (or data-type (setq data-type selected-text-type))
+ (or data-type (setq data-type selection-preferred-types))
(if (consp data-type)
- (condition-case err
- (get-selection-internal type (car data-type))
- (selection-conversion-error
- (if (cdr data-type)
- (get-selection type (cdr data-type))
- (signal (car err) (cdr err)))))
+ ;; TARGETS is a vector; we want a list so we can memq --> append it to
+ ;; nil.
+ (let ((targets (append (get-selection-internal type 'TARGETS) nil))
+ res)
+ (catch 'converted
+ (if targets
+ (dolist (current-preference data-type)
+ (condition-case err
+ (if (and (memq current-preference targets)
+ (setq res (get-selection-internal
+ type current-preference)))
+ (throw 'converted res))
+ (selection-conversion-error
+ nil))))
+ ;; The source app didn't offer us anything compatible in TARGETS,
+ ;; or they're not negotiating at all. (That is, we're probably not
+ ;; on X11.) Try to convert to the types specified by our caller,
+ ;; and throw an error if the last one of those fails.
+ (while data-type
+ (condition-case err
+ (progn
+ (setq res (get-selection-internal type (car data-type)))
+ (throw 'converted res))
+ (selection-conversion-error
+ (if (cdr data-type)
+ (setq data-type (pop data-type))
+ (signal (car err) (cdr err))))))))
(get-selection-internal type data-type)))
(defun get-selection-foreign (&optional type data-type)
"Return the value of a window-system selection, or nil if XEmacs owns it.
-The argument TYPE (default `PRIMARY') says which selection,
-and the argument DATA-TYPE (default `STRING', or `COMPOUND_TEXT' under Mule)
-says how to convert the data. If there is no selection an error is signalled.
-See `interprogram-paste-function' for more information."
+The argument TYPE (default `PRIMARY') says which selection, and the argument
+DATA-TYPE (defaulting to the value of `selection-preferred-types' which see)
+says how to convert the data. If there is no selection an error is
+signalled. See `interprogram-paste-function' for more information."
(unless (selection-owner-p type)
(get-selection type data-type)))
@@ -255,6 +289,8 @@
;; Given a selection, this makes an extent in the buffer which holds that
;; selection, for highlighting purposes. If the selection isn't associated
;; with a buffer, this does nothing.
+ ;;
+ ;; Something similar needs to be hooked into the rectangle functions.
(let ((buffer nil)
(valid (and (extentp previous-extent)
(extent-object previous-extent)
@@ -391,8 +427,9 @@
suitable internal representation otherwise."
(when value
(let ((handler-fn (cdr (assq type selection-converter-in-alist))))
- (when handler-fn
- (apply handler-fn (list selection type value))))))
+ (if handler-fn
+ (apply handler-fn (list selection type value))
+ value))))
(defun select-convert-out (selection type value)
"Attempt to convert the specified internal VALUE for the specified DATA-TYPE
@@ -439,13 +476,42 @@
(buffer-substring (car value) (cdr value)))))
(t nil)))
+(defun select-convert-to-timestamp (selection type value)
+ (let ((ts (get-xemacs-selection-timestamp selection)))
+ (if ts (cons 'TIMESTAMP ts))))
+
+(defun select-convert-to-utf-8-text (selection type value)
+ (cond ((stringp value)
+ (cons 'UTF8_STRING (encode-coding-string value 'utf-8)))
+ ((extentp value)
+ (save-excursion
+ (set-buffer (extent-object value))
+ (save-restriction
+ (widen)
+ (cons 'UTF8_STRING
+ (encode-coding-string
+ (buffer-substring (extent-start-position value)
+ (extent-end-position value)) 'utf-8)))))
+ ((and (consp value)
+ (markerp (car value))
+ (markerp (cdr value)))
+ (or (eq (marker-buffer (car value)) (marker-buffer (cdr value)))
+ (signal 'error
+ (list "markers must be in the same buffer"
+ (car value) (cdr value))))
+ (save-excursion
+ (set-buffer (or (marker-buffer (car value))
+ (error "selection is in a killed buffer")))
+ (save-restriction
+ (widen)
+ (cons 'UTF8_STRING (encode-coding-string
+ (buffer-substring (car value) (cdr value))
+ 'utf-8)))))
+ (t nil)))
+
(defun select-coerce-to-text (selection type value)
(select-convert-to-text selection type value))
-(defun select-convert-from-text (selection type value)
- (when (stringp value)
- value))
-
(defun select-convert-to-string (selection type value)
(let ((outval (select-convert-to-text selection type value)))
;; force the string to be not in Compound Text format. This grubby
@@ -477,9 +543,6 @@
(cons (ash value -16) (logand value 65535))
nil)))
-(defun select-convert-from-length (selection type value)
- (select-convert-to-length selection type value))
-
(defun select-convert-to-targets (selection type value)
;; return a vector of atoms, but remove duplicates first.
(let* ((all (cons 'TIMESTAMP (mapcar 'car selection-converter-alist)))
@@ -509,10 +572,6 @@
(error "selection is in a killed buffer"))))
(t nil)))
-(defun select-convert-from-filename (selection type value)
- (when (stringp value)
- value))
-
(defun select-convert-to-charpos (selection type value)
(let (a b tmp)
(cond ((cond ((extentp value)
@@ -682,35 +741,89 @@
(t nil)
))
+(defun select-convert-from-ip-address (selection type value)
+ (if (and (stringp value)
+ (= (length value) 4))
+ (format "%d.%d.%d.%d"
+ (aref value 0) (aref value 1) (aref value 2) (aref value 3))))
+
(defun select-convert-to-atom (selection type value)
(and (symbolp value) value))
+(defun select-convert-from-utf-8-text (selection type value)
+ (decode-coding-string value 'utf-8))
+
+(defun select-convert-from-utf-16-le-text (selection type value)
+ (decode-coding-string value 'utf-16-le))
+
+;; Image conversion.
+(defun select-convert-from-image-data (image-type value)
+ "Take an image type specification--one of the image types this XEmacs
+supports--and some data in that format, return a space, with a glyph
+corresponding to that data as an end-glyph extent property of that space. "
+ (let* ((str (make-string 1 ?\ ))
+ (extent (make-extent 0 1 str))
+ (glyph (make-glyph (vector image-type ':data value))))
+ (when glyph
+ (set-extent-property extent 'invisible t)
+ (set-extent-property extent 'start-open t)
+ (set-extent-property extent 'end-open t)
+ (set-extent-property extent 'duplicable t)
+ (set-extent-property extent 'atomic t)
+ (set-extent-end-glyph extent glyph)
+ str)))
+
+;; Could automate defining these functions these with a macro, but damned if
+;; I can get that to work. Anyway, this is more readable.
+
+(defun select-convert-from-image/gif (selection type value)
+ (if (featurep 'gif) (select-convert-from-image-data 'gif value)))
+
+(defun select-convert-from-image/jpeg (selection type value)
+ (if (featurep 'jpeg) (select-convert-from-image-data 'jpeg value)))
+
+(defun select-convert-from-image/png (selection type value)
+ (if (featurep 'png) (select-convert-from-image-data 'png value)))
+
+(defun select-convert-from-image/tiff (selection type value)
+ (if (featurep 'tiff) (select-convert-from-image-data 'tiff value)))
+
+(defun select-convert-from-image/xpm (selection type value)
+ (if (featurep 'xpm) (select-convert-from-image-data 'xpm value)))
+
+(defun select-convert-from-image/xbm (selection type value)
+ (if (featurep 'xbm) (select-convert-from-image-data 'xbm value)))
+
;;; CF_xxx conversions
(defun select-convert-from-cf-text (selection type value)
- (let ((value (decode-coding-string value 'mswindows-multibyte)))
- (replace-in-string (if (string-match "\0" value)
- (substring value 0 (match-beginning 0))
- value)
- "\\(\r\n\\|\n\r\\)" "\n" t)))
+ (if (find-coding-system 'mswindows-multibyte)
+ (let ((value (decode-coding-string value 'mswindows-multibyte)))
+ (replace-in-string (if (string-match "\0" value)
+ (substring value 0 (match-beginning 0))
+ value)
+ "\\(\r\n\\|\n\r\\)" "\n" t))))
(defun select-convert-from-cf-unicodetext (selection type value)
- (let ((value (decode-coding-string value 'mswindows-unicode)))
- (replace-in-string (if (string-match "\0" value)
- (substring value 0 (match-beginning 0))
- value)
- "\\(\r\n\\|\n\r\\)" "\n" t)))
+ (if (find-coding-system 'mswindows-unicode)
+ (let ((value (decode-coding-string value 'mswindows-unicode)))
+ (replace-in-string (if (string-match "\0" value)
+ (substring value 0 (match-beginning 0))
+ value)
+ "\\(\r\n\\|\n\r\\)" "\n" t))))
(defun select-convert-to-cf-text (selection type value)
- (let ((text (select-convert-to-text selection type value)))
- (encode-coding-string
- (concat (replace-in-string text "\n" "\r\n" t)
"\0")
- 'mswindows-multibyte)))
+ (if (find-coding-system 'mswindows-multibyte)
+ (let ((text (select-convert-to-text selection type value)))
+ (encode-coding-string
+ (concat (replace-in-string text "\n" "\r\n" t) "\0")
+ 'mswindows-multibyte))))
(defun select-convert-to-cf-unicodetext (selection type value)
- (let ((text (select-convert-to-text selection type value)))
- (encode-coding-string
- (concat (replace-in-string text "\n" "\r\n" t)
"\0")
- 'mswindows-unicode)))
+ (if (find-coding-system 'mswindows-unicode)
+ (let ((text (select-convert-to-text selection type value)))
+ (encode-coding-string
+ (concat (replace-in-string text "\n" "\r\n" t) "\0")
+ 'mswindows-unicode))))
;;; Appenders
(defun select-append-to-text (selection type value1 value2)
@@ -788,7 +901,9 @@
;; Types listed in here can be selections of XEmacs
(setq selection-converter-out-alist
- '((TEXT . select-convert-to-text)
+ '((TIMESTAMP . select-convert-to-timestamp)
+ (UTF8_STRING . select-convert-to-utf-8-text)
+ (TEXT . select-convert-to-text)
(STRING . select-convert-to-string)
(COMPOUND_TEXT . select-convert-to-compound-text)
(TARGETS . select-convert-to-targets)
@@ -813,21 +928,28 @@
;; Types listed here can be selections foreign to XEmacs
(setq selection-converter-in-alist
'(; Specific types that get handled by generic converters
- (COMPOUND_TEXT . select-convert-from-text)
- (SOURCE_LOC . select-convert-from-text)
- (OWNER_OS . select-convert-from-text)
- (HOST_NAME . select-convert-from-text)
- (USER . select-convert-from-text)
- (CLASS . select-convert-from-text)
- (NAME . select-convert-from-text)
- ; Generic types
(INTEGER . select-convert-from-integer)
- (TEXT . select-convert-from-text)
- (STRING . select-convert-from-text)
- (LENGTH . select-convert-from-length)
- (FILE_NAME . select-convert-from-filename)
+ (TIMESTAMP . select-convert-from-integer)
+ (LENGTH . select-convert-from-integer)
+ (LIST_LENGTH . select-convert-from-integer)
+ (CLIENT_WINDOW . select-convert-from-integer)
+ (PROCESS . select-convert-from-integer)
+ (IP_ADDRESS . select-convert-from-ip-address)
+ ;; We go after UTF8_STRING in preference to STRING because Mozilla,
+ ;; at least, does bad things with non-Latin-1 Unicode characters in
+ ;; STRING.
+ (UTF8_STRING . select-convert-from-utf-8-text)
(CF_TEXT . select-convert-from-cf-text)
(CF_UNICODETEXT . select-convert-from-cf-unicodetext)
+ (text/html . select-convert-from-utf-16-le-text) ; Mozilla
+ (text/_moz_htmlcontext . select-convert-from-utf-16-le-text)
+ (text/_moz_htmlinfo . select-convert-from-utf-16-le-text)
+ (image/png . select-convert-from-image/png)
+ (image/gif . select-convert-from-image/gif)
+ (image/jpeg . select-convert-from-image/jpeg )
+ (image/tiff . select-convert-from-image/tiff )
+ (image/xpm . select-convert-from-image/xpm)
+ (image/xbm . select-convert-from-image/xbm)
))
;; Types listed here have special coercion functions that can munge
1.20.2.1 +77 -293 XEmacs/xemacs/lisp/setup-paths.el
Index: setup-paths.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/setup-paths.el,v
retrieving revision 1.20
retrieving revision 1.20.2.1
diff -u -r1.20 -r1.20.2.1
--- setup-paths.el 2003/06/13 00:11:16 1.20
+++ setup-paths.el 2005/03/15 05:20:55 1.20.2.1
@@ -5,7 +5,7 @@
;; Copyright (C) 1995 Board of Trustees, University of Illinois
;; Copyright (C) 2003 Ben Wing.
-;; Author: Mike Sperber <sperber(a)informatik.uni-tuebingen.de>
+;; Author: Mike Sperber <mike(a)xemacs.orgx>
;; Maintainer: XEmacs Development Team
;; Keywords: internal, dumped
@@ -34,8 +34,11 @@
;; This file contains functions and variables that describe and construct
;; the various paths into the XEmacs hierarchy from a global viewpoint.
-;; This file doesn't actually do anything.
+;; This file doesn't actually set any global variable, and doesn't
+;; contain any state---it just contains the functionality for
+;; searching directories and constructing paths.
+
;; It requires find-paths.el and packages.el.
;;; Code:
@@ -43,51 +46,6 @@
;(setq debug-paths t)
-;;; Path-related variables.
-;;; NOTE: Many of them (`lisp-directory', `data-directory', etc.) are
-;;; built-in.
-
-(defvar emacs-roots nil
- "List of plausible roots of the XEmacs hierarchy.
-This is a list of plausible directories in which to search for the important
-directories used by XEmacs at run-time, for example `exec-directory',
-`data-directory' and `lisp-directory'.
-
-Normally set at startup by calling `paths-find-emacs-roots'.")
-
-(defvar emacs-data-roots nil
- "List of plausible data roots of the XEmacs hierarchy.")
-
-(defvar user-init-directory-base ".xemacs"
- "Base of directory where user-installed init files may go.")
-
-(defvar user-init-directory
- (file-name-as-directory
- (paths-construct-path (list "~" user-init-directory-base)))
- "Directory where user-installed init files may go.")
-
-(defvar user-init-file-base "init.el"
- "Default name of the user init file if uncompiled.
-This should be used for migration purposes only.")
-
-(defvar user-init-file-base-list '("init.el")
- "List of allowed init files in the user's init directory.
-The first one found takes precedence. .elc files do not need to be listed.")
-
-(defvar user-home-init-file-base-list
- (append '(".emacs.el" ".emacs")
- (and (eq system-type 'windows-nt)
- '("_emacs.el" "_emacs")))
- "List of allowed init files in the user's home directory.
-The first one found takes precedence. .elc files do not need to be listed.")
-
-(defvar load-home-init-file nil
- "Non-nil if XEmacs should load the init file from the home directory.
-Otherwise, XEmacs will offer migration to the init directory.")
-
-(defvar load-user-init-file-p t
- "Non-nil if XEmacs should load the user's init file.")
-
(defvar paths-core-load-path-depth 0
"Depth of load-path searches in core Lisp paths.")
@@ -130,7 +88,9 @@
(defun paths-emacs-data-root-p (directory)
"Check if DIRECTORY is a plausible data installation root.
A data installation root is one containing data files that may be shared
-among multiple different versions of XEmacs, the packages in particular."
+among multiple different versions of XEmacs, the packages in particular.
+This serves as an additional filter to narrow down the list of plausible
+installation roots."
(or
;; installed
(paths-file-readable-directory-p (paths-construct-path (list directory
@@ -145,7 +105,9 @@
(paths-file-readable-directory-p (paths-construct-path (list directory
"etc"))))))
(defun paths-find-emacs-root (invocation-directory invocation-name)
- "Find the run-time root of XEmacs."
+ "Find the run-time root of XEmacs.
+INVOCATION-DIRECTORY is a directory containing the XEmacs executable.
+INVOCATION-NAME is the name of the executable itself."
(let* ((executable-file-name (paths-chase-symlink
(concat invocation-directory
invocation-name)))
@@ -159,7 +121,9 @@
(and (paths-emacs-root-p maybe-root-2)
maybe-root-2))))
-(defun paths-find-emacs-roots (root-p)
+(defun paths-find-emacs-roots (invocation-directory
+ invocation-name
+ root-p)
"Find all plausible installation roots for XEmacs.
This is a list of plausible directories in which to search for the important
directories used by XEmacs at run-time, for example `exec-directory',
@@ -184,25 +148,29 @@
installation-roots)))
(defun paths-find-site-lisp-directory (roots)
- "Find the site Lisp directory of the XEmacs hierarchy."
+ "Find the site Lisp directory of the XEmacs hierarchy.
+ROOTS is a list of installation roots."
(paths-find-site-directory roots "site-lisp"
nil
configure-site-directory))
(defun paths-find-site-module-directory (roots)
- "Find the site modules directory of the XEmacs hierarchy."
+ "Find the site modules directory of the XEmacs hierarchy.
+ROOTS is a list of installation roots."
(paths-find-site-directory roots "site-modules"
nil
configure-site-module-directory))
(defun paths-find-lisp-directory (roots)
- "Find the main Lisp directory of the XEmacs hierarchy."
+ "Find the main Lisp directory of the XEmacs hierarchy.
+ROOTS is a list of installation roots."
(paths-find-version-directory roots "lisp"
nil
configure-lisp-directory))
(defun paths-find-mule-lisp-directory (roots &optional lisp-directory)
- "Find the Mule Lisp directory of the XEmacs hierarchy."
+ "Find the Mule Lisp directory of the XEmacs hierarchy.
+ROOTS is a list of installation roots."
;; #### kludge
(if lisp-directory
(let ((guess
@@ -215,7 +183,8 @@
configure-mule-lisp-directory)))))
(defun paths-find-module-directory (roots)
- "Find the main modules directory of the XEmacs hierarchy."
+ "Find the main modules directory of the XEmacs hierarchy.
+ROOTS is a list of installation roots."
(paths-find-architecture-directory roots "modules"
nil configure-module-directory))
@@ -223,7 +192,14 @@
(roots early-package-load-path late-package-load-path last-package-load-path
lisp-directory
&optional site-lisp-directory mule-lisp-directory)
- "Construct the load path."
+ "Construct the complete load path.
+ROOTS is the list of installation roots.
+EARLY-PACKAGE-LOAD-PATH, LATE-PACKAGE-LOAD-PATH, and LAST-PACKAGE-LOAD-PATH
+are the load paths for the package hierarchies.
+SITE-LISP-DIRECTORY and MULE-LISP-DIRECTORY are optional directories to be
+included in the load path---SITE-LISP-DIRECTORY for the obsolete site-specific
+Lisp files, and MULE-LISP-DIRECTORY for the Mule Lisp files, which exist
+only in Mule installations."
(let* ((envvar-value (getenv "EMACSLOADPATH"))
(env-load-path
(and envvar-value
@@ -263,12 +239,19 @@
(and module-directory
(paths-find-recursive-load-path (list module-directory)
paths-core-load-path-depth))))
- (append env-module-path
+ (append env-module-path
site-module-load-path
module-load-path)))
-(defun paths-construct-info-path (roots early-packages late-packages last-packages)
- "Construct the info path."
+(defun paths-construct-info-path (roots
+ early-package-hierarchies
+ late-package-hierarchies
+ last-package-hierarchies)
+ "Construct the info path.
+ROOTS is the list of installation roots.
+EARLY-PACKAGE-HIERARCHIES, LATE-PACKAGE-HIERARCHIES, and
+LAST-PACKAGE-HIERARCHIES are lists of package hierarchy roots,
+respectively."
(let ((info-path-envval (getenv "INFOPATH")))
(paths-uniq-append
(append
@@ -278,9 +261,9 @@
configure-info-directory)))
(and info-directory
(list info-directory)))
- (packages-find-package-info-path early-packages)
- (packages-find-package-info-path late-packages)
- (packages-find-package-info-path last-packages)
+ (packages-find-package-info-path early-package-hierarchies)
+ (packages-find-package-info-path late-package-hierarchies)
+ (packages-find-package-info-path last-package-hierarchies)
(and info-path-envval
(paths-decode-directory-path info-path-envval 'drop-empties)))
(and (null info-path-envval)
@@ -289,259 +272,60 @@
(paths-directories-which-exist paths-default-info-directories))))))
(defun paths-find-doc-directory (roots)
- "Find the documentation directory."
+ "Find the documentation directory.
+ROOTS is the list of installation roots."
(paths-find-architecture-directory roots "lib-src" nil
configure-doc-directory))
(defun paths-find-exec-directory (roots)
- "Find the binary directory."
+ "Find the binary directory.
+ROOTS is the list of installation roots."
(paths-find-architecture-directory roots "lib-src"
nil configure-exec-directory))
(defun paths-construct-exec-path (roots exec-directory
- early-packages late-packages last-packages)
- "Find the binary path."
+ early-package-hierarchies
+ late-package-hierarchies
+ last-package-hierarchies)
+ "Find the binary path.
+ROOTS is the list of installation roots.
+EARLY-PACKAGE-HIERARCHIES, LATE-PACKAGE-HIERARCHIES, and
+LAST-PACKAGE-HIERARCHIES are lists of package hierarchy roots,
+respectively.
+EXEC-DIRECTORY is the directory of architecture-dependent files that
+come with XEmacs.
+EARLY-PACKAGES, LATE-PACKAGES, and LAST-PACKAGES are lists of
+package hierarchy roots, respectively."
(append
(let ((path-envval (getenv "PATH")))
(if path-envval
(paths-decode-directory-path path-envval 'drop-empties)))
- (packages-find-package-exec-path early-packages)
- (packages-find-package-exec-path late-packages)
+ (packages-find-package-exec-path early-package-hierarchies)
+ (packages-find-package-exec-path late-package-hierarchies)
(let ((emacspath-envval (getenv "EMACSPATH")))
(and emacspath-envval
(split-path emacspath-envval)))
(and exec-directory
(list exec-directory))
- (packages-find-package-exec-path last-packages)))
+ (packages-find-package-exec-path last-package-hierarchies)))
(defun paths-find-data-directory (roots)
- "Find the data directory."
+ "Find the data directory.
+ROOTS is the list of installation roots."
(paths-find-version-directory roots "etc" "EMACSDATA"
configure-data-directory))
(defun paths-construct-data-directory-list (data-directory
- early-packages late-packages last-packages)
- "Find the data path."
+ early-package-hierarchies
+ late-package-hierarchies
+ last-package-hierarchies)
+ "Construct the data path.
+DATA-DIRECTORY is the data directory of the XEmacs installation.
+EARLY-PACKAGE-HIERARCHIES, LATE-PACKAGE-HIERARCHIES, and
+LAST-PACKAGE-HIERARCHIES are lists of package hierarchy roots,
+respectively."
(append
- (packages-find-package-data-path early-packages)
- (packages-find-package-data-path late-packages)
+ (packages-find-package-data-path early-package-hierarchies)
+ (packages-find-package-data-path late-package-hierarchies)
(list data-directory)
- (packages-find-package-data-path last-packages)))
-
-
-;;; High-level functions to set up the paths.
-
-(defun startup-find-load-path (&optional inhibit-packages
- set-global-package-paths)
- "Determine the value for `load-path'.
-INHIBIT-PACKAGES says which types of packages, if any, to omit from the
-returned value. It can be `t' (omit all), one of the symbols `early',
-`late', or `last', or a list of one or more of the symbols.
-
-If SET-GLOBAL-PACKAGE-PATHS is non-nil, initialize the global package path
-variables referring to the particular types of packages (`early-packages',
-`early-package-load-path', `late-packages', `late-package-load-path',
-`last-packages', `last-package-load-path')."
- (let (earlyp latep lastp earlyp-lp latep-lp lastp-lp)
- (apply #'(lambda (early late last)
- (setq earlyp (and (not (memq 'early inhibit-packages)) early))
- (setq latep (and (not (memq 'late inhibit-packages)) late))
- (setq lastp (and (not (memq 'last inhibit-packages)) last)))
- (packages-find-packages
- emacs-data-roots
- (packages-compute-package-locations user-init-directory)))
-
- (setq earlyp-lp (packages-find-package-load-path earlyp))
- (setq latep-lp (packages-find-package-load-path latep))
- (setq lastp-lp (packages-find-package-load-path lastp))
-
- (when set-global-package-paths
- (setq early-packages earlyp
- late-packages latep
- last-packages lastp
- early-package-load-path earlyp-lp
- late-package-load-path latep-lp
- last-package-load-path lastp-lp))
-
- (paths-construct-load-path emacs-roots earlyp-lp latep-lp lastp-lp
- lisp-directory site-directory
- mule-lisp-directory)))
-
-(defun startup-setup-paths (&optional inhibit-packages called-early)
- "Setup all the various paths.
-INHIBIT-PACKAGES says which types of packages, if any, to omit from the
-returned value. It can be `t' (omit all), one of the symbols `early',
-`late', or `last', or a list of one or more of the symbols.
-
-This function is idempotent, so call this as often as you like!"
-
- (setq debug-paths (or debug-paths
- (and (getenv "EMACSDEBUGPATHS")
- t)))
-
- (setq emacs-roots (paths-find-emacs-roots #'paths-emacs-data-root-p))
-
- (setq emacs-data-roots (paths-find-emacs-roots #'paths-emacs-data-root-p))
-
- (if (null emacs-roots)
- (save-excursion
- (set-buffer (get-buffer-create " *warning-tmp*"))
- (erase-buffer)
- (buffer-disable-undo (current-buffer))
-
- (insert "Couldn't find an obvious default for the root of the\n"
- "XEmacs hierarchy.")
-
- (princ "\nWARNING:\n" 'external-debugging-output)
- (princ (buffer-string) 'external-debugging-output)))
-
- (if (eq inhibit-packages t)
- (setq inhibit-packages '(early late last)))
- (if (not (listp inhibit-packages))
- (setq inhibit-packages (list inhibit-packages)))
-
- (when debug-paths
- (princ (format
-"startup-setup-paths arguments:
- inhibit-packages: %S
- inhibit-site-lisp: %S
- called-early: %S
-" inhibit-packages inhibit-site-lisp called-early)
- 'external-debugging-output)
- (princ (format
-"emacs-roots:
-%S
-emacs-data-roots:
-%S
-user-init-directory: %S
-configure-package-path: %S
-" emacs-roots emacs-data-roots user-init-directory configure-package-path)
- 'external-debugging-output)
- )
-
- (setq lisp-directory (paths-find-lisp-directory emacs-roots))
-
- (if debug-paths
- (princ (format "lisp-directory:\n%S\n" lisp-directory)
- 'external-debugging-output))
-
- (if (featurep 'mule)
- (progn
- (setq mule-lisp-directory
- (paths-find-mule-lisp-directory emacs-roots
- lisp-directory))
- (if debug-paths
- (princ (format "mule-lisp-directory:\n%S\n"
- mule-lisp-directory)
- 'external-debugging-output)))
- (setq mule-lisp-directory '()))
-
- (setq site-directory (and (null inhibit-site-lisp)
- (paths-find-site-lisp-directory emacs-roots)))
-
- (if (and debug-paths (null inhibit-site-lisp))
- (princ (format "site-directory:\n%S\n" site-directory)
- 'external-debugging-output))
-
- (setq load-path (startup-find-load-path inhibit-packages t))
-
- (when debug-paths
- (princ (format "early-packages and early-package-load-path:\n%S\n%S\n"
- early-packages early-package-load-path)
- 'external-debugging-output)
- (princ (format "late-packages and late-package-load-path:\n%S\n%S\n"
- late-packages late-package-load-path)
- 'external-debugging-output)
- (princ (format "last-packages and last-package-load-path:\n%S\n%S\n"
- last-packages last-package-load-path)
- 'external-debugging-output))
-
- (if debug-paths
- (princ (format "load-path:\n%S\n" load-path)
- 'external-debugging-output))
- (setq module-directory (paths-find-module-directory emacs-roots))
- (if debug-paths
- (princ (format "module-directory:\n%S\n" module-directory)
- 'external-debugging-output))
- (setq site-module-directory (and (null inhibit-site-modules)
- (paths-find-site-module-directory
- emacs-roots)))
- (if (and debug-paths (null inhibit-site-modules))
- (princ (format "site-module-directory:\n%S\n"
- site-module-directory)
- 'external-debugging-output))
-
- (setq module-load-path (paths-construct-module-load-path
- emacs-roots
- module-directory
- site-module-directory))
-
- (unless called-early
- (setq Info-directory-list
- (paths-construct-info-path
- emacs-roots early-packages late-packages last-packages))
-
- (if debug-paths
- (princ (format "Info-directory-list:\n%S\n" Info-directory-list)
- 'external-debugging-output))
-
- (setq exec-directory (paths-find-exec-directory emacs-roots))
-
- (if debug-paths
- (princ (format "exec-directory:\n%s\n" exec-directory)
- 'external-debugging-output))
-
- (setq exec-path
- (paths-construct-exec-path emacs-roots exec-directory
- early-packages late-packages
- last-packages))
-
- (if debug-paths
- (princ (format "exec-path:\n%S\n" exec-path)
- 'external-debugging-output))
-
- (setq doc-directory (paths-find-doc-directory emacs-roots))
-
- (if debug-paths
- (princ (format "doc-directory:\n%S\n" doc-directory)
- 'external-debugging-output))
-
- (setq data-directory (paths-find-data-directory emacs-roots))
-
- (if debug-paths
- (princ (format "data-directory:\n%S\n" data-directory)
- 'external-debugging-output))
-
- (setq data-directory-list (paths-construct-data-directory-list
- data-directory early-packages
- late-packages last-packages))
- (if debug-paths
- (princ (format "data-directory-list:\n%S\n" data-directory-list)
- 'external-debugging-output))))
-
-(defun startup-find-load-path-for-packages (packages)
- "Return a suitable load-path for PACKAGES.
-PACKAGES is a list of package names (strings). This looks for package
-directories in the load path whose last component is one of the members of
-PACKAGES."
- (mapcan
- #'(lambda (package)
- (and (member (file-name-nondirectory (directory-file-name package))
- packages)
- (list package)))
- (startup-find-load-path)))
-
-; (defun startup-set-basic-packages-load-path ()
-; "#### This is a hack. When recompiling .el files, we use -no-packages
-; to avoid problems with packages shadowing standard Lisp files
-; (e.g. unicode.el), but we really still need the stuff in xemacs-base and
-; xemacs-devel, which SHOULD NOT be in the packages."
-; (setq load-path (startup-find-load-path-for-packages
-; '("xemacs-base" "xemacs-devel"))))
-
-
-;;; Now actually set the paths up, for bootstrapping purposes. This is run
-;;; at early dump time and in certain cases where we use a minimal temacs
-;;; to do useful things, like rebuild DOC.
-
-(startup-setup-paths (if inhibit-all-packages t '(early last)) t)
+ (packages-find-package-data-path last-package-hierarchies)))
;;; setup-paths.el ends here
1.6.10.1 +1 -0 XEmacs/xemacs/lisp/shadow.el
Index: shadow.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/shadow.el,v
retrieving revision 1.6
retrieving revision 1.6.10.1
diff -u -r1.6 -r1.6.10.1
--- shadow.el 2001/06/10 10:42:23 1.6
+++ shadow.el 2005/03/15 05:20:55 1.6.10.1
@@ -114,6 +114,7 @@
'("subdirs"
"auto-autoloads"
"custom-load"
+ "custom-defines"
"dumped-lisp"
"_pkg"
"lpath")))
1.47.2.1 +10 -4 XEmacs/xemacs/lisp/simple.el
Index: simple.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/simple.el,v
retrieving revision 1.47
retrieving revision 1.47.2.1
diff -u -r1.47 -r1.47.2.1
--- simple.el 2003/09/20 01:46:54 1.47
+++ simple.el 2005/03/15 05:20:55 1.47.2.1
@@ -1979,7 +1979,7 @@
When the region has been enabled or augmented as a result of a shifted
motion key, an unshifted motion key will normally deselect the region.
-However, if `unshifted-motion-keys-deselect-region' is t, the region
+However, if `unshifted-motion-keys-deselect-region' is nil, the region
will remain active, augmented by the characters moved over by this
motion key.
@@ -2238,7 +2238,9 @@
If there is no line in the buffer after this one, behavior depends on the
value of `next-line-add-newlines'. If non-nil, it inserts a newline character
to create a line, and moves the cursor to that line. Otherwise it moves the
-cursor to the end of the buffer.
+cursor to the end of the buffer. If `signal-error-on-buffer-boundary' is
+non-nil and you attempt to move past a buffer boundary, XEmacs will ring the
+bell using `ding'.
The command \\[set-goal-column] can be used to create
a semipermanent goal column to which this command always moves.
@@ -2286,6 +2288,9 @@
to invoke this command, and `shifted-motion-keys-select-region' is t; see
the documentation for this variable for more details.
+If `signal-error-on-buffer-boundary' is non-nil and you attempt to move past
+a buffer boundary, XEmacs will ring the bell using `ding'.
+
If you are thinking of using this in a Lisp program, consider using
`forward-line' with a negative argument instead. It is usually easier
to use and more reliable (no dependence on goal column, etc.)."
@@ -3790,7 +3795,7 @@
;; XEmacs
(defun region-active-p ()
- "Return non-nil if the region is active.
+ "Return non-nil if the region is active in the current buffer.
If `zmacs-regions' is true, this is equivalent to `region-exists-p'.
Otherwise, this function always returns false.
@@ -3800,7 +3805,8 @@
[ ... ... :active (region-exists-p)]
Which correctly caters to the user's setting of `zmacs-regions'."
- (and zmacs-regions zmacs-region-extent))
+ (and zmacs-regions zmacs-region-extent
+ (eq (current-buffer) (zmacs-region-buffer))))
(defvar zmacs-activate-region-hook nil
"Function or functions called when the region becomes active;
1.51.2.1 +403 -149 XEmacs/xemacs/lisp/startup.el
Index: startup.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/startup.el,v
retrieving revision 1.51
retrieving revision 1.51.2.1
diff -u -r1.51 -r1.51.2.1
--- startup.el 2004/09/23 05:44:37 1.51
+++ startup.el 2005/03/15 05:20:56 1.51.2.1
@@ -3,7 +3,7 @@
;; Copyright (C) 1985-1986, 1990, 1992-1997 Free Software Foundation, Inc.
;; Copyright (c) 1993, 1994 Sun Microsystems, Inc.
;; Copyright (C) 1995 Board of Trustees, University of Illinois
-;; Copyright (C) 2001, 2002, 2003 Ben Wing.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005 Ben Wing.
;; Maintainer: XEmacs Development Team
;; Keywords: internal, dumped
@@ -72,7 +72,6 @@
(defvar command-line-processed nil "t once command line has been processed")
(defconst startup-message-timeout 12000) ; More or less disable the timeout
-(defconst splash-frame-timeout 7) ; interval between splash frame elements
(defconst inhibit-startup-message nil
"*Non-nil inhibits the initial startup message.
@@ -129,7 +128,52 @@
(defconst initial-major-mode 'lisp-interaction-mode
"Major mode command symbol to use for the initial *scratch* buffer.")
+
+;;; Path-related variables.
+;;; NOTE: Many of them (`lisp-directory', `data-directory', etc.) are
+;;; built-in.
+
+(defvar emacs-roots nil
+ "List of plausible roots of the XEmacs hierarchy.
+This is a list of plausible directories in which to search for the important
+directories used by XEmacs at run-time, for example `exec-directory',
+`data-directory' and `lisp-directory'.
+
+Normally set at startup by calling `paths-find-emacs-roots'.")
+
+(defvar emacs-data-roots nil
+ "List of plausible data roots of the XEmacs hierarchy.")
+
+(defvar user-init-directory-base ".xemacs"
+ "Base of directory where user-installed init files may go.")
+
+(defvar user-init-directory
+ (file-name-as-directory
+ (paths-construct-path (list "~" user-init-directory-base)))
+ "Directory where user-installed init files may go.")
+
+(defvar user-init-file-base "init.el"
+ "Default name of the user init file if uncompiled.
+This should be used for migration purposes only.")
+
+(defvar user-init-file-base-list '("init.el")
+ "List of allowed init files in the user's init directory.
+The first one found takes precedence. .elc files do not need to be listed.")
+
+(defvar user-home-init-file-base-list
+ (append '(".emacs.el" ".emacs")
+ (and (eq system-type 'windows-nt)
+ '("_emacs.el" "_emacs")))
+ "List of allowed init files in the user's home directory.
+The first one found takes precedence. .elc files do not need to be listed.")
+
+(defvar load-home-init-file nil
+ "Non-nil if XEmacs should load the init file from the home directory.
+Otherwise, XEmacs will offer migration to the init directory.")
+(defvar load-user-init-file-p t
+ "Non-nil if XEmacs should load the user's init file.")
+
;; #### called `site-run-file' in FSFmacs
(defvar site-start-file "site-start"
@@ -1014,7 +1058,7 @@
(when (string= (buffer-name) "*scratch*")
(unless (or inhibit-startup-message
(input-pending-p))
- (let (tmout circ-tmout)
+ (let (tmout)
(unwind-protect
;; Guts of with-timeout
(catch 'tmout
@@ -1024,13 +1068,12 @@
(throw 'tmout t)
(error nil)))
nil))
- (setq circ-tmout (display-splash-frame))
+ (display-splash-screen)
(or nil;; (pos-visible-in-window-p (point-min))
(goto-char (point-min)))
(sit-for 0)
(setq unread-command-event (next-command-event)))
- (when tmout (disable-timeout tmout))
- (when circ-tmout (disable-timeout circ-tmout)))))
+ (when tmout (disable-timeout tmout)))))
(with-current-buffer (get-buffer "*scratch*")
;; In case the XEmacs server has already selected
;; another buffer, erase the one our message is in.
@@ -1079,56 +1122,21 @@
(when line
(goto-line line)
(setq line nil))))))))
-
-(defvar startup-presentation-hack-keymap
- (let ((map (make-sparse-keymap)))
- (set-keymap-name map 'startup-presentation-hack-keymap)
- (define-key map '[button1] 'startup-presentation-hack)
- (define-key map '[button2] 'startup-presentation-hack)
- map)
- "Putting yesterday in the future tomorrow.")
-(defun startup-presentation-hack ()
- (interactive)
- (let ((e last-command-event))
- (and (button-press-event-p e)
- (setq e (extent-at (event-point e)
- (event-buffer e)
- 'startup-presentation-hack))
- (setq e (extent-property e 'startup-presentation-hack))
- (if (consp e)
- (apply (car e) (cdr e))
- (while (keymapp (indirect-function e))
- (let ((map e)
- (overriding-local-map (indirect-function e)))
- (setq e (read-key-sequence
- (let ((p (keymap-prompt map t)))
- (cond ((symbolp map)
- (if p
- (format "%s %s " map p)
- (format "%s " map)))
- (p)
- (t
- (prin1-to-string map))))))
- (if (and (button-release-event-p (elt e 0))
- (null (key-binding e)))
- (setq e map) ; try again
- (setq e (key-binding e)))))
- (call-interactively e)))))
-
+
(defun startup-presentation-hack-help (e)
(setq e (extent-property e 'startup-presentation-hack))
- (if (consp e)
- (format "Evaluate %S" e)
- (symbol-name e)))
-
-(defun splash-frame-present-hack (e v)
- ;; (set-extent-property e 'mouse-face 'highlight)
- ;; (set-extent-property e 'keymap
- ;; startup-presentation-hack-keymap)
- ;; (set-extent-property e 'startup-presentation-hack v)
- ;; (set-extent-property e 'help-echo
- ;; 'startup-presentation-hack-help)
+ (symbol-name e))
+
+(defun startup-presentation-activate (ev ex)
+ (call-interactively (extent-property ex 'startup-presentation-hack)))
+
+(defun splash-screen-present-hack (e v)
+; (set-extent-property e 'mouse-face 'highlight)
+; (set-extent-property e 'startup-presentation-hack v)
+; (set-extent-property e 'help-echo
+; 'startup-presentation-hack-help)
+; (set-extent-property e 'activate-function 'startup-presentation-activate)
)
(defun splash-hack-version-string ()
@@ -1148,35 +1156,34 @@
(when (search-forward "." nil t)
(delete-region (1- (point)) (point-max))))))
-(defun splash-frame-present (l)
+;; parse one page description (see `splash-screen-body') and display
+;; at point.
+(defun splash-screen-present (l)
(cond ((stringp l)
(insert l))
((eq (car-safe l) 'face)
;; (face name string)
(let ((p (point)))
- (splash-frame-present (elt l 2))
- (if (fboundp 'set-extent-face)
- (set-extent-face (make-extent p (point))
- (elt l 1)))))
+ (splash-screen-present (elt l 2))
+ (set-extent-face (make-extent p (point))
+ (elt l 1))))
((eq (car-safe l) 'key)
(let* ((c (elt l 1))
(p (point))
(k (where-is-internal c nil t)))
(insert (if k (key-description k)
(format "M-x %s" c)))
- (if (fboundp 'set-extent-face)
- (let ((e (make-extent p (point))))
- (set-extent-face e 'bold)
- (splash-frame-present-hack e c)))))
+ (let ((e (make-extent p (point))))
+ (set-extent-face e 'bold)
+ (splash-screen-present-hack e c))))
((eq (car-safe l) 'funcall)
;; (funcall (fun . args) string)
(let ((p (point)))
- (splash-frame-present (elt l 2))
- (if (fboundp 'set-extent-face)
- (splash-frame-present-hack (make-extent p (point))
- (elt l 1)))))
+ (splash-screen-present (elt l 2))
+ (splash-screen-present-hack (make-extent p (point))
+ (elt l 1))))
((consp l)
- (mapcar 'splash-frame-present l))
+ (mapcar 'splash-screen-present l))
(t
(error "WTF!?"))))
@@ -1196,9 +1203,6 @@
(fill-area-width (* avg-pixwidth (- fill-column left-margin)))
(glyph-pixwidth (cond ((stringp glyph)
(* avg-pixwidth (length glyph)))
- ;; #### the pixmap option should be removed
- ;;((pixmapp glyph)
- ;; (pixmap-width glyph))
((glyphp glyph)
(glyph-width glyph))
(t
@@ -1206,10 +1210,49 @@
(+ left-margin
(round (/ (/ (- fill-area-width glyph-pixwidth) 2) avg-pixwidth)))))
-(defun splash-frame-body ()
- `[((face (blue bold underline)
- "\nDistribution, copying license, warranty:\n\n")
- "Please visit the XEmacs website at
http://www.xemacs.org/ !\n\n"
+;; the splash screen originated in 19.10 as splash-screen-*. When
+;; Chuck made the global screen->frame change for 19.12, he
+;; accidentally changed these too. This randomness is getting on my
+;; nerves, so let's fix it and provide minimal aliases for the
+;; `locale' mule package. --ben
+
+;; returns either of vector of page descriptions, each describing one
+;; screenful of information, or just one such page descriptions Each
+;; page description is a list of textual elements describing how to
+;; display a section of text. The elements are processed in turn and
+;; the results inserted one after the previous in a buffer. Each
+;; textual element is either:
+
+;; -- a string, inserted as-is with no decoration.
+;; -- a list of (face FACES "text"), where FACES is the name of a face
+;; or a list of such names, and specifies the face(s) used when
+;; displaying the text.
+;; -- a list of (key COMMAND-NAME); the key sequence corresponding to
+;; the command will be inserted, in boldface.
+;; -- a list of textual elements.
+
+(defun splash-screen-window-body ()
+ `(
+ (face (blue bold underline)
+ "Useful Help-menu entries:\n\n")
+ ,@(if (string-match "beta" emacs-version)
+ `((face bold "Beta Info:")
+ (face (red bold)
+ " This is an Experimental version of XEmacs.\n"))
+ `( ""))
+ (face bold "XEmacs FAQ:")
+ " Read the XEmacs FAQ.\n"
+ (face bold "Info (Online Docs):")
+ " Read the on-line documentation.\n"
+ (face bold "Tutorial:")
+ " XEmacs tutorial.\n"
+ (face bold "Samples->View Sample init.el:")
+ " A useful initialization file.\n"
+ (face bold "About XEmacs:")
+ " See who's developing XEmacs.\n"
+ "\n"
+ (face (bold blue) "XEmacs website:")
+ "
http://www.xemacs.org/\n\n"
,@(if (featurep 'sparcworks)
`( "\
Sun provides support for the WorkShop/XEmacs integration package only.
@@ -1218,8 +1261,6 @@
(getenv "LANG"))))
(if (and
(not (featurep 'mule)) ;; Already got mule?
- ;; No Mule support on tty's yet
- (not (eq 'tty (console-type)))
lang ;; Non-English locale?
(not (string= lang "C"))
(not (string-match "^en" lang))
@@ -1231,46 +1272,47 @@
XEmacs, by either running the command `xemacs-mule', or by using the X resource
`ESERVE*defaultXEmacsPath: xemacs-mule' when starting XEmacs from Sun WorkShop.
\n")))))
- ((key describe-no-warranty)
- ": "(face (red bold) "XEmacs comes with ABSOLUTELY NO
WARRANTY\n"))
- ((key describe-copying)
- ": conditions to give out copies of XEmacs\n")
- ((key describe-distribution)
- ": how to get the latest version\n")
- "\n--\n"
(face italic "\
Copyright (C) 1985-1999 Free Software Foundation, Inc.
Copyright (C) 1990-1994 Lucid, Inc.
Copyright (C) 1993-1997 Sun Microsystems, Inc. All Rights Reserved.
-Copyright (C) 1994-1996 Board of Trustees, University of Illinois
-Copyright (C) 1995-1996 Ben Wing\n"))
-
- ((face (blue bold underline) "\nInformation, on-line help:\n\n")
- "XEmacs comes with plenty of documentation...\n\n"
+Copyright (C) 1994-1996 Board of Trustees, University of Illinois.
+Copyright (C) 1995-2005 Ben Wing.\n")
+ ))
+
+(defun splash-screen-tty-body ()
+ `(
+ (face italic "[`C-' means the control key, `M-' means the meta
key]\n\n")
,@(if (string-match "beta" emacs-version)
`((key describe-beta)
": " (face (red bold)
"This is an Experimental version of XEmacs.\n"))
`( "\n"))
((key xemacs-local-faq)
- ": read the XEmacs FAQ (a " (face underline "capital") "
F!)\n")
- ((key help-with-tutorial)
- ": read the XEmacs tutorial (also available through the "
- (face bold "Help") " menu)\n")
+ ": Read the XEmacs FAQ. (A " (face underline "capital")
" F!)\n")
+ ((key info) ": Read the on-line documentation.\n")
((key help-command)
- ": get help on using XEmacs (also available through the "
- (face bold "Help") " menu)\n")
- ((key info) ": read the on-line documentation\n\n")
- ((key describe-project) ": read about the GNU project\n")
- ((key about-xemacs) ": see who's developing XEmacs\n"))
-
- ((face (blue bold underline) "\nUseful stuff:\n\n")
- "Things that you should learn rather quickly...\n\n"
- ((key find-file) ": visit a file\n")
- ((key save-buffer) ": save changes\n")
- ((key undo) ": undo changes\n")
- ((key save-buffers-kill-emacs) ": exit XEmacs\n"))
- ])
+ ": Get help on using XEmacs.\n")
+ ((key help-with-tutorial)
+ ": Read the XEmacs tutorial.\n")
+ ((key view-sample-init-el)
+ ": View the sample init.el file.\n")
+ ((key about-xemacs) ": See who's developing XEmacs.\n")
+ ((key save-buffers-kill-emacs)
+ ": exit XEmacs\n")
+ "\n"
+ (face (bold blue) "XEmacs website: ")
+ "http://www.xemacs.org/\n\n"
+ (face italic "\
+Copyright (C) 1985-1999 Free Software Foundation, Inc.
+Copyright (C) 1990-1994 Lucid, Inc.
+Copyright (C) 1993-1997 Sun Microsystems, Inc. All Rights Reserved.
+Copyright (C) 1994-1996 Board of Trustees, University of Illinois.
+Copyright (C) 1995-2004 Ben Wing.")
+; ((key find-file) ": visit a file; ")
+; ((key save-buffer) ": save changes; ")
+; ((key undo) ": undo changes; ")
+ ))
;; I really hate global variables, oh well.
;(defvar xemacs-startup-logo-function nil
@@ -1278,67 +1320,58 @@
;This function should return an initialized glyph if it is used.")
;; This will hopefully go away when gettext is functional.
-(defconst splash-frame-static-body
- `(,(emacs-version) "\n\n"
- (face italic "`C-' means the control key,`M-' means the meta
key\n\n")))
-
-
-(defun circulate-splash-frame-elements (client-data)
- (with-current-buffer (aref client-data 2)
- (let ((buffer-read-only nil)
- (elements (aref client-data 3))
- (indice (aref client-data 0)))
- (goto-char (aref client-data 1))
- (delete-region (point) (point-max))
- (splash-frame-present (aref elements indice))
- (set-buffer-modified-p nil)
- (aset client-data 0
- (if (= indice (- (length elements) 1))
- 0
- (1+ indice )))
- )))
-
-;; #### This function now returns the (possibly nil) timeout circulating the
-;; splash-frame elements
-(defun display-splash-frame ()
+(defconst splash-screen-static-body
+ `(,(emacs-version) "\n\n"))
+;; temporary support for old locale files.
+(define-obsolete-variable-alias 'splash-frame-static-body
+ 'splash-screen-static-body)
+
+(defun display-splash-screen ()
+ ;; display the splash screen in the current buffer and put it in the
+ ;; current window.
(let ((logo xemacs-logo)
(buffer-read-only nil)
- (cramped-p (eq 'tty (console-type))))
- (unless cramped-p (insert "\n"))
- (indent-to (startup-center-spaces logo))
- (set-extent-begin-glyph (make-extent (point) (point)) logo)
- ;;(splash-frame-present-hack (make-extent p (point)) 'about-xemacs))
- (insert "\n\n")
- (splash-frame-present splash-frame-static-body)
+ (tty (eq 'tty (console-type))))
+ (unless tty
+ (insert "\n")
+ (indent-to (startup-center-spaces logo))
+ (set-extent-begin-glyph (make-extent (point) (point)) logo)
+ ;;(splash-screen-present-hack (make-extent p (point)) 'about-xemacs))
+ (insert "\n\n"))
+ (splash-screen-present splash-screen-static-body)
(splash-hack-version-string)
(goto-char (point-max))
(let* ((after-change-functions nil) ; no font-lock, thank you
- (elements (splash-frame-body))
- (client-data `[ 1 ,(point) ,(current-buffer) ,elements ])
- tmout)
- (if (listp elements) ;; A single element to display
- (splash-frame-present (splash-frame-body))
- ;; several elements to rotate
- (splash-frame-present (aref elements 0))
- (setq tmout (add-timeout splash-frame-timeout
- 'circulate-splash-frame-elements
- client-data splash-frame-timeout)))
- (set-buffer-modified-p nil)
- tmout)))
+ (elements (cond (tty (splash-screen-tty-body))
+ (t (splash-screen-window-body)))))
+ (pop-to-buffer (current-buffer))
+ (delete-other-windows)
+ (splash-screen-present elements)
+ (set-buffer-modified-p nil))))
+
+(defun xemacs-splash-buffer ()
+ "Display XEmacs splash screen in a buffer."
+ (interactive)
+ (let ((buffer (get-buffer-create "*Splash*")))
+ (set-buffer buffer)
+ (setq buffer-read-only nil)
+ (erase-buffer buffer)
+ (display-splash-screen)))
;; (let ((present-file
;; #'(lambda (f)
-;; (splash-frame-present
+;; (splash-screen-present
;; (list 'funcall
;; (list 'find-file-other-window
;; (expand-file-name f data-directory))
;; f)))))
;; (insert "For customization examples, see the files ")
-;; (funcall present-file "sample.emacs")
+;; (funcall present-file "sample.init.el")
;; (insert " and ")
;; (funcall present-file "sample.Xresources")
;; (insert (format "\nin the directory %s." data-directory)))
+
(defun startup-set-invocation-environment ()
;; XEmacs -- Steven Baur says invocation directory is nil if you
;; try to use XEmacs as a login shell.
@@ -1347,6 +1380,219 @@
;; don't let /tmp_mnt/... get into the load-path or exec-path.
(abbreviate-file-name invocation-directory)))
+;;; High-level functions to set up the paths.
+
+(defun startup-find-load-path (&optional inhibit-packages
+ set-global-package-paths)
+ "Determine the value for `load-path'.
+INHIBIT-PACKAGES says which types of packages, if any, to omit from the
+returned value. It can be `t' (omit all), one of the symbols `early',
+`late', or `last', or a list of one or more of the symbols.
+
+If SET-GLOBAL-PACKAGE-PATHS is non-nil, initialize the global package path
+variables referring to the particular types of packages
+(`early-package-hierarchies', `early-package-load-path',
+`late-package-hierarchies', `late-package-load-path',
+`last-package-hierarchies', `last-package-load-path')."
+ (let (earlyp latep lastp earlyp-lp latep-lp lastp-lp)
+ (apply #'(lambda (early late last)
+ (setq earlyp (and (not (memq 'early inhibit-packages)) early))
+ (setq latep (and (not (memq 'late inhibit-packages)) late))
+ (setq lastp (and (not (memq 'last inhibit-packages)) last)))
+ (packages-find-all-package-hierarchies
+ emacs-data-roots))
+
+ (setq earlyp-lp (packages-find-package-load-path earlyp))
+ (setq latep-lp (packages-find-package-load-path latep))
+ (setq lastp-lp (packages-find-package-load-path lastp))
+
+ (when set-global-package-paths
+ (setq early-package-hierarchies earlyp
+ late-package-hierarchies latep
+ last-package-hierarchies lastp
+ early-package-load-path earlyp-lp
+ late-package-load-path latep-lp
+ last-package-load-path lastp-lp))
+
+ (paths-construct-load-path emacs-roots earlyp-lp latep-lp lastp-lp
+ lisp-directory site-directory
+ mule-lisp-directory)))
+
+(defun startup-setup-paths (&optional inhibit-packages called-early)
+ "Setup all the various paths.
+INHIBIT-PACKAGES says which types of packages, if any, to omit from the
+returned value. It can be `t' (omit all), one of the symbols `early',
+`late', or `last', or a list of one or more of the symbols.
+
+This function is idempotent, so call this as often as you like!"
+
+ (setq debug-paths (or debug-paths
+ (and (getenv "EMACSDEBUGPATHS")
+ t)))
+
+ (setq emacs-roots (paths-find-emacs-roots invocation-directory invocation-name
+ #'paths-emacs-data-root-p))
+
+ (setq emacs-data-roots (paths-find-emacs-roots invocation-directory invocation-name
+ #'paths-emacs-data-root-p))
+
+ (if (null emacs-roots)
+ (save-excursion
+ (set-buffer (get-buffer-create " *warning-tmp*"))
+ (erase-buffer)
+ (buffer-disable-undo (current-buffer))
+
+ (insert "Couldn't find an obvious default for the root of the\n"
+ "XEmacs hierarchy.")
+
+ (princ "\nWARNING:\n" 'external-debugging-output)
+ (princ (buffer-string) 'external-debugging-output)))
+
+ (if (eq inhibit-packages t)
+ (setq inhibit-packages '(early late last)))
+ (if (not (listp inhibit-packages))
+ (setq inhibit-packages (list inhibit-packages)))
+
+ (when debug-paths
+ (princ (format
+"startup-setup-paths arguments:
+ inhibit-packages: %S
+ inhibit-site-lisp: %S
+ called-early: %S
+" inhibit-packages inhibit-site-lisp called-early)
+ 'external-debugging-output)
+ (princ (format
+"emacs-roots:
+%S
+emacs-data-roots:
+%S
+user-init-directory: %S
+configure-package-path: %S
+" emacs-roots emacs-data-roots user-init-directory configure-package-path)
+ 'external-debugging-output)
+ )
+
+ (setq lisp-directory (paths-find-lisp-directory emacs-roots))
+
+ (if debug-paths
+ (princ (format "lisp-directory:\n%S\n" lisp-directory)
+ 'external-debugging-output))
+
+ (if (featurep 'mule)
+ (progn
+ (setq mule-lisp-directory
+ (paths-find-mule-lisp-directory emacs-roots
+ lisp-directory))
+ (if debug-paths
+ (princ (format "mule-lisp-directory:\n%S\n"
+ mule-lisp-directory)
+ 'external-debugging-output)))
+ (setq mule-lisp-directory '()))
+
+ (setq site-directory (and (null inhibit-site-lisp)
+ (paths-find-site-lisp-directory emacs-roots)))
+
+ (if (and debug-paths (null inhibit-site-lisp))
+ (princ (format "site-directory:\n%S\n" site-directory)
+ 'external-debugging-output))
+
+ (setq load-path (startup-find-load-path inhibit-packages t))
+
+ (when debug-paths
+ (princ (format "early-package-hierarchies and
early-package-load-path:\n%S\n%S\n"
+ early-package-hierarchies early-package-load-path)
+ 'external-debugging-output)
+ (princ (format "late-package-hierarchies and
late-package-load-path:\n%S\n%S\n"
+ late-package-hierarchies late-package-load-path)
+ 'external-debugging-output)
+ (princ (format "last-package-hierarchies and
last-package-load-path:\n%S\n%S\n"
+ last-package-hierarchies last-package-load-path)
+ 'external-debugging-output))
+
+ (if debug-paths
+ (princ (format "load-path:\n%S\n" load-path)
+ 'external-debugging-output))
+ (setq module-directory (paths-find-module-directory emacs-roots))
+ (if debug-paths
+ (princ (format "module-directory:\n%S\n" module-directory)
+ 'external-debugging-output))
+ (setq site-module-directory (and (null inhibit-site-modules)
+ (paths-find-site-module-directory
+ emacs-roots)))
+ (if (and debug-paths (null inhibit-site-modules))
+ (princ (format "site-module-directory:\n%S\n"
+ site-module-directory)
+ 'external-debugging-output))
+
+ (setq module-load-path (paths-construct-module-load-path
+ emacs-roots
+ module-directory
+ site-module-directory))
+
+ (unless called-early
+ (setq Info-directory-list
+ (paths-construct-info-path
+ emacs-roots
+ early-package-hierarchies late-package-hierarchies last-package-hierarchies))
+
+ (if debug-paths
+ (princ (format "Info-directory-list:\n%S\n" Info-directory-list)
+ 'external-debugging-output))
+
+ (setq exec-directory (paths-find-exec-directory emacs-roots))
+
+ (if debug-paths
+ (princ (format "exec-directory:\n%s\n" exec-directory)
+ 'external-debugging-output))
+
+ (setq exec-path
+ (paths-construct-exec-path emacs-roots exec-directory
+ early-package-hierarchies late-package-hierarchies
+ last-package-hierarchies))
+
+ (if debug-paths
+ (princ (format "exec-path:\n%S\n" exec-path)
+ 'external-debugging-output))
+
+ (setq doc-directory (paths-find-doc-directory emacs-roots))
+
+ (if debug-paths
+ (princ (format "doc-directory:\n%S\n" doc-directory)
+ 'external-debugging-output))
+
+ (setq data-directory (paths-find-data-directory emacs-roots))
+
+ (if debug-paths
+ (princ (format "data-directory:\n%S\n" data-directory)
+ 'external-debugging-output))
+
+ (setq data-directory-list (paths-construct-data-directory-list
+ data-directory early-package-hierarchies
+ late-package-hierarchies last-package-hierarchies))
+ (if debug-paths
+ (princ (format "data-directory-list:\n%S\n" data-directory-list)
+ 'external-debugging-output))))
+
+(defun startup-find-load-path-for-packages (packages)
+ "Return a suitable load-path for PACKAGES.
+PACKAGES is a list of package names (strings). This looks for package
+directories in the load path whose last component is one of the members of
+PACKAGES."
+ (mapcan
+ #'(lambda (package)
+ (and (member (file-name-nondirectory (directory-file-name package))
+ packages)
+ (list package)))
+ (startup-find-load-path)))
+
+; (defun startup-set-basic-packages-load-path ()
+; "#### This is a hack. When recompiling .el files, we use -no-packages
+; to avoid problems with packages shadowing standard Lisp files
+; (e.g. unicode.el), but we really still need the stuff in xemacs-base and
+; xemacs-devel."
+; (setq load-path (startup-find-load-path-for-packages
+; '("xemacs-base" "xemacs-devel"))))
+
(defun startup-setup-paths-warning ()
(let ((warnings '()))
(cond
@@ -1379,6 +1625,14 @@
(erase-buffer)
t)))))
+
+;;; Now actually set the paths up, for bootstrapping purposes. This is run
+;;; at early dump time and in certain cases where we use a minimal temacs
+;;; to do useful things, like rebuild DOC.
+
+(startup-setup-paths (if inhibit-all-packages t '(early last)) t)
+
+
(defun startup-load-autoloads ()
(when (and (not inhibit-autoloads) lisp-directory)
(load (expand-file-name (file-name-sans-extension autoload-file-name)
1.35.2.1 +49 -2 XEmacs/xemacs/lisp/subr.el
Index: subr.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/subr.el,v
retrieving revision 1.35
retrieving revision 1.35.2.1
diff -u -r1.35 -r1.35.2.1
--- subr.el 2004/06/17 11:29:39 1.35
+++ subr.el 2005/03/15 05:20:57 1.35.2.1
@@ -1,12 +1,13 @@
;;; subr.el --- basic lisp subroutines for XEmacs
-;; Copyright (C) 1985, 1986, 1992, 1994-5, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 86, 92, 94, 95, 99, 2000, 2001, 2002, 2003
+;; Free Software Foundation, Inc.
;; Copyright (C) 1995 Tinker Systems and INS Engineering Corp.
;; Copyright (C) 1995 Sun Microsystems.
;; Copyright (C) 2000, 2001, 2002, 2003 Ben Wing.
;; Maintainer: XEmacs Development Team
-;; Keywords: extensions, dumped
+;; Keywords: extensions, dumped, internal
;; This file is part of XEmacs.
@@ -48,7 +49,25 @@
(defun custom-declare-variable-early (&rest arguments)
(setq custom-declare-variable-list
(cons arguments custom-declare-variable-list)))
+
+(defun macro-declaration-function (macro decl)
+ "Process a declaration found in a macro definition.
+This is set as the value of the variable `macro-declaration-function'.
+MACRO is the name of the macro being defined.
+DECL is a list `(declare ...)' containing the declarations.
+The return value of this function is not used."
+ (dolist (d (cdr decl))
+ (cond ((and (consp d) (eq (car d) 'indent))
+ (put macro 'lisp-indent-function (cadr d)))
+ ((and (consp d) (eq (car d) 'debug))
+ (put macro 'edebug-form-spec (cadr d)))
+ (t
+ (message "Unknown declaration %s" d)))))
+
+(setq macro-declaration-function 'macro-declaration-function)
+
+
;;;; Lisp language features.
(defmacro lambda (&rest cdr)
@@ -1600,5 +1619,33 @@
(make-compatible 'eval-next-after-load "")
;; END SYNC WITH FSF 21.2
+
+;; (defun shell-quote-argument (argument) in process.el.
+
+;; (defun make-syntax-table (&optional oldtable) in syntax.el.
+
+;; (defun syntax-after (pos) #### doesn't exist.
+
+;; global-set-key, local-set-key, global-unset-key, local-unset-key in
+;; keymap.el.
+
+;; frame-configuration-p is in frame.el.
+
+;; functionp is built-in.
+
+;; interactive-form in obsolete.el.
+
+;; assq-del-all in obsolete.el.
+
+;; (defun make-temp-file (prefix &optional dir-flag suffix) #### doesn't
exist.
+
+;; add-minor-mode in modeline.el.
+
+;; text-clone stuff #### doesn't exist; should go in text-props.el and
+;; requires changes to extents.c (modification hooks).
+
+;; play-sound is built-in.
+
+;; define-mail-user-agent is in simple.el.
;;; subr.el ends here
1.9.2.1 +19 -0 XEmacs/xemacs/lisp/unicode.el
Index: unicode.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/unicode.el,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -r1.9 -r1.9.2.1
--- unicode.el 2004/11/04 23:05:55 1.9
+++ unicode.el 2005/03/15 05:20:57 1.9.2.1
@@ -101,6 +101,7 @@
;; "8859-13.TXT"
("8859-14.TXT" latin-iso8859-14 #xA0 #xFF #x-80)
("8859-15.TXT" latin-iso8859-15 #xA0 #xFF #x-80)
+ ("8859-16.TXT" latin-iso8859-16 #xA0 #xFF #x-80)
("8859-2.TXT" latin-iso8859-2 #xA0 #xFF #x-80)
("8859-3.TXT" latin-iso8859-3 #xA0 #xFF #x-80)
("8859-4.TXT" latin-iso8859-4 #xA0 #xFF #x-80)
@@ -192,6 +193,8 @@
for private, corporate or internal use."
type utf-16))
+(define-coding-system-alias 'utf-16-be 'utf-16)
+
(make-coding-system
'utf-16-bom 'unicode
"UTF-16 w/BOM"
@@ -229,6 +232,8 @@
type utf-16
little-endian t))
+(define-coding-system-alias 'utf-16-le 'utf-16-little-endian)
+
(make-coding-system
'utf-16-little-endian-bom 'unicode
"UTF-16 Little Endian w/BOM"
@@ -298,6 +303,20 @@
type utf-8
little-endian t
need-bom t))
+
+(defun decode-char (quote-ucs code &optional restriction)
+ "FSF compatibility--return Mule character with Unicode codepoint `code'.
+The second argument must be 'ucs, the third argument is ignored. "
+ (assert (eq quote-ucs 'ucs)
+ "Sorry, decode-char doesn't yet support anything but the UCS. ")
+ (unicode-to-char code))
+
+(defun encode-char (char quote-ucs &optional restriction)
+ "FSF compatibility--return the Unicode code point of `char'.
+The second argument must be 'ucs, the third argument is ignored. "
+ (assert (eq quote-ucs 'ucs)
+ "Sorry, encode-char doesn't yet support anything but the UCS. ")
+ (char-to-unicode char))
;; #### UTF-7 is not yet implemented, and it's tricky to do. There's
;; an implementation in appendix A.1 of the Unicode Standard, Version
1.11.2.1 +12 -19 XEmacs/xemacs/lisp/update-elc-2.el
Index: update-elc-2.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/update-elc-2.el,v
retrieving revision 1.11
retrieving revision 1.11.2.1
diff -u -r1.11 -r1.11.2.1
--- update-elc-2.el 2003/03/01 07:25:27 1.11
+++ update-elc-2.el 2005/03/15 05:20:57 1.11.2.1
@@ -149,32 +149,25 @@
;; way is slow, so we avoid it when possible.
(when (file-exists-p (expand-file-name "REBUILD_AUTOLOADS"
invocation-directory))
- (let ((generated-autoload-file (expand-file-name "auto-autoloads.el"
dir))
- (autoload-package-name "auto")) ; feature prefix
- ;; if we were instructed to rebuild the autoloads, force the file
- ;; to be touched even w/o changes; otherwise, we won't ever stop
- ;; being told to rebuild them.
- (update-autoload-files (list dir) nil t)
- (byte-recompile-file generated-autoload-file 0))
+ ;; if we were instructed to rebuild the autoloads, force the file
+ ;; to be touched even w/o changes; otherwise, we won't ever stop
+ ;; being told to rebuild them.
+ (update-autoload-files dir "auto" nil t)
+ (byte-recompile-file (expand-file-name "auto-autoloads.el" dir) 0)
(when (featurep 'mule)
- (let* ((muledir (expand-file-name "../lisp/mule" (file-truename dir)))
- (generated-autoload-file
- (expand-file-name "auto-autoloads.el" muledir))
- (autoload-package-name "mule")) ; feature prefix
+ (let ((muledir (expand-file-name "../lisp/mule" (file-truename dir))))
;; force here just like above.
- (update-autoload-files (list muledir) nil t)
- (byte-recompile-file generated-autoload-file 0))))
+ (update-autoload-files muledir "mule" nil t)
+ (byte-recompile-file (expand-file-name "auto-autoloads.el" dir) 0))))
(when (featurep 'modules)
(let* ((moddir (expand-file-name "../modules" (file-truename dir)))
- (generated-autoload-file
- (expand-file-name "auto-autoloads.el" moddir))
- (autoload-package-name "modules")) ; feature prefix
- (update-autoload-files
+ (autofile (expand-file-name "auto-autoloads.el" moddir)))
+ (update-autoload-files
(delete (concat (file-name-as-directory moddir) ".")
(delete (concat (file-name-as-directory moddir) "..")
(directory-files moddir t nil nil 0)))
- t)
- (byte-recompile-file generated-autoload-file 0)))
+ "modules" autofile)
+ (byte-recompile-file autofile 0)))
;; now load the (perhaps newly rebuilt) autoloads; we were called with
;; -no-autoloads so they're not already loaded.
(load (expand-file-name "auto-autoloads" lisp-directory))
1.33.2.1 +4 -4 XEmacs/xemacs/lisp/update-elc.el
Index: update-elc.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/update-elc.el,v
retrieving revision 1.33
retrieving revision 1.33.2.1
diff -u -r1.33 -r1.33.2.1
--- update-elc.el 2004/11/04 23:05:56 1.33
+++ update-elc.el 2005/03/15 05:20:58 1.33.2.1
@@ -106,7 +106,7 @@
;; early byte compilation. These are files loaded by update-elc.el in
;; order to do the compilation of all the rest of the files.
(defvar lisp-files-needing-early-byte-compilation
- '(;"easy-mmode"
+ '("easy-mmode"
"autoload"
"shadow"
"cl-macs"))
@@ -210,7 +210,7 @@
(print (format "Error: Library file %s not found" arg))
(backtrace)
;; Uncomment in case of trouble
- ;;(print (format "late-packages: %S" late-packages))
+ ;;(print (format "late-package-hierarchies: %S"
late-package-hierarchies))
;;(print (format "guessed-roots: %S"
;; (paths-find-emacs-roots
;; invocation-directory invocation-name)))
@@ -312,10 +312,10 @@
need-to-rebuild-mule-autoloads)
(list "-l" "autoload"))
(if need-to-rebuild-autoloads
- (list "-f" "autoload-update-directory-autoloads"
+ (list "-f" "batch-update-directory-autoloads"
"auto" source-lisp))
(if need-to-rebuild-mule-autoloads
- (list "-f" "autoload-update-directory-autoloads"
+ (list "-f" "batch-update-directory-autoloads"
"mule" source-lisp-mule))
(if need-to-recompile-autoloads
(list "-f" "batch-byte-compile-one-file"
1.20.2.1 +4 -0 XEmacs/xemacs/lisp/window-xemacs.el
Index: window-xemacs.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/window-xemacs.el,v
retrieving revision 1.20
retrieving revision 1.20.2.1
diff -u -r1.20 -r1.20.2.1
--- window-xemacs.el 2004/08/21 17:05:51 1.20
+++ window-xemacs.el 2005/03/15 05:20:58 1.20.2.1
@@ -701,6 +701,10 @@
If `pop-up-frames' is non-nil, make a new frame if no window shows BUFFER.
+If the buffer name is a member of the `same-window-buffer-names' list,
+or matches one of the `same-window-regexps' expressions, display the
+buffer in the currently selected window.
+
Returns the window displaying BUFFER."
(interactive "BDisplay buffer:\nP")
1.19.6.2 +67 -2 XEmacs/xemacs/lisp/x-faces.el
Index: x-faces.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/x-faces.el,v
retrieving revision 1.19.6.1
retrieving revision 1.19.6.2
diff -u -r1.19.6.1 -r1.19.6.2
--- x-faces.el 2004/11/25 12:44:01 1.19.6.1
+++ x-faces.el 2005/03/15 05:20:58 1.19.6.2
@@ -1,7 +1,7 @@
;;; x-faces.el --- X-specific face frobnication, aka black magic.
;; Copyright (C) 1992-4, 1997 Free Software Foundation, Inc.
-;; Copyright (C) 1995, 1996, 2002 Ben Wing.
+;; Copyright (C) 1995, 1996, 2002, 2004 Ben Wing.
;; Author: Jamie Zawinski <jwz(a)jwz.org>
;; Maintainer: XEmacs Development Team
@@ -440,7 +440,7 @@
(string-to-int (substring name (match-beginning 6)
(match-end 6)))
name))))
- (list-fonts font device)))
+ (font-list font device)))
(function (lambda (x y) (if (= (nth 1 x) (nth 1 y))
(< (nth 0 x) (nth 0 y))
(< (nth 1 x) (nth 1 y)))))))
@@ -563,6 +563,71 @@
(make-obsolete 'x-make-face-bold-italic 'make-face-bold-italic)
(make-obsolete 'x-make-face-unbold 'make-face-unbold)
(make-obsolete 'x-make-face-unitalic 'make-face-unitalic)
+
+
+
+;; #### - wrong place for this variable? Exactly. We probably want
+;; `color-list' to be a console method, so `tty-color-list' becomes
+;; obsolete, and `read-color-completion-table' conses (mapcar #'list
+;; (color-list)), optionally caching the results.
+
+;; Ben wanted all of the possibilities from the `configure' script used
+;; here, but I think this is way too many. I already trimmed the R4 variants
+;; and a few obvious losers from the list. --Stig
+(defvar x-library-search-path '("/usr/X11R6/lib/X11/"
+ "/usr/X11R5/lib/X11/"
+ "/usr/lib/X11R6/X11/"
+ "/usr/lib/X11R5/X11/"
+ "/usr/local/X11R6/lib/X11/"
+ "/usr/local/X11R5/lib/X11/"
+ "/usr/local/lib/X11R6/X11/"
+ "/usr/local/lib/X11R5/X11/"
+ "/usr/X11/lib/X11/"
+ "/usr/lib/X11/"
+ "/usr/local/lib/X11/"
+ "/usr/X386/lib/X11/"
+ "/usr/x386/lib/X11/"
+ "/usr/XFree86/lib/X11/"
+ "/usr/unsupported/lib/X11/"
+ "/usr/athena/lib/X11/"
+ "/usr/local/x11r5/lib/X11/"
+ "/usr/lpp/Xamples/lib/X11/"
+ "/usr/openwin/lib/X11/"
+ "/usr/openwin/share/lib/X11/")
+ "Search path used by `x-color-list-internal' to find rgb.txt.")
+
+(defvar x-color-list-internal-cache)
+
+(defun x-color-list-internal ()
+ (if (boundp 'x-color-list-internal-cache)
+ x-color-list-internal-cache
+ (let ((rgb-file (locate-file "rgb.txt" x-library-search-path))
+ clist color p)
+ (if (not rgb-file)
+ ;; prevents multiple searches for rgb.txt if we can't find it
+ (setq x-color-list-internal-cache nil)
+ (with-current-buffer (get-buffer-create " *colors*")
+ (reset-buffer (current-buffer))
+ (insert-file-contents rgb-file)
+ (while (not (eobp))
+ ;; skip over comments
+ (while (looking-at "^!")
+ (end-of-line)
+ (forward-char 1))
+ (skip-chars-forward "0-9 \t")
+ (setq p (point))
+ (end-of-line)
+ (setq color (buffer-substring p (point))
+ clist (cons (list color) clist))
+ ;; Ugh. If we want to be able to complete the lowercase form
+ ;; of the color name, we need to add it twice! Yuck.
+ (let ((dcase (downcase color)))
+ (or (string= dcase color)
+ (push (list dcase) clist)))
+ (forward-char 1))
+ (kill-buffer (current-buffer))))
+ (setq x-color-list-internal-cache clist)
+ x-color-list-internal-cache)))
;;; internal routines
1.12.2.2 +2 -2 XEmacs/xemacs/lisp/x-font-menu.el
Index: x-font-menu.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/x-font-menu.el,v
retrieving revision 1.12.2.1
retrieving revision 1.12.2.2
diff -u -r1.12.2.1 -r1.12.2.2
--- x-font-menu.el 2004/11/25 12:44:02 1.12.2.1
+++ x-font-menu.el 2005/03/15 05:20:58 1.12.2.2
@@ -156,7 +156,7 @@
or if you change your font path, you can call this to re-initialize the menus."
;; by Stig(a)hackvan.com
;; #### - this should implement a `menus-only' option, which would
- ;; recalculate the menus from the cache w/o having to do list-fonts again.
+ ;; recalculate the menus from the cache w/o having to do font-list again.
(unless x-font-regexp-ascii
(setq x-font-regexp-ascii (if (featurep 'mule)
(charset-registry 'ascii)
@@ -167,7 +167,7 @@
family size weight entry monospaced-p
dev-cache cache families sizes weights)
(dolist (name (cond ((null debug) ; debugging kludge
- (list-fonts "*-*-*-*-*-*-*-*-*-*-*-*-*-*" device
+ (font-list "*-*-*-*-*-*-*-*-*-*-*-*-*-*" device
font-menu-max-number))
((stringp debug) (split-string debug "\n"))
(t debug)))
1.7.12.1 +1 -1 XEmacs/xemacs/lisp/x-select.el
Index: x-select.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/x-select.el,v
retrieving revision 1.7
retrieving revision 1.7.12.1
diff -u -r1.7 -r1.7.12.1
--- x-select.el 2001/05/04 22:42:18 1.7
+++ x-select.el 2005/03/15 05:20:58 1.7.12.1
@@ -43,7 +43,7 @@
(define-obsolete-function-alias 'x-selection-owner-p 'selection-owner-p)
(define-obsolete-variable-alias 'x-selection-converter-alist
'selection-converter-alist)
(define-obsolete-variable-alias 'x-lost-selection-hooks 'lost-selection-hooks)
-(define-obsolete-variable-alias 'x-selected-text-type 'selected-text-type)
+(define-obsolete-variable-alias 'x-selected-text-type
'selection-preferred-types)
(define-obsolete-function-alias 'x-valid-simple-selection-p
'valid-simple-selection-p)
(define-obsolete-function-alias 'x-own-selection 'own-selection)
(define-obsolete-function-alias 'x-disown-selection 'disown-selection)
No revision
No revision
1.1.2.1 +45 -0 XEmacs/xemacs/lisp/Attic/ChangeLog.Xft
Index: ChangeLog.Xft
===================================================================
RCS file: ChangeLog.Xft
diff -N ChangeLog.Xft
--- /dev/null Tue Mar 15 06:21:56 2005
+++ /tmp/cvsAAAmXaqgS Tue Mar 15 06:22:00 2005
@@ -0,0 +1,45 @@
+2005-03-02 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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 <kehoea(a)parhasard.net>
+
+ 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 <eric(a)xemacs.org>
+
+ * fontconfig.el (fc-try-font):
+ (fc-find-available-font-families):
+ (fc-find-available-weights-for-family): adapt to new representation of
+ FcObjectSets
+
1.1.6.1 +0 -0 XEmacs/xemacs/lisp/easy-mmode.el
Index: easy-mmode.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/easy-mmode.el,v
retrieving revision 1.1
retrieving revision 1.1.6.1
diff -u -r1.1 -r1.1.6.1
1.2.6.1 +0 -0 XEmacs/xemacs/lisp/regexp-opt.el
Index: regexp-opt.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/regexp-opt.el,v
retrieving revision 1.2
retrieving revision 1.2.6.1
diff -u -r1.2 -r1.2.6.1
No revision
No revision
1.9.6.1 +33 -3 XEmacs/xemacs/lisp/mule/european.el
Index: european.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/mule/european.el,v
retrieving revision 1.9
retrieving revision 1.9.6.1
diff -u -r1.9 -r1.9.6.1
--- european.el 2002/06/04 06:04:29 1.9
+++ european.el 2005/03/15 05:22:20 1.9.6.1
@@ -4,7 +4,7 @@
;; Licensed to the Free Software Foundation.
;; Copyright (C) 1997 MORIOKA Tomohiko
;; Copyright (C) 2001 Ben Wing.
-;; Copyright (C) 2002 Free Software Foundation
+;; Copyright (C) 2002, 2005 Free Software Foundation
;; Keywords: multilingual, European
@@ -27,8 +27,8 @@
;;; Commentary:
-;; For Europeans, six coded character sets ISO8859-1,2,3,4,9 are supported.
-;; Note: ISO 8859/15 (Latin-9) is supported via the latin-unity package.
+;; For Roman-alphabet-using Europeans, eight coded character sets,
+;; ISO8859-1,2,3,4,9,14,15,16 are supported.
;; #### latin.el would be a better name for this file.
@@ -131,6 +131,27 @@
long-name "RHP of Latin-8 (ISO 8859-14)"
))
+(make-charset 'latin-iso8859-16
+ "Right-Hand Part of Latin Alphabet 10 (ISO/IEC 8859-16)"
+ '(dimension
+ 1
+ registry "ISO8859-16"
+ chars 96
+ columns 1
+ direction l2r
+ final ?f ; octet 06/06; cf ISO-IR 226
+ graphic 1
+ short-name "RHP of Latin-10"
+ long-name "RHP of Latin-10 (ISO 8859-16)"
+ ))
+
+(loop for c from 64 to 127
+ do (modify-syntax-entry (make-char 'latin-iso8859-16 c) "w"))
+(mapc (lambda (c)
+ (modify-syntax-entry (make-char 'latin-iso8859-16 c) "w"))
+ '(#xA1 #xA2 #xA3 #xA6 #xA8 #xAA #xAC #xAE #xAF
+ #xB3 #xB4 #xB5 #xB8 #xB9 #xBA #xBC #xBD #xBE #xBF))
+
;; For syntax of Latin-1 characters.
(loop for c from 64 to 127 ; from ',A@(B' to ',A(B'
@@ -350,6 +371,15 @@
charset-g3 t
mnemonic "MIME/Ltn-5"
))
+
+;; Add a coding system for ISO 8859-16.
+(make-coding-system
+ 'iso-8859-16 'iso2022 "MIME ISO-8859-16"
+ '(charset-g0 ascii
+ charset-g1 latin-iso8859-16
+ charset-g2 t ; grrr
+ charset-g3 t ; grrr
+ mnemonic "MIME/Ltn-10"))
(loop for ((charset codesys default-input nice-charset-1 nice-charset-2
supported-langs ;; a list if the doc string is replaced
No revision
No revision
1.64.2.9 +3 -56 XEmacs/xemacs/lwlib/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lwlib/ChangeLog,v
retrieving revision 1.64.2.8
retrieving revision 1.64.2.9
diff -u -r1.64.2.8 -r1.64.2.9
--- ChangeLog 2005/03/09 09:30:26 1.64.2.8
+++ ChangeLog 2005/03/15 05:22:24 1.64.2.9
@@ -1,69 +1,16 @@
-2005-03-09 Stephen J. Turnbull <stephen(a)xemacs.org>
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
- * xlwtabs.c (TabsGeometryManager): Fix "fat fingers" mistake.
+ * XEmacs 21.5.20 "cilantro" is released.
2005-03-07 Stephen J. Turnbull <stephen(a)xemacs.org>
* lwlib-Xlw.c (build_tabs_in_widget): Correctly disable geometry
negotiation for tab children.
(xlw_create_tab_control): Don't set nonexistent resizable resource.
-
- * 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 <stephen(a)xemacs.org>
-
- * xlwtabs.c(debug_tabs): Suppress debug output for now.
-
2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * 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 <stephen(a)xemacs.org>
-
- * 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 <stephen(a)xemacs.org>
-
- * 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 <stephen(a)xemacs.org>
-
- * 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 <stephen(a)xemacs.org>
-
- * xlwmenu.c (xlwMenuResources): Use "redundant" XftFont resource.
-
- * xlwtabs.c:
- * xlwtabsP.h:
- Use USE_XFT_TABS consistently.
-
-2004-12-01 Stephen J. Turnbull <stephen(a)xemacs.org>
- * xlwtabs.c: Move debug_xft to ../src/xft-fonts.c.
+ * XEmacs 21.5.19 "chives" is released.
2004-10-22 Stephen J. Turnbull <stephen(a)xemacs.org>
No revision
No revision
1.1.2.1 +63 -0 XEmacs/xemacs/lwlib/Attic/ChangeLog.Xft
Index: ChangeLog.Xft
===================================================================
RCS file: ChangeLog.Xft
diff -N ChangeLog.Xft
--- /dev/null Tue Mar 15 06:22:26 2005
+++ /tmp/cvsAAA80aORS Tue Mar 15 06:22:29 2005
@@ -0,0 +1,63 @@
+2005-03-09 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * xlwtabs.c (TabsGeometryManager): Fix "fat fingers" mistake.
+
+2005-03-07 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * xlwtabs.c(debug_tabs): Suppress debug output for now.
+
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * xlwmenu.c (xlwMenuResources): Use "redundant" XftFont resource.
+
+ * xlwtabs.c:
+ * xlwtabsP.h:
+ Use USE_XFT_TABS consistently.
+
+2004-12-01 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * xlwtabs.c: Move debug_xft to ../src/xft-fonts.c.
+
No revision
No revision
1.269.2.5 +510 -16 XEmacs/xemacs/man/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/ChangeLog,v
retrieving revision 1.269.2.4
retrieving revision 1.269.2.5
diff -u -r1.269.2.4 -r1.269.2.5
--- ChangeLog 2005/02/19 14:43:37 1.269.2.4
+++ ChangeLog 2005/03/15 05:22:32 1.269.2.5
@@ -1,3 +1,54 @@
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.20 "cilantro" is released.
+
+2005-03-05 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * beta.texi : Change configure arguments to the new autoconf 2.5
+ style configure.
+ * internals/internals.texi (The Build Configuration System): Fill
+ out the details.
+
+2005-01-19 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * lispref/mule.texi (CCL Example): Detail an implementation of the
+ web's URL encoding as a CCL coding system example.
+
+2005-02-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * internals/internals.texi (The version.sh Script): New node.
+ (XEmacs from the Perspective of Building):
+ (Low-Level Modules):
+ (The Build Configuration System):
+ (Adding Configurable Features):
+ Add or update references to the version.sh node and/or file.
+
+ (XEmacs from the Perspective of Building): Improve text.
+
+
+2005-01-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * internals/internals.texi (XEmacs): Add XEmacs 21.4.16 to list.
+ (The XEmacs Split): Add comments on untrue legal factoids.
+ (The XEmacs Split): Add some @urefs for Jamie's commentary.
+
+2005-02-23 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * lispref/searching.texi (Syntax of Regexps):
+ Mention the \c and \C regular expression constructs; cross
+ reference to the Category Table documentation.
+
+2005-02-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * internals/internals.texi (The version.sh Script): New node.
+ (XEmacs from the Perspective of Building):
+ (Low-Level Modules):
+ (The Build Configuration System):
+ (Adding Configurable Features):
+ Add or update references to the version.sh node and/or file.
+
+ (XEmacs from the Perspective of Building): Improve text.
+
2005-02-19 Stephen J. Turnbull <stephen(a)xemacs.org>
* internals/internals.texi (Introduction to Writing C Code):
@@ -8,7 +59,20 @@
his implementations of keyword and complex options, and remove
descriptions of my obsolete code.
+2005-01-16 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * internals/internals.texi (Better Rendering Support --
+ Configuration with the Interim Patches):
+ Improve notes on configuration.
+
+2004-12-15 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * internals/internals.texi (Better Rendering Support --
+ Configuration with the Interim Patches): Menubar uses xftFont
+ resource, too.
+
2005-02-03 Stephen J. Turnbull <stephen(a)xemacs.org>
+
* internals/internals.texi (XEmacs from the Perspective of
Building): Mention autoconf.
(The Modules of XEmacs): Point Next the The Build Configuration
@@ -29,29 +93,459 @@
New nodes.
(Rules When Writing New C Code):
Point Previous to The Build Configuration System.
-2005-01-16 Stephen J. Turnbull <stephen(a)xemacs.org>
- * internals/internals.texi (Better Rendering Support --
- Configuration with the Interim Patches):
- Improve notes on configuration.
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
-2004-12-15 Stephen J. Turnbull <stephen(a)xemacs.org>
+ * XEmacs 21.5.19 "chives" is released.
- * internals/internals.texi (Better Rendering Support --
- Configuration with the Interim Patches): Menubar uses xftFont
- resource, too.
+2005-02-03 Ben Wing <ben(a)xemacs.org>
-2005-01-16 Stephen J. Turnbull <stephen(a)xemacs.org>
+ * xemacs-faq.texi:
+ * xemacs-faq.texi (Top):
+ * xemacs-faq.texi (Introduction):
+ * xemacs-faq.texi (Q1.2.2):
+ * xemacs-faq.texi (Q1.2.5):
+ * xemacs-faq.texi (Q1.2.9):
+ * xemacs-faq.texi (Q1.2.10):
+ * xemacs-faq.texi (Q1.2.11):
+ * xemacs-faq.texi (Q1.2.12):
+ * xemacs-faq.texi (Q1.4.2):
+ * xemacs-faq.texi (Q1.5.2):
+ * xemacs-faq.texi (Q1.5.3):
+ * xemacs-faq.texi (Q1.5.4):
+ * xemacs-faq.texi (Q1.5.5):
+ * xemacs-faq.texi (Q1.6.6):
+ * xemacs-faq.texi (Q1.7.1):
+ * xemacs-faq.texi (Q1.7.2):
+ * xemacs-faq.texi (Q1.7.3):
+ * xemacs-faq.texi (Q1.7.4):
+ * xemacs-faq.texi (Installation):
+ * xemacs-faq.texi (Q2.0.1):
+ * xemacs-faq.texi (Q2.0.2):
+ * xemacs-faq.texi (Q2.0.3):
+ * xemacs-faq.texi (Q2.0.4):
+ * xemacs-faq.texi (Q2.0.5):
+ * xemacs-faq.texi (Q2.1.1):
+ * xemacs-faq.texi (Q2.1.2):
+ * xemacs-faq.texi (Q2.1.3):
+ * xemacs-faq.texi (Q2.1.4):
+ * xemacs-faq.texi (Q2.1.5):
+ * xemacs-faq.texi (Q2.1.6):
+ * xemacs-faq.texi (Q2.1.7):
+ * xemacs-faq.texi (Q2.2.1):
+ * xemacs-faq.texi (Q2.2.2):
+ * xemacs-faq.texi (Q2.3.1):
+ * xemacs-faq.texi (Q2.3.2):
+ * xemacs-faq.texi (Q2.3.3):
+ * xemacs-faq.texi (Q2.3.4):
+ * xemacs-faq.texi (Q2.3.5):
+ * xemacs-faq.texi (Q2.3.6):
+ * xemacs-faq.texi (Q2.3.7):
+ * xemacs-faq.texi (Q2.3.8):
+ * xemacs-faq.texi (Q2.4.1):
+ * xemacs-faq.texi (Q2.4.2):
+ * xemacs-faq.texi (Q2.4.3):
+ * xemacs-faq.texi (Q2.4.4):
+ * xemacs-faq.texi (Q2.4.5):
+ * xemacs-faq.texi (Q2.4.6):
+ * xemacs-faq.texi (Q2.4.7):
+ * xemacs-faq.texi (Q2.4.8):
+ * xemacs-faq.texi (Q2.4.9):
+ * xemacs-faq.texi (Q2.4.10):
+ * xemacs-faq.texi (Q2.4.11):
+ * xemacs-faq.texi (Q2.4.12):
+ * xemacs-faq.texi (Q2.5.1):
+ * xemacs-faq.texi (Q2.5.2):
+ * xemacs-faq.texi (Q2.5.3):
+ * xemacs-faq.texi (Q2.5.4):
+ * xemacs-faq.texi (Q2.5.5):
+ * xemacs-faq.texi (Legacy Versions):
+ * xemacs-faq.texi (Q10.0.1):
+ * xemacs-faq.texi (Q10.0.2):
+ Flesh out intro section on packages and section on installing
+ packages. Incorporate README, README.packages, BUGS, etc/PACKAGES.
+ Various other changes.
- * internals/internals.texi (Better Rendering Support --
- Configuration with the Interim Patches):
- Improve notes on configuration.
+2005-02-03 Stephen J. Turnbull <stephen(a)xemacs.org>
-2004-12-15 Stephen J. Turnbull <stephen(a)xemacs.org>
+ * beta.texi: Update Copyright. Add pointer comment.
- * internals/internals.texi (Better Rendering Support --
- Configuration with the Interim Patches): Menubar uses xftFont
- resource, too.
+ (New packages): Remove personal names, point at jobs.html
+ instead.
+
+ (Syncing with GNU Emacs): Change "don't assume Mule" to
+ "conditionalize Mule dependencies correctly". RMS stroking: use
+ "GNU", not "FSF", in sync notices.
+
+2005-02-02 Robert Delius Royar <xemacs(a)frinabulax.org>
+
+ * beta.texi (Top):
+ Add reference to Index in catalog to prevent
+ errors compiling with GNU makeinfo 4.5.
+
+ * beta.texi (Syncing with GNU Emacs):
+ Add forward reference to Index in next node to prevent
+ errors compiling with GNU makeinfo 4.5.
+
+ * beta.texi (Index):
+ Add backward reference to Syncing with GNU Emacs to
+ replace obsolete reference to Defining Variables to
+ prevent errors compiling with GNU makeinfo 4.5.
+
+2005-01-31 Ben Wing <ben(a)xemacs.org>
+
+ * xemacs/help.texi (Misc Help):
+ Delete references to DISTRIB. Point to FAQ.
+
+ * xemacs/new.texi:
+ Update sample code for version checking.
+
+ * xemacs/xemacs.texi (Distrib):
+ * xemacs/xemacs.texi (Intro):
+ Delete references to DISTRIB. Point directly to web site.
+ Update stuff referring to GNU Emacs. Delete references to Win-Emacs.
+
+2005-01-31 Ben Wing <ben(a)xemacs.org>
+
+ * Makefile:
+ * Makefile (info_files):
+ * Makefile (html_files):
+ * Makefile (dvi_files):
+ * Makefile (pdf_files):
+ * Makefile ($(INFODIR)/beta.info):
+ Add beta.texi and built files.
+
+ * xemacs-faq.texi (Top):
+ * xemacs-faq.texi (Introduction):
+ * xemacs-faq.texi (Q1.0.3):
+ * xemacs-faq.texi (Q1.0.4):
+ * xemacs-faq.texi (Q1.0.5):
+ * xemacs-faq.texi (Q1.0.6):
+ * xemacs-faq.texi (Q1.1.1):
+ * xemacs-faq.texi (Q1.1.2):
+ * xemacs-faq.texi (Q1.1.3):
+ * xemacs-faq.texi (Q1.1.4):
+ * xemacs-faq.texi (Q1.2.1):
+ * xemacs-faq.texi (Q1.2.2):
+ * xemacs-faq.texi (Q1.2.3):
+ * xemacs-faq.texi (Q1.2.4):
+ * xemacs-faq.texi (Q1.2.5):
+ * xemacs-faq.texi (Q1.2.6):
+ * xemacs-faq.texi (Q1.2.7):
+ * xemacs-faq.texi (Q1.2.8):
+ * xemacs-faq.texi (Q1.2.9):
+ * xemacs-faq.texi (Q1.2.10):
+ * xemacs-faq.texi (Q1.2.11):
+ * xemacs-faq.texi (Q1.2.12):
+ * xemacs-faq.texi (Q1.2.13):
+ * xemacs-faq.texi (Q1.3.1):
+ * xemacs-faq.texi (Q1.3.2):
+ * xemacs-faq.texi (Q1.3.3):
+ * xemacs-faq.texi (Q1.3.4):
+ * xemacs-faq.texi (Q1.3.5):
+ * xemacs-faq.texi (Q1.3.6):
+ * xemacs-faq.texi (Q1.3.7):
+ * xemacs-faq.texi (Q1.3.8):
+ * xemacs-faq.texi (Q1.4.1):
+ * xemacs-faq.texi (Q1.4.2):
+ * xemacs-faq.texi (double-word): New.
+ * xemacs-faq.texi (Q1.4.3):
+ * xemacs-faq.texi (Q1.4.4):
+ * xemacs-faq.texi (Q1.4.5):
+ * xemacs-faq.texi (Q1.5.1):
+ * xemacs-faq.texi (Q1.5.2):
+ * xemacs-faq.texi (Q1.5.3):
+ * xemacs-faq.texi (Q1.6.1):
+ * xemacs-faq.texi (Q1.6.2):
+ * xemacs-faq.texi (Q1.6.3):
+ * xemacs-faq.texi (Q1.6.4):
+ * xemacs-faq.texi (Q1.6.5):
+ * xemacs-faq.texi (Q1.6.6):
+ * xemacs-faq.texi (Q1.7.1):
+ * xemacs-faq.texi (Q1.8.1):
+ * xemacs-faq.texi (Q1.8.2):
+ * xemacs-faq.texi (Q1.8.3):
+ * xemacs-faq.texi (Q1.8.4):
+ * xemacs-faq.texi (Q1.8.5):
+ * xemacs-faq.texi (Q1.8.6):
+ * xemacs-faq.texi (Q1.8.7):
+ * xemacs-faq.texi (Q1.8.8):
+ * xemacs-faq.texi (Q1.8.9):
+ * xemacs-faq.texi (Q2.2.1):
+ * xemacs-faq.texi (Q2.2.2):
+ * xemacs-faq.texi (Q2.4.2):
+ * xemacs-faq.texi (Advanced):
+ * xemacs-faq.texi (Q7.0.1):
+ * xemacs-faq.texi (Q7.0.2):
+ * xemacs-faq.texi (Q7.0.3):
+ * xemacs-faq.texi (Q7.0.4):
+ * xemacs-faq.texi (Q7.0.5):
+ * xemacs-faq.texi (Q7.0.6):
+ * xemacs-faq.texi (Q7.1.1):
+ * xemacs-faq.texi (Q7.1.2):
+ * xemacs-faq.texi (Q7.1.3):
+ * xemacs-faq.texi (Q7.1.4):
+ * xemacs-faq.texi (Q7.1.5):
+ * xemacs-faq.texi (Q7.1.6):
+ * xemacs-faq.texi (Q7.1.7):
+ * xemacs-faq.texi (Q7.1.8):
+ * xemacs-faq.texi (Q7.1.9):
+ * xemacs-faq.texi (Q7.1.10):
+ * xemacs-faq.texi (Q7.1.11):
+ * xemacs-faq.texi (Q7.2.1):
+ * xemacs-faq.texi (Q7.2.2):
+ * xemacs-faq.texi (Q7.2.3):
+ * xemacs-faq.texi (Other Packages):
+ * xemacs-faq.texi (Current Events):
+ * xemacs-faq.texi (Legacy Versions):
+ Major overhaul of section 1. Add mailing list info, update
+ downloading info, add info on CVS, etc.
+
+2004-10-17 Shyamal Prasad <shyamal(a)member.fsf.org>
+
+ * xemacs/programs.texi (Program Modes): Updated it to reflect
+ current status of programming modes.
+ * xemacs/programs.texi (CC Mode): New section introduces CC
+ Mode. Introduces customization with reference to CC Mode
+ manual. Also introduce C/AWK modes in prog-modes package
+ * xemacs/programs.texi (C Ident): Removed - it was
+ obsolete. prog-modes package documentation now contains
+ indentation description for old C mode
+ * xemacs/major.texi (Mode Hooks): Add description of major mode
+ hooks. Cleaned up and updated programming mode descriptions.
+ * xemacs/xemacs.texi (Top): Updated Detailed Node listing for new
+ CC Mode section in programs.texi
+
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * internals/internals.texi:
+ * internals/internals.texi (Through Version 18):
+ * internals/internals.texi (GNU Emacs 19):
+ * internals/internals.texi (GNU Emacs 20):
+ Update History.
+
+ * internals/internals.texi (Unicode support under Windows):
+ Redo section on Windows 95 support for Unicode.
+
+2005-01-19 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * man/lispref/functions.texi (Functions): Rename to "Functions and
+ Commands"
+ * man/lispref/functions.texi (What Is a Function): Move the definition
+ of a command further up the list, give information on a trivial
+ (interactive) declaration, and cross-reference to the key binding
+ detail. Cf. 87vf9wgd08.fsf(a)tleepslib.sk.tsukuba.ac.jp
+ (comp.emacs.xemacs, 2005-01-18).
+ * man/lispref/eval.texi man/lispref/lispref.texi
+ man/lispref/macros.texi man/lispref/symbols.texi
+ man/lispref/variables.texi: Fix cross references.
+
+2004-12-28 Ben Wing <ben(a)xemacs.org>
+
+ * xemacs-faq.texi (Top):
+ * xemacs-faq.texi (Introduction):
+ * xemacs-faq.texi (Q1.0.3):
+ * xemacs-faq.texi (Q1.0.5):
+ * xemacs-faq.texi (Q1.0.10):
+ * xemacs-faq.texi (Q1.1.4):
+ * xemacs-faq.texi (Q1.1.5):
+ * xemacs-faq.texi (Q1.4.1):
+ * xemacs-faq.texi (Q1.4.3):
+ * xemacs-faq.texi (Q1.5.8):
+ * xemacs-faq.texi (Installation):
+ * xemacs-faq.texi (Q2.0.3):
+ * xemacs-faq.texi (Q2.0.5):
+ * xemacs-faq.texi (Q2.1.1):
+ * xemacs-faq.texi (Q2.1.2):
+ * xemacs-faq.texi (Q2.2.7):
+ * xemacs-faq.texi (Q2.4.6):
+ * xemacs-faq.texi (Editing):
+ * xemacs-faq.texi (Q3.0.1):
+ * xemacs-faq.texi (Q3.0.2):
+ * xemacs-faq.texi (Q3.0.3):
+ * xemacs-faq.texi (Q3.0.4):
+ * xemacs-faq.texi (Q3.0.5):
+ * xemacs-faq.texi (Q3.0.6):
+ * xemacs-faq.texi (Q3.0.7):
+ * xemacs-faq.texi (Q3.0.8):
+ * xemacs-faq.texi (Q3.0.9):
+ * xemacs-faq.texi (Q3.0.10):
+ * xemacs-faq.texi (Q3.0.11):
+ * xemacs-faq.texi (Q3.1.1):
+ * xemacs-faq.texi (Q3.1.2):
+ * xemacs-faq.texi (Q3.1.3):
+ * xemacs-faq.texi (Q3.1.4):
+ * xemacs-faq.texi (Q3.1.5):
+ * xemacs-faq.texi (Q3.2.1):
+ * xemacs-faq.texi (Q3.2.2):
+ * xemacs-faq.texi (Q3.2.3):
+ * xemacs-faq.texi (Q3.2.4):
+ * xemacs-faq.texi (Q3.2.5):
+ * xemacs-faq.texi (Q3.3.1):
+ * xemacs-faq.texi (Q3.3.2):
+ * xemacs-faq.texi (Q3.3.3):
+ * xemacs-faq.texi (Q3.3.4):
+ * xemacs-faq.texi (Q3.3.5):
+ * xemacs-faq.texi (Q3.3.6):
+ * xemacs-faq.texi (Q3.4.1):
+ * xemacs-faq.texi (Q3.4.2):
+ * xemacs-faq.texi (Display):
+ * xemacs-faq.texi (Q4.0.1):
+ * xemacs-faq.texi (Q4.0.2):
+ * xemacs-faq.texi (Q4.0.3):
+ * xemacs-faq.texi (Q4.0.4):
+ * xemacs-faq.texi (my-toggle-toolbar): Removed.
+ * xemacs-faq.texi (Q4.0.5):
+ * xemacs-faq.texi (Q4.0.6):
+ * xemacs-faq.texi (Q4.0.7):
+ * xemacs-faq.texi (Q4.0.8):
+ * xemacs-faq.texi (Q4.0.9):
+ * xemacs-faq.texi (Q4.1.1):
+ * xemacs-faq.texi (Q4.1.2):
+ * xemacs-faq.texi (Q4.2.1):
+ * xemacs-faq.texi (Q4.2.2):
+ * xemacs-faq.texi (Q4.2.3):
+ * xemacs-faq.texi (Q4.2.4):
+ * xemacs-faq.texi (Q4.3.1):
+ * xemacs-faq.texi (Q4.3.2):
+ * xemacs-faq.texi (Q4.3.3):
+ * xemacs-faq.texi (Q4.4.1):
+ * xemacs-faq.texi (Q4.4.2):
+ * xemacs-faq.texi (Q4.4.3):
+ * xemacs-faq.texi (Q4.4.4):
+ * xemacs-faq.texi (Q4.4.5):
+ * xemacs-faq.texi (Q4.5.1):
+ * xemacs-faq.texi (Q4.5.2):
+ * xemacs-faq.texi (Q4.5.3):
+ * xemacs-faq.texi (Q4.5.4):
+ * xemacs-faq.texi (Q4.6.1):
+ * xemacs-faq.texi (Q4.6.2):
+ * xemacs-faq.texi (Q4.6.3):
+ * xemacs-faq.texi (Q4.6.4):
+ * xemacs-faq.texi (scroll-up): Removed.
+ * xemacs-faq.texi (Q4.6.5):
+ * xemacs-faq.texi (scroll-down): Removed.
+ * xemacs-faq.texi (Q4.6.6):
+ * xemacs-faq.texi (Q4.6.7):
+ * xemacs-faq.texi (Q4.7.1):
+ * xemacs-faq.texi (Q4.7.2):
+ * xemacs-faq.texi (Q4.7.3):
+ * xemacs-faq.texi (Q4.7.4):
+ * xemacs-faq.texi (External Subsystems):
+ * xemacs-faq.texi (Q5.0.1):
+ * xemacs-faq.texi (Q5.0.2):
+ * xemacs-faq.texi (Q5.0.3):
+ * xemacs-faq.texi (Q5.0.4):
+ * xemacs-faq.texi (Q5.0.5):
+ * xemacs-faq.texi (Q5.0.6):
+ * xemacs-faq.texi (Q5.1.1):
+ * xemacs-faq.texi (Q5.1.2):
+ * xemacs-faq.texi (Q5.2.1):
+ * xemacs-faq.texi (Q5.2.2):
+ * xemacs-faq.texi (Q5.2.3):
+ * xemacs-faq.texi (Q5.2.4):
+ * xemacs-faq.texi (Q5.3.1):
+ * xemacs-faq.texi (Q5.3.2):
+ * xemacs-faq.texi (Q5.3.3):
+ * xemacs-faq.texi (Q5.3.4):
+ * xemacs-faq.texi (Q5.4.1):
+ * xemacs-faq.texi (Q5.4.2):
+ * xemacs-faq.texi (Q5.4.3):
+ * xemacs-faq.texi (Q5.4.4):
+ * xemacs-faq.texi (Q5.4.5):
+ * xemacs-faq.texi (Q5.5.1):
+ * xemacs-faq.texi (Q5.5.2):
+ * xemacs-faq.texi (Q5.5.3):
+ * xemacs-faq.texi (Q5.5.4):
+ * xemacs-faq.texi (Q5.5.5):
+ * xemacs-faq.texi (Internet):
+ * xemacs-faq.texi (Q6.0.1):
+ * xemacs-faq.texi (Q6.0.2):
+ * xemacs-faq.texi (Q6.0.3):
+ * xemacs-faq.texi (Q6.0.4):
+ * xemacs-faq.texi (Q6.0.5):
+ * xemacs-faq.texi (Q6.0.6):
+ * xemacs-faq.texi (Q6.0.7):
+ * xemacs-faq.texi (Q6.0.8):
+ * xemacs-faq.texi (Q6.0.9):
+ * xemacs-faq.texi (Q6.0.10):
+ * xemacs-faq.texi (Q6.0.11):
+ * xemacs-faq.texi (Q6.1.1):
+ * xemacs-faq.texi (Q6.1.2):
+ * xemacs-faq.texi (Q6.1.3):
+ * xemacs-faq.texi (Q6.1.4):
+ * xemacs-faq.texi (Q6.1.5):
+ * xemacs-faq.texi (Q6.1.6):
+ * xemacs-faq.texi (Q6.2.1):
+ * xemacs-faq.texi (Q6.2.2):
+ * xemacs-faq.texi (Q6.3.1):
+ * xemacs-faq.texi (Q6.3.2):
+ * xemacs-faq.texi (Q6.4.1):
+ * xemacs-faq.texi (Q6.4.2):
+ * xemacs-faq.texi (Q6.4.3):
+ * xemacs-faq.texi (Advanced):
+ * xemacs-faq.texi (Q7.0.1):
+ * xemacs-faq.texi (Q7.0.2):
+ * xemacs-faq.texi (Q7.1.1):
+ * xemacs-faq.texi (Q7.1.2):
+ * xemacs-faq.texi (Q7.1.3):
+ * xemacs-faq.texi (Q7.1.4):
+ * xemacs-faq.texi (Q7.1.5):
+ * xemacs-faq.texi (Q7.1.6):
+ * xemacs-faq.texi (Q7.2.1):
+ * xemacs-faq.texi (Q7.2.2):
+ * xemacs-faq.texi (Q7.2.3):
+ * xemacs-faq.texi (Q7.2.4):
+ * xemacs-faq.texi (Q7.2.5):
+ * xemacs-faq.texi (Q7.2.6):
+ * xemacs-faq.texi (Q7.2.7):
+ * xemacs-faq.texi (Q7.2.8):
+ * xemacs-faq.texi (Q7.2.9):
+ * xemacs-faq.texi (Q7.2.10):
+ * xemacs-faq.texi (Q7.2.11):
+ * xemacs-faq.texi (Q7.3.1):
+ * xemacs-faq.texi (Q7.3.2):
+ * xemacs-faq.texi (Q7.3.3):
+ * xemacs-faq.texi (Q7.3.4):
+ * xemacs-faq.texi (Other Packages):
+ * xemacs-faq.texi (Q8.0.1):
+ * xemacs-faq.texi (Q8.0.2):
+ * xemacs-faq.texi (Q8.0.3):
+ * xemacs-faq.texi (Q8.0.4):
+ * xemacs-faq.texi (Q8.1.1):
+ * xemacs-faq.texi (Q8.1.2):
+ * xemacs-faq.texi (Q8.1.3):
+ * xemacs-faq.texi (Q8.2.1):
+ * xemacs-faq.texi (Q8.2.2):
+ * xemacs-faq.texi (Q8.2.3):
+ * xemacs-faq.texi (Q8.2.4):
+ * xemacs-faq.texi (Current Events):
+ * xemacs-faq.texi (Q9.0.1):
+ * xemacs-faq.texi (my-function): Removed.
+ * xemacs-faq.texi (Q9.0.2):
+ * xemacs-faq.texi (Q9.0.3):
+ * xemacs-faq.texi (Q9.0.4):
+ * xemacs-faq.texi (Q9.0.5):
+ * xemacs-faq.texi (Legacy Versions):
+ Major rearrangement. Expand to 10 sections. Add various questions,
+ mostly stubs currently. Remove some obsolete stuff. Update a bunch
+ of the links.
+
+2004-12-15 Ville Skyttä <scop(a)xemacs.org>
+
+ * lispref/help.texi: Document 3rd arg to `make-obsolete'.
+
+2004-12-15 Robert Delius Royar <xemacs(a)frinabulax.org>
+
+ * internals/internals.texi (Modules for the Basic Displayable Lisp
+ Objects): Remove Mote in Make's eye, fix build.
+
+2004-12-12 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * internals/internals.texi (Modules for the Basic Displayable Lisp
+ Objects): Comment on problems, and extensions needed to handle
+ native widgets properly.
2004-12-10 Stephen J. Turnbull <stephen(a)xemacs.org>
1.31.2.2 +10 -0 XEmacs/xemacs/man/Makefile
Index: Makefile
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/Makefile,v
retrieving revision 1.31.2.1
retrieving revision 1.31.2.2
diff -u -r1.31.2.1 -r1.31.2.2
--- Makefile 2004/12/11 05:13:43 1.31.2.1
+++ Makefile 2005/03/15 05:22:33 1.31.2.2
@@ -42,6 +42,7 @@
PHOTODIR = ../etc/photos
info_files = \
+ $(INFODIR)/beta.info \
$(INFODIR)/cl.info \
$(INFODIR)/custom.info \
$(INFODIR)/emodules.info \
@@ -59,6 +60,7 @@
$(INFODIR)/xemacs-faq.info
html_files = \
+ $(HTMLDIR)/beta.html \
$(HTMLDIR)/cl.html \
$(HTMLDIR)/custom.html \
$(HTMLDIR)/emodules.html \
@@ -76,6 +78,7 @@
$(HTMLDIR)/xemacs-faq.html
dvi_files = \
+ beta.dvi \
cl.dvi \
custom.dvi \
emodules.dvi \
@@ -93,6 +96,7 @@
xemacs-faq.dvi
pdf_files = \
+ beta.pdf \
cl.pdf \
custom.pdf \
emodules.pdf \
@@ -237,6 +241,9 @@
new-users-guide/search.texi \
new-users-guide/xmenu.texi
+$(INFODIR)/beta.info : beta.texi
+ $(MAKEINFO) -o $(INFODIR)/beta.info beta.texi
+
$(INFODIR)/cl.info : cl.texi
$(MAKEINFO) -o $(INFODIR)/cl.info cl.texi
@@ -339,6 +346,9 @@
$(RM) *~ \#* */*~ */\#*
############################################################################
+
+$(HTMLDIR)/beta.html : beta.texi
+ $(TEXI2HTML) beta.texi
$(HTMLDIR)/cl.html : cl.texi
$(TEXI2HTML_SPLIT) cl.texi
No revision
No revision
1.3.2.1 +0 -0 XEmacs/xemacs/man/beta.texi
Index: beta.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/beta.texi,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
No revision
No revision
1.5.20.1 +1 -1 XEmacs/xemacs/man/lispref/eval.texi
Index: eval.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/eval.texi,v
retrieving revision 1.5
retrieving revision 1.5.20.1
diff -u -r1.5 -r1.5.20.1
--- eval.texi 2001/04/12 18:22:13 1.5
+++ eval.texi 2005/03/15 05:22:42 1.5.20.1
@@ -74,7 +74,7 @@
function @code{car}.
Evaluation of a function call ultimately calls the function specified
-in it. @xref{Functions}. The execution of the function may itself work
+in it. @xref{Functions and Commands}. The execution of the function may itself work
by evaluating the function definition; or the function may be a Lisp
primitive implemented in C, or it may be a byte-compiled function
(@pxref{Byte Compilation}).
1.2.20.1 +35 -24 XEmacs/xemacs/man/lispref/functions.texi
Index: functions.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/functions.texi,v
retrieving revision 1.2
retrieving revision 1.2.20.1
diff -u -r1.2 -r1.2.20.1
--- functions.texi 2001/04/12 18:22:14 1.2
+++ functions.texi 2005/03/15 05:22:42 1.2.20.1
@@ -3,8 +3,8 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/functions.info
-@node Functions, Macros, Variables, Top
-@chapter Functions
+@node Functions and Commands, Macros, Variables, Top
+@chapter Functions and Commands
A Lisp program is composed mainly of Lisp functions. This chapter
explains what functions are, how they accept arguments, and how to
@@ -45,6 +45,39 @@
specifically to mean a function written in Lisp. Special forms and
macros are not functions.
+@item command
+@cindex command
+
+A @dfn{command} is a possible definition for a key sequence---we count
+mouse events and menu accesses as key sequences for this purpose. More
+formally, within XEmacs lisp, a command is something that
+@code{command-execute} can invoke.
+
+Some functions are commands; a function written in Lisp is a command if
+it contains an interactive declaration. A trivial interactive
+declaration is a line @code{(interactive)} immediately after the
+documentation string. For more complex examples, with prompting and
+completion, see @xref{Defining Commands}. Such a function can be called
+from Lisp expressions like other functions; in this case, the fact that
+the function is a command makes no difference.
+
+Keyboard macros (strings and vectors) are commands also, even though
+they are not functions. A symbol is a command if its function
+definition is a command; such symbols can be invoked with @kbd{M-x}.
+The symbol is a function as well if the definition is a function.
+
+In the case where you want to call a command in reaction to a
+user-generated event, you'll need to bind it to that event. For how to
+do this, see @xref{Key Binding Commands}.
+@xref{Command Overview}.
+
+@item keystroke command
+@cindex keystroke command
+A @dfn{keystroke command} is a command that is bound to a key sequence
+(typically one to three keystrokes). The distinction is made here
+merely to avoid confusion with the meaning of ``command'' in non-Emacs
+editors; for Lisp programs, the distinction is normally unimportant.
+
@item primitive
@cindex primitive
@cindex subr
@@ -83,28 +116,6 @@
original expression. Macros enable Lisp programmers to do the sorts of
things that special forms can do. @xref{Macros}, for how to define and
use macros.
-
-@item command
-@cindex command
-A @dfn{command} is an object that @code{command-execute} can invoke; it
-is a possible definition for a key sequence. Some functions are
-commands; a function written in Lisp is a command if it contains an
-interactive declaration (@pxref{Defining Commands}). Such a function
-can be called from Lisp expressions like other functions; in this case,
-the fact that the function is a command makes no difference.
-
-Keyboard macros (strings and vectors) are commands also, even though
-they are not functions. A symbol is a command if its function
-definition is a command; such symbols can be invoked with @kbd{M-x}.
-The symbol is a function as well if the definition is a function.
-@xref{Command Overview}.
-
-@item keystroke command
-@cindex keystroke command
-A @dfn{keystroke command} is a command that is bound to a key sequence
-(typically one to three keystrokes). The distinction is made here
-merely to avoid confusion with the meaning of ``command'' in non-Emacs
-editors; for Lisp programs, the distinction is normally unimportant.
@item compiled function
A @dfn{compiled function} is a function that has been compiled by the
1.5.20.1 +4 -2 XEmacs/xemacs/man/lispref/help.texi
Index: help.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/help.texi,v
retrieving revision 1.5
retrieving revision 1.5.20.1
diff -u -r1.5 -r1.5.20.1
--- help.texi 2001/04/12 18:22:14 1.5
+++ help.texi 2005/03/15 05:22:43 1.5.20.1
@@ -676,7 +676,7 @@
XEmacs Lisp lets you mark a function or variable as @dfn{obsolete},
and indicate what should be used instead.
-@deffn Command make-obsolete function new
+@deffn Command make-obsolete function new &optional when
This function indicates that @var{function} is an obsolete function,
and the function @var{new} should be used instead. The byte compiler
will issue a warning to this effect when it encounters a usage of the
@@ -684,7 +684,9 @@
documentation. @var{new} can also be a string (if there is not a single
function with the same functionality any more), and should be a descriptive
statement, such as "use @var{foo} or @var{bar} instead" or "this
function is
-unnecessary".
+unnecessary". If provided, @var{when} should be a string indicating when
+the function was first made obsolete, for example a date or a release
+number.
@end deffn
@deffn Command make-obsolete-variable variable new
1.20.2.1 +4 -2 XEmacs/xemacs/man/lispref/lispref.texi
Index: lispref.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/lispref.texi,v
retrieving revision 1.20
retrieving revision 1.20.2.1
diff -u -r1.20 -r1.20.2.1
--- lispref.texi 2004/07/19 08:24:28 1.20
+++ lispref.texi 2005/03/15 05:22:43 1.20.2.1
@@ -144,8 +144,10 @@
* Evaluation:: How Lisp expressions are evaluated.
* Control Structures:: Conditionals, loops, nonlocal exits.
* Variables:: Using symbols in programs to stand for values.
-* Functions:: A function is a Lisp program
- that can be invoked from other functions.
+
+* Functions and Commands:: A function is a Lisp program that can be
+ invoked from other functions.
+
* Macros:: Macros are a way to extend the Lisp language.
* Customization:: Writing customization declarations.
1.2.20.1 +1 -1 XEmacs/xemacs/man/lispref/macros.texi
Index: macros.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/macros.texi,v
retrieving revision 1.2
retrieving revision 1.2.20.1
diff -u -r1.2 -r1.2.20.1
--- macros.texi 2001/04/12 18:22:17 1.2
+++ macros.texi 2005/03/15 05:22:43 1.2.20.1
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/macros.info
-@node Macros, Loading, Functions, Top
+@node Macros, Loading, Functions and Commands, Top
@chapter Macros
@cindex macros
1.11.2.1 +271 -5 XEmacs/xemacs/man/lispref/mule.texi
Index: mule.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/mule.texi,v
retrieving revision 1.11
retrieving revision 1.11.2.1
diff -u -r1.11 -r1.11.2.1
--- mule.texi 2004/11/04 23:06:07 1.11
+++ mule.texi 2005/03/15 05:22:44 1.11.2.1
@@ -1765,7 +1765,7 @@
* CCL Statements:: Semantics of CCL statements.
* CCL Expressions:: Operators and expressions in CCL.
* Calling CCL:: Running CCL programs.
-* CCL Examples:: The encoding functions for Big5 and KOI-8.
+* CCL Example:: A trivial program to transform the Web's URL encoding.
@end menu
@node CCL Syntax, CCL Statements, , CCL
@@ -1986,7 +1986,7 @@
Shift JIS. CCL_DECODE_SJIS is its inverse.) It is somewhat odd to
represent the SJIS operations in infix form.
-@node Calling CCL, CCL Examples, CCL Expressions, CCL
+@node Calling CCL, CCL Example, CCL Expressions, CCL
@comment Node, Next, Previous, Up
@subsection Calling CCL
@@ -2052,11 +2052,277 @@
Resets the CCL interpreter's internal elapsed time registers.
@end defun
-@node CCL Examples, , Calling CCL, CCL
+@node CCL Example, , Calling CCL, CCL
@comment Node, Next, Previous, Up
-@subsection CCL Examples
+@subsection CCL Example
- This section is not yet written.
+ In this section, we describe the implementation of a trivial coding
+system to transform from the Web's URL encoding to XEmacs' internal
+coding. Many people will have been first exposed to URL encoding when
+they saw ``%20'' where they expected a space in a file's name on their
+local hard disk; this can happen when a browser saves a file from the
+web and doesn't encode the name, as passed from the server, properly.
+
+ URL encoding itself is underspecified with regard to encodings beyond
+ASCII. The relevant document, RFC 1738, explicitly doesn't give any
+information on how to encode non-ASCII characters, and the ``obvious''
+way---use the %xx values for the octets of the eight bit MIME character
+set in which the page was served---breaks when a user types a character
+outside that character set. Best practice for web development is to
+serve all pages as UTF-8 and treat incoming form data as using that
+coding system. (Oh, and gamble that your clients won't ever want to
+type anything outside Unicode. But that's not so much of a gamble with
+today's client operating systems.) We don't treat non-ASCII in this
+example, as dealing with @samp{(read-multibyte-character ...)} and
+errors therewith would make it much harder to understand.
+
+ Since CCL isn't a very rich language, we move much of the logic that
+would ordinarily be computed from operations like @code{(member ..)},
+@code{(and ...)} and @code{(or ...)} into tables, from which register
+values are read and written, and on which @code{if} statements are
+predicated. Much more of the implementation of this coding system is
+occupied with constructing these tables---in normal Emacs Lisp---than it
+is with actual CCL code.
+
+ All the @code{defvar} statements we deal with in the next few sections
+are surrounded by a @code{(eval-and-compile ...)}, which means that the
+logic which initializes these variables executes at compile time, and if
+XEmacs loads the compiled version of the file, these variables are
+initialized as constants.
+
+@menu
+* Four bits to ASCII:: Two tables used for getting hex digits from ASCII.
+* URI Encoding constants:: Useful predefined characters.
+* Numeric to ASCII-hexadecimal conversion:: Trivial in Lisp, not so in CCL.
+* Characters to be preserved:: No transformation needed for these characters.
+* The program to decode to internal format:: .
+* The program to encode from internal format:: .
+
+@end menu
+
+@node Four bits to ASCII, URI Encoding constants, , CCL Example
+@subsubsection Four bits to ASCII
+
+ The first @code{defvar} is for
+@code{url-coding-high-order-nybble-as-ascii}, a 256-entry table that
+maps from an octet's value to the ASCII encoding for the hex value of
+its most significant four bits. That might sound complex, but it isn't;
+for decimal 65, hex value @samp{#x41}, the entry in the table is the
+ASCII encoding of `4'. For decimal 122, ASCII `z', hex value
+@code{#x7a}, @code{(elt url-coding-high-order-nybble-as-ascii #x7a)}
+after this file is loaded gives the ASCII encoding of 7.
+
+@example
+(defvar url-coding-high-order-nybble-as-ascii
+ (let ((val (make-vector 256 0))
+ (i 0))
+ (while (< i (length val))
+ (aset val i (char-int (aref (format "%02X" i) 0)))
+ (setq i (1+ i)))
+ val)
+ "Table to find an ASCII version of an octet's most significant 4
bits.")
+@end example
+
+ The next table, @code{url-coding-low-order-nybble-as-ascii} is almost
+the same thing, but this time it has a map for the hex encoding of the
+low-order four bits. So the sixty-fifth entry (offset @samp{#x51}) is
+the ASCII encoding of `1', the hundred-and-twenty-second (offset
+@samp{#x7a}) is the ASCII encoding of `A'.
+
+@example
+(defvar url-coding-low-order-nybble-as-ascii
+ (let ((val (make-vector 256 0))
+ (i 0))
+ (while (< i (length val))
+ (aset val i (char-int (aref (format "%02X" i) 1)))
+ (setq i (1+ i)))
+ val)
+ "Table to find an ASCII version of an octet's least significant 4
bits.")
+@end example
+
+@node URI Encoding constants, Numeric to ASCII-hexadecimal conversion, Four bits to
ASCII, CCL Example
+@subsubsection URI Encoding constants
+
+ Next, we have a couple of variables that make the CCL code more
+readable. The first is the ASCII encoding of the percentage sign; this
+character is used as an escape code, to start the encoding of a
+non-printable character. For historical reasons, URL encoding allows
+the space character to be encoded as a plus sign--it does make typing
+URLs like @samp{http://google.com/search?q=XEmacs+home+page} easier--and
+as such, we have to check when decoding for this value, and map it to
+the space character. When doing this in CCL, we use the
+@code{url-coding-escaped-space-code} variable.
+
+@example
+(defvar url-coding-escape-character-code (char-int ?%)
+ "The code point for the percentage sign, in ASCII.")
+
+(defvar url-coding-escaped-space-code (char-int ?+)
+ "The URL-encoded value of the space character, that is, +.")
+@end example
+
+@node Numeric to ASCII-hexadecimal conversion
+@subsubsection Numeric to ASCII-hexadecimal conversion
+
+ Now, we have a couple of utility tables that wouldn't be necessary in
+a more expressive programming language than is CCL. The first is sixteen
+in length, and maps a hexadecimal number to the ASCII encoding of that
+number; so zero maps to ASCII `0', ten maps to ASCII `A.' The second
+does the reverse; that is, it maps an ASCII character to its value when
+interpreted as a hexadecimal digit. ('A' => 10, 'c' => 12,
'2' => 2, as
+a few examples.)
+
+@example
+(defvar url-coding-hex-digit-table
+ (let ((i 0)
+ (val (make-vector 16 0)))
+ (while (< i 16)
+ (aset val i (char-int (aref (format "%X" i) 0)))
+ (setq i (1+ i)))
+ val)
+ "A map from a hexadecimal digit's numeric value to its encoding in
ASCII.")
+
+(defvar url-coding-latin-1-as-hex-table
+ (let ((val (make-vector 256 0))
+ (i 0))
+ (while (< i (length val))
+ ;; Get a hex val for this ASCII character.
+ (aset val i (string-to-int (format "%c" i) 16))
+ (setq i (1+ i)))
+ val)
+ "A map from Latin 1 code points to their values as hexadecimal digits.")
+@end example
+
+@node Characters to be preserved
+@subsubsection Characters to be preserved
+
+ And finally, the last of these tables. URL encoding says that
+alphanumeric characters, the underscore, hyphen and the full stop
+@footnote{That's what the standards call it, though my North American
+readers will be more familiar with it as the period character.} retain
+their ASCII encoding, and don't undergo transformation.
+@code{url-coding-should-preserve-table} is an array in which the entries
+are one if the corresponding ASCII character should be left as-is, and
+zero if they should be transformed. So the entries for all the control
+and most of the punctuation charcters are zero. Lisp programmers will
+observe that this initialization is particularly inefficient, but
+they'll also be aware that this is a long way from an inner loop where
+every nanosecond counts.
+
+@example
+(defvar url-coding-should-preserve-table
+ (let ((preserve
+ (list ?- ?_ ?. ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o
+ ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z ?A ?B ?C ?D ?E ?F ?G
+ ?H ?I ?J ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y
+ ?Z ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9))
+ (i 0)
+ (res (make-vector 256 0)))
+ (while (< i 256)
+ (when (member (int-char i) preserve)
+ (aset res i 1))
+ (setq i (1+ i)))
+ res)
+ "A 256-entry array of flags, indicating whether or not to preserve an
+octet as its ASCII encoding.")
+@end example
+
+@node The program to decode to internal format
+@subsubsection The program to decode to internal format
+
+ After the almost interminable tables, we get to the CCL. The first
+CCL program, @code{ccl-decode-urlcoding} decodes from the URL coding to
+our internal format; since this version of CCL doesn't have support for
+error checking on the input, we don't do any verification on it.
+
+The buffer magnification--approximate ratio of the size of the output
+buffer to the size of the input buffer--is declared as one, because
+fractional values aren't allowed. (Since all those %20's will map to
+` ', the length of the output text will be less than that of the input
+text.)
+
+So, first we read an octet from the input buffer into register
+@samp{r0}, to set up the loop. Next, we start the loop, with a
+@code{(loop ...)} statement, and we check if the value in @samp{r0} is a
+percentage sign. (Note the comma before
+@code{url-coding-escape-character-code}; since CCL is a Lisp macro
+language, we can break out of the macro evaluation with a comman, and as
+such, ``@code{,url-coding-escape-character-code}'' will be evaluated as a
+literal `37.')
+
+If it is a percentage sign, we read the next two octets into @samp{r2}
+and @samp{r3}, and convert them into their hexadecimal numeric values,
+using the @code{url-coding-latin-1-as-hex-table} array declared above.
+(But again, it'll be interpreted as a literal array.) We then left
+shift the first by four bits, mask the two together, and write the
+result to the output buffer.
+
+If it isn't a percentage sign, and it is a `+' sign, we write a
+space--hexadecimal 20--to the output buffer.
+
+If none of those things are true, we pass the octet to the output buffer
+untransformed. (This could be a place to put error checking, in a more
+expressive language.) We then read one more octet from the input
+buffer, and move to the next iteration of the loop.
+
+@example
+(define-ccl-program ccl-decode-urlcoding
+ `(1
+ ((read r0)
+ (loop
+ (if (r0 == ,url-coding-escape-character-code)
+ ((read r2 r3)
+ ;; Assign the value at offset r2 in the url-coding-hex-digit-table
+ ;; to r3.
+ (r2 = r2 ,url-coding-latin-1-as-hex-table)
+ (r3 = r3 ,url-coding-latin-1-as-hex-table)
+ (r2 <<= 4)
+ (r3 |= r2)
+ (write r3))
+ (if (r0 == ,url-coding-escaped-space-code)
+ (write #x20)
+ (write r0)))
+ (read r0)
+ (repeat))))
+ "CCL program to take URI-encoded ASCII text and transform it to our
+internal encoding. ")
+@end example
+
+@node The program to encode from internal format
+@subsubsection The program to encode from internal format
+
+ Next, we see the CCL program to encode ASCII text as URL coded text.
+Here, the buffer magnification is specified as three, to account for ` '
+mapping to %20, etc. As before, we read an octet from the input into
+@samp{r0}, and move into the body of the loop. Next, we check if we
+should preserve the value of this octet, by reading from offset
+@samp{r0} in the @code{url-coding-should-preserve-table} into @samp{r1}.
+Then we have an @samp{if} statement predicated on the value in
+@samp{r1}; for the true branch, we write the input octet directly. For
+the false branch, we write a percentage sign, the ASCII encoding of the
+high four bits in hex, and then the ASCII encoding of the low four bits
+in hex.
+
+We then read an octet from the input into @samp{r0}, and repeat the loop.
+
+@example
+(define-ccl-program ccl-encode-urlcoding
+ `(3
+ ((read r0)
+ (loop
+ (r1 = r0 ,url-coding-should-preserve-table)
+ ;; If we should preserve the value, just write the octet directly.
+ (if r1
+ (write r0)
+ ;; else, write a percentage sign, and the hex value of the octet, in
+ ;; an ASCII-friendly format.
+ ((write ,url-coding-escape-character-code)
+ (write r0 ,url-coding-high-order-nybble-as-ascii)
+ (write r0 ,url-coding-low-order-nybble-as-ascii)))
+ (read r0)
+ (repeat))))
+ "CCL program to encode octets (almost) according to RFC 1738")
+@end example
@node Category Tables, Unicode Support, CCL, MULE
@section Category Tables
1.12.2.1 +13 -0 XEmacs/xemacs/man/lispref/searching.texi
Index: searching.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/searching.texi,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -r1.12 -r1.12.2.1
--- searching.texi 2004/09/08 10:32:55 1.12
+++ searching.texi 2005/03/15 05:22:44 1.12.2.1
@@ -516,6 +516,19 @@
@item \S@var{code}
@cindex @samp{\S} in regexp
matches any character whose syntax is not @var{code}.
+
+@item \c@var{category}
+@cindex @samp{\c} in regexp
+matches any character in @var{category}. Only available under Mule,
+categories, and category tables, are further described in @ref{Category
+Tables}. They are a mechanism for constructing classes of characters
+that can be local to a buffer, and that do not require complicated []
+expressions every time they are referenced.
+
+@item \C@var{category}
+@cindex @samp{\C} in regexp
+matches any character outside @var{category}. @xref{Category Tables},
+again, and note that this is only available under Mule.
@end table
The following regular expression constructs match the empty string---that is,
1.4.20.1 +3 -3 XEmacs/xemacs/man/lispref/symbols.texi
Index: symbols.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/symbols.texi,v
retrieving revision 1.4
retrieving revision 1.4.20.1
diff -u -r1.4 -r1.4.20.1
--- symbols.texi 2001/04/12 18:22:21 1.4
+++ symbols.texi 2005/03/15 05:22:44 1.4.20.1
@@ -11,8 +11,8 @@
describes symbols, their components, their property lists, and how they
are created and interned. Separate chapters describe the use of symbols
as variables and as function names; see @ref{Variables}, and
-@ref{Functions}. For the precise read syntax for symbols, see
-@ref{Symbol Type}.
+@ref{Functions and Commands}. For the precise read syntax for symbols,
+see @ref{Symbol Type}.
You can test whether an arbitrary Lisp object is a symbol
with @code{symbolp}:
@@ -154,7 +154,7 @@
cell, is derived from the idea that @code{defun} gives the symbol its
definition as a function.) @code{defsubst}, @code{define-function} and
@code{defalias} are other ways of defining a function.
-@xref{Functions}.
+@xref{Functions and Commands}.
@code{defmacro} defines a symbol as a macro. It creates a macro
object and stores it in the function cell of the symbol. Note that a
1.6.6.1 +2 -2 XEmacs/xemacs/man/lispref/variables.texi
Index: variables.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/variables.texi,v
retrieving revision 1.6
retrieving revision 1.6.6.1
diff -u -r1.6 -r1.6.6.1
--- variables.texi 2002/10/02 09:30:52 1.6
+++ variables.texi 2005/03/15 05:22:45 1.6.6.1
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/variables.info
-@node Variables, Functions, Control Structures, Top
+@node Variables, Functions and Commands, Control Structures, Top
@chapter Variables
@cindex variable
@@ -225,7 +225,7 @@
@itemize @bullet
@item
-Function calls (@pxref{Functions}).
+Function calls (@pxref{Functions and Commands}).
@item
Macro calls (@pxref{Macros}).
No revision
No revision
1.4.2.1 +9 -10 XEmacs/xemacs/man/xemacs/help.texi
Index: help.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/xemacs/help.texi,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- help.texi 2004/08/13 09:47:57 1.4
+++ help.texi 2005/03/15 05:23:04 1.4.2.1
@@ -442,13 +442,12 @@
information. @kbd{C-h C-w} (@code{describe-no-warranty}) displays the
full details on the complete absence of warranty for XEmacs. @kbd{C-h
n} (@code{view-emacs-news}) displays the file @file{xemacs/etc/NEWS},
-which contains documentation on XEmacs changes arranged chronologically.
-@kbd{C-h F} (@code{xemacs-local-faq}) displays local version of the
-XEmacs frequently-answered-questions-list. @kbd{C-h t}
-(@code{help-with-tutorial}) displays the learn-by-doing XEmacs
-tutorial. @kbd{C-h C-c} (@code{describe-copying}) displays the file
-@file{xemacs/etc/COPYING}, which tells you the conditions you must obey
-in distributing copies of XEmacs. @kbd{C-h C-d}
-(@code{describe-distribution}) displays another file named
-@file{xemacs/etc/DISTRIB}, which tells you how you can order a copy of
-the latest version of XEmacs.
+which contains documentation on XEmacs changes arranged
+chronologically. @kbd{C-h F} (@code{xemacs-local-faq}) displays the
+local version of the XEmacs FAQ (Frequently Answered Questions list).
+@kbd{C-h t} (@code{help-with-tutorial}) displays the learn-by-doing
+XEmacs tutorial. @kbd{C-h C-c} (@code{describe-copying}) displays the
+file @file{xemacs/etc/COPYING}, which tells you the conditions you
+must obey in distributing copies of XEmacs. @kbd{C-h C-d}
+(@code{describe-distribution} displays the section of the FAQ that
+tells you how you can get the latest version of XEmacs.
1.2.34.1 +57 -9 XEmacs/xemacs/man/xemacs/major.texi
Index: major.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/xemacs/major.texi,v
retrieving revision 1.2
retrieving revision 1.2.34.1
diff -u -r1.2 -r1.2.34.1
--- major.texi 1997/10/31 14:53:41 1.2
+++ major.texi 2005/03/15 05:23:05 1.2.34.1
@@ -26,14 +26,15 @@
Many major modes redefine the syntactical properties of characters
appearing in the buffer. @xref{Syntax}.
- The major modes fall into three major groups. Lisp mode (which has
-several variants), C mode, and Muddle mode are for specific programming
-languages. Text mode, Nroff mode, @TeX{} mode, and Outline mode are for
-editing English text. The remaining major modes are not intended for use
-on users' files; they are used in buffers created by Emacs for specific
-purposes and include Dired mode for buffers made by Dired (@pxref{Dired}),
-Mail mode for buffers made by @kbd{C-x m} (@pxref{Sending Mail}), and Shell
-mode for buffers used for communicating with an inferior shell process
+ The major modes fall into three major groups. Programming modes
+(@pxref{Programs}) are for specific programming languages. Text modes
+(like Nroff mode, @TeX{} mode, Outline mode, XML mode, etc.@:) are for
+editing human readable text. The remaining major modes are not intended
+for direct use in editing user files; they are used in buffers created
+by Emacs for specific purposes. Examples of such modes include Dired
+mode which is used for buffers made by Dired (@pxref{Dired}), Mail mode
+for buffers made by @kbd{C-x m} (@pxref{Sending Mail}), and Shell mode
+for buffers used for communicating with an inferior shell process
(@pxref{Interactive Shell}).
Most programming language major modes specify that only blank lines
@@ -44,9 +45,10 @@
@menu
* Choosing Modes:: How major modes are specified or chosen.
+* Mode Hooks:: Customizing a major mode
@end menu
-@node Choosing Modes,,Major Modes,Major Modes
+@node Choosing Modes, Mode Hooks, Major Modes, Major Modes
@section Choosing Major Modes
You can select a major mode explicitly for the current buffer, but
@@ -111,3 +113,49 @@
value is the symbol @code{fundamental-mode}, which specifies Fundamental
mode. If @code{default-major-mode} is @code{nil}, the major mode is
taken from the previously selected buffer.
+
+@node Mode Hooks, , Choosing Modes, Major Modes
+@section Mode Hook Variables
+
+@cindex Hook variables
+@cindex mode hook
+@findex add-hook
+@findex remove-hook
+@vindex lisp-mode-hook
+@vindex emacs-lisp-mode-hook
+@vindex lisp-interaction-mode-hook
+@vindex scheme-mode-hook
+
+ The last step taken by a major mode, by convention, is to invoke a
+list of user supplied functions that are stored in a ``hook'' variable.
+This allows a user to further customize the major mode, and is
+particularly convenient for setting up buffer local variables
+(@pxref{Locals}).
+
+ The name of the hook variable is created by appending the string
+@code{-hook} to the name of the major mode. For example, the hook
+variable used by @code{text-mode} would be named @code{text-mode-hook}.
+By convention the mode hook function receives no arguments. If a hook
+variable does not exist, or it has the value @code{nil}, the major mode
+simply ignores it.
+
+ The recommended way to add functions to a hook variable is with the
+@code{add-hook} function. For example, to automatically turn on the
+Auto Fill mode when Text mode is invoked the following code can be used in
+the initialization file (@pxref{Init File})
+
+@example
+(add-hook 'text-mode-hook 'turn-on-auto-fill)
+@end example
+
+The @code{add-hook} function will check that the function is not already
+listed in the hook variable before adding it. It will also create a hook
+variable with the value @code{nil} if one does not exist before adding
+the function. @code{add-hook} adds functions to the front of the hook
+variable list. This means that the last hook added is run first by the
+major mode. It is considered very poor style to write hook functions
+that depend on the order that hooks are executed.
+
+Hooks can be removed from hook variables with @code{remove-hook}.
+
+
1.2.20.1 +48 -13 XEmacs/xemacs/man/xemacs/new.texi
Index: new.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/xemacs/new.texi,v
retrieving revision 1.2
retrieving revision 1.2.20.1
diff -u -r1.2 -r1.2.20.1
--- new.texi 2001/04/12 18:22:29 1.2
+++ new.texi 2005/03/15 05:23:05 1.2.20.1
@@ -235,39 +235,74 @@
@cindex version number
@example
-(cond ((string-match "Lucid" emacs-version)
+(cond ((string-match "XEmacs" emacs-version)
;;
- ;; Code for any version of Lucid Emacs or XEmacs goes here
+ ;; Code for any version of XEmacs goes here.
;;
))
-(cond ((and (string-match "XEmacs" emacs-version)
- (or (> emacs-major-version 19)
- (>= emacs-minor-version 12)))
+(cond ((not (string-match "XEmacs" emacs-version)))
;;
- ;; Code which requires XEmacs version 19.12 or newer goes here
+ ;; Code for any version of GNU Emacs goes here.
;;
))
-(cond ((>= emacs-major-version 19)
+(cond ((and (string-match "XEmacs" emacs-version)
+ (emacs-version>= 21 4))
;;
- ;; Code for any vintage-19 emacs goes here
+ ;; Code which requires XEmacs version 21.4 or newer goes here
;;
))
-(cond ((and (not (string-match "Lucid" emacs-version))
- (= emacs-major-version 19))
+(cond ((and (string-match "XEmacs" emacs-version)
+ (emacs-version>= 21 4 12)
+ (not (emacs-version>= 21 4 15)))
;;
- ;; Code specific to FSF Emacs 19 (not XEmacs) goes here
+ ;; Code which requires exactly XEmacs version 21.4.12 through
+ ;; 21.4.14, inclusive, goes here. (e.g. A bug was introduced in
+ ;; 21.4.12 and fixed in 21.4.15 but many of the versions of
+ ;; XEmacs around in the computer laboratory run those versions,
+ ;; so I need to introduce a workaround. In such a case, you
+ ;; should ideally try to conditionalize on something else,
+ ;; e.g. a feature symbol or a simple test that can be run to
+ ;; smoke out the bug.)
;;
))
-(cond ((< emacs-major-version 19)
+(cond ((and (not (string-match "XEmacs" emacs-version)
+ (emacs-version>= 20 2))
;;
- ;; Code specific to emacs 18 goes here
+ ;; Code which requires GNU Emacs version 20.2 or newer, but not XEmacs,
+ ;; goes here
;;
))
+
+@end example
+
+@emph{NOTE}: @strong{DO} use @code{(emacs-version>= ...)}. @strong{DO NOT}
+try to do this yourself using @code{emacs-major-version} and
+@code{emacs-minor-version}. You will, with high probability, get it
+wrong. Typical attempts to replace @code{(emacs-version>= 21 4)} use
+
+@example
+(and (>= emacs-major-version 21)
+ (>= emacs-minor-version 4))
+@end example
+
+which correctly excludes 21.3 and all previous versions,
+but also excludes 22.0 through 22.3, 23.0 through 23.3, etc.
+
+A "more clever" version, as advocated in earlier versions
+of this very manual, was like this:
+
+@example
+(or (> emacs-major-version 21)
+ (>= emacs-minor-version 4))
@end example
+
+which correctly includes 21.4 and all following versions,
+but also includes 20.4 through 20.99999, 19.4 through
+19.99999, etc.
Alternatively, use @file{.xemacs/init.el} for an init file. @xref{Init File}.
1.6.8.1 +216 -228 XEmacs/xemacs/man/xemacs/programs.texi
Index: programs.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/xemacs/programs.texi,v
retrieving revision 1.6
retrieving revision 1.6.8.1
diff -u -r1.6 -r1.6.8.1
--- programs.texi 2001/12/20 07:58:23 1.6
+++ programs.texi 2005/03/15 05:23:05 1.6.8.1
@@ -1,14 +1,17 @@
@node Programs, Running, Text, Top
@chapter Editing Programs
+@cindex Programming Languages
@cindex Lisp
-@cindex C
- Emacs has many commands designed to understand the syntax of programming
-languages such as Lisp and C. These commands can:
+ XEmacs provides specialized support for editing source files for many
+different programming languages. For example it is possible to
@itemize @bullet
@item
+Follow the usual indentation conventions of the language
+(@pxref{Grinding}).
+@item
Move over or kill balanced expressions or @dfn{sexps} (@pxref{Lists}).
@item
Move over or mark top-level balanced expressions (@dfn{defuns}, in Lisp;
@@ -18,8 +21,7 @@
@item
Insert, kill, or align comments (@pxref{Comments}).
@item
-Follow the usual indentation conventions of the language
-(@pxref{Grinding}).
+Find functions and symbols in program by name (@pxref{Tags}).
@end itemize
The commands available for words, sentences, and paragraphs are useful in
@@ -52,6 +54,7 @@
* Change Log:: Maintaining a change history for your program.
* Tags:: Go direct to any function in your program in one
command. Tags remembers which file it is in.
+* CC Mode:: Modes for C, C++, Java and similar languages
* Fortran:: Fortran mode and its special features.
* Asm Mode:: Asm mode and its special features.
@end menu
@@ -60,24 +63,49 @@
@section Major Modes for Programming Languages
@cindex Lisp mode
-@cindex C mode
-@cindex Scheme mode
- Emacs has several major modes for the programming languages Lisp, Scheme (a
-variant of Lisp), C, Fortran, and Muddle. Ideally, a major mode should be
-implemented for each programming language you might want to edit with
-Emacs; but often the mode for one language can serve for other
-syntactically similar languages. The language modes that exist are those
-that someone decided to take the trouble to write.
-
- There are several variants of Lisp mode, which differ in the way they
-interface to Lisp execution. @xref{Lisp Modes}.
-
- Each of the programming language modes defines the @key{TAB} key to run
-an indentation function that knows the indentation conventions of that
-language and updates the current line's indentation accordingly. For
-example, in C mode @key{TAB} is bound to @code{c-indent-line}. @key{LFD}
-is normally defined to do @key{RET} followed by @key{TAB}; thus it, too,
-indents in a mode-specific fashion.
+ Emacs has several major modes (@pxref{Major Modes}) to support
+programming languages. These major modes will typically understand
+language syntax, provide automatic indentation features, syntax based
+highlighting of text, and will often provide interfaces to the
+programming environment to assist in compiling, executing and debugging
+programs.
+
+ A language mode exist when someone decides to take the trouble to
+write it. At this time many widely used programming languages are
+supported by XEmacs. Examples include Ada, Awk, C, C++, CORBA (IDL),
+Fortran, Java, Lisp, Modula 2, Objective-C, Perl, Pike, Prolog, Python,
+Ruby, Scheme, Simula, SQL, Tcl, Unix Shell scripts, and VHDL. Some of
+these language have seperate manuals, and some times more than one mode
+may be available for a language. For example, there are several
+variants of Lisp mode, which differ in the way they interface to Lisp
+execution. @xref{Lisp Modes}.
+
+ Major modes for programming language support are distributed in
+optional XEmacs packages (@pxref{Packages}) that must be installed
+before use. A notable exception to this rule is that a Lisp Mode is
+integral to XEmacs. The Programming Mode Package (@file{prog-modes})
+contains many such modes. Some languages are supported by packages of
+their own; prominent examples of such packages include @file{cc-mode}
+for C, C++, Java, Objective C etc.@:, @file{python-modes} for Python,
+and @file{scheme} for Scheme.
+
+ For a language named @var{lang} the major mode for the language will
+typically be named @code{@var{lang}-mode}. For example, the mode for C
+is called @code{c-mode}, that for Bourne shell scripts is called
+@code{sh-mode} and so on. These modes will invoke the functions listed
+in the corresponding hook variables as a last step. @xref{Mode Hooks}.
+
+ A mode can be invoked by typing @kbd{M-x @var{lang}-mode
+@key{RET}}. However this step is not normally required. If the package
+for a language mode is installed XEmacs usually knows when to
+automatically invoke the mode. This is normally done based on examining
+the file name to determine the language. @ref{Choosing Modes}.
+
+ Each of the programming language modes defines the @key{TAB} key to
+run an indentation function that knows the indentation conventions of
+that language and updates the current line's indentation accordingly.
+@key{LFD} is normally defined to do @key{RET} followed by @key{TAB};
+thus it, too, indents in a mode-specific fashion.
@kindex DEL
@findex backward-delete-char-untabify
@@ -94,22 +122,6 @@
if enabled in a programming language major mode, indents the new lines
which it creates.
-@cindex mode hook
-@vindex c-mode-hook
-@vindex lisp-mode-hook
-@vindex emacs-lisp-mode-hook
-@vindex lisp-interaction-mode-hook
-@vindex scheme-mode-hook
-@vindex muddle-mode-hook
- Turning on a major mode calls a user-supplied function called the
-@dfn{mode hook}, which is the value of a Lisp variable. For example,
-turning on C mode calls the value of the variable @code{c-mode-hook} if
-that value exists and is non-@code{nil}. Mode hook variables for other
-programming language modes include @code{lisp-mode-hook},
-@code{emacs-lisp-mode-hook}, @code{lisp-interaction-mode-hook},
-@code{scheme-mode-hook}, and @code{muddle-mode-hook}. The mode hook
-function receives no arguments.@refill
-
@node Lists, Defuns, Program Modes, Programs
@section Lists and Sexps
@@ -198,13 +210,6 @@
specified number of times; with a negative argument, it moves in the
opposite direction.
-In languages such as C where the comment-terminator can be recognized,
-the sexp commands move across comments as if they were whitespace. In
-Lisp and other languages where comments run until the end of a line, it
-is very difficult to ignore comments when parsing backwards; therefore,
-in such languages the sexp commands treat the text of comments as if it
-were code.
-
@kindex C-M-k
@findex kill-sexp
Killing an sexp at a time can be done with @kbd{C-M-k} (@code{kill-sexp}).
@@ -338,7 +343,6 @@
* Basic Indent::
* Multi-line Indent:: Commands to reindent many lines at once.
* Lisp Indent:: Specifying how each Lisp function should be indented.
-* C Indent:: Choosing an indentation style for C code.
@end menu
@node Basic Indent, Multi-line Indent, Grinding, Grinding
@@ -434,7 +438,7 @@
mark. The command @kbd{C-M-\} (@code{indent-region}) applies @key{TAB}
to every line whose first character is between point and mark.
-@node Lisp Indent, C Indent, Multi-line Indent, Grinding
+@node Lisp Indent, , Multi-line Indent, Grinding
@subsection Customizing Lisp Indentation
@cindex customization
@@ -508,185 +512,7 @@
until the end of the list.
@end table
-@node C Indent, , Lisp Indent, Grinding
-@subsection Customizing C Indentation
-
- Two variables control which commands perform C indentation and when.
-
-@vindex c-auto-newline
- If @code{c-auto-newline} is non-@code{nil}, newlines are inserted both
-before and after braces that you insert and after colons and semicolons.
-Correct C indentation is done on all the lines that are made this way.
-
-@vindex c-tab-always-indent
- If @code{c-tab-always-indent} is non-@code{nil}, the @key{TAB} command
-in C mode does indentation only if point is at the left margin or within
-the line's indentation. If there is non-whitespace to the left of point,
-@key{TAB} just inserts a tab character in the buffer. Normally,
-this variable is @code{nil}, and @key{TAB} always reindents the current line.
-
- C does not have anything analogous to particular function names for which
-special forms of indentation are desirable. However, it has a different
-need for customization facilities: many different styles of C indentation
-are in common use.
-
- There are six variables you can set to control the style that Emacs C
-mode will use.
-
-@table @code
-@item c-indent-level
-Indentation of C statements within surrounding block. The surrounding
-block's indentation is the indentation of the line on which the
-open-brace appears.
-@item c-continued-statement-offset
-Extra indentation given to a substatement, such as the then-clause of
-an @code{if} or body of a @code{while}.
-@item c-brace-offset
-Extra indentation for lines that start with an open brace.
-@item c-brace-imaginary-offset
-An open brace following other text is treated as if it were this far
-to the right of the start of its line.
-@item c-argdecl-indent
-Indentation level of declarations of C function arguments.
-@item c-label-offset
-Extra indentation for a line that is a label, case, or default.
-@end table
-
-@vindex c-indent-level
- The variable @code{c-indent-level} controls the indentation for C
-statements with respect to the surrounding block. In the example:
-
-@example
- @{
- foo ();
-@end example
-
-@noindent
-the difference in indentation between the lines is @code{c-indent-level}.
-Its standard value is 2.
-
-If the open-brace beginning the compound statement is not at the beginning
-of its line, the @code{c-indent-level} is added to the indentation of the
-line, not the column of the open-brace. For example,
-
-@example
-if (losing) @{
- do_this ();
-@end example
-
-@noindent
-One popular indentation style is that which results from setting
-@code{c-indent-level} to 8 and putting open-braces at the end of a line
-in this way. Another popular style prefers to put the open-brace on a
-separate line.
-
-@vindex c-brace-imaginary-offset
- In fact, the value of the variable @code{c-brace-imaginary-offset} is
-also added to the indentation of such a statement. Normally this variable
-is zero. Think of this variable as the imaginary position of the open
-brace, relative to the first non-blank character on the line. By setting
-the variable to 4 and @code{c-indent-level} to 0, you can get this style:
-
-@example
-if (x == y) @{
- do_it ();
- @}
-@end example
-
- When @code{c-indent-level} is zero, the statements inside most braces
-line up exactly under the open brace. An exception are braces in column
-zero, like those surrounding a function's body. The statements inside
-those braces are not placed at column zero. Instead,
-@code{c-brace-offset} and @code{c-continued-statement-offset} (see
-below) are added to produce a typical offset between brace levels, and
-the statements are indented that far.
-
-@vindex c-continued-statement-offset
- @code{c-continued-statement-offset} controls the extra indentation for
-a line that starts within a statement (but not within parentheses or
-brackets). These lines are usually statements inside other statements,
-like the then-clauses of @code{if} statements and the bodies of
-@code{while} statements. The @code{c-continued-statement-offset}
-parameter determines the difference in indentation between the two lines in:
-
-@example
-if (x == y)
- do_it ();
-@end example
-
-@noindent
-The default value for @code{c-continued-statement-offset} is 2. Some
-popular indentation styles correspond to a value of zero for
-@code{c-continued-statement-offset}.
-
-@vindex c-brace-offset
- @code{c-brace-offset} is the extra indentation given to a line that
-starts with an open-brace. Its standard value is zero;
-compare:
-
-@example
-if (x == y)
- @{
-@end example
-
-@noindent
-with:
-
-@example
-if (x == y)
- do_it ();
-@end example
-
-@noindent
-If you set @code{c-brace-offset} to 4, the first example becomes:
-
-@example
-if (x == y)
- @{
-@end example
-
-@vindex c-argdecl-indent
- @code{c-argdecl-indent} controls the indentation of declarations of the
-arguments of a C function. It is absolute: argument declarations receive
-exactly @code{c-argdecl-indent} spaces. The standard value is 5 and
-results in code like this:
-@example
-char *
-index (string, char)
- char *string;
- int char;
-@end example
-
-@vindex c-label-offset
- @code{c-label-offset} is the extra indentation given to a line that
-contains a label, a case statement, or a @code{default:} statement. Its
-standard value is @minus{}2 and results in code like this:
-
-@example
-switch (c)
- @{
- case 'x':
-@end example
-
-@noindent
-If @code{c-label-offset} were zero, the same code would be indented as:
-
-@example
-switch (c)
- @{
- case 'x':
-@end example
-
-@noindent
-This example assumes that the other variables above also have their
-default values.
-
-Using the indentation style produced by the default settings of the
-variables just discussed and putting open braces on separate lines
-produces clear and readable files. For an example, look at any of the C
-source files of XEmacs.
-
@node Matching, Comments, Grinding, Programs
@section Automatic Display of Matching Parentheses
@cindex matching parentheses
@@ -1003,7 +829,7 @@
not displayed), set it again in final compute_motion.
@end smallexample
-@node Tags, Fortran, Change Log, Programs
+@node Tags, CC Mode, Change Log, Programs
@section Tags Tables
@cindex tags table
@@ -1709,8 +1535,170 @@
@kbd{M-x tags-apropos} is like @code{apropos} for tags. It reads a regexp,
then finds all the tags in the selected tags table whose entries match that
regexp, and displays the tag names found.
+
+@node CC Mode, Fortran, Tags, Programs
+@section Modes for C, C++, Java and similar languages
+@cindex C Mode
+@cindex C++ Mode
+@cindex Java Mode
+@cindex AWK Mode
+@cindex Objective C Mode
+@cindex CORBA IDL Mode
+@findex c-mode
+@findex c++-mode
+@findex java-mode
+@findex idl-mode
+@findex awk-mode
+@findex pike-mode
+@findex objc-mode
+@vindex c-mode-hook
+@vindex c++-mode-hook
+@vindex java-mode-hook
+@vindex idl-mode-hook
+@vindex awk-mode-hook
+@vindex pike-mode-hook
+@vindex objc-mode-hook
+@vindex c-mode-common-hook
+@vindex c-initialization-hook
+
+ The recommended means for supporting the ``C--like'' programming
+languages in XEmacs is the @file{cc-mode} package. CC Mode is not
+included in the basic XEmacs distribution but is available as an
+optional package. If loading a file whose names ends in the @file{.cc}
+extension does not automatically invoke a C++ Mode then the
+@file{cc-mode} package is probably not yet installed. @xref{Packages}.
+
+ CC Mode provides modes for editing source files in Awk
+(@code{awk-mode}), C (@code{c-mode}), C++ (@code{c++-mode}), CORBA IDL
+(@code{idl-mode}), Java (@code{java-mode}), Objective C
+(@code{objc-mode}), and Pike (@code{pike-mode}). All these languages are
+supported with an sophisticated ``indentation engine'' that is feature
+rich, customizable and quite efficient.
+
+ Each language major mode runs hooks in the conventionally named hook
+variables (@pxref{Mode Hooks}). In addition to this conventional
+behavior all the CC Mode major modes will also run hooks in
+@code{c-mode-common-hook} @emph{before} invoking the major mode specific
+hook.
+
+ CC Mode runs any hooks in @code{c-initialization-hook} exactly once
+when it is first loaded.
+
+ CC Mode is a very comprehensive and flexible system and full
+description of its capabilities is beyond the scope of this manual. It
+is strongly recommended that the reader consult the CC Mode
+documentation for details once the package has been
+installed. @xref{Top,CC Mode,,cc-mode, The CC Mode Manual}.
+
+@menu
+* Older Modes:: Older Modes for C and AWK
+* Customizing CC Mode:: An Introduction to Customizing CC Mode.
+@end menu
+
+
+@node Older Modes, Customizing CC Mode, CC Mode, CC Mode
+@subsection Older Modes for C and AWK
+@cindex Old C Mode
+@cindex Old AWK Mode
+@cindex C Mode without CC Mode
+@cindex AWK Mode without CC Mode
+@cindex old-c-mode
+
+ XEmacs provides older versions of a C Mode and an AWK Mode in the
+@file{prog-modes} package. These older modes do not share the
+indentation engine in CC Mode have have their own specific means of
+customizing indentation. To use these modes the @file{prog-modes}
+package must be installed.
+
+ This older C mode is known simply as the ``Old C Mode''. It supports
+only the C language and it lacks many of the features of CC Mode.
+However the old C mode offers modest space requirements and very fast
+operation. Old C Mode might be useful in space constrained
+environments, on slow machines, or for editing very large files. This
+old C mode is available in the @file{old-c-mode}
+library. @xref{old-c-mode,Old C Mode,old-c-mode,prog-modes,The
+Programming Modes Package Manual}.
+
+ The old AWK mode exists for similar reasons. It is available in the
+@file{awk-mode} library. @xref{awk-mode,Old AWK
+Mode,awk-mode,prog-modes,The Programming Modes Package Manual}.
+
+ Note that the prog-modes package will never automatically invoke these
+older modes for a user. However installing the @file{cc-mode} package
+@emph{will} make CC Mode's versions available automatically. As a
+result a user who wants to use these older modes must explicitly load
+the old libraries to use them.
+
+@node Customizing CC Mode, , Older Modes, CC Mode
+@subsection Customizing Indentation in CC Mode
+
+ A very brief introduction is included here on customizing CC Mode. CC
+Mode has many features, including useful minor modes, that are
+completely documented in its own manual.
+
+ CC Mode implements several different ``styles'' for C code (and the
+other languages supported by CC Mode). If you need to change the
+indentation style for CC Mode it is recommended that you first see if an
+existing style meets your requirements. The style chosen will affect the
+placement of language elements like braces, function declarations and
+comments. You can choose a style interactively by typing @kbd{C-c .} and
+pressing the space bar at the prompt to get a list of supported
+styles. @kbd{C-c .} runs the function @code{c-set-style} which applies
+to all CC Mode language modes though its name might suggest otherwise. A
+few of the the supported styles are listed below.
+
+@itemize @bullet
+@item
+``gnu'' --- The recommeded style from the Free Software Foundation for
+GNU software.
+@item
+``k&r'' --- The classic style from Kernighan and Ritchie.
+@item
+``linux'' --- The style recommended for code in the Linux kernel.
+@item
+``bsd'' --- The style recommended for software developed in BSD.
+@item
+``java --- The ``traditional'' Java style.
+@end itemize
+
+ The default style in XEmacs is ``gnu'' except for Java mode where it
+is the ``java'' style (this is governed by the variable
+@code{c-default-style}).
+
+ The styles included in CC Mode all use a buffer local variable called
+@code{c-basic-offset} as the basic indentation level (this buffer local
+variable is used in all CC Mode language modes though its name might
+suggest otherwise). All indentation is, by default, expressed in
+multiples of @code{c-basic-offset}.
+
+ Each style defines a default value for @code{c-basic-offset}, for the
+``gnu'' style sets it to 2. A very common customization scenario is
+where a user wants to use an existing style but with a different basic
+offset value. An easy way to do this is to set @code{c-basic-offset} in
+the language mode hook after selecting the chosen style.
+
+ For example, a user might want to follow a local coding convention of
+using the ``k&r'' style for C code with indentation in two columns
+multiples (instead of the five column default provided by the CC Mode
+``k&r'' style). This can be achieved with the following code in the
+initialization file (@pxref{Init File})
+
+@example
+(defun my-c-mode-hook ()
+ (c-set-style "k&r")
+ (setq c-basic-offset 2))
+(add-hook 'c-mode-hook 'my-c-mode-hook)
+@end example
+
+ Most customizations for indentation in various CC modes can be
+accomplished by choosing a style and then choosing value for
+@code{c-basic-offset} that meets the local coding convention. CC Mode
+has a very customizable indentation engine and a furthur discussion is
+really beyond the scope of this manual. @xref{Indentation
+Engine,,,cc-mode,The CC Mode Manual}.
+
-@node Fortran, Asm Mode, Tags, Programs
+@node Fortran, Asm Mode, CC Mode, Programs
@section Fortran Mode
@cindex Fortran mode
1.16.2.1 +6 -22 XEmacs/xemacs/man/xemacs/xemacs.texi
Index: xemacs.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/xemacs/xemacs.texi,v
retrieving revision 1.16
retrieving revision 1.16.2.1
diff -u -r1.16 -r1.16.2.1
--- xemacs.texi 2003/08/27 18:07:10 1.16
+++ xemacs.texi 2005/03/15 05:23:05 1.16.2.1
@@ -472,6 +472,7 @@
* Change Log:: Maintaining a change history for your program.
* Tags:: Go directly to any function in your program in one
command. Tags remembers which file it is in.
+* CC Mode:: Modes for C, C++, Java and similar languages
* Fortran:: Fortran mode and its special features.
* Asm Mode:: Asm mode and its special features.
@@ -480,7 +481,6 @@
* Basic Indent::
* Multi-line Indent:: Commands to reindent many lines at once.
* Lisp Indent:: Specifying how each Lisp function should be indented.
-* C Indent:: Choosing an indentation style for C code.
Tags Tables
@@ -996,27 +996,12 @@
the GNU General Public License that comes with XEmacs and also appears
following this section.
-The easiest way to get a copy of XEmacs is from someone else who has it.
-You need not ask for permission to do so, or tell any one else; just copy
-it.
-
-If you have access to the Internet, you can get the latest version of
-XEmacs from the anonymous FTP server @file{ftp.xemacs.org} in the directory
-@file{/pub/xemacs}. It can also be found at numerous other archive
-sites around the world; check the file @file{etc/DISTRIB} in an XEmacs
-distribution for the latest known list.
+To get XEmacs, go to @uref{http://www.xemacs.org/Download/}.
-
@unnumberedsec Getting Other Versions of Emacs
-The Free Software Foundation's version of Emacs (called @dfn{FSF Emacs}
-in this manual and often referred to as @dfn{GNU Emacs}) is available
-by anonymous FTP from @file{prep.ai.mit.edu}.
-
-Win-Emacs, an older version of XEmacs that runs on Microsoft Windows
-and Windows NT, is available by anonymous FTP from @file{ftp.netcom.com}
-in the directory @file{/pub/pe/pearl}, or from @file{ftp.cica.indiana.edu}
-as the files @file{wemdemo*.zip} in the directory @file{/pub/pc/win3/demo}.
+The Free Software Foundation's version of Emacs (@dfn{GNU Emacs}) is
+available at @uref{http://www.gnu.org/software/emacs/emacs.html}.
@node Intro, Glossary, Distrib, Top
@unnumbered Introduction
@@ -1025,9 +1010,8 @@
self-documenting, customizable, extensible real-time display editor
Emacs. XEmacs provides many powerful display and user-interface
capabilities not found in other Emacsen and is mostly upwardly
-compatible with GNU Emacs from the Free Software Foundation
-(referred to as @dfn{FSF Emacs} in this manual). XEmacs also
-comes standard with a great number of useful packages.
+compatible with GNU Emacs from the Free Software Foundation. XEmacs
+also comes standard with a great number of useful packages.
We say that XEmacs is a @dfn{display} editor because normally the text
being edited is visible on the screen and is updated automatically as you
No revision
No revision
1.36.2.1 +8 -0 XEmacs/xemacs/modules/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/modules/ChangeLog,v
retrieving revision 1.36
retrieving revision 1.36.2.1
diff -u -r1.36 -r1.36.2.1
--- ChangeLog 2004/11/14 01:43:02 1.36
+++ ChangeLog 2005/03/15 05:23:14 1.36.2.1
@@ -1,3 +1,11 @@
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.20 "cilantro" is released.
+
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.19 "chives" is released.
+
2004-11-13 Ben Wing <ben(a)xemacs.org>
* ldap/eldap.c (Fldap_modify):
No revision
No revision
1.31.2.1 +15 -2 XEmacs/xemacs/netinstall/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/netinstall/ChangeLog,v
retrieving revision 1.31
retrieving revision 1.31.2.1
diff -u -r1.31 -r1.31.2.1
--- ChangeLog 2004/10/22 05:18:37 1.31
+++ ChangeLog 2005/03/15 05:23:16 1.31.2.1
@@ -1,3 +1,16 @@
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.20 "cilantro" is released.
+
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.19 "chives" is released.
+
+2004-11-05 Ben Wing <ben(a)xemacs.org>
+
+ * res.rc:
+ Fix ^M brokenness.
+
2004-10-22 Stephen J. Turnbull <stephen(a)xemacs.org>
* XEmacs 21.5.18 "chestnut" is released.
@@ -499,6 +512,6 @@
* all: port from cygwin setup.
-%%% $Id: ChangeLog,v 1.31 2004/10/22 05:18:37 stephent Exp $
-$Revision: 1.31 $
+%%% $Id: ChangeLog,v 1.31.2.1 2005/03/15 05:23:16 stephent Exp $
+$Revision: 1.31.2.1 $
No revision
No revision
1.175.2.1 +52 -0 XEmacs/xemacs/nt/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/nt/ChangeLog,v
retrieving revision 1.175
retrieving revision 1.175.2.1
diff -u -r1.175 -r1.175.2.1
--- ChangeLog 2004/11/07 07:37:53 1.175
+++ ChangeLog 2005/03/15 05:23:22 1.175.2.1
@@ -1,3 +1,55 @@
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.20 "cilantro" is released.
+
+2005-02-22 Adrian Aichner <adrian(a)xemacs.org>
+
+ * xemacs.mak (install): Don't copy BUGS, which has been removed.
+
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.19 "chives" is released.
+
+2005-02-03 Ben Wing <ben(a)xemacs.org>
+
+ * config.inc.samp (COMPFACE_DIR):
+ Change version to 1.5.1 in accordance with FTP site.
+
+2005-01-31 Ben Wing <ben(a)xemacs.org>
+
+ * xemacs.mak (install):
+ Also copy BUGS, README, COPYING and Installation.
+
+2005-01-27 Ben Wing <ben(a)xemacs.org>
+
+ * xemacs.mak ({$(MANDIR)}.texi{$(INFODIR)}.info):
+ Use filename only when calling makeinfo, or it chokes on index
+ generation.
+
+ * xemacs.mak (TEMACS_COMMON_LFLAGS):
+ * xemacs.mak ( $(XEMACS_LFLAGS) -section):
+ Generate separate .pdb and .map files for temacs/xemacs; may
+ make profiling possible.
+
+2005-01-24 Ben Wing <ben(a)xemacs.org>
+
+ * config.inc.samp:
+ * config.inc.samp (PNG_DIR):
+ Declare OPTIONAL_LIBRARY_DIR as root of library directories.
+ Redo all graphics library defaults to mirror the versions and
+ directories in the current binary aux distribution on xemacs
+ web site. Enable TIFF and COMPFACE by default since you can
+ now compile with them and binary libs are provided.
+
+ * xemacs.mak:
+ * xemacs.mak (INCLUDES):
+ Put our own directories first in case of conflict (e.g. config.h
+ in compface).
+
+ * xemacs.mak ($(BLDLIB_SRC)/minitar.exe):
+ * xemacs.mak (LIB_SRC_TOOLS):
+ Use MSVCRT to avoid link problems.
+
2004-11-07 Ben Wing <ben(a)xemacs.org>
* xemacs.mak (INTERNALS_SRCS):
1.16.2.1 +29 -18 XEmacs/xemacs/nt/config.inc.samp
Index: config.inc.samp
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/nt/config.inc.samp,v
retrieving revision 1.16
retrieving revision 1.16.2.1
diff -u -r1.16 -r1.16.2.1
--- config.inc.samp 2003/11/06 15:12:33 1.16
+++ config.inc.samp 2005/03/15 05:23:22 1.16.2.1
@@ -26,38 +26,49 @@
# Compiled-in features: graphics formats #
############################################################################
+# Directory under which the optional libraries are placed. To make your
+# life easy, just grab
http://ftp.xemacs.org/aux/optional-libs.exe
+# (a self-installing .ZIP) and unzip them into an appropriate directory
+# (by default, c:\src). This gets you precompiled versions of all of
+# the libraries below.
+OPTIONAL_LIBRARY_DIR=c:\src
+
# Set this to enable XPM support (virtually mandatory), and specify
# the directory containing xpm. Get the library from
#
http://ftp.xemacs.org/aux/xpm-3.4k.tar.gz.
HAVE_XPM=1
-XPM_DIR=c:\src\xpm-3.4k
+XPM_DIR=$(OPTIONAL_LIBRARY_DIR)\xpm-3.4k
# Set this to enable GIF support (built-in).
HAVE_GIF=1
# Set this to enable PNG support (virtually mandatory), and specify
# the directories containing png and zlib. Get the latest version from
-#
ftp://ftp.uu.net/graphics/png/. You will have to rename the zlib directory
-# from zlib-1.1.4 or whatever to just `zlib' for the build to work.
+#
ftp://ftp.uu.net/graphics/png/. NOTE: In order to compile libpng,
+# you will have to rename the zlib directory to just `zlib'. We don't
+# do that here so we can preserve the version number, like for the other
+# libraries.
HAVE_PNG=1
-PNG_DIR=c:\src\libpng-1.2.5
-ZLIB_DIR=c:\src\zlib
-
-# Set this to enable TIFF support, and specify the directory containing tiff.
-# Get the latest version from
ftp://ftp.uu.net/graphics/tiff/. Not on by
-# default since TIFF isn't really very important.
-HAVE_TIFF=0
-TIFF_DIR=c:\src\tiff-v3.5.7
+PNG_DIR=$(OPTIONAL_LIBRARY_DIR)\libpng-1.2.8
+ZLIB_DIR=$(OPTIONAL_LIBRARY_DIR)\zlib-1.2.1
-# Set this to enable JPEG support, and specify the directory containing jpeg.
-# Get the latest version from
ftp://ftp.uu.net/graphics/jpeg/.
+# Set this to enable JPEG support (useful, but not necessary), and specify
+# the directory containing jpeg. Get the latest version from
+#
ftp://ftp.uu.net/graphics/jpeg/.
HAVE_JPEG=1
-JPEG_DIR=c:\src\jpeg-6b
+JPEG_DIR=$(OPTIONAL_LIBRARY_DIR)\jpeg-6b
+
+# Set this to enable TIFF support (not very important), and specify the
+# directory containing tiff. Get the latest version from
+#
ftp://ftp.uu.net/graphics/tiff/.
+HAVE_TIFF=1
+TIFF_DIR=$(OPTIONAL_LIBRARY_DIR)\tiff-v3.5.7
-# Set this to enable XFace support, and specify the directory containing
-# compface. Get the library from
http://ftp.xemacs.org/aux/compface.tar.gz.
-HAVE_XFACE=0
-COMPFACE_DIR=
+# Set this to enable XFace support (not very important), and specify the
+# directory containing compface. Get the library from
+#
http://ftp.xemacs.org/aux/compface-1.5.1.tar.gz.
+HAVE_XFACE=1
+COMPFACE_DIR=$(OPTIONAL_LIBRARY_DIR)\compface-1.5.1
############################################################################
# Build settings #
1.109.2.1 +22 -7 XEmacs/xemacs/nt/xemacs.mak
Index: xemacs.mak
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/nt/xemacs.mak,v
retrieving revision 1.109
retrieving revision 1.109.2.1
diff -u -r1.109 -r1.109.2.1
--- xemacs.mak 2004/11/07 07:37:53 1.109
+++ xemacs.mak 2005/03/15 05:23:23 1.109.2.1
@@ -1,7 +1,7 @@
# Makefile for Microsoft NMAKE -*- Makefile -*-
#
# Copyright (C) 1995 Board of Trustees, University of Illinois.
-# Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003 Ben Wing.
+# Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003, 2004 Ben Wing.
# Copyright (C) 1997, 1998, 2000 Jonathan Harris.
# Copyright (C) 1995 Sun Microsystems, Inc.
# Copyright (C) 1998 Free Software Foundation, Inc.
@@ -206,6 +206,11 @@
# A little bit of adhockery. Default to use system malloc and
# DLL version of the C runtime library when using portable
# dumping. These are the optimal settings.
+#
+# NOTE: The various graphics libraries are generally compiled to use
+# MSVCRT.DLL (the same that we use in USE_CRTDLL, more or less), so using
+# this is a good thing.
+
!if !defined(USE_SYSTEM_MALLOC)
USE_SYSTEM_MALLOC=$(USE_PORTABLE_DUMPER)
!endif
@@ -597,7 +602,7 @@
########################### Determine generic includes/defines/flags.
-INCLUDES=$(MSW_INCLUDES) -I$(NT)\inc -I$(SRC)
+INCLUDES=-I$(NT)\inc -I$(SRC) $(MSW_INCLUDES)
DEFINES=$(MSW_DEFINES) $(MULE_DEFINES) $(UNION_DEFINES) \
$(DUMPER_DEFINES) $(KKCC_DEFINES) $(MALLOC_DEFINES) \
@@ -906,7 +911,7 @@
# Minitar uses zlib so just use cdecl to simplify things
$(BLDLIB_SRC)/minitar.exe : $(NT)/minitar.c
- $(CCV) -I"$(ZLIB_DIR)" $(LIB_SRC_DEFINES) $(CFLAGS_CDECL_NO_LIB)
$(LINK_DEPENDENCY_ARGS) "$(ZLIB_DIR)\zlib.lib"
+ $(CCV) -I"$(ZLIB_DIR)" $(LIB_SRC_DEFINES) $(CFLAGS_CDECL_NO_LIB) -MD
$(LINK_DEPENDENCY_ARGS) "$(ZLIB_DIR)\zlib.lib"
LIB_SRC_TOOLS = \
$(BLDLIB_SRC)/etags.exe \
@@ -957,7 +962,7 @@
{$(MANDIR)}.texi{$(INFODIR)}.info:
cd $(MANDIR)
- $(MAKEINFO) $**
+ $(MAKEINFO) $(**F)
XEMACS_SRCS = \
$(MANDIR)\xemacs\abbrevs.texi \
@@ -1258,10 +1263,13 @@
oldnames.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib \
shell32.lib wsock32.lib netapi32.lib winmm.lib winspool.lib ole32.lib \
mpr.lib uuid.lib imm32.lib $(LIBC_LIB)
-TEMACS_LFLAGS=-nologo $(LIBRARIES) $(DEBUG_FLAGS_LINK) \
+TEMACS_COMMON_LFLAGS=-nologo $(LIBRARIES) $(DEBUG_FLAGS_LINK) \
-base:0x1000000 -stack:0x800000 $(TEMACS_ENTRYPOINT) -subsystem:windows \
- -pdb:$(BLDSRC)\temacs.pdb -map:$(BLDSRC)\temacs.map \
-heap:0x00100000 -nodefaultlib $(PROFILE_FLAGS) setargv.obj
+TEMACS_LFLAGS=$(TEMACS_COMMON_LFLAGS) \
+ -pdb:$(BLDSRC)\temacs.pdb -map:$(BLDSRC)\temacs.map
+XEMACS_LFLAGS=$(TEMACS_COMMON_LFLAGS) \
+ -pdb:$(BLDSRC)\xemacs.pdb -map:$(BLDSRC)\xemacs.map
########################### Definitions for running temacs.exe/xemacs.exe
@@ -1375,7 +1383,7 @@
# Make the resource section read/write since almost all of it is the dump
# data which needs to be writable. This avoids having to copy it.
link.exe @<<
- $(TEMACS_LFLAGS) -section:.rsrc,rw -out:$(BLDSRC)\xemacs.exe $(TEMACS_OBJS)
$(OUTDIR)\xemacs.res $(TEMACS_LIBS) $(OUTDIR)\dump-id.obj
+ $(XEMACS_LFLAGS) -section:.rsrc,rw -out:$(BLDSRC)\xemacs.exe $(TEMACS_OBJS)
$(OUTDIR)\xemacs.res $(TEMACS_LIBS) $(OUTDIR)\dump-id.obj
<<
-$(DEL) $(BLDSRC)\xemacs.dmp
!endif
@@ -1449,8 +1457,15 @@
@echo Installing in $(INSTALL_DIR) ...
@echo PlaceHolder > PlaceHolder
@$(COPY) $(SRCROOT)\PROBLEMS "$(INSTALL_DIR)\"
+ @$(COPY) $(SRCROOT)\README "$(INSTALL_DIR)\"
+ @$(COPY) $(SRCROOT)\COPYING "$(INSTALL_DIR)\"
+ @$(COPY) $(SRCROOT)\Installation "$(INSTALL_DIR)\"
@$(COPY) PlaceHolder "$(INSTALL_DIR)\lock\"
-$(DEL) "$(INSTALL_DIR)\lock\PlaceHolder"
+# @$(COPY) $(BLDLIB_SRC)\*.exe "$(INSTALL_DIR)\lib-src\"
+# @$(COPY) $(BLDLIB_SRC)\DOC "$(INSTALL_DIR)\lib-src\"
+# @$(COPY) $(CONFIG_VALUES) "$(INSTALL_DIR)\lib-src\"
+# @$(COPY) $(BLDSRC)\xemacs.exe "$(INSTALL_DIR)\bin\"
@$(COPY) $(BLDLIB_SRC)\*.exe "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)\"
@$(COPY) $(BLDLIB_SRC)\DOC "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)"
@$(COPY) $(CONFIG_VALUES) "$(INSTALL_DIR)\$(EMACS_CONFIGURATION)"
No revision
No revision
1.20.2.2 +8 -0 XEmacs/xemacs/nt/installer/Wise/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/nt/installer/Wise/ChangeLog,v
retrieving revision 1.20.2.1
retrieving revision 1.20.2.2
diff -u -r1.20.2.1 -r1.20.2.2
--- ChangeLog 2004/12/11 05:15:15 1.20.2.1
+++ ChangeLog 2005/03/15 05:23:31 1.20.2.2
@@ -1,3 +1,11 @@
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.20 "cilantro" is released.
+
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.19 "chives" is released.
+
2004-11-16 Ben Wing <ben(a)xemacs.org>
* display-readme.dlg:
No revision
No revision
1.758.2.21 +830 -211 XEmacs/xemacs/src/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ChangeLog,v
retrieving revision 1.758.2.20
retrieving revision 1.758.2.21
diff -u -r1.758.2.20 -r1.758.2.21
--- ChangeLog 2005/03/11 14:31:40 1.758.2.20
+++ ChangeLog 2005/03/15 05:23:36 1.758.2.21
@@ -1,101 +1,125 @@
-2005-03-10 Stephen J. Turnbull <stephen(a)xemacs.org>
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
- * objects-x.c (charset_table): Fix ISO 639 code for Greek. Reported
- by Stefan Holst <holst(a)mathematik.uni-mainz.de>.
- (charset_table): Add information for Hebrew, whine about ISO prices.
+ * XEmacs 21.5.20 "cilantro" is released.
-2005-03-09 Stephen J. Turnbull <stephen(a)xemacs.org>
+2005-03-07 Malcolm Purvis <malcolmp(a)xemacs.org>
- * 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 <stephen(a)xemacs.org>
-
- * 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 <stephen(a)xemacs.org>
-
- 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 <stephen(a)xemacs.org>
-
- * 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 <stephen(a)xemacs.org>
+ * config.h.in: Remove trailing comments, which autoconf 2.59 does
+ not like. Use autoconf 2.59's HAVE_DECL_SYS_SIGLIST instead of
+ SYS_SIGLIST_DECLARED.
+ * syssignal.h: Use autoconf 2.59's HAVE_DECL_SYS_SIGLIST instead
+ of SYS_SIGLIST_DECLARED.
- * objects-x.c (x_find_charset_font): ConfigSubstitute in the
- _pattern_ before matching.
+2005-03-11 Marcus Crestani <crestani(a)informatik.uni-tuebingen.de>
-2005-02-24 Stephen J. Turnbull <stephen(a)xemacs.org>
+ * alloc.c (kkcc_backtrace): Fix C++ build: do typecasts correctly.
- * faces.c (complex_vars_of_faces): Default to monospace-12 for
- Xft. (Suggestion by Aidan Kehoe.)
+2005-03-09 Marcus Crestani <crestani(a)informatik.uni-tuebingen.de>
-2005-02-24 Hrvoje Niksic <hniksic(a)xemacs.org>
+ * database.c (berkdb_map): Add typecasts.
+
+2005-03-01 Marcus Crestani <crestani(a)informatik.uni-tuebingen.de>
+
+ * alloc.c: Add functionality for backtracing the KKCC mark
+ algorithm.
+ * alloc.c (kkcc_backtrace): New.
+ * alloc.c (kkcc_bt_push): New.
+ * alloc.c (kkcc_gc_stack_push):
+ * alloc.c (kkcc_gc_stack_push_lisp_object):
+ * alloc.c (mark_object_maybe_checking_free):
+ * alloc.c (mark_struct_contents):
+ * alloc.c (kkcc_marking):
+ * alloc.c (mark_object):
+ * data.c (finish_marking_weak_lists):
+ * data.c (continue_marking_ephemerons):
+ * data.c (finish_marking_ephemerons):
+ * elhash.c (MARK_OBJ):
+ * lisp.h:
+ * profile.c (mark_profiling_info_maphash): Add level (current
+ depth of mark tree) and pos (position within description) as
+ additional arguments to KKCC mark functions.
+
+2004-10-25 Mike Alexander <mta(a)arbortext.com>
+
+ * Makefile.in.in (obj_src): Fix a typo in the PDUMP section
+
+2005-03-02 Marcus Crestani <crestani(a)informatik.uni-tuebingen.de>
+
+ * redisplay.h (struct rune): make type field an int, to fix
+ KKCC marking of unions.
+
+2005-01-13 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * regex.c (re_match_2_internal):
+ * regex.h (struct re_pattern_buffer):
+ Improve comments. Add a DEBUG_PRINT2 for null matches.
+
+2005-03-02 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * select-x.c (x_reply_selection_request): Check that
+ XtWindowToWidget returns NULL before calling XtRegisterDrawable,
+ document why.
+
+2005-03-02 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * select-x.c (x_reply_selection_request): Make the error message
+ in the absence of HAVE_XTREGISTERDRAWABLE more polite, pass a
+ second argument to invalid_operation to have it actually compile
+ in that case.
+
+2005-03-01 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * config.h.in: New macro, HAVE_XTREGISTERDRAWABLE.
+ * select-x.c (x_reply_selection_request): Use it.
+
+2005-03-01 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * select-x.c (x_reply_selection_request): Wrap
+ DEVICE_SELECTED_FRAME in XFRAME --> fixes a build failure.
+
+2005-03-01 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * unicode.c: The Mule character encoding model means that extant
+ Unicode coding systems will lose data. Make this clear in the
+ docstring of unicode-to-char, give sample code to implement
+ support for some desired code points should our distributors want
+ to do that.
+
+2005-02-28 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * select-gtk.c (emacs_gtk_selection_handle):
+ * select-gtk.c (emacs_gtk_selection_clear_event_handle):
+ Use get_selection_raw_timestamp instead of Fget_selection_timestamp.
+ * select-gtk.c (gtk_own_selection):
+ Cross reference to some debate in select-x.c
+ * select-x.c:
+ * select-x.c (x_handle_selection_request):
+ Discuss Time vs. time_t--I think Time is _always_ thirty-two-bit
+ and time_t is variable in size.
+ * select-x.c (x_handle_selection_clear):
+ Replace call to Fget_selection_timestamp with call to
+ get_selection_raw_time, check that pasted data pointer is non-zero
+ before trying to free it.
+ * select.c:
+ * select.c (Fown_selection_internal):
+ Informative comment! Shouldn't actually be needed outside of the X
+ world.
+ * select.c (get_selection_raw_time): New function.
+ * select.c (Fget_selection_timestamp): Rework to use
+ get_selection_raw_time.
+ * select.h:
+ Make get_selection_raw_time available.
+
+2005-02-26 Aidan Kehoe <kehoea(a)parhasard.net>
- * xgccache.h (XE_GCONTEXT): Move out of DEBUG_XEMACS block.
+ * select-x.c (x_reply_selection_request): Use XtRegisterDrawable
+ to tell Xt not to drop PropertyChange events destined for the
+ selection request target window. This makes incremental selection
+ transfer work, instead of looping until interrupted.
-2005-02-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+2005-01-06 Andrey Slusar <anrays(a)gmail.com>
- * xft-fonts.c (debug_xft): Suppress all debug output for now.
+ * s/freebsd.h: fix build on the FreeBSD 6
2005-02-21 Stephen J. Turnbull <stephen(a)xemacs.org>
@@ -106,150 +130,745 @@
(inhibit-all-packages):
(xemacs-extra-name): Improve docstrings.
-2005-02-21 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * objects-x.c (x_finalize_font_instance): Improve debug message.
-
-2005-02-20 Stephen J. Turnbull <stephen(a)xemacs.org>
+2005-02-18 Jerry James <james(a)xemacs.org>
- * 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.
+ * number.c: Define USED_IF_BIGFLOAT.
+ * number.c (Fcoerce_number): Use it.
-2005-02-11 Eric Knauel <eric(a)xemacs.org>
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
- * xft-fonts.c: throw away old code that was wrapped inside
- comments
+ * XEmacs 21.5.19 "chives" is released.
-2005-02-11 Eric Knauel <eric(a)xemacs.org>
+2005-02-04 Vin Shelton <acs(a)xemacs.org>
- * xft-fonts.h: New prototype
+ * lread.c (check_if_suppressed, check_if_suppressed):
+ EXTERNAL_LIST_LOOP_2 declares variables and must be enclosed in
+ braces. Thanks, Fabrice.
- * 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-03 David Evers <extsw(a)appliedgenerics.com>
-2005-02-09 Eric Knauel <eric(a)xemacs.org>
+ * process-unix.c (unix_send_process): Flush the last chunk, even
+ when the pipe is blocked.
- * xft-fonts.c (string_list_to_fcobjectset): Use loop macro instead
- of for.
+2005-02-03 Ben Wing <ben(a)xemacs.org>
-2005-02-03 Eric Knauel <eric(a)xemacs.org>
-
- * lrecord.h (enum lrecord_type): remove lrecord for FcObjectSets
+ * dumper.c:
+ * dumper.c (pdump_file_try):
+ * dumper.c (DUMP_SLACK):
+ * dumper.c (pdump_load):
+ Include extra DUMP_SLACK when allocating space for exe path.
- * 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 <stephen(a)xemacs.org>
-
- * redisplay-x.c (separate_textual_runs): Check for MULE properly.
-
-2005-01-04 Malcolm Purvis <malcolmp(a)xemacs.org>
-
- * config.h.in: Remove trailing comments, which autoconf 2.59 does
- not like. Use autoconf 2.59's HAVE_DECL_SYS_SIGLIST instead of
- SYS_SIGLIST_DECLARED.
- * syssignal.h: Use autoconf 2.59's HAVE_DECL_SYS_SIGLIST instead of
- SYS_SIGLIST_DECLARED.
-
-2005-01-28 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * 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 <stephen(a)xemacs.org>
-
- * redisplay-x.c (x_output_string): Position strikethru by dl
- geometry. Kludge to fix remnants from antialiased underscores.
+ * glyphs-eimage.c:
+ Reformat comment.
-2004-12-19 Stephen J. Turnbull <stephen(a)xemacs.org>
+ * sysproc.h:
+ Delete out-of-date comment about abort.
- * compiler.h (UNUSED): Document make-docfile.c hack.
+2005-02-03 Jerry James <james(a)xemacs.org>
-2004-12-19 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * keymap.c (Fwhere_is_internal): Rewrite docstring.
-
-2004-12-15 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * EmacsManager.c (EmacsManagerChangeSize): Exit immediately if
- geometry change refused. Fixes notorious metacity maximize bug.
+ * dumper.c (pdump_load_finish): Cast to Rawbyte * instead of char *.
+
+2005-02-03 Jerry James <james(a)xemacs.org>
+
+ * config.h.in: Remove #define this c_this.
+ * device-x.c (construct_name_list): Rename this -> this_widget.
+ * eval.c (wants_debugger): Rename this -> curr.
+ * frame.c (delete_frame_internal): Rename this -> this_frame.
+ * gui-gtk.c (ungcpro_popup_callbacks): Rename this -> this_callback.
+ * gui-gtk.c (get_gcpro_popup_callbacks): Ditto.
+ * gui-x.c (gcpro_popup_callbacks): Ditto.
+ * gui-x.c (ungcpro_popup_callbacks): Ditto.
+ * lisp.h: Remove #undef this and #defin this c_this.
+ * redisplay.c (generate_fstring_runes): Rename this -> this_str.
+
+2005-02-01 Jerry James <james(a)xemacs.org>
+
+ * dumper.c: Olivier Galibert's changes to enable dumping data via
+ a Java-like serialization/deserialization process.
+
+ * number.c: OG's bignum conversion functions. Also, use the
+ dumping capability to initialize bigfloat-max-prec sanely.
+
+ * alloc.c:
+ * buffer.c:
+ * bytecode.c:
+ * console.c:
+ * data.c:
+ * device.c:
+ * elhash.c:
+ * eval.c:
+ * events.c:
+ * extents.c:
+ * file-coding.c:
+ * frame.c:
+ * glyphs.c:
+ * lstream.c:
+ * marker.c:
+ * mule-charset.c:
+ * mule-coding.c:
+ * objects.c:
+ * profile.c:
+ * rangetab.c:
+ * redisplay.c:
+ * specifier.c:
+ * unicode.c:
+ * window.c:
+ Add curly braces to the data2 arg of each memory_description
+ initializer. Add a union member name to each reference to data2.
+
+ * lrecord.h: Ditto. OG changes to add and document
+ XD_OPAQUE_PTR_CONVERTIBLE and XD_OPAQUE_DATA_CONVERTIBLE. Add
+ memory_contents_description to solve pointer aliasing problems.
+
+2005-02-02 Ben Wing <ben(a)xemacs.org>
+
+ * lread.c:
+ * lread.c (check_if_suppressed):
+ * lread.c (Fload_internal):
+ * lread.c (locate_file_in_directory_mapper):
+ * lread.c (readevalloop):
+ * lread.c (syms_of_lread):
+ * lread.c (vars_of_lread):
+ * lisp.h:
+ Remove undeeded Vload_file_name_internal_the_purecopy,
+ Qload_file_name -- use internal_bind_lisp_object instead of
+ specbind.
+
+ Add load-suppress-alist.
+
+2005-02-02 Ben Wing <ben(a)xemacs.org>
+
+ * menubar.c:
+ * menubar.c (Fcompare_menu_text):
+ New fun to compare menu itext as if the two were normalized.
+
+ * menubar.c (Fnormalize_menu_text):
+ * menubar.c (syms_of_menubar):
+ Rename; there are no external callers of this function.
+ Remove unneeded BUFFER argument. Don't downcase.
+ (This will be done in compare-menu-text.)
+ Document that return value may be same string.
+
+2003-02-15 Ben Wing <ben(a)xemacs.org>
-2004-12-19 Stephen J. Turnbull <stephen(a)xemacs.org>
+ * syswindows.h: Define W32API_2_2 for w32api.h v2.2 or higher.
+ Use it when defining a missing structure that is present in this
+ version of w32api.h.
+ * event-msw.c (mswindows_wnd_proc): Conditionalize bug fix on
+ !W32API_2_2.
+
+2005-01-31 Ben Wing <ben(a)xemacs.org>
+
+ * emacs.c:
+ Define assert_failed() always.
+ * lisp.h:
+ Always define ABORT().
+
+2005-01-29 Ben Wing <ben(a)xemacs.org>
+
+ * alloc.c (garbage_collect_1):
+ * backtrace.h:
+ * bytecode.c (execute_rare_opcode):
+ * cmdloop.c:
+ * cmdloop.c (initial_command_loop):
+ * cmdloop.c (Frecursive_edit):
+ * cmdloop.c (call_command_loop):
+ * eval.c:
+ * eval.c (call_debugger):
+ * eval.c (Fcatch):
+ * eval.c (internal_catch):
+ * eval.c (throw_or_bomb_out):
+ * eval.c (condition_case_1):
+ * eval.c (maybe_get_trapping_problems_backtrace):
+ * eval.c (flagged_a_squirmer):
+ * eval.c (issue_call_trapping_problems_warning):
+ * eval.c (call_trapping_problems):
+ * lisp.h:
+ * macros.c (Fexecute_kbd_macro):
+ Also include a backtrace when we catch an attempt to throw outside
+ of a function where call_trapping_problems() has been used.
+
+2005-01-29 Ben Wing <ben(a)xemacs.org>
+
+ * file-coding.c (snarf_coding_system):
+ Use UExtbyte for semantic correctness.
+ * file-coding.c (look_for_coding_system_magic_cookie):
+ Fix code that recognizes ;;;###coding cookie.
+
+2005-01-27 Ben Wing <ben(a)xemacs.org>
+
+ * console-impl.h (struct console_methods):
+ * objects-gtk.c:
+ * objects-gtk.c (gtk_color_list):
+ * objects-gtk.c (gtk_font_list):
+ * objects-gtk.c (console_type_create_objects_gtk):
+ * objects-gtk.c (__gtk_font_list_internal):
+ * objects-msw.c:
+ * objects-msw.c (mswindows_font_list):
+ * objects-msw.c (mswindows_find_charset_font):
+ * objects-msw.c (mswindows_color_list):
+ * objects-msw.c (syms_of_objects_mswindows):
+ * objects-msw.c (console_type_create_objects_mswindows):
+ * objects-tty.c (tty_color_list):
+ * objects-tty.c (tty_font_list):
+ * objects-tty.c (syms_of_objects_tty):
+ * objects-tty.c (console_type_create_objects_tty):
+ * objects-x.c:
+ * objects-x.c (x_color_list):
+ * objects-x.c (x_font_list):
+ * objects-x.c (console_type_create_objects_x):
+ * objects.c:
+ * objects.c (Fcolor_list):
+ * objects.c (Ffont_list):
+ * objects.c (syms_of_objects):
+ list-fonts->font-list. Create color-list. Abstract out
+ x/msw-specific versions and obsolete the x/msw-specific Lisp
+ functions.
+
+2005-01-27 Ben Wing <ben(a)xemacs.org>
+
+ * nt.c:
+ * fileio.c:
+ Fix sync comments.
+
+ * config.h.in:
+ * dired-msw.c (mswindows_get_files):
+ * emacs.c (main_1):
+ * event-msw.c (mswindows_wnd_proc):
+ * fileio.c:
+ * fileio.c (find_end_of_directory_component):
+ * fileio.c (Ffile_name_directory):
+ * fileio.c (Ffile_name_as_directory):
+ * fileio.c (if):
+ * fileio.c (Ffile_truename):
+ * fileio.c (Ffile_readable_p):
+ * fileio.c (Ffile_symlink_p):
+ * fileio.c (Ffile_accessible_directory_p):
+ * fileio.c (vars_of_fileio):
+ * glyphs.c:
+ * glyphs.c (pixmap_to_lisp_data):
+ * lisp.h:
+ * nt.c:
+ * nt.c (get_long_basename):
+ * nt.c (get_cached_volume_information):
+ * nt.c (mswindows_readdir):
+ * nt.c (open_unc_volume):
+ * nt.c (mswindows_access):
+ * nt.c (mswindows_link):
+ * nt.c (mswindows_rename):
+ * nt.c (mswindows_unlink):
+ * nt.c (mswindows_stat):
+ * nt.c (mswindows_utime):
+ * nt.c (open_input_file):
+ * nt.c (open_output_file):
+ * nt.c (Fmswindows_short_file_name):
+ * nt.c (init_nt):
+ * process-nt.c (nt_create_process):
+ * realpath.c:
+ * realpath.c (readlink_or_correct_case):
+ * realpath.c (qxe_realpath):
+ * sound.c (Fplay_sound_file):
+ * symsinit.h:
+ * sysdep.c:
+ * sysdep.c (qxe_lstat):
+ * sysdep.c (qxe_stat):
+ * sysfile.h:
+ * syswindows.h:
+ * syswindows.h (LOCAL_FILE_FORMAT_TO_TSTR):
+ * syswindows.h (LOCAL_FILE_FORMAT_MAYBE_URL_TO_TSTR):
+ * win32.c:
+ * win32.c (Fmswindows_shell_execute):
+ * win32.c (struct read_link_hash):
+ * win32.c (mswindows_read_link_1):
+ * win32.c (mswindows_read_link):
+ * win32.c (vars_of_win32):
+ * win32.c (init_win32):
+ Add support for treating shortcuts under Windows as symbolic links.
+ Enabled with mswindows-shortcuts-are-links (t by default). Rewrite
+ lots of places to use PATHNAME_CONVERT_OUT, which is moved to
+ sysfile.h. Add PATHNAME_RESOLVE_LINKS, which only does things
+ under Windows.
+
+ Add profiling section for expand_file_name calls.
+
+ * nt.c (mswindows_rename):
+ * nt.c (mswindows_unlink):
+ * sysdep.c (sys_subshell):
+ Unicode-ize.
+
+ * realpath.c (readlink_or_correct_case):
+ Renamed from readlink_and_correct_case. Fix some problems with
+ Windows implementation due to incorrect understanding of workings
+ of the function.
+
+ * sound.c (Fplay_sound_file):
+ * ntplay.c (nt_play_sound_file):
+ * sound.c:
+ * sound.h:
+ Rename play_sound_file to nt_play_sound_file and pass
+ internally-formatted data to it to avoid converting out and back
+ again.
- * glyphs-x.c,objects-x.c: Deemphasize warnings (to debug or alert).
+ * text.h:
+ is_c -> is_ascii.
- * redisplay-x.c: Don't abort() when ichar_to_unicode returns error.
+2005-01-26 Ben Wing <ben(a)xemacs.org>
-2004-12-19 Stephen J. Turnbull <stephen(a)xemacs.org>
+ * free-hook.c (check_free):
+ Fix aliasing warning.
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
- * keymap.c (Fwhere_is_internal): Rewrite docstring.
+ * redisplay.c:
+ * redisplay.c (generate_displayable_area):
+ * redisplay.c (regenerate_window):
+ * redisplay.h:
+ * signal.c:
+ * signal.c (check_quit):
+ Move backtraces to internals manual. Fix some race conditions
+ leading to crashes due to incomplete protection of critical
+ sections. In signal.c, be more aggressive in catching incomplete
+ critical section protection -- we cannot even check for QUIT,
+ *EVER*, in a critical section.
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * emacs.c:
+ Update history section.
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * lisp.h:
+ Clean up and generalize creation of string hash tables.
+ Use Hashcode rather than unsigned long.
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * emacs-marshals.c:
+ * emacs-marshals.c (initialize_marshaller_storage):
+ * hash.c:
+ * hash.c (string_equal):
+ * hash.c (make_hash_table):
+ * hash.h:
+ * ui-gtk.c (type_already_imported_p):
+ Clean up and generalize creation of string hash tables.
+
+ * ui-gtk.c (emacs_gtk_boxed_hash):
+ * elhash.h:
+ * gccache-gtk.c (gc_cache_hash):
+ * glyphs-gtk.c (gtk_image_instance_hash):
+ * lrecord.h (struct lrecord_implementation):
+ * marker.c (marker_hash):
+ * objects-gtk.c (gtk_color_instance_hash):
+ * objects-msw.c (mswindows_color_instance_hash):
+ * objects-tty.c (tty_color_instance_hash):
+ * objects-x.c (x_color_instance_hash):
+ * objects.c (color_instance_hash):
+ * objects.c (font_instance_hash):
+ * opaque.c (hash_opaque):
+ * opaque.c (hash_opaque_ptr):
+ * rangetab.c (range_table_entry_hash):
+ * rangetab.c (range_table_hash):
+ * specifier.c (specifier_hash):
+ * specifier.h (struct specifier_methods):
+ * xgccache.c (gc_cache_hash):
+ Use Hashcode rather than unsigned long.
+
+2005-01-26 Ben Wing <ben(a)xemacs.org>
+
+ * profile.c:
+ * profile.c (vars_of_profile):
+ * profile.h:
+ Add fillers for easier temporary profiling.
+ Add RETURN_UNGCPRO_EXIT_PROFILING, RETURN_EXIT_PROFILING.
+
+2005-01-25 Ben Wing <ben(a)xemacs.org>
+
+ * extents.c:
+ * extents.c (next_previous_single_property_change):
+ * extents.c (next_previous_single_property_change_fn):
+ * extents.c (syms_of_extents):
+ * extents.h:
+ * indent.c (last_visible_position):
+ * syntax.c (update_syntax_cache):
+ Implement next/previous-single-char-property-change and make
+ next/previous-single-property-change work like in FSF.
+
+2005-01-25 Ben Wing <ben(a)xemacs.org>
+
+ * Makefile.in.in:
+ * Makefile.in.in (%.o):
+ Don't compile executable as Windows (-mwindows) under Cygwin.
+ Semi-recent changes to Cygwin's executable-startup handling make
+ it impossible to access the TTY this way.
+
+ Don't use special linker file under Cygwin (cygwin.sc) except
+ when non-PDUMP (even in this case it is highly questionable); you
+ get errors like
+
+ 1 [main] temacs 1364 fhandler_console::fixup_after_exec: error opening input
console handle after exec, errno 13, Win32 error 5
+ 5820 [main] temacs 1364 fhandler_console::fixup_after_exec: error opening output
console handle after exec, errno 13, Win32 error 5
+
+2005-01-24 Ben Wing <ben(a)xemacs.org>
+
+ * bytecode.c (optimize_compiled_function):
+ * print.c (ONE_DIGIT):
+ Add casts to avoid warning.
+
+ * compiler.h:
+ Add MSC_VERSION and include definitions of DOESNT_RETURN and
+ friends here, like for GCC. Need different definitions for VC7
+ and VC6.
+
+ * s/windowsnt.h:
+ Remove stuff moved to compiler.h. Disable warning 4646 ("function
+ declared with __declspec(noreturn) has non-void return type")
+ on VC7 since lots of Lisp primitives trigger this and there is
+ no easy way to kludge around the warning.
+
+ * glyphs-eimage.c:
+ Some really nasty hacks to allow TIFF and JPEG to both be compiled.
+ #### The better solution is to move the TIFF and JPEG code to
+ different files.
+
+ * glyphs-msw.c (mswindows_xbm_instantiate):
+ Define __STDC__ to avoid problems with compface.h.
+
+ * intl-auto-encap-win32.c (qxeImmGetCandidateListCount):
+ * intl-auto-encap-win32.c (qxeFindResourceEx):
+ * intl-auto-encap-win32.h:
+ * intl-encap-win32.c:
+ * intl-encap-win32.c (qxeImmGetCompositionFont):
+ * syswindows.h:
+ Those wankers at Microsoft cannot leave well enough alone.
+ Various functions change parameter types semi-randomly between
+ VC6 and VC7, so we need to include our own versions that
+ can handle both kinds with appropriate casting.
+
+ * EmacsFrame.c (EmacsFrameRecomputeCellSize):
+ * EmacsShell-sub.c:
+ * EmacsShell-sub.c (ABORT):
+ * EmacsShell-sub.c (SuperClassRootGeometryManager):
+ * EmacsShell-sub.c (RootGeometryManager):
+ * EmacsShell.c:
+ * EmacsShell.c (ABORT):
+ * EmacsShell.c (EmacsShellUpdateSizeHints):
+ * alloc.c:
+ * alloc.c (very_old_free_lcrecord):
+ * alloc.c (lispdesc_indirect_count_1):
+ * alloc.c (lispdesc_one_description_line_size):
+ * alloc.c (lispdesc_block_size_1):
+ * alloc.c (kkcc_marking):
+ * alloca.c (i00afunc):
+ * buffer.c (delete_from_buffer_alist):
+ * buffer.c (MARKED_SLOT):
+ * bytecode.c (execute_rare_opcode):
+ * bytecode.c (optimize_byte_code):
+ * bytecode.c (Ffetch_bytecode):
+ * charset.h:
+ * chartab.c (char_table_type_to_symbol):
+ * chartab.c (decode_char_table_range):
+ * chartab.c (encode_char_table_range):
+ * chartab.c (Freset_char_table):
+ * chartab.c (get_range_char_table_1):
+ * chartab.c (check_valid_char_table_value):
+ * chartab.c (map_char_table):
+ * chartab.c (chartab_instantiate):
+ * cm.c (cmcheckmagic):
+ * console-stream.c (stream_window_output_begin):
+ * console-stream.c (stream_window_output_end):
+ * console-stream.c (stream_frame_output_begin):
+ * console-stream.c (stream_frame_output_end):
+ * console-stream.c (stream_output_display_block):
+ * console-stream.c (stream_clear_region):
+ * console.c (get_console_variant):
+ * console.c (MARKED_SLOT):
+ * data.c (finish_marking_weak_lists):
+ * data.c (encode_weak_list_type):
+ * debug.h (DASSERT):
+ * device-msw.c (mswindows_get_default_margin):
+ * device-tty.c (tty_init_device):
+ * device-x.c (get_device_from_display):
+ * device-x.c (x_get_visual_depth):
+ * doprnt.c (parse_doprnt_spec):
+ * doprnt.c (get_doprnt_args):
+ * dumper.c (pdump_unsupported_dump_type):
+ * dumper.c (pdump_bump_depth):
+ * dynarr.c (stack_like_free):
+ * elhash.c (print_hash_table):
+ * elhash.c (make_standard_lisp_hash_table):
+ * elhash.c (hash_table_instantiate):
+ * emacs.c:
+ * emacs.c (sort_args):
+ * emacs.c (main):
+ * emacs.c (Fforce_debugging_signal):
+ * emacs.c (assert_failed):
+ * eval.c (throw_or_bomb_out):
+ * eval.c (Fsignal):
+ * eval.c (vars_of_eval):
+ * event-Xt.c (emacs_Xt_mapping_action):
+ * event-Xt.c (Xt_process_to_emacs_event):
+ * event-gtk.c (gtk_process_to_emacs_event):
+ * event-msw.c (mswindows_need_event):
+ * event-msw.c (mswindows_wnd_proc):
+ * event-msw.c (emacs_mswindows_format_magic_event):
+ * event-stream.c (Fadd_timeout):
+ * event-stream.c (Fadd_async_timeout):
+ * event-stream.c (execute_internal_event):
+ * event-stream.c (Frecent_keys):
+ * event-stream.c (extract_this_command_keys_nth_mouse_event):
+ * event-stream.c (lookup_command_event):
+ * events.c (mark_event):
+ * events.c (event_equal):
+ * events.c (event_hash):
+ * events.c (Fmake_event):
+ * events.c (Fdeallocate_event):
+ * events.c (event_chain_find_previous):
+ * events.c (event_to_character):
+ * events.c (format_event_object):
+ * events.c (Fevent_type):
+ * events.c (event_pixel_translation):
+ * events.c (Fevent_properties):
+ * extents.c (extent_in_region_p):
+ * extents.c (print_extent):
+ * extents.c (process_extents_for_insertion_mapper):
+ * extents.c (glyph_layout_to_symbol):
+ * faces.c (face_validate):
+ * file-coding.c (eol_type_to_symbol):
+ * file-coding.c (subsidiary_coding_system):
+ * file-coding.c (chain_conversion_end_type):
+ * file-coding.c (convert_eol_print):
+ * file-coding.c (convert_eol_getprop):
+ * file-coding.c (convert_eol_canonicalize_after_coding):
+ * file-coding.c (coding_category_id_to_symbol):
+ * file-coding.c (detection_result_number_to_symbol):
+ * fileio.c:
+ * fns.c (concat):
+ * fns.c (Fsubseq):
+ * fns.c (mapcar1):
+ * fns.c (Fbase64_encode_region):
+ * fns.c (Fbase64_encode_string):
+ * fns.c (Fbase64_decode_region):
+ * fns.c (Fbase64_decode_string):
+ * font-lock.c (find_context):
+ * font-lock.c (context_to_symbol):
+ * frame-gtk.c (gtk_set_frame_pointer):
+ * frame-gtk.c (gtk_update_frame_external_traits):
+ * frame-x.c (x_wm_mark_shell_size_user_specified):
+ * frame-x.c (x_wm_mark_shell_position_user_specified):
+ * frame-x.c (x_wm_set_shell_iconic_p):
+ * frame-x.c (x_wm_set_cell_size):
+ * frame-x.c (x_wm_set_variable_size):
+ * frame-x.c (x_wm_store_class_hints):
+ * frame-x.c (x_wm_maybe_store_wm_command):
+ * frame-x.c (x_initialize_frame_size):
+ * frame-x.c (x_update_frame_external_traits):
+ * frame.c:
+ * frame.c (delete_frame_internal):
+ * frame.c (mouse_pixel_position_1):
+ * frame.c (change_frame_size_1):
+ * free-hook.c (check_free):
+ * free-hook.c (check_realloc):
+ * free-hook.c (note_block_input):
+ * free-hook.c (log_gcpro):
+ * gccache-gtk.c (gc_cache_lookup):
+ * glyphs-eimage.c (tiff_memory_write):
+ * glyphs-gtk.c (gtk_finalize_image_instance):
+ * glyphs-gtk.c (init_image_instance_from_gdk_pixmap):
+ * glyphs-gtk.c (init_image_instance_from_xbm_inline):
+ * glyphs-gtk.c (gtk_xpm_instantiate):
+ * glyphs-gtk.c (gtk_unmap_subwindow):
+ * glyphs-gtk.c (gtk_map_subwindow):
+ * glyphs-gtk.c (gtk_button_redisplay):
+ * glyphs-msw.c:
+ * glyphs-msw.c (init_image_instance_from_xbm_inline):
+ * glyphs-x.c (init_image_instance_from_xbm_inline):
+ * glyphs-x.c (extract_xpm_color_names):
+ * glyphs-x.c (x_xpm_instantiate):
+ * glyphs.c (get_image_instantiator_governing_domain):
+ * glyphs.c (print_image_instance):
+ * glyphs.c (image_instance_equal):
+ * glyphs.c (image_instance_hash):
+ * glyphs.c (encode_image_instance_type):
+ * glyphs.c (inherit_instantiate):
+ * glyphs.c (image_instantiate):
+ * glyphs.c (allocate_glyph):
+ * glyphs.c (Fglyph_type):
+ * glyphs.c (display_table_entry):
+ * gtk-glue.c (xemacs_list_to_gtklist):
+ * gtk-glue.c (xemacs_gtklist_to_list):
+ * gtk-glue.c (xemacs_list_to_array):
+ * gutter.c (SET_GUTTER_WAS_VISIBLE_FLAG):
+ * gutter.c (gutter_was_visible):
+ * gutter.c (get_gutter_coords):
+ * input-method-xlib.c (get_XIM_input):
+ * insdel.c (move_gap):
+ * intl-win32.c (determine_code_page):
+ * intl-win32.c (mswindows_multibyte_to_unicode_getprop):
+ * intl-win32.c (mswindows_multibyte_convert):
+ * keymap.c (keymap_lookup_directly):
+ * keymap.c (keymap_delete_inverse_internal):
+ * keymap.c (ensure_meta_prefix_char_keymapp):
+ * keymap.c (accessible_keymaps_mapper_1):
+ * keymap.c (where_is_recursive_mapper):
+ * lisp.h:
+ * lisp.h (ABORT):
+ * lisp.h (assert):
+ * lread.c (read_atom):
+ * lstream.c (Lstream_delete):
+ * lstream.c (Lstream_really_write):
+ * lstream.c (make_lisp_buffer_stream_1):
+ * macros.c (pop_kbd_macro_event):
+ * malloc.c (malloc):
+ * malloc.c (free):
+ * menubar-gtk.c (menu_descriptor_to_widget_1):
+ * menubar-gtk.c (menu_create_menubar):
+ * menubar-msw.c (prune_menubar):
+ * menubar-x.c (set_frame_menubar):
+ * mule-coding.c (charset_by_attributes_or_create_one):
+ * mule-coding.c (parse_iso2022_esc):
+ * mule-coding.c (iso2022_encode):
+ * native-gtk-toolbar.c (SET_TOOLBAR_WAS_VISIBLE_FLAG):
+ * number.c:
+ * number.c (get_number_type):
+ * objects-msw.c (mswindows_list_fonts):
+ * objects.c (color_instantiate):
+ * objects.c (font_instantiate):
+ * objects.c (face_boolean_instantiate):
+ * print.c (printing_major_badness):
+ * process-nt.c (nt_send_process):
+ * process-unix.c (unix_send_process):
+ * process.c (get_process):
+ * ralloc.c (obtain):
+ * ralloc.c (relinquish):
+ * ralloc.c (relocate_blocs):
+ * ralloc.c (resize_bloc):
+ * ralloc.c (r_alloc_free):
+ * ralloc.c (r_re_alloc):
+ * ralloc.c (r_alloc_thaw):
+ * ralloc.c (init_ralloc):
+ * ralloc.c (Free_Addr_Block):
+ * ralloc.c (r_alloc):
+ * rangetab.c (range_table_type_to_symbol):
+ * rangetab.c (print_range_table):
+ * rangetab.c (rangetab_instantiate):
+ * redisplay-gtk.c (gtk_output_display_block):
+ * redisplay-msw.c (mswindows_output_display_block):
+ * redisplay-output.c (get_next_display_block):
+ * redisplay-output.c (get_cursor_size_and_location):
+ * redisplay-output.c (redisplay_output_layout):
+ * redisplay-output.c (redisplay_clear_region):
+ * redisplay-tty.c (tty_output_display_block):
+ * redisplay-x.c (x_output_display_block):
+ * redisplay.c (add_propagation_runes):
+ * redisplay.c (add_glyph_rune):
+ * redisplay.c (add_margin_runes):
+ * redisplay.c (create_left_glyph_block):
+ * redisplay.c (create_right_glyph_block):
+ * redisplay.c (regenerate_window):
+ * redisplay.c (REGEN_INC_FIND_START_END):
+ * redisplay.c (point_in_line_start_cache):
+ * regex.c:
+ * regex.c (ABORT):
+ * regex.c (re_compile_fastmap):
+ * regex.c (re_match_2_internal):
+ * regex.c (regerror):
+ * scrollbar-gtk.c (gtk_scrollbar_loop):
+ * scrollbar-gtk.c (scrollbar_cb):
+ * scrollbar-x.c (x_update_scrollbar_instance_status):
+ * scrollbar-x.c (x_scrollbar_loop):
+ * search.c (search_command):
+ * search.c (Fmatch_data):
+ * select-x.c (motif_clipboard_cb):
+ * signal.c:
+ * signal.c (qxe_setitimer):
+ * signal.c (interrupt_signal):
+ * specifier.c (specifier_add_spec):
+ * specifier.c (specifier_instance):
+ * specifier.h:
+ * strftime.c (add_num_time_t):
+ * sunplay.c (init_device):
+ * symbols.c (do_symval_forwarding):
+ * symbols.c (store_symval_forwarding):
+ * symbols.c (Fset):
+ * symbols.c (Fbuilt_in_variable_type):
+ * symbols.c (handler_type_from_function_symbol):
+ * sysdep.c (init_baud_rate):
+ * sysproc.h:
+ * text.c:
+ * text.c (charbpos_to_bytebpos_func):
+ * text.c (bytebpos_to_charbpos_func):
+ * text.c (new_dfc_convert_now_damn_it):
+ * text.h:
+ * toolbar-common.c (__INTERNAL_MAPPED_P):
+ * toolbar-common.c (SET_TOOLBAR_WAS_VISIBLE_FLAG):
+ * toolbar-msw.c (SET_TOOLBAR_WAS_VISIBLE_FLAG):
+ * toolbar.c (get_toolbar_coords):
+ * ui-gtk.c (build_gtk_boxed):
+ * ui-gtk.c (describe_gtk_arg):
+ * ui-gtk.c (gtk_type_to_lisp):
+ * ui-gtk.c (lisp_to_gtk_type):
+ * ui-gtk.c (lisp_to_gtk_ret_type):
+ * ui-gtk.c (lisp_to_flag):
+ * unexnt.c (read_in_bss):
+ * unexnt.c (map_in_heap):
+ * unicode.c:
+ * unicode.c (create_new_from_unicode_table):
+ * unicode.c (sledgehammer_check_from_table):
+ * unicode.c (sledgehammer_check_to_table):
+ * unicode.c (set_unicode_conversion):
+ * unicode.c (unicode_to_ichar):
+ * unicode.c (encode_unicode_char_1):
+ * unicode.c (unicode_convert):
+ * unicode.c (unicode_getprop):
+ * win32.c (mswindows_lisp_error_1):
+ * window.c (real_window):
+ * window.c (window_display_lines):
+ * window.c (window_display_buffer):
+ * window.c (set_window_display_buffer):
+ * window.c (unshow_buffer):
+ * window.c (window_loop):
+ * window.c (Fget_lru_window):
+ * xgccache.c (gc_cache_lookup):
+ * s/windowsnt.h:
+
+ abort() -> ABORT(). Eliminate preprocessor games with abort()
+ since it creates huge problems in VC7, solvable only by including
+ massive amounts of files in every compile (and not worth it).
+
+2005-01-21 Robert Royar <xemacs(a)frinabulax.org>
+
+ * database.c: Repair typo in NetBSD fix.
+
+2005-01-21 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * database.c (dbm_type):
+ * database.c (dbm_subtype): Mark parameters as unused.
+
+2005-01-21 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * database.c: Small warning fix for NetBSD, w.r.t. u_int_8_t being
+ redefined.
+
+2005-01-20 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * event-gtk.c: Recognise AltGr as a valid modifier.
+
+2005-01-12 Ville Skyttä <scop(a)xemacs.org>
+
+ * console-x.h: #include X11/keysym.h before xintrinsic.h.
+
+2005-01-06 Zajcev Evgeny <zevlg(a)yandex.ru>
+
+ * scrollbar.c (compute_scrollbar_instance_usage):
+ Only call device method compute_scrollbar_instance_usage() if it
+ is defined.
2004-12-15 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * EmacsManager.c (EmacsManagerChangeSize): Exit immediately if
- geometry change refused. Fixes notorious metacity maximize bug.
-
-2004-12-17 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * regex.c (re_match_2_internal): DEBUG_PRINT "can match null".
-
-2004-12-10 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * redisplay-x.c (x_text_width_single_run): Whitespace improvement.
-
-2004-12-09 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * 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 <stephen(a)xemacs.org>
-
- * 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 <stephen(a)xemacs.org>
-
- * 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.
+ * EmacsManager.c (EmacsManagerChangeSize): Respect XtGeometryNo,
+ and exit immediately if geometry change refused. Fixes notorious
+ metacity maximize bug.
2004-12-07 Malcolm Purvis <malcolmp(a)xemacs.org>
1.26.2.1 +1 -1 XEmacs/xemacs/src/EmacsFrame.c
Index: EmacsFrame.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/EmacsFrame.c,v
retrieving revision 1.26
retrieving revision 1.26.2.1
diff -u -r1.26 -r1.26.2.1
--- EmacsFrame.c 2004/11/04 23:06:15 1.26
+++ EmacsFrame.c 2005/03/15 05:23:47 1.26.2.1
@@ -610,7 +610,7 @@
struct frame *f = ew->emacs_frame.frame;
if (! XtIsSubclass (w, emacsFrameClass))
- abort ();
+ ABORT ();
default_face_height_and_width (wrap_frame (f), &ch, &cw);
if (FRAME_X_TOP_LEVEL_FRAME_P (f))
1.6.2.3 +4 -2 XEmacs/xemacs/src/EmacsShell-sub.c
Index: EmacsShell-sub.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/EmacsShell-sub.c,v
retrieving revision 1.6.2.2
retrieving revision 1.6.2.3
diff -u -r1.6.2.2 -r1.6.2.3
--- EmacsShell-sub.c 2005/03/05 18:09:28 1.6.2.2
+++ EmacsShell-sub.c 2005/03/15 05:23:47 1.6.2.3
@@ -90,6 +90,8 @@
#include <X11/VendorP.h>
#include "EmacsShellP.h"
+#define ABORT abort
+
#if defined (DEFINE_TOP_LEVEL_EMACS_SHELL)
#define EMACS_SHELL_WIDGET TopLevelEmacsShellWidget
#define SUPERCLASS_WIDGET_CLASS topLevelShellWidgetClass
@@ -286,7 +288,7 @@
}
if (!gcer)
- abort ();
+ ABORT ();
/* call it to actually make the geometry request */
scer = (ShellClassExtensionRec *) gcer;
@@ -304,7 +306,7 @@
XtGeometryResult result;
if (reentrant)
- abort ();
+ ABORT ();
reentrant++;
#ifdef DEBUG_GEOMETRY_MANAGEMENT
1.2.20.1 +3 -1 XEmacs/xemacs/src/EmacsShell.c
Index: EmacsShell.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/EmacsShell.c,v
retrieving revision 1.2
retrieving revision 1.2.20.1
diff -u -r1.2 -r1.2.20.1
--- EmacsShell.c 2001/04/12 18:23:22 1.2
+++ EmacsShell.c 2005/03/15 05:23:47 1.2.20.1
@@ -34,6 +34,8 @@
#include "EmacsShell.h"
#include "ExternalShell.h"
+#define ABORT abort
+
#if 0 /* Not currently used */
/* The root_geometry_manager() method in Shell.c is fucked up with regard
@@ -161,5 +163,5 @@
else if (XtIsSubclass (gw, transientEmacsShellWidgetClass))
TransientEmacsShellUpdateSizeHints (gw);
else
- abort ();
+ ABORT ();
}
1.112.2.3 +6 -5 XEmacs/xemacs/src/Makefile.in.in
Index: Makefile.in.in
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/Makefile.in.in,v
retrieving revision 1.112.2.2
retrieving revision 1.112.2.3
diff -u -r1.112.2.2 -r1.112.2.3
--- Makefile.in.in 2004/12/11 05:15:50 1.112.2.2
+++ Makefile.in.in 2005/03/15 05:23:47 1.112.2.3
@@ -380,15 +380,16 @@
cppflags = $(CPPFLAGS) -Demacs -I. $(c_switch_all)
cflags = $(CFLAGS) $(cppflags)
-#if defined (WIN32_NATIVE) || defined (CYGWIN)
+#if defined (WIN32_NATIVE)
ldflags = $(LDFLAGS) -mwindows -e _mainCRTStartup $(ld_switch_all)
$(ld_dynamic_link_flags)
-# if defined (CYGWIN)
-ldflags += -Wl,--script=s/cygwin.sc
-# endif
#else
ldflags = $(LDFLAGS) $(ld_switch_all) $(ld_dynamic_link_flags)
#endif
+#if defined (CYGWIN) && !defined (PDUMP)
+ldflags += -Wl,--script=s/cygwin.sc
+#endif
+
#ifdef SOLARIS2
%.o : %.c
#else
@@ -615,7 +616,7 @@
fi ; \
fi ; \
fi
- if ! test -f dump-size; then \
+ if test ! -f dump-size; then \
$(LIB_SRC)/insert-data-in-exec -s $(DUMP_TARGET).dmp > dump-size ; \
$(RM) dump-data.o $(DUMP_TARGET) $(DUMP_TARGET).dmp $(RAW_EXE);\
$(MAKE) $(RECURSIVE_MAKE_ARGS) $@; \
1.103.2.1 +173 -30 XEmacs/xemacs/src/alloc.c
Index: alloc.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/alloc.c,v
retrieving revision 1.103
retrieving revision 1.103.2.1
diff -u -r1.103 -r1.103.2.1
--- alloc.c 2004/11/04 23:06:15 1.103
+++ alloc.c 2005/03/15 05:23:48 1.103.2.1
@@ -552,7 +552,7 @@
break;
}
else if (next == 0)
- abort ();
+ ABORT ();
else
header = next;
}
@@ -2662,7 +2662,7 @@
*/
const struct memory_description free_description[] = {
- { XD_LISP_OBJECT, offsetof (struct free_lcrecord_header, chain), 0, 0,
+ { XD_LISP_OBJECT, offsetof (struct free_lcrecord_header, chain), 0, { 0 },
XD_FLAG_FREE_LISP_OBJECT },
{ XD_END }
};
@@ -2674,7 +2674,7 @@
struct free_lcrecord_header);
const struct memory_description lcrecord_list_description[] = {
- { XD_LISP_OBJECT, offsetof (struct lcrecord_list, free), 0, 0,
+ { XD_LISP_OBJECT, offsetof (struct lcrecord_list, free), 0, { 0 },
XD_FLAG_FREE_LISP_OBJECT },
{ XD_END }
};
@@ -3091,12 +3091,16 @@
default:
stderr_out ("Unsupported count type : %d (line = %d, code = %ld)\n",
idesc[line].type, line, (long) code);
+#ifdef USE_KKCC
+ if (gc_in_progress)
+ kkcc_backtrace ();
+#endif
#ifdef PDUMP
if (in_pdump)
pdump_backtrace ();
#endif
count = 0; /* warning suppression */
- abort ();
+ ABORT ();
}
count += delta;
return count;
@@ -3152,7 +3156,8 @@
return (val *
lispdesc_block_size
- (rdata, lispdesc_indirect_description (obj, desc1->data2)));
+ (rdata,
+ lispdesc_indirect_description (obj, desc1->data2.descr)));
}
case XD_OPAQUE_DATA_PTR:
return sizeof (void *);
@@ -3162,7 +3167,7 @@
description, use it; else compute size based on current union
constant. */
const struct sized_memory_description *sdesc =
- lispdesc_indirect_description (obj, desc1->data2);
+ lispdesc_indirect_description (obj, desc1->data2.descr);
if (sdesc->size)
return sdesc->size;
else
@@ -3179,7 +3184,7 @@
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);
+ lispdesc_indirect_description (obj, desc1->data2.descr);
if (sdesc->size)
return sdesc->size;
else
@@ -3218,7 +3223,7 @@
return sizeof (long);
default:
stderr_out ("Unsupported dump type : %d\n", desc1->type);
- abort ();
+ ABORT ();
}
return 0;
@@ -3260,7 +3265,7 @@
if (offset == max_offset)
{
stderr_out ("Two relocatable elements at same offset?\n");
- abort ();
+ ABORT ();
}
else if (offset > max_offset)
{
@@ -3306,6 +3311,10 @@
{
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;
@@ -3313,6 +3322,72 @@
static kkcc_gc_stack_entry *kkcc_gc_stack_last_entry;
static int kkcc_gc_stack_size;
+#ifdef DEBUG_XEMACS
+#define KKCC_BT_STACK_SIZE 4096
+
+static struct
+{
+ void *obj;
+ const struct memory_description *desc;
+ int pos;
+} kkcc_bt[KKCC_BT_STACK_SIZE];
+
+static int kkcc_bt_depth = 0;
+
+#define KKCC_BT_INIT() kkcc_bt_depth = 0;
+
+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_free)
+ || (!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
+ stderr_out ("root set)\n");
+ }
+}
+
+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)
+ {
+ stderr_out ("KKCC backtrace overflow, adjust KKCC_BT_STACK_SIZE.\n");
+ stderr_out ("Maybe it is a loop?\n");
+ ABORT ();
+ }
+}
+
+#else /* not DEBUG_XEMACS */
+#define KKCC_BT_INIT()
+#define kkcc_bt_push(obj, desc, level, pos)
+#endif /* not DEBUG_XEMACS */
+
static void
kkcc_gc_stack_init (void)
{
@@ -3358,15 +3433,32 @@
#define KKCC_GC_STACK_EMPTY (kkcc_gc_stack_top < kkcc_gc_stack_ptr)
static void
-kkcc_gc_stack_push (void *data, const struct memory_description *desc)
+#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)
{
@@ -3377,7 +3469,11 @@
}
void
-kkcc_gc_stack_push_lisp_object (Lisp_Object obj)
+#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)
{
@@ -3388,11 +3484,19 @@
if (! MARKED_RECORD_HEADER_P (lheader))
{
MARK_RECORD_HEADER (lheader);
- kkcc_gc_stack_push((void*) lheader, desc);
+ 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 \
@@ -3408,24 +3512,44 @@
#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 (Lisp_Object obj, int allow_free)
+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);
+ 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) \
- kkcc_gc_stack_push_lisp_object (obj)
-#endif /* ERROR_CHECK_GC */
+#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
-mark_struct_contents (const void *data,
+#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;
@@ -3433,10 +3557,18 @@
for (i = 0; i < count; i++)
{
- kkcc_gc_stack_push (((char *) data) + elsize * i, sdesc->description);
+ 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
@@ -3449,11 +3581,20 @@
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);
for (pos = 0; desc[pos].type != XD_END; pos++)
{
@@ -3492,8 +3633,8 @@
if (EQ (*stored_obj, Qnull_pointer))
break;
mark_object_maybe_checking_free
- (*stored_obj, (desc1->flags) & XD_FLAG_FREE_LISP_OBJECT);
-
+ (*stored_obj, (desc1->flags) & XD_FLAG_FREE_LISP_OBJECT,
+ level, pos);
break;
}
case XD_LISP_OBJECT_ARRAY:
@@ -3509,9 +3650,9 @@
if (EQ (*stored_obj, Qnull_pointer))
break;
-
mark_object_maybe_checking_free
- (*stored_obj, (desc1->flags) & XD_FLAG_FREE_LISP_OBJECT);
+ (*stored_obj, (desc1->flags) & XD_FLAG_FREE_LISP_OBJECT,
+ level, pos);
}
break;
}
@@ -3520,10 +3661,10 @@
EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc,
data);
const struct sized_memory_description *sdesc =
- lispdesc_indirect_description (data, desc1->data2);
+ lispdesc_indirect_description (data, desc1->data2.descr);
const char *dobj = * (const char **) rdata;
if (dobj)
- mark_struct_contents (dobj, sdesc, count);
+ mark_struct_contents (dobj, sdesc, count, level, pos);
break;
}
case XD_BLOCK_ARRAY:
@@ -3531,9 +3672,9 @@
EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc,
data);
const struct sized_memory_description *sdesc =
- lispdesc_indirect_description (data, desc1->data2);
+ lispdesc_indirect_description (data, desc1->data2.descr);
- mark_struct_contents (rdata, sdesc, count);
+ mark_struct_contents (rdata, sdesc, count, level, pos);
break;
}
case XD_UNION:
@@ -3545,7 +3686,8 @@
default:
stderr_out ("Unsupported description type : %d\n", desc1->type);
- abort ();
+ kkcc_backtrace ();
+ ABORT ();
}
}
}
@@ -3568,7 +3710,7 @@
/* 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 ();
+ ABORT ();
#else /* not USE_KKCC */
tail_recurse:
@@ -4734,7 +4876,7 @@
#ifdef USE_KKCC
/* initialize kkcc stack */
kkcc_gc_stack_init();
-#define mark_object kkcc_gc_stack_push_lisp_object
+#define mark_object(obj) kkcc_gc_stack_push_lisp_object (obj, 0, -1)
#endif /* USE_KKCC */
{ /* staticpro() */
@@ -4775,6 +4917,7 @@
mark_object (catch->tag);
mark_object (catch->val);
mark_object (catch->actual_tag);
+ mark_object (catch->backtrace);
}
}
1.8.2.1 +3 -3 XEmacs/xemacs/src/alloca.c
Index: alloca.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/alloca.c,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -u -r1.8 -r1.8.2.1
--- alloca.c 2003/09/30 15:26:39 1.8
+++ alloca.c 2005/03/15 05:23:49 1.8.2.1
@@ -339,7 +339,7 @@
a fatal error if "trailer" is null. */
if (trailer == 0)
- abort ();
+ ABORT ();
/* Discard segments that do not contain our argument address. */
@@ -348,7 +348,7 @@
block = (long *) trailer->this_address;
size = trailer->this_size;
if (block == 0 || size == 0)
- abort ();
+ ABORT ();
trailer = (struct stk_trailer *) trailer->link;
if ((block <= address) && (address < (block + size)))
break;
@@ -367,7 +367,7 @@
do
{
if (trailer->this_size <= 0)
- abort ();
+ ABORT ();
result += trailer->this_size;
trailer = (struct stk_trailer *) trailer->link;
}
1.10.2.1 +2 -0 XEmacs/xemacs/src/backtrace.h
Index: backtrace.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/backtrace.h,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -r1.10 -r1.10.2.1
--- backtrace.h 2003/02/13 09:57:05 1.10
+++ backtrace.h 2005/03/15 05:23:50 1.10.2.1
@@ -141,6 +141,8 @@
/* Stores the actual tag used in `throw'; the same as TAG, unless
TAG is Vcatch_everything_tag. */
Lisp_Object actual_tag;
+ /* A backtrace prior to the throw, used with Vcatch_everything_tag. */
+ Lisp_Object backtrace;
Lisp_Object val;
struct catchtag *next;
struct gcpro *gcpro;
1.67.2.2 +4 -4 XEmacs/xemacs/src/buffer.c
Index: buffer.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/buffer.c,v
retrieving revision 1.67.2.1
retrieving revision 1.67.2.2
diff -u -r1.67.2.1 -r1.67.2.2
--- buffer.c 2004/12/11 05:15:51 1.67.2.1
+++ buffer.c 2005/03/15 05:23:50 1.67.2.2
@@ -245,9 +245,9 @@
{ XD_LISP_OBJECT, offsetof (struct buffer, extent_info) },
{ XD_BLOCK_PTR, offsetof (struct buffer, text),
- 1, &buffer_text_description },
+ 1, { &buffer_text_description } },
{ XD_BLOCK_PTR, offsetof (struct buffer, syntax_cache),
- 1, &syntax_cache_description },
+ 1, { &syntax_cache_description } },
{ XD_LISP_OBJECT, offsetof (struct buffer, indirect_children) },
{ XD_LISP_OBJECT, offsetof (struct buffer, base_buffer) },
@@ -559,7 +559,7 @@
Lisp_Object cons = Frassq (buf, Vbuffer_alist);
Lisp_Object frmcons, devcons, concons;
if (NILP (cons))
- return; /* abort() ? */
+ return; /* ABORT() ? */
Vbuffer_alist = delq_no_quit (cons, Vbuffer_alist);
FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
@@ -2819,7 +2819,7 @@
if ((XINT (buffer_local_flags.slot) != -2 && \
XINT (buffer_local_flags.slot) != -3) \
!= !(NILP (XBUFFER (Vbuffer_local_symbols)->slot))) \
- abort ();
+ ABORT ();
#include "bufslots.h"
{
1.43.2.1 +7 -6 XEmacs/xemacs/src/bytecode.c
Index: bytecode.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/bytecode.c,v
retrieving revision 1.43
retrieving revision 1.43.2.1
diff -u -r1.43 -r1.43.2.1
--- bytecode.c 2004/11/04 23:06:16 1.43
+++ bytecode.c 2005/03/15 05:23:50 1.43.2.1
@@ -1377,7 +1377,7 @@
case Bcatch:
{
Lisp_Object arg = POP;
- TOP = internal_catch (TOP, Feval, arg, 0, 0);
+ TOP = internal_catch (TOP, Feval, arg, 0, 0, 0);
break;
}
@@ -1602,7 +1602,7 @@
}
default:
- abort();
+ ABORT();
break;
}
return stack_ptr;
@@ -1973,7 +1973,7 @@
break;
default:
- abort();
+ ABORT();
break;
}
}
@@ -2049,7 +2049,8 @@
program = alloca_array (Opbyte, 1 + 2 * XSTRING_LENGTH (f->instructions));
optimize_byte_code (f->instructions, f->constants,
program, &program_length, &varbind_count);
- f->specpdl_depth = XINT (Flength (f->arglist)) + varbind_count;
+ f->specpdl_depth = (unsigned short) (XINT (Flength (f->arglist)) +
+ varbind_count);
f->instructions =
make_opaque (program, program_length * sizeof (Opbyte));
}
@@ -2179,7 +2180,7 @@
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),
- XD_INDIRECT (0, 0), &lisp_object_description },
+ XD_INDIRECT (0, 0), { &lisp_object_description } },
{ XD_LISP_OBJECT, offsetof (Lisp_Compiled_Function, instructions) },
{ XD_LISP_OBJECT, offsetof (Lisp_Compiled_Function, constants) },
{ XD_LISP_OBJECT, offsetof (Lisp_Compiled_Function, arglist) },
@@ -2514,7 +2515,7 @@
f->constants = XCDR (tem);
return function;
}
- abort ();
+ ABORT ();
return Qnil; /* not (usually) reached */
}
1.9.2.1 +2 -2 XEmacs/xemacs/src/charset.h
Index: charset.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/charset.h,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -r1.9 -r1.9.2.1
--- charset.h 2004/11/04 23:06:16 1.9
+++ charset.h 2005/03/15 05:23:51 1.9.2.1
@@ -428,7 +428,7 @@
#ifdef ENABLE_COMPOSITE_CHARS
return LEADING_BYTE_COMPOSITE;
#else
- abort();
+ ABORT();
return 0;
#endif /* ENABLE_COMPOSITE_CHARS */
}
@@ -452,7 +452,7 @@
#ifdef ENABLE_COMPOSITE_CHARS
#error Not yet implemented
#else
- abort();
+ ABORT();
return 0;
#endif /* ENABLE_COMPOSITE_CHARS */
}
1.32.2.1 +8 -8 XEmacs/xemacs/src/chartab.c
Index: chartab.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/chartab.c,v
retrieving revision 1.32
retrieving revision 1.32.2.1
diff -u -r1.32 -r1.32.2.1
--- chartab.c 2004/11/04 23:06:17 1.32
+++ chartab.c 2005/03/15 05:23:51 1.32.2.1
@@ -195,7 +195,7 @@
{
switch (type)
{
- default: abort();
+ default: ABORT();
case CHAR_TABLE_TYPE_GENERIC: return Qgeneric;
case CHAR_TABLE_TYPE_SYNTAX: return Qsyntax;
case CHAR_TABLE_TYPE_DISPLAY: return Qdisplay;
@@ -261,7 +261,7 @@
check_int_range (outrange->row, 32, 127);
break;
default:
- abort ();
+ ABORT ();
}
}
else
@@ -294,7 +294,7 @@
case CHARTAB_RANGE_CHAR:
return make_char (range->ch);
default:
- abort ();
+ ABORT ();
}
return Qnil; /* not reached */
}
@@ -514,7 +514,7 @@
break;
default:
- abort ();
+ ABORT ();
def = Qnil;
break;
}
@@ -877,7 +877,7 @@
#endif /* not MULE */
default:
- abort ();
+ ABORT ();
}
if (UNBOUNDP (retval))
@@ -972,7 +972,7 @@
break;
default:
- abort ();
+ ABORT ();
}
return 0; /* not (usually) reached */
@@ -1426,7 +1426,7 @@
}
default:
- abort ();
+ ABORT ();
}
return 0;
@@ -1561,7 +1561,7 @@
Fput_char_table (make_char (i), val, chartab);
}
else
- abort ();
+ ABORT ();
}
else
Fput_char_table (range, val, chartab);
1.9.2.1 +1 -1 XEmacs/xemacs/src/cm.c
Index: cm.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/cm.c,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -r1.9 -r1.9.2.1
--- cm.c 2004/09/20 19:19:35 1.9
+++ cm.c 2005/03/15 05:23:52 1.9.2.1
@@ -101,7 +101,7 @@
if (curX == FrameCols)
{
if (!MagicWrap || curY >= FrameRows - 1)
- abort ();
+ ABORT ();
if (termscript)
putc ('\r', termscript);
putchar ('\r');
1.22.2.1 +5 -6 XEmacs/xemacs/src/cmdloop.c
Index: cmdloop.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/cmdloop.c,v
retrieving revision 1.22
retrieving revision 1.22.2.1
diff -u -r1.22 -r1.22.2.1
--- cmdloop.c 2004/09/20 19:19:35 1.22
+++ cmdloop.c 2005/03/15 05:23:52 1.22.2.1
@@ -1,6 +1,6 @@
/* Editor command loop.
Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
- Copyright (C) 1995, 1996, 2001, 2002 Ben Wing.
+ Copyright (C) 1995, 1996, 2001, 2002, 2003 Ben Wing.
This file is part of XEmacs.
@@ -290,7 +290,7 @@
Otherwise, this function will return normally when all command-
line arguments have been processed, the user's initialization
file has been read in, and the first frame has been created. */
- internal_catch (Qtop_level, top_level_1, Qnil, 0, 0);
+ internal_catch (Qtop_level, top_level_1, Qnil, 0, 0, 0);
/* If an error occurred during startup and the initial console
wasn't created, then die now (the error was already printed out
@@ -310,7 +310,7 @@
MARK_MODELINE_CHANGED;
/* Now invoke the command loop. It never returns; however, a
throw to 'top-level will place us at the end of this loop. */
- internal_catch (Qtop_level, command_loop_2, Qnil, 0, 0);
+ internal_catch (Qtop_level, command_loop_2, Qnil, 0, 0, 0);
/* #### wrong with selected-console? */
/* We don't actually call clear_echo_area() here, partially
at least because that runs Lisp code and it may be unsafe
@@ -373,7 +373,7 @@
specbind (Qstandard_output, Qt);
specbind (Qstandard_input, Qt);
- val = internal_catch (Qexit, command_loop_2, Qnil, 0, 0);
+ val = internal_catch (Qexit, command_loop_2, Qnil, 0, 0, 0);
if (EQ (val, Qt))
/* Turn abort-recursive-edit into a quit. */
@@ -440,8 +440,7 @@
if (NILP (catch_errors))
Fcommand_loop_1 ();
else
- internal_catch (Qtop_level,
- cold_load_command_loop, Qnil, 0, 0);
+ internal_catch (Qtop_level, cold_load_command_loop, Qnil, 0, 0, 0);
goto loop;
RETURN_NOT_REACHED (Qnil);
}
1.8.2.3 +19 -3 XEmacs/xemacs/src/compiler.h
Index: compiler.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/compiler.h,v
retrieving revision 1.8.2.2
retrieving revision 1.8.2.3
diff -u -r1.8.2.2 -r1.8.2.3
--- compiler.h 2005/02/01 15:46:52 1.8.2.2
+++ compiler.h 2005/03/15 05:23:52 1.8.2.3
@@ -99,6 +99,12 @@
# endif /* __GNUC__ */
#endif /* GCC_VERSION */
+#ifdef _MSC_VER
+#define MSC_VERSION _MSC_VER
+#else
+#define MSC_VERSION 0
+#endif
+
/* GCC < 2.6.0 could only declare one attribute per function. In that case,
we define DOESNT_RETURN in preference to PRINTF_ARGS, which is only used
for checking args against the string spec. */
@@ -124,7 +130,17 @@
# define DOESNT_RETURN_TYPE(rettype) rettype volatile
# define DECLARE_DOESNT_RETURN_TYPE(rettype,decl) rettype volatile decl
# endif /* GCC_VERSION >= NEED_GCC (2, 5, 0) */
-# else /* not gcc */
+# elif (MSC_VERSION >= 1200)
+/* MSVC 6.0 has a mechanism to declare functions which never return */
+# define DOESNT_RETURN_TYPE(rettype) __declspec(noreturn) rettype
+# define DECLARE_DOESNT_RETURN_TYPE(rettype,decl) \
+ __declspec(noreturn) rettype XCDECL decl
+# if (MSC_VERSION >= 1300)
+/* VC++ 7 issues warnings about return statements in __declspec(noreturn)
+ functions; this problem didn't exist under VC++ 6 */
+# define RETURN_NOT_REACHED(value) DO_NOTHING
+# endif
+# else /* not gcc, VC++ */
# define DOESNT_RETURN_TYPE(rettype) rettype
# define DECLARE_DOESNT_RETURN_TYPE(rettype,decl) rettype decl
# endif /* GCC_VERSION > NEED_GCC (0, 0, 0) */
@@ -145,8 +161,8 @@
/* More ways to shut up compiler. This works in Fcommand_loop_1(),
where there's an infinite loop in a function returning a Lisp object.
*/
-#if defined (_MSC_VER) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || \
- (defined (DEC_ALPHA) && defined (OSF1))
+#if (defined (_MSC_VER) && MSC_VERSION < 1300) || defined (__SUNPRO_C) || \
+ defined (__SUNPRO_CC) || (defined (DEC_ALPHA) && defined (OSF1))
# define DO_NOTHING_DISABLING_NO_RETURN_WARNINGS if (0) return Qnil
#else
# define DO_NOTHING_DISABLING_NO_RETURN_WARNINGS DO_NOTHING
1.95.2.5 +1 -1 XEmacs/xemacs/src/config.h.in
Index: config.h.in
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/config.h.in,v
retrieving revision 1.95.2.4
retrieving revision 1.95.2.5
diff -u -r1.95.2.4 -r1.95.2.5
--- config.h.in 2005/02/22 10:17:38 1.95.2.4
+++ config.h.in 2005/03/15 05:23:52 1.95.2.5
@@ -243,6 +243,7 @@
#undef THIS_IS_X11R6
#undef HAVE_XCONVERTCASE
+#undef HAVE_XTREGISTERDRAWABLE
#undef HAVE_BALLOON_HELP
@@ -1043,7 +1044,6 @@
# if defined (__cplusplus)
/* Avoid C++ keywords used as ordinary C identifiers */
# define new c_new
-# define this c_this
# define catch c_catch
# define EXTERN_C extern "C"
1.7.2.1 +2 -1 XEmacs/xemacs/src/console-impl.h
Index: console-impl.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/console-impl.h,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -r1.7 -r1.7.2.1
--- console-impl.h 2004/11/04 23:06:18 1.7
+++ console-impl.h 2005/03/15 05:23:53 1.7.2.1
@@ -192,6 +192,7 @@
int depth);
Lisp_Object (*color_instance_rgb_components_method) (Lisp_Color_Instance *);
int (*valid_color_name_p_method) (struct device *, Lisp_Object color);
+ Lisp_Object (*color_list_method) (void);
/* font methods */
int (*initialize_font_instance_method) (Lisp_Font_Instance *,
@@ -206,7 +207,7 @@
Lisp_Object (*font_instance_truename_method) (Lisp_Font_Instance *,
Error_Behavior errb);
Lisp_Object (*font_instance_properties_method) (Lisp_Font_Instance *);
- Lisp_Object (*list_fonts_method) (Lisp_Object pattern,
+ Lisp_Object (*font_list_method) (Lisp_Object pattern,
Lisp_Object device,
Lisp_Object maxnumber);
Lisp_Object (*find_charset_font_method) (Lisp_Object device,
1.24.2.1 +6 -6 XEmacs/xemacs/src/console-stream.c
Index: console-stream.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/console-stream.c,v
retrieving revision 1.24
retrieving revision 1.24.2.1
diff -u -r1.24 -r1.24.2.1
--- console-stream.c 2004/10/20 03:43:00 1.24
+++ console-stream.c 2005/03/15 05:23:54 1.24.2.1
@@ -227,25 +227,25 @@
static void
stream_window_output_begin (struct window *UNUSED (w))
{
- abort ();
+ ABORT ();
}
static void
stream_window_output_end (struct window *UNUSED (w))
{
- abort ();
+ ABORT ();
}
static void
stream_frame_output_begin (struct frame *UNUSED (f))
{
- abort ();
+ ABORT ();
}
static void
stream_frame_output_end (struct frame *UNUSED (f))
{
- abort ();
+ ABORT ();
}
static void
@@ -257,7 +257,7 @@
int UNUSED (cursor_width),
int UNUSED (cursor_height))
{
- abort ();
+ ABORT ();
}
static void
@@ -268,7 +268,7 @@
Lisp_Object UNUSED (bcolor),
Lisp_Object UNUSED (background_pixmap))
{
- abort ();
+ ABORT ();
}
static int
1.20.2.2 +4 -1 XEmacs/xemacs/src/console-x.h
Index: console-x.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/console-x.h,v
retrieving revision 1.20.2.1
retrieving revision 1.20.2.2
diff -u -r1.20.2.1 -r1.20.2.2
--- console-x.h 2004/11/25 12:44:11 1.20.2.1
+++ console-x.h 2005/03/15 05:23:54 1.20.2.2
@@ -36,11 +36,14 @@
#ifdef HAVE_X_WINDOWS
#include "console.h"
+/* must come before Xutil.h, which is included indirectly from xintrinsic.h,
+ to avoid breakage in keysym-parsing macros from X11R6, at least X.org as
+ of 2005-01-17, and probably XFree86 too from reports on c.e.x */
+#include <X11/keysym.h>
#include "xintrinsic.h"
#include "../lwlib/lwlib.h"
#include <X11/cursorfont.h>
-#include <X11/keysym.h>
#include <X11/Xatom.h>
#include <X11/StringDefs.h>
1.38.2.1 +8 -7 XEmacs/xemacs/src/console.c
Index: console.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/console.c,v
retrieving revision 1.38
retrieving revision 1.38.2.1
diff -u -r1.38 -r1.38.2.1
--- console.c 2004/11/04 23:06:18 1.38
+++ console.c 2005/03/15 05:23:54 1.38.2.1
@@ -115,9 +115,9 @@
static const struct memory_description console_data_description_1 []= {
#ifdef HAVE_TTY
- { XD_BLOCK_PTR, tty_console, 1, &tty_console_data_description},
+ { XD_BLOCK_PTR, tty_console, 1, { &tty_console_data_description} },
#endif
- { XD_BLOCK_PTR, stream_console, 1, &stream_console_data_description},
+ { XD_BLOCK_PTR, stream_console, 1, { &stream_console_data_description} },
{ XD_END }
};
@@ -130,9 +130,9 @@
#define MARKED_SLOT(x) { XD_LISP_OBJECT, offsetof (struct console, x) },
#include "conslots.h"
{ XD_BLOCK_PTR, offsetof (struct console, conmeths), 1,
- &console_methods_description },
+ { &console_methods_description } },
{ XD_UNION, offsetof (struct console, console_data),
- XD_INDIRECT (0, 0), &console_data_description },
+ XD_INDIRECT (0, 0), { &console_data_description } },
{ XD_END }
};
@@ -260,7 +260,7 @@
if (EQ (type, Qstream))
return stream_console;
- abort (); /* should never happen */
+ ABORT (); /* should never happen */
return dead_console;
}
@@ -1227,7 +1227,8 @@
static const struct memory_description cte_description_1[] = {
{ XD_LISP_OBJECT, offsetof (console_type_entry, symbol) },
- { XD_BLOCK_PTR, offsetof (console_type_entry, meths), 1,
&console_methods_description },
+ { XD_BLOCK_PTR, offsetof (console_type_entry, meths), 1,
+ { &console_methods_description } },
{ XD_END }
};
@@ -1564,6 +1565,6 @@
if ((XINT (console_local_flags.slot) != -2 && \
XINT (console_local_flags.slot) != -3) \
!= !(NILP (XCONSOLE (Vconsole_local_symbols)->slot))) \
- abort ();
+ ABORT ();
#include "conslots.h"
}
1.60.2.1 +11 -11 XEmacs/xemacs/src/data.c
Index: data.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/data.c,v
retrieving revision 1.60
retrieving revision 1.60.2.1
diff -u -r1.60 -r1.60.2.1
--- data.c 2004/09/20 19:19:36 1.60
+++ data.c 2005/03/15 05:23:54 1.60.2.1
@@ -2589,9 +2589,9 @@
static const struct memory_description weak_list_description[] = {
{ XD_LISP_OBJECT, offsetof (struct weak_list, list),
- 0, 0, XD_FLAG_NO_KKCC },
+ 0, { 0 }, XD_FLAG_NO_KKCC },
{ XD_LO_LINK, offsetof (struct weak_list, next_weak),
- 0, 0, XD_FLAG_NO_KKCC },
+ 0, { 0 }, XD_FLAG_NO_KKCC },
{ XD_END }
};
@@ -2733,13 +2733,13 @@
break;
default:
- abort ();
+ ABORT ();
}
if (need_to_mark_elem && ! marked_p (elem))
{
#ifdef USE_KKCC
- kkcc_gc_stack_push_lisp_object (elem);
+ kkcc_gc_stack_push_lisp_object (elem, 0, -1);
#else /* NOT USE_KKCC */
mark_object (elem);
#endif /* NOT USE_KKCC */
@@ -2767,7 +2767,7 @@
if (!NILP (rest2) && ! marked_p (rest2))
{
#ifdef USE_KKCC
- kkcc_gc_stack_push_lisp_object (rest2);
+ kkcc_gc_stack_push_lisp_object (rest2, 0, -1);
#else /* NOT USE_KKCC */
mark_object (rest2);
#endif /* NOT USE_KKCC */
@@ -2897,7 +2897,7 @@
case WEAK_LIST_VALUE_ASSOC: return Qvalue_assoc;
case WEAK_LIST_FULL_ASSOC: return Qfull_assoc;
default:
- abort ();
+ ABORT ();
}
return Qnil; /* not (usually) reached */
@@ -3148,7 +3148,7 @@
{
#ifdef USE_KKCC
kkcc_gc_stack_push_lisp_object
- (XCAR (XEPHEMERON (rest)->cons_chain));
+ (XCAR (XEPHEMERON (rest)->cons_chain), 0, -1);
#else /* NOT USE_KKCC */
mark_object (XCAR (XEPHEMERON (rest)->cons_chain));
#endif /* NOT USE_KKCC */
@@ -3198,7 +3198,7 @@
MARK_CONS (XCONS (XEPHEMERON (rest)->cons_chain));
#ifdef USE_KKCC
kkcc_gc_stack_push_lisp_object
- (XCAR (XEPHEMERON (rest)->cons_chain));
+ (XCAR (XEPHEMERON (rest)->cons_chain), 0, -1);
#else /* NOT USE_KKCC */
mark_object (XCAR (XEPHEMERON (rest)->cons_chain));
#endif /* NOT USE_KKCC */
@@ -3299,11 +3299,11 @@
is marked here. */
static const struct memory_description ephemeron_description[] = {
{ XD_LISP_OBJECT, offsetof(struct ephemeron, key),
- 0, 0, XD_FLAG_NO_KKCC },
+ 0, { 0 }, XD_FLAG_NO_KKCC },
{ XD_LISP_OBJECT, offsetof(struct ephemeron, cons_chain),
- 0, 0, XD_FLAG_NO_KKCC },
+ 0, { 0 }, XD_FLAG_NO_KKCC },
{ XD_LISP_OBJECT, offsetof(struct ephemeron, value),
- 0, 0, XD_FLAG_NO_KKCC },
+ 0, { 0 }, XD_FLAG_NO_KKCC },
{ XD_END }
};
1.30.2.1 +5 -5 XEmacs/xemacs/src/database.c
Index: database.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/database.c,v
retrieving revision 1.30
retrieving revision 1.30.2.1
diff -u -r1.30 -r1.30.2.1
--- database.c 2004/09/20 19:19:37 1.30
+++ database.c 2005/03/15 05:23:55 1.30.2.1
@@ -47,7 +47,7 @@
#ifdef HAVE_INTTYPES_H
#define __BIT_TYPES_DEFINED__
#include <inttypes.h>
-#ifndef __FreeBSD__
+#if !defined(__FreeBSD__) && !defined(__NetBSD__)
typedef uint8_t u_int8_t;
typedef uint16_t u_int16_t;
typedef uint32_t u_int32_t;
@@ -327,13 +327,13 @@
}
static Lisp_Object
-dbm_type (Lisp_Database *db)
+dbm_type (Lisp_Database *UNUSED (db))
{
return Qdbm;
}
static Lisp_Object
-dbm_subtype (Lisp_Database *db)
+dbm_subtype (Lisp_Database *UNUSED (db))
{
return Qnil;
}
@@ -510,9 +510,9 @@
status == 0;
status = dbp->seq (dbp, &keydatum, &valdatum, R_NEXT))
{
- key = make_ext_string (keydatum.data, keydatum.size,
+ key = make_ext_string ((const Extbyte *) keydatum.data, keydatum.size,
db->coding_system);
- val = make_ext_string (valdatum.data, valdatum.size,
+ val = make_ext_string ((const Extbyte *) valdatum.data, valdatum.size,
db->coding_system);
call2 (func, key, val);
}
1.5.2.1 +1 -1 XEmacs/xemacs/src/debug.h
Index: debug.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/debug.h,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -r1.5 -r1.5.2.1
--- debug.h 2003/01/12 11:08:10 1.5
+++ debug.h 2005/03/15 05:23:55 1.5.2.1
@@ -64,7 +64,7 @@
stderr_out ("Assertion failed in %s at line %d\n", \
__FILE__, __LINE__); \
else \
- abort (); \
+ ABORT (); \
} \
} \
} while (0)
1.51.2.2 +3 -3 XEmacs/xemacs/src/depend
Index: depend
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/depend,v
retrieving revision 1.51.2.1
retrieving revision 1.51.2.2
diff -u -r1.51.2.1 -r1.51.2.2
--- depend 2005/02/01 15:46:53 1.51.2.1
+++ depend 2005/03/15 05:23:55 1.51.2.2
@@ -145,7 +145,7 @@
extents.o: $(LISP_H) backtrace.h buffer.h bufslots.h casetab.h charset.h chartab.h
console.h debug.h device.h elhash.h extents-impl.h extents.h faces.h frame.h glyphs.h
gutter.h insdel.h keymap.h opaque.h process.h profile.h redisplay.h scrollbar.h
specifier.h window-impl.h window.h winslots.h
faces.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 elhash.h extents-impl.h
extents.h faces.h frame-impl.h frame.h frameslots.h glyphs.h objects-impl.h objects.h
redisplay.h scrollbar.h specifier.h window-impl.h window.h winslots.h
file-coding.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h
coding-system-slots.h elhash.h file-coding.h insdel.h lstream.h opaque.h
-fileio.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h
coding-system-slots.h console.h device.h events.h file-coding.h frame.h insdel.h
intl-auto-encap-win32.h lstream.h ndir.h process.h redisplay.h scrollbar.h sysdep.h
sysdir.h sysfile.h sysproc.h syspwd.h syssignal.h systime.h syswindows.h window-impl.h
window.h winslots.h
+fileio.o: $(LISP_H) backtrace.h buffer.h bufslots.h casetab.h charset.h chartab.h
coding-system-slots.h console.h device.h events.h file-coding.h frame.h insdel.h
intl-auto-encap-win32.h lstream.h ndir.h process.h profile.h redisplay.h scrollbar.h
sysdep.h sysdir.h sysfile.h sysproc.h syspwd.h syssignal.h systime.h syswindows.h
window-impl.h window.h winslots.h
filelock.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h ndir.h paths.h
sysdir.h sysfile.h sysproc.h syspwd.h syssignal.h systime.h
filemode.o: $(LISP_H) sysfile.h
floatfns.o: $(LISP_H) sysfloat.h syssignal.h
@@ -209,7 +209,7 @@
profile.o: $(LISP_H) backtrace.h bytecode.h elhash.h hash.h profile.h syssignal.h
systime.h
ralloc.o: $(LISP_H) getpagesize.h
rangetab.o: $(LISP_H) rangetab.h
-realpath.o: $(LISP_H) intl-auto-encap-win32.h ndir.h sysdir.h sysfile.h syswindows.h
+realpath.o: $(LISP_H) backtrace.h intl-auto-encap-win32.h ndir.h profile.h sysdir.h
sysfile.h syswindows.h
redisplay-output.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 faces.h frame-impl.h
frame.h frameslots.h glyphs.h gutter.h redisplay.h scrollbar.h specifier.h window-impl.h
window.h winslots.h
redisplay.o: $(LISP_H) backtrace.h buffer.h bufslots.h casetab.h charset.h chartab.h
coding-system-slots.h commands.h conslots.h console-impl.h console-tty.h console.h debug.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.h gui.h gutter.h insdel.h
line-number.h menubar.h objects-impl.h objects.h opaque.h process.h profile.h redisplay.h
scrollbar.h specifier.h sysfile.h systime.h systty.h toolbar.h window-impl.h window.h
winslots.h
regex.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h regex.h syntax.h
@@ -263,7 +263,7 @@
unicode.o: $(LISP_H) charset.h coding-system-slots.h file-coding.h opaque.h sysfile.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) buffer.h bufslots.h casetab.h charset.h chartab.h console-msw.h
console.h intl-auto-encap-win32.h sysfile.h sysproc.h syssignal.h systime.h syswindows.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 objects-impl.h
objects-x-impl.h objects-x.h objects.h specifier.h xft-fonts.h xintrinsic.h
xmu.o: $(CONFIG_H)
1.54.2.2 +1 -1 XEmacs/xemacs/src/device-msw.c
Index: device-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/device-msw.c,v
retrieving revision 1.54.2.1
retrieving revision 1.54.2.2
diff -u -r1.54.2.1 -r1.54.2.2
--- device-msw.c 2004/12/11 05:15:53 1.54.2.1
+++ device-msw.c 2005/03/15 05:23:57 1.54.2.2
@@ -848,7 +848,7 @@
if (EQ (prop, Qright_margin)) return 1440;
if (EQ (prop, Qtop_margin)) return 720;
if (EQ (prop, Qbottom_margin)) return 720;
- abort ();
+ ABORT ();
return 0;
}
1.17.2.1 +1 -1 XEmacs/xemacs/src/device-tty.c
Index: device-tty.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/device-tty.c,v
retrieving revision 1.17
retrieving revision 1.17.2.1
diff -u -r1.17 -r1.17.2.1
--- device-tty.c 2004/09/20 19:19:37 1.17
+++ device-tty.c 2005/03/15 05:23:57 1.17.2.1
@@ -87,7 +87,7 @@
case TTY_INIT_SUCCESS:
break;
default:
- abort ();
+ ABORT ();
}
init_one_device (d);
1.59.2.1 +7 -6 XEmacs/xemacs/src/device-x.c
Index: device-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/device-x.c,v
retrieving revision 1.59
retrieving revision 1.59.2.1
diff -u -r1.59 -r1.59.2.1
--- device-x.c 2004/11/04 23:06:20 1.59
+++ device-x.c 2005/03/15 05:23:57 1.59.2.1
@@ -157,7 +157,7 @@
(STRINGP (Vinvocation_name) ?
(char *) XSTRING_DATA (Vinvocation_name) : FALLBACK_RESOURCE_NAME),
DisplayString (dpy) ? DisplayString (dpy) : "???");
- abort();
+ ABORT();
}
#undef FALLBACK_RESOURCE_NAME
@@ -456,7 +456,7 @@
vi_in.visualid = XVisualIDFromVisual (visual);
vi_out = XGetVisualInfo (dpy, /*VisualScreenMask|*/VisualIDMask,
&vi_in, &out_count);
- if (! vi_out) abort ();
+ if (! vi_out) ABORT ();
d = vi_out [0].depth;
XFree ((char *) vi_out);
return d;
@@ -1238,16 +1238,17 @@
char *fake_class, char *name, char *class_)
{
char *stack [100][2];
- Widget this;
+ Widget this_widget;
int count = 0;
char *name_tail, *class_tail;
if (widget)
{
- for (this = widget; this; this = XtParent (this))
+ for (this_widget = widget; this_widget;
+ this_widget = XtParent (this_widget))
{
- stack [count][0] = this->core.name;
- stack [count][1] = XtClass (this)->core_class.class_name;
+ stack [count][0] = this_widget->core.name;
+ stack [count][1] = XtClass (this_widget)->core_class.class_name;
count++;
}
count--;
1.32.2.1 +6 -6 XEmacs/xemacs/src/device.c
Index: device.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/device.c,v
retrieving revision 1.32
retrieving revision 1.32.2.1
diff -u -r1.32 -r1.32.2.1
--- device.c 2004/11/04 23:06:20 1.32
+++ device.c 2005/03/15 05:23:58 1.32.2.1
@@ -93,14 +93,14 @@
static const struct memory_description device_data_description_1 []= {
#ifdef HAVE_GTK
- { XD_BLOCK_PTR, gtk_console, 1, >k_device_data_description},
+ { XD_BLOCK_PTR, gtk_console, 1, { >k_device_data_description} },
#endif
#ifdef HAVE_MS_WINDOWS
- { XD_BLOCK_PTR, mswindows_console, 1, &mswindows_device_data_description},
- { XD_BLOCK_PTR, msprinter_console, 1, &msprinter_device_data_description},
+ { XD_BLOCK_PTR, mswindows_console, 1, { &mswindows_device_data_description} },
+ { XD_BLOCK_PTR, msprinter_console, 1, { &msprinter_device_data_description} },
#endif
#ifdef HAVE_X_WINDOWS
- { XD_BLOCK_PTR, x_console, 1, &x_device_data_description},
+ { XD_BLOCK_PTR, x_console, 1, { &x_device_data_description} },
#endif
{ XD_END }
};
@@ -115,9 +115,9 @@
#include "devslots.h"
{ XD_BLOCK_PTR, offsetof (struct device, devmeths), 1,
- &console_methods_description },
+ { &console_methods_description } },
{ XD_UNION, offsetof (struct device, device_data),
- XD_INDIRECT (0, 0), &device_data_description },
+ XD_INDIRECT (0, 0), { &device_data_description } },
{ XD_END }
};
1.17.2.2 +7 -2 XEmacs/xemacs/src/dired-msw.c
Index: dired-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/dired-msw.c,v
retrieving revision 1.17.2.1
retrieving revision 1.17.2.2
diff -u -r1.17.2.1 -r1.17.2.2
--- dired-msw.c 2004/12/11 05:15:55 1.17.2.1
+++ dired-msw.c 2005/03/15 05:23:58 1.17.2.2
@@ -192,7 +192,7 @@
int findex;
DECLARE_EISTRING (win32pattern);
HANDLE fh;
- int errm;
+ int errm;
while (1)
{
@@ -206,8 +206,13 @@
/* Now *bufp is the compiled form of PATTERN; don't call anything
which might compile a new regexp until we're done with the loop! */
+ {
+ Ibyte *dir2;
+ LISP_PATHNAME_RESOLVE_LINKS (dirfile, dir2);
+ eicpy_rawz (win32pattern, dir2);
+ }
+
/* for Win32, we need to insure that the pathname ends with "\*". */
- eicpy_lstr (win32pattern, dirfile);
if (!nowild)
{
Charcount len = eicharlen (win32pattern) - 1;
1.29.2.1 +2 -2 XEmacs/xemacs/src/doprnt.c
Index: doprnt.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/doprnt.c,v
retrieving revision 1.29
retrieving revision 1.29.2.1
diff -u -r1.29 -r1.29.2.1
--- doprnt.c 2004/11/04 23:06:21 1.29
+++ doprnt.c 2005/03/15 05:23:58 1.29.2.1
@@ -239,7 +239,7 @@
case ' ': spec.space_flag = 1; break;
case '#': spec.number_flag = 1; break;
case '0': spec.zero_flag = 1; break;
- default: abort ();
+ default: ABORT ();
}
NEXT_ASCII_BYTE (ch);
}
@@ -408,7 +408,7 @@
else if (strchr (bigfloat_converters, ch))
arg.obj = va_arg (vargs, Lisp_Object);
#endif
- else abort ();
+ else ABORT ();
Dynarr_add (args, arg);
}
1.20.2.2 +274 -13 XEmacs/xemacs/src/dumper.c
Index: dumper.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/dumper.c,v
retrieving revision 1.20.2.1
retrieving revision 1.20.2.2
diff -u -r1.20.2.1 -r1.20.2.2
--- dumper.c 2004/12/11 05:15:56 1.20.2.1
+++ dumper.c 2005/03/15 05:23:59 1.20.2.2
@@ -1,7 +1,7 @@
/* Portable data dumper for XEmacs.
- Copyright (C) 1999-2000 Olivier Galibert
+ Copyright (C) 1999-2000,2004 Olivier Galibert
Copyright (C) 2001 Martin Buchholz
- Copyright (C) 2001, 2002, 2003, 2004 Ben Wing.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005 Ben Wing.
This file is part of XEmacs.
@@ -78,6 +78,57 @@
typedef struct
{
+ const void *object;
+ void *data;
+ Bytecount size;
+ EMACS_INT offset;
+ EMACS_INT dest_offset;
+ EMACS_INT save_offset;
+ const struct opaque_convert_functions *fcts;
+} pdump_cv_data_info;
+
+typedef struct
+{
+ Dynarr_declare (pdump_cv_data_info);
+} pdump_cv_data_info_dynarr;
+
+typedef struct
+{
+ EMACS_INT dest_offset;
+ EMACS_INT save_offset;
+ Bytecount size;
+} pdump_cv_data_dump_info;
+
+typedef struct
+{
+ const void *object;
+ void *data;
+ Bytecount size;
+ EMACS_INT index;
+ EMACS_INT save_offset;
+ const struct opaque_convert_functions *fcts;
+} pdump_cv_ptr_info;
+
+typedef struct
+{
+ Dynarr_declare (pdump_cv_ptr_info);
+} pdump_cv_ptr_info_dynarr;
+
+typedef struct
+{
+ EMACS_INT save_offset;
+ Bytecount size;
+} pdump_cv_ptr_dump_info;
+
+typedef struct
+{
+ EMACS_INT save_offset;
+ Bytecount size;
+ void *adr;
+} pdump_cv_ptr_load_info;
+
+typedef struct
+{
Lisp_Object *address;
Lisp_Object value;
} pdump_static_Lisp_Object;
@@ -92,6 +143,8 @@
static pdump_root_block_ptr_dynarr *pdump_root_block_ptrs;
static Lisp_Object_ptr_dynarr *pdump_root_lisp_objects;
static Lisp_Object_ptr_dynarr *pdump_weak_object_chains;
+static pdump_cv_data_info_dynarr *pdump_cv_data;
+static pdump_cv_ptr_info_dynarr *pdump_cv_ptr;
/* Mark SIZE bytes at non-heap address BLOCKADDR for dumping, described
by DESC. Called by outside callers during XEmacs initialization. */
@@ -210,7 +263,10 @@
/* The structure of the dump file looks like this:
0 - header
- dumped objects
- stab_offset - nb_root_block_ptrs*struct(void *, adr)
+ stab_offset - nb_cv_data*struct(dest, adr) for in-object externally
+ represented data
+ - nb_cv_ptr*(adr) for pointed-to externally represented data
+ - nb_root_block_ptrs*struct(void *, adr)
for global pointers to heap blocks
- nb_root_blocks*struct(void *, size, info) for global
data-segment blocks to restore
@@ -231,12 +287,17 @@
EMACS_UINT reloc_address;
int nb_root_block_ptrs;
int nb_root_blocks;
+ int nb_cv_data;
+ int nb_cv_ptr;
} pdump_header;
Rawbyte *pdump_start;
Rawbyte *pdump_end;
static Bytecount pdump_length;
+static pdump_cv_data_dump_info *pdump_loaded_cv_data;
+static pdump_cv_ptr_load_info *pdump_loaded_cv_ptr;
+
#ifdef WIN32_NATIVE
/* Handle for the dump file */
static HANDLE pdump_hFile = INVALID_HANDLE_VALUE;
@@ -449,6 +510,16 @@
return &pdump_desc_table.list[pdump_desc_table.count++].list;
}
+static pdump_cv_ptr_info *
+pdump_find_in_cv_ptr_dynarr(const void *object)
+{
+ int i;
+ for (i = 0; i < Dynarr_length (pdump_cv_ptr); i++)
+ if (Dynarr_at (pdump_cv_ptr, i).object == object)
+ return Dynarr_atp (pdump_cv_ptr, i);
+ return 0;
+}
+
static struct
{
struct lrecord_header *obj;
@@ -490,7 +561,7 @@
#endif
if (do_backtrace)
pdump_backtrace ();
- abort ();
+ ABORT ();
}
static void
@@ -500,7 +571,7 @@
if (me > 65536)
{
stderr_out ("Backtrace overflow, loop ?\n");
- abort ();
+ ABORT ();
}
backtrace[me].obj = 0;
backtrace[me].position = 0;
@@ -608,7 +679,7 @@
EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc,
data);
const struct sized_memory_description *sdesc =
- lispdesc_indirect_description (data, desc1->data2);
+ lispdesc_indirect_description (data, desc1->data2.descr);
const Rawbyte *dobj = *(const Rawbyte **)rdata;
if (dobj)
pdump_register_block (dobj, sdesc->size, sdesc->description,
@@ -620,7 +691,7 @@
EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc,
data);
const struct sized_memory_description *sdesc =
- lispdesc_indirect_description (data, desc1->data2);
+ lispdesc_indirect_description (data, desc1->data2.descr);
pdump_register_block_contents (rdata, sdesc->size,
sdesc->description, count);
@@ -632,6 +703,29 @@
if (desc1)
goto union_switcheroo;
break;
+ case XD_OPAQUE_PTR_CONVERTIBLE:
+ {
+ pdump_cv_ptr_info info;
+ info.object = *(void **)rdata;
+ info.fcts = desc1->data2.funcs;
+ if (!pdump_find_in_cv_ptr_dynarr (info.object))
+ {
+ info.fcts->convert(info.object, &info.data, &info.size);
+ Dynarr_add (pdump_cv_ptr, info);
+ }
+ break;
+ }
+ case XD_OPAQUE_DATA_CONVERTIBLE:
+ {
+ pdump_cv_data_info info;
+ info.object = data;
+ info.offset = offset;
+ info.fcts = desc1->data2.funcs;
+
+ info.fcts->convert(rdata, &info.data, &info.size);
+ Dynarr_add (pdump_cv_data, info);
+ break;
+ }
default:
pdump_unsupported_dump_type (desc1->type, 1);
@@ -726,6 +820,7 @@
}
}
+
/* Store the already-calculated new pointer offsets for all pointers in the
COUNT contiguous blocks of memory, each described by DESC and of size
SIZE, whose original is located at ORIG_DATA and the modifiable copy at
@@ -876,7 +971,7 @@
EMACS_INT num = lispdesc_indirect_count (desc1->data1, desc,
orig_data);
const struct sized_memory_description *sdesc =
- lispdesc_indirect_description (orig_data, desc1->data2);
+ lispdesc_indirect_description (orig_data, desc1->data2.descr);
pdump_store_new_pointer_offsets
(num, rdata,
@@ -895,6 +990,14 @@
goto union_switcheroo;
break;
+ case XD_OPAQUE_PTR_CONVERTIBLE:
+ *(EMACS_INT *)rdata = pdump_find_in_cv_ptr_dynarr (*(void **)rdata)->index;
+ break;
+
+ case XD_OPAQUE_DATA_CONVERTIBLE:
+ /* in-object, nothing to do */
+ break;
+
default:
pdump_unsupported_dump_type (desc1->type, 0);
}
@@ -1015,7 +1118,7 @@
data);
int j;
const struct sized_memory_description *sdesc =
- lispdesc_indirect_description (data, desc1->data2);
+ lispdesc_indirect_description (data, desc1->data2.descr);
Bytecount size = lispdesc_block_size (rdata, sdesc);
/* Note: We are recursing over data in the block itself */
@@ -1032,6 +1135,28 @@
goto union_switcheroo;
break;
+ case XD_OPAQUE_PTR_CONVERTIBLE:
+ {
+ pdump_cv_ptr_load_info *p = pdump_loaded_cv_ptr + *(EMACS_INT *)rdata;
+ if (!p->adr)
+ p->adr = desc1->data2.funcs->deconvert(0, pdump_start +
+ p->save_offset, p->size);
+ *(void **)rdata = p->adr;
+ break;
+ }
+
+ case XD_OPAQUE_DATA_CONVERTIBLE:
+ {
+ EMACS_INT dest_offset = (Rawbyte *)rdata - pdump_start;
+ pdump_cv_data_dump_info *p;
+
+ for(p = pdump_loaded_cv_data; p->dest_offset != dest_offset; p++);
+
+ desc1->data2.funcs->deconvert(rdata, pdump_start + p->save_offset,
+ p->size);
+ break;
+ }
+
default:
pdump_unsupported_dump_type (desc1->type, 0);
}
@@ -1049,6 +1174,39 @@
cur_offset += size;
}
+/* Write out to global file descriptor PDUMP_OUT the result of an
+ external element. It's just opaque data. */
+
+static void
+pdump_dump_cv_data (pdump_cv_data_info *elt)
+{
+ retry_fwrite (elt->data, elt->size, 1, pdump_out);
+}
+
+static void
+pdump_dump_cv_ptr (pdump_cv_ptr_info *elt)
+{
+ retry_fwrite (elt->data, elt->size, 1, pdump_out);
+}
+
+static void
+pdump_allocate_offset_cv_data (pdump_cv_data_info *elt)
+{
+ elt->save_offset = cur_offset;
+ if (elt->size>max_size)
+ max_size = elt->size;
+ cur_offset += elt->size;
+}
+
+static void
+pdump_allocate_offset_cv_ptr (pdump_cv_ptr_info *elt)
+{
+ elt->save_offset = cur_offset;
+ if (elt->size>max_size)
+ max_size = elt->size;
+ cur_offset += elt->size;
+}
+
/* Traverse through all the heap blocks, once the "register" stage of
dumping has finished. To compress space as much as possible, we
logically sort all blocks by alignment, hitting all blocks with
@@ -1081,7 +1239,9 @@
static void
pdump_scan_by_alignment (void (*f)(pdump_block_list_elt *,
- const struct memory_description *))
+ const struct memory_description *),
+ void (*g)(pdump_cv_data_info *),
+ void (*h)(pdump_cv_ptr_info *))
{
int align;
@@ -1106,9 +1266,55 @@
for (elt = pdump_opaque_data_list.first; elt; elt = elt->next)
if (pdump_size_to_align (elt->size) == align)
f (elt, 0);
+
+ for (i=0; i < Dynarr_length (pdump_cv_data); i++)
+ if (pdump_size_to_align (Dynarr_atp (pdump_cv_data, i)->size) == align)
+ g (Dynarr_atp (pdump_cv_data, i));
+
+ for (i=0; i < Dynarr_length (pdump_cv_ptr); i++)
+ if (pdump_size_to_align (Dynarr_atp (pdump_cv_ptr, i)->size) == align)
+ h (Dynarr_atp (pdump_cv_ptr, i));
}
}
+static void
+pdump_dump_cv_data_info (void)
+{
+ int i;
+ Elemcount count = Dynarr_length (pdump_cv_data);
+ pdump_cv_data_dump_info *data = alloca_array (pdump_cv_data_dump_info, count);
+ for (i = 0; i < count; i++)
+ {
+ data[i].dest_offset = Dynarr_at (pdump_cv_data, i).dest_offset;
+ data[i].save_offset = Dynarr_at (pdump_cv_data, i).save_offset;
+ data[i].size = Dynarr_at (pdump_cv_data, i).size;
+ }
+
+ PDUMP_ALIGN_OUTPUT (pdump_cv_data_dump_info);
+ 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)
+{
+ int i;
+ Elemcount count = Dynarr_length (pdump_cv_ptr);
+ pdump_cv_ptr_dump_info *data = alloca_array (pdump_cv_ptr_dump_info, count);
+ for (i = 0; i < count; i++)
+ {
+ data[i].save_offset = Dynarr_at (pdump_cv_ptr, i).save_offset;
+ data[i].size = Dynarr_at (pdump_cv_ptr, i).size;
+ }
+
+ PDUMP_ALIGN_OUTPUT (pdump_cv_ptr_dump_info);
+ 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
@@ -1436,6 +1642,9 @@
pdump_opaque_data_list.count = 0;
pdump_depth = 0;
+ pdump_cv_data = Dynarr_new2 (pdump_cv_data_info_dynarr, pdump_cv_data_info);
+ pdump_cv_ptr = Dynarr_new2 (pdump_cv_ptr_info_dynarr, pdump_cv_ptr_info);
+
/* (I) The "register" stage: Note all heap memory blocks to be relocated
*/
@@ -1495,13 +1704,17 @@
header.reloc_address = 0;
header.nb_root_block_ptrs = Dynarr_length (pdump_root_block_ptrs);
header.nb_root_blocks = Dynarr_length (pdump_root_blocks);
+ header.nb_cv_data = Dynarr_length (pdump_cv_data);
+ header.nb_cv_ptr = Dynarr_length (pdump_cv_ptr);
cur_offset = MAX_ALIGN_SIZE (sizeof (header));
max_size = 0;
/* (2) Traverse all heap blocks and compute their offsets; keep track
of maximum block size seen */
- pdump_scan_by_alignment (pdump_allocate_offset);
+ pdump_scan_by_alignment (pdump_allocate_offset,
+ pdump_allocate_offset_cv_data,
+ pdump_allocate_offset_cv_ptr);
cur_offset = MAX_ALIGN_SIZE (cur_offset);
header.stab_offset = cur_offset;
@@ -1536,11 +1749,37 @@
retry_fwrite (&header, sizeof (header), 1, pdump_out);
PDUMP_ALIGN_OUTPUT (max_align_t);
+
+ for (i = 0; i < Dynarr_length (pdump_cv_data); i++)
+ {
+ pdump_cv_data_info *elt = Dynarr_atp (pdump_cv_data, i);
+ elt->dest_offset =
+ pdump_get_block (elt->object)->save_offset + elt->offset;
+ }
+
+ for (i = 0; i < Dynarr_length (pdump_cv_ptr); i++)
+ Dynarr_at (pdump_cv_ptr, i).index = i;
+
+ pdump_scan_by_alignment (pdump_dump_data, pdump_dump_cv_data, pdump_dump_cv_ptr);
- pdump_scan_by_alignment (pdump_dump_data);
+ for (i = 0; i < Dynarr_length (pdump_cv_data); i++)
+ {
+ pdump_cv_data_info *elt = Dynarr_atp (pdump_cv_data, i);
+ if(elt->fcts->convert_free)
+ elt->fcts->convert_free(elt->object, elt->data, elt->size);
+ }
+ for (i = 0; i < Dynarr_length (pdump_cv_ptr); i++)
+ {
+ pdump_cv_ptr_info *elt = Dynarr_atp (pdump_cv_ptr, i);
+ if(elt->fcts->convert_free)
+ elt->fcts->convert_free(elt->object, elt->data, elt->size);
+ }
+
fseek (pdump_out, header.stab_offset, SEEK_SET);
+ pdump_dump_cv_data_info ();
+ pdump_dump_cv_ptr_info ();
pdump_dump_root_block_ptrs ();
pdump_dump_root_blocks ();
pdump_dump_rtables ();
@@ -1584,6 +1823,23 @@
delta = ((EMACS_INT) pdump_start) - header->reloc_address;
p = pdump_start + header->stab_offset;
+ /* Get the cv_data array */
+ p = (Rawbyte *) ALIGN_PTR (p, pdump_cv_data_dump_info);
+ pdump_loaded_cv_data = (pdump_cv_data_dump_info *)p;
+ p += header->nb_cv_data*sizeof(pdump_cv_data_dump_info);
+
+ /* Build the cv_ptr array */
+ p = (Rawbyte *) ALIGN_PTR (p, pdump_cv_ptr_dump_info);
+ pdump_loaded_cv_ptr =
+ alloca_array (pdump_cv_ptr_load_info, header->nb_cv_ptr);
+ for (i = 0; i < header->nb_cv_ptr; i++)
+ {
+ pdump_cv_ptr_dump_info info = PDUMP_READ (p, pdump_cv_ptr_dump_info);
+ pdump_loaded_cv_ptr[i].save_offset = info.save_offset;
+ pdump_loaded_cv_ptr[i].size = info.size;
+ pdump_loaded_cv_ptr[i].adr = 0;
+ }
+
/* Put back the pdump_root_block_ptrs */
p = (Rawbyte *) ALIGN_PTR (p, pdump_static_pointer);
for (i = 0; i < header->nb_root_block_ptrs; i++)
@@ -1833,6 +2089,10 @@
{
Wexttext *w = exe_path + wext_strlen (exe_path);
+ /* We look for various names, including those with the version and dump ID,
+ those with just the dump ID, and those without either. We first try
+ adding directly to the executable name, then lopping off any extension
+ (e.g. .exe) or version name in the executable (xemacs-21.5.18). */
do
{
wext_sprintf (w, WEXTSTRING ("-%s-%08x.dmp"), WEXTSTRING
(EMACS_VERSION),
@@ -1877,6 +2137,7 @@
Wexttext *exe_path = NULL;
int bufsize = 4096;
int cchpathsize;
+#define DUMP_SLACK 100 /* Enough to include dump ID, version name, .DMP */
/* Copied from mswindows_get_module_file_name (). Not clear if it's
kosher to malloc() yet. */
@@ -1887,7 +2148,7 @@
bufsize);
if (!cchpathsize)
goto fail;
- if (cchpathsize + 1 <= bufsize)
+ if (cchpathsize + DUMP_SLACK <= bufsize)
break;
bufsize *= 2;
}
1.11.2.1 +1 -1 XEmacs/xemacs/src/dynarr.c
Index: dynarr.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/dynarr.c,v
retrieving revision 1.11
retrieving revision 1.11.2.1
diff -u -r1.11 -r1.11.2.1
--- dynarr.c 2004/11/04 23:06:23 1.11
+++ dynarr.c 2005/03/15 05:23:59 1.11.2.1
@@ -335,6 +335,6 @@
return;
}
- abort ();
+ ABORT ();
}
}
1.37.2.2 +13 -13 XEmacs/xemacs/src/elhash.c
Index: elhash.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/elhash.c,v
retrieving revision 1.37.2.1
retrieving revision 1.37.2.2
diff -u -r1.37.2.1 -r1.37.2.2
--- elhash.c 2004/12/11 05:15:59 1.37.2.1
+++ elhash.c 2005/03/15 05:23:59 1.37.2.2
@@ -374,7 +374,7 @@
else if (ht->test_function == lisp_object_eql_equal)
DO_NOTHING;
else
- abort ();
+ ABORT ();
if (ht->count || !print_readably)
{
@@ -452,8 +452,8 @@
/* Note: XD_INDIRECT in this table refers to the surrounding table,
and so this will work. */
{ XD_BLOCK_PTR, HASH_TABLE_NON_WEAK, XD_INDIRECT (0, 1),
- &htentry_description },
- { XD_BLOCK_PTR, 0, XD_INDIRECT (0, 1), &htentry_description,
+ { &htentry_description } },
+ { XD_BLOCK_PTR, 0, XD_INDIRECT (0, 1), { &htentry_description },
XD_FLAG_UNION_DEFAULT_ENTRY | XD_FLAG_NO_KKCC },
{ XD_END }
};
@@ -467,7 +467,7 @@
{ XD_ELEMCOUNT, offsetof (Lisp_Hash_Table, size) },
{ XD_INT, offsetof (Lisp_Hash_Table, weakness) },
{ XD_UNION, offsetof (Lisp_Hash_Table, hentries), XD_INDIRECT (1, 0),
- &htentry_union_description },
+ { &htentry_union_description } },
{ XD_LO_LINK, offsetof (Lisp_Hash_Table, next_weak) },
{ XD_END }
};
@@ -533,7 +533,7 @@
break;
default:
- abort ();
+ ABORT ();
}
return make_general_lisp_hash_table (hash_function, test_function,
@@ -798,7 +798,7 @@
else if (EQ (key, Qdata)) data = value;
else if (EQ (key, Qtype))/*obsolete*/ weakness = value;
else
- abort ();
+ ABORT ();
}
/* Create the hash table. */
@@ -1460,13 +1460,13 @@
/* garbage collecting weak hash tables */
/************************************************************************/
#ifdef USE_KKCC
-#define MARK_OBJ(obj) do { \
- Lisp_Object mo_obj = (obj); \
- if (!marked_p (mo_obj)) \
- { \
- kkcc_gc_stack_push_lisp_object (mo_obj); \
- did_mark = 1; \
- } \
+#define MARK_OBJ(obj) do { \
+ Lisp_Object mo_obj = (obj); \
+ if (!marked_p (mo_obj)) \
+ { \
+ kkcc_gc_stack_push_lisp_object (mo_obj, 0, -1); \
+ did_mark = 1; \
+ } \
} while (0)
#else /* NO USE_KKCC */
1.13.2.2 +1 -1 XEmacs/xemacs/src/elhash.h
Index: elhash.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/elhash.h,v
retrieving revision 1.13.2.1
retrieving revision 1.13.2.2
diff -u -r1.13.2.1 -r1.13.2.2
--- elhash.h 2004/12/11 05:16:01 1.13.2.1
+++ elhash.h 2005/03/15 05:24:00 1.13.2.2
@@ -62,7 +62,7 @@
EXFUN (Fclrhash, 1);
typedef int (*hash_table_test_function_t) (Lisp_Object obj1, Lisp_Object obj2);
-typedef unsigned long (*hash_table_hash_function_t) (Lisp_Object obj);
+typedef Hashcode (*hash_table_hash_function_t) (Lisp_Object obj);
typedef int (*maphash_function_t) (Lisp_Object key, Lisp_Object value,
void* extra_arg);
1.8.2.1 +1 -30 XEmacs/xemacs/src/emacs-marshals.c
Index: emacs-marshals.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/emacs-marshals.c,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -u -r1.8 -r1.8.2.1
--- emacs-marshals.c 2004/05/02 04:06:58 1.8
+++ emacs-marshals.c 2005/03/15 05:24:00 1.8.2.1
@@ -1466,35 +1466,6 @@
#include "hash.h"
-static int
-our_string_eq (const void *st1, const void *st2)
-{
- if (!st1)
- return st2 ? 0 : 1;
- else if (!st2)
- return 0;
- else
- return !strcmp ( (const char *) st1, (const char *) st2);
-}
-
-static unsigned long
-our_string_hash (const void *xv)
-{
- unsigned int h = 0;
- unsigned const char *x = (unsigned const char *) xv;
-
- if (!x) return 0;
-
- while (*x)
- {
- unsigned int g;
- h = (h << 4) + *x++;
- if ((g = h & 0xf0000000) != 0)
- h = (h ^ (g >> 24)) ^ g;
- }
-
- return h;
-}
static struct hash_table *marshaller_hashtable;
@@ -1502,7 +1473,7 @@
{
if (!marshaller_hashtable)
{
- marshaller_hashtable = make_general_hash_table (100, our_string_hash,
our_string_eq);
+ marshaller_hashtable = make_string_hash_table (100);
puthash ("emacs_gtk_marshal_BOOL__OBJECT_INT", (void *)
emacs_gtk_marshal_BOOL__OBJECT_INT, marshaller_hashtable);
puthash ("emacs_gtk_marshal_BOOL__OBJECT_OBJECT_OBJECT", (void *)
emacs_gtk_marshal_BOOL__OBJECT_OBJECT_OBJECT, marshaller_hashtable);
puthash ("emacs_gtk_marshal_BOOL__OBJECT_OBJECT", (void *)
emacs_gtk_marshal_BOOL__OBJECT_OBJECT, marshaller_hashtable);
1.150.2.4 +149 -105 XEmacs/xemacs/src/emacs.c
Index: emacs.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/emacs.c,v
retrieving revision 1.150.2.3
retrieving revision 1.150.2.4
diff -u -r1.150.2.3 -r1.150.2.4
--- emacs.c 2005/02/22 10:17:38 1.150.2.3
+++ emacs.c 2005/03/15 05:24:00 1.150.2.4
@@ -36,103 +36,141 @@
-- A time line for Lucid Emacs/XEmacs is
-version 19.0 shipped with Energize 1.0, April 1992.
-version 19.1 released June 4, 1992.
-version 19.2 released June 19, 1992.
-version 19.3 released September 9, 1992.
-version 19.4 released January 21, 1993.
-version 19.5 was a repackaging of 19.4 with a few bug fixes and
- shipped with Energize 2.0. Never released to the net.
-version 19.6 released April 9, 1993.
-version 19.7 was a repackaging of 19.6 with a few bug fixes and
+Version 19.0 shipped with Energize 1.0, April 1992.
+Version 19.1 released June 4, 1992.
+Version 19.2 released June 19, 1992.
+Version 19.3 released September 9, 1992.
+Version 19.4 released January 21, 1993.
+Version 19.5 released February 5, 1993. This was a repackaging of 19.4 with a
+ few bug fixes and shipped with Energize 2.0. It was a trade-show giveaway
+ and never released to the net.
+Version 19.6 released April 9, 1993.
+Version 19.7 was a repackaging of 19.6 with a few bug fixes and
shipped with Energize 2.1. Never released to the net.
-version 19.8 released September 6, 1993.
-version 19.9 released January 12, 1994.
-version 19.10 released May 27, 1994.
-version 19.11 (first XEmacs) released September 13, 1994.
-version 19.12 released June 23, 1995.
-version 19.13 released September 1, 1995.
-version 19.14 released June 23, 1996.
-version 20.0 released February 9, 1997.
-version 19.15 released March 28, 1997.
-version 20.1 (not released to the net) April 15, 1997.
-version 20.2 released May 16, 1997.
-version 19.16 released October 31, 1997.
-version 20.3 (the first stable version of XEmacs 20.x) released November 30,
-1997.
-version 20.4 released February 28, 1998.
-version 21.0.60 released December 10, 1998. (The version naming scheme was
-changed at this point: [a] the second version number is odd for stable
-versions, even for beta versions; [b] a third version number is added,
-replacing the "beta xxx" ending for beta versions and allowing for
-periodic maintenance releases for stable versions. Therefore, 21.0 was
-never "officially" released; similarly for 21.2, etc.)
-version 21.0.61 released January 4, 1999.
-version 21.0.63 released February 3, 1999.
-version 21.0.64 released March 1, 1999.
-version 21.0.65 released March 5, 1999.
-version 21.0.66 released March 12, 1999.
-version 21.0.67 released March 25, 1999.
-version 21.1.2 released May 14, 1999; on comp.emacs, May 28. (This is
+Version 19.8 released September 6, 1993. (Epoch merger, preliminary I18N
+ support)
+Version 19.9 released January 12, 1994. (Scrollbars, Athena.)
+Version 19.10 released May 27, 1994. Known as "Lucid Emacs" when
+ shipped by Lucid, and as "XEmacs" when shipped by Sun; but Lucid
+ went out of business a few days later and it's unclear very many
+ copies of 19.10 were released by Lucid. (Last release by Jamie Zawinski.)
+Version 19.11 (first XEmacs) released September 13, 1994.
+Version 19.12 released June 23, 1995.
+Version 19.13 released September 1, 1995.
+Version 19.14 released June 23, 1996.
+Version 20.0 released February 9, 1997.
+Version 19.15 released March 28, 1997.
+Version 20.1 (not released to the net) April 15, 1997.
+Version 20.2 released May 16, 1997.
+Version 19.16 released October 31, 1997; retiring of v19 series.
+Version 20.3 (the first stable version of XEmacs 20.x) released November 30,
+ 1997.
+Version 20.4 released February 28, 1998. (Jamie claims this version is the
+ "first reasonably stable release with MULE support" and says that
"XEmacs
+ 'core' and 'packages' now packaged separately.")
+Version 21.0-pre5 released July 18, 1998. (Jamie says "Numbering scheme goes
+ wonky due to switch to stable + unstable branches.")
+Version 21.0.60 released December 10, 1998. (The version naming scheme was
+ changed at this point: [a] the second version number is odd for stable
+ versions, even for beta versions; [b] a third version number is added,
+ replacing the "beta xxx" ending for beta versions and allowing for
+ periodic maintenance releases for stable versions. Therefore, 21.0 was
+ never "officially" released; similarly for 21.2, etc.)
+Version 21.0.61 released January 4, 1999.
+Version 21.0.63 released February 3, 1999.
+Version 21.0.64 released March 1, 1999.
+Version 21.0.65 released March 5, 1999.
+Version 21.0.66 released March 12, 1999.
+Version 21.0.67 released March 25, 1999.
+Version 21.1.2 released May 14, 1999; on comp.emacs, May 28. (This is
the followup to 21.0.67. The second version number was bumped to indicate
the beginning of the "stable" series.)
-version 21.1.3 released June 26, 1999.
-version 21.1.4 released July 8, 1999.
-version 21.1.6 released August 14, 1999. (There was no 21.1.5.)
-version 21.1.7 released September 26, 1999.
-version 21.1.8 released November 2, 1999.
-version 21.1.9 released February 13, 2000.
-version 21.1.10 released May 7, 2000.
-version 21.1.10a released June 24, 2000.
-version 21.1.11 released July 18, 2000.
-version 21.1.12 released August 5, 2000.
-version 21.1.13 released January 7, 2001.
-version 21.1.14 released January 27, 2001.
-version 21.2.9 released February 3, 1999.
-version 21.2.10 released February 5, 1999.
-version 21.2.11 released March 1, 1999.
-version 21.2.12 released March 5, 1999.
-version 21.2.13 released March 12, 1999.
-version 21.2.14 released May 14, 1999.
-version 21.2.15 released June 4, 1999.
-version 21.2.16 released June 11, 1999.
-version 21.2.17 released June 22, 1999.
-version 21.2.18 released July 14, 1999.
-version 21.2.19 released July 30, 1999.
-version 21.2.20 released November 10, 1999.
-version 21.2.21 released November 28, 1999.
-version 21.2.22 released November 29, 1999.
-version 21.2.23 released December 7, 1999.
-version 21.2.24 released December 14, 1999.
-version 21.2.25 released December 24, 1999.
-version 21.2.26 released December 31, 1999.
-version 21.2.27 released January 18, 2000.
-version 21.2.28 released February 7, 2000.
-version 21.2.29 released February 16, 2000.
-version 21.2.30 released February 21, 2000.
-version 21.2.31 released February 23, 2000.
-version 21.2.32 released March 20, 2000.
-version 21.2.33 released May 1, 2000.
-version 21.2.34 released May 28, 2000.
-version 21.2.35 released July 19, 2000.
-version 21.2.36 released October 4, 2000.
-version 21.2.37 released November 14, 2000.
-version 21.2.38 released December 5, 2000.
-version 21.2.39 released December 31, 2000.
-version 21.2.40 released January 8, 2001.
-version 21.2.41 "Polyhymnia" released January 17, 2001.
-version 21.2.42 "Poseidon" released January 20, 2001.
-version 21.2.43 "Terspichore" released January 26, 2001.
-version 21.2.44 "Thalia" released February 8, 2001.
-version 21.2.45 "Thelxepeia" released February 23, 2001.
-version 21.2.46 "Urania" released March 21, 2001.
-version 21.5.0 "alfalfa" released April 18, 2001.
-version 21.5.1 "anise" released May 9, 2001.
-version 21.5.2 "artichoke" released July 28, 2001.
-version 21.5.3 "asparagus" released September 7, 2001.
-version 21.5.4 "bamboo" released January 8, 2002.
-version 21.5.5 "beets" released March 5, 2002.
-version 21.5.6 "bok choi" released April 5, 2002.
+Version 21.1.3 released June 26, 1999.
+Version 21.1.4 released July 8, 1999.
+Version 21.1.6 released August 14, 1999. (There was no 21.1.5.)
+Version 21.1.7 released September 26, 1999.
+Version 21.1.8 released November 2, 1999.
+Version 21.1.9 released February 13, 2000.
+Version 21.1.10 released May 7, 2000.
+Version 21.1.10a released June 24, 2000.
+Version 21.1.11 released July 18, 2000.
+Version 21.1.12 released August 5, 2000.
+Version 21.1.13 released January 7, 2001.
+Version 21.1.14 released January 27, 2001.
+Version 21.2.9 released February 3, 1999.
+Version 21.2.10 released February 5, 1999.
+Version 21.2.11 released March 1, 1999.
+Version 21.2.12 released March 5, 1999.
+Version 21.2.13 released March 12, 1999.
+Version 21.2.14 released May 14, 1999.
+Version 21.2.15 released June 4, 1999.
+Version 21.2.16 released June 11, 1999.
+Version 21.2.17 released June 22, 1999.
+Version 21.2.18 released July 14, 1999.
+Version 21.2.19 released July 30, 1999.
+Version 21.2.20 released November 10, 1999.
+Version 21.2.21 released November 28, 1999.
+Version 21.2.22 released November 29, 1999.
+Version 21.2.23 released December 7, 1999.
+Version 21.2.24 released December 14, 1999.
+Version 21.2.25 released December 24, 1999.
+Version 21.2.26 released December 31, 1999.
+Version 21.2.27 released January 18, 2000.
+Version 21.2.28 released February 7, 2000.
+Version 21.2.29 released February 16, 2000.
+Version 21.2.30 released February 21, 2000.
+Version 21.2.31 released February 23, 2000.
+Version 21.2.32 released March 20, 2000.
+Version 21.2.33 released May 1, 2000.
+Version 21.2.34 released May 28, 2000.
+Version 21.2.35 released July 19, 2000.
+Version 21.2.36 released October 4, 2000.
+Version 21.2.37 released November 14, 2000.
+Version 21.2.38 released December 5, 2000.
+Version 21.2.39 released December 31, 2000.
+Version 21.2.40 released January 8, 2001.
+Version 21.2.41 "Polyhymnia" released January 17, 2001.
+Version 21.2.42 "Poseidon" released January 20, 2001.
+Version 21.2.43 "Terspichore" released January 26, 2001.
+Version 21.2.44 "Thalia" released February 8, 2001.
+Version 21.2.45 "Thelxepeia" released February 23, 2001.
+Version 21.2.46 "Urania" released March 21, 2001.
+Version 21.2.47 "Zephir" released April 14, 2001.
+Version 21.4.0 "Solid Vapor" released April 16, 2001.
+Version 21.4.1 "Copyleft" released April 19, 2001.
+Version 21.4.2 "Developer-Friendly Unix APIs" released May 10, 2001.
+Version 21.4.3 "Academic Rigor" released May 17, 2001.
+Version 21.4.4 "Artificial Intelligence" released July 28, 2001.
+Version 21.4.5 "Civil Service" released October 23, 2001.
+Version 21.4.6 "Common Lisp" released December 17, 2001.
+Version 21.4.7 "Economic Science" released May 4, 2002.
+Version 21.4.8 "Honest Recruiter" released May 9, 2002.
+Version 21.4.9 "Informed Management" released August 23, 2002.
+Version 21.4.10 "Military Intelligence" released November 2, 2002.
+Version 21.4.11 "Native Windows TTY Support" released January 3, 2003.
+Version 21.4.12 "Portable Code" released January 15, 2003.
+Version 21.4.13 "Rational FORTRAN" released May 25, 2003.
+Version 21.4.14 "Reasonable Discussion" released September 3, 2003.
+Version 21.4.15 "Security Through Obscurity" released February 2, 2004.
+Version 21.5.0 "alfalfa" released April 18, 2001.
+Version 21.5.1 "anise" released May 9, 2001.
+Version 21.5.2 "artichoke" released July 28, 2001.
+Version 21.5.3 "asparagus" released September 7, 2001.
+Version 21.5.4 "bamboo" released January 8, 2002.
+Version 21.5.5 "beets" released March 5, 2002.
+Version 21.5.6 "bok choi" released April 5, 2002.
+Version 21.5.7 "broccoflower" released July 2, 2002.
+Version 21.5.8 "broccoli" released July 27, 2002.
+Version 21.5.9 "brussels sprouts" released August 30, 2002.
+Version 21.5.10 "burdock" released January 4, 2003.
+Version 21.5.11 "cabbage" released February 16, 2003.
+Version 21.5.12 "carrot" released April 24, 2003.
+Version 21.5.13 "cauliflower" released May 10, 2003.
+Version 21.5.14 "cassava" released June 1, 2003.
+Version 21.5.15 "celery" released September 3, 2003.
+Version 21.5.16 "celeriac" released September 26, 2003.
+Version 21.5.17 "chayote" released March 22, 2004.
+Version 21.5.18 "chestnut" released October 22, 2004.
-- A time line for GNU Emacs version 19 is
@@ -175,6 +213,8 @@
version 20.3 released August 19, 1998.
version 20.4 released July 12, 1999; on comp.emacs, July 27.
version 21.1 released October 20, 2001.
+Version 21.2 released March 16, 2002.
+Version 21.3 released March 19, 2003.
-- A time line for GNU Emacs version 18 and older is
@@ -234,6 +274,15 @@
version 18.58 released ?????.
version 18.59 released October 31, 1992.
+
+-- A time line for Epoch is
+
+Epoch 1.0 released December 14, 1989. (by Simon Kaplan, Chris Love, et al.)
+Epoch 2.0 released December 23, 1989.
+Epoch 3.1 released February 6, 1990.
+Epoch 3.2 released December[????] 11, 1990.
+Epoch 4.0 released August 27, 1990.
+
*/
/* Sources for further information:
@@ -2044,6 +2093,7 @@
#if defined (HAVE_MMAP) && defined (REL_ALLOC) && !defined
(DOUG_LEA_MALLOC)
vars_of_ralloc ();
#endif /* HAVE_MMAP && REL_ALLOC */
+ vars_of_realpath ();
vars_of_redisplay ();
vars_of_regex ();
#ifdef HAVE_SCROLLBARS
@@ -2781,7 +2831,7 @@
}
if (best < 0)
- abort ();
+ ABORT ();
/* Copy the highest priority remaining option, with its args, to
NEW_ARGV. */
@@ -3046,7 +3096,7 @@
if (rc != 0)
{
stderr_out ("malloc_set_state failed, rc = %d\n", rc);
- abort ();
+ ABORT ();
}
#if 0
free (malloc_state_ptr);
@@ -3280,7 +3330,7 @@
Cause XEmacs to enter the debugger.
On some systems, there may be no way to do this gracefully; if so,
nothing happens unless ABORT is non-nil, in which case XEmacs will
-abort() -- a sure-fire way to immediately get back to the debugger,
+ABORT() -- a sure-fire way to immediately get back to the debugger,
but also a sure-fire way to kill XEmacs (and dump core on Unix
systems)!
*/
@@ -3288,7 +3338,7 @@
{
debugging_breakpoint ();
if (!NILP (abort_))
- abort ();
+ ABORT ();
return Qnil;
}
@@ -3765,7 +3815,6 @@
in one session without having to recompile. */
/* #define ASSERTIONS_DONT_ABORT */
-#ifdef USE_ASSERTIONS
/* This highly dubious kludge ... shut up Jamie, I'm tired of your slagging. */
/* Nonzero if handling an assertion failure. (Bumped by one each time
@@ -3780,7 +3829,7 @@
#undef fprintf
#endif
-/* This is called when an assert() fails or when abort() is called -- both
+/* This is called when an assert() fails or when ABORT() is called -- both
of those are defined in the preprocessor to an expansion involving
assert_failed(). */
void
@@ -3865,7 +3914,6 @@
inhibit_non_essential_conversion_operations = 0;
in_assert_failed = 0;
}
-#endif /* USE_ASSERTIONS */
/* -------------------------------------- */
/* low-memory notification */
@@ -4533,10 +4581,6 @@
}
#endif
-
-#undef abort /* Get access to the real version of abort. We put this all
- the way at the end to make sure that all calls to abort()
- anywhere in the above code go through assert_failed(). */
DOESNT_RETURN
really_abort (void)
1.83.2.2 +48 -30 XEmacs/xemacs/src/eval.c
Index: eval.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/eval.c,v
retrieving revision 1.83.2.1
retrieving revision 1.83.2.2
diff -u -r1.83.2.1 -r1.83.2.2
--- eval.c 2004/12/11 05:16:02 1.83.2.1
+++ eval.c 2005/03/15 05:24:01 1.83.2.2
@@ -404,6 +404,7 @@
#endif
static int warning_will_be_discarded (Lisp_Object level);
+static Lisp_Object maybe_get_trapping_problems_backtrace (void);
/************************************************************************/
@@ -428,7 +429,7 @@
}
static const struct memory_description subr_description[] = {
- { XD_DOC_STRING, offsetof (Lisp_Subr, doc), 0, 0, XD_FLAG_NO_KKCC },
+ { XD_DOC_STRING, offsetof (Lisp_Subr, doc), 0, { 0 }, XD_FLAG_NO_KKCC },
{ XD_END }
};
@@ -526,7 +527,7 @@
max_specpdl_size = specpdl_size + 40;
speccount = internal_bind_int (&entering_debugger, 1);
- val = internal_catch (Qdebugger, call_debugger_259, arg, &threw, 0);
+ val = internal_catch (Qdebugger, call_debugger_259, arg, &threw, 0, 0);
return unbind_to_1 (speccount, ((threw)
? Qunbound /* Not returning a value */
@@ -586,10 +587,10 @@
while (CONSP (conditions))
{
- Lisp_Object this, tail;
- this = XCAR (conditions);
+ Lisp_Object curr, tail;
+ curr = XCAR (conditions);
for (tail = list; CONSP (tail); tail = XCDR (tail))
- if (EQ (XCAR (tail), this))
+ if (EQ (XCAR (tail), curr))
return 1;
conditions = XCDR (conditions);
}
@@ -1480,7 +1481,7 @@
/* This function can GC */
Lisp_Object tag = Feval (XCAR (args));
Lisp_Object body = XCDR (args);
- return internal_catch (tag, Fprogn, body, 0, 0);
+ return internal_catch (tag, Fprogn, body, 0, 0, 0);
}
/* Set up a catch, then call C function FUNC on argument ARG.
@@ -1492,7 +1493,8 @@
Lisp_Object (*func) (Lisp_Object arg),
Lisp_Object arg,
int * volatile threw,
- Lisp_Object * volatile thrown_tag)
+ Lisp_Object * volatile thrown_tag,
+ Lisp_Object * volatile backtrace_before_throw)
{
/* This structure is made part of the chain `catchlist'. */
struct catchtag c;
@@ -1501,6 +1503,7 @@
c.next = catchlist;
c.tag = tag;
c.actual_tag = Qnil;
+ c.backtrace = Qnil;
c.val = Qnil;
c.backlist = backtrace_list;
#if 0 /* FSFmacs */
@@ -1521,6 +1524,7 @@
/* Throw works by a longjmp that comes right here. */
if (threw) *threw = 1;
if (thrown_tag) *thrown_tag = c.actual_tag;
+ if (backtrace_before_throw) *backtrace_before_throw = c.backtrace;
return c.val;
}
c.val = (*func) (arg);
@@ -1642,7 +1646,7 @@
#ifdef DEFEND_AGAINST_THROW_RECURSION
/* die if we recurse more than is reasonable */
if (++throw_level > 20)
- abort ();
+ ABORT ();
#endif
#ifdef ERROR_CHECK_TRAPPING_PROBLEMS
@@ -1677,6 +1681,8 @@
#endif
for (c = catchlist; c; c = c->next)
{
+ if (EQ (c->tag, Vcatch_everything_tag))
+ c->backtrace = maybe_get_trapping_problems_backtrace ();
if (EQ (c->tag, tag) || EQ (c->tag, Vcatch_everything_tag))
unwind_to_catch (c, val, tag);
}
@@ -1881,6 +1887,7 @@
#endif
c.val = Qnil;
c.actual_tag = Qnil;
+ c.backtrace = Qnil;
c.backlist = backtrace_list;
#if 0 /* FSFmacs */
/* #### */
@@ -2228,7 +2235,7 @@
/* who knows how much has been initialized? Safest bet is
just to bomb out immediately. */
stderr_out ("Error before initialization is complete!\n");
- abort ();
+ ABORT ();
}
assert (!gc_in_progress);
@@ -4813,19 +4820,13 @@
void *arg;
};
-static DECLARE_DOESNT_RETURN_TYPE
- (Lisp_Object, flagged_a_squirmer (Lisp_Object, Lisp_Object, Lisp_Object));
-
-static DOESNT_RETURN_TYPE (Lisp_Object)
-flagged_a_squirmer (Lisp_Object error_conditions, Lisp_Object data,
- Lisp_Object opaque)
+static Lisp_Object
+maybe_get_trapping_problems_backtrace (void)
{
- struct call_trapping_problems *p =
- (struct call_trapping_problems *) get_opaque_ptr (opaque);
+ Lisp_Object backtrace;
if (!(inhibit_flags & INHIBIT_WARNING_ISSUE)
- && !warning_will_be_discarded (current_warning_level ())
- && !EQ (error_conditions, Qquit))
+ && !warning_will_be_discarded (current_warning_level ()))
{
struct gcpro gcpro1;
Lisp_Object lstream = Qnil;
@@ -4842,15 +4843,32 @@
lstream = make_resizing_buffer_output_stream ();
Fbacktrace (lstream, Qt);
Lstream_flush (XLSTREAM (lstream));
- p->backtrace = resizing_buffer_to_lisp_string (XLSTREAM (lstream));
+ backtrace = resizing_buffer_to_lisp_string (XLSTREAM (lstream));
Lstream_delete (XLSTREAM (lstream));
UNGCPRO;
unbind_to (speccount);
}
else
- p->backtrace = Qnil;
+ backtrace = Qnil;
+
+ return backtrace;
+}
+static DECLARE_DOESNT_RETURN_TYPE
+ (Lisp_Object, flagged_a_squirmer (Lisp_Object, Lisp_Object, Lisp_Object));
+
+static DOESNT_RETURN_TYPE (Lisp_Object)
+flagged_a_squirmer (Lisp_Object error_conditions, Lisp_Object data,
+ Lisp_Object opaque)
+{
+ struct call_trapping_problems *p =
+ (struct call_trapping_problems *) get_opaque_ptr (opaque);
+
+ if (!EQ (error_conditions, Qquit))
+ p->backtrace = maybe_get_trapping_problems_backtrace ();
+ else
+ p->backtrace = Qnil;
p->error_conditions = error_conditions;
p->data = data;
@@ -4891,11 +4909,11 @@
{
Lisp_Object errstr =
emacs_sprintf_string_lisp
- ("%s: Attempt to throw outside of function "
- "to catch `%s' with value `%s'",
+ ("%s: Attempt to throw outside of function:"
+ "To catch `%s' with value `%s'\n\nBacktrace follows:\n\n%s",
Qnil, 3,
build_msg_string (warning_string ? warning_string : "error"),
- p->thrown_tag, p->thrown_value);
+ p->thrown_tag, p->thrown_value, p->backtrace);
warn_when_safe_lispobj (Qerror, current_warning_level (), errstr);
}
else if (p->caught_error && !EQ (p->error_conditions, Qquit))
@@ -5109,7 +5127,7 @@
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
struct call_trapping_problems package;
struct call_trapping_problems_result real_problem;
- Lisp_Object opaque, thrown_tag, tem;
+ Lisp_Object opaque, thrown_tag, tem, thrown_backtrace;
int thrown = 0;
assert (SYMBOLP (warning_class)); /* sanity-check */
@@ -5144,11 +5162,11 @@
after printing the warning. (We print the warning in the stack
context of the error, so we can get a backtrace.) */
tem = internal_catch (package.catchtag, call_trapping_problems_1, opaque,
- &thrown, &thrown_tag);
+ &thrown, &thrown_tag, &thrown_backtrace);
else if (flags & INTERNAL_INHIBIT_THROWS)
/* We skip over the first wrapper, which traps errors. */
tem = internal_catch (package.catchtag, call_trapping_problems_2, opaque,
- &thrown, &thrown_tag);
+ &thrown, &thrown_tag, &thrown_backtrace);
else
/* Nothing special. */
tem = (fun) (arg);
@@ -5182,7 +5200,7 @@
problem->caught_throw = 1;
problem->error_conditions = Qnil;
problem->data = Qnil;
- problem->backtrace = Qnil;
+ problem->backtrace = thrown_backtrace;
problem->thrown_tag = thrown_tag;
problem->thrown_value = tem;
}
@@ -6544,7 +6562,7 @@
t each time a Control-G is detected, and to `critical' each time a
Shift-Control-G is detected. The XEmacs core C code is littered with
calls to the QUIT; macro, which check the values of `quit-flag' and
-`inhibit-quit' and abort (or more accurately, call (signal 'quit)) if
+`inhibit-quit' and ABORT (or more accurately, call (signal 'quit)) if
it's correct to do so.
*/ );
Vquit_flag = Qnil;
@@ -6607,7 +6625,7 @@
\(force-debugging-signal t). This is useful because debugging
noninteractive runs of XEmacs is often very difficult, since they typically
happen as part of sometimes large and complex make suites (e.g. rebuilding
-the XEmacs packages). NOTE: This runs abort()!!! (As well as and after
+the XEmacs packages). NOTE: This runs ABORT()!!! (As well as and after
executing INT 3 under MS Windows, which should invoke a debugger if it's
active.) This is guaranteed to kill XEmacs! (But in this situation, XEmacs
is about to die anyway, and if no debugger is present, this will usefully
1.81.2.2 +2 -2 XEmacs/xemacs/src/event-Xt.c
Index: event-Xt.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/event-Xt.c,v
retrieving revision 1.81.2.1
retrieving revision 1.81.2.2
diff -u -r1.81.2.1 -r1.81.2.2
--- event-Xt.c 2004/11/25 12:44:12 1.81.2.1
+++ event-Xt.c 2005/03/15 05:24:02 1.81.2.2
@@ -870,7 +870,7 @@
case MappingKeyboard: x_reset_key_mapping (d); break;
case MappingModifier: x_reset_modifier_mapping (d); break;
case MappingPointer: /* Do something here? */ break;
- default: abort();
+ default: ABORT();
}
}
@@ -2456,7 +2456,7 @@
return;
}
}
- abort ();
+ ABORT ();
}
static void
1.28.2.1 +14 -1 XEmacs/xemacs/src/event-gtk.c
Index: event-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/event-gtk.c,v
retrieving revision 1.28
retrieving revision 1.28.2.1
diff -u -r1.28 -r1.28.2.1
--- event-gtk.c 2004/11/04 23:06:25 1.28
+++ event-gtk.c 2005/03/15 05:24:03 1.28.2.1
@@ -97,10 +97,23 @@
Lisp_Object Qkey_mapping;
Lisp_Object Qsans_modifiers;
+/*
+ * Identify if the keysym is a modifier. This implementation mirrors x.org's
+ * IsModifierKey(), but for GDK keysyms.
+ */
+#ifdef GDK_ISO_Lock
+#define IS_MODIFIER_KEY(keysym) \
+ ((((keysym) >= GDK_Shift_L) && ((keysym) <= GDK_Hyper_R)) \
+ || (((keysym) >= GDK_ISO_Lock) && \
+ ((keysym) <= GDK_ISO_Last_Group_Lock)) \
+ || ((keysym) == GDK_Mode_switch) \
+ || ((keysym) == GDK_Num_Lock))
+#else
#define IS_MODIFIER_KEY(keysym) \
((((keysym) >= GDK_Shift_L) && ((keysym) <= GDK_Hyper_R)) \
|| ((keysym) == GDK_Mode_switch) \
|| ((keysym) == GDK_Num_Lock))
+#endif
#define THIS_IS_GTK
#include "event-xlike-inc.c"
@@ -891,7 +904,7 @@
return;
}
}
- abort ();
+ ABORT ();
}
static void
1.100.2.2 +14 -149 XEmacs/xemacs/src/event-msw.c
Index: event-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/event-msw.c,v
retrieving revision 1.100.2.1
retrieving revision 1.100.2.2
diff -u -r1.100.2.1 -r1.100.2.2
--- event-msw.c 2004/12/11 05:16:05 1.100.2.1
+++ event-msw.c 2005/03/15 05:24:04 1.100.2.2
@@ -1655,9 +1655,9 @@
mswindows_enqueue_process_event (XPROCESS (vaffanculo));
else
{
- /* abort (); */
+ /* ABORT (); */
/* #### FUCKME! When can this happen? I hit this
- abort() when I tried enabling it. */
+ ABORT() when I tried enabling it. */
/* Have to return something: there may be no
accompanying process event */
mswindows_enqueue_magic_event (NULL, XM_BUMPQUEUE);
@@ -2823,7 +2823,7 @@
lcid = MAKELANGID (LANG_ENGLISH, SUBLANG_ENGLISH_US);
break;
- default: abort (); lcid = 0;
+ default: ABORT (); lcid = 0;
}
/* VERY CONFUSING! See intl-win32.c. */
@@ -3712,6 +3712,7 @@
Extbyte *fname_ext;
Bytecount fnamelen;
Charcount len = qxeDragQueryFile ((HDROP) wParam, i, NULL, 0);
+ int freeme = 0;
/* The URLs that we make here aren't correct according to section
* 3.10 of rfc1738 because they're missing the //<host>/ part and
* because they may contain reserved characters. But that's OK -
@@ -3723,156 +3724,20 @@
ALLOCA, (fname, fnamelen),
Qmswindows_tstr);
+
/* May be a shell link aka "shortcut" - replace fname if so */
-#if !defined (NO_CYGWIN_COM_SUPPORT)
if (!qxestrcasecmp_ascii (fname + fnamelen - 4, ".LNK"))
{
- /* ####
-
- Note the following in the docs:
-
- Note: The IShellLink interface has an ANSI version
- (IShellLinkA) and a Unicode version (IShellLinkW). The
- version that will be used depends on whether you compile
- for ANSI or Unicode. However, Microsoft® Windows 95 and
- Microsoft® Windows 98 only support IShellLinkA.
-
- We haven't yet implemented COM support in the
- Unicode-splitting library. I don't quite understand how
- COM works yet, but it looks like what's happening is
- that the ShellLink class implements both the IShellLinkA
- and IShellLinkW interfaces. To make this work at
- run-time, we have to do something like this:
-
- -- define a new interface qxeIShellLink that uses
- Extbyte * instead of LPSTR or LPWSTR. (not totally
- necessary since Extbyte * == LPSTR).
-
- -- define a new class qxeShellLink that implements
- qxeIShellLink. the methods on this class need to create
- a shadow ShellLink object to do all the real work, and
- call the corresponding function from either the
- IShellLinkA or IShellLinkW interfaces on this object,
- depending on whether XEUNICODE_P is defined.
-
- -- with appropriate preprocessor magic, of course, we
- could make things appear transparent; but we've decided
- not to do preprocessor magic for the moment.
- */
-
- /* #### Not Unicode-split for the moment; we have to do it
- ourselves. */
- if (XEUNICODE_P)
- {
- IShellLinkW *psl;
-
- if (CoCreateInstance (
- XECOMID (CLSID_ShellLink),
- NULL,
- CLSCTX_INPROC_SERVER,
- XECOMID (IID_IShellLinkW),
- &VOIDP_CAST (psl)) == S_OK)
- {
- IPersistFile *ppf;
-
- if (XECOMCALL2 (psl, QueryInterface,
- XECOMID (IID_IPersistFile),
- &VOIDP_CAST (ppf)) == S_OK)
- {
- Extbyte *fname_unicode;
- WIN32_FIND_DATAW wfd;
- LPWSTR resolved =
- alloca_array (WCHAR, PATH_MAX_EXTERNAL + 1);
-
- TO_EXTERNAL_FORMAT (DATA, (fname, fnamelen),
- C_STRING_ALLOCA,
- fname_unicode,
- Qmswindows_unicode);
-
- if (XECOMCALL2 (ppf, Load,
- (LPWSTR) fname_unicode,
- STGM_READ) == S_OK &&
- /* #### YUCK! Docs read
-
- cchMaxPath
-
- Maximum number of bytes to copy to the buffer pointed to by the
- pszFile parameter.
-
- But "cch" means "count of characters", not bytes. I'll
assume the doc
- writers messed up and the programmer was correct. Also, this approach
- is safe even if it's actually the other way around. */
-#if defined (CYGWIN_HEADERS) && W32API_INSTALLED_VER < W32API_VER(2,2)
- /* Another Cygwin prototype error,
- fixed in v2.2 of w32api */
- XECOMCALL4 (psl, GetPath, (LPSTR) resolved,
- PATH_MAX_EXTERNAL, &wfd, 0)
-#else
- XECOMCALL4 (psl, GetPath, resolved,
- PATH_MAX_EXTERNAL, &wfd, 0)
-#endif
- == S_OK)
- TO_INTERNAL_FORMAT (C_STRING, resolved,
- ALLOCA, (fname, fnamelen),
- Qmswindows_tstr);
-
- XECOMCALL0 (ppf, Release);
- }
-
- XECOMCALL0 (psl, Release);
- }
- }
- else
- {
- IShellLinkA *psl;
-
- if (CoCreateInstance (
- XECOMID (CLSID_ShellLink),
- NULL,
- CLSCTX_INPROC_SERVER,
- XECOMID (IID_IShellLinkA),
- &VOIDP_CAST (psl)) == S_OK)
- {
- IPersistFile *ppf;
-
- if (XECOMCALL2 (psl, QueryInterface,
- XECOMID (IID_IPersistFile),
- &VOIDP_CAST (ppf)) == S_OK)
- {
- Extbyte *fname_unicode;
- WIN32_FIND_DATAA wfd;
- LPSTR resolved =
- alloca_array (CHAR, PATH_MAX_EXTERNAL + 1);
-
- /* Always Unicode. Not obvious from the
- IPersistFile documentation, but look under
- "Shell Link" for example code. */
- TO_EXTERNAL_FORMAT (DATA, (fname, fnamelen),
- C_STRING_ALLOCA,
- fname_unicode,
- Qmswindows_unicode);
-
- if (XECOMCALL2 (ppf, Load,
- (LPWSTR) fname_unicode,
- STGM_READ) == S_OK
- && XECOMCALL4 (psl, GetPath, resolved,
- PATH_MAX_EXTERNAL, &wfd, 0) == S_OK)
- TO_INTERNAL_FORMAT (C_STRING, resolved,
- ALLOCA, (fname, fnamelen),
- Qmswindows_tstr);
-
- XECOMCALL0 (ppf, Release);
- }
-
- XECOMCALL0 (psl, Release);
- }
- }
+ fname = mswindows_read_link (fname);
+ freeme = 1;
}
-#endif /* !defined (NO_CYGWIN_COM_SUPPORT) */
+
{
- fname = urlify_filename (fname);
- l_item = build_intstring (fname);
- xfree (fname, Ibyte *);
+ Ibyte *fname2 = urlify_filename (fname);
+ l_item = build_intstring (fname2);
+ xfree (fname2, Ibyte *);
+ if (freeme)
+ xfree (fname, Ibyte *);
l_dndlist = Fcons (l_item, l_dndlist);
}
}
@@ -4419,7 +4284,7 @@
FROB (XM_MAPFRAME);
FROB (XM_UNMAPFRAME);
- default: abort ();
+ default: ABORT ();
}
#undef FROB
1.86.2.1 +6 -6 XEmacs/xemacs/src/event-stream.c
Index: event-stream.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/event-stream.c,v
retrieving revision 1.86
retrieving revision 1.86.2.1
diff -u -r1.86 -r1.86.2.1
--- event-stream.c 2004/11/04 23:06:26 1.86
+++ event-stream.c 2005/03/15 05:24:06 1.86.2.1
@@ -1301,7 +1301,7 @@
Lisp_Object lid;
id = event_stream_generate_wakeup (msecs, msecs2, function, object, 0);
lid = make_int (id);
- if (id != XINT (lid)) abort ();
+ if (id != XINT (lid)) ABORT ();
return lid;
}
@@ -1380,7 +1380,7 @@
Lisp_Object lid;
id = event_stream_generate_wakeup (msecs, msecs2, function, object, 1);
lid = make_int (id);
- if (id != XINT (lid)) abort ();
+ if (id != XINT (lid)) ABORT ();
return lid;
}
@@ -3081,7 +3081,7 @@
event_stream_handle_magic_event (XEVENT (event));
goto done;
default:
- abort ();
+ ABORT ();
}
done:
@@ -3591,7 +3591,7 @@
Lisp_Object e = XVECTOR_DATA (Vrecent_keys_ring)[j];
if (NILP (e))
- abort ();
+ ABORT ();
XVECTOR_DATA (val)[i] = Fcopy_event (e, Qnil);
if (++j >= recent_keys_ring_size)
j = 0;
@@ -3735,7 +3735,7 @@
{
if (!n)
{
- /* must copy to avoid an abort() in next_event_internal() */
+ /* must copy to avoid an ABORT() in next_event_internal() */
if (!NILP (XEVENT_NEXT (event)))
return Fcopy_event (event, Qnil);
else
@@ -3868,7 +3868,7 @@
SET_EVENT_BUTTON_MODIFIERS (e, EVENT_BUTTON_MODIFIERS (e) |
XEMACS_MOD_META);
else
- abort ();
+ ABORT ();
{
int tckn = event_chain_count (Vthis_command_keys);
1.62.2.2 +26 -26 XEmacs/xemacs/src/events.c
Index: events.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/events.c,v
retrieving revision 1.62.2.1
retrieving revision 1.62.2.2
diff -u -r1.62.2.1 -r1.62.2.2
--- events.c 2004/12/11 05:16:08 1.62.2.1
+++ events.c 2005/03/15 05:24:07 1.62.2.2
@@ -189,16 +189,16 @@
};
static const struct memory_description event_data_description_1 [] = {
- { XD_BLOCK_ARRAY, key_press_event, 1, &key_data_description },
- { XD_BLOCK_ARRAY, button_press_event, 1, &button_data_description },
- { XD_BLOCK_ARRAY, button_release_event, 1, &button_data_description },
- { XD_BLOCK_ARRAY, pointer_motion_event, 1, &motion_data_description },
- { XD_BLOCK_ARRAY, process_event, 1, &process_data_description },
- { XD_BLOCK_ARRAY, timeout_event, 1, &timeout_data_description },
- { XD_BLOCK_ARRAY, magic_event, 1, &magic_data_description },
- { XD_BLOCK_ARRAY, magic_eval_event, 1, &magic_eval_data_description },
- { XD_BLOCK_ARRAY, eval_event, 1, &eval_data_description },
- { XD_BLOCK_ARRAY, misc_user_event, 1, &misc_user_data_description },
+ { XD_BLOCK_ARRAY, key_press_event, 1, { &key_data_description } },
+ { XD_BLOCK_ARRAY, button_press_event, 1, { &button_data_description } },
+ { XD_BLOCK_ARRAY, button_release_event, 1, { &button_data_description } },
+ { XD_BLOCK_ARRAY, pointer_motion_event, 1, { &motion_data_description } },
+ { XD_BLOCK_ARRAY, process_event, 1, { &process_data_description } },
+ { XD_BLOCK_ARRAY, timeout_event, 1, { &timeout_data_description } },
+ { XD_BLOCK_ARRAY, magic_event, 1, { &magic_data_description } },
+ { XD_BLOCK_ARRAY, magic_eval_event, 1, { &magic_eval_data_description } },
+ { XD_BLOCK_ARRAY, eval_event, 1, { &eval_data_description } },
+ { XD_BLOCK_ARRAY, misc_user_event, 1, { &misc_user_data_description } },
{ XD_END }
};
@@ -211,7 +211,7 @@
{ XD_LISP_OBJECT, offsetof (struct Lisp_Event, next) },
{ XD_LISP_OBJECT, offsetof (struct Lisp_Event, channel) },
{ XD_UNION, offsetof (struct Lisp_Event, event),
- XD_INDIRECT (0, 0), &event_data_description },
+ XD_INDIRECT (0, 0), { &event_data_description } },
{ XD_END }
};
@@ -306,7 +306,7 @@
case dead_event:
break;
default:
- abort ();
+ ABORT ();
}
mark_object (event->channel);
return event->next;
@@ -399,7 +399,7 @@
/* if (e1->timestamp != e2->timestamp) return 0; */
switch (e1->event_type)
{
- default: abort ();
+ default: ABORT ();
case process_event:
return EQ (EVENT_PROCESS_PROCESS (e1), EVENT_PROCESS_PROCESS (e2));
@@ -505,7 +505,7 @@
return hash;
default:
- abort ();
+ ABORT ();
}
return 0; /* unreached */
@@ -823,7 +823,7 @@
SET_EVENT_MISC_USER_Y (e, coord_y);
break;
default:
- abort ();
+ ABORT ();
}
}
@@ -884,18 +884,18 @@
if (EQ (event, Vlast_command_event) ||
EQ (event, Vlast_input_event) ||
EQ (event, Vunread_command_event))
- abort ();
+ ABORT ();
len = XVECTOR_LENGTH (Vthis_command_keys);
for (i = 0; i < len; i++)
if (EQ (event, XVECTOR_DATA (Vthis_command_keys) [i]))
- abort ();
+ ABORT ();
if (!NILP (Vrecent_keys_ring))
{
int recent_ring_len = XVECTOR_LENGTH (Vrecent_keys_ring);
for (i = 0; i < recent_ring_len; i++)
if (EQ (event, XVECTOR_DATA (Vrecent_keys_ring) [i]))
- abort ();
+ ABORT ();
}
}
#endif /* 0 */
@@ -1110,7 +1110,7 @@
event_chain = XEVENT_NEXT (event_chain);
}
- abort ();
+ ABORT ();
return Qnil;
}
@@ -1324,7 +1324,7 @@
if (CHAR_OR_CHAR_INTP (XEVENT_KEY_KEYSYM (event)))
c = XCHAR_OR_CHAR_INT (XEVENT_KEY_KEYSYM (event));
else if (!SYMBOLP (XEVENT_KEY_KEYSYM (event)))
- abort ();
+ ABORT ();
else if (map_device_key_names && !NILP (Vcharacter_set_property)
/* Allow window-system-specific extensibility of
keysym->code mapping */
@@ -1551,7 +1551,7 @@
case empty_event: eicat_ascii (buf, "empty"); return;
case dead_event: eicat_ascii (buf, "DEAD-EVENT"); return;
default:
- abort ();
+ ABORT ();
return;
}
#define modprint(x,y) \
@@ -1591,7 +1591,7 @@
eicat_lstr (buf, XSYMBOL (key)->name);
}
else
- abort ();
+ ABORT ();
if (mouse_p)
eicat_ascii (buf, "up");
}
@@ -1740,7 +1740,7 @@
return Qempty;
default:
- abort ();
+ ABORT ();
return Qnil;
}
}
@@ -2130,9 +2130,9 @@
|| TOOLBAR_BUTTONP (ret_obj1)
#endif
))
- abort ();
+ ABORT ();
if (!NILP (ret_obj2) && !(EXTENTP (ret_obj2) || CONSP (ret_obj2)))
- abort ();
+ ABORT ();
if (char_x)
*char_x = ret_x;
@@ -2480,7 +2480,7 @@
switch (EVENT_TYPE (e))
{
- default: abort ();
+ default: ABORT ();
case process_event:
props = cons3 (Qprocess, EVENT_PROCESS_PROCESS (e), props);
1.53.2.1 +122 -84 XEmacs/xemacs/src/extents.c
Index: extents.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/extents.c,v
retrieving revision 1.53
retrieving revision 1.53.2.1
diff -u -r1.53 -r1.53.2.1
--- extents.c 2004/11/04 23:06:27 1.53
+++ extents.c 2005/03/15 05:24:08 1.53.2.1
@@ -1,6 +1,6 @@
/* Copyright (c) 1994, 1995 Free Software Foundation, Inc.
Copyright (c) 1995 Sun Microsystems, Inc.
- Copyright (c) 1995, 1996, 2000, 2002, 2003 Ben Wing.
+ Copyright (c) 1995, 1996, 2000, 2002, 2003, 2004, 2005 Ben Wing.
This file is part of XEmacs.
@@ -1029,7 +1029,7 @@
static const struct memory_description gap_array_marker_description_1[] = {
{ XD_BLOCK_PTR, offsetof (Gap_Array_Marker, next), 1,
- &gap_array_marker_description },
+ { &gap_array_marker_description } },
{ XD_END }
};
@@ -1043,11 +1043,11 @@
{ XD_INT, offsetof (Gap_Array, offset_past_gap) },
{ XD_INT, offsetof (Gap_Array, els_past_gap) },
{ XD_BLOCK_PTR, offsetof (Gap_Array, markers), 1,
- &gap_array_marker_description, XD_FLAG_NO_KKCC },
+ { &gap_array_marker_description }, XD_FLAG_NO_KKCC },
{ XD_BLOCK_ARRAY, offsetof (Gap_Array, array), XD_INDIRECT (0, 0),
- &lisp_object_description },
+ { &lisp_object_description } },
{ XD_BLOCK_ARRAY, XD_INDIRECT (1, offsetof (Gap_Array, array)),
- XD_INDIRECT (2, 0), &lisp_object_description },
+ XD_INDIRECT (2, 0), { &lisp_object_description } },
{ XD_END }
};
@@ -1060,9 +1060,9 @@
static const struct memory_description extent_list_marker_description_1[] = {
{ XD_BLOCK_PTR, offsetof (Extent_List_Marker, m), 1,
- &gap_array_marker_description },
+ { &gap_array_marker_description } },
{ XD_BLOCK_PTR, offsetof (Extent_List_Marker, next), 1,
- &extent_list_marker_description },
+ { &extent_list_marker_description } },
{ XD_END }
};
@@ -1072,9 +1072,12 @@
};
static const struct memory_description extent_list_description_1[] = {
- { 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 },
+ { 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 },
{ XD_END }
};
@@ -1084,7 +1087,8 @@
};
static const struct memory_description stack_of_extents_description_1[] = {
- { XD_BLOCK_PTR, offsetof (Stack_Of_Extents, extents), 1, &extent_list_description
},
+ { XD_BLOCK_PTR, offsetof (Stack_Of_Extents, extents), 1,
+ { &extent_list_description } },
{ XD_END }
};
@@ -1095,9 +1099,9 @@
static const struct memory_description extent_info_description [] = {
{ XD_BLOCK_PTR, offsetof (struct extent_info, extents), 1,
- &extent_list_description },
+ { &extent_list_description } },
{ XD_BLOCK_PTR, offsetof (struct extent_info, soe), 1,
- &stack_of_extents_description, XD_FLAG_NO_KKCC },
+ { &stack_of_extents_description }, XD_FLAG_NO_KKCC },
{ XD_END }
};
@@ -2020,7 +2024,7 @@
case ME_ALL_EXTENTS_OPEN: start_open = 1, end_open = 1; break;
case ME_ALL_EXTENTS_CLOSED_OPEN: start_open = 0, end_open = 1; break;
case ME_ALL_EXTENTS_OPEN_CLOSED: start_open = 1, end_open = 0; break;
- default: abort(); return 0;
+ default: ABORT(); return 0;
}
start = buffer_or_string_bytexpos_to_startind (obj, from,
@@ -2056,7 +2060,7 @@
retval = (start <= exs && exs <= end) || (start <= exe && exe
<= end);
break;
default:
- abort(); return 0;
+ ABORT(); return 0;
}
return flags & ME_NEGATE_IN_REGION ? !retval : retval;
}
@@ -3161,7 +3165,7 @@
Lisp_Object obj2 = Qnil;
/* Destroyed extents have 't' in the object field, causing
- extent_object() to abort (maybe). */
+ extent_object() to ABORT (maybe). */
if (EXTENT_LIVE_P (XEXTENT (obj)))
obj2 = extent_object (XEXTENT (obj));
@@ -4781,10 +4785,10 @@
#ifdef ERROR_CHECK_EXTENTS
if (extent_start (extent) > indice &&
extent_start (extent) < indice + closure->length)
- abort ();
+ ABORT ();
if (extent_end (extent) > indice &&
extent_end (extent) < indice + closure->length)
- abort ();
+ ABORT ();
#endif
/* The extent-adjustment code adjusted the extent's endpoints as if
@@ -5282,7 +5286,7 @@
case GL_INSIDE_MARGIN: return Qinside_margin;
case GL_WHITESPACE: return Qwhitespace;
default:
- abort ();
+ ABORT ();
return Qnil; /* unreached */
}
}
@@ -7081,21 +7085,28 @@
}
Bytexpos
-next_single_property_change (Bytexpos pos, Lisp_Object prop,
- Lisp_Object object, Bytexpos limit)
+next_previous_single_property_change (Bytexpos pos, Lisp_Object prop,
+ Lisp_Object object, Bytexpos limit,
+ Boolint next, Boolint text_props_only)
{
Lisp_Object extent, value;
int limit_was_nil;
-
+ enum extent_at_flag at_flag = next ? EXTENT_AT_AFTER : EXTENT_AT_BEFORE;
if (limit < 0)
{
- limit = buffer_or_string_accessible_end_byte (object);
+ limit = (next ? buffer_or_string_accessible_end_byte :
+ buffer_or_string_accessible_begin_byte) (object);
limit_was_nil = 1;
}
else
limit_was_nil = 0;
- extent = extent_at (pos, object, prop, 0, EXTENT_AT_AFTER, 0);
+ /* Retrieve initial property value to compare against */
+ extent = extent_at (pos, object, prop, 0, at_flag, 0);
+ /* If we only want text-prop extents, ignore all others */
+ if (text_props_only && !NILP (extent) &&
+ NILP (Fextent_property (extent, Qtext_prop, Qnil)))
+ extent = Qnil;
if (!NILP (extent))
value = Fextent_property (extent, prop, Qnil);
else
@@ -7103,10 +7114,15 @@
while (1)
{
- pos = extent_find_end_of_run (object, pos, 1);
- if (pos >= limit)
- break; /* property is the same all the way to the end */
- extent = extent_at (pos, object, prop, 0, EXTENT_AT_AFTER, 0);
+ pos = (next ? extent_find_end_of_run : extent_find_beginning_of_run)
+ (object, pos, 1);
+ if (next ? pos >= limit : pos <= limit)
+ break; /* property is the same all the way to the beginning/end */
+ extent = extent_at (pos, object, prop, 0, at_flag, 0);
+ /* If we only want text-prop extents, ignore all others */
+ if (text_props_only && !NILP (extent) &&
+ NILP (Fextent_property (extent, Qtext_prop, Qnil)))
+ extent = Qnil;
if ((NILP (extent) && !NILP (value)) ||
(!NILP (extent) && !EQ (value,
Fextent_property (extent, prop, Qnil))))
@@ -7119,43 +7135,24 @@
return limit;
}
-Bytexpos
-previous_single_property_change (Bytexpos pos, Lisp_Object prop,
- Lisp_Object object, Bytexpos limit)
+static Lisp_Object
+next_previous_single_property_change_fn (Lisp_Object pos, Lisp_Object prop,
+ Lisp_Object object, Lisp_Object limit,
+ Boolint next, Boolint text_props_only)
{
- Lisp_Object extent, value;
- int limit_was_nil;
-
- if (limit < 0)
- {
- limit = buffer_or_string_accessible_begin_byte (object);
- limit_was_nil = 1;
- }
- else
- limit_was_nil = 0;
-
- extent = extent_at (pos, object, prop, 0, EXTENT_AT_BEFORE, 0);
- if (!NILP (extent))
- value = Fextent_property (extent, prop, Qnil);
- else
- value = Qnil;
+ Bytexpos xpos;
+ Bytexpos blim;
- while (1)
- {
- pos = extent_find_beginning_of_run (object, pos, 1);
- if (pos <= limit)
- break; /* property is the same all the way to the end */
- extent = extent_at (pos, object, prop, 0, EXTENT_AT_BEFORE, 0);
- if ((NILP (extent) && !NILP (value)) ||
- (!NILP (extent) && !EQ (value,
- Fextent_property (extent, prop, Qnil))))
- return pos;
- }
+ object = decode_buffer_or_string (object);
+ xpos = get_buffer_or_string_pos_byte (object, pos, 0);
+ blim = !NILP (limit) ? get_buffer_or_string_pos_byte (object, limit, 0) : -1;
+ blim = next_previous_single_property_change (xpos, prop, object, blim,
+ next, text_props_only);
- if (limit_was_nil)
- return -1;
+ if (blim < 0)
+ return Qnil;
else
- return limit;
+ return make_int (buffer_or_string_bytexpos_to_charxpos (object, blim));
}
DEFUN ("next-single-property-change", Fnext_single_property_change,
@@ -7175,22 +7172,14 @@
a particular character, it is undefined which value is considered to be
the value of PROP. (Note that this situation will not happen if you always
use the text-property primitives.)
+
+This function looks only at extents created using the text-property primitives.
+To look at all extents, use `next-single-char-property-change'.
*/
(pos, prop, object, limit))
{
- Bytexpos xpos;
- Bytexpos blim;
-
- object = decode_buffer_or_string (object);
- xpos = get_buffer_or_string_pos_byte (object, pos, 0);
- blim = !NILP (limit) ? get_buffer_or_string_pos_byte (object, limit, 0) : -1;
-
- blim = next_single_property_change (xpos, prop, object, blim);
-
- if (blim < 0)
- return Qnil;
- else
- return make_int (buffer_or_string_bytexpos_to_charxpos (object, blim));
+ return next_previous_single_property_change_fn (pos, prop, object, limit,
+ 1, 1);
}
DEFUN ("previous-single-property-change", Fprevious_single_property_change,
@@ -7210,22 +7199,69 @@
a particular character, it is undefined which value is considered to be
the value of PROP. (Note that this situation will not happen if you always
use the text-property primitives.)
+
+This function looks only at extents created using the text-property primitives.
+To look at all extents, use `next-single-char-property-change'.
*/
(pos, prop, object, limit))
{
- Bytexpos xpos;
- Bytexpos blim;
+ return next_previous_single_property_change_fn (pos, prop, object, limit,
+ 0, 1);
+}
- object = decode_buffer_or_string (object);
- xpos = get_buffer_or_string_pos_byte (object, pos, 0);
- blim = !NILP (limit) ? get_buffer_or_string_pos_byte (object, limit, 0) : -1;
+DEFUN ("next-single-char-property-change",
Fnext_single_char_property_change,
+ 2, 4, 0, /*
+Return the position of next property change for a specific property.
+Scans characters forward from POS till it finds a change in the PROP
+ property, then returns the position of the change. The optional third
+ argument OBJECT is the buffer or string to scan (defaults to the current
+ buffer).
+The property values are compared with `eq'.
+Return nil if the property is constant all the way to the end of OBJECT.
+If the value is non-nil, it is a position greater than POS, never equal.
- blim = previous_single_property_change (xpos, prop, object, blim);
+If the optional fourth argument LIMIT is non-nil, don't search
+ past position LIMIT; return LIMIT if nothing is found before LIMIT.
+If two or more extents with conflicting non-nil values for PROP overlap
+ a particular character, it is undefined which value is considered to be
+ the value of PROP. (Note that this situation will not happen if you always
+ use the text-property primitives.)
- if (blim < 0)
- return Qnil;
- else
- return make_int (buffer_or_string_bytexpos_to_charxpos (object, blim));
+This function looks at all extents. To look at only extents created using the
+text-property primitives, use `next-single-char-property-change'.
+*/
+ (pos, prop, object, limit))
+{
+ return next_previous_single_property_change_fn (pos, prop, object, limit,
+ 1, 0);
+}
+
+DEFUN ("previous-single-char-property-change",
+ Fprevious_single_char_property_change,
+ 2, 4, 0, /*
+Return the position of next property change for a specific property.
+Scans characters backward from POS till it finds a change in the PROP
+ property, then returns the position of the change. The optional third
+ argument OBJECT is the buffer or string to scan (defaults to the current
+ buffer).
+The property values are compared with `eq'.
+Return nil if the property is constant all the way to the start of OBJECT.
+If the value is non-nil, it is a position less than POS, never equal.
+
+If the optional fourth argument LIMIT is non-nil, don't search back
+ past position LIMIT; return LIMIT if nothing is found until LIMIT.
+If two or more extents with conflicting non-nil values for PROP overlap
+ a particular character, it is undefined which value is considered to be
+ the value of PROP. (Note that this situation will not happen if you always
+ use the text-property primitives.)
+
+This function looks at all extents. To look at only extents created using the
+text-property primitives, use `next-single-char-property-change'.
+*/
+ (pos, prop, object, limit))
+{
+ return next_previous_single_property_change_fn (pos, prop, object, limit,
+ 0, 0);
}
#ifdef MEMORY_USAGE_STATS
@@ -7364,6 +7400,8 @@
DEFSUBR (Ftext_prop_extent_paste_function);
DEFSUBR (Fnext_single_property_change);
DEFSUBR (Fprevious_single_property_change);
+ DEFSUBR (Fnext_single_char_property_change);
+ DEFSUBR (Fprevious_single_char_property_change);
}
void
1.18.6.1 +6 -5 XEmacs/xemacs/src/extents.h
Index: extents.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/extents.h,v
retrieving revision 1.18
retrieving revision 1.18.6.1
diff -u -r1.18 -r1.18.6.1
--- extents.h 2002/06/20 21:18:30 1.18
+++ extents.h 2005/03/15 05:24:09 1.18.6.1
@@ -110,7 +110,7 @@
EXFUN (Fmake_extent, 3);
EXFUN (Fnext_extent_change, 2);
EXFUN (Fprevious_extent_change, 2);
-EXFUN (Fprevious_single_property_change, 4);
+EXFUN (Fprevious_single_char_property_change, 4);
EXFUN (Fset_extent_endpoints, 4);
EXFUN (Fset_extent_parent, 2);
EXFUN (Fset_extent_property, 3);
@@ -125,10 +125,11 @@
Bytexpos extent_endpoint_byte (EXTENT extent, int endp);
Charxpos extent_endpoint_char (EXTENT extent, int endp);
-Bytexpos next_single_property_change (Bytexpos pos, Lisp_Object prop,
- Lisp_Object object, Bytexpos limit);
-Bytexpos previous_single_property_change (Bytexpos pos, Lisp_Object prop,
- Lisp_Object object, Bytexpos limit);
+Bytexpos next_previous_single_property_change (Bytexpos pos, Lisp_Object prop,
+ Lisp_Object object,
+ Bytexpos limit,
+ Boolint next,
+ Boolint text_props_only);
Lisp_Object get_char_property (Bytexpos position, Lisp_Object prop,
Lisp_Object object, enum extent_at_flag fl,
int text_props_only);
1.43.2.5 +2 -2 XEmacs/xemacs/src/faces.c
Index: faces.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/faces.c,v
retrieving revision 1.43.2.4
retrieving revision 1.43.2.5
diff -u -r1.43.2.4 -r1.43.2.5
--- faces.c 2005/03/05 18:09:28 1.43.2.4
+++ faces.c 2005/03/15 05:24:09 1.43.2.5
@@ -318,7 +318,7 @@
if (EQ (keyw, Qname))
name_seen = 1;
else
- abort ();
+ ABORT ();
}
if (!name_seen)
@@ -2015,7 +2015,7 @@
Lisp_Object inst_list = Qnil;
#if defined (HAVE_X_WINDOWS) || defined (HAVE_GTK)
-
+
const Ascbyte *fonts[] =
{
#ifdef USE_XFT
1.41.2.1 +44 -32 XEmacs/xemacs/src/file-coding.c
Index: file-coding.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/file-coding.c,v
retrieving revision 1.41
retrieving revision 1.41.2.1
diff -u -r1.41 -r1.41.2.1
--- file-coding.c 2004/11/04 23:06:28 1.41
+++ file-coding.c 2005/03/15 05:24:10 1.41.2.1
@@ -106,7 +106,8 @@
static coding_system_type_entry_dynarr *the_coding_system_type_entry_dynarr;
static const struct memory_description cste_description_1[] = {
- { XD_BLOCK_PTR, offsetof (coding_system_type_entry, meths), 1,
&coding_system_methods_description },
+ { XD_BLOCK_PTR, offsetof (coding_system_type_entry, meths), 1,
+ { &coding_system_methods_description } },
{ XD_END }
};
@@ -171,7 +172,7 @@
=
{
{ XD_BLOCK_PTR, offsetof (struct detector, cats), 1,
- &detector_category_dynarr_description },
+ { &detector_category_dynarr_description } },
{ XD_END }
};
@@ -346,13 +347,13 @@
static const struct memory_description coding_system_description[] =
{
{ XD_BLOCK_PTR, offsetof (Lisp_Coding_System, methods), 1,
- &coding_system_methods_description },
+ { &coding_system_methods_description } },
#define MARKED_SLOT(x) { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, x) },
#define MARKED_SLOT_ARRAY(slot, size) \
{ XD_LISP_OBJECT_ARRAY, offsetof (Lisp_Coding_System, slot), size },
#include "coding-system-slots.h"
{ XD_BLOCK_ARRAY, offsetof (Lisp_Coding_System, data), 1,
- coding_system_extra_description_map },
+ { coding_system_extra_description_map } },
{ XD_END }
};
@@ -730,7 +731,7 @@
{
switch (type)
{
- default: abort ();
+ default: ABORT ();
case EOL_LF: return Qlf;
case EOL_CRLF: return Qcrlf;
case EOL_CR: return Qcr;
@@ -1579,7 +1580,7 @@
case EOL_LF: new_coding_system = CODING_SYSTEM_EOL_LF (cs); break;
case EOL_CR: new_coding_system = CODING_SYSTEM_EOL_CR (cs); break;
case EOL_CRLF: new_coding_system = CODING_SYSTEM_EOL_CRLF (cs); break;
- default: abort (); return Qnil;
+ default: ABORT (); return Qnil;
}
return NILP (new_coding_system) ? coding_system : new_coding_system;
@@ -1727,8 +1728,10 @@
extern const struct sized_memory_description undecided_coding_stream_description;
static const struct memory_description coding_stream_data_description_1 []= {
- { XD_BLOCK_PTR, chain_coding_system, 1, &chain_coding_stream_description},
- { XD_BLOCK_PTR, undecided_coding_system, 1,
&undecided_coding_stream_description},
+ { XD_BLOCK_PTR, chain_coding_system, 1,
+ { &chain_coding_stream_description } },
+ { XD_BLOCK_PTR, undecided_coding_system, 1,
+ { &undecided_coding_stream_description } },
{ XD_END }
};
@@ -1742,7 +1745,7 @@
{ XD_LISP_OBJECT, offsetof (struct coding_stream, codesys) },
{ XD_LISP_OBJECT, offsetof (struct coding_stream, other_end) },
{ XD_UNION, offsetof (struct coding_stream, data),
- XD_INDIRECT (0, 0), &coding_stream_data_description },
+ XD_INDIRECT (0, 0), { &coding_stream_data_description } },
{ XD_END }
};
@@ -2330,7 +2333,7 @@
static const struct memory_description chain_coding_system_description[] = {
{ XD_INT, offsetof (struct chain_coding_system, count) },
{ XD_BLOCK_PTR, offsetof (struct chain_coding_system, chain),
- XD_INDIRECT (0, 0), &lisp_object_description },
+ XD_INDIRECT (0, 0), { &lisp_object_description } },
{ XD_LISP_OBJECT, offsetof (struct chain_coding_system,
canonicalize_after_coding) },
{ XD_END }
@@ -2339,7 +2342,7 @@
static const struct memory_description chain_coding_stream_description_1 [] = {
{ XD_INT, offsetof (struct chain_coding_stream, lstream_count) },
{ XD_BLOCK_PTR, offsetof (struct chain_coding_stream, lstreams),
- XD_INDIRECT (0, 0), &lisp_object_description },
+ XD_INDIRECT (0, 0), { &lisp_object_description } },
{ XD_END }
};
@@ -2679,7 +2682,7 @@
case 3: return DECODES_CHARACTER_TO_CHARACTER;
}
- abort ();
+ ABORT ();
return DECODES_BYTE_TO_BYTE;
}
@@ -2836,7 +2839,7 @@
data->subtype == EOL_CRLF ? "crlf" :
data->subtype == EOL_CR ? "cr" :
data->subtype == EOL_AUTODETECT ? "nil" :
- (abort(), ""));
+ (ABORT(), ""));
}
static enum source_sink_type
@@ -2884,7 +2887,7 @@
case EOL_CRLF: return Qcrlf;
case EOL_CR: return Qcr;
case EOL_AUTODETECT: return Qnil;
- default: abort ();
+ default: ABORT ();
}
}
@@ -3036,7 +3039,7 @@
case EOL_CRLF: return Fget_coding_system (Qconvert_eol_crlf);
case EOL_CR: return Fget_coding_system (Qconvert_eol_cr);
case EOL_AUTODETECT: return str->codesys;
- default: abort (); return Qnil;
+ default: ABORT (); return Qnil;
}
}
@@ -3085,7 +3088,7 @@
static const struct memory_description undecided_coding_stream_description_1 [] = {
{ XD_LISP_OBJECT, offsetof (struct undecided_coding_stream, actual) },
{ XD_BLOCK_ARRAY, offsetof (struct undecided_coding_stream, c),
- 1, &chain_coding_stream_description },
+ 1, { &chain_coding_stream_description } },
{ XD_END }
};
@@ -3256,7 +3259,7 @@
return Dynarr_at (cats, j).sym;
}
- abort ();
+ ABORT ();
return Qnil; /* (usually) not reached */
}
@@ -3277,7 +3280,7 @@
#undef FROB
}
- abort ();
+ ABORT ();
return Qnil; /* (usually) not reached */
}
@@ -3541,10 +3544,10 @@
blanks). If found, return it, otherwise nil. */
static Lisp_Object
-snarf_coding_system (const Ibyte *p, Bytecount len)
+snarf_coding_system (const UExtbyte *p, Bytecount len)
{
Bytecount n;
- Ibyte *name;
+ UExtbyte *name;
while (*p == ' ' || *p == '\t') p++, len--;
len = min (len, 1000);
@@ -3563,7 +3566,9 @@
if (n > 0)
{
name[n] = '\0';
- return find_coding_system_for_text_file (intern_int (name), 0);
+ /* This call to intern_int() is OK because we already verified that
+ there are only ASCII characters in the string */
+ return find_coding_system_for_text_file (intern_int ((Ibyte *) name), 0);
}
return Qnil;
@@ -3598,6 +3603,7 @@
{
const UExtbyte *p;
const UExtbyte *scan_end;
+ Bytecount cookie_len;
/* Look for initial "-*-"; mode line prefix */
for (p = data,
@@ -3639,20 +3645,26 @@
break;
}
-#if 0
- /* #### Totally wrong as is, rewrite */
- /* Look for initial ;;;###coding system */
+ /* Look for ;;;###coding system */
+
+ cookie_len = LENGTH (";;;###coding system: ");
+ for (p = data,
+ scan_end = data + len - cookie_len;
+ p <= scan_end;
+ p++)
{
- Bytecount ind = fast_string_match (QScoding_system_cookie,
- data, Qnil, 0, len, 0, ERROR_ME_NOT,
- 1);
- if (ind >= 0)
- return
- snarf_coding_system (data + ind + LENGTH (";;;###coding system: "),
- len - ind - LENGTH (";;;###coding system: "));
+ if (*p == ';' && !memcmp (p, ";;;###coding system: ",
cookie_len))
+ {
+ const UExtbyte *suffix;
+
+ p += cookie_len;
+ suffix = p;
+ while (suffix < scan_end && !isspace (*suffix))
+ suffix++;
+ return snarf_coding_system (p, suffix - p);
+ }
}
-#endif /* 0 */
return Qnil;
}
1.101.2.2 +95 -29 XEmacs/xemacs/src/fileio.c
Index: fileio.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/fileio.c,v
retrieving revision 1.101.2.1
retrieving revision 1.101.2.2
diff -u -r1.101.2.1 -r1.101.2.2
--- fileio.c 2004/12/11 05:16:10 1.101.2.1
+++ fileio.c 2005/03/15 05:24:12 1.101.2.2
@@ -23,6 +23,7 @@
/* More syncing: FSF Emacs 19.34.6 by Marc Paquette <marcpa(a)cam.org>
(Note: Sync messages from Marc Paquette may indicate
incomplete synching, so beware.) */
+/* Some functions synched with FSF 21.0.103. */
/* Mule-ized completely except for the #if 0-code including decrypt-string
and encrypt-string. --ben 7-2-00 */
/* #if 0-code Mule-ized, 2-22-03. --ben */
@@ -38,6 +39,7 @@
#include "frame.h"
#include "insdel.h"
#include "lstream.h"
+#include "profile.h"
#include "process.h"
#include "redisplay.h"
#include "sysdep.h"
@@ -129,6 +131,8 @@
Lisp_Object Qcompute_buffer_file_truename;
+Lisp_Object QSin_expand_file_name;
+
EXFUN (Frunning_temacs_p, 0);
/* DATA can be anything acceptable to signal_error ().
@@ -325,6 +329,25 @@
}
+
+Ibyte *
+find_end_of_directory_component (const Ibyte *path, Bytecount len)
+{
+ const Ibyte *p = path + len;
+
+ while (p != path && !IS_DIRECTORY_SEP (p[-1])
+#ifdef WIN32_FILENAMES
+ /* only recognise drive specifier at the beginning */
+ && !(p[-1] == ':'
+ /* handle the "/:d:foo" and "/:foo" cases correctly */
+ && ((p == path + 2 && !IS_DIRECTORY_SEP (*path))
+ || (p == path + 4 && IS_DIRECTORY_SEP (*path))))
+#endif
+ ) p--;
+
+ return (Ibyte *) p;
+}
+
DEFUN ("file-name-directory", Ffile_name_directory, 1, 1, 0, /*
Return the directory component in file name FILENAME.
Return nil if FILENAME does not include a directory.
@@ -352,17 +375,7 @@
#endif
beg = XSTRING_DATA (filename);
/* XEmacs: no need to alloca-copy here */
- p = beg + XSTRING_LENGTH (filename);
-
- while (p != beg && !IS_DIRECTORY_SEP (p[-1])
-#ifdef WIN32_FILENAMES
- /* only recognise drive specifier at the beginning */
- && !(p[-1] == ':'
- /* handle the "/:d:foo" and "/:foo" cases correctly */
- && ((p == beg + 2 && !IS_DIRECTORY_SEP (*beg))
- || (p == beg + 4 && IS_DIRECTORY_SEP (*beg))))
-#endif
- ) p--;
+ p = find_end_of_directory_component (beg, XSTRING_LENGTH (filename));
if (p == beg)
return Qnil;
@@ -522,7 +535,11 @@
return call2_check_string (handler, Qfile_name_as_directory, filename);
buf = alloca_ibytes (XSTRING_LENGTH (filename) + 10);
- return build_intstring (file_name_as_directory (buf, XSTRING_DATA (filename)));
+ file_name_as_directory (buf, XSTRING_DATA (filename));
+ if (qxestrcmp (buf, XSTRING_DATA (filename)))
+ return build_intstring (buf);
+ else
+ return filename;
}
/*
@@ -735,7 +752,10 @@
int length;
Lisp_Object handler = Qnil;
struct gcpro gcpro1, gcpro2, gcpro3;
+ PROFILE_DECLARE ();
+ PROFILE_RECORD_ENTERING_SECTION (QSin_expand_file_name);
+
/* both of these get set below */
GCPRO3 (name, default_directory, handler);
@@ -745,8 +765,10 @@
call the corresponding file handler. */
handler = Ffind_file_name_handler (name, Qexpand_file_name);
if (!NILP (handler))
- RETURN_UNGCPRO (call3_check_string (handler, Qexpand_file_name,
- name, default_directory));
+ RETURN_UNGCPRO_EXIT_PROFILING (QSin_expand_file_name,
+ call3_check_string
+ (handler, Qexpand_file_name,
+ name, default_directory));
/* Use the buffer's default-directory if DEFAULT_DIRECTORY is omitted. */
if (NILP (default_directory))
@@ -762,8 +784,9 @@
{
handler = Ffind_file_name_handler (default_directory, Qexpand_file_name);
if (!NILP (handler))
- RETURN_UNGCPRO (call3 (handler, Qexpand_file_name,
- name, default_directory));
+ RETURN_UNGCPRO_EXIT_PROFILING (QSin_expand_file_name,
+ call3 (handler, Qexpand_file_name,
+ name, default_directory));
}
o = XSTRING_DATA (default_directory);
@@ -927,13 +950,14 @@
}
}
xfree (newnm, Ibyte *);
- RETURN_UNGCPRO (name);
+ RETURN_UNGCPRO_EXIT_PROFILING (QSin_expand_file_name, name);
}
#endif /* WIN32_FILENAMES */
#ifndef WIN32_NATIVE
if (nm == XSTRING_DATA (name))
- RETURN_UNGCPRO (name);
- RETURN_UNGCPRO (build_intstring (nm));
+ RETURN_UNGCPRO_EXIT_PROFILING (QSin_expand_file_name, name);
+ RETURN_UNGCPRO_EXIT_PROFILING (QSin_expand_file_name,
+ build_intstring (nm));
#endif /* not WIN32_NATIVE */
}
}
@@ -1301,10 +1325,11 @@
Lisp_Object result = build_intstring (newtarget);
xfree (newtarget, Ibyte *);
- RETURN_UNGCPRO (result);
+ RETURN_UNGCPRO_EXIT_PROFILING (QSin_expand_file_name, result);
}
#else /* not WIN32_FILENAMES */
- RETURN_UNGCPRO (make_string (target, o - target));
+ RETURN_UNGCPRO_EXIT_PROFILING (QSin_expand_file_name,
+ make_string (target, o - target));
#endif /* not WIN32_FILENAMES */
}
@@ -1360,7 +1385,7 @@
p = path;
/* Try doing it all at once. */
- if (!qxe_realpath (path, resolved_path))
+ if (!qxe_realpath (path, resolved_path, 0))
{
/* Didn't resolve it -- have to do it one component at a time. */
/* "realpath" is a typically useless, stupid un*x piece of crap.
@@ -1379,7 +1404,11 @@
resolved_name are undefined."
Since we depend on undocumented semantics of various system
- realpath()s, we just use our own version in realpath.c. */
+ realpath()s, we just use our own version in realpath.c.
+
+ Note also that our own version differs in its semantics from any
+ standard version, since it accepts and returns internal-format
+ text, not external-format. */
for (;;)
{
Ibyte *pos;
@@ -1402,7 +1431,7 @@
if (p != pos)
p = 0;
- if (qxe_realpath (path, resolved_path))
+ if (qxe_realpath (path, resolved_path, 0))
{
if (p)
*p = DIRECTORY_SEP;
@@ -2338,7 +2367,7 @@
if (!NILP (handler))
RETURN_UNGCPRO (call2 (handler, Qfile_readable_p, abspath));
-#if defined(WIN32_FILENAMES)
+#if defined (WIN32_FILENAMES)
/* Under MS-DOS and Windows, open does not work for directories. */
UNGCPRO;
if (qxe_access (XSTRING_DATA (abspath), 0) == 0)
@@ -2443,9 +2472,42 @@
val = make_string (buf, valsize);
xfree (buf, Ibyte *);
return val;
-#else /* not HAVE_READLINK */
+#elif defined (WIN32_NATIVE)
+ if (mswindows_shortcuts_are_symlinks)
+ {
+ /* We want to resolve the directory component and leave the rest
+ alone. */
+ Ibyte *path = XSTRING_DATA (filename);
+ Ibyte *dirend =
+ find_end_of_directory_component (path, XSTRING_LENGTH (filename));
+ Ibyte *fname;
+ DECLARE_EISTRING (dir);
+
+ if (dirend != path)
+ {
+ Ibyte *resdir;
+ DECLARE_EISTRING (resname);
+
+ eicpy_raw (dir, path, dirend - path);
+ PATHNAME_RESOLVE_LINKS (eidata (dir), resdir);
+ eicpy_rawz (resname, resdir);
+ eicat_rawz (resname, dirend);
+ path = eidata (resname);
+ }
+
+ fname = mswindows_read_link (path);
+ if (!fname)
+ return Qnil;
+ {
+ Lisp_Object val = build_intstring (fname);
+ xfree (fname, Ibyte *);
+ return val;
+ }
+ }
+ return Qnil;
+#else
return Qnil;
-#endif /* not HAVE_READLINK */
+#endif
}
DEFUN ("file-directory-p", Ffile_directory_p, 1, 1, 0, /*
@@ -2499,7 +2561,7 @@
return call2 (handler, Qfile_accessible_directory_p,
filename);
-#if !defined(WIN32_NATIVE)
+#if !defined (WIN32_NATIVE)
if (NILP (Ffile_directory_p (filename)))
return (Qnil);
else
@@ -3913,7 +3975,7 @@
and if so, tries to avoid touching lisp objects.
The only time that Fdo_auto_save() is called while GC is in progress
- is if we're going down, as a result of an abort() or a kill signal.
+ is if we're going down, as a result of an ABORT() or a kill signal.
It's fairly important that we generate autosave files in that case!
*/
@@ -4300,6 +4362,10 @@
void
vars_of_fileio (void)
{
+ QSin_expand_file_name =
+ build_msg_string ("(in expand-file-name)");
+ staticpro (&QSin_expand_file_name);
+
DEFVAR_LISP ("auto-save-file-format", &Vauto_save_file_format /*
*Format in which to write auto-save files.
Should be a list of symbols naming formats that are defined in `format-alist'.
1.61.2.1 +7 -7 XEmacs/xemacs/src/fns.c
Index: fns.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/fns.c,v
retrieving revision 1.61
retrieving revision 1.61.2.1
diff -u -r1.61 -r1.61.2.1
--- fns.c 2004/11/04 23:06:29 1.61
+++ fns.c 2005/03/15 05:24:14 1.61.2.1
@@ -741,7 +741,7 @@
break;
default:
val = Qnil;
- abort ();
+ ABORT ();
}
}
@@ -1031,7 +1031,7 @@
}
else
{
- abort (); /* unreachable, since Flength (sequence) did not get
+ ABORT (); /* unreachable, since Flength (sequence) did not get
an error */
return Qnil;
}
@@ -3254,7 +3254,7 @@
}
}
else
- abort (); /* unreachable, since Flength (sequence) did not get an error */
+ ABORT (); /* unreachable, since Flength (sequence) did not get an error */
if (vals)
UNGCPRO;
@@ -3873,7 +3873,7 @@
encoded_length = base64_encode_1 (XLSTREAM (input), encoded,
NILP (no_line_break));
if (encoded_length > allength)
- abort ();
+ ABORT ();
Lstream_delete (XLSTREAM (input));
/* Now we have encoded the region, so we insert the new contents
@@ -3915,7 +3915,7 @@
encoded_length = base64_encode_1 (XLSTREAM (input), encoded,
NILP (no_line_break));
if (encoded_length > allength)
- abort ();
+ ABORT ();
Lstream_delete (XLSTREAM (input));
result = make_string (encoded, encoded_length);
unbind_to (speccount);
@@ -3948,7 +3948,7 @@
decoded = (Ibyte *) MALLOC_OR_ALLOCA (length * MAX_ICHAR_LEN);
decoded_length = base64_decode_1 (XLSTREAM (input), decoded,
&cc_decoded_length);
if (decoded_length > length * MAX_ICHAR_LEN)
- abort ();
+ ABORT ();
Lstream_delete (XLSTREAM (input));
/* Now we have decoded the region, so we insert the new contents
@@ -3989,7 +3989,7 @@
decoded_length = base64_decode_1 (XLSTREAM (input), decoded,
&cc_decoded_length);
if (decoded_length > length * MAX_ICHAR_LEN)
- abort ();
+ ABORT ();
Lstream_delete (XLSTREAM (input));
result = make_string (decoded, decoded_length);
1.15.2.1 +7 -7 XEmacs/xemacs/src/font-lock.c
Index: font-lock.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/font-lock.c,v
retrieving revision 1.15
retrieving revision 1.15.2.1
diff -u -r1.15 -r1.15.2.1
--- font-lock.c 2004/11/04 23:06:30 1.15
+++ font-lock.c 2005/03/15 05:24:15 1.15.2.1
@@ -529,7 +529,7 @@
context_cache.context = context_comment;
context_cache.ccontext = ccontext_none;
context_cache.style = SINGLE_SYNTAX_STYLE (syncode);
- if (context_cache.style == comment_style_none) abort ();
+ if (context_cache.style == comment_style_none) ABORT ();
}
break;
@@ -621,7 +621,7 @@
{
context_cache.ccontext = ccontext_start2;
context_cache.style = SYNTAX_START_STYLE (prev_syncode, syncode);
- if (context_cache.style == comment_style_none) abort ();
+ if (context_cache.style == comment_style_none) ABORT ();
}
else if ((SYNTAX_CODE_COMMENT_BITS (syncode) &
SYNTAX_FIRST_CHAR_START) &&
@@ -659,18 +659,18 @@
of a comment-end sequence. ie, '/xxx foo xxx/' or
'/xxx foo x/', where 'x' = '*' -- mct */
{
- if (context_cache.style == comment_style_none) abort ();
+ if (context_cache.style == comment_style_none) ABORT ();
context_cache.ccontext = ccontext_end1;
}
else if (context_cache.ccontext == ccontext_start1)
{
- if (context_cache.context != context_none) abort ();
+ if (context_cache.context != context_none) ABORT ();
context_cache.ccontext = ccontext_none;
}
else if (context_cache.ccontext == ccontext_end1)
{
- if (context_cache.context != context_block_comment) abort ();
+ if (context_cache.context != context_block_comment) ABORT ();
context_cache.context = context_none;
context_cache.ccontext = ccontext_start2;
}
@@ -679,7 +679,7 @@
context_cache.context == context_none)
{
context_cache.context = context_block_comment;
- if (context_cache.style == comment_style_none) abort ();
+ if (context_cache.style == comment_style_none) ABORT ();
}
else if (context_cache.ccontext == ccontext_none &&
context_cache.context == context_block_comment)
@@ -703,7 +703,7 @@
case context_block_comment: return Qblock_comment;
case context_generic_comment: return Qblock_comment;
case context_generic_string: return Qstring;
- default: abort (); return Qnil; /* suppress compiler warning */
+ default: ABORT (); return Qnil; /* suppress compiler warning */
}
}
1.19.2.1 +2 -2 XEmacs/xemacs/src/frame-gtk.c
Index: frame-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/frame-gtk.c,v
retrieving revision 1.19
retrieving revision 1.19.2.1
diff -u -r1.19 -r1.19.2.1
--- frame-gtk.c 2004/09/20 19:19:44 1.19
+++ frame-gtk.c 2005/03/15 05:24:15 1.19.2.1
@@ -1111,7 +1111,7 @@
}
else
{
- /* abort()? */
+ /* ABORT()? */
stderr_out ("POINTER_IMAGE_INSTANCEP (f->pointer) failed!\n");
}
}
@@ -1423,7 +1423,7 @@
}
}
else
- abort ();
+ ABORT ();
#ifdef HAVE_TOOLBARS
/* Setting the background clears the entire frame area
1.68.2.5 +10 -10 XEmacs/xemacs/src/frame-x.c
Index: frame-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/frame-x.c,v
retrieving revision 1.68.2.4
retrieving revision 1.68.2.5
diff -u -r1.68.2.4 -r1.68.2.5
--- frame-x.c 2005/03/09 06:31:39 1.68.2.4
+++ frame-x.c 2005/03/15 05:24:16 1.68.2.5
@@ -221,14 +221,14 @@
void
x_wm_mark_shell_size_user_specified (Widget wmshell)
{
- if (! XtIsWMShell (wmshell)) abort ();
+ if (! XtIsWMShell (wmshell)) ABORT ();
EmacsShellSetSizeUserSpecified (wmshell);
}
void
x_wm_mark_shell_position_user_specified (Widget wmshell)
{
- if (! XtIsWMShell (wmshell)) abort ();
+ if (! XtIsWMShell (wmshell)) ABORT ();
EmacsShellSetPositionUserSpecified (wmshell);
}
@@ -237,7 +237,7 @@
void
x_wm_set_shell_iconic_p (Widget shell, int iconic_p)
{
- if (! XtIsWMShell (shell)) abort ();
+ if (! XtIsWMShell (shell)) ABORT ();
/* Because of questionable logic in Shell.c, this sequence can't work:
@@ -267,9 +267,9 @@
Arg al [2];
if (!XtIsWMShell (wmshell))
- abort ();
+ ABORT ();
if (cw <= 0 || ch <= 0)
- abort ();
+ ABORT ();
XtSetArg (al[0], XtNwidthInc, cw);
XtSetArg (al[1], XtNheightInc, ch);
@@ -282,7 +282,7 @@
Arg al [2];
if (!XtIsWMShell (wmshell))
- abort ();
+ ABORT ();
#ifdef DEBUG_GEOMETRY_MANAGEMENT
/* See comment in EmacsShell.c */
printf ("x_wm_set_variable_size: %d %d\n", width, height);
@@ -351,7 +351,7 @@
XClassHint classhint;
if (!XtIsWMShell (shell))
- abort ();
+ ABORT ();
XtGetApplicationNameAndClass (dpy, &app_name, &app_class);
classhint.res_name = frame_name;
@@ -368,7 +368,7 @@
struct device *d = XDEVICE (FRAME_DEVICE (f));
if (!XtIsWMShell (w))
- abort ();
+ ABORT ();
if (NILP (DEVICE_X_WM_COMMAND_FRAME (d)))
{
@@ -1557,7 +1557,7 @@
/* OK, we're a top-level shell. */
if (!XtIsWMShell (wmshell))
- abort ();
+ ABORT ();
/* If the EmacsFrame doesn't have a geometry but the shell does,
treat that as the geometry of the frame.
@@ -2701,7 +2701,7 @@
}
}
else
- abort ();
+ ABORT ();
XtSetValues (FRAME_X_TEXT_WIDGET (frm), al, ac);
1.65.2.1 +26 -26 XEmacs/xemacs/src/frame.c
Index: frame.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/frame.c,v
retrieving revision 1.65
retrieving revision 1.65.2.1
diff -u -r1.65 -r1.65.2.1
--- frame.c 2004/11/04 23:06:31 1.65
+++ frame.c 2005/03/15 05:24:17 1.65.2.1
@@ -144,13 +144,13 @@
static const struct memory_description frame_data_description_1 []= {
#ifdef HAVE_GTK
- { XD_BLOCK_PTR, gtk_console, 1, >k_frame_data_description},
+ { XD_BLOCK_PTR, gtk_console, 1, { >k_frame_data_description} },
#endif
#ifdef HAVE_MS_WINDOWS
- { XD_BLOCK_PTR, mswindows_console, 1, &mswindows_frame_data_description},
+ { XD_BLOCK_PTR, mswindows_console, 1, { &mswindows_frame_data_description} },
#endif
#ifdef HAVE_X_WINDOWS
- { XD_BLOCK_PTR, x_console, 1, &x_frame_data_description},
+ { XD_BLOCK_PTR, x_console, 1, { &x_frame_data_description} },
#endif
{ XD_END }
};
@@ -163,7 +163,7 @@
static const struct memory_description expose_ignore_description_1 [] = {
{ XD_BLOCK_PTR, offsetof (struct expose_ignore, next),
- 1, &expose_ignore_description },
+ 1, { &expose_ignore_description } },
{ XD_END }
};
@@ -173,7 +173,7 @@
};
static const struct memory_description display_line_dynarr_pointer_description_1 []= {
- { XD_BLOCK_PTR, 0, 1, &display_line_dynarr_description},
+ { XD_BLOCK_PTR, 0, 1, { &display_line_dynarr_description} },
{ XD_END }
};
@@ -189,9 +189,9 @@
#include "frameslots.h"
{ XD_BLOCK_PTR, offsetof (struct frame, subwindow_exposures),
- 1, &expose_ignore_description },
+ 1, { &expose_ignore_description } },
{ XD_BLOCK_PTR, offsetof (struct frame, subwindow_exposures_tail),
- 1, &expose_ignore_description },
+ 1, { &expose_ignore_description } },
#ifdef HAVE_SCROLLBARS
{ XD_LISP_OBJECT, offsetof (struct frame, sb_vcache) },
@@ -199,14 +199,14 @@
#endif /* HAVE_SCROLLBARS */
{ XD_BLOCK_ARRAY, offsetof (struct frame, current_display_lines),
- 4, &display_line_dynarr_pointer_description },
+ 4, { &display_line_dynarr_pointer_description } },
{ XD_BLOCK_ARRAY, offsetof (struct frame, desired_display_lines),
- 4, &display_line_dynarr_pointer_description },
+ 4, { &display_line_dynarr_pointer_description } },
{ XD_BLOCK_PTR, offsetof (struct frame, framemeths), 1,
- &console_methods_description },
+ { &console_methods_description } },
{ XD_UNION, offsetof (struct frame, frame_data),
- XD_INDIRECT (0, 0), &frame_data_description },
+ XD_INDIRECT (0, 0), { &frame_data_description } },
{ XD_END }
};
@@ -881,7 +881,7 @@
/* use this instead of XFRAME (DEVICE_SELECTED_FRAME (d)) to catch
the possibility of there being no frames on the device (just created).
There is no point doing this inside of redisplay because errors
- cause an abort(), indicating a flaw in the logic, and error_check_frame()
+ cause an ABORT(), indicating a flaw in the logic, and error_check_frame()
will catch this just as well. */
struct frame *
@@ -1445,12 +1445,12 @@
FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
{
- Lisp_Object this = XCAR (frmcons);
+ Lisp_Object this_frame = XCAR (frmcons);
- if (! EQ (this, frame)
+ if (! EQ (this_frame, frame)
&& EQ (frame, (WINDOW_FRAME
(XWINDOW
- (FRAME_MINIBUF_WINDOW (XFRAME (this)))))))
+ (FRAME_MINIBUF_WINDOW (XFRAME (this_frame)))))))
{
/* We've found another frame whose minibuffer is on
this frame. */
@@ -1467,14 +1467,14 @@
FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
{
- Lisp_Object this = XCAR (frmcons);
+ Lisp_Object this_frame = XCAR (frmcons);
- if (! EQ (this, frame))
+ if (! EQ (this_frame, frame))
{
struct device *devcons_d = XDEVICE (XCAR (devcons));
if (EQ (frame, DEVMETH_OR_GIVEN (devcons_d, get_frame_parent,
- (XFRAME (this)),
+ (XFRAME (this_frame)),
Qnil)))
/* We've found a popup frame whose parent is this frame. */
gui_error
@@ -1715,22 +1715,22 @@
CONSOLE_FRAME_LOOP_NO_BREAK (frmcons, devcons, con)
{
- Lisp_Object this;
+ Lisp_Object this_frame;
struct frame *f1;
- this = XCAR (frmcons);
- f1 = XFRAME (this);
+ this_frame = XCAR (frmcons);
+ f1 = XFRAME (this_frame);
/* Consider only frames on the same console
and only those with minibuffers. */
if (FRAME_HAS_MINIBUF_P (f1))
{
- frame_with_minibuf = this;
+ frame_with_minibuf = this_frame;
if (FRAME_MINIBUF_ONLY_P (f1))
goto double_break_2;
}
- frame_on_same_console = this;
+ frame_on_same_console = this_frame;
}
double_break_2:
@@ -1743,7 +1743,7 @@
that is prohibited at the top; you can't delete surrogate
minibuffer frames. */
if (NILP (frame_with_minibuf))
- abort ();
+ ABORT ();
con->default_minibuffer_frame = frame_with_minibuf;
}
@@ -1825,7 +1825,7 @@
break;
default:
- abort (); /* method is incorrectly written */
+ ABORT (); /* method is incorrectly written */
}
return 0;
@@ -3213,7 +3213,7 @@
`left' coordinates to be recomputed even though no frame size
change occurs. --kyle */
if (in_display || hold_frame_size_changes)
- abort ();
+ ABORT ();
frame = wrap_frame (f);
1.11.2.1 +11 -10 XEmacs/xemacs/src/free-hook.c
Index: free-hook.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/free-hook.c,v
retrieving revision 1.11
retrieving revision 1.11.2.1
diff -u -r1.11 -r1.11.2.1
--- free-hook.c 2004/09/20 19:19:45 1.11
+++ free-hook.c 2005/03/15 05:24:18 1.11.2.1
@@ -131,7 +131,8 @@
#endif
EMACS_INT present = (EMACS_INT) gethash (ptr, pointer_table,
- (const void **) &size);
+ (const void **)
+ (void *) &size);
if (!present)
{
@@ -141,7 +142,7 @@
/* I originally wrote: "There's really no need to drop core."
I have seen the error of my ways. -slb */
if (strict_free_check)
- abort ();
+ ABORT ();
#endif
printf("Freeing unmalloc'ed memory at %p\n", ptr);
__free_hook = check_free;
@@ -155,7 +156,7 @@
#if !defined(__linux__)
/* See above comment. */
if (strict_free_check)
- abort ();
+ ABORT ();
#endif
printf("Freeing %p twice\n", ptr);
__free_hook = check_free;
@@ -264,7 +265,7 @@
come from malloc. */
#if !defined(__linux__)
/* see comment in check_free(). */
- abort ();
+ ABORT ();
#endif
printf("Realloc'ing unmalloc'ed pointer at %p\n", ptr);
}
@@ -445,7 +446,7 @@
note_block_input (char *file, int line)
{
note_block (file, line, block_type);
- if (interrupt_input_blocked > 2) abort();
+ if (interrupt_input_blocked > 2) ABORT();
}
note_unblock_input (char* file, int line)
@@ -485,15 +486,15 @@
if (type == ungcpro_type)
{
if (value == gcprolist) goto OK;
- if (! gcprolist) abort ();
+ if (! gcprolist) ABORT ();
if (value == gcprolist->next) goto OK;
- if (! gcprolist->next) abort ();
+ if (! gcprolist->next) ABORT ();
if (value == gcprolist->next->next) goto OK;
- if (! gcprolist->next->next) abort ();
+ if (! gcprolist->next->next) ABORT ();
if (value == gcprolist->next->next->next) goto OK;
- if (! gcprolist->next->next->next) abort ();
+ if (! gcprolist->next->next->next) ABORT ();
if (value == gcprolist->next->next->next->next) goto OK;
- abort ();
+ ABORT ();
OK:;
}
gcprohist[gcprohistptr].file = file;
1.5.2.1 +10 -10 XEmacs/xemacs/src/gccache-gtk.c
Index: gccache-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/gccache-gtk.c,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -r1.5 -r1.5.2.1
--- gccache-gtk.c 2004/05/02 04:06:59 1.5
+++ gccache-gtk.c 2005/03/15 05:24:18 1.5.2.1
@@ -91,12 +91,12 @@
};
#ifdef GCCACHE_HASH
-static unsigned long
+static Hashcode
gc_cache_hash (const void *arg)
{
const struct gcv_and_mask *gcvm = (const struct gcv_and_mask *) arg;
unsigned long *longs = (unsigned long *) &gcvm->gcv;
- unsigned long hash = gcvm->mask;
+ Hashcode hash = gcvm->mask;
unsigned int i;
/* This could look at the mask and only use the used slots in the
hash code. That would win in that we wouldn't have to initialize
@@ -104,7 +104,7 @@
the hash function to be as fast as possible; some timings should
be done. */
for (i = 0; i < (sizeof (GdkGCValues) / sizeof (unsigned long)); i++)
- hash = (hash<<1) ^ *longs++;
+ hash = (hash << 1) ^ *longs++;
return hash;
}
@@ -160,8 +160,8 @@
struct gc_cache_cell *cell, *next, *prev;
struct gcv_and_mask gcvm;
- if ((!!cache->head) != (!!cache->tail)) abort ();
- if (cache->head && (cache->head->prev || cache->tail->next))
abort ();
+ if ((!!cache->head) != (!!cache->tail)) ABORT ();
+ if (cache->head && (cache->head->prev || cache->tail->next))
ABORT ();
/* Gdk does not have the equivalent of 'None' for the clip_mask, so
we need to check it carefully, or gdk_gc_new_with_values will
@@ -216,10 +216,10 @@
cell->prev = cache->tail;
cache->tail->next = cell;
cache->tail = cell;
- if (cache->head == cell) abort ();
- if (cell->next) abort ();
- if (cache->head->prev) abort ();
- if (cache->tail->next) abort ();
+ if (cache->head == cell) ABORT ();
+ if (cell->next) ABORT ();
+ if (cache->head->prev) ABORT ();
+ if (cache->tail->next) ABORT ();
return cell->gc;
}
@@ -241,7 +241,7 @@
#endif
}
else if (cache->size > GC_CACHE_SIZE)
- abort ();
+ ABORT ();
else
{
/* Allocate a new cell (don't put it in the list or table yet). */
1.23.2.1 +13 -1 XEmacs/xemacs/src/glyphs-eimage.c
Index: glyphs-eimage.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/glyphs-eimage.c,v
retrieving revision 1.23
retrieving revision 1.23.2.1
diff -u -r1.23 -r1.23.2.1
--- glyphs-eimage.c 2004/11/04 23:06:32 1.23
+++ glyphs-eimage.c 2005/03/15 05:24:18 1.23.2.1
@@ -104,6 +104,18 @@
BEGIN_C_DECLS
+#ifdef WIN32_NATIVE
+/* #### Yuck! More horrifitude. tiffio.h, below, includes <windows.h>,
+ which defines INT32 and INT16, the former differently and incompatibly
+ from jmorecfg.h, included by jpeglib.h. We can disable the stuff in
+ jmorecfg.h by defining XMD_H (clever, huh?); then we define these
+ typedefs the way that <windows.h> wants them (which is more correct,
+ anyway; jmorecfg.h defines INT32 as `long'). */
+#define XMD_H
+typedef signed int INT32;
+typedef signed short INT16;
+#endif
+
#include <jpeglib.h>
#include <jerror.h>
@@ -1115,7 +1127,7 @@
tiff_memory_write (thandle_t UNUSED (data), tdata_t UNUSED (buf),
tsize_t UNUSED (size))
{
- abort();
+ ABORT();
return 0;
}
1.27.2.2 +8 -8 XEmacs/xemacs/src/glyphs-gtk.c
Index: glyphs-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/glyphs-gtk.c,v
retrieving revision 1.27.2.1
retrieving revision 1.27.2.2
diff -u -r1.27.2.1 -r1.27.2.2
--- glyphs-gtk.c 2004/12/11 05:16:12 1.27.2.1
+++ glyphs-gtk.c 2005/03/15 05:24:19 1.27.2.2
@@ -401,7 +401,7 @@
#endif
else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
{
- abort();
+ ABORT();
}
else
{
@@ -482,7 +482,7 @@
return 1;
}
-static unsigned long
+static Hashcode
gtk_image_instance_hash (struct Lisp_Image_Instance *p, int UNUSED (depth))
{
switch (IMAGE_INSTANCE_TYPE (p))
@@ -763,7 +763,7 @@
gint width, height, depth;
if (!DEVICE_GTK_P (device))
- abort ();
+ ABORT ();
IMAGE_INSTANCE_DEVICE (ii) = device;
IMAGE_INSTANCE_TYPE (ii) = IMAGE_COLOR_PIXMAP;
@@ -1010,7 +1010,7 @@
break;
default:
- abort ();
+ ABORT ();
}
}
@@ -1304,7 +1304,7 @@
break;
default:
- abort ();
+ ABORT ();
}
UNGCPRO;
@@ -1929,7 +1929,7 @@
if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
{
/* We don't support subwindows, but we do support widgets... */
- abort ();
+ ABORT ();
}
else /* must be a widget */
{
@@ -1952,7 +1952,7 @@
if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
{
/* No subwindow support... */
- abort ();
+ ABORT ();
}
else /* must be a widget */
{
@@ -2391,7 +2391,7 @@
else
{
/* Unknown button type... */
- abort();
+ ABORT();
}
}
1.53.2.2 +4 -1 XEmacs/xemacs/src/glyphs-msw.c
Index: glyphs-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/glyphs-msw.c,v
retrieving revision 1.53.2.1
retrieving revision 1.53.2.2
diff -u -r1.53.2.1 -r1.53.2.2
--- glyphs-msw.c 2004/12/11 05:16:13 1.53.2.1
+++ glyphs-msw.c 2005/03/15 05:24:20 1.53.2.2
@@ -1551,7 +1551,7 @@
break;
default:
- abort ();
+ ABORT ();
}
}
@@ -1622,6 +1622,9 @@
instead of strings.h. */
#define SYSV32
BEGIN_C_DECLS
+#ifndef __STDC__ /* Needed to avoid prototype warnings */
+#define __STDC__
+#endif
#include <compface.h>
END_C_DECLS
1.80.2.6 +3 -3 XEmacs/xemacs/src/glyphs-x.c
Index: glyphs-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/glyphs-x.c,v
retrieving revision 1.80.2.5
retrieving revision 1.80.2.6
diff -u -r1.80.2.5 -r1.80.2.6
--- glyphs-x.c 2005/03/09 06:31:40 1.80.2.5
+++ glyphs-x.c 2005/03/15 05:24:21 1.80.2.6
@@ -1037,7 +1037,7 @@
break;
default:
- abort ();
+ ABORT ();
}
}
@@ -1164,7 +1164,7 @@
/* Duplicate the pixel value so that we still have a lock on it if
the pixel we were passed is later freed. */
if (! XAllocColor (dpy, cmap, &color))
- abort (); /* it must be allocable since we're just duplicating it */
+ ABORT (); /* it must be allocable since we're just duplicating it */
TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (cons), C_STRING_MALLOC,
symbols[i].name, Qctext);
@@ -1524,7 +1524,7 @@
break;
default:
- abort ();
+ ABORT ();
}
xpm_free (&xpmattrs); /* after we've read pixels and hotspot */
1.48.2.1 +28 -23 XEmacs/xemacs/src/glyphs.c
Index: glyphs.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/glyphs.c,v
retrieving revision 1.48
retrieving revision 1.48.2.1
diff -u -r1.48 -r1.48.2.1
--- glyphs.c 2004/11/04 23:06:34 1.48
+++ glyphs.c 2005/03/15 05:24:21 1.48.2.1
@@ -1,7 +1,7 @@
/* Generic glyph/image implementation + display tables
Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
Copyright (C) 1995 Tinker Systems
- Copyright (C) 1995, 1996, 2000, 2001, 2002 Ben Wing
+ Copyright (C) 1995, 1996, 2000, 2001, 2002, 2004 Ben Wing
Copyright (C) 1995 Sun Microsystems
Copyright (C) 1998, 1999, 2000 Andy Piper
@@ -711,7 +711,7 @@
else if (governing_domain == GOVERNING_DOMAIN_DEVICE)
domain = DOMAIN_DEVICE (domain);
else
- abort ();
+ ABORT ();
return domain;
}
@@ -876,13 +876,13 @@
static const struct memory_description image_instance_data_description_1 [] = {
{ XD_BLOCK_ARRAY, IMAGE_TEXT,
- 1, &text_image_instance_description },
+ 1, { &text_image_instance_description } },
{ XD_BLOCK_ARRAY, IMAGE_MONO_PIXMAP,
- 1, &pixmap_image_instance_description },
+ 1, { &pixmap_image_instance_description } },
{ XD_BLOCK_ARRAY, IMAGE_COLOR_PIXMAP,
- 1, &pixmap_image_instance_description },
+ 1, { &pixmap_image_instance_description } },
{ XD_BLOCK_ARRAY, IMAGE_WIDGET,
- 1, &subwindow_image_instance_description },
+ 1, { &subwindow_image_instance_description } },
{ XD_END }
};
@@ -898,7 +898,7 @@
{ XD_LISP_OBJECT, offsetof (Lisp_Image_Instance, parent) },
{ XD_LISP_OBJECT, offsetof (Lisp_Image_Instance, instantiator) },
{ XD_UNION, offsetof (struct Lisp_Image_Instance, u),
- XD_INDIRECT (0, 0), &image_instance_data_description },
+ XD_INDIRECT (0, 0), { &image_instance_data_description } },
{ XD_END }
};
@@ -1087,7 +1087,7 @@
break;
default:
- abort ();
+ ABORT ();
}
MAYBE_DEVMETH (DOMAIN_XDEVICE (ii->domain), print_image_instance,
@@ -1209,7 +1209,7 @@
break;
default:
- abort ();
+ ABORT ();
}
return DEVMETH_OR_GIVEN (DOMAIN_XDEVICE (i1->domain),
@@ -1288,7 +1288,7 @@
break;
default:
- abort ();
+ ABORT ();
}
return HASH2 (hash, DEVMETH_OR_GIVEN
@@ -1373,7 +1373,7 @@
case IMAGE_SUBWINDOW: return Qsubwindow;
case IMAGE_WIDGET: return Qwidget;
default:
- abort ();
+ ABORT ();
}
return Qnil; /* not reached */
@@ -2299,7 +2299,7 @@
int UNUSED (dest_mask), Lisp_Object UNUSED (domain))
{
/* handled specially in image_instantiate */
- abort ();
+ ABORT ();
}
@@ -2917,11 +2917,13 @@
Lisp_Object
pixmap_to_lisp_data (Lisp_Object name, int ok_if_data_invalid)
{
- char **data;
+ Ascbyte **data;
int result;
- char *fname = 0;
+ Extbyte *fname = 0;
+ Ibyte *resolved;
- LISP_STRING_TO_EXTERNAL (name, fname, Qfile_name);
+ LISP_PATHNAME_RESOLVE_LINKS (name, resolved);
+ C_STRING_TO_EXTERNAL (resolved, fname, Qfile_name);
result = XpmReadFileToData (fname, &data);
if (result == XpmSuccess)
@@ -3337,7 +3339,7 @@
Qunbound);
}
else
- abort (); /* We're not allowed anything else currently. */
+ ABORT (); /* We're not allowed anything else currently. */
/* If we don't have an instance at this point then create
one. */
@@ -3414,7 +3416,7 @@
RETURN_UNGCPRO (instance);
}
- abort ();
+ ABORT ();
return Qnil; /* not reached */
}
@@ -3810,7 +3812,7 @@
| IMAGE_COLOR_PIXMAP_MASK;
break;
default:
- abort ();
+ ABORT ();
}
/* I think Fmake_specifier can GC. I think set_specifier_fallback can GC. */
@@ -3935,7 +3937,7 @@
CHECK_GLYPH (glyph);
switch (XGLYPH_TYPE (glyph))
{
- default: abort ();
+ default: ABORT ();
case GLYPH_BUFFER: return Qbuffer;
case GLYPH_POINTER: return Qpointer;
case GLYPH_ICON: return Qicon;
@@ -5018,7 +5020,7 @@
continue;
}
else
- abort ();
+ ABORT ();
}
}
@@ -5262,7 +5264,8 @@
static const struct memory_description iife_description_1[] = {
{ XD_LISP_OBJECT, offsetof (image_instantiator_format_entry, symbol) },
{ XD_LISP_OBJECT, offsetof (image_instantiator_format_entry, device) },
- { XD_BLOCK_PTR, offsetof (image_instantiator_format_entry, meths), 1,
&iim_description },
+ { XD_BLOCK_PTR, offsetof (image_instantiator_format_entry, meths), 1,
+ { &iim_description } },
{ XD_END }
};
@@ -5284,8 +5287,10 @@
static const struct memory_description iim_description_1[] = {
{ XD_LISP_OBJECT, offsetof (struct image_instantiator_methods, symbol) },
{ XD_LISP_OBJECT, offsetof (struct image_instantiator_methods, device) },
- { XD_BLOCK_PTR, offsetof (struct image_instantiator_methods, keywords), 1,
&iiked_description },
- { XD_BLOCK_PTR, offsetof (struct image_instantiator_methods, consoles), 1,
&cted_description },
+ { XD_BLOCK_PTR, offsetof (struct image_instantiator_methods, keywords), 1,
+ { &iiked_description } },
+ { XD_BLOCK_PTR, offsetof (struct image_instantiator_methods, consoles), 1,
+ { &cted_description } },
{ XD_END }
};
1.6.2.1 +3 -3 XEmacs/xemacs/src/gtk-glue.c
Index: gtk-glue.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/gtk-glue.c,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -u -r1.6 -r1.6.2.1
--- gtk-glue.c 2004/05/02 04:07:00 1.6
+++ gtk-glue.c 2005/03/15 05:24:22 1.6.2.1
@@ -93,7 +93,7 @@
}
else
{
- abort();
+ ABORT();
}
}
@@ -130,7 +130,7 @@
}
else
{
- abort();
+ ABORT();
}
}
return (rval);
@@ -181,7 +181,7 @@
}
else
{
- abort();
+ ABORT();
}
#undef FROB
}
1.7.2.1 +5 -5 XEmacs/xemacs/src/gui-gtk.c
Index: gui-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/gui-gtk.c,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -r1.7 -r1.7.2.1
--- gui-gtk.c 2004/07/07 12:01:07 1.7
+++ gui-gtk.c 2005/03/15 05:24:23 1.7.2.1
@@ -57,19 +57,19 @@
ungcpro_popup_callbacks (GUI_ID id)
{
Lisp_Object lid = make_int (id);
- Lisp_Object this = assq_no_quit (lid, Vpopup_callbacks);
- Vpopup_callbacks = delq_no_quit (this, Vpopup_callbacks);
+ Lisp_Object this_callback = assq_no_quit (lid, Vpopup_callbacks);
+ Vpopup_callbacks = delq_no_quit (this_callback, Vpopup_callbacks);
}
Lisp_Object
get_gcpro_popup_callbacks (GUI_ID id)
{
Lisp_Object lid = make_int (id);
- Lisp_Object this = assq_no_quit (lid, Vpopup_callbacks);
+ Lisp_Object this_callback = assq_no_quit (lid, Vpopup_callbacks);
- if (!NILP (this))
+ if (!NILP (this_callback))
{
- return (XCDR (this));
+ return (XCDR (this_callback));
}
return (Qnil);
}
1.38.2.1 +8 -8 XEmacs/xemacs/src/gui-x.c
Index: gui-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/gui-x.c,v
retrieving revision 1.38
retrieving revision 1.38.2.1
diff -u -r1.38 -r1.38.2.1
--- gui-x.c 2004/11/04 23:06:35 1.38
+++ gui-x.c 2005/03/15 05:24:23 1.38.2.1
@@ -111,12 +111,12 @@
gcpro_popup_callbacks (LWLIB_ID id)
{
Lisp_Object lid = make_int (id);
- Lisp_Object this = assq_no_quit (lid, Vpopup_callbacks);
+ Lisp_Object this_callback = assq_no_quit (lid, Vpopup_callbacks);
- if (!NILP (this))
+ if (!NILP (this_callback))
{
- free_list (XCDR (this));
- XCDR (this) = snarf_widget_values_for_gcpro (id);
+ free_list (XCDR (this_callback));
+ XCDR (this_callback) = snarf_widget_values_for_gcpro (id);
}
else
Vpopup_callbacks = Fcons (Fcons (lid, snarf_widget_values_for_gcpro (id)),
@@ -130,11 +130,11 @@
ungcpro_popup_callbacks (LWLIB_ID id)
{
Lisp_Object lid = make_int (id);
- Lisp_Object this = assq_no_quit (lid, Vpopup_callbacks);
+ Lisp_Object this_callback = assq_no_quit (lid, Vpopup_callbacks);
- assert (!NILP (this));
- free_list (XCDR (this));
- Vpopup_callbacks = delq_no_quit (this, Vpopup_callbacks);
+ assert (!NILP (this_callback));
+ free_list (XCDR (this_callback));
+ Vpopup_callbacks = delq_no_quit (this_callback, Vpopup_callbacks);
}
int
1.17.2.1 +3 -3 XEmacs/xemacs/src/gutter.c
Index: gutter.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/gutter.c,v
retrieving revision 1.17
retrieving revision 1.17.2.1
diff -u -r1.17 -r1.17.2.1
--- gutter.c 2004/11/04 23:06:35 1.17
+++ gutter.c 2005/03/15 05:24:23 1.17.2.1
@@ -70,7 +70,7 @@
(frame)->right_gutter_was_visible = flag; \
break; \
default: \
- abort (); \
+ ABORT (); \
} \
} while (0)
@@ -87,7 +87,7 @@
case RIGHT_GUTTER:
return frame->right_gutter_was_visible;
default:
- abort ();
+ ABORT ();
return 0; /* To keep the compiler happy */
}
}
@@ -214,7 +214,7 @@
break;
default:
- abort ();
+ ABORT ();
}
}
1.12.2.1 +21 -4 XEmacs/xemacs/src/hash.c
Index: hash.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/hash.c,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -r1.12 -r1.12.2.1
--- hash.c 2003/09/30 15:26:50 1.12
+++ hash.c 2005/03/15 05:24:23 1.12.2.1
@@ -1,6 +1,6 @@
/* Hash tables.
Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
- Copyright (C) 2003 Ben Wing.
+ Copyright (C) 2003, 2004 Ben Wing.
This file is part of XEmacs.
@@ -56,8 +56,19 @@
return h;
}
-Hashcode
-string_hash (const char *xv)
+static int
+string_equal (const void *st1, const void *st2)
+{
+ if (!st1)
+ return st2 ? 0 : 1;
+ else if (!st2)
+ return 0;
+ else
+ return !strcmp ((const char *) st1, (const char *) st2);
+}
+
+static Hashcode
+string_hash (const void *xv)
{
Hashcode h = 0;
unsigned const char *x = (unsigned const char *) xv;
@@ -167,7 +178,7 @@
xfree (hash_table, struct hash_table *);
}
-struct hash_table*
+struct hash_table *
make_hash_table (Elemcount size)
{
struct hash_table *hash_table = xnew_and_zero (struct hash_table);
@@ -175,6 +186,12 @@
hash_table->harray = xnew_array (hentry, hash_table->size);
clrhash (hash_table);
return hash_table;
+}
+
+struct hash_table *
+make_string_hash_table (Elemcount size)
+{
+ return make_general_hash_table (size, string_hash, string_equal);
}
struct hash_table *
1.9.2.1 +2 -0 XEmacs/xemacs/src/hash.h
Index: hash.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/hash.h,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -r1.9 -r1.9.2.1
--- hash.h 2003/02/13 09:57:07 1.9
+++ hash.h 2005/03/15 05:24:24 1.9.2.1
@@ -45,6 +45,8 @@
automatically if the number of entries approaches the size */
struct hash_table *make_hash_table (Elemcount size);
+struct hash_table *make_string_hash_table (Elemcount size);
+
struct hash_table *make_general_hash_table (Elemcount size,
hash_table_hash_function
hash_function,
1.19.2.1 +2 -2 XEmacs/xemacs/src/indent.c
Index: indent.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/indent.c,v
retrieving revision 1.19
retrieving revision 1.19.2.1
diff -u -r1.19 -r1.19.2.1
--- indent.c 2003/02/07 11:50:53 1.19
+++ indent.c 2005/03/15 05:24:24 1.19.2.1
@@ -71,8 +71,8 @@
Lisp_Object value;
buffer = wrap_buffer (buf);
- value = Fprevious_single_property_change (make_int (pos), Qinvisible,
- buffer, Qnil);
+ value = Fprevious_single_char_property_change (make_int (pos), Qinvisible,
+ buffer, Qnil);
if (NILP (value))
return 0; /* no visible position found */
else
1.20.2.1 +1 -1 XEmacs/xemacs/src/input-method-xlib.c
Index: input-method-xlib.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/input-method-xlib.c,v
retrieving revision 1.20
retrieving revision 1.20.2.1
diff -u -r1.20 -r1.20.2.1
--- input-method-xlib.c 2004/11/04 23:06:36 1.20
+++ input-method-xlib.c 2005/03/15 05:24:24 1.20.2.1
@@ -514,7 +514,7 @@
case XLookupChars:
break;
default:
- abort ();
+ ABORT ();
}
new_event.type = ClientMessage;
1.33.2.1 +1 -1 XEmacs/xemacs/src/insdel.c
Index: insdel.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/insdel.c,v
retrieving revision 1.33
retrieving revision 1.33.2.1
diff -u -r1.33 -r1.33.2.1
--- insdel.c 2004/11/04 23:06:36 1.33
+++ insdel.c 2005/03/15 05:24:25 1.33.2.1
@@ -421,7 +421,7 @@
move_gap (struct buffer *buf, Charbpos cpos, Bytebpos bpos)
{
if (! BUF_BEG_ADDR (buf))
- abort ();
+ ABORT ();
if (bpos < BYTE_BUF_GPT (buf))
gap_left (buf, cpos, bpos);
else if (bpos > BYTE_BUF_GPT (buf))
1.12.2.1 +92 -5 XEmacs/xemacs/src/intl-encap-win32.c
Index: intl-encap-win32.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/intl-encap-win32.c,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -r1.12 -r1.12.2.1
--- intl-encap-win32.c 2004/11/04 23:06:38 1.12
+++ intl-encap-win32.c 2005/03/15 05:24:25 1.12.2.1
@@ -146,9 +146,9 @@
yes OutputDebugString
yes FindResource
yes FindResourceEx
-yes EnumResourceTypes
-yes EnumResourceNames
-yes EnumResourceLanguages
+skip EnumResourceTypes different prototypes in VC6 and VC7
+skip EnumResourceNames different prototypes in VC6 and VC7
+skip EnumResourceLanguages different prototypes in VC6 and VC7
yes BeginUpdateResource
yes UpdateResource
yes EndUpdateResource
@@ -797,7 +797,7 @@
yes ImmGetDescription
yes ImmGetIMEFileName
yes ImmGetCompositionString
-yes ImmSetCompositionString
+skip ImmSetCompositionString different prototypes in VC6 and VC7
yes ImmGetCandidateListCount
yes ImmGetCandidateList
yes ImmGetGuideLine
@@ -1249,6 +1249,69 @@
#endif /* not CYGWIN */
+/********************************************************************************/
+/* would be encapsulatable but for header changes in different versions of VC++ */
+/********************************************************************************/
+
+#if MSC_VERSION >= 1300
+
+BOOL
+qxeEnumResourceTypes (HMODULE hModule, ENUMRESTYPEPROCW lpEnumFunc, LONG lParam)
+{
+ if (XEUNICODE_P)
+ return EnumResourceTypesW (hModule, lpEnumFunc, lParam);
+ else
+ return EnumResourceTypesA (hModule, (ENUMRESTYPEPROCA) lpEnumFunc, lParam);
+}
+
+BOOL
+qxeEnumResourceNames (HMODULE hModule, const Extbyte * lpType, ENUMRESNAMEPROCW
lpEnumFunc, LONG lParam)
+{
+ if (XEUNICODE_P)
+ return EnumResourceNamesW (hModule, (LPCWSTR) lpType, lpEnumFunc, lParam);
+ else
+ return EnumResourceNamesA (hModule, (LPCSTR) lpType, (ENUMRESNAMEPROCA) lpEnumFunc,
lParam);
+}
+
+BOOL
+qxeEnumResourceLanguages (HMODULE hModule, const Extbyte * lpType, const Extbyte *
lpName, ENUMRESLANGPROCW lpEnumFunc, LONG lParam)
+{
+ if (XEUNICODE_P)
+ return EnumResourceLanguagesW (hModule, (LPCWSTR) lpType, (LPCWSTR) lpName,
lpEnumFunc, lParam);
+ else
+ return EnumResourceLanguagesA (hModule, (LPCSTR) lpType, (LPCSTR) lpName,
(ENUMRESLANGPROCA) lpEnumFunc, lParam);
+}
+
+#else
+
+BOOL
+qxeEnumResourceTypes (HMODULE hModule, ENUMRESTYPEPROC lpEnumFunc, LONG lParam)
+{
+ if (XEUNICODE_P)
+ return EnumResourceTypesW (hModule, lpEnumFunc, lParam);
+ else
+ return EnumResourceTypesA (hModule, lpEnumFunc, lParam);
+}
+
+BOOL
+qxeEnumResourceNames (HMODULE hModule, const Extbyte * lpType, ENUMRESNAMEPROC
lpEnumFunc, LONG lParam)
+{
+ if (XEUNICODE_P)
+ return EnumResourceNamesW (hModule, (LPCWSTR) lpType, lpEnumFunc, lParam);
+ else
+ return EnumResourceNamesA (hModule, (LPCSTR) lpType, lpEnumFunc, lParam);
+}
+
+BOOL
+qxeEnumResourceLanguages (HMODULE hModule, const Extbyte * lpType, const Extbyte *
lpName, ENUMRESLANGPROC lpEnumFunc, LONG lParam)
+{
+ if (XEUNICODE_P)
+ return EnumResourceLanguagesW (hModule, (LPCWSTR) lpType, (LPCWSTR) lpName,
lpEnumFunc, lParam);
+ else
+ return EnumResourceLanguagesA (hModule, (LPCSTR) lpType, (LPCSTR) lpName,
lpEnumFunc, lParam);
+}
+
+#endif /* MSC_VERSION >= 1300 */
/************************************************************************/
/* files */
@@ -2046,8 +2109,32 @@
copy_logfonta_to_logfontw (&lfa, lplf);
return retval;
}
+}
+
+#if MSC_VERSION >= 1300
+
+BOOL
+qxeImmSetCompositionString (HIMC arg1, DWORD dwIndex, LPVOID lpComp, DWORD arg4, LPVOID
lpRead, DWORD arg6)
+{
+ if (XEUNICODE_P)
+ return ImmSetCompositionStringW (arg1, dwIndex, lpComp, arg4, lpRead, arg6);
+ else
+ return ImmSetCompositionStringA (arg1, dwIndex, lpComp, arg4, lpRead, arg6);
+}
+
+#else
+
+BOOL
+qxeImmSetCompositionString (HIMC arg1, DWORD dwIndex, LPCVOID lpComp, DWORD arg4,
LPCVOID lpRead, DWORD arg6)
+{
+ if (XEUNICODE_P)
+ return ImmSetCompositionStringW (arg1, dwIndex, lpComp, arg4, lpRead, arg6);
+ else
+ return ImmSetCompositionStringA (arg1, dwIndex, lpComp, arg4, lpRead, arg6);
}
-
+
+#endif /* MSC_VERSION >= 1300 */
+
int
qxeGetObject (HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject)
{
1.13.2.1 +5 -5 XEmacs/xemacs/src/intl-win32.c
Index: intl-win32.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/intl-win32.c,v
retrieving revision 1.13
retrieving revision 1.13.2.1
diff -u -r1.13 -r1.13.2.1
--- intl-win32.c 2004/11/04 23:06:38 1.13
+++ intl-win32.c 2005/03/15 05:24:26 1.13.2.1
@@ -1716,7 +1716,7 @@
case MULTIBYTE_SYSTEM_DEFAULT:
locale = GetSystemDefaultLCID (); break;
default:
- abort (); locale = 0;
+ ABORT (); locale = 0;
}
switch (data->cp_type)
@@ -1752,7 +1752,7 @@
return 0;
#endif
default:
- abort (); return 0;
+ ABORT (); return 0;
}
#else /* not MULE */
return CP_ACP;
@@ -1825,7 +1825,7 @@
case MULTIBYTE_OEM: return Qoem;
case MULTIBYTE_EBCDIC: return Qebcdic;
case MULTIBYTE_MAC: return Qmac;
- default: abort ();
+ default: ABORT ();
}
}
else if (EQ (prop, Qlocale))
@@ -1840,7 +1840,7 @@
case MULTIBYTE_SPECIFIED_CODE_PAGE:
return Qnil;
- default: abort ();
+ default: ABORT ();
}
}
@@ -2146,7 +2146,7 @@
Bytecount orign = n;
/* should never be called; is preprocessed away in the
canonicalize method */
- abort ();
+ ABORT ();
return orign;
}
1.52.2.3 +6 -6 XEmacs/xemacs/src/keymap.c
Index: keymap.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/keymap.c,v
retrieving revision 1.52.2.2
retrieving revision 1.52.2.3
diff -u -r1.52.2.2 -r1.52.2.3
--- keymap.c 2005/02/01 15:46:56 1.52.2.2
+++ keymap.c 2005/03/15 05:24:26 1.52.2.3
@@ -472,7 +472,7 @@
if ((modifiers & ~(XEMACS_MOD_CONTROL | XEMACS_MOD_META | XEMACS_MOD_SUPER
| XEMACS_MOD_HYPER | XEMACS_MOD_ALT | XEMACS_MOD_SHIFT))
!= 0)
- abort ();
+ ABORT ();
k = XKEYMAP (keymap);
@@ -547,7 +547,7 @@
Lisp_Object *prev;
if (UNBOUNDP (keys))
- abort ();
+ ABORT ();
for (prev = &new_keys, tail = new_keys;
;
@@ -1757,7 +1757,7 @@
else
{
new_keys = Qnil;
- abort ();
+ ABORT ();
}
if (EQ (keys, new_keys))
@@ -3134,10 +3134,10 @@
key.modifiers = modifiers;
if (NILP (cmd))
- abort ();
+ ABORT ();
cmd = get_keymap (cmd, 0, 1);
if (!KEYMAPP (cmd))
- abort ();
+ ABORT ();
vec = make_vector (XVECTOR_LENGTH (thisseq) + 1, Qnil);
len = XVECTOR_LENGTH (thisseq);
@@ -3664,7 +3664,7 @@
/* OK, the key is for real */
if (target_buffer)
{
- if (!firstonly) abort ();
+ if (!firstonly) ABORT ();
format_raw_keys (so_far, keys_count + 1, target_buffer);
return make_int (1);
}
1.116.2.3 +31 -27 XEmacs/xemacs/src/lisp.h
Index: lisp.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lisp.h,v
retrieving revision 1.116.2.2
retrieving revision 1.116.2.3
diff -u -r1.116.2.2 -r1.116.2.3
--- lisp.h 2005/03/05 18:09:29 1.116.2.2
+++ lisp.h 2005/03/15 05:24:27 1.116.2.3
@@ -1,7 +1,7 @@
/* Fundamental definitions for XEmacs Lisp interpreter.
Copyright (C) 1985-1987, 1992-1995 Free Software Foundation, Inc.
Copyright (C) 1993-1996 Richard Mlynarik.
- Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003, 2004 Ben Wing.
+ Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003, 2004, 2005 Ben Wing.
This file is part of XEmacs.
@@ -516,8 +516,6 @@
we don't want by creating overloaded versions of them and declaring them
private. */
-#undef this
-
class Bytecount;
class Bytebpos;
class Bytexpos;
@@ -942,8 +940,6 @@
{ return Bytecount (x - y); }
#endif
-#define this c_this
-
#endif /* __cplusplus */
/* Counts of elements */
@@ -1040,26 +1036,25 @@
from error-checking macros. If we're not tricky, we just get the file
and line of the inline function, which is not very useful. */
-#ifdef USE_ASSERTIONS
/* Highly dubious kludge */
/* (thanks, Jamie, I feel better now -- ben) */
MODULE_API void assert_failed (const Ascbyte *, int, const Ascbyte *);
-# define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
+#define ABORT() (assert_failed (__FILE__, __LINE__, "ABORT()"))
+
+#ifdef USE_ASSERTIONS
# define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
# define assert_with_message(x, msg) \
((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, msg))
# define assert_at_line(x, file, line) \
((x) ? (void) 0 : assert_failed (file, line, #x))
+#elif defined (DEBUG_XEMACS)
+# define assert(x) ((x) ? (void) 0 : (void) ABORT ())
+# define assert_with_message(x, msg) ((x) ? (void) 0 : (void) ABORT ())
+# define assert_at_line(x, file, line) assert (x)
#else
-# ifdef DEBUG_XEMACS
-# define assert(x) ((x) ? (void) 0 : (void) abort ())
-# define assert_with_message(x, msg) ((x) ? (void) 0 : (void) abort ())
-# define assert_at_line(x, file, line) assert (x)
-# else
-# define assert(x) ((void) 0)
-# define assert_with_message(x, msg)
-# define assert_at_line(x, file, line) assert (x)
-# endif
+# define assert(x) ((void) 0)
+# define assert_with_message(x, msg)
+# define assert_at_line(x, file, line) assert (x)
#endif
/************************************************************************/
@@ -1983,7 +1978,7 @@
/* For a list that's known to be in valid list format, where we may
be deleting the current element out of the list --
- will abort() if the list is not in valid format */
+ will ABORT() if the list is not in valid format */
#define LIST_LOOP_DELETING(consvar, nextconsvar, list) \
for (consvar = list; \
!NILP (consvar) ? (nextconsvar = XCDR (consvar), 1) :0; \
@@ -2542,7 +2537,7 @@
#define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker)
/* The second check was looking for GCed markers still in use */
-/* if (INTP (XMARKER (x)->lheader.next.v)) abort (); */
+/* if (INTP (XMARKER (x)->lheader.next.v)) ABORT (); */
#define marker_next(m) ((m)->next)
#define marker_prev(m) ((m)->prev)
@@ -3127,10 +3122,9 @@
#define HASH9(a,b,c,d,e,f,g,h,i) (GOOD_HASH * HASH8 (a,b,c,d,e,f,g,h) + (i))
#define LISP_HASH(obj) ((unsigned long) LISP_TO_VOID (obj))
-unsigned long string_hash (const char *xv);
-unsigned long memory_hash (const void *xv, Bytecount size);
-unsigned long internal_hash (Lisp_Object obj, int depth);
-unsigned long internal_array_hash (Lisp_Object *arr, int size, int depth);
+Hashcode memory_hash (const void *xv, Bytecount size);
+Hashcode internal_hash (Lisp_Object obj, int depth);
+Hashcode internal_array_hash (Lisp_Object *arr, int size, int depth);
/************************************************************************/
@@ -3237,9 +3231,7 @@
gcpro (const gcpro& g) : next (g.next), var (g.var), nvars (g.nvars) { }
gcpro& operator= (const gcpro& g) { next = g.next; var = g.var;
nvars = g.nvars;
-#undef this
return *this;}
-#define this c_this
~gcpro () { assert (!next); }
#endif /* defined (__cplusplus) && defined (ERROR_CHECK_GC) */
};
@@ -3593,7 +3585,17 @@
int object_dead_p (Lisp_Object);
void mark_object (Lisp_Object obj);
#ifdef USE_KKCC
-void kkcc_gc_stack_push_lisp_object (Lisp_Object obj);
+#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_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)
+#define kkcc_backtrace()
+#endif
#endif /* USE_KKCC */
int marked_p (Lisp_Object obj);
extern int funcall_allocation_flag;
@@ -4159,6 +4161,7 @@
int proper_redisplay_wrapping_in_place (void);
Lisp_Object internal_catch (Lisp_Object, Lisp_Object (*) (Lisp_Object),
Lisp_Object, int * volatile,
+ Lisp_Object * volatile,
Lisp_Object * volatile);
Lisp_Object condition_case_1 (Lisp_Object,
Lisp_Object (*) (Lisp_Object),
@@ -4306,6 +4309,8 @@
Lisp_Object lisp_strerror (int);
Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
int internal_delete_file (Lisp_Object);
+Ibyte *find_end_of_directory_component (const Ibyte *path,
+ Bytecount len);
/* Defined in filelock.c */
EXFUN (Funlock_buffer, 0);
@@ -5294,8 +5299,7 @@
extern Lisp_Object Vinvocation_directory, Vinvocation_name;
extern Lisp_Object Vlast_command, Vlast_command_char;
extern Lisp_Object Vlast_command_event, Vlast_input_event;
-extern Lisp_Object Vload_file_name_internal;
-extern Lisp_Object Vload_file_name_internal_the_purecopy, Vload_history;
+extern Lisp_Object Vload_file_name_internal, Vload_history;
extern Lisp_Object Vload_path, Vmark_even_if_inactive, Vmenubar_configuration;
extern Lisp_Object Vminibuf_preprompt, Vminibuf_prompt, Vminibuffer_zero;
extern Lisp_Object Vmodule_directory, Vmswindows_downcase_file_names;
1.72.2.1 +72 -18 XEmacs/xemacs/src/lread.c
Index: lread.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lread.c,v
retrieving revision 1.72
retrieving revision 1.72.2.1
diff -u -r1.72 -r1.72.2.1
--- lread.c 2004/11/04 23:06:40 1.72
+++ lread.c 2005/03/15 05:24:29 1.72.2.1
@@ -59,8 +59,8 @@
#endif
Lisp_Object Qvariable_domain; /* I18N3 */
Lisp_Object Vvalues, Vstandard_input, Vafter_load_alist;
-Lisp_Object Qcurrent_load_list;
-Lisp_Object Qload, Qload_file_name, Qload_internal, Qfset;
+Lisp_Object Vload_suppress_alist;
+Lisp_Object Qload, Qload_internal, Qfset;
/* Hash-table that maps directory names to hashes of their contents. */
static Lisp_Object Vlocate_file_hash_table;
@@ -118,8 +118,6 @@
our #$ checks are reliable. */
Lisp_Object Vload_file_name_internal;
-Lisp_Object Vload_file_name_internal_the_purecopy;
-
/* Function to use for reading, in `load' and friends. */
Lisp_Object Vload_read_function;
@@ -340,6 +338,52 @@
return Qnil;
}
+/* Check if NONRELOC/RELOC (an absolute filename) is suppressed according
+ to load-suppress-alist. */
+static int
+check_if_suppressed (Ibyte *nonreloc, Lisp_Object reloc)
+{
+ Bytecount len;
+
+ if (!NILP (reloc))
+ {
+ nonreloc = XSTRING_DATA (reloc);
+ len = XSTRING_LENGTH (reloc);
+ }
+ else
+ len = qxestrlen (nonreloc);
+
+ if (len >= 4 && !qxestrcmp_ascii (nonreloc + len - 4, ".elc"))
+ len -= 4;
+ else if (len >= 3 && !qxestrcmp_ascii (nonreloc + len - 3,
".el"))
+ len -= 3;
+
+ {
+ EXTERNAL_LIST_LOOP_2 (acons, Vload_suppress_alist)
+ {
+ if (CONSP (acons) && STRINGP (XCAR (acons)))
+ {
+ Lisp_Object name = XCAR (acons);
+ if (XSTRING_LENGTH (name) == len &&
+ !memcmp (XSTRING_DATA (name), nonreloc, len))
+ {
+ struct gcpro gcpro1;
+ Lisp_Object val;
+
+ GCPRO1 (reloc);
+ val = Feval (XCDR (acons));
+ UNGCPRO;
+
+ if (!NILP (val))
+ return 1;
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
/* The plague is coming.
Ring around the rosy, pocket full of posy,
@@ -689,12 +733,11 @@
internal_bind_lisp_object (&Vload_descriptor_list,
Fcons (make_int (fd), Vload_descriptor_list));
internal_bind_lisp_object (&Vload_file_name_internal, found);
- internal_bind_lisp_object (&Vload_file_name_internal_the_purecopy, Qnil);
/* this is not a simple internal_bind. */
record_unwind_protect (load_force_doc_string_unwind,
Vload_force_doc_string_list);
Vload_force_doc_string_list = Qnil;
- specbind (Qload_file_name, found);
+ internal_bind_lisp_object (&Vload_file_name, found);
#ifdef I18N3
/* set it to nil; a call to #'domain will set it. */
internal_bind_lisp_object (&Vfile_domain, Qnil);
@@ -818,6 +861,9 @@
requirements. Allowed symbols are `exists', `executable', `writable', and
`readable'. If MODE is nil, it defaults to `readable'.
+Filenames are checked against `load-suppress-alist' to determine if they
+should be ignored.
+
`locate-file' keeps hash tables of the directories it searches through,
in order to speed things up. It tries valiantly to not get confused in
the face of a changing and unpredictable environment, but can occasionally
@@ -1024,11 +1070,14 @@
if (closure->fd >= 0)
{
- /* We succeeded; return this descriptor and filename. */
- if (closure->storeptr)
- *closure->storeptr = build_intstring (fn);
+ if (!check_if_suppressed (fn, Qnil))
+ {
+ /* We succeeded; return this descriptor and filename. */
+ if (closure->storeptr)
+ *closure->storeptr = build_intstring (fn);
- return 1;
+ return 1;
+ }
}
}
/* Keep mapping. */
@@ -1178,7 +1227,7 @@
just look for one for which access(file,MODE) succeeds. In this case,
returns a nonnegative value on success. On failure, returns -1.
- If STOREPTR is nonzero, it points to a slot where the name of
+ If STOREPTR is non-nil, it points to a slot where the name of
the file actually found should be stored as a Lisp string.
Nil is stored there on failure.
@@ -1377,7 +1426,7 @@
READCHARFUN (which can be a stream) to Lisp. --hniksic */
/*specbind (Qstandard_input, readcharfun);*/
- specbind (Qcurrent_load_list, Qnil);
+ internal_bind_lisp_object (&Vcurrent_load_list, Qnil);
#ifdef COMPILED_FUNCTION_ANNOTATION_HACK
Vcurrent_compiled_function_annotation = Qnil;
@@ -1839,7 +1888,7 @@
else if (sizeof (long) == sizeof (EMACS_INT))
number = atol (read_buffer);
else
- abort ();
+ ABORT ();
return make_int (number);
}
#else
@@ -3072,9 +3121,7 @@
DEFSYMBOL (Qstandard_input);
DEFSYMBOL (Qread_char);
- DEFSYMBOL (Qcurrent_load_list);
DEFSYMBOL (Qload);
- DEFSYMBOL (Qload_file_name);
DEFSYMBOL (Qload_internal);
DEFSYMBOL (Qfset);
@@ -3141,6 +3188,16 @@
Non-nil iff inside of `load'.
*/ );
+ DEFVAR_LISP ("load-suppress-alist", &Vload_suppress_alist /*
+An alist of expressions controlling whether particular files can be loaded.
+Each element looks like (FILENAME EXPR).
+FILENAME should be a full pathname, but without the .el suffix.
+When `load' is run and is about to load the specified file, it evaluates
+the form to determine if the file can be loaded.
+This variable is normally initialized automatically.
+*/ );
+ Vload_suppress_alist = Qnil;
+
DEFVAR_LISP ("after-load-alist", &Vafter_load_alist /*
An alist of expressions to be evalled when particular files are loaded.
Each element looks like (FILENAME FORMS...).
@@ -3254,9 +3311,6 @@
Vload_file_name_internal = Qnil;
staticpro (&Vload_file_name_internal);
-
- Vload_file_name_internal_the_purecopy = Qnil;
- staticpro (&Vload_file_name_internal_the_purecopy);
#ifdef COMPILED_FUNCTION_ANNOTATION_HACK
Vcurrent_compiled_function_annotation = Qnil;
1.34.2.3 +61 -9 XEmacs/xemacs/src/lrecord.h
Index: lrecord.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lrecord.h,v
retrieving revision 1.34.2.2
retrieving revision 1.34.2.3
diff -u -r1.34.2.2 -r1.34.2.3
--- lrecord.h 2005/02/04 16:05:38 1.34.2.2
+++ lrecord.h 2005/03/15 05:24:29 1.34.2.3
@@ -278,7 +278,7 @@
hash to the same value in order for hash tables to work properly.
This means that `hash' can be NULL only if the `equal' method is
also NULL. */
- unsigned long (*hash) (Lisp_Object, int);
+ Hashcode (*hash) (Lisp_Object, int);
/* Data layout description for your object. See long comment below. */
const struct memory_description *description;
@@ -507,7 +507,7 @@
...
{ XD_INT, offsetof (Lisp_Foo, count) },
{ XD_BLOCK_PTR, offsetof (Lisp_Foo, objects),
- XD_INDIRECT (0, 0), &lisp_object_description },
+ XD_INDIRECT (0, 0), { &lisp_object_description } },
...
};
@@ -562,7 +562,7 @@
const struct memory_description hash_table_description[] = {
{ XD_ELEMCOUNT, offsetof (Lisp_Hash_Table, size) },
{ XD_BLOCK_PTR, offsetof (Lisp_Hash_Table, hentries), XD_INDIRECT (0, 1),
- &htentry_description },
+ { &htentry_description } },
{ XD_LO_LINK, offsetof (Lisp_Hash_Table, next_weak) },
{ XD_END }
};
@@ -582,7 +582,7 @@
const struct memory_description specifier_description[] = {
...
{ XD_BLOCK_ARRAY, offset (Lisp_Specifier, data), 1,
- specifier_extra_description_map },
+ { specifier_extra_description_map } },
...
{ XD_END }
};
@@ -650,6 +650,18 @@
Pointer to undumpable data. Must be NULL when dumping.
+ XD_OPAQUE_PTR_CONVERTIBLE
+
+ Pointer to data which is not directly dumpable but can be converted
+ to a dumpable, opaque external representation. The parameter is
+ a pointer to an opaque_convert_functions struct.
+
+ XD_OPAQUE_DATA_CONVERTIBLE
+
+ Data which is not directly dumpable but can be converted to a
+ dumpable, opaque external representation. The parameter is a
+ pointer to an opaque_convert_functions struct.
+
XD_BLOCK_PTR
Pointer to block of described memory. (This is misnamed: It is NOT
@@ -788,9 +800,11 @@
XD_LISP_OBJECT,
XD_LO_LINK,
XD_OPAQUE_PTR,
+ XD_OPAQUE_PTR_CONVERTIBLE,
+ XD_OPAQUE_DATA_CONVERTIBLE,
+ XD_OPAQUE_DATA_PTR,
XD_BLOCK_PTR,
XD_BLOCK_ARRAY,
- XD_OPAQUE_DATA_PTR,
XD_UNION,
XD_UNION_DYNAMIC_SIZE,
XD_ASCII_STRING,
@@ -849,12 +863,21 @@
#endif
};
+union memory_contents_description
+{
+ /* The first element is used by static initializers only. We always read
+ from one of the other two pointers. */
+ const void *write_only;
+ const struct sized_memory_description *descr;
+ const struct opaque_convert_functions *funcs;
+};
+
struct memory_description
{
enum memory_description_type type;
Bytecount offset;
EMACS_INT data1;
- const struct sized_memory_description *data2;
+ union memory_contents_description data2;
/* Indicates which subsystems process this entry, plus (potentially) other
flags that apply to this entry. */
int flags;
@@ -866,6 +889,36 @@
const struct memory_description *description;
};
+
+struct opaque_convert_functions
+{
+ /* Used by XD_OPAQUE_PTR_CONVERTIBLE and
+ XD_OPAQUE_DATA_CONVERTIBLE */
+
+ /* Converter to external representation, for those objects from
+ external libraries that can't be directly dumped as opaque data
+ because they contain pointers. This is called at dump time to
+ convert to an opaque, pointer-less representation.
+
+ This function must put a pointer to the opaque result in *data
+ and its size in *size. */
+ void (*convert)(const void *object, void **data, Bytecount *size);
+
+ /* Post-conversion cleanup. Optional (null if not provided).
+
+ When provided it will be called post-dumping to free any storage
+ allocated for the conversion results. */
+ void (*convert_free)(const void *object, void *data, Bytecount size);
+
+ /* De-conversion.
+
+ At reload time, rebuilds the object from the converted form.
+ "object" is 0 for the PTR case, return is ignored in the DATA
+ case. */
+ void *(*deconvert)(void *object, void *data, Bytecount size);
+
+};
+
extern const struct sized_memory_description lisp_object_description;
#define XD_INDIRECT(val, delta) (-1 - (Bytecount) ((val) | ((delta) << 8)))
@@ -875,11 +928,10 @@
#define XD_INDIRECT_DELTA(code) ((-1 - (code)) >> 8)
#define XD_DYNARR_DESC(base_type, sub_desc) \
- { XD_BLOCK_PTR, offsetof (base_type, base), XD_INDIRECT(1, 0), sub_desc }, \
+ { XD_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) } \
-
/* DEFINE_LRECORD_IMPLEMENTATION is for objects with constant size.
DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION is for objects whose size varies.
*/
@@ -1607,7 +1659,7 @@
EMACS_INT variant = lispdesc_indirect_count (desc1->data1, desc,
data);
desc1 =
- lispdesc_indirect_description (data, desc1->data2)->description;
+ lispdesc_indirect_description (data, desc1->data2.descr)->description;
for (count = 0; desc1[count].type != XD_END; count++)
{
1.31.2.1 +5 -5 XEmacs/xemacs/src/lstream.c
Index: lstream.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lstream.c,v
retrieving revision 1.31
retrieving revision 1.31.2.1
diff -u -r1.31 -r1.31.2.1
--- lstream.c 2004/11/12 17:16:30 1.31
+++ lstream.c 2005/03/15 05:24:29 1.31.2.1
@@ -135,9 +135,9 @@
static const struct memory_description lstream_description[] =
{
{ XD_BLOCK_PTR, offsetof (Lstream, imp), 1,
- &lstream_implementation_description },
+ { &lstream_implementation_description } },
{ XD_BLOCK_ARRAY, offsetof (Lstream, data), 1,
- lstream_extra_description_map },
+ { lstream_extra_description_map } },
{ XD_END }
};
@@ -300,7 +300,7 @@
}
}
- abort ();
+ ABORT ();
}
#define Lstream_internal_error(reason, lstr) \
@@ -371,7 +371,7 @@
EWOULDBLOCK error. */
break;
else if (num_written > size)
- abort ();
+ ABORT ();
else if (num_written > 0)
{
data += num_written;
@@ -1646,7 +1646,7 @@
/* Make sure the luser didn't pass "w" in. */
if (!strcmp (mode, "w"))
- abort ();
+ ABORT ();
if (flags & LSTR_IGNORE_ACCESSIBLE)
{
1.12.6.1 +2 -2 XEmacs/xemacs/src/macros.c
Index: macros.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/macros.c,v
retrieving revision 1.12
retrieving revision 1.12.6.1
diff -u -r1.12 -r1.12.6.1
--- macros.c 2002/06/20 21:18:37 1.12
+++ macros.c 2005/03/15 05:24:30 1.12.6.1
@@ -181,7 +181,7 @@
void
pop_kbd_macro_event (Lisp_Object event)
{
- if (NILP (Vexecuting_macro)) abort ();
+ if (NILP (Vexecuting_macro)) ABORT ();
if (STRINGP (Vexecuting_macro) || VECTORP (Vexecuting_macro))
{
@@ -278,7 +278,7 @@
executing_macro_index = 0;
con->prefix_arg = Qnil;
internal_catch (Qexecute_kbd_macro, call_command_loop,
- Qnil, 0, 0);
+ Qnil, 0, 0, 0);
}
while (--repeat != 0
&& (STRINGP (Vexecuting_macro) ||
1.11.2.1 +2 -2 XEmacs/xemacs/src/malloc.c
Index: malloc.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/malloc.c,v
retrieving revision 1.11
retrieving revision 1.11.2.1
diff -u -r1.11 -r1.11.2.1
--- malloc.c 2004/06/16 12:49:26 1.11
+++ malloc.c 2005/03/15 05:24:30 1.11.2.1
@@ -525,7 +525,7 @@
#ifdef rcheck
botch ("block on free list clobbered");
#else /* not rcheck */
- abort ();
+ ABORT ();
#endif /* not rcheck */
/* Fill in the info, and if range checking, set up the magic numbers */
@@ -569,7 +569,7 @@
#ifndef rcheck
if (p -> mh_alloc != ISALLOC)
- abort ();
+ ABORT ();
#else /* rcheck */
if (p -> mh_alloc != ISALLOC)
1.14.2.1 +4 -4 XEmacs/xemacs/src/marker.c
Index: marker.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/marker.c,v
retrieving revision 1.14
retrieving revision 1.14.2.1
diff -u -r1.14 -r1.14.2.1
--- marker.c 2004/09/20 19:19:51 1.14
+++ marker.c 2005/03/15 05:24:30 1.14.2.1
@@ -88,18 +88,18 @@
!marker1->buffer));
}
-static unsigned long
+static Hashcode
marker_hash (Lisp_Object obj, int UNUSED (depth))
{
- unsigned long hash = (unsigned long) XMARKER (obj)->buffer;
+ Hashcode hash = (Hashcode) XMARKER (obj)->buffer;
if (hash)
hash = HASH2 (hash, XMARKER (obj)->membpos);
return hash;
}
static const struct memory_description marker_description[] = {
- { XD_LISP_OBJECT, offsetof (Lisp_Marker, next), 0, 0, XD_FLAG_NO_KKCC },
- { XD_LISP_OBJECT, offsetof (Lisp_Marker, prev), 0, 0, XD_FLAG_NO_KKCC },
+ { XD_LISP_OBJECT, offsetof (Lisp_Marker, next), 0, { 0 }, XD_FLAG_NO_KKCC },
+ { XD_LISP_OBJECT, offsetof (Lisp_Marker, prev), 0, { 0 }, XD_FLAG_NO_KKCC },
{ XD_LISP_OBJECT, offsetof (Lisp_Marker, buffer) },
{ XD_END }
};
1.21.2.1 +2 -2 XEmacs/xemacs/src/menubar-gtk.c
Index: menubar-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/menubar-gtk.c,v
retrieving revision 1.21
retrieving revision 1.21.2.1
diff -u -r1.21 -r1.21.2.1
--- menubar-gtk.c 2004/11/04 23:06:41 1.21
+++ menubar-gtk.c 2005/03/15 05:24:30 1.21.2.1
@@ -1036,7 +1036,7 @@
else
{
return (NULL);
- /* abort (); ???? */
+ /* ABORT (); ???? */
}
}
@@ -1154,7 +1154,7 @@
else
{
widget = gtk_menu_item_new_with_label ("ERROR");
- /* abort() */
+ /* ABORT() */
}
gtk_widget_show_all (widget);
}
1.43.2.1 +2 -2 XEmacs/xemacs/src/menubar-msw.c
Index: menubar-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/menubar-msw.c,v
retrieving revision 1.43
retrieving revision 1.43.2.1
diff -u -r1.43 -r1.43.2.1
--- menubar-msw.c 2004/11/04 23:06:41 1.43
+++ menubar-msw.c 2005/03/15 05:24:31 1.43.2.1
@@ -557,12 +557,12 @@
if (menubar == NULL)
return;
- /* #### If a filter function has set desc to Qnil, this abort()
+ /* #### If a filter function has set desc to Qnil, this ABORT()
triggers. To resolve, we must prevent filters explicitly from
mangling with the active menu. In apply_filter probably?
Is copy-tree on the whole menu too expensive? */
if (NILP (desc))
- /* abort(); */
+ /* ABORT(); */
return;
GCPRO1 (desc); /* just to be safe -- see above */
1.44.2.1 +1 -1 XEmacs/xemacs/src/menubar-x.c
Index: menubar-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/menubar-x.c,v
retrieving revision 1.44
retrieving revision 1.44.2.1
diff -u -r1.44 -r1.44.2.1
--- menubar-x.c 2004/11/04 23:06:41 1.44
+++ menubar-x.c 2005/03/15 05:24:31 1.44.2.1
@@ -576,7 +576,7 @@
data = compute_menubar_data (f, menubar, deep_p);
if (!data || (!data->next && !data->contents))
- abort ();
+ ABORT ();
if (!FRAME_X_MENUBAR_ID (f))
FRAME_X_MENUBAR_ID (f) = new_lwlib_id ();
1.28.2.1 +43 -6 XEmacs/xemacs/src/menubar.c
Index: menubar.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/menubar.c,v
retrieving revision 1.28
retrieving revision 1.28.2.1
diff -u -r1.28 -r1.28.2.1
--- menubar.c 2004/11/04 23:06:41 1.28
+++ menubar.c 2005/03/15 05:24:31 1.28.2.1
@@ -1,7 +1,7 @@
/* Implements an elisp-programmable menubar.
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
Copyright (C) 1995 Tinker Systems and INS Engineering Corp.
- Copyright (C) 2001, 2002 Ben Wing.
+ Copyright (C) 2001, 2002, 2003 Ben Wing.
This file is part of XEmacs.
@@ -326,14 +326,51 @@
return Qnil;
}
-DEFUN ("normalize-menu-item-name", Fnormalize_menu_item_name, 1, 2, 0, /*
+DEFUN ("compare-menu-text", Fcompare_menu_text, 2, 2, 0, /*
+Compare the text of two menu items, ignoring accelerator specs and case.
+Also treat %% as a single %. Return < 0 if STRING1 is less than STRING2,
+0 if equal, > 0 if STRING1 is greater than STRING2.
+*/
+ (string1, string2))
+{
+ Ibyte *p;
+ Ibyte *q;
+
+ CHECK_STRING (string1);
+ CHECK_STRING (string2);
+
+ p = XSTRING_DATA (string1);
+ q = XSTRING_DATA (string2);
+
+ for (;;)
+ {
+ Ichar val;
+ if (*p == '%' && *(p + 1) == '%')
+ p++;
+ else if (*p == '%' && *(p + 1) == '_')
+ p += 2;
+ if (*q == '%' && *(q + 1) == '%')
+ q++;
+ else if (*q == '%' && *(q + 1) == '_')
+ q += 2;
+ if (!*p || !*q)
+ return make_int (*p - *q);
+ val = DOWNCASE (0, itext_ichar (p)) - DOWNCASE (0, itext_ichar (q));
+ if (val)
+ return make_int (val);
+ INC_IBYTEPTR (p);
+ INC_IBYTEPTR (q);
+ }
+}
+
+DEFUN ("normalize-menu-text", Fnormalize_menu_text, 1, 1, 0, /*
Convert a menu item name string into normal form, and return the new string.
Menu item names should be converted to normal form before being compared.
This removes %_'s (accelerator indications) and converts %% to %.
+The returned string may be the same string as the original.
*/
- (name, buffer))
+ (name))
{
- struct buffer *buf = decode_buffer (buffer, 0);
Charcount end;
int i;
Ibyte *name_data;
@@ -352,7 +389,6 @@
for (i = 0; i < end; i++)
{
elt = itext_ichar (name_data);
- elt = DOWNCASE (buf, elt);
if (expecting_underscore)
{
expecting_underscore = 0;
@@ -400,7 +436,8 @@
DEFSYMBOL (Qmenu_escape);
DEFSUBR (Fpopup_menu);
- DEFSUBR (Fnormalize_menu_item_name);
+ DEFSUBR (Fcompare_menu_text);
+ DEFSUBR (Fnormalize_menu_text);
DEFSUBR (Fmenu_find_real_submenu);
}
1.40.2.1 +2 -2 XEmacs/xemacs/src/mule-charset.c
Index: mule-charset.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/mule-charset.c,v
retrieving revision 1.40
retrieving revision 1.40.2.1
diff -u -r1.40 -r1.40.2.1
--- mule-charset.c 2004/11/04 23:06:42 1.40
+++ mule-charset.c 2005/03/15 05:24:32 1.40.2.1
@@ -173,9 +173,9 @@
{ XD_LISP_OBJECT, offsetof (Lisp_Charset, reverse_direction_charset) },
{ XD_LISP_OBJECT, offsetof (Lisp_Charset, ccl_program) },
{ XD_UNION, offsetof (Lisp_Charset, to_unicode_table),
- XD_INDIRECT (0, 0), &to_unicode_description },
+ XD_INDIRECT (0, 0), { &to_unicode_description } },
{ XD_UNION, offsetof (Lisp_Charset, from_unicode_table),
- XD_INDIRECT (1, 0), &from_unicode_description },
+ XD_INDIRECT (1, 0), { &from_unicode_description } },
{ XD_END }
};
1.32.2.1 +7 -7 XEmacs/xemacs/src/mule-coding.c
Index: mule-coding.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/mule-coding.c,v
retrieving revision 1.32
retrieving revision 1.32.2.1
diff -u -r1.32 -r1.32.2.1
--- mule-coding.c 2004/11/04 23:06:43 1.32
+++ mule-coding.c 2005/03/15 05:24:32 1.32.2.1
@@ -953,9 +953,9 @@
{ XD_LISP_OBJECT_ARRAY, offsetof (struct iso2022_coding_system,
initial_charset), 4 },
{ XD_BLOCK_PTR, offsetof (struct iso2022_coding_system, input_conv),
- 1, &ccsd_description },
+ 1, { &ccsd_description } },
{ XD_BLOCK_PTR, offsetof (struct iso2022_coding_system, output_conv),
- 1, &ccsd_description },
+ 1, { &ccsd_description } },
{ XD_END }
};
@@ -1247,7 +1247,7 @@
chars = 96; dim = 2;
break;
default:
- abort (); chars = 0; dim = 0;
+ ABORT (); chars = 0; dim = 0;
}
charset = Fmake_charset (Qunbound, Qnil,
@@ -1552,7 +1552,7 @@
else
{
/* Can this ever be reached? -slb */
- abort ();
+ ABORT ();
goto error;
}
@@ -1601,7 +1601,7 @@
designated:
if (NILP (cs) && check_invalid_charsets)
{
- abort ();
+ ABORT ();
/* #### This should never happen now that we automatically create
temporary charsets as necessary. We should probably remove
this code. --ben */
@@ -2241,7 +2241,7 @@
break;
default:
- abort ();
+ ABORT ();
}
}
char_boundary = 0;
@@ -2335,7 +2335,7 @@
}
break;
default:
- abort ();
+ ABORT ();
}
}
}
1.4.2.1 +1 -1 XEmacs/xemacs/src/native-gtk-toolbar.c
Index: native-gtk-toolbar.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/native-gtk-toolbar.c,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- native-gtk-toolbar.c 2004/09/20 19:19:52 1.4
+++ native-gtk-toolbar.c 2005/03/15 05:24:33 1.4.2.1
@@ -49,7 +49,7 @@
(frame)->right_toolbar_was_visible = flag; \
break; \
default: \
- abort (); \
+ ABORT (); \
} \
} while (0)
1.44.2.2 +98 -30 XEmacs/xemacs/src/nt.c
Index: nt.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/nt.c,v
retrieving revision 1.44.2.1
retrieving revision 1.44.2.2
diff -u -r1.44.2.1 -r1.44.2.2
--- nt.c 2004/12/11 05:16:22 1.44.2.1
+++ nt.c 2005/03/15 05:24:33 1.44.2.2
@@ -30,7 +30,7 @@
incomplete synching, so beware.)
Synched (completely!) with Emacs 20.6 by Ben Wing, 6-23-00.
Largely rewritten by Ben Wing for XEmacs Mule support.
- Synched (completely!) with Emacs 21.1.103 by Ben Wing, 6-13-01.
+ Synched (completely!) with Emacs 21.0.103 by Ben Wing, 6-13-01.
*/
/* This file Mule-ized by Ben Wing, 6-23-00. */
@@ -295,7 +295,7 @@
if (qxestrpbrk (name, "*?|<>\""))
return 0;
- C_STRING_TO_TSTR (name, nameext);
+ PATHNAME_CONVERT_OUT (name, nameext);
dir_handle = qxeFindFirstFile (nameext, &find_data);
if (dir_handle != INVALID_HANDLE_VALUE)
{
@@ -663,7 +663,7 @@
Ibyte drive[3] = { root_dir[0], ':' };
Extbyte *driveext;
- C_STRING_TO_TSTR (drive, driveext);
+ PATHNAME_CONVERT_OUT (drive, driveext);
if (qxeWNetGetConnection (driveext, remote_name,
sizeof (remote_name) / XETCHAR_SIZE)
== NO_ERROR)
@@ -682,7 +682,7 @@
Extbyte type[256 * MAX_XETCHAR_SIZE];
Extbyte *rootdirext;
- C_STRING_TO_TSTR (root_dir, rootdirext);
+ PATHNAME_CONVERT_OUT (root_dir, rootdirext);
/* Info is not cached, or is stale. */
if (!qxeGetVolumeInformation (rootdirext,
@@ -869,16 +869,16 @@
{
DECLARE_EISTRING (filename);
Ichar lastch;
+ Extbyte *fileext;
eicpy_rawz (filename, dir_pathname);
lastch = eigetch_char (filename, eicharlen (filename) - 1);
if (!IS_DIRECTORY_SEP (lastch))
eicat_ch (filename, '\\');
eicat_ch (filename, '*');
- eito_external (filename, Qmswindows_tstr);
+ PATHNAME_CONVERT_OUT (eidata (filename), fileext);
- dir_find_handle = qxeFindFirstFile (eiextdata (filename),
- &dir_find_data);
+ dir_find_handle = qxeFindFirstFile (fileext, &dir_find_data);
if (dir_find_handle == INVALID_HANDLE_VALUE)
return NULL;
@@ -902,6 +902,33 @@
DECLARE_EISTRING (found);
Bytecount namlen;
+ if (mswindows_shortcuts_are_symlinks)
+ {
+ int len = qxestrlen (val);
+ if (len > 4 && !qxestrcasecmp_ascii (val + len - 4, ".LNK"))
+ {
+ /* If we've found a valid link, then chop off the .LNK ending */
+ DECLARE_EISTRING (linkname);
+ Ichar lastch;
+ Ibyte *resolved;
+
+ /* First check if link is valid */
+ PATHNAME_RESOLVE_LINKS (dir_pathname, resolved);
+ eicpy_rawz (linkname, resolved);
+ lastch = eigetch_char (linkname, eicharlen (linkname) - 1);
+ if (!IS_DIRECTORY_SEP (lastch))
+ eicat_ch (linkname, '\\');
+ eicat_rawz (linkname, val);
+ resolved = mswindows_read_link (eidata (linkname));
+ if (resolved)
+ {
+ xfree (resolved, Ibyte *);
+ len -= 4;
+ val[len] = '\0';
+ }
+ }
+ }
+
eicpy_rawz (found, val);
if (need_to_free)
xfree (val, Ibyte *);
@@ -930,7 +957,7 @@
nr.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER;
nr.dwUsage = RESOURCEUSAGE_CONTAINER;
nr.lpLocalName = NULL;
- C_STRING_TO_TSTR (path, nr.lpRemoteName);
+ PATHNAME_CONVERT_OUT (path, nr.lpRemoteName);
nr.lpComment = NULL;
nr.lpProvider = NULL;
@@ -1023,7 +1050,7 @@
{
Extbyte *pathext;
- C_STRING_TO_TSTR (path, pathext);
+ PATHNAME_CONVERT_OUT (path, pathext);
if ((attributes = qxeGetFileAttributes (pathext)) == -1)
{
/* Should try mapping GetLastError to errno; for now just indicate
@@ -1066,7 +1093,7 @@
return -1;
}
- C_STRING_TO_TSTR (old, oldext);
+ PATHNAME_CONVERT_OUT (old, oldext);
fileh = qxeCreateFile (oldext, 0, 0, NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (fileh != INVALID_HANDLE_VALUE)
@@ -1175,8 +1202,8 @@
seems to make the second rename work properly. */
qxesprintf (p, "_.%s.%u", o, i);
i++;
- C_STRING_TO_EXTERNAL (oldname, oldext, Qfile_name);
- C_STRING_TO_EXTERNAL (temp, tempext, Qfile_name);
+ PATHNAME_CONVERT_OUT (oldname, oldext);
+ PATHNAME_CONVERT_OUT (temp, tempext);
result = rename (oldext, tempext);
}
/* This loop must surely terminate! */
@@ -1198,15 +1225,28 @@
{
Extbyte *newext, *tempext;
- C_STRING_TO_EXTERNAL (newname, newext, Qfile_name);
- C_STRING_TO_EXTERNAL (temp, tempext, Qfile_name);
- result = rename (tempext, newext);
-
- if (result < 0
- && (errno == EEXIST || errno == EACCES)
- && _chmod (newext, 0666) == 0
- && _unlink (newext) == 0)
- result = rename (tempext, newext);
+ PATHNAME_CONVERT_OUT (newname, newext);
+ PATHNAME_CONVERT_OUT (temp, tempext);
+ if (XEUNICODE_P)
+ {
+ result = _wrename ((const wchar_t *) tempext,
+ (const wchar_t *) newext);
+ if (result < 0
+ && (errno == EEXIST || errno == EACCES)
+ && _wchmod ((const wchar_t *) newext, 0666) == 0
+ && _wunlink ((const wchar_t *) newext) == 0)
+ result = _wrename ((const wchar_t *) tempext,
+ (const wchar_t *) newext);
+ }
+ else
+ {
+ result = rename (tempext, newext);
+ if (result < 0
+ && (errno == EEXIST || errno == EACCES)
+ && _chmod (newext, 0666) == 0
+ && _unlink (newext) == 0)
+ result = rename (tempext, newext);
+ }
}
return result;
@@ -1217,10 +1257,18 @@
{
Extbyte *pathout;
- C_STRING_TO_EXTERNAL (path, pathout, Qfile_name);
+ PATHNAME_CONVERT_OUT (path, pathout);
/* On Unix, unlink works without write permission. */
- _chmod (pathout, 0666);
- return _unlink (pathout);
+ if (XEUNICODE_P)
+ {
+ _wchmod ((const wchar_t *) pathout, 0666);
+ return _wunlink ((const wchar_t *) pathout);
+ }
+ else
+ {
+ _chmod (pathout, 0666);
+ return _unlink (pathout);
+ }
}
static FILETIME utc_base_ft;
@@ -1510,6 +1558,8 @@
{
if (!IS_DIRECTORY_SEP (name[len-1]))
qxestrcat (name, (Ibyte *) "\\");
+ /* File has already been resolved and we don't want to do it again
+ in case of lstat() */
C_STRING_TO_TSTR (name, nameext);
if (qxeGetDriveType (nameext) < 2)
{
@@ -1574,13 +1624,15 @@
else
{
if (!NILP (Vmswindows_get_true_file_attributes))
+ /* File has already been resolved and we don't want to do it again
+ in case of lstat() */
C_STRING_TO_TSTR (name, nameext);
if (!NILP (Vmswindows_get_true_file_attributes)
/* No access rights required to get info. */
&& (fh = qxeCreateFile (nameext, 0, 0, NULL, OPEN_EXISTING, 0, NULL))
!= INVALID_HANDLE_VALUE)
{
- /* This is more accurate in terms of gettting the correct number
+ /* This is more accurate in terms of getting the correct number
of links, but is quite slow (it is noticable when Emacs is
making a list of file name completions). */
BY_HANDLE_FILE_INFORMATION info;
@@ -1623,6 +1675,22 @@
buf->st_nlink = 1;
fake_inode = 0;
}
+
+ if (mswindows_shortcuts_are_symlinks &&
+ buf->st_mode == _S_IFREG)
+ {
+ len = qxestrlen (name);
+ if (len > 4 && !qxestrcasecmp_ascii (name + len - 4, ".LNK"))
+ {
+ /* check if link is valid */
+ Ibyte *resolved = mswindows_read_link (name);
+ if (resolved)
+ {
+ xfree (resolved, Ibyte *);
+ buf->st_mode = S_IFLNK;
+ }
+ }
+ }
}
SetErrorMode (errm);
@@ -1698,7 +1766,7 @@
times = &deftime;
}
- LISP_STRING_TO_TSTR (path, filename);
+ LISP_PATHNAME_CONVERT_OUT (path, filename);
/* APA: SetFileTime fails to set mtime correctly (always 1-Jan-1970) */
#if 0
/* Need write access to set times. */
@@ -1768,7 +1836,7 @@
DWORD size, upper_size;
Extbyte *fileext;
- C_STRING_TO_TSTR (filename, fileext);
+ PATHNAME_CONVERT_OUT (filename, fileext);
file = qxeCreateFile (fileext, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
@@ -1804,7 +1872,7 @@
void *file_base;
Extbyte *fileext;
- C_STRING_TO_TSTR (filename, fileext);
+ PATHNAME_CONVERT_OUT (filename, fileext);
file = qxeCreateFile (fileext, GENERIC_READ | GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
@@ -2007,7 +2075,7 @@
/* first expand it. */
filename = Fexpand_file_name (filename, Qnil);
- LISP_STRING_TO_TSTR (filename, fileext);
+ LISP_PATHNAME_CONVERT_OUT (filename, fileext);
/* luckily, this returns the short version of each element in the path. */
if (qxeGetShortPathName (fileext, shortname,
sizeof (shortname) / XETCHAR_SIZE) == 0)
@@ -2121,7 +2189,7 @@
{
Extbyte *driveext;
- C_STRING_TO_TSTR (drive, driveext);
+ PATHNAME_CONVERT_OUT (drive, driveext);
/* Record if this drive letter refers to a fixed drive. */
fixed_drives[DRIVE_INDEX (*drive)] =
1.12.2.1 +4 -6 XEmacs/xemacs/src/ntplay.c
Index: ntplay.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ntplay.c,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -r1.12 -r1.12.2.1
--- ntplay.c 2004/11/04 23:06:45 1.12
+++ ntplay.c 2005/03/15 05:24:34 1.12.2.1
@@ -35,14 +35,12 @@
int volume, int convert);
void
-play_sound_file (Extbyte *sound_file, int UNUSED (volume))
+nt_play_sound_file (Lisp_Object path, int UNUSED (volume))
{
DWORD flags = SND_ASYNC | SND_NODEFAULT | SND_FILENAME;
- Lisp_Object fname =
- Ffile_name_nondirectory (build_tstr_string (sound_file));
+ Lisp_Object fname = Ffile_name_nondirectory (path);
Extbyte *fnameext;
- CHECK_STRING (fname);
LISP_STRING_TO_TSTR (fname, fnameext);
if (qxeSearchPath (NULL, fnameext, NULL, 0, NULL, NULL) == 0)
@@ -50,9 +48,9 @@
/* file isn't in the path so read it as data */
int size;
Binbyte *data;
- int ofd = qxe_open (XSTRING_DATA (fname), O_RDONLY | OPEN_BINARY, 0);
+ int ofd = qxe_open (XSTRING_DATA (path), O_RDONLY | OPEN_BINARY, 0);
- if (ofd <0)
+ if (ofd < 0)
return;
size = lseek (ofd, 0, SEEK_END);
1.2.2.1 +1 -0 XEmacs/xemacs/src/number-gmp.h
Index: number-gmp.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/number-gmp.h,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- number-gmp.h 2004/09/20 19:19:53 1.2
+++ number-gmp.h 2005/03/15 05:24:34 1.2.2.1
@@ -152,6 +152,7 @@
#define ratio_set_bigfloat(r,f) mpq_set_f (r, f)
#define ratio_set_long_ulong(r,num,den) mpq_set_si (r, num, den)
#define ratio_set_ulong_ulong(r,num,den) mpq_set_ui (r, num, den)
+/* FIXME: Why does this canonicalize, but the previous 2 don't? */
#define ratio_set_bignum_bignum(r,num,den) do { \
mpz_set (mpq_numref (r), num); \
mpz_set (mpq_denref (r), den); \
1.12.2.1 +57 -31 XEmacs/xemacs/src/number.c
Index: number.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/number.c,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -r1.12 -r1.12.2.1
--- number.c 2004/09/20 19:19:54 1.12
+++ number.c 2005/03/15 05:24:34 1.12.2.1
@@ -24,6 +24,12 @@
#include <limits.h>
#include "lisp.h"
+#ifdef HAVE_BIGFLOAT
+#define USED_IF_BIGFLOAT(decl) decl
+#else
+#define USED_IF_BIGFLOAT(decl) UNUSED (decl)
+#endif
+
Lisp_Object Qrationalp, Qfloatingp, Qrealp;
Lisp_Object Vdefault_float_precision;
Fixnum Vmost_negative_fixnum, Vmost_positive_fixnum;
@@ -64,12 +70,43 @@
return bignum_hashcode (XBIGNUM_DATA (obj));
}
+static void
+bignum_convert (const void *object, void **data, Bytecount *size)
+{
+ CIbyte *bstr = bignum_to_string (*(bignum *)object, 10);
+ *data = bstr;
+ *size = strlen(bstr)+1;
+}
+
+static void
+bignum_convfree (const void * UNUSED (object), void *data,
+ Bytecount UNUSED (size))
+{
+ xfree (data, void *);
+}
+
+static void *
+bignum_deconvert (void *object, void *data, Bytecount UNUSED (size))
+{
+ bignum *b = (bignum *) object;
+ bignum_init(*b);
+ bignum_set_string(*b, (const char *) data, 10);
+ return object;
+}
+
+static const struct opaque_convert_functions bignum_opc = {
+ bignum_convert,
+ bignum_convfree,
+ bignum_deconvert
+};
+
static const struct memory_description bignum_description[] = {
- { XD_OPAQUE_PTR, offsetof (Lisp_Bignum, data) },
+ { XD_OPAQUE_DATA_CONVERTIBLE, offsetof (Lisp_Bignum, data),
+ 0, { &bignum_opc }, XD_FLAG_NO_KKCC },
{ XD_END }
};
-DEFINE_BASIC_LRECORD_IMPLEMENTATION ("bignum", bignum, 0, 0, bignum_print,
+DEFINE_BASIC_LRECORD_IMPLEMENTATION ("bignum", bignum, 1, 0, bignum_print,
0, bignum_equal, bignum_hash,
bignum_description, Lisp_Bignum);
@@ -401,7 +438,7 @@
return BIGFLOAT_T;
#endif
/* Catch unintentional bad uses of this function */
- abort ();
+ ABORT ();
/* NOTREACHED */
return FIXNUM_T;
}
@@ -425,7 +462,7 @@
number = make_int (marker_position (number));
/* Note that CHECK_NUMBER ensures that NUMBER is a supported type. Hence,
- we abort() in the #else sections below, because it shouldn't be possible
+ we ABORT() in the #else sections below, because it shouldn't be possible
to arrive there. */
CHECK_NUMBER (number);
current_type = get_number_type (number);
@@ -440,13 +477,13 @@
#ifdef HAVE_BIGNUM
return make_bignum (XREALINT (number));
#else
- abort ();
+ ABORT ();
#endif /* HAVE_BIGNUM */
case RATIO_T:
#ifdef HAVE_RATIO
return make_ratio (XREALINT (number), 1UL);
#else
- abort ();
+ ABORT ();
#endif /* HAVE_RATIO */
case FLOAT_T:
return make_float (XREALINT (number));
@@ -454,7 +491,7 @@
#ifdef HAVE_BIGFLOAT
return make_bigfloat (XREALINT (number), precision);
#else
- abort ();
+ ABORT ();
#endif /* HAVE_BIGFLOAT */
}
case BIGNUM_T:
@@ -470,7 +507,7 @@
bignum_set_long (scratch_bignum, 1L);
return make_ratio_bg (XBIGNUM_DATA (number), scratch_bignum);
#else
- abort ();
+ ABORT ();
#endif /* HAVE_RATIO */
case FLOAT_T:
return make_float (bignum_to_double (XBIGNUM_DATA (number)));
@@ -483,11 +520,11 @@
return temp;
}
#else
- abort ();
+ ABORT ();
#endif /* HAVE_BIGFLOAT */
}
#else
- abort ();
+ ABORT ();
#endif /* HAVE_BIGNUM */
case RATIO_T:
#ifdef HAVE_RATIO
@@ -514,11 +551,11 @@
return temp;
}
#else
- abort ();
+ ABORT ();
#endif /* HAVE_BIGFLOAT */
}
#else
- abort ();
+ ABORT ();
#endif /* HAVE_RATIO */
case FLOAT_T:
switch (type)
@@ -530,14 +567,14 @@
bignum_set_double (scratch_bignum, XFLOAT_DATA (number));
return make_bignum_bg (scratch_bignum);
#else
- abort ();
+ ABORT ();
#endif /* HAVE_BIGNUM */
case RATIO_T:
#ifdef HAVE_RATIO
ratio_set_double (scratch_ratio, XFLOAT_DATA (number));
return make_ratio_rt (scratch_ratio);
#else
- abort ();
+ ABORT ();
#endif /* HAVE_RATIO */
case FLOAT_T:
return number;
@@ -547,7 +584,7 @@
bigfloat_set_double (scratch_bigfloat, XFLOAT_DATA (number));
return make_bigfloat_bf (scratch_bigfloat);
#else
- abort ();
+ ABORT ();
#endif /* HAVE_BIGFLOAT */
}
case BIGFLOAT_T:
@@ -561,14 +598,14 @@
bignum_set_bigfloat (scratch_bignum, XBIGFLOAT_DATA (number));
return make_bignum_bg (scratch_bignum);
#else
- abort ();
+ ABORT ();
#endif /* HAVE_BIGNUM */
case RATIO_T:
#ifdef HAVE_RATIO
ratio_set_bigfloat (scratch_ratio, XBIGFLOAT_DATA (number));
return make_ratio_rt (scratch_ratio);
#else
- abort ();
+ ABORT ();
#endif
case FLOAT_T:
return make_float (bigfloat_to_double (XBIGFLOAT_DATA (number)));
@@ -577,10 +614,10 @@
return number;
}
#else
- abort ();
+ ABORT ();
#endif /* HAVE_BIGFLOAT */
}
- abort ();
+ ABORT ();
/* NOTREACHED */
return Qzero;
}
@@ -647,13 +684,7 @@
Note that some conversions lose information. No error is signaled in such
cases; the information is silently lost.
*/
- (number, type,
-#ifdef HAVE_BIGFLOAT
- precision
-#else
- UNUSED (precision)
-#endif
- ))
+ (number, type, USED_IF_BIGFLOAT (precision)))
{
CHECK_SYMBOL (type);
if (EQ (type, Qfixnum))
@@ -770,13 +801,8 @@
#ifdef HAVE_BIGFLOAT
#ifdef HAVE_BIGNUM
- /* Uncomment the next two lines and remove the line below them when dumping
- bignums becomes possible. */
- /*
Vbigfloat_max_prec = make_bignum (0L);
bignum_set_ulong (XBIGNUM_DATA (Vbigfloat_max_prec), ULONG_MAX);
- */
- Vbigfloat_max_prec = make_int (EMACS_INT_MAX);
#else
Vbigfloat_max_prec = make_int (EMACS_INT_MAX);
#endif
1.14.2.1 +15 -6 XEmacs/xemacs/src/objects-gtk.c
Index: objects-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/objects-gtk.c,v
retrieving revision 1.14
retrieving revision 1.14.2.1
diff -u -r1.14 -r1.14.2.1
--- objects-gtk.c 2004/09/20 19:19:54 1.14
+++ objects-gtk.c 2005/03/15 05:24:34 1.14.2.1
@@ -178,7 +178,7 @@
COLOR_INSTANCE_GTK_COLOR (c2)));
}
-static unsigned long
+static Hashcode
gtk_color_instance_hash (struct Lisp_Color_Instance *c, int UNUSED (depth))
{
return (gdk_color_hash (COLOR_INSTANCE_GTK_COLOR (c), NULL));
@@ -206,6 +206,14 @@
return (1);
}
+static Lisp_Object
+gtk_color_list (void)
+{
+ /* #### BILL!!!
+ Is this correct? */
+ return call0 (intern ("x-color-list-internal"));
+}
+
/************************************************************************/
/* font instances */
@@ -330,7 +338,7 @@
/* Forward declarations for X specific functions at the end of the file */
Lisp_Object __get_gtk_font_truename (GdkFont *gdk_font, int expandp);
-static Lisp_Object __gtk_list_fonts_internal (const char *pattern);
+static Lisp_Object __gtk_font_list_internal (const char *pattern);
static Lisp_Object
gtk_font_instance_truename (struct Lisp_Font_Instance *f,
@@ -361,14 +369,14 @@
}
static Lisp_Object
-gtk_list_fonts (Lisp_Object pattern, Lisp_Object UNUSED (device),
+gtk_font_list (Lisp_Object pattern, Lisp_Object UNUSED (device),
Lisp_Object UNUSED (maxnumber))
{
const char *patternext;
TO_EXTERNAL_FORMAT (LISP_STRING, pattern, C_STRING_ALLOCA, patternext, Qbinary);
- return (__gtk_list_fonts_internal (patternext));
+ return (__gtk_font_list_internal (patternext));
}
#ifdef MULE
@@ -454,13 +462,14 @@
CONSOLE_HAS_METHOD (gtk, color_instance_hash);
CONSOLE_HAS_METHOD (gtk, color_instance_rgb_components);
CONSOLE_HAS_METHOD (gtk, valid_color_name_p);
+ CONSOLE_HAS_METHOD (gtk, color_list);
CONSOLE_HAS_METHOD (gtk, initialize_font_instance);
CONSOLE_HAS_METHOD (gtk, print_font_instance);
CONSOLE_HAS_METHOD (gtk, finalize_font_instance);
CONSOLE_HAS_METHOD (gtk, font_instance_truename);
CONSOLE_HAS_METHOD (gtk, font_instance_properties);
- CONSOLE_HAS_METHOD (gtk, list_fonts);
+ CONSOLE_HAS_METHOD (gtk, font_list);
#ifdef MULE
CONSOLE_HAS_METHOD (gtk, find_charset_font);
CONSOLE_HAS_METHOD (gtk, font_spec_matches_charset);
@@ -587,7 +596,7 @@
return (font_name);
}
-static Lisp_Object __gtk_list_fonts_internal (const char *pattern)
+static Lisp_Object __gtk_font_list_internal (const char *pattern)
{
char **names;
int count = 0;
1.43.2.2 +11 -13 XEmacs/xemacs/src/objects-msw.c
Index: objects-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/objects-msw.c,v
retrieving revision 1.43.2.1
retrieving revision 1.43.2.2
diff -u -r1.43.2.1 -r1.43.2.2
--- objects-msw.c 2004/12/11 05:16:24 1.43.2.1
+++ objects-msw.c 2005/03/15 05:24:35 1.43.2.2
@@ -2,7 +2,7 @@
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
Copyright (C) 1995 Board of Trustees, University of Illinois.
Copyright (C) 1995 Tinker Systems.
- Copyright (C) 1995, 1996, 2000, 2001, 2002 Ben Wing.
+ Copyright (C) 1995, 1996, 2000, 2001, 2002, 2004 Ben Wing.
Copyright (C) 1995 Sun Microsystems, Inc.
Copyright (C) 1997 Jonathan Harris.
@@ -1390,7 +1390,7 @@
COLOR_INSTANCE_MSWINDOWS_COLOR (c2));
}
-static unsigned long
+static Hashcode
mswindows_color_instance_hash (Lisp_Color_Instance *c, int UNUSED (depth))
{
return (unsigned long) COLOR_INSTANCE_MSWINDOWS_COLOR (c);
@@ -1926,7 +1926,7 @@
}
static Lisp_Object
-mswindows_list_fonts (Lisp_Object pattern, Lisp_Object device,
+mswindows_font_list (Lisp_Object pattern, Lisp_Object device,
Lisp_Object UNUSED (maxnumber))
{
struct device *d = XDEVICE (device);
@@ -1937,7 +1937,7 @@
else if (DEVICE_MSPRINTER_P (d))
font_list = DEVICE_MSPRINTER_FONTLIST (d);
else
- abort ();
+ ABORT ();
LIST_LOOP (fonttail, font_list)
{
@@ -2188,7 +2188,7 @@
/* If FONT specifies a particular charset, this will only list fonts with
that charset; otherwise, it will list fonts with all charsets. */
- fontlist = mswindows_list_fonts (font, device, Qnil);
+ fontlist = mswindows_font_list (font, device, Qnil);
if (!stage)
{
@@ -2219,10 +2219,8 @@
/* non-methods */
/************************************************************************/
-DEFUN ("mswindows-color-list", Fmswindows_color_list, 0, 0, 0, /*
-Return a list of the colors available on mswindows devices.
-*/
- ())
+static Lisp_Object
+mswindows_color_list (void)
{
Lisp_Object result = Qnil;
int i;
@@ -2233,7 +2231,6 @@
return Fnreverse (result);
}
-
/************************************************************************/
/* initialization */
@@ -2242,7 +2239,6 @@
void
syms_of_objects_mswindows (void)
{
- DEFSUBR (Fmswindows_color_list);
}
void
@@ -2257,13 +2253,14 @@
CONSOLE_HAS_METHOD (mswindows, color_instance_hash);
CONSOLE_HAS_METHOD (mswindows, color_instance_rgb_components);
CONSOLE_HAS_METHOD (mswindows, valid_color_name_p);
+ CONSOLE_HAS_METHOD (mswindows, color_list);
CONSOLE_HAS_METHOD (mswindows, initialize_font_instance);
/* CONSOLE_HAS_METHOD (mswindows, mark_font_instance); */
CONSOLE_HAS_METHOD (mswindows, print_font_instance);
CONSOLE_HAS_METHOD (mswindows, finalize_font_instance);
CONSOLE_HAS_METHOD (mswindows, font_instance_truename);
- CONSOLE_HAS_METHOD (mswindows, list_fonts);
+ CONSOLE_HAS_METHOD (mswindows, font_list);
#ifdef MULE
CONSOLE_HAS_METHOD (mswindows, font_spec_matches_charset);
CONSOLE_HAS_METHOD (mswindows, find_charset_font);
@@ -2280,13 +2277,14 @@
CONSOLE_INHERITS_METHOD (msprinter, mswindows, color_instance_hash);
CONSOLE_INHERITS_METHOD (msprinter, mswindows, color_instance_rgb_components);
CONSOLE_INHERITS_METHOD (msprinter, mswindows, valid_color_name_p);
+ CONSOLE_INHERITS_METHOD (msprinter, mswindows, color_list);
CONSOLE_HAS_METHOD (msprinter, initialize_font_instance);
/* CONSOLE_INHERITS_METHOD (msprinter, mswindows, mark_font_instance); */
CONSOLE_INHERITS_METHOD (msprinter, mswindows, print_font_instance);
CONSOLE_INHERITS_METHOD (msprinter, mswindows, finalize_font_instance);
CONSOLE_INHERITS_METHOD (msprinter, mswindows, font_instance_truename);
- CONSOLE_INHERITS_METHOD (msprinter, mswindows, list_fonts);
+ CONSOLE_INHERITS_METHOD (msprinter, mswindows, font_list);
#ifdef MULE
CONSOLE_INHERITS_METHOD (msprinter, mswindows, font_spec_matches_charset);
CONSOLE_INHERITS_METHOD (msprinter, mswindows, find_charset_font);
1.14.2.1 +6 -8 XEmacs/xemacs/src/objects-tty.c
Index: objects-tty.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/objects-tty.c,v
retrieving revision 1.14
retrieving revision 1.14.2.1
diff -u -r1.14 -r1.14.2.1
--- objects-tty.c 2004/11/04 23:06:45 1.14
+++ objects-tty.c 2005/03/15 05:24:35 1.14.2.1
@@ -106,10 +106,8 @@
return Qnil;
}
-DEFUN ("tty-color-list", Ftty_color_list, 0, 0, 0, /*
-Return a list of the registered TTY colors.
-*/
- ())
+static Lisp_Object
+tty_color_list (void)
{
Lisp_Object result = Qnil;
Lisp_Object rest;
@@ -213,7 +211,7 @@
COLOR_INSTANCE_TTY_SYMBOL (c2)));
}
-static unsigned long
+static Hashcode
tty_color_instance_hash (Lisp_Color_Instance *c, int UNUSED (depth))
{
return LISP_HASH (COLOR_INSTANCE_TTY_SYMBOL (c));
@@ -293,7 +291,7 @@
}
static Lisp_Object
-tty_list_fonts (Lisp_Object UNUSED (pattern), Lisp_Object UNUSED (device),
+tty_font_list (Lisp_Object UNUSED (pattern), Lisp_Object UNUSED (device),
Lisp_Object UNUSED (maxnumber))
{
return list1 (build_string ("normal"));
@@ -368,7 +366,6 @@
DEFSUBR (Fregister_tty_color);
DEFSUBR (Funregister_tty_color);
DEFSUBR (Ffind_tty_color);
- DEFSUBR (Ftty_color_list);
#if 0
DEFSUBR (Fset_tty_dynamic_color_specs);
DEFSUBR (Ftty_dynamic_color_specs);
@@ -386,12 +383,13 @@
CONSOLE_HAS_METHOD (tty, color_instance_equal);
CONSOLE_HAS_METHOD (tty, color_instance_hash);
CONSOLE_HAS_METHOD (tty, valid_color_name_p);
+ CONSOLE_HAS_METHOD (tty, color_list);
CONSOLE_HAS_METHOD (tty, initialize_font_instance);
CONSOLE_HAS_METHOD (tty, mark_font_instance);
CONSOLE_HAS_METHOD (tty, print_font_instance);
CONSOLE_HAS_METHOD (tty, finalize_font_instance);
- CONSOLE_HAS_METHOD (tty, list_fonts);
+ CONSOLE_HAS_METHOD (tty, font_list);
#ifdef MULE
CONSOLE_HAS_METHOD (tty, font_spec_matches_charset);
CONSOLE_HAS_METHOD (tty, find_charset_font);
1.26.2.15 +10 -3 XEmacs/xemacs/src/objects-x.c
Index: objects-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/objects-x.c,v
retrieving revision 1.26.2.14
retrieving revision 1.26.2.15
diff -u -r1.26.2.14 -r1.26.2.15
--- objects-x.c 2005/03/11 14:31:59 1.26.2.14
+++ objects-x.c 2005/03/15 05:24:35 1.26.2.15
@@ -165,7 +165,7 @@
(color1.blue == color2.blue));
}
-static unsigned long
+static Hashcode
x_color_instance_hash (Lisp_Color_Instance *c, int UNUSED (depth))
{
XColor color = COLOR_INSTANCE_X_COLOR (c);
@@ -194,6 +194,12 @@
return XParseColor (dpy, cmap, extname, &c);
}
+static Lisp_Object
+x_color_list (void)
+{
+ return call0 (intern ("x-color-list-internal"));
+}
+
/************************************************************************/
/* font instances */
@@ -896,7 +902,7 @@
}
static Lisp_Object
-x_list_fonts (Lisp_Object pattern, Lisp_Object device, Lisp_Object maxnumber)
+x_font_list (Lisp_Object pattern, Lisp_Object device, Lisp_Object maxnumber)
{
Extbyte **names;
int count = 0;
@@ -1397,13 +1403,14 @@
CONSOLE_HAS_METHOD (x, color_instance_hash);
CONSOLE_HAS_METHOD (x, color_instance_rgb_components);
CONSOLE_HAS_METHOD (x, valid_color_name_p);
+ CONSOLE_HAS_METHOD (x, color_list);
CONSOLE_HAS_METHOD (x, initialize_font_instance);
CONSOLE_HAS_METHOD (x, print_font_instance);
CONSOLE_HAS_METHOD (x, finalize_font_instance);
CONSOLE_HAS_METHOD (x, font_instance_truename);
CONSOLE_HAS_METHOD (x, font_instance_properties);
- CONSOLE_HAS_METHOD (x, list_fonts);
+ CONSOLE_HAS_METHOD (x, font_list);
#ifdef MULE
CONSOLE_HAS_METHOD (x, find_charset_font);
CONSOLE_HAS_METHOD (x, font_spec_matches_charset);
1.23.2.2 +28 -15 XEmacs/xemacs/src/objects.c
Index: objects.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/objects.c,v
retrieving revision 1.23.2.1
retrieving revision 1.23.2.2
diff -u -r1.23.2.1 -r1.23.2.2
--- objects.c 2005/03/05 18:09:30 1.23.2.1
+++ objects.c 2005/03/15 05:24:36 1.23.2.2
@@ -1,7 +1,7 @@
/* Generic Objects and Functions.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995 Board of Trustees, University of Illinois.
- Copyright (C) 1995, 1996, 2002 Ben Wing.
+ Copyright (C) 1995, 1996, 2002, 2004 Ben Wing.
This file is part of XEmacs.
@@ -63,7 +63,7 @@
static const struct memory_description color_instance_data_description_1 []= {
#ifdef HAVE_TTY
- { XD_BLOCK_PTR, tty_console, 1, &tty_color_instance_data_description},
+ { XD_BLOCK_PTR, tty_console, 1, { &tty_color_instance_data_description } },
#endif
{ XD_END }
};
@@ -77,7 +77,7 @@
{ XD_LISP_OBJECT, offsetof (Lisp_Color_Instance, name)},
{ XD_LISP_OBJECT, offsetof (Lisp_Color_Instance, device)},
{ XD_UNION, offsetof (Lisp_Color_Instance, data),
- XD_INDIRECT (0, 0), &color_instance_data_description },
+ XD_INDIRECT (0, 0), { &color_instance_data_description } },
{XD_END}
};
@@ -133,13 +133,13 @@
DEVMETH (XDEVICE (c1->device), color_instance_equal, (c1, c2, depth)));
}
-static unsigned long
+static Hashcode
color_instance_hash (Lisp_Object obj, int depth)
{
Lisp_Color_Instance *c = XCOLOR_INSTANCE (obj);
struct device *d = DEVICEP (c->device) ? XDEVICE (c->device) : 0;
- return HASH2 ((unsigned long) d,
+ return HASH2 ((Hashcode) d,
!d ? LISP_HASH (obj)
: DEVMETH_OR_GIVEN (d, color_instance_hash, (c, depth),
LISP_HASH (obj)));
@@ -248,6 +248,18 @@
return MAYBE_INT_DEVMETH (d, valid_color_name_p, (d, color)) ? Qt : Qnil;
}
+DEFUN ("color-list", Fcolor_list, 0, 1, 0, /*
+Return a list of color names.
+DEVICE specifies which device to return names for, and defaults to the
+currently selected device.
+*/
+ (device))
+{
+ device = wrap_device (decode_device (device));
+
+ return MAYBE_LISP_DEVMETH (XDEVICE (device), color_list, ());
+}
+
/***************************************************************************
* Font-Instance Object *
@@ -260,7 +272,7 @@
static const struct memory_description font_instance_data_description_1 []= {
#ifdef HAVE_TTY
- { XD_BLOCK_PTR, tty_console, 1, &tty_font_instance_data_description},
+ { XD_BLOCK_PTR, tty_console, 1, { &tty_font_instance_data_description} },
#endif
{ XD_END }
};
@@ -276,7 +288,7 @@
{ 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_INDIRECT (0, 0), { &font_instance_data_description } },
{ XD_END }
};
@@ -335,7 +347,7 @@
depth + 1);
}
-static unsigned long
+static Hashcode
font_instance_hash (Lisp_Object obj, int depth)
{
return internal_hash (font_instance_truename_internal
@@ -521,7 +533,7 @@
font_instance_properties, (f));
}
-DEFUN ("list-fonts", Flist_fonts, 1, 3, 0, /*
+DEFUN ("font-list", Ffont_list, 1, 3, 0, /*
Return a list of font names matching the given pattern.
DEVICE specifies which device to search for names, and defaults to the
currently selected device.
@@ -531,7 +543,7 @@
CHECK_STRING (pattern);
device = wrap_device (decode_device (device));
- return MAYBE_LISP_DEVMETH (XDEVICE (device), list_fonts, (pattern, device,
+ return MAYBE_LISP_DEVMETH (XDEVICE (device), font_list, (pattern, device,
maxnumber));
}
@@ -633,7 +645,7 @@
XVECTOR_DATA (instantiator)[1], domain, ERROR_ME, 0, depth));
default:
- abort ();
+ ABORT ();
}
}
else if (NILP (instantiator))
@@ -645,7 +657,7 @@
device);
}
else
- abort (); /* The spec validation routines are screwed up. */
+ ABORT (); /* The spec validation routines are screwed up. */
return Qunbound;
}
@@ -909,7 +921,7 @@
else if (NILP (instantiator))
return Qunbound;
else
- abort (); /* Eh? */
+ ABORT (); /* Eh? */
return Qunbound;
}
@@ -1040,7 +1052,7 @@
return retval;
}
else
- abort (); /* Eh? */
+ ABORT (); /* Eh? */
return Qunbound;
}
@@ -1136,6 +1148,7 @@
DEFSUBR (Fcolor_instance_name);
DEFSUBR (Fcolor_instance_rgb_components);
DEFSUBR (Fvalid_color_name_p);
+ DEFSUBR (Fcolor_list);
DEFSYMBOL_MULTIWORD_PREDICATE (Qfont_instancep);
DEFSUBR (Fmake_font_instance);
@@ -1148,7 +1161,7 @@
DEFSUBR (Ffont_instance_proportional_p);
DEFSUBR (Ffont_instance_truename);
DEFSUBR (Ffont_instance_properties);
- DEFSUBR (Flist_fonts);
+ DEFSUBR (Ffont_list);
/* Qcolor, Qfont defined in general.c */
DEFSYMBOL (Qface_boolean);
1.18.2.1 +4 -4 XEmacs/xemacs/src/opaque.c
Index: opaque.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/opaque.c,v
retrieving revision 1.18
retrieving revision 1.18.2.1
diff -u -r1.18 -r1.18.2.1
--- opaque.c 2004/09/20 19:19:55 1.18
+++ opaque.c 2005/03/15 05:24:36 1.18.2.1
@@ -100,11 +100,11 @@
/* This will not work correctly for opaques with subobjects! */
-static unsigned long
+static Hashcode
hash_opaque (Lisp_Object obj, int UNUSED (depth))
{
if (XOPAQUE_SIZE (obj) == sizeof (unsigned long))
- return *((unsigned long *) XOPAQUE_DATA (obj));
+ return *((Hashcode *) XOPAQUE_DATA (obj));
else
return memory_hash (XOPAQUE_DATA (obj), XOPAQUE_SIZE (obj));
}
@@ -141,10 +141,10 @@
return (XOPAQUE_PTR (obj1)->ptr == XOPAQUE_PTR (obj2)->ptr);
}
-static unsigned long
+static Hashcode
hash_opaque_ptr (Lisp_Object obj, int UNUSED (depth))
{
- return (unsigned long) XOPAQUE_PTR (obj)->ptr;
+ return (Hashcode) XOPAQUE_PTR (obj)->ptr;
}
static const struct memory_description opaque_ptr_description[] = {
1.51.2.1 +2 -2 XEmacs/xemacs/src/print.c
Index: print.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/print.c,v
retrieving revision 1.51
retrieving revision 1.51.2.1
diff -u -r1.51 -r1.51.2.1
--- print.c 2004/11/04 23:06:46 1.51
+++ print.c 2005/03/15 05:24:36 1.51.2.1
@@ -1151,7 +1151,7 @@
}
}
-#define ONE_DIGIT(figure) *p++ = n / (figure) + '0'
+#define ONE_DIGIT(figure) *p++ = (char) (n / (figure) + '0')
#define ONE_DIGIT_ADVANCE(figure) (ONE_DIGIT (figure), n %= (figure))
#define DIGITS_1(figure) ONE_DIGIT (figure)
@@ -1503,7 +1503,7 @@
if (!inhibit_non_essential_conversion_operations)
{
#ifdef ERROR_CHECK_TYPES
- abort ();
+ ABORT ();
#else /* not ERROR_CHECK_TYPES */
if (print_readably)
signal_ferror (Qinternal_error, "printing %s", buf);
1.35.2.2 +7 -4 XEmacs/xemacs/src/process-nt.c
Index: process-nt.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/process-nt.c,v
retrieving revision 1.35.2.1
retrieving revision 1.35.2.2
diff -u -r1.35.2.1 -r1.35.2.2
--- process-nt.c 2004/12/11 05:16:26 1.35.2.1
+++ process-nt.c 2005/03/15 05:24:37 1.35.2.2
@@ -764,13 +764,15 @@
if (mswindows_is_executable (XSTRING_DATA (program)))
{
Extbyte *progext;
- LISP_STRING_TO_TSTR (program, progext);
+ LISP_PATHNAME_CONVERT_OUT (program, progext);
image_type = qxeSHGetFileInfo (progext, 0, NULL, 0, SHGFI_EXETYPE);
}
else
{
DECLARE_EISTRING (progext);
- eicpy_lstr (progext, program);
+ Ibyte *prog2;
+ LISP_PATHNAME_RESOLVE_LINKS (program, prog2);
+ eicpy_rawz (progext, prog2);
eicat_ascii (progext, ".exe");
eito_external (progext, Qmswindows_tstr);
image_type = qxeSHGetFileInfo (eiextdata (progext), 0, NULL, 0,
@@ -858,6 +860,7 @@
("Bogus return value from `mswindows-construct-process-command-line'",
args_or_ret);
+ /* #### What about path names, which may be links? */
LISP_STRING_TO_TSTR (args_or_ret, command_line);
UNGCPRO; /* args_or_ret */
@@ -994,7 +997,7 @@
{
Extbyte *curdirext;
- LISP_STRING_TO_TSTR (cur_dir, curdirext);
+ LISP_PATHNAME_CONVERT_OUT (cur_dir, curdirext);
err = (qxeCreateProcess (NULL, command_line, NULL, NULL, TRUE,
(XEUNICODE_P ?
@@ -1111,7 +1114,7 @@
chunklen = Lstream_read (lstream, chunkbuf, 512);
if (chunklen <= 0)
- break; /* perhaps should abort() if < 0?
+ break; /* perhaps should ABORT() if < 0?
This should never happen. */
/* Lstream_write() will never successfully write less than the
1.55.2.1 +28 -18 XEmacs/xemacs/src/process-unix.c
Index: process-unix.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/process-unix.c,v
retrieving revision 1.55
retrieving revision 1.55.2.1
diff -u -r1.55 -r1.55.2.1
--- process-unix.c 2004/11/04 23:06:46 1.55
+++ process-unix.c 2005/03/15 05:24:37 1.55.2.1
@@ -1511,30 +1511,38 @@
Ibyte chunkbuf[512];
Bytecount chunklen;
- while (1)
+ do
{
int writeret;
chunklen = Lstream_read (lstream, chunkbuf, 512);
- if (chunklen <= 0)
- break; /* perhaps should abort() if < 0?
- This should never happen. */
old_sigpipe =
(SIGTYPE (*) (int)) EMACS_SIGNAL (SIGPIPE, send_process_trap);
- /* Lstream_write() will never successfully write less than
- the amount sent in. In the worst case, it just buffers
- the unwritten data. */
- writeret = Lstream_write (XLSTREAM (DATA_OUTSTREAM (p)), chunkbuf,
- chunklen);
- {
- int save_errno = errno;
- EMACS_SIGNAL (SIGPIPE, old_sigpipe);
- errno = save_errno;
- if (writeret < 0)
- /* This is a real error. Blocking errors are handled
- specially inside of the filedesc stream. */
- report_process_error ("writing to process", proc);
- }
+ if (chunklen > 0)
+ {
+ int save_errno;
+
+ /* Lstream_write() will never successfully write less than
+ the amount sent in. In the worst case, it just buffers
+ the unwritten data. */
+ writeret = Lstream_write (XLSTREAM (DATA_OUTSTREAM(p)), chunkbuf,
+ chunklen);
+ save_errno = errno;
+ EMACS_SIGNAL (SIGPIPE, old_sigpipe);
+ errno = save_errno;
+ if (writeret < 0)
+ /* This is a real error. Blocking errors are handled
+ specially inside of the filedesc stream. */
+ report_file_error ("writing to process", list1 (proc));
+ }
+ else
+ {
+ /* Need to make sure that everything up to and including the
+ last chunk is flushed, even when the pipe is currently
+ blocked. */
+ Lstream_flush (XLSTREAM (DATA_OUTSTREAM(p)));
+ EMACS_SIGNAL (SIGPIPE, old_sigpipe);
+ }
while (Lstream_was_blocked_p (XLSTREAM (p->pipe_outstream)))
{
/* Buffer is full. Wait, accepting input;
@@ -1549,7 +1557,9 @@
Lstream_flush (XLSTREAM (p->pipe_outstream));
EMACS_SIGNAL (SIGPIPE, old_sigpipe);
}
+ /* Perhaps should ABORT() if < 0? This should never happen. */
}
+ while (chunklen > 0);
}
else
{ /* We got here from a longjmp() from the SIGPIPE handler */
1.65.2.1 +1 -1 XEmacs/xemacs/src/process.c
Index: process.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/process.c,v
retrieving revision 1.65
retrieving revision 1.65.2.1
diff -u -r1.65 -r1.65.2.1
--- process.c 2004/11/04 23:06:47 1.65
+++ process.c 2005/03/15 05:24:37 1.65.2.1
@@ -382,7 +382,7 @@
#endif
/* This may be called during a GC from process_send_signal() from
- kill_buffer_processes() if emacs decides to abort(). */
+ kill_buffer_processes() if emacs decides to ABORT(). */
if (PROCESSP (name))
return name;
else if (STRINGP (name))
1.21.2.2 +29 -3 XEmacs/xemacs/src/profile.c
Index: profile.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/profile.c,v
retrieving revision 1.21.2.1
retrieving revision 1.21.2.2
diff -u -r1.21.2.1 -r1.21.2.2
--- profile.c 2004/12/11 05:16:28 1.21.2.1
+++ profile.c 2005/03/15 05:24:38 1.21.2.2
@@ -1,5 +1,5 @@
/* Why the hell is XEmacs so fucking slow?
- Copyright (C) 1996, 2002, 2003 Ben Wing.
+ Copyright (C) 1996, 2002, 2003, 2004 Ben Wing.
Copyright (C) 1998 Free Software Foundation, Inc.
This file is part of XEmacs.
@@ -68,6 +68,15 @@
static Lisp_Object QSprocessing_events_at_top_level;
static Lisp_Object QSunknown, QSprofile_overhead;
+#ifdef DEBUG_XEMACS
+/* For temporary profiling */
+Lisp_Object QSin_temp_spot_1;
+Lisp_Object QSin_temp_spot_2;
+Lisp_Object QSin_temp_spot_3;
+Lisp_Object QSin_temp_spot_4;
+Lisp_Object QSin_temp_spot_5;
+#endif /* DEBUG_XEMACS */
+
static Lisp_Object Qtiming, Qtotal_timing, Qcall_count;
static Lisp_Object Qgc_usage, Qtotal_gc_usage;
@@ -100,7 +109,7 @@
static const struct memory_description plain_hash_table_description_1[] = {
{ XD_ELEMCOUNT, offsetof (struct hash_table, size) },
{ XD_BLOCK_PTR, offsetof (struct hash_table, harray), XD_INDIRECT (0, 0),
- &hentry_description },
+ { &hentry_description } },
{ XD_END }
};
@@ -600,7 +609,7 @@
void *UNUSED (void_closure))
{
#ifdef USE_KKCC
- kkcc_gc_stack_push_lisp_object (VOID_TO_LISP (void_key));
+ kkcc_gc_stack_push_lisp_object (VOID_TO_LISP (void_key), 0, -1);
#else /* NOT USE_KKCC */
mark_object (VOID_TO_LISP (void_key));
#endif /* NOT USE_KKCC */
@@ -672,6 +681,23 @@
#endif /* 0 */
profiling_lock = 0;
+
+#ifdef DEBUG_XEMACS
+ QSin_temp_spot_1 = build_msg_string ("(in temp spot 1)");
+ staticpro (&QSin_temp_spot_1);
+
+ QSin_temp_spot_2 = build_msg_string ("(in temp spot 2)");
+ staticpro (&QSin_temp_spot_2);
+
+ QSin_temp_spot_3 = build_msg_string ("(in temp spot 3)");
+ staticpro (&QSin_temp_spot_3);
+
+ QSin_temp_spot_4 = build_msg_string ("(in temp spot 4)");
+ staticpro (&QSin_temp_spot_4);
+
+ QSin_temp_spot_5 = build_msg_string ("(in temp spot 5)");
+ staticpro (&QSin_temp_spot_5);
+#endif /* DEBUG_XEMACS */
QSunknown = build_msg_string ("(unknown)");
staticpro (&QSunknown);
1.1.4.1 +27 -0 XEmacs/xemacs/src/profile.h
Index: profile.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/profile.h,v
retrieving revision 1.1
retrieving revision 1.1.4.1
diff -u -r1.1 -r1.1.4.1
--- profile.h 2003/02/13 09:57:08 1.1
+++ profile.h 2005/03/15 05:24:38 1.1.4.1
@@ -95,3 +95,30 @@
if (do_backtrace) \
POP_BACKTRACE (backtrace); \
} while (0)
+
+#define RETURN_EXIT_PROFILING(tag, type, expr) \
+do \
+{ \
+ type _ret_exitpr_ = (expr); \
+ PROFILE_RECORD_EXITING_SECTION (tag); \
+ RETURN_SANS_WARNINGS _ret_exitpr_; \
+} while (0)
+
+#define RETURN_LISP_EXIT_PROFILING(tag, expr) \
+ RETURN_EXIT_PROFILING (tag, Lisp_Object, expr)
+
+#define RETURN_UNGCPRO_EXIT_PROFILING(tag, expr) \
+{ \
+ Lisp_Object ret_ungc_val = (expr); \
+ UNGCPRO; \
+ PROFILE_RECORD_EXITING_SECTION (tag); \
+ RETURN_SANS_WARNINGS ret_ungc_val; \
+} while (0)
+
+#ifdef DEBUG_XEMACS
+extern Lisp_Object QSin_temp_spot_1;
+extern Lisp_Object QSin_temp_spot_2;
+extern Lisp_Object QSin_temp_spot_3;
+extern Lisp_Object QSin_temp_spot_4;
+extern Lisp_Object QSin_temp_spot_5;
+#endif /* DEBUG_XEMACS */
1.18.2.1 +15 -15 XEmacs/xemacs/src/ralloc.c
Index: ralloc.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ralloc.c,v
retrieving revision 1.18
retrieving revision 1.18.2.1
diff -u -r1.18 -r1.18.2.1
--- ralloc.c 2003/11/20 16:04:47 1.18
+++ ralloc.c 2005/03/15 05:24:38 1.18.2.1
@@ -256,7 +256,7 @@
}
if (! heap)
- abort ();
+ ABORT ();
/* If we can't fit SIZE bytes in that heap,
try successive later heaps. */
@@ -362,7 +362,7 @@
/* This heap should have no blocs in it. */
if (last_heap->first_bloc != NIL_BLOC
|| last_heap->last_bloc != NIL_BLOC)
- abort ();
+ ABORT ();
/* Return the last heap, with its header, to the system. */
excess = (char *)last_heap->end - (char *)last_heap->start;
@@ -377,7 +377,7 @@
}
if ((*real_morecore) (- excess) == 0)
- abort ();
+ ABORT ();
}
}
@@ -480,7 +480,7 @@
/* No need to ever call this if arena is frozen, bug somewhere! */
if (r_alloc_freeze_level)
- abort();
+ ABORT();
while (b)
{
@@ -635,7 +635,7 @@
/* No need to ever call this if arena is frozen, bug somewhere! */
if (r_alloc_freeze_level)
- abort();
+ ABORT();
if (bloc == NIL_BLOC || size == bloc->size)
return 1;
@@ -647,7 +647,7 @@
}
if (heap == NIL_HEAP)
- abort ();
+ ABORT ();
old_size = bloc->size;
bloc->size = size;
@@ -978,7 +978,7 @@
dead_bloc = find_bloc (ptr);
if (dead_bloc == NIL_BLOC)
- abort ();
+ ABORT ();
free_bloc (dead_bloc);
*ptr = 0;
@@ -1023,7 +1023,7 @@
bloc = find_bloc (ptr);
if (bloc == NIL_BLOC)
- abort ();
+ ABORT ();
if (size < bloc->size)
{
@@ -1093,7 +1093,7 @@
init_ralloc ();
if (--r_alloc_freeze_level < 0)
- abort ();
+ ABORT ();
/* This frees all unused blocs. It is not too inefficient, as the resize
and memmove is done only once. Afterwards, all unreferenced blocs are
@@ -1137,7 +1137,7 @@
first_heap->start = first_heap->bloc_start
= virtual_break_value = break_value = (*real_morecore) (0);
if (break_value == NIL)
- abort ();
+ ABORT ();
page_size = PAGE;
extra_bytes = ROUNDUP (50000);
@@ -1813,13 +1813,13 @@
{
if (p->addr == addr)
{
- if (p->sz != sz) abort(); /* ACK! Shouldn't happen at all. */
+ if (p->sz != sz) ABORT(); /* ACK! Shouldn't happen at all. */
munmap( (VM_ADDR) p->addr, p->sz );
p->flag = empty;
break;
}
}
- if (!p) abort(); /* Can't happen... we've got a block to free which is not
in
+ if (!p) ABORT(); /* Can't happen... we've got a block to free which is not
in
the address list. */
Coalesce_Addr_Blocks();
}
@@ -1867,7 +1867,7 @@
switch(r_alloc_initialized)
{
case 0:
- abort();
+ ABORT();
case 1:
*ptr = (POINTER) UNDERLYING_MALLOC(size);
break;
@@ -1910,7 +1910,7 @@
switch( r_alloc_initialized) {
case 0:
- abort();
+ ABORT();
case 1:
UNDERLYING_FREE( *ptr ); /* Certain this is from the heap. */
@@ -1954,7 +1954,7 @@
if (r_alloc_initialized == 0)
{
- abort ();
+ ABORT ();
return 0; /* suppress compiler warning */
}
else if (r_alloc_initialized == 1)
1.17.2.2 +8 -7 XEmacs/xemacs/src/rangetab.c
Index: rangetab.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/rangetab.c,v
retrieving revision 1.17.2.1
retrieving revision 1.17.2.2
diff -u -r1.17.2.1 -r1.17.2.2
--- rangetab.c 2004/12/11 05:16:28 1.17.2.1
+++ rangetab.c 2005/03/15 05:24:38 1.17.2.2
@@ -75,7 +75,7 @@
return Qstart_open_end_closed;
}
- abort ();
+ ABORT ();
return Qnil;
}
@@ -119,7 +119,7 @@
case RANGE_START_CLOSED_END_CLOSED: so = 0, ec = 1; break;
case RANGE_START_OPEN_END_OPEN: so = 1, ec = 0; break;
case RANGE_START_OPEN_END_CLOSED: so = 1; ec = 1; break;
- default: abort (); so = 0, ec = 0; break;
+ default: ABORT (); so = 0, ec = 0; break;
}
write_fmt_string (printcharfun, "%c%ld %ld%c ",
print_readably ? '(' : so ? '(' : '[',
@@ -159,19 +159,19 @@
return 1;
}
-static unsigned long
+static Hashcode
range_table_entry_hash (struct range_table_entry *rte, int depth)
{
return HASH3 (rte->first, rte->last, internal_hash (rte->val, depth + 1));
}
-static unsigned long
+static Hashcode
range_table_hash (Lisp_Object obj, int depth)
{
Lisp_Range_Table *rt = XRANGE_TABLE (obj);
int i;
int size = Dynarr_length (rt->entries);
- unsigned long hash = size;
+ Hashcode hash = size;
/* approach based on internal_array_hash(). */
if (size <= 5)
@@ -214,7 +214,8 @@
};
static const struct memory_description range_table_description[] = {
- { XD_BLOCK_PTR, offsetof (Lisp_Range_Table, entries), 1, &rted_description },
+ { XD_BLOCK_PTR, offsetof (Lisp_Range_Table, entries), 1,
+ { &rted_description } },
{ XD_END }
};
@@ -652,7 +653,7 @@
if (EQ (key, Qtype)) type = value;
else if (EQ (key, Qdata)) data = value;
else
- abort ();
+ ABORT ();
}
rangetab = Fmake_range_table (type);
1.19.2.2 +76 -21 XEmacs/xemacs/src/realpath.c
Index: realpath.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/realpath.c,v
retrieving revision 1.19.2.1
retrieving revision 1.19.2.2
diff -u -r1.19.2.1 -r1.19.2.2
--- realpath.c 2004/12/11 05:16:30 1.19.2.1
+++ realpath.c 2005/03/15 05:24:39 1.19.2.2
@@ -1,7 +1,7 @@
/*
* realpath.c -- canonicalize pathname by removing symlinks
* Copyright (C) 1993 Rick Sladkey <jrs(a)world.std.com>
- * Copyright (C) 2001, 2002 Ben Wing.
+ * Copyright (C) 2001, 2002, 2004 Ben Wing.
*
This file is part of XEmacs.
@@ -31,6 +31,8 @@
#include <config.h>
#include "lisp.h"
+#include "profile.h"
+
#include "sysfile.h"
#include "sysdir.h"
@@ -43,6 +45,8 @@
#endif
#endif
+Lisp_Object QSin_qxe_realpath;
+
/* Length of start of absolute filename. */
static int
abs_start (const Ibyte *name)
@@ -59,25 +63,31 @@
return IS_DIRECTORY_SEP (*name) ? 1 : 0;
#endif
}
+
+/* Find real name of a file by resolving symbolic links and/or shortcuts
+ under Windows (.LNK links), if such support is enabled.
-/* Find real name of a file by resolving symbolic links and (under Windows)
- looking up the correct case of the file as it appears on the file
- system.
+ If no link found, and LINKS_ONLY is false, look up the correct case in
+ the file system of the last component.
Under Windows, UNC servers and shares are lower-cased. Directories must
be given without trailing '/'. One day, this could read Win2K's reparse
- points. */
+ points.
+ Returns length of characters copied info BUF.
+ DOES NOT ZERO TERMINATE!!!!!
+*/
+
static int
-readlink_and_correct_case (const Ibyte *name, Ibyte *buf,
- int size)
+readlink_or_correct_case (const Ibyte *name, Ibyte *buf, Bytecount size,
+ Boolint links_only)
{
#ifndef WIN32_ANY
- return qxe_readlink (name, buf, size);
+ return qxe_readlink (name, buf, (size_t) size);
#else
# ifdef CYGWIN
Ibyte *tmp;
- int n = qxe_readlink (name, buf, size);
+ int n = qxe_readlink (name, buf, (size_t) size);
if (n >= 0 || errno != EINVAL)
return n;
@@ -87,8 +97,33 @@
alloca_ibytes (cygwin_posix_to_win32_path_list_buf_size ((char *) name));
cygwin_posix_to_win32_path_list ((char *) name, (char *) tmp);
name = tmp;
+# else
+ if (mswindows_shortcuts_are_symlinks)
+ {
+ Ibyte *tmp = mswindows_read_link (name);
+
+ if (tmp != NULL)
+ {
+ /* Fucking fixed buffers. */
+ Bytecount len = qxestrlen (tmp);
+ if (len > size)
+ {
+ errno = ENAMETOOLONG;
+ return -1;
+ }
+ memcpy (buf, tmp, len);
+ xfree (tmp, Ibyte *);
+ return len;
+ }
+ }
# endif
+ if (links_only)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+
{
int len = 0;
int err = 0;
@@ -144,16 +179,16 @@
FindClose (dir_handle);
}
- if ((len = eilen (result)) < size)
+ if ((len = eilen (result)) <= size)
{
DECLARE_EISTRING (eilastname);
eicpy_rawz (eilastname, lastname);
if (eicmp_ei (eilastname, result) == 0)
- /* Signal that the name is already OK. */
- err = EINVAL;
+ /* Signal that the name is already OK. */
+ err = EINVAL;
else
- memcpy (buf, eidata (result), len + 1);
+ memcpy (buf, eidata (result), len);
}
else
err = ENAMETOOLONG;
@@ -165,14 +200,18 @@
}
/* Mule Note: This function works with and returns
- internally-formatted strings. */
+ internally-formatted strings.
+
+ if LINKS_ONLY is true, don't do case canonicalization under
+ Windows. */
Ibyte *
-qxe_realpath (const Ibyte *path, Ibyte *resolved_path)
+qxe_realpath (const Ibyte *path, Ibyte *resolved_path, Boolint links_only)
{
Ibyte copy_path[PATH_MAX_INTERNAL];
Ibyte *new_path = resolved_path;
Ibyte *max_path;
+ Ibyte *retval = NULL;
#if defined (HAVE_READLINK) || defined (WIN32_ANY)
int readlinks = 0;
Ibyte link_path[PATH_MAX_INTERNAL];
@@ -180,6 +219,10 @@
int abslen = abs_start (path);
#endif
+ PROFILE_DECLARE ();
+
+ PROFILE_RECORD_ENTERING_SECTION (QSin_qxe_realpath);
+
restart:
/* Make a copy of the source path since we may need to modify it. */
@@ -288,7 +331,7 @@
if (path > max_path)
{
errno = ENAMETOOLONG;
- return NULL;
+ goto done;
}
*new_path++ = *path++;
}
@@ -297,7 +340,8 @@
/* See if latest pathname component is a symlink or needs case
correction. */
*new_path = '\0';
- n = readlink_and_correct_case (resolved_path, link_path, PATH_MAX_INTERNAL - 1);
+ n = readlink_or_correct_case (resolved_path, link_path,
+ PATH_MAX_INTERNAL - 1, links_only);
if (n < 0)
{
@@ -308,7 +352,7 @@
#else
if (errno != EINVAL)
#endif
- return NULL;
+ goto done;
}
else
{
@@ -316,7 +360,7 @@
if (readlinks++ > MAX_READLINKS)
{
errno = ELOOP;
- return NULL;
+ goto done;
}
/* Note: readlink doesn't add the null byte. */
@@ -340,7 +384,7 @@
if (qxestrlen (path) + n >= PATH_MAX_INTERNAL)
{
errno = ENAMETOOLONG;
- return NULL;
+ goto done;
}
/* Insert symlink contents into path. */
@@ -360,5 +404,16 @@
/* Make sure it's null terminated. */
*new_path = '\0';
- return resolved_path;
+ retval = resolved_path;
+done:
+ PROFILE_RECORD_EXITING_SECTION (QSin_qxe_realpath);
+ return retval;
+}
+
+void
+vars_of_realpath (void)
+{
+ QSin_qxe_realpath =
+ build_msg_string ("(in qxe_realpath)");
+ staticpro (&QSin_qxe_realpath);
}
1.16.2.1 +3 -3 XEmacs/xemacs/src/redisplay-gtk.c
Index: redisplay-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/redisplay-gtk.c,v
retrieving revision 1.16
retrieving revision 1.16.2.1
diff -u -r1.16 -r1.16.2.1
--- redisplay-gtk.c 2004/11/04 23:06:48 1.16
+++ redisplay-gtk.c 2005/03/15 05:24:39 1.16.2.1
@@ -458,7 +458,7 @@
break;
case IMAGE_POINTER:
- abort ();
+ ABORT ();
case IMAGE_WIDGET:
if (EQ (XIMAGE_INSTANCE_WIDGET_TYPE (instance),
@@ -482,14 +482,14 @@
break;
default:
- abort ();
+ ABORT ();
}
xpos += rb->width;
elt++;
}
else
- abort ();
+ ABORT ();
}
}
1.41.2.1 +2 -2 XEmacs/xemacs/src/redisplay-msw.c
Index: redisplay-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/redisplay-msw.c,v
retrieving revision 1.41
retrieving revision 1.41.2.1
diff -u -r1.41 -r1.41.2.1
--- redisplay-msw.c 2004/11/04 23:06:48 1.41
+++ redisplay-msw.c 2005/03/15 05:24:40 1.41.2.1
@@ -1079,7 +1079,7 @@
case IMAGE_TEXT:
case IMAGE_POINTER:
default:
- abort ();
+ ABORT ();
}
IMAGE_INSTANCE_OPTIMIZE_OUTPUT
(XIMAGE_INSTANCE (instance)) = 0;
@@ -1088,7 +1088,7 @@
elt++;
}
else
- abort ();
+ ABORT ();
}
}
1.25.2.1 +4 -4 XEmacs/xemacs/src/redisplay-output.c
Index: redisplay-output.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/redisplay-output.c,v
retrieving revision 1.25
retrieving revision 1.25.2.1
diff -u -r1.25 -r1.25.2.1
--- redisplay-output.c 2004/09/20 19:19:57 1.25
+++ redisplay-output.c 2005/03/15 05:24:40 1.25.2.1
@@ -419,7 +419,7 @@
else if (start_pos <= bounds.right_out)
*next_start = bounds.right_out;
else
- abort ();
+ ABORT ();
}
for (block = 0; block < Dynarr_length (dba); block++)
@@ -462,7 +462,7 @@
int defheight, defwidth;
if (Dynarr_length (db->runes) <= cursor_location)
- abort ();
+ ABORT ();
window = wrap_window (w);
@@ -1610,7 +1610,7 @@
case IMAGE_POINTER:
default:
- abort ();
+ ABORT ();
}
}
IMAGE_INSTANCE_OPTIMIZE_OUTPUT (childii) = 0;
@@ -1722,7 +1722,7 @@
f = XFRAME (locale);
}
else
- abort ();
+ ABORT ();
d = XDEVICE (f->device);
1.24.2.1 +2 -2 XEmacs/xemacs/src/redisplay-tty.c
Index: redisplay-tty.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/redisplay-tty.c,v
retrieving revision 1.24
retrieving revision 1.24.2.1
diff -u -r1.24 -r1.24.2.1
--- redisplay-tty.c 2004/11/04 23:06:49 1.24
+++ redisplay-tty.c 2005/03/15 05:24:41 1.24.2.1
@@ -355,7 +355,7 @@
case IMAGE_TEXT:
case IMAGE_POINTER:
default:
- abort ();
+ ABORT ();
}
IMAGE_INSTANCE_OPTIMIZE_OUTPUT
(XIMAGE_INSTANCE (instance)) = 0;
@@ -365,7 +365,7 @@
elt++;
}
else
- abort ();
+ ABORT ();
}
}
1.39.2.5 +2 -2 XEmacs/xemacs/src/redisplay-x.c
Index: redisplay-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/redisplay-x.c,v
retrieving revision 1.39.2.4
retrieving revision 1.39.2.5
diff -u -r1.39.2.4 -r1.39.2.5
--- redisplay-x.c 2005/03/09 06:31:42 1.39.2.4
+++ redisplay-x.c 2005/03/15 05:24:42 1.39.2.5
@@ -603,7 +603,7 @@
case IMAGE_TEXT:
case IMAGE_POINTER:
default:
- abort ();
+ ABORT ();
}
IMAGE_INSTANCE_OPTIMIZE_OUTPUT
(XIMAGE_INSTANCE (instance)) = 0;
@@ -613,7 +613,7 @@
elt++;
}
else
- abort ();
+ ABORT ();
}
}
1.92.2.2 +72 -147 XEmacs/xemacs/src/redisplay.c
Index: redisplay.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/redisplay.c,v
retrieving revision 1.92.2.1
retrieving revision 1.92.2.2
diff -u -r1.92.2.1 -r1.92.2.2
--- redisplay.c 2004/11/25 12:44:16 1.92.2.1
+++ redisplay.c 2005/03/15 05:24:42 1.92.2.2
@@ -522,7 +522,7 @@
};
static const struct memory_description rune_object_description_1[] = {
- { XD_BLOCK_ARRAY, RUNE_DGLYPH, 1, &rune_dglyph_description },
+ { XD_BLOCK_ARRAY, RUNE_DGLYPH, 1, { &rune_dglyph_description } },
{ XD_END }
};
@@ -533,7 +533,7 @@
static const struct memory_description rune_description_1[] = {
{ XD_INT, offsetof (rune, type) },
{ XD_UNION, offsetof (rune, object),
- XD_INDIRECT (0, 0), &rune_object_description },
+ XD_INDIRECT (0, 0), { &rune_object_description } },
{ XD_END }
};
@@ -554,7 +554,7 @@
static const struct memory_description display_block_description_1[] = {
{ XD_BLOCK_PTR, offsetof (display_block, runes),
- 1, &rune_dynarr_description },
+ 1, { &rune_dynarr_description } },
{ XD_END }
};
@@ -596,11 +596,11 @@
static const struct memory_description display_line_description_1[] = {
{ XD_BLOCK_PTR, offsetof (display_line, display_blocks),
- 1, &display_block_dynarr_description },
+ 1, { &display_block_dynarr_description } },
{ XD_BLOCK_PTR, offsetof (display_line, left_glyphs),
- 1, &glyph_block_dynarr_description },
+ 1, { &glyph_block_dynarr_description } },
{ XD_BLOCK_PTR, offsetof (display_line, right_glyphs),
- 1, &glyph_block_dynarr_description },
+ 1, { &glyph_block_dynarr_description } },
{ XD_END }
};
@@ -1764,7 +1764,7 @@
}
break;
default:
- abort ();
+ ABORT ();
}
}
@@ -1959,7 +1959,7 @@
/* Otherwise something is screwed up. */
else
- abort ();
+ ABORT ();
}
face = glyph_face (gb->glyph, data->window);
@@ -2067,7 +2067,7 @@
return NULL;
}
else
- abort (); /* there are no unknown types */
+ ABORT (); /* there are no unknown types */
}
return NULL;
@@ -3098,7 +3098,7 @@
struct glyph_block *gb = Dynarr_atp (gbd, elt);
if (NILP (gb->extent))
- abort (); /* these should have been handled in add_glyph_rune */
+ ABORT (); /* these should have been handled in add_glyph_rune */
if (gb->active &&
((side == LEFT_GLYPHS &&
@@ -3183,7 +3183,7 @@
struct glyph_block *gb = Dynarr_atp (dl->left_glyphs, elt);
if (NILP (gb->extent))
- abort (); /* these should have been handled in add_glyph_rune */
+ ABORT (); /* these should have been handled in add_glyph_rune */
if (extent_begin_glyph_layout (XEXTENT (gb->extent)) == GL_WHITESPACE)
{
@@ -3235,7 +3235,7 @@
struct glyph_block *gb = Dynarr_atp (dl->left_glyphs, elt);
if (NILP (gb->extent))
- abort (); /* these should have been handled in add_glyph_rune */
+ ABORT (); /* these should have been handled in add_glyph_rune */
if (extent_begin_glyph_layout (XEXTENT (gb->extent)) ==
GL_INSIDE_MARGIN)
@@ -3304,7 +3304,7 @@
struct glyph_block *gb = Dynarr_atp (dl->left_glyphs, elt);
if (NILP (gb->extent))
- abort (); /* these should have been handled in add_glyph_rune */
+ ABORT (); /* these should have been handled in add_glyph_rune */
if (extent_begin_glyph_layout (XEXTENT (gb->extent)) ==
GL_INSIDE_MARGIN)
@@ -3346,7 +3346,7 @@
struct glyph_block *gb = Dynarr_atp (dl->left_glyphs, elt);
if (NILP (gb->extent))
- abort (); /* these should have been handled in add_glyph_rune */
+ ABORT (); /* these should have been handled in add_glyph_rune */
if (extent_begin_glyph_layout (XEXTENT (gb->extent)) ==
GL_OUTSIDE_MARGIN)
@@ -3504,7 +3504,7 @@
struct glyph_block *gb = Dynarr_atp (dl->right_glyphs, elt);
if (NILP (gb->extent))
- abort (); /* these should have been handled in add_glyph_rune */
+ ABORT (); /* these should have been handled in add_glyph_rune */
if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_WHITESPACE)
{
@@ -3554,7 +3554,7 @@
struct glyph_block *gb = Dynarr_atp (dl->right_glyphs, elt);
if (NILP (gb->extent))
- abort (); /* these should have been handled in add_glyph_rune */
+ ABORT (); /* these should have been handled in add_glyph_rune */
if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_INSIDE_MARGIN)
{
@@ -3618,7 +3618,7 @@
struct glyph_block *gb = Dynarr_atp (dl->right_glyphs, elt);
if (NILP (gb->extent))
- abort (); /* these should have been handled in add_glyph_rune */
+ ABORT (); /* these should have been handled in add_glyph_rune */
if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_INSIDE_MARGIN)
{
@@ -3659,7 +3659,7 @@
struct glyph_block *gb = Dynarr_atp (dl->right_glyphs, elt);
if (NILP (gb->extent))
- abort (); /* these should have been handled in add_glyph_rune */
+ ABORT (); /* these should have been handled in add_glyph_rune */
if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_OUTSIDE_MARGIN)
{
@@ -4106,20 +4106,20 @@
/* A string. Add to the display line and check for %-constructs
within it. */
- Ibyte *this = XSTRING_DATA (elt);
+ Ibyte *this_str = XSTRING_DATA (elt);
- while ((pos < max_pos || max_pos == -1) && *this)
+ while ((pos < max_pos || max_pos == -1) && *this_str)
{
- Ibyte *last = this;
+ Ibyte *last = this_str;
- while (*this && *this != '%')
- this++;
+ while (*this_str && *this_str != '%')
+ this_str++;
- if (this != last)
+ if (this_str != last)
{
/* No %-construct */
Charcount size =
- bytecount_to_charcount (last, this - last);
+ bytecount_to_charcount (last, this_str - last);
if (size <= *offset)
*offset -= size;
@@ -4134,32 +4134,32 @@
*offset = 0;
}
}
- else /* *this == '%' */
+ else /* *this_str == '%' */
{
Charcount spec_width = 0;
- this++; /* skip over '%' */
+ this_str++; /* skip over '%' */
/* We can't allow -ve args due to the "%-" construct.
* Argument specifies minwidth but not maxwidth
* (maxwidth can be specified by
* (<negative-number> . <stuff>) modeline elements)
*/
- while (isdigit (*this))
+ while (isdigit (*this_str))
{
- spec_width = spec_width * 10 + (*this - '0');
- this++;
+ spec_width = spec_width * 10 + (*this_str - '0');
+ this_str++;
}
spec_width += pos;
- if (*this == 'M')
+ if (*this_str == 'M')
{
pos = generate_fstring_runes (w, data, pos, spec_width,
max_pos, Vglobal_mode_string,
depth, max_pixsize, findex,
type, offset, cur_ext);
}
- else if (*this == '-')
+ else if (*this_str == '-')
{
Charcount num_to_add;
@@ -4190,9 +4190,9 @@
pos = add_string_to_fstring_db_runes
(data, (const Ibyte *) "-", pos, pos, max_pos);
}
- else if (*this != 0)
+ else if (*this_str != 0)
{
- Ichar ch = itext_ichar (this);
+ Ichar ch = itext_ichar (this_str);
Ibyte *str;
Charcount size;
@@ -4219,9 +4219,9 @@
}
}
- /* NOT this++. There could be any sort of character at
+ /* NOT this_str++. There could be any sort of character at
the current position. */
- INC_IBYTEPTR (this);
+ INC_IBYTEPTR (this_str);
}
if (max_pixsize > 0)
@@ -5289,112 +5289,11 @@
return ret_charcount;
}
-
-/* Tricky tricky tricky. generate_displayable_area() can (could) be called
reentrantly, and redisplay is not prepared to handle this:
+/*
-assert_failed(const char * 0x0129c8c8 `string', int 5328, const char * 0x01274068
`string') line 3620
-Dynarr_verify_mod_1(void * 0x0250f228, const char * 0x0129c8c8 `string', int 5328)
line 1256 + 36 bytes
-generate_displayable_area(window * 0x02480028, long 38776292, int 0, int 0, int 265,
int 169, display_line_dynarr * 0x0250f228, long 0, int 2) line 5328 + 25 bytes
-output_gutter(frame * 0x0228ad90, gutter_pos TOP_GUTTER, int 1) line 409 + 69 bytes
-redraw_exposed_gutter(frame * 0x0228ad90, gutter_pos TOP_GUTTER, int 8, int 23, int
249, int 127) line 687 + 15 bytes
-redraw_exposed_gutters(frame * 0x0228ad90, int 8, int 23, int 249, int 127) line 703 +
29 bytes
-mswindows_redraw_exposed_area(frame * 0x0228ad90, int 8, int 23, int 249, int 127) line
862 + 25 bytes
-mswindows_handle_paint(frame * 0x0228ad90) line 2176 + 25 bytes
-mswindows_wnd_proc(HWND__ * 0x001003e2, unsigned int 15, unsigned int 0, long 0) line
3233 + 45 bytes
-intercepted_wnd_proc(HWND__ * 0x001003e2, unsigned int 15, unsigned int 0, long 0) line
2488
-USER32! 77e3a244()
-USER32! 77e14730()
-USER32! 77e1558a()
-NTDLL! KiUserCallbackDispatcher@12 + 19 bytes
-USER32! 77e14680()
-USER32! 77e1a792()
-qxeIsDialogMessage(HWND__ * 0x001003e2, tagMSG * 0x0082a93c {msg=0x0000000f
wp=0x00000000 lp=0x00000000}) line 2298 + 14 bytes
-mswindows_is_dialog_msg(tagMSG * 0x0082a93c {msg=0x0000000f wp=0x00000000
lp=0x00000000}) line 165 + 13 bytes
-mswindows_drain_windows_queue(int 0) line 1282 + 9 bytes
-emacs_mswindows_drain_queue() line 1326 + 7 bytes
-event_stream_drain_queue() line 1887
-event_stream_quit_p() line 1992
-check_quit() line 993
-unbind_to_hairy(int 35) line 5963
-unbind_to_1(int 35, long 20888208) line 5945 + 200 bytes
-specifier_instance_from_inst_list(long 21379344, long 38135616, long 36220304, long
20888208, _error_behavior_struct_ {...}, int 1, long 3) line 2522 + 16 bytes
-specifier_instance(long 21379344, long 38135616, long 36220304, _error_behavior_struct_
{...}, int 1, int 0, long 3) line 2625 + 65 bytes
-specifier_instance_no_quit(long 21379344, long 38135616, long 36220304,
_error_behavior_struct_ {...}, int 0, long 1) line 2658 + 31 bytes
-face_property_matching_instance(long 22612340, long 20860632, long 22530956, long
36220304, _error_behavior_struct_ {...}, int 0, long 1) line 565 + 48 bytes
-ensure_face_cachel_contains_charset(face_cachel * 0x0082b014, long 36220304, long
22530956) line 1104 + 35 bytes
-update_face_cachel_data(face_cachel * 0x0082b014, long 36220304, long 22612340) line
1304 + 19 bytes
-query_string_geometry(long 21110576, long 22612340, int * 0x00000000, int * 0x0082b5b4,
int * 0x00000000, long 38852960) line 2370 + 23 bytes
-mswindows_widget_query_string_geometry(long 21110576, long 22612340, int * 0x0082b5b8,
int * 0x0082b5b4, long 38852960) line 2914 + 25 bytes
-widget_query_string_geometry(long 21110576, long 22612340, int * 0x0082b5b8, int *
0x0082b5b4, long 38852960) line 514 + 32 bytes
-edit_field_query_geometry(long 38857648, int * 0x0082b7b4, int * 0x0082b7b8,
image_instance_geometry IMAGE_DESIRED_GEOMETRY, long 38852960) line 920 + 390 bytes
-widget_query_geometry(long 38857648, int * 0x0082b7b4, int * 0x0082b7b8,
image_instance_geometry IMAGE_DESIRED_GEOMETRY, long 38852960) line 567 + 26 bytes
-image_instance_query_geometry(long 38857648, int * 0x0082b7b4, int * 0x0082b7b8,
image_instance_geometry IMAGE_DESIRED_GEOMETRY, long 38852960) line 2015 + 26 bytes
-glyph_query_geometry(long 38853384, int * 0x0082b7b4, int * 0x0082b7b8,
image_instance_geometry IMAGE_DESIRED_GEOMETRY, long 38852960) line 4197 + 25 bytes
-layout_query_geometry(long 38852960, int * 0x0082b9cc, int * 0x0082b9d0,
image_instance_geometry IMAGE_DESIRED_GEOMETRY, long 38404624) line 1351 + 25 bytes
-widget_query_geometry(long 38852960, int * 0x0082b9cc, int * 0x0082b9d0,
image_instance_geometry IMAGE_DESIRED_GEOMETRY, long 38404624) line 567 + 26 bytes
-image_instance_query_geometry(long 38852960, int * 0x0082b9cc, int * 0x0082b9d0,
image_instance_geometry IMAGE_DESIRED_GEOMETRY, long 38404624) line 2015 + 26 bytes
-glyph_query_geometry(long 38537976, int * 0x0082b9cc, int * 0x0082b9d0,
image_instance_geometry IMAGE_DESIRED_GEOMETRY, long 38404624) line 4197 + 25 bytes
-layout_layout(long 38404624, int 265, int 156, int -2, int -2, long 38273064) line 1468
+ 23 bytes
-widget_layout(long 38404624, int 265, int 156, int -2, int -2, long 38273064) line 626
+ 30 bytes
-image_instance_layout(long 38404624, int 265, int 156, int -2, int -2, long 38273064)
line 2102 + 51 bytes
-glyph_ascent(long 38404624, long 38273064) line 4009 + 21 bytes
-update_glyph_cachel_data(window * 0x02480028, long 36201168, glyph_cachel * 0x0248c3d8)
line 4272 + 13 bytes
-get_glyph_cachel_index(window * 0x02480028, long 36201168) line 4306 + 17 bytes
-add_glyph_rune(position_redisplay_data_type * 0x0082bf2c, glyph_block * 0x024bd028, int
0, int 0, glyph_cachel * 0x00000000) line 1800 + 15 bytes
-add_glyph_runes(position_redisplay_data_type * 0x0082bf2c, int 0) line 2085 + 31 bytes
-create_string_text_block(window * 0x02480028, long 38776292, display_line * 0x02514500,
long 0, prop_block_dynarr * * 0x0082c13c, int 2) line 4907 + 14 bytes
-generate_string_display_line(window * 0x02480028, long 38776292, display_line *
0x02514500, long 0, prop_block_dynarr * * 0x0082c13c, int 2) line 5293 + 29 bytes
-generate_displayable_area(window * 0x02480028, long 38776292, int 0, int 0, int 265,
int 169, display_line_dynarr * 0x0250f228, long 0, int 2) line 5372 + 29 bytes
-output_gutter(frame * 0x0228ad90, gutter_pos TOP_GUTTER, int 0) line 409 + 69 bytes
-update_frame_gutters(frame * 0x0228ad90) line 639 + 15 bytes
-redisplay_frame(frame * 0x0228ad90, int 1) line 6792 + 9 bytes
-redisplay_device(device * 0x0171df00, int 1) line 6911 + 11 bytes
-redisplay_without_hooks() line 6957 + 11 bytes
-redisplay_no_pre_idle_hook() line 7029
-redisplay() line 7011
-mswindows_wnd_proc(HWND__ * 0x001003e2, unsigned int 5, unsigned int 0, long 10223881)
line 3424
-intercepted_wnd_proc(HWND__ * 0x001003e2, unsigned int 5, unsigned int 0, long
10223881) line 2488
-USER32! 77e3a244()
-USER32! 77e16362()
-USER32! 77e14c1a()
-USER32! 77e1dd30()
-mswindows_wnd_proc(HWND__ * 0x001003e2, unsigned int 71, unsigned int 0, long 8578308)
line 3926 + 21 bytes
-intercepted_wnd_proc(HWND__ * 0x001003e2, unsigned int 71, unsigned int 0, long
8578308) line 2488
-USER32! 77e3a244()
-USER32! 77e14730()
-USER32! 77e174b4()
-NTDLL! KiUserCallbackDispatcher@12 + 19 bytes
-mswindows_set_frame_size(frame * 0x0228ad90, int 265, int 156) line 355
-internal_set_frame_size(frame * 0x0228ad90, int 265, int 156, int 0) line 2754 + 24
bytes
-Fset_frame_displayable_pixel_size(long 36220304, long 531, long 313, long 20888208)
line 3004 + 32 bytes
-Ffuncall(int 4, long * 0x0082e778) line 3844 + 168 bytes
-execute_optimized_program(const unsigned char * 0x02286e48, int 40, long * 0x01529b80)
line 609 + 16 bytes
-funcall_compiled_function(long 22433308, int 0, long * 0x0082ec08) line 3452 + 85
bytes
-Ffuncall(int 1, long * 0x0082ec04) line 3883 + 17 bytes
-execute_optimized_program(const unsigned char * 0x02286d40, int 6, long * 0x01548ddc)
line 609 + 16 bytes
-funcall_compiled_function(long 22505864, int 11, long * 0x0082f00c) line 3452 + 85
bytes
-Ffuncall(int 12, long * 0x0082f008) line 3883 + 17 bytes
-execute_optimized_program(const unsigned char * 0x02503e38, int 47, long * 0x0152dc48)
line 609 + 16 bytes
-funcall_compiled_function(long 22436784, int 0, long * 0x0082f534) line 3452 + 85
bytes
-Ffuncall(int 1, long * 0x0082f530) line 3883 + 17 bytes
-apply1(long 22436784, long 20888208) line 4458 + 11 bytes
-Fcall_interactively(long 20742816, long 20888208, long 20888208) line 460 + 13 bytes
-Ffuncall(int 2, long * 0x0082f8ec) line 3844 + 127 bytes
-call1(long 20854392, long 20742816) line 4489 + 11 bytes
-execute_command_event(command_builder * 0x01798f98, long 24439276) line 4198 + 69
bytes
-Fdispatch_event(long 24439276) line 4569 + 13 bytes
-Fcommand_loop_1() line 569 + 9 bytes
-command_loop_1(long 20888208) line 489
-condition_case_1(long 20886024, long (long)* 0x010955a0 command_loop_1(long), long
20888208, long (long, long)* 0x01095150 cmd_error(long, long), long 20888208) line 1917 +
7 bytes
-command_loop_3() line 251 + 35 bytes
-command_loop_2(long 20888208) line 264
-internal_catch(long 20650992, long (long)* 0x010952c0 command_loop_2(long), long
20888208, int * volatile 0x00000000, long * volatile 0x00000000) line 1527 + 7 bytes
-initial_command_loop(long 20888208) line 300 + 28 bytes
-xemacs_21_5_b10_i586_pc_win32(int 1, char * * 0x00e52620, char * * 0x00e52bb0, int 0)
line 2356
-main(int 1, char * * 0x00e52620, char * * 0x00e52bb0) line 2733
-mainCRTStartup() line 338 + 17 bytes
-KERNEL32! 77ea847c()
+Info on Re-entrancy crashes, with backtraces given:
+ (Info-goto-node "(internals)Nasty Bugs due to Reentrancy in Redisplay Structures
handling QUIT")
*/
@@ -5410,17 +5309,22 @@
{
int yend = ypos + height;
Charcount s_zv;
-
prop_block_dynarr *prop = 0;
layout_bounds bounds;
- assert (dla);
+ int depth = -1;
- Dynarr_reset (dla);
/* if there's nothing to do then do nothing. code after this assumes
there is something to do. */
if (NILP (disp_string))
return;
+ /* See comment in regenerate_window() */
+ if (!in_display)
+ depth = enter_redisplay_critical_section ();
+
+ assert (dla);
+ Dynarr_reset (dla);
+
s_zv = string_char_length (disp_string);
bounds.left_out = xpos;
@@ -5500,6 +5404,9 @@
if (prop)
Dynarr_free (prop);
+
+ if (depth >= 0)
+ exit_redisplay_critical_section (depth);
}
@@ -5516,7 +5423,8 @@
changed it to the echo area buffer. */
static void
-regenerate_window (struct window *w, Charbpos start_pos, Charbpos point, int type)
+regenerate_window (struct window *w, Charbpos start_pos, Charbpos point,
+ int type)
{
struct frame *f = XFRAME (w->frame);
struct buffer *b = XBUFFER (w->buffer);
@@ -5524,6 +5432,7 @@
int yend; /* set farther down */
int yclip = WINDOW_TEXT_TOP_CLIP (w);
int force;
+ int depth = -1;
prop_block_dynarr *prop;
layout_bounds bounds;
@@ -5532,7 +5441,20 @@
/* The lines had better exist by this point. */
if (!(dla = window_display_lines (w, type)))
- abort ();
+ ABORT ();
+
+ if (!in_display)
+ depth = enter_redisplay_critical_section ();
+
+ /* This is one spot where a re-entrancy crash will occur, due to a check
+ in the dynarr to make sure it isn't "locked" */
+/*
+
+Info on Re-entrancy crashes, with backtraces given:
+
+ (Info-goto-node "(internals)Nasty Bugs due to Reentrancy in Redisplay Structures
handling QUIT")
+*/
+
Dynarr_reset (dla);
w->max_line_len = 0;
@@ -5713,6 +5635,9 @@
there when we first started working in this function. */
generate_modeline (w, Dynarr_atp (dla, 0), type);
}
+
+ if (depth >= 0)
+ exit_redisplay_critical_section (depth);
}
#define REGEN_INC_FIND_START_END \
@@ -5732,7 +5657,7 @@
dla_start = 0; \
} \
else \
- abort (); /* structs differ */ \
+ ABORT (); /* structs differ */ \
\
dla_end = Dynarr_length (cdla) - 1; \
} \
@@ -7993,7 +7918,7 @@
else if (point < start)
top = pos - 1;
else
- abort ();
+ ABORT ();
new_pos = (bottom + top + 1) >> 1;
if (pos == new_pos)
1.21.2.1 +4 -2 XEmacs/xemacs/src/redisplay.h
Index: redisplay.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/redisplay.h,v
retrieving revision 1.21
retrieving revision 1.21.2.1
diff -u -r1.21 -r1.21.2.1
--- redisplay.h 2004/11/04 23:06:50 1.21
+++ redisplay.h 2005/03/15 05:24:44 1.21.2.1
@@ -1,7 +1,7 @@
/* Redisplay data structures.
Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
Copyright (C) 1996 Chuck Thompson.
- Copyright (C) 1995, 1996, 2002, 2003 Ben Wing.
+ Copyright (C) 1995, 1996, 2002, 2003, 2004 Ben Wing.
This file is part of XEmacs.
@@ -144,7 +144,7 @@
unsigned char cursor_type; /* is this rune covered by the cursor? */
- unsigned char type; /* type of rune object */
+ unsigned int type; /* type of rune object */
/* We used to do bitfields here, but if I
(JV) count correctly that doesn't matter
for the size of the structure. All the bit
@@ -840,5 +840,7 @@
void exit_redisplay_critical_section (int);
int enter_redisplay_critical_section_maybe (void);
void exit_redisplay_critical_section_maybe (int depth);
+int enter_redisplay_critical_section_if (Boolint from_outside);
+void exit_redisplay_critical_section_if (Boolint from_outside, int depth);
#endif /* INCLUDED_redisplay_h_ */
1.53.2.3 +13 -9 XEmacs/xemacs/src/regex.c
Index: regex.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/regex.c,v
retrieving revision 1.53.2.2
retrieving revision 1.53.2.3
diff -u -r1.53.2.2 -r1.53.2.3
--- regex.c 2005/02/01 15:46:57 1.53.2.2
+++ regex.c 2005/03/15 05:24:44 1.53.2.3
@@ -82,6 +82,8 @@
#include "compiler.h" /* Get compiler-specific definitions like UNUSED */
+#define ABORT abort
+
/* If we are not linking with Emacs proper,
we can't use the relocating allocator
even if config.h says that we can. */
@@ -293,7 +295,7 @@
we could still be screwed. So we set up a system where we indicate all
places where we are prepared for malloc() or alloca(), and in any
other circumstances, calls to those functions (from anywhere inside of
- XEmacs!) will abort(). We do this even when REL_ALLOC is not defined
+ XEmacs!) will ABORT(). We do this even when REL_ALLOC is not defined
so that we catch these problems sooner, since many developers and beta
testers will not be running with REL_ALLOC. */
int regex_malloc_disallowed;
@@ -4144,7 +4146,7 @@
default:
- abort (); /* We have listed all the cases. */
+ ABORT (); /* We have listed all the cases. */
} /* switch *p++ */
/* Getting here means we have found the possible starting
@@ -5176,8 +5178,9 @@
: ((regoff_t) (d - string2 + size1)));
}
- /* Go through the first `min (num_regs, regs->num_regs)'
- registers, since that is all we initialized. */
+ /* Map over the NUM_NONSHY_REGS non-shy internal registers.
+ Copy each into the corresponding external register.
+ MCNT indexes external registers. */
for (mcnt = 1; mcnt < MIN (num_nonshy_regs, regs->num_regs);
mcnt++)
{
@@ -5196,9 +5199,10 @@
} /* regs && !bufp->no_sub */
/* If we have regs and the regs structure has more elements than
- were in the pattern, set the extra elements to -1. If we
- (re)allocated the registers, this is the case, because we
- always allocate enough to have at least one -1 at the end.
+ were in the pattern, set the extra elements starting with
+ NUM_NONSHY_REGS to -1. If we (re)allocated the registers,
+ this is the case, because we always allocate enough to have
+ at least one -1 at the end.
We do this even when no_sub is set because some applications
(XEmacs) reuse register structures which may contain stale
@@ -6350,7 +6354,7 @@
#endif /* emacs */
default:
- abort ();
+ ABORT ();
}
continue; /* Successfully executed one pattern command; keep going. */
@@ -6976,7 +6980,7 @@
to this routine. If we are given anything else, or if other regex
code generates an invalid error code, then the program has a bug.
Dump core so we can fix it. */
- abort ();
+ ABORT ();
msg = gettext (re_error_msgid[errcode]);
1.13.2.1 +2 -2 XEmacs/xemacs/src/regex.h
Index: regex.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/regex.h,v
retrieving revision 1.13
retrieving revision 1.13.2.1
diff -u -r1.13 -r1.13.2.1
--- regex.h 2004/10/14 17:26:24 1.13
+++ regex.h 2005/03/15 05:24:45 1.13.2.1
@@ -357,8 +357,8 @@
when it is matched. */
RE_TRANSLATE_TYPE translate;
- /* Number of returnable groups found by the compiler. (This does
- not count shy groups.) */
+ /* Number of subpatterns (returnable groups) found by the compiler.
+ (This does not count shy groups.) */
int re_nsub;
/* Total number of groups found by the compiler. (Including
1.15.2.1 +2 -2 XEmacs/xemacs/src/scrollbar-gtk.c
Index: scrollbar-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/scrollbar-gtk.c,v
retrieving revision 1.15
retrieving revision 1.15.2.1
diff -u -r1.15 -r1.15.2.1
--- scrollbar-gtk.c 2004/09/20 19:19:58 1.15
+++ scrollbar-gtk.c 2005/03/15 05:24:46 1.15.2.1
@@ -368,7 +368,7 @@
}
break;
default:
- abort ();
+ ABORT ();
}
}
@@ -443,7 +443,7 @@
event_data = Fcons (win, make_int ((int)adj->value));
break;
default:
- abort();
+ ABORT();
}
signal_special_gtk_user_event (frame, event_type, event_data);
1.27.2.1 +2 -2 XEmacs/xemacs/src/scrollbar-x.c
Index: scrollbar-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/scrollbar-x.c,v
retrieving revision 1.27
retrieving revision 1.27.2.1
diff -u -r1.27 -r1.27.2.1
--- scrollbar-x.c 2004/11/04 23:06:51 1.27
+++ scrollbar-x.c 2005/03/15 05:24:46 1.27.2.1
@@ -281,7 +281,7 @@
}
}
- if (!wv->scrollbar_data) abort ();
+ if (!wv->scrollbar_data) ABORT ();
free_widget_value_tree (wv);
}
else if (managed)
@@ -367,7 +367,7 @@
}
break;
default:
- abort ();
+ ABORT ();
}
}
1.32.2.1 +2 -1 XEmacs/xemacs/src/scrollbar.c
Index: scrollbar.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/scrollbar.c,v
retrieving revision 1.32
retrieving revision 1.32.2.1
diff -u -r1.32 -r1.32.2.1
--- scrollbar.c 2004/09/20 19:19:59 1.32
+++ scrollbar.c 2005/03/15 05:24:46 1.32.2.1
@@ -267,7 +267,8 @@
{
int total = 0;
- total += DEVMETH (d, compute_scrollbar_instance_usage, (d, inst, ovstats));
+ if (HAS_DEVMETH_P(d, compute_scrollbar_instance_usage))
+ total += DEVMETH (d, compute_scrollbar_instance_usage, (d, inst, ovstats));
while (inst)
{
1.44.2.2 +3 -3 XEmacs/xemacs/src/search.c
Index: search.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/search.c,v
retrieving revision 1.44.2.1
retrieving revision 1.44.2.2
diff -u -r1.44.2.1 -r1.44.2.2
--- search.c 2004/12/11 05:16:34 1.44.2.1
+++ search.c 2005/03/15 05:24:47 1.44.2.2
@@ -1170,7 +1170,7 @@
if (!EQ (noerror, Qt))
{
if (lim < BUF_BEGV (buf) || lim > BUF_ZV (buf))
- abort ();
+ ABORT ();
BUF_SET_PT (buf, lim);
return Qnil;
#if 0 /* This would be clean, but maybe programs depend on
@@ -1183,7 +1183,7 @@
}
if (np < BUF_BEGV (buf) || np > BUF_ZV (buf))
- abort ();
+ ABORT ();
BUF_SET_PT (buf, np);
@@ -2938,7 +2938,7 @@
}
else
/* last_thing_searched must always be Qt, a buffer, or Qnil. */
- abort ();
+ ABORT ();
len = i;
}
1.16.2.1 +6 -5 XEmacs/xemacs/src/select-gtk.c
Index: select-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/select-gtk.c,v
retrieving revision 1.16
retrieving revision 1.16.2.1
diff -u -r1.16 -r1.16.2.1
--- select-gtk.c 2004/11/04 23:06:52 1.16
+++ select-gtk.c 2005/03/15 05:24:47 1.16.2.1
@@ -158,7 +158,7 @@
target_symbol = fetch_multiple_target (selection_data);
#endif
- temp_obj = Fget_selection_timestamp (selection_symbol);
+ temp_obj = get_selection_raw_time(selection_symbol);
if (NILP (temp_obj))
{
@@ -255,7 +255,7 @@
selection_symbol = atom_to_symbol (d, selection);
- local_selection_time_lisp = Fget_selection_timestamp (selection_symbol);
+ local_selection_time_lisp = get_selection_raw_time (selection_symbol);
/* We don't own the selection, so that's fine. */
if (NILP (local_selection_time_lisp))
@@ -428,13 +428,14 @@
selection_atom,
thyme);
- /* We do NOT use time_to_lisp() here any more, like we used to.
+ /* [[ We do NOT use time_to_lisp() here any more, like we used to.
That assumed equivalence of time_t and Time, which is not
necessarily the case (e.g. under OSF on the Alphas, where
Time is a 64-bit quantity and time_t is a 32-bit quantity).
- Opaque pointers are the clean way to go here.
- */
+ Opaque pointers are the clean way to go here. ]]
+
+ See my comment on the same issue in select-x.c -- Aidan. */
return make_opaque (&thyme, sizeof (thyme));
}
1.16.2.1 +55 -10 XEmacs/xemacs/src/select-x.c
Index: select-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/select-x.c,v
retrieving revision 1.16
retrieving revision 1.16.2.1
diff -u -r1.16 -r1.16.2.1
--- select-x.c 2004/11/04 23:06:52 1.16
+++ select-x.c 2005/03/15 05:24:48 1.16.2.1
@@ -237,13 +237,21 @@
XSetSelectionOwner (display, selection_atom, selecting_window, thyme);
- /* We do NOT use time_to_lisp() here any more, like we used to.
+ /* [[ We do NOT use time_to_lisp() here any more, like we used to.
That assumed equivalence of time_t and Time, which is not
necessarily the case (e.g. under OSF on the Alphas, where
- Time is a 64-bit quantity and time_t is a 32-bit quantity).
+ Time is a 64-bit quantity and time_t is a 32-bit quantity).]]
- Opaque pointers are the clean way to go here.
- */
+ This is wrong--on Digital Unix, time_t is a sixty-four-bit quantity,
+ and Time is, as the X protocol dictates, a thirty-two-bit quantity.
+
+ [[ Opaque pointers are the clean way to go here. ]]
+
+ Again, I disagree--the Lisp selection infrastructure needs to be
+ able to manipulate the selection timestamps if it is, as we want
+ it to, to be able to do most of the work. Though I have moved the
+ conversion to lisp to get-xemacs-selection-timestamp. -- Aidan. */
+
selection_time = make_opaque (&thyme, sizeof (thyme));
#ifdef MOTIF_CLIPBOARDS
@@ -392,7 +400,7 @@
Window window = (Window) *private_id;
Lisp_Object selection = select_convert_out (QCLIPBOARD, Qnil, Qnil);
- /* Whichever lazy git wrote this originally just called abort()
+ /* Whichever lazy git wrote this originally just called ABORT()
when anything didn't go their way... */
/* Try some other text types */
@@ -519,14 +527,43 @@
}
else
{
+#ifndef HAVE_XTREGISTERDRAWABLE
+ invalid_operation("Copying that much data requires X11R6.", Qunbound);
+#else
/* Send an INCR selection. */
int prop_id;
+ Widget widget = FRAME_X_TEXT_WIDGET (XFRAME(DEVICE_SELECTED_FRAME(d)));
if (x_window_to_frame (d, window)) /* #### debug */
- invalid_operation ("attempt to transfer an INCR to ourself!", Qunbound);
+ invalid_operation ("attempt to transfer an INCR to ourself!",
+ Qunbound);
#if 0
stderr_out ("\nINCR %d\n", bytes_remaining);
#endif
+
+ /* Tell Xt not to drop PropertyNotify events that arrive for the
+ target window, rather, pass them to us. This would be a hack, but
+ the Xt selection routines are broken for our purposes--we can't
+ pass them callbacks from Lisp, for example. Let's call it a
+ workaround.
+
+ The call to wait_for_property_change means we can break out of that
+ function, switch to another frame on the same display (which will
+ be another Xt widget), select a huge amount of text, and have the
+ same (foreign) app ask for another incremental selection
+ transfer. Programming like X11 made sense, would mean that, in that
+ case, XtRegisterDrawable is called twice with different widgets.
+
+ Since the results of calling XtRegisterDrawable when the drawable
+ is already registered with another widget are undefined, we want to
+ avoid that--so, only call it when XtWindowToWidget returns NULL,
+ which it will only do with a valid Window if it's not already
+ registered. */
+ if (NULL == XtWindowToWidget(display, window))
+ {
+ XtRegisterDrawable(display, (Drawable)window, widget);
+ }
+
prop_id = expect_property_change (display, window, reply.property,
PropertyDelete);
@@ -570,10 +607,13 @@
stderr_out (" INCR done\n");
#endif
if (! waiting_for_other_props_on_window (display, window))
+ {
XSelectInput (display, window, 0L);
-
+ XtUnregisterDrawable(display, (Drawable)window);
+ }
XChangeProperty (display, window, reply.property, type, format,
PropModeReplace, data, 0);
+#endif /* HAVE_XTREGISTERDRAWABLE */
}
}
@@ -605,7 +645,7 @@
target_symbol = fetch_multiple_target (event);
#endif
- temp_obj = Fget_selection_timestamp (selection_symbol);
+ temp_obj = get_selection_raw_time (selection_symbol);
if (NILP (temp_obj))
{
@@ -653,7 +693,12 @@
successful_p = Qt;
/* Tell x_selection_request_lisp_error() it's cool. */
event->type = 0;
- xfree (data, Rawbyte *);
+ /* Data need not have been allocated; cf. select-convert-to-delete in
+ lisp/select.el . */
+ if ((Rawbyte *)0 != data)
+ {
+ xfree (data, Rawbyte *);
+ }
}
unbind_to (count);
@@ -693,7 +738,7 @@
selection_symbol = x_atom_to_symbol (d, selection);
- local_selection_time_lisp = Fget_selection_timestamp (selection_symbol);
+ local_selection_time_lisp = get_selection_raw_time (selection_symbol);
/* We don't own the selection, so that's fine. */
if (NILP (local_selection_time_lisp))
1.6.6.1 +33 -7 XEmacs/xemacs/src/select.c
Index: select.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/select.c,v
retrieving revision 1.6
retrieving revision 1.6.6.1
diff -u -r1.6 -r1.6.6.1
--- select.c 2002/06/20 21:18:45 1.6
+++ select.c 2005/03/15 05:24:48 1.6.6.1
@@ -289,6 +289,14 @@
/* have to do device specific stuff last so that methods can access the
selection_alist */
+
+ /* If you are re-implementing this for another redisplay type, either make
+ certain that the selection time will fit within thirty-two bits, or
+ redesign get-xemacs-selection-timestamp to return, say, a bignum, and
+ convert the device-specific timestamp to a bignum before storing it in
+ this list. The current practice is to blindly assume that the timestamp
+ is thirty-two bits, which will work for extant architectures. */
+
if (HAS_DEVMETH_P (XDEVICE (device), own_selection))
selection_time = DEVMETH (XDEVICE (device), own_selection,
(selection_name, selection_value,
@@ -492,18 +500,36 @@
: Qnil;
}
+Lisp_Object
+get_selection_raw_time(Lisp_Object selection)
+{
+ Lisp_Object local_value = assq_no_quit (selection, Vselection_alist);
+
+ if (!NILP (local_value))
+ {
+ return XCAR (XCDR (XCDR (local_value)));
+ }
+ return Qnil;
+}
+
/* Get the timestamp of the given selection */
-DEFUN ("get-selection-timestamp", Fget_selection_timestamp, 1, 1, 0, /*
-Return the timestamp associated with the specified SELECTION, if it exists.
-Note that the timestamp is a device-specific object, and may not actually be
-visible from Lisp.
+DEFUN ("get-xemacs-selection-timestamp", Fget_selection_timestamp, 1, 1, 0,
/*
+Return timestamp for SELECTION, if belongs to XEmacs and exists.
+
+The timestamp is a cons of two integers, the first being the higher-order
+sixteen bits of the device-specific thirty-two-bit quantity, the second
+being the lower-order sixteen bits of same. Expect to see this API change
+when and if redisplay on a window system with timestamps wider than 32bits
+happens.
*/
(selection))
{
- Lisp_Object local_value = assq_no_quit (selection, Vselection_alist);
+ Lisp_Object val = get_selection_raw_time(selection);
- if (!NILP (local_value))
- return XCAR (XCDR (XCDR (local_value)));
+ if (!NILP (val))
+ {
+ return word_to_lisp(* (UINT_32_BIT *) XOPAQUE_DATA (val));
+ }
return Qnil;
}
1.2.20.1 +2 -1 XEmacs/xemacs/src/select.h
Index: select.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/select.h,v
retrieving revision 1.2
retrieving revision 1.2.20.1
diff -u -r1.2 -r1.2.20.1
--- select.h 2001/04/12 18:24:19 1.2
+++ select.h 2005/03/15 05:24:49 1.2.20.1
@@ -57,12 +57,13 @@
void select_notify_buffer_kill (Lisp_Object buffer);
+Lisp_Object get_selection_raw_time(Lisp_Object selection);
+
/* Lisp functions we export for other files' use */
EXFUN (Fregister_selection_data_type, 2);
EXFUN (Fselection_data_type_name, 2);
EXFUN (Favailable_selection_types, 2);
EXFUN (Fselection_owner_p, 1);
EXFUN (Fselection_exists_p, 3);
-EXFUN (Fget_selection_timestamp, 1);
#endif /* INCLUDED_select_h_ */
1.27.2.1 +25 -159 XEmacs/xemacs/src/signal.c
Index: signal.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/signal.c,v
retrieving revision 1.27
retrieving revision 1.27.2.1
diff -u -r1.27 -r1.27.2.1
--- signal.c 2004/11/04 23:06:53 1.27
+++ signal.c 2005/03/15 05:24:49 1.27.2.1
@@ -1,6 +1,6 @@
/* Handling asynchronous signals.
Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
- Copyright (C) 1995, 1996, 2001, 2002 Ben Wing.
+ Copyright (C) 1995, 1996, 2001, 2002, 2004 Ben Wing.
This file is part of XEmacs.
@@ -258,7 +258,7 @@
/* If alarm() gets called when polling isn't disabled, it will mess up
the asynchronous timeouts, and then C-g checking won't work again.
Some libraries call alarm() directly, so we override the standard
- library's alarm() and abort() if the caller of the library function
+ library's alarm() and ABORT() if the caller of the library function
didn't wrap in stop_interrupts()/start_interrupts().
NOTE: We could potentially avoid the need to wrap by adding a
@@ -311,7 +311,7 @@
case ITIMER_REAL: return setitimer (ITIMER_REAL, itnew, itold);
case ITIMER_VIRTUAL: return setitimer (ITIMER_VIRTUAL, itnew, itold);
case ITIMER_PROF: return setitimer (ITIMER_PROF, itnew, itold);
- default: abort (); return 0;
+ default: ABORT (); return 0;
}
#endif
}
@@ -614,7 +614,7 @@
c = getc (stdin);
stdout_out ("Abort (and dump core)? (y or n) ");
if (((c = getc (stdin)) & ~040) == 'Y')
- abort ();
+ ABORT ();
while (c != '\n')
c = getc (stdin);
stdout_out ("Continuing...\n");
@@ -693,163 +693,11 @@
The C-g or Sh-C-g is discarded, so it won't be noticed again.
*/
+
+
void
check_quit (void)
{
- /* dont_check_for_quit is set in three circumstances:
-
- (1) when we are in the process of changing the window
- configuration. The frame might be in an inconsistent state,
- which will cause assertion failures if we check for QUIT.
-
- (2) when we are reading events, and want to read the C-g
- as an event. The normal check for quit will discard the C-g,
- which would be bad.
-
- (3) when we're going down with a fatal error. we're most likely
- in an inconsistent state, and we definitely don't want to be
- interrupted. */
-
- /* We should *not* conditionalize on Vinhibit_quit, or
- critical-quit (Control-Shift-G) won't work right. */
-
- /* WARNING: Even calling check_quit(), without actually dispatching
- a quit signal, can result in arbitrary Lisp code getting executed
- -- at least under Windows. (Not to mention obvious Lisp
- invocations like asynchronous timer callbacks.) Here's a sample
- stack trace to demonstrate:
-
- NTDLL! DbgBreakPoint@0 address 0x77f9eea9
-assert_failed(const char * 0x012d036c, int 4596, const char * 0x012d0354) line 3478
-re_match_2_internal(re_pattern_buffer * 0x012d6780, const unsigned char * 0x00000000,
int 0, const unsigned char * 0x022f9328, int 34, int 0, re_registers * 0x012d53d0
search_regs, int 34) line 4596 + 41 bytes
-re_search_2(re_pattern_buffer * 0x012d6780, const char * 0x00000000, int 0, const char
* 0x022f9328, int 34, int 0, int 34, re_registers * 0x012d53d0 search_regs, int 34) line
4269 + 37 bytes
-re_search(re_pattern_buffer * 0x012d6780, const char * 0x022f9328, int 34, int 0, int
34, re_registers * 0x012d53d0 search_regs) line 4031 + 37 bytes
-string_match_1(long 31222628, long 30282164, long 28377092, buffer * 0x022fde00, int 0)
line 413 + 69 bytes
-Fstring_match(long 31222628, long 30282164, long 28377092, long 28377092) line 436 + 34
bytes
-Ffuncall(int 3, long * 0x008297f8) line 3488 + 168 bytes
-execute_optimized_program(const unsigned char * 0x020ddc50, int 6, long * 0x020ddf50)
line 744 + 16 bytes
-funcall_compiled_function(long 34407748, int 1, long * 0x00829aec) line 516 + 53 bytes
-Ffuncall(int 2, long * 0x00829ae8) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x020ddc90, int 4, long * 0x020ddf90)
line 744 + 16 bytes
-funcall_compiled_function(long 34407720, int 1, long * 0x00829e28) line 516 + 53 bytes
-Ffuncall(int 2, long * 0x00829e24) line 3523 + 17 bytes
-mapcar1(long 15, long * 0x00829e48, long 34447820, long 34187868) line 2929 + 11 bytes
-Fmapcar(long 34447820, long 34187868) line 3035 + 21 bytes
-Ffuncall(int 3, long * 0x00829f20) line 3488 + 93 bytes
-execute_optimized_program(const unsigned char * 0x020c2b70, int 7, long * 0x020dd010)
line 744 + 16 bytes
-funcall_compiled_function(long 34407580, int 2, long * 0x0082a210) line 516 + 53 bytes
-Ffuncall(int 3, long * 0x0082a20c) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x020cf810, int 6, long * 0x020cfb10)
line 744 + 16 bytes
-funcall_compiled_function(long 34407524, int 0, long * 0x0082a580) line 516 + 53 bytes
-Ffuncall(int 1, long * 0x0082a57c) line 3523 + 17 bytes
-run_hook_with_args_in_buffer(buffer * 0x022fde00, int 1, long * 0x0082a57c, int 0) line
3980 + 13 bytes
-run_hook_with_args(int 1, long * 0x0082a57c, int 0) line 3993 + 23 bytes
-Frun_hooks(int 1, long * 0x0082a57c) line 3847 + 19 bytes
-run_hook(long 34447484) line 4094 + 11 bytes
-unsafe_handle_wm_initmenu_1(frame * 0x01dbb000) line 736 + 11 bytes
-unsafe_handle_wm_initmenu(long 28377092) line 807 + 11 bytes
-condition_case_1(long 28377116, long (long)* 0x0101c827
unsafe_handle_wm_initmenu(long), long 28377092, long (long, long)* 0x01005fa4
mswindows_modal_loop_error_handler(long, long), long 28377092) line 1692 + 7 bytes
-mswindows_protect_modal_loop(long (long)* 0x0101c827 unsafe_handle_wm_initmenu(long),
long 28377092) line 1194 + 32 bytes
-mswindows_handle_wm_initmenu(HMENU__ * 0x00010199, frame * 0x01dbb000) line 826 + 17
bytes
-mswindows_wnd_proc(HWND__ * 0x000501da, unsigned int 278, unsigned int 65945, long 0)
line 3089 + 31 bytes
-USER32! UserCallWinProc@20 + 24 bytes
-USER32! DispatchClientMessage@20 + 47 bytes
-USER32! __fnDWORD@4 + 34 bytes
-NTDLL! KiUserCallbackDispatcher@12 + 19 bytes
-USER32! DispatchClientMessage@20 address 0x77e163cc
-USER32! DefWindowProcW@16 + 34 bytes
-qxeDefWindowProc(HWND__ * 0x000501da, unsigned int 274, unsigned int 61696, long 98)
line 1188 + 22 bytes
-mswindows_wnd_proc(HWND__ * 0x000501da, unsigned int 274, unsigned int 61696, long 98)
line 3362 + 21 bytes
-USER32! UserCallWinProc@20 + 24 bytes
-USER32! DispatchClientMessage@20 + 47 bytes
-USER32! __fnDWORD@4 + 34 bytes
-NTDLL! KiUserCallbackDispatcher@12 + 19 bytes
-USER32! DispatchClientMessage@20 address 0x77e163cc
-USER32! DefWindowProcW@16 + 34 bytes
-qxeDefWindowProc(HWND__ * 0x000501da, unsigned int 262, unsigned int 98, long
540016641) line 1188 + 22 bytes
-mswindows_wnd_proc(HWND__ * 0x000501da, unsigned int 262, unsigned int 98, long
540016641) line 3362 + 21 bytes
-USER32! UserCallWinProc@20 + 24 bytes
-USER32! DispatchMessageWorker@8 + 244 bytes
-USER32! DispatchMessageW@4 + 11 bytes
-qxeDispatchMessage(const tagMSG * 0x0082c684 {msg=0x00000106 wp=0x00000062
lp=0x20300001}) line 989 + 10 bytes
-mswindows_drain_windows_queue() line 1345 + 9 bytes
-emacs_mswindows_quit_p() line 3947
-event_stream_quit_p() line 666
-check_quit() line 686
-check_what_happened() line 437
-re_match_2_internal(re_pattern_buffer * 0x012d5a18, const unsigned char * 0x00000000,
int 0, const unsigned char * 0x02235000, int 23486, int 14645, re_registers * 0x012d53d0
search_regs, int 23486) line 4717 + 14 bytes
-re_search_2(re_pattern_buffer * 0x012d5a18, const char * 0x02235000, int 23486, const
char * 0x0223b38e, int 0, int 14645, int 8841, re_registers * 0x012d53d0 search_regs, int
23486) line 4269 + 37 bytes
-search_buffer(buffer * 0x022fde00, long 29077572, long 13789, long 23487, long 1, int
1, long 28377092, long 28377092, int 0) line 1224 + 89 bytes
-search_command(long 29077572, long 46975, long 28377116, long 28377092, long 28377092,
int 1, int 1, int 0) line 1054 + 151 bytes
-Fre_search_forward(long 29077572, long 46975, long 28377116, long 28377092, long
28377092) line 2147 + 31 bytes
-Ffuncall(int 4, long * 0x0082ceb0) line 3488 + 216 bytes
-execute_optimized_program(const unsigned char * 0x02047810, int 13, long * 0x02080c10)
line 744 + 16 bytes
-funcall_compiled_function(long 34187208, int 3, long * 0x0082d1b8) line 516 + 53 bytes
-Ffuncall(int 4, long * 0x0082d1b4) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x01e96a10, int 6, long * 0x020ae510)
line 744 + 16 bytes
-funcall_compiled_function(long 34186676, int 3, long * 0x0082d4a0) line 516 + 53 bytes
-Ffuncall(int 4, long * 0x0082d49c) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x02156b50, int 4, long * 0x020c2db0)
line 744 + 16 bytes
-funcall_compiled_function(long 34186564, int 2, long * 0x0082d780) line 516 + 53 bytes
-Ffuncall(int 3, long * 0x0082d77c) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x0082d964, int 3, long * 0x020c2d70)
line 744 + 16 bytes
-Fbyte_code(long 29405156, long 34352480, long 7) line 2392 + 38 bytes
-Feval(long 34354440) line 3290 + 187 bytes
-condition_case_1(long 34354572, long (long)* 0x01087232 Feval(long), long 34354440,
long (long, long)* 0x01084764 run_condition_case_handlers(long, long), long 28377092) line
1692 + 7 bytes
-condition_case_3(long 34354440, long 28377092, long 34354572) line 1779 + 27 bytes
-execute_rare_opcode(long * 0x0082dc7c, const unsigned char * 0x01b090af, int 143) line
1269 + 19 bytes
-execute_optimized_program(const unsigned char * 0x01b09090, int 6, long * 0x020ae590)
line 654 + 17 bytes
-funcall_compiled_function(long 34186620, int 0, long * 0x0082df68) line 516 + 53 bytes
-Ffuncall(int 1, long * 0x0082df64) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x02195470, int 1, long * 0x020c2df0)
line 744 + 16 bytes
-funcall_compiled_function(long 34186508, int 0, long * 0x0082e23c) line 516 + 53 bytes
-Ffuncall(int 1, long * 0x0082e238) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x01e5d410, int 6, long * 0x0207d410)
line 744 + 16 bytes
-funcall_compiled_function(long 34186312, int 1, long * 0x0082e524) line 516 + 53 bytes
-Ffuncall(int 2, long * 0x0082e520) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x02108fb0, int 2, long * 0x020c2e30)
line 744 + 16 bytes
-funcall_compiled_function(long 34186340, int 0, long * 0x0082e7fc) line 516 + 53 bytes
-Ffuncall(int 1, long * 0x0082e7f8) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x020fe150, int 2, long * 0x01e6f510)
line 744 + 16 bytes
-funcall_compiled_function(long 31008124, int 0, long * 0x0082ebd8) line 516 + 53 bytes
-Ffuncall(int 1, long * 0x0082ebd4) line 3523 + 17 bytes
-run_hook_with_args_in_buffer(buffer * 0x022fde00, int 1, long * 0x0082ebd4, int 0) line
3980 + 13 bytes
-run_hook_with_args(int 1, long * 0x0082ebd4, int 0) line 3993 + 23 bytes
-Frun_hooks(int 1, long * 0x0082ebd4) line 3847 + 19 bytes
-Ffuncall(int 2, long * 0x0082ebd0) line 3509 + 14 bytes
-execute_optimized_program(const unsigned char * 0x01ef2210, int 5, long * 0x01da8e10)
line 744 + 16 bytes
-funcall_compiled_function(long 31020440, int 2, long * 0x0082eeb8) line 516 + 53 bytes
-Ffuncall(int 3, long * 0x0082eeb4) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x0082f09c, int 3, long * 0x01d89390)
line 744 + 16 bytes
-Fbyte_code(long 31102388, long 30970752, long 7) line 2392 + 38 bytes
-Feval(long 31087568) line 3290 + 187 bytes
-condition_case_1(long 30961240, long (long)* 0x01087232 Feval(long), long 31087568,
long (long, long)* 0x01084764 run_condition_case_handlers(long, long), long 28510180) line
1692 + 7 bytes
-condition_case_3(long 31087568, long 28510180, long 30961240) line 1779 + 27 bytes
-execute_rare_opcode(long * 0x0082f450, const unsigned char * 0x01ef23ec, int 143) line
1269 + 19 bytes
-execute_optimized_program(const unsigned char * 0x01ef2310, int 6, long * 0x01da8f10)
line 654 + 17 bytes
-funcall_compiled_function(long 31020412, int 1, long * 0x0082f740) line 516 + 53 bytes
-Ffuncall(int 2, long * 0x0082f73c) line 3523 + 17 bytes
-execute_optimized_program(const unsigned char * 0x020fe650, int 3, long * 0x01d8c490)
line 744 + 16 bytes
-funcall_compiled_function(long 31020020, int 2, long * 0x0082fa14) line 516 + 53 bytes
-Ffuncall(int 3, long * 0x0082fa10) line 3523 + 17 bytes
-Fcall_interactively(long 29685180, long 28377092, long 28377092) line 1008 + 22 bytes
-Fcommand_execute(long 29685180, long 28377092, long 28377092) line 2929 + 17 bytes
-execute_command_event(command_builder * 0x01be1900, long 36626492) line 4048 + 25
bytes
-Fdispatch_event(long 36626492) line 4341 + 70 bytes
-Fcommand_loop_1() line 582 + 9 bytes
-command_loop_1(long 28377092) line 495
-condition_case_1(long 28377188, long (long)* 0x01064fb9 command_loop_1(long), long
28377092, long (long, long)* 0x010649d0 cmd_error(long, long), long 28377092) line 1692 +
7 bytes
-command_loop_3() line 256 + 35 bytes
-command_loop_2(long 28377092) line 269
-internal_catch(long 28457612, long (long)* 0x01064b20 command_loop_2(long), long
28377092, int * volatile 0x00000000) line 1317 + 7 bytes
-initial_command_loop(long 28377092) line 305 + 25 bytes
-STACK_TRACE_EYE_CATCHER(int 1, char * * 0x01b63ff0, char * * 0x01ca5300, int 0) line
2501
-main(int 1, char * * 0x01b63ff0, char * * 0x01ca5300) line 2938
-XEMACS! mainCRTStartup + 180 bytes
-_start() line 171
-KERNEL32! BaseProcessStart@4 + 115547 bytes
-
-*/
int specdepth;
if (dont_check_for_quit)
@@ -860,10 +708,28 @@
#ifdef ERROR_CHECK_TRAPPING_PROBLEMS
/* Since the code below can call Lisp, make sure that proper wrapping is
in place during redisplay. */
+#if 0
assert_with_message
(proper_redisplay_wrapping_in_place (),
"QUIT called from within redisplay without being properly wrapped");
-#endif
+#else
+ /* FUCKME! It looks like we cannot even check for QUIT, *EVER*, during
+ redisplay. Checking for quit can dispatch events, which can enter
+ redisplay recursively, which can trip on
+
+Fatal error: assertion failed, file c:\xemacs\build\src\redisplay.c, line 5532,
+!dy->locked
+
+Backtrace given in
+
+ (Info-goto-node "(internals)Nasty Bugs due to Reentrancy in Redisplay Structures
handling QUIT")
+
+ */
+ assert_with_message
+ (!in_display,
+ "QUIT called from within redisplay without being properly wrapped");
+#endif /* 0 */
+#endif /* ERROR_CHECK_TRAPPING_PROBLEMS */
/* Since arbitrary Lisp code may be executed (e.g. through a menu
filter, see backtrace directly above), GC might happen,
1.22.2.1 +6 -9 XEmacs/xemacs/src/sound.c
Index: sound.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/sound.c,v
retrieving revision 1.22
retrieving revision 1.22.2.1
diff -u -r1.22 -r1.22.2.1
--- sound.c 2004/11/04 23:06:53 1.22
+++ sound.c 2005/03/15 05:24:49 1.22.2.1
@@ -1,7 +1,7 @@
/* Sound functions.
Copyright (C) 1992, 1993, 1994 Lucid Inc.
Copyright (C) 1994, 1995 Free Software Foundation, Inc.
- Copyright (C) 2002 Ben Wing.
+ Copyright (C) 2002, 2004 Ben Wing.
This file is part of XEmacs.
@@ -161,20 +161,17 @@
#ifdef HAVE_NATIVE_SOUND
if (NILP (Vnative_sound_only_on_console) || DEVICE_ON_CONSOLE_P (d))
{
- Extbyte *fileext;
-
-#ifdef WIN32_NATIVE
- /* #### more garbage. we should be passing the internal file name
- to play_sound_file. */
- LISP_STRING_TO_EXTERNAL (file, fileext, Qmswindows_tstr);
+#ifdef WIN32_ANY
+ nt_play_sound_file (file, vol);
#else
- LISP_STRING_TO_EXTERNAL (file, fileext, Qfile_name);
-#endif
+ Extbyte *fileext;
+ LISP_PATHNAME_CONVERT_OUT (file, fileext);
/* The sound code doesn't like getting SIGIO interrupts.
Unix sucks! */
stop_interrupts ();
play_sound_file (fileext, vol);
start_interrupts ();
+#endif /* WIN32_NATIVE */
QUIT;
}
#endif /* HAVE_NATIVE_SOUND */
1.9.2.1 +1 -0 XEmacs/xemacs/src/sound.h
Index: sound.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/sound.h,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -r1.9 -r1.9.2.1
--- sound.h 2004/11/04 23:06:53 1.9
+++ sound.h 2005/03/15 05:24:50 1.9.2.1
@@ -27,6 +27,7 @@
/* Defined in *play.c */
void play_sound_file (Extbyte *name, int volume);
+void nt_play_sound_file (Lisp_Object name, int volume);
int play_sound_data (Binbyte *data, int length, int volume);
# define sound_perror(string) \
1.36.2.1 +8 -8 XEmacs/xemacs/src/specifier.c
Index: specifier.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/specifier.c,v
retrieving revision 1.36
retrieving revision 1.36.2.1
diff -u -r1.36 -r1.36.2.1
--- specifier.c 2004/11/04 23:06:53 1.36
+++ specifier.c 2005/03/15 05:24:50 1.36.2.1
@@ -66,7 +66,7 @@
static const struct memory_description ste_description_1[] = {
{ XD_LISP_OBJECT, offsetof (specifier_type_entry, symbol) },
{ XD_BLOCK_PTR, offsetof (specifier_type_entry, meths), 1,
- &specifier_methods_description },
+ { &specifier_methods_description } },
{ XD_END }
};
@@ -337,7 +337,7 @@
return retval;
}
-static unsigned long
+static Hashcode
specifier_hash (Lisp_Object obj, int depth)
{
Lisp_Specifier *s = XSPECIFIER (obj);
@@ -347,7 +347,7 @@
the most likely places where interesting stuff will be. */
return HASH5 ((HAS_SPECMETH_P (s, hash) ?
SPECMETH (s, hash, (obj, depth)) : 0),
- (unsigned long) s->methods,
+ (Hashcode) s->methods,
internal_hash (s->global_specs, depth + 1),
internal_hash (s->frame_specs, depth + 1),
internal_hash (s->buffer_specs, depth + 1));
@@ -397,7 +397,7 @@
const struct memory_description specifier_description[] = {
{ XD_BLOCK_PTR, offsetof (Lisp_Specifier, methods), 1,
- &specifier_methods_description },
+ { &specifier_methods_description } },
{ XD_LO_LINK, offsetof (Lisp_Specifier, next_specifier) },
{ XD_LISP_OBJECT, offsetof (Lisp_Specifier, global_specs) },
{ XD_LISP_OBJECT, offsetof (Lisp_Specifier, device_specs) },
@@ -405,11 +405,11 @@
{ XD_LISP_OBJECT, offsetof (Lisp_Specifier, window_specs) },
{ XD_LISP_OBJECT, offsetof (Lisp_Specifier, buffer_specs) },
{ XD_BLOCK_PTR, offsetof (Lisp_Specifier, caching), 1,
- &specifier_caching_description },
+ { &specifier_caching_description } },
{ XD_LISP_OBJECT, offsetof (Lisp_Specifier, magic_parent) },
{ XD_LISP_OBJECT, offsetof (Lisp_Specifier, fallback) },
{ XD_BLOCK_ARRAY, offsetof (Lisp_Specifier, data), 1,
- specifier_extra_description_map },
+ { specifier_extra_description_map } },
{ XD_END }
};
@@ -1775,7 +1775,7 @@
tem = nconc2 (*orig_inst_list, list_to_build_up);
else
{
- abort ();
+ ABORT ();
tem = Qnil;
}
@@ -2567,7 +2567,7 @@
No. Errors are handled in Lisp primitives implementation.
Invalid domain is a design error here - kkm. */
- abort ();
+ ABORT ();
if (NILP (buffer) && !NILP (window))
buffer = WINDOW_BUFFER (XWINDOW (window));
1.14.2.1 +2 -2 XEmacs/xemacs/src/specifier.h
Index: specifier.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/specifier.h,v
retrieving revision 1.14
retrieving revision 1.14.2.1
diff -u -r1.14 -r1.14.2.1
--- specifier.h 2004/11/04 23:06:54 1.14
+++ specifier.h 2005/03/15 05:24:50 1.14.2.1
@@ -115,7 +115,7 @@
If this function is not present, hashing behaves as if it
returned zero. */
- unsigned long (*hash_method) (Lisp_Object specifier, int depth);
+ Hashcode (*hash_method) (Lisp_Object specifier, int depth);
/* Validate method: Given an instantiator, verify that it's
valid for this specifier type. If not, signal an error.
@@ -434,7 +434,7 @@
/* #### get image instances out of domains! */
-/* #### I think the following should abort() rather than return nil
+/* #### I think the following should ABORT() rather than return nil
when an invalid domain is given; much more likely we'll catch design
errors early. --ben */
1.6.8.1 +1 -1 XEmacs/xemacs/src/strftime.c
Index: strftime.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/strftime.c,v
retrieving revision 1.6
retrieving revision 1.6.8.1
diff -u -r1.6 -r1.6.8.1
--- strftime.c 2002/03/29 04:48:37 1.6
+++ strftime.c 2005/03/15 05:24:51 1.6.8.1
@@ -197,7 +197,7 @@
char buf[40];
if (sizeof (num) > 16)
- abort ();
+ ABORT ();
sprintf (buf, "%lu", (unsigned long) num);
return add_str (string, buf, max);
}
1.11.2.1 +1 -1 XEmacs/xemacs/src/sunplay.c
Index: sunplay.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/sunplay.c,v
retrieving revision 1.11
retrieving revision 1.11.2.1
diff -u -r1.11 -r1.11.2.1
--- sunplay.c 2004/11/04 23:06:54 1.11
+++ sunplay.c 2005/03/15 05:24:51 1.11.2.1
@@ -54,7 +54,7 @@
reset_volume_p = 0;
reset_device_p = 0;
- if (data && fd) abort (); /* one or the other */
+ if (data && fd) ABORT (); /* one or the other */
if (AUDIO_SUCCESS != audio_get_play_config (audio_fd, &dev_hdr))
{
1.46.2.2 +8 -8 XEmacs/xemacs/src/symbols.c
Index: symbols.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/symbols.c,v
retrieving revision 1.46.2.1
retrieving revision 1.46.2.2
diff -u -r1.46.2.1 -r1.46.2.2
--- symbols.c 2004/12/11 05:16:36 1.46.2.1
+++ symbols.c 2005/03/15 05:24:51 1.46.2.2
@@ -1113,7 +1113,7 @@
return valcontents;
default:
- abort ();
+ ABORT ();
}
return Qnil; /* suppress compiler warning */
}
@@ -1289,7 +1289,7 @@
return;
default:
- abort ();
+ ABORT ();
}
}
}
@@ -1914,7 +1914,7 @@
break;
}
default:
- abort ();
+ ABORT ();
}
store_symval_forwarding (symbol, valcontents, newval);
@@ -2181,7 +2181,7 @@
return variable;
default:
- abort ();
+ ABORT ();
}
}
@@ -2290,7 +2290,7 @@
}
default:
- abort ();
+ ABORT ();
}
}
@@ -2364,7 +2364,7 @@
break;
default:
- abort ();
+ ABORT ();
}
}
@@ -2682,7 +2682,7 @@
case SYMVAL_UNBOUND_MARKER: return Qnil;
default:
- abort (); return Qnil;
+ ABORT (); return Qnil;
}
}
@@ -2912,7 +2912,7 @@
return MAGIC_HANDLER_MAKE_LOCAL;
if (abort_if_not_found)
- abort ();
+ ABORT ();
invalid_argument ("Unrecognized symbol-value function", funsym);
RETURN_NOT_REACHED (MAGIC_HANDLER_MAX);
}
1.50.2.2 +1 -0 XEmacs/xemacs/src/symsinit.h
Index: symsinit.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/symsinit.h,v
retrieving revision 1.50.2.1
retrieving revision 1.50.2.2
diff -u -r1.50.2.1 -r1.50.2.2
--- symsinit.h 2004/11/25 12:44:17 1.50.2.1
+++ symsinit.h 2005/03/15 05:24:51 1.50.2.2
@@ -408,6 +408,7 @@
void vars_of_process_unix (void);
void vars_of_profile (void);
void vars_of_ralloc (void);
+void vars_of_realpath (void);
void vars_of_redisplay (void);
void vars_of_regex (void);
void vars_of_scrollbar_x (void);
1.22.2.1 +4 -4 XEmacs/xemacs/src/syntax.c
Index: syntax.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/syntax.c,v
retrieving revision 1.22
retrieving revision 1.22.2.1
diff -u -r1.22 -r1.22.2.1
--- syntax.c 2004/09/22 02:06:51 1.22
+++ syntax.c 2005/03/15 05:24:52 1.22.2.1
@@ -448,8 +448,8 @@
tmp_table = get_char_property (pos, Qsyntax_table, cache->object,
EXTENT_AT_AFTER, 0);
- lim = next_single_property_change (pos, Qsyntax_table, cache->object,
- -1);
+ lim = next_previous_single_property_change (pos, Qsyntax_table,
+ cache->object, -1, 1, 0);
if (lim < 0)
{
next = buffer_or_string_absolute_end_byte (cache->object);
@@ -460,8 +460,8 @@
if (pos < buffer_or_string_absolute_end_byte (cache->object))
pos = next_bytexpos (cache->object, pos);
- lim = previous_single_property_change (pos, Qsyntax_table, cache->object,
- -1);
+ lim = next_previous_single_property_change (pos, Qsyntax_table,
+ cache->object, -1, 0, 0);
if (lim < 0)
{
prev = buffer_or_string_absolute_begin_byte (cache->object);
1.77.2.2 +54 -16 XEmacs/xemacs/src/sysdep.c
Index: sysdep.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/sysdep.c,v
retrieving revision 1.77.2.1
retrieving revision 1.77.2.2
diff -u -r1.77.2.1 -r1.77.2.2
--- sysdep.c 2004/12/11 05:16:37 1.77.2.1
+++ sysdep.c 2005/03/15 05:24:52 1.77.2.2
@@ -628,7 +628,7 @@
if (sh == 0)
sh = (Ibyte *) "sh";
- C_STRING_TO_EXTERNAL (sh, shext, Qfile_name);
+ PATHNAME_CONVERT_OUT (sh, shext);
UNGCPRO;
@@ -638,7 +638,10 @@
qxe_chdir (str);
/* Waits for process completion */
- if (_spawnlp (_P_WAIT, shext, shext, NULL) != 0)
+ if (XEUNICODE_P ?
+ _wspawnlp (_P_WAIT, (const wchar_t *) shext,
+ (const wchar_t *) shext, NULL) != 0 :
+ _spawnlp (_P_WAIT, shext, shext, NULL) != 0)
report_process_error ("Can't spawn subshell", Qunbound);
else
return; /* we're done, no need to wait for termination */
@@ -958,7 +961,7 @@
sg.sg_ospeed = B9600;
if (ioctl (input_fd, TIOCGETP, &sg) < 0)
- abort ();
+ ABORT ();
DEVICE_TTY_DATA (d)->ospeed = sg.sg_ospeed;
#endif
}
@@ -2537,18 +2540,6 @@
/* Encapsulations of system calls */
/************************************************************************/
-/* The documentation in VC++ claims that the pathname library functions
- accept strings in the current locale-specific encoding, but that's
- false, because they just call the native Win32 routines directly, which
- always use the system-default encoding (which is what Qmswindows_tstr
- will give us when not XEUNICODE_P). */
-#ifdef WIN32_NATIVE
-#define PATHNAME_CONVERT_OUT(path, pathout) C_STRING_TO_TSTR (path, pathout)
-#else
-#define PATHNAME_CONVERT_OUT(path, pathout) \
- C_STRING_TO_EXTERNAL (path, pathout, Qfile_name)
-#endif
-
/***************** low-level calls ****************/
/*
@@ -3180,6 +3171,51 @@
In that case, use ordinary stat instead. */
#ifndef S_IFLNK
return qxe_stat (path, buf);
+#elif defined (WIN32_NATIVE)
+ if (mswindows_shortcuts_are_symlinks)
+ {
+ /* We want to resolve the directory component and leave the rest
+ alone. */
+ Ibyte *dirend = find_end_of_directory_component (path, qxestrlen (path));
+ Bytecount len;
+
+ if (dirend != path)
+ {
+ Ibyte *resdir;
+ Ichar lastch;
+ DECLARE_EISTRING (resname);
+ DECLARE_EISTRING (dir);
+
+ eicpy_raw (dir, path, dirend - path);
+ PATHNAME_RESOLVE_LINKS (eidata (dir), resdir);
+ eicpy_rawz (resname, resdir);
+ lastch = eigetch_char (resname, eicharlen (resname) - 1);
+ if (!IS_DIRECTORY_SEP (lastch))
+ eicat_ch (resname, '\\');
+ eicat_rawz (resname, dirend);
+ path = eidata (resname);
+ }
+
+ /* However, if what we are trying to stat is a link, we need to add
+ the .LNK so that the actual file is statted. */
+ len = qxestrlen (path);
+ if (len > 4 && qxestrcasecmp_ascii (path + len - 4,
".LNK"))
+ {
+ DECLARE_EISTRING (name2);
+ Ibyte *resolved;
+
+ eicpy_rawz (name2, path);
+ eicat_ascii (name2, ".LNK");
+ resolved = mswindows_read_link (eidata (name2));
+ if (resolved)
+ {
+ xfree (resolved, Ibyte *);
+ return mswindows_stat (eidata (name2), buf);
+ }
+ }
+ }
+
+ return mswindows_stat (path, buf);
#else
Extbyte *pathout;
PATHNAME_CONVERT_OUT (path, pathout);
@@ -3227,7 +3263,9 @@
qxe_stat (const Ibyte *path, struct stat *buf)
{
#ifdef WIN32_NATIVE
- return mswindows_stat (path, buf);
+ Ibyte *resolved;
+ PATHNAME_RESOLVE_LINKS (path, resolved);
+ return mswindows_stat (resolved, buf);
#else /* not WIN32_NATIVE */
Extbyte *pathout;
PATHNAME_CONVERT_OUT (path, pathout);
1.18.2.2 +57 -1 XEmacs/xemacs/src/sysfile.h
Index: sysfile.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/sysfile.h,v
retrieving revision 1.18.2.1
retrieving revision 1.18.2.2
diff -u -r1.18.2.1 -r1.18.2.2
--- sysfile.h 2004/12/11 05:16:39 1.18.2.1
+++ sysfile.h 2005/03/15 05:24:53 1.18.2.2
@@ -238,6 +238,13 @@
#undef S_ISSOCK
#endif /* STAT_MACROS_BROKEN. */
+#ifdef WIN32_NATIVE
+/* This is the standard value for S_IFLNK. All of the S_... flags that
+ exist in the MSVCRT have standard values, so their bit tests will
+ magically work. */
+#define S_IFLNK 0120000
+#endif
+
#if !defined(S_ISBLK) && defined(S_IFBLK)
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
#endif
@@ -376,7 +383,8 @@
int qxe_readlink (const Ibyte *path, Ibyte *buf, size_t bufsiz);
int qxe_fstat (int fd, struct stat *buf);
int qxe_stat (const Ibyte *path, struct stat *buf);
-Ibyte *qxe_realpath (const Ibyte *path, Ibyte resolved_path []);
+Ibyte *qxe_realpath (const Ibyte *path, Ibyte resolved_path [],
+ Boolint links_only);
/* encapsulations: file-manipulation calls */
@@ -399,6 +407,10 @@
on systems like SCO 3.2v5 */
void filemodestring (struct stat *, char *);
+#ifdef WIN32_ANY
+extern int mswindows_shortcuts_are_symlinks;
+#endif
+
#endif /* emacs */
@@ -506,6 +518,50 @@
#define IS_ANY_SEP(c) IS_DIRECTORY_SEP (c)
#endif /* WIN32_ANY */
+
+#if defined (WIN32_NATIVE)
+#define PATHNAME_RESOLVE_LINKS(path, pathout) \
+do \
+{ \
+ if (mswindows_shortcuts_are_symlinks) \
+ { \
+ Ibyte *_prl_path_ = (Ibyte *) (path); \
+ Ibyte _prl_path2_[PATH_MAX_INTERNAL]; \
+ \
+ if (!qxe_realpath (_prl_path_, _prl_path2_, 1)) \
+ (pathout) = _prl_path_; \
+ else \
+ IBYTE_STRING_TO_ALLOCA (_prl_path2_, pathout); \
+ } \
+ else (pathout) = (Ibyte *) (path); \
+} while (0)
+#else
+#define PATHNAME_RESOLVE_LINKS(path, pathout) ((pathout) = (Ibyte *) (path))
+#endif
+
+#define LISP_PATHNAME_RESOLVE_LINKS(path, pathout) \
+ PATHNAME_RESOLVE_LINKS (XSTRING_DATA (path), pathout)
+
+/* The documentation in VC++ claims that the pathname library functions
+ accept strings in the current locale-specific encoding, but that's
+ false, because they just call the native Win32 routines directly, which
+ always use the system-default encoding (which is what Qmswindows_tstr
+ will give us when not XEUNICODE_P). */
+#ifdef WIN32_NATIVE
+# define PATHNAME_CONVERT_OUT(path, pathout) \
+do \
+{ \
+ const Ibyte *_pco_path_; \
+ PATHNAME_RESOLVE_LINKS (path, _pco_path_); \
+ C_STRING_TO_TSTR (_pco_path_, pathout); \
+} while (0)
+#else
+# define PATHNAME_CONVERT_OUT(path, pathout) \
+ C_STRING_TO_EXTERNAL (path, pathout, Qfile_name)
+#endif
+
+#define LISP_PATHNAME_CONVERT_OUT(path, pathout) \
+ PATHNAME_CONVERT_OUT (XSTRING_DATA (path), pathout)
#endif /* emacs */
1.15.2.1 +0 -4 XEmacs/xemacs/src/sysproc.h
Index: sysproc.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/sysproc.h,v
retrieving revision 1.15
retrieving revision 1.15.2.1
diff -u -r1.15 -r1.15.2.1
--- sysproc.h 2004/09/20 19:20:02 1.15
+++ sysproc.h 2005/03/15 05:24:53 1.15.2.1
@@ -41,10 +41,6 @@
This is not true with visual c though. The trick below works with
VC4.2b, 5.0 and 6.0. It assumes that VC is installed in a kind of
standard way, so include path ends with /include.
- NOTE: We also include this same file in s/windowsnt.h, to avoid problems
- because this file prototypes abort() and then lisp.h defines it as a
- macro, which must happen after the prototype. DO NOT remove the include
- here just because you "know" it's somewhere else as well.
*/
#include <../include/process.h>
#endif
1.23.2.2 +84 -35 XEmacs/xemacs/src/syswindows.h
Index: syswindows.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/syswindows.h,v
retrieving revision 1.23.2.1
retrieving revision 1.23.2.2
diff -u -r1.23.2.1 -r1.23.2.2
--- syswindows.h 2004/12/11 05:16:39 1.23.2.1
+++ syswindows.h 2005/03/15 05:24:54 1.23.2.2
@@ -579,6 +579,38 @@
#endif
BOOL qxeUpdateICMRegKey (DWORD arg1, Extbyte * arg2, Extbyte * arg3, UINT arg4);
+/* would be encapsulatable but for header changes in different versions of VC++ */
+
+#ifdef ERROR_WHEN_NONINTERCEPTED_FUNS_USED
+#undef EnumResourceTypes
+#define EnumResourceTypes
error_use_qxeEnumResourceTypes_or_EnumResourceTypesA_and_EnumResourceTypesW
+#endif
+#if MSC_VERSION >= 1300
+BOOL qxeEnumResourceTypes (HMODULE hModule, ENUMRESTYPEPROCW lpEnumFunc, LONG lParam);
+#else
+BOOL qxeEnumResourceTypes (HMODULE hModule, ENUMRESTYPEPROC lpEnumFunc, LONG lParam);
+#endif
+
+#ifdef ERROR_WHEN_NONINTERCEPTED_FUNS_USED
+#undef EnumResourceNames
+#define EnumResourceNames
error_use_qxeEnumResourceNames_or_EnumResourceNamesA_and_EnumResourceNamesW
+#endif
+#if MSC_VERSION >= 1300
+BOOL qxeEnumResourceNames (HMODULE hModule, const Extbyte * lpType, ENUMRESNAMEPROCW
lpEnumFunc, LONG lParam);
+#else
+BOOL qxeEnumResourceNames (HMODULE hModule, const Extbyte * lpType, ENUMRESNAMEPROC
lpEnumFunc, LONG lParam);
+#endif
+
+#ifdef ERROR_WHEN_NONINTERCEPTED_FUNS_USED
+#undef EnumResourceLanguages
+#define EnumResourceLanguages
error_use_qxeEnumResourceLanguages_or_EnumResourceLanguagesA_and_EnumResourceLanguagesW
+#endif
+#if MSC_VERSION >= 1300
+BOOL qxeEnumResourceLanguages (HMODULE hModule, const Extbyte * lpType, const Extbyte *
lpName, ENUMRESLANGPROCW lpEnumFunc, LONG lParam);
+#else
+BOOL qxeEnumResourceLanguages (HMODULE hModule, const Extbyte * lpType, const Extbyte *
lpName, ENUMRESLANGPROC lpEnumFunc, LONG lParam);
+#endif
+
/* files */
#ifdef ERROR_WHEN_NONINTERCEPTED_FUNS_USED
#undef FindFirstFile
@@ -678,17 +710,33 @@
#endif
HFONT qxeCreateFontIndirect (CONST LOGFONTW *lplf);
+#if defined (HAVE_MS_WINDOWS)
#ifdef ERROR_WHEN_NONINTERCEPTED_FUNS_USED
#undef ImmSetCompositionFont
#define ImmSetCompositionFont error use qxeImmSetCompositionFont or
ImmSetCompositionFontA/ImmSetCompositionFontW
#endif
BOOL qxeImmSetCompositionFont (HIMC imc, LOGFONTW *lplf);
+#endif /* defined (HAVE_MS_WINDOWS) */
+#if defined (HAVE_MS_WINDOWS)
#ifdef ERROR_WHEN_NONINTERCEPTED_FUNS_USED
#undef ImmGetCompositionFont
#define ImmGetCompositionFont error use qxeImmGetCompositionFont or
ImmGetCompositionFontA/ImmGetCompositionFontW
#endif
BOOL qxeImmGetCompositionFont (HIMC imc, LOGFONTW *lplf);
+#endif /* defined (HAVE_MS_WINDOWS) */
+
+#if defined (HAVE_MS_WINDOWS)
+#ifdef ERROR_WHEN_NONINTERCEPTED_FUNS_USED
+#undef ImmSetCompositionString
+#define ImmSetCompositionString
error_use_qxeImmSetCompositionString_or_ImmSetCompositionStringA_and_ImmSetCompositionStringW
+#endif
+#if MSC_VERSION >= 1300
+BOOL qxeImmSetCompositionString (HIMC arg1, DWORD dwIndex, LPVOID lpComp, DWORD arg4,
LPCVOID lpRead, DWORD arg6);
+#else
+BOOL qxeImmSetCompositionString (HIMC arg1, DWORD dwIndex, LPCVOID lpComp, DWORD arg4,
LPCVOID lpRead, DWORD arg6);
+#endif
+#endif /* defined (HAVE_MS_WINDOWS) */
#ifdef ERROR_WHEN_NONINTERCEPTED_FUNS_USED
#undef GetObject
@@ -891,10 +939,10 @@
#define LOCAL_FILE_FORMAT_TO_TSTR(path, out) \
do { \
- Ibyte *lttff; \
+ Ibyte *lttff; \
\
LOCAL_TO_WIN32_FILE_FORMAT (XSTRING_DATA (path), lttff); \
- C_STRING_TO_TSTR (lttff, out); \
+ PATHNAME_CONVERT_OUT (lttff, out); \
} while (0)
Lisp_Object tstr_to_local_file_format (Extbyte *pathout);
@@ -958,40 +1006,40 @@
#ifdef CYGWIN
-#define LOCAL_FILE_FORMAT_MAYBE_URL_TO_TSTR(lispstr, pathout) \
-do \
-{ \
- Ibyte *lffmutt_fname1; \
- Ibyte *lffmutt_pathint = XSTRING_DATA (lispstr); \
- \
- if ((lffmutt_fname1 = qxestrchr (lffmutt_pathint, ':')) != NULL \
- && *++lffmutt_fname1 == '/' && *++lffmutt_fname1 ==
'/') \
- { \
- /* If URL style file, the innards may have Cygwin mount points and \
- the like. so separate out the innards, process them, and put back \
- together. */ \
- if (qxestrncasecmp_ascii (lffmutt_pathint, "file://", 7) == 0) \
- { \
- Ibyte *lffmutt_path1, *lffmutt_path2; \
- LOCAL_TO_WIN32_FILE_FORMAT (lffmutt_pathint + 7, lffmutt_path1); \
- if (lffmutt_path1 == lffmutt_pathint + 7) /* Optimization */ \
- lffmutt_path2 = lffmutt_pathint; \
- else \
- { \
+#define LOCAL_FILE_FORMAT_MAYBE_URL_TO_TSTR(lispstr, pathout) \
+do \
+{ \
+ Ibyte *lffmutt_fname1; \
+ Ibyte *lffmutt_pathint = XSTRING_DATA (lispstr); \
+ \
+ if ((lffmutt_fname1 = qxestrchr (lffmutt_pathint, ':')) != NULL \
+ && *++lffmutt_fname1 == '/' && *++lffmutt_fname1 ==
'/') \
+ { \
+ /* If URL style file, the innards may have Cygwin mount points and \
+ the like. so separate out the innards, process them, and put back \
+ together. */ \
+ if (qxestrncasecmp_ascii (lffmutt_pathint, "file://", 7) == 0) \
+ { \
+ Ibyte *lffmutt_path1, *lffmutt_path2; \
+ LOCAL_TO_WIN32_FILE_FORMAT (lffmutt_pathint + 7, lffmutt_path1); \
+ if (lffmutt_path1 == lffmutt_pathint + 7) /* Optimization */ \
+ lffmutt_path2 = lffmutt_pathint; \
+ else \
+ { \
lffmutt_path2 = alloca_ibytes (7 + qxestrlen (lffmutt_path1) \
- + 1); \
- qxestrncpy (lffmutt_path2, lffmutt_pathint, 7); \
- qxestrcpy (lffmutt_path2 + 7, lffmutt_path1); \
- } \
- C_STRING_TO_TSTR (lffmutt_path2, pathout); \
- } \
- else \
- /* A straight URL, just convert */ \
- LISP_STRING_TO_TSTR (lispstr, pathout); \
- } \
- else \
- /* Not URL-style, must be a straight filename. */ \
- LOCAL_FILE_FORMAT_TO_TSTR (lispstr, pathout); \
+ + 1); \
+ qxestrncpy (lffmutt_path2, lffmutt_pathint, 7); \
+ qxestrcpy (lffmutt_path2 + 7, lffmutt_path1); \
+ } \
+ C_STRING_TO_TSTR (lffmutt_path2, pathout); \
+ } \
+ else \
+ /* A straight URL, just convert */ \
+ LISP_STRING_TO_TSTR (lispstr, pathout); \
+ } \
+ else \
+ /* Not URL-style, must be a straight filename. */ \
+ LOCAL_FILE_FORMAT_TO_TSTR (lispstr, pathout); \
} while (0)
#else /* not CYGWIN */
@@ -1128,6 +1176,7 @@
Lisp_Object data,
int errnum));
Lisp_Object mswindows_lisp_error (int errnum);
+Ibyte *mswindows_read_link (const Ibyte *fname);
/* in intl-win32.c */
extern Lisp_Object Qmswindows_tstr, Qmswindows_unicode;
1.22.2.2 +4 -4 XEmacs/xemacs/src/text.c
Index: text.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/text.c,v
retrieving revision 1.22.2.1
retrieving revision 1.22.2.2
diff -u -r1.22.2.1 -r1.22.2.2
--- text.c 2004/12/11 05:16:40 1.22.2.1
+++ text.c 2005/03/15 05:24:54 1.22.2.2
@@ -2709,7 +2709,7 @@
}
#ifdef ERROR_CHECK_TEXT
else if (x >= bufmin)
- abort ();
+ ABORT ();
#endif
else
{
@@ -3202,7 +3202,7 @@
}
#ifdef ERROR_CHECK_TEXT
else if (x >= bytmin)
- abort ();
+ ABORT ();
#endif
else
{
@@ -4492,7 +4492,7 @@
src expression. (We use the stringize operator to avoid evaluating the
expression multiple times.) If the caller uses the exact same src
expression twice in two converter calls in the same subexpression, we
- will lose, but at least we can check for this and abort(). We could
+ will lose, but at least we can check for this and ABORT(). We could
conceivably try to index on other parameters as well, but there is not
really any point. */
@@ -4573,7 +4573,7 @@
break;
default:
- abort ();
+ ABORT ();
}
/* The size is always + 2 because we have double zero-termination at the
1.25.2.2 +5 -5 XEmacs/xemacs/src/text.h
Index: text.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/text.h,v
retrieving revision 1.25.2.1
retrieving revision 1.25.2.2
diff -u -r1.25.2.1 -r1.25.2.2
--- text.h 2004/12/11 05:16:43 1.25.2.1
+++ text.h 2005/03/15 05:24:54 1.25.2.2
@@ -1422,10 +1422,10 @@
the specific format).
void eicpy_ascii (Eistring *eistr, const Ascbyte *ascstr);
... from an ASCII null-terminated string. Non-ASCII characters in
- the string are *ILLEGAL* (read abort() with error-checking defined).
+ the string are *ILLEGAL* (read ABORT() with error-checking defined).
void eicpy_ascii_len (Eistring *eistr, const Ascbyte *ascstr, len);
... from an ASCII string, with length specified. Non-ASCII characters
- in the string are *ILLEGAL* (read abort() with error-checking defined).
+ in the string are *ILLEGAL* (read ABORT() with error-checking defined).
void eicpy_ext (Eistring *eistr, const Extbyte *extdata,
Lisp_Object codesys);
... from external null-terminated data, with coding system specified.
@@ -1565,7 +1565,7 @@
... from another Eistring.
void eicat_ascii (Eistring *eistr, Ascbyte *ascstr);
... from an ASCII null-terminated string. Non-ASCII characters in
- the string are *ILLEGAL* (read abort() with error-checking defined).
+ the string are *ILLEGAL* (read ABORT() with error-checking defined).
void eicat_raw (ei, const Ibyte *data, Bytecount len);
... from raw internal-format data in the default internal format.
void eicat_rawz (ei, const Ibyte *data);
@@ -1595,7 +1595,7 @@
void eisub_ascii (Eistring *eistr, Bytecount off, Charcount charoff,
Bytecount len, Charcount charlen, Ascbyte *ascstr);
... with an ASCII null-terminated string. Non-ASCII characters in
- the string are *ILLEGAL* (read abort() with error-checking defined).
+ the string are *ILLEGAL* (read ABORT() with error-checking defined).
void eisub_ch (Eistring *eistr, Bytecount off, Charcount charoff,
Bytecount len, Charcount charlen, Ichar ch);
... with an Ichar.
@@ -2391,7 +2391,7 @@
int eicmp_1 (Eistring *ei, Bytecount off, Charcount charoff,
Bytecount len, Charcount charlen, const Ibyte *data,
- const Eistring *ei2, int is_c, int fold_case);
+ const Eistring *ei2, int is_ascii, int fold_case);
#define eicmp_ei(eistr, eistr2) \
eicmp_1 (eistr, 0, -1, -1, -1, 0, eistr2, 0, 0)
1.10.2.2 +4 -4 XEmacs/xemacs/src/toolbar-common.c
Index: toolbar-common.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/toolbar-common.c,v
retrieving revision 1.10.2.1
retrieving revision 1.10.2.2
diff -u -r1.10.2.1 -r1.10.2.2
--- toolbar-common.c 2004/11/25 12:44:17 1.10.2.1
+++ toolbar-common.c 2005/03/15 05:24:55 1.10.2.2
@@ -63,9 +63,9 @@
#define __INTERNAL_APPROPRIATENESS_CHECK(f) assert(FRAME_X_P (f))
#define __INTERNAL_FLUSH(d) XFlush (DEVICE_X_DISPLAY (d))
#else
-#define __INTERNAL_MAPPED_P(f) abort()
-#define __INTERNAL_APPROPRIATENESS_CHECK(f) abort()
-#define __INTERNAL_FLUSH(f) abort()
+#define __INTERNAL_MAPPED_P(f) ABORT()
+#define __INTERNAL_APPROPRIATENESS_CHECK(f) ABORT()
+#define __INTERNAL_FLUSH(f) ABORT()
#endif
#include "toolbar-common.h"
@@ -453,7 +453,7 @@
(frame)->right_toolbar_was_visible = flag; \
break; \
default: \
- abort (); \
+ ABORT (); \
} \
} while (0)
1.24.2.1 +1 -1 XEmacs/xemacs/src/toolbar-msw.c
Index: toolbar-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/toolbar-msw.c,v
retrieving revision 1.24
retrieving revision 1.24.2.1
diff -u -r1.24 -r1.24.2.1
--- toolbar-msw.c 2004/09/20 19:20:03 1.24
+++ toolbar-msw.c 2005/03/15 05:24:55 1.24.2.1
@@ -78,7 +78,7 @@
(frame)->right_toolbar_was_visible = flag; \
break; \
default: \
- abort (); \
+ ABORT (); \
} \
} while (0)
1.33.2.1 +1 -1 XEmacs/xemacs/src/toolbar.c
Index: toolbar.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/toolbar.c,v
retrieving revision 1.33
retrieving revision 1.33.2.1
diff -u -r1.33 -r1.33.2.1
--- toolbar.c 2004/11/04 23:06:56 1.33
+++ toolbar.c 2005/03/15 05:24:56 1.33.2.1
@@ -933,7 +933,7 @@
*vert = 1;
break;
default:
- abort ();
+ ABORT ();
}
}
1.20.2.1 +13 -25 XEmacs/xemacs/src/ui-gtk.c
Index: ui-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ui-gtk.c,v
retrieving revision 1.20
retrieving revision 1.20.2.1
diff -u -r1.20 -r1.20.2.1
--- ui-gtk.c 2004/11/04 23:06:57 1.20
+++ ui-gtk.c 2005/03/15 05:24:56 1.20.2.1
@@ -107,18 +107,6 @@
static struct hash_table *internal_type_hash;
static int
-type_hash_equal(const void *arg1, const void *arg2)
-{
- return ((GtkType) arg1 == (GtkType) arg2);
-}
-
-static unsigned long
-type_hash_hash(const void *arg)
-{
- return ((unsigned long) arg);
-}
-
-static int
type_already_imported_p (GtkType t)
{
void *retval = NULL;
@@ -148,7 +136,7 @@
if (!internal_type_hash)
{
- internal_type_hash = make_general_hash_table (163, type_hash_hash,
type_hash_equal);
+ internal_type_hash = make_hash_table (163);
return (0);
}
@@ -1128,11 +1116,11 @@
(data1->object_type == data2->object_type));
}
-static unsigned long
+static Hashcode
emacs_gtk_boxed_hash (Lisp_Object obj, int UNUSED (depth))
{
emacs_gtk_boxed_data *data = XGTK_BOXED(obj);
- return (HASH2 ((unsigned long)data->object, data->object_type));
+ return (HASH2 ((Hashcode) data->object, data->object_type));
}
DEFINE_LRECORD_IMPLEMENTATION_WITH_PROPS ("GtkBoxed", emacs_gtk_boxed,
@@ -1180,7 +1168,7 @@
emacs_gtk_boxed_data *data = NULL;
if (GTK_FUNDAMENTAL_TYPE (t) != GTK_TYPE_BOXED)
- abort();
+ ABORT();
data = allocate_emacs_gtk_boxed_data ();
data->object = obj;
@@ -1446,13 +1434,13 @@
/* structured types */
case GTK_TYPE_SIGNAL:
case GTK_TYPE_ARGS: /* This we can do as a list of values */
- abort();
+ ABORT();
case GTK_TYPE_CALLBACK:
stderr_out ("callback fn: ...\n");
break;
case GTK_TYPE_C_CALLBACK:
case GTK_TYPE_FOREIGN:
- abort();
+ ABORT();
/* base type of the object system */
case GTK_TYPE_OBJECT:
@@ -1463,7 +1451,7 @@
break;
default:
- abort();
+ ABORT();
}
}
#endif
@@ -1544,7 +1532,7 @@
}
}
stderr_out ("Do not know how to convert `%s' to lisp!\n",
gtk_type_name (arg->type));
- abort ();
+ ABORT ();
}
/* This is chuck reminding GCC to... SHUT UP! */
return (Qnil);
@@ -1597,7 +1585,7 @@
break;
case GTK_TYPE_LONG:
case GTK_TYPE_ULONG:
- abort();
+ ABORT();
case GTK_TYPE_FLOAT:
CHECK_INT_OR_FLOAT (obj);
GTK_VALUE_FLOAT(*arg) = extract_float (obj);
@@ -1816,7 +1804,7 @@
else
{
stderr_out ("Do not know how to convert `%s' from lisp!\n",
gtk_type_name (arg->type));
- abort();
+ ABORT();
}
break;
}
@@ -1877,7 +1865,7 @@
break;
case GTK_TYPE_LONG:
case GTK_TYPE_ULONG:
- abort();
+ ABORT();
case GTK_TYPE_FLOAT:
CHECK_INT_OR_FLOAT (obj);
*(GTK_RETLOC_FLOAT(*arg)) = extract_float (obj);
@@ -2096,7 +2084,7 @@
else
{
stderr_out ("Do not know how to convert `%s' from lisp!\n",
gtk_type_name (arg->type));
- abort();
+ ABORT();
}
break;
}
@@ -2171,7 +2159,7 @@
}
else
{
- /* abort ()? */
+ /* ABORT ()? */
}
return (val);
}
1.18.2.2 +8 -8 XEmacs/xemacs/src/unexnt.c
Index: unexnt.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/unexnt.c,v
retrieving revision 1.18.2.1
retrieving revision 1.18.2.2
diff -u -r1.18.2.1 -r1.18.2.2
--- unexnt.c 2004/12/11 05:16:45 1.18.2.1
+++ unexnt.c 2005/03/15 05:24:56 1.18.2.2
@@ -526,17 +526,17 @@
file = qxeCreateFile (filename, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (file == INVALID_HANDLE_VALUE)
- abort ();
+ ABORT ();
/* Seek to where the .bss section is tucked away after the heap... */
index = heap_index_in_executable + get_committed_heap_size ();
if (SetFilePointer (file, index, NULL, FILE_BEGIN) == 0xFFFFFFFF)
- abort ();
+ ABORT ();
/* Ok, read in the saved .bss section and initialize all
uninitialized variables. */
if (!ReadFile (file, bss_start, bss_size, &n_read, NULL))
- abort ();
+ ABORT ();
CloseHandle (file);
#endif
@@ -554,13 +554,13 @@
file = qxeCreateFile (filename, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (file == INVALID_HANDLE_VALUE)
- abort ();
+ ABORT ();
size = GetFileSize (file, &upper_size);
file_mapping = qxeCreateFileMapping (file, NULL, PAGE_WRITECOPY,
0, size, NULL);
if (!file_mapping)
- abort ();
+ ABORT ();
size = get_committed_heap_size ();
file_base = MapViewOfFileEx (file_mapping, FILE_MAP_COPY, 0,
@@ -578,17 +578,17 @@
if (VirtualAlloc (get_heap_start (), get_committed_heap_size (),
MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE) == NULL)
- abort ();
+ ABORT ();
/* Seek to the location of the heap data in the executable. */
if (SetFilePointer (file, heap_index_in_executable,
NULL, FILE_BEGIN) == 0xFFFFFFFF)
- abort ();
+ ABORT ();
/* Read in the data. */
if (!ReadFile (file, get_heap_start (),
get_committed_heap_size (), &n_read, NULL))
- abort ();
+ ABORT ();
CloseHandle (file);
}
1.23.2.1 +61 -29 XEmacs/xemacs/src/unicode.c
Index: unicode.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/unicode.c,v
retrieving revision 1.23
retrieving revision 1.23.2.1
diff -u -r1.23 -r1.23.2.1
--- unicode.c 2004/11/04 23:06:58 1.23
+++ unicode.c 2005/03/15 05:24:56 1.23.2.1
@@ -176,7 +176,7 @@
(1-to-1). Any character set that does not behave that way is
broken according to the Unicode standard.
- Answer: You will get an abort(), since the purpose of the sledgehammer
+ Answer: You will get an ABORT(), since the purpose of the sledgehammer
routines is self-checking. The above problem with non-1-to-1 mapping
occurs in the Big5 tables, as provided by the Unicode Consortium. */
@@ -224,7 +224,7 @@
};
static const struct memory_description to_unicode_level_1_desc_1[] = {
- { XD_BLOCK_PTR, 0, 96, &to_unicode_level_0_desc },
+ { XD_BLOCK_PTR, 0, 96, { &to_unicode_level_0_desc } },
{ XD_END }
};
@@ -233,8 +233,8 @@
};
static const struct memory_description to_unicode_description_1[] = {
- { XD_BLOCK_PTR, 1, 96, &to_unicode_level_0_desc },
- { XD_BLOCK_PTR, 2, 96, &to_unicode_level_1_desc },
+ { XD_BLOCK_PTR, 1, 96, { &to_unicode_level_0_desc } },
+ { XD_BLOCK_PTR, 2, 96, { &to_unicode_level_1_desc } },
{ XD_END }
};
@@ -246,7 +246,7 @@
/* Used only for to_unicode_blank_2 */
static const struct memory_description to_unicode_level_2_desc_1[] = {
- { XD_BLOCK_PTR, 0, 96, &to_unicode_level_1_desc },
+ { XD_BLOCK_PTR, 0, 96, { &to_unicode_level_1_desc } },
{ XD_END }
};
@@ -259,7 +259,7 @@
};
static const struct memory_description from_unicode_level_1_desc_1[] = {
- { XD_BLOCK_PTR, 0, 256, &from_unicode_level_0_desc },
+ { XD_BLOCK_PTR, 0, 256, { &from_unicode_level_0_desc } },
{ XD_END }
};
@@ -268,7 +268,7 @@
};
static const struct memory_description from_unicode_level_2_desc_1[] = {
- { XD_BLOCK_PTR, 0, 256, &from_unicode_level_1_desc },
+ { XD_BLOCK_PTR, 0, 256, { &from_unicode_level_1_desc } },
{ XD_END }
};
@@ -277,7 +277,7 @@
};
static const struct memory_description from_unicode_level_3_desc_1[] = {
- { XD_BLOCK_PTR, 0, 256, &from_unicode_level_2_desc },
+ { XD_BLOCK_PTR, 0, 256, { &from_unicode_level_2_desc } },
{ XD_END }
};
@@ -286,10 +286,10 @@
};
static const struct memory_description from_unicode_description_1[] = {
- { XD_BLOCK_PTR, 1, 256, &from_unicode_level_0_desc },
- { XD_BLOCK_PTR, 2, 256, &from_unicode_level_1_desc },
- { XD_BLOCK_PTR, 3, 256, &from_unicode_level_2_desc },
- { XD_BLOCK_PTR, 4, 256, &from_unicode_level_3_desc },
+ { XD_BLOCK_PTR, 1, 256, { &from_unicode_level_0_desc } },
+ { XD_BLOCK_PTR, 2, 256, { &from_unicode_level_1_desc } },
+ { XD_BLOCK_PTR, 3, 256, { &from_unicode_level_2_desc } },
+ { XD_BLOCK_PTR, 4, 256, { &from_unicode_level_3_desc } },
{ XD_END }
};
@@ -301,7 +301,7 @@
/* Used only for from_unicode_blank_4 */
static const struct memory_description from_unicode_level_4_desc_1[] = {
- { XD_BLOCK_PTR, 0, 256, &from_unicode_level_3_desc },
+ { XD_BLOCK_PTR, 0, 256, { &from_unicode_level_3_desc } },
{ XD_END }
};
@@ -406,7 +406,7 @@
return newtab;
}
default:
- abort ();
+ ABORT ();
return 0;
}
}
@@ -702,7 +702,7 @@
break;
}
default:
- abort ();
+ ABORT ();
}
}
@@ -749,7 +749,7 @@
case 2: val = ((short **) frtab)[u2][u1]; break;
case 3: val = ((short ***) frtab)[u3][u2][u1]; break;
case 4: val = ((short ****) frtab)[u4][u3][u2][u1]; break;
- default: abort ();
+ default: ABORT ();
}
ch = make_ichar (charset, val >> 8, val & 0xFF);
@@ -772,7 +772,7 @@
case 1:
assert_not_any_blank_table (frtab);
break;
- default: abort ();
+ default: ABORT ();
}
}
}
@@ -796,7 +796,7 @@
break;
}
default:
- abort ();
+ ABORT ();
}
}
@@ -917,7 +917,7 @@
case 4:
((short ****) table)[0] = (short ***) old_table;
break;
- default: abort ();
+ default: ABORT ();
}
}
}
@@ -953,7 +953,7 @@
((short *) create_new_from_unicode_table (1));
table = ((short **) table)[u2];
break;
- default: abort ();
+ default: ABORT ();
}
}
}
@@ -968,7 +968,7 @@
case 2: ((short **) table)[u2][u1] = (c1 << 8) + c2; break;
case 3: ((short ***) table)[u3][u2][u1] = (c1 << 8) + c2; break;
case 4: ((short ****) table)[u4][u3][u2][u1] = (c1 << 8) + c2; break;
- default: abort ();
+ default: ABORT ();
}
}
}
@@ -1031,7 +1031,7 @@
case 2: retval = ((short **) table)[u2][u1]; break;
case 3: retval = ((short ***) table)[u3][u2][u1]; break;
case 4: retval = ((short ****) table)[u4][u3][u2][u1]; break;
- default: abort (); retval = 0;
+ default: ABORT (); retval = 0;
}
if (retval != -1)
@@ -1281,6 +1281,38 @@
When there is no international support (i.e. the 'mule feature is not
present), this function simply does `int-to-char' and ignores the CHARSETS
argument.
+
+Note that the current XEmacs internal encoding has no mapping for many
+Unicode code points, and if you use characters that are vaguely obscure with
+XEmacs' Unicode coding systems, you will lose data.
+
+To add support for some desired code point in the short term--note that our
+intention is to move to a Unicode-compatible internal encoding soon, for
+some value of soon--if you are a distributor, add something like the
+following to `site-start.el.'
+
+(make-charset 'distro-name-private
+ "Private character set for DISTRO"
+ '(dimension 1
+ chars 96
+ columns 1
+ final ?5 ;; Change this--see docs for make-charset
+ long-name "Private charset for some Unicode char support."
+ short-name "Distro-Private"))
+
+(set-unicode-conversion
+ (make-char 'distro-name-private #x20) #x263A) ;; WHITE SMILING FACE
+
+(set-unicode-conversion
+ (make-char 'distro-name-private #x21) #x3030) ;; WAVY DASH
+
+;; ...
+;;; Repeat as necessary.
+
+Redisplay will work on the sjt-xft branch, but not with server-side X11
+fonts as is the default. However, data read in will be preserved when they
+are written out again.
+
*/
(code, USED_IF_MULE (charsets)))
{
@@ -1496,7 +1528,7 @@
break;
case CHARSET_TYPE_96X96: l1 = 32; h1 = 127; l2 = 32; h2 = 127;
break;
- default: abort (); l1 = 0; h1 = 0; l2 = 0; h2 = 0;
+ default: ABORT (); l1 = 0; h1 = 0; l2 = 0; h2 = 0;
}
if (cp1high < l2 || cp1high > h2 || cp1low < l1 || cp1low > h1)
@@ -1688,9 +1720,9 @@
}
break;
- case UNICODE_UTF_7: abort ();
+ case UNICODE_UTF_7: ABORT ();
- default: abort ();
+ default: ABORT ();
}
}
@@ -1829,10 +1861,10 @@
break;
case UNICODE_UTF_7:
- abort ();
+ ABORT ();
break;
- default: abort ();
+ default: ABORT ();
}
}
@@ -1959,7 +1991,7 @@
}
break;
default:
- abort ();
+ ABORT ();
}
}
}
@@ -2344,7 +2376,7 @@
case UNICODE_UTF_8: return Qutf_8;
case UNICODE_UTF_7: return Qutf_7;
case UNICODE_UCS_4: return Qucs_4;
- default: abort ();
+ default: ABORT ();
}
}
else if (EQ (prop, Qlittle_endian))
1.23.2.1 +239 -3 XEmacs/xemacs/src/win32.c
Index: win32.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/win32.c,v
retrieving revision 1.23
retrieving revision 1.23.2.1
diff -u -r1.23 -r1.23.2.1
--- win32.c 2004/11/04 23:06:58 1.23
+++ win32.c 2005/03/15 05:24:57 1.23.2.1
@@ -23,6 +23,8 @@
#include "buffer.h"
#include "console-msw.h"
+#include "hash.h"
+#include "profile.h"
#include "sysfile.h"
#include "sysproc.h"
@@ -46,7 +48,10 @@
nil means no, t means yes. */
Lisp_Object Vmswindows_downcase_file_names;
+struct hash_table *mswindows_read_link_hash;
+
int mswindows_windows9x_p;
+Boolint mswindows_shortcuts_are_symlinks;
pfSwitchToThread_t xSwitchToThread;
@@ -237,7 +242,7 @@
#else
case 0: lang = 0; break;
#endif
- default: abort ();
+ default: ABORT ();
}
retval = qxeFormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER
@@ -341,6 +346,7 @@
if (STRINGP (operation))
LISP_STRING_TO_TSTR (operation, opext);
+ /* #### What about path names, which may be links? */
if (STRINGP (parameters))
LISP_STRING_TO_TSTR (parameters, parmext);
if (STRINGP (current_dir))
@@ -403,6 +409,228 @@
}
#endif
+struct read_link_hash
+{
+ Ibyte *resolved;
+ DWORD ticks;
+};
+
+static Ibyte *
+mswindows_read_link_1 (const Ibyte *fname)
+{
+#ifdef NO_CYGWIN_COM_SUPPORT
+ return NULL;
+#else
+ Ibyte *retval = NULL;
+ Extbyte *fnameext;
+ HANDLE fh;
+ struct read_link_hash *rlh;
+ DWORD ticks;
+
+ /* The call below to resolve a link is rather time-consuming.
+ I tried implementing a simple cache based on creation and write time
+ of the file, but that didn't help enough -- maybe 30% faster but still
+ a lot of time spent here. So just do something cheesy and don't
+ check again if we've recently (< a second) done so. */
+
+ if (!mswindows_read_link_hash)
+ mswindows_read_link_hash = make_string_hash_table (1000);
+ C_STRING_TO_TSTR (fname, fnameext);
+
+ /* See if we can find a cached value. */
+
+ /* The intermediate cast fools gcc into not outputting strict-aliasing
+ complaints */
+ ticks = GetTickCount ();
+ if (!gethash (fname, mswindows_read_link_hash,
+ (const void **) (void *) &rlh))
+ {
+ rlh = xnew_and_zero (struct read_link_hash);
+ puthash (qxestrdup (fname), rlh, mswindows_read_link_hash);
+ }
+ else if (ticks - rlh->ticks < 1000)
+ {
+ return rlh->resolved ? qxestrdup (rlh->resolved) : NULL;
+ }
+
+ rlh->ticks = ticks;
+
+ /* Retrieve creation/write time of link file. */
+
+ /* No access rights required to get info. */
+ if ((fh = qxeCreateFile (fnameext, 0, 0, NULL, OPEN_EXISTING, 0, NULL))
+ == INVALID_HANDLE_VALUE)
+ {
+ CloseHandle (fh);
+ return NULL;
+ }
+
+ CloseHandle (fh);
+
+ /* ####
+
+ Note the following in the docs:
+
+ Note: The IShellLink interface has an ANSI version
+ (IShellLinkA) and a Unicode version (IShellLinkW). The
+ version that will be used depends on whether you compile
+ for ANSI or Unicode. However, Microsoft® Windows 95 and
+ Microsoft® Windows 98 only support IShellLinkA.
+
+ We haven't yet implemented COM support in the
+ Unicode-splitting library. I don't quite understand how
+ COM works yet, but it looks like what's happening is
+ that the ShellLink class implements both the IShellLinkA
+ and IShellLinkW interfaces. To make this work at
+ run-time, we have to do something like this:
+
+ -- define a new interface qxeIShellLink that uses
+ Extbyte * instead of LPSTR or LPWSTR. (not totally
+ necessary since Extbyte * == LPSTR).
+
+ -- define a new class qxeShellLink that implements
+ qxeIShellLink. the methods on this class need to create
+ a shadow ShellLink object to do all the real work, and
+ call the corresponding function from either the
+ IShellLinkA or IShellLinkW interfaces on this object,
+ depending on whether XEUNICODE_P is defined.
+
+ -- with appropriate preprocessor magic, of course, we
+ could make things appear transparent; but we've decided
+ not to do preprocessor magic for the moment.
+ */
+
+ /* #### Not Unicode-split for the moment; we have to do it
+ ourselves. */
+ if (XEUNICODE_P)
+ {
+ IShellLinkW *psl;
+
+ if (CoCreateInstance (
+ XECOMID (CLSID_ShellLink),
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ XECOMID (IID_IShellLinkW),
+ &VOIDP_CAST (psl)) == S_OK)
+ {
+ IPersistFile *ppf;
+
+ if (XECOMCALL2 (psl, QueryInterface,
+ XECOMID (IID_IPersistFile),
+ &VOIDP_CAST (ppf)) == S_OK)
+ {
+ Extbyte *fname_unicode;
+ WIN32_FIND_DATAW wfd;
+ LPWSTR resolved = alloca_array (WCHAR, PATH_MAX_EXTERNAL + 1);
+
+ /* Always Unicode. Not obvious from the
+ IPersistFile documentation, but look under
+ "Shell Link" for example code. */
+ fname_unicode = fnameext;
+
+ if (XECOMCALL2 (ppf, Load,
+ (LPWSTR) fname_unicode,
+ STGM_READ) == S_OK &&
+ /* #### YUCK! Docs read
+
+ cchMaxPath
+
+ Maximum number of bytes to copy to the buffer pointed
+ to by the pszFile parameter.
+
+ But "cch" means "count of characters", not bytes.
+ I'll assume the doc writers messed up and the
+ programmer was correct. Also, this approach is safe
+ even if it's actually the other way around. */
+#if defined (CYGWIN_HEADERS) && W32API_INSTALLED_VER < W32API_VER(2,2)
+ /* Another Cygwin prototype error,
+ fixed in v2.2 of w32api */
+ XECOMCALL4 (psl, GetPath, (LPSTR) resolved,
+ PATH_MAX_EXTERNAL, &wfd, 0)
+#else
+ XECOMCALL4 (psl, GetPath, resolved,
+ PATH_MAX_EXTERNAL, &wfd, 0)
+#endif
+ == S_OK)
+ TSTR_TO_C_STRING_MALLOC (resolved, retval);
+
+ XECOMCALL0 (ppf, Release);
+ }
+
+ XECOMCALL0 (psl, Release);
+ }
+ }
+ else
+ {
+ IShellLinkA *psl;
+
+ if (CoCreateInstance (
+ XECOMID (CLSID_ShellLink),
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ XECOMID (IID_IShellLinkA),
+ &VOIDP_CAST (psl)) == S_OK)
+ {
+ IPersistFile *ppf;
+
+ if (XECOMCALL2 (psl, QueryInterface,
+ XECOMID (IID_IPersistFile),
+ &VOIDP_CAST (ppf)) == S_OK)
+ {
+ Extbyte *fname_unicode;
+ WIN32_FIND_DATAA wfd;
+ LPSTR resolved = alloca_array (CHAR, PATH_MAX_EXTERNAL + 1);
+
+ /* Always Unicode. Not obvious from the
+ IPersistFile documentation, but look under
+ "Shell Link" for example code. */
+ C_STRING_TO_EXTERNAL (fname, fname_unicode,
+ Qmswindows_unicode);
+
+ if (XECOMCALL2 (ppf, Load,
+ (LPWSTR) fname_unicode,
+ STGM_READ) == S_OK
+ && XECOMCALL4 (psl, GetPath, resolved,
+ PATH_MAX_EXTERNAL, &wfd, 0) == S_OK)
+ TSTR_TO_C_STRING_MALLOC (resolved, retval);
+
+ XECOMCALL0 (ppf, Release);
+ }
+
+ XECOMCALL0 (psl, Release);
+ }
+ }
+
+ /* Cache newly found value */
+ if (rlh->resolved)
+ xfree (rlh->resolved, Ibyte *);
+ rlh->resolved = retval ? qxestrdup (retval) : NULL;
+
+ return retval;
+#endif /* NO_CYGWIN_COM_SUPPORT */
+}
+
+/* Resolve a file that may be a shortcut. Accepts either a file ending
+ with .LNK or without the ending. If a shortcut is found, returns
+ a value that you must xfree(); otherwise NULL. */
+
+Ibyte *
+mswindows_read_link (const Ibyte *fname)
+{
+ int len = qxestrlen (fname);
+ if (len > 4 && !qxestrcasecmp_ascii (fname + len - 4, ".LNK"))
+ return mswindows_read_link_1 (fname);
+ else
+ {
+ DECLARE_EISTRING (name2);
+
+ eicpy_rawz (name2, fname);
+ eicat_ascii (name2, ".LNK");
+ return mswindows_read_link_1 (eidata (name2));
+ }
+}
+
+
#if defined (WIN32_NATIVE) || defined (CYGWIN_BROKEN_SIGNALS)
/* setitimer() does not exist on native MS Windows, and appears broken
@@ -414,7 +642,6 @@
mechanism for SIGCHLD. Yuck.)
*/
-
/*--------------------------------------------------------------------*/
/* Signal support */
/*--------------------------------------------------------------------*/
@@ -664,11 +891,20 @@
void
vars_of_win32 (void)
{
- DEFVAR_LISP ("mswindows-downcase-file-names",
&Vmswindows_downcase_file_names /*
+ DEFVAR_LISP ("mswindows-downcase-file-names",
+ &Vmswindows_downcase_file_names /*
Non-nil means convert all-upper case file names to lower case.
This applies when performing completions and file name expansion.
*/ );
Vmswindows_downcase_file_names = Qnil;
+
+ DEFVAR_BOOL ("mswindows-shortcuts-are-symlinks",
+ &mswindows_shortcuts_are_symlinks /*
+Non-nil means shortcuts (.LNK files) are treated as symbolic links.
+This works also for symlinks created under Cygwin, because they use .LNK
+files to implement symbolic links.
+*/ );
+ mswindows_shortcuts_are_symlinks = 1;
}
void
1.81.2.1 +17 -17 XEmacs/xemacs/src/window.c
Index: window.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/window.c,v
retrieving revision 1.81
retrieving revision 1.81.2.1
diff -u -r1.81 -r1.81.2.1
--- window.c 2004/11/04 23:06:58 1.81
+++ window.c 2005/03/15 05:24:57 1.81.2.1
@@ -171,7 +171,7 @@
static const struct memory_description face_cachel_description_1[] = {
{ XD_BLOCK_PTR, offsetof (face_cachel, merged_faces),
- 1, &int_dynarr_description },
+ 1, { &int_dynarr_description } },
{ XD_LISP_OBJECT, offsetof (face_cachel, face) },
{ XD_LISP_OBJECT, offsetof (face_cachel, foreground) },
{ XD_LISP_OBJECT, offsetof (face_cachel, background) },
@@ -242,11 +242,11 @@
#include "winslots.h"
{ XD_BLOCK_PTR, offsetof (struct window, face_cachels),
- 1, &face_cachel_dynarr_description },
+ 1, { &face_cachel_dynarr_description } },
{ XD_BLOCK_PTR, offsetof (struct window, glyph_cachels),
- 1, &glyph_cachel_dynarr_description },
+ 1, { &glyph_cachel_dynarr_description } },
{ XD_BLOCK_PTR, offsetof (struct window, line_start_cache),
- 1, &line_start_cache_dynarr_description },
+ 1, { &line_start_cache_dynarr_description } },
{ XD_END }
};
@@ -423,9 +423,9 @@
{ XD_LISP_OBJECT, offsetof (struct window_mirror, vchild) },
{ XD_BLOCK_PTR, offsetof (struct window_mirror, current_display_lines),
- 1, &display_line_dynarr_description },
+ 1, { &display_line_dynarr_description } },
{ XD_BLOCK_PTR, offsetof (struct window_mirror, desired_display_lines),
- 1, &display_line_dynarr_description },
+ 1, { &display_line_dynarr_description } },
{ XD_LISP_OBJECT, offsetof (struct window_mirror, buffer) },
@@ -643,7 +643,7 @@
real_window_internal (mir->frame->root_window,
XWINDOW_MIRROR (mir->frame->root_mirror), mir);
if (NILP (retval) && !no_abort)
- abort ();
+ ABORT ();
return retval;
}
@@ -706,7 +706,7 @@
update_frame_window_mirror (XFRAME (w->frame));
t = find_window_mirror (w);
if (!t)
- abort ();
+ ABORT ();
if (which == CURRENT_DISP)
return t->current_display_lines;
@@ -716,7 +716,7 @@
/* The CMOTION_DISP display lines are global. */
return cmotion_display_lines;
else
- abort ();
+ ABORT ();
return 0; /* shut up compiler */
}
@@ -730,7 +730,7 @@
update_frame_window_mirror (XFRAME (w->frame));
t = find_window_mirror (w);
if (!t)
- abort ();
+ ABORT ();
return t->buffer;
}
@@ -744,7 +744,7 @@
update_frame_window_mirror (XFRAME (w->frame));
t = find_window_mirror (w);
if (!t)
- abort ();
+ ABORT ();
t->buffer = b;
}
@@ -1963,7 +1963,7 @@
struct buffer *b = XBUFFER (buf);
if (b != XMARKER (w->pointm[CURRENT_DISP])->buffer)
- abort ();
+ ABORT ();
/* FSF disables this check, so I'll do it too. I hope it won't
break things. --ben */
@@ -2833,14 +2833,14 @@
I feel no shame about putting this piece of shit in. */
if (++lose_lose >= 500)
{
- /* Call to abort() added by Darryl Okahata (16 Nov. 2001),
+ /* Call to ABORT() added by Darryl Okahata (16 Nov. 2001),
at Ben's request, to catch any remaining bugs.
If you find that XEmacs is aborting here, and you
need to be up and running ASAP, it should be safe to
- comment out the following abort(), as long as you
+ comment out the following ABORT(), as long as you
leave the "break;" alone. */
- abort();
+ ABORT();
break; /* <--- KEEP THIS HERE! Do not delete! */
}
@@ -2984,7 +2984,7 @@
}
default:
- abort ();
+ ABORT ();
}
if (EQ (w, last_window))
@@ -3076,7 +3076,7 @@
w = window_loop (GET_LRU_WINDOW, Qnil, 0, which_frames, 1, which_devices);
/* At this point we damn well better have found something. */
- if (NILP (w)) abort ();
+ if (NILP (w)) ABORT ();
#endif
return w;
1.8.2.2 +10 -10 XEmacs/xemacs/src/xgccache.c
Index: xgccache.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/xgccache.c,v
retrieving revision 1.8.2.1
retrieving revision 1.8.2.2
diff -u -r1.8.2.1 -r1.8.2.2
--- xgccache.c 2004/11/25 12:44:18 1.8.2.1
+++ xgccache.c 2005/03/15 05:24:58 1.8.2.2
@@ -92,12 +92,12 @@
};
#ifdef GCCACHE_HASH
-static unsigned long
+static Hashcode
gc_cache_hash (const void *arg)
{
const struct gcv_and_mask *gcvm = (const struct gcv_and_mask *) arg;
unsigned long *longs = (unsigned long *) &gcvm->gcv;
- unsigned long hash = gcvm->mask;
+ Hashcode hash = gcvm->mask;
int i;
/* This could look at the mask and only use the used slots in the
hash code. That would win in that we wouldn't have to initialize
@@ -105,7 +105,7 @@
the hash function to be as fast as possible; some timings should
be done. */
for (i = 0; i < (int) (sizeof (XGCValues) / sizeof (unsigned long)); i++)
- hash = (hash<<1) ^ *longs++;
+ hash = (hash << 1) ^ *longs++;
return hash;
}
@@ -162,8 +162,8 @@
(void) describe_gc_cache (cache, DGCCFLAG_DISABLE);
#endif
- if ((!!cache->head) != (!!cache->tail)) abort ();
- if (cache->head && (cache->head->prev || cache->tail->next))
abort ();
+ if ((!!cache->head) != (!!cache->tail)) ABORT ();
+ if (cache->head && (cache->head->prev || cache->tail->next))
ABORT ();
gcvm.mask = mask;
gcvm.gcv = *gcv; /* this copies... */
@@ -215,10 +215,10 @@
cell->prev = cache->tail;
cache->tail->next = cell;
cache->tail = cell;
- if (cache->head == cell) abort ();
- if (cell->next) abort ();
- if (cache->head->prev) abort ();
- if (cache->tail->next) abort ();
+ if (cache->head == cell) ABORT ();
+ if (cell->next) ABORT ();
+ if (cache->head->prev) ABORT ();
+ if (cache->tail->next) ABORT ();
return cell->gc;
}
@@ -241,7 +241,7 @@
#endif
}
else if (cache->size > GC_CACHE_SIZE)
- abort ();
+ ABORT ();
else
{
/* Allocate a new cell (don't put it in the list or table yet). */
No revision
No revision
1.1.2.1 +231 -0 XEmacs/xemacs/src/Attic/ChangeLog.Xft
Index: ChangeLog.Xft
===================================================================
RCS file: ChangeLog.Xft
diff -N ChangeLog.Xft
--- /dev/null Tue Mar 15 06:27:29 2005
+++ /tmp/cvsAAAG6aWKY Tue Mar 15 06:27:33 2005
@@ -0,0 +1,231 @@
+2005-03-10 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * objects-x.c (charset_table): Fix ISO 639 code for Greek. Reported
+ by Stefan Holst <holst(a)mathematik.uni-mainz.de>.
+ (charset_table): Add information for Hebrew, whine about ISO prices.
+
+2005-03-09 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ 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 <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * objects-x.c (x_find_charset_font): ConfigSubstitute in the
+ _pattern_ before matching.
+
+2005-02-24 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * faces.c (complex_vars_of_faces): Default to monospace-12 for
+ Xft. (Suggestion by Aidan Kehoe.)
+
+2005-02-24 Hrvoje Niksic <hniksic(a)xemacs.org>
+
+ * xgccache.h (XE_GCONTEXT): Move out of DEBUG_XEMACS block.
+
+2005-02-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * xft-fonts.c (debug_xft): Suppress all debug output for now.
+
+2005-02-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * objects-x.c (x_finalize_font_instance): Improve debug message.
+
+2005-02-20 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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 <eric(a)xemacs.org>
+
+ * xft-fonts.c: throw away old code that was wrapped inside
+ comments
+
+2005-02-11 Eric Knauel <eric(a)xemacs.org>
+
+ * 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 <eric(a)xemacs.org>
+
+ * xft-fonts.c (string_list_to_fcobjectset): Use loop macro instead
+ of for.
+
+2005-02-03 Eric Knauel <eric(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * redisplay-x.c (separate_textual_runs): Check for MULE properly.
+
+2005-01-28 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * redisplay-x.c (x_output_string): Position strikethru by dl
+ geometry. Kludge to fix remnants from antialiased underscores.
+
+2004-12-19 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * compiler.h (UNUSED): Document make-docfile.c hack.
+
+2004-12-19 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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-19 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * keymap.c (Fwhere_is_internal): Rewrite docstring.
+
+2004-12-17 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * regex.c (re_match_2_internal): DEBUG_PRINT "can match null".
+
+2004-12-10 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * redisplay-x.c (x_text_width_single_run): Whitespace improvement.
+
+2004-12-09 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * 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 <stephen(a)xemacs.org>
+
+ * 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.
+
No revision
No revision
1.22.8.1 +1 -1 XEmacs/xemacs/src/s/freebsd.h
Index: freebsd.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/s/freebsd.h,v
retrieving revision 1.22
retrieving revision 1.22.8.1
diff -u -r1.22 -r1.22.8.1
--- freebsd.h 2002/03/13 08:53:22 1.22
+++ freebsd.h 2005/03/15 05:28:14 1.22.8.1
@@ -29,7 +29,7 @@
#ifndef __FreeBSD_version
#include <osreldate.h>
#endif
-#if __FreeBSD_version >= 199701
+#if __FreeBSD_version >= 199701 && __FreeBSD_version < 600006
#define LIBS_SYSTEM "-lutil -lxpg4"
#else
#define LIBS_SYSTEM "-lutil"
1.32.2.1 +7 -11 XEmacs/xemacs/src/s/windowsnt.h
Index: windowsnt.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/s/windowsnt.h,v
retrieving revision 1.32
retrieving revision 1.32.2.1
diff -u -r1.32 -r1.32.2.1
--- windowsnt.h 2004/11/04 23:08:28 1.32
+++ windowsnt.h 2005/03/15 05:28:14 1.32.2.1
@@ -159,13 +159,6 @@
files. */
#define XCDECL __cdecl
-/* MSVC 6.0 has a mechanism to declare functions which never return */
-#if (_MSC_VER >= 1200)
-#define DOESNT_RETURN_TYPE(rettype) __declspec(noreturn) rettype
-#define DECLARE_DOESNT_RETURN_TYPE(rettype,decl) \
- __declspec(noreturn) rettype XCDECL decl
-#endif /* MSVC 6.0 */
-
/* MSVC warnings no-no crap. When adding one to this section,
1. Think twice.
2. Insert textual description of the warning.
@@ -179,13 +172,16 @@
#endif /* compiler understands #pragma warning*/
+#if (_MSC_VER >= 1300)
+/* function declared with __declspec(noreturn) has non-void return type;
+ Lisp primitives have to be declared with Lisp_Object return type or
+ lots of things get very messed up */
+#pragma warning ( disable : 4646 )
+#endif
+
/* MSVC version >= 2.x without /Za supports __inline */
#if (_MSC_VER < 900) || defined (__STDC__)
# define inline
#else
# define inline __inline
#endif
-
-/* lisp.h defines abort() as a macro. therefore, we must include all
- files that contain prototypes for abort() before then. */
-#include <../include/process.h>
No revision
No revision
1.62.2.3 +22 -0 XEmacs/xemacs/tests/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/tests/ChangeLog,v
retrieving revision 1.62.2.2
retrieving revision 1.62.2.3
diff -u -r1.62.2.2 -r1.62.2.3
--- ChangeLog 2005/03/04 13:34:51 1.62.2.2
+++ ChangeLog 2005/03/15 05:28:19 1.62.2.3
@@ -1,3 +1,7 @@
+2005-03-11 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.20 "cilantro" is released.
+
2005-03-05 Malcolm Purvis <malcolmp(a)xemacs.org>
* autoconf/regressiontest.pl: Added explict test for '--with-athena=3d'
@@ -14,6 +18,24 @@
* autoconf: New directory for tests for configure.
* autoconf/regressiontest.pl: New file from Malcolm Purvis.
+
+2005-02-25 Adrian Aichner <adrian(a)xemacs.org>
+
+ * automated/region-tests.el: Test regions and zmacs-regions.
+
+2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.19 "chives" is released.
+
+2005-02-01 Vin Shelton <acs(a)xemacs.org>
+
+ * automated/regexp-tests.el: Added test for stale match data with
+ shy groups authored by Arnaud Giersch <arnaud.giersch(a)free.fr>
+
+2005-01-13 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * automated/regexp-tests.el:
+ Test trivial subpatterns and backreferences with shy groups.
2004-10-28 Stephen J. Turnbull <stephen(a)xemacs.org>
No revision
No revision
1.14.2.1 +37 -1 XEmacs/xemacs/tests/automated/regexp-tests.el
Index: regexp-tests.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/tests/automated/regexp-tests.el,v
retrieving revision 1.14
retrieving revision 1.14.2.1
diff -u -r1.14 -r1.14.2.1
--- regexp-tests.el 2004/10/07 08:01:44 1.14
+++ regexp-tests.el 2005/03/15 05:28:24 1.14.2.1
@@ -393,7 +393,13 @@
(Assert (string= (progn (string-match "\\(a\\)" a)
(string-match "b" a)
(match-string 1 a))
- a)))
+ a))
+ ;; in 21.4.16, registers from num_shy_groups to num_groups were not cleared,
+ ;; resulting in stale match data
+ (Assert (progn (string-match "\\(a\\)" a)
+ (string-match "\\(?:a\\)" a)
+ (not (match-beginning 1))))
+ )
;; bug identified by Katsumi Yamaoka 2004-09-03 <b9ywtzbbpue.fsf_-_(a)jpl.org>
;; fix submitted by sjt 2004-09-08
@@ -421,5 +427,35 @@
(Assert (null (match-string 2 text))) ; ab
(Assert (null (match-string 3 text))) ; c
(Assert (null (match-string 4 text))) ; nil
+)
+
+;; trivial subpatterns and backreferences with shy groups
+(let ((text1 "abb")
+ (text2 "aba")
+ (re0 "\\(a\\)\\(b\\)\\2")
+ (re1 "\\(?:a\\)\\(b\\)\\2")
+ (re2 "\\(?:a\\)\\(b\\)\\1")
+ (re3 "\\(a\\)\\(?:b\\)\\1"))
+
+ (Assert (eq 0 (string-match re0 text1)))
+ (Assert (string= text1 (match-string 0 text1)))
+ (Assert (string= "a" (match-string 1 text1)))
+ (Assert (string= "b" (match-string 2 text1)))
+ (Assert (null (string-match re0 text2)))
+
+ (Check-Error-Message 'invalid-regexp "Invalid back reference"
+ (string-match re1 text1))
+
+ (Assert (eq 0 (string-match re2 text1)))
+ (Assert (string= text1 (match-string 0 text1)))
+ (Assert (string= "b" (match-string 1 text1)))
+ (Assert (null (match-string 2 text1)))
+ (Assert (null (string-match re2 text2)))
+
+ (Assert (null (string-match re3 text1)))
+ (Assert (eq 0 (string-match re3 text2)))
+ (Assert (string= text2 (match-string 0 text2)))
+ (Assert (string= "a" (match-string 1 text2)))
+ (Assert (null (match-string 2 text2)))
)
No revision
No revision
1.1.2.1 +0 -0 XEmacs/xemacs/tests/automated/region-tests.el
Index: region-tests.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/tests/automated/region-tests.el,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1