XEmacs 21.4.17 "Jumbo Shrimp".
authortomo <tomo>
Sat, 9 Jul 2005 18:33:05 +0000 (18:33 +0000)
committertomo <tomo>
Sat, 9 Jul 2005 18:33:05 +0000 (18:33 +0000)
211 files changed:
ChangeLog
INSTALL
Makefile.in.in
README.packages
config.guess
configure
configure.in
configure.usage
etc/NEWS
etc/OXYMORONS
etc/PACKAGES
etc/SERVICE
etc/TUTORIAL
etc/gtkrc [new file with mode: 0644]
etc/sample.init.el
lib-src/ChangeLog
lib-src/etags.c
lib-src/fakemail.c
lib-src/movemail.c
lisp/ChangeLog
lisp/apropos.el
lisp/auto-autoloads.el
lisp/bytecomp-runtime.el
lisp/bytecomp.el
lisp/cl.el
lisp/cmdloop.el
lisp/code-files.el
lisp/cus-edit.el
lisp/custom-load.el
lisp/derived.el
lisp/dialog-gtk.el
lisp/etags.el
lisp/faces.el
lisp/gnuserv.el
lisp/gtk-widgets.el
lisp/help-macro.el
lisp/help.el
lisp/hyper-apropos.el
lisp/isearch-mode.el
lisp/list-mode.el
lisp/menubar-items.el
lisp/mule/japanese.el
lisp/package-admin.el
lisp/package-get.el
lisp/package-ui.el
lisp/packages.el
lisp/process.el
lisp/shadow.el
lisp/simple.el
lisp/subr.el
lisp/widgets-gtk.el
lwlib/ChangeLog
lwlib/xlwradio.c
man/ChangeLog
man/Makefile
man/internals/internals.texi
man/lispref/eval.texi
man/lispref/functions.texi
man/lispref/help.texi
man/lispref/lispref.texi
man/lispref/macros.texi
man/lispref/modes.texi
man/lispref/positions.texi
man/lispref/searching.texi
man/lispref/symbols.texi
man/lispref/text.texi
man/lispref/variables.texi
man/lispref/windows.texi
man/xemacs-faq.texi
man/xemacs/help.texi
man/xemacs/major.texi
man/xemacs/programs.texi
man/xemacs/xemacs.texi
netinstall/ChangeLog
netinstall/res.rc
netinstall/resource.h
nt/ChangeLog
nt/Emacs.ad.h
nt/config.inc.samp
nt/installer/Wise/dirs.py
nt/installer/Wise/display readme.dlg
nt/installer/Wise/libs.dlg
nt/installer/Wise/pre_wise.py
nt/installer/Wise/type.dlg
nt/installer/Wise/version.py
nt/installer/Wise/welcome.dlg
nt/installer/Wise/xemacs.tmpl
nt/xemacs.mak
src/ChangeLog
src/EmacsFrame.c
src/EmacsManager.c
src/EmacsShell-sub.c
src/EmacsShell.c
src/Makefile.in.in
src/alloc.c
src/alloca.c
src/buffer.c
src/bytecode.c
src/chartab.c
src/cm.c
src/console-gtk.h
src/console-msw.c
src/console-x.h
src/console.c
src/data.c
src/debug.h
src/depend
src/device-gtk.c
src/device-msw.c
src/device-tty.c
src/device-x.c
src/dgif_lib.c
src/doprnt.c
src/dumper.c
src/elhash.c
src/emacs.c
src/eval.c
src/event-Xt.c
src/event-gtk.c
src/event-msw.c
src/event-stream.c
src/event-unixoid.c
src/events.c
src/extents.c
src/faces.c
src/file-coding.c
src/fileio.c
src/floatfns.c
src/fns.c
src/font-lock.c
src/frame-gtk.c
src/frame-x.c
src/frame.c
src/free-hook.c
src/gccache-gtk.c
src/glyphs-eimage.c
src/glyphs-gtk.c
src/glyphs-gtk.h
src/glyphs-msw.c
src/glyphs-x.c
src/glyphs.c
src/gtk-glue.c
src/gtk-xemacs.c
src/gui-x.c
src/gutter.c
src/input-method-xlib.c
src/insdel.c
src/intl.c
src/keymap.c
src/lisp.h
src/lread.c
src/lstream.c
src/macros.c
src/malloc.c
src/marker.c
src/mem-limits.h
src/menubar-gtk.c
src/menubar-msw.c
src/menubar-x.c
src/mule-charset.c
src/mule-charset.h
src/native-gtk-toolbar.c
src/nt.c
src/ntproc.c
src/objects.c
src/print.c
src/process-nt.c
src/process-unix.c
src/process.c
src/ralloc.c
src/redisplay-gtk.c
src/redisplay-msw.c
src/redisplay-output.c
src/redisplay-tty.c
src/redisplay-x.c
src/redisplay.c
src/regex.c
src/regex.h
src/s/freebsd.h
src/s/usg5-4.h
src/scrollbar-gtk.c
src/scrollbar-msw.c
src/scrollbar-x.c
src/scrollbar.c
src/search.c
src/select-x.c
src/sheap.c
src/signal.c
src/specifier.c
src/specifier.h
src/strftime.c
src/sunplay.c
src/symbols.c
src/syntax.c
src/sysdep.c
src/sysdll.c
src/toolbar-gtk.c
src/toolbar-msw.c
src/toolbar-x.c
src/toolbar.c
src/ui-gtk.c
src/unexelf.c
src/unexnt.c
src/window.c
src/xgccache.c
tests/ChangeLog
tests/automated/mule-tests.el
tests/automated/os-tests.el [new file with mode: 0644]
tests/automated/regexp-tests.el
tests/automated/tag-tests.el [new file with mode: 0644]
version.sh

index 807f735..36309bb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,113 @@
+2005-02-06  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.17 is released
+
+2005-01-29  Ben Wing  <ben@xemacs.org>
+
+       * configure.in (AC_INIT_NOTICE):
+       * configure.in (XE_COMPUTE_RUNPATH):
+       Copy LDAP fixes from 21.5.
+
+       Port Marcus Crestani's patches of 2004-11-12:
+
+       * Makefile.in.in (install-arch-dep): Fix installation for Cygwin.
+       * configure:
+       * configure.in: Make pdump default for Cygwin.
+
+2005-01-30  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * Makefile.in.in (dump-elc): Depend on ${PROGNAME} to fix parallel
+       builds.
+
+2004-11-22  Adrian Aichner  <adrian@xemacs.org>
+
+       * etc/TUTORIAL: Typo fixes, courtesy of Andreas Eder
+       <Andreas.Eder@gmx.net>.
+
+2004-05-20  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * configure.in (HAVE_GPM): Die if GPM requested but not found.
+
+2005-01-23  Vin Shelton  <acs@xemacs.org>
+
+       * Makefile.in.in (finder): Force removal of lisp/finder-inf.el.
+
+2005-01-10  Vin Shelton  <acs@xemacs.org>
+
+       * Makefile.in.in (RECURSIVE_MAKE_ARGS): Remove last few.
+
+2004-11-21  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * INSTALL: A POSIX compatible Make is no longer required for builds.
+       * Makefile.in.in (RECURSIVE_MAKE): Removed.
+       * Makefile.in.in (RECURSIVE_MAKE_ARGS): New.
+       * configure.in (RECURSIVE_MAKE): Removed.
+       * configure.in (RECURSIVE_MAKE_ARGS): New.
+       Always refer to make as $(MAKE) and use $(RECURSIVE_MAKE_ARGS) for
+       other parameters.  This allows -j to work in GNU Make while
+       removing need for POSIX compatible make on all systems.
+
+2004-09-08  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * INSTALL: A POSIX compatible Make is required for builds.
+       * Makefile.in.in: Enable support for parallel builds.
+
+2004-12-05  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.16 is released
+
+2004-08-12  "Johann 'Myrkraverk' Oskarsson" <myrkraverk@users.sourceforge.net>
+
+       * config.guess: Detect PlayStation 2.
+
+2004-08-10  Jerry James  <james@xemacs.org>
+
+       * etc/SERVICE: Update to latest version from www.gnu.org.
+
+2004-07-06  Steve Youngs  <steve@youngs.au.com>
+
+       * etc/NEWS: Document the major user visible changes to PUI.
+
+2003-07-21  Malcolm Purvis  <malcolmpurvis@optushome.com.au>
+
+       * etc/gtkrc: New file.  This is the GTK equivalent of the
+       app-default file.
+
+2004-03-30  Norbert Koch  <viteno@xemacs.org>
+
+       * PACKAGES: Introduce new packages escreen, xlib, and xwem.
+
+2004-03-23  Malcolm Purvis  <malcolmpurvis@optushome.com.au>
+
+       * configure (GTK_CONFIG): Check GTK version validity only when the
+       right instance of gtk-config is found.
+
+2004-03-20  Adrian Aichner  <adrian@xemacs.org>
+
+       * etc/sample.init.el: Sync typo and copycat fix from 21.5.
+       * etc/sample.init.el ((console-on-window-system-p)): Sync
+       "\C-x\C-c" definition from 21.5.
+
+2004-03-20  Vin Shelton  <acs@xemacs.org>
+
+       * configure.usage (--use-regex-malloc): Correct warning about
+       disabling regex-malloc.
+
+2004-03-04  Malcolm Purvis  <malcolmpurvis@optushome.com.au>
+
+       * configure.in (src/Makefile): No longer include a special linker
+       script for PowerPC Linux.  Thanks to Stefan Bruda for reporting
+       this bug.
+
+2004-02-10  Vin Shelton  <acs@xemacs.org>
+
+       * etc/OXYMORONS: Added Jumbo Shrimp for 21.4.17.
+
+2004-02-03  Vin Shelton  <acs@xemacs.org>
+
+       * configure.in (XE_COMPUTE_RUNPATH): lucid_prefers_motif is a
+       variable, not a command.
+
 2004-02-02  Vin Shelton <acs@xemacs.org>
 
        * XEmacs 21.4.15 is released
diff --git a/INSTALL b/INSTALL
index 9a3581d..9314b06 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -42,10 +42,10 @@ Lisp libraries, miscellaneous data files, and on-line documentation. The
 exact amount depends greatly on the number of extra lisp packages that are
 installed 
 
-XEmacs requires an ANSI C compiler, such as GCC.  If you wish to build
-the documentation yourself, you will need at least version 1.68 of
-makeinfo (GNU texinfo-3.11).  GNU Texinfo 4.2 is recommended; it is
-necessary for building packages, and we may move to it for the core.
+XEmacs requires an ANSI C compiler, such as GCC.  If you wish to build the
+documentation yourself, you will need at least version 1.68 of makeinfo (GNU
+texinfo-3.11).  GNU Texinfo 4.2 is recommended; it is necessary for building
+Lisp packages, and we may move to it for the core.
 
 ADD-ON LIBRARIES
 ================
index bf5656f..493fc57 100644 (file)
 #include "src/config.h"
 
 #ifdef USE_GNU_MAKE
-RECURSIVE_MAKE=$(MAKE)
+RECURSIVE_MAKE_ARGS=
 #else
 @SET_MAKE@
-RECURSIVE_MAKE=@RECURSIVE_MAKE@
+RECURSIVE_MAKE_ARGS=@RECURSIVE_MAKE_ARGS@
 #endif
 
 SHELL = /bin/sh
@@ -279,22 +279,22 @@ ${srcdir}/lib-src/config.values.in : ${srcdir}/configure
        cd ${srcdir} && $(SHELL) lib-src/config.values.sh
 
 depend ${srcdir}/src/depend:
-       cd ./src && $(RECURSIVE_MAKE) depend
+       cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) depend
 
 ## Build XEmacs and recompile out-of-date and missing .elc files along
 ## the way.
-all-elc all-elcs: autoloads dump-elcs
+all-elc all-elcs: ${PROGNAME} autoloads dump-elcs
        ${blddir}/src/${PROGNAME} -batch -vanilla \
                -l update-elc-2.el -f batch-update-elc-2 lisp
 
 ## Sub-target for all-elc.
-dump-elc dump-elcs: ${GENERATED_HEADERS} FRC.dump-elcs
-       cd ./src && $(RECURSIVE_MAKE) dump-elcs
+dump-elc dump-elcs: ${PROGNAME} ${GENERATED_HEADERS} FRC.dump-elcs
+       cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) dump-elcs
 
 autoloads: lib-src lwlib src lisp/auto-autoloads.el lisp/custom-load.el
 
 FRC.lisp.auto.autoloads.el:
-lisp/auto-autoloads.el:        FRC.lisp.auto.autoloads.el
+lisp/auto-autoloads.el:        ${PROGNAME} FRC.lisp.auto.autoloads.el
        $(RM) lisp/auto-autoloads.el
        ${blddir}/src/${PROGNAME} -batch -no-autoloads \
                -l autoload -f batch-update-directory lisp
@@ -303,19 +303,20 @@ lisp/auto-autoloads.el:   FRC.lisp.auto.autoloads.el
        @$(RM) lisp/auto-autoloads.el~
 
 FRC.lisp.custom.load.el:
-lisp/custom-load.el: FRC.lisp.custom.load.el lisp/auto-autoloads.el
+lisp/custom-load.el: ${PROGNAME} FRC.lisp.custom.load.el lisp/auto-autoloads.el
        ${blddir}/src/${PROGNAME} -batch -vanilla -l cus-dep \
                -f Custom-make-dependencies lisp
 
 finder: src
        @echo "Building finder database ..."
+       $(RM) lisp/finder-inf.el
        @(cd ./lisp; \
                ${blddir}/src/${PROGNAME} -batch -vanilla \
                -eval '(setq finder-compile-keywords-quiet t)' \
                -l finder -f finder-compile-keywords )
        @echo "Building finder database ...(done)"
 
-lisp/finder-inf.el:
+lisp/finder-inf.el: src
        @echo "Building finder database ..."
        @(cd ./lisp; \
                ${blddir}/src/${PROGNAME} -batch -vanilla \
@@ -350,9 +351,12 @@ FRC.src FRC.lib-src FRC.lwlib FRC.dynodump pkg-src/FRC.tree-x:
 FRC.lisp.finder-inf.el:
 
 ${SUBDIR}: ${SUBDIR_MAKEFILES} ${GENERATED_HEADERS} FRC
-       cd ./$@ && $(RECURSIVE_MAKE) all
+       cd ./$@ && $(MAKE) $(RECURSIVE_MAKE_ARGS) all
 
-Makefile: ${srcdir}/Makefile.in config.status
+## Building modules depends on ellcc, found in lib-src.
+modules/sample modules/ldap modules/zlib modules/base64: lib-src
+
+Makefile: ${srcdir}/Makefile.in.in config.status
        ./config.status
 
 src/Makefile: ${srcdir}/src/Makefile.in.in ${srcdir}/src/depend config.status
@@ -411,7 +415,7 @@ install: all check-features install-arch-dep install-arch-indep
 
 install-arch-dep: mkdir
        for subdir in ${INSTALL_ARCH_DEP_SUBDIR}; do \
-       (cd ./$${subdir} && $(RECURSIVE_MAKE) install prefix=${prefix} \
+       (cd ./$${subdir} && $(MAKE) $(RECURSIVE_MAKE_ARGS) install prefix=${prefix} \
            exec_prefix=${exec_prefix} bindir=${bindir} libdir=${libdir} \
            archlibdir=${archlibdir}) ; done
        if test "`(cd ${archlibdir} && $(pwd))`" != \
@@ -431,11 +435,13 @@ install-arch-dep: mkdir
        ${INSTALL_PROGRAM} src/${PROGNAME} ${bindir}/${PROGNAME}
        -chmod 0755 ${bindir}/${PROGNAME}
 #else
-       ${INSTALL_PROGRAM} src/${PROGNAME} ${bindir}/${PROGNAME}-${version}
-       -chmod 0755 ${bindir}/${PROGNAME}-${version}
 # ifdef CYGWIN
+       ${INSTALL_PROGRAM} src/${PROGNAME} ${bindir}/${PROGNAME}-${version}.exe
+       -chmod 0755 ${bindir}/${PROGNAME}-${version}.exe
        cd ${bindir} && $(RM) ./${PROGNAME} && ${LN_S} ${PROGNAME}-${version}.exe ./${PROGNAME}
 # else
+       ${INSTALL_PROGRAM} src/${PROGNAME} ${bindir}/${PROGNAME}-${version}
+       -chmod 0755 ${bindir}/${PROGNAME}-${version}
        cd ${bindir} && $(RM) ./${PROGNAME} && ${LN_S} ${PROGNAME}-${version} ./${PROGNAME}
 # endif /* CYGWIN */
 #endif /* WIN32_NATIVE */
@@ -520,7 +526,7 @@ mkdir: FRC.mkdir
 #### would be extremely dangerous for anyone to use it.
 ##uninstall:
 ##     (cd ./lib-src;                                  \
-##      $(RECURSIVE_MAKE) uninstall                    \
+##      $(MAKE) $(RECURSIVE_MAKE_ARGS) uninstall                       \
 ##         prefix=${prefix} exec_prefix=${exec_prefix} \
 ##         bindir=${bindir} libdir=${libdir} archlibdir=${archlibdir})
 ##     for dir in ${lispdir} ${etcdir} ; do            \
@@ -554,7 +560,7 @@ FRC.mostlyclean FRC.clean FRC.distclean FRC.realclean FRC.tags:
 ##      target for GCC does not delete `libgcc.a', because recompiling it
 ##      is rarely necessary and takes a lot of time.
 mostlyclean: FRC.mostlyclean
-       for d in $(SUBDIR); do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
+       for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done
 
 ## `clean'
 ##      Delete all files from the current directory that are normally
@@ -565,7 +571,7 @@ mostlyclean: FRC.mostlyclean
 
 ##      Delete `.dvi' files here if they are not part of the distribution.
 clean: FRC.clean
-       for d in $(SUBDIR); do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
+       for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done
        $(RM) core
 
 ## `distclean'
@@ -581,7 +587,7 @@ top_distclean=\
        $(RM) -r site-packages xemacs-packages mule-packages site-lisp
 
 distclean: FRC.distclean
-       for d in $(SUBDIR_DISTCLEAN); do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
+       for d in $(SUBDIR_DISTCLEAN); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done
        -${top_distclean}
 
 ## `realclean'
@@ -596,7 +602,7 @@ distclean: FRC.distclean
 ##      anything that needs to exist in order to run `configure' and then
 ##      begin to build the program.
 realclean: FRC.realclean
-       for d in $(SUBDIR); do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
+       for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done
        -${top_distclean}
        $(RM) TAGS
 
@@ -605,7 +611,7 @@ realclean: FRC.realclean
 ## the coding standards seem to come from.  It's like distclean, but
 ## it deletes backup and autosave files too.
 extraclean:
-       for d in $(SUBDIR); do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
+       for d in $(SUBDIR); do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done
        $(RM) *~ \#*
        -${top_distclean}
 
@@ -627,7 +633,7 @@ SOURCES = ChangeLog GETTING.GNU.SOFTWARE INSTALL Makefile.in PROBLEMS \
 unlock:
        chmod u+w $(SOURCES) cpp/*
        -cd ./elisp && chmod u+w Makefile README *.texi
-       for d in src etc lib-src lisp; do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
+       for d in src etc lib-src lisp; do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done
        cd ./lisp/term && chmod u+w README *.el
        cd ./man && chmod u+w *texi* ChangeLog split-man
        cd ./lwlib && chmod u+w *.[ch] Makefile.in.in
@@ -635,7 +641,7 @@ unlock:
 relock:
        chmod u-w $(SOURCES) cpp/*
        -cd ./elisp && chmod u-w Makefile README *.texi
-       for d in src etc lib-src lisp; do (cd ./$$d && $(RECURSIVE_MAKE) $@); done
+       for d in src etc lib-src lisp; do (cd ./$$d && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@); done
        cd ./lisp/term && chmod u+w README *.el
        cd ./man && chmod u+w *texi* ChangeLog split-man
        cd ./lwlib && chmod u+w *.[ch] Makefile.in.in
@@ -654,13 +660,13 @@ TAGS tags: FRC.tags
          xargs etags -a -l none -r "/^(def\\(var\\|un\\|alias\\|const\\|macro\\|subst\\|struct\\|face\\|group\\|custom\\|ine-\\(function\\|compiler-macro\\|[a-z-]+alias\\)\\)[        ]+'?\\([^       ]+\\)/\\3/"
 
 check:
-       cd ./src && $(RECURSIVE_MAKE) $@
+       cd ./src && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@
 
 info: FRC.info
-       cd ${srcdir}/man && $(RECURSIVE_MAKE) $@
+       cd ${srcdir}/man && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@
 
 dvi:
-       cd ${srcdir}/man && $(RECURSIVE_MAKE) $@
+       cd ${srcdir}/man && $(MAKE) $(RECURSIVE_MAKE_ARGS) $@
 
 ## Fix up version information in executables (Solaris-only)
 mcs:
index 9c214b1..be04f35 100644 (file)
@@ -10,27 +10,41 @@ For general XEmacs navigation tips: Press C-h t
 The XEmacs Packages Quick Start Guide
 -------------------------------------
 
-This text is intended to help you get started installing a new XEmacs
-and its packages from start.  For details see the 'Startup Paths' and
-'Packages' sections of the XEmacs info manual.
+This text is intended to help you get started installing a new XEmacs and
+its packages.  For more details see the 'Startup Paths' and 'Packages'
+sections of the XEmacs info manual.
 
 * Real Real Quickstart FAQ
 --------------------------
 
 Q. Do I need to have the packages to compile XEmacs?
-A. No, XEmacs will build and install just fine without any packages
-   installed.  However, only the most basic editing functions will be
-   available with no packages installed, so installing packages is an
+
+A. Theoretically, no -- XEmacs will build and install just fine without any
+   packages installed.  However, only the most basic editing functions will
+   be available with no packages installed, so installing packages is an
    essential part of making your installed XEmacs _useful_.
 
 Q. I really liked the old way that packages were bundled and do not
    want to mess with packages at all.
+
 A. You can grab all the packages at once like you used to with old
    XEmacs versions, skip to the 'Sumo Tarball' section below.
 
+Q. How do I tell XEmacs where to find the packages?
+
+A. Normally, you put the packages under $prefix/lib/packages, where
+   $prefix is specified using the `--prefix' parameter to `configure'.
+   (See `Package hierarchies' below).  However, if you have the packages
+   somewhere else (e.g. you're a developer and are compiling the packages
+   yourself, and want your own private copy of everything), use the
+   `--package-path' parameter, something like this:
+
+   configure --package-path="~/.xemacs::/src/xemacs/site-packages:/src/xemacs/xemacs-packages:/src/xemacs/mule-packages" ...
+
 Q. After installing, I want XEmacs to do `foo', but when I invoke it
    (or click the toolbar button or select the menu item), nothing (or
    an error) happens, and it used to work.
+
 A. See the first FAQ; you may be missing a package that is essential to
    you.  You can either track it down and install it, or install the
    `Sumo Tarball' (see the second FAQ).
@@ -44,7 +58,7 @@ set in stone. The XEmacs maintainers reserve the right to sacrifice
 backwards compatibility as quirks are worked out over the coming
 releases.
 
-* Some Package Theory
+* Some package theory
 ---------------------
 
 In order to reduce the size and increase the maintainability of XEmacs,
@@ -60,20 +74,35 @@ path correctly, install autoloads, etc, etc.
 * Package hierarchies
 ---------------------
 
-On Startup XEmacs looks for packages in so called package hierarchies.
-These can be specified by the 'package-path' parameter to the
-'configure' script. However by default there are three system wide
-hierarchies. ("$prefix" defaults to "/usr/local")
+On Startup XEmacs looks for packages in so-called package hierarchies.
+Normally, there are three system wide hierarchies, like this:
 
-$prefix/lib/xemacs/xemacs-packages
+$prefix/lib/xemacs/xemacs-packages/
      Normal packages go here.
 
-$prefix/lib/xemacs/mule-packages
+$prefix/lib/xemacs/mule-packages/
      Mule packages go here and are only searched by MULE-enabled XEmacsen.
 
 $prefix/lib/xemacs/site-packages/
      Local and 3rd party packages go here.
 
+This is what you get when you untar the SUMO tarballs under
+$prefix/lib/xemacs.
+
+$prefix is specified using the `--prefix' parameter to `configure', and
+defaults to `usr/local'.
+
+If your packages are located in the above directories, XEmacs will
+automatically find them at startup; however, if you have your packages
+somewhere else (e.g. you're a developer and are compiling the packages
+yourself, and want your own private copy of everything), you can tell
+XEmacs specifically where to look for the packages by using the
+`--package-path' parameter to the 'configure' script.  Normally, it looks
+like this:
+
+configure --package-path="~/.xemacs::/src/xemacs/site-packages:/src/xemacs/xemacs-packages:/src/xemacs/mule-packages" ...
+
+See `configure.usage' for more info about the format of this parameter.
 
 * Where to get the packages
 ---------------------------
@@ -85,37 +114,69 @@ and its mirrors.
 -----------------------------
 There are a few different ways to install packages:
 
-       1. Manually, all at once, using the 'Sumo Tarball'.
+       1. Automatically, using the package tools from XEmacs.
        2. Manually, using individual package tarballs.
-       3. Automatically, using the package tools from XEmacs.
+       3. Manually, all at once, using the 'Sumo Tarball'.
 
-** Manually, all at once, using the 'Sumo Tarball'
---------------------------------------------------
+** Automatically, using the package tools from XEmacs
+-----------------------------------------------------
 
-Those with little time, cheap connections and plenty of disk space can
-install all the packages at once using the sumo tarballs.
-Download the file:
+XEmacs comes with some tools to make the periodic updating and
+installing easier. It will notice if new packages or versions are
+available and will fetch them from the FTP site.
 
-   xemacs-sumo.tar.gz
+Unfortunately this requires that a few packages are already in place.
+You will have to install them by hand as above or use a SUMO tarball.
+This requirement will hopefully go away in the future. The packages
+you need are:
 
-For an XEmacs compiled with Mule you also need:
+   efs          - To fetch the files from the FTP site or mirrors.
+   xemacs-base  - Needed by efs.
 
-   xemacs-mule-sumo.tar.gz
+and optionally:
 
-N.B. They are called 'Sumo Tarballs' for good reason. They are
-currently about 19MB and 4.5MB (gzipped) respectively.
+   mailcrypt    - For PGP verification of the package-index file.
 
-Install them by:
+After installing these by hand, fire up XEmacs and follow these
+steps.
 
-   cd $prefix/lib/xemacs ; gunzip -c <tarballname> | tar xvf - RET
+  (1) Choose a download site.
+      - via menu: Tools -> Packages -> Set Download Site 
+      - via keyb: M-x customize-variable RET package-get-remote RET
+        (put in the details of remote host and directory)
 
-Or, if you have GNU tar:
+      If the package tarballs _AND_ the package-index file are in a
+      local directory, you can: M-x pui-set-local-package-get-directory RET
 
-   cd $prefix/lib/xemacs ; tar zxvf /path/to/<tarballname> RET
+  (2) Obtain a list of packages and display the list in a buffer named
+      "*Packages*".
+      - menu: Tools -> Packages -> List & Install
+      - keyb: M-x pui-list-packages RET
 
-As the Sumo tarballs are not regenerated as often as the individual
-packages, it is recommended that you use the automatic package tools
-afterwards to pick up any recent updates.
+      XEmacs will now connect to the remote site and download the
+      latest package-index file.
+
+      The resulting buffer, "*Packages*" has brief instructions at the
+      end of the buffer.
+
+  (3) Choose the packages you wish to install.
+      - mouse: Click button 2 on the package name.
+      -  keyb: RET on the package name
+
+  (4) Make sure you have everything you need.
+      - menu: Packages -> Add Required
+      - keyb: r
+
+      XEmacs will now search for packages that are required by the
+      ones that you have chosen to install and offer to select
+      those packages also.
+
+      For novices and gurus alike, this step can save your bacon.
+      It's easy to forget to install a critical package.
+
+  (5) Download and install the packages.
+      - menu: Packages -> Install/Remove Selected
+      - keyb: x
 
 ** Manually, using individual package tarballs
 ----------------------------------------------
@@ -151,77 +212,38 @@ Or if you have GNU tar, the last step can be:
    tar zxvf /path/to/mule-base-1.37-pkg.tar.gz RET
 
 
-** Automatically, using the package tools from XEmacs
------------------------------------------------------
-
-XEmacs comes with some tools to make the periodic updating and
-installing easier. It will notice if new packages or versions are
-available and will fetch them from the FTP site.
-
-Unfortunately this requires that a few packages are already in place.
-You will have to install them by hand as above or use a SUMO tarball.
-This requirement will hopefully go away in the future. The packages
-you need are:
-
-   efs          - To fetch the files from the FTP site or mirrors.
-   xemacs-base  - Needed by efs.
-
-and optionally:
-
-   mule-base    - Needed if you want to use XEmacs with MULE.
-
-After installing these by hand, fire up XEmacs and follow these
-steps.
-
-Note: The menus in XEmacs 21.2.x and up have changed slightly, so
-where I mention "Options -> Manage Packages", substitute "Tools ->
-Packages".
+** Manually, all at once, using the 'Sumo Tarball'
+--------------------------------------------------
 
-  (1) Choose a download site.
-      - via menu: Options -> Manages Packages -> Add Download Site 
-      - via keyb: M-x customize-variable RET package-get-remote RET
-        (put in the details of remote host and directory)
+Those with little time, cheap connections and plenty of disk space can
+install all the packages at once using the sumo tarballs.
+Download the file:
 
-      If the package tarballs _AND_ the package-index file are in a
-      local directory, you can: M-x pui-add-install-directory RET
+   xemacs-sumo.tar.gz
 
-  (2) Obtain a list of packages and display the list in a buffer named
-      "*Packages*".
-      - menu: Options -> Manage Packages -> List & Install
-      - keyb: M-x pui-list-packages RET
+For an XEmacs compiled with Mule you also need:
 
-      XEmacs will now connect to the remote site and download the
-      latest package-index file.  If you see an error about the
-      package-index entries not being PGP signed, you can safely
-      ignore this because PGP has not been integrated into the XEmacs
-      package tools yet.
+   xemacs-mule-sumo.tar.gz
 
-      The resulting buffer, "*Packages*" has brief instructions at the
-      end of the buffer.
+N.B. They are called 'Sumo Tarballs' for good reason. They are
+currently about 19MB and 4.5MB (gzipped) respectively.
 
-  (3) Choose the packages you wish to install.
-      - mouse: Click button 2 on the package name.
-      -  keyb: RET on the package name
+Install them by:
 
-  (4) Make sure you have everything you need.
-      - menu: Packages -> Add Required
-      - keyb: r
+   cd $prefix/lib/xemacs ; gunzip -c <tarballname> | tar xvf - RET
 
-      XEmacs will now search for packages that are required by the
-      ones that you have chosen to install and offer to select
-      those packages also.
+Or, if you have GNU tar:
 
-      For novices and gurus alike, this step can save your bacon.
-      It's easy to forget to install a critical package.
+   cd $prefix/lib/xemacs ; tar zxvf /path/to/<tarballname> RET
 
-  (5) Download and install the packages.
-      - menu: Packages -> Install/Remove Selected
-      - keyb: x
+As the Sumo tarballs are not regenerated as often as the individual
+packages, it is recommended that you use the automatic package tools
+afterwards to pick up any recent updates.
 
 * After Installation
 --------------------
 
-New packages can only be used by XEmacs after a restart.
+Updated packages can only be used by XEmacs after a restart.
 
 * Which Packages to install?
 ----------------------------
@@ -232,7 +254,7 @@ everything. A good minimal set of packages for XEmacs-latin1 would be
 
 xemacs-base, xemacs-devel, c-support, cc-mode, debug, dired, efs,
 edit-utils, fsf-compat, mail-lib, net-utils, os-utils, prog-modes,
-text-modes, time
+text-modes, time, mailcrypt
 
 If you are using the XEmacs package tools, don't forget to do:
 
@@ -261,9 +283,9 @@ this for you.
 --------------------------
 
 In addition to the system wide packages, each user can have his own
-packages installed in "~/.xemacs/xemacs-packages". If you want to
-install packages there using the interactive tools, you need to set
-'pui-package-install-dest-dir' to "~/.xemacs/xemacs-packages"
+packages installed under "~/.xemacs/". If you want to install packages
+there using the interactive tools, you need to set
+'package-get-install-to-user-init-directory' to 't'
 
 * Site lisp/Site start
 ----------------------
index 32a779b..ef70d34 100755 (executable)
@@ -3,7 +3,7 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
 #   Free Software Foundation, Inc.
 
-timestamp='2001-01-17'
+timestamp='2004-08-12'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -918,8 +918,14 @@ EOF
   printf ("%s-unknown-linux-gnu\n", argv[1]);
 #endif
 #ifdef __MIPSEL__
+#ifdef __R5900
+/* Little Endian R5900 running Linux,
+   this *must* be Sony PlayStation 2 */
+  printf ("%sel-PlayStation2-linux-gnu\n", argv[1]);
+#else
   printf ("%sel-unknown-linux-gnu\n", argv[1]);
 #endif
+#endif
   return 0;
 }
 EOF
index 3e6058c..e5e0e03 100755 (executable)
--- a/configure
+++ b/configure
@@ -6,7 +6,7 @@
 #### Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 #### Copyright (C) 1993-1995 Board of Trustees, University of Illinois.
 #### Copyright (C) 1996, 1997 Sun Microsystems, Inc.
-#### Copyright (C) 1995, 1996 Ben Wing.
+#### Copyright (C) 1995, 1996, 2005 Ben Wing.
 #### Copyright (C) 2000, 2001 Martin Buchholz.
 #### Copyright (C) 1998, 1999 J. Kean Johnston.
 
@@ -1556,7 +1556,7 @@ fi
 
 if test -z "$pdump"; then
   case "$opsys" in
-    linux* )  pdump=yes ;;        darwin )  pdump=yes ;;        *)        pdump=no ;;
+    linux* )  pdump=yes ;;        darwin )  pdump=yes ;;        cygwin* ) pdump=yes ;;        *)        pdump=no ;;
   esac
 fi
 
@@ -2990,7 +2990,6 @@ EOF
 fi
 
 
-test "$machine$opsys" = "powerpclinux" && start_flags="-T $srcdir/src/ppc.ldscript"
 
 if test "$unexec" = "unexaix.o"; then
   if   test "$dynamic" = "no"; then
@@ -3004,12 +3003,12 @@ if test "$unexec" = "unexaix.o"; then
   done
   
 echo $ac_n "checking for terminateAndUnload in -lC""... $ac_c" 1>&6
-echo "configure:3008: checking for terminateAndUnload in -lC" >&5
+echo "configure:3007: checking for terminateAndUnload in -lC" >&5
 ac_lib_var=`echo C'_'terminateAndUnload | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lC "
 cat > conftest.$ac_ext <<EOF
-#line 3013 "configure"
+#line 3012 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3020,7 +3019,7 @@ int main() {
 terminateAndUnload()
 ; return 0; }
 EOF
-if { (eval echo configure:3024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3128,7 +3127,7 @@ fi
 
 if test "$add_runtime_path" = "yes"; then
       echo $ac_n "checking "for runtime libraries flag"""... $ac_c" 1>&6
-echo "configure:3132: checking "for runtime libraries flag"" >&5
+echo "configure:3131: checking "for runtime libraries flag"" >&5
   case "$opsys" in
     sol2 ) dash_r="-R" ;;
     decosf* | linux* | irix*) dash_r="-rpath " ;;
@@ -3150,14 +3149,14 @@ if test "$GCC" = "yes"; then
   done
 fi
         cat > conftest.$ac_ext <<EOF
-#line 3154 "configure"
+#line 3153 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   dash_r="$try_dash_r"
 else
@@ -3258,10 +3257,10 @@ else
 fi
 after_morecore_hook_exists=yes
 echo $ac_n "checking for malloc_set_state""... $ac_c" 1>&6
-echo "configure:3262: checking for malloc_set_state" >&5
+echo "configure:3261: checking for malloc_set_state" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3265 "configure"
+#line 3264 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char malloc_set_state(); below.  */
@@ -3284,7 +3283,7 @@ malloc_set_state();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_malloc_set_state=yes"
 else
@@ -3304,16 +3303,16 @@ doug_lea_malloc=no
 fi
 
 echo $ac_n "checking whether __after_morecore_hook exists""... $ac_c" 1>&6
-echo "configure:3308: checking whether __after_morecore_hook exists" >&5
+echo "configure:3307: checking whether __after_morecore_hook exists" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3310 "configure"
+#line 3309 "configure"
 #include "confdefs.h"
 extern void (* __after_morecore_hook)();
 int main() {
 __after_morecore_hook = 0
 ; return 0; }
 EOF
-if { (eval echo configure:3317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3316: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 else
@@ -3369,7 +3368,7 @@ fi
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3373: checking for $ac_word" >&5
+echo "configure:3372: checking for $ac_word" >&5
 
 if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -3424,7 +3423,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:3428: checking for a BSD compatible install" >&5
+echo "configure:3427: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 
   IFS="${IFS=  }"; ac_save_IFS="$IFS"; IFS=":"
@@ -3478,7 +3477,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3482: checking for $ac_word" >&5
+echo "configure:3481: checking for $ac_word" >&5
 
 if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
@@ -3510,15 +3509,15 @@ for ac_hdr in   a.out.h   elf.h   cygwin/version.h   fcntl.h   inttypes.h   libg
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3514: checking for $ac_hdr" >&5
+echo "configure:3513: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3517 "configure"
+#line 3516 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3521: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3548,10 +3547,10 @@ fi
 done
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:3552: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:3551: checking for sys/wait.h that is POSIX.1 compatible" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3555 "configure"
+#line 3554 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -3567,7 +3566,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:3571: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3570: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -3591,10 +3590,10 @@ EOF
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3595: checking for ANSI C header files" >&5
+echo "configure:3594: checking for ANSI C header files" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3598 "configure"
+#line 3597 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -3602,7 +3601,7 @@ cat > conftest.$ac_ext <<EOF
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3606: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3605: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3619,7 +3618,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3623 "configure"
+#line 3622 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -3637,7 +3636,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 3641 "configure"
+#line 3640 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -3655,7 +3654,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
 cat > conftest.$ac_ext <<EOF
-#line 3659 "configure"
+#line 3658 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -3666,7 +3665,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:3670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:3669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -3692,10 +3691,10 @@ EOF
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:3696: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:3695: checking whether time.h and sys/time.h may both be included" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3699 "configure"
+#line 3698 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -3704,7 +3703,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:3708: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3707: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -3728,10 +3727,10 @@ EOF
 fi
 
 echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6
-echo "configure:3732: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "configure:3731: checking for sys_siglist declaration in signal.h or unistd.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3735 "configure"
+#line 3734 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3743,7 +3742,7 @@ int main() {
 char *msg = *(sys_siglist + 1);
 ; return 0; }
 EOF
-if { (eval echo configure:3747: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3746: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_decl_sys_siglist=yes
 else
@@ -3769,9 +3768,9 @@ fi
 
 
 echo $ac_n "checking for utime""... $ac_c" 1>&6
-echo "configure:3773: checking for utime" >&5
+echo "configure:3772: checking for utime" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3775 "configure"
+#line 3774 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <utime.h>
@@ -3779,7 +3778,7 @@ int main() {
 struct utimbuf x; x.actime = x.modtime = 0; utime ("/", &x);
 ; return 0; }
 EOF
-if { (eval echo configure:3783: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
    { test "$extra_verbose" = "yes" && cat << \EOF
@@ -3798,10 +3797,10 @@ else
       for ac_func in utimes
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3802: checking for $ac_func" >&5
+echo "configure:3801: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3805 "configure"
+#line 3804 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3824,7 +3823,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3827: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3856,10 +3855,10 @@ rm -f conftest*
 
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:3860: checking return type of signal handlers" >&5
+echo "configure:3859: checking return type of signal handlers" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3863 "configure"
+#line 3862 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3876,7 +3875,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:3880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -3898,10 +3897,10 @@ EOF
 
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3902: checking for size_t" >&5
+echo "configure:3901: checking for size_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3905 "configure"
+#line 3904 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3932,10 +3931,10 @@ EOF
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:3936: checking for pid_t" >&5
+echo "configure:3935: checking for pid_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3939 "configure"
+#line 3938 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3966,10 +3965,10 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3970: checking for uid_t in sys/types.h" >&5
+echo "configure:3969: checking for uid_t in sys/types.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3973 "configure"
+#line 3972 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -4005,10 +4004,10 @@ EOF
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:4009: checking for mode_t" >&5
+echo "configure:4008: checking for mode_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4012 "configure"
+#line 4011 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -4039,10 +4038,10 @@ EOF
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:4043: checking for off_t" >&5
+echo "configure:4042: checking for off_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4046 "configure"
+#line 4045 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -4073,10 +4072,10 @@ EOF
 fi
 
 echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:4077: checking for ssize_t" >&5
+echo "configure:4076: checking for ssize_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4080 "configure"
+#line 4079 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -4108,9 +4107,9 @@ fi
 
 
 echo $ac_n "checking for socklen_t""... $ac_c" 1>&6
-echo "configure:4112: checking for socklen_t" >&5
+echo "configure:4111: checking for socklen_t" >&5
 cat > conftest.$ac_ext <<EOF
-#line 4114 "configure"
+#line 4113 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -4120,7 +4119,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 else
@@ -4129,7 +4128,7 @@ else
   rm -rf conftest*
   
 cat > conftest.$ac_ext <<EOF
-#line 4133 "configure"
+#line 4132 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -4139,7 +4138,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:4143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
 echo "$ac_t""size_t" 1>&6
@@ -4171,9 +4170,9 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for struct timeval""... $ac_c" 1>&6
-echo "configure:4175: checking for struct timeval" >&5
+echo "configure:4174: checking for struct timeval" >&5
 cat > conftest.$ac_ext <<EOF
-#line 4177 "configure"
+#line 4176 "configure"
 #include "confdefs.h"
 #ifdef TIME_WITH_SYS_TIME
 #include <sys/time.h>
@@ -4189,7 +4188,7 @@ int main() {
 static struct timeval x; x.tv_sec = x.tv_usec;
 ; return 0; }
 EOF
-if { (eval echo configure:4193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
   HAVE_TIMEVAL=yes
@@ -4211,10 +4210,10 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
-echo "configure:4215: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:4214: checking whether struct tm is in sys/time.h or time.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4218 "configure"
+#line 4217 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <time.h>
@@ -4222,7 +4221,7 @@ int main() {
 struct tm *tp; tp->tm_sec;
 ; return 0; }
 EOF
-if { (eval echo configure:4226: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4225: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm=time.h
 else
@@ -4246,10 +4245,10 @@ EOF
 fi
 
 echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
-echo "configure:4250: checking for tm_zone in struct tm" >&5
+echo "configure:4249: checking for tm_zone in struct tm" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4253 "configure"
+#line 4252 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_cv_struct_tm>
@@ -4257,7 +4256,7 @@ int main() {
 struct tm tm; tm.tm_zone;
 ; return 0; }
 EOF
-if { (eval echo configure:4261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4260: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_tm_zone=yes
 else
@@ -4280,10 +4279,10 @@ EOF
 
 else
   echo $ac_n "checking for tzname""... $ac_c" 1>&6
-echo "configure:4284: checking for tzname" >&5
+echo "configure:4283: checking for tzname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4287 "configure"
+#line 4286 "configure"
 #include "confdefs.h"
 #include <time.h>
 #ifndef tzname /* For SGI.  */
@@ -4293,7 +4292,7 @@ int main() {
 atoi(*tzname);
 ; return 0; }
 EOF
-if { (eval echo configure:4297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_var_tzname=yes
 else
@@ -4319,10 +4318,10 @@ fi
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:4323: checking for working const" >&5
+echo "configure:4322: checking for working const" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4326 "configure"
+#line 4325 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4371,7 +4370,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:4375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -4396,7 +4395,7 @@ fi
 
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:4400: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:4399: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 
 cat > conftestmake <<\EOF
@@ -4421,12 +4420,12 @@ fi
 
 
 echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:4425: checking whether byte ordering is bigendian" >&5
+echo "configure:4424: checking whether byte ordering is bigendian" >&5
 
 ac_cv_c_bigendian=unknown
 # See if sys/param.h defines the BYTE_ORDER macro.
 cat > conftest.$ac_ext <<EOF
-#line 4430 "configure"
+#line 4429 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4437,11 +4436,11 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4441: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4440: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   # It does; now see whether it defined to BIG_ENDIAN or not.
 cat > conftest.$ac_ext <<EOF
-#line 4445 "configure"
+#line 4444 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -4452,7 +4451,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:4456: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4455: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_bigendian=yes
 else
@@ -4469,7 +4468,7 @@ fi
 rm -f conftest*
 if test $ac_cv_c_bigendian = unknown; then
 cat > conftest.$ac_ext <<EOF
-#line 4473 "configure"
+#line 4472 "configure"
 #include "confdefs.h"
 main () {
   /* Are we little or big endian?  From Harbison&Steele.  */
@@ -4482,7 +4481,7 @@ main () {
   exit (u.c[sizeof (long) - 1] == 1);
 }
 EOF
-if { (eval echo configure:4486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_bigendian=no
 else
@@ -4509,10 +4508,10 @@ fi
 
 
 echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:4513: checking size of short" >&5
+echo "configure:4512: checking size of short" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4516 "configure"
+#line 4515 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4523,7 +4522,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4526: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -4551,10 +4550,10 @@ if test "$ac_cv_sizeof_short" = 0; then
   exit 1
 fi
 echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:4555: checking size of int" >&5
+echo "configure:4554: checking size of int" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4558 "configure"
+#line 4557 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4565,7 +4564,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_int=`cat conftestval`
 else
@@ -4587,10 +4586,10 @@ EOF
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:4591: checking size of long" >&5
+echo "configure:4590: checking size of long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4594 "configure"
+#line 4593 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4601,7 +4600,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -4623,10 +4622,10 @@ EOF
 
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:4627: checking size of long long" >&5
+echo "configure:4626: checking size of long long" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4630 "configure"
+#line 4629 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4637,7 +4636,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_long_long=`cat conftestval`
 else
@@ -4659,10 +4658,10 @@ EOF
 
 
 echo $ac_n "checking size of void *""... $ac_c" 1>&6
-echo "configure:4663: checking size of void *" >&5
+echo "configure:4662: checking size of void *" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4666 "configure"
+#line 4665 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -4673,7 +4672,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:4677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:4676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_void_p=`cat conftestval`
 else
@@ -4697,7 +4696,7 @@ EOF
 
 case $opsys in
   cygwin* ) cat > conftest.$ac_ext <<EOF
-#line 4701 "configure"
+#line 4700 "configure"
 #include "confdefs.h"
 #include <cygwin/types.h>
 EOF
@@ -4722,7 +4721,7 @@ rm -f conftest*
 esac
 
 echo $ac_n "checking for long file names""... $ac_c" 1>&6
-echo "configure:4726: checking for long file names" >&5
+echo "configure:4725: checking for long file names" >&5
 
 ac_cv_sys_long_file_names=yes
 # Test for long file names in all the places we know might matter:
@@ -4768,10 +4767,10 @@ fi
 
 
 echo $ac_n "checking for sin""... $ac_c" 1>&6
-echo "configure:4772: checking for sin" >&5
+echo "configure:4771: checking for sin" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4775 "configure"
+#line 4774 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char sin(); below.  */
@@ -4794,7 +4793,7 @@ sin();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_sin=yes"
 else
@@ -4812,12 +4811,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:4816: checking for sin in -lm" >&5
+echo "configure:4815: checking for sin in -lm" >&5
 ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lm "
 cat > conftest.$ac_ext <<EOF
-#line 4821 "configure"
+#line 4820 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4828,7 +4827,7 @@ int main() {
 sin()
 ; return 0; }
 EOF
-if { (eval echo configure:4832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4872,14 +4871,14 @@ EOF
 
 
 cat > conftest.$ac_ext <<EOF
-#line 4876 "configure"
+#line 4875 "configure"
 #include "confdefs.h"
 #include <math.h>
 int main() {
 return atanh(1.0) + asinh(1.0) + acosh(1.0); 
 ; return 0; }
 EOF
-if { (eval echo configure:4883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_INVERSE_HYPERBOLIC
@@ -4896,14 +4895,14 @@ fi
 rm -f conftest*
 
 echo "checking type of mail spool file locking" 1>&6
-echo "configure:4900: checking type of mail spool file locking" >&5
+echo "configure:4899: checking type of mail spool file locking" >&5
 for ac_func in lockf flock
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4904: checking for $ac_func" >&5
+echo "configure:4903: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4907 "configure"
+#line 4906 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4926,7 +4925,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -5008,12 +5007,12 @@ test "$mail_locking" = "locking" -a "$ac_cv_func_locking" != "yes" && \
 case "$opsys" in decosf*)
   
 echo $ac_n "checking for cma_open in -lpthreads""... $ac_c" 1>&6
-echo "configure:5012: checking for cma_open in -lpthreads" >&5
+echo "configure:5011: checking for cma_open in -lpthreads" >&5
 ac_lib_var=`echo pthreads'_'cma_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lpthreads "
 cat > conftest.$ac_ext <<EOF
-#line 5017 "configure"
+#line 5016 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5024,7 +5023,7 @@ int main() {
 cma_open()
 ; return 0; }
 EOF
-if { (eval echo configure:5028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5061,7 +5060,7 @@ esac
 
 
 echo $ac_n "checking whether the -xildoff compiler flag is required""... $ac_c" 1>&6
-echo "configure:5065: checking whether the -xildoff compiler flag is required" >&5
+echo "configure:5064: checking whether the -xildoff compiler flag is required" >&5
 if   ${CC-cc} '-###' -xildon  no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/null ; then
   if ${CC-cc} '-###' -xildoff no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/null ;
     then echo "$ac_t""no" 1>&6;
@@ -5073,7 +5072,7 @@ fi
 if test "$opsys" = "sol2"; then
   if test "$os_release" -ge 506; then
     echo $ac_n "checking for \"-z ignore\" linker flag""... $ac_c" 1>&6
-echo "configure:5077: checking for \"-z ignore\" linker flag" >&5
+echo "configure:5076: checking for \"-z ignore\" linker flag" >&5
     case "`ld -h 2>&1`" in
       *-z\ ignore\|record* ) echo "$ac_t""yes" 1>&6
         ld_switch_site="-z ignore $ld_switch_site" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-z ignore\" to \$ld_switch_site"; fi ;;
@@ -5084,7 +5083,7 @@ fi
 
 
 echo "checking "for specified window system"" 1>&6
-echo "configure:5088: checking "for specified window system"" >&5
+echo "configure:5087: checking "for specified window system"" >&5
 
 
 GNOME_CONFIG=no
@@ -5092,7 +5091,7 @@ GTK_CONFIG=no
 
 if test "$with_gnome" != "no"; then
    echo $ac_n "checking for GNOME configuration script""... $ac_c" 1>&6
-echo "configure:5096: checking for GNOME configuration script" >&5
+echo "configure:5095: checking for GNOME configuration script" >&5
    for possible in gnome-config
    do
       possible_version=`${possible} --version 2> /dev/null`
@@ -5123,40 +5122,40 @@ fi
 
 if test "$with_gtk" != "no";then
    echo $ac_n "checking for GTK configuration script""... $ac_c" 1>&6
-echo "configure:5127: checking for GTK configuration script" >&5
+echo "configure:5126: checking for GTK configuration script" >&5
    for possible in gtk12-config gtk14-config gtk-config
    do
       possible_version=`${possible} --version 2> /dev/null`
       if test "x${possible_version}" != "x"; then
               GTK_CONFIG="${possible}"
+             case "${possible_version}" in
+               1.0.*) echo "configure: warning: GTK 1.2 is required, please upgrade your version of GTK." 1>&2; with_gtk=no;;
+               1.3.*) echo "configure: warning: GTK 1.3 is not supported right now" 1>&2; with_gtk=no;;
+               1.2.*)
+                       with_gtk=yes
+                       break
+                       ;;
+               *)     echo "configure: warning: Found unsupported version of GTK: $possible_version" 1>&2;;
+             esac
       fi
-      case "${possible_version}" in
-        1.0.*) echo "configure: warning: GTK 1.2 is required, please upgrade your version of GTK." 1>&2; with_gtk=no;;
-        1.3.*) echo "configure: warning: GTK 1.3 is not supported right now" 1>&2; with_gtk=no;;
-       1.2.*)
-               with_gtk=yes
-               break
-               ;;
-        *)     echo "configure: warning: Found unsupported version of GTK: $possible_version" 1>&2;;
-      esac
    done
    echo "$ac_t""${GTK_CONFIG}" 1>&6
 fi
 
 if test "${GTK_CONFIG}" != "no"; then
       echo $ac_n "checking gtk version""... $ac_c" 1>&6
-echo "configure:5149: checking gtk version" >&5
+echo "configure:5148: checking gtk version" >&5
       GTK_VERSION=`${GTK_CONFIG} --version`
       echo "$ac_t""${GTK_VERSION}" 1>&6
 
       echo $ac_n "checking gtk libs""... $ac_c" 1>&6
-echo "configure:5154: checking gtk libs" >&5
+echo "configure:5153: checking gtk libs" >&5
       GTK_LIBS=`${GTK_CONFIG} --libs`
       libs_gtk="$libs_gtk ${GTK_LIBS}" &&  if test "$extra_verbose" = "yes"; then echo "    Appending \"${GTK_LIBS}\" to \$libs_gtk"; fi
       echo "$ac_t""${GTK_LIBS}" 1>&6
 
       echo $ac_n "checking gtk cflags""... $ac_c" 1>&6
-echo "configure:5160: checking gtk cflags" >&5
+echo "configure:5159: checking gtk cflags" >&5
       GTK_CFLAGS=`${GTK_CONFIG} --cflags`
       if test "$GCC" = "yes"; then
        GTK_CFLAGS="${GTK_CFLAGS} -Wno-shadow"
@@ -5166,19 +5165,19 @@ echo "configure:5160: checking gtk cflags" >&5
 
       
 echo $ac_n "checking for main in -lgdk_imlib""... $ac_c" 1>&6
-echo "configure:5170: checking for main in -lgdk_imlib" >&5
+echo "configure:5169: checking for main in -lgdk_imlib" >&5
 ac_lib_var=`echo gdk_imlib'_'main | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lgdk_imlib "
 cat > conftest.$ac_ext <<EOF
-#line 5175 "configure"
+#line 5174 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5200,12 +5199,12 @@ fi
 
       
 echo $ac_n "checking for Imlib_init in -lImlib""... $ac_c" 1>&6
-echo "configure:5204: checking for Imlib_init in -lImlib" >&5
+echo "configure:5203: checking for Imlib_init in -lImlib" >&5
 ac_lib_var=`echo Imlib'_'Imlib_init | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lImlib "
 cat > conftest.$ac_ext <<EOF
-#line 5209 "configure"
+#line 5208 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5216,7 +5215,7 @@ int main() {
 Imlib_init()
 ; return 0; }
 EOF
-if { (eval echo configure:5220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5239,10 +5238,10 @@ fi
       for ac_func in gdk_imlib_init
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5243: checking for $ac_func" >&5
+echo "configure:5242: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5246 "configure"
+#line 5245 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -5265,7 +5264,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -5344,15 +5343,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5348: checking for $ac_hdr" >&5
+echo "configure:5347: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5351 "configure"
+#line 5350 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5356: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5355: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5383,19 +5382,19 @@ done
 
       
 echo $ac_n "checking for main in -lxml""... $ac_c" 1>&6
-echo "configure:5387: checking for main in -lxml" >&5
+echo "configure:5386: checking for main in -lxml" >&5
 ac_lib_var=`echo xml'_'main | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lxml "
 cat > conftest.$ac_ext <<EOF
-#line 5392 "configure"
+#line 5391 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5417,19 +5416,19 @@ fi
 
       
 echo $ac_n "checking for main in -lglade""... $ac_c" 1>&6
-echo "configure:5421: checking for main in -lglade" >&5
+echo "configure:5420: checking for main in -lglade" >&5
 ac_lib_var=`echo glade'_'main | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lglade "
 cat > conftest.$ac_ext <<EOF
-#line 5426 "configure"
+#line 5425 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5451,19 +5450,19 @@ fi
 
       
 echo $ac_n "checking for main in -lglade-gnome""... $ac_c" 1>&6
-echo "configure:5455: checking for main in -lglade-gnome" >&5
+echo "configure:5454: checking for main in -lglade-gnome" >&5
 ac_lib_var=`echo glade-gnome'_'main | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lglade-gnome "
 cat > conftest.$ac_ext <<EOF
-#line 5460 "configure"
+#line 5459 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:5467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5484,7 +5483,7 @@ fi
 
 
       cat > conftest.$ac_ext <<EOF
-#line 5488 "configure"
+#line 5487 "configure"
 #include "confdefs.h"
 #include <glade/glade-xml.h>
 EOF
@@ -5543,7 +5542,7 @@ if test "$with_x11" != "no"; then
 # Uses ac_ vars as temps to allow command line to override cache and checks.
 # --without-x overrides everything else, but does not touch the cache.
 echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:5547: checking for X" >&5
+echo "configure:5546: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -5603,12 +5602,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 5607 "configure"
+#line 5606 "configure"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5611: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5677,14 +5676,14 @@ if test "$ac_x_libraries" = NO; then
   ac_save_LIBS="$LIBS"
   LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5681 "configure"
+#line 5680 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:5688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   LIBS="$ac_save_LIBS"
 # We can link X programs with no special library path.
@@ -5793,17 +5792,17 @@ else
     case "`(uname -sr) 2>/dev/null`" in
     "SunOS 5"*)
       echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:5797: checking whether -R must be followed by a space" >&5
+echo "configure:5796: checking whether -R must be followed by a space" >&5
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
-#line 5800 "configure"
+#line 5799 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -5819,14 +5818,14 @@ rm -f conftest*
       else
        LIBS="$ac_xsave_LIBS -R $x_libraries"
        cat > conftest.$ac_ext <<EOF
-#line 5823 "configure"
+#line 5822 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:5830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -5862,12 +5861,12 @@ ac_cv_lib_dnet_dnet_ntoa=no
 else
 
 echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:5866: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:5865: checking for dnet_ntoa in -ldnet" >&5
 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldnet "
 cat > conftest.$ac_ext <<EOF
-#line 5871 "configure"
+#line 5870 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5878,7 +5877,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5902,12 +5901,12 @@ fi
     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
       
 echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:5906: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:5905: checking for dnet_ntoa in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldnet_stub "
 cat > conftest.$ac_ext <<EOF
-#line 5911 "configure"
+#line 5910 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5918,7 +5917,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:5922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5947,10 +5946,10 @@ fi
     # The nsl library prevents programs from opening the X display
     # on Irix 5.2, according to dickey@clark.net.
     echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:5951: checking for gethostbyname" >&5
+echo "configure:5950: checking for gethostbyname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5954 "configure"
+#line 5953 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -5973,7 +5972,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -5994,12 +5993,12 @@ fi
     if test $ac_cv_func_gethostbyname = no; then
       
 echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:5998: checking for gethostbyname in -lnsl" >&5
+echo "configure:5997: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lnsl "
 cat > conftest.$ac_ext <<EOF
-#line 6003 "configure"
+#line 6002 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6010,7 +6009,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:6014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6040,10 +6039,10 @@ fi
     # -lsocket must be given before -lnsl if both are needed.
     # We assume that if connect needs -lnsl, so does gethostbyname.
     echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:6044: checking for connect" >&5
+echo "configure:6043: checking for connect" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6047 "configure"
+#line 6046 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -6066,7 +6065,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -6089,12 +6088,12 @@ fi
 xe_msg_checking="for connect in -lsocket"
 test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6093: checking "$xe_msg_checking"" >&5
+echo "configure:6092: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lsocket $X_EXTRA_LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6098 "configure"
+#line 6097 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6105,7 +6104,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:6109: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6129,10 +6128,10 @@ fi
 
     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:6133: checking for remove" >&5
+echo "configure:6132: checking for remove" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6136 "configure"
+#line 6135 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -6155,7 +6154,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
@@ -6176,12 +6175,12 @@ fi
     if test $ac_cv_func_remove = no; then
       
 echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:6180: checking for remove in -lposix" >&5
+echo "configure:6179: checking for remove in -lposix" >&5
 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lposix "
 cat > conftest.$ac_ext <<EOF
-#line 6185 "configure"
+#line 6184 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6192,7 +6191,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:6196: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6195: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6216,10 +6215,10 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:6220: checking for shmat" >&5
+echo "configure:6219: checking for shmat" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6223 "configure"
+#line 6222 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -6242,7 +6241,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
@@ -6263,12 +6262,12 @@ fi
     if test $ac_cv_func_shmat = no; then
       
 echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:6267: checking for shmat in -lipc" >&5
+echo "configure:6266: checking for shmat in -lipc" >&5
 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lipc "
 cat > conftest.$ac_ext <<EOF
-#line 6272 "configure"
+#line 6271 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6279,7 +6278,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:6283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6315,12 +6314,12 @@ fi
 xe_msg_checking="for IceConnectionNumber in -lICE"
 test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6319: checking "$xe_msg_checking"" >&5
+echo "configure:6318: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lICE $X_EXTRA_LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6324 "configure"
+#line 6323 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6331,7 +6330,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:6335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6377,15 +6376,15 @@ EOF
 
     ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6
-echo "configure:6381: checking for Xm/Xm.h" >&5
+echo "configure:6380: checking for Xm/Xm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6384 "configure"
+#line 6383 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6389: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6388: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6402,12 +6401,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   
 echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6
-echo "configure:6406: checking for XmStringFree in -lXm" >&5
+echo "configure:6405: checking for XmStringFree in -lXm" >&5
 ac_lib_var=`echo Xm'_'XmStringFree | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXm "
 cat > conftest.$ac_ext <<EOF
-#line 6411 "configure"
+#line 6410 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6418,7 +6417,7 @@ int main() {
 XmStringFree()
 ; return 0; }
 EOF
-if { (eval echo configure:6422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6570,7 +6569,7 @@ EOF
 
 
     echo "checking for X defines extracted by xmkmf" 1>&6
-echo "configure:6574: checking for X defines extracted by xmkmf" >&5
+echo "configure:6573: checking for X defines extracted by xmkmf" >&5
   rm -fr conftestdir
   if mkdir conftestdir; then
     cd conftestdir
@@ -6619,15 +6618,15 @@ EOF
 
     ac_safe=`echo "X11/Intrinsic.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Intrinsic.h""... $ac_c" 1>&6
-echo "configure:6623: checking for X11/Intrinsic.h" >&5
+echo "configure:6622: checking for X11/Intrinsic.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6626 "configure"
+#line 6625 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6631: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6630: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6651,12 +6650,12 @@ fi
 
       
 echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:6655: checking for XOpenDisplay in -lX11" >&5
+echo "configure:6654: checking for XOpenDisplay in -lX11" >&5
 ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lX11 "
 cat > conftest.$ac_ext <<EOF
-#line 6660 "configure"
+#line 6659 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6667,7 +6666,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:6671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6692,12 +6691,12 @@ fi
 xe_msg_checking="for XGetFontProperty in -lX11"
 test -n "-b i486-linuxaout" && xe_msg_checking="$xe_msg_checking using extra libs -b i486-linuxaout"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:6696: checking "$xe_msg_checking"" >&5
+echo "configure:6695: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo X11'_'XGetFontProperty | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lX11 -b i486-linuxaout"
 cat > conftest.$ac_ext <<EOF
-#line 6701 "configure"
+#line 6700 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6708,7 +6707,7 @@ int main() {
 XGetFontProperty()
 ; return 0; }
 EOF
-if { (eval echo configure:6712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6735,12 +6734,12 @@ fi
 
     
 echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6
-echo "configure:6739: checking for XShapeSelectInput in -lXext" >&5
+echo "configure:6738: checking for XShapeSelectInput in -lXext" >&5
 ac_lib_var=`echo Xext'_'XShapeSelectInput | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXext "
 cat > conftest.$ac_ext <<EOF
-#line 6744 "configure"
+#line 6743 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6751,7 +6750,7 @@ int main() {
 XShapeSelectInput()
 ; return 0; }
 EOF
-if { (eval echo configure:6755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6774,12 +6773,12 @@ fi
 
     
 echo $ac_n "checking for XtOpenDisplay in -lXt""... $ac_c" 1>&6
-echo "configure:6778: checking for XtOpenDisplay in -lXt" >&5
+echo "configure:6777: checking for XtOpenDisplay in -lXt" >&5
 ac_lib_var=`echo Xt'_'XtOpenDisplay | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXt "
 cat > conftest.$ac_ext <<EOF
-#line 6783 "configure"
+#line 6782 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6790,7 +6789,7 @@ int main() {
 XtOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:6794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6813,14 +6812,14 @@ fi
 
 
   echo $ac_n "checking the version of X11 being used""... $ac_c" 1>&6
-echo "configure:6817: checking the version of X11 being used" >&5
+echo "configure:6816: checking the version of X11 being used" >&5
   cat > conftest.$ac_ext <<EOF
-#line 6819 "configure"
+#line 6818 "configure"
 #include "confdefs.h"
 #include <X11/Intrinsic.h>
     int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; }
 EOF
-if { (eval echo configure:6824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:6823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ./conftest foobar; x11_release=$?
 else
@@ -6851,10 +6850,10 @@ EOF
   for ac_func in XConvertCase
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6855: checking for $ac_func" >&5
+echo "configure:6854: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6858 "configure"
+#line 6857 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6877,7 +6876,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -6909,15 +6908,15 @@ done
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6913: checking for $ac_hdr" >&5
+echo "configure:6912: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6916 "configure"
+#line 6915 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6921: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6920: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6950,10 +6949,10 @@ done
     for ac_func in XRegisterIMInstantiateCallback
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6954: checking for $ac_func" >&5
+echo "configure:6953: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6957 "configure"
+#line 6956 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -6976,7 +6975,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -7004,9 +7003,9 @@ fi
 done
 
   echo $ac_n "checking for standard XRegisterIMInstantiateCallback prototype""... $ac_c" 1>&6
-echo "configure:7008: checking for standard XRegisterIMInstantiateCallback prototype" >&5
+echo "configure:7007: checking for standard XRegisterIMInstantiateCallback prototype" >&5
   cat > conftest.$ac_ext <<EOF
-#line 7010 "configure"
+#line 7009 "configure"
 #include "confdefs.h"
 
 #define NeedFunctionPrototypes 1
@@ -7018,7 +7017,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:7022: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7021: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 else
@@ -7039,12 +7038,12 @@ rm -f conftest*
 
     test -z "$with_xmu" && { 
 echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6
-echo "configure:7043: checking for XmuReadBitmapDataFromFile in -lXmu" >&5
+echo "configure:7042: checking for XmuReadBitmapDataFromFile in -lXmu" >&5
 ac_lib_var=`echo Xmu'_'XmuReadBitmapDataFromFile | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXmu "
 cat > conftest.$ac_ext <<EOF
-#line 7048 "configure"
+#line 7047 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7055,7 +7054,7 @@ int main() {
 XmuReadBitmapDataFromFile()
 ; return 0; }
 EOF
-if { (eval echo configure:7059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7094,19 +7093,19 @@ EOF
 
       
 echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6
-echo "configure:7098: checking for main in -lXbsd" >&5
+echo "configure:7097: checking for main in -lXbsd" >&5
 ac_lib_var=`echo Xbsd'_'main | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXbsd "
 cat > conftest.$ac_ext <<EOF
-#line 7103 "configure"
+#line 7102 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:7110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7109: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7130,7 +7129,7 @@ fi
     if test "$unexec" = "unexaix.o" -a "$x11_release" = "6"; then
         if test "$GCC" = "yes"; then
                   echo $ac_n "checking for name of AIX gcc threads option""... $ac_c" 1>&6
-echo "configure:7134: checking for name of AIX gcc threads option" >&5
+echo "configure:7133: checking for name of AIX gcc threads option" >&5
       case `$CC -v --help 2>&1` in
         *-mthreads*) aix_threads=-mthreads ;;
                   *) aix_threads=-pthread  ;;
@@ -7144,10 +7143,10 @@ echo "configure:7134: checking for name of AIX gcc threads option" >&5
          xe_save_CC="$CC"
          CC="${CC}_r"
          echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:7148: checking size of short" >&5
+echo "configure:7147: checking size of short" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7151 "configure"
+#line 7150 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -7158,7 +7157,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:7162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_sizeof_short=`cat conftestval`
 else
@@ -7187,22 +7186,22 @@ EOF
 fi 
 if test "$with_msw" != "no"; then
   echo "checking for MS-Windows" 1>&6
-echo "configure:7191: checking for MS-Windows" >&5
+echo "configure:7190: checking for MS-Windows" >&5
   
 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6
-echo "configure:7194: checking for main in -lgdi32" >&5
+echo "configure:7193: checking for main in -lgdi32" >&5
 ac_lib_var=`echo gdi32'_'main | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lgdi32 "
 cat > conftest.$ac_ext <<EOF
-#line 7199 "configure"
+#line 7198 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:7206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7275,12 +7274,12 @@ EOF
  fi
     fi
         cat > conftest.$ac_ext <<EOF
-#line 7279 "configure"
+#line 7278 "configure"
 #include "confdefs.h"
 #include <fcntl.h>
     int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; }
 EOF
-if { (eval echo configure:7284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:7283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   need_event_unixoid=yes; { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_MSG_SELECT
@@ -7344,15 +7343,15 @@ fi
 if test "$with_x11" = "yes"; then
   ac_safe=`echo "X11/extensions/shape.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/extensions/shape.h""... $ac_c" 1>&6
-echo "configure:7348: checking for X11/extensions/shape.h" >&5
+echo "configure:7347: checking for X11/extensions/shape.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7351 "configure"
+#line 7350 "configure"
 #include "confdefs.h"
 #include <X11/extensions/shape.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7356: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7355: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7404,7 +7403,7 @@ case "$x_libraries" in *X11R4* )
 esac
 
 echo "checking for WM_COMMAND option" 1>&6
-echo "configure:7408: checking for WM_COMMAND option" >&5;
+echo "configure:7407: checking for WM_COMMAND option" >&5;
 if test "$with_wmcommand" != "no"; then
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_WMCOMMAND
@@ -7419,15 +7418,15 @@ fi
 test -z "$with_xauth" && test "$window_system" = "none" && with_xauth=no
 test -z "$with_xauth" && { ac_safe=`echo "X11/Xauth.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xauth.h""... $ac_c" 1>&6
-echo "configure:7423: checking for X11/Xauth.h" >&5
+echo "configure:7422: checking for X11/Xauth.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7426 "configure"
+#line 7425 "configure"
 #include "confdefs.h"
 #include <X11/Xauth.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7431: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7430: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7450,12 +7449,12 @@ fi
  }
 test -z "$with_xauth" && { 
 echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6
-echo "configure:7454: checking for XauGetAuthByAddr in -lXau" >&5
+echo "configure:7453: checking for XauGetAuthByAddr in -lXau" >&5
 ac_lib_var=`echo Xau'_'XauGetAuthByAddr | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXau "
 cat > conftest.$ac_ext <<EOF
-#line 7459 "configure"
+#line 7458 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7466,7 +7465,7 @@ int main() {
 XauGetAuthByAddr()
 ; return 0; }
 EOF
-if { (eval echo configure:7470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7511,15 +7510,15 @@ if test "$with_tooltalk" != "no" ; then
       for dir in "" "Tt/" "desktop/" ; do
     ac_safe=`echo "${dir}tt_c.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ${dir}tt_c.h""... $ac_c" 1>&6
-echo "configure:7515: checking for ${dir}tt_c.h" >&5
+echo "configure:7514: checking for ${dir}tt_c.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7518 "configure"
+#line 7517 "configure"
 #include "confdefs.h"
 #include <${dir}tt_c.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7523: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7555,12 +7554,12 @@ if test "$with_tooltalk" != "no" ; then
 xe_msg_checking="for tt_message_create in -ltt"
 test -n "$extra_libs" && xe_msg_checking="$xe_msg_checking using extra libs $extra_libs"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:7559: checking "$xe_msg_checking"" >&5
+echo "configure:7558: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo tt'_'tt_message_create | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ltt $extra_libs"
 cat > conftest.$ac_ext <<EOF
-#line 7564 "configure"
+#line 7563 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7571,7 +7570,7 @@ int main() {
 tt_message_create()
 ; return 0; }
 EOF
-if { (eval echo configure:7575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7628,15 +7627,15 @@ fi
 
 test -z "$with_cde" && { ac_safe=`echo "Dt/Dt.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Dt/Dt.h""... $ac_c" 1>&6
-echo "configure:7632: checking for Dt/Dt.h" >&5
+echo "configure:7631: checking for Dt/Dt.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7635 "configure"
+#line 7634 "configure"
 #include "confdefs.h"
 #include <Dt/Dt.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7640: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7639: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7659,12 +7658,12 @@ fi
  }
 test -z "$with_cde" && { 
 echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6
-echo "configure:7663: checking for DtDndDragStart in -lDtSvc" >&5
+echo "configure:7662: checking for DtDndDragStart in -lDtSvc" >&5
 ac_lib_var=`echo DtSvc'_'DtDndDragStart | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lDtSvc "
 cat > conftest.$ac_ext <<EOF
-#line 7668 "configure"
+#line 7667 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7675,7 +7674,7 @@ int main() {
 DtDndDragStart()
 ; return 0; }
 EOF
-if { (eval echo configure:7679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7748,7 +7747,7 @@ fi
 
 if test "$with_dragndrop" != "no" ; then
   echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6
-echo "configure:7752: checking if drag and drop API is needed" >&5
+echo "configure:7751: checking if drag and drop API is needed" >&5
   if test -n "$dragndrop_proto" ; then
     with_dragndrop=yes
     echo "$ac_t""yes (${dragndrop_proto} )" 1>&6
@@ -7768,18 +7767,18 @@ EOF
 fi
 
 echo "checking for LDAP" 1>&6
-echo "configure:7772: checking for LDAP" >&5
+echo "configure:7771: checking for LDAP" >&5
 test -z "$with_ldap" && { ac_safe=`echo "ldap.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ldap.h""... $ac_c" 1>&6
-echo "configure:7775: checking for ldap.h" >&5
+echo "configure:7774: checking for ldap.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7778 "configure"
+#line 7777 "configure"
 #include "confdefs.h"
 #include <ldap.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7783: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7782: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7802,15 +7801,15 @@ fi
  }
 test -z "$with_ldap" && { ac_safe=`echo "lber.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for lber.h""... $ac_c" 1>&6
-echo "configure:7806: checking for lber.h" >&5
+echo "configure:7805: checking for lber.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7809 "configure"
+#line 7808 "configure"
 #include "confdefs.h"
 #include <lber.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7814: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7834,12 +7833,12 @@ fi
 if test "$with_ldap" != "no"; then
   
 echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6
-echo "configure:7838: checking for ldap_search in -lldap" >&5
+echo "configure:7837: checking for ldap_search in -lldap" >&5
 ac_lib_var=`echo ldap'_'ldap_search | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lldap "
 cat > conftest.$ac_ext <<EOF
-#line 7843 "configure"
+#line 7842 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7850,7 +7849,7 @@ int main() {
 ldap_search()
 ; return 0; }
 EOF
-if { (eval echo configure:7854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7864,23 +7863,22 @@ xe_check_libs=""
 
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
-  with_ldap_nolber=yes
+  with_ldap=yes
 else
   echo "$ac_t""no" 1>&6
-with_ldap_nolber=no
 fi
 
 
-  test "$with_ldap_nolber" = "no" && { 
+    test "$with_ldap" != "yes" && { 
 xe_msg_checking="for ldap_open in -lldap"
 test -n "-llber" && xe_msg_checking="$xe_msg_checking using extra libs -llber"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:7879: checking "$xe_msg_checking"" >&5
+echo "configure:7877: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lldap -llber"
 cat > conftest.$ac_ext <<EOF
-#line 7884 "configure"
+#line 7882 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7891,7 +7889,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:7895: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7905,23 +7903,22 @@ xe_check_libs=""
 
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
-  with_ldap_lber=yes
+  with_ldap=yes with_ldap_lber=yes
 else
   echo "$ac_t""no" 1>&6
-with_ldap_lber=no
 fi
 
  }
-  test "$with_ldap_nolber" = "no" -a "$with_ldap_lber" = "no" && { 
+  test "$with_ldap" != "yes" && { 
 xe_msg_checking="for ldap_open in -lldap"
 test -n "-llber -lkrb" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:7920: checking "$xe_msg_checking"" >&5
+echo "configure:7917: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lldap -llber -lkrb"
 cat > conftest.$ac_ext <<EOF
-#line 7925 "configure"
+#line 7922 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7932,7 +7929,7 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:7936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7946,23 +7943,22 @@ xe_check_libs=""
 
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
-  with_ldap_krb=yes
+  with_ldap=yes with_ldap_lber=yes with_ldap_krb=yes
 else
   echo "$ac_t""no" 1>&6
-with_ldap_krb=no
 fi
 
  }
-  test "$with_ldap_nolber" = "no" -a "$with_ldap_lber" = "no" -a "$with_ldap_krb" = "no" && { 
+  test "$with_ldap" != "yes" && { 
 xe_msg_checking="for ldap_open in -lldap"
 test -n "-llber -lkrb -ldes" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb -ldes"
 echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6
-echo "configure:7961: checking "$xe_msg_checking"" >&5
+echo "configure:7957: checking "$xe_msg_checking"" >&5
 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lldap -llber -lkrb -ldes"
 cat > conftest.$ac_ext <<EOF
-#line 7966 "configure"
+#line 7962 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7973,7 +7969,45 @@ int main() {
 ldap_open()
 ; return 0; }
 EOF
-if { (eval echo configure:7977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+xe_check_libs=""
+
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
+  echo "$ac_t""yes" 1>&6
+  with_ldap=yes with_ldap_lber=yes with_ldap_krb=yes with_ldap_des=yes
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+ }
+              test "$with_ldap_lber" != "yes" && { 
+echo $ac_n "checking for ber_pvt_opt_on in -llber""... $ac_c" 1>&6
+echo "configure:7995: checking for ber_pvt_opt_on in -llber" >&5
+ac_lib_var=`echo lber'_'ber_pvt_opt_on | sed 'y%./+-%__p_%'`
+
+xe_check_libs=" -llber "
+cat > conftest.$ac_ext <<EOF
+#line 8000 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char ber_pvt_opt_on();
+
+int main() {
+ber_pvt_opt_on()
+; return 0; }
+EOF
+if { (eval echo configure:8011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7987,14 +8021,12 @@ xe_check_libs=""
 
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
-  with_ldap_krbdes=yes
+  with_ldap_lber=yes
 else
   echo "$ac_t""no" 1>&6
-with_ldap_krbdes=no
 fi
 
  }
-  test -z "$with_ldap" -a \( "$with_ldap_lber" = "yes" -o "$with_ldap_nolber" = "yes" -o "$with_ldap_krb" = "yes" -o "$with_ldap_krbdes" = "yes" \) && with_ldap=yes
 fi
 if test "$with_ldap" = "yes"; then
   { test "$extra_verbose" = "yes" && cat << \EOF
@@ -8008,26 +8040,23 @@ EOF
   extra_objs="$extra_objs eldap.o" &&  if test "$extra_verbose" = "yes"; then
    echo "    xemacs will be linked with \"eldap.o\""
  fi
-  if test "$with_ldap_nolber" = "yes" ; then
-    LIBS="-lldap $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lldap\" to \$LIBS"; fi
-  else
-    if test "$with_ldap_krb" = "yes" ; then
-      LIBS="-lkrb $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lkrb\" to \$LIBS"; fi
-    fi
-    if test "$with_ldap_krbdes" = "yes" ; then
-      LIBS="-ldes $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-ldes\" to \$LIBS"; fi
-      LIBS="-lkrb $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lkrb\" to \$LIBS"; fi
-    fi
+  if test "$with_ldap_des" = "yes" ; then
+    LIBS="-ldes $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-ldes\" to \$LIBS"; fi
+  fi
+  if test "$with_ldap_krb" = "yes" ; then
+    LIBS="-lkrb $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lkrb\" to \$LIBS"; fi
+  fi
+  if test "$with_ldap_lber" = "yes" ; then
     LIBS="-llber $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-llber\" to \$LIBS"; fi
-    LIBS="-lldap $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lldap\" to \$LIBS"; fi
   fi
+  LIBS="-lldap $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lldap\" to \$LIBS"; fi
   for ac_func in ldap_set_option ldap_get_lderrno ldap_result2error ldap_parse_result
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8028: checking for $ac_func" >&5
+echo "configure:8057: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8031 "configure"
+#line 8060 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -8050,7 +8079,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -8081,20 +8110,20 @@ fi
 
 if test "$with_postgresql" != "no"; then
   echo "checking for PostgreSQL" 1>&6
-echo "configure:8085: checking for PostgreSQL" >&5
+echo "configure:8114: checking for PostgreSQL" >&5
 
   for header_dir in "" "pgsql/" "postgresql/"; do
     ac_safe=`echo "${header_dir}libpq-fe.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ${header_dir}libpq-fe.h""... $ac_c" 1>&6
-echo "configure:8090: checking for ${header_dir}libpq-fe.h" >&5
+echo "configure:8119: checking for ${header_dir}libpq-fe.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8093 "configure"
+#line 8122 "configure"
 #include "confdefs.h"
 #include <${header_dir}libpq-fe.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8098: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8127: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8118,12 +8147,12 @@ fi
 
   test -n "$libpq_fe_h_file" && { 
 echo $ac_n "checking for PQconnectdb in -lpq""... $ac_c" 1>&6
-echo "configure:8122: checking for PQconnectdb in -lpq" >&5
+echo "configure:8151: checking for PQconnectdb in -lpq" >&5
 ac_lib_var=`echo pq'_'PQconnectdb | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lpq "
 cat > conftest.$ac_ext <<EOF
-#line 8127 "configure"
+#line 8156 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8134,7 +8163,7 @@ int main() {
 PQconnectdb()
 ; return 0; }
 EOF
-if { (eval echo configure:8138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8167: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8167,12 +8196,12 @@ EOF
 
     
 echo $ac_n "checking for PQconnectStart in -lpq""... $ac_c" 1>&6
-echo "configure:8171: checking for PQconnectStart in -lpq" >&5
+echo "configure:8200: checking for PQconnectStart in -lpq" >&5
 ac_lib_var=`echo pq'_'PQconnectStart | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lpq "
 cat > conftest.$ac_ext <<EOF
-#line 8176 "configure"
+#line 8205 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8183,7 +8212,7 @@ int main() {
 PQconnectStart()
 ; return 0; }
 EOF
-if { (eval echo configure:8187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8231,7 +8260,7 @@ fi
 
 if test "$window_system" != "none"; then
   echo "checking for graphics libraries" 1>&6
-echo "configure:8235: checking for graphics libraries" >&5
+echo "configure:8264: checking for graphics libraries" >&5
 
       libpath_xpm=
   incpath_xpm=
@@ -8257,10 +8286,10 @@ echo "configure:8235: checking for graphics libraries" >&5
     CFLAGS=""$incpath_xpm" $CFLAGS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \""$incpath_xpm"\" to \$CFLAGS"; fi
     LDFLAGS=""$libpath_xpm" $LDFLAGS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \""$libpath_xpm"\" to \$LDFLAGS"; fi
     echo $ac_n "checking for Xpm - no older than 3.4f""... $ac_c" 1>&6
-echo "configure:8261: checking for Xpm - no older than 3.4f" >&5
+echo "configure:8290: checking for Xpm - no older than 3.4f" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 8264 "configure"
+#line 8293 "configure"
 #include "confdefs.h"
 #define XPM_NUMBERS
 #include <X11/xpm.h>
@@ -8269,7 +8298,7 @@ echo "configure:8261: checking for Xpm - no older than 3.4f" >&5
       XpmIncludeVersion != XpmLibraryVersion() ? 1 :
       XpmIncludeVersion < 30406 ? 2 : 0 ;}
 EOF
-if { (eval echo configure:8273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:8302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ./conftest dummy_arg; xpm_status=$?;
       if test "$xpm_status" = "0"; then
@@ -8313,17 +8342,17 @@ EOF
     libs_x="-lXpm $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lXpm\" to \$libs_x"; fi
     CFLAGS=""$incpath_xpm" $CFLAGS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \""$incpath_xpm"\" to \$CFLAGS"; fi
     echo $ac_n "checking for \"FOR_MSW\" xpm""... $ac_c" 1>&6
-echo "configure:8317: checking for \"FOR_MSW\" xpm" >&5
+echo "configure:8346: checking for \"FOR_MSW\" xpm" >&5
     xe_check_libs=-lXpm
     cat > conftest.$ac_ext <<EOF
-#line 8320 "configure"
+#line 8349 "configure"
 #include "confdefs.h"
 
 int main() {
 XpmCreatePixmapFromData()
 ; return 0; }
 EOF
-if { (eval echo configure:8327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   xpm_for_msw=no
 else
@@ -8349,15 +8378,15 @@ EOF
 
     test -z "$with_xface" && { ac_safe=`echo "compface.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for compface.h""... $ac_c" 1>&6
-echo "configure:8353: checking for compface.h" >&5
+echo "configure:8382: checking for compface.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8356 "configure"
+#line 8385 "configure"
 #include "confdefs.h"
 #include <compface.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8361: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8390: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8380,12 +8409,12 @@ fi
  }
   test -z "$with_xface" && { 
 echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6
-echo "configure:8384: checking for UnGenFace in -lcompface" >&5
+echo "configure:8413: checking for UnGenFace in -lcompface" >&5
 ac_lib_var=`echo compface'_'UnGenFace | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lcompface "
 cat > conftest.$ac_ext <<EOF
-#line 8389 "configure"
+#line 8418 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8396,7 +8425,7 @@ int main() {
 UnGenFace()
 ; return 0; }
 EOF
-if { (eval echo configure:8400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8448,12 +8477,12 @@ EOF
       if test "$with_png $with_tiff" != "no no"; then
     
 echo $ac_n "checking for inflate in -lc""... $ac_c" 1>&6
-echo "configure:8452: checking for inflate in -lc" >&5
+echo "configure:8481: checking for inflate in -lc" >&5
 ac_lib_var=`echo c'_'inflate | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lc "
 cat > conftest.$ac_ext <<EOF
-#line 8457 "configure"
+#line 8486 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8464,7 +8493,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:8468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8483,12 +8512,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6
-echo "configure:8487: checking for inflate in -lz" >&5
+echo "configure:8516: checking for inflate in -lz" >&5
 ac_lib_var=`echo z'_'inflate | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lz "
 cat > conftest.$ac_ext <<EOF
-#line 8492 "configure"
+#line 8521 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8499,7 +8528,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:8503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8532: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8518,12 +8547,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6
-echo "configure:8522: checking for inflate in -lgz" >&5
+echo "configure:8551: checking for inflate in -lgz" >&5
 ac_lib_var=`echo gz'_'inflate | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lgz "
 cat > conftest.$ac_ext <<EOF
-#line 8527 "configure"
+#line 8556 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8534,7 +8563,7 @@ int main() {
 inflate()
 ; return 0; }
 EOF
-if { (eval echo configure:8538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8564,15 +8593,15 @@ fi
 
     test -z "$with_jpeg" && { ac_safe=`echo "jpeglib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for jpeglib.h""... $ac_c" 1>&6
-echo "configure:8568: checking for jpeglib.h" >&5
+echo "configure:8597: checking for jpeglib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8571 "configure"
+#line 8600 "configure"
 #include "confdefs.h"
 #include <jpeglib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8576: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8605: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8595,12 +8624,12 @@ fi
  }
   test -z "$with_jpeg" && { 
 echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6
-echo "configure:8599: checking for jpeg_destroy_decompress in -ljpeg" >&5
+echo "configure:8628: checking for jpeg_destroy_decompress in -ljpeg" >&5
 ac_lib_var=`echo jpeg'_'jpeg_destroy_decompress | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ljpeg "
 cat > conftest.$ac_ext <<EOF
-#line 8604 "configure"
+#line 8633 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8611,7 +8640,7 @@ int main() {
 jpeg_destroy_decompress()
 ; return 0; }
 EOF
-if { (eval echo configure:8615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8647,10 +8676,10 @@ EOF
 
     png_problem=""
   test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6
-echo "configure:8651: checking for pow" >&5
+echo "configure:8680: checking for pow" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8654 "configure"
+#line 8683 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char pow(); below.  */
@@ -8673,7 +8702,7 @@ pow();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_pow=yes"
 else
@@ -8694,15 +8723,15 @@ fi
  }
   test -z "$with_png" && { ac_safe=`echo "png.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for png.h""... $ac_c" 1>&6
-echo "configure:8698: checking for png.h" >&5
+echo "configure:8727: checking for png.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8701 "configure"
+#line 8730 "configure"
 #include "confdefs.h"
 #include <png.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8706: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8735: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8725,12 +8754,12 @@ fi
  }
   test -z "$with_png" && { 
 echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6
-echo "configure:8729: checking for png_read_image in -lpng" >&5
+echo "configure:8758: checking for png_read_image in -lpng" >&5
 ac_lib_var=`echo png'_'png_read_image | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lpng "
 cat > conftest.$ac_ext <<EOF
-#line 8734 "configure"
+#line 8763 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8741,7 +8770,7 @@ int main() {
 png_read_image()
 ; return 0; }
 EOF
-if { (eval echo configure:8745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8764,10 +8793,10 @@ fi
  }
   if test -z "$with_png"; then
     echo $ac_n "checking for workable png version information""... $ac_c" 1>&6
-echo "configure:8768: checking for workable png version information" >&5
+echo "configure:8797: checking for workable png version information" >&5
     xe_check_libs="-lpng -lz"
     cat > conftest.$ac_ext <<EOF
-#line 8771 "configure"
+#line 8800 "configure"
 #include "confdefs.h"
 #include <png.h>
     int main(int c, char **v) {
@@ -8775,7 +8804,7 @@ echo "configure:8768: checking for workable png version information" >&5
     if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING) != 0) return 1;
     return (PNG_LIBPNG_VER < 10002) ? 2 : 0 ;}
 EOF
-if { (eval echo configure:8779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:8808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ./conftest dummy_arg; png_status=$?;
       if test "$png_status" = "0"; then
@@ -8818,15 +8847,15 @@ EOF
 
     test -z "$with_tiff" && { ac_safe=`echo "tiffio.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for tiffio.h""... $ac_c" 1>&6
-echo "configure:8822: checking for tiffio.h" >&5
+echo "configure:8851: checking for tiffio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8825 "configure"
+#line 8854 "configure"
 #include "confdefs.h"
 #include <tiffio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8830: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8859: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8849,12 +8878,12 @@ fi
  }
   test -z "$with_tiff" && { 
 echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:8853: checking for TIFFClientOpen in -ltiff" >&5
+echo "configure:8882: checking for TIFFClientOpen in -ltiff" >&5
 ac_lib_var=`echo tiff'_'TIFFClientOpen | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ltiff "
 cat > conftest.$ac_ext <<EOF
-#line 8858 "configure"
+#line 8887 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8865,7 +8894,7 @@ int main() {
 TIFFClientOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:8869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8904,15 +8933,15 @@ fi
 if test "$with_gtk" = "yes"; then
     test -z "$with_xface" && { ac_safe=`echo "compface.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for compface.h""... $ac_c" 1>&6
-echo "configure:8908: checking for compface.h" >&5
+echo "configure:8937: checking for compface.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8911 "configure"
+#line 8940 "configure"
 #include "confdefs.h"
 #include <compface.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8916: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8945: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8935,12 +8964,12 @@ fi
  }
   test -z "$with_xface" && { 
 echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6
-echo "configure:8939: checking for UnGenFace in -lcompface" >&5
+echo "configure:8968: checking for UnGenFace in -lcompface" >&5
 ac_lib_var=`echo compface'_'UnGenFace | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lcompface "
 cat > conftest.$ac_ext <<EOF
-#line 8944 "configure"
+#line 8973 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8951,7 +8980,7 @@ int main() {
 UnGenFace()
 ; return 0; }
 EOF
-if { (eval echo configure:8955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8990,12 +9019,12 @@ fi
 
 if test "$with_x11" = "yes"; then
   echo "checking for X11 graphics libraries" 1>&6
-echo "configure:8994: checking for X11 graphics libraries" >&5
+echo "configure:9023: checking for X11 graphics libraries" >&5
 fi
 
 if test "$with_x11" = "yes"; then
   echo "checking for the Athena widgets" 1>&6
-echo "configure:8999: checking for the Athena widgets" >&5
+echo "configure:9028: checking for the Athena widgets" >&5
 
     case "$with_athena" in
         "xaw" | "")    athena_variant=Xaw      athena_3d=no  ;;
@@ -9011,12 +9040,12 @@ echo "configure:8999: checking for the Athena widgets" >&5
     if test "$athena_3d" = "no"; then
     
 echo $ac_n "checking for XawScrollbarSetThumb in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:9015: checking for XawScrollbarSetThumb in -l$athena_variant" >&5
+echo "configure:9044: checking for XawScrollbarSetThumb in -l$athena_variant" >&5
 ac_lib_var=`echo $athena_variant'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$athena_variant "
 cat > conftest.$ac_ext <<EOF
-#line 9020 "configure"
+#line 9049 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9027,7 +9056,7 @@ int main() {
 XawScrollbarSetThumb()
 ; return 0; }
 EOF
-if { (eval echo configure:9031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9043,12 +9072,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
           
 echo $ac_n "checking for $athena_3d_function in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:9047: checking for $athena_3d_function in -l$athena_variant" >&5
+echo "configure:9076: checking for $athena_3d_function in -l$athena_variant" >&5
 ac_lib_var=`echo $athena_variant'_'$athena_3d_function | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$athena_variant "
 cat > conftest.$ac_ext <<EOF
-#line 9052 "configure"
+#line 9081 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9059,7 +9088,7 @@ int main() {
 $athena_3d_function()
 ; return 0; }
 EOF
-if { (eval echo configure:9063: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9090,12 +9119,12 @@ fi
   else
         
 echo $ac_n "checking for $athena_3d_function in -l$athena_variant""... $ac_c" 1>&6
-echo "configure:9094: checking for $athena_3d_function in -l$athena_variant" >&5
+echo "configure:9123: checking for $athena_3d_function in -l$athena_variant" >&5
 ac_lib_var=`echo $athena_variant'_'$athena_3d_function | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$athena_variant "
 cat > conftest.$ac_ext <<EOF
-#line 9099 "configure"
+#line 9128 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9106,7 +9135,7 @@ int main() {
 $athena_3d_function()
 ; return 0; }
 EOF
-if { (eval echo configure:9110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9124,12 +9153,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for $athena_3d_function in -lXaw""... $ac_c" 1>&6
-echo "configure:9128: checking for $athena_3d_function in -lXaw" >&5
+echo "configure:9157: checking for $athena_3d_function in -lXaw" >&5
 ac_lib_var=`echo Xaw'_'$athena_3d_function | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXaw "
 cat > conftest.$ac_ext <<EOF
-#line 9133 "configure"
+#line 9162 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9140,7 +9169,7 @@ int main() {
 $athena_3d_function()
 ; return 0; }
 EOF
-if { (eval echo configure:9144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9173: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9171,15 +9200,15 @@ fi
     if test "$athena_3d" = "no"; then
     ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6
-echo "configure:9175: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:9204: checking for X11/Xaw/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9178 "configure"
+#line 9207 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9183: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9212: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9199,15 +9228,15 @@ else
   echo "$ac_t""no" 1>&6
 ac_safe=`echo "X11/Xaw/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/XawInit.h""... $ac_c" 1>&6
-echo "configure:9203: checking for X11/Xaw/XawInit.h" >&5
+echo "configure:9232: checking for X11/Xaw/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9206 "configure"
+#line 9235 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9233,15 +9262,15 @@ fi
   else
             ac_safe=`echo "X11/$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/$athena_variant/XawInit.h""... $ac_c" 1>&6
-echo "configure:9237: checking for X11/$athena_variant/XawInit.h" >&5
+echo "configure:9266: checking for X11/$athena_variant/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9240 "configure"
+#line 9269 "configure"
 #include "confdefs.h"
 #include <X11/$athena_variant/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9245: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9274: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9258,15 +9287,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "X11/$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/$athena_variant/ThreeD.h""... $ac_c" 1>&6
-echo "configure:9262: checking for X11/$athena_variant/ThreeD.h" >&5
+echo "configure:9291: checking for X11/$athena_variant/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9265 "configure"
+#line 9294 "configure"
 #include "confdefs.h"
 #include <X11/$athena_variant/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9270: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9299: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9294,15 +9323,15 @@ fi
         if test -z "$athena_h_path"; then
       ac_safe=`echo "$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $athena_variant/XawInit.h""... $ac_c" 1>&6
-echo "configure:9298: checking for $athena_variant/XawInit.h" >&5
+echo "configure:9327: checking for $athena_variant/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9301 "configure"
+#line 9330 "configure"
 #include "confdefs.h"
 #include <$athena_variant/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9306: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9319,15 +9348,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $athena_variant/ThreeD.h""... $ac_c" 1>&6
-echo "configure:9323: checking for $athena_variant/ThreeD.h" >&5
+echo "configure:9352: checking for $athena_variant/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9326 "configure"
+#line 9355 "configure"
 #include "confdefs.h"
 #include <$athena_variant/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9331: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9360: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9356,15 +9385,15 @@ fi
         if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then
       ac_safe=`echo "X11/Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw3d/XawInit.h""... $ac_c" 1>&6
-echo "configure:9360: checking for X11/Xaw3d/XawInit.h" >&5
+echo "configure:9389: checking for X11/Xaw3d/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9363 "configure"
+#line 9392 "configure"
 #include "confdefs.h"
 #include <X11/Xaw3d/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9368: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9397: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9381,15 +9410,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "X11/Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw3d/ThreeD.h""... $ac_c" 1>&6
-echo "configure:9385: checking for X11/Xaw3d/ThreeD.h" >&5
+echo "configure:9414: checking for X11/Xaw3d/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9388 "configure"
+#line 9417 "configure"
 #include "confdefs.h"
 #include <X11/Xaw3d/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9393: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9422: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9421,15 +9450,15 @@ fi
         if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then
       ac_safe=`echo "Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xaw3d/XawInit.h""... $ac_c" 1>&6
-echo "configure:9425: checking for Xaw3d/XawInit.h" >&5
+echo "configure:9454: checking for Xaw3d/XawInit.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9428 "configure"
+#line 9457 "configure"
 #include "confdefs.h"
 #include <Xaw3d/XawInit.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9433: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9446,15 +9475,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xaw3d/ThreeD.h""... $ac_c" 1>&6
-echo "configure:9450: checking for Xaw3d/ThreeD.h" >&5
+echo "configure:9479: checking for Xaw3d/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9453 "configure"
+#line 9482 "configure"
 #include "confdefs.h"
 #include <Xaw3d/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9458: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9487: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9486,15 +9515,15 @@ fi
             if test -z "$athena_h_path"; then
       ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6
-echo "configure:9490: checking for X11/Xaw/ThreeD.h" >&5
+echo "configure:9519: checking for X11/Xaw/ThreeD.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9493 "configure"
+#line 9522 "configure"
 #include "confdefs.h"
 #include <X11/Xaw/ThreeD.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9527: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9533,15 +9562,15 @@ fi
 if test "$with_x11" = "yes"; then
     ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6
-echo "configure:9537: checking for Xm/Xm.h" >&5
+echo "configure:9566: checking for Xm/Xm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9540 "configure"
+#line 9569 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9545: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9574: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9558,12 +9587,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   
 echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6
-echo "configure:9562: checking for XmStringFree in -lXm" >&5
+echo "configure:9591: checking for XmStringFree in -lXm" >&5
 ac_lib_var=`echo Xm'_'XmStringFree | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXm "
 cat > conftest.$ac_ext <<EOF
-#line 9567 "configure"
+#line 9596 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9574,7 +9603,7 @@ int main() {
 XmStringFree()
 ; return 0; }
 EOF
-if { (eval echo configure:9578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9603,9 +9632,9 @@ fi
 
   if test "$have_motif" = "yes"; then
         echo $ac_n "checking for Lesstif""... $ac_c" 1>&6
-echo "configure:9607: checking for Lesstif" >&5
+echo "configure:9636: checking for Lesstif" >&5
     cat > conftest.$ac_ext <<EOF
-#line 9609 "configure"
+#line 9638 "configure"
 #include "confdefs.h"
 #include <Xm/Xm.h>
 #ifdef LESSTIF_VERSION
@@ -9629,8 +9658,8 @@ rm -f conftest*
 fi 
 
 case "$opsys" in
-  *linux* )  lucid_prefers_motif = "no"  ;;
-  * )        lucid_prefers_motif = "yes" ;;
+  *linux* )  lucid_prefers_motif="no"  ;;
+  * )        lucid_prefers_motif="yes" ;;
 esac
 
 case "$with_menubars" in "" | "yes" | "athena" )
@@ -10051,7 +10080,7 @@ fi
 
 if test "$with_mule" = "yes" ; then
   echo "checking for Mule-related features" 1>&6
-echo "configure:10055: checking for Mule-related features" >&5
+echo "configure:10084: checking for Mule-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining MULE
 EOF
@@ -10076,15 +10105,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:10080: checking for $ac_hdr" >&5
+echo "configure:10109: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10083 "configure"
+#line 10112 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10088: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10117: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10115,12 +10144,12 @@ done
 
   
 echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6
-echo "configure:10119: checking for strerror in -lintl" >&5
+echo "configure:10148: checking for strerror in -lintl" >&5
 ac_lib_var=`echo intl'_'strerror | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lintl "
 cat > conftest.$ac_ext <<EOF
-#line 10124 "configure"
+#line 10153 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10131,7 +10160,7 @@ int main() {
 strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:10135: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
 
 
   echo "checking for Mule input methods" 1>&6
-echo "configure:10168: checking for Mule input methods" >&5
+echo "configure:10197: checking for Mule input methods" >&5
         case "$with_xim" in "" | "yes" )
     echo "checking for XIM" 1>&6
-echo "configure:10171: checking for XIM" >&5
+echo "configure:10200: checking for XIM" >&5
     
 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6
-echo "configure:10174: checking for XOpenIM in -lX11" >&5
+echo "configure:10203: checking for XOpenIM in -lX11" >&5
 ac_lib_var=`echo X11'_'XOpenIM | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lX11 "
 cat > conftest.$ac_ext <<EOF
-#line 10179 "configure"
+#line 10208 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10186,7 +10215,7 @@ int main() {
 XOpenIM()
 ; return 0; }
 EOF
-if { (eval echo configure:10190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
             if test "$need_motif $have_lesstif" = "yes no"; then
       
 echo $ac_n "checking for XmImMbLookupString in -lXm""... $ac_c" 1>&6
-echo "configure:10214: checking for XmImMbLookupString in -lXm" >&5
+echo "configure:10243: checking for XmImMbLookupString in -lXm" >&5
 ac_lib_var=`echo Xm'_'XmImMbLookupString | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXm "
 cat > conftest.$ac_ext <<EOF
-#line 10219 "configure"
+#line 10248 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10226,7 +10255,7 @@ int main() {
 XmImMbLookupString()
 ; return 0; }
 EOF
-if { (eval echo configure:10230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
     elif test "$have_motif $have_lesstif $with_xim" = "yes no no"; then
       
 echo $ac_n "checking for XmImMbLookupString in -lXm""... $ac_c" 1>&6
-echo "configure:10253: checking for XmImMbLookupString in -lXm" >&5
+echo "configure:10282: checking for XmImMbLookupString in -lXm" >&5
 ac_lib_var=`echo Xm'_'XmImMbLookupString | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lXm "
 cat > conftest.$ac_ext <<EOF
-#line 10258 "configure"
+#line 10287 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10265,7 +10294,7 @@ int main() {
 XmImMbLookupString()
 ; return 0; }
 EOF
-if { (eval echo configure:10269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10330,15 +10359,15 @@ EOF
 
     if test "$with_xfs" = "yes" ; then
     echo "checking for XFontSet" 1>&6
-echo "configure:10334: checking for XFontSet" >&5
+echo "configure:10363: checking for XFontSet" >&5
     
 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6
-echo "configure:10337: checking for XmbDrawString in -lX11" >&5
+echo "configure:10366: checking for XmbDrawString in -lX11" >&5
 ac_lib_var=`echo X11'_'XmbDrawString | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lX11 "
 cat > conftest.$ac_ext <<EOF
-#line 10342 "configure"
+#line 10371 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10349,7 +10378,7 @@ int main() {
 XmbDrawString()
 ; return 0; }
 EOF
-if { (eval echo configure:10353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10389,15 +10418,15 @@ EOF
     test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support
   test -z "$with_wnn" && { ac_safe=`echo "wnn/jllib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for wnn/jllib.h""... $ac_c" 1>&6
-echo "configure:10393: checking for wnn/jllib.h" >&5
+echo "configure:10422: checking for wnn/jllib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10396 "configure"
+#line 10425 "configure"
 #include "confdefs.h"
 #include <wnn/jllib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10401: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10430: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
  }
     test -z "$with_wnn" && { ac_safe=`echo "wnn/commonhd.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for wnn/commonhd.h""... $ac_c" 1>&6
-echo "configure:10424: checking for wnn/commonhd.h" >&5
+echo "configure:10453: checking for wnn/commonhd.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10427 "configure"
+#line 10456 "configure"
 #include "confdefs.h"
 #include <wnn/commonhd.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10432: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10461: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
     for ac_func in crypt
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:10457: checking for $ac_func" >&5
+echo "configure:10486: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10460 "configure"
+#line 10489 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -10479,7 +10508,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -10508,12 +10537,12 @@ done
 
     test "$ac_cv_func_crypt" != "yes" && { 
 echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:10512: checking for crypt in -lcrypt" >&5
+echo "configure:10541: checking for crypt in -lcrypt" >&5
 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lcrypt "
 cat > conftest.$ac_ext <<EOF
-#line 10517 "configure"
+#line 10546 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10524,7 +10553,7 @@ int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:10528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
     if test -z "$with_wnn" -o "$with_wnn" = "yes"; then
     
 echo $ac_n "checking for jl_dic_list_e in -lwnn""... $ac_c" 1>&6
-echo "configure:10563: checking for jl_dic_list_e in -lwnn" >&5
+echo "configure:10592: checking for jl_dic_list_e in -lwnn" >&5
 ac_lib_var=`echo wnn'_'jl_dic_list_e | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lwnn "
 cat > conftest.$ac_ext <<EOF
-#line 10568 "configure"
+#line 10597 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10575,7 +10604,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:10579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10593,12 +10622,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for jl_dic_list_e in -lwnn4""... $ac_c" 1>&6
-echo "configure:10597: checking for jl_dic_list_e in -lwnn4" >&5
+echo "configure:10626: checking for jl_dic_list_e in -lwnn4" >&5
 ac_lib_var=`echo wnn4'_'jl_dic_list_e | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lwnn4 "
 cat > conftest.$ac_ext <<EOF
-#line 10602 "configure"
+#line 10631 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10609,7 +10638,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:10613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10642: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10627,12 +10656,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for jl_dic_list_e in -lwnn6""... $ac_c" 1>&6
-echo "configure:10631: checking for jl_dic_list_e in -lwnn6" >&5
+echo "configure:10660: checking for jl_dic_list_e in -lwnn6" >&5
 ac_lib_var=`echo wnn6'_'jl_dic_list_e | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lwnn6 "
 cat > conftest.$ac_ext <<EOF
-#line 10636 "configure"
+#line 10665 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10643,7 +10672,7 @@ int main() {
 jl_dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:10647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10661,12 +10690,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for dic_list_e in -lwnn6_fromsrc""... $ac_c" 1>&6
-echo "configure:10665: checking for dic_list_e in -lwnn6_fromsrc" >&5
+echo "configure:10694: checking for dic_list_e in -lwnn6_fromsrc" >&5
 ac_lib_var=`echo wnn6_fromsrc'_'dic_list_e | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lwnn6_fromsrc "
 cat > conftest.$ac_ext <<EOF
-#line 10670 "configure"
+#line 10699 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10677,7 +10706,7 @@ int main() {
 dic_list_e()
 ; return 0; }
 EOF
-if { (eval echo configure:10681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10725,12 +10754,12 @@ EOF
     if test "$with_wnn6" != "no"; then
       
 echo $ac_n "checking for jl_fi_dic_list in -l$libwnn""... $ac_c" 1>&6
-echo "configure:10729: checking for jl_fi_dic_list in -l$libwnn" >&5
+echo "configure:10758: checking for jl_fi_dic_list in -l$libwnn" >&5
 ac_lib_var=`echo $libwnn'_'jl_fi_dic_list | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$libwnn "
 cat > conftest.$ac_ext <<EOF
-#line 10734 "configure"
+#line 10763 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10741,7 +10770,7 @@ int main() {
 jl_fi_dic_list()
 ; return 0; }
 EOF
-if { (eval echo configure:10745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10776,15 +10805,15 @@ EOF
   if test "$with_canna" != "no"; then
     ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6
-echo "configure:10780: checking for canna/jrkanji.h" >&5
+echo "configure:10809: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10783 "configure"
+#line 10812 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10788: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10817: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
     c_switch_site="$c_switch_site -I/usr/local/canna/include"
     ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6
-echo "configure:10815: checking for canna/jrkanji.h" >&5
+echo "configure:10844: checking for canna/jrkanji.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10818 "configure"
+#line 10847 "configure"
 #include "confdefs.h"
 #include <canna/jrkanji.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10823: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
   test -z "$with_canna" && { ac_safe=`echo "canna/RK.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for canna/RK.h""... $ac_c" 1>&6
-echo "configure:10851: checking for canna/RK.h" >&5
+echo "configure:10880: checking for canna/RK.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10854 "configure"
+#line 10883 "configure"
 #include "confdefs.h"
 #include <canna/RK.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10859: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6
-echo "configure:10882: checking for RkBgnBun in -lRKC" >&5
+echo "configure:10911: checking for RkBgnBun in -lRKC" >&5
 ac_lib_var=`echo RKC'_'RkBgnBun | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lRKC "
 cat > conftest.$ac_ext <<EOF
-#line 10887 "configure"
+#line 10916 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10894,7 +10923,7 @@ int main() {
 RkBgnBun()
 ; return 0; }
 EOF
-if { (eval echo configure:10898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
  }
   test -z "$with_canna" && { 
 echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6
-echo "configure:10921: checking for jrKanjiControl in -lcanna" >&5
+echo "configure:10950: checking for jrKanjiControl in -lcanna" >&5
 ac_lib_var=`echo canna'_'jrKanjiControl | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lcanna "
 cat > conftest.$ac_ext <<EOF
-#line 10926 "configure"
+#line 10955 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10933,7 +10962,7 @@ int main() {
 jrKanjiControl()
 ; return 0; }
 EOF
-if { (eval echo configure:10937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10966: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10982,12 +11011,12 @@ if test "$need_motif" = "yes" ; then
   libs_x="-lXm $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lXm\" to \$libs_x"; fi
     
 echo $ac_n "checking for layout_object_getvalue in -li18n""... $ac_c" 1>&6
-echo "configure:10986: checking for layout_object_getvalue in -li18n" >&5
+echo "configure:11015: checking for layout_object_getvalue in -li18n" >&5
 ac_lib_var=`echo i18n'_'layout_object_getvalue | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -li18n "
 cat > conftest.$ac_ext <<EOF
-#line 10991 "configure"
+#line 11020 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10998,7 +11027,7 @@ int main() {
 layout_object_getvalue()
 ; return 0; }
 EOF
-if { (eval echo configure:11002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
 for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp ftime getaddrinfo gethostname getnameinfo getpagesize gettimeofday getcwd getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strerror tzset ulimit usleep waitpid vsnprintf fsync ftruncate umask
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11089: checking for $ac_func" >&5
+echo "configure:11118: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11092 "configure"
+#line 11121 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -11111,7 +11140,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
 for ac_func in getpt _getpty grantpt unlockpt ptsname killpg tcgetpgrp
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11156: checking for $ac_func" >&5
+echo "configure:11185: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11159 "configure"
+#line 11188 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -11178,7 +11207,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -11207,10 +11236,10 @@ done
 
 
 echo $ac_n "checking for openpty""... $ac_c" 1>&6
-echo "configure:11211: checking for openpty" >&5
+echo "configure:11240: checking for openpty" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11214 "configure"
+#line 11243 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char openpty(); below.  */
@@ -11233,7 +11262,7 @@ openpty();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_openpty=yes"
 else
@@ -11252,12 +11281,12 @@ else
 
   
 echo $ac_n "checking for openpty in -lutil""... $ac_c" 1>&6
-echo "configure:11256: checking for openpty in -lutil" >&5
+echo "configure:11285: checking for openpty in -lutil" >&5
 ac_lib_var=`echo util'_'openpty | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lutil "
 cat > conftest.$ac_ext <<EOF
-#line 11261 "configure"
+#line 11290 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11268,7 +11297,7 @@ int main() {
 openpty()
 ; return 0; }
 EOF
-if { (eval echo configure:11272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11303,15 +11332,15 @@ EOF
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11307: checking for $ac_hdr" >&5
+echo "configure:11336: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11310 "configure"
+#line 11339 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11315: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11344: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11347,15 +11376,15 @@ for ac_hdr in stropts.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11351: checking for $ac_hdr" >&5
+echo "configure:11380: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11354 "configure"
+#line 11383 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11359: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11388: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11388,10 +11417,10 @@ if test "$ac_cv_header_stropts_h" = "yes"; then
   for ac_func in isastream
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11392: checking for $ac_func" >&5
+echo "configure:11421: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11395 "configure"
+#line 11424 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -11414,7 +11443,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -11445,15 +11474,15 @@ done
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11449: checking for $ac_hdr" >&5
+echo "configure:11478: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11452 "configure"
+#line 11481 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11457: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11486: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11490,10 +11519,10 @@ extra_objs="$extra_objs realpath.o" &&  if test "$extra_verbose" = "yes"; then
 for ac_func in getloadavg
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11494: checking for $ac_func" >&5
+echo "configure:11523: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11497 "configure"
+#line 11526 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -11516,7 +11545,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -11549,15 +11578,15 @@ if test "$ac_cv_func_getloadavg" = "yes"; then
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11553: checking for $ac_hdr" >&5
+echo "configure:11582: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11556 "configure"
+#line 11585 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11561: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11590: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11593,12 +11622,12 @@ else
 
     
 echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6
-echo "configure:11597: checking for kstat_open in -lkstat" >&5
+echo "configure:11626: checking for kstat_open in -lkstat" >&5
 ac_lib_var=`echo kstat'_'kstat_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lkstat "
 cat > conftest.$ac_ext <<EOF
-#line 11602 "configure"
+#line 11631 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11609,7 +11638,7 @@ int main() {
 kstat_open()
 ; return 0; }
 EOF
-if { (eval echo configure:11613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11642: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11648: checking for $ac_hdr" >&5
+echo "configure:11677: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11651 "configure"
+#line 11680 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11656: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11685: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11684,12 +11713,12 @@ done
 
     
 echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6
-echo "configure:11688: checking for kvm_read in -lkvm" >&5
+echo "configure:11717: checking for kvm_read in -lkvm" >&5
 ac_lib_var=`echo kvm'_'kvm_read | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lkvm "
 cat > conftest.$ac_ext <<EOF
-#line 11693 "configure"
+#line 11722 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11700,7 +11729,7 @@ int main() {
 kvm_read()
 ; return 0; }
 EOF
-if { (eval echo configure:11704: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
 fi
 
 echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6
-echo "configure:11738: checking whether netdb declares h_errno" >&5
+echo "configure:11767: checking whether netdb declares h_errno" >&5
 cat > conftest.$ac_ext <<EOF
-#line 11740 "configure"
+#line 11769 "configure"
 #include "confdefs.h"
 #include <netdb.h>
 int main() {
 return h_errno;
 ; return 0; }
 EOF
-if { (eval echo configure:11747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
    { test "$extra_verbose" = "yes" && cat << \EOF
 rm -f conftest*
 
 echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6
-echo "configure:11767: checking for sigsetjmp" >&5
+echo "configure:11796: checking for sigsetjmp" >&5
 cat > conftest.$ac_ext <<EOF
-#line 11769 "configure"
+#line 11798 "configure"
 #include "confdefs.h"
 #include <setjmp.h>
 int main() {
 sigjmp_buf bar; sigsetjmp (bar, 0);
 ; return 0; }
 EOF
-if { (eval echo configure:11776: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
    { test "$extra_verbose" = "yes" && cat << \EOF
 rm -f conftest*
 
 echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6
-echo "configure:11796: checking whether localtime caches TZ" >&5
+echo "configure:11825: checking whether localtime caches TZ" >&5
 
 if test "$ac_cv_func_tzset" = "yes"; then
 cat > conftest.$ac_ext <<EOF
-#line 11800 "configure"
+#line 11829 "configure"
 #include "confdefs.h"
 #include <time.h>
 #if STDC_HEADERS
@@ -11831,7 +11860,7 @@ main()
   exit (0);
 }
 EOF
-if { (eval echo configure:11835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:11864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   emacs_cv_localtime_cache=no
 else
@@ -11861,9 +11890,9 @@ fi
 
 if test "$HAVE_TIMEVAL" = "yes"; then
 echo $ac_n "checking whether gettimeofday accepts one or two arguments""... $ac_c" 1>&6
-echo "configure:11865: checking whether gettimeofday accepts one or two arguments" >&5
+echo "configure:11894: checking whether gettimeofday accepts one or two arguments" >&5
 cat > conftest.$ac_ext <<EOF
-#line 11867 "configure"
+#line 11896 "configure"
 #include "confdefs.h"
 
 #ifdef TIME_WITH_SYS_TIME
@@ -11884,7 +11913,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:11888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""two" 1>&6
 else
 
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:11910: checking for inline" >&5
+echo "configure:11939: checking for inline" >&5
 
 ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 11915 "configure"
+#line 11944 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:11922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11951: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -11959,17 +11988,17 @@ if test "$__DECC" != "yes"; then
   # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:11963: checking for working alloca.h" >&5
+echo "configure:11992: checking for working alloca.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11966 "configure"
+#line 11995 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:11973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -11993,10 +12022,10 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:11997: checking for alloca" >&5
+echo "configure:12026: checking for alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12000 "configure"
+#line 12029 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -12024,7 +12053,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:12028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -12063,10 +12092,10 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:12067: checking whether alloca needs Cray hooks" >&5
+echo "configure:12096: checking whether alloca needs Cray hooks" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12070 "configure"
+#line 12099 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -12090,10 +12119,10 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12094: checking for $ac_func" >&5
+echo "configure:12123: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12097 "configure"
+#line 12126 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -12116,7 +12145,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -12146,10 +12175,10 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:12150: checking stack direction for C alloca" >&5
+echo "configure:12179: checking stack direction for C alloca" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12153 "configure"
+#line 12182 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -12168,7 +12197,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:12172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:12201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_c_stack_direction=1
 else
 
 ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
-echo "configure:12202: checking for vfork.h" >&5
+echo "configure:12231: checking for vfork.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12205 "configure"
+#line 12234 "configure"
 #include "confdefs.h"
 #include <vfork.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12239: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12234,10 +12263,10 @@ else
 fi
 
 echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:12238: checking for working vfork" >&5
+echo "configure:12267: checking for working vfork" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12241 "configure"
+#line 12270 "configure"
 #include "confdefs.h"
 /* Thanks to Paul Eggert for this test.  */
 #include <stdio.h>
@@ -12332,7 +12361,7 @@ main() {
   }
 }
 EOF
-if { (eval echo configure:12336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:12365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_func_vfork_works=yes
 else
 
 
 echo $ac_n "checking for working strcoll""... $ac_c" 1>&6
-echo "configure:12362: checking for working strcoll" >&5
+echo "configure:12391: checking for working strcoll" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12365 "configure"
+#line 12394 "configure"
 #include "confdefs.h"
 #include <string.h>
 main ()
@@ -12371,7 +12400,7 @@ main ()
        strcoll ("123", "456") >= 0);
 }
 EOF
-if { (eval echo configure:12375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:12404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_func_strcoll_works=yes
 else
 for ac_func in getpgrp
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12403: checking for $ac_func" >&5
+echo "configure:12432: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12406 "configure"
+#line 12435 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -12425,7 +12454,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
 done
 
 echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6
-echo "configure:12457: checking whether getpgrp takes no argument" >&5
+echo "configure:12486: checking whether getpgrp takes no argument" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12460 "configure"
+#line 12489 "configure"
 #include "confdefs.h"
 
 /*
@@ -12511,7 +12540,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:12515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:12544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   ac_cv_func_getpgrp_void=yes
 else
 
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:12542: checking for working mmap" >&5
+echo "configure:12571: checking for working mmap" >&5
 case "$opsys" in ultrix* ) have_mmap=no ;; *)
 cat > conftest.$ac_ext <<EOF
-#line 12545 "configure"
+#line 12574 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #include <unistd.h>
@@ -12574,7 +12603,7 @@ int main (int argc, char *argv[])
   return 1;
 }
 EOF
-if { (eval echo configure:12578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:12607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   have_mmap=yes
 else
@@ -12603,9 +12632,9 @@ test "$GNU_MALLOC" != "yes" -a "$have_mmap" != "yes" && rel_alloc=no
 if test "$rel_alloc $have_mmap" = "default yes"; then
   if test "$doug_lea_malloc" = "yes"; then
         echo $ac_n "checking for M_MMAP_THRESHOLD""... $ac_c" 1>&6
-echo "configure:12607: checking for M_MMAP_THRESHOLD" >&5
+echo "configure:12636: checking for M_MMAP_THRESHOLD" >&5
     cat > conftest.$ac_ext <<EOF
-#line 12609 "configure"
+#line 12638 "configure"
 #include "confdefs.h"
 #include <malloc.h>
 int main() {
@@ -12617,7 +12646,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:12621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12650: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   rel_alloc=no; echo "$ac_t""yes" 1>&6;
 else
@@ -12642,15 +12671,15 @@ EOF
 
 ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for termios.h""... $ac_c" 1>&6
-echo "configure:12646: checking for termios.h" >&5
+echo "configure:12675: checking for termios.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12649 "configure"
+#line 12678 "configure"
 #include "confdefs.h"
 #include <termios.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12654: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12683: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12693,15 +12722,15 @@ else
   echo "$ac_t""no" 1>&6
 ac_safe=`echo "termio.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for termio.h""... $ac_c" 1>&6
-echo "configure:12697: checking for termio.h" >&5
+echo "configure:12726: checking for termio.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12700 "configure"
+#line 12729 "configure"
 #include "confdefs.h"
 #include <termio.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12705: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12734: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
 
 echo $ac_n "checking for socket""... $ac_c" 1>&6
-echo "configure:12737: checking for socket" >&5
+echo "configure:12766: checking for socket" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12740 "configure"
+#line 12769 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket(); below.  */
@@ -12759,7 +12788,7 @@ socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_socket=yes"
 else
@@ -12774,15 +12803,15 @@ if eval "test \"`echo '$ac_cv_func_'socket`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "netinet/in.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for netinet/in.h""... $ac_c" 1>&6
-echo "configure:12778: checking for netinet/in.h" >&5
+echo "configure:12807: checking for netinet/in.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12781 "configure"
+#line 12810 "configure"
 #include "confdefs.h"
 #include <netinet/in.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12786: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12815: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12799,15 +12828,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "arpa/inet.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for arpa/inet.h""... $ac_c" 1>&6
-echo "configure:12803: checking for arpa/inet.h" >&5
+echo "configure:12832: checking for arpa/inet.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12806 "configure"
+#line 12835 "configure"
 #include "confdefs.h"
 #include <arpa/inet.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12811: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12832,9 +12861,9 @@ EOF
 }
 
       echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6
-echo "configure:12836: checking "for sun_len member in struct sockaddr_un"" >&5
+echo "configure:12865: checking "for sun_len member in struct sockaddr_un"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 12838 "configure"
+#line 12867 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -12845,7 +12874,7 @@ int main() {
 static struct sockaddr_un x; x.sun_len = 1;
 ; return 0; }
 EOF
-if { (eval echo configure:12849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_SOCKADDR_SUN_LEN
@@ -12863,9 +12892,9 @@ else
 fi
 rm -f conftest*
       echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6
-echo "configure:12867: checking "for ip_mreq struct in netinet/in.h"" >&5
+echo "configure:12896: checking "for ip_mreq struct in netinet/in.h"" >&5
       cat > conftest.$ac_ext <<EOF
-#line 12869 "configure"
+#line 12898 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -12875,7 +12904,7 @@ int main() {
 static struct ip_mreq x;
 ; return 0; }
 EOF
-if { (eval echo configure:12879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_MULTICAST
 
 
 echo $ac_n "checking for msgget""... $ac_c" 1>&6
-echo "configure:12910: checking for msgget" >&5
+echo "configure:12939: checking for msgget" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12913 "configure"
+#line 12942 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char msgget(); below.  */
@@ -12932,7 +12961,7 @@ msgget();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_msgget=yes"
 else
@@ -12947,15 +12976,15 @@ if eval "test \"`echo '$ac_cv_func_'msgget`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "sys/ipc.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/ipc.h""... $ac_c" 1>&6
-echo "configure:12951: checking for sys/ipc.h" >&5
+echo "configure:12980: checking for sys/ipc.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12954 "configure"
+#line 12983 "configure"
 #include "confdefs.h"
 #include <sys/ipc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12959: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12988: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12972,15 +13001,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "sys/msg.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/msg.h""... $ac_c" 1>&6
-echo "configure:12976: checking for sys/msg.h" >&5
+echo "configure:13005: checking for sys/msg.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12979 "configure"
+#line 13008 "configure"
 #include "confdefs.h"
 #include <sys/msg.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12984: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13013: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
 ac_safe=`echo "dirent.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for dirent.h""... $ac_c" 1>&6
-echo "configure:13022: checking for dirent.h" >&5
+echo "configure:13051: checking for dirent.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13025 "configure"
+#line 13054 "configure"
 #include "confdefs.h"
 #include <dirent.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13030: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13059: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -13053,15 +13082,15 @@ else
   echo "$ac_t""no" 1>&6
 ac_safe=`echo "sys/dir.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for sys/dir.h""... $ac_c" 1>&6
-echo "configure:13057: checking for sys/dir.h" >&5
+echo "configure:13086: checking for sys/dir.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13060 "configure"
+#line 13089 "configure"
 #include "confdefs.h"
 #include <sys/dir.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13065: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
 ac_safe=`echo "nlist.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for nlist.h""... $ac_c" 1>&6
-echo "configure:13098: checking for nlist.h" >&5
+echo "configure:13127: checking for nlist.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13101 "configure"
+#line 13130 "configure"
 #include "confdefs.h"
 #include <nlist.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13106: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13135: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
 
 echo "checking "for sound support"" 1>&6
-echo "configure:13136: checking "for sound support"" >&5
+echo "configure:13165: checking "for sound support"" >&5
 test -z "$with_native_sound" -a -n "$native_sound_lib" && with_native_sound=yes
 
 if test "$with_native_sound" != "no"; then
     if test -n "$native_sound_lib"; then
     ac_safe=`echo "multimedia/audio_device.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for multimedia/audio_device.h""... $ac_c" 1>&6
-echo "configure:13143: checking for multimedia/audio_device.h" >&5
+echo "configure:13172: checking for multimedia/audio_device.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13146 "configure"
+#line 13175 "configure"
 #include "confdefs.h"
 #include <multimedia/audio_device.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13151: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
       if test -z "$native_sound_lib"; then
         
 echo $ac_n "checking for ALopenport in -laudio""... $ac_c" 1>&6
-echo "configure:13207: checking for ALopenport in -laudio" >&5
+echo "configure:13236: checking for ALopenport in -laudio" >&5
 ac_lib_var=`echo audio'_'ALopenport | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -laudio "
 cat > conftest.$ac_ext <<EOF
-#line 13212 "configure"
+#line 13241 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13219,7 +13248,7 @@ int main() {
 ALopenport()
 ; return 0; }
 EOF
-if { (eval echo configure:13223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
       if test -z "$native_sound_lib"; then
        
 echo $ac_n "checking for AOpenAudio in -lAlib""... $ac_c" 1>&6
-echo "configure:13254: checking for AOpenAudio in -lAlib" >&5
+echo "configure:13283: checking for AOpenAudio in -lAlib" >&5
 ac_lib_var=`echo Alib'_'AOpenAudio | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lAlib "
 cat > conftest.$ac_ext <<EOF
-#line 13259 "configure"
+#line 13288 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13266,7 +13295,7 @@ int main() {
 AOpenAudio()
 ; return 0; }
 EOF
-if { (eval echo configure:13270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13299: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
     for dir in "machine" "sys" "linux"; do
       ac_safe=`echo "${dir}/soundcard.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ${dir}/soundcard.h""... $ac_c" 1>&6
-echo "configure:13315: checking for ${dir}/soundcard.h" >&5
+echo "configure:13344: checking for ${dir}/soundcard.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13318 "configure"
+#line 13347 "configure"
 #include "confdefs.h"
 #include <${dir}/soundcard.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13323: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13352: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 if test "$with_nas_sound" != "no"; then
   ac_safe=`echo "audio/audiolib.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for audio/audiolib.h""... $ac_c" 1>&6
-echo "configure:13377: checking for audio/audiolib.h" >&5
+echo "configure:13406: checking for audio/audiolib.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13380 "configure"
+#line 13409 "configure"
 #include "confdefs.h"
 #include <audio/audiolib.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13385: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13414: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -13399,12 +13428,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   
     
 echo $ac_n "checking for AuOpenServer in -laudio""... $ac_c" 1>&6
-echo "configure:13403: checking for AuOpenServer in -laudio" >&5
+echo "configure:13432: checking for AuOpenServer in -laudio" >&5
 ac_lib_var=`echo audio'_'AuOpenServer | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -laudio "
 cat > conftest.$ac_ext <<EOF
-#line 13408 "configure"
+#line 13437 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13415,7 +13444,7 @@ int main() {
 AuOpenServer()
 ; return 0; }
 EOF
-if { (eval echo configure:13419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13454,7 +13483,7 @@ EOF
  fi
     libs_x="-laudio $libs_x" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-laudio\" to \$libs_x"; fi
             cat > conftest.$ac_ext <<EOF
-#line 13458 "configure"
+#line 13487 "configure"
 #include "confdefs.h"
 #include <audio/Xtutil.h>
 EOF
@@ -13485,7 +13514,7 @@ if test "$with_esd_sound" != "no"; then
   # Extract the first word of "esd-config", so it can be a program name with args.
 set dummy esd-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:13489: checking for $ac_word" >&5
+echo "configure:13518: checking for $ac_word" >&5
 
 if test -n "$have_esd_config"; then
   ac_cv_prog_have_esd_config="$have_esd_config" # Let the user override the test.
     c_switch_site="$c_switch_site `esd-config --cflags`" &&  if test "$extra_verbose" = "yes"; then echo "    Appending \"`esd-config --cflags`\" to \$c_switch_site"; fi
     LIBS="`esd-config --libs` $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"`esd-config --libs`\" to \$LIBS"; fi
     echo $ac_n "checking for esd_play_stream""... $ac_c" 1>&6
-echo "configure:13518: checking for esd_play_stream" >&5
+echo "configure:13547: checking for esd_play_stream" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13521 "configure"
+#line 13550 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char esd_play_stream(); below.  */
@@ -13540,7 +13569,7 @@ esd_play_stream();
 
 ; return 0; }
 EOF
-if { (eval echo configure:13544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_esd_play_stream=yes"
 else
@@ -13591,7 +13620,7 @@ test -z "$with_tty" && with_tty=yes
 
 if test "$with_tty" = "yes"  ; then
   echo "checking for TTY-related features" 1>&6
-echo "configure:13595: checking for TTY-related features" >&5
+echo "configure:13624: checking for TTY-related features" >&5
   { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_TTY
 EOF
@@ -13607,12 +13636,12 @@ EOF
     if test -z "$with_ncurses"; then
     
 echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:13611: checking for tgetent in -lncurses" >&5
+echo "configure:13640: checking for tgetent in -lncurses" >&5
 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lncurses "
 cat > conftest.$ac_ext <<EOF
-#line 13616 "configure"
+#line 13645 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13623,7 +13652,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:13627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13656: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13656,15 +13685,15 @@ EOF
 
     ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6
-echo "configure:13660: checking for ncurses/curses.h" >&5
+echo "configure:13689: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13663 "configure"
+#line 13692 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13668: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13697: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 
     ac_safe=`echo "ncurses/term.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ncurses/term.h""... $ac_c" 1>&6
-echo "configure:13690: checking for ncurses/term.h" >&5
+echo "configure:13719: checking for ncurses/term.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13693 "configure"
+#line 13722 "configure"
 #include "confdefs.h"
 #include <ncurses/term.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13698: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13727: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
       c_switch_site="$c_switch_site -I/usr/include/ncurses"
       ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6
-echo "configure:13728: checking for ncurses/curses.h" >&5
+echo "configure:13757: checking for ncurses/curses.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13731 "configure"
+#line 13760 "configure"
 #include "confdefs.h"
 #include <ncurses/curses.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13736: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13765: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
        for lib in curses termlib termcap; do
          
 echo $ac_n "checking for tgetent in -l$lib""... $ac_c" 1>&6
-echo "configure:13771: checking for tgetent in -l$lib" >&5
+echo "configure:13800: checking for tgetent in -l$lib" >&5
 ac_lib_var=`echo $lib'_'tgetent | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -l$lib "
 cat > conftest.$ac_ext <<EOF
-#line 13776 "configure"
+#line 13805 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13783,7 +13812,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:13787: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
     else       if test -n "$libs_termcap" -a "$opsys" = "openbsd"; then
                                 
 echo $ac_n "checking for tgoto in -ltermcap""... $ac_c" 1>&6
-echo "configure:13812: checking for tgoto in -ltermcap" >&5
+echo "configure:13841: checking for tgoto in -ltermcap" >&5
 ac_lib_var=`echo termcap'_'tgoto | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ltermcap "
 cat > conftest.$ac_ext <<EOF
-#line 13817 "configure"
+#line 13846 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13824,7 +13853,7 @@ int main() {
 tgoto()
 ; return 0; }
 EOF
-if { (eval echo configure:13828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
       else
        
 echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6
-echo "configure:13873: checking for tgetent in -lcurses" >&5
+echo "configure:13902: checking for tgetent in -lcurses" >&5
 ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lcurses "
 cat > conftest.$ac_ext <<EOF
-#line 13878 "configure"
+#line 13907 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13885,7 +13914,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:13889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13903,12 +13932,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
 else
   echo "$ac_t""no" 1>&6
 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
-echo "configure:13907: checking for tgetent in -ltermcap" >&5
+echo "configure:13936: checking for tgetent in -ltermcap" >&5
 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ltermcap "
 cat > conftest.$ac_ext <<EOF
-#line 13912 "configure"
+#line 13941 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -13919,7 +13948,7 @@ int main() {
 tgetent()
 ; return 0; }
 EOF
-if { (eval echo configure:13923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -13965,17 +13994,18 @@ EOF
 }
 
 
-    test -z "$with_gpm" && { ac_safe=`echo "gpm.h" | sed 'y%./+-%__p_%'`
+    if test "$with_gpm" != "no"; then
+    ac_safe=`echo "gpm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for gpm.h""... $ac_c" 1>&6
-echo "configure:13971: checking for gpm.h" >&5
+echo "configure:14001: checking for gpm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13974 "configure"
+#line 14004 "configure"
 #include "confdefs.h"
 #include <gpm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13979: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:14009: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 rm -f conftest*
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-  :
-else
-  echo "$ac_t""no" 1>&6
-with_gpm=no
-fi
- }
-  test -z "$with_gpm" && { 
+  
+      
 echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6
-echo "configure:14002: checking for Gpm_Open in -lgpm" >&5
+echo "configure:14027: checking for Gpm_Open in -lgpm" >&5
 ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lgpm "
 cat > conftest.$ac_ext <<EOF
-#line 14007 "configure"
+#line 14032 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14014,7 +14039,7 @@ int main() {
 Gpm_Open()
 ; return 0; }
 EOF
-if { (eval echo configure:14018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14028,15 +14053,19 @@ xe_check_libs=""
 
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then
   echo "$ac_t""yes" 1>&6
-  with_gpm=yes
+  have_gpm=yes
 else
   echo "$ac_t""no" 1>&6
-with_gpm=no
 fi
 
- }
-  if test "$with_gpm" = "yes"; then
-    { test "$extra_verbose" = "yes" && cat << \EOF
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    if test "$have_gpm" = "yes"; then
+      with_gpm=yes
+      { test "$extra_verbose" = "yes" && cat << \EOF
     Defining HAVE_GPM
 EOF
 cat >> confdefs.h <<\EOF
@@ -14044,10 +14073,15 @@ cat >> confdefs.h <<\EOF
 EOF
 }
 
-    extra_objs="$extra_objs gpmevent.o" &&  if test "$extra_verbose" = "yes"; then
+      extra_objs="$extra_objs gpmevent.o" &&  if test "$extra_verbose" = "yes"; then
    echo "    xemacs will be linked with \"gpmevent.o\""
  fi
-    LIBS="-lgpm $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lgpm\" to \$LIBS"; fi
+      LIBS="-lgpm $LIBS" &&  if test "$extra_verbose" = "yes"; then echo "    Prepending \"-lgpm\" to \$LIBS"; fi
+    elif test "$with_gpm" = "yes"; then
+      { echo "Error:" "GPM requested, but gpm.h or libgpm seems to be missing." >&2; exit 1; }
+    else
+      with_gpm=no
+    fi
   fi
 
 else   for feature in ncurses gpm; do
@@ -14064,20 +14098,20 @@ test "$with_x11" = "yes" -o "$with_tty" = "yes" -o "$need_event_unixoid" = "yes"
 
 test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \
   != "no no no" && echo "checking for database support" 1>&6
-echo "configure:14068: checking for database support" >&5
+echo "configure:14102: checking for database support" >&5
 
 if test "$with_database_gdbm $with_database_dbm" != "no no"; then
   ac_safe=`echo "ndbm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for ndbm.h""... $ac_c" 1>&6
-echo "configure:14073: checking for ndbm.h" >&5
+echo "configure:14107: checking for ndbm.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 14076 "configure"
+#line 14110 "configure"
 #include "confdefs.h"
 #include <ndbm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:14081: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:14115: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
 if test "$with_database_gdbm" != "no"; then
   
 echo $ac_n "checking for dbm_open in -lgdbm""... $ac_c" 1>&6
-echo "configure:14111: checking for dbm_open in -lgdbm" >&5
+echo "configure:14145: checking for dbm_open in -lgdbm" >&5
 ac_lib_var=`echo gdbm'_'dbm_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lgdbm "
 cat > conftest.$ac_ext <<EOF
-#line 14116 "configure"
+#line 14150 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14123,7 +14157,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:14127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
 
 if test "$with_database_dbm" != "no"; then
   echo $ac_n "checking for dbm_open""... $ac_c" 1>&6
-echo "configure:14155: checking for dbm_open" >&5
+echo "configure:14189: checking for dbm_open" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 14158 "configure"
+#line 14192 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dbm_open(); below.  */
@@ -14177,7 +14211,7 @@ dbm_open();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dbm_open=yes"
 else
@@ -14196,12 +14230,12 @@ else
 
     
 echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6
-echo "configure:14200: checking for dbm_open in -ldbm" >&5
+echo "configure:14234: checking for dbm_open in -ldbm" >&5
 ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldbm "
 cat > conftest.$ac_ext <<EOF
-#line 14205 "configure"
+#line 14239 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14212,7 +14246,7 @@ int main() {
 dbm_open()
 ; return 0; }
 EOF
-if { (eval echo configure:14216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14253,12 +14287,12 @@ EOF
 
 if test "$with_database_berkdb" != "no"; then
   echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6
-echo "configure:14257: checking for Berkeley db.h" >&5
+echo "configure:14291: checking for Berkeley db.h" >&5
   for header in "db/db.h" "db.h"; do
     case "$opsys" in
         *freebsd*)
     cat > conftest.$ac_ext <<EOF
-#line 14262 "configure"
+#line 14296 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -14274,7 +14308,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:14278: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14312: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   db_h_file="$header"; break
 else
@@ -14285,7 +14319,7 @@ rm -f conftest*
         ;;
         *)
     cat > conftest.$ac_ext <<EOF
-#line 14289 "configure"
+#line 14323 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -14307,7 +14341,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:14311: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   db_h_file="$header"; break
 else
@@ -14325,9 +14359,9 @@ rm -f conftest*
 
   if test "$with_database_berkdb" != "no"; then
     echo $ac_n "checking for Berkeley DB version""... $ac_c" 1>&6
-echo "configure:14329: checking for Berkeley DB version" >&5
+echo "configure:14363: checking for Berkeley DB version" >&5
     cat > conftest.$ac_ext <<EOF
-#line 14331 "configure"
+#line 14365 "configure"
 #include "confdefs.h"
 #include <$db_h_file>
 #if DB_VERSION_MAJOR > 1
@@ -14339,7 +14373,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
   egrep "yes" >/dev/null 2>&1; then
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 14343 "configure"
+#line 14377 "configure"
 #include "confdefs.h"
 #include <$db_h_file>
 #if DB_VERSION_MAJOR > 2
 rm -f conftest*
 
     echo $ac_n "checking for $dbfunc""... $ac_c" 1>&6
-echo "configure:14370: checking for $dbfunc" >&5
+echo "configure:14404: checking for $dbfunc" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 14373 "configure"
+#line 14407 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $dbfunc(); below.  */
@@ -14392,7 +14426,7 @@ $dbfunc();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$dbfunc=yes"
 else
@@ -14411,12 +14445,12 @@ else
 
     
 echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6
-echo "configure:14415: checking for $dbfunc in -ldb" >&5
+echo "configure:14449: checking for $dbfunc in -ldb" >&5
 ac_lib_var=`echo db'_'$dbfunc | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldb "
 cat > conftest.$ac_ext <<EOF
-#line 14420 "configure"
+#line 14454 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14427,7 +14461,7 @@ int main() {
 $dbfunc()
 ; return 0; }
 EOF
-if { (eval echo configure:14431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
 if test "$with_socks" = "yes"; then
   
 echo $ac_n "checking for SOCKSinit in -lsocks""... $ac_c" 1>&6
-echo "configure:14495: checking for SOCKSinit in -lsocks" >&5
+echo "configure:14529: checking for SOCKSinit in -lsocks" >&5
 ac_lib_var=`echo socks'_'SOCKSinit | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -lsocks "
 cat > conftest.$ac_ext <<EOF
-#line 14500 "configure"
+#line 14534 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14507,7 +14541,7 @@ int main() {
 SOCKSinit()
 ; return 0; }
 EOF
-if { (eval echo configure:14511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14562,7 +14596,7 @@ fi
 
 if test "$with_modules" != "no"; then
   echo "checking for module support" 1>&6
-echo "configure:14566: checking for module support" >&5
+echo "configure:14600: checking for module support" >&5
 
     if test "$with_msw" = "yes"; then
     have_dl=yes;
@@ -14578,15 +14612,15 @@ EOF
  ;;
       *)          ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6
-echo "configure:14582: checking for dlfcn.h" >&5
+echo "configure:14616: checking for dlfcn.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 14585 "configure"
+#line 14619 "configure"
 #include "confdefs.h"
 #include <dlfcn.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:14590: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:14624: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -14603,16 +14637,16 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   
            echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6
-echo "configure:14607: checking for dlopen in -lc" >&5
+echo "configure:14641: checking for dlopen in -lc" >&5
            cat > conftest.$ac_ext <<EOF
-#line 14609 "configure"
+#line 14643 "configure"
 #include "confdefs.h"
 #include <dlfcn.h>
 int main() {
              dlopen ("", 0);
 ; return 0; }
 EOF
-if { (eval echo configure:14616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
    have_dl=yes 
 else
@@ -14621,18 +14655,18 @@ else
   rm -rf conftest*
   
                echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:14625: checking for dlopen in -ldl" >&5
+echo "configure:14659: checking for dlopen in -ldl" >&5
                ac_save_LIBS="$LIBS"
                LIBS="-ldl $LIBS"
                cat > conftest.$ac_ext <<EOF
-#line 14629 "configure"
+#line 14663 "configure"
 #include "confdefs.h"
 #include <dlfcn.h>
 int main() {
                 dlopen ("", 0);
 ; return 0; }
 EOF
-if { (eval echo configure:14636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
    have_dl=yes 
 else
@@ -14661,12 +14695,12 @@ EOF
         else
            
 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "configure:14665: checking for shl_load in -ldld" >&5
+echo "configure:14699: checking for shl_load in -ldld" >&5
 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldld "
 cat > conftest.$ac_ext <<EOF
-#line 14670 "configure"
+#line 14704 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14677,7 +14711,7 @@ int main() {
 shl_load()
 ; return 0; }
 EOF
-if { (eval echo configure:14681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14704,12 +14738,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6
-echo "configure:14708: checking for dld_init in -ldld" >&5
+echo "configure:14742: checking for dld_init in -ldld" >&5
 ac_lib_var=`echo dld'_'dld_init | sed 'y%./+-%__p_%'`
 
 xe_check_libs=" -ldld "
 cat > conftest.$ac_ext <<EOF
-#line 14713 "configure"
+#line 14747 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -14720,7 +14754,7 @@ int main() {
 dld_init()
 ; return 0; }
 EOF
-if { (eval echo configure:14724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -14767,7 +14801,7 @@ xehost=$canonical
 xealias=$internal_configuration
 
 echo "checking how to build dynamic libraries for ${xehost}" 1>&6
-echo "configure:14771: checking how to build dynamic libraries for ${xehost}" >&5
+echo "configure:14805: checking how to build dynamic libraries for ${xehost}" >&5
 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts.
 case "$xehost" in
 *-*-linux-gnu*) ;;
@@ -14795,9 +14829,9 @@ if test "$GCC" = "yes"; then
   XEGCC=yes
 else
   echo $ac_n "checking checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:14799: checking checking whether we are using GNU C" >&5
+echo "configure:14833: checking checking whether we are using GNU C" >&5
   cat > conftest.$ac_ext <<EOF
-#line 14801 "configure"
+#line 14835 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -14819,7 +14853,7 @@ rm -f conftest*
 fi
 
 echo $ac_n "checking how to produce PIC code""... $ac_c" 1>&6
-echo "configure:14823: checking how to produce PIC code" >&5
+echo "configure:14857: checking how to produce PIC code" >&5
 wl=
 
 can_build_shared=yes
@@ -14920,18 +14954,18 @@ if test -n "$dll_cflags"; then
 
   # Check to make sure the dll_cflags actually works.
   echo $ac_n "checking if PIC flag ${dll_cflags} really works""... $ac_c" 1>&6
-echo "configure:14924: checking if PIC flag ${dll_cflags} really works" >&5
+echo "configure:14958: checking if PIC flag ${dll_cflags} really works" >&5
   save_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS $dll_cflags -DPIC"
   cat > conftest.$ac_ext <<EOF
-#line 14928 "configure"
+#line 14962 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:14935: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
     # On HP-UX, the stripped-down bundled CC doesn't accept +Z, but also
@@ -14962,7 +14996,7 @@ cc_produces_so=no
 xldf=
 xcldf=
 echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6
-echo "configure:14966: checking if C compiler can produce shared libraries" >&5
+echo "configure:15000: checking if C compiler can produce shared libraries" >&5
 if test "$XEGCC" = yes -o "$__ICC" = yes; then
   xcldf="-shared"
   xldf="-shared"
@@ -15013,14 +15047,14 @@ if test -n "$xcldf"; then
   xe_libs=
   ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5'
   cat > conftest.$ac_ext <<EOF
-#line 15017 "configure"
+#line 15051 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=0;
 ; return 0; }
 EOF
-if { (eval echo configure:15024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cc_produces_so=yes
 else
@@ -15045,7 +15079,7 @@ if test -z "$LTLD"; then
   if test "$XEGCC" = yes; then
     # Check if gcc -print-prog-name=ld gives a path.
     echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:15049: checking for ld used by GCC" >&5
+echo "configure:15083: checking for ld used by GCC" >&5
     ac_prog=`($CC -print-prog-name=ld) 2>&5`
     case "$ac_prog" in
     # Accept absolute paths.
@@ -15071,7 +15105,7 @@ echo "configure:15049: checking for ld used by GCC" >&5
     esac
   else
     echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:15075: checking for GNU ld" >&5
+echo "configure:15109: checking for GNU ld" >&5
   fi
 
   if test -z "$LTLD"; then
@@ -15109,7 +15143,7 @@ ld_dynamic_link_flags=
 
 # Check to see if it really is or isn't GNU ld.
 echo $ac_n "checking if the linker is GNU ld""... $ac_c" 1>&6
-echo "configure:15113: checking if the linker is GNU ld" >&5
+echo "configure:15147: checking if the linker is GNU ld" >&5
 # I'd rather use --version here, but apparently some GNU ld's only accept -v.
 if $LTLD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
   xe_gnu_ld=yes
@@ -15137,7 +15171,7 @@ else
   # OK - only NOW do we futz about with ld.
   # See if the linker supports building shared libraries.
   echo $ac_n "checking whether the linker supports shared libraries""... $ac_c" 1>&6
-echo "configure:15141: checking whether the linker supports shared libraries" >&5
+echo "configure:15175: checking whether the linker supports shared libraries" >&5
   dll_ld=$CC
   dll_ldflags=$LDFLAGS
   ld_shlibs=yes
@@ -15348,10 +15382,10 @@ EOF
     for ac_func in dlerror _dlerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15352: checking for $ac_func" >&5
+echo "configure:15386: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 15355 "configure"
+#line 15389 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -15374,7 +15408,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:15378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -15413,11 +15447,11 @@ done
 fi
 
 cat > conftest.$ac_ext <<EOF
-#line 15417 "configure"
+#line 15451 "configure"
 #include "confdefs.h"
 int main(int c,char *v[]){return 0;}
 EOF
-if { (eval echo configure:15421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
+if { (eval echo configure:15455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5
 then
   :
 else
@@ -15758,7 +15792,7 @@ done
 
 
 
-RECURSIVE_MAKE="\$(MAKE) \$(MFLAGS) CC='\$(CC)' CFLAGS='\$(CFLAGS)' LDFLAGS='\$(LDFLAGS)' CPPFLAGS='\$(CPPFLAGS)'"
+RECURSIVE_MAKE_ARGS="\$(MFLAGS) CC='\$(CC)' CFLAGS='\$(CFLAGS)' LDFLAGS='\$(LDFLAGS)' CPPFLAGS='\$(CPPFLAGS)'"
 
 
 
@@ -16544,7 +16578,7 @@ s%@ld_switch_all@%$ld_switch_all%g
 s%@ld_libs_general@%$ld_libs_general%g
 s%@ld_libs_window_system@%$ld_libs_window_system%g
 s%@ld_libs_all@%$ld_libs_all%g
-s%@RECURSIVE_MAKE@%$RECURSIVE_MAKE%g
+s%@RECURSIVE_MAKE_ARGS@%$RECURSIVE_MAKE_ARGS%g
 s%@native_sound_lib@%$native_sound_lib%g
 s%@sound_cflags@%$sound_cflags%g
 s%@dynodump_arch@%$dynodump_arch%g
index 8904f22..449f47c 100644 (file)
@@ -6,7 +6,7 @@ define([AC_INIT_NOTICE],
 #### Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
 #### Copyright (C) 1993-1995 Board of Trustees, University of Illinois.
 #### Copyright (C) 1996, 1997 Sun Microsystems, Inc.
-#### Copyright (C) 1995, 1996 Ben Wing.
+#### Copyright (C) 1995, 1996, 2005 Ben Wing.
 #### Copyright (C) 2000, 2001 Martin Buchholz.
 #### Copyright (C) 1998, 1999 J. Kean Johnston.
 
@@ -1589,6 +1589,7 @@ if test -z "$pdump"; then
   case "$opsys" in
     linux* )  pdump=yes ;;    dnl glibc 2.3.1 seems to hose unexec
     darwin )  pdump=yes ;;    dnl No "native" working dumper available
+    cygwin* ) pdump=yes ;;    dnl unexec is broken
     *)        pdump=no ;;
   esac
 fi
@@ -2096,7 +2097,9 @@ fi
 dnl Feed s&m crud to src/Makefile
 
 dnl Linux/powerpc needs the following magic for some reason
-test "$machine$opsys" = "powerpclinux" && start_flags="-T $srcdir/src/ppc.ldscript"
+dnl [Not needed with YellowDog 2.3 and causes link problems with YellowDog 3.0,
+dnl the two most popular PowerPC distributions.]
+dnl test "$machine$opsys" = "powerpclinux" && start_flags="-T $srcdir/src/ppc.ldscript"
 
 if test "$unexec" = "unexaix.o"; then
 dnl AIX needs various hacks to make static linking work.
@@ -2632,16 +2635,16 @@ if test "$with_gtk" != "no";then
       possible_version=`${possible} --version 2> /dev/null`
       if test "x${possible_version}" != "x"; then
               GTK_CONFIG="${possible}"
+             case "${possible_version}" in
+               1.0.*) AC_MSG_WARN([GTK 1.2 is required, please upgrade your version of GTK.]); with_gtk=no;;
+               1.3.*) AC_MSG_WARN([GTK 1.3 is not supported right now]); with_gtk=no;;
+               1.2.*)
+                       with_gtk=yes
+                       break
+                       ;;
+               *)     AC_MSG_WARN([Found unsupported version of GTK: $possible_version]);;
+             esac
       fi
-      case "${possible_version}" in
-        1.0.*) AC_MSG_WARN([GTK 1.2 is required, please upgrade your version of GTK.]); with_gtk=no;;
-        1.3.*) AC_MSG_WARN([GTK 1.3 is not supported right now]); with_gtk=no;;
-       1.2.*)
-               with_gtk=yes
-               break
-               ;;
-        *)     AC_MSG_WARN([Found unsupported version of GTK: $possible_version]);;
-      esac
    done
    AC_MSG_RESULT([${GTK_CONFIG}])
 fi
@@ -3206,28 +3209,32 @@ AC_CHECKING(for LDAP)
 test -z "$with_ldap" && { AC_CHECK_HEADER(ldap.h, ,with_ldap=no) }
 test -z "$with_ldap" && { AC_CHECK_HEADER(lber.h, ,with_ldap=no) }
 if test "$with_ldap" != "no"; then
-  AC_CHECK_LIB(ldap, ldap_search, with_ldap_nolber=yes, with_ldap_nolber=no)
-  test "$with_ldap_nolber" = "no" && { AC_CHECK_LIB(ldap, ldap_open, with_ldap_lber=yes, with_ldap_lber=no, -llber) }
-  test "$with_ldap_nolber" = "no" -a "$with_ldap_lber" = "no" && { AC_CHECK_LIB(ldap, ldap_open, with_ldap_krb=yes, with_ldap_krb=no, -llber -lkrb) }
-  test "$with_ldap_nolber" = "no" -a "$with_ldap_lber" = "no" -a "$with_ldap_krb" = "no" && { AC_CHECK_LIB(ldap, ldap_open, with_ldap_krbdes=yes, with_ldap_krbdes=no, -llber -lkrb -ldes) }
-  test -z "$with_ldap" -a \( "$with_ldap_lber" = "yes" -o "$with_ldap_nolber" = "yes" -o "$with_ldap_krb" = "yes" -o "$with_ldap_krbdes" = "yes" \) && with_ldap=yes
+  AC_CHECK_LIB(ldap, ldap_search, with_ldap=yes)
+  dnl Check for other libraries we need to link with to get the main routines.
+  test "$with_ldap" != "yes" && { AC_CHECK_LIB(ldap, ldap_open, [with_ldap=yes with_ldap_lber=yes], , -llber) }
+  test "$with_ldap" != "yes" && { AC_CHECK_LIB(ldap, ldap_open, [with_ldap=yes with_ldap_lber=yes with_ldap_krb=yes], , -llber -lkrb) }
+  test "$with_ldap" != "yes" && { AC_CHECK_LIB(ldap, ldap_open, [with_ldap=yes with_ldap_lber=yes with_ldap_krb=yes with_ldap_des=yes], , -llber -lkrb -ldes) }
+  dnl Recently, we need -lber even though the main routines are elsewhere,
+  dnl because otherwise be get link errors w.r.t. ber_pvt_opt_on.  So just
+  dnl check for that (it's a variable not a fun but that doesn't seem to
+  dnl matter in these checks)  and stick in -lber if so.  Can't hurt (even to
+  dnl stick it in always shouldn't hurt, I don't think) ... #### Someone who
+  dnl #### understands LDAP needs to fix this properly.
+  test "$with_ldap_lber" != "yes" && { AC_CHECK_LIB(lber, ber_pvt_opt_on, with_ldap_lber=yes) }
 fi
 if test "$with_ldap" = "yes"; then
   AC_DEFINE(HAVE_LDAP)
   XE_ADD_OBJS(eldap.o)
-  if test "$with_ldap_nolber" = "yes" ; then
-    XE_PREPEND(-lldap, LIBS)
-  else
-    if test "$with_ldap_krb" = "yes" ; then
-      XE_PREPEND(-lkrb, LIBS)
-    fi
-    if test "$with_ldap_krbdes" = "yes" ; then
-      XE_PREPEND(-ldes, LIBS)
-      XE_PREPEND(-lkrb, LIBS)
-    fi
+  if test "$with_ldap_des" = "yes" ; then
+    XE_PREPEND(-ldes, LIBS)
+  fi
+  if test "$with_ldap_krb" = "yes" ; then
+    XE_PREPEND(-lkrb, LIBS)
+  fi
+  if test "$with_ldap_lber" = "yes" ; then
     XE_PREPEND(-llber, LIBS)
-    XE_PREPEND(-lldap, LIBS)
   fi
+  XE_PREPEND(-lldap, LIBS)
   AC_CHECK_FUNCS(ldap_set_option ldap_get_lderrno ldap_result2error ldap_parse_result)
 fi
 
@@ -3587,8 +3594,8 @@ dnl Not all toolkits support all widgets
 
 dnl Avoid using Motif :-(
 case "$opsys" in
-  *linux* )  lucid_prefers_motif = "no"  ;;
-  * )        lucid_prefers_motif = "yes" ;;
+  *linux* )  lucid_prefers_motif="no"  ;;
+  * )        lucid_prefers_motif="yes" ;;
 esac
 
 case "$with_menubars" in "" | "yes" | "athena" )
@@ -4377,13 +4384,20 @@ if test "$with_tty" = "yes"  ; then
   AC_DEFINE_UNQUOTED(CURSES_H_FILE, "${curses_h_file-curses.h}")
   AC_DEFINE_UNQUOTED(TERM_H_FILE, "${term_h_file-term.h}")
 
-  dnl Autodetect gpm
-  test -z "$with_gpm" && { AC_CHECK_HEADER(gpm.h, , with_gpm=no) }
-  test -z "$with_gpm" && { AC_CHECK_LIB(gpm, Gpm_Open, with_gpm=yes, with_gpm=no) }
-  if test "$with_gpm" = "yes"; then
-    AC_DEFINE(HAVE_GPM)
-    XE_ADD_OBJS(gpmevent.o)
-    XE_PREPEND(-lgpm, LIBS)
+  dnl General Purpose Mouse (libgpm) support
+  if test "$with_gpm" != "no"; then
+    AC_CHECK_HEADER(gpm.h, [
+      AC_CHECK_LIB(gpm, Gpm_Open, have_gpm=yes)])
+    if test "$have_gpm" = "yes"; then
+      with_gpm=yes
+      AC_DEFINE(HAVE_GPM)
+      XE_ADD_OBJS(gpmevent.o)
+      XE_PREPEND(-lgpm, LIBS)
+    elif test "$with_gpm" = "yes"; then
+      XE_DIE(["GPM requested, but gpm.h or libgpm seems to be missing."])
+    else
+      with_gpm=no
+    fi
   fi
 
 else dnl "$with_tty" = "no"
@@ -4891,8 +4905,8 @@ AC_SUBST(ld_libs_all)
 AC_SUBST(CFLAGS)
 AC_SUBST(CPPFLAGS)
 AC_SUBST(LDFLAGS)
-RECURSIVE_MAKE="\$(MAKE) \$(MFLAGS) CC='\$(CC)' CFLAGS='\$(CFLAGS)' LDFLAGS='\$(LDFLAGS)' CPPFLAGS='\$(CPPFLAGS)'"
-AC_SUBST(RECURSIVE_MAKE)
+RECURSIVE_MAKE_ARGS="\$(MFLAGS) CC='\$(CC)' CFLAGS='\$(CFLAGS)' LDFLAGS='\$(LDFLAGS)' CPPFLAGS='\$(CPPFLAGS)'"
+AC_SUBST(RECURSIVE_MAKE_ARGS)
 
 AC_SUBST(native_sound_lib)
 AC_SUBST(sound_cflags)
index 2647128..9a579f7 100644 (file)
@@ -238,7 +238,10 @@ Memory allocation options:
 --with-system-malloc    (Bool) Use the system malloc, instead of GNU malloc.
 --with-debug-malloc     (Bool) Use the debugging malloc package.
 --use-regex-malloc=no   (Bool) Use malloc (not alloca) for regex fail stack.
-                        Setting this to 'yes' allows unpreventable crashes.
+                        Setting this to 'no' allows crashes - it may be
+                        impossible to detect stack exhaustion, and your
+                        XEmacs will crash.
+
 
 Debugging options:
 
index e405ebc..99800a4 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -34,6 +34,22 @@ consulted for a more detailed list of changes.
 
 ** Summary of user-visible changes:
 
+  -- PUI related changes (Package User Interface)
+    - A minor rearrangement of the "Tools -> Packages" menu.
+    - Only a single package download site can be selected.
+    - Managing packages via the `customize' interface is no longer
+      supported. 
+    - Non-Mule XEmacsen can not install Mule packages.
+    - The "mule-base" package is not needed to "bootstrap" PUI for
+      Mule enabled XEmacsen.
+    - The default for PGP verifying the package-index file is "off" in
+      21.4.
+    - The default package-index filename has changed to
+      `package-index.LATEST.gpg'.
+    - The location of the local index file is customisable.  See
+      `package-get-package-index-file-location'. 
+    - `pui-add-install-directory' has been obsoleted and replaced by
+      `pui-set-local-package-get-directory'.  
   -- The delete key now deletes forward by default.
   -- Shifted motion keys now select text by default.
   -- You can now build XEmacs with support for GTK+ widget set.
index 6eaad69..6005b5c 100644 (file)
@@ -37,14 +37,15 @@ theme for the releases following the promotion of 21.4 from "gamma" to
 21.4.14: Reasonable Discussion
 21.4.15: Security Through Obscurity
 21.4.16: Corporate Culture
-21.4.17: Social Property
-21.4.18: Stable Release Maintainer
-21.4.19: Standard C
-21.4.20: Successful IPO
-21.4.21: Sufficiently Smart Compiler
-21.4.22: The Gift Economy
-21.4.23: Too Much Mozart
-21.4.24: UTF-8 BOM
+21.4.17: Jumbo Shrimp
+21.4.18: Social Property
+21.4.19: Stable Release Maintainer
+21.4.20: Standard C
+21.4.21: Successful IPO
+21.4.22: Sufficiently Smart Compiler
+21.4.23: The Gift Economy
+21.4.24: Too Much Mozart
+21.4.25: UTF-8 BOM
 
 N.B.  Only incredibly redeeming suggestions can be accepted now.
 
index 5d30487..e1720e1 100644 (file)
@@ -100,6 +100,9 @@ Another interface over GNU patch.
 *** erc
 ERC is an Emacs InternetRelayChat client.
 
+*** escreen
+Multiple editing sessions withing a single frame (like screen).
+
 *** eshell
 Command shell implemented entirely in Emacs Lisp.
 
@@ -338,6 +341,9 @@ XEmacs Lisp developer support.  This package contains utilities for
 supporting Lisp development.  It is a single-file package so it may be 
 tailored.
 
+*** xlib
+Emacs interface to X server.
+
 *** xslide
 XSL editing support.
 
@@ -345,6 +351,9 @@ XSL editing support.
 A minor mode for (X)Emacs which allows running an XSLT processor on a
 buffer.
 
+*** xwem
+X Emacs Window Manager.
+
 *** zenirc
 ZENIRC IRC Client.
 
index b54b83f..fd2d2f4 100644 (file)
@@ -1,4 +1,4 @@
-                                                       -*- text -*-
+-*- text -*-
 GNU Service Directory
 ---------------------
 
@@ -19,10 +19,10 @@ Before FSF will list your name in the GNU Service Directory, we ask
 that you agree informally to the following terms:
 
 1. You will not restrict (except by copyleft) the use or distribution
-of any software, documentation, or other information you supply anyone
-in the course of modifying, extending, or supporting GNU software.
-This includes any information specifically designed to ameliorate the
-use of GNU software.
+of any software, documentation, or other technical information you
+supply anyone in the course of modifying, extending, or supporting GNU
+software.  This includes any information specifically designed to
+ameliorate the use of GNU software.
 
 2. You will not take advantage of contact made through the Service
 Directory to advertise an unrelated business (e.g., sales of
@@ -35,699 +35,1148 @@ have nothing to go by.   Please put each e-mail address inside "<>".
 Please put nothing else inside "<>".  Thanks!
 
 For a current copy of this directory, or to have yourself listed, ask:
-       gnu@prep.ai.mit.edu
+       service@gnu.org
 
 ** Please keep the entries in this file alphabetical **
+\1f
+Aaronsen Group, Ltd.    <gnu@aaronsen.com>
+600 Grant St.
+Suite 5345
+Pittsburgh, PA 15219 US
++1 412 391 6000 voice
++1 412 391 6006 fax
+http://www.aaronsen.com/gnu
+
+The Aaronsen Group provides several levels of service in the free software
+arena, from simple configuration and installation to large extensions and
+new development.  We specialize in unique applications, but have the
+experience to handle all manner of prospects, from database-backed
+web-sites to high-end multiprocessor clusters.
+
+Our service area covers the US, with key offices in Pittsburgh, PA; San
+Jose, CA; and New York, NY.
+
+We are available for both hourly work (at $450 per hour, some qualified
+discounts are available) and fixed-price projects.  Work is done on the
+client site, at our offices, or remote via Internet or telephone
+connection.
+
+Updated: 2002-04-18
+\1f
+ACT Europe <sales@act-europe.com>
+8 rue de Milan
+75009 Paris
++33 1 49 70 67 16
++33 1 49 70 05 52 fax
+www.act-europe.com
+
+ACT Europe, developer and maintainer of the Ada 95 GNAT Pro
+Development Environment, specializes in project support and consulting
+for users of GNAT Pro.
+
+GNAT Pro, based on GNU/GCC technology, is the most widely used Ada 95
+development environment, and the ideal solution in environments where
+efficient and reliable code is critical. GNAT Pro is available on the
+widest number of platforms, from Unix workstations and PCs to bare
+boards and embedded systems.
+
+ACT Europe offers full Ada 95 solutions and is continuously enhancing
+and developing programming tools, debuggers and integrated development
+environments.
+
+We believe the Ada market and your project will best benefit from an
+open, non-proprietary technology, we have made all our products Open
+Source software by adopting the licensing policy of the Free Software
+Foundation. This means that all components of the GNAT technology,
+including the run-time, come with sources.
+
+Highest-quality, responsive support is a key ingredient in complex and
+reliable Ada software products. GNAT Pro, the leading Ada 95
+development system, is the only Ada solution that comes with
+outstanding support.  Please visit www.act-europe.com for further
+details of our products and services or contact us at
+<sales@act-europe.com>
+
+UPDATED: 2004-02-13
+\1f
+Ada Core Technologies <sales@gnat.com>
+104 Fifth Avenue, 15th Fl.
+New York, NY 10011
++1 212 620 7300
++1 212 807 0162 fax
+www.gnat.com
+
+Ada Core Technologies, developer and maintainer of the Ada 95 GNAT Pro
+Development Environment, specializes in project support and consulting
+for users of GNAT Pro.
+
+GNAT Pro, based on GNU/GCC technology, is the most widely used Ada 95
+development environment, and the ideal solution in environments where
+efficient and reliable code is critical. GNAT Pro is available on the
+widest number of platforms, from Unix workstations and PCs to bare
+boards and embedded systems.
+
+Ada Core Technologies offers full Ada 95 solutions and is continuously
+enhancing and developing programming tools, debuggers and integrated
+development environments.
+
+We believe the Ada market and your project will best benefit from an
+open, non-proprietary technology, we have made all our products Open
+Source software by adopting the licensing policy of the Free Software
+Foundation. This means that all components of the GNAT technology,
+including the run-time, come with sources.
+
+Highest-quality, responsive support is a key ingredient in complex and
+reliable Ada software products. GNAT Pro, the leading Ada 95
+development system, is the only Ada solution that comes with
+outstanding support.  Please visit www.gnat.com for further details of
+our products and services or contact us at <sales@gnat.com>
+
+UPDATED: 2004-02-13
+\1f
+Alcôve
+------
+
+Alcôve, Centre Paris Pleyel, 153 bld Anatole France
+93200 Saint-Denis France
+
+Email:  <infos@alcove.fr>
+
+Web:    http://www.alcove.com
+Tél.:   +33 1 49 22 68 00
+Fax:    +33 1 49 22 68 01
+
+Founded in 1996, Alcôve's main purpose is to promote and support the
+use of GNU/Linux and OSS on the European market.
+Expertise in OSS innovation is the foundation of all Alcôve's
+activities.
+We provide key accounts and leading businesses in the field of IT with :
+
+       Consultancy
+        Engineering
+       Training
+       Support
+       Technical watching brief
+       OSS Certification - Validation - Guarantee
+       Drivers for the linux kernel
+       Company directory and unified messaging
+       Linux Firewall Security Package
+
+Keys: support services, consulting, open source software, GNU/Linux,
+Apache, Perl, GNU, Samba, Zope, Imp, OpenLDAP
+
+Average daily rate, depending on the job : 1000 euros.
 
+Updated:  2002-06-12
 \1f
-BeOpen <info@beopen.com>
-4880 Stevens Creek Blvd., Suite 205
-San Jose, CA  95129-1034
-+1 408 243 3300
-http://www.beopen.com
-
-BeOpen provides corporate-quality support, development and user
-documentation for GNU Emacs, XEmacs and InfoDock.  (InfoDock is a turnkey
-information management and software development toolset built atop emacs,
-written by one of our associates.)  Emacs distributions for a variety of
-platforms are also available, as is support for other emacs variants, such as
-those often found on PCs.
-
-Our unique focus on emacs-related work allows us to attract expert talent in
-this area to keep you on the leading edge of productivity, especially if you
-do software development work.  We do the porting, patching, coding,
-integrating, debugging, documenting and testing so that your people spend
-much more productive time on their mainline tasks.
-
-Standard support packages include help on all aspects of the packages
-supported, including all tools shipped as a standard part of the original
-package distribution.  In general, we want to give you an unbelievably strong
-level of support, so where we can, we will also answer questions concerning
-any add-on Lisp code that is used at your site.  Setup and customization
-help, bug fixes, and announcements of new releases are, of course, included.
-
-Support rates start at $1,000 USD, for single user support for one year.
-Discounts are available for group contracts.  We also offer Golden Support
-contracts for those who need the absolute best in mission-critical support;
-contact us for details.  Hourly development rates and fixed bid work are
-available.
-
-Updated 20-March-1997.
-\1f
-Joseph Arceneaux               <jla@ai.mit.edu>
-PO Box 460633                  http://www.samsara.com/~jla
-San Francisco, CA  94146-0633
-+1 415 648 9988
-+1 415 285 9088
-
-Recently led the project making Wells Fargo Bank the first to provide
-secure customer account access over the Internet.
-
-Former FSF staffmember.  Performed X11 implementation of Emacs version
-19, designed and implemented WYSIWYG Emacs.  Installed and
-administered FSF network.  Maintainer of GNU indent.  Over 15 years
-experience with Unix and other systems, from writing ROM monitors to
-UI design and system administration.
-
-I provide installation, porting, debugging and customization or
-development of GNU and other Unix software.  I also design and
-implement free software projects and consult on software engineering
-and systems design.  Handholding and  teaching services are also
-available as well as things like LAN and compute--infrastructure design.
-
-Time and material rates around $150 USD per hour, depending upon the
-particular job.  I am also very interested in fixed-bid jobs.  For
-selected non-profit organizations with worthy goals, I work for free.
-
-Updated: 17Oct95
-\1f
-Gerd Aschemann         <aschemann@Informatik.TH-Darmstadt.de>
-Osannstr. 49
-D-64285 Darmstadt
-Tel.: +49 6151 16 2259
-http://www.informatik.th-darmstadt.de/~ascheman/
+Allegro Consultants, Inc.         <info@gccsupport.com>
+1072 De Anza Blvd., Suite B101
+San Jose, CA  95129-3532
+USA
++1 408 252-2330 voice
++1 408 252-2334 fax
+http://www.gccsupport.com
+
+Allegro Consultants, Inc, in association with DIS International, is
+now offering annual support contracts covering the GNU Compiler
+Collection and related tools, including the GCC C and C++ compilers
+for MPE/iX.
+
+The free GCC C and C++ compilers have been available on MPE/iX for
+several years now, and are used for mission-critical applications by
+many organizations including Hewlett-Packard. Until now, assistance
+was available only from Mark Klein of DIS on a limited, voluntary
+basis. Mark is the person who originally ported GCC to the HP e3000,
+and he continues to maintain the software and port new versions.
+
+Support contracts start at $1,995.00/year for an organization
+(unlimited number of HP e3000 computer systems) with two designated
+callers.  Additional options are available for large organizations who
+need to designate more than two authorized callers, or who want the
+additional security of 24x7 coverage.
+
+Updated: 2002-04-18
+\1f
+Amazonia Computing
+
+<rick@efn.com>
+http://www.efn.com/~rick
+
+5050 Donald St
+Eugene, OR  97405
+541-485-7264
+
+
+I provide development and technical support for free software
+and open source systems including embedded programming, GNU/Linux, the
+GNU development suite...
 
-- System Administrator (UNIX) at CS Department, TU Darmstadt, Germany
-- 15 years expirience with CS, Systemadministration on different platforms
--  8 years with UNIX/Networking/FreeWare/GNU/X11
--  6 years organizer of Operating Systems and Distributed Systems courses
+I have over 10 years experience building and maintaining systems ranging
+from medical patient monitoring systems to Linux device drivers for
+custom PCI plug in cards.
+
+Rates range from $85.00/hr to $90/hr USD.  Will work for a lower rate
+if in involves working in either Brazil, Vietnam, Indonesia, or Cuba.
+I am also willing to work on fixed price contracts.
+
+Updated: 2002-04-22
+\1f
+Dipl.-Inform. Gerd Aschemann                     <gerd@aschemann.net>
+Martinstr. 81f
+D-64285 Darmstadt
+Tel.: +49 173 3264070
+http://www.aschemann.net/
+
+- Consultant
+  + Unix Network and System Administration
+  + Distributed Systems and Middleware Infrastructures
+- former System Administrator (UNIX and NT) at CS Department, TU Darmstadt, Germany
+- 22 years working in the CS field, System administration on different platforms
+- 15 years with UNIX/Networking/FreeWare/GNU/X11
+- 12 years courses on Operating Systems and Distributed Systems
 - Lectures on System and Network Administration
-- Platforms: Solaris, SunOS, Ultrix, OSF1, HP-UX, Linux, FreeBSD, AIX
-- Experience with parallel environments (Connection Machine, Meiko, Parsytec)
-- Consultant for other UNIX users at TU Darmstadt
+- Platforms: Solaris, GNU/Linux, SunOS, Ultrix, HP-UX, Digital Unix, AIX, SCO, FreeBSDs
+- Distributed Platforms and Information Systems (CORBA, WWW, Java, SOAP)
 
-Rates are at 100,-- DM (~60 US$) per hour minimum, depending on the job.
+Rates are at 100,-- EUR (~90 US$) per hour minimum, depending on the job.
 I am willing to travel for sufficiently large jobs.
 
-Updated: 17Oct95
+Updated: 2002-04-23
 \1f
-Giuseppe Attardi       <attardi@di.unipi.it>
-Dipartimento di Informatica
-Corso Italia 40
-I-56125 Pisa, Italy
-+39 50 887-244
+Baker Research, Ltd.
+P. O. Box 4057, Leesburg, VA   20177
+Phone: (703) 999-6719 (Voice)
+Web:   http://www.baker-research.com
+email: <solutions@baker-research.com>
+Rate:  $75.00/hr to $150.00/hr, or fixed-price projects.
 
-GNU: help on obtaininig GNU, for italian sites.
+Services:
+    --Full-lifecycle software development
+    --Database design and migration
+    --Programming (C/C++, tcl/tk, bash, perl)
+    --Custom backup and archival systems
+    --GNU/Linux system installation, configuration, and management
+    --Customization of systems for user needs
+    --Software product evaluation and recommendation
+    --Cluster systems support
+        -Installation, configuration, and management
+        -MPI and Myrinet support
+    --Data acquisition, management, visualization, and archival
+
+Updated:  2004-05-13
+\1f
+Don Barry, Ph.D.       <don@astro.cornell.edu>
+Ithaca, NY          
+
+Astrophysicist with extensive and varied hacker background.  Substantial
+expertise in mathematical modeling, instrument interface, low-level and
+high-level hardware control, statistical analysis, automated/mathematical
+typesetting.  Also fluent in opto/electro/mechanical design.  I try to find
+solutions using free software when possible and specialize in GNU/Linux
+platforms.  Degrees also in chemistry and mathematics.
+
+Speak: C, APL, Fortran, J, Perl, Emacs Lisp, IDL, variety of machine
+languages from CDC CYBER (!) to x86 families, TeX/LaTeX, sendmail, and
+quite a few others.  Experience on platforms from PDP to present.
 
-Updated: 5Apr94
+Rates: $75--$150 per hour + travel (if required) depending on the needs of
+the project, the level of support and availability required, and its
+interest to me.
+
+Services: consulting, design, porting, lecturing, support, project definition,
+system implementation.
+
+Updated: 2002-04-18
 \1f
 James Craig Burley
 97 Arrowhead Circle
-Ashland, MA 01721-1987
-508 881-6087, -4745
-(Please call only between 0900-1700 Eastern time, and only if you
-are prepared to hire me -- ask me to help you for free only
-via email, to which I might or might not respond.)
-Email: <burley@gnu.ai.mit.edu> --preferred--
-       <burley@cygnus.com>
-       <burley@world.std.com>
+Ashland, MA 01721
+Email: <gnu@jcb-sc.com>
+Web:   http://world.std.com/~burley/
+
+Expertise (mainly Development and Maintenance):
+    Compilers for Imperative Languages (author of GNU Fortran, aka g77)
+    Operating System Kernels
+    Tools/Utilities
+    Microcode (mainly VLIW) and Assembler
+    Software-Development-System Architecture (including APIs, IDEs)
+    Debugging
+    Documentation Authoring and Project Management
 
-Expertise:
-    Compiler Internals (author of GNU Fortran, for example)
-    Operating Systems Internals
-    Tools/Utilities Development and Maintenance
-    Microcode Development and Maintenance (primarily VLIW machines)
-    System Design (computers, operating systems, toolsets, &c)
-    Debugging (often asked to help debug Other People's Code)
-    Documentation (authored many books and ran a few doc projects)
-    Extensive experience with a variety of operating systems, hardware,
-       languages, and so on
+Experience:
+    Programming Languages such as C, Fortran
+    Operating Systems such as Unix, GNU/Linux, Solaris, HP-UX
+    Assembler/Microcode Languages -- RISC (such as SPARC), CISC, VLIW
+    Scripting Languages
+    API Design, Documentation, and Use
 
-Rate: $70/hour -- willing to consider flat-fee arrangements
+Rate: $200/hour
 
-Updated: 14Aug95
+Updated: 2002-04-18
+\1f
+   C2V                          Michel Delval <mfd@c2v.com>
+   82 bd Haussmann              Jean-Alain Le Borgne <jalb@c2v.com>
+   75008 Paris
+   France
+   Tel (33 1) 40.08.07.07
+   Fax (33 1) 43.87.35.99
+   http://www.c2v.com/freesoft.htm
+   e-mail: <consult@c2v.com>
+
+   Services: we offer source or source+binary distribution,
+   installation, training, maintenance, technical support,
+   consulting, specific development and followup on the GNU software
+   development environment: Emacs, gcc/g++, binutils, gas, gdb.
+
+   Porting on new platforms, and professionally developing software
+   with the GNU tools in the Unix/X11 environment since they were
+   first available.
+
+   Experience: GNU C Compilation toolchain for the SGS-Thomson D950
+   and ST20 DSP chips.
+
+   GNU C compilation toolchain (cross-compiler, compiler, linker,
+   assembler, debugger) for SparcV7 ERC32 based space systems
+   (Sextant Avionique / Alcatel Espace).
+
+   Feasability study, analysis and prototyping of a complete
+   compilation toolchain based on the GNU programming tools for the
+   CSEM RISC microprocessor family.
+
+   Rates: from 800 Euros/day to 120 000 Euros/year, 40% discount for
+   educational institutions, add taxes and expenses.  Ask for list.
+
+Updated: 2002-04-25
 \1f
-Michael I. Bushnell            <mib@gnu.ai.mit.edu>
-545 Technology Square, NE43-426
-Cambridge, MA  02139
-(617) 253-8568
+Cendio Systems AB       <info@cendio.com>
+Teknikringen 3
+SE-583 30 Linkoping
+SWEDEN
++46 13 21 46 00 voice
++46 13 21 47 00 fax
+http://www.cendio.com/  <international site>
 
-All GNU software: Installation, customization, answering simple or
-                 complex questions, bug fixing, extension.
+Cendio Systems develops, implements and integrates solutions based on
+Open Source Software. We also develop and market the Fuego
+Firewall(TM), an award winning and easy-to-use firewall, based on
+GNU/Linux.
 
-Experience:  I have done Unix and GNU programming for several years,
-            I am the primary author of the Hurd (which provides most
-            kernel related facilities for the GNU OS).
+We offer professional services, including support, maintenance,
+integration and development in the following areas:
 
-I am easily available in the Cambridge/Boston area; work via email.
-I am willing to travel for sufficiently large jobs.
+* Embedded Linux
+* Client/Server Solutions GNU/Linux/BSD
+* Professional Training GNU/Linux, certifications from SAIR Linux/GNU
+* Open Source Strategy
+* Development/Adaptation of free software
+
+Cendio Systems have deep roots in Linkoping University, and was
+founded 1992 as Signum Support. Our headquarters resides in Mjardevi
+Science Park in Linkoping and we have an office in Stockholm. We are
+currently about fifty employees at both locations.
+
+Cendio Systems won the Lotus 'Tux Award' at LotusSphere 2000 for "the
+partner who best exemplifies a unique dedication to Lotus and Linux
+technologies and has successfully executed their vision in the
+marketplace."
+
+Cendio Systems have the following certifications and memberships:
+
+Association of Computing Machinery, Professional Membership
+COMPAQ System Specialist (Intel and Alpha Systems)
+Embedded Linux Consortium, Founding Member
+IBM Value Added Reseller (Netfinity)
+IBM Solution Provider (RS/6000)
+SAIR GNU/Linux, Accredited Center for education
+SGI Systems Integrator
 
-Rates: $100/hr, negotiable, less for non-profit organizaions.
+Rates: Please request our price list.
 
-Updated: 5Apr94
+Updated: 2001-05-09
 \1f
-C2V                    Renaud Dumeur <renaud@ccv.fr>
-82 bd Haussmann                Michel Delval <mfd@ccv.fr>
-75009 Paris            Jean-Alain Le Borgne <jalb@ccv.fr>
-France
-Tel (1) 40.08.07.07
-Fax (1) 43.87.35.99
-
-We offer source or source+binary distribution, installation, training,
-maintenance, technical support, consulting, specific development and
-followup on the GNU software development environment: Emacs, gcc/g++,
-binutils, gas, gdb.
-
-Experience: adapted gcc, gas and binutils to work as cross-development
-tools for the Thomson st18950 DSP chip: GCC parser and typing system
-have been augmented to allow the manipulation of variables located in
-separated memory spaces. Porting on new platforms, and professionally
-developing software with the GNU tools in the Unix/X11 environment
-since they were first available.
-
-Rates: from 2000 FF/day to 150 000 FF/year, 40% discount for
-educational institutions, add taxes and expenses.  Ask for list.
-
-Entered: 5May94
-\1f
-Contributed Software
-Graefestr. 76
-10967 Berlin, Germany
-phone:   (+49 30) 694 69 07
-FAX:     (+49 30) 694 68 09
-modems:          (+49 30) 694 60 55 (5xZyXEL )
-modems:          (+49 30) 693 40 51 (8xUSR DS)
-email:   <info@contrib.de>
-internet: uropax.contrib.de [192.109.39.2], login as 'guest'.
-
-We distribute, install, port, teach and support free software
-in general, i.e. X11, GNU, khoros etc. Rates are ECU 80,-- plus
-tax per hour. We offer maintenance and support contracts for full
-customer satisfaction.
-Highlights are transparent development environments for multi-platform
-sites and configuration management.  Traveling is no problem.
-
-Free Archive login for downloading on above modem numbers.
-
-Updated: 5Apr94
-\1f
-Stuart Cracraft                <cracraft@ai.mit.edu>
+CodeSourcery, LLC <info@codesourcery.com>
+9978 Granite Point Ct
+Granite Bay, CA 95746
+(916) 791-8304
+http://www.codesourcery.com
+
+CodeSourcery specializes in customization of, enhancements to, and
+support for all GNU software.  We have particular experience in the
+field of programming tools, and have been responsible for many
+features in the GNU C and C++ compilers including the implementation
+of member templates and type-based alias analysis.  Mark Mitchell, one
+of our co-founders, is a co-maintainer of the GNU Compiler Collection.
+
+We also have experience with GNU tools ranging from emacs to binutils
+to gdb to autoconf, and are willing to work on any and all free
+software projects.
+
+Please see our web page at www.codesourcery.com for more information
+about our products, services, and prices.
+
+Updated: 2002-04-19
+\1f
+Stuart Cracraft         <cracraft@gnu.org>
 25682 Cresta Loma
-Laguna Niguel, Ca.
-92677
-GNUline: 714-347-8106
-Rate: $75/hour
+Laguna Niguel, CA, 92607, USA
+Phone: 949-347-8106
+Rate: negotiable
+
 Consultation topics:
-  Entire GNU suite - porting, compilation, installation,
-  user-training, administrator-training
-Method: telephone line support, call-in via modem to your site,
-or direct visit.
-
-Experience: supporting GNU since the mid-1980's, coordinator
-of GNU Chess (original author), GNU Shogi, GNU Go. Ported GNU Emacs
-to Solaris (System V Release 4). Expertise in C, Emacs Lisp, and Perl.
-Customized programming also available.
-
-Entered: 5Apr94
-\1f
-Cygnus Support                 <info@cygnus.com>
-1937 Landings Drive            ...uunet!cygint!info
-Mountain View, CA 94043 USA
-+1 415 903 1400 voice
-+1 415 903 0122 fax
-
-Cygnus Support
-48 Grove Street
-Somerville, MA 02144
-+1 617 629 3000 voice
-+1 617 629 3010 fax
-
-Cygnus Support continues to provide supported, maintained versions of
-the GNU toolset including GCC, G++, the GNU debugger with graphical
-user interface, GNU linker, GNU macro-assembler and Emacs 19. In
-keeping with the rapidly advancing needs of software developers,
-Cygnus maintains a 90 day release cycle of the GNU toolset. Each
-release is regression tested and includes substantial improvements and
-additions to the existing matrix of over 65 supported platform
-configurations.
-
-Updated: 2Feb95
-\1f
-Edgar Der-Danieliantz  <EDD@AIC.NET> <edd@ns.aic.net> <edd@arminco.com>
-P.O. Box 10                    
-Yerevan 375009 AM      
-ARMENIA
-Support for GCC (C & Objective C), X Window System, 
-World Wide Web, x86-based embedded systems, logic programming, etc.
-Via Internet (mail, talk, irc, etc.)
-Experience:
-   OS's: 4.3 & 4.4 BSD, SVR3.2 & 4.2, FreeBSD, Linux,
-      NetBSD, SCO, Solaris, SunOS, Ultrix, NEXTSTEP, UnixWare.
-   Languages: C, C++, Objective C, Pascal, Tcl/Tk, Perl,
-      Bourne Shell, PostScript, HTML, Prolog.
-   Platforms: Intel, SPARC, Mac, VAX, NeXT.
-Rates: Depending on type of work, appx $20/hour. Contact for more information.
-   Negotiable for individuals and non-profit organizations.
-   FREE for individuals who can't pay. Your 'Thanks!' just enough! :-)
-   Payment by international wire transfer.
+Entire GNU suite - porting, compilation, installation,
+user-training, administrator-training
 
-Entered: 6Mar96
-\1f
-Free Software Association of Germany
-Michaela Merz
-Heimatring 19
-6000 Frankfurt/Main 70
-phone:   (+49 69) 6312083)
-ert  :   (+49-172-6987246)
-email:   (info@elara.fsag.de)
+Method: via any combination of telephone, dialup, Internet, in-person, email.
 
-Supporting all kinds of freeware (i.e. GNU), freeware development, consulting,
-training, installation.         Special LINUX support group.
+Experience: supporting GNU since project inception, original port of
+GNU Emacs to Sun Solaris, original author of GNU Emacs online tutorial.
+Expertise in C, Emacs Lisp, Perl, Expect, Oracle, Informix, SunOS, Solaris,
+NIS, NFS, system-monitoring via paging. Unix System and Database
+administration or development.
 
-RATES:
+Updated: 2002-04-20
+\1f
+Bruce Dawson    -    <jbd@codemeta.com>
+CodeMeta, Inc.
+London, NH  USA
+800-354-2209
 
-Companies and for profit
-organizations             :  100 US$ / hour
-Private and not-for-profit
-organizations             :   40 US$ / hour
-ert (24h Emergency
-response team)            :  300 US$ / hour
+Specializing in GNU tools such as CVS, gnats, bash, gawk, fileutils...
 
-Entered: 14Apr94
-\1f
-Noah Friedman             <friedman@prep.ai.mit.edu>
-Building 600, Suite 214             2002-A Guadalupe St. #214
-One Kendall Square                  Austin, TX 78705
-Cambridge, MA  02139                (Local, faster to reach me)
-(Permanent)
+Services:
+
+  o 800 phone support.
 
+  o Modification and development.
 
-Author of several Emacs Lisp packages and parts of Emacs 19, as well as
-numerous utilities written in shell script and perl.  Co-maintained GNU
-Texinfo and Autoconf for a couple of years.  System administrator for a
-network of heterogenous machines.  FSF employee Feb 1991--Sep 1994.
+  o Training.
 
-I can perform installation, porting, and enhancement of all GNU software
-and any other free software; system administration for unix-type systems
-and ethernet networks; and I am willing to teach shell programming and
-Emacs Lisp.
+Rate: Fixed rate deliverables or $110/hour for hourly work.
 
-Fees negotiable, averaging $60-$75/hour.  I can work in the Austin, TX area
-or anywhere accessible on the Internet.  For larger jobs I may be willing
-to travel.
+http://www.codemeta.com
 
-Updated: 16Aug95
+Updated: 2002-04-23
 \1f
-Ronald F. Guilmette    <rfg@monkeys.com>
-Infinite Monkeys & Co.
-1751 East Roseville Pkwy. #1828
-Roseville, CA 95661
-Tel: +1 916 786 7945
-FAX: +1 916 786 5311
+DSS Distributed Systems Software, Inc.
+3253 Georgia St.                         <dss@dss.bc.ca>
+Richmond, British Columbia V7E 2R4       http://www.dss.bc.ca
+CANADA                                   (604) 270-9559
 
-Services:      Development & porting of GNU software development tools.
+GNU-related services:
+  We specialize in support for GCC (mainly C and C++), including porting,
+  retargeting, and customizing.
+  Also, GNU and other free software that falls within our areas of expertise.
 
-GNU Contributions:
-               Invented, designed, and implemented the protoize and
-               unprotoize tools supplied with GCC2.
+Expertise:
+  DSS provides software design, implementation, and consulting services for:
+  o Client/Server architectures
+    Including web-based systems, Apache web server customization, CGI,
+    server-side processing, JavaScript, automatic web page generation
+  o E-Security, including PKI and SSL
+  o Directory systems, including X.500 and LDAP
+  o High-performance and special-purpose distributed systems and databases
+  o Computer networking and communication protocols
+    Internet protocols such as TCP/IP and UDP, development of custom protocols
+  o Creating and customizing "small", embedded, and special-purpose programming
+    languages
 
-               Designed and developed all code to support the generation
-               of Dwarf symbolic debugging information for System V Release
-               4 in GCC2.
+Rates:
+  Consulting rates are $65-$200 USD per hour, plus
+  applicable taxes.  Fixed-cost projects are also possible.
 
-               Performed original port of GNU compilers to SVr4 system.
+Updated: 2002-06-27
+\1f
+Gord Eagle               <gord@gnu.org>
+Box 325                  http://fig.org/gord/
+Lumsden, SK  S0G 3C0     Voice: (306) 731-3011
+CANADA
 
-               Finished port of GNU compilers to Intel i860 RISC
-               processor.
+I will gladly help novice and intermediate computer users to install,
+understand, and use free software, whether or not I have prior
+experience with that software.  I know my limitations well, and will
+freely give other contacts if I cannot solve your problem myself.
 
-Experience:    13+ years UNIX systems experience, all working on compilers
-               and related tools.
+I have over 5 years of experience with several of the major free OSes:
+GNU/Linux (Debian, Red Hat), NetBSD, FreeBSD, and GNU/Hurd.  Some of
+my specialties are networking, Emacs, Automake, Autoconf, C, Perl, and
+shell script programming.
 
-               7+ years working professionally on GCC, G++, and GDB under
-               contract to various firms including the Microelectronics
-               and Computer Technology Corporation (MCC), Data General (DG),
-               Network Computing Devices (NCD), and Intel Corp.
+My rates are negotiable depending on the task: usually $40-$60
+(Canadian) per hour.  Flat rates preferred.
 
-Other qualifications:
-               Developer of the RoadTest (tm) C and C++ commercial
-               compiler test suites.
+Updated:  2002-04-18
+\1f
+John W. Eaton
+<jwe@gnu.org>, <jwe@insightbb.com>
 
-               Former vice-chairman of UNIX International Programming
-               Languages Special Interest Group (UI/PLSIG).
+Experience:   Original author and current maintainer of GNU Octave
+              (http://www.octave.org).
 
-               Bachelor's and a Master's degrees, both in Computer Science.
+              Derivatives of the Unix man utility that I wrote in 1990
+              are currently distributed with several GNU/Linux systems.
 
-Rates:         Variable depending upon contract duration.  Call for quote.
+              Improved GNU Make's support for VPATH and object
+              libraries on VMS systems.
 
-Updated: 23Sep95
-\1f
-Hundred Acre Consulting                <info@pooh.com>
-1155 W Fourth St Ste 225
-PO Box 6209
-Reno NV 89513-6209
-(702)-348-7299
-Hundred Acre is a consulting group providing support and development
-services to organizations of all sizes.         We support GNU C++ and C in
-particular, but also provide support for all other GNU software and
-certain non-GNU public domain software as well.         We work on a "service
-contract" basis for support -- for a yearly fee, we provide multiple
-levels of email and toll free telephone support, and free updates and
-bug fixes. The highersupport levels have on-site support.  Development
-is charged on either an hourly or fixed bid basis.
+              Various other enhancements and bug fixes for other free
+              software tools.
 
-Consulting rates: $70 to $90 per hour, or fixed bid.
-Support contracts:  Several levels, from $495 to $90000 per year.
+              I have more than 19 years experience programming various
+              languages and systems, more than 14 years as a user and
+              system mangler of Unix systems, including Ultrix, SunOS,
+              AIX, HP/UX, BSD, IRIX, Digital Unix, and GNU/Linux.
+              Long-time user of GNU tools on all these platforms.
 
-Updated: 27Dec94
-\1f
-Interactive Information Limited
+Programming:  Octave, Matlab, C++, C, Fortran, Emacs Lisp, TeX/LaTeX,
+              AWK, M4, Autoconf, Make, Lex & YACC, Unix shell
+              programming, etc.
 
-Interactive Information Limited is an Edinburgh-based company that
-specialises in WWW services and support for using the Internet for
-marketing.
+Services:     Anything related to programming and extending Octave.
+              Porting, installation, and customization of GNU/Linux and
+              GNU tools.  Unix system administration.
 
-Our staff have many years experience in using, and developing lisp packages
-within, Emacs, and in using other GNU/Unix tools, particularly under public
-domain UNIXes.
+Rates:        $100/hour + travel and expenses (if required).  Will
+              consider travel for short periods and/or sufficiently
+              interesting jobs, but prefer to work via the net or email.
+              Lower rates for non-profits.
 
-We can provide services throughout the UK, at any level from general
-consultancy through fetching, installing and customising software to
-bespoke programming.  Fees would be in the range #300 - #600 per day,
-depending primarily on the size of the job.
+Updated: 2002-04-19
+\1f
+Noah Friedman                   <friedman@splode.com>
+6114 La Salle Ave. #739
+Oakland, CA 94611-2802
+
+Author of several Emacs Lisp packages and parts of Emacs, as well as
+numerous network and unix system utilities.  Co-maintained GNU Texinfo and
+Autoconf for a couple of years.  Experienced unix systems engineer.
+FSF employee Feb 1991--Sep 1994.
+
+I can design and implement relational database services; perform
+installation, porting, and enhancement of all GNU software and any other
+free software, especially for linux- and unix-derived systems; design
+high-capacity hardware-redundant servers for production environments;
+provide consulting on the use of version control management.
+
+Fees negotiable, averaging $100-$150/hour.  I can work in the California
+bay area or anywhere accessible on the Internet.  For larger jobs I may be
+willing to travel.
+
+Updated: 2002-04-19
+\1f
+Ronald F. Guilmette    <rfg@monkeys.com>
+RG Consulting
+1751 East Roseville Pkwy. #1828
+Roseville, CA 95661
+Tel: +1 916 786 7945
+FAX: +1 916 786 5311
+http://www.monkeys.com/
 
-You can contact us
-       by email: <enquire@interactive.co.uk>
-       by phone: 0370 30 40 52 (UK)
-                 (+44) 370 30 40 52 (International)
-       by post: 3, Lauriston Gardens,
-                Edinburgh EH3 9HH
-                Scotland
+Services:      Development & porting of GNU software development tools.
 
-Entered: 13Nov95
-\1f
-Scott D. Kalter                        <sdk@mithril.com)
-2032 Corral Canyon
-Malibu, CA 90265-9503
-Home: (310) 456-0254
+GNU Contributions:
+               Invented, designed, and implemented the protoize and
+               unprotoize tools supplied with GCC2.
 
-Emacs: Eoops, Elisp, and C level customization/extension training for
-       general use and customization user support, installation, and
-       troubleshooting.
+               Designed and developed all code to support the generation
+               of Dwarf symbolic debugging information for System V Release
+               4 in GCC2.
 
-Rates: $50/hr
-       May answer brief and interesting questions for free.
-       Prefer e-mail communication to telephone.
+               Performed original port of GNU compilers to SVr4 system.
 
-Qualifications: BS Math/CS 1985: Carnegie Mellon University
-               MS CS 1988: UCLA
+               Finished port of GNU compilers to Intel i860 RISC
+               processor.
 
-       Very familiar with all levels of elisp programming.  Taught
-       Emacs use and customization in universities and industry.  Extensive
-       troubleshooting and user support experience.  Co-developed an
-       object-oriented extension to Elisp that can be used for
-       projects.  Extensive Elisp level modification for  rapid
-       prototyping of designs used in groupware research.  This
-       includes the development of an infrastructure to support
-       multiple, communicating Emacs processes.
+Experience:    15+ years UNIX systems experience; 15+ years working on
+               compilers and related tools.
 
-Updated: 6Apr94
-\1f
-KAMAN SCIENCES CORPORATION
-258 GENESEE STREET
-UTICA  NY  13502
-(315) 734-3600
+               10+ years working professionally on GCC, G++, and GDB under
+               contract to various firms including the Microelectronics
+               and Computer Technology Corporation (MCC), Data General (DG),
+               Network Computing Devices (NCD), and Intel Corp.
 
-CONTACTS: Alan Piszcz (peesh)      <apiszcz@utica1.kaman.com>
-        : Dennis Fitzgerald        <dennis@utica.kaman.com>
+Other qualifications:
+               Developer of commercial C and C++ compiler test suites.
 
-Kaman Sciences has performed a GNU port for a custom RISC processor.
-We have experience in the definition and description of the machine
-register transfer language to the GNU tool-set.  This includes rewriting
-and modification of the necessary description and source files of gcc, gas,
-and gld and other binutils.  Kaman also has services for installation and
-setup of GNU tools, (GAWK, GCC, EMACS, etc.) on Sun workstations.
+               Former vice-chairman of UNIX International Programming
+               Languages Special Interest Group (UI/PLSIG).
 
-Work is on a "service contract" basis and development is charged either
-hourly or as a fixed price contract.
+               Bachelor's and a Master's degrees, both in Computer Science.
 
-Consulting rates: $70 to $200 per hour.
+Rates:         Variable depending upon contract duration.  Call for quote.
 
-Entered: 13Jan95
+Updated: 2002-05-04
 \1f
-Scott J. Kramer                <sjk@aura.nbn.com>
-P.O. Box 620207
-Woodside, CA  94062
-+1 415-941-0755
+IDEALX
+15-17 avenue de ségur
+75007 Paris
+France
 
-GNU Software:  Tutoring, installations/upgrades, Emacs Lisp customizations,
-               general troubleshooting/support.  Prefer that work I do
-               becomes part integrated into official Free Software Foundation
-               distributions.
+Tel - +33144420000  Fax - +33144420001
+http://www.IDEALX.com, http://www.IDEALX.org
 
-Systems Administration:         Sun (SunOS & Solaris) and SGI (IRIX)
-                        UNIX hardware/software platforms.
+IDEALX is involved in the development of Open Source solutions,and
+ensures their deployment and maintenance.
 
-Rate:  Task- and time-dependent; non-monetary offers accepted.
+IDEALX also contributes to the community, by producing its own
+Open Source components such as : IDX-PKI (a 100% Open Source
+Public Key Infrastructure) see :http://idx-pki.idealx.com
 
-Updated: 12Apr94
+Development
+Technical support
+Technology watch
+Consulting
+Engineering
+Training
+
+Rates - Variable
+
+Updated: 2002-07-22
 \1f
-Fen Labalme                  <fen@comedia.com)
-Broadcatch Technologies
-40 Carl St. #4                WE ARE EVERYWHERE
-San Francisco CA 94117         JUST SAY "KNOW"
-(415) 731-1174                  ARE YOU KIND?
+Ehud Karni     <kehud@iname.com>
+Israel
 
-Rates: $80 hour (negotiable); quick email or phone questions free.
-       Lower rates -- free of barter -- for schools and non-profits.
+Support of Emacs & Emacs lisp, GNU/Linux, Cygwin.
 
-Consulting, installation, customization and training for GNU Emacs,
-and selected other GNU & network software (but not G++).  I have been
-hacking Emacs since '76 when it was TECO and ^R macros (don't ask).
+Fee:  $75/hour.
 
-Updated: 6Apr94
+Updated: 2002-04-20
+\1f
+Bradley M. Kuhn
+<bkuhn@ebb.org>
+http://www.ebb.org/bkuhn
+
+I am available for part-time system administration, software development
+and training.  I have extensive experience with system administration of
+GNU/Linux systems and Free Software development.  I have also taught
+courses in C++ and Perl.  As an employee of the FSF, I have a unique
+perspective on the free software community.
+
+Please visit my homepage for more information on my background and skills.
+My resume is also available there.
+
+I am available for both 1099 and W2 on-site contracting in the Boston, MA,
+USA metropolitan area, as well as remote consulting via dialup or Internet
+connection anywhere in the USA.  I am not interested in relocation.
+However, temporary (two week maximum) jobs with paid expenses at other
+locations will be considered.
+
+My rate varies greatly (between $25-$60/hour) depending on the
+circumstances.  Rates for non-profit organizations will be on the lower end
+of the spectrum if I support your cause.
+
+Updated: 2002-04-20
 \1f
 Greg Lehey
 LEMIS
-Schellnhausen 2
-36325 Feldatal
-Germany
+PO Box 460
+Echunga SA 5153
+Australia
 
-Phone: +49-6637-919123
-Fax:   +49-6637-919122
-Mail   <grog@lemis.de>
+Phone: +61-8-8388-8286
+Fax:   +61-8-8388-8725
+Mobile:        +61-418-838-708
+Mail   <grog@lemis.com>
 
 Services: Supply, porting, installation, consultation on all GNU
 products.
 
-Experience: 20 years OS and compiler experience, portations of most
-GNU products.  Author of ported software CD-ROM for Unix 4.2.
+Experience: 30 years OS and compiler experience, ports of most GNU
+products.  Author of ported software CD-ROM for UNIX System V.4.2,
+"Porting UNIX Software" (O'Reilly), "Installing and Running FreeBSD"
+and "The Complete FreeBSD" (both Walnut Creek).
+
+Rates: Choice of AUD 300 per hour or hotline rates AUD 6 per minute.
+Outside Australia, $US 180 per hour or $US 3.50 per minute.  Quick,
+well prepared questions by mail may be free.
+
+Updated: 2002-04-21
+\1f
+Alan Lehotsky                                               <apl@alum.mit.edu>
+Quality Software Management
+634 West St
+Carlisle, MA 01741
 
-Rates: Choice of DM 150 per hour or hotline rates 3 DM per minute + 10
-DM per phone call. Quick questions may be free. Limited free support
-available for purchasers of LEMIS CD-ROMs.
+Phone:  (978)287-0435
+Fax:    (978)287-0436
 
-Updated: 21Feb95
+Services:
+                 -  Support for GNU compilers, including rehost/retarget
+                 -  GNU Binutils rehost/retarget.
+                 -  cgen/sim
+                 -  Perl internals hacking
+                 -  General system software work (SW tools, O/S, device drivers)
+                 -  runtime library (especially floating point)
+                 -  project management
+                 -  software process improvement
+
+Experience:     20+ years of design and implementation of optimizing
+                compilers.  "Mr. Bliss" at Digital in the 70's and early
+                80's.  Experience with Motorola 68k, PowerPC, SPARC, Intel
+                x86 and IA64 (Merced), MIPS, NS32K, ADI SHARC DSP, VAX, PDP-11,
+                PDP-10.  Wrote or maintained compilers for Ada, BLISS, C, C++,
+                FORTRAN, Pascal, Modula/2,  O/S experience includes Unix (OSF/1,
+                SunOS, Solaris, AIX, HP/UX), VAX/VMS, Windows/NT, MacOS.
+
+                8 years experience with GCC internals, including major changes to
+               support 8 bit bytes on word-address Analog Devices SHARC DSP and
+                general support of PowerPC code generation. Retargetted gcc/binutils
+               cross-tools to ASIC used in optical switch.  Retargeted gcc to 8 bit "internet toaster"
+               micro-computer.
+
+References available.
+
+Rates:          $110/hr.
+                fixed price possible for well-defined deliverables.
+
+Updated: 2002-04-18
 \1f
-Marty Leisner     <leisner@sdsp.mc.xerox.com>
-332 Shaftsbury Road
-Rochester, New York  14610
-Home:(716) 654-7931
+Reuven M. Lerner
+Lerner Communications Consulting Ltd.
+PO Box 518
+Modi'in 71700
+Israel                         <reuven@lerner.co.il>
+
+Phone:     08-973-2225 (within Israel)
+       +972-8-973-2225 (outside of Israel)
+
+Fax:       08-973-0477 (within Israel)
+       +972-8-973-0477 (outside of Israel)
+
+WWW: http://www.lerner.co.il
 
-Experience: 12 years C/Unix, 7 years DOS.
-           Extensive experience with GNU binary tools, cross-compilers,
-           embedded/hosted systems, realtime.
-Degree :    BS CS, Cornell University
-Rates:     $75/hr
+We specialize in writing custom Web and Internet applications.  In
+particular:
 
+- We create database-backed Web sites using Perl, Tcl, Python, Java,
+  Apache, mod_perl, OpenACS, Zope, MySQL, and PostgreSQL.
 
+- We offer support and service for system administrators who need help
+  with their GNU/Linux systems.
 
-marty
-<leisner@sdsp.mc.xerox.com>  <leisner@eso.mc.xerox.com>
+- We offer training in a variety of programming languages (Perl, Tcl,
+  Python, and Java) and in GNU/Linux administration.
 
-Updated: 15Apr94
+Consulting rates: $110/hour, or $85/hour for non-profits.  (Our rates
+drop when we're hired on retainer or for projects that last longer
+than one week.)
+
+Updated: 2002-04-18
 \1f
-Richard Levitte             (in TeX: Richard Levitte
-Södra LÃ¥nggatan 39, II               S\"odra L{\aa}nggatan 39, II
-S-171 49  Solna                      S-171 49  Solna
-Sweden                               Sweden)
-Tel.nr.:  +46 (8) 18 30 99     (there is an answering machine)
-e-mail:          <levitte@e.kth.se> (preferred)
-         <levitte@vms.stacken.kth.se>
+Richard Levitte
+Levitte Programming
+Spannvägen 38, I
+S-168 35  Bromma
+Sweden
+Tel.nr.:  +46 (8) 26 52 47      (there is an answering machine)
+Cellular: +46 (708) 26 53 44    (there is an answering machine)
+e-mail:   <levitte@lp.se>
 
 What I do:
-       Primarly I work on GNU software for VMS, both VAX and AXP.  I
-       also work on GNU stuff for Unix on occasion.  I'm familiar with
-       SunOS (version 4.x.x), BSD (version 4.2 and up),
-       Ultrix (version 4.2 and up).
-       I've been porting GNU Emacs to VMS since spring 1991.  This
-       includes versions 18.57 to 18.59 and version 19.22.
-       I maintain GNU vmslib.
+       I work with various free software packages, mostly GNU ones,
+       for Unix and VMS (the latter both on VAX and Alpha).  I've
+        been porting GNU Emacs to VMS between spring 1991 and
+       somewhere in 1998.  I've  ported a bunch of other GNU programs
+       as well.  I maintain GNU vmslib.
+        For further info, see http://www.lp.se/~levitte/prof/resume.html
 
 Programs supported:
-       GNU vmslib:     extending, installation, upgrading aid,
-                       simple and complex questions, you name it.
-       GNU Emacs:      porting, extending, installation, upgrading aid,
-                       customization, simple or complex questions,
-                       training, you name it.
-       GNU autoconf:   porting, extending, installation, upgrading aid.
-       GNU zip, diffutils, m4, patch, texinfo:
-                       porting, installation, upgrading aid.
-       GNU C/C++:      installation, upgrading aid.  I might start to
-                       hack at it some day.
-
-The list of programs I currently support represents both my interests and
-current priorities.  Your interest and funding can influence my priorities.
+        To a varying degree (ranging from extension and porting to
+        installation and simple questions) at the time of updating
+        this entry:
+        - GNU vmslib, emacs, autoconf, zip, diffutils, m4, patch,
+          texinfo, C/C++; on both VMS and Unix.
+        - Other GNU programs to a small degree; on Unix.
+        For further info, look at http://www.lp.se/products/gnu.html
 
 Experience:
-       Fluent in C, C++, Emacs Lisp, Pascal as well as assembler
-       on VAX, Motorola 680x0, Intel 8086 and 80x86.  Modified key
-       elements in Emacs (e.g., memory and process management) to work
-       transparently on VMS.  I have very good knowledge in the VMS
-       operating system, as well as MS-DOS and IBM PC compatibles.
-       I have worked for four and a half years as a VMS system manager.
-       I've also provided consulting services on IBM PC compatibles,
-       as well as held classes for IBM PC users.
-       A reference list is available on request.
+        Fluent in TeX/LaTeX and many programming languages.
+        Modified key elements in Emacs (e.g., memory and process
+        management) to work transparently on VMS.  I have very good
+        knowledge in the VMS operating system.  I'm also knowledged in
+        the a few Unix flavors.
+       Well knowledged in cryptography as well as the development of
+        the PKIX standards (both based on X.500 and RFC 2459) and
+        involved protocols (SSL, OCSP, CMS, ...)
+        For further info, see http://www.lp.se/~levitte/prof/resume.html
 
 Your Rate:
-       $50-$80/hour (400-700 SEK in sweden), plus expenses.  My rates
-       are negotiable, depending on how interesting the project is to me.
+        $75-$100/hour (750-1000 SEK in sweden), plus expenses.  My
+        rates are negotiable, depending on how interesting the project
+        is to me.
 
+Updated: 2002-04-18
+\1f
+Moss - Card Consulting Inc <info@mosscard.com>
+16360 Broadway Avenue
+Building A, Suite 103-104
+Cleveland OH 44137 USA
+
+www.mosscard.com
++1 216 587 4343
++1 216 587 4342 Fax
+
+This dynamic Cleveland company offers the following services:
+- installation and configuration for SGI machines
+- Cross-platform development using wxWindows under GNU\Linux
+- Programming (C/C++,tcsh)
+- Compiler development using CORBA and gcc
+- Real-time Cross-Platform Development
+- Consulting
+- Engineering
+- Staff Augmentation
+
+We are Cleveland's first GNU\Linux developers, and one of our company's
+members has just launched NASA's first cross development tool.
+
+Our rates vary from ($50 - $400) USD depending on the nature of the project.
+
+Updated 2004-2-23
+\1f
+ NetGuide Scandinavia AB <info@netg.se>
+ Tankeg=E5ngen 4
+ S-417 56 G=F6teborg, Sweden
+ +46 31 50 79 00 voice
+ +46 31 50 79 39 fax
+ http://www.netg.se
+NetGuide Scandinavia AB is a company that does consultant jobs and holds
+courses in the fields of Unix software, TCP/IP networking and Internet
+applications. The people behind NetGuide Scandinavia AB have many years of
+general Unix experience, both as system administrators and as
+programmers, and also extensive experience in maintaining the GNU
+programs; in administration as well as finding and fixing bugs.
+Services offered:
+ - Installation and customizing GNU and other free software.  We will
+   make free software as easy to install and use as shrink wrapped
+   programs.
+ - Service and support subscriptions.
+ - Warranty protection.
+ - Customization and porting.
+ - Subscriptions to new versions which we will send monthly or with
+   any other interval.
+ - Finding, recommending and investigating free software in any
+   area of the customers choice.
+ - Regular consulting.
+ - Support on Internet service software, especially the free
+ - Support on GNU/Linux.
+ - Freeware based courses in Unix usage, C, C++, or any GNU tools
+ Rates: For courses, contact us for a quote,
+ For consulting, $60-120/hour, depending on contract length.
 
-Entered: 18Aug94
+Updated: 2000-12-13
 \1f
-Roland McGrath         <roland@frob.com>
-545 Tech Sq, Rm 426
-Cambridge, MA  02139
-Work: (617) 253-8568
+Network Theory Ltd   <sales@network-theory.co.uk>
+15 Royal Park
+Bristol
+United Kingdom
+Tel: +44 117 3179309
+Fax: +44 117 9048108
+http://www.network-theory.co.uk/gsl/
 
-Co-author of GNU Make (with Richard Stallman); maintainer of GNU Make.
-Author and maintainer of the GNU C Library and co-author of the GNU Hurd.
-Author of several GNU Emacs Lisp packages and parts of GNU Emacs 19.
-FSF employee summer 1989, fall 1990 to the present.
+We provide software maintenance contracts for commercial users of the
+GNU Scientific Library.
 
-Installation, maintenance, porting, enhancement of all GNU software.  I can
-install GNU software and maintain its installation on call via the Internet.
+We can also provide general numerical consulting for all types of
+scientific and quantitative applications.
 
-Fees negotiable; $75-$100/hour, higher for very short term projects.  I can
-work anywhere in the Boston or SF Bay Area, or anywhere on the Internet.  I
-am working full-time for the FSF on the GNU Hurd, so I am likely to take on
-only jobs that either can be done entirely via the Internet and are
-short-term, or that are very interesting.
+Rate: $1495/year (950 ukp) for base maintenance contract.
 
-Updated: 21Jan95
+Updated: 2004-04-26
 \1f
-Erik Naggum            <erik@naggum.no>
-P.O. Box 1570 Vika     http://www.naggum.no
-0118 OSLO              phone: +47 2295 0313
-NORWAY                 NIC handle: EN9
+Thien-Thi Nguyen
+Solana Free Software
+ttn@glug.org
+San Diego, CA, USA
+
+Service: General Consulting and Hacking on all things GNU
+ Resume: http://www.glug.org/people/ttn/resume.html
+  Rates: no job too small, everything negotiable
+
+Updated: 2002-04-20
+\1f
+David Nicol
+Post office box 45163
+Kansas City, Missouri 64171
+<david@tipjar.com>
+http://www.tipjar.com/dnconsult
+
+Unix, GNU/Linux, Perl installation, C, C++, Lisp, Perl programming.
 
-Have extensive experience with Unix and C (since 1983), Internet protocols
-(1987), International Standards for character sets (1988), SGML (1990),
-ANSI Common Lisp (1994); Emacs user and programmer from 1984 to 1987
-(TOPS-20) and 1991 to present (Unix).  Have worked on GNU Emacs development
-since early 1994, both in Emacs Lisp and C.  Have been tracking development
-code for Emacs since mid-1995, and know new versions intimately.
+CGI programming.
 
-Services offered: installation, support, customization, and development of
-new packages, plus courses and seminars from basic usage through Emacs Lisp
-programming to writing extensions in C.  General aid with all GNU software.
+Installation, porting.
 
-Rates depend on duration of work: From $6/minute for <= 1 hour, to $500/day
-for >= 1 month.  Service agreements are encouraged.  Cover Scandinavia for
-on-site work.  Remote debugging and help by mail available for smaller
-fees, without limits to distance.
+Specification development, design, implementation, documentation.
 
-Please call only about actual work, I prefer mail for all other questions.
+Rate: $60/hour, or fixed contract.  On-site support available in
+greater Kansas City area.
 
-I accept VISA and Mastercard, preferred for remote jobs and small amounts.
+Updated: 2002-04-23
 \1f
-Wolfgang S. Rupprecht          <wolfgang@wsrcc.com>
-47 Esparito Ave.
-Fremont, CA 94539-3827
-(510) 659-9757
+Jonas Oberg                  (TeX: Jonas \"Oberg
+Rimfrostgatan 95                   Rimfrostgatan 95
+S-418 40  Goteborg                 S-418 40 G\"oteborg
+Sweden                             Sweden)
+    
+Phone: +46-733-423962
+E-mail: <jonas@gnu.org>
+
+I offer support for most GNU software including the GNU
+Hurd and also do system administration on GNU systems.
+I can do free software development and have a good
+understanding of automake, autoconf, flex, bison, guile,
+texinfo and much more. Rates around USD$100.
+
+Updated: 2002-04-22
+\1f
+Francesco Potortì <pot@gnu.org>
+Via S.Stefano, 8
+56123 Pisa, Italy
+Tel. (050)560671
+
+Emacs: installation and maintenance, training and tutorials,
+       customisation, extensions, troubleshooting.  Author of some of
+       the packages in the emacs distribution, has made the porting
+       of emacs to the Motorola Delta architecture.
+
+Other: installation and maintenance of GNU software.  Experience with
+       hylafax, RCS, gperf, etags, smail, indent, diff, gawk, gcc,
+       screen.  Is the current maintainer of etags.
 
-Anything, (lisp, C, customization, porting, installing) I have
-written thousands of lines of GNU Emacs C and Lisp code.  Original
-author of the floating point additions in Emacs 19.
+Rates: 100 E/hour.
+       Prefer e-mail communication to telephone.
 
-Rates: $95/hr.
+Qualifications: Electronic Engineering degree, Pisa.  Full time
+       researcher in CNUCE-CNR.
+       Familiar with elisp programming, porting of C programs,
+       low-level TCP/IP programming for embedded systems.
 
-Updated: 14Apr94
+Updated:  2002-06-28
 \1f
-Signum Support AB              <info@signum.se>
-Box 2044     _                 ...!seunet!signum!info
-S-580 02 Linkoping, Sweden
-+46 13 21 46 00 voice
-+46 13 21 47 00 fax
+Rodolphe Quiedeville <rodolphe@quiedeville.org>
+1 Quai Martin 
+56400 Auray
+France
+Tel (33 1) 613796341
+http://rodolphe.quiedeville.org/
 
-Signum Support AB is a company dedicated to supporting, developing
-and distributing free software for, including but not limited to,
-UNIX systems. The people behind Signum Support AB have many years
-of general UNIX experience, both as system administrators and as
-programmers, and also extensive experience in maintaining the GNU
-programs, both administrating it and finding and fixing bugs.
+Experience:   Original author and current maintainer of the Lolix project 
+              can be found at http://www.lolix.com
 
-Services offered:
+              I have more than 5 years experience on free software 
+              system administration.
 
- - Installation and customizing GNU and other free software.  We will
-   make free software as easy to install and use as shrink wrapped
-   programs.
- - Warranty protection.
- - Customization and porting.
- - Subscriptions to new versions which we will send monthly or with
-   any other interval.
- - Finding, Recommending and Investigation of free software in any
-   area of the customers choise.
- - Regular consulting.
+Programming:  PHP, Perl, Unix shell
+
+Services:     Anything related to free software network and system administration.
+
+Updated: 2002-07-01
+\1f
+Red Hat, Inc.
+<embedded-info@redhat.com>
+1325 Chesapeake Terrace
+Sunnyvale, CA 94089 USA
+Toll free: 866-2REDHAT ext. 3005
++1 408 542 9600 voice
++1 408 542 9699 fax
+
+GNUPro Tools 
+Red Hat provides supported and maintained versions of gcc, g++, gdb
+with GUI, GNU linker and GNU macro assembler.  In addition, Red Hat
+provides these GNU software development tools for well over many
+popular host-target configurations.  Support includes bug fixes and
+semi-annual releases of the toolset.  Each release is regression
+tested and includes substantial improvements and additions to the
+current release.  Support is available through Incident support
+packages, or Unlimited support for specific user groups.  GNUPro is
+available with standard, custom, and vintage toolchains for both
+native and embedded application development.  New target processors
+are being added regularly.  Rates for support for standard products
+start at $12,500.
+
+Embedded Linux
+Red Hat offers Red Hat Embedded Linux to companies looking for an open
+source and royalty-free runtime solution.  Red Hat Embedded Linux
+currently supports certain ARM, StrongARM, and MIPS families of
+processors.  Embedded Linux supports multiple graphics APIs, is
+compliant with POSIX APIs and thread support, can be configured as low
+as 512k memory footprint including TCP/IP and NFS built into the
+kernel, and supports journaling and transparent compression in
+filesystems.  Support for new processors is available via Red Hat
+Professional Services.
+
+Updated: 2001-05-16
+\1f
+Relogic AB
+Pipersgatan 26
+Box 868
+SE-112 28  Stockholm
+SWEDEN
+
+web http://www.relogic.se
+e-mail info@relogic.se
+phone +46 708 800 000
+fax +46 708 800 580
+
+Relogic provides experienced unix developers that know and love GNU
+products. We can take on anything from single contractor support to
+full scale projects. We know all programming languages and all Unix
+dialects.
+
+Updated: 2002-04-19
+\1f
+RON's Datacom Co., Ltd.
+79, DongWu Ave.,
+Wuhan, Hubei Province
+430040 China P.R.
+Tel +1370-113-0868(mobile) +86-27-83222108(office), Fax +86-27-83222108
+http://www.rons.net.cn
+info@mail.rons.net.cn
+
+Ron's Datacom publishes the truly free ( the "free" in freedom)
+monthly periodical --- FREE SOFTWARE Magazine(FSM), offering a series
+of free software training courses entitled "Hackerdom", including:
+
+- Working with GNU Emacs;
+- Programming in Emacs Lisp;
+- Using and Porting GNU CC;
+- Flex and Bison;
+- Debugging with GDB;
+- Device Driver Development with GNU AS and C;
+- Shell Programming with BASH; 
+- GNU Building Tools: Make, Automake, Autoconf, M4;
+- Typesetting and Layout Designing in TeX and PostScript;
+- Parsing XML Documents.
+- Source Code Version Management with CVS;
+- GNU Awk and Sed;
+
+RON's Datacom Typesetting Workshop offers professional typesetting service
+for both academic and commericial publishers, and solutions for building 
+the modern electronic publishing system with industrial strength.
+
+Hong Feng gives speeches to the public about the philosophy of free
+software, and importance of freedom, suggestions for curriculum
+reforms of computing science department in the universities and colleges.
+
+Please visit our website (www.rons.net.cn) for more details.
+
+Updated: 2002-05-12
+\f
+Phillip Rulon
+122 Blossom Rd.
+Westport, MA 02790
+USA
+508.672.3007
+<pjr@gnu.org>
+
+15 years experience with GNU systems and tools.  Available for any free
+software project.  Most useful for network design and construction or
+dynamic web development.  Very good Debian, Perl, and Apache.
+
+Boston, travel OK.
+$100/hr, flat rate possible.
+
+Updated: 2002-06-28
+\1f
+Sankhya Technologies Private Limited,   <sales@sankhya.com>
+III FLoor, #30-15-58 "Silver Willow",
+Dabagardens, Visakhapatnam - 530 020
+INDIA
+Tel: +91 891 5542665
+Fax: +91 891 5542666
+http://www.sankhya.com/info/services/gnu/gnu.html
+                                                                                                       
+SANKHYA Development is a package of software engineering services
+structured around select technologies in the areas of Compilers,
+Assemblers and Linkers, Debuggers. Our rich experience with such
+technologies enables us to deliver competitive software development
+services to you, customized to your specific requirements.
+                                                                                                       
+Sankhya offers competitive and cost-effective GNU maintenance and
+support services for gcc, binutils, libtools and gdb.  GNU Development
+and Maintenance focuses on providing C, C++ compiler development,
+assembler and linker development, debugger development, and compiler
+optimizations. For semiconductor and chip design companies we offer
+annual maintenance packages, and for software developers we offer
+annual support packages. Following services are provided for gcc,
+binutils, libtools and gdb,
+
+  * Retargeting gcc, binutils, libtools and gdb for new processor
+    architectures, including RISC, CISC, VLIW or DSP architectures.
+  * Implementing processor specific optimizations.
+  * Annual Developer Support for developers.
+  * Maintenance packages for CPU/SoC vendors. We offer variety of
+    development/maintenance packages.
+
+UPDATED: 2004-02-13
+\1f
+Sparkle Computer Co Ltd
+
+email: <info:sparkle-cc.co.uk>
+web:   www.sparkle-cc.co.uk
+
+Specialists in software development and networks in London and
+South-East England, primarily using open source tools.
+
+    - Network security implementation using iptables, snort
+    - Network security testing using nmap and nessus
+    - Web services infrastruture with apache, tomcat, perl, jboss
+    - Software development in C, C++, java, perl
+    - Databases including MySQL and PostgreSQL.
+    - Mail services with sendmaill, MailScanner, spamassassin and virus
+      scanners
+    - Windows file and print services with Samba
+
+Development, configuration and consultancy services at 600
+(pounds)/day. Fixed price negotiable. Managed administration and
+monitoring negotiable.
 
-Rates: For software items, request our price list.
-       For consulting, 400-800 SEK/hour.
-
-Updated: 14Apr94
-\1f
-Small Business Systems, Inc.           <postmaster@anomaly.sbs.com>
-Box 17220, Route 104
-Esmond, RI  02917
-401.273.4669
-
-Rate:  Varies depending on complexity of task.
-       Hourly and fixed-rate contracts are available.
-Programs Supported:    All
-
-Updated: 14Apr94
-\1f
-Julian H. Stacey.  <stacey@freefall.cdrom.com>
-Vector Systems Ltd, Holz Strasse 27d, D 80469 Munich (Muenchen), GERMANY.
-Tel. +49 89 268616  (089 268616 in Germany)  09:00-21:00 Timezone=GMT+01:00
-
-Sources: All FSF/GNU, FreeBSD-current, X-Windows, XFree86, NetBSD, Mach, etc.
-       (Plus various other things, such as, but not limited to:
-         blas blt cflow CAD cnews crypt dvi2lj eispack elm encryption expect
-         ezd f2c flexfax gic gopher info-zip ingres inn jpeg kermit ksh
-         less lha linpack md5 mh mprof mtools mush nntp octave pbmplus
-         popper sather sc schemetoc slurp sml spreadsheet sup tcl tcl-dp
-         tcsh tcx term tex tiff tk top trn unarj ups urt wine xlock xv
-         xview xxgdb zmodem zip zircon zoo zsh.)
-Media: QIC 1/4" Cartridge 525M, 150M, & 60M, TEAC CAS-60 60M Cassette,
-       CD-ROM, Floppies 1.4M & 1.2 & 720K & 360K. DAT arrangeable.
-       Postal Service C.O.D.(=`Nachnahme') or pre payment available.
-Commercial Consultancy:
-       Custom Designs, Provision & support of FreeBSD or Unix, C, FSF tools,
-       X Windows, own tools, systems engineering, hardware interfacing,
-       multi lingual European, Cyrillic & Chinese tools & systems,
-       Unix, MSDOS, real time etc, communications & scientific & industrial.
-DEUTSCH + FRANCAIS:
-       Man kann mir in Deutsch schreiben, (oder mich anrufen).
-       Je comprend Francais, mais je n'ecris pas des responses en Francais.
-       (Contact me in English, German, or French).
-FREE for Symmetric Computer Systems Model 375 owners:
-       Free Binaries & sources on SCS/375's TEAC 50/60M Cassette, for:
-       GCC-1.40, UUCP-1.4, Ghostscript 2.3, Tar-1.08, Gzip-1.2.2 etc.
-       (Native SCS compiler can't compile GCC on this NSC32016 based BSD4.2)
-On Request:  Resume, Company Profile, Index of public & proprietary tools,
-Rate:  ~120 DM/hour. ~100DM/Cartridge.  (1.5DM = $1 USA = 0.6 UK Pounds @4/'94)
-Short enquiries free. (Kurze Anfragen Ohne Gebuhr).
-
-Updated: 14Jun94
-\1f
-Richard M. Stallman    <rms@prep.ai.mit.edu>
-UUCP:  {mit-eddie,ucbvax,uunet,harvard,uw-beaver}!ai.mit.edu!rms
-545 Tech Sq, Rm 430
+Updated: 2002-07-01
+\1f
+Andre Spiegel    <spiegel@gnu.org>
+Dipl.-Inform.
+Berlin, Germany
+
+Maintainer of the GNU Emacs version control package (VC).
+
+I can provide consulting and practical help for the installation and
+administration of GNU/Linux systems, in particular Debian.  Also
+knowledgeable on many other Unix derivates, and network technology.
+Installation, porting and customization of GNU software is possible; I
+have programming experience in C, C++, Java, and Emacs Lisp, among
+others.  Expertise in version control using RCS or CVS.  I also give
+seminars on the above subjects.
+
+Rates: 75 EUR/hr (US$ 70)
+
+Updated: 2002-04-22
+\1f
+Name:           Julian Stacey <jhs.fsf@bim.bsn.com>
+Location:       Muenchen, Deutschland   (Munich, Germany).
+Qualifications: University Degree,  BSc Hons Computers & Cybernetics,  1980.
+Resume:         http://bim.bsn.com/~jhs/stacey/   (includes phone number).
+Rate:           80 - 100 Euros / Hour.
+Specialisation: Unix (Pref. BSD or Linux), C, X-Windows, FSF tools, firewalls,
+                systems engineering, hardware interfacing, real time/embedded,
+                custom design & porting. No { Emacs, Cobol, Microsoft }.
+Net Consulting: Link speed: DSL @ 768 K bit/s.
+Free Sources:   BSD, X-Windows, XFree86, FSF;  Personal sources on web.
+Free GCC-1.40:  For Symmetric Computer Systems Model 375 (native cc is broken).
+Languages:      I am English. Ich verstehe Deutsch. Je comprend Francais,
+                (lentment!).  Use Hoch Deutsch, not Bayerisch, Spell slowly     
+                & clearly, Use single digits, no inverted digit pairs etc.
+Contact:        State aprox. amount of days/months you want to purchase 
+               professional consultancy .. OR ..  Note I am NOT a free help
+               desk !  Please post your questions to a newsgroup, for those
+               with more time, knowledge, & inclination than I.
+
+Updated: 2002-04-19
+\1f
+Richard M. Stallman    <rms@gnu.org>
+545 Tech Sq, Rm 425
 Cambridge, MA 02139
 
 Emacs: anything whatever
@@ -737,199 +1186,222 @@ Original inventor of Emacs and main author of GNU Emacs and GCC.
 
 Rates: $6/min or $250/hr.
 
-Updated: 14Apr94
+Updated: 2002-04-19
 \1f
-JoS-Ware Comp Tech     Johan Svensson <support@spird.jos.ec.lu.se>
-Box 739
-220 07 LUND
-SWEDEN
-Tel +46-46-104505 (Dept. of Economics, University of LUND)
-Fax +46-46-188445 (JoS-Ware Comp Tech)
-
-What:  We offer consulting services regarding installation,
-       customization, troubleshooting, porting and integration
-       of all free software, including GNU software.
-
-Spec.: Network integration, integration of public domain software
-       into commercial systems, WorldWideWeb, C, X-Windows, Linux,
-       networked information systems
+Static Free Software
+4119 Alpine Road
+Portola Valley, Ca 94028
+(650) 851-2927
+http://www.staticfreesoft.com
 
-How:   Remote login over internet, email, modem, phone, personal
-       visits (in southern Sweden mainly)
+Static Free Software developed and supports the "Electric VLSI Design
+System".  Steven Rubin, the founder of the company and author of
+Electric, is available for enhancements, support, and training.
 
-Rates: 550SEK (+ tax) per hour within Sweden
-       370SEK (+ tax) per hour within Sweden for educational org.
-       US $90 per hour outside Sweden
-       US $70 per hour outside Sweden for educational org.
-       Note: fees may vary and special arrangements may be considered
+Please see our web page at www.staticfreesoft.com for more information
+about our products, services, and prices.
 
-Entered: 7Apr94
+Updated: 2002-04-19
 \1f
-Kayvan Sylvan <kayvan@satyr.Sylvan.COM>
-Sylvan Associates
+Tommy Stiansen
+Skeielia 112
+5238 Raadal
+Norway
+
++ 47 92 40 42 00
++ 47 55 22 12 17
+ts@pcias.no
+
+Special fields:
+Unix, GNU/Linux, Perl installation, C, C++, Lisp, Perl programming.
+CGI programming.
+Installation, porting.
+Specification development, design, implementation, documentation.
+Firewalls, security analysis.  Porting Windows platforms to GNU/Linux.
+Teaching, preaching GNU/Linux / unix and Telecom.
+15 years experience with GNU systems and tools.
+Most useful for network design and construction or
+dynamic web development.  Expert in Apache, php, Mysql, Telecom related,
+C, Lisp, Perl.
+
+Updated: 2002-04-18
+\1f
+Swing Digital Ltd. <hello@swingdigital.com>
+15-17 Middle Street
+Brighton
+BN1 1AL
+United Kingdom
+Tel +44 (0) 1273 20 11 66
+Fax +44 (0) 1273 20 11 68
+http://www.swingdigital.com
+
+Swing Digital actively supports the development of the GNU.FREE 
+Internet Voting system. Through this support we have gained the 
+unique expertise to support, install and run GUN.FREE-based Internet 
+votes. We are also available in a consultancy basis to offer advice 
+for organisations wishing to run GNU.FREE themselves.
+
+Our consultancy fees start at 900 Euro (550 UK pounds) per day. We 
+are also able to securely host Internet Votes, prices on application.
+
+Updated: 2002-04-19
+\1f
+Kayvan A. Sylvan <kayvan@sylvan.com>
+Sylvan Associates, Inc.
 879 Lewiston Drive
-San Jose, CA 95136
-Phone: 408-978-1407
+San Jose, CA 95136-1517
+Phone: (408) 978-1407
+Fax:   (408) 978-0472
+
+I will help you port, install and customize GNU Emacs, GCC, G++, GNUmake,
+bison, and other GNU tools on almost any architecture and operating
+system. Questions answered. GNU C/C++, Java and lisp hacking available.
 
-I will help you port, install and customize GNU Emacs, GCC, G++,
-bison, and other GNU tools on almost any architechture and operating
-system. Questions answered. GNU C and lisp hacking available. I will
-also do ongoing support and periodic upgrades if you get on my GNU
+I will also do ongoing support and periodic upgrades if you get on my GNU
 software subscription list.
 
-Rates: $60-$100/hour, depending on type of work. Substantial discounts
-for long-term contracts and also for educational or non-profit
-institutions.
+Rates: $100-$125/hour, depending on type and quantity of work.
+Substantial discounts for long-term contracts and also for educational or
+non-profit institutions.
 
-Experience: Many different Unix systems (2.9BSD to 4.4BSD, SVR3 and
-SVR4, Linux, Xenix). Systems programming and system administration on all
-brands of Unix. Kernel hacking experience. Lots of porting experience.
-I can port anything to anything (within reason).
+Experience: Many different Unix systems (2.9BSD to 4.4BSD, Xenix, SVR3 and
+SVR4, Solaris, Linux, FreeBSD). Systems programming and system
+administration on all brands of Unix.
 
-Updated: 14Apr94
+Kernel hacking experience. Lots of porting experience.
+
+Updated:  2002-04-18
 \1f
-Leonard H. Tower Jr.   <tower@prep.ai.mit.edu>
-36 Porter Street
-Somerville, MA 02143, USA
-+1 (617) 623-7739
+Alfredo Tomasini
+<alto555@earthlink.net>, <alfredo.tomasini@c-cube.com>
 
-Will work on most GNU software.
-Installation, handholding, trouble shooting, extensions, teaching.
+GNU/Linux Intel desktop/laptop installation, setup, and networking.
+Installation of GNU tools on SunOS and GNU/Linux.
+Sed and Gawk script development.
 
-Rates: 100.00/hour + travel expenses.  Negotiable for non-profits.
+Languages:  English and Italian.
 
-Experience: Have hacked on over a dozen architectures in many languages.  Have
-system mothered several varieties of Unixes.  Assisted rms with the front end
-of gcc and it's back-end support.  Resume available on request.
+Fee:  $50/hour.
 
-Entered: 14Apr94
+Updated: 2002-04-19
 \1f
-UrbanSoft AO  <info@usoft.spb.su>
-68 Malooktinskii Prospect
-St. Petersburg, Russia 195272
+Tksoft Inc.
+Papinkatu 19
+06100, Porvoo
+Finland
++358 40 570 9900
 
-Custom GhostScript and TeX programming by e-mail.
-Database documents, directories, standard forms.
+http://www.tksoft.com/
 
-UrbanSoft uses a portion of its revenues to contribute
-diskette distributions of GNU software to Russian
-universities (most of which lack FTP access).
+Software development services for GNU programs.
+We can modify and fix GNU software.
+We will also develop new software under the GNU license.
 
-Rates: 30,000 rubles (currently USD 16.80) per hour.
-       Fixed rate contracts also possible.
-       Payable by bank transfer.
+10 years of experience in linux and other GNU software.
 
-Updated: 20Apr94
+We speak Finnish, Japanese and English.
+
+Updated: 2004-05-13
 \1f
-noris network
-Matthias Urlichs
-Schleiermacherstrasse 12
-90491 Nuernberg
-Germany
-Phone: +49 911 9959621
-Fax: +49 911 5980150
-<info@noris.de>
-http://info.noris.de/ (German)
+Leonard H. Tower Jr.    <tower@ai.mit.edu>      <tower@art.net>
+36 Porter Street
+Somerville, MA  02143-2313
+USA
++1-617-623-7739
 
-Expertise:
-  OS internals, esp. Linux and BSD, esp. device drivers
-  Network protocol / program design and coding
-  Utilities coding and maintainance
-  Program debugging, testing
-  User interface design and testing
-  Several programming and tool languages
+Will work on most GNU, GPLed, and Open Source software.
+Installation, handholding, trouble shooting, extensions, teaching, etc.
 
-Services:
-  Installation, debugging, enhancement, distribution,
-    for all kinds of free software.
-  System administration for most Unix-like systems.
-  Email, Fax, phone, and in-person consulting (and/or "question answering").
-  Remote support and system monitoring (over the Internet),
-  Update service (new tools tested and installed automagically)
-  Internet access
+Rates: $ 250.00/hour + travel + expenses.  Fixed fee quotes available.
+         Negotiable for non-profits.
 
-Rates:
-  DM 110 (~$70) per hour
-  Support contracts start at DM 170/month + DM 30/supported system.
-  Willing to travel for sufficiently large jobs.
-  Rates don't include taxes.
-
-Entered: 16Aug94
-\1f
-Joe Wells <jbw@cs.bu.edu>
-Postal Address:
-  care of: Boston University Computer Science Department
-  111 Cummington Street, Room 138
-  Boston, Massachusetts 02215
-Work Telephone: (617) 353-3381 (sorry, but no answering machine or voice mail)
-Home Telephone: (617) 739-7456 (until August 1995)
-Finger "jbw@cs.bu.edu" for up-to-date contact information.
+Experience: Have hacked on over a dozen architectures in many languages.  Have
+system mothered too many varieties of Unixes.  Assisted rms with the front end
+of GCC and its back-end support.  Installed and worked with many GNU
+programs including GNU Emacs.  Resume available on request.
 
-Experience:
-    I have B.A. and M.A. degrees in Computer Science and have completed
-    all but the dissertation for a Ph.D. in C.S.  My research for my
-    Ph.D.  is in the areas of logic, type systems, and programming
-    language theory.  My primary programming languages are Emacs Lisp,
-    Perl, and Bourne shell, but of course I can program in any language.
-    I have written numerous Emacs Lisp packages.  I started the USENET
-    "List of Frequently Asked Questions about GNU Emacs with Answers" and
-    maintained it for more than two years.  Most of my work has been
-    related to the telephone system (modems, voice mail, etc.), but I am
-    not limited to that.  Send e-mail for my complete resume or curriculum
-    vita.
+Updated: 2002-04-18
+\1f
+Xetpoint Oy
+P.O. Box 43, FIN-33961 Pirkkala, Finland
 
-Programs supported:
-    GNU Emacs and Taylor UUCP:
-      Installation, training, customization, bug fixing, troubleshooting,
-      extension, development, porting, or answering any kind of question.
-    Any other GNU program:
-      The same things, but I don't necessarily have huge amounts of
-      experience with the particular program.
-
-Working conditions:
-    I am usually available for part-time work (less than 20 hours per week
-    including any travel time).  I can sometimes make time for full-time
-    work for a month or two; please inquire.  I can either work in or near
-    Boston or via the Internet or via telephone; travel outside the Boston
-    metropolitan area can be negotiated.  My schedule is very flexible.
-    Any programs I write will normally have the copying conditions of the
-    GNU General Public License; this is negotiable.
-
-Rates: $65/hour as an independent contractor.
-       travel and telephone expenses.
-       higher rates if extensive travel is required.
-
-Updated: 27Sep94.
-\1f
-Herb Wood
-phone: 1-415-789-7173
-email: <ru@ccnext.ucsf.edu>
-
-I'm a better "planner" than I am a hacker.  A really good hacker will be able
-to keep many pieces of information in their short-term memory and to memorize
-new pieces of information at a fast rate.  This is not my strong point.
-Rather, I excel in domains that require knowledge of the slightly more
-theoretical parts of computer science --for example, logic, formal methods of
-program development, and functional programming.  I can write, and I have
-"tutoring" (teaching one-on-one) experience, an, unlike some programmers,
-I enjoy doing these things.
-
-I have spend a lot of time looking at the Emacs Lisp sources and customizing
-Emacs and VM.  I think I can customize Emacs and its packages quickly and
-effectively.
-
-Entered: 30Jul95
-\1f
-Yggdrasil Computing, Inc./ Freesoft, Inc.      <info@yggdrasil.com>
-4880 Stevens Creek Blvd. Ste. 205
-San Jose, CA  95129
-(408) 261-6630
-(800) 261 6630
-
-Updated: 14Apr94
+Email: <info@xetpoint.fi>
+Web: http://www.xetpoint.fi/
+
+Services:
+- GNU/Linux system installation, configuration and maintenance
+- GNU/Linux system administration
+- GNU/Linux consultation and support
+- GNU/Linux and free software customization
+- Network administration
+- Free software development and integration
+- Training
+- Security analysis
+
+Rates: 80 EUR/hour or fixed contract.
+
+Updated: 2004-02-13
+\1f
+Wasabi Systems
+<sales@wasabisystems.com>
+500 E. Main St., Suite 1520
+Norfolk, VA 23510
++1 757 248-9601 voice
++1 509 461-7283 fax
+http://www.wasabisystems.com/
+
+Wasabi Systems provides service and support for the popular GNU
+development tools, as service packages and as stand-alone software
+distributions.  We provide cross-compilers and cross-debuggers to be
+used for developing all types of embedded systems.  We specialize in
+optimizing the GNU tools for particular targets, and in providing
+support for standardized tools to be used on multiple types of hosts
+for multiple types of targets.  We provide first- and/or second- tier
+support for you and/or your end-users.
+
+Support is available in a variety of packages, with a base rate of
+$200/hour.
+
+Updated: 2004-03-02
+\1f
+Jody Winston
+xprt Computer Consulting, Inc.
+731 Voyager
+Houston, TX, 77062
+(281) 480-UNIX, <josephwinston@mac.com>
+
+We have supported, installed, and used the entire GNU software suite
+for over 10 years on many different Unix platforms.  We have written
+character device drivers and proc file systems for custom hardware
+running on GNU/Linux.  We have developed extensions for tcl and Python.
+In addition, we have developed a custom X11 server and X input
+extensions. Our consulting rate is $150.00 US dollars per hour,
+negotiable, plus a per diem for out of town work.
+
+Updated: 2002-04-19
+\1f
+The Written Word
+Web:   http://thewrittenword.com
+Email: info@thewrittenword.com
+Tel:   (800) 372-7476
+
+The Written Word provides CDs of pre-compiled Open Source applications
+on popular UNIX variants.  Clients can purchase a one-time CD set
+($149/set), or a subscription, which provides four quarterly releases.
+Two types of subscription are available: "media only" ($550/year), or
+"media and updates" ($1459/year).  The "media and updates"
+subscription entitles the subscriber, via a web site, to patches,
+security fixes, new releases to existing packages, new packages,
+online documentation, and changelog information, between releases, and
+a central bug tracking system for all packages.
+
+Updated:  2000-11-27
 \1f
 
 For a current copy of this directory, or to have yourself listed, ask:
-       gnu@prep.ai.mit.edu
+       service@gnu.org
+
+A current version should be available on our web site at:
+ http://www.gnu.org/prep/service.html
 
 ** Please keep the entries in this file alphabetical **
index e6a3b3e..64af473 100644 (file)
@@ -88,7 +88,7 @@ time, so it would be of great benefit if you learn them now.
 >> Move into the line with C-f's and then up with C-p's.
    See what C-p does when the cursor is in the middle of the line.
 
-Each of text line ends with a Newline character, which serves to
+Each line of text ends with a Newline character, which serves to
 separate it from the following line.  The last line in your file ought
 to have a Newline at the end (but Emacs does not require it to have
 one).
@@ -577,7 +577,7 @@ C-x C-f.  This way you can get quite a number of files inside Emacs.
 
 Emacs stores each file's text inside an object called a "buffer."
 Finding a file makes a new buffer inside Emacs.  To see a list of the
-buffers that current exist in your Emacs job, type
+buffers that currently exist in your Emacs job, type
 
        C-x C-b   List buffers
 
@@ -749,7 +749,7 @@ Emacs deletes its auto save file.
 
 If the computer crashes, you can recover your auto-saved editing by
 finding the file normally (the file you were editing, not the auto
-save file) and then typing M-x recover file<return>.  When it asks for
+save file) and then typing M-x recover-file<return>.  When it asks for
 confirmation, type yes<return> to go ahead and recover the auto-save
 data.
 
diff --git a/etc/gtkrc b/etc/gtkrc
new file mode 100644 (file)
index 0000000..a860cf9
--- /dev/null
+++ b/etc/gtkrc
@@ -0,0 +1,9 @@
+# Force the window background to be the same as the default face background:
+# white.
+
+style "default_background"
+{
+       bg[NORMAL] = { 1.0, 1.0, 1.0 }
+}
+
+class "GtkXEmacs" style "default_background"
index 538308a..2c610bf 100644 (file)
@@ -273,7 +273,7 @@ Non-nil if we need to inhibit XEmacs from loading custom.el after init.el.")
 ;; and in fact all we've done is copied the definition.  Note again
 ;; how we check to avoid clobbering an existing definition. (It's good
 ;; style to do this, in case some improvement was made to the
-;; already-existing function -- otherwise we might subsitute an older
+;; already-existing function -- otherwise we might substitute an older
 ;; definition and possibly break some code elsewhere.)
 ;;
 ;; NOTE ALSO: It is in general *NOT* a good idea to do what we're
@@ -735,7 +735,10 @@ backward, and defaults to 1.  Buffers whose name begins with a space
 ;; File menu.
 
 (when (console-on-window-system-p)
-    (global-set-key "\C-x\C-c" nil))
+    (global-set-key "\C-x\C-c"
+      #'(lambda () (interactive)
+         (beep)
+         (message "Use the \"File/Exit XEmacs\" menu item to exit XEmacs"))))
 
 ;; Make C-k always delete the whole line, which is what most people want,
 ;; anyway.
@@ -1390,7 +1393,7 @@ previous with \\[backward-sexp]."
 
 
 ;;; ********************
-;;; Filladapt is a syntax-highlighting package.  When it is enabled it
+;;; Filladapt is an adaptive text-filling package.  When it is enabled it
 ;;; makes filling (e.g. using M-q) much much smarter about paragraphs
 ;;; that are indented and/or are set off with semicolons, dashes, etc.
 
index d5ffb05..bd5d443 100644 (file)
@@ -1,3 +1,33 @@
+2005-02-06  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.17 is released
+
+2005-01-29  Vin Shelton  <acs@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-01-09  Steve Youngs  <steve@sxemacs.org>
+
+       From Andrey Slusar <anrays@gmail.com>:
+
+       * fakemail.c (CURRENT_USER): Define it if FreeBSD version is >=
+       400000.  Also, when FreeBSD version is >= 400000 geteuid returns
+       uid_t instead of unsigned short.
+
+2004-12-17  Vin Shelton  <acs@xemacs.org>
+       * etags.c (add_regex): Use zeropattern to initialize patbuf and
+       thus avoid a segv.
+
+2004-12-05  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.16 is released
+
+2004-06-23  Sean Legassick <sean@informage.net>
+
+       * etags.c: Allow whitespace before python function definitions.
+
 2004-02-02  Vin Shelton <acs@xemacs.org>
 
        * XEmacs 21.4.15 is released
index 8b81e61..d59e2e8 100644 (file)
@@ -4017,8 +4017,9 @@ Perl_functions (inf)
 \f
 /*
  * Python support
- * Look for /^def[ \t\n]+[^ \t\n(:]+/ or /^class[ \t\n]+[^ \t\n(:]+/
+ * Look for /^[ \t\n]*def[ \t\n]+[^ \t\n(:]+/ or /^class[ \t\n]+[^ \t\n(:]+/
  * Eric S. Raymond <esr@thyrsus.com> (1997)
+ * Sean Legassick <sean@informage.net> (2004)
  */
 static void
 Python_functions (inf)
@@ -4028,6 +4029,7 @@ Python_functions (inf)
 
   LOOP_ON_INPUT_LINES (inf, lb, cp)
     {
+      cp = skip_spaces (cp);
       if (*cp++ == 'd'
          && *cp++ == 'e'
          && *cp++ == 'f' && iswhite (*cp++))
@@ -5144,6 +5146,7 @@ add_regex (regexp_pattern, ignore_case, lang)
      bool ignore_case;
      language *lang;
 {
+  static struct re_pattern_buffer zeropattern;
   char *name;
   const char *err;
   struct re_pattern_buffer *patbuf;
@@ -5164,11 +5167,9 @@ add_regex (regexp_pattern, ignore_case, lang)
   (void) scan_separators (name);
 
   patbuf = xnew (1, struct re_pattern_buffer);
+  *patbuf = zeropattern;
   /* Translation table to fold case if appropriate. */
   patbuf->translate = (ignore_case) ? lc_trans : NULL;
-  patbuf->fastmap = NULL;
-  patbuf->buffer = NULL;
-  patbuf->allocated = 0;
 
   err = re_compile_pattern (regexp_pattern, strlen (regexp_pattern), patbuf);
   if (err != NULL)
index a074fa8..13976ba 100644 (file)
@@ -149,9 +149,17 @@ extern int fclose (), pclose ();
 extern char *malloc (), *realloc ();
 #endif
 
+#if defined(__FreeBSD_version) && __FreeBSD_version >= 400000
+#define CURRENT_USER
+#endif
+
 #ifdef CURRENT_USER
 extern struct passwd *getpwuid ();
+#if defined(__FreeBSD_version) && __FreeBSD_version >= 400000
+extern uid_t geteuid ();
+#else
 extern unsigned short geteuid ();
+#endif
 static struct passwd *my_entry;
 #define cuserid(s)                             \
 (my_entry = getpwuid ((int) geteuid ()),       \
index 623b3c2..f7a572c 100644 (file)
@@ -741,14 +741,14 @@ popmail (char *user, char *outfile, char *password)
   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);
     }
 
@@ -796,7 +796,7 @@ popmail (char *user, char *outfile, char *password)
           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);
            }
@@ -844,7 +844,7 @@ popmail (char *user, char *outfile, char *password)
              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);
                }
@@ -855,7 +855,7 @@ popmail (char *user, char *outfile, char *password)
   VERBOSE(("closing server             \n"));
   if (pop_quit (server))
     {
-      error (pop_error, NULL, NULL);
+      error ("%s", pop_error, NULL);
       return (1);
     }
     
index 8c84814..170a5d5 100644 (file)
@@ -1,3 +1,256 @@
+2005-02-06  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.17 is released
+
+2005-01-29  Ben Wing  <ben@xemacs.org>
+
+       * shadow.el (find-emacs-lisp-shadows):
+       Add custom-defines to list of ignored files.
+
+2005-01-17  Adrian Aichner  <adrian@xemacs.org>
+
+       * simple.el (shifted-motion-keys-select-region): Fix statement
+       about unshifted-motion-keys-deselect-region.
+
+2004-12-15  Ville Skyttä  <scop@xemacs.org>
+
+       * bytecomp-runtime.el (make-obsolete): Add 3rd argument (no-op for
+       now) for GNU Emacs compatibility.
+       (make-obsolete-variable): Ditto.
+
+2004-01-08  Ben Wing  <ben@xemacs.org>
+
+       * code-files.el (load):
+       File positions are 0 based not 1 based. Thanks to Steve Youngs.
+
+2004-12-05  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.16 is released
+
+2004-12-04  Vin Shelton  <acs@xemacs.org>
+
+       * auto-autoloads.el: Regenerated.
+
+       * custom-load.el: Regenerated.
+
+2004-09-15  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       Fix bug: apropos errors if a defalias refers to an undefined
+       function.  <87pt4pmdcs.fsf@tleepslib.sk.tsukuba.ac.jp>
+
+       * apropos.el (apropos):
+       (apropos-command):
+       * help.el (frob-help-extents):
+       * help-macro.el (make-help-screen):
+       * hyper-apropos.el (hyper-apropos-grok-functions):
+       (hyper-apropos-get-doc):
+       Catch void-function error thrown by `documentation'.
+
+2004-09-02  Steve Youngs  <steve@youngs.au.com>
+
+       * packages.el (package-require): Fix incorrect arg to format.
+       This fixes a `format specifier' error.
+
+2004-08-13  Jerry James  <james@xemacs.org>
+
+       * bytecomp.el (forward-word): Tell the byte compiler the correct
+       number of arguments to forward-word.
+
+2004-08-12  Sven Grundmann  <sven@xemacs.org>
+
+       * etags.el: Fixed loading of include files for tag completion. Now
+       you can make a tag file for a library, include it into your
+       project and it will be reloaded only if it changed. Infinte
+       include loops are detected and the correct tag files are loaded.
+       * etags.el (buffer-tag-table-list): Load and verify tag files in
+       the external function buffer-tag-table-list-load.
+       * etags.el (buffer-tag-table-list-load): New. Load and verify the
+       tag files. Also load the included tag files. The priority of the
+       included files is right below their parent file. If multiple
+       matches occur then the symbols from the parent file are found
+       first.
+       * etags.el (tag-table-include-files): Corrected comment
+       string. Switched to pattern constant tags-include-pattern to have
+       it at a central location.
+       * etags.el (tags-include-pattern): Added doc string.
+       * etags.el (add-to-tag-completion-table): Removed obsolete
+       comments as the include files are allready returned by
+       buffer-tag-table-list and loaded.
+       * etags.el (find-tag-internal): The include files are allready
+       included in tag-tables as buffer-tag-table-list returns them now.
+
+2004-07-02  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * widgets-gtk.el (gtk-widget-instantiate-notebook-internal):
+       Loading items into the notebook is now done by C code.
+       * widgets-gtk.el (gtk-widget-instantiate-internal):
+       Style no longer changed.
+
+2004-06-28  Nix  <nix@esperi.org.uk>
+
+       * cmdloop.el (truncate-command-history-for-gc): Delay
+        execution of all things that look up variable bindings,
+        via `enqueue-eval-event'.
+
+2004-06-24  Vin Shelton  <acs@xemacs.org>
+
+       * package-get.el (package-get-require-signed-base-updates):
+       now defaults to nil.
+
+2004-06-09  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * subr.el (split-string): Clean up docstring.
+
+2002-01-24  John Paul Wallington  <jpw@shootybangbang.com>
+
+       * faces.el (zmacs-region): fix typo in docstring.
+
+2004-06-07  Jerry James  <james@xemacs.org>
+
+       * derived.el: Synch with Emacs 21.3.
+       * subr.el (with-local-quit): New, from Emacs 21.3.
+       * subr.el (delayed-mode-hooks): New variable, from Emacs 21.3.
+       * subr.el (run-mode-hooks): New function, from Emacs 21.3.
+       * subr.el (delay-mode-hooks): New macro, from Emacs 21.3.
+
+2004-06-16  Jerry James  <james@xemacs.org>
+
+       * cl.el (cl-set-substring): Increment start by the length of the
+       string, not the string itself.
+
+2004-05-19  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * etags.el (tag-table-include-files): Expand included TAGS file
+       paths to avoid problems with relative paths.  Thanks to Peter
+       Chubb <peterc@gelato.unsw.edu.au>.
+       * etags.el (tags-include-pattern): New.
+       * etags.el (add-to-tag-completion-table): Parse and ignore
+       trailing include lines.
+
+2004-06-21  Adrian Aichner  <adrian@xemacs.org>
+
+       * package-ui.el (pui-help-echo): Fix false cvs conflict by
+       avoiding line solely composed of equal signs.
+
+2004-06-10  Adrian Aichner  <adrian@xemacs.org>
+
+       * cus-edit.el (alloc): Typo fix.
+       * cus-edit.el (custom-browse-visibility): Ditto.
+       * cus-edit.el (custom-variable-value-create): Ditto.
+       * cus-edit.el (custom-variable-pre-reset-standard): Ditto.
+       * cus-edit.el (custom-save-variables): Bind print-length and
+       print-level to nil to avoid value abbreviation.
+       * cus-edit.el (custom-save-face-internal): Ditto.
+       * cus-edit.el (custom-save-faces): Save in sorted order.
+       * cus-edit.el (custom-save-resets): Bind print-length and
+       print-level to nil to avoid value abbreviation.
+       * cus-edit.el (custom-save-loaded-themes): Ditto.
+
+2004-06-09  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * subr.el (split-string-default-separators): New.
+       (split-string): Synch to 21.5/GNU Emacs version.  *New semantics*,
+       see comment in source.
+
+2004-01-29  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * mule/japanese.el (paragraph-start, paragraph-separate):
+       Remove anchor to BOL.
+
+2004-04-30  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * cl.el (gensym, gentemp): Improve docstrings.
+
+2004-05-10  Vin Shelton  <acs@xemacs.org>
+
+       * etags.el: Sync with 21.5 version.
+
+2004-04-21  Sven Grundmann  <sven@hellerhof.de>
+
+       * etags.el:
+       * etags.el (tags-exuberant-ctags-optimization-p): Enable optimization
+       only for use with exuberant ctags. This will also enable building of 
+       completion tables with exuberant ctags. This will not work with
+       xemacs ctags. 
+       * etags.el (get-tag-table-buffer): New function for creating of
+       completion table is used if tags-exuberant-ctags-optimization-p ist t
+       * etags.el (tags-explicit-name-pattern): Hold the name pattern for
+       finding the tag names. New.
+       * etags.el (add-to-tag-completion-table-exuberant-ctags): Defun for
+       building tag completion table with exuberant ctags. New.
+       * etags.el (find-tag-internal): Improve exact tag matching for tags
+       with name fields. Before the patch return types of functions or
+       function parameters (with exuberant ctags) were found as matches.
+
+2004-04-21  Sven Grundmann  <sven@hellerhof.de>
+
+       * list-mode.el (display-completion-list): Fixed completion list was
+       taking the width of the frame and not of the window for displaying
+       the selection methods.
+
+2004-04-18  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * menubar-items.el (default-menubar): Options are saved to custom.el.
+
+
+2004-02-23  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * isearch-mode.el (isearch-abort): Preserve successful search target.
+
+2004-03-27  Adrian Aichner  <adrian@xemacs.org>
+
+       * gnuserv.el: Sync with 21.5 version, inspired by bugreport and
+       (make-variable-buffer-local 'gnuserv-minor-mode) patch by Robert
+       Bihlmeyer.
+       * gnuserv.el (gnuserv-mode-line-string): New.
+       * gnuserv.el (gnuserv-minor-mode): Make it buffer-local, not
+       gnuserv-mode.
+       * gnuserv.el (make-x-device-with-gtk-fallback): New.
+       * gnuserv.el (gnuserv-edit-files): Use
+       make-x-device-with-gtk-fallback.
+
+2004-03-23  Malcolm Purvis  <malcolmpurvis@optushome.com.au>
+
+       * gtk-widgets.el: New import: gtk-accel-group-new.
+       * dialog-gtk.el:
+       * dialog-gtk.el (gtk-popup-convert-underscores): New.
+       * dialog-gtk.el (popup-builtin-question-dialog):
+       Added support for dialog button mnemonics.
+
+2004-03-22  Chris Green <cmg@dok.org>
+
+       * process.el (shell-command): Output buffer was ignored when a
+       background process was run via shell-command.
+
+2004-03-19  Hrvoje Niksic  <hniksic@xemacs.org>
+
+       * cus-edit.el (custom-save-variables): Retrieve a list of
+       variables to save first, sort it, and make sure the variables are
+       saved in sorted order.
+
+2004-02-23  Steve Youngs  <sryoungs@bigpond.net.au>
+       * package-get.el (package-get-update-base-from-buffer): Force
+       binary coding system for verifying GnuPG signature in the
+       package-index file.
+2003-07-06  Adrian Aichner  <adrian@xemacs.org>
+
+       * package-get.el (package-get-package-index-file-location): Handle
+       missing "EMACSPACKAGEPATH" environment variable.
+
+2003-07-05  Adrian Aichner  <adrian@xemacs.org>
+
+       * package-admin.el (package-admin-find-top-directory): Simplify
+       directory comparisions and fix substring errors on short path
+       components.
+       * package-get.el (package-get-package-index-file-location):
+       Default to first component of "EMACSPACKAGEPATH", if set.
+
+2004-02-16  Steve Youngs  <sryoungs@bigpond.net.au>
+
+       * package-get.el (process-error): New error datum.
+
 2004-02-02  Vin Shelton <acs@xemacs.org>
 
        * XEmacs 21.4.15 is released
index 76be36b..a96221c 100644 (file)
@@ -175,7 +175,10 @@ variables."
                                  ;; XEmacs change: if obsolete,
                                  ;; only mention that.
                                  (or (function-obsoleteness-doc symbol)
-                                     (documentation symbol t)))
+                                     (condition-case nil
+                                         (documentation symbol t)
+                                       (void-function "(aliased to undefined function)")
+                                       (error "(unexpected error from `documention')"))))
                            (substring doc 0 (string-match "\n" doc))
                          "(not documented)"))
                    (and do-all
@@ -225,7 +228,10 @@ Returns list of symbols and documentation found."
                                  ;; XEmacs change: if obsolete,
                                  ;; only mention that.
                                  (or (function-obsoleteness-doc symbol)
-                                     (documentation symbol t)))
+                                     (condition-case nil
+                                         (documentation symbol t)
+                                       (void-function "(aliased to undefined function)")
+                                       (error "(unexpected error from `documention')"))))
                            (substring doc 0 (string-match "\n" doc))
                          "(not documented)"))
                    (if (boundp symbol)
index 4dc16b8..670a8c8 100644 (file)
@@ -864,8 +864,7 @@ in the tag table that matches the tagname used in the previous find-tag.
 the tag.
 
 This version of this function supports multiple active tags tables,
-and completion. See also the commands `\\[push-tag-mark]' and
-`\\[pop-tag-mark]'.
+and completion.
 
 Variables of note:
 
@@ -1248,6 +1247,8 @@ Return a font descriptor object for FONTNAME, appropriate for DEVICE." nil nil)
 \f
 ;;;### (autoloads (gnuserv-start gnuserv-running-p) "gnuserv" "lisp/gnuserv.el")
 
+(defcustom gnuserv-mode-line-string " Server" "*String to display in the modeline when Gnuserv is active.\nSet this to nil if you don't want a modeline indicator." :type '(choice string (const :tag "none" nil)) :group 'gnuserv)
+
 (defcustom gnuserv-frame nil "*The frame to be used to display all edited files.\nIf nil, then a new frame is created for each file edited.\nIf t, then the currently selected frame will be used.\nIf a function, then this will be called with a symbol `x' or `tty' as the\nonly argument, and its return value will be interpreted as above." :tag "Gnuserv Frame" :type '(radio (const :tag "Create new frame each time" nil) (const :tag "Use selected frame" t) (function-item :tag "Use main Emacs frame" gnuserv-main-frame-function) (function-item :tag "Use visible frame, otherwise create new" gnuserv-visible-frame-function) (function-item :tag "Create special Gnuserv frame and use it" gnuserv-special-frame-function) (function :tag "Other")) :group 'gnuserv :group 'frames)
 
 (autoload 'gnuserv-running-p "gnuserv" "\
@@ -1501,7 +1502,7 @@ recent to least recent -- in other words, the version names don't have to
 be lexically ordered.  It is debatable if it makes sense to have more than
 one version of a package available.")
 
-(defcustom package-get-package-index-file-location (or (getenv "EMACSPACKAGEPATH") user-init-directory) "*The directory where the package-index file can be found." :type 'directory :group 'package-get)
+(defcustom package-get-package-index-file-location (car (split-path (or (getenv "EMACSPACKAGEPATH") user-init-directory))) "*The directory where the package-index file can be found." :type 'directory :group 'package-get)
 
 (defcustom package-get-install-to-user-init-directory nil "*If non-nil install packages under `user-init-directory'." :type 'boolean :group 'package-get)
 
index adbc4e1..7c198d8 100644 (file)
@@ -91,10 +91,12 @@ They will only be compiled open-coded when `byte-optimize' is true."
 ;            (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)
@@ -103,10 +105,12 @@ If NEW is a string, that is the `use instead' message."
       (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)))
index d467d54..9ecb2ee 100644 (file)
@@ -2894,7 +2894,7 @@ If FORM is a lambda or a macro, byte-compile it as a function."
 (byte-defop-compiler char-after                0-1+1)
 (byte-defop-compiler set-buffer                1)
 ;;(byte-defop-compiler set-mark                1) ;; obsolete
-(byte-defop-compiler forward-word      1+1)
+(byte-defop-compiler forward-word      0-1+1)
 (byte-defop-compiler char-syntax       1+1)
 (byte-defop-compiler nreverse          1)
 (byte-defop-compiler car-safe          1)
index 33c554c..8150e1d 100644 (file)
@@ -217,7 +217,7 @@ Keywords supported:  :test :test-not :key"
 (defun cl-set-substring (str start end val)
   (if end (if (< end 0) (incf end (length str)))
     (setq end (length str)))
-  (if (< start 0) (incf start str))
+  (if (< start 0) (incf start (length str)))
   (concat (and (> start 0) (substring str 0 start))
          val
          (and (< end (length str)) (substring str end))))
@@ -319,7 +319,10 @@ definitions to shadow the loaded ones for use in file byte-compilation."
 
 (defun gensym (&optional arg)
   "Generate a new uninterned symbol.
-The name is made by appending a number to PREFIX, default \"G\"."
+The name is made by appending a number to a prefix.  If ARG is a string, it
+is the prefix, otherwise the prefix defaults to \"G\".  If ARG is an integer,
+the internal counter is reset to that number before creating the name.
+There is no way to specify both using this function."
   (let ((prefix (if (stringp arg) arg "G"))
        (num (if (integerp arg) arg
               (prog1 *gensym-counter*
@@ -328,7 +331,8 @@ The name is made by appending a number to PREFIX, default \"G\"."
 
 (defun gentemp (&optional arg)
   "Generate a new interned symbol with a unique name.
-The name is made by appending a number to PREFIX, default \"G\"."
+The name is made by appending a number to ARG, default \"G\".
+If ARG is not a string, it is ignored."
   (let ((prefix (if (stringp arg) arg "G"))
        name)
     (while (intern-soft (setq name (format "%s%d" prefix *gensym-counter*)))
index 269fa40..9e9a56a 100644 (file)
@@ -187,11 +187,26 @@ or go back to just one window (by deleting all but the selected window)."
 
 
 (defun truncate-command-history-for-gc ()
-  (let ((tail (nthcdr 30 command-history)))
-    (if tail (setcdr tail nil)))
-  (let ((tail (nthcdr 30 values)))
-    (if tail (setcdr tail nil)))
-  )
+  ;; We should try to avoid accessing any bindings to speak of in this
+  ;; function; as this hook is called asynchronously, the search for
+  ;; those bindings might search local bindings from essentially
+  ;; arbitrary functions. We force the body of the function to run at
+  ;; command-loop level, where the danger of local bindings is much
+  ;; reduced; the code can still do its job because the command history
+  ;; and values list will not grow before then anyway.
+  ;;
+  ;; Nothing is done in batch mode, both because it is a waste of time
+  ;; (there is no command loop!) and because this any GCs during dumping
+  ;; will invoke this code, and if it were to enqueue an eval event,
+  ;; the portable dumper would try to dump it and fail.
+  (if (not (noninteractive))
+      (enqueue-eval-event
+       #'(lambda (arg)
+           (let ((tail (nthcdr 30 command-history)))
+             (if tail (setcdr tail nil)))
+           (let ((tail (nthcdr 30 values)))
+             (if tail (setcdr tail nil))))
+       nil)))
 
 (add-hook 'pre-gc-hook 'truncate-command-history-for-gc)
 
index d368f03..2d5c5ef 100644 (file)
@@ -284,7 +284,7 @@ Return t if file exists."
                 (set-buffer (get-buffer-create " *load*"))
                 (erase-buffer)
                 (let ((coding-system-for-read 'raw-text))
-                  (insert-file-contents path nil 1 3001))
+                  (insert-file-contents path nil 0 3000))
                 (find-coding-system-magic-cookie))
               (if elc
                   ;; if reading a byte-compiled file and we didn't find
index ccdd2e3..aa670d6 100644 (file)
   :group 'customize)
 
 (defgroup alloc nil
-  "Storage allocation and gc for GNU Emacs Lisp interpreter."
+  "Storage allocation and gc for XEmacs Lisp interpreter."
   :tag "Storage Allocation"
   :group 'internal)
 
@@ -1225,7 +1225,7 @@ item in another window.\n\n"))
   (goto-char (point-min)))
 
 (define-widget 'custom-browse-visibility 'item
-  "Control visibility of of items in the customize tree browser."
+  "Control visibility of items in the customize tree browser."
   :format "%[[%t]%]"
   :action 'custom-browse-visibility-action)
 
@@ -2032,7 +2032,7 @@ Otherwise, look up symbol in `custom-guess-type-alist'."
          ;; Don't push it !!! Custom assumes that the first child is the
          ;; value one.
          (setq children (append children (list comment-widget)))))
-      ;; Update the rest of the properties properties.
+      ;; Update the rest of the properties.
       (widget-put widget :custom-form form)
       (widget-put widget :children children)
       ;; Now update the state.
@@ -2293,7 +2293,7 @@ standard setting."
       (put symbol 'saved-value nil)
       (custom-push-theme 'theme-value symbol 'user 'reset 'standard)
       ;; As a special optimizations we do not (explictly)
-      ;; save resets to standard when no theme set the value.
+      ;; save resets to standard when no theme sets the value.
       (if (null (cdr (get symbol 'theme-value)))
          (put symbol 'theme-value nil))
       (put symbol 'saved-variable-comment nil)
@@ -3386,43 +3386,57 @@ Leave point at the location of the call, or after the last expression."
      (custom-save-delete 'custom-set-variables)
      (custom-save-loaded-themes)
      (custom-save-resets 'theme-value 'custom-reset-variables nil)
+
      (let ((standard-output (current-buffer)))
        (unless (bolp)
-       (princ "\n"))
+        (princ "\n"))
        (princ "(custom-set-variables")
-       (mapatoms (lambda (symbol)
-                 (let ((spec (car-safe (get symbol 'theme-value)))
-                       (requests (get symbol 'custom-requests))
-                       (now (not (or (get symbol 'standard-value)
-                                     (and (not (boundp symbol))
-                                          (not (eq (get symbol 'force-value)
-                                                   'rogue))))))
-                       (comment (get symbol 'saved-variable-comment)))
-                   (when (or (and spec
-                                  (eq (car spec) 'user)
-                                  (eq (second spec) 'set))
-                             comment
-                             ;; support non-themed vars
-                             (and (null spec) (get symbol 'saved-value)))
-                     (princ "\n '(")
-                     (prin1 symbol)
-                     (princ " ")
-                     ;; This comment stuff is in the way ####
-                     ;; Is (eq (third spec) (car saved-value)) ????
-                     ;; (prin1 (third spec))
-                     (prin1 (car (get symbol 'saved-value)))
-                     (when (or now requests comment)
-                       (princ (if now " t" " nil")))
-                     (when (or comment requests)
-                       (princ " ")
-                       (prin1 requests))
-                     (when comment
-                       (princ " ")
-                       (prin1 comment))
-                     (princ ")")))))
-      (princ ")")
-      (unless (looking-at "\n")
-       (princ "\n")))))
+
+       ;; Get the list of variables to save...
+       (let (varlist)
+        (mapatoms (lambda (symbol)
+                    (let ((spec (car-safe (get symbol 'theme-value)))
+                          (comment (get symbol 'saved-variable-comment)))
+                      (when (or (and spec
+                                     (eq (first spec) 'user)
+                                     (eq (second spec) 'set))
+                                comment
+                                ;; support non-themed vars
+                                (and (null spec) (get symbol 'saved-value)))
+                        (push symbol varlist)))))
+
+        ;; ...and sort it by name, so our output can be easily diffed, etc.
+        (setq varlist (sort varlist #'string-lessp))
+
+        ;; Generate the output for each var.
+        (dolist (symbol varlist)
+          (let ((requests (get symbol 'custom-requests))
+                (now (not (or (get symbol 'standard-value)
+                              (and (not (boundp symbol))
+                                   (not (eq (get symbol 'force-value)
+                                            'rogue))))))
+                (comment (get symbol 'saved-variable-comment))
+                ;; Print everything, no placeholders `...'
+                (print-level nil)
+                (print-length nil))
+            (princ "\n '(")
+            (prin1 symbol)
+            (princ " ")
+            (prin1 (car (get symbol 'saved-value)))
+            (when (or now requests comment)
+              (princ (if now " t" " nil")))
+            (when (or comment requests)
+              (princ " ")
+              (prin1 requests))
+            (when comment
+              (princ " ")
+              (prin1 comment))
+            (princ ")"))))
+
+       ;; Finish the output.
+       (princ ")")
+       (unless (looking-at "\n")
+        (princ "\n")))))
 
 (defvar custom-save-face-ignoring nil)
 
@@ -3431,7 +3445,10 @@ Leave point at the location of the call, or after the last expression."
        (comment (get symbol 'saved-face-comment))
        (now (not (or (get symbol 'face-defface-spec)
              (and (not (find-face symbol))
-                  (not (eq (get symbol 'force-face) 'rogue)))))))
+                  (not (eq (get symbol 'force-face) 'rogue))))))
+        ;; Print everything, no placeholders `...'
+        (print-level nil)
+        (print-length nil))
     (when (or (and (not (memq symbol custom-save-face-ignoring))
                   ;; Don't print default face here.
                   (or (and theme-spec
@@ -3458,14 +3475,33 @@ Leave point at the location of the call, or after the last expression."
     (custom-save-delete 'custom-reset-faces)
     (custom-save-delete 'custom-set-faces)
     (custom-save-resets 'theme-face 'custom-reset-faces '(default))
-    (let ((standard-output (current-buffer)))
+    (let ((standard-output (current-buffer))
+          (sorted-list ()))
+      ;; Create a sorted list of faces
+      (mapatoms
+       (lambda (symbol)
+        (let ((theme-spec (car-safe (get symbol 'theme-face)))
+              (comment (get symbol 'saved-face-comment)))
+          (when
+              (or (and (not (memq symbol custom-save-face-ignoring))
+                       ;; Don't print default face here.
+                       (or (and theme-spec
+                                (eq (car theme-spec) 'user)
+                                (eq (second theme-spec) 'set))
+                           ;; cope with non-themed faces
+                           (and (null theme-spec)
+                                (get symbol 'saved-face))))
+                  comment)
+            (push symbol sorted-list)))))
+      (setq sorted-list (sort sorted-list 'string<))
       (unless (bolp)
        (princ "\n"))
       (princ "(custom-set-faces")
        ;; The default face must be first, since it affects the others.
       (custom-save-face-internal 'default)
       (let ((custom-save-face-ignoring '(default)))
-       (mapatoms #'custom-save-face-internal))
+       (mapc 'custom-save-face-internal
+              sorted-list))
       (princ ")")
       (unless (looking-at "\n")
        (princ "\n")))))
@@ -3476,7 +3512,9 @@ Leave point at the location of the call, or after the last expression."
     ;; (custom-save-delete setter) Done by caller
     (let ((standard-output (current-buffer))
          (mapper `(lambda (object)
-                   (let ((spec (car-safe (get object (quote ,property)))))
+                   (let ((spec (car-safe (get object (quote ,property))))
+                         (print-level nil)
+                         (print-length nil))
                      (when (and (not (memq object ignored-special))
                                 (eq (car spec) 'user)
                                 (eq (second spec) 'reset))
@@ -3496,13 +3534,14 @@ Leave point at the location of the call, or after the last expression."
       (setq ignored-special special)
       (mapatoms mapper)
       (when started-writing
-       (princ ")\n"))))
-    )
+       (princ ")\n")))))
 
 
 (defun custom-save-loaded-themes ()
   (let ((themes (reverse (get 'user 'theme-loads-themes)))
-       (standard-output (current-buffer)))
+       (standard-output (current-buffer))
+        (print-level nil)
+        (print-length nil))
     (when themes
       (unless (bolp) (princ "\n"))
       (princ "(custom-load-themes")
index 4d2a113..b0e7ad7 100644 (file)
@@ -73,7 +73,7 @@
 (custom-add-loads 'fill '("simple" "fill"))
 (custom-add-loads 'custom-magic-faces '("cus-edit"))
 (custom-add-loads 'display '("modeline" "auto-show" "scrollbar" "toolbar"))
-(custom-add-loads 'faces '("faces" "cus-edit" "font-lock" "font" "hyper-apropos" "info" "wid-edit"))
+(custom-add-loads 'faces '("faces" "font" "cus-edit" "font-lock" "hyper-apropos" "info" "wid-edit"))
 (custom-add-loads 'emacs '("faces" "help" "files" "cus-edit" "package-get"))
 (custom-add-loads 'processes '("process" "gnuserv"))
 (custom-add-loads 'hyper-apropos '("hyper-apropos"))
index a2c6a5c..9f3dfc7 100644 (file)
@@ -1,6 +1,7 @@
-;;; derived.el --- allow inheritance of major modes.
+;;; derived.el --- allow inheritance of major modes
+;;; (formerly mode-clone.el)
 
-;; Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1994, 1999, 2003 Free Software Foundation, Inc.
 
 ;; Author: David Megginson (dmeggins@aix1.uottawa.ca)
 ;; Maintainer: XEmacs Development Team
 ;; 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:
 
 ;; This file is dumped with XEmacs.
 
-;; GNU Emacs is already, in a sense, object oriented -- each object
+;; XEmacs is already, in a sense, object oriented -- each object
 ;; (buffer) belongs to a class (major mode), and that class defines
 ;; the relationship between messages (input events) and methods
 ;; (commands) by means of a keymap.
 ;; - assign the value 'hypertext-mode' to the 'major-mode' variable
 ;; - run the body of commands provided in the macro -- in this case,
 ;;   set the local variable `case-fold-search' to nil.
-;; - **run the command (hypertext-mode-setup), which is empty by
-;;   default, but may be redefined by the user to contain special
-;;   commands (ie. setting local variables like 'outline-regexp')
-;;   **NOTE: do not use this option -- it will soon be obsolete.
-;; - run anything assigned to 'hypertext-mode-hooks' (obsolete, but
-;;   supported for the sake of compatibility).
 ;;
 ;; The advantages of this system are threefold.  First, text mode is
 ;; untouched -- if you had added the new keystroke to `text-mode-map,'
 ;;
 ;;   (define-derived-mode html-mode hypertext-mode "HTML")
 ;;   [various key definitions]
-;; 
-;; will add a new major mode for HTML with very little fuss.
 ;;
-;; Note also the function `derived-mode-class,' which returns the non-derived
-;; major mode which a derived mode is based on (ie. NOT necessarily the
-;; immediate parent).
+;; will add a new major mode for HTML with very little fuss.
 ;;
-;; (derived-mode-class 'text-mode) ==> text-mode
-;; (derived-mode-class 'hypertext-mode) ==> text-mode
-;; (derived-mode-class 'html-mode) ==> text-mode
+;; Note also the function `derived-mode-p' which can tell if the current
+;; mode derives from another.  In a hypertext-mode, buffer, for example,
+;; (derived-mode-p 'text-mode) would return non-nil.  This should always
+;; be used in place of (eq major-mode 'text-mode).
 \f
 ;;; Code:
 
+;;; PRIVATE: defsubst must be defined before they are first used
+
+(defsubst derived-mode-hook-name (mode)
+  "Construct the mode hook name based on mode name MODE."
+  (intern (concat (symbol-name mode) "-hook")))
+
+(defsubst derived-mode-map-name (mode)
+  "Construct a map name based on a MODE name."
+  (intern (concat (symbol-name mode) "-map")))
+
+(defsubst derived-mode-syntax-table-name (mode)
+  "Construct a syntax-table name based on a MODE name."
+  (intern (concat (symbol-name mode) "-syntax-table")))
+
+(defsubst derived-mode-abbrev-table-name (mode)
+  "Construct an abbrev-table name based on a MODE name."
+  (intern (concat (symbol-name mode) "-abbrev-table")))
+
 ;; PUBLIC: define a new major mode which inherits from an existing one.
 
 ;; XEmacs -- no autoload
 The arguments to this command are as follow:
 
 CHILD:     the name of the command for the derived mode.
-PARENT:    the name of the command for the parent mode (ie. text-mode).
-NAME:      a string which will appear in the status line (ie. \"Hypertext\")
+PARENT:    the name of the command for the parent mode (e.g. `text-mode')
+           or nil if there is no parent.
+NAME:      a string which will appear in the status line (e.g. \"Hypertext\")
 DOCSTRING: an optional documentation string--if you do not supply one,
            the function will attempt to invent something useful.
 BODY:      forms to execute just before running the
-           hooks for the new mode.
+           hooks for the new mode.  Do not use `interactive' here.
+
+BODY can start with a bunch of keyword arguments.  The following keyword
+  arguments are currently understood:
+:group GROUP
+       Declare the customization group that corresponds to this mode.
+:syntax-table TABLE
+       Use TABLE instead of the default.
+       A nil value means to simply use the same syntax-table as the parent.
+:abbrev-table TABLE
+       Use TABLE instead of the default.
+       A nil value means to simply use the same abbrev-table as the parent.
 
 Here is how you could define LaTeX-Thesis mode as a variant of LaTeX mode:
 
@@ -127,7 +149,7 @@ You could then make new key bindings for `LaTeX-thesis-mode-map'
 without changing regular LaTeX mode.  In this example, BODY is empty,
 and DOCSTRING is generated by default.
 
-On a more complicated level, the following command uses sgml-mode as
+On a more complicated level, the following command uses `sgml-mode' as
 the parent, and then sets the variable `case-fold-search' to nil:
 
   (define-derived-mode article-mode sgml-mode \"Article\"
@@ -135,88 +157,173 @@ the parent, and then sets the variable `case-fold-search' to nil:
     (setq case-fold-search nil))
 
 Note that if the documentation string had been left out, it would have
-been generated automatically, with a reference to the keymap."
-
-                                       ; Some trickiness, since what
-                                       ; appears to be the docstring
-                                       ; may really be the first
-                                       ; element of the body.
-  (if (and docstring (not (stringp docstring)))
-      (progn (setq body (cons docstring body))
-            (setq docstring nil)))
-  (setq docstring (or docstring (derived-mode-make-docstring parent child)))
-
-  `(progn 
-       (derived-mode-init-mode-variables (quote ,child))
+been generated automatically, with a reference to the keymap.
+
+The new mode runs the hook constructed by the function
+`derived-mode-hook-name'."
+  (declare (debug (&define name symbolp sexp [&optional stringp]
+                          [&rest keywordp sexp] def-body)))
+
+  (when (and docstring (not (stringp docstring)))
+    ;; Some trickiness, since what appears to be the docstring may really be
+    ;; the first element of the body.
+    (push docstring body)
+    (setq docstring nil))
+
+  (when (eq parent 'fundamental-mode) (setq parent nil))
+
+  (let ((map (derived-mode-map-name child))
+       (syntax (derived-mode-syntax-table-name child))
+       (abbrev (derived-mode-abbrev-table-name child))
+       (declare-abbrev t)
+       (declare-syntax t)
+       (hook (derived-mode-hook-name child))
+       (group nil))
+
+    ;; Process the keyword args.
+    (while (keywordp (car body))
+      (case (pop body)
+       (:group (setq group (pop body)))
+       (:abbrev-table (setq abbrev (pop body)) (setq declare-abbrev nil))
+       (:syntax-table (setq syntax (pop body)) (setq declare-syntax nil))
+       (t (pop body))))
+
+    (setq docstring (derived-mode-make-docstring
+                    parent child docstring syntax abbrev))
+
+    `(progn
+       (defvar ,hook nil ,(format "Hook run when entering %s mode." name))
+       (defvar ,map (make-sparse-keymap))
+       ,(if declare-syntax
+           `(defvar ,syntax (make-syntax-table)))
+       ,(if declare-abbrev
+           `(defvar ,abbrev
+              (progn (define-abbrev-table ',abbrev nil) ,abbrev)))
+       (put ',child 'derived-mode-parent ',parent)
+       ,(if group `(put ',child 'custom-mode-group ,group))
+
        (defun ,child ()
         ,docstring
         (interactive)
                                        ; Run the parent.
-        (,parent)
-                                       ; Identify special modes.
-        (if (get (quote ,parent) 'special)
-            (put (quote ,child) 'special t))
-        ;; XEmacs addition
-        (let ((mode-class (get (quote ,parent) 'mode-class)))
-          (if mode-class
-              (put (quote ,child) 'mode-class mode-class)))
+        (delay-mode-hooks
+
+         (,(or parent 'kill-all-local-variables))
                                        ; Identify the child mode.
-        (setq major-mode (quote ,child))
-        (setq mode-name ,name)
+         (setq major-mode (quote ,child))
+         (setq mode-name ,name)
+                                       ; Identify special modes.
+         ,(when parent
+            `(progn
+               (if (get (quote ,parent) 'mode-class)
+                   (put (quote ,child) 'mode-class
+                        (get (quote ,parent) 'mode-class)))
                                        ; Set up maps and tables.
-        (derived-mode-set-keymap (quote ,child))
-        (derived-mode-set-syntax-table (quote ,child))
-        (derived-mode-set-abbrev-table (quote ,child))
+               (unless (keymap-parent ,map)
+                 (set-keymap-parents ,map (list (current-local-map))))
+               ,(when declare-syntax
+                  ;; XEmacs change: we do not have char-table-parent
+                  `(derived-mode-merge-syntax-tables
+                    (syntax-table) ,syntax))))
+
+         (use-local-map ,map)
+         ,(when syntax `(set-syntax-table ,syntax))
+         ,(when abbrev `(setq local-abbrev-table ,abbrev))
                                        ; Splice in the body (if any).
-        ,@body
-;;;                                    ; Run the setup function, if
-;;;                                    ; any -- this will soon be
-;;;                                    ; obsolete.
-;;;     (derived-mode-run-setup-function (quote ,child))
-                                       ; Run the hooks, if any.
-        (derived-mode-run-hooks (quote ,child)))))
-
+         ,@body
+         )
+        ;; Run the hooks, if any.
+        ;; Make the generated code work in older Emacs versions
+        ;; that do not yet have run-mode-hooks.
+        (if (fboundp 'run-mode-hooks)
+            (run-mode-hooks ',hook)
+          (run-hooks ',hook))))))
 
 ;; PUBLIC: find the ultimate class of a derived mode.
 
 (defun derived-mode-class (mode)
-  "Find the class of a major mode.
+  "Find the class of a major MODE.
 A mode's class is the first ancestor which is NOT a derived mode.
-Use the `derived-mode-parent' property of the symbol to trace backwards."
+Use the `derived-mode-parent' property of the symbol to trace backwards.
+Since major-modes might all derive from `fundamental-mode', this function
+is not very useful."
   (while (get mode 'derived-mode-parent)
     (setq mode (get mode 'derived-mode-parent)))
   mode)
+(make-obsolete 'derived-mode-class 'derived-mode-p)
+
+;; PUBLIC: find if the current mode derives from another.
+;; from GNU Emacs 21 subr.el
+
+(defun derived-mode-p (&rest modes)
+  "Non-nil if the current major mode is derived from one of MODES.
+Uses the `derived-mode-parent' property of the symbol to trace backwards."
+  (let ((parent major-mode))
+    (while (and (not (memq parent modes))
+               (setq parent (get parent 'derived-mode-parent))))
+    parent))
 
 \f
-;; Inline functions to construct various names from a mode name.
+;;; PRIVATE
 
-(defsubst derived-mode-setup-function-name (mode)
-  "Construct a setup-function name based on a mode name."
-  (intern (concat (symbol-name mode) "-setup")))
+(defun derived-mode-make-docstring (parent child &optional
+                                          docstring syntax abbrev)
+  "Construct a docstring for a new mode if none is provided."
 
-(defsubst derived-mode-hooks-name (mode)
-  "Construct a hooks name based on a mode name."
-  ;; XEmacs change from -hooks
-  (intern (concat (symbol-name mode) "-hook")))
+  (let ((map (derived-mode-map-name child))
+       (hook (derived-mode-hook-name child)))
 
-(defsubst derived-mode-map-name (mode)
-  "Construct a map name based on a mode name."
-  (intern (concat (symbol-name mode) "-map")))
+    (unless (stringp docstring)
+      ;; Use a default docstring.
+      (setq docstring
+           (if (null parent)
+               (format "Major-mode.
+Uses keymap `%s', abbrev table `%s' and syntax-table `%s'." map abbrev syntax)
+             (format "Major mode derived from `%s' by `define-derived-mode'.
+It inherits all of the parent's attributes, but has its own keymap,
+abbrev table and syntax table:
 
-(defsubst derived-mode-syntax-table-name (mode)
-  "Construct a syntax-table name based on a mode name."
-  (intern (concat (symbol-name mode) "-syntax-table")))
+  `%s', `%s' and `%s'
 
-(defsubst derived-mode-abbrev-table-name (mode)
-  "Construct an abbrev-table name based on a mode name."
-  (intern (concat (symbol-name mode) "-abbrev-table")))
+which more-or-less shadow %s's corresponding tables."
+                     parent map abbrev syntax parent))))
+
+    (unless (string-match (regexp-quote (symbol-name hook)) docstring)
+      ;; Make sure the docstring mentions the mode's hook.
+      (setq docstring
+           (concat docstring
+                   (if (null parent)
+                       "\n\nThis mode "
+                     (concat
+                      "\n\nIn addition to any hooks its parent mode "
+                      (if (string-match (regexp-quote (format "`%s'" parent))
+                                        docstring) nil
+                        (format "`%s' " parent))
+                      "might have run,\nthis mode "))
+                   (format "runs the hook `%s'" hook)
+                   ", as the final step\nduring initialization.")))
+
+    (unless (string-match "\\\\[{[]" docstring)
+      ;; And don't forget to put the mode's keymap.
+      (setq docstring (concat docstring "\n\n\\{" (symbol-name map) "}")))
+
+    docstring))
+
+\f
+;;; OBSOLETE
+;; The functions below are only provided for backward compatibility with
+;; code byte-compiled with versions of derived.el prior to Emacs-21.
+
+(defsubst derived-mode-setup-function-name (mode)
+  "Construct a setup-function name based on a MODE name."
+  (intern (concat (symbol-name mode) "-setup")))
 
 \f
 ;; Utility functions for defining a derived mode.
 
 ;; XEmacs -- don't autoload
 (defun derived-mode-init-mode-variables (mode)
-  "Initialize variables for a new mode. 
+  "Initialise variables for a new MODE.
 Right now, if they don't already exist, set up a blank keymap, an
 empty syntax table, and an empty abbrev table -- these will be merged
 the first time the mode is used."
@@ -244,30 +351,15 @@ the first time the mode is used."
   (if (boundp (derived-mode-abbrev-table-name mode))
       t
     (eval `(defvar ,(derived-mode-abbrev-table-name mode)
-            (progn (define-abbrev-table (derived-mode-abbrev-table-name mode) nil)
-                   (make-abbrev-table))
+            (progn
+              (define-abbrev-table (derived-mode-abbrev-table-name mode) nil)
+              (make-abbrev-table))
             ,(format "Abbrev table for %s." mode)))))
-
-(defun derived-mode-make-docstring (parent child)
-  "Construct a docstring for a new mode if none is provided."
-
-  (format "This major mode is a variant of `%s', created by `define-derived-mode'.
-It inherits all of the parent's attributes, but has its own keymap,
-abbrev table and syntax table:
-
-  `%s-map' and `%s-syntax-table'
-
-which more-or-less shadow
-
-  `%s-map' and `%s-syntax-table'
-
-\\{%s-map}" parent child child parent parent child))
-
 \f
 ;; Utility functions for running a derived mode.
 
 (defun derived-mode-set-keymap (mode)
-  "Set the keymap of the new mode, maybe merging with the parent."
+  "Set the keymap of the new MODE, maybe merging with the parent."
   (let* ((map-name (derived-mode-map-name mode))
         (new-map (eval map-name))
         (old-map (current-local-map)))
@@ -277,8 +369,8 @@ which more-or-less shadow
     (put map-name 'derived-mode-unmerged nil)
     (use-local-map new-map)))
 
-(defun derived-mode-set-syntax-table (mode) 
-  "Set the syntax table of the new mode, maybe merging with the parent."
+(defun derived-mode-set-syntax-table (mode)
+  "Set the syntax table of the new MODE, maybe merging with the parent."
   (let* ((table-name (derived-mode-syntax-table-name mode))
         (old-table (syntax-table))
         (new-table (eval table-name)))
@@ -288,7 +380,7 @@ which more-or-less shadow
     (set-syntax-table new-table)))
 
 (defun derived-mode-set-abbrev-table (mode)
-  "Set the abbrev table if it exists.  
+  "Set the abbrev table for MODE if it exists.
 Always merge its parent into it, since the merge is non-destructive."
   (let* ((table-name (derived-mode-abbrev-table-name mode))
         (old-table local-abbrev-table)
@@ -304,45 +396,45 @@ Always merge its parent into it, since the merge is non-destructive."
 ;;;    (funcall fname))))
 
 (defun derived-mode-run-hooks (mode)
-  "Run the hooks if they exist."
-
-  (let ((hooks-name (derived-mode-hooks-name mode)))
+  "Run the mode hook for MODE."
+  (let ((hooks-name (derived-mode-hook-name mode)))
     (if (boundp hooks-name)
        (run-hooks hooks-name))))
 
 ;; Functions to merge maps and tables.
 
 (defun derived-mode-merge-keymaps (old new)
-  "Merge an old keymap into a new one.
-The old keymap is set to be the parent of the new one, so that there will
+  "Merge an OLD keymap into a NEW one.
+The old keymap is set to be the last cdr of the new one, so that there will
 be automatic inheritance."
-  ;; XEmacs change.  FSF 19.30 & 19.34 has a whole bunch of weird crap here
+  ;; XEmacs change.  FSF 19.30 to 21.3 has a whole bunch of weird crap here
   ;; for merging prefix keys and such.  Hopefully none of this is
   ;; necessary in XEmacs.
   (set-keymap-parents new (list old)))
 
 (defun derived-mode-merge-syntax-tables (old new)
-  "Merge an old syntax table into a new one.
+  "Merge an OLD syntax table into a NEW one.
 Where the new table already has an entry, nothing is copied from the old one."
-  ;; 20.x
-  (if (fboundp 'map-char-table)
-      ;; we use map-char-table not map-syntax-table so we can explicitly
-      ;; check for inheritance.
-      (map-char-table
-       #'(lambda (key value)
-          (if (eq ?@ (char-syntax-from-code value))
-              (map-char-table #'(lambda (key1 value1)
-                                  (put-char-table key1 value1 new))
-                              old
-                              key)))
-       new)
-    ;; pre-20.0
-    (let ((idx 0)
-         (end (min (length new) (length old))))
-      (while (< idx end)
-       (if (not (aref new idx))
-           (aset new idx (aref old idx)))
-       (setq idx (1+ idx))))))
+  ;; XEmacs change: on the other hand, Emacs 21.3 just has
+  ;; (set-char-table-parent new old) here.
+  ;; We use map-char-table, not map-syntax-table, so we can explicitly
+  ;; check for inheritance.
+  (map-char-table
+   #'(lambda (key value)
+       (let ((newval (get-range-char-table key new 'multi)))
+        (cond ((eq newval 'multi)      ; OK, dive into the class hierarchy
+               (map-char-table
+                #'(lambda (key1 value1)
+                    (when (eq ?@ (char-syntax-from-code
+                                  (get-range-char-table key new ?@)))
+                      (put-char-table key1 value new))
+                    nil)
+                new
+                key))
+              ((eq ?@ (char-syntax-from-code newval)) ;; class at once
+               (put-char-table key value new))))
+       nil)
+   old))
 
 ;; Merge an old abbrev table into a new one.
 ;; This function requires internal knowledge of how abbrev tables work,
@@ -350,14 +442,14 @@ Where the new table already has an entry, nothing is copied from the old one."
 ;; as the value of the symbol, and the hook as the function definition.
 (defun derived-mode-merge-abbrev-tables (old new)
   (if old
-      (mapatoms 
-       (function 
-       (lambda (symbol)
-         (or (intern-soft (symbol-name symbol) new)
-             (define-abbrev new (symbol-name symbol)
-               (symbol-value symbol) (symbol-function symbol)))))
+      (mapatoms
+       #'(lambda (symbol)
+          (or (intern-soft (symbol-name symbol) new)
+              (define-abbrev new (symbol-name symbol)
+                (symbol-value symbol) (symbol-function symbol))))
        old)))
-    
+
 (provide 'derived)
 
+;;; arch-tag: 630be248-47d1-4f02-afa0-8207de0ebea0
 ;;; derived.el ends here
index cb69ba7..1cfdaf2 100644 (file)
 (require 'gtk-password-dialog)
 (require 'gtk-file-dialog)
 
+(defun gtk-popup-convert-underscores (str)
+  ;; Convert the XEmacs button accelerator representation to Gtk mnemonic
+  ;; form.  If no accelerator has been provided, put one at the start of the
+  ;; string (this mirrors the behaviour under X). This algorithm is also found
+  ;; in menubar-gtk.c:convert_underscores().
+  (let ((new-str (string))
+       (i 0)
+       (found-accel nil))
+    (while (< i (length str))
+      (let ((c (aref str i)))
+       (cond ((eq c ?%)
+              (setq i (1+ i))
+              (if (and (not (eq (aref str i) ?_)) (not (eq (aref str i) ?%)))
+                  (setq i (1- i)))
+              (setq found-accel 1)
+              )
+             ((eq c ?_)
+               (setq new-str (concat new-str "_")))
+              ))
+       (setq new-str (concat new-str (string (aref str i))))
+       (setq i (1+ i))
+       )
+    (if found-accel new-str (concat "_" new-str)) 
+    ))
+
 (defun popup-builtin-open-dialog (keys)
   ;; Allowed keywords are:
   ;;
        (callback nil)
        (flushrightp nil)
        (length nil)
+       (label nil)
+       (gui-button nil)
+       (accel-group (gtk-accel-group-new))
+       (accel-key nil)
        (errp t))
     (if (not buttons-descr)
        (error 'syntax-error
                        (setq activep (plist-get plist :active)
                              callback (plist-get plist :callback)))))
 
-                   (push (gtk-button-new-with-label (aref button 0)) buttons)
+                   ;; Create the label and determine what the mnemonic key is.
+                   (setq label (gtk-label-new ""))
+                   (setq accel-key (gtk-label-parse-uline label
+                                                          (gtk-popup-convert-underscores (aref button 0))))
+                   ;; Place the label in the button.
+                   (gtk-misc-set-alignment label 0.5 0.5)
+                   (setq gui-button (gtk-button-new))
+                   (gtk-container-add gui-button label)
+                   ;; Add ALT-mnemonic to the dialog's accelerator group.
+                   (gtk-widget-add-accelerator gui-button "clicked" accel-group
+                                               accel-key
+                                               8 ; GDK_MOD1_MASK
+                                               4 ; GTK_ACCEL_LOCKED
+                                               )
+                   
+                   (push gui-button buttons)
                    (gtk-widget-set-sensitive (car buttons) (eval activep))
                    
                    ;; Apply the callback
          (gtk-window-set-transient-for dialog (frame-property nil 'shell-widget))
          (put dialog 'type 'dialog)
          (put dialog 'modal t)
+         ;; Make the dialog listen for global mnemonic keys.
+         (gtk-window-add-accel-group dialog accel-group)
+
          (gtk-widget-show-all dialog)
          (gtk-main)
          (gtk-widget-destroy dialog)
index 0c368cb..1a910c9 100644 (file)
@@ -1,6 +1,6 @@
 ;;; etags.el --- etags facility for Emacs
 
-;; Copyright 1985, 1986, 1988, 1990, 1997 Free Software Foundation, Inc.
+;; Copyright 1985, 1986, 1988, 1990, 1997, 2003 Free Software Foundation, Inc.
 
 ;; Author: Their Name is Legion (see list below)
 ;; Maintainer: XEmacs Development Team
@@ -172,6 +172,24 @@ This affects the `tags-search' and `tags-query-replace' commands."
   :type 'boolean
   :group 'etags)
 
+(defcustom tags-check-parent-directories-for-tag-files t
+  "*If non-nil, look for TAGS files in all parent directories."
+  :type 'boolean
+  :group 'etags)
+
+(defcustom tags-exuberant-ctags-optimization-p nil
+  "*If this variable is nil (the default), then exact tag search is able
+to find tag names in the name part of the tagtable (enclosed by  ^?..^A)
+and in the sourceline part of the tagtable ( enclosed by ^..^?). 
+This is needed by xemacs etags as not every tag has a name field.
+It is slower for large tables and less precise than the other option.
+
+If it is non-nil, then exact tag will only search tag names in the name
+part (enclosed by ^?..^A). This is faster and more precise than the other
+option. This is only usable with exuberant etags, as it has a name field
+entry for every tag."
+:type 'boolean
+:group 'etags)
 \f
 ;; Buffer tag tables.
 
@@ -185,10 +203,21 @@ the current buffer."
     ;; Current directory
     (when (file-readable-p (concat default-directory "TAGS"))
       (push (concat default-directory "TAGS") result))
-    ;; Parent directory
-    (let ((parent-tag-file (expand-file-name "../TAGS" default-directory)))
-      (when (file-readable-p parent-tag-file)
-       (push parent-tag-file result)))
+    ;; Parent directories
+    (when tags-check-parent-directories-for-tag-files
+      (let ((cur default-directory))
+       ;; Fuck!  Shouldn't there be a more obvious portable way
+       ;; to determine if we're the root?  Shouldn't we have a
+       ;; proper path manipulation API?  Do you know how many
+       ;; god-damn bugs are lurking out there because of Unix/
+       ;; Windows differences?  And how much code is littered
+       ;; with stuff such as 10 lines down from here?
+       (while (not (and (equal (file-name-as-directory cur) cur)
+                        (equal (directory-file-name cur) cur)))
+         (setq cur (expand-file-name ".." cur))
+         (let ((parent-tag-file (expand-file-name "TAGS" cur)))
+           (when (file-readable-p parent-tag-file)
+             (push parent-tag-file result))))))
     ;; tag-table-alist
     (let* ((key (or buffer-file-name
                    (concat default-directory (buffer-name))))
@@ -213,26 +242,45 @@ the current buffer."
          (if (stringp expression)
              (push expression result)
            (error "Expression in tag-table-alist evaluated to non-string")))))
-    (setq result
-         (mapcar
-          (lambda (name)
-            (when (file-directory-p name)
-              (setq name (concat (file-name-as-directory name) "TAGS")))
-            (and (file-readable-p name)
-                 ;; get-tag-table-buffer has side-effects
-                 (symbol-value-in-buffer 'buffer-file-name
-                                         (get-tag-table-buffer name))))
-          result))
+    (setq result (buffer-tag-table-list-load result))
     (setq result (delq nil result))
     ;; If no TAGS file has been found, ask the user explicitly.
     ;; #### tags-file-name is *evil*.
     (or result tags-file-name
        (call-interactively 'visit-tags-table))
     (when tags-file-name
-      (setq result (nconc result (list tags-file-name))))
+      (setq result (nconc result (buffer-tag-table-list-load (list tags-file-name)))))
     (or result (error "Buffer has no associated tag tables"))
     (delete-duplicates (nreverse result) :test 'equal)))
 
+(defun buffer-tag-table-list-load (list &optional used-buffers)
+  "Load all tag buffers in LIST. Include directives inside the tag
+Buffers result in a recursive call off this function. The USED-BUFFERS
+parameter is just for internal use and prevents infinite inclusion
+loops. The return value is a list of loaded buffers with the order
+from LIST preserved.  The tag files loaded with the include directive
+are inserted into the returned list before their parents."
+  (let (result)
+    (and list 
+         (mapc 
+          #'(lambda (name)
+              (when (file-directory-p name)
+                (setq name (concat (file-name-as-directory name) "TAGS")))
+              (and 
+               (file-readable-p name)
+               (save-excursion
+                 (set-buffer (get-tag-table-buffer name))
+                 (when (not (member buffer-file-name used-buffers)) 
+                   (add-to-list 'used-buffers buffer-file-name)
+                   (let ((include-files (tag-table-include-files)))
+                     (when include-files 
+                       (setq result (nconc result
+                                           (buffer-tag-table-list-load
+                                            include-files used-buffers)))))
+                   (add-to-list 'result buffer-file-name t)))))
+          list))
+    result))
+
 ;;;###autoload
 (defun visit-tags-table (file)
   "Tell tags commands to use tags table file FILE when all else fails.
@@ -331,7 +379,9 @@ If appropriate, reverting the buffer, and possibly build a completion-table."
            ;; The user wants to build the table:
            (condition-case nil
                (progn
-                 (add-to-tag-completion-table)
+          (if tags-exuberant-ctags-optimization-p
+              (add-to-tag-completion-table-exuberant-ctags)
+            (add-to-tag-completion-table))
                  (setq tag-table-completion-status t))
              ;; Allow user to C-g out correctly
              (quit
@@ -374,12 +424,13 @@ File name returned is relative to tag table file's directory."
   ;; New include syntax
   ;;   filename,include
   ;; tacked on to the end of a tag file means use filename as a
-  ;; tag file before giving up.
+  ;; tag file before giving up.  The filenames are expanded to avoid 
+  ;; problems with relative paths being used in the wrong directory.
   (let ((files nil))
     (save-excursion
       (goto-char (point-min))
-      (while (re-search-forward "\f\n\\(.*\\),include$" nil t)
-       (push (match-string 1) files)))
+      (while (re-search-forward tags-include-pattern nil t)
+       (push (expand-file-name (match-string 1)) files)))
     files))
 
 (defun tag-table-files (tag-table)
@@ -466,25 +517,59 @@ this buffer uses."
      (or (memq tag-table-symbol tag-symbol-tables)
         (set tag-symbol (cons tag-table-symbol tag-symbol-tables)))))
 
-;; Can't use "\\s " in these patterns because that will include newline
+;; Can't use "\\s-" in these patterns because that will include newline
+;; \2 matches an explicit name.
+(defconst tags-explicit-name-pattern "\177\\(\\([^\n\001]+\\)\001\\)?")
+;; \1 matches Lisp-name, \2 matches C-name, \5 (from
+;; tags-explicit-name-pattern) matches explicit name.
 (defconst tags-DEFUN-pattern
-          "DEFUN[ \t]*(\"\\([^\"]+\\)\",[ \t]*\\(\\(\\sw\\|\\s_\\)+\\),\C-?")
+  (concat "DEFUN[ \t]*(\"\\([^\"]+\\)\",[ \t]*\\(\\(\\sw\\|\\s_\\)+\\),"
+         tags-explicit-name-pattern))
+;; \1 matches an array name.  Explicit names unused?
 (defconst tags-array-pattern ".*[ \t]+\\([^ \[]+\\)\\[")
+;; \2 matches a Lispish name, \5 (from tags-explicit-name-pattern) matches
+;; explicit name.
 (defconst tags-def-pattern
-          "\\(.*[ \t]+\\)?\\**\\(\\(\\sw\\|\\s_\\)+\\)[ ();,\t]*\C-?"
-;; "\\(.*[ \t]+\\)?\\(\\(\\sw\\|\\s_\\)+\\)[ ()]*\C-?"
-;; "\\(\\sw\\|\\s_\\)+[ ()]*\C-?"
+  (concat "\\(.*[ \t]+\\)?\\**\\(\\(\\sw\\|\\s_\\)+\\)[ ();,\t]*"
+;; "\\(.*[ \t]+\\)?\\(\\(\\sw\\|\\s_\\)+\\)[ ()]*"
+;; "\\(\\sw\\|\\s_\\)+[ ()]*"
+         tags-explicit-name-pattern)
       )
+;; \1 matches Schemish name, \4 (from tags-explicit-name-pattern) matches
+;; explicit name
+(defconst tags-schemish-pattern
+  (concat "\\s-*(\\s-*def\\sw*\\s-*(?\\s-*\\(\\(\\sw\\|\\s_\\|:\\)+\\))?\\s-*"
+         tags-explicit-name-pattern))
 (defconst tags-file-pattern "^\f\n\\(.+\\),[0-9]+\n")
+(defconst tags-include-pattern "^\f\n\\(.+\\),include\n"
+  "Holds the pattern for finding the include directive in tagfiles.")
+
+
+(defun add-to-tag-completion-table-exuberant-ctags ()
+  "Sucks the current buffer (a TAGS table) into the completion-table.
+This is a version which is optimized for exuberant etags and will not
+work with xemacs etags."
+  (message "Adding %s to tags completion table..." buffer-file-name)
+  (goto-char (point-min))
+  (let ((tag-table-symbol (intern buffer-file-name tag-completion-table))
+       ;; tag-table-symbol is used by intern-tag-symbol
+       name tag-symbol
+       tag-symbol-tables
+       (case-fold-search nil))
+    (while (re-search-forward tags-explicit-name-pattern nil t)
+      ;; no need to check the mode here
+      (setq name (match-string 2))
+      (intern-tag-symbol name)))
+  (message "Adding %s to tags completion table...done" buffer-file-name))
+
 
-;; #### Should make it work with the `include' directive!
 (defun add-to-tag-completion-table ()
   "Sucks the current buffer (a TAGS table) into the completion-table."
   (message "Adding %s to tags completion table..." buffer-file-name)
   (goto-char (point-min))
   (let ((tag-table-symbol (intern buffer-file-name tag-completion-table))
        ;; tag-table-symbol is used by intern-tag-symbol
-       filename file-type name name2 tag-symbol
+       filename file-type name name2 name3 tag-symbol
        tag-symbol-tables
        (case-fold-search nil))
     ;; Loop over the files mentioned in the TAGS file for each file,
@@ -513,7 +598,7 @@ this buffer uses."
                               lisp-mode-syntax-table)
                              (t (standard-syntax-table))))
       ;; Clear loop variables.
-      (setq name nil name2 nil)
+      (setq name nil name2 nil name3 nil)
       (lmessage 'progress "%s..." filename)
       ;; Loop over the individual tag lines.
       (while (not (or (eobp) (eq (char-after) ?\f)))
@@ -523,8 +608,9 @@ this buffer uses."
               (or (looking-at tags-DEFUN-pattern)
                   (error "DEFUN doesn't fit pattern"))
               (setq name (match-string 1)
-                    name2 (match-string 2)))
-             ;;((looking-at "\\s ")
+                    name2 (match-string 2)
+                    name3 (match-string 5)))
+             ;;((looking-at "\\s-")
              ;; skip probably bogus entry:
              ;;)
              ((and (eq file-type 'c-mode)
@@ -536,16 +622,24 @@ this buffer uses."
                     (t
                      (setq name (match-string 1)))))
              ((and (eq file-type 'scheme-mode)
-                   (looking-at "\\s-*(\\s-*def\\sw*\\s-*(?\\s-*\\(\\(\\sw\\|\\s_\\|:\\)+\\))?\\s-*\C-?"))
+                   (looking-at tags-schemish-pattern))
               ;; Something Schemish (is this really necessary??)
-              (setq name (match-string 1)))
+              (setq name (match-string 1)
+                    name2 (match-string 4)))
              ((looking-at tags-def-pattern)
               ;; ???
-              (setq name (match-string 2))))
+              (setq name (match-string 2)
+                    name2 (match-string 5))))
        ;; add the tags we found to the completion table
        (and name (intern-tag-symbol name))
        (and name2 (intern-tag-symbol name2))
+       (and name3 (intern-tag-symbol name3))
        (forward-line 1)))
+    ;; Skip over the include entries at the bottom of the file.
+    (while (looking-at tags-include-pattern)
+      (goto-char (match-end 0))
+      (setq filename (file-name-sans-versions (match-string 1)))
+      (forward-line 1))
     (or (eobp) (error "Bad TAGS file")))
   (message "Adding %s to tags completion table...done" buffer-file-name))
 
@@ -565,12 +659,10 @@ Make it buffer-local in a mode hook.  The function is called with no
 ;; Return a default tag to search for, based on the text at point.
 (defun find-tag-default ()
   (or (and (not (memq find-tag-default-hook '(nil find-tag-default)))
-          (condition-case data
-              (funcall find-tag-default-hook)
-            (error
-             (warn "Error in find-tag-default-hook signalled error: %s"
-                   (error-message-string data))
-             nil)))
+          (with-trapping-errors 
+            :function 'find-tag-default-hook
+            :error-form nil
+            (funcall find-tag-default-hook)))
       (symbol-near-point)))
 
 ;; This function depends on the following symbols being bound properly:
@@ -622,6 +714,7 @@ If it returns non-nil, this file needs processing by evalling
 (autoload 'get-symbol-syntax-table "symbol-syntax")
 
 (defun find-tag-internal (tagname)
+  
   (let ((next (null tagname))
        (tmpnext (null tagname))
        ;; If tagname is a list: (TAGNAME), this indicates
@@ -631,7 +724,7 @@ If it returns non-nil, this file needs processing by evalling
        (exact-syntax-table (get-symbol-syntax-table (syntax-table)))
        tag-table-currently-matching-exact
        tag-target exact-tagname
-       tag-tables tag-table-point file linebeg startpos buf
+       tag-tables tag-table-point file linebeg line startpos buf
        offset found pat syn-tab)
     (when (consp tagname)
       (setq tagname (car tagname)))
@@ -642,7 +735,11 @@ If it returns non-nil, this file needs processing by evalling
          (t
           (setq tag-table-currently-matching-exact t)))
     ;; \_ in the tagname is used to indicate a symbol boundary.
-    (setq exact-tagname (format "\C-?\\_%s\\_\C-a\\|\\_%s\\_" tagname tagname))
+    (if tags-exuberant-ctags-optimization-p
+        (setq exact-tagname (format "\C-?%s\C-a" tagname))
+      (setq exact-tagname (format "\C-?%s\C-a\\|\
+\\_%s.?\C-?[0-9]*,[0-9]*$" tagname tagname))
+      )
     (while (string-match "\\\\_" exact-tagname)
       (aset exact-tagname (1- (match-end 0)) ?b))
     (save-excursion
@@ -687,8 +784,7 @@ If it returns non-nil, this file needs processing by evalling
                               (goto-char (match-beginning 0))
                               (not (looking-at exact-tagname)))))
                       (throw 'found t))))
-             (setq tag-tables
-                   (nconc (tag-table-include-files) (cdr tag-tables)))))
+             (setq tag-tables (cdr tag-tables))))
          (if (and (not exact) (eq tag-table-currently-matching-exact t))
              (setq tag-table-currently-matching-exact nil)
            (setq tag-table-currently-matching-exact 'neither)))
@@ -697,45 +793,117 @@ If it returns non-nil, this file needs processing by evalling
               (if exact "matching" "containing")
               tagname))
       (beginning-of-line)
-      (search-forward "\C-?")
-      (setq file (expand-file-name (file-of-tag)
-                                  ;; In XEmacs, this needs to be
-                                  ;; relative to:
-                                  (or (file-name-directory (car tag-tables))
-                                      "./")))
-      (setq linebeg (buffer-substring (1- (point)) (point-at-bol)))
-      (search-forward ",")
-      (setq startpos (read (current-buffer)))
+
+      ;; from here down, synched with FSF 20.7
+      ;; etags-snarf-tag and etags-goto-tag-location. --ben
+
+      (if (save-excursion
+           (forward-line -1)
+           (looking-at "\f\n"))
+         (progn
+           ;; The match was for a source file name, not any tag
+           ;; within a file.  Give text of t, meaning to go exactly
+           ;; to the location we specify, the beginning of the file.
+           (setq linebeg t
+                 line nil
+                 startpos 1)
+           (setq file
+                 (expand-file-name (file-of-tag)
+                                   ;; In XEmacs, this needs to be
+                                   ;; relative to:
+                                   (or (file-name-directory (car tag-tables))
+                                       "./"))))
+       (search-forward "\C-?")
+       (setq file
+             (expand-file-name (file-of-tag)
+                               ;; In XEmacs, this needs to be
+                               ;; relative to:
+                               (or (file-name-directory (car tag-tables))
+                                   "./")))
+       (setq linebeg (buffer-substring (1- (point)) (point-at-bol)))
+       ;; Skip explicit tag name if present.
+       (search-forward "\001" (save-excursion (forward-line 1) (point)) t)
+       (if (looking-at "[0-9]")
+           (setq line (string-to-int (buffer-substring
+                                      (point)
+                                      (progn (skip-chars-forward "0-9")
+                                             (point))))))
+       (search-forward ",")
+       (if (looking-at "[0-9]")
+           (setq startpos (string-to-int (buffer-substring
+                                          (point)
+                                          (progn (skip-chars-forward "0-9")
+                                                 (point)))))))
+      ;; Leave point on the next line of the tags file.
+      (forward-line 1)
       (setq last-tag-data
            (nconc (list tagname (point) tag-table-currently-matching-exact)
                   tag-tables))
       (setq buf (find-file-noselect file))
+
+      ;; LINEBEG is the initial part of a line containing the tag and
+      ;; STARTPOS is the character position of LINEBEG within the file
+      ;; (starting from 1); LINE is the line number.  If LINEBEG is t,
+      ;; it means the tag refers to exactly LINE or STARTPOS
+      ;; (whichever is present, LINE having preference, no searching).
+      ;; Either LINE or STARTPOS may be nil; STARTPOS is used if
+      ;; present.  If the tag isn't exactly at the given position then
+      ;; look around that position using a search window which expands
+      ;; until it hits the start of file.
+
       (with-current-buffer buf
        (save-excursion
          (save-restriction
            (widen)
-           ;; Here we search for PAT in the range [STARTPOS - OFFSET,
-           ;; STARTPOS + OFFSET], with increasing values of OFFSET.
-           ;;
-           ;; We used to set the initial offset to 1000, but the
-           ;; actual sources show that finer-grained control is
-           ;; needed (e.g. two `hash_string's in src/symbols.c.)  So,
-           ;; I changed 100 to 100, and (* 3 offset) to (* 5 offset).
-           (setq offset 100)
-           (setq pat (concat "^" (regexp-quote linebeg)))
-           (or startpos (setq startpos (point-min)))
-           (while (and (not found)
-                       (progn
-                         (goto-char (- startpos offset))
-                         (not (bobp))))
-             (setq found (re-search-forward pat (+ startpos offset) t))
-             (setq offset (* 5 offset)))
-           ;; Finally, try finding it anywhere in the buffer.
-           (or found
-               (re-search-forward pat nil t)
-               (error "%s not found in %s" pat file))
-           (beginning-of-line)
-           (setq startpos (point)))))
+           (if (eq linebeg t)
+               ;; Direct file tag.
+               (cond (line (goto-line line))
+                     (startpos (goto-char startpos))
+                     (t (error "etags.el BUG: bogus direct file tag")))
+             ;; Here we search for PAT in the range [STARTPOS - OFFSET,
+             ;; STARTPOS + OFFSET], with increasing values of OFFSET.
+             ;;
+             ;; We used to set the initial offset to 1000, but the
+             ;; actual sources show that finer-grained control is
+             ;; needed (e.g. two `hash_string's in src/symbols.c.)  So,
+             ;; I changed 1000 to 100, and (* 3 offset) to (* 5 offset).
+             (setq offset 100)
+             (setq pat (concat (if (eq selective-display t)
+                                   "\\(^\\|\^m\\)" "^")
+                               (regexp-quote linebeg)))
+
+             ;; The character position in the tags table is 0-origin.
+             ;; Convert it to a 1-origin Emacs character position.
+             (if startpos (setq startpos (1+ startpos)))
+             ;; If no char pos was given, try the given line number.
+             (or startpos
+                 (if line
+                     (setq startpos (progn (goto-line line)
+                                           (point)))))
+             (or startpos
+                 (setq startpos (point-min)))
+             ;; First see if the tag is right at the specified location.
+             (goto-char startpos)
+             (setq found (looking-at pat))
+             (while (and (not found)
+                         (progn
+                           (goto-char (- startpos offset))
+                           (not (bobp))))
+               (setq found
+                     (re-search-forward pat (+ startpos offset) t)
+                     offset (* 5 offset))) ; expand search window
+             ;; Finally, try finding it anywhere in the buffer.
+             (or found
+                 (re-search-forward pat nil t)
+                 (error "Rerun etags: `%s' not found in %s"
+                        pat file))))
+         ;; Position point at the right place
+         ;; if the search string matched an extra Ctrl-m at the beginning.
+         (and (eq selective-display t)
+              (looking-at "\^m")
+              (forward-char 1))
+         (beginning-of-line)
+         (setq startpos (point))))
       (cons buf startpos))))
 
 ;;;###autoload
@@ -761,8 +929,7 @@ in the tag table that matches the tagname used in the previous find-tag.
 the tag.
 
 This version of this function supports multiple active tags tables,
-and completion. See also the commands `\\[push-tag-mark]' and
-`\\[pop-tag-mark]'.
+and completion.
 
 Variables of note:
 
@@ -1171,7 +1338,7 @@ If this is a C-defined elisp function, it does something more clever."
 (defcustom tag-mark-stack-max 16
   "*The maximum number of elements kept on the mark-stack used
 by tags-search.  See also the commands `\\[push-tag-mark]' and
-`\\[pop-tag-mark]'."
+and `\\[pop-tag-mark]'."
   :type 'integer
   :group 'etags)
 
index 4f91086..a4f56ea 100644 (file)
@@ -1778,7 +1778,7 @@ in that frame; otherwise change each frame."
 (make-face 'underline "Underlined text.")
 (or (face-differs-from-default-p 'underline)
     (set-face-underline-p 'underline t 'global '(default)))
-(make-face 'zmacs-region "Used on highlightes region between point and mark.")
+(make-face 'zmacs-region "Used on highlighted region between point and mark.")
 (make-face 'isearch "Used on region matched by isearch.")
 (make-face 'isearch-secondary "Face to use for highlighting all matches.")
 (make-face 'list-mode-item-selected
index 2389480..206ef24 100644 (file)
   :group 'processes
   :group 'terminals)
 
+;;;###autoload
+(defcustom gnuserv-mode-line-string " Server"
+  "*String to display in the modeline when Gnuserv is active.
+Set this to nil if you don't want a modeline indicator."
+:type '(choice string
+                (const :tag "none" nil))
+:group 'gnuserv)
+
 
 ;; Provide the old variables as aliases, to avoid breaking .emacs
 ;; files.  However, they are obsolete and should be converted to the
@@ -261,9 +269,10 @@ Each element is a gnuclient structure that identifies a client.")
 ;; We want the client-infested buffers to have some modeline
 ;; identification, so we'll make a "minor mode".
 (defvar gnuserv-minor-mode nil)
-(make-variable-buffer-local 'gnuserv-mode)
-(pushnew '(gnuserv-minor-mode " Server") minor-mode-alist
-         :test 'equal)
+(make-variable-buffer-local 'gnuserv-minor-mode)
+;;(pushnew '(gnuserv-minor-mode "Server") minor-mode-alist
+;;      :test 'equal)
+(add-minor-mode 'gnuserv-minor-mode 'gnuserv-mode-line-string)
 
 \f
 ;; Sample gnuserv-frame functions
@@ -399,6 +408,13 @@ This order is important as not to keep the client waiting."
   (eval form))
 
 \f
+
+(defun make-x-device-with-gtk-fallback (device)
+  (or (condition-case ()
+          (make-x-device device)
+        (error nil))
+      (make-gtk-device)))
+
 ;; "Execute" a client connection, called by gnuclient.  This is the
 ;; backbone of gnuserv.el.
 (defun gnuserv-edit-files (type list &rest flags)
@@ -431,7 +447,7 @@ If a flag is `view', view the files read-only."
                          (case (car type)
                            (tty (apply 'make-tty-device (cdr type)))
                            (gtk (make-gtk-device))
-                           (x   (make-x-device (cadr type)))
+                           (x   (make-x-device-with-gtk-fallback (cadr type)))
                            (mswindows   (make-mswindows-device))
                            (t   (error "Invalid device type"))))
                         (t
index 075594c..d590007 100644 (file)
@@ -31,6 +31,8 @@
 (eval-and-compile
   (require 'gtk-ffi))
 
+(gtk-import-function GtkAccelGroup gtk_accel_group_new)
+
 (gtk-import-function GtkType gtk_accel_label_get_type)
 (gtk-import-function GtkWidget gtk_accel_label_new GtkString)
 (gtk-import-function guint gtk_accel_label_get_accel_width GtkAccelLabel)
index b68216d..f0abbee 100644 (file)
@@ -108,7 +108,11 @@ and then returns."
              (substitute-command-keys ,help-line)))
         (when three-step-help
           (message "%s" line-prompt))
-        (let* ((help-screen (documentation (quote ,fname)))
+        (let* ((help-screen
+                (condition-case nil
+                    (documentation (quote ,fname))
+                  (void-function "(alias for undefined function)")
+                  (error "(unexpected error from `documention')")))
                ;; We bind overriding-local-map for very small
                ;; sections, *excluding* where we switch buffers and
                ;; where we execute the chosen help command.
index 3bde4cd..2ef37f9 100644 (file)
@@ -1075,7 +1075,8 @@ part of the documentation of internal subroutines."
   (let ((doc (condition-case nil
                 (or (documentation function)
                     (gettext "not documented"))
-              (void-function ""))))
+              (void-function "(alias for undefined function)")
+              (error "(unexpected error from `documention')"))))
     (if (and strip-arglist
             (string-match "[\n\t ]*\narguments: ?(\\(.*\\))\n?\\'" doc))
        (setq doc (substring doc 0 (match-beginning 0))))
@@ -1185,7 +1186,10 @@ part of the documentation of internal subroutines."
                         (documentation-property sym
                                                 'variable-documentation t)))
               (fun (and sym (fboundp sym)
-                        (documentation sym t))))
+                        (condition-case nil
+                            (documentation sym t)
+                          (void-function "(alias for undefined function)")
+                          (error "(unexpected error from `documention')")))))
          (when (or var fun)
            (let ((ex (make-extent b e)))
              (require 'hyper-apropos)
index 7194df8..d5e4cde 100644 (file)
@@ -310,10 +310,12 @@ a = autoloaded, b = byte-compiled, i = internal, l = lambda, m = macro.\n\n"
                         (if (natnump l) l 0)))
       (and hyper-apropos-show-brief-docs
           (setq doc
-          ;; A symbol's function slot can point to an unbound symbol.
-          ;; In that case, `documentation' will fail.
-                (ignore-errors
-                  (documentation fn)))
+                ;; A symbol's function slot can point to an unbound symbol.
+                ;; In that case, `documentation' will fail.
+                (condition-case nil
+                    (documentation fn)
+                  (void-function "(alias for undefined function)")
+                  (error "(unexpected error from `documentation')")))
           (if  (string-match
                 "^([^\n\t )]+[\t ]*\\([^\n)]+\\)?)\\(:[\t ]*\\|\n?\\'\\)"
                 doc)
@@ -726,7 +728,12 @@ See also `hyper-apropos' and `hyper-describe-function'."
                     local (current-local-map)
                     global (current-global-map)
                     obsolete (get symbol 'byte-obsolete-info)
-                    doc (or (documentation symbol) "function not documented"))
+                    doc (or (condition-case nil
+                                (documentation symbol)
+                              (void-function
+                               "(alias for undefined function)")
+                              (error "(unexpected error from `documention')"))
+                            "function not documented"))
               (save-excursion
                 (set-buffer hyper-apropos-help-buf)
                 (goto-char (point-max))
index 70b7929..4ec4f66 100644 (file)
@@ -873,7 +873,7 @@ Use `isearch-exit' to quit without signaling."
       ;; and really do quit.
       (progn (goto-char isearch-opoint)
             (setq isearch-success nil)
-            (isearch-done t)   ; exit isearch
+            (isearch-done)              ; exit and push target string
             (signal 'quit '(isearch)))  ; and pass on quit signal
     ;; If search is failing, or has an incomplete regexp,
     ;; rub out until it is once more successful.
index f171b11..4544186 100644 (file)
@@ -330,19 +330,13 @@ If `completion-highlight-first-word-only' is non-nil, then only the start
        (let ((win-width
               (or cl-window-width
                   (if bufferp
-                      ;; This needs fixing for the case of windows 
-                      ;; that aren't the same width's the frame.
-                      ;; Sadly, the window it will appear in is not known
-                      ;; until after the text has been made.
-
                       ;; We have to use last-nonminibuf-frame here
                       ;; and not selected-frame because if a
                       ;; minibuffer-only frame is being used it will
                       ;; be the selected-frame at the point this is
                       ;; run.  We keep the selected-frame call around
                       ;; just in case.
-                      (frame-width (or (last-nonminibuf-frame)
-                                       (selected-frame)))
+               (window-width (get-lru-window (last-nonminibuf-frame)))
                     80))))
          (let ((count 0)
                (max-width 0)
index 58473b9..d5b7637 100644 (file)
@@ -1570,7 +1570,7 @@ See also `menu-split-long-menu'."
        (progn (find-file (or user-init-file "~/.xemacs/init.el"))
              (or (eq major-mode 'emacs-lisp-mode)
                  (emacs-lisp-mode)))]
-      ["%_Save Options to Init File" customize-save-customized]
+      ["%_Save Options to Custom File" customize-save-customized]
       )
 
      ("%_Buffers"
index 42b2207..8b8940f 100644 (file)
        "\e$B!#\e(B"
        "\\)"
        "[ \t\n]*"))
-(setq paragraph-start    "^[ \e$B!!\e(B\t\n\f]")
-(setq paragraph-separate "^[ \e$B!!\e(B\t\f]*$")
+
+;; allow paragraphs to start with a zenkaku space
+(setq paragraph-start    "[ \e$B!!\e(B\t\n\f]")
+(setq paragraph-separate "[ \e$B!!\e(B\t\f]*$")
 
 ;; EGG specific setup
 (define-egg-environment 'japanese
index efa527a..0dd3066 100644 (file)
@@ -173,14 +173,16 @@ Note:  Type \"site\" is not yet fully supported."
        (let ((path-list (paths-decode-directory-path env-value 'drop-empties)))
          (cond ((eq type 'std)
                 (while path-list
-                  (if (equal (substring (car path-list) -16) 
-                             (concat "xemacs-packages" (char-to-string directory-sep-char)))
+                  (if (equal (file-name-nondirectory 
+                              (directory-file-name (car path-list)))
+                             "xemacs-packages")
                       (setq top-dir (car path-list)))
                   (setq path-list (cdr path-list))))
                ((eq type 'mule)
                 (while path-list
-                  (if (equal (substring (car path-list) -14) 
-                             (concat "mule-packages" (char-to-string directory-sep-char)))
+                  (if (equal (file-name-nondirectory 
+                              (directory-file-name (car path-list)))
+                             "mule-packages")
                       (setq top-dir (car path-list)))
                   (setq path-list (cdr path-list)))))))
     ;; Wasn't in the environment, try `user-init-directory' if
@@ -200,14 +202,16 @@ Note:  Type \"site\" is not yet fully supported."
                                 (packages-compute-package-locations user-init-directory)))))
          (cond ((eq type 'std)
                 (while path-list
-                  (if (equal (substring (car path-list) -16) 
-                             (concat "xemacs-packages" (char-to-string directory-sep-char)))
+                  (if (equal (file-name-nondirectory 
+                              (directory-file-name (car path-list)))
+                             "xemacs-packages")
                       (setq top-dir (car path-list)))
                   (setq path-list (cdr path-list))))
                ((eq type 'mule)
                 (while path-list
-                  (if (equal (substring (car path-list) -14) 
-                             (concat "mule-packages" (char-to-string directory-sep-char)))
+                  (if (equal (file-name-nondirectory 
+                              (directory-file-name (car path-list)))
+                             "mule-packages")
                       (setq top-dir (car path-list)))
                   (setq path-list (cdr path-list)))))))
     ;; Now return either the directory or nil.
index 4222b78..c0d29a4 100644 (file)
@@ -171,8 +171,7 @@ one version of a package available.")
 
 ;;;###autoload
 (defcustom package-get-package-index-file-location 
-  (or (getenv "EMACSPACKAGEPATH")
-      user-init-directory)
+  (car (split-path (or (getenv "EMACSPACKAGEPATH") user-init-directory)))
   "*The directory where the package-index file can be found."
   :type 'directory
   :group 'package-get)
@@ -414,16 +413,12 @@ Returns t if both are found, nil otherwise.  As a side effect, set
        result
       nil)))
 
-(defcustom package-get-require-signed-base-updates (package-get-pgp-available-p)
+(defcustom package-get-require-signed-base-updates nil
   "*If non-nil, try to verify the package index database via PGP.
 
 If nil, no PGP verification is done.  If the package index database
 entries are not PGP signed and this variable is non-nil, require user
-confirmation to continue with the package-get procedure.
-
-The default for this variable is the return value of
-`package-get-pgp-available-p', non-nil if both the \"Mailcrypt\"
-package and a suitable PGP executable are available, nil otherwise."
+confirmation to continue with the package-get procedure."
   :type 'boolean
   :group 'package-get)
 
@@ -576,6 +571,10 @@ Unless FORCE-CURRENT is non-nil never try to update the database."
              (package-get-maybe-save-index db-file)))
       (kill-buffer buf))))
 
+;; This is here because the `process-error' datum doesn't exist in
+;; 21.4. --SY.
+(define-error 'process-error "Process error")
+
 ;;;###autoload
 (defun package-get-update-base-from-buffer (&optional buf)
   "Update the package-get database with entries from BUFFER.
@@ -583,7 +582,9 @@ BUFFER defaults to the current buffer.  This command can be
 used interactively, for example from a mail or news buffer."
   (interactive)
   (setq buf (or buf (current-buffer)))
-  (let (content-beg content-end)
+  (let ((coding-system-for-read 'binary)
+       (coding-system-for-write 'binary)
+       content-beg content-end)
     (save-excursion
       (set-buffer buf)
       (goto-char (point-min))
index 60b31d0..9e4eee4 100644 (file)
@@ -480,8 +480,7 @@ attached to the extent as properties)."
          (if (featurep 'balloon-help)
              (progn
                (setq balloon (format "
-Package Information:  [For package: \"%s\"]
-================
+Package Information:  [For package: \"%s\"]\n================
 Installed Upstream Ver: %s  Available Upstream Ver: %s
 Maintainer : %s
 Released : %s
index 86f1782..7c7fd97 100644 (file)
@@ -140,7 +140,7 @@ the directory to be ignored."
          ((< (package-get-key name :version) version)
           (error 'search-failed
                  (format "Need version %g of package %s, got version %g"
-                         version name (cdr pkg))))
+                         version name (package-get-key name :version))))
          (t t))))
 
 (defun package-delete-name (name)
index 7294e00..690ef80 100644 (file)
@@ -277,7 +277,7 @@ In either case, the output is inserted after point (leaving mark after it)."
       (if (string-match "[ \t]*&[ \t]*$" command)
          ;; Command ending with ampersand means asynchronous.
          (progn
-           (background (substring command 0 (match-beginning 0))))
+           (background (substring command 0 (match-beginning 0)) output-buffer))
        (shell-command-on-region (point) (point) command output-buffer)))))
 
 ;; We have a sentinel to prevent insertion of a termination message
index 1a27d8d..82233a3 100644 (file)
@@ -114,6 +114,7 @@ See the documentation for `list-load-path-shadows' for further information."
                              '("subdirs"
                                "auto-autoloads"
                                "custom-load"
+                               "custom-defines"
                                "dumped-lisp"
                                "_pkg"
                                "lpath")))
index 55ae786..c20c4f8 100644 (file)
@@ -1966,7 +1966,7 @@ intervening text will be added to the active region.
 
 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.
 
index 54cf7f1..5937030 100644 (file)
@@ -25,7 +25,7 @@
 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 ;; 02111-1307, USA.
 
-;;; Synched up with: FSF 19.34.
+;;; Synched up with: FSF 19.34.  Some things synched up with later versions.
 
 ;;; Commentary:
 
@@ -403,22 +403,70 @@ Otherwise treat `\\' in NEWTEXT as special:
            str newstr))
     str)))
 
-(defun split-string (string &optional pattern)
-  "Return a list of substrings of STRING which are separated by PATTERN.
-If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"."
-  (or pattern
-      (setq pattern "[ \f\t\n\r\v]+"))
-  (let (parts (start 0) (len (length string)))
-    (if (string-match pattern string)
-       (setq parts (cons (substring string 0 (match-beginning 0)) parts)
-             start (match-end 0)))
-    (while (and (< start len)
-               (string-match pattern string (if (> start (match-beginning 0))
-                                                start
-                                              (1+ start))))
-      (setq parts (cons (substring string start (match-beginning 0)) parts)
-           start (match-end 0)))
-    (nreverse (cons (substring string start) parts))))
+(defconst split-string-default-separators "[ \f\t\n\r\v]+"
+  "The default value of separators for `split-string'.
+
+A regexp matching strings of whitespace.  May be locale-dependent
+\(as yet unimplemented).  Should not match non-breaking spaces.
+
+Warning: binding this to a different value and using it as default is
+likely to have undesired semantics.")
+
+;; specification for `split-string' agreed with rms 2003-04-23
+;; xemacs design <87vfx5vor0.fsf@tleepslib.sk.tsukuba.ac.jp>
+
+;; The specification says that if both SEPARATORS and OMIT-NULLS are
+;; defaulted, OMIT-NULLS should be treated as t.  Simplifying the logical
+;; expression leads to the equivalent implementation that if SEPARATORS
+;; is defaulted, OMIT-NULLS is treated as t.
+
+(defun split-string (string &optional separators omit-nulls)
+  "Splits STRING into substrings bounded by matches for SEPARATORS.
+
+The beginning and end of STRING, and each match for SEPARATORS, are
+splitting points.  The substrings matching SEPARATORS are removed, and
+the substrings between the splitting points are collected as a list,
+which is returned.
+
+If SEPARATORS is non-nil, it should be a regular expression matching text
+which separates, but is not part of, the substrings.  If nil it defaults to
+`split-string-default-separators', normally \"[ \\f\\t\\n\\r\\v]+\", and
+OMIT-NULLS is forced to t.
+
+If OMIT-NULLS is t, zero-length substrings are omitted from the list \(so
+that for the default value of SEPARATORS leading and trailing whitespace
+are effectively trimmed).  If nil, all zero-length substrings are retained,
+which correctly parses CSV format, for example.
+
+Note that the effect of `(split-string STRING)' is the same as
+`(split-string STRING split-string-default-separators t)').  In the rare
+case that you wish to retain zero-length substrings when splitting on
+whitespace, use `(split-string STRING split-string-default-separators nil)'.
+
+Modifies the match data when successful; use `save-match-data' if necessary."
+
+  (let ((keep-nulls (not (if separators omit-nulls t)))
+       (rexp (or separators split-string-default-separators))
+       (start 0)
+       notfirst
+       (list nil))
+    (while (and (string-match rexp string
+                             (if (and notfirst
+                                      (= start (match-beginning 0))
+                                      (< start (length string)))
+                                 (1+ start) start))
+               (< start (length string)))
+      (setq notfirst t)
+      (if (or keep-nulls (< start (match-beginning 0)))
+         (setq list
+               (cons (substring string start (match-beginning 0))
+                     list)))
+      (setq start (match-end 0)))
+    (if (or keep-nulls (< start (length string)))
+       (setq list
+             (cons (substring string start)
+                   list)))
+    (nreverse list)))
 
 ;; #### #### #### AAaargh!  Must be in C, because it is used insanely
 ;; early in the bootstrap process.
@@ -487,6 +535,43 @@ See also `with-temp-file' and `with-output-to-string'."
         (and (buffer-name ,temp-buffer)
              (kill-buffer ,temp-buffer))))))
 
+;; BEGIN FSF 21.3 SYNCH
+(defmacro with-local-quit (&rest body)
+  "Execute BODY with `inhibit-quit' temporarily bound to nil."
+  `(condition-case nil
+    (let ((inhibit-quit nil))
+      ,@body)
+    (quit (setq quit-flag t))))
+
+(defvar delay-mode-hooks nil
+  "If non-nil, `run-mode-hooks' should delay running the hooks.")
+(defvar delayed-mode-hooks nil
+  "List of delayed mode hooks waiting to be run.")
+(make-variable-buffer-local 'delayed-mode-hooks)
+(put 'delay-mode-hooks 'permanent-local t)
+
+(defun run-mode-hooks (&rest hooks)
+  "Run mode hooks `delayed-mode-hooks' and HOOKS, or delay HOOKS.
+Execution is delayed if `delay-mode-hooks' is non-nil.
+Major mode functions should use this."
+  (if delay-mode-hooks
+      ;; Delaying case.
+      (dolist (hook hooks)
+       (push hook delayed-mode-hooks))
+    ;; Normal case, just run the hook as before plus any delayed hooks.
+    (setq hooks (nconc (nreverse delayed-mode-hooks) hooks))
+    (setq delayed-mode-hooks nil)
+    (apply 'run-hooks hooks)))
+
+(defmacro delay-mode-hooks (&rest body)
+  "Execute BODY, but delay any `run-mode-hooks'.
+Only affects hooks run in the current buffer."
+  `(progn
+    (make-local-variable 'delay-mode-hooks)
+    (let ((delay-mode-hooks t))
+      ,@body)))
+;; END FSF 21.3 SYNCH
+
 ;; Moved from mule-coding.el.
 (defmacro with-string-as-buffer-contents (str &rest body)
   "With the contents of the current buffer being STR, run BODY.
index 38a151a..06b74d7 100644 (file)
 
 (defvar foo)
 
-(defun gtk-widget-instantiate-button-internal (plist callback)
+(defun gtk-widget-get-callback (widget plist instance)
+  (let ((cb (plist-get plist :callback))
+       (ex (plist-get plist :callback-ex))
+       (real-cb nil))
+    (cond
+     (ex
+      (gtk-signal-connect widget 'button-release-event
+                         (lambda (widget event data)
+                           (put widget 'last-event event)))
+      `(lambda (widget &rest ignored)
+        (funcall ,ex ,instance (get widget 'last-event))))
+     (cb
+      `(lambda (widget &rest ignored)
+        (if (functionp ,real-cb)
+            (funcall ,real-cb)
+          (eval ,real-cb))))
+     (t
+      nil))))
+
+(defun gtk-widget-instantiate-button-internal (plist instance)
   (let* ((type (or (plist-get plist :style) 'button))
         (label (or (plist-get plist :descriptor) (symbol-name type)))
         (widget nil))
     (case type
       (button
        (setq widget (gtk-button-new-with-label label))
-       (gtk-signal-connect widget 'clicked (lambda (wid real-cb)
-                                            (if (functionp real-cb)
-                                                (funcall real-cb)
-                                              (eval real-cb)))
-                          callback))
+       (gtk-signal-connect widget 'clicked
+                          (gtk-widget-get-callback widget plist instance)))
       (radio
        (let ((aux nil)
             (selected-p (plist-get plist :selected)))
                    "bogus sibling"))
         (gtk-toggle-button-set-active widget (eval selected-p))
         (gtk-signal-connect widget 'toggled
-                            (lambda (wid data)
-                              ;; data is (real-cb . sibling)
-                              )
-                            (cons callback aux))))
+                            (gtk-widget-get-callback widget plist instance) aux)))
       (otherwise
        ;; Check boxes
        (setq widget (gtk-check-button-new-with-label label))
        (gtk-toggle-button-set-active widget
                                     (eval (plist-get plist :selected)))
        (gtk-signal-connect widget 'toggled
-                          (lambda (wid real-cb)
-                            (if (functionp real-cb)
-                                (funcall real-cb)
-                              (eval real-cb)))
-                          callback)))
-
+                          (gtk-widget-get-callback widget plist instance))))
     (gtk-widget-show-all widget)
     widget))
 
 (defun gtk-widget-instantiate-notebook-internal (plist callback)
   (let ((widget (gtk-notebook-new))
        (items (plist-get plist :items)))
-    (while items
-      (gtk-notebook-append-page widget
-                               (gtk-vbox-new nil 3)
-                               (gtk-label-new (aref (car items) 0)))
-      (setq items (cdr items)))
+;     (while items
+;       (gtk-notebook-append-page widget
+;                              (gtk-vbox-new nil 3)
+;                              (gtk-label-new (aref (car items) 0)))
+;       (setq items (cdr items)))
     widget))
 
 (defun gtk-widget-instantiate-progress-internal (plist callback)
   (let* ((type (aref instantiator 0))
         (plist (cdr (map 'list 'identity instantiator)))
         (widget (funcall (or (get type 'instantiator) 'ignore)
-                         plist (or (plist-get plist :callback) 'ignore))))
-    (add-timeout 0.1 (lambda (obj)
-                      (gtk-widget-set-style obj
-                                            (gtk-widget-get-style
-                                             (frame-property nil 'text-widget))))
-                widget)
+                         plist instance)))
+;     (add-timeout 0.1 (lambda (obj)
+;                     (gtk-widget-set-style obj
+;                                           (gtk-widget-get-style
+;                                            (frame-property nil 'text-widget))))
+;               widget)
     (setq x widget)
     widget))
 
index 52502ed..0e8b92c 100644 (file)
@@ -1,3 +1,17 @@
+2005-02-06  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.17 is released
+
+2004-12-05  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.16 is released
+
+2004-04-23  Jerry James  <james@xemacs.org>
+
+       * xlwradio.c (RadioExpose): Do not blindly copy one GC over
+       another.  It messes up the ref counts and is wrong for radio
+       buttons in any case.
+
 2004-02-02  Vin Shelton <acs@xemacs.org>
 
        * XEmacs 21.4.15 is released
index 207a1ff..cfb0e54 100644 (file)
@@ -305,13 +305,6 @@ RadioExpose (Widget w,
         * but it bears thinking on.
         */
 
-       /* Command widget may sometimes override the label GC in order
-        * to draw inverse video.  We don't use inverse video, so we need
-        * to restore the label's normal GC.
-        */
-       rw->label.normal_GC = rw->command.normal_GC ;
-
-
        /* Let label widget draw the label.  If there was an lbm_x
         * field, we could let Label draw the bitmap too.  But there
         * isn't, so we need to temporarily remove the bitmap and
index 21e5cd0..481b609 100644 (file)
@@ -1,3 +1,100 @@
+2005-02-06  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.17 is released
+
+2004-10-17  Shyamal Prasad  <shyamal@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-19  Aidan Kehoe  <kehoea@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@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-11-21  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * Makefile (RECURSIVE_MAKE): Removed.
+       * Makefile (RECURSIVE_MAKE_ARGS): New.  The new method for
+       handling parallel builds.
+
+2004-12-15  Ville Skyttä  <scop@xemacs.org>
+
+       * lispref/help.texi: Document 3rd arg to `make-obsolete'.
+
+2004-12-05  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.16 is released
+
+2003-07-18  Alexey Mahotkin  <alexm@hsys.msk.ru>
+
+       * lispref/windows.texi (Basic Windows): Fix typo.
+
+2004-09-08  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * lispref/searching.texi (Syntax of Regexps): Add example of use
+       of shy groups in variable subexpression, correct rumor that there
+       may be substantial performance gain.
+
+2004-08-13  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * lispref/positions.texi (Text Lines): makeinfo doesn't like Note:.
+
+2004-03-31  Stephen J. Turnbull  <turnbull@sk.tsukuba.ac.jp>
+
+       * xemacs/help.texi (Misc Help): Info-goto-emacs-key-command-node
+       to function index.  Document Info-goto-emacs-command-node.
+
+2004-06-29  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * internals/internals.texi (Modules for Other Aspects of the Lisp
+       Interpreter and Object System): Add description of Sextword syntax
+       class (now obsolete).
+
+2004-06-20  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * internals/internals.texi (Techniques for XEmacs Developers): Be
+       specific when discussing optimization.
+       (Techniques for XEmacs Developers): Fragments that are meaningless
+       by themselves or contain placeholders should be @samp, not @code.
+       (Modules for Regression Testing): Add tag-tests.el to list.
+
+2004-07-05  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * xemacs-faq.texi (Q3.10.2): Mention that `pending-delete' is in
+       the "pc" package.
+
+2004-06-07  Jerry James  <james@xemacs.org>
+
+       * lispref/modes.texi (Major Modes): Document -mode functions, and
+       the use of a nil argument to defined-derived mode.
+       * lispref/modes.texi (Major Mode Conventions): Describe the use of
+       delay-mode-hooks and define-derived-mode.
+       * lispref/modes.texi (Derived Modes): Warn against the use of
+       interactive specs in derived mode definitions.
+       * lispref/modes.texi (Hooks): Document run-mode-hooks,
+       delay-mode-hooks, run-hook-with-args,
+       run-hook-with-args-until-failure, and
+       run-hook-with-args-until-success.
+
 2004-02-02  Vin Shelton <acs@xemacs.org>
 
        * XEmacs 21.4.15 is released
index 6f7520f..5ce78d2 100644 (file)
@@ -27,7 +27,7 @@ RM = rm -f
 .SUFFIXES:
 .SUFFIXES: .info .texi .dvi
 
-RECURSIVE_MAKE = $(MAKE) $(MFLAGS) MAKEINFO='$(MAKEINFO)' TEXI2DVI='$(TEXI2DVI)'
+RECURSIVE_MAKE_ARGS = $(MAKE) $(MFLAGS) MAKEINFO='$(MAKEINFO)' TEXI2DVI='$(TEXI2DVI)'
 
 all : info
 
@@ -266,9 +266,9 @@ new-users-guide.info : $(INFODIR)/new-users-guide.info
 info : $(info_files)
 
 # tm: FRC.tm
-#      cd ./tm && $(RECURSIVE_MAKE)
+#      cd ./tm && $(MAKE) $(RECURSIVE_MAKE_ARGS)
 # gnats: FRC.gnats
-#      cd ./gnats && $(RECURSIVE_MAKE)
+#      cd ./gnats && $(MAKE) $(RECURSIVE_MAKE_ARGS)
 # FRC.xemacs FRC.lispref FRC.new-users-guide FRC.internals FRC.tm FRC.gnats:
 
 .PHONY: info dvi
index 322f7ef..d7df3da 100644 (file)
@@ -3109,7 +3109,7 @@ Speed up redisplay.
 @item
 Speed up syntax highlighting.  It was suggested that ``maybe moving some
 of the syntax highlighting capabilities into C would make a
-difference.''  Wrong idea, I think.  When processing one large file a
+difference.''  Wrong idea, I think.  When processing one 400kB file a
 particular low-level routine was being called 40 @emph{million} times
 simply for @emph{one} call to @code{newline-and-indent}.  Syntax
 highlighting needs to be rewritten to use a reliable, fast parser, then
@@ -3248,21 +3248,24 @@ All @file{.c} files should @code{#include <config.h>} first.  Almost all
 @file{.c} files should @code{#include "lisp.h"} second.
 
 @item
-Generated header files should be included using the @code{#include <...>} syntax,
-not the @code{#include "..."} syntax.  The generated headers are:
+Generated header files should be included using the @samp{#include <...>}
+syntax, not the @samp{#include "..."} syntax.  The generated headers are:
 
 @file{config.h sheap-adjust.h paths.h Emacs.ad.h}
 
-The basic rule is that you should assume builds using @code{--srcdir}
-and the @code{#include <...>} syntax needs to be used when the
+The basic rule is that you should assume builds using @samp{--srcdir}
+and the @samp{#include <...>} syntax needs to be used when the
 to-be-included generated file is in a potentially different directory
-@emph{at compile time}.  The non-obvious C rule is that @code{#include "..."}
-means to search for the included file in the same directory as the
-including file, @emph{not} in the current directory.
+@emph{at compile time}.  The non-obvious C rule is that
+@samp{#include "..."} means to search for the included file in the same
+directory as the including file, @emph{not} in the current directory.
+Normally this is not a problem but when building with @samp{--srcdir},
+@file{make} will search the @samp{VPATH} for you, while the C compiler
+knows nothing about it.
 
 @item
-Header files should @emph{not} include @code{<config.h>} and
-@code{"lisp.h"}.  It is the responsibility of the @file{.c} files that
+Header files should @emph{not} include @samp{<config.h>} and
+@samp{"lisp.h"}.  It is the responsibility of the @file{.c} files that
 use it to do so.
 
 @end itemize
@@ -4569,6 +4572,37 @@ delimiter.  The @samp{newline} character is given (single-character)
 sequence'' @emph{flag}.  The ``comment-end'' class allows the scanner to
 determine that no second character is needed to terminate the comment.
 
+There used to be a syntax class @samp{Sextword}.  A character of
+@samp{Sextword} class is a word-constituent but a word boundary may
+exist between two such characters.  Ken'ichi HANDA <handa@@etl.go.jp>
+explains the purpose of the Sextword syntax category:
+
+@quotation
+Japanese words are not separated by spaces, which makes finding word
+boundaries very difficult.  Theoretically it's impossible without
+using natural language processing techniques.  But, by defining
+pseudo-words as below (much simplified for letting you understand it
+easily) for Japanese, we can have a convenient forward-word function
+for Japanese.
+
+@display
+A Japanese word is a sequence of characters that consists of
+zero or more Kanji characters followed by zero or more
+Hiragana characters.
+@end display
+
+Then, the problem is that now we can't say that a sequence of
+word-constituents makes up a word.  For instance, both Hiragana "A"
+and Kanji "KAN" are word-constituents but the sequence of these two
+letters can't be a single word.
+
+So, we introduced Sextword for Japanese letters.
+@end quotation
+
+There seems to have been some controversy about this category, as it has
+been removed, readded, and removed again.  Currently neither GNU Emacs
+(21.3.99) nor XEmacs (21.5.17) seems to use it.
+
 
 @example
 casefiddle.c
@@ -5090,8 +5124,8 @@ to specify conversions of names of files and directories.  The standard
 C I/O functions like @samp{open()} are wrapped so that conversion occurs
 automatically.
 
-@file{mule.c} provides a few miscellaneous things that should probably
-be elsewhere.
+@file{mule.c} contains a few miscellaneous things.  It currently seems
+to be unused and probably should be removed.
 
 
 
@@ -5136,6 +5170,7 @@ mule-tests.el
 regexp-tests.el
 symbol-tests.el
 syntax-tests.el
+tag-tests.el
 @end example
 
 @file{test-harness.el} defines the macros @code{Assert},
@@ -9550,6 +9585,15 @@ elements, i.e. they hold all the information necessary to produce an
 image on-screen but the image need not exist at this stage, and multiple
 screen images can be instantiated from a single glyph.
 
+@c #### find a place for this discussion
+@c The decision to make image specifiers a separate type is debatable.
+@c In fact, the design decision to create a separate image specifier
+@c type, rather than make glyphs themselves be specifiers, is
+@c debatable---the other properties of glyphs are rarely used and could
+@c conceivably have been incorporated into the glyph's instantiator.
+@c The rarely used glyph types (buffer, pointer, icon) could also have
+@c been incorporated into the instantiator.
+
 Glyphs are lazily instantiated by calling one of the glyph
 functions. This usually occurs within redisplay when
 @code{Fglyph_height} is called. Instantiation causes an image-instance
index 3b378cd..d9dbfe1 100644 (file)
@@ -74,7 +74,7 @@ recursively, so that its value can be passed as an argument to the
 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}).
index 638cf96..59cf653 100644 (file)
@@ -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 @@ arguments in a Lisp program.  In some cases, we use it more
 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
@@ -84,28 +117,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
 byte compiler.  @xref{Compiled-Function Type}.
index 4007d8e..ec22d86 100644 (file)
@@ -676,7 +676,7 @@ users of that function should be told to use the newer one instead.
 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 @@ older function, and the help system will also note this in the function's
 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
index 6cbad13..ed05c96 100644 (file)
@@ -144,8 +144,10 @@ Reference Manual, corresponding to XEmacs version 21.0.
 * 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.
 
index 78b43d6..ed4ae90 100644 (file)
@@ -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
 
index ad3b31f..9bae5e6 100644 (file)
@@ -31,7 +31,12 @@ user.  For related topics such as keymaps and syntax tables, see
 @cindex Fundamental mode
 
   Major modes specialize XEmacs for editing particular kinds of text.
-Each buffer has only one major mode at a time.
+Each buffer has only one major mode at a time.  For each major mode
+there is a function to switch to that mode in the current buffer; its
+name should end in @samp{-mode}.  These functions work by setting
+buffer-local variable bindings and other data associated with the
+buffer, such as a local keymap.  The effect lasts until you switch
+to another major mode in the same buffer.
 
   The least specialized major mode is called @dfn{Fundamental mode}.
 This mode has no mode-specific definitions or variable settings, so each
@@ -55,6 +60,11 @@ Modes}).  For example, Rmail Edit mode, which is in
 Text mode except that it provides three additional commands.  Its
 definition is distinct from that of Text mode, but was derived from it.
 
+  Even if the new mode is not an obvious derivative of any other mode,
+it is convenient to use @code{define-derived-mode} with a @code{nil}
+parent argument, since it automatically enforces the most important
+coding conventions for you.
+
   Rmail Edit mode is an example of a case where one piece of text is put
 temporarily into a different major mode so it can be edited in a
 different way (with ordinary XEmacs commands rather than Rmail).  In such
@@ -189,6 +199,16 @@ immediately before the mode's own hook (that is, after everything else),
 or it may run them earlier.
 
 @item
+The major mode command may start by calling some other major mode
+command (called the @dfn{parent mode}) and then alter some of its
+settings.  A mode that does this is called a @dfn{derived mode}.  The
+recommended way to define one is to use @code{define-derived-mode},
+but this is not required.  Such a mode should use
+@code{delay-mode-hooks} around its entire body, including the call to
+the parent mode command and the final call to @code{run-mode-hooks}.
+(Using @code{define-derived-mode} does this automatically.)
+
+@item
 If something special should be done if the user switches a buffer from
 this mode to any other major mode, the mode can set a local value for
 @code{change-major-mode-hook}.
@@ -743,6 +763,9 @@ Here is a hypothetical example:
 (define-key hypertext-mode-map
   [down-mouse-3] 'do-hyper-link)
 @end example
+
+Do not write an @code{interactive} spec in the definition;
+@code{define-derived-mode} does that automatically.
 @end defmac
 
 @node Minor Modes
@@ -1398,6 +1421,41 @@ For example, here's how @code{emacs-lisp-mode} runs its mode hook:
 @end example
 @end defun
 
+@defun run-mode-hooks &rest hookvars
+Like @code{run-hooks}, but is affected by the @code{delay-mode-hooks}
+macro.
+@end defun
+
+@defmac delay-mode-hooks body...
+This macro executes the @var{body} forms but defers all calls to
+@code{run-mode-hooks} within them until the end of @var{body}.
+This macro enables a derived mode to arrange not to run
+its parent modes' mode hooks until the end.
+@end defmac
+
+@defun run-hook-with-args hook &rest args
+This function is the way to run an abnormal hook and always call all
+of the hook functions.  It calls each of the hook functions one by
+one, passing each of them the arguments @var{args}.
+@end defun
+
+@defun run-hook-with-args-until-failure hook &rest args
+This function is the way to run an abnormal hook until one of the hook
+functions fails.  It calls each of the hook functions, passing each of
+them the arguments @var{args}, until some hook function returns
+@code{nil}.  It then stops and returns @code{nil}.  If none of the
+hook functions return @code{nil}, it returns a non-@code{nil} value.
+@end defun
+
+@defun run-hook-with-args-until-success hook &rest args
+This function is the way to run an abnormal hook until a hook function
+succeeds.  It calls each of the hook functions, passing each of them
+the arguments @var{args}, until some hook function returns
+non-@code{nil}.  Then it stops, and returns whatever was returned by
+the last hook function that was called.  If all hook functions return
+@code{nil}, it returns @code{nil} as well.
+@end defun
 @defun add-hook hook function &optional append local
 This function is the handy way to add function @var{function} to hook
 variable @var{hook}.  The argument @var{function} may be any valid Lisp
index 7804917..abb7791 100644 (file)
@@ -364,7 +364,7 @@ least one line unless it is empty.
 With optional @var{ignore-invisible-lines-flag} non-@code{nil}, lines
 collapsed with selective-display are excluded from the line count.
 
-@strong{Note:} The expression to return the current line number is not
+@strong{N.B.} The expression to return the current line number is not
 obvious:
 
 @example
index 22df2d7..fd8c292 100644 (file)
@@ -446,7 +446,7 @@ Here is an explanation of this feature:
 matches the same text that matched the @var{digit}th occurrence of a
 @samp{\( @dots{} \)} construct.
 
-In other words, after the end of a @samp{\( @dots{} \)} construct.  the
+In other words, after the end of a @samp{\( @dots{} \)} construct, the
 matcher remembers the beginning and end of the text matched by that
 construct.  Then, later on in the regular expression, you can use
 @samp{\} followed by @var{digit} to match that same text, whatever it
@@ -473,19 +473,28 @@ substring to be recorded for future reference.
 This is useful when you need a lot of grouping @samp{\( @dots{} \)}
 constructs, but only want to remember one or two -- or if you have
 more than nine groupings and need to use backreferences to refer to
-the groupings at the end.
-
-Using @samp{\(?: @dots{} \)} rather than @samp{\( @dots{} \)} when you
-don't need the captured substrings ought to speed up your programs some,
-since it shortens the code path followed by the regular expression
-engine, as well as the amount of memory allocation and string copying it
-must do.  The actual performance gain to be observed has not been
-measured or quantified as of this writing.
-@c This is used to good advantage by the font-locking code, and by
-@c `regexp-opt.el'.
-
-The shy grouping operator has been borrowed from Perl, and has not been
-available prior to XEmacs 20.3, nor is it available in FSF Emacs.
+the groupings at the end.  It also allows construction of regular
+expressions from variable subexpressions that contain varying numbers of
+non-capturing subexpressions, without disturbing the group counts for
+the main expression.  For example
+
+@example
+(let ((sre (if foo "\\(?:bar\\|baz\\)" "quux")))
+  (re-search-forward (format "a\\(b+ %s c+\\) d" sre) nil t)
+  (match-string 1))
+@end example
+
+It is very tedious to write this kind of code without shy groups, even
+if you know what all the alternative subexpressions will look like.
+
+Using @samp{\(?: @dots{} \)} rather than @samp{\( @dots{} \)} should
+give little performance gain, as the start of each group must be
+recorded for the purpose of back-tracking in any case, and no string
+copying is done until @code{match-string} is called.
+
+The shy grouping operator has been borrowed from Perl, and was not
+available prior to XEmacs 20.3, and has only been available in GNU Emacs
+since version 21.
 
 @item \w
 @cindex @samp{\w} in regexp
index 3091876..9fb7a92 100644 (file)
@@ -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 @@ lambda expression thus becomes the function definition of the symbol.
 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
index 1d8b9b1..14f1055 100644 (file)
@@ -2127,6 +2127,7 @@ along with the characters; this includes such diverse functions as
 * Special Properties::         Particular properties with special meanings.
 * Saving Properties::           Saving text properties in files, and reading
                                   them back.
+* Fields::                     Emacs-compatible text fields.
 @end menu
 
 @node Examining Properties
@@ -2459,6 +2460,126 @@ types that are reasonably flexible, and not too hard to encode.
 
 @xref{Format Conversion}, for a related feature.
 
+@node Fields
+@subsection Fields
+@cindex text fields
+@cindex fields
+
+Emacs supplies a notion of a @emph{text field}, which is a region of
+text where every character has the same value of the @code{field}
+property.  It is used to identify regions of a buffer used for
+communicating with an external process, for example.  XEmacs supplies a
+compatible interface.  In XEmacs, the @code{field} property can be set
+as either an extent property or a text property, mirroring the Emacs
+capability of using either overlays or text properties.
+
+The field manipulating functions take a buffer position as the
+field-identifying argument, defaulting to point.  This really means the
+field containing that buffer position.  Consecutive buffer positions
+with no @code{field} property are considered an ``empty'' field.  There
+is some ambiguity when a specified buffer position falls at the very
+beginning or the very end of a field: does it belong to the preceding or
+the following field?  The answer depends on the openness or closedness
+of the corresponding extents (@pxref{Extent Endpoints}).  A buffer
+position corresponds to the field whose property would be inherited by a
+character inserted at that position.  If the buffer position is between
+an end-open and a start-open extent, then it corresponds to an empty
+field at that position, since an inserted character will belong to
+neither extent.
+
+@defvar inhibit-field-text-motion
+This variable controls whether the text motion commands notice fields or
+not.  When it is nil (the default), commands such as beginning-of-line
+will try to move only within fields.
+@end defvar
+
+@defun make-field value from to &optional buffer
+There is no Emacs counterpart to this function.  The default open and
+closedness of extents in XEmacs is opposite to the default for Emacs
+overlays.  Hence, fields based on extents in XEmacs behave differently
+from the equivalent fields based on overlays in Emacs.  This function
+creates a field with value @var{value} over the region @var{from} to
+@var{to} in @var{buffer}, which defaults to the current buffer, with the
+default Emacs open and closedness.
+@end defun
+
+@defun find-field &optional pos merge-at-boundary beg-limit end-limit
+There is no (Lisp-visible) Emacs counterpart to this function.  It is
+the workhorse for the other functions.  It returns a dotted pair
+@code{(start . stop)} holding the endpoints of the field matching a
+specification.  If @var{pos} is non-@code{nil}, it specifies a buffer
+position whose enclosing field should be found; otherwise, the value of
+point is used.
+
+If @var{merge-at-boundary} is non-@code{nil}, then two changes are made
+to the search algorithm.  First, if @var{pos} is at the very first
+position of a field, then the beginning of the previous field is
+returned instead of the beginning of @var{pos}'s field.  Second, if the
+value of the @code{field} property at @var{pos} is the symbol
+@code{boundary}, then the beginning of the field before the boundary
+field and the end of the field after the boundary field are returned.
+
+If @var{beg-limit} is a buffer position, and the start position that
+would be returned is less than @var{beg-limit}, then @var{beg-limit} is
+returned instead.  Likewise, if @var{end-limit} is a buffer position,
+and the stop position that would be returned is greater than
+@var{end-limit}, then @var{end-limit} is returned instead.
+@end defun
+
+@defun delete-field &optional pos
+Delete the text of the field at @var{pos}.
+@end defun
+
+@defun field-string &optional pos
+Return the contents of the field at @var{pos} as a string.
+@end defun
+
+@defun field-string-no-properties &optional pos
+Return the contents of the field at @var{pos} as a string, without text
+properties.
+@end defun
+
+@defun field-beginning &optional pos escape-from-edge limit
+Return the beginning of the field at @var{pos}.  If
+@var{escape-from-edge} is non-nil and @var{pos} is at the beginning of a
+field, then the beginning of the field that ends at @var{pos} is
+returned instead.  If @var{limit} is a buffer position and the returned
+value would be less than @var{limit}, then @var{limit} is returned
+instead.
+@end defun
+
+@defun field-end &optional pos escape-from-edge limit
+Return the end of the field at @var{pos}.  If @var{escape-from-edge} is
+non-nil and @var{pos} is at the end of a field, then the end of the
+field that begins at @var{pos} is returned instead.  If @var{limit} is a
+buffer position and the returned value would be greater than
+@var{limit}, then @var{limit} is returned instead.
+@end defun
+
+@defun constrain-to-field new-pos old-pos &optional escape-from-edge only-in-line inhibit-capture-property
+Return the position closest to @var{new-pos} that is in the same field
+as @var{old-pos}.  If @var{new-pos} is @code{nil}, then the value of
+point is used instead @emph{and} point is set to the value that is
+returned.
+
+If @var{escape-from-edge} is non-@code{nil} and @var{old-pos} is at the
+boundary of two fields, then the two adjacent fields are considered one
+field.  Furthermore, if @var{new-pos} is in a field whose @code{field}
+property is the symbol @code{boundary}, then the preceding field, the
+boundary field, and the following field are considered one field.
+
+If @var{only-in-line} is non-@code{nil} and the returned position would
+be on a different line than @var{new-pos}, return @var{new-pos} instead.
+
+If @var{inhibit-capture-property} is non-@code{nil} and the character at
+@var{old-pos} has a property of the same name as the value of
+@var{inhibit-capture-property}, then all field boundaries are ignored;
+i.e., @var{new-pos} is returned.
+
+If @var{inhibit-field-text-motion} is non-@code{nil}, then all field
+boundaries are ignored and this function always returns @var{new-pos}.
+@end defun
+
 @node Substitution
 @section Substituting for a Character Code
 
index 21aa3af..ee56d70 100644 (file)
@@ -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 @@ bindings:
 
 @itemize @bullet
 @item
-Function calls (@pxref{Functions}).
+Function calls (@pxref{Functions and Commands}).
 
 @item
 Macro calls (@pxref{Macros}).
index 73ac18c..a9ebdd3 100644 (file)
@@ -48,7 +48,7 @@ multiple nonoverlapping Emacs windows.
 
   In each frame, at any time, one and only one window is designated as
 @dfn{selected within the frame}.  The frame's cursor appears in that
-window.  At ant time, one frame is the selected frame; and the window
+window.  At any time, one frame is the selected frame; and the window
 selected within that frame is @dfn{the selected window}.  The selected
 window's buffer is usually the current buffer (except when
 @code{set-buffer} has been used).  @xref{Current Buffer}.
index 8f8b3eb..af2fa57 100644 (file)
@@ -3955,7 +3955,9 @@ is what happens when you select a region (with the mouse or keyboard)
 and you press a key to replace the selected region by the key you typed.
 Usually backspace kills the selected region.
 
-To get this behavior, add the following lines to your @file{init.el}/@file{.emacs}:
+To get this behavior, ensure that you have the @file{pc} package
+installed, and add the following lines to your
+@file{init.el}/@file{.emacs}:
 
 @lisp
 (cond
index a6c62f6..3b326e0 100644 (file)
@@ -385,13 +385,16 @@ the file.
 @kindex C-h C-k
 @findex Info-elisp-ref
 @findex Info-goto-emacs-command-node
+@findex Info-goto-emacs-key-command-node
   There are two special help commands for accessing XEmacs documentation
 through Info.  @kbd{C-h C-f @var{function} @key{RET}} enters Info and
 goes straight to the documentation of the XEmacs function
 @var{function}.  @kbd{C-h C-k @var{key}} enters Info and goes straight
 to the documentation of the key @var{key}.  These two keys run the
 commands @code{Info-elisp-ref} and
-@code{Info-goto-emacs-key-command-node}.
+@code{Info-goto-emacs-key-command-node}.  (GNU Emacs binds @kbd{C-h C-f}
+to @code{Info-goto-emacs-command-node}, but this is less helpful to
+programmers.)
 
 @kindex C-h l
 @findex view-lossage
index d214045..af69380 100644 (file)
@@ -26,14 +26,15 @@ which handle comments use the mode to determine how to delimit comments.
 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 @@ in a program are usually indented.  @xref{Indentation}.
 
 @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 @@ specified by the variable @code{default-major-mode}.  Normally this
 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}.
+
+
index 9ec4993..e0d0c3d 100644 (file)
@@ -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 @@ Show how parentheses balance (@pxref{Matching}).
 @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 @@ on the screen.
 * 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 @@ on the screen.
 @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 @@ blank lines, so that the paragraph commands remain useful.  Auto Fill mode,
 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 @@ over them as well.
 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 @@ all of the lines inside a single parenthetical grouping.
 * 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 @@ preprocessor lines when in C mode.
 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,184 +512,6 @@ indentation is computed by @kbd{C-M-q}; if the value is a number,
 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
@@ -1003,7 +829,7 @@ Tue Jun 25 05:25:33 1985  Richard M. Stallman  (rms at mit-prep)
         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
 
@@ -1705,7 +1531,169 @@ name recorded in the tags table contains that directory.
 then finds all the tags in the selected tags table whose entries match that
 regexp, and displays the tag names found.
 
-@node Fortran, Asm Mode, Tags, Programs
+@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, CC Mode, Programs
 @section Fortran Mode
 @cindex Fortran mode
 
index 89fd4b3..79d71fa 100644 (file)
@@ -460,6 +460,7 @@ Editing Programs
 * 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.
 
@@ -468,7 +469,6 @@ Indentation for Programs
 * 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
 
index 7a19f38..dcdfabf 100644 (file)
@@ -1,3 +1,11 @@
+2005-02-06  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.17 is released
+
+2004-12-05  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.16 is released
+
 2004-02-02  Vin Shelton <acs@xemacs.org>
 
        * XEmacs 21.4.15 is released
index 4a7520b..fe58c57 100644 (file)
-//Microsoft Developer Studio generated resource script.\r
-//\r
-#include "resource.h"\r
-\r
-#define APSTUDIO_READONLY_SYMBOLS\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Generated from the TEXTINCLUDE 2 resource.\r
-//\r
-#define APSTUDIO_HIDDEN_SYMBOLS\r
-#include "windows.h"\r
-#undef APSTUDIO_HIDDEN_SYMBOLS\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-#undef APSTUDIO_READONLY_SYMBOLS\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-// English (U.S.) resources\r
-\r
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
-#ifdef _WIN32\r
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
-#pragma code_page(1252)\r
-#endif //_WIN32\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Dialog\r
-//\r
-\r
-IDD_SOURCE DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    PUSHBUTTON      "Next >",IDOK,199,176,45,15,WS_GROUP\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15\r
-    CONTROL         "Download from the Internet",IDC_SOURCE_DOWNLOAD,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,127,102,152,10\r
-    CONTROL         "Install from the Internet",IDC_SOURCE_NETINST,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,127,121,87,10\r
-    CONTROL         "Install from Local Directory",IDC_SOURCE_CWD,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,127,140,104,10\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "Setup will use the following installation method.",\r
-                    IDC_STATIC,112,11,170,17\r
-    LTEXT           "To exit setup click Cancel at any time.",IDC_STATIC,112,\r
-                    32,166,17\r
-    GROUPBOX        "Installation method",IDC_STATIC,113,84,188,77\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_LOCAL_DIR DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "Local package directory"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    DEFPUSHBUTTON   "Next >",IDOK,199,176,45,15,WS_DISABLED\r
-    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    EDITTEXT        IDC_LOCAL_DIR,120,138,122,12,ES_AUTOHSCROLL\r
-    PUSHBUTTON      "Browse...",IDC_LOCAL_DIR_BROWSE,252,137,38,14\r
-    LTEXT           "Setup will use the following folder to install XEmacs and / or packages from.",\r
-                    IDC_STATIC,112,10,170,17\r
-    LTEXT           "To select a different folder, click Browse and select another folder.",\r
-                    IDC_STATIC,112,36,170,18\r
-    LTEXT           "To exit setup click Cancel at any time.",IDC_STATIC,112,\r
-                    63,166,17\r
-    GROUPBOX        "Local Package Directory",IDC_STATIC,112,126,186,31\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_ROOT DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    DEFPUSHBUTTON   "Next >",IDOK,199,176,45,15\r
-    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    EDITTEXT        IDC_ROOT_DIR,120,138,122,12,ES_AUTOHSCROLL\r
-    PUSHBUTTON      "Browse...",IDC_ROOT_BROWSE,252,137,38,14\r
-    LTEXT           "Setup will use the following folder in which to install XEmacs and / or packages.",\r
-                    IDC_STATIC,112,10,170,17\r
-    LTEXT           "To select a different folder, click Browse and select another folder.",\r
-                    IDC_STATIC,112,35,170,18\r
-    LTEXT           "To exit setup click Cancel at any time.",IDC_STATIC,112,\r
-                    63,166,17\r
-    GROUPBOX        "Installation Root Directory",IDC_STATIC,112,126,186,31\r
-    CONTROL         "All",IDC_ROOT_SYSTEM,"Button",BS_AUTORADIOBUTTON | \r
-                    WS_GROUP,177,110,25,8\r
-    CONTROL         "Just Me",IDC_ROOT_USER,"Button",BS_AUTORADIOBUTTON,220,\r
-                    110,50,8\r
-    LTEXT           "Installation Type :",IDC_STATIC,112,95,60,8\r
-    LTEXT           "Install For :",IDC_STATIC,112,110,43,8\r
-    CONTROL         "Native",IDC_INSTALL_NATIVE,"Button",BS_AUTORADIOBUTTON,\r
-                    177,93,37,10\r
-    CONTROL         "Cygwin",IDC_INSTALL_CYGWIN,"Button",BS_AUTORADIOBUTTON,\r
-                    220,93,39,10\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_SITE DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    DEFPUSHBUTTON   "Next >",IDOK,199,176,45,15\r
-    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "Select Download Site",IDC_STATIC,113,11,135,11\r
-    LISTBOX         IDC_URL_LIST,121,24,179,136,LBS_NOINTEGRALHEIGHT | \r
-                    WS_VSCROLL | WS_HSCROLL | WS_TABSTOP\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_OTHER_URL DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    DEFPUSHBUTTON   "Next >",IDOK,199,176,45,15\r
-    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    EDITTEXT        IDC_OTHER_URL,120,138,170,12,ES_AUTOHSCROLL\r
-    LTEXT           "Setup will use the following URL to install XEmacs and / or packages from.",\r
-                    IDC_STATIC,112,10,170,17\r
-    LTEXT           "To select a different URL, edit the text.",IDC_STATIC,\r
-                    112,36,170,18\r
-    LTEXT           "To exit setup click Cancel at any time.",IDC_STATIC,112,\r
-                    58,166,17\r
-    GROUPBOX        "Select URL to download from",IDC_STATIC,112,126,186,31\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_NET DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    PUSHBUTTON      "Next >",IDOK,199,176,45,15,WS_GROUP\r
-    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "Setup will use the following connection method.",\r
-                    IDC_STATIC,112,11,170,17,NOT WS_GROUP\r
-    LTEXT           "To exit setup click Cancel at any time.",IDC_STATIC,112,\r
-                    32,166,17,NOT WS_GROUP\r
-    CONTROL         "Use IE5 Settings",IDC_NET_IE5,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,128,93,69,10\r
-    CONTROL         "Direct Connection",IDC_NET_DIRECT,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,128,109,73,10\r
-    CONTROL         "Use HTTP/FTP Proxy:",IDC_NET_PROXY,"Button",\r
-                    BS_AUTORADIOBUTTON | WS_TABSTOP,128,124,88,10\r
-    EDITTEXT        IDC_PROXY_HOST,128,141,80,12,ES_AUTOHSCROLL | \r
-                    WS_DISABLED\r
-    LTEXT           "Proxy",IDC_STATIC,10,55,50,15,SS_CENTERIMAGE,\r
-                    WS_EX_RIGHT\r
-    LTEXT           "Port",IDC_STATIC,229,139,20,15,SS_CENTERIMAGE,\r
-                    WS_EX_RIGHT\r
-    EDITTEXT        IDC_PROXY_PORT,257,141,30,12,ES_AUTOHSCROLL | \r
-                    WS_DISABLED\r
-    GROUPBOX        "Installation method",IDC_STATIC,113,78,188,83\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_DLSTATUS DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE | \r
-    WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "Downloading Packages",IDC_STATIC,112,10,170,17\r
-    LTEXT           "(URL)",IDC_DLS_URL,112,26,170,11\r
-    LTEXT           "(RATE)",IDC_DLS_RATE,112,41,166,11\r
-    CONTROL         "Progress1",IDC_DLS_PROGRESS,"msctls_progress32",\r
-                    WS_BORDER,123,143,165,10\r
-    GROUPBOX        "Progress",IDC_STATIC,112,130,186,31\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_INSTATUS DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE | \r
-    WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "Installing Packages",IDC_STATIC,112,10,170,17\r
-    LTEXT           "(PKG)",IDC_INS_PKG,112,26,170,11\r
-    LTEXT           "(FILE)",IDC_INS_FILE,112,41,183,11\r
-    CONTROL         "Progress1",IDC_INS_DISKFULL,"msctls_progress32",\r
-                    WS_BORDER,123,143,165,10\r
-    CONTROL         "Progress1",IDC_INS_IPROGRESS,"msctls_progress32",\r
-                    WS_BORDER,125,106,163,10\r
-    CONTROL         "Progress1",IDC_INS_PPROGRESS,"msctls_progress32",\r
-                    WS_BORDER,125,67,163,10\r
-    GROUPBOX        "Disk",IDC_STATIC,112,130,186,31\r
-    GROUPBOX        "Package",IDC_STATIC,112,54,186,31\r
-    GROUPBOX        "Total",IDC_STATIC,112,93,186,31\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_UNINSTALL DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "Uninstall XEmacs"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    PUSHBUTTON      "Cancel",IDCANCEL,199,176,45,15\r
-    DEFPUSHBUTTON   "Uninstall",IDOK,256,176,45,15\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "Uninstalling Packages",IDC_STATIC,112,10,170,17\r
-    LTEXT           "(PKG)",IDC_UNINS_PKG,112,26,170,11\r
-    LTEXT           "(FILE)",IDC_UNINS_FILE,112,41,166,11\r
-    CONTROL         "Progress1",IDC_UNINS_DISKFULL,"msctls_progress32",\r
-                    WS_BORDER,123,143,165,10\r
-    CONTROL         "Progress1",IDC_UNINS_IPROGRESS,"msctls_progress32",\r
-                    WS_BORDER,125,106,163,10\r
-    CONTROL         "Progress1",IDC_UNINS_PPROGRESS,"msctls_progress32",\r
-                    WS_BORDER,125,67,163,10\r
-    GROUPBOX        "Disk",IDC_STATIC,112,130,186,31\r
-    GROUPBOX        "Package",IDC_STATIC,112,54,186,31\r
-    GROUPBOX        "Total",IDC_STATIC,112,93,186,31\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_PROXY_AUTH DIALOG DISCARDABLE  0, 0, 215, 95\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    ICON            IDI_XEMACS,IDC_STATIC,5,5,20,20\r
-    EDITTEXT        IDC_NET_USER,65,28,145,12,ES_AUTOHSCROLL\r
-    LTEXT           "Proxy User ID",IDC_STATIC,5,28,55,15,SS_CENTERIMAGE,\r
-                    WS_EX_RIGHT\r
-    EDITTEXT        IDC_NET_PASSWD,65,43,145,12,ES_PASSWORD | ES_AUTOHSCROLL\r
-    LTEXT           "Password",IDC_STATIC,10,43,50,15,SS_CENTERIMAGE,\r
-                    WS_EX_RIGHT\r
-    LTEXT           "Proxy Authorization Required",IDC_STATIC,65,10,145,10\r
-    DEFPUSHBUTTON   "OK",IDOK,100,75,45,15,WS_DISABLED\r
-    PUSHBUTTON      "Cancel",IDCANCEL,165,75,45,15\r
-END\r
-\r
-IDD_NET_AUTH DIALOG DISCARDABLE  0, 0, 215, 95\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    ICON            IDI_XEMACS,IDC_STATIC,5,5,20,20\r
-    EDITTEXT        IDC_NET_USER,65,28,145,12,ES_AUTOHSCROLL\r
-    LTEXT           "User ID",IDC_STATIC,5,28,55,15,SS_CENTERIMAGE,\r
-                    WS_EX_RIGHT\r
-    EDITTEXT        IDC_NET_PASSWD,65,43,145,12,ES_PASSWORD | ES_AUTOHSCROLL\r
-    LTEXT           "Password",IDC_STATIC,10,43,50,15,SS_CENTERIMAGE,\r
-                    WS_EX_RIGHT\r
-    LTEXT           "Server Authorization Required",IDC_STATIC,65,10,145,10\r
-    DEFPUSHBUTTON   "OK",IDOK,100,75,45,15,WS_DISABLED\r
-    PUSHBUTTON      "Cancel",IDCANCEL,165,75,45,15\r
-END\r
-\r
-IDD_SPLASH DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    DEFPUSHBUTTON   "Next >",IDOK,199,176,45,15\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15\r
-    ICON            IDI_XEMACS,IDC_STATIC,107,10,20,20\r
-    LTEXT           "Welcome to the XEmacs Net Release Setup Program. This will install XEmacs and/or associated packages on your computer.",\r
-                    IDC_STATIC,133,10,158,29\r
-    LTEXT           "Version (unknown)",IDC_VERSION,112,117,120,10\r
-    LTEXT           "Copyright (C) 2000 Red Hat Inc",IDC_STATIC,111,132,135,\r
-                    8\r
-    LTEXT           "http://www.xemacs.org/",IDC_STATIC,111,147,150,10\r
-    LTEXT           "It is strongly recommended that you exit all Windows programs before running this utility.",\r
-                    IDC_STATIC,110,43,191,19\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_CHOOSE DIALOG DISCARDABLE  0, 0, 311, 239\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    DEFPUSHBUTTON   "Next >",IDOK,199,214,45,15\r
-    PUSHBUTTON      "< Back",IDC_BACK,154,214,45,15\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,214,45,15\r
-    LTEXT           "",IDC_STATIC,10,201,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "Select packages to install",IDC_STATIC,55,5,85,8\r
-    ICON            IDI_XEMACS,IDC_STATIC,5,5,21,20\r
-    LTEXT           "",IDC_LISTVIEW_POS,55,15,230,155,SS_SUNKEN | NOT \r
-                    WS_VISIBLE | NOT WS_GROUP\r
-    CONTROL         "SPIN",IDC_STATIC,"Static",SS_BITMAP,55,170,15,13\r
-    LTEXT           "= click to choose action, (p) = previous version, (x) = experimental",\r
-                    IDC_STATIC,65,170,220,8\r
-    PUSHBUTTON      "Full/Part",IDC_CHOOSE_FULLPART,250,5,35,10\r
-    PUSHBUTTON      "Exp",IDC_CHOOSE_EXP,215,5,25,10\r
-    PUSHBUTTON      "Curr",IDC_CHOOSE_CURR,190,5,25,10\r
-    PUSHBUTTON      "Prev",IDC_CHOOSE_PREV,165,5,25,10\r
-END\r
-\r
-IDD_DESKTOP DIALOG DISCARDABLE  0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
-    DEFPUSHBUTTON   "Finish",IDOK,199,176,45,15\r
-    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15\r
-    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15\r
-    LTEXT           "Setup has now finished. To create desktop shortcuts, please select from the following options.",\r
-                    IDC_STATIC,112,11,170,17\r
-    LTEXT           "To complete setup click Finish.",IDC_STATIC,112,32,166,\r
-                    17\r
-    CONTROL         "Create Desktop Icon",IDC_ROOT_DESKTOP,"Button",\r
-                    BS_AUTOCHECKBOX,113,50,100,8\r
-    CONTROL         "Add to Start Menu",IDC_ROOT_MENU,"Button",\r
-                    BS_AUTOCHECKBOX,113,66,100,8\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-    CONTROL         "Text",IDC_TXT_TYPE,"Button",BS_AUTOCHECKBOX,209,101,38,\r
-                    8\r
-    CONTROL         "Java",IDC_JAVA_TYPE,"Button",BS_AUTOCHECKBOX,113,100,50,\r
-                    8\r
-    CONTROL         "C",IDC_C_TYPE,"Button",BS_AUTOCHECKBOX,113,116,41,8\r
-    CONTROL         "C++",IDC_CPP_TYPE,"Button",BS_AUTOCHECKBOX,113,133,38,8\r
-    CONTROL         "E-Lisp",IDC_ELISP_TYPE,"Button",BS_AUTOCHECKBOX,113,148,\r
-                    38,8\r
-    LTEXT           "Register XEmacs for these file types:",IDC_STATIC,113,\r
-                    84,166,13\r
-    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
-    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
-    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-    CONTROL         "IDL",IDC_IDL_TYPE,"Button",BS_AUTOCHECKBOX,209,116,38,8\r
-END\r
-\r
-\r
-#ifdef APSTUDIO_INVOKED\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// TEXTINCLUDE\r
-//\r
-\r
-1 TEXTINCLUDE DISCARDABLE \r
-BEGIN\r
-    "resource.h\0"\r
-END\r
-\r
-2 TEXTINCLUDE DISCARDABLE \r
-BEGIN\r
-    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"\r
-    "#include ""windows.h""\r\n"\r
-    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"\r
-    "\0"\r
-END\r
-\r
-3 TEXTINCLUDE DISCARDABLE \r
-BEGIN\r
-    "\r\n"\r
-    "\0"\r
-END\r
-\r
-#endif    // APSTUDIO_INVOKED\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Icon\r
-//\r
-\r
-// Icon with lowest ID value placed first to ensure application icon\r
-// remains consistent on all systems.\r
-IDI_XEMACS              ICON    DISCARDABLE     "xemacs.ico"\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// FILE\r
-//\r
-\r
-XEMACS.ICON             FILE    DISCARDABLE     "xemacs.ico"\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// DESIGNINFO\r
-//\r
-\r
-#ifdef APSTUDIO_INVOKED\r
-GUIDELINES DESIGNINFO DISCARDABLE \r
-BEGIN\r
-    IDD_SOURCE, DIALOG\r
-    BEGIN\r
-        VERTGUIDE, 113\r
-        VERTGUIDE, 127\r
-    END\r
-\r
-    IDD_LOCAL_DIR, DIALOG\r
-    BEGIN\r
-        VERTGUIDE, 112\r
-        HORZGUIDE, 10\r
-    END\r
-\r
-    IDD_ROOT, DIALOG\r
-    BEGIN\r
-        VERTGUIDE, 112\r
-        HORZGUIDE, 103\r
-        HORZGUIDE, 118\r
-    END\r
-\r
-    IDD_SITE, DIALOG\r
-    BEGIN\r
-        HORZGUIDE, 11\r
-        HORZGUIDE, 161\r
-    END\r
-\r
-    IDD_NET, DIALOG\r
-    BEGIN\r
-        VERTGUIDE, 128\r
-        BOTTOMMARGIN, 191\r
-        HORZGUIDE, 153\r
-    END\r
-\r
-    IDD_INSTATUS, DIALOG\r
-    BEGIN\r
-        VERTGUIDE, 112\r
-        VERTGUIDE, 125\r
-        VERTGUIDE, 288\r
-    END\r
-\r
-    IDD_PROXY_AUTH, DIALOG\r
-    BEGIN\r
-        BOTTOMMARGIN, 49\r
-    END\r
-\r
-    IDD_NET_AUTH, DIALOG\r
-    BEGIN\r
-        BOTTOMMARGIN, 49\r
-    END\r
-\r
-    IDD_SPLASH, DIALOG\r
-    BEGIN\r
-        LEFTMARGIN, 10\r
-        RIGHTMARGIN, 301\r
-        TOPMARGIN, 10\r
-        BOTTOMMARGIN, 191\r
-    END\r
-\r
-    IDD_CHOOSE, DIALOG\r
-    BEGIN\r
-        BOTTOMMARGIN, 229\r
-        HORZGUIDE, 214\r
-    END\r
-\r
-    IDD_DESKTOP, DIALOG\r
-    BEGIN\r
-        VERTGUIDE, 113\r
-        VERTGUIDE, 209\r
-        HORZGUIDE, 124\r
-    END\r
-END\r
-#endif    // APSTUDIO_INVOKED\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Bitmap\r
-//\r
-\r
-SPIN                    BITMAP  DISCARDABLE     "choose-spin.bmp"\r
-IDB_SPIN                BITMAP  DISCARDABLE     "choose-spin.bmp"\r
-IDB_RTARROW             BITMAP  DISCARDABLE     "choose-rtarrow.bmp"\r
-IDB_CHECK_YES           BITMAP  DISCARDABLE     "check-yes.bmp"\r
-IDB_CHECK_NO            BITMAP  DISCARDABLE     "check-no.bmp"\r
-IDB_CHECK_NA            BITMAP  DISCARDABLE     "check-na.bmp"\r
-GNU                     BITMAP  DISCARDABLE     "gnu.bmp"\r
-IDB_GNU                 BITMAP  DISCARDABLE     "gnu.bmp"\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// String Table\r
-//\r
-\r
-STRINGTABLE DISCARDABLE \r
-BEGIN\r
-    IDS_ROOT_SLASH          "Warning: we recommend you do NOT use the root of your hard drive as the XEmacs root.  Proceed anyway?"\r
-    IDS_ROOT_SPACE          "You should not choose a root path that include spaces in directory names.  Proceed anyway?"\r
-    IDS_MIRROR_LST          "http://www.xemacs.org/Download/mirrors.lst"\r
-    IDS_DIALOG_FAILED       "Unable to create Dialog Box"\r
-    IDS_CYGWIN_FUNC_MISSING "Error: unable to find function `%s' in %s"\r
-    IDS_DOWNLOAD_SHORT      "Download error: %s too short (%d, wanted %d)"\r
-    IDS_ERR_OPEN_WRITE      "Can't open %s for writing: %s"\r
-    IDS_SETUPINI_MISSING    "Unable to get setup.ini from %s"\r
-    IDS_OLD_SETUPINI        "This setup.ini is older than the one you used last time you installed cygwin.  Proceed anyway?"\r
-    IDS_ERR_RENAME          "Can't rename %s to %s: %s"\r
-    IDS_NOTHING_INSTALLED   "Nothing needed to be installed"\r
-    IDS_INSTALL_COMPLETE    "Installation Complete"\r
-END\r
-\r
-STRINGTABLE DISCARDABLE \r
-BEGIN\r
-    IDS_ERR_OPEN_READ       "Can't open %s for reading: %s"\r
-    IDS_ROOT_ABSOLUTE       "The install directory must be absolute, with both a drive letter and leading slash, like C:\\Cygwin"\r
-    IDS_DOWNLOAD_COMPLETE   "Download Complete"\r
-    IDS_CVSID               "\n%%% $Id: res.rc,v 1.2.2.1.2.1 2002/05/18 07:47:27 stephent Exp $\n"\r
-    IDS_NOLOGFILE           "Cannot open log file %s for writing"\r
-    IDS_UNINSTALL_COMPLETE  "Uninstalls complete."\r
-    IDS_WININET             "Unable to find or load the Internet Explorer 5 DLLs"\r
-    IDS_ERR_CHDIR           "Could not change dir to %s"\r
-    IDS_OLD_SETUP_VERSION   "This setup is version %s, but setup.ini claims version %s is available.\nYou might want to upgrade to get the latest features and bug fixes."\r
-    IDS_DOWNLOAD_FAILED     "Unable to download %s"\r
-    IDS_DOWNLOAD_INCOMPLETE "Download Incomplete.  Try again?"\r
-    IDS_INSTALL_INCOMPLETE  "Installation incomplete.  Check /setup.log.full for details"\r
-    IDS_ROOT_NOCYGWIN       "You should not install the Cygwin version without Cygwin installed.  Proceed anyway?"\r
-    IDS_CREATE_DIR          "The directory %s does not exist, create it?"\r
-END\r
-\r
-#endif    // English (U.S.) resources\r
-/////////////////////////////////////////////////////////////////////////////\r
-\r
-\r
-\r
-#ifndef APSTUDIO_INVOKED\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Generated from the TEXTINCLUDE 3 resource.\r
-//\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-#endif    // not APSTUDIO_INVOKED\r
-\r
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_SOURCE DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    PUSHBUTTON      "Next >",IDOK,199,176,45,15,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15
+    CONTROL         "Download from the Internet",IDC_SOURCE_DOWNLOAD,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,127,102,152,10
+    CONTROL         "Install from the Internet",IDC_SOURCE_NETINST,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,127,121,87,10
+    CONTROL         "Install from Local Directory",IDC_SOURCE_CWD,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,127,140,104,10
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "Setup will use the following installation method.",
+                    IDC_STATIC,112,11,170,17
+    LTEXT           "To exit setup click Cancel at any time.",IDC_STATIC,112,
+                    32,166,17
+    GROUPBOX        "Installation method",IDC_STATIC,113,84,188,77
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+END
+
+IDD_LOCAL_DIR DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Local package directory"
+FONT 8, "MS Sans Serif"
+BEGIN
+    DEFPUSHBUTTON   "Next >",IDOK,199,176,45,15,WS_DISABLED
+    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15
+    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    EDITTEXT        IDC_LOCAL_DIR,120,138,122,12,ES_AUTOHSCROLL
+    PUSHBUTTON      "Browse...",IDC_LOCAL_DIR_BROWSE,252,137,38,14
+    LTEXT           "Setup will use the following folder to install XEmacs and / or packages from.",
+                    IDC_STATIC,112,10,170,17
+    LTEXT           "To select a different folder, click Browse and select another folder.",
+                    IDC_STATIC,112,36,170,18
+    LTEXT           "To exit setup click Cancel at any time.",IDC_STATIC,112,
+                    63,166,17
+    GROUPBOX        "Local Package Directory",IDC_STATIC,112,126,186,31
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+END
+
+IDD_ROOT DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    DEFPUSHBUTTON   "Next >",IDOK,199,176,45,15
+    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15
+    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    EDITTEXT        IDC_ROOT_DIR,120,138,122,12,ES_AUTOHSCROLL
+    PUSHBUTTON      "Browse...",IDC_ROOT_BROWSE,252,137,38,14
+    LTEXT           "Setup will use the following folder in which to install XEmacs and / or packages.",
+                    IDC_STATIC,112,10,170,17
+    LTEXT           "To select a different folder, click Browse and select another folder.",
+                    IDC_STATIC,112,35,170,18
+    LTEXT           "To exit setup click Cancel at any time.",IDC_STATIC,112,
+                    63,166,17
+    GROUPBOX        "Installation Root Directory",IDC_STATIC,112,126,186,31
+    CONTROL         "All",IDC_ROOT_SYSTEM,"Button",BS_AUTORADIOBUTTON | 
+                    WS_GROUP,177,110,25,8
+    CONTROL         "Just Me",IDC_ROOT_USER,"Button",BS_AUTORADIOBUTTON,220,
+                    110,50,8
+    LTEXT           "Installation Type :",IDC_STATIC,112,95,60,8
+    LTEXT           "Install For :",IDC_STATIC,112,110,43,8
+    CONTROL         "Native",IDC_INSTALL_NATIVE,"Button",BS_AUTORADIOBUTTON,
+                    177,93,37,10
+    CONTROL         "Cygwin",IDC_INSTALL_CYGWIN,"Button",BS_AUTORADIOBUTTON,
+                    220,93,39,10
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+END
+
+IDD_SITE DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    DEFPUSHBUTTON   "Next >",IDOK,199,176,45,15
+    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15
+    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "Select Download Site",IDC_STATIC,113,11,135,11
+    LISTBOX         IDC_URL_LIST,121,24,179,136,LBS_NOINTEGRALHEIGHT | 
+                    WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+END
+
+IDD_OTHER_URL DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    DEFPUSHBUTTON   "Next >",IDOK,199,176,45,15
+    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15
+    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    EDITTEXT        IDC_OTHER_URL,120,138,170,12,ES_AUTOHSCROLL
+    LTEXT           "Setup will use the following URL to install XEmacs and / or packages from.",
+                    IDC_STATIC,112,10,170,17
+    LTEXT           "To select a different URL, edit the text.",IDC_STATIC,
+                    112,36,170,18
+    LTEXT           "To exit setup click Cancel at any time.",IDC_STATIC,112,
+                    58,166,17
+    GROUPBOX        "Select URL to download from",IDC_STATIC,112,126,186,31
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+END
+
+IDD_NET DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    PUSHBUTTON      "Next >",IDOK,199,176,45,15,WS_GROUP
+    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15
+    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "Setup will use the following connection method.",
+                    IDC_STATIC,112,11,170,17,NOT WS_GROUP
+    LTEXT           "To exit setup click Cancel at any time.",IDC_STATIC,112,
+                    32,166,17,NOT WS_GROUP
+    CONTROL         "Use IE5 Settings",IDC_NET_IE5,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,128,93,69,10
+    CONTROL         "Direct Connection",IDC_NET_DIRECT,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,128,109,73,10
+    CONTROL         "Use HTTP/FTP Proxy:",IDC_NET_PROXY,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,128,124,88,10
+    EDITTEXT        IDC_PROXY_HOST,128,141,80,12,ES_AUTOHSCROLL | 
+                    WS_DISABLED
+    LTEXT           "Proxy",IDC_STATIC,10,55,50,15,SS_CENTERIMAGE,
+                    WS_EX_RIGHT
+    LTEXT           "Port",IDC_STATIC,229,139,20,15,SS_CENTERIMAGE,
+                    WS_EX_RIGHT
+    EDITTEXT        IDC_PROXY_PORT,257,141,30,12,ES_AUTOHSCROLL | 
+                    WS_DISABLED
+    GROUPBOX        "Installation method",IDC_STATIC,113,78,188,83
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+END
+
+IDD_DLSTATUS DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE | 
+    WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "Downloading Packages",IDC_STATIC,112,10,170,17
+    LTEXT           "(URL)",IDC_DLS_URL,112,26,170,11
+    LTEXT           "(RATE)",IDC_DLS_RATE,112,41,166,11
+    CONTROL         "Progress1",IDC_DLS_PROGRESS,"msctls_progress32",
+                    WS_BORDER,123,143,165,10
+    GROUPBOX        "Progress",IDC_STATIC,112,130,186,31
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+END
+
+IDD_INSTATUS DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE | 
+    WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "Installing Packages",IDC_STATIC,112,10,170,17
+    LTEXT           "(PKG)",IDC_INS_PKG,112,26,170,11
+    LTEXT           "(FILE)",IDC_INS_FILE,112,41,183,11
+    CONTROL         "Progress1",IDC_INS_DISKFULL,"msctls_progress32",
+                    WS_BORDER,123,143,165,10
+    CONTROL         "Progress1",IDC_INS_IPROGRESS,"msctls_progress32",
+                    WS_BORDER,125,106,163,10
+    CONTROL         "Progress1",IDC_INS_PPROGRESS,"msctls_progress32",
+                    WS_BORDER,125,67,163,10
+    GROUPBOX        "Disk",IDC_STATIC,112,130,186,31
+    GROUPBOX        "Package",IDC_STATIC,112,54,186,31
+    GROUPBOX        "Total",IDC_STATIC,112,93,186,31
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+END
+
+IDD_UNINSTALL DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Uninstall XEmacs"
+FONT 8, "MS Sans Serif"
+BEGIN
+    PUSHBUTTON      "Cancel",IDCANCEL,199,176,45,15
+    DEFPUSHBUTTON   "Uninstall",IDOK,256,176,45,15
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "Uninstalling Packages",IDC_STATIC,112,10,170,17
+    LTEXT           "(PKG)",IDC_UNINS_PKG,112,26,170,11
+    LTEXT           "(FILE)",IDC_UNINS_FILE,112,41,166,11
+    CONTROL         "Progress1",IDC_UNINS_DISKFULL,"msctls_progress32",
+                    WS_BORDER,123,143,165,10
+    CONTROL         "Progress1",IDC_UNINS_IPROGRESS,"msctls_progress32",
+                    WS_BORDER,125,106,163,10
+    CONTROL         "Progress1",IDC_UNINS_PPROGRESS,"msctls_progress32",
+                    WS_BORDER,125,67,163,10
+    GROUPBOX        "Disk",IDC_STATIC,112,130,186,31
+    GROUPBOX        "Package",IDC_STATIC,112,54,186,31
+    GROUPBOX        "Total",IDC_STATIC,112,93,186,31
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+END
+
+IDD_PROXY_AUTH DIALOG DISCARDABLE  0, 0, 215, 95
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    ICON            IDI_XEMACS,IDC_STATIC,5,5,20,20
+    EDITTEXT        IDC_NET_USER,65,28,145,12,ES_AUTOHSCROLL
+    LTEXT           "Proxy User ID",IDC_STATIC,5,28,55,15,SS_CENTERIMAGE,
+                    WS_EX_RIGHT
+    EDITTEXT        IDC_NET_PASSWD,65,43,145,12,ES_PASSWORD | ES_AUTOHSCROLL
+    LTEXT           "Password",IDC_STATIC,10,43,50,15,SS_CENTERIMAGE,
+                    WS_EX_RIGHT
+    LTEXT           "Proxy Authorization Required",IDC_STATIC,65,10,145,10
+    DEFPUSHBUTTON   "OK",IDOK,100,75,45,15,WS_DISABLED
+    PUSHBUTTON      "Cancel",IDCANCEL,165,75,45,15
+END
+
+IDD_NET_AUTH DIALOG DISCARDABLE  0, 0, 215, 95
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    ICON            IDI_XEMACS,IDC_STATIC,5,5,20,20
+    EDITTEXT        IDC_NET_USER,65,28,145,12,ES_AUTOHSCROLL
+    LTEXT           "User ID",IDC_STATIC,5,28,55,15,SS_CENTERIMAGE,
+                    WS_EX_RIGHT
+    EDITTEXT        IDC_NET_PASSWD,65,43,145,12,ES_PASSWORD | ES_AUTOHSCROLL
+    LTEXT           "Password",IDC_STATIC,10,43,50,15,SS_CENTERIMAGE,
+                    WS_EX_RIGHT
+    LTEXT           "Server Authorization Required",IDC_STATIC,65,10,145,10
+    DEFPUSHBUTTON   "OK",IDOK,100,75,45,15,WS_DISABLED
+    PUSHBUTTON      "Cancel",IDCANCEL,165,75,45,15
+END
+
+IDD_SPLASH DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    DEFPUSHBUTTON   "Next >",IDOK,199,176,45,15
+    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15
+    ICON            IDI_XEMACS,IDC_STATIC,107,10,20,20
+    LTEXT           "Welcome to the XEmacs Net Release Setup Program. This will install XEmacs and/or associated packages on your computer.",
+                    IDC_STATIC,133,10,158,29
+    LTEXT           "Version (unknown)",IDC_VERSION,112,117,120,10
+    LTEXT           "Copyright (C) 2000 Red Hat Inc",IDC_STATIC,111,132,135,
+                    8
+    LTEXT           "http://www.xemacs.org/",IDC_STATIC,111,147,150,10
+    LTEXT           "It is strongly recommended that you exit all Windows programs before running this utility.",
+                    IDC_STATIC,110,43,191,19
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+END
+
+IDD_CHOOSE DIALOG DISCARDABLE  0, 0, 311, 239
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    DEFPUSHBUTTON   "Next >",IDOK,199,214,45,15
+    PUSHBUTTON      "< Back",IDC_BACK,154,214,45,15
+    PUSHBUTTON      "Cancel",IDCANCEL,256,214,45,15
+    LTEXT           "",IDC_STATIC,10,201,291,1,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "Select packages to install",IDC_STATIC,55,5,85,8
+    ICON            IDI_XEMACS,IDC_STATIC,5,5,21,20
+    LTEXT           "",IDC_LISTVIEW_POS,55,15,230,155,SS_SUNKEN | NOT 
+                    WS_VISIBLE | NOT WS_GROUP
+    CONTROL         "SPIN",IDC_STATIC,"Static",SS_BITMAP,55,170,15,13
+    LTEXT           "= click to choose action, (p) = previous version, (x) = experimental",
+                    IDC_STATIC,65,170,220,8
+    PUSHBUTTON      "Full/Part",IDC_CHOOSE_FULLPART,250,5,35,10
+    PUSHBUTTON      "Exp",IDC_CHOOSE_EXP,215,5,25,10
+    PUSHBUTTON      "Curr",IDC_CHOOSE_CURR,190,5,25,10
+    PUSHBUTTON      "Prev",IDC_CHOOSE_PREV,165,5,25,10
+END
+
+IDD_DESKTOP DIALOG DISCARDABLE  0, 0, 311, 201
+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "XEmacs Setup"
+FONT 8, "MS Sans Serif"
+BEGIN
+    DEFPUSHBUTTON   "Finish",IDOK,199,176,45,15
+    PUSHBUTTON      "< Back",IDC_BACK,154,176,45,15
+    PUSHBUTTON      "Cancel",IDCANCEL,256,176,45,15
+    LTEXT           "Setup has now finished. To create desktop shortcuts, please select from the following options.",
+                    IDC_STATIC,112,11,170,17
+    LTEXT           "To complete setup click Finish.",IDC_STATIC,112,32,166,
+                    17
+    CONTROL         "Create Desktop Icon",IDC_ROOT_DESKTOP,"Button",
+                    BS_AUTOCHECKBOX,113,50,100,8
+    CONTROL         "Add to Start Menu",IDC_ROOT_MENU,"Button",
+                    BS_AUTOCHECKBOX,113,66,100,8
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+    CONTROL         "Text",IDC_TXT_TYPE,"Button",BS_AUTOCHECKBOX,209,101,38,
+                    8
+    CONTROL         "Java",IDC_JAVA_TYPE,"Button",BS_AUTOCHECKBOX,113,100,50,
+                    8
+    CONTROL         "C",IDC_C_TYPE,"Button",BS_AUTOCHECKBOX,113,116,41,8
+    CONTROL         "C++",IDC_CPP_TYPE,"Button",BS_AUTOCHECKBOX,113,133,38,8
+    CONTROL         "E-Lisp",IDC_ELISP_TYPE,"Button",BS_AUTOCHECKBOX,113,148,
+                    38,8
+    LTEXT           "Register XEmacs for these file types:",IDC_STATIC,113,
+                    84,166,13
+    LTEXT           "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP
+    LTEXT           "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP
+    CONTROL         "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62
+    CONTROL         "IDL",IDC_IDL_TYPE,"Button",BS_AUTOCHECKBOX,209,116,38,8
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "#include ""windows.h""\r\n"
+    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_XEMACS              ICON    DISCARDABLE     "xemacs.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// FILE
+//
+
+XEMACS.ICON             FILE    DISCARDABLE     "xemacs.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO DISCARDABLE 
+BEGIN
+    IDD_SOURCE, DIALOG
+    BEGIN
+        VERTGUIDE, 113
+        VERTGUIDE, 127
+    END
+
+    IDD_LOCAL_DIR, DIALOG
+    BEGIN
+        VERTGUIDE, 112
+        HORZGUIDE, 10
+    END
+
+    IDD_ROOT, DIALOG
+    BEGIN
+        VERTGUIDE, 112
+        HORZGUIDE, 103
+        HORZGUIDE, 118
+    END
+
+    IDD_SITE, DIALOG
+    BEGIN
+        HORZGUIDE, 11
+        HORZGUIDE, 161
+    END
+
+    IDD_NET, DIALOG
+    BEGIN
+        VERTGUIDE, 128
+        BOTTOMMARGIN, 191
+        HORZGUIDE, 153
+    END
+
+    IDD_INSTATUS, DIALOG
+    BEGIN
+        VERTGUIDE, 112
+        VERTGUIDE, 125
+        VERTGUIDE, 288
+    END
+
+    IDD_PROXY_AUTH, DIALOG
+    BEGIN
+        BOTTOMMARGIN, 49
+    END
+
+    IDD_NET_AUTH, DIALOG
+    BEGIN
+        BOTTOMMARGIN, 49
+    END
+
+    IDD_SPLASH, DIALOG
+    BEGIN
+        LEFTMARGIN, 10
+        RIGHTMARGIN, 301
+        TOPMARGIN, 10
+        BOTTOMMARGIN, 191
+    END
+
+    IDD_CHOOSE, DIALOG
+    BEGIN
+        BOTTOMMARGIN, 229
+        HORZGUIDE, 214
+    END
+
+    IDD_DESKTOP, DIALOG
+    BEGIN
+        VERTGUIDE, 113
+        VERTGUIDE, 209
+        HORZGUIDE, 124
+    END
+END
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+SPIN                    BITMAP  DISCARDABLE     "choose-spin.bmp"
+IDB_SPIN                BITMAP  DISCARDABLE     "choose-spin.bmp"
+IDB_RTARROW             BITMAP  DISCARDABLE     "choose-rtarrow.bmp"
+IDB_CHECK_YES           BITMAP  DISCARDABLE     "check-yes.bmp"
+IDB_CHECK_NO            BITMAP  DISCARDABLE     "check-no.bmp"
+IDB_CHECK_NA            BITMAP  DISCARDABLE     "check-na.bmp"
+GNU                     BITMAP  DISCARDABLE     "gnu.bmp"
+IDB_GNU                 BITMAP  DISCARDABLE     "gnu.bmp"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE 
+BEGIN
+    IDS_ROOT_SLASH          "Warning: we recommend you do NOT use the root of your hard drive as the XEmacs root.  Proceed anyway?"
+    IDS_ROOT_SPACE          "You should not choose a root path that include spaces in directory names.  Proceed anyway?"
+    IDS_MIRROR_LST          "http://www.xemacs.org/Download/mirrors.lst"
+    IDS_DIALOG_FAILED       "Unable to create Dialog Box"
+    IDS_CYGWIN_FUNC_MISSING "Error: unable to find function `%s' in %s"
+    IDS_DOWNLOAD_SHORT      "Download error: %s too short (%d, wanted %d)"
+    IDS_ERR_OPEN_WRITE      "Can't open %s for writing: %s"
+    IDS_SETUPINI_MISSING    "Unable to get setup.ini from %s"
+    IDS_OLD_SETUPINI        "This setup.ini is older than the one you used last time you installed cygwin.  Proceed anyway?"
+    IDS_ERR_RENAME          "Can't rename %s to %s: %s"
+    IDS_NOTHING_INSTALLED   "Nothing needed to be installed"
+    IDS_INSTALL_COMPLETE    "Installation Complete"
+END
+
+STRINGTABLE DISCARDABLE 
+BEGIN
+    IDS_ERR_OPEN_READ       "Can't open %s for reading: %s"
+    IDS_ROOT_ABSOLUTE       "The install directory must be absolute, with both a drive letter and leading slash, like C:\\Cygwin"
+    IDS_DOWNLOAD_COMPLETE   "Download Complete"
+    IDS_CVSID               "\n%%% $Id: res.rc,v 1.2.2.2 2002/08/20 11:36:07 stephent Exp $\n"
+    IDS_NOLOGFILE           "Cannot open log file %s for writing"
+    IDS_UNINSTALL_COMPLETE  "Uninstalls complete."
+    IDS_WININET             "Unable to find or load the Internet Explorer 5 DLLs"
+    IDS_ERR_CHDIR           "Could not change dir to %s"
+    IDS_OLD_SETUP_VERSION   "This setup is version %s, but setup.ini claims version %s is available.\nYou might want to upgrade to get the latest features and bug fixes."
+    IDS_DOWNLOAD_FAILED     "Unable to download %s"
+    IDS_DOWNLOAD_INCOMPLETE "Download Incomplete.  Try again?"
+    IDS_INSTALL_INCOMPLETE  "Installation incomplete.  Check /setup.log.full for details"
+    IDS_ROOT_NOCYGWIN       "You should not install the Cygwin version without Cygwin installed.  Proceed anyway?"
+    IDS_CREATE_DIR          "The directory %s does not exist, create it?"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
index ac46438..ce19cb7 100644 (file)
-//{{NO_DEPENDENCIES}}\r
-// Microsoft Developer Studio generated include file.\r
-// Used by res.rc\r
-//\r
-#define IDS_ROOT_SLASH                  1\r
-#define IDS_ROOT_SPACE                  2\r
-#define IDS_CWD_NONEMPTY                3\r
-#define IDS_MIRROR_LST                  6\r
-#define IDS_DIALOG_FAILED               7\r
-#define IDS_CYGWIN_FUNC_MISSING         8\r
-#define IDS_DOWNLOAD_SHORT              9\r
-#define IDS_ERR_OPEN_WRITE              10\r
-#define IDS_SETUPINI_MISSING            11\r
-#define IDS_OLD_SETUPINI                12\r
-#define IDS_ERR_RENAME                  13\r
-#define IDS_NOTHING_INSTALLED           14\r
-#define IDS_INSTALL_COMPLETE            15\r
-#define IDS_ERR_OPEN_READ               16\r
-#define IDS_ROOT_ABSOLUTE               17\r
-#define IDS_DOWNLOAD_COMPLETE           18\r
-#define IDS_CVSID                       19\r
-#define IDS_NOLOGFILE                   20\r
-#define IDS_UNINSTALL_COMPLETE          21\r
-#define IDS_WININET                     22\r
-#define IDS_ERR_CHDIR                   23\r
-#define IDS_OLD_SETUP_VERSION           24\r
-#define IDS_DOWNLOAD_FAILED             25\r
-#define IDS_DOWNLOAD_INCOMPLETE         26\r
-#define IDS_INSTALL_INCOMPLETE          27\r
-#define IDS_ROOT_NOCYGWIN               28\r
-#define IDS_CREATE_DIR   29\r
-#define IDD_ROOT                        101\r
-#define IDD_SOURCE                      102\r
-#define IDD_OTHER_URL                   103\r
-#define IDD_SITE                        104\r
-#define IDD_NET                         105\r
-#define IDD_DLSTATUS                    106\r
-#define IDD_S_LOAD_INI                  107\r
-#define IDD_S_FROM_CWD                  108\r
-#define IDD_CHOOSE                      109\r
-#define IDD_S_DOWNLOAD                  110\r
-#define IDD_S_INSTALL                   111\r
-#define IDD_INSTATUS                    112\r
-#define IDD_DESKTOP                     113\r
-#define IDD_PROXY_AUTH                  114\r
-#define IDD_S_POSTINSTALL               115\r
-#define IDD_NET_AUTH                    116\r
-#define IDD_SPLASH                      117\r
-#define IDB_SPIN                        118\r
-#define IDB_RTARROW                     119\r
-#define IDI_SPIN                        120\r
-#define IDI_XEMACS                      121\r
-#define IDD_LOCAL_DIR                   122\r
-#define IDB_CHECK_YES                   123\r
-#define IDB_CHECK_NO                    124\r
-#define IDB_CHECK_NA                    125\r
-#define IDB_GNU                         126\r
-#define IDD_UNINSTALL                   127\r
-#define IDC_SOURCE_DOWNLOAD             1000\r
-#define IDC_SOURCE_NETINST              1001\r
-#define IDC_SOURCE_CWD                  1002\r
-#define IDC_ROOT_DIR                    1003\r
-#define IDC_ROOT_BROWSE                 1004\r
-#define IDC_ROOT_TEXT                   1005\r
-#define IDC_ROOT_BINARY                 1006\r
-#define IDC_URL_LIST                    1007\r
-#define IDC_SITE_NEXT                   1008\r
-#define IDC_BACK                        1009\r
-#define IDC_OTHER_URL                   1010\r
-#define IDC_NET_IE5                     1011\r
-#define IDC_NET_DIRECT                  1012\r
-#define IDC_NET_PROXY                   1013\r
-#define IDC_PROXY_HOST                  1014\r
-#define IDC_PROXY_PORT                  1015\r
-#define IDC_PROXY_USER                  1016\r
-#define IDC_DLS_PROGRESS                1019\r
-#define IDC_DLS_URL                     1020\r
-#define IDC_DLS_RATE                    1021\r
-#define IDC_INS_PKG                     1022\r
-#define IDC_INS_FILE                    1023\r
-#define IDC_INS_DISKFULL                1024\r
-#define IDC_INS_IPROGRESS               1025\r
-#define IDC_INS_PPROGRESS               1026\r
-#define IDC_ROOT_SYSTEM                 1028\r
-#define IDC_ROOT_USER                   1029\r
-#define IDC_NET_USER                    1030\r
-#define IDC_NET_PASSWD                  1031\r
-#define IDC_VERSION                     1033\r
-#define IDC_LISTVIEW_POS                1034\r
-#define IDC_CHOOSE_FULLPART             1035\r
-#define IDC_CHOOSE_EXP                  1036\r
-#define IDC_CHOOSE_CURR                 1037\r
-#define IDC_CHOOSE_PREV                 1038\r
-#define IDC_CHOOSE_LIST                 1039\r
-#define IDC_INS_ACTION                  1040\r
-#define IDC_ROOT_DESKTOP                1041\r
-#define IDC_ROOT_MENU                   1042\r
-#define IDC_LOCAL_DIR_BROWSE            1043\r
-#define IDC_TXT_TYPE                    1043\r
-#define IDC_LOCAL_DIR                   1044\r
-#define IDC_JAVA_TYPE                   1044\r
-#define IDC_INSTALL_NATIVE              1045\r
-#define IDC_C_TYPE                      1045\r
-#define IDC_INSTALL_CYGWIN              1046\r
-#define IDC_CPP_TYPE                    1046\r
-#define IDC_UNINS_PKG                   1047\r
-#define IDC_ELISP_TYPE                  1047\r
-#define IDC_UNINS_FILE                  1048\r
-#define IDC_IDL_TYPE                    1048\r
-#define IDC_UNINS_DISKFULL              1049\r
-#define IDC_UNINS_IPROGRESS             1050\r
-#define IDC_UNINS_PPROGRESS             1051\r
-#define IDC_UNINS_ACTION                1052\r
-#define IDC_STATIC                      -1\r
-\r
-// Next default values for new objects\r
-// \r
-#ifdef APSTUDIO_INVOKED\r
-#ifndef APSTUDIO_READONLY_SYMBOLS\r
-#define _APS_NO_MFC                     1\r
-#define _APS_3D_CONTROLS                     1\r
-#define _APS_NEXT_RESOURCE_VALUE        127\r
-#define _APS_NEXT_COMMAND_VALUE         40003\r
-#define _APS_NEXT_CONTROL_VALUE         1050\r
-#define _APS_NEXT_SYMED_VALUE           101\r
-#endif\r
-#endif\r
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by res.rc
+//
+#define IDS_ROOT_SLASH                  1
+#define IDS_ROOT_SPACE                  2
+#define IDS_CWD_NONEMPTY                3
+#define IDS_MIRROR_LST                  6
+#define IDS_DIALOG_FAILED               7
+#define IDS_CYGWIN_FUNC_MISSING         8
+#define IDS_DOWNLOAD_SHORT              9
+#define IDS_ERR_OPEN_WRITE              10
+#define IDS_SETUPINI_MISSING            11
+#define IDS_OLD_SETUPINI                12
+#define IDS_ERR_RENAME                  13
+#define IDS_NOTHING_INSTALLED           14
+#define IDS_INSTALL_COMPLETE            15
+#define IDS_ERR_OPEN_READ               16
+#define IDS_ROOT_ABSOLUTE               17
+#define IDS_DOWNLOAD_COMPLETE           18
+#define IDS_CVSID                       19
+#define IDS_NOLOGFILE                   20
+#define IDS_UNINSTALL_COMPLETE          21
+#define IDS_WININET                     22
+#define IDS_ERR_CHDIR                   23
+#define IDS_OLD_SETUP_VERSION           24
+#define IDS_DOWNLOAD_FAILED             25
+#define IDS_DOWNLOAD_INCOMPLETE         26
+#define IDS_INSTALL_INCOMPLETE          27
+#define IDS_ROOT_NOCYGWIN               28
+#define IDS_CREATE_DIR   29
+#define IDD_ROOT                        101
+#define IDD_SOURCE                      102
+#define IDD_OTHER_URL                   103
+#define IDD_SITE                        104
+#define IDD_NET                         105
+#define IDD_DLSTATUS                    106
+#define IDD_S_LOAD_INI                  107
+#define IDD_S_FROM_CWD                  108
+#define IDD_CHOOSE                      109
+#define IDD_S_DOWNLOAD                  110
+#define IDD_S_INSTALL                   111
+#define IDD_INSTATUS                    112
+#define IDD_DESKTOP                     113
+#define IDD_PROXY_AUTH                  114
+#define IDD_S_POSTINSTALL               115
+#define IDD_NET_AUTH                    116
+#define IDD_SPLASH                      117
+#define IDB_SPIN                        118
+#define IDB_RTARROW                     119
+#define IDI_SPIN                        120
+#define IDI_XEMACS                      121
+#define IDD_LOCAL_DIR                   122
+#define IDB_CHECK_YES                   123
+#define IDB_CHECK_NO                    124
+#define IDB_CHECK_NA                    125
+#define IDB_GNU                         126
+#define IDD_UNINSTALL                   127
+#define IDC_SOURCE_DOWNLOAD             1000
+#define IDC_SOURCE_NETINST              1001
+#define IDC_SOURCE_CWD                  1002
+#define IDC_ROOT_DIR                    1003
+#define IDC_ROOT_BROWSE                 1004
+#define IDC_ROOT_TEXT                   1005
+#define IDC_ROOT_BINARY                 1006
+#define IDC_URL_LIST                    1007
+#define IDC_SITE_NEXT                   1008
+#define IDC_BACK                        1009
+#define IDC_OTHER_URL                   1010
+#define IDC_NET_IE5                     1011
+#define IDC_NET_DIRECT                  1012
+#define IDC_NET_PROXY                   1013
+#define IDC_PROXY_HOST                  1014
+#define IDC_PROXY_PORT                  1015
+#define IDC_PROXY_USER                  1016
+#define IDC_DLS_PROGRESS                1019
+#define IDC_DLS_URL                     1020
+#define IDC_DLS_RATE                    1021
+#define IDC_INS_PKG                     1022
+#define IDC_INS_FILE                    1023
+#define IDC_INS_DISKFULL                1024
+#define IDC_INS_IPROGRESS               1025
+#define IDC_INS_PPROGRESS               1026
+#define IDC_ROOT_SYSTEM                 1028
+#define IDC_ROOT_USER                   1029
+#define IDC_NET_USER                    1030
+#define IDC_NET_PASSWD                  1031
+#define IDC_VERSION                     1033
+#define IDC_LISTVIEW_POS                1034
+#define IDC_CHOOSE_FULLPART             1035
+#define IDC_CHOOSE_EXP                  1036
+#define IDC_CHOOSE_CURR                 1037
+#define IDC_CHOOSE_PREV                 1038
+#define IDC_CHOOSE_LIST                 1039
+#define IDC_INS_ACTION                  1040
+#define IDC_ROOT_DESKTOP                1041
+#define IDC_ROOT_MENU                   1042
+#define IDC_LOCAL_DIR_BROWSE            1043
+#define IDC_TXT_TYPE                    1043
+#define IDC_LOCAL_DIR                   1044
+#define IDC_JAVA_TYPE                   1044
+#define IDC_INSTALL_NATIVE              1045
+#define IDC_C_TYPE                      1045
+#define IDC_INSTALL_CYGWIN              1046
+#define IDC_CPP_TYPE                    1046
+#define IDC_UNINS_PKG                   1047
+#define IDC_ELISP_TYPE                  1047
+#define IDC_UNINS_FILE                  1048
+#define IDC_IDL_TYPE                    1048
+#define IDC_UNINS_DISKFULL              1049
+#define IDC_UNINS_IPROGRESS             1050
+#define IDC_UNINS_PPROGRESS             1051
+#define IDC_UNINS_ACTION                1052
+#define IDC_STATIC                      -1
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC                     1
+#define _APS_3D_CONTROLS                     1
+#define _APS_NEXT_RESOURCE_VALUE        127
+#define _APS_NEXT_COMMAND_VALUE         40003
+#define _APS_NEXT_CONTROL_VALUE         1050
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
index 1fa8429..e729b8a 100644 (file)
@@ -1,3 +1,39 @@
+2005-02-06  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.17 is released
+
+2005-01-29  Ben Wing  <ben@xemacs.org>
+
+       * xemacs.mak:
+       * xemacs.mak (USE_PORTABLE_DUMPER):
+       Enable portable dumper just in case it's not specified in config.inc.
+       
+       * 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.
+
+       * xemacs.mak ({$(MANDIR)}.texi{$(INFODIR)}.info):
+       Use filename only when calling makeinfo, or it chokes on index
+       generation.
+       
+2005-01-28  Ben Wing  <ben@xemacs.org>
+
+       * config.inc.samp:
+       * config.inc.samp (PNG_DIR):
+       * config.inc.samp (MAKEINFO):
+       Update directory locations to correspond to current optional-libs.exe
+       and Cygwin makeinfo.  Update GTK comment.  Enable TIFF and COMPFACE
+       since we can now compile with them.
+
+2004-12-05  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.16 is released
+
 2004-02-02  Vin Shelton <acs@xemacs.org>
 
        * XEmacs 21.4.15 is released
index f45fdd9..6862fbf 100644 (file)
@@ -1,83 +1,83 @@
-(String) "Emacs.modeline*attributeForeground:  Black",\r
-(String) "Emacs.modeline*attributeBackground:  Gray75",\r
-(String) "Emacs.text-cursor*attributeBackground:       Red3",\r
-(String) "*menubar*Foreground:                 Gray30",\r
-(String) "*menubar*Background:                 Gray75",\r
-(String) "*menubar*buttonForeground:           Blue",\r
-(String) "*XlwMenu*selectColor:                        ForestGreen",\r
-(String) "*XmToggleButton*selectColor:         ForestGreen",\r
-(String) "*popup*Foreground:                   Black",\r
-(String) "*popup*Background:                   Gray75",\r
-(String) "*dialog*Foreground:                  Black",\r
-(String) "*dialog*Background:                  #A5C0C1",\r
-(String) "*dialog*XmTextField*Background:              WhiteSmoke",\r
-(String) "*dialog*XmText*Background:           WhiteSmoke",\r
-(String) "*dialog*XmList*Background:           WhiteSmoke",\r
-(String) "*dialog*Command*Background:          WhiteSmoke",\r
-(String) "*XlwScrollBar*Foreground:            Gray30",\r
-(String) "*XlwScrollBar*Background:            Gray75",\r
-(String) "*XmScrollBar*Foreground:             Gray30",\r
-(String) "*XmScrollBar*Background:             Gray75",\r
-(String) "*topToolBarShadowColor:                      Gray90",\r
-(String) "*bottomToolBarShadowColor:           Gray40",\r
-(String) "*backgroundToolBarColor:             Gray75",\r
-(String) "*toolBarShadowThickness:             2",\r
-(String) "*menubar*Font:                       -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*",\r
-(String) "*popup*Font:                 -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*",\r
-(String) "*XmDialogShell*FontList:     -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*",\r
-(String) "*XmTextField*FontList:               -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*",\r
-(String) "*XmText*FontList:            -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*",\r
-(String) "*XmList*FontList:            -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*",\r
-(String) "*Dialog*Font:                        -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-*",\r
-(String) "*dialog*button1.accelerators:#override\\r
-<KeyPress>Return: ArmAndActivate()\\n\\r
-<KeyPress>KP_Enter: ArmAndActivate()\\n\\r
-Ctrl<KeyPress>m: ArmAndActivate()\\n",\r
-(String) "*XmTextField*translations: #override\\n\\r
-       !<Key>osfBackSpace:     delete-previous-character()\\n\\r
-       !<Key>osfDelete:        delete-previous-character()\\n\\r
-       !Ctrl<Key>h:            delete-previous-character()\\n\\r
-       !Ctrl<Key>d:            delete-next-character()\\n\\r
-       !Meta<Key>osfDelete:    delete-previous-word()\\n\\r
-       !Meta<Key>osfBackSpace: delete-previous-word()\\n\\r
-       !Meta<Key>d:            delete-next-word()\\n\\r
-       !Ctrl<Key>k:            delete-to-end-of-line()\\n\\r
-       !Ctrl<Key>g:            process-cancel()\\n\\r
-       !Ctrl<Key>b:            backward-character()\\n\\r
-       !<Key>osfLeft:          backward-character()\\n\\r
-       !Ctrl<Key>f:            forward-character()\\n\\r
-       !<Key>osfRight:         forward-character()\\n\\r
-       !Meta<Key>b:            backward-word()\\n\\r
-       !Meta<Key>osfLeft:      backward-word()\\n\\r
-       !Meta<Key>f:            forward-word()\\n\\r
-       !Meta<Key>osfRight:     forward-word()\\n\\r
-       !Ctrl<Key>e:            end-of-line()\\n\\r
-       !Ctrl<Key>a:            beginning-of-line()\\n\\r
-       !Ctrl<Key>w:            cut-clipboard()\\n\\r
-       !Meta<Key>w:            copy-clipboard()\\n\\r
-       <Btn2Up>:               copy-primary()\\n",\r
-(String) "*dialog*XmPushButton*translations:#override\\n\\r
-    <Btn1Down>:         Arm()\\n\\r
-    <Btn1Down>,<Btn1Up>: Activate()\\r
-                       Disarm()\\n\\r
-    <Btn1Down>(2+):     MultiArm()\\n\\r
-    <Btn1Up>(2+):       MultiActivate()\\n\\r
-    <Btn1Up>:           Activate()\\r
-                       Disarm()\\n\\r
-    <Key>osfSelect:    ArmAndActivate()\\n\\r
-    <Key>osfActivate:   ArmAndActivate()\\n\\r
-    <Key>osfHelp:      Help()\\n\\r
-    ~Shift ~Meta ~Alt <Key>Return:     ArmAndActivate()\\n\\r
-    <EnterWindow>:      Enter()\\n\\r
-    <LeaveWindow>:      Leave()\\n",\r
-(String) "*ximStyles: XIMPreeditPosition|XIMStatusArea\\r
-            XIMPreeditPosition|XIMStatusNothing\\r
-            XIMPreeditPosition|XIMStatusNone\\r
-            XIMPreeditNothing|XIMStatusArea\\r
-            XIMPreeditNothing|XIMStatusNothing\\r
-            XIMPreeditNothing|XIMStatusNone\\r
-            XIMPreeditNone|XIMStatusArea\\r
-            XIMPreeditNone|XIMStatusNothing\\r
-            XIMPreeditNone|XIMStatusNone",\r
-(String) "*EmacsFrame.ximForeground: black",\r
-(String) "*EmacsFrame.ximBackground: white",\r
+(String) "Emacs.modeline*attributeForeground:  Black",
+(String) "Emacs.modeline*attributeBackground:  Gray75",
+(String) "Emacs.text-cursor*attributeBackground:       Red3",
+(String) "*menubar*Foreground:                 Gray30",
+(String) "*menubar*Background:                 Gray75",
+(String) "*menubar*buttonForeground:           Blue",
+(String) "*XlwMenu*selectColor:                        ForestGreen",
+(String) "*XmToggleButton*selectColor:         ForestGreen",
+(String) "*popup*Foreground:                   Black",
+(String) "*popup*Background:                   Gray75",
+(String) "*dialog*Foreground:                  Black",
+(String) "*dialog*Background:                  #A5C0C1",
+(String) "*dialog*XmTextField*Background:              WhiteSmoke",
+(String) "*dialog*XmText*Background:           WhiteSmoke",
+(String) "*dialog*XmList*Background:           WhiteSmoke",
+(String) "*dialog*Command*Background:          WhiteSmoke",
+(String) "*XlwScrollBar*Foreground:            Gray30",
+(String) "*XlwScrollBar*Background:            Gray75",
+(String) "*XmScrollBar*Foreground:             Gray30",
+(String) "*XmScrollBar*Background:             Gray75",
+(String) "*topToolBarShadowColor:                      Gray90",
+(String) "*bottomToolBarShadowColor:           Gray40",
+(String) "*backgroundToolBarColor:             Gray75",
+(String) "*toolBarShadowThickness:             2",
+(String) "*menubar*Font:                       -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*",
+(String) "*popup*Font:                 -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*",
+(String) "*XmDialogShell*FontList:     -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*",
+(String) "*XmTextField*FontList:               -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*",
+(String) "*XmText*FontList:            -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*",
+(String) "*XmList*FontList:            -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*",
+(String) "*Dialog*Font:                        -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-*",
+(String) "*dialog*button1.accelerators:#override\
+<KeyPress>Return: ArmAndActivate()\\n\
+<KeyPress>KP_Enter: ArmAndActivate()\\n\
+Ctrl<KeyPress>m: ArmAndActivate()\\n",
+(String) "*XmTextField*translations: #override\\n\
+       !<Key>osfBackSpace:     delete-previous-character()\\n\
+       !<Key>osfDelete:        delete-previous-character()\\n\
+       !Ctrl<Key>h:            delete-previous-character()\\n\
+       !Ctrl<Key>d:            delete-next-character()\\n\
+       !Meta<Key>osfDelete:    delete-previous-word()\\n\
+       !Meta<Key>osfBackSpace: delete-previous-word()\\n\
+       !Meta<Key>d:            delete-next-word()\\n\
+       !Ctrl<Key>k:            delete-to-end-of-line()\\n\
+       !Ctrl<Key>g:            process-cancel()\\n\
+       !Ctrl<Key>b:            backward-character()\\n\
+       !<Key>osfLeft:          backward-character()\\n\
+       !Ctrl<Key>f:            forward-character()\\n\
+       !<Key>osfRight:         forward-character()\\n\
+       !Meta<Key>b:            backward-word()\\n\
+       !Meta<Key>osfLeft:      backward-word()\\n\
+       !Meta<Key>f:            forward-word()\\n\
+       !Meta<Key>osfRight:     forward-word()\\n\
+       !Ctrl<Key>e:            end-of-line()\\n\
+       !Ctrl<Key>a:            beginning-of-line()\\n\
+       !Ctrl<Key>w:            cut-clipboard()\\n\
+       !Meta<Key>w:            copy-clipboard()\\n\
+       <Btn2Up>:               copy-primary()\\n",
+(String) "*dialog*XmPushButton*translations:#override\\n\
+    <Btn1Down>:         Arm()\\n\
+    <Btn1Down>,<Btn1Up>: Activate()\
+                       Disarm()\\n\
+    <Btn1Down>(2+):     MultiArm()\\n\
+    <Btn1Up>(2+):       MultiActivate()\\n\
+    <Btn1Up>:           Activate()\
+                       Disarm()\\n\
+    <Key>osfSelect:    ArmAndActivate()\\n\
+    <Key>osfActivate:   ArmAndActivate()\\n\
+    <Key>osfHelp:      Help()\\n\
+    ~Shift ~Meta ~Alt <Key>Return:     ArmAndActivate()\\n\
+    <EnterWindow>:      Enter()\\n\
+    <LeaveWindow>:      Leave()\\n",
+(String) "*ximStyles: XIMPreeditPosition|XIMStatusArea\
+            XIMPreeditPosition|XIMStatusNothing\
+            XIMPreeditPosition|XIMStatusNone\
+            XIMPreeditNothing|XIMStatusArea\
+            XIMPreeditNothing|XIMStatusNothing\
+            XIMPreeditNothing|XIMStatusNone\
+            XIMPreeditNone|XIMStatusArea\
+            XIMPreeditNone|XIMStatusNothing\
+            XIMPreeditNone|XIMStatusNone",
+(String) "*EmacsFrame.ximForeground: black",
+(String) "*EmacsFrame.ximBackground: white",
index 0e2752c..bd49704 100644 (file)
@@ -18,47 +18,65 @@ HAVE_MS_WINDOWS=1
 HAVE_X_WINDOWS=0
 X11_DIR=
 
-# GTK support. Do NOT set this to 1; as of xemacs-21.2-b44
-# gtk-xemacs is not supported on MSWindows (mingw or msvc).
-# Yes, we know that gtk has been ported to native MSWindows
-# but XEmacs is not yet ready to use that port.
+# GTK support. Do NOT set this to 1; gtk-xemacs is not supported on
+# MSWindows (mingw or msvc).  Yes, we know that gtk has been ported to
+# native MSWindows but XEmacs is not yet ready to use that port.
 HAVE_GTK=0
 GTK_DIR=
 
 ############################################################################
+#                  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.
+# 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.
+# 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.
+# the directories containing png and zlib.  Get the latest version from
+# 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.0.9
-ZLIB_DIR=c:\src\zlib
+PNG_DIR=$(OPTIONAL_LIBRARY_DIR)\libpng-1.2.8
+ZLIB_DIR=$(OPTIONAL_LIBRARY_DIR)\zlib-1.2.1
 
-# Set this to enable TIFF support, and specify the directory containing tiff.
-HAVE_TIFF=0
-TIFF_DIR=
-
-# Set this to enable JPEG support, and specify the directory containing 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.
-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
 
 ############################################################################
 
 # Set this to specify the location of makeinfo. (If not set, XEmacs will
 # attempt to use its built-in texinfo support when building info files.)
-MAKEINFO=c:\src\texinfo-4.0\makeinfo\makeinfo.exe
+MAKEINFO=c:\cygwin\bin\makeinfo.exe
 
 ############################################################################
 
index 057954b..6ba64ed 100755 (executable)
@@ -1,21 +1,21 @@
-#Configuration variables\r
-\r
-#where the source is:\r
-\r
-source = r"X:\XEmacs-21"\r
-#where the installed distribution is:\r
-installed = r"C:\Program Files\XEmacs\xemacs-21.0-b62"\r
-\r
-#where the (built and installed) packages are\r
-packages = r"C:\Program Files\XEmacs\xemacs-packages"\r
-\r
-#where the package source is\r
-pkg_src = r"X:\xemacs-packages"\r
-\r
-#Subdirs relative to the base installation directory\r
-#Everything except packages goes here:\r
-dst = "XEmacs-21.0-b62"\r
-#packages go here:\r
-pkg_dst = "xemacs-packages"\r
-\r
-\r
+#Configuration variables
+
+#where the source is:
+
+source = r"X:\XEmacs-21"
+#where the installed distribution is:
+installed = r"C:\Program Files\XEmacs\xemacs-21.0-b62"
+
+#where the (built and installed) packages are
+packages = r"C:\Program Files\XEmacs\xemacs-packages"
+
+#where the package source is
+pkg_src = r"X:\xemacs-packages"
+
+#Subdirs relative to the base installation directory
+#Everything except packages goes here:
+dst = "XEmacs-21.0-b62"
+#packages go here:
+pkg_dst = "xemacs-packages"
+
+
index 05a45b5..e10791e 100755 (executable)
@@ -1,63 +1,63 @@
-Document Type: DLG\r
-item: Custom Dialog\r
-  Name=Display ReadMe\r
-  Display Variable=DISPLAY\r
-  item: Dialog\r
-    Title=Read Me File\r
-    Title French=Fichier Lisez-moi\r
-    Title German=Liesmich-Datei\r
-    Title Portuguese=Ficheiro Leia-me\r
-    Title Spanish=Archivo Léeme\r
-    Title Italian=File Leggimi\r
-    Title Danish=Vigtigt fil\r
-    Title Dutch=Leesmij-bestand\r
-    Title Norwegian=Informasjonsfil\r
-    Title Swedish=Läs mig-fil\r
-    Width=280\r
-    Height=224\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=172 185 214 199\r
-      Variable=DIRECTION\r
-      Value=N\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=I &Agree >\r
-      Text French=&Suivant>\r
-      Text German=&Weiter>\r
-      Text Portuguese=&Próximo>\r
-      Text Spanish=&Siguiente >\r
-      Text Italian=&Avanti >\r
-      Text Danish=&Næste>\r
-      Text Dutch=&Volgende>\r
-      Text Norwegian=&Neste>\r
-      Text Swedish=&Nästa >\r
-    end\r
-    item: Push Button\r
-      Rectangle=222 185 264 199\r
-      Action=3\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Cancel\r
-      Text French=Annuler\r
-      Text German=Abbrechen\r
-      Text Portuguese=Cancelar\r
-      Text Spanish=Cancelar\r
-      Text Italian=Annulla\r
-      Text Danish=Slet\r
-      Text Dutch=Annuleren\r
-      Text Norwegian=Avbryt\r
-      Text Swedish=Avbryt\r
-    end\r
-    item: Static\r
-      Rectangle=9 177 263 178\r
-      Action=3\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Editbox\r
-      Rectangle=85 11 254 170\r
-      Value=%TEMP%\%READMEFILE%\r
-      Help Context=16711681\r
-      Create Flags=01010000101000000000100000000100\r
-    end\r
-  end\r
-end\r
+Document Type: DLG
+item: Custom Dialog
+  Name=Display ReadMe
+  Display Variable=DISPLAY
+  item: Dialog
+    Title=Read Me File
+    Title French=Fichier Lisez-moi
+    Title German=Liesmich-Datei
+    Title Portuguese=Ficheiro Leia-me
+    Title Spanish=Archivo Léeme
+    Title Italian=File Leggimi
+    Title Danish=Vigtigt fil
+    Title Dutch=Leesmij-bestand
+    Title Norwegian=Informasjonsfil
+    Title Swedish=Läs mig-fil
+    Width=280
+    Height=224
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=172 185 214 199
+      Variable=DIRECTION
+      Value=N
+      Create Flags=01010000000000010000000000000001
+      Text=I &Agree >
+      Text French=&Suivant>
+      Text German=&Weiter>
+      Text Portuguese=&Próximo>
+      Text Spanish=&Siguiente >
+      Text Italian=&Avanti >
+      Text Danish=&Næste>
+      Text Dutch=&Volgende>
+      Text Norwegian=&Neste>
+      Text Swedish=&Nästa >
+    end
+    item: Push Button
+      Rectangle=222 185 264 199
+      Action=3
+      Create Flags=01010000000000010000000000000000
+      Text=Cancel
+      Text French=Annuler
+      Text German=Abbrechen
+      Text Portuguese=Cancelar
+      Text Spanish=Cancelar
+      Text Italian=Annulla
+      Text Danish=Slet
+      Text Dutch=Annuleren
+      Text Norwegian=Avbryt
+      Text Swedish=Avbryt
+    end
+    item: Static
+      Rectangle=9 177 263 178
+      Action=3
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Editbox
+      Rectangle=85 11 254 170
+      Value=%TEMP%\%READMEFILE%
+      Help Context=16711681
+      Create Flags=01010000101000000000100000000100
+    end
+  end
+end
index 466e3ac..d0eed07 100755 (executable)
-Document Type: DLG\r
-item: Custom Dialog\r
-  Name=Select Components\r
-  Display Variable=DISPLAY\r
-  Flags=00000001\r
-  item: Dialog\r
-    Title=Select Components \r
-    Title French=Sélectionner les Ã©léments\r
-    Title German=Komponenten auswählen\r
-    Title Portuguese=Seleccionar Componentes\r
-    Title Spanish=Seleccione los Componentes\r
-    Title Italian=Seleziona Componenti\r
-    Title Danish=Vælg komponenter\r
-    Title Dutch=Selecteer onderdelen\r
-    Title Norwegian=Velg komponenter\r
-    Title Swedish=Välj komponenter\r
-    Width=280\r
-    Height=224\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=172 185 214 199\r
-      Variable=DIRECTION\r
-      Value=N\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=&Next >\r
-      Text French=&Suivant>\r
-      Text German=&Weiter>\r
-      Text Portuguese=&Próximo>\r
-      Text Spanish=&Siguiente >\r
-      Text Italian=&Avanti >\r
-      Text Danish=&Næste>\r
-      Text Dutch=&Volgende>\r
-      Text Norwegian=&Neste>\r
-      Text Swedish=&Nästa >\r
-    end\r
-    item: Push Button\r
-      Rectangle=130 185 172 199\r
-      Variable=DIRECTION\r
-      Value=B\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=< &Back\r
-      Text French=<&Retour\r
-      Text German=<&Zurück\r
-      Text Portuguese=<&Retornar\r
-      Text Spanish=<&Retroceder\r
-      Text Italian=< &Indietro\r
-      Text Danish=<&Tilbage\r
-      Text Dutch=<&Terug\r
-      Text Norwegian=<&Tilbake\r
-      Text Swedish=< &Tillbaka\r
-    end\r
-    item: Push Button\r
-      Rectangle=222 185 264 199\r
-      Action=3\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Cancel\r
-      Text French=Annuler\r
-      Text German=Abbrechen\r
-      Text Portuguese=Cancelar\r
-      Text Spanish=Cancelar\r
-      Text Italian=Annulla\r
-      Text Danish=Annuller\r
-      Text Dutch=Annuleren\r
-      Text Norwegian=Avbryt\r
-      Text Swedish=Avbryt\r
-    end\r
-    item: Static\r
-      Rectangle=9 177 263 178\r
-      Action=3\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Static\r
-      Rectangle=205 156 253 166\r
-      Variable=COMPONENTS\r
-      Value=MAINDIR\r
-      Create Flags=01010000000000000000000000000010\r
-    end\r
-    item: Static\r
-      Rectangle=205 148 253 157\r
-      Variable=COMPONENTS\r
-      Create Flags=01010000000000000000000000000010\r
-    end\r
-    item: Static\r
-      Rectangle=95 147 184 158\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=Disk Space Required:\r
-      Text French=Espace disque requis\r
-      Text German=Benötigter Festplattenspeicher:\r
-      Text Portuguese=Espaço de disco necessário:\r
-      Text Spanish=Espacio de Disco Requerido:\r
-      Text Italian=Spazio su disco richiesto:\r
-      Text Danish=Nødvendig diskplads:\r
-      Text Dutch=Vereiste hoeveelheid schijfruimte\r
-      Text Norwegian=Diskplass nødvendig:\r
-      Text Swedish=Erforderligt diskutrymme\r
-    end\r
-    item: Static\r
-      Rectangle=95 157 190 167\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=Disk Space Remaining:\r
-      Text French=Espace disque disponible\r
-      Text German=Verbleibender Festplattenspeicher:\r
-      Text Portuguese=Espaço de disco restante:\r
-      Text Spanish=Espacio de Disco Remanente:\r
-      Text Italian=Spazio su disco rimanente:\r
-      Text Danish=Ledig diskplads:\r
-      Text Dutch=Resterende schijfruimte\r
-      Text Norwegian=Ledig diskplass:\r
-      Text Swedish=Ã…terstÃ¥ende diskutrymme\r
-    end\r
-    item: Static\r
-      Rectangle=90 138 264 168\r
-      Action=1\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Static\r
-      Rectangle=90 8 260 41\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=In the options list below, select the checkboxes for the options that you would like to have installed.  The disk space fields reflect the requirements of the options you have selected.\r
-      Text French=Dans la liste d'options suivante, veuillez sélectionner les cases des options que vous désirez installer. Le champ d'espace disque indique les conditions requises pour les options choisies\r
-      Text German=Wählen Sie in der Optionenliste unten die Kontrollkästchen für diejenigen Optionen, die Sie installieren möchten. Die Speicherfelder zeigen die benötigte Speicherkapazität für die gewählten Optionen an.\r
-      Text Portuguese=Na lista de opções abaixo, seleccione as caixas de verificação para as opções que gostaria de ter instalado. Os campos de espaço de disco reflectem os requerimentos das opções que seleccionou.\r
-      Text Spanish=En la lista de opciones que se ofrece a continuación, seleccione las casillas de comprobación para las opciones que desea instalar. Los campos del espacio en el disco reflejan los requerimientos de las opciones que ha seleccionado.\r
-      Text Italian=Nell\92elenco delle opzioni sotto, marca le caselle di controllo delle opzioni che vuoi installare. I campi dello spazio sul disco riflettono i requisiti delle opzioni selezionate.\r
-      Text Danish=Marker afkrydsningsfelterne for de komponenter, der skal installeres, pÃ¥ listen herunder. Diskpladsfelterne angiver pladskravene for de valgte komponenter.\r
-      Text Dutch=Kruis in de onderstaande lijst het vakje aan naast de opties die u wilt installeren. Achter elke optie staat de benodigde schijfruimte vermeld.\r
-      Text Norwegian=I listen over alternativer nedenfor, klikk i kontrollrutene for de alternativene du Ã¸nsker Ã¥ installere. Diskplassfeltene gjenspeiler kravene for de alternativene du har valgt.\r
-      Text Swedish=Kryssa för i rutorna nedan vilka alternativ du vill fÃ¥ installerade. I diskutrymmesfälten anges utrymmesbehoven för de alternativ du väljer.\r
-    end\r
-    item: Checkbox\r
-      Rectangle=91 41 126 56\r
-      Variable=COMPONENTS LIBS\r
-      Enabled Color=00000000000000001111111111111111\r
-      Create Flags=01010000000000010000000000000011\r
-      Flags=0000000000000010\r
-      Text=Libraries\r
-      Text=\r
-    end\r
-    item: Checkbox\r
-      Rectangle=90 56 148 71\r
-      Variable=COMPONENTS COMM\r
-      Enabled Color=00000000000000001111111111111111\r
-      Create Flags=01010000000000010000000000000011\r
-      Flags=0000000000000010\r
-      Text=Communications\r
-      Text=\r
-    end\r
-  end\r
-  item: Dialog\r
-    Title=Library Packages\r
-    Width=268\r
-    Height=204\r
-    Font Name=Helv\r
-    Font Size=8\r
-  end\r
-  item: Dialog\r
-    Title=Library Packages\r
-    Width=268\r
-    Height=204\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=219 170 254 185\r
-      Enabled Color=00000000000000001111111111111111\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=OK\r
-    end\r
-  end\r
-end\r
+Document Type: DLG
+item: Custom Dialog
+  Name=Select Components
+  Display Variable=DISPLAY
+  Flags=00000001
+  item: Dialog
+    Title=Select Components 
+    Title French=Sélectionner les Ã©léments
+    Title German=Komponenten auswählen
+    Title Portuguese=Seleccionar Componentes
+    Title Spanish=Seleccione los Componentes
+    Title Italian=Seleziona Componenti
+    Title Danish=Vælg komponenter
+    Title Dutch=Selecteer onderdelen
+    Title Norwegian=Velg komponenter
+    Title Swedish=Välj komponenter
+    Width=280
+    Height=224
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=172 185 214 199
+      Variable=DIRECTION
+      Value=N
+      Create Flags=01010000000000010000000000000001
+      Text=&Next >
+      Text French=&Suivant>
+      Text German=&Weiter>
+      Text Portuguese=&Próximo>
+      Text Spanish=&Siguiente >
+      Text Italian=&Avanti >
+      Text Danish=&Næste>
+      Text Dutch=&Volgende>
+      Text Norwegian=&Neste>
+      Text Swedish=&Nästa >
+    end
+    item: Push Button
+      Rectangle=130 185 172 199
+      Variable=DIRECTION
+      Value=B
+      Create Flags=01010000000000010000000000000000
+      Text=< &Back
+      Text French=<&Retour
+      Text German=<&Zurück
+      Text Portuguese=<&Retornar
+      Text Spanish=<&Retroceder
+      Text Italian=< &Indietro
+      Text Danish=<&Tilbage
+      Text Dutch=<&Terug
+      Text Norwegian=<&Tilbake
+      Text Swedish=< &Tillbaka
+    end
+    item: Push Button
+      Rectangle=222 185 264 199
+      Action=3
+      Create Flags=01010000000000010000000000000000
+      Text=Cancel
+      Text French=Annuler
+      Text German=Abbrechen
+      Text Portuguese=Cancelar
+      Text Spanish=Cancelar
+      Text Italian=Annulla
+      Text Danish=Annuller
+      Text Dutch=Annuleren
+      Text Norwegian=Avbryt
+      Text Swedish=Avbryt
+    end
+    item: Static
+      Rectangle=9 177 263 178
+      Action=3
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Static
+      Rectangle=205 156 253 166
+      Variable=COMPONENTS
+      Value=MAINDIR
+      Create Flags=01010000000000000000000000000010
+    end
+    item: Static
+      Rectangle=205 148 253 157
+      Variable=COMPONENTS
+      Create Flags=01010000000000000000000000000010
+    end
+    item: Static
+      Rectangle=95 147 184 158
+      Create Flags=01010000000000000000000000000000
+      Text=Disk Space Required:
+      Text French=Espace disque requis
+      Text German=Benötigter Festplattenspeicher:
+      Text Portuguese=Espaço de disco necessário:
+      Text Spanish=Espacio de Disco Requerido:
+      Text Italian=Spazio su disco richiesto:
+      Text Danish=Nødvendig diskplads:
+      Text Dutch=Vereiste hoeveelheid schijfruimte
+      Text Norwegian=Diskplass nødvendig:
+      Text Swedish=Erforderligt diskutrymme
+    end
+    item: Static
+      Rectangle=95 157 190 167
+      Create Flags=01010000000000000000000000000000
+      Text=Disk Space Remaining:
+      Text French=Espace disque disponible
+      Text German=Verbleibender Festplattenspeicher:
+      Text Portuguese=Espaço de disco restante:
+      Text Spanish=Espacio de Disco Remanente:
+      Text Italian=Spazio su disco rimanente:
+      Text Danish=Ledig diskplads:
+      Text Dutch=Resterende schijfruimte
+      Text Norwegian=Ledig diskplass:
+      Text Swedish=Ã…terstÃ¥ende diskutrymme
+    end
+    item: Static
+      Rectangle=90 138 264 168
+      Action=1
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Static
+      Rectangle=90 8 260 41
+      Create Flags=01010000000000000000000000000000
+      Text=In the options list below, select the checkboxes for the options that you would like to have installed.  The disk space fields reflect the requirements of the options you have selected.
+      Text French=Dans la liste d'options suivante, veuillez sélectionner les cases des options que vous désirez installer. Le champ d'espace disque indique les conditions requises pour les options choisies
+      Text German=Wählen Sie in der Optionenliste unten die Kontrollkästchen für diejenigen Optionen, die Sie installieren möchten. Die Speicherfelder zeigen die benötigte Speicherkapazität für die gewählten Optionen an.
+      Text Portuguese=Na lista de opções abaixo, seleccione as caixas de verificação para as opções que gostaria de ter instalado. Os campos de espaço de disco reflectem os requerimentos das opções que seleccionou.
+      Text Spanish=En la lista de opciones que se ofrece a continuación, seleccione las casillas de comprobación para las opciones que desea instalar. Los campos del espacio en el disco reflejan los requerimientos de las opciones que ha seleccionado.
+      Text Italian=Nell\92elenco delle opzioni sotto, marca le caselle di controllo delle opzioni che vuoi installare. I campi dello spazio sul disco riflettono i requisiti delle opzioni selezionate.
+      Text Danish=Marker afkrydsningsfelterne for de komponenter, der skal installeres, pÃ¥ listen herunder. Diskpladsfelterne angiver pladskravene for de valgte komponenter.
+      Text Dutch=Kruis in de onderstaande lijst het vakje aan naast de opties die u wilt installeren. Achter elke optie staat de benodigde schijfruimte vermeld.
+      Text Norwegian=I listen over alternativer nedenfor, klikk i kontrollrutene for de alternativene du Ã¸nsker Ã¥ installere. Diskplassfeltene gjenspeiler kravene for de alternativene du har valgt.
+      Text Swedish=Kryssa för i rutorna nedan vilka alternativ du vill fÃ¥ installerade. I diskutrymmesfälten anges utrymmesbehoven för de alternativ du väljer.
+    end
+    item: Checkbox
+      Rectangle=91 41 126 56
+      Variable=COMPONENTS LIBS
+      Enabled Color=00000000000000001111111111111111
+      Create Flags=01010000000000010000000000000011
+      Flags=0000000000000010
+      Text=Libraries
+      Text=
+    end
+    item: Checkbox
+      Rectangle=90 56 148 71
+      Variable=COMPONENTS COMM
+      Enabled Color=00000000000000001111111111111111
+      Create Flags=01010000000000010000000000000011
+      Flags=0000000000000010
+      Text=Communications
+      Text=
+    end
+  end
+  item: Dialog
+    Title=Library Packages
+    Width=268
+    Height=204
+    Font Name=Helv
+    Font Size=8
+  end
+  item: Dialog
+    Title=Library Packages
+    Width=268
+    Height=204
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=219 170 254 185
+      Enabled Color=00000000000000001111111111111111
+      Create Flags=01010000000000010000000000000000
+      Text=OK
+    end
+  end
+end
index 566e5c5..4bbd1a4 100755 (executable)
-import string\r
-import re\r
-import os\r
-import types\r
-\r
-infile=open("xemacs.tmpl","r")\r
-\r
-import version\r
-import dirs\r
-import filelist\r
-import packages\r
-\r
-def letter(package):\r
-    index = packages.all.index(package)\r
-    if index>29:\r
-       raise "WISE error: too many components"\r
-    return chr(ord("A")+index)\r
-\r
-def letters(package_list):\r
-    ret = ""\r
-    for p in package_list: \r
-       ret = ret+letter(p)\r
-    return ret\r
-\r
-def describe(package):\r
-    if package in packages.descriptions.keys():\r
-       return ": "+packages.descriptions[package]\r
-    else: return ""\r
-\r
-def ifblock(var,val):\r
-    return("item: If/While Statement\n  Variable=%s\n  Value=%s\n  Flags=00001010\nend\n" % (var,val))\r
-\r
-def endblock():\r
-    return("item: End Block\nend\n")\r
-\r
-def setvar(var,val):\r
-    return("item: Set Variable\n  Variable=%s\n  Value=%s\n  Flags=10000000\nend\n" % (string.upper(var), val))\r
-\r
-def default_letters_of_category(cat):\r
-    val = ""\r
-    for p in packages.default:\r
-        if packages.category_of_package(p) == cat:\r
-            val = val + packages.letter_of_package(p)\r
-    return val\r
-\r
-def set_category_defaults():\r
-    ret = ""\r
-    for c in packages.category_names:\r
-        ret = ret +  setvar(c, default_letters_of_category(c))\r
-    return ret\r
-\r
-def do_category(cat):\r
-    ret = ifblock("COMPONENTS", packages.letter_of_category(cat))\r
-    for pkg in packages.packages_of_category(cat):\r
-        ret = ret + ifblock(string.upper(cat),packages.letter_of_package(pkg))\r
-        for f in files_of_package(pkg):\r
-            ret = ret+install_pkg_file(f)\r
-        ret = ret + endblock()\r
-    ret = ret + endblock()\r
-    return ret\r
-\r
-def files_of_package(package):\r
-    manifest_file = dirs.packages + "\\pkginfo\\MANIFEST." + package\r
-    manifest = open(manifest_file,"r")\r
-    lines = manifest.readlines()\r
-    lines = map(lambda s:s[:-1], lines)\r
-    lines = map(lambda s:string.replace(s,'/','\\'), lines)\r
-    return lines\r
-\r
-def category_dialog(cat):\r
-    npkg = len(packages.packages_of_category(cat))\r
-    ret=""\r
-    ret=ret+"  item: Dialog\n    Title="+packages.category_descriptions[cat]+" Packages\n"\r
-    ret=ret+"    Width=210\n"\r
-    ret=ret+"    Height=%d\n" % (45+npkg*10)\r
-    ret=ret+"    Font Name=Helv\n"\r
-    ret=ret+"    Font Size=8\n"\r
-    ret=ret+"    item: Push Button\n"\r
-    ret=ret+"      Rectangle=107 %d 147 %d\n" % (5+npkg*10+2, 5+npkg*10+17)\r
-    ret=ret+"      Create Flags=01010000000000010000000000000001\n"\r
-    ret=ret+"      Text=OK\n"\r
-    ret=ret+"    end\n"\r
-    ret=ret+"    item: Push Button\n"\r
-    ret=ret+"      Rectangle=153 %d 193 %d\n" % (5+npkg*10+2, 5+npkg*10+17)\r
-    ret=ret+"      Variable=%s\n" % string.upper(cat)\r
-    ret=ret+"      Value=%%%s_SAVE%%\n" % string.upper(cat)\r
-    ret=ret+"      Create Flags=01010000000000010000000000000000\n"\r
-    ret=ret+"      Flags=0000000000000001\n"\r
-    ret=ret+"      Text=Cancel\n"\r
-    ret=ret+"    end\n"\r
-    ret=ret+"    item: Checkbox\n"\r
-    ret=ret+"      Rectangle=0 5 191 %d\n" % (10*npkg)\r
-    ret=ret+"      Variable=%s\n"%string.upper(cat)\r
-    ret=ret+"      Create Flags=01010000000000010000000000000011\n"\r
-    ret=ret+"      Flags=0000000000000010\n"\r
-    for pkg in packages.packages_of_category(cat):\r
-        ret = ret+"      Text=%s: %s\n"%( pkg, packages.package_descriptions[pkg])\r
-    ret=ret+"      Text=\n"\r
-    ret=ret+"    end\n"\r
-    ret=ret+"  end\n"\r
-    return ret\r
-\r
-def src_path(src,name):\r
-    return src + "\\" + name\r
-\r
-def dst_path(dst,name):\r
-    return "%MAINDIR%"+"\\"+dst+"\\" + name\r
-\r
-def install_file(name,src,dst):\r
-    return("item: Install File\n  Source=%s\n  Destination=%s\n  Flags=0000000010000010\nend\n" % (src_path(src,name),dst_path(dst,name)))\r
-\r
-def install_pkg_file(name):\r
-    return install_file(name,dirs.packages,dirs.pkg_dst)\r
-\r
-def do_package(package):\r
-    return ifblock("COMPONENTS",letter(package)) + \\r
-          string.join(map(install_pkg_file,files(package)),"")+ \\r
-          endblock()\r
-\r
-for line in infile.readlines():\r
-    left=string.find(line,"<<<")\r
-    if left>=0:\r
-       right=string.find(line,">>>")\r
-       expr=line[left+3:right]\r
-       val=eval(expr)\r
-       if type(val)==types.StringType:\r
-           print line[:left] + val + line[right+3:],\r
-       elif type(val)==types.ListType:\r
-           for v in val:\r
-               print line[:left] + v + line[right+3:],\r
-    else: print line,\r
-\r
-\r
+import string
+import re
+import os
+import types
+
+infile=open("xemacs.tmpl","r")
+
+import version
+import dirs
+import filelist
+import packages
+
+def letter(package):
+    index = packages.all.index(package)
+    if index>29:
+       raise "WISE error: too many components"
+    return chr(ord("A")+index)
+
+def letters(package_list):
+    ret = ""
+    for p in package_list: 
+       ret = ret+letter(p)
+    return ret
+
+def describe(package):
+    if package in packages.descriptions.keys():
+       return ": "+packages.descriptions[package]
+    else: return ""
+
+def ifblock(var,val):
+    return("item: If/While Statement\n  Variable=%s\n  Value=%s\n  Flags=00001010\nend\n" % (var,val))
+
+def endblock():
+    return("item: End Block\nend\n")
+
+def setvar(var,val):
+    return("item: Set Variable\n  Variable=%s\n  Value=%s\n  Flags=10000000\nend\n" % (string.upper(var), val))
+
+def default_letters_of_category(cat):
+    val = ""
+    for p in packages.default:
+        if packages.category_of_package(p) == cat:
+            val = val + packages.letter_of_package(p)
+    return val
+
+def set_category_defaults():
+    ret = ""
+    for c in packages.category_names:
+        ret = ret +  setvar(c, default_letters_of_category(c))
+    return ret
+
+def do_category(cat):
+    ret = ifblock("COMPONENTS", packages.letter_of_category(cat))
+    for pkg in packages.packages_of_category(cat):
+        ret = ret + ifblock(string.upper(cat),packages.letter_of_package(pkg))
+        for f in files_of_package(pkg):
+            ret = ret+install_pkg_file(f)
+        ret = ret + endblock()
+    ret = ret + endblock()
+    return ret
+
+def files_of_package(package):
+    manifest_file = dirs.packages + "\\pkginfo\\MANIFEST." + package
+    manifest = open(manifest_file,"r")
+    lines = manifest.readlines()
+    lines = map(lambda s:s[:-1], lines)
+    lines = map(lambda s:string.replace(s,'/','\\'), lines)
+    return lines
+
+def category_dialog(cat):
+    npkg = len(packages.packages_of_category(cat))
+    ret=""
+    ret=ret+"  item: Dialog\n    Title="+packages.category_descriptions[cat]+" Packages\n"
+    ret=ret+"    Width=210\n"
+    ret=ret+"    Height=%d\n" % (45+npkg*10)
+    ret=ret+"    Font Name=Helv\n"
+    ret=ret+"    Font Size=8\n"
+    ret=ret+"    item: Push Button\n"
+    ret=ret+"      Rectangle=107 %d 147 %d\n" % (5+npkg*10+2, 5+npkg*10+17)
+    ret=ret+"      Create Flags=01010000000000010000000000000001\n"
+    ret=ret+"      Text=OK\n"
+    ret=ret+"    end\n"
+    ret=ret+"    item: Push Button\n"
+    ret=ret+"      Rectangle=153 %d 193 %d\n" % (5+npkg*10+2, 5+npkg*10+17)
+    ret=ret+"      Variable=%s\n" % string.upper(cat)
+    ret=ret+"      Value=%%%s_SAVE%%\n" % string.upper(cat)
+    ret=ret+"      Create Flags=01010000000000010000000000000000\n"
+    ret=ret+"      Flags=0000000000000001\n"
+    ret=ret+"      Text=Cancel\n"
+    ret=ret+"    end\n"
+    ret=ret+"    item: Checkbox\n"
+    ret=ret+"      Rectangle=0 5 191 %d\n" % (10*npkg)
+    ret=ret+"      Variable=%s\n"%string.upper(cat)
+    ret=ret+"      Create Flags=01010000000000010000000000000011\n"
+    ret=ret+"      Flags=0000000000000010\n"
+    for pkg in packages.packages_of_category(cat):
+        ret = ret+"      Text=%s: %s\n"%( pkg, packages.package_descriptions[pkg])
+    ret=ret+"      Text=\n"
+    ret=ret+"    end\n"
+    ret=ret+"  end\n"
+    return ret
+
+def src_path(src,name):
+    return src + "\\" + name
+
+def dst_path(dst,name):
+    return "%MAINDIR%"+"\\"+dst+"\\" + name
+
+def install_file(name,src,dst):
+    return("item: Install File\n  Source=%s\n  Destination=%s\n  Flags=0000000010000010\nend\n" % (src_path(src,name),dst_path(dst,name)))
+
+def install_pkg_file(name):
+    return install_file(name,dirs.packages,dirs.pkg_dst)
+
+def do_package(package):
+    return ifblock("COMPONENTS",letter(package)) + \
+          string.join(map(install_pkg_file,files(package)),"")+ \
+          endblock()
+
+for line in infile.readlines():
+    left=string.find(line,"<<<")
+    if left>=0:
+       right=string.find(line,">>>")
+       expr=line[left+3:right]
+       val=eval(expr)
+       if type(val)==types.StringType:
+           print line[:left] + val + line[right+3:],
+       elif type(val)==types.ListType:
+           for v in val:
+               print line[:left] + v + line[right+3:],
+    else: print line,
+
+
index 80855ec..23b6ecd 100755 (executable)
@@ -1,32 +1,32 @@
-Document Type: DLG\r
-item: Custom Dialog\r
-  Name=type\r
-  item: Dialog\r
-    Title=type\r
-    Width=238\r
-    Height=208\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Radio Button\r
-      Rectangle=5 5 40 20\r
-      Enabled Color=00000000000000001111111111111111\r
-      Create Flags=01010000000000010000000000001001\r
-      Text=minimal\r
-      Text=\r
-    end\r
-    item: Radio Button\r
-      Rectangle=5 25 40 40\r
-      Enabled Color=00000000000000001111111111111111\r
-      Create Flags=01010000000000010000000000001001\r
-      Text=custom\r
-      Text=\r
-    end\r
-    item: Radio Button\r
-      Rectangle=5 45 40 60\r
-      Enabled Color=00000000000000001111111111111111\r
-      Create Flags=01010000000000010000000000001001\r
-      Text=full\r
-      Text=\r
-    end\r
-  end\r
-end\r
+Document Type: DLG
+item: Custom Dialog
+  Name=type
+  item: Dialog
+    Title=type
+    Width=238
+    Height=208
+    Font Name=Helv
+    Font Size=8
+    item: Radio Button
+      Rectangle=5 5 40 20
+      Enabled Color=00000000000000001111111111111111
+      Create Flags=01010000000000010000000000001001
+      Text=minimal
+      Text=
+    end
+    item: Radio Button
+      Rectangle=5 25 40 40
+      Enabled Color=00000000000000001111111111111111
+      Create Flags=01010000000000010000000000001001
+      Text=custom
+      Text=
+    end
+    item: Radio Button
+      Rectangle=5 45 40 60
+      Enabled Color=00000000000000001111111111111111
+      Create Flags=01010000000000010000000000001001
+      Text=full
+      Text=
+    end
+  end
+end
index 7af36c5..eb10c46 100755 (executable)
@@ -1,3 +1,3 @@
-title="XEmacs 21.0b62 EXPERIMENTAL"\r
-welcome="Welcome to the %APPTITLE% setup program.  Please note that this is an experimental release and some features may not work correctly, especially on machines running Windows 95.  Please read the file PROBLEMS in the xemacs installation directory.  Send comments or bug reports to xemacs-nt@xemacs.org.  For more info see http://www.xemacs.org"\r
-\r
+title="XEmacs 21.0b62 EXPERIMENTAL"
+welcome="Welcome to the %APPTITLE% setup program.  Please note that this is an experimental release and some features may not work correctly, especially on machines running Windows 95.  Please read the file PROBLEMS in the xemacs installation directory.  Send comments or bug reports to xemacs-nt@xemacs.org.  For more info see http://www.xemacs.org"
+
index f591185..a0c467a 100755 (executable)
@@ -1,63 +1,63 @@
-Document Type: DLG\r
-item: Custom Dialog\r
-  Name=Welcome\r
-  Display Variable=DISPLAY\r
-  item: Dialog\r
-    Title=Welcome\r
-    Title French=Bienvenue\r
-    Title German=Willkommen\r
-    Title Portuguese=Bem-vindo \r
-    Title Spanish=Bienvenido\r
-    Title Italian=Benvenuto\r
-    Title Danish=Velkommen\r
-    Title Dutch=Welkom\r
-    Title Norwegian=Velkommen\r
-    Title Swedish=Välkommen\r
-    Width=280\r
-    Height=224\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=172 185 214 199\r
-      Variable=DIRECTION\r
-      Value=N\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=&Next >\r
-      Text French=&Suivant>\r
-      Text German=&Weiter>\r
-      Text Portuguese=&Próximo>\r
-      Text Spanish=&Siguiente >\r
-      Text Italian=&Avanti >\r
-      Text Danish=&Næste>\r
-      Text Dutch=&Volgende>\r
-      Text Norwegian=&Neste>\r
-      Text Swedish=&Nästa >\r
-    end\r
-    item: Push Button\r
-      Rectangle=222 185 264 199\r
-      Action=3\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Cancel\r
-      Text French=Annuler\r
-      Text German=Abbrechen\r
-      Text Portuguese=Cancelar\r
-      Text Spanish=Cancelar\r
-      Text Italian=Annulla\r
-      Text Danish=Annuller\r
-      Text Dutch=Annuleren\r
-      Text Norwegian=Avbryt\r
-      Text Swedish=Avbryt\r
-    end\r
-    item: Static\r
-      Rectangle=9 177 263 178\r
-      Action=3\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Static\r
-      Rectangle=91 22 245 118\r
-      Enabled Color=00000000000000001111111111111111\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=Welcome to the %APPTITLE% setup program.  Please note that this is an experimental release and some features may not work correctly.  Send comments or bug reports to xemacs-nt@xemacs.org rather than one of the other XEmacs mailing lists.  For more info see http://www.xemacs.org\r
-    end\r
-  end\r
-end\r
+Document Type: DLG
+item: Custom Dialog
+  Name=Welcome
+  Display Variable=DISPLAY
+  item: Dialog
+    Title=Welcome
+    Title French=Bienvenue
+    Title German=Willkommen
+    Title Portuguese=Bem-vindo 
+    Title Spanish=Bienvenido
+    Title Italian=Benvenuto
+    Title Danish=Velkommen
+    Title Dutch=Welkom
+    Title Norwegian=Velkommen
+    Title Swedish=Välkommen
+    Width=280
+    Height=224
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=172 185 214 199
+      Variable=DIRECTION
+      Value=N
+      Create Flags=01010000000000010000000000000001
+      Text=&Next >
+      Text French=&Suivant>
+      Text German=&Weiter>
+      Text Portuguese=&Próximo>
+      Text Spanish=&Siguiente >
+      Text Italian=&Avanti >
+      Text Danish=&Næste>
+      Text Dutch=&Volgende>
+      Text Norwegian=&Neste>
+      Text Swedish=&Nästa >
+    end
+    item: Push Button
+      Rectangle=222 185 264 199
+      Action=3
+      Create Flags=01010000000000010000000000000000
+      Text=Cancel
+      Text French=Annuler
+      Text German=Abbrechen
+      Text Portuguese=Cancelar
+      Text Spanish=Cancelar
+      Text Italian=Annulla
+      Text Danish=Annuller
+      Text Dutch=Annuleren
+      Text Norwegian=Avbryt
+      Text Swedish=Avbryt
+    end
+    item: Static
+      Rectangle=9 177 263 178
+      Action=3
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Static
+      Rectangle=91 22 245 118
+      Enabled Color=00000000000000001111111111111111
+      Create Flags=01010000000000000000000000000000
+      Text=Welcome to the %APPTITLE% setup program.  Please note that this is an experimental release and some features may not work correctly.  Send comments or bug reports to xemacs-nt@xemacs.org rather than one of the other XEmacs mailing lists.  For more info see http://www.xemacs.org
+    end
+  end
+end
index 7c20e1e..6f09e51 100755 (executable)
-Document Type: WSE\r
-item: Global\r
-  Version=7.0\r
-  Title=<<<version.title + " Installation">>>\r
-  Flags=00000100\r
-  Languages=65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\r
-  Japanese Font Name=MS Gothic\r
-  Japanese Font Size=10\r
-  Progress Bar DLL=%_WISE_%\Progress\WIZ%_EXE_OS_TYPE_%.DLL\r
-  Start Gradient=0 0 255\r
-  End Gradient=0 0 0\r
-  Windows Flags=00000100000000010010110000001000\r
-  Log Pathname=%MAINDIR%\INSTALL.LOG\r
-  Message Font=MS Sans Serif\r
-  Font Size=8\r
-  Disk Filename=SETUP\r
-  Patch Flags=0000000000000001\r
-  Patch Threshold=85\r
-  Patch Memory=4000\r
-  FTP Cluster Size=20\r
-  Dialogs Version=6\r
-  Variable Name1=_SYS_\r
-  Variable Default1=C:\WINDOWS\SYSTEM\r
-  Variable Flags1=00001000\r
-  Variable Name2=_WISE_\r
-  Variable Default2=C:\PROGRAM FILES\WISE INSTALLBUILDER\r
-  Variable Flags2=00001000\r
-end\r
-item: Get Temporary Filename\r
-  Variable=READMEFILE\r
-end\r
-item: Install File\r
-  Source=<<<dirs.source>>>\nt\Wise\Copying.txt\r
-  Destination=%TEMP%\%READMEFILE%\r
-  Flags=0000000000100010\r
-end\r
-item: Open/Close INSTALL.LOG\r
-  Flags=00000001\r
-end\r
-item: Check if File/Dir Exists\r
-  Pathname=%SYS%\r
-  Flags=10000100\r
-end\r
-item: Set Variable\r
-  Variable=SYS\r
-  Value=%WIN%\r
-end\r
-item: End Block\r
-end\r
-item: Set Variable\r
-  Variable=APPTITLE\r
-  Value=<<<version.title>>>\r
-  Flags=10000000\r
-end\r
-item: Set Variable\r
-  Variable=GROUP\r
-  Value=XEmacs\r
-  Flags=10000000\r
-end\r
-item: Set Variable\r
-  Variable=DISABLED\r
-  Value=!\r
-end\r
-item: Set Variable\r
-  Variable=MAINDIR\r
-  Value=XEmacs\r
-  Flags=10000000\r
-end\r
-item: Check Configuration\r
-  Flags=10111011\r
-end\r
-item: Get Registry Key Value\r
-  Variable=COMMON\r
-  Key=SOFTWARE\Microsoft\Windows\CurrentVersion\r
-  Default=C:\Program Files\Common Files\r
-  Value Name=CommonFilesDir\r
-  Flags=00000100\r
-end\r
-item: Get Registry Key Value\r
-  Variable=PROGRAM_FILES\r
-  Key=SOFTWARE\Microsoft\Windows\CurrentVersion\r
-  Default=C:\Program Files\r
-  Value Name=ProgramFilesDir\r
-  Flags=00000100\r
-end\r
-item: Set Variable\r
-  Variable=MAINDIR\r
-  Value=%PROGRAM_FILES%\%MAINDIR%\r
-  Flags=00001100\r
-end\r
-item: Set Variable\r
-  Variable=EXPLORER\r
-  Value=1\r
-end\r
-item: Else Statement\r
-end\r
-item: Set Variable\r
-  Variable=MAINDIR\r
-  Value=C:\%MAINDIR%\r
-  Flags=00001100\r
-end\r
-item: End Block\r
-end\r
-item: Set Variable\r
-  Variable=BACKUP\r
-  Value=%MAINDIR%\BACKUP\r
-  Flags=10000000\r
-end\r
-item: Set Variable\r
-  Variable=DOBACKUP\r
-  Value=B\r
-  Flags=10000000\r
-end\r
-item: Set Variable\r
-  Variable=COMPONENTS\r
-  Value=ACE\r
-  Flags=10000000\r
-end\r
-<<<set_category_defaults()>>>\r
-item: Wizard Block\r
-  Direction Variable=DIRECTION\r
-  Display Variable=DISPLAY\r
-  Bitmap Pathname=<<<dirs.source>>>\nt\Wise\gnu.bmp\r
-  X Position=9\r
-  Y Position=10\r
-  Filler Color=8421440\r
-  Dialog=Select Program Manager Group\r
-  Dialog=Select Backup Directory\r
-  Dialog=Display Registration Information\r
-  Dialog=Get Registration Information\r
-  Variable=EXPLORER\r
-  Variable=DOBACKUP\r
-  Variable=DOBRAND\r
-  Variable=DOBRAND\r
-  Value=1\r
-  Value=A\r
-  Value=1\r
-  Value=1\r
-  Compare=0\r
-  Compare=1\r
-  Compare=0\r
-  Compare=1\r
-  Flags=00000011\r
-end\r
-item: Custom Dialog Set\r
-  Name=Welcome\r
-  Display Variable=DISPLAY\r
-  item: Dialog\r
-    Title=Welcome\r
-    Title French=Bienvenue\r
-    Title German=Willkommen\r
-    Title Portuguese=Bem-vindo \r
-    Title Spanish=Bienvenido\r
-    Title Italian=Benvenuto\r
-    Title Danish=Velkommen\r
-    Title Dutch=Welkom\r
-    Title Norwegian=Velkommen\r
-    Title Swedish=Välkommen\r
-    Width=280\r
-    Height=224\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=172 185 214 199\r
-      Variable=DIRECTION\r
-      Value=N\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=&Next >\r
-      Text French=&Suivant>\r
-      Text German=&Weiter>\r
-      Text Portuguese=&Próximo>\r
-      Text Spanish=&Siguiente >\r
-      Text Italian=&Avanti >\r
-      Text Danish=&Næste>\r
-      Text Dutch=&Volgende>\r
-      Text Norwegian=&Neste>\r
-      Text Swedish=&Nästa >\r
-    end\r
-    item: Push Button\r
-      Rectangle=222 185 264 199\r
-      Action=3\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Cancel\r
-      Text French=Annuler\r
-      Text German=Abbrechen\r
-      Text Portuguese=Cancelar\r
-      Text Spanish=Cancelar\r
-      Text Italian=Annulla\r
-      Text Danish=Annuller\r
-      Text Dutch=Annuleren\r
-      Text Norwegian=Avbryt\r
-      Text Swedish=Avbryt\r
-    end\r
-    item: Static\r
-      Rectangle=9 177 263 178\r
-      Action=3\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Static\r
-      Rectangle=91 22 245 118\r
-      Enabled Color=00000000000000001111111111111111\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=<<<version.welcome>>>\r
-    end\r
-  end\r
-end\r
-item: Custom Dialog Set\r
-  Name=Display ReadMe\r
-  Display Variable=DISPLAY\r
-  item: Dialog\r
-    Title=Read Me File\r
-    Title French=Fichier Lisez-moi\r
-    Title German=Liesmich-Datei\r
-    Title Portuguese=Ficheiro Leia-me\r
-    Title Spanish=Archivo Léeme\r
-    Title Italian=File Leggimi\r
-    Title Danish=Vigtigt fil\r
-    Title Dutch=Leesmij-bestand\r
-    Title Norwegian=Informasjonsfil\r
-    Title Swedish=Läs mig-fil\r
-    Width=280\r
-    Height=224\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=172 185 214 199\r
-      Variable=DIRECTION\r
-      Value=N\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=I &Agree >\r
-      Text French=&Suivant>\r
-      Text German=&Weiter>\r
-      Text Portuguese=&Próximo>\r
-      Text Spanish=&Siguiente >\r
-      Text Italian=&Avanti >\r
-      Text Danish=&Næste>\r
-      Text Dutch=&Volgende>\r
-      Text Norwegian=&Neste>\r
-      Text Swedish=&Nästa >\r
-    end\r
-    item: Push Button\r
-      Rectangle=222 185 264 199\r
-      Action=3\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Cancel\r
-      Text French=Annuler\r
-      Text German=Abbrechen\r
-      Text Portuguese=Cancelar\r
-      Text Spanish=Cancelar\r
-      Text Italian=Annulla\r
-      Text Danish=Slet\r
-      Text Dutch=Annuleren\r
-      Text Norwegian=Avbryt\r
-      Text Swedish=Avbryt\r
-    end\r
-    item: Static\r
-      Rectangle=9 177 263 178\r
-      Action=3\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Editbox\r
-      Rectangle=85 11 254 170\r
-      Value=%TEMP%\%READMEFILE%\r
-      Help Context=16711681\r
-      Create Flags=01010000101000000000100000000100\r
-    end\r
-  end\r
-end\r
-item: Custom Dialog Set\r
-  Name=Select Destination Directory\r
-  Display Variable=DISPLAY\r
-  item: Dialog\r
-    Title=Choose Destination Location\r
-    Title French=Choisissez la localisation de destination\r
-    Title German=Zielpfad wählen\r
-    Title Portuguese=Escolher Local de Destino\r
-    Title Spanish=Elegir una localización de destino\r
-    Title Italian=Scegli Posizione di Destinazione\r
-    Title Danish=Vælg destinationsmappe\r
-    Title Dutch=Kies doellocatie\r
-    Title Norwegian=Velg mÃ¥lplassering\r
-    Title Swedish=Välj ställe för installationen\r
-    Width=280\r
-    Height=224\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=172 185 214 199\r
-      Variable=DIRECTION\r
-      Value=N\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=&Next >\r
-      Text French=&Suivant>\r
-      Text German=&Weiter>\r
-      Text Portuguese=&Próximo>\r
-      Text Spanish=&Siguiente >\r
-      Text Italian=&Avanti >\r
-      Text Danish=&Næste>\r
-      Text Dutch=&Volgende>\r
-      Text Norwegian=&Neste>\r
-      Text Swedish=&Nästa >\r
-    end\r
-    item: Push Button\r
-      Rectangle=130 185 172 199\r
-      Variable=DIRECTION\r
-      Value=B\r
-      Create Flags=01010000000000010000000000000000\r
-      Flags=0000000000000001\r
-      Text=< &Back\r
-      Text French=<&Retour\r
-      Text German=<&Zurück\r
-      Text Portuguese=<&Retornar\r
-      Text Spanish=<&Retroceder\r
-      Text Italian=< &Indietro\r
-      Text Danish=<&Tilbage\r
-      Text Dutch=<&Terug\r
-      Text Norwegian=<&Tilbake\r
-      Text Swedish=< &Tillbaka\r
-    end\r
-    item: Push Button\r
-      Rectangle=222 185 264 199\r
-      Action=3\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Cancel\r
-      Text French=Annuler\r
-      Text German=Abbrechen\r
-      Text Portuguese=Cancelar\r
-      Text Spanish=Cancelar\r
-      Text Italian=Annulla\r
-      Text Danish=Annuller\r
-      Text Dutch=Annuleren\r
-      Text Norwegian=Avbryt\r
-      Text Swedish=Avbryt\r
-    end\r
-    item: Static\r
-      Rectangle=9 177 263 178\r
-      Action=3\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Static\r
-      Rectangle=90 10 260 122\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=Setup will install %APPTITLE% in the following folder.\r
-      Text=\r
-      Text=To install into a different folder, click Browse, and select another folder. \r
-      Text=\r
-      Text=You can choose not to install %APPTITLE% by clicking Cancel to exit Setup.\r
-      Text French=%APPTITLE% va Ãªtre installé dans le répertoire ci-dessous\r
-      Text French=\r
-      Text French=Pour l'installer dans un répertoire différent, cliquez sur Parcourir et sélectionnez un autre répertoire\r
-      Text French=\r
-      Text French=Vous pouvez choisir de ne pas installer %APPTITLE% en cliquant sur Annuler pour quitter l'Installation\r
-      Text German=Installation speichert %APPTITLE% im unten angegebenen Ordner:\r
-      Text German=\r
-      Text German=Zur Installation in einem anderen Ordner auf Blättern klicken und einen anderen Ordner wählen.\r
-      Text German=\r
-      Text German=Wenn Sie %APPTITLE% nicht installieren möchten, können Sie durch Klicken auf Abbrechen die Installation beenden.\r
-      Text Portuguese=Configuração instalará %APPTITLE% na seguinte pasta\r
-      Text Portuguese=\r
-      Text Portuguese=Para instalar numa pasta diferente, faça um clique sobre Procurar, e seleccione uma outra pasta.\r
-      Text Portuguese=\r
-      Text Portuguese=Pode escolher não instalar %APPTITLE% clicando no botão Cancelar para sair da Configuração\r
-      Text Spanish=El programa de Configuración instalará %APPTITLE% en la siguiente carpeta.\r
-      Text Spanish=\r
-      Text Spanish=Para instalar en una carpeta diferente, haga un clic en Visualizar, y seleccione otra carpeta.\r
-      Text Spanish=\r
-      Text Spanish=Puede elegir no instalar %APPTITLE% haciendo un clic en Cancelar para salir de Configuración.\r
-      Text Italian=Il programma di installazione installerà %APPTITLE% nella seguente cartella.\r
-      Text Italian=\r
-      Text Italian=Per effettuare l\92installazione in una cartella diversa, fai clic su Sfoglia, e scegli un\92altra cartella.\r
-      Text Italian=\r
-      Text Italian=Puoi scegliere di non installare %APPTITLE% facendo clic su Annulla per uscire dal programma di installazione\r
-      Text Danish=Installationsprogrammet installerer %APPTITLE% i denne mappe.\r
-      Text Danish=\r
-      Text Danish=Man installerer i en anden mappe ved at klikke pÃ¥ Browse og vælge en anden mappe.\r
-      Text Danish=\r
-      Text Danish=Man kan vælge ikke at installere %APPTITLE% ved at klikke pÃ¥ Slet og forlade installationsprogrammet.\r
-      Text Dutch=Het installatieprogramma installeert %APPTITLE% in de volgende directory.\r
-      Text Dutch=\r
-      Text Dutch=Als u het in een andere directory wilt installeren, klik dan op Bladeren en kies een andere locatie.\r
-      Text Dutch=\r
-      Text Dutch=U kunt ervoor kiezen om %APPTITLE% niet te installeren: klik op Annuleren om het installatieprogramma te verlaten.\r
-      Text Norwegian=Oppsett vil installere %APPTITLE% i følgende mappe.\r
-      Text Norwegian=\r
-      Text Norwegian=For Ã¥ installere i en annen mappe, klikk Bla igjennom og velg en annen mappe.\r
-      Text Norwegian=\r
-      Text Norwegian=Du kan velge Ã¥ ikke installere %APPTITLE% ved Ã¥ velge Avbryt for Ã¥ gÃ¥ ut av Oppsett.\r
-      Text Swedish=Installationsprogrammet installerar %APPTITLE% i följande mapp.\r
-      Text Swedish=\r
-      Text Swedish=Om du vill att installationen ska göras i en annan mapp, klickar du pÃ¥ Bläddra och väljer en annan mapp.\r
-      Text Swedish=\r
-      Text Swedish=Du kan välja att inte installera %APPTITLE% genom att klicka pÃ¥ Avbryt för att lämna installationsprogrammet.\r
-    end\r
-    item: Static\r
-      Rectangle=90 134 260 162\r
-      Action=1\r
-      Create Flags=01010000000000000000000000000111\r
-      Text=Destination Folder\r
-      Text French=Répertoire de destination\r
-      Text German=Zielordner\r
-      Text Portuguese=Pasta de Destino\r
-      Text Spanish=Carpeta de Destino\r
-      Text Italian=Cartella di destinazione\r
-      Text Danish=Destinationsmappe\r
-      Text Dutch=Doeldirectory\r
-      Text Norwegian=MÃ¥lmappe\r
-      Text Swedish=Destinationsmapp\r
-    end\r
-    item: Push Button\r
-      Rectangle=213 143 255 157\r
-      Variable=MAINDIR_SAVE\r
-      Value=%MAINDIR%\r
-      Destination Dialog=1\r
-      Action=2\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=B&rowse...\r
-      Text French=P&arcourir\r
-      Text German=B&lättern...\r
-      Text Portuguese=P&rocurar\r
-      Text Spanish=V&isualizar...\r
-      Text Italian=Sfoglia...\r
-      Text Danish=&Gennemse...\r
-      Text Dutch=B&laderen...\r
-      Text Norwegian=Bla igjennom\r
-      Text Swedish=&Bläddra\r
-    end\r
-    item: Static\r
-      Rectangle=95 146 211 157\r
-      Destination Dialog=2\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=%MAINDIR%\r
-      Text French=%MAINDIR%\r
-      Text German=%MAINDIR%\r
-      Text Portuguese=%MAINDIR%\r
-      Text Spanish=%MAINDIR%\r
-      Text Italian=%MAINDIR%\r
-      Text Danish=%MAINDIR%\r
-      Text Dutch=%MAINDIR%\r
-      Text Norwegian=%MAINDIR%\r
-      Text Swedish=%MAINDIR%\r
-    end\r
-  end\r
-  item: Dialog\r
-    Title=Select Destination Directory\r
-    Title French=Choisissez le répertoire de destination\r
-    Title German=Zielverzeichnis wählen\r
-    Title Portuguese=Seleccionar Directório de Destino\r
-    Title Spanish=Seleccione el Directorio de Destino\r
-    Title Italian=Seleziona Directory di destinazione\r
-    Title Danish=Vælg Destinationsbibliotek\r
-    Title Dutch=Kies doeldirectory\r
-    Title Norwegian=Velg mÃ¥lkatalog\r
-    Title Swedish=Välj destinationskalatog\r
-    Width=221\r
-    Height=173\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Listbox\r
-      Rectangle=5 2 160 149\r
-      Variable=MAINDIR\r
-      Create Flags=01010000100000010000000101000000\r
-      Flags=0000110000100010\r
-      Text=%MAINDIR%\r
-      Text French=%MAINDIR%\r
-      Text German=%MAINDIR%\r
-      Text Portuguese=%MAINDIR%\r
-      Text Spanish=%MAINDIR%\r
-      Text Italian=%MAINDIR%\r
-      Text Danish=%MAINDIR%\r
-      Text Dutch=%MAINDIR%\r
-      Text Norwegian=%MAINDIR%\r
-      Text Swedish=%MAINDIR%\r
-    end\r
-    item: Push Button\r
-      Rectangle=167 6 212 21\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=OK\r
-      Text French=OK\r
-      Text German=OK\r
-      Text Portuguese=OK\r
-      Text Spanish=ACEPTAR\r
-      Text Italian=OK\r
-      Text Danish=OK\r
-      Text Dutch=OK\r
-      Text Norwegian=OK\r
-      Text Swedish=OK\r
-    end\r
-    item: Push Button\r
-      Rectangle=167 25 212 40\r
-      Variable=MAINDIR\r
-      Value=%MAINDIR_SAVE%\r
-      Create Flags=01010000000000010000000000000000\r
-      Flags=0000000000000001\r
-      Text=Cancel\r
-      Text French=Annuler\r
-      Text German=Abbrechen \r
-      Text Portuguese=Cancelar\r
-      Text Spanish=Cancelar\r
-      Text Italian=Annulla\r
-      Text Danish=Slet\r
-      Text Dutch=Annuleren\r
-      Text Norwegian=Avbryt\r
-      Text Swedish=Avbryt\r
-    end\r
-  end\r
-end\r
-item: Custom Dialog Set\r
-  Name=Select Packages\r
-  Display Variable=DISPLAY\r
-  item: Dialog\r
-    Title=Select Packages\r
-    Width=271\r
-    Height=224\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=150 187 195 202\r
-      Variable=DIRECTION\r
-      Value=N\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=&Next >\r
-      Text French=&Suite >\r
-      Text German=&Weiter >\r
-      Text Spanish=&Siguiente >\r
-      Text Italian=&Avanti >\r
-    end\r
-    item: Push Button\r
-      Rectangle=105 187 150 202\r
-      Variable=DIRECTION\r
-      Value=B\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=< &Back\r
-      Text French=< &Retour\r
-      Text German=< &Zurück\r
-      Text Spanish=< &Atrás\r
-      Text Italian=< &Indietro\r
-    end\r
-    item: Push Button\r
-      Rectangle=211 187 256 202\r
-      Action=3\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=&Cancel\r
-      Text French=&Annuler\r
-      Text German=&Abbrechen\r
-      Text Spanish=&Cancelar\r
-      Text Italian=&Annulla\r
-    end\r
-    item: Static\r
-      Rectangle=8 180 256 181\r
-      Action=3\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Static\r
-      Rectangle=86 8 258 28\r
-      Create Flags=01010000000000000000000000000000\r
-      Flags=0000000000000001\r
-      Name=Times New Roman\r
-      Font Style=-24 0 0 0 700 255 0 0 0 3 2 1 18\r
-      Text=Select Packages\r
-      Text French=Sélectionner les composants\r
-      Text German=Komponenten auswählen\r
-      Text Spanish=Seleccione componentes\r
-      Text Italian=Selezionare i componenti\r
-    end\r
-    item: Checkbox\r
-      Rectangle=83 62 211 146\r
-      Variable=COMPONENTS LIBS,COMM,OA,OS,PROG,WP,GAMES\r
-      Create Flags=01010000000000010000000000000011\r
-      Flags=0000000000000110\r
-      Text=Libraries\r
-      Text=Communication\r
-      Text=Productivity\r
-      Text=Operating System\r
-      Text=Programming\r
-      Text=Word Processing\r
-      Text=Games and Amusements\r
-      Text=\r
-    end\r
-    item: Static\r
-      Rectangle=194 162 242 172\r
-      Variable=COMPONENTS, LIBS, COMM, OA, OS, PROG, WP, GAMES\r
-      Value=MAINDIR\r
-      Create Flags=01010000000000000000000000000010\r
-    end\r
-    item: Static\r
-      Rectangle=194 153 242 162\r
-      Variable=COMPONENTS, LIBS, COMM, OA, OS, PROG, WP, GAMES\r
-      Create Flags=01010000000000000000000000000010\r
-    end\r
-    item: Static\r
-      Rectangle=107 153 196 164\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=Disk Space Required:\r
-      Text French=Espace disque requis :\r
-      Text German=Notwendiger Speicherplatz:\r
-      Text Spanish=Espacio requerido en el disco:\r
-      Text Italian=Spazio su disco necessario:\r
-    end\r
-    item: Static\r
-      Rectangle=107 162 196 172\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=Disk Space Remaining:\r
-      Text French=Espace disque disponible :\r
-      Text German=Verbleibender Speicherplatz:\r
-      Text Spanish=Espacio en disco disponible:\r
-      Text Italian=Spazio su disco disponibile:\r
-    end\r
-    item: Static\r
-      Rectangle=80 146 256 175\r
-      Action=1\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Static\r
-      Rectangle=83 30 256 57\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=Choose which package categories to install by checking the boxes below. Press the Options buttons to select individual packages.\r
-      Text French=Choisissez les composants que vous voulez installer en cochant les cases ci-dessous.\r
-      Text German=Wählen Sie die zu installierenden Komponenten, indem Sie in die entsprechenden Kästchen klicken.\r
-      Text Spanish=Elija los componentes que desee instalar marcando los cuadros de abajo.\r
-      Text Italian=Scegliere quali componenti installare selezionando le caselle sottostanti.\r
-    end\r
-    item: Push Button\r
-      Rectangle=230 62 254 72\r
-      Variable=LIBS_SAVE\r
-      Value=%LIBS%\r
-      Destination Dialog=1\r
-      Action=2\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Options\r
-      Text French=&Annuler\r
-      Text German=&Abbrechen\r
-      Text Spanish=&Cancelar\r
-      Text Italian=&Annulla\r
-    end\r
-    item: Push Button\r
-      Rectangle=230 74 254 84\r
-      Variable=COMM_SAVE\r
-      Value=%COMM%\r
-      Destination Dialog=2\r
-      Action=2\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Options\r
-      Text French=&Annuler\r
-      Text German=&Abbrechen\r
-      Text Spanish=&Cancelar\r
-      Text Italian=&Annulla\r
-    end\r
-    item: Push Button\r
-      Rectangle=230 86 254 96\r
-      Variable=OA_SAVE\r
-      Value=%OA%\r
-      Destination Dialog=3\r
-      Action=2\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Options\r
-      Text French=&Annuler\r
-      Text German=&Abbrechen\r
-      Text Spanish=&Cancelar\r
-      Text Italian=&Annulla\r
-    end\r
-    item: Push Button\r
-      Rectangle=230 98 254 108\r
-      Variable=OS_SAVE\r
-      Value=%OS%\r
-      Destination Dialog=4\r
-      Action=2\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Options\r
-      Text French=&Annuler\r
-      Text German=&Abbrechen\r
-      Text Spanish=&Cancelar\r
-      Text Italian=&Annulla\r
-    end\r
-    item: Push Button\r
-      Rectangle=230 110 254 120\r
-      Variable=PROG_SAVE\r
-      Value=%PROG%\r
-      Destination Dialog=5\r
-      Action=2\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Options\r
-      Text French=&Annuler\r
-      Text German=&Abbrechen\r
-      Text Spanish=&Cancelar\r
-      Text Italian=&Annulla\r
-    end\r
-    item: Push Button\r
-      Rectangle=230 122 254 132\r
-      Variable=WP_SAVE\r
-      Value=%WP%\r
-      Destination Dialog=6\r
-      Action=2\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Options\r
-      Text French=&Annuler\r
-      Text German=&Abbrechen\r
-      Text Spanish=&Cancelar\r
-      Text Italian=&Annulla\r
-    end\r
-    item: Push Button\r
-      Rectangle=230 134 254 144\r
-      Variable=GAMES_SAVE\r
-      Value=%GAMES%\r
-      Destination Dialog=7\r
-      Action=2\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Options\r
-      Text French=&Annuler\r
-      Text German=&Abbrechen\r
-      Text Spanish=&Cancelar\r
-      Text Italian=&Annulla\r
-    end\r
-    item: Set Variable\r
-      Variable=COMPONENTS\r
-      Value=X\r
-      Flags=00000001\r
-    end\r
-  end\r
-<<<string.join(map(category_dialog,packages.category_names),"")>>>\r
-end\r
-item: Custom Dialog Set\r
-  Name=Select Program Manager Group\r
-  Display Variable=DISPLAY\r
-  item: Dialog\r
-    Title=Select Program Manager Group\r
-    Title French=Sélectionnez le Groupe du Gestionnaire de Programmes\r
-    Title German=Programm-Managergruppe wählen\r
-    Title Portuguese=Seleccionar o Grupo Gestor de Programas\r
-    Title Spanish=Seleccione el Grupo del Administrador del Programa\r
-    Title Italian=Seleziona il gruppo Program Manager\r
-    Title Danish=Vælg Programstyringsgruppen\r
-    Title Dutch=Kies Programmabeheergroep.\r
-    Title Norwegian=Velg Programbehandlingsgruppen\r
-    Title Swedish=Välj grupp i Programhanteraren\r
-    Width=280\r
-    Height=224\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=172 185 214 199\r
-      Variable=DIRECTION\r
-      Value=N\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=&Next >\r
-      Text French=&Suivant>\r
-      Text German=&Weiter>\r
-      Text Portuguese=&Próximo>\r
-      Text Spanish=&Siguiente >\r
-      Text Italian=&Avanti >\r
-      Text Danish=&Næste>\r
-      Text Dutch=&Volgende>\r
-      Text Norwegian=&Neste>\r
-      Text Swedish=&Nästa >\r
-    end\r
-    item: Push Button\r
-      Rectangle=130 185 172 199\r
-      Variable=DIRECTION\r
-      Value=B\r
-      Create Flags=01010000000000010000000000000000\r
-      Flags=0000000000000001\r
-      Text=< &Back\r
-      Text French=<&Retour\r
-      Text German=<&Zurück\r
-      Text Portuguese=<&Retornar\r
-      Text Spanish=<&Retroceder\r
-      Text Italian=< &Indietro\r
-      Text Danish=<&Back\r
-      Text Dutch=<&Terug\r
-      Text Norwegian=<&Tilbake\r
-      Text Swedish=< &Tillbaka\r
-    end\r
-    item: Push Button\r
-      Rectangle=222 185 264 199\r
-      Action=3\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Cancel\r
-      Text French=Annuler\r
-      Text German=Abbrechen\r
-      Text Portuguese=Cancelar\r
-      Text Spanish=Cancelar\r
-      Text Italian=Annulla\r
-      Text Danish=Slet\r
-      Text Dutch=Annuleren\r
-      Text Norwegian=Avbryt\r
-      Text Swedish=Avbryt\r
-    end\r
-    item: Static\r
-      Rectangle=9 177 263 178\r
-      Action=3\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Static\r
-      Rectangle=90 10 260 38\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=Enter the name of the Program Manager group to add %APPTITLE% icons to:\r
-      Text French=Entrez le nom du groupe du Gestionnaire de Programmes où placer les icônes %APPTITLE% Ã  :\r
-      Text German=Den Namen der Programm-Managergruppe wählen, in der die %APPTITLE%-Symbole gespeichert werden sollen:\r
-      Text Portuguese=Introduzir o nome do Grupo Gestor de Programa para acrescentar os Ã­cones %APPTITLE% para:\r
-      Text Spanish=Introduzca el nombre del grupo del Administrador del Programa para añadir los iconos %APPTITLE para:\r
-      Text Italian=Inserisci il nome del gruppo Program Manager per aggiungere le icone di %APPTITLE% a:\r
-      Text Danish=Indtast navnet pÃ¥ Programstyringsgruppen der skal tilføjes %APPTITLE% elementer:\r
-      Text Dutch=Breng de naam van de programmabeheergroep in waaraan u %APPTITLE%-pictogrammen wilt toevoegen.\r
-      Text Norwegian=Tast inn navnet pÃ¥ programbehandlingsgruppen for Ã¥ legge %APPTITLE%-ikoner til:\r
-      Text Swedish=Skriv in namnet pÃ¥ den grupp i Programhanteraren där du vill ha ikonerna för %APPTITLE%:\r
-    end\r
-    item: Combobox\r
-      Rectangle=90 42 260 148\r
-      Variable=GROUP\r
-      Create Flags=01010000001000010000001100000001\r
-      Flags=0000000000000001\r
-      Text=%GROUP%\r
-      Text=\r
-      Text French=%GROUP%\r
-      Text French=\r
-      Text German=%GROUP%\r
-      Text German=\r
-      Text Portuguese=%GROUP%\r
-      Text Portuguese=\r
-      Text Spanish=%GROUP%\r
-      Text Spanish=\r
-      Text Italian=%GROUP%\r
-      Text Italian=\r
-      Text Danish=%GROUP%\r
-      Text Danish=\r
-      Text Dutch=%GROUP%\r
-      Text Dutch=\r
-      Text Norwegian=%GROUP%\r
-      Text Norwegian=\r
-      Text Swedish=%GROUP%\r
-      Text Swedish=\r
-    end\r
-  end\r
-end\r
-item: Custom Dialog Set\r
-  Name=Start Installation\r
-  Display Variable=DISPLAY\r
-  item: Dialog\r
-    Title=Start Installation\r
-    Title French=Commencer l'installation\r
-    Title German=Installation beginnen\r
-    Title Portuguese=Iniciar Instalação\r
-    Title Spanish=Comenzar la Instalación\r
-    Title Italian=Avvia Installazione\r
-    Title Danish=Start installationen\r
-    Title Dutch=Start de installatie.\r
-    Title Norwegian=Start installeringen\r
-    Title Swedish=Starta installationen\r
-    Width=280\r
-    Height=224\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=172 185 214 199\r
-      Variable=DIRECTION\r
-      Value=N\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=&Next >\r
-      Text French=&Suivant>\r
-      Text German=&Weiter>\r
-      Text Portuguese=&Próximo>\r
-      Text Spanish=&Siguiente >\r
-      Text Italian=&Avanti >\r
-      Text Danish=&Næste>\r
-      Text Dutch=&Volgende>\r
-      Text Norwegian=&Neste>\r
-      Text Swedish=&Nästa >\r
-    end\r
-    item: Push Button\r
-      Rectangle=130 185 172 199\r
-      Variable=DIRECTION\r
-      Value=B\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=< &Back\r
-      Text French=<&Retour\r
-      Text German=<&Zurück\r
-      Text Portuguese=<&Retornar\r
-      Text Spanish=<&Retroceder\r
-      Text Italian=< &Indietro\r
-      Text Danish=<&Tilbage\r
-      Text Dutch=<&Terug\r
-      Text Norwegian=<&Tilbake\r
-      Text Swedish=< &Tillbaka\r
-    end\r
-    item: Push Button\r
-      Rectangle=222 185 264 199\r
-      Action=3\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Cancel\r
-      Text French=Annuler\r
-      Text German=Abbrechen\r
-      Text Portuguese=Cancelar\r
-      Text Spanish=Cancelar\r
-      Text Italian=Annulla\r
-      Text Danish=Annuller\r
-      Text Dutch=Annuleren\r
-      Text Norwegian=Avbryt\r
-      Text Swedish=Avbryt\r
-    end\r
-    item: Static\r
-      Rectangle=9 177 263 178\r
-      Action=3\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Static\r
-      Rectangle=90 10 260 70\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=You are now ready to install %APPTITLE%.\r
-      Text=\r
-      Text=Press the Next button to begin the installation or the Back button to reenter the installation information.\r
-      Text French=Vous Ãªtes maintenant prêt Ã  installer %APPTITLE%\r
-      Text French=\r
-      Text French=Cliquez sur Suivant pour commencer l'installation ou Retour pour entrer Ã  nouveau les informations d'installation\r
-      Text German=Sie sind jetzt zur Installation von %APPTITLE% bereit.\r
-      Text German=\r
-      Text German=Auf die Schaltfläche Weiter klicken, um mit dem Start der Installation zu beginnen, oder auf die Schaltfläche Zurück, um die Installationsinformationen nochmals aufzurufen.\r
-      Text Portuguese=Está agora pronto para instalar %APPTITLE%\r
-      Text Portuguese=\r
-      Text Portuguese=Pressione o botão Próximo para começar a instalação ou o botão Retornar para introduzir novamente a informação sobre a instalação\r
-      Text Spanish=Ahora estará listo para instalar %APPTITLE%.\r
-      Text Spanish=\r
-      Text Spanish=Pulse el botón de Próximo para comenzar la instalación o el botón Retroceder para volver a introducir la información sobre la instalación.\r
-      Text Italian=Sei pronto ad installare %APPTITLE%.\r
-      Text Italian=\r
-      Text Italian=Premi il tasto Avanti per iniziare l\92installazione o il tasto Indietro per rientrare nuovamente nei dati sull\92installazione\r
-      Text Danish=Du er nu klar til at installere %APPTITLE%.\r
-      Text Danish=\r
-      Text Danish=Klik pÃ¥ Næste for at starte installationen eller pÃ¥ Tilbage for at Ã¦ndre installationsoplysningerne.\r
-      Text Dutch=U bent nu klaar om %APPTITLE% te installeren.\r
-      Text Dutch=\r
-      Text Dutch=Druk op Volgende om met de installatie te beginnen of op Terug om de installatie-informatie opnieuw in te voeren.\r
-      Text Norwegian=Du er nÃ¥ klar til Ã¥ installere %APPTITLE%\r
-      Text Norwegian=\r
-      Text Norwegian=Trykk pÃ¥ Neste-tasten for Ã¥ starte installeringen, eller Tilbake-tasten for Ã¥ taste inn installasjonsinformasjonen pÃ¥ nytt.\r
-      Text Swedish=Du Ã¤r nu redo att installera %APPTITLE%.\r
-      Text Swedish=\r
-      Text Swedish=Tryck pÃ¥ Nästa för att starta installationen eller pÃ¥ Tillbaka för att skriva in installationsinformationen pÃ¥ nytt.\r
-    end\r
-  end\r
-end\r
-item: If/While Statement\r
-  Variable=DISPLAY\r
-  Value=Select Destination Directory\r
-end\r
-item: Set Variable\r
-  Variable=BACKUP\r
-  Value=%MAINDIR%\BACKUP\r
-end\r
-item: End Block\r
-end\r
-item: End Block\r
-end\r
-item: If/While Statement\r
-  Variable=DOBACKUP\r
-  Value=A\r
-end\r
-item: Set Variable\r
-  Variable=BACKUPDIR\r
-  Value=%BACKUP%\r
-end\r
-item: End Block\r
-end\r
-item: Open/Close INSTALL.LOG\r
-end\r
-item: Check Disk Space\r
-  Component=COMPONENTS\r
-end\r
-item: Display Graphic\r
-  Pathname=<<<dirs.source>>>\nt\Wise\xemacs-beta.bmp\r
-  X Position=32784\r
-  Y Position=16\r
-end\r
-item: Include Script\r
-  Pathname=%_WISE_%\INCLUDE\uninstal.wse\r
-end\r
-<<<ifblock("COMPONENTS","X")>>>\r
-<<<string.join(map(lambda x:install_file(x[0],x[1],x[2]),filelist.all),"")>>>\r
-<<<endblock()>>>\r
-<<<map(do_category,packages.category_names)>>>\r
-item: Set Variable\r
-  Variable=COMMON\r
-  Value=%COMMON%\r
-  Flags=00010100\r
-end\r
-item: Set Variable\r
-  Variable=MAINDIR\r
-  Value=%MAINDIR%\r
-  Flags=00010100\r
-end\r
-item: Check Configuration\r
-  Flags=10111011\r
-end\r
-item: Get Registry Key Value\r
-  Variable=STARTUPDIR\r
-  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\r
-  Default=%WIN%\Start Menu\Programs\StartUp\r
-  Value Name=StartUp\r
-  Flags=00000010\r
-end\r
-item: Get Registry Key Value\r
-  Variable=DESKTOPDIR\r
-  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\r
-  Default=%WIN%\Desktop\r
-  Value Name=Desktop\r
-  Flags=00000010\r
-end\r
-item: Get Registry Key Value\r
-  Variable=STARTMENUDIR\r
-  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\r
-  Default=%WIN%\Start Menu\r
-  Value Name=Start Menu\r
-  Flags=00000010\r
-end\r
-item: Get Registry Key Value\r
-  Variable=GROUPDIR\r
-  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\r
-  Default=%WIN%\Start Menu\Programs\r
-  Value Name=Programs\r
-  Flags=00000010\r
-end\r
-item: Get Registry Key Value\r
-  Variable=CSTARTUPDIR\r
-  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\r
-  Default=%STARTUPDIR%\r
-  Value Name=Common Startup\r
-  Flags=00000100\r
-end\r
-item: Get Registry Key Value\r
-  Variable=CDESKTOPDIR\r
-  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\r
-  Default=%DESKTOPDIR%\r
-  Value Name=Common Desktop\r
-  Flags=00000100\r
-end\r
-item: Get Registry Key Value\r
-  Variable=CSTARTMENUDIR\r
-  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\r
-  Default=%STARTMENUDIR%\r
-  Value Name=Common Start Menu\r
-  Flags=00000100\r
-end\r
-item: Get Registry Key Value\r
-  Variable=CGROUPDIR\r
-  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\r
-  Default=%GROUPDIR%\r
-  Value Name=Common Programs\r
-  Flags=00000100\r
-end\r
-item: Set Variable\r
-  Variable=CGROUP_SAVE\r
-  Value=%GROUP%\r
-end\r
-item: Set Variable\r
-  Variable=GROUP\r
-  Value=%GROUPDIR%\%GROUP%\r
-end\r
-item: Create Shortcut\r
-  Source=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\runemacs.exe\r
-  Destination=%GROUP%\XEmacs.lnk\r
-  Working Directory=\\r
-  Icon Number=0\r
-end\r
-item: Create Shortcut\r
-  Source=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\runemacs.exe\r
-  Destination=%DESKTOPDIR%\XEmacs.lnk\r
-  Working Directory=\\r
-  Icon Number=0\r
-end\r
-item: Else Statement\r
-end\r
-item: Add ProgMan Icon\r
-  Group=%GROUP%\r
-  Icon Name=XEmacs\r
-  Command Line=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\runemacs.exe\r
-  Default Directory=\\r
-  Flags=01000000\r
-end\r
-item: End Block\r
-end\r
-item: Edit Registry\r
-  Total Keys=16\r
-  item: Key\r
-    Key=SOFTWARE\GNU\XEmacs\r
-    New Value=%MAINDIR%\r
-    Value Name=emacs_dir\r
-    Root=2\r
-  end\r
-  item: Key\r
-    Key=SOFTWARE\GNU\XEmacs\r
-    New Value=%MAINDIR%\xemacs-packages\r
-    Value Name=EMACSPACKAGEPATH\r
-    Root=2\r
-  end\r
-  item: Key\r
-    Key=SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\runemacs.exe\r
-    New Value=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\r
-    Value Name=Path\r
-    Root=2\r
-  end\r
-  item: Key\r
-    Key=SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\xemacs.exe\r
-    New Value=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\r
-    Value Name=Path\r
-    Root=2\r
-  end\r
-  item: Key\r
-    Key=.el\r
-    New Value=elfile\r
-  end\r
-  item: Key\r
-    Key=.el\r
-    New Value=text/plain\r
-    Value Name=Content Type\r
-  end\r
-  item: Key\r
-    Key=elfile\r
-    New Value=Emacs lisp\r
-  end\r
-  item: Key\r
-    Key=elfile\r
-    New Value=00 00 01 00\r
-    Value Name=EditFlags\r
-    Data Type=4\r
-  end\r
-  item: Key\r
-    Key=elfile\DefaultIcon\r
-    New Value=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\runemacs.exe,2\r
-  end\r
-  item: Key\r
-    Key=elfile\QuickView\r
-    New Value=*\r
-  end\r
-  item: Key\r
-    Key=elfile\Shell\r
-    New Value=\r
-  end\r
-  item: Key\r
-    Key=elfile\Shell\open\r
-  end\r
-  item: Key\r
-    Key=elfile\Shell\open\command\r
-    New Value=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\runemacs.exe "%%1"\r
-  end\r
-  item: Key\r
-    Key=elfile\Shell\open\ddeexec\r
-    New Value=open("%%1")\r
-  end\r
-  item: Key\r
-    Key=elfile\Shell\open\ddeexec\Application\r
-    New Value=XEmacs\r
-    New Value=\r
-  end\r
-  item: Key\r
-    Key=elfile\Shell\open\ddeexec\topic\r
-    New Value=System\r
-  end\r
-end\r
-item: Wizard Block\r
-  Direction Variable=DIRECTION\r
-  Display Variable=DISPLAY\r
-  Bitmap Pathname=<<<dirs.source>>>\nt\Wise\gnu.bmp\r
-  X Position=9\r
-  Y Position=10\r
-  Filler Color=8421440\r
-  Flags=00000011\r
-end\r
-item: Custom Dialog Set\r
-  Name=Finished\r
-  Display Variable=DISPLAY\r
-  item: Dialog\r
-    Title=Installation Complete\r
-    Title French=Installation en cours\r
-    Title German=Installation abgeschlossen\r
-    Title Portuguese=Instalação Completa \r
-    Title Spanish=Se ha completado la Instalación\r
-    Title Italian=Installazione completata\r
-    Title Danish=Installation gennemført\r
-    Title Dutch=Installatie afgerond\r
-    Title Norwegian=Installasjonen er fullført\r
-    Title Swedish=Installationen klar\r
-    Width=280\r
-    Height=224\r
-    Font Name=Helv\r
-    Font Size=8\r
-    item: Push Button\r
-      Rectangle=170 185 212 199\r
-      Variable=DIRECTION\r
-      Value=N\r
-      Create Flags=01010000000000010000000000000001\r
-      Text=&Finish >\r
-      Text French=&Terminer>\r
-      Text German=&Fertigstellen>\r
-      Text Portuguese=&Terminar >\r
-      Text Spanish=&Finalizar>\r
-      Text Italian=&Fine >\r
-      Text Danish=&Afslut >\r
-      Text Dutch=&Klaar>\r
-      Text Norwegian=&Avslutt>\r
-      Text Swedish=&Sluta>\r
-    end\r
-    item: Push Button\r
-      Control Name=CANCEL\r
-      Rectangle=222 185 264 199\r
-      Action=3\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=Cancel\r
-      Text French=Annuler\r
-      Text German=Abbrechen\r
-      Text Portuguese=Cancelar\r
-      Text Spanish=Cancelar\r
-      Text Italian=Annulla\r
-      Text Danish=Annuller\r
-      Text Dutch=Annuleren\r
-      Text Norwegian=Avbryt\r
-      Text Swedish=Avbryt\r
-    end\r
-    item: Static\r
-      Rectangle=9 177 263 178\r
-      Action=3\r
-      Create Flags=01010000000000000000000000000111\r
-    end\r
-    item: Static\r
-      Rectangle=90 10 260 63\r
-      Enabled Color=00000000000000001111111111111111\r
-      Create Flags=01010000000000000000000000000000\r
-      Text=%APPTITLE% has been successfully installed.\r
-      Text=\r
-      Text=\r
-      Text=Press the Finish button to exit this installation.\r
-      Text=\r
-      Text French=L'installation de %APPTITLE% est réussie\r
-      Text French=\r
-      Text French=\r
-      Text French=Cliquez sur Terminer pour quitter cette installation\r
-      Text French=\r
-      Text German=%APPTITLE% wurde erfolgreich installiert.\r
-      Text German=\r
-      Text German=\r
-      Text German=Zum Beenden dieser Installation Fertigstellen anklicken.\r
-      Text German=\r
-      Text Portuguese=%APPTITLE% foi instalado com Ãªxito\r
-      Text Portuguese=\r
-      Text Portuguese=\r
-      Text Portuguese=Pressionar o botão Terminar para sair desta instalação\r
-      Text Portuguese=\r
-      Text Spanish=%APPTITLE% se ha instalado con Ã©xito.\r
-      Text Spanish=\r
-      Text Spanish=\r
-      Text Spanish=Pulse el botón de Finalizar para salir de esta instalación.\r
-      Text Spanish=\r
-      Text Italian=%APPTITLE% Ã¨ stato installato.\r
-      Text Italian=\r
-      Text Italian=\r
-      Text Italian=Premi il pulsante Fine per uscire dal programma di installazione\r
-      Text Italian=\r
-      Text Danish=%APPTITLE% er nu installeret korrekt.\r
-      Text Danish=\r
-      Text Danish=\r
-      Text Danish=Klik pÃ¥ Afslut for at afslutte installationen.\r
-      Text Danish=\r
-      Text Dutch=%APPTITLE% is met succes geïnstalleerd.\r
-      Text Dutch=\r
-      Text Dutch=\r
-      Text Dutch=Druk op Klaar om deze installatie af te ronden.\r
-      Text Dutch=\r
-      Text Norwegian=Installasjonen av %APPTITLE% er suksessfull.\r
-      Text Norwegian=\r
-      Text Norwegian=\r
-      Text Norwegian=Trykk pÃ¥ Avslutt-tasten for Ã¥ avslutte denne installasjonen.\r
-      Text Norwegian=\r
-      Text Swedish=Installationen av %APPTITLE% har lyckats.\r
-      Text Swedish=\r
-      Text Swedish=\r
-      Text Swedish=Tryck pÃ¥ Sluta för att gÃ¥ ur installationsprogrammet.\r
-      Text Swedish=\r
-    end\r
-    item: Push Button\r
-      Control Name=BACK\r
-      Rectangle=128 185 170 199\r
-      Variable=DIRECTION\r
-      Value=B\r
-      Create Flags=01010000000000010000000000000000\r
-      Text=< &Back\r
-      Text French=<&Retour\r
-      Text German=<&Zurück\r
-      Text Portuguese=<&Retornar\r
-      Text Spanish=<&Retroceder\r
-      Text Italian=< &Indietro\r
-      Text Danish=<&Tilbage\r
-      Text Dutch=<&Terug\r
-      Text Norwegian=<&Tilbake\r
-      Text Swedish=< &Tillbaka\r
-    end\r
-    item: Set Control Attribute\r
-      Control Name=BACK\r
-      Operation=1\r
-    end\r
-    item: Set Control Attribute\r
-      Control Name=CANCEL\r
-      Operation=1\r
-    end\r
-  end\r
-end\r
-item: End Block\r
-end\r
-item: New Event\r
-  Name=Cancel\r
-end\r
-item: Include Script\r
-  Pathname=%_WISE_%\INCLUDE\rollback.wse\r
-end\r
+Document Type: WSE
+item: Global
+  Version=7.0
+  Title=<<<version.title + " Installation">>>
+  Flags=00000100
+  Languages=65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+  Japanese Font Name=MS Gothic
+  Japanese Font Size=10
+  Progress Bar DLL=%_WISE_%\Progress\WIZ%_EXE_OS_TYPE_%.DLL
+  Start Gradient=0 0 255
+  End Gradient=0 0 0
+  Windows Flags=00000100000000010010110000001000
+  Log Pathname=%MAINDIR%\INSTALL.LOG
+  Message Font=MS Sans Serif
+  Font Size=8
+  Disk Filename=SETUP
+  Patch Flags=0000000000000001
+  Patch Threshold=85
+  Patch Memory=4000
+  FTP Cluster Size=20
+  Dialogs Version=6
+  Variable Name1=_SYS_
+  Variable Default1=C:\WINDOWS\SYSTEM
+  Variable Flags1=00001000
+  Variable Name2=_WISE_
+  Variable Default2=C:\PROGRAM FILES\WISE INSTALLBUILDER
+  Variable Flags2=00001000
+end
+item: Get Temporary Filename
+  Variable=READMEFILE
+end
+item: Install File
+  Source=<<<dirs.source>>>\nt\Wise\Copying.txt
+  Destination=%TEMP%\%READMEFILE%
+  Flags=0000000000100010
+end
+item: Open/Close INSTALL.LOG
+  Flags=00000001
+end
+item: Check if File/Dir Exists
+  Pathname=%SYS%
+  Flags=10000100
+end
+item: Set Variable
+  Variable=SYS
+  Value=%WIN%
+end
+item: End Block
+end
+item: Set Variable
+  Variable=APPTITLE
+  Value=<<<version.title>>>
+  Flags=10000000
+end
+item: Set Variable
+  Variable=GROUP
+  Value=XEmacs
+  Flags=10000000
+end
+item: Set Variable
+  Variable=DISABLED
+  Value=!
+end
+item: Set Variable
+  Variable=MAINDIR
+  Value=XEmacs
+  Flags=10000000
+end
+item: Check Configuration
+  Flags=10111011
+end
+item: Get Registry Key Value
+  Variable=COMMON
+  Key=SOFTWARE\Microsoft\Windows\CurrentVersion
+  Default=C:\Program Files\Common Files
+  Value Name=CommonFilesDir
+  Flags=00000100
+end
+item: Get Registry Key Value
+  Variable=PROGRAM_FILES
+  Key=SOFTWARE\Microsoft\Windows\CurrentVersion
+  Default=C:\Program Files
+  Value Name=ProgramFilesDir
+  Flags=00000100
+end
+item: Set Variable
+  Variable=MAINDIR
+  Value=%PROGRAM_FILES%\%MAINDIR%
+  Flags=00001100
+end
+item: Set Variable
+  Variable=EXPLORER
+  Value=1
+end
+item: Else Statement
+end
+item: Set Variable
+  Variable=MAINDIR
+  Value=C:\%MAINDIR%
+  Flags=00001100
+end
+item: End Block
+end
+item: Set Variable
+  Variable=BACKUP
+  Value=%MAINDIR%\BACKUP
+  Flags=10000000
+end
+item: Set Variable
+  Variable=DOBACKUP
+  Value=B
+  Flags=10000000
+end
+item: Set Variable
+  Variable=COMPONENTS
+  Value=ACE
+  Flags=10000000
+end
+<<<set_category_defaults()>>>
+item: Wizard Block
+  Direction Variable=DIRECTION
+  Display Variable=DISPLAY
+  Bitmap Pathname=<<<dirs.source>>>\nt\Wise\gnu.bmp
+  X Position=9
+  Y Position=10
+  Filler Color=8421440
+  Dialog=Select Program Manager Group
+  Dialog=Select Backup Directory
+  Dialog=Display Registration Information
+  Dialog=Get Registration Information
+  Variable=EXPLORER
+  Variable=DOBACKUP
+  Variable=DOBRAND
+  Variable=DOBRAND
+  Value=1
+  Value=A
+  Value=1
+  Value=1
+  Compare=0
+  Compare=1
+  Compare=0
+  Compare=1
+  Flags=00000011
+end
+item: Custom Dialog Set
+  Name=Welcome
+  Display Variable=DISPLAY
+  item: Dialog
+    Title=Welcome
+    Title French=Bienvenue
+    Title German=Willkommen
+    Title Portuguese=Bem-vindo 
+    Title Spanish=Bienvenido
+    Title Italian=Benvenuto
+    Title Danish=Velkommen
+    Title Dutch=Welkom
+    Title Norwegian=Velkommen
+    Title Swedish=Välkommen
+    Width=280
+    Height=224
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=172 185 214 199
+      Variable=DIRECTION
+      Value=N
+      Create Flags=01010000000000010000000000000001
+      Text=&Next >
+      Text French=&Suivant>
+      Text German=&Weiter>
+      Text Portuguese=&Próximo>
+      Text Spanish=&Siguiente >
+      Text Italian=&Avanti >
+      Text Danish=&Næste>
+      Text Dutch=&Volgende>
+      Text Norwegian=&Neste>
+      Text Swedish=&Nästa >
+    end
+    item: Push Button
+      Rectangle=222 185 264 199
+      Action=3
+      Create Flags=01010000000000010000000000000000
+      Text=Cancel
+      Text French=Annuler
+      Text German=Abbrechen
+      Text Portuguese=Cancelar
+      Text Spanish=Cancelar
+      Text Italian=Annulla
+      Text Danish=Annuller
+      Text Dutch=Annuleren
+      Text Norwegian=Avbryt
+      Text Swedish=Avbryt
+    end
+    item: Static
+      Rectangle=9 177 263 178
+      Action=3
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Static
+      Rectangle=91 22 245 118
+      Enabled Color=00000000000000001111111111111111
+      Create Flags=01010000000000000000000000000000
+      Text=<<<version.welcome>>>
+    end
+  end
+end
+item: Custom Dialog Set
+  Name=Display ReadMe
+  Display Variable=DISPLAY
+  item: Dialog
+    Title=Read Me File
+    Title French=Fichier Lisez-moi
+    Title German=Liesmich-Datei
+    Title Portuguese=Ficheiro Leia-me
+    Title Spanish=Archivo Léeme
+    Title Italian=File Leggimi
+    Title Danish=Vigtigt fil
+    Title Dutch=Leesmij-bestand
+    Title Norwegian=Informasjonsfil
+    Title Swedish=Läs mig-fil
+    Width=280
+    Height=224
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=172 185 214 199
+      Variable=DIRECTION
+      Value=N
+      Create Flags=01010000000000010000000000000001
+      Text=I &Agree >
+      Text French=&Suivant>
+      Text German=&Weiter>
+      Text Portuguese=&Próximo>
+      Text Spanish=&Siguiente >
+      Text Italian=&Avanti >
+      Text Danish=&Næste>
+      Text Dutch=&Volgende>
+      Text Norwegian=&Neste>
+      Text Swedish=&Nästa >
+    end
+    item: Push Button
+      Rectangle=222 185 264 199
+      Action=3
+      Create Flags=01010000000000010000000000000000
+      Text=Cancel
+      Text French=Annuler
+      Text German=Abbrechen
+      Text Portuguese=Cancelar
+      Text Spanish=Cancelar
+      Text Italian=Annulla
+      Text Danish=Slet
+      Text Dutch=Annuleren
+      Text Norwegian=Avbryt
+      Text Swedish=Avbryt
+    end
+    item: Static
+      Rectangle=9 177 263 178
+      Action=3
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Editbox
+      Rectangle=85 11 254 170
+      Value=%TEMP%\%READMEFILE%
+      Help Context=16711681
+      Create Flags=01010000101000000000100000000100
+    end
+  end
+end
+item: Custom Dialog Set
+  Name=Select Destination Directory
+  Display Variable=DISPLAY
+  item: Dialog
+    Title=Choose Destination Location
+    Title French=Choisissez la localisation de destination
+    Title German=Zielpfad wählen
+    Title Portuguese=Escolher Local de Destino
+    Title Spanish=Elegir una localización de destino
+    Title Italian=Scegli Posizione di Destinazione
+    Title Danish=Vælg destinationsmappe
+    Title Dutch=Kies doellocatie
+    Title Norwegian=Velg mÃ¥lplassering
+    Title Swedish=Välj ställe för installationen
+    Width=280
+    Height=224
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=172 185 214 199
+      Variable=DIRECTION
+      Value=N
+      Create Flags=01010000000000010000000000000001
+      Text=&Next >
+      Text French=&Suivant>
+      Text German=&Weiter>
+      Text Portuguese=&Próximo>
+      Text Spanish=&Siguiente >
+      Text Italian=&Avanti >
+      Text Danish=&Næste>
+      Text Dutch=&Volgende>
+      Text Norwegian=&Neste>
+      Text Swedish=&Nästa >
+    end
+    item: Push Button
+      Rectangle=130 185 172 199
+      Variable=DIRECTION
+      Value=B
+      Create Flags=01010000000000010000000000000000
+      Flags=0000000000000001
+      Text=< &Back
+      Text French=<&Retour
+      Text German=<&Zurück
+      Text Portuguese=<&Retornar
+      Text Spanish=<&Retroceder
+      Text Italian=< &Indietro
+      Text Danish=<&Tilbage
+      Text Dutch=<&Terug
+      Text Norwegian=<&Tilbake
+      Text Swedish=< &Tillbaka
+    end
+    item: Push Button
+      Rectangle=222 185 264 199
+      Action=3
+      Create Flags=01010000000000010000000000000000
+      Text=Cancel
+      Text French=Annuler
+      Text German=Abbrechen
+      Text Portuguese=Cancelar
+      Text Spanish=Cancelar
+      Text Italian=Annulla
+      Text Danish=Annuller
+      Text Dutch=Annuleren
+      Text Norwegian=Avbryt
+      Text Swedish=Avbryt
+    end
+    item: Static
+      Rectangle=9 177 263 178
+      Action=3
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Static
+      Rectangle=90 10 260 122
+      Create Flags=01010000000000000000000000000000
+      Text=Setup will install %APPTITLE% in the following folder.
+      Text=
+      Text=To install into a different folder, click Browse, and select another folder. 
+      Text=
+      Text=You can choose not to install %APPTITLE% by clicking Cancel to exit Setup.
+      Text French=%APPTITLE% va Ãªtre installé dans le répertoire ci-dessous
+      Text French=
+      Text French=Pour l'installer dans un répertoire différent, cliquez sur Parcourir et sélectionnez un autre répertoire
+      Text French=
+      Text French=Vous pouvez choisir de ne pas installer %APPTITLE% en cliquant sur Annuler pour quitter l'Installation
+      Text German=Installation speichert %APPTITLE% im unten angegebenen Ordner:
+      Text German=
+      Text German=Zur Installation in einem anderen Ordner auf Blättern klicken und einen anderen Ordner wählen.
+      Text German=
+      Text German=Wenn Sie %APPTITLE% nicht installieren möchten, können Sie durch Klicken auf Abbrechen die Installation beenden.
+      Text Portuguese=Configuração instalará %APPTITLE% na seguinte pasta
+      Text Portuguese=
+      Text Portuguese=Para instalar numa pasta diferente, faça um clique sobre Procurar, e seleccione uma outra pasta.
+      Text Portuguese=
+      Text Portuguese=Pode escolher não instalar %APPTITLE% clicando no botão Cancelar para sair da Configuração
+      Text Spanish=El programa de Configuración instalará %APPTITLE% en la siguiente carpeta.
+      Text Spanish=
+      Text Spanish=Para instalar en una carpeta diferente, haga un clic en Visualizar, y seleccione otra carpeta.
+      Text Spanish=
+      Text Spanish=Puede elegir no instalar %APPTITLE% haciendo un clic en Cancelar para salir de Configuración.
+      Text Italian=Il programma di installazione installerà %APPTITLE% nella seguente cartella.
+      Text Italian=
+      Text Italian=Per effettuare l\92installazione in una cartella diversa, fai clic su Sfoglia, e scegli un\92altra cartella.
+      Text Italian=
+      Text Italian=Puoi scegliere di non installare %APPTITLE% facendo clic su Annulla per uscire dal programma di installazione
+      Text Danish=Installationsprogrammet installerer %APPTITLE% i denne mappe.
+      Text Danish=
+      Text Danish=Man installerer i en anden mappe ved at klikke pÃ¥ Browse og vælge en anden mappe.
+      Text Danish=
+      Text Danish=Man kan vælge ikke at installere %APPTITLE% ved at klikke pÃ¥ Slet og forlade installationsprogrammet.
+      Text Dutch=Het installatieprogramma installeert %APPTITLE% in de volgende directory.
+      Text Dutch=
+      Text Dutch=Als u het in een andere directory wilt installeren, klik dan op Bladeren en kies een andere locatie.
+      Text Dutch=
+      Text Dutch=U kunt ervoor kiezen om %APPTITLE% niet te installeren: klik op Annuleren om het installatieprogramma te verlaten.
+      Text Norwegian=Oppsett vil installere %APPTITLE% i følgende mappe.
+      Text Norwegian=
+      Text Norwegian=For Ã¥ installere i en annen mappe, klikk Bla igjennom og velg en annen mappe.
+      Text Norwegian=
+      Text Norwegian=Du kan velge Ã¥ ikke installere %APPTITLE% ved Ã¥ velge Avbryt for Ã¥ gÃ¥ ut av Oppsett.
+      Text Swedish=Installationsprogrammet installerar %APPTITLE% i följande mapp.
+      Text Swedish=
+      Text Swedish=Om du vill att installationen ska göras i en annan mapp, klickar du pÃ¥ Bläddra och väljer en annan mapp.
+      Text Swedish=
+      Text Swedish=Du kan välja att inte installera %APPTITLE% genom att klicka pÃ¥ Avbryt för att lämna installationsprogrammet.
+    end
+    item: Static
+      Rectangle=90 134 260 162
+      Action=1
+      Create Flags=01010000000000000000000000000111
+      Text=Destination Folder
+      Text French=Répertoire de destination
+      Text German=Zielordner
+      Text Portuguese=Pasta de Destino
+      Text Spanish=Carpeta de Destino
+      Text Italian=Cartella di destinazione
+      Text Danish=Destinationsmappe
+      Text Dutch=Doeldirectory
+      Text Norwegian=MÃ¥lmappe
+      Text Swedish=Destinationsmapp
+    end
+    item: Push Button
+      Rectangle=213 143 255 157
+      Variable=MAINDIR_SAVE
+      Value=%MAINDIR%
+      Destination Dialog=1
+      Action=2
+      Create Flags=01010000000000010000000000000000
+      Text=B&rowse...
+      Text French=P&arcourir
+      Text German=B&lättern...
+      Text Portuguese=P&rocurar
+      Text Spanish=V&isualizar...
+      Text Italian=Sfoglia...
+      Text Danish=&Gennemse...
+      Text Dutch=B&laderen...
+      Text Norwegian=Bla igjennom
+      Text Swedish=&Bläddra
+    end
+    item: Static
+      Rectangle=95 146 211 157
+      Destination Dialog=2
+      Create Flags=01010000000000000000000000000000
+      Text=%MAINDIR%
+      Text French=%MAINDIR%
+      Text German=%MAINDIR%
+      Text Portuguese=%MAINDIR%
+      Text Spanish=%MAINDIR%
+      Text Italian=%MAINDIR%
+      Text Danish=%MAINDIR%
+      Text Dutch=%MAINDIR%
+      Text Norwegian=%MAINDIR%
+      Text Swedish=%MAINDIR%
+    end
+  end
+  item: Dialog
+    Title=Select Destination Directory
+    Title French=Choisissez le répertoire de destination
+    Title German=Zielverzeichnis wählen
+    Title Portuguese=Seleccionar Directório de Destino
+    Title Spanish=Seleccione el Directorio de Destino
+    Title Italian=Seleziona Directory di destinazione
+    Title Danish=Vælg Destinationsbibliotek
+    Title Dutch=Kies doeldirectory
+    Title Norwegian=Velg mÃ¥lkatalog
+    Title Swedish=Välj destinationskalatog
+    Width=221
+    Height=173
+    Font Name=Helv
+    Font Size=8
+    item: Listbox
+      Rectangle=5 2 160 149
+      Variable=MAINDIR
+      Create Flags=01010000100000010000000101000000
+      Flags=0000110000100010
+      Text=%MAINDIR%
+      Text French=%MAINDIR%
+      Text German=%MAINDIR%
+      Text Portuguese=%MAINDIR%
+      Text Spanish=%MAINDIR%
+      Text Italian=%MAINDIR%
+      Text Danish=%MAINDIR%
+      Text Dutch=%MAINDIR%
+      Text Norwegian=%MAINDIR%
+      Text Swedish=%MAINDIR%
+    end
+    item: Push Button
+      Rectangle=167 6 212 21
+      Create Flags=01010000000000010000000000000001
+      Text=OK
+      Text French=OK
+      Text German=OK
+      Text Portuguese=OK
+      Text Spanish=ACEPTAR
+      Text Italian=OK
+      Text Danish=OK
+      Text Dutch=OK
+      Text Norwegian=OK
+      Text Swedish=OK
+    end
+    item: Push Button
+      Rectangle=167 25 212 40
+      Variable=MAINDIR
+      Value=%MAINDIR_SAVE%
+      Create Flags=01010000000000010000000000000000
+      Flags=0000000000000001
+      Text=Cancel
+      Text French=Annuler
+      Text German=Abbrechen 
+      Text Portuguese=Cancelar
+      Text Spanish=Cancelar
+      Text Italian=Annulla
+      Text Danish=Slet
+      Text Dutch=Annuleren
+      Text Norwegian=Avbryt
+      Text Swedish=Avbryt
+    end
+  end
+end
+item: Custom Dialog Set
+  Name=Select Packages
+  Display Variable=DISPLAY
+  item: Dialog
+    Title=Select Packages
+    Width=271
+    Height=224
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=150 187 195 202
+      Variable=DIRECTION
+      Value=N
+      Create Flags=01010000000000010000000000000001
+      Text=&Next >
+      Text French=&Suite >
+      Text German=&Weiter >
+      Text Spanish=&Siguiente >
+      Text Italian=&Avanti >
+    end
+    item: Push Button
+      Rectangle=105 187 150 202
+      Variable=DIRECTION
+      Value=B
+      Create Flags=01010000000000010000000000000000
+      Text=< &Back
+      Text French=< &Retour
+      Text German=< &Zurück
+      Text Spanish=< &Atrás
+      Text Italian=< &Indietro
+    end
+    item: Push Button
+      Rectangle=211 187 256 202
+      Action=3
+      Create Flags=01010000000000010000000000000000
+      Text=&Cancel
+      Text French=&Annuler
+      Text German=&Abbrechen
+      Text Spanish=&Cancelar
+      Text Italian=&Annulla
+    end
+    item: Static
+      Rectangle=8 180 256 181
+      Action=3
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Static
+      Rectangle=86 8 258 28
+      Create Flags=01010000000000000000000000000000
+      Flags=0000000000000001
+      Name=Times New Roman
+      Font Style=-24 0 0 0 700 255 0 0 0 3 2 1 18
+      Text=Select Packages
+      Text French=Sélectionner les composants
+      Text German=Komponenten auswählen
+      Text Spanish=Seleccione componentes
+      Text Italian=Selezionare i componenti
+    end
+    item: Checkbox
+      Rectangle=83 62 211 146
+      Variable=COMPONENTS LIBS,COMM,OA,OS,PROG,WP,GAMES
+      Create Flags=01010000000000010000000000000011
+      Flags=0000000000000110
+      Text=Libraries
+      Text=Communication
+      Text=Productivity
+      Text=Operating System
+      Text=Programming
+      Text=Word Processing
+      Text=Games and Amusements
+      Text=
+    end
+    item: Static
+      Rectangle=194 162 242 172
+      Variable=COMPONENTS, LIBS, COMM, OA, OS, PROG, WP, GAMES
+      Value=MAINDIR
+      Create Flags=01010000000000000000000000000010
+    end
+    item: Static
+      Rectangle=194 153 242 162
+      Variable=COMPONENTS, LIBS, COMM, OA, OS, PROG, WP, GAMES
+      Create Flags=01010000000000000000000000000010
+    end
+    item: Static
+      Rectangle=107 153 196 164
+      Create Flags=01010000000000000000000000000000
+      Text=Disk Space Required:
+      Text French=Espace disque requis :
+      Text German=Notwendiger Speicherplatz:
+      Text Spanish=Espacio requerido en el disco:
+      Text Italian=Spazio su disco necessario:
+    end
+    item: Static
+      Rectangle=107 162 196 172
+      Create Flags=01010000000000000000000000000000
+      Text=Disk Space Remaining:
+      Text French=Espace disque disponible :
+      Text German=Verbleibender Speicherplatz:
+      Text Spanish=Espacio en disco disponible:
+      Text Italian=Spazio su disco disponibile:
+    end
+    item: Static
+      Rectangle=80 146 256 175
+      Action=1
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Static
+      Rectangle=83 30 256 57
+      Create Flags=01010000000000000000000000000000
+      Text=Choose which package categories to install by checking the boxes below. Press the Options buttons to select individual packages.
+      Text French=Choisissez les composants que vous voulez installer en cochant les cases ci-dessous.
+      Text German=Wählen Sie die zu installierenden Komponenten, indem Sie in die entsprechenden Kästchen klicken.
+      Text Spanish=Elija los componentes que desee instalar marcando los cuadros de abajo.
+      Text Italian=Scegliere quali componenti installare selezionando le caselle sottostanti.
+    end
+    item: Push Button
+      Rectangle=230 62 254 72
+      Variable=LIBS_SAVE
+      Value=%LIBS%
+      Destination Dialog=1
+      Action=2
+      Create Flags=01010000000000010000000000000000
+      Text=Options
+      Text French=&Annuler
+      Text German=&Abbrechen
+      Text Spanish=&Cancelar
+      Text Italian=&Annulla
+    end
+    item: Push Button
+      Rectangle=230 74 254 84
+      Variable=COMM_SAVE
+      Value=%COMM%
+      Destination Dialog=2
+      Action=2
+      Create Flags=01010000000000010000000000000000
+      Text=Options
+      Text French=&Annuler
+      Text German=&Abbrechen
+      Text Spanish=&Cancelar
+      Text Italian=&Annulla
+    end
+    item: Push Button
+      Rectangle=230 86 254 96
+      Variable=OA_SAVE
+      Value=%OA%
+      Destination Dialog=3
+      Action=2
+      Create Flags=01010000000000010000000000000000
+      Text=Options
+      Text French=&Annuler
+      Text German=&Abbrechen
+      Text Spanish=&Cancelar
+      Text Italian=&Annulla
+    end
+    item: Push Button
+      Rectangle=230 98 254 108
+      Variable=OS_SAVE
+      Value=%OS%
+      Destination Dialog=4
+      Action=2
+      Create Flags=01010000000000010000000000000000
+      Text=Options
+      Text French=&Annuler
+      Text German=&Abbrechen
+      Text Spanish=&Cancelar
+      Text Italian=&Annulla
+    end
+    item: Push Button
+      Rectangle=230 110 254 120
+      Variable=PROG_SAVE
+      Value=%PROG%
+      Destination Dialog=5
+      Action=2
+      Create Flags=01010000000000010000000000000000
+      Text=Options
+      Text French=&Annuler
+      Text German=&Abbrechen
+      Text Spanish=&Cancelar
+      Text Italian=&Annulla
+    end
+    item: Push Button
+      Rectangle=230 122 254 132
+      Variable=WP_SAVE
+      Value=%WP%
+      Destination Dialog=6
+      Action=2
+      Create Flags=01010000000000010000000000000000
+      Text=Options
+      Text French=&Annuler
+      Text German=&Abbrechen
+      Text Spanish=&Cancelar
+      Text Italian=&Annulla
+    end
+    item: Push Button
+      Rectangle=230 134 254 144
+      Variable=GAMES_SAVE
+      Value=%GAMES%
+      Destination Dialog=7
+      Action=2
+      Create Flags=01010000000000010000000000000000
+      Text=Options
+      Text French=&Annuler
+      Text German=&Abbrechen
+      Text Spanish=&Cancelar
+      Text Italian=&Annulla
+    end
+    item: Set Variable
+      Variable=COMPONENTS
+      Value=X
+      Flags=00000001
+    end
+  end
+<<<string.join(map(category_dialog,packages.category_names),"")>>>
+end
+item: Custom Dialog Set
+  Name=Select Program Manager Group
+  Display Variable=DISPLAY
+  item: Dialog
+    Title=Select Program Manager Group
+    Title French=Sélectionnez le Groupe du Gestionnaire de Programmes
+    Title German=Programm-Managergruppe wählen
+    Title Portuguese=Seleccionar o Grupo Gestor de Programas
+    Title Spanish=Seleccione el Grupo del Administrador del Programa
+    Title Italian=Seleziona il gruppo Program Manager
+    Title Danish=Vælg Programstyringsgruppen
+    Title Dutch=Kies Programmabeheergroep.
+    Title Norwegian=Velg Programbehandlingsgruppen
+    Title Swedish=Välj grupp i Programhanteraren
+    Width=280
+    Height=224
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=172 185 214 199
+      Variable=DIRECTION
+      Value=N
+      Create Flags=01010000000000010000000000000001
+      Text=&Next >
+      Text French=&Suivant>
+      Text German=&Weiter>
+      Text Portuguese=&Próximo>
+      Text Spanish=&Siguiente >
+      Text Italian=&Avanti >
+      Text Danish=&Næste>
+      Text Dutch=&Volgende>
+      Text Norwegian=&Neste>
+      Text Swedish=&Nästa >
+    end
+    item: Push Button
+      Rectangle=130 185 172 199
+      Variable=DIRECTION
+      Value=B
+      Create Flags=01010000000000010000000000000000
+      Flags=0000000000000001
+      Text=< &Back
+      Text French=<&Retour
+      Text German=<&Zurück
+      Text Portuguese=<&Retornar
+      Text Spanish=<&Retroceder
+      Text Italian=< &Indietro
+      Text Danish=<&Back
+      Text Dutch=<&Terug
+      Text Norwegian=<&Tilbake
+      Text Swedish=< &Tillbaka
+    end
+    item: Push Button
+      Rectangle=222 185 264 199
+      Action=3
+      Create Flags=01010000000000010000000000000000
+      Text=Cancel
+      Text French=Annuler
+      Text German=Abbrechen
+      Text Portuguese=Cancelar
+      Text Spanish=Cancelar
+      Text Italian=Annulla
+      Text Danish=Slet
+      Text Dutch=Annuleren
+      Text Norwegian=Avbryt
+      Text Swedish=Avbryt
+    end
+    item: Static
+      Rectangle=9 177 263 178
+      Action=3
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Static
+      Rectangle=90 10 260 38
+      Create Flags=01010000000000000000000000000000
+      Text=Enter the name of the Program Manager group to add %APPTITLE% icons to:
+      Text French=Entrez le nom du groupe du Gestionnaire de Programmes où placer les icônes %APPTITLE% Ã  :
+      Text German=Den Namen der Programm-Managergruppe wählen, in der die %APPTITLE%-Symbole gespeichert werden sollen:
+      Text Portuguese=Introduzir o nome do Grupo Gestor de Programa para acrescentar os Ã­cones %APPTITLE% para:
+      Text Spanish=Introduzca el nombre del grupo del Administrador del Programa para añadir los iconos %APPTITLE para:
+      Text Italian=Inserisci il nome del gruppo Program Manager per aggiungere le icone di %APPTITLE% a:
+      Text Danish=Indtast navnet pÃ¥ Programstyringsgruppen der skal tilføjes %APPTITLE% elementer:
+      Text Dutch=Breng de naam van de programmabeheergroep in waaraan u %APPTITLE%-pictogrammen wilt toevoegen.
+      Text Norwegian=Tast inn navnet pÃ¥ programbehandlingsgruppen for Ã¥ legge %APPTITLE%-ikoner til:
+      Text Swedish=Skriv in namnet pÃ¥ den grupp i Programhanteraren där du vill ha ikonerna för %APPTITLE%:
+    end
+    item: Combobox
+      Rectangle=90 42 260 148
+      Variable=GROUP
+      Create Flags=01010000001000010000001100000001
+      Flags=0000000000000001
+      Text=%GROUP%
+      Text=
+      Text French=%GROUP%
+      Text French=
+      Text German=%GROUP%
+      Text German=
+      Text Portuguese=%GROUP%
+      Text Portuguese=
+      Text Spanish=%GROUP%
+      Text Spanish=
+      Text Italian=%GROUP%
+      Text Italian=
+      Text Danish=%GROUP%
+      Text Danish=
+      Text Dutch=%GROUP%
+      Text Dutch=
+      Text Norwegian=%GROUP%
+      Text Norwegian=
+      Text Swedish=%GROUP%
+      Text Swedish=
+    end
+  end
+end
+item: Custom Dialog Set
+  Name=Start Installation
+  Display Variable=DISPLAY
+  item: Dialog
+    Title=Start Installation
+    Title French=Commencer l'installation
+    Title German=Installation beginnen
+    Title Portuguese=Iniciar Instalação
+    Title Spanish=Comenzar la Instalación
+    Title Italian=Avvia Installazione
+    Title Danish=Start installationen
+    Title Dutch=Start de installatie.
+    Title Norwegian=Start installeringen
+    Title Swedish=Starta installationen
+    Width=280
+    Height=224
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=172 185 214 199
+      Variable=DIRECTION
+      Value=N
+      Create Flags=01010000000000010000000000000001
+      Text=&Next >
+      Text French=&Suivant>
+      Text German=&Weiter>
+      Text Portuguese=&Próximo>
+      Text Spanish=&Siguiente >
+      Text Italian=&Avanti >
+      Text Danish=&Næste>
+      Text Dutch=&Volgende>
+      Text Norwegian=&Neste>
+      Text Swedish=&Nästa >
+    end
+    item: Push Button
+      Rectangle=130 185 172 199
+      Variable=DIRECTION
+      Value=B
+      Create Flags=01010000000000010000000000000000
+      Text=< &Back
+      Text French=<&Retour
+      Text German=<&Zurück
+      Text Portuguese=<&Retornar
+      Text Spanish=<&Retroceder
+      Text Italian=< &Indietro
+      Text Danish=<&Tilbage
+      Text Dutch=<&Terug
+      Text Norwegian=<&Tilbake
+      Text Swedish=< &Tillbaka
+    end
+    item: Push Button
+      Rectangle=222 185 264 199
+      Action=3
+      Create Flags=01010000000000010000000000000000
+      Text=Cancel
+      Text French=Annuler
+      Text German=Abbrechen
+      Text Portuguese=Cancelar
+      Text Spanish=Cancelar
+      Text Italian=Annulla
+      Text Danish=Annuller
+      Text Dutch=Annuleren
+      Text Norwegian=Avbryt
+      Text Swedish=Avbryt
+    end
+    item: Static
+      Rectangle=9 177 263 178
+      Action=3
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Static
+      Rectangle=90 10 260 70
+      Create Flags=01010000000000000000000000000000
+      Text=You are now ready to install %APPTITLE%.
+      Text=
+      Text=Press the Next button to begin the installation or the Back button to reenter the installation information.
+      Text French=Vous Ãªtes maintenant prêt Ã  installer %APPTITLE%
+      Text French=
+      Text French=Cliquez sur Suivant pour commencer l'installation ou Retour pour entrer Ã  nouveau les informations d'installation
+      Text German=Sie sind jetzt zur Installation von %APPTITLE% bereit.
+      Text German=
+      Text German=Auf die Schaltfläche Weiter klicken, um mit dem Start der Installation zu beginnen, oder auf die Schaltfläche Zurück, um die Installationsinformationen nochmals aufzurufen.
+      Text Portuguese=Está agora pronto para instalar %APPTITLE%
+      Text Portuguese=
+      Text Portuguese=Pressione o botão Próximo para começar a instalação ou o botão Retornar para introduzir novamente a informação sobre a instalação
+      Text Spanish=Ahora estará listo para instalar %APPTITLE%.
+      Text Spanish=
+      Text Spanish=Pulse el botón de Próximo para comenzar la instalación o el botón Retroceder para volver a introducir la información sobre la instalación.
+      Text Italian=Sei pronto ad installare %APPTITLE%.
+      Text Italian=
+      Text Italian=Premi il tasto Avanti per iniziare l\92installazione o il tasto Indietro per rientrare nuovamente nei dati sull\92installazione
+      Text Danish=Du er nu klar til at installere %APPTITLE%.
+      Text Danish=
+      Text Danish=Klik pÃ¥ Næste for at starte installationen eller pÃ¥ Tilbage for at Ã¦ndre installationsoplysningerne.
+      Text Dutch=U bent nu klaar om %APPTITLE% te installeren.
+      Text Dutch=
+      Text Dutch=Druk op Volgende om met de installatie te beginnen of op Terug om de installatie-informatie opnieuw in te voeren.
+      Text Norwegian=Du er nÃ¥ klar til Ã¥ installere %APPTITLE%
+      Text Norwegian=
+      Text Norwegian=Trykk pÃ¥ Neste-tasten for Ã¥ starte installeringen, eller Tilbake-tasten for Ã¥ taste inn installasjonsinformasjonen pÃ¥ nytt.
+      Text Swedish=Du Ã¤r nu redo att installera %APPTITLE%.
+      Text Swedish=
+      Text Swedish=Tryck pÃ¥ Nästa för att starta installationen eller pÃ¥ Tillbaka för att skriva in installationsinformationen pÃ¥ nytt.
+    end
+  end
+end
+item: If/While Statement
+  Variable=DISPLAY
+  Value=Select Destination Directory
+end
+item: Set Variable
+  Variable=BACKUP
+  Value=%MAINDIR%\BACKUP
+end
+item: End Block
+end
+item: End Block
+end
+item: If/While Statement
+  Variable=DOBACKUP
+  Value=A
+end
+item: Set Variable
+  Variable=BACKUPDIR
+  Value=%BACKUP%
+end
+item: End Block
+end
+item: Open/Close INSTALL.LOG
+end
+item: Check Disk Space
+  Component=COMPONENTS
+end
+item: Display Graphic
+  Pathname=<<<dirs.source>>>\nt\Wise\xemacs-beta.bmp
+  X Position=32784
+  Y Position=16
+end
+item: Include Script
+  Pathname=%_WISE_%\INCLUDE\uninstal.wse
+end
+<<<ifblock("COMPONENTS","X")>>>
+<<<string.join(map(lambda x:install_file(x[0],x[1],x[2]),filelist.all),"")>>>
+<<<endblock()>>>
+<<<map(do_category,packages.category_names)>>>
+item: Set Variable
+  Variable=COMMON
+  Value=%COMMON%
+  Flags=00010100
+end
+item: Set Variable
+  Variable=MAINDIR
+  Value=%MAINDIR%
+  Flags=00010100
+end
+item: Check Configuration
+  Flags=10111011
+end
+item: Get Registry Key Value
+  Variable=STARTUPDIR
+  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
+  Default=%WIN%\Start Menu\Programs\StartUp
+  Value Name=StartUp
+  Flags=00000010
+end
+item: Get Registry Key Value
+  Variable=DESKTOPDIR
+  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
+  Default=%WIN%\Desktop
+  Value Name=Desktop
+  Flags=00000010
+end
+item: Get Registry Key Value
+  Variable=STARTMENUDIR
+  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
+  Default=%WIN%\Start Menu
+  Value Name=Start Menu
+  Flags=00000010
+end
+item: Get Registry Key Value
+  Variable=GROUPDIR
+  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
+  Default=%WIN%\Start Menu\Programs
+  Value Name=Programs
+  Flags=00000010
+end
+item: Get Registry Key Value
+  Variable=CSTARTUPDIR
+  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
+  Default=%STARTUPDIR%
+  Value Name=Common Startup
+  Flags=00000100
+end
+item: Get Registry Key Value
+  Variable=CDESKTOPDIR
+  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
+  Default=%DESKTOPDIR%
+  Value Name=Common Desktop
+  Flags=00000100
+end
+item: Get Registry Key Value
+  Variable=CSTARTMENUDIR
+  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
+  Default=%STARTMENUDIR%
+  Value Name=Common Start Menu
+  Flags=00000100
+end
+item: Get Registry Key Value
+  Variable=CGROUPDIR
+  Key=Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
+  Default=%GROUPDIR%
+  Value Name=Common Programs
+  Flags=00000100
+end
+item: Set Variable
+  Variable=CGROUP_SAVE
+  Value=%GROUP%
+end
+item: Set Variable
+  Variable=GROUP
+  Value=%GROUPDIR%\%GROUP%
+end
+item: Create Shortcut
+  Source=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\runemacs.exe
+  Destination=%GROUP%\XEmacs.lnk
+  Working Directory=\
+  Icon Number=0
+end
+item: Create Shortcut
+  Source=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\runemacs.exe
+  Destination=%DESKTOPDIR%\XEmacs.lnk
+  Working Directory=\
+  Icon Number=0
+end
+item: Else Statement
+end
+item: Add ProgMan Icon
+  Group=%GROUP%
+  Icon Name=XEmacs
+  Command Line=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\runemacs.exe
+  Default Directory=\
+  Flags=01000000
+end
+item: End Block
+end
+item: Edit Registry
+  Total Keys=16
+  item: Key
+    Key=SOFTWARE\GNU\XEmacs
+    New Value=%MAINDIR%
+    Value Name=emacs_dir
+    Root=2
+  end
+  item: Key
+    Key=SOFTWARE\GNU\XEmacs
+    New Value=%MAINDIR%\xemacs-packages
+    Value Name=EMACSPACKAGEPATH
+    Root=2
+  end
+  item: Key
+    Key=SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\runemacs.exe
+    New Value=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32
+    Value Name=Path
+    Root=2
+  end
+  item: Key
+    Key=SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\xemacs.exe
+    New Value=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32
+    Value Name=Path
+    Root=2
+  end
+  item: Key
+    Key=.el
+    New Value=elfile
+  end
+  item: Key
+    Key=.el
+    New Value=text/plain
+    Value Name=Content Type
+  end
+  item: Key
+    Key=elfile
+    New Value=Emacs lisp
+  end
+  item: Key
+    Key=elfile
+    New Value=00 00 01 00
+    Value Name=EditFlags
+    Data Type=4
+  end
+  item: Key
+    Key=elfile\DefaultIcon
+    New Value=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\runemacs.exe,2
+  end
+  item: Key
+    Key=elfile\QuickView
+    New Value=*
+  end
+  item: Key
+    Key=elfile\Shell
+    New Value=
+  end
+  item: Key
+    Key=elfile\Shell\open
+  end
+  item: Key
+    Key=elfile\Shell\open\command
+    New Value=%MAINDIR%\<<<dirs.dst>>>\i386-pc-win32\runemacs.exe "%%1"
+  end
+  item: Key
+    Key=elfile\Shell\open\ddeexec
+    New Value=open("%%1")
+  end
+  item: Key
+    Key=elfile\Shell\open\ddeexec\Application
+    New Value=XEmacs
+    New Value=
+  end
+  item: Key
+    Key=elfile\Shell\open\ddeexec\topic
+    New Value=System
+  end
+end
+item: Wizard Block
+  Direction Variable=DIRECTION
+  Display Variable=DISPLAY
+  Bitmap Pathname=<<<dirs.source>>>\nt\Wise\gnu.bmp
+  X Position=9
+  Y Position=10
+  Filler Color=8421440
+  Flags=00000011
+end
+item: Custom Dialog Set
+  Name=Finished
+  Display Variable=DISPLAY
+  item: Dialog
+    Title=Installation Complete
+    Title French=Installation en cours
+    Title German=Installation abgeschlossen
+    Title Portuguese=Instalação Completa 
+    Title Spanish=Se ha completado la Instalación
+    Title Italian=Installazione completata
+    Title Danish=Installation gennemført
+    Title Dutch=Installatie afgerond
+    Title Norwegian=Installasjonen er fullført
+    Title Swedish=Installationen klar
+    Width=280
+    Height=224
+    Font Name=Helv
+    Font Size=8
+    item: Push Button
+      Rectangle=170 185 212 199
+      Variable=DIRECTION
+      Value=N
+      Create Flags=01010000000000010000000000000001
+      Text=&Finish >
+      Text French=&Terminer>
+      Text German=&Fertigstellen>
+      Text Portuguese=&Terminar >
+      Text Spanish=&Finalizar>
+      Text Italian=&Fine >
+      Text Danish=&Afslut >
+      Text Dutch=&Klaar>
+      Text Norwegian=&Avslutt>
+      Text Swedish=&Sluta>
+    end
+    item: Push Button
+      Control Name=CANCEL
+      Rectangle=222 185 264 199
+      Action=3
+      Create Flags=01010000000000010000000000000000
+      Text=Cancel
+      Text French=Annuler
+      Text German=Abbrechen
+      Text Portuguese=Cancelar
+      Text Spanish=Cancelar
+      Text Italian=Annulla
+      Text Danish=Annuller
+      Text Dutch=Annuleren
+      Text Norwegian=Avbryt
+      Text Swedish=Avbryt
+    end
+    item: Static
+      Rectangle=9 177 263 178
+      Action=3
+      Create Flags=01010000000000000000000000000111
+    end
+    item: Static
+      Rectangle=90 10 260 63
+      Enabled Color=00000000000000001111111111111111
+      Create Flags=01010000000000000000000000000000
+      Text=%APPTITLE% has been successfully installed.
+      Text=
+      Text=
+      Text=Press the Finish button to exit this installation.
+      Text=
+      Text French=L'installation de %APPTITLE% est réussie
+      Text French=
+      Text French=
+      Text French=Cliquez sur Terminer pour quitter cette installation
+      Text French=
+      Text German=%APPTITLE% wurde erfolgreich installiert.
+      Text German=
+      Text German=
+      Text German=Zum Beenden dieser Installation Fertigstellen anklicken.
+      Text German=
+      Text Portuguese=%APPTITLE% foi instalado com Ãªxito
+      Text Portuguese=
+      Text Portuguese=
+      Text Portuguese=Pressionar o botão Terminar para sair desta instalação
+      Text Portuguese=
+      Text Spanish=%APPTITLE% se ha instalado con Ã©xito.
+      Text Spanish=
+      Text Spanish=
+      Text Spanish=Pulse el botón de Finalizar para salir de esta instalación.
+      Text Spanish=
+      Text Italian=%APPTITLE% Ã¨ stato installato.
+      Text Italian=
+      Text Italian=
+      Text Italian=Premi il pulsante Fine per uscire dal programma di installazione
+      Text Italian=
+      Text Danish=%APPTITLE% er nu installeret korrekt.
+      Text Danish=
+      Text Danish=
+      Text Danish=Klik pÃ¥ Afslut for at afslutte installationen.
+      Text Danish=
+      Text Dutch=%APPTITLE% is met succes geïnstalleerd.
+      Text Dutch=
+      Text Dutch=
+      Text Dutch=Druk op Klaar om deze installatie af te ronden.
+      Text Dutch=
+      Text Norwegian=Installasjonen av %APPTITLE% er suksessfull.
+      Text Norwegian=
+      Text Norwegian=
+      Text Norwegian=Trykk pÃ¥ Avslutt-tasten for Ã¥ avslutte denne installasjonen.
+      Text Norwegian=
+      Text Swedish=Installationen av %APPTITLE% har lyckats.
+      Text Swedish=
+      Text Swedish=
+      Text Swedish=Tryck pÃ¥ Sluta för att gÃ¥ ur installationsprogrammet.
+      Text Swedish=
+    end
+    item: Push Button
+      Control Name=BACK
+      Rectangle=128 185 170 199
+      Variable=DIRECTION
+      Value=B
+      Create Flags=01010000000000010000000000000000
+      Text=< &Back
+      Text French=<&Retour
+      Text German=<&Zurück
+      Text Portuguese=<&Retornar
+      Text Spanish=<&Retroceder
+      Text Italian=< &Indietro
+      Text Danish=<&Tilbage
+      Text Dutch=<&Terug
+      Text Norwegian=<&Tilbake
+      Text Swedish=< &Tillbaka
+    end
+    item: Set Control Attribute
+      Control Name=BACK
+      Operation=1
+    end
+    item: Set Control Attribute
+      Control Name=CANCEL
+      Operation=1
+    end
+  end
+end
+item: End Block
+end
+item: New Event
+  Name=Cancel
+end
+item: Include Script
+  Pathname=%_WISE_%\INCLUDE\rollback.wse
+end
index 35ddb91..e1f5ad5 100644 (file)
@@ -1,6 +1,6 @@
 #   Makefile for Microsoft NMAKE
 #   Copyright (C) 1995 Board of Trustees, University of Illinois.
-#   Copyright (C) 1995, 1996, 2000 Ben Wing.
+#   Copyright (C) 1995, 1996, 2000, 2005 Ben Wing.
 #   Copyright (C) 1995 Sun Microsystems, Inc.
 #   Copyright (C) 1998 Free Software Foundation, Inc.
 #
@@ -177,12 +177,17 @@ USE_UNION_TYPE=0
 USE_MINITAR=$(HAVE_ZLIB)
 !endif
 !if !defined(USE_PORTABLE_DUMPER)
-USE_PORTABLE_DUMPER=0
+USE_PORTABLE_DUMPER=1
 !endif
 
 # 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
@@ -480,7 +485,7 @@ PATH_DEFINES=-DPATH_PREFIX=\"$(PATH_PREFIX)\"
 
 # Generic variables
 
-INCLUDES=$(X_INCLUDES) $(MSW_INCLUDES) -I$(NT)\inc -I$(SRC) -I$(LWLIB_SRCDIR)
+INCLUDES=$(X_INCLUDES) -I$(NT)\inc -I$(SRC) $(MSW_INCLUDES) -I$(LWLIB_SRCDIR)
 
 DEFINES=$(X_DEFINES) $(MSW_DEFINES) $(MULE_DEFINES) $(UNION_DEFINES) \
        $(DUMPER_DEFINES) $(MALLOC_DEFINES) $(QUICK_DEFINES) \
@@ -560,7 +565,7 @@ $(LIB_SRC)/winclient.exe: $(LIB_SRC)/winclient.c
        cd $(NT)
 
 $(LIB_SRC)/minitar.exe : $(NT)/minitar.c
-       $(CCV) $(CFLAGS_NO_LIB) -I"$(ZLIB_DIR)" $(LIB_SRC_DEFINES) -Fe$@ $** $(ZLIB_DIR)\zlib.lib -link -incremental:no
+       $(CCV) $(CFLAGS_NO_LIB) -I"$(ZLIB_DIR)" $(LIB_SRC_DEFINES) -MD -Fe$@ $** $(ZLIB_DIR)\zlib.lib -link -incremental:no
 
 LIB_SRC_TOOLS = \
        $(LIB_SRC)/etags.exe            \
@@ -1175,7 +1180,7 @@ INFO_FILES= \
 
 {$(MANDIR)}.texi{$(INFODIR)}.info:
        cd $(MANDIR)
-       $(MAKEINFO) $**
+       $(MAKEINFO) $(**F)
 
 XEMACS_SRCS = \
        $(MANDIR)\xemacs\abbrevs.texi \
index 1351f2c..a59b580 100644 (file)
@@ -1,3 +1,643 @@
+2005-02-06  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.17 is released
+
+2005-01-31  Ben Wing  <ben@xemacs.org>
+
+       * emacs.c:
+       Define assert_failed() always.
+       * lisp.h:
+       Always define ABORT().
+
+2005-01-25  Ben Wing  <ben@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-29  Ben Wing  <ben@xemacs.org>
+
+       Port this: 2003-08-14  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * mule-charset.c (get_unallocated_leading_byte): Compiler quietus.
+
+2005-01-29  Ben Wing  <ben@xemacs.org>
+
+       * bytecode.c (optimize_compiled_function):
+       * print.c (FROB):
+       * print.c (long_to_string):
+       Add casts to avoid 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.
+       
+       * 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 (free_lcrecord):
+       * 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):
+       * chartab.c (char_table_type_to_symbol):
+       * chartab.c (Freset_char_table):
+       * chartab.c (decode_char_table_range):
+       * chartab.c (Fget_range_char_table):
+       * chartab.c (check_valid_char_table_value):
+       * chartab.c (map_char_table):
+       * chartab.c (slow_map_char_table_fun):
+       * chartab.c (chartab_instantiate):
+       * cm.c (cmcheckmagic):
+       * console-msw.c (DHEADER):
+       * console.c (MARKED_SLOT):
+       * data.c (finish_marking_weak_lists):
+       * data.c (encode_weak_list_type):
+       * debug.h (DASSERT):
+       * device-gtk.c (gtk_init_device):
+       * 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_get_indirect_count):
+       * dumper.c (pdump_register_sub):
+       * dumper.c (pdump_register_object):
+       * dumper.c (pdump_register_struct):
+       * dumper.c (pdump_dump_data):
+       * dumper.c (pdump_reloc_one):
+       * elhash.c (print_hash_table):
+       * elhash.c (make_standard_lisp_hash_table):
+       * elhash.c (hash_table_instantiate):
+       * emacs.c:
+       * emacs.c (Fforce_debugging_signal):
+       * emacs.c (sort_args):
+       * emacs.c (main):
+       * emacs.c (assert_failed):
+       * eval.c (throw_or_bomb_out):
+       * eval.c (signal_1):
+       * eval.c (Fsignal):
+       * event-Xt.c:
+       * event-Xt.c (emacs_Xt_mapping_action):
+       * event-Xt.c (Xt_process_to_emacs_event):
+       * event-msw.c:
+       * event-stream.c (check_event_stream_ok):
+       * event-stream.c (Fadd_timeout):
+       * event-stream.c (Fadd_async_timeout):
+       * event-stream.c (Fdiscard_input):
+       * 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):
+       * event-unixoid.c (poll_fds_for_input):
+       * events.c:
+       * 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 (report_extent_modification_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 (Fcoding_system_type):
+       * file-coding.c (Fcoding_system_property):
+       * file-coding.c (mule_decode):
+       * file-coding.c (mule_encode):
+       * file-coding.c (encode_coding_ucs4):
+       * file-coding.c (encode_coding_utf8):
+       * file-coding.c (parse_iso2022_esc):
+       * file-coding.c (encode_coding_iso2022):
+       * 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 (make_image_instance_1):
+       * glyphs.c (inherit_instantiate):
+       * glyphs.c (image_instantiate):
+       * glyphs.c (allocate_glyph):
+       * glyphs.c (Fglyph_type):
+       * glyphs.c (redisplay_subwindow):
+       * 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 (bufpos_to_bytind_func):
+       * insdel.c (bytind_to_bufpos_func):
+       * insdel.c (move_gap):
+       * intl.c (x_get_composed_input):
+       * 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):
+       * lread.c (read_atom):
+       * lstream.c (Lstream_delete):
+       * lstream.c (make_lisp_buffer_stream_1):
+       * macros.c (pop_kbd_macro_event):
+       * malloc.c (malloc):
+       * malloc.c (free):
+       * marker.c (bi_marker_position):
+       * marker.c (set_bi_marker_position):
+       * menubar-gtk.c (menu_descriptor_to_widget_1):
+       * menubar-msw.c (prune_menubar):
+       * menubar-x.c (set_frame_menubar):
+       * mule-charset.c (get_unallocated_leading_byte):
+       * mule-charset.h (CHAR_LEADING_BYTE):
+       * native-gtk-toolbar.c (SET_TOOLBAR_WAS_VISIBLE_FLAG):
+       * nt.c (init_environment):
+       * nt.c (generate_inode_val):
+       * ntproc.c (delete_child):
+       * ntproc.c (_sys_read_ahead):
+       * ntproc.c (create_child):
+       * 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):
+       * 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 (create_text_block):
+       * redisplay.c (add_margin_runes):
+       * redisplay.c (create_left_glyph_block):
+       * redisplay.c (create_right_glyph_block):
+       * redisplay.c (create_string_text_block):
+       * redisplay.c (regenerate_window):
+       * redisplay.c (REGEN_INC_FIND_START_END):
+       * redisplay.c (redisplay_frame):
+       * 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-gtk.c (gtk_update_frame_scrollbars):
+       * scrollbar-msw.c (mswindows_handle_scrollbar_event):
+       * scrollbar-x.c (x_update_scrollbar_instance_status):
+       * scrollbar-x.c (x_scrollbar_loop):
+       * scrollbar-x.c (x_update_frame_scrollbars):
+       * search.c (search_command):
+       * search.c (Fmatch_data):
+       * select-x.c (motif_clipboard_cb):
+       * signal.c (interrupt_signal):
+       * specifier.c (specifier_add_spec):
+       * specifier.c (specifier_instance_from_inst_list):
+       * specifier.c (specifier_instance):
+       * specifier.h:
+       * specifier.h (struct specifier_methods):
+       * strftime.c (add_num_time_t):
+       * sunplay.c (init_device):
+       * symbols.c (Fsetplist):
+       * symbols.c (do_symval_forwarding):
+       * symbols.c (store_symval_forwarding):
+       * symbols.c (Fset):
+       * symbols.c (Fbuilt_in_variable_type):
+       * symbols.c (decode_magic_handler_type):
+       * symbols.c (handler_type_from_function_symbol):
+       * syntax.c (update_syntax_cache):
+       * sysdep.c (init_baud_rate):
+       * toolbar-gtk.c (SET_TOOLBAR_WAS_VISIBLE_FLAG):
+       * toolbar-msw.c (SET_TOOLBAR_WAS_VISIBLE_FLAG):
+       * toolbar-x.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):
+       * window.c (real_window):
+       * window.c (window_display_lines):
+       * window.c (window_display_buffer):
+       * window.c (set_window_display_buffer):
+       * window.c (window_modeline_height):
+       * window.c (unshow_buffer):
+       * window.c (window_loop):
+       * window.c (Fget_lru_window):
+       * window.c (Fsplit_window):
+       * window.c (Fset_window_configuration):
+       * window.c (saved_window_index):
+       * xgccache.c (gc_cache_lookup):
+       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).
+
+       * sysdep.c:
+       * sysproc.h:
+       Inclusion of process.h does not need to be before lisp.h any more.
+       Move later and remove comment about abort().
+
+2005-01-26  Arnaud Giersch  <arnaud.giersch@free.fr>
+
+       * regex.c (re_match_2_internal):
+       Correctly initialize loop which clears uninitialized registers.
+
+2005-01-28  Vin Shelton  <acs@xemacs.org>
+
+       * sheap.c (more_static_core): Applied Ben's version of the long
+       string patch.
+
+2005-01-24  Vin Shelton  <acs@xemacs.org>
+
+       * sheap.c (more_static_core): Reformatted printf string so
+       gcc-3.3.3 will compile this on Cygwin.
+
+2004-02-22  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * console.c (function_key_map): Reference `key-binding'.
+
+       * keymap.c (Vkey_translation_map): Improve docstring.
+
+2004-03-30  Zajcev Evgeny  <zevlg@yandex.ru>
+
+       * window.c: Declare `allow_deletion_of_last_visible_frame' extern.
+       * window.c (window_loop): [fix] Take into account
+       `allow-deletion-of-last-visible-frame' variable.
+       * window.c (replace-buffer-in-windows): Ditto.
+
+2004-12-15  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * EmacsManager.c (EmacsManagerChangeSize): Respect XtGeometryNo.
+
+2005-01-20  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * event-gtk.c: Recognise AltGr as a valid modifier.
+
+2005-01-12  Ville Skyttä  <scop@xemacs.org>
+
+       * console-x.h: #include X11/keysym.h before xintrinsic.h.
+
+2005-01-13  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       Fix backreference bug caught by test suite.
+
+       * regex.c (regex_compile):
+       Make backref duplicate internal register.
+
+2005-01-13  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       Documentation, code clarification, and warning suppression.
+       
+       * regex.c (regex_compile):
+       Improve comments.
+       (re_match_2_internal):
+       Improve comments and avoid redundant braces.  [Most of the big hunk
+       at l. 4710 is indentation; use diff -w to see the real changes.]
+       (alt_match_null_string_p):
+       (common_op_match_null_string_p):
+       Avoid shadowing global on Mac OS X 10.4, at least.
+
+2004-09-08  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * regex.c (regcomp): Fix "unsigned comparison" warning (maybe
+       introduced with shy groups fix).  [Already applied, probably
+       with the second "fix shy groups" patch of 2004-10-07.] 
+
+2005-01-10  Steve Youngs  <steve@sxemacs.org>
+
+       From Andrey Slusar <anrays@gmail.com>:
+
+       * unexelf.c: define `Elfw(type)' for FreeBSD alpha and amd64.
+
+2004-11-21  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * Makefile (RECURSIVE_MAKE): Removed.
+       * Makefile (RECURSIVE_MAKE_ARGS): New.  The new method for
+       handling parallel builds.
+
+2004-09-08  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * Makefile.in.in: Enable support for parallel builds.
+
+2005-01-09  Steve Youngs  <steve@sxemacs.org>
+
+       From Andrey Slusar <anrays@gmail.com>:
+
+       * s/freebsd.h (LIBS_SYSTEM): Only set to "-lutil -lxpg4" if
+       FreeBSD version is >= 199701 _and_ < 600006.
+
+2005-01-06  Zajcev Evgeny <zevlg@yandex.ru>
+
+       * scrollbar.c (compute_scrollbar_instance_usage):
+       Only call device method compute_scrollbar_instance_usage() if it
+       is defined.
+
+2004-12-05  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.16 is released
+
+2004-12-04  Vin Shelton  <acs@xemacs.org>
+
+       * depend: Regenerated.
+
+2004-10-07  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * regex.c (re_match_2_internal): Map internal to external
+       registers.  Fixes bug identified by Steve Youngs 2004-09-30
+       <microsoft-free.87ekkjhj7t.fsf@youngs.au.com>.
+
+2004-09-02  Yoshiki Hayashi  <yoshiki@xemacs.org>
+
+       * buffer.c (Frecord_buffer): Make sure the argument is buffer
+       to fix a crash.  Also, check the buffer is live and it
+       really exists in buffer_list.  If the buffer is not in the list,
+       prepend it.
+
+2004-09-08  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       Fix shy groups by implementing recording of all groups for
+       repetition and backtracking.  Backport from 21.5.
+       
+       * regex.h (struct re_pattern_buffer): Add members re_ngroups,
+       external_to_internal_register, external_to_internal_register_size,
+       and update comments for re_nsub.
+
+       * regex.c (re_opcode_t): Update comments.
+       (print_compiled_pattern): Ouput external_to_internal_register,
+       external_to_internal_register_size, and re_ngroups for debugging.
+       (INIT_REG_TRANSLATE_SIZE): New manifest constant.
+       (regex_compile): Update header comment.
+       Ensure that all groups are recorded so that repeat matches and
+       backtracking work correctly.  Comment related warning for groups >
+       255.
+       (re_search_2): Construct map of API indexes (which count only
+       nonshy groups) to internal register numbers, and keep it updated.
+
+2004-07-27  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * frame-gtk.c (gtk_make_frame_visible):
+       * frame-gtk.c (gtk_make_frame_invisible): Use map/unmap instead of
+       show/hide.  This is what X uses and is prevents previously hidden
+       widgets from suddenly reappearing.
+       * gtk-xemacs.c (gtk_xemacs_paint):
+       * gtk-xemacs.c (gtk_xemacs_draw):
+       * gtk-xemacs.c (gtk_xemacs_expose): Only operate if the widget is
+       drawable.
+       * scrollbar-gtk.c (gtk_update_scrollbar_instance_status): Force
+       size and location changes so that they can be seen before the next
+       idle event.  Without this rapid changes to scrollbar properties
+       are not seen.
+
+2004-07-02  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * console-gtk.h:
+       * console-gtk.h (struct gtk_frame):
+       * console-gtk.h (FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE):
+         Add hash tables track tab_control callback data.
+         Added #defines for GTK object data names.
+         Declaration of gtk_widget_to_frame().
+       * event-gtk.c (enqueue_gtk_dispatch_event) No longer static:
+       * frame-gtk.c (gtk_widget_to_frame): New.
+       * frame-gtk.c (gtk_create_widgets):
+       * frame-gtk.c (allocate_gtk_frame_struct):
+       * frame-gtk.c (gtk_mark_frame):
+       Manage frame callbakc hash tables.
+       * glyphs-gtk.c (gtk_map_subwindow): Fix size and moving bugs.
+       * glyphs-gtk.c (gtk_redisplay_widget): Use correct size for widgets.
+       * glyphs-gtk.c (gtk_widget_instantiate_1): Force reconsideration
+       of widget size.
+       * glyphs-gtk.c (gtk_widget_query_geometry): New
+       * glyphs-gtk.c (gtk_register_gui_item): New
+       * glyphs-gtk.c (gtk_add_tab_item): New
+       * glyphs-gtk.c (gtk_tab_control_callback): New
+       * glyphs-gtk.c (gtk_tab_control_instantiate): New
+       * glyphs-gtk.c (gtk_tab_control_redisplay): Set notebook page.
+       Use correct list when loading item.
+       * glyphs-gtk.c (image_instantiator_format_create_glyphs_gtk):
+       Register new methods.
+       * gtk-xemacs.c (gtk_xemacs_size_allocate): Use XEmacs size, not
+       default size, for widgets.
+       * gui-x.c:  Improved comment.
+       * menubar-gtk.c (__generic_button_callback): Use
+       gtk_widget_to_frame instead of __get_channel.
+       * scrollbar-gtk.c:
+       * ui-gtk.c: Use symbolic names for GTK object data.
+
+2004-06-23  Ilya N. Golubev <gin@mo.msk.ru>
+
+       * s/usg5-4.h (NSIG): Define only inside emacs binary.
+
+2002-03-04  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * fileio.c (Fwrite_region_internal): Document use of start == Qnil.
+
+2004-06-16  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * malloc.c (morecore): siz is a long because in some architectures
+       (eg ia-64) an int cannot hold the address range.  Additional patch
+       from the SuSe distribution.
+
+2004-06-13  Malcolm Purvis  <malcolmp@xemacs.org>
+
+       * emacs.c:
+       * malloc.c: lim_data is a long because in some architectures
+       (eg ia-64) an int cannot hold the address range.
+       * mem-limits.h: lim-data is a long.  Linux uses getrlimit()
+       instead of ulimit() because ulimit() always returns -1.
+
+2004-06-09  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * search.c: Reenable an ansync semaphore.  Remove bogus comments.
+
+2004-06-11  David Kastrup  <dak@gnu.org>
+
+       * search.c (match_limit): Don't flag an error if match-data
+       exceeding the allocated search_regs.num_regs gets requested, just
+       return Qnil.
+
+2003-07-21  Malcolm Purvis  <malcolmpurvis@optushome.com.au>
+
+       * glyphs-gtk.c (gtk_xpm_instantiate): Rewrite the XPM data to
+       replace symbolic color entries with the real colors specified in
+       xpm-color-symbols, before passing the XPM to gtk.
+        * glyphs-gtk.h: Use the generic pixmap_image_instance.mask for masks,
+        instead of a GTK specific field, so that it is used in by generic
+        code.
+
+2004-05-05  Chuck Hines <chuck.hines@baesystems.com>
+
+       * dgif_lib.c (DGifSlurp): Changed do-while to while to stop
+        coredump from deref of NULL ptr (ExtData)
+
+2004-04-19  Jerry James  <james@xemacs.org>
+
+       * data.c (sign_extend_lisp_int): Use INT_VALBITS instead of
+       VALBITS to compute the location of the sign bit.
+       * event-stream.c (Fcurrent_event_timestamp): Replace incorrect use
+       of VALBITS with EMACS_INT_MAX.
+       * events.c (Fevent_timestamp): Ditto.
+       * events.c (TIMESTAMP_HALFSPACE): Change VALBITS to INT_VALBITS to
+       compute the halfway point to timestamp wraparound.
+       * floatfns.c (float_to_int): Compare against EMACS_INT_MAX and
+       EMACS_INT_MIN instead of using VALBITS.
+       * floatfns.c (Flogb): Use EMACS_INT_MIN instead of building an
+       incorrect number with VALBITS.
+       * fns.c (Frandom): Correct number of integer bits in docstring.
+       Use INT_VALBITS instead of VALBITS to compute the denominator.
+       * sysdep.c (get_random): Use INT_VALBITS instead of VALBITS to
+       build random numbers.
+
+2004-03-23  Malcolm Purvis  <malcolmpurvis@optushome.com.au>
+       * event-gtk.c:
+       * event-gtk.c (gtk_event_to_emacs_event):
+       * menubar-gtk.c:
+       * menubar-gtk.c (gtk_xemacs_menubar_class_init):
+       * menubar-gtk.c (gtk_xemacs_menubar_size_request):
+       * menubar-gtk.c (gtk_xemacs_accel_label_get_type):
+       * menubar-gtk.c (gtk_xemacs_set_accel_keys):
+       * menubar-gtk.c (__activate_menu):
+       * menubar-gtk.c (convert_underscores):
+       * menubar-gtk.c (remove_underscores):
+       * menubar-gtk.c (menu_convert):
+       * menubar-gtk.c (menu_descriptor_to_widget_1):
+       * menubar-gtk.c (menu_descriptor_to_widget):
+       * menubar-gtk.c (menu_can_reuse_widget):
+       * menubar-gtk.c (menu_create_menubar):
+       * menubar-gtk.c (gtk_popup_menu):
+       * menubar-gtk.c (Fgtk_build_xemacs_menu):
+       Added support for Gtk menu bar and menu item mnemonics.
+
+2004-03-23  Malcolm Purvis  <malcolmpurvis@optushome.com.au>
+
+       * sysdll.c: (dll_function): Added support for finding symbols in
+       Darwin shared libraries as well in Darwin bundles.
+       * sysdll.c (image_for_address): New
+       * sysdll.c (my_find_image): New
+       * sysdll.c (search_linked_libs): New
+
+2004-03-23  Malcolm Purvis  <malcolmpurvis@optushome.com.au>
+
+       * ui-gtk.c (__internal_callback_marshal): Marshalling data to
+       return to GTK requires a different API to marshalling data to use
+       as GTK parameters.
+       * ui-gtk.c (lisp_to_gtk_ret_type): New.
+
+2004-03-08  Lutz Euler  <lutz.euler@freenet.de>
+
+       * lstream.c (Lstream_pseudo_close): Fix test for LSTREAM_FL_IS_OPEN.
+
+2004-02-19  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * glyphs.c (process_image_string_instantiator):
+       (Fset_console_type_image_conversion_list):
+       Stop GCC from warning about shadowing of `exp'.
+
+       * redisplay-x.c (x_output_string): Fix unsigned lossage.
+
+2004-02-19  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * regex.c (re_match_2_internal): Shut up GCC about syn1, syn2.
+
+2004-02-03  Vin Shelton  <acs@xemacs.org>
+
+       * glyphs.c (image_instance_layout): Remove pointless assertion.
+       * regex.c (regex_grow_registers): Return type is void.
+
 2004-02-02  Vin Shelton <acs@xemacs.org>
 
        * XEmacs 21.4.15 is released
index e73f743..fbb6800 100644 (file)
@@ -642,7 +642,7 @@ EmacsFrameRecomputeCellSize (Widget w)
   struct frame *f = ew->emacs_frame.frame;
 
   if (! XtIsSubclass (w, emacsFrameClass))
-    abort ();
+    ABORT ();
 
   default_face_height_and_width (make_frame (f), &ch, &cw);
   if (FRAME_X_TOP_LEVEL_FRAME_P (f))
index c2f325b..42398c7 100644 (file)
@@ -240,11 +240,15 @@ EmacsManagerChangeSize (Widget w, Dimension width, Dimension height)
 
   /* do nothing if we're already that size */
   if (w->core.width != width || w->core.height != height)
-    if (XtMakeResizeRequest (w, width, height, &w->core.width, &w->core.height)
-       == XtGeometryAlmost)
-      XtMakeResizeRequest (w, w->core.width, w->core.height, NULL, NULL);
-
-  Resize (w);
+    {
+      XtGeometryResult result =
+       XtMakeResizeRequest (w, width, height, &w->core.width, &w->core.height);
+      if (result == XtGeometryNo)
+       return;
+      if (result == XtGeometryAlmost)
+       XtMakeResizeRequest (w, w->core.width, w->core.height, NULL, NULL);
+      Resize (w);
+    }
 }
 
 
index 97be525..81c538a 100644 (file)
@@ -90,6 +90,8 @@ Boston, MA 02111-1307, USA.  */
 #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 @@ SuperClassRootGeometryManager (Widget gw,
     }
 
   if (!gcer)
-    abort ();
+    ABORT ();
 
   /* call it to actually make the geometry request */
   scer = (ShellClassExtensionRec *) gcer;
@@ -304,7 +306,7 @@ RootGeometryManager (Widget gw,
   XtGeometryResult result;
 
   if (reentrant)
-    abort ();
+    ABORT ();
   reentrant++;
 
 #ifdef DEBUG_GEOMETRY_MANAGEMENT
index 7eac51a..db72310 100644 (file)
@@ -34,6 +34,8 @@ Boston, MA 02111-1307, USA.  */
 #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
@@ -156,10 +158,10 @@ EmacsShellUpdateSizeHints (Widget gw)
     TopLevelEmacsShellUpdateSizeHints (gw);
 #ifdef EXTERNAL_WIDGET
   else if (XtIsSubclass (gw, externalShellWidgetClass))
-    /* do what ??? Don't abort! */;
+    /* do what ??? Don't ABORT! */;
 #endif
   else if (XtIsSubclass (gw, transientEmacsShellWidgetClass))
     TransientEmacsShellUpdateSizeHints (gw);
   else
-    abort ();
+    ABORT ();
 }
index 733b02a..3ad0cc2 100644 (file)
@@ -45,10 +45,10 @@ all: ${DUMP_TARGET}
 .SUFFIXES: .c .h .o .i .s .dep
 
 #ifdef USE_GNU_MAKE
-RECURSIVE_MAKE=$(MAKE)
+RECURSIVE_MAKE_ARGS=
 #else
 @SET_MAKE@
-RECURSIVE_MAKE=@RECURSIVE_MAKE@
+RECURSIVE_MAKE_ARGS=@RECURSIVE_MAKE_ARGS@
 #endif
 
 SHELL=/bin/sh
@@ -122,7 +122,7 @@ LWLIB_SRCDIR = ${srcdir}/../lwlib
 lwlib_libs = ../lwlib/liblw.a
 lwlib_deps = $(lwlib_libs)
 $(lwlib_libs) :
-       cd ../lwlib && $(RECURSIVE_MAKE)
+       cd ../lwlib && $(MAKE) $(RECURSIVE_MAKE_ARGS)
 
 x_objs=console-x.o device-x.o event-Xt.o frame-x.o\
  glyphs-x.o objects-x.o redisplay-x.o select-x.o xgccache.o
@@ -151,15 +151,16 @@ profile_objs=profile.o
 
 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
@@ -391,7 +392,7 @@ dortl : $(obj_rtl) $(otherrtls)
 #ifdef DYNODUMP
 dynodump_deps = ../dynodump/dynodump.so
 ../dynodump/dynodump.so:
-       cd ../dynodump && $(RECURSIVE_MAKE)
+       cd ../dynodump && $(MAKE) $(RECURSIVE_MAKE_ARGS)
 #endif /* DYNODUMP */
 
 ${libsrc}DOC: ${EXE_TARGET} update-elc.stamp
@@ -406,7 +407,7 @@ dump-elcs: ${EXE_TARGET}
        -${DUMPENV} ./${EXE_TARGET} -nd -batch -l ${srcdir}/../lisp/update-elc.el
 
 all-elc all-elcs:
-       cd .. && $(RECURSIVE_MAKE) all-elc
+       cd .. && $(MAKE) $(RECURSIVE_MAKE_ARGS) all-elc
 
 #ifdef I18N3
 
@@ -430,18 +431,18 @@ ${mo_dir}emacs.mo: ${mo_dir}emacs.po
        cd ${mo_dir} && ${msgfmt} -o emacs.mo emacs.po
 
 ${libsrc}make-msgfile:
-       cd ${libsrc} && $(RECURSIVE_MAKE) make-msgfile
+       cd ${libsrc} && $(MAKE) $(RECURSIVE_MAKE_ARGS) make-msgfile
 
 ${libsrc}make-po:
-       cd ${libsrc} && $(RECURSIVE_MAKE) make-po
+       cd ${libsrc} && $(MAKE) $(RECURSIVE_MAKE_ARGS) make-po
 
 #endif /* I18N3 */
 
 ${libsrc}make-dump-id:
-       cd ${libsrc} && $(RECURSIVE_MAKE) make-dump-id
+       cd ${libsrc} && $(MAKE) $(RECURSIVE_MAKE_ARGS) make-dump-id
 
 ${libsrc}make-docfile:
-       cd ${libsrc} && $(RECURSIVE_MAKE) make-docfile
+       cd ${libsrc} && $(MAKE) $(RECURSIVE_MAKE_ARGS) make-docfile
 
 ## Lint Section
 LINT.c=$(LINT) $(LINTFLAGS) $(LINTINCLUDES)
index add03ec..0feb76f 100644 (file)
@@ -412,7 +412,7 @@ free_lcrecord (struct lcrecord_header *lcrecord)
              break;
            }
          else if (next == 0)
-           abort ();
+           ABORT ();
          else
            header = next;
        }
index e3ba02e..500327f 100644 (file)
@@ -387,7 +387,7 @@ i00afunc (long *address)
      a fatal error if "trailer" is null.  */
 
   if (trailer == 0)
-    abort ();
+    ABORT ();
 
   /* Discard segments that do not contain our argument address.  */
 
@@ -396,7 +396,7 @@ i00afunc (long *address)
       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;
@@ -415,7 +415,7 @@ i00afunc (long *address)
   do
     {
       if (trailer->this_size <= 0)
-       abort ();
+       ABORT ();
       result += trailer->this_size;
       trailer = (struct stk_trailer *) trailer->link;
     }
index bd44a47..23eb018 100644 (file)
@@ -522,7 +522,7 @@ delete_from_buffer_alist (Lisp_Object buf)
   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)
@@ -1334,38 +1334,60 @@ buffer.  See `other-buffer' for more information.
 {
   REGISTER Lisp_Object lynk, prev;
   struct frame *f = selected_frame ();
+  int buffer_found = 0;
 
+  CHECK_BUFFER (buffer);
+  if (!BUFFER_LIVE_P (XBUFFER (buffer)))
+    return Qnil;
   prev = Qnil;
   for (lynk = Vbuffer_alist; CONSP (lynk); lynk = XCDR (lynk))
     {
       if (EQ (XCDR (XCAR (lynk)), buffer))
-       break;
+       {
+         buffer_found = 1;
+         break;
+       }
       prev = lynk;
     }
-  /* Effectively do Vbuffer_alist = delq_no_quit (lynk, Vbuffer_alist) */
-  if (NILP (prev))
-    Vbuffer_alist = XCDR (Vbuffer_alist);
+  if (buffer_found)
+    {
+      /* Effectively do Vbuffer_alist = delq_no_quit (lynk, Vbuffer_alist) */
+      if (NILP (prev))
+       Vbuffer_alist = XCDR (Vbuffer_alist);
+      else
+       XCDR (prev) = XCDR (XCDR (prev));
+      XCDR (lynk) = Vbuffer_alist;
+      Vbuffer_alist = lynk;
+    }
   else
-    XCDR (prev) = XCDR (XCDR (prev));
-  XCDR (lynk) = Vbuffer_alist;
-  Vbuffer_alist = lynk;
+    Vbuffer_alist = Fcons (Fcons (Fbuffer_name(buffer), buffer), Vbuffer_alist);
 
   /* That was the global one.  Now do the same thing for the
      per-frame buffer-alist. */
+  buffer_found = 0;
   prev = Qnil;
   for (lynk = f->buffer_alist; CONSP (lynk); lynk = XCDR (lynk))
     {
       if (EQ (XCDR (XCAR (lynk)), buffer))
-       break;
+       {
+         buffer_found = 1;
+         break;
+       }
       prev = lynk;
     }
-  /* Effectively do f->buffer_alist = delq_no_quit (lynk, f->buffer_alist) */
-  if (NILP (prev))
-    f->buffer_alist = XCDR (f->buffer_alist);
+  if (buffer_found)
+    {
+      /* Effectively do f->buffer_alist = delq_no_quit (lynk, f->buffer_alist) */
+      if (NILP (prev))
+       f->buffer_alist = XCDR (f->buffer_alist);
+      else
+       XCDR (prev) = XCDR (XCDR (prev));
+      XCDR (lynk) = f->buffer_alist;
+      f->buffer_alist = lynk;
+    }
   else
-    XCDR (prev) = XCDR (XCDR (prev));
-  XCDR (lynk) = f->buffer_alist;
-  f->buffer_alist = lynk;
+    f->buffer_alist = Fcons (Fcons (Fbuffer_name(buffer), buffer),
+                            f->buffer_alist);
 
   return Qnil;
 }
@@ -3029,7 +3051,7 @@ handled:
   if ((XINT (buffer_local_flags.slot) != -2 &&                 \
        XINT (buffer_local_flags.slot) != -3)                   \
       != !(NILP (XBUFFER (Vbuffer_local_symbols)->slot)))      \
-  abort ()
+  ABORT ()
 #include "bufslots.h"
 #undef MARKED_SLOT
 
index 58ebc0c..fa6b469 100644 (file)
@@ -1476,7 +1476,7 @@ execute_rare_opcode (Lisp_Object *stack_ptr,
       }
 
     default:
-      abort();
+      ABORT();
       break;
     }
   return stack_ptr;
@@ -1859,7 +1859,7 @@ optimize_byte_code (/* in */
                break;
 
            default:
-             abort();
+             ABORT();
              break;
            }
        }
@@ -1893,7 +1893,8 @@ optimize_compiled_function (Lisp_Object compiled_function)
       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));
     }
@@ -2357,7 +2358,7 @@ If the byte code for compiled function FUNCTION is lazy-loaded, fetch it now.
       f->constants    = XCDR (tem);
       return function;
     }
-  abort ();
+  ABORT ();
   return Qnil; /* not reached */
 }
 
index 3743698..53fa5fc 100644 (file)
@@ -187,7 +187,7 @@ char_table_type_to_symbol (enum char_table_type type)
 {
   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;
@@ -586,7 +586,7 @@ Reset CHAR-TABLE to its default state.
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 
   return Qnil;
@@ -755,7 +755,7 @@ decode_char_table_range (Lisp_Object range, struct chartab_range *outrange)
          check_int_range (outrange->row, 32, 127);
          break;
        default:
-         abort ();
+         ABORT ();
        }
     }
   else
@@ -940,7 +940,7 @@ If there is more than one value, return MULTI (defaults to nil).
 #endif /* not MULE */
 
     default:
-      abort ();
+      ABORT ();
     }
 
   return Qnil; /* not reached */
@@ -990,7 +990,7 @@ check_valid_char_table_value (Lisp_Object value, enum char_table_type type,
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 
   return 0; /* not reached */
@@ -1389,7 +1389,7 @@ map_char_table (Lisp_Char_Table *ct,
       }
 
     default:
-      abort ();
+      ABORT ();
     }
 
   return 0;
@@ -1429,7 +1429,7 @@ slow_map_char_table_fun (struct chartab_range *range,
       ranjarg = make_char (range->ch);
       break;
     default:
-      abort ();
+      ABORT ();
     }
 
   closure->retval = call2 (closure->function, ranjarg, val);
@@ -1552,7 +1552,7 @@ chartab_instantiate (Lisp_Object data)
                 Fput_char_table (make_char (i), val, chartab);
            }
          else
-           abort ();
+           ABORT ();
        }
       else
        Fput_char_table (range, val, chartab);
index b54bcc5..98f3f42 100644 (file)
--- a/src/cm.c
+++ b/src/cm.c
@@ -99,7 +99,7 @@ cmcheckmagic (void)
   if (curX == FrameCols)
     {
       if (!MagicWrap || curY >= FrameRows - 1)
-       abort ();
+       ABORT ();
       if (termscript)
        putc ('\r', termscript);
       putchar ('\r');
index 31c5055..01e48d7 100644 (file)
@@ -170,6 +170,12 @@ struct gtk_frame
   /* Are we iconfied right now? */
   unsigned int iconified_p :1;
 
+  /* Data for widget callbacks.  It is impossible to pass all the necessary
+     data through the GTK signal API so instead it is registered here and the
+     hash key is passed instead. */
+  Lisp_Object widget_instance_hash_table;
+  Lisp_Object widget_callback_hash_table;
+  Lisp_Object widget_callback_ex_hash_table;
 };
 
 #define FRAME_GTK_DATA(f) FRAME_TYPE_DATA (f, gtk)
@@ -191,6 +197,17 @@ struct gtk_frame
 #define FRAME_GTK_TOTALLY_VISIBLE_P(f) (FRAME_GTK_DATA (f)->totally_visible_p)
 #define FRAME_GTK_VISIBLE_P(f) (FRAME_GTK_DATA (f)->visible_p)
 #define FRAME_GTK_TOP_LEVEL_FRAME_P(f) (FRAME_GTK_DATA (f)->top_level_frame_p)
+#define FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE(f) (FRAME_GTK_DATA (f)->widget_instance_hash_table)
+#define FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE(f) (FRAME_GTK_DATA (f)->widget_callback_hash_table)
+#define FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE(f) (FRAME_GTK_DATA (f)->widget_callback_ex_hash_table)
+
+/* Special data used to quickly identify the frame that contains a widget. */
+#define GTK_DATA_FRAME_IDENTIFIER "xemacs::frame"
+
+/* The hashcode in the frame hash table of a tab_control tab's callback data. */
+#define GTK_DATA_TAB_HASHCODE_IDENTIFIER "xemacs::tab_hashcode"
+
+#define GTK_DATA_GUI_IDENTIFIER "xemacs::gui_id"
 
 /* Variables associated with the X display frame this emacs is using. */
 
@@ -205,6 +222,7 @@ extern int gtk_interline_space;
 
 extern int gtk_selection_timeout;
 
+struct frame *gtk_widget_to_frame (GtkWidget *);
 struct frame *gtk_any_window_to_frame (struct device *d, GdkWindow *);
 struct frame *gtk_window_to_frame (struct device *d, GdkWindow *);
 struct frame *gtk_any_widget_or_parent_to_frame (struct device *d, GtkWidget *widget);
index 0207561..e571c5d 100644 (file)
@@ -272,7 +272,7 @@ This function can be used as the STREAM argument of Fprint() or the like.
 /*
  * Random helper functions for debugging.
  * Intended for use in the MSVC "Watch" window which doesn't like
- * the aborts that the error_check_foo() functions can make.
+ * the ABORTs that the error_check_foo() functions can make.
  */
 struct lrecord_header *DHEADER (Lisp_Object obj);
 struct lrecord_header *
index 31252dd..93f7502 100644 (file)
@@ -35,10 +35,13 @@ Boston, MA 02111-1307, USA.  */
 #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 <X11/cursorfont.h>
-#include <X11/keysym.h>
 #include <X11/Xatom.h>
 #include <X11/StringDefs.h>
 
index 5b8e670..789a477 100644 (file)
@@ -1391,7 +1391,7 @@ The `read-key-sequence' function replaces any subsequence bound by
 keymaps have no binding for the current key sequence but
 `function-key-map' binds a suffix of the sequence to a vector or string,
 `read-key-sequence' replaces the matching suffix with its binding, and
-continues with the new sequence.
+continues with the new sequence.  See `key-binding'.
 
 The events that come from bindings in `function-key-map' are not
 themselves looked up in `function-key-map'.
@@ -1465,7 +1465,7 @@ buffer's local map, and the minor mode keymaps and text property keymaps.
   if ((XINT (console_local_flags.slot) != -2 &&                        \
          XINT (console_local_flags.slot) != -3)                        \
       != !(NILP (XCONSOLE (Vconsole_local_symbols)->slot)))    \
-  abort ()
+  ABORT ()
 #include "conslots.h"
 #undef MARKED_SLOT
 }
index b2ef666..c0d0594 100644 (file)
@@ -170,10 +170,10 @@ EMACS_INT sign_extend_lisp_int (EMACS_INT num);
 EMACS_INT
 sign_extend_lisp_int (EMACS_INT num)
 {
-  if (num & (1L << (VALBITS - 1)))
-    return num | ((-1L) << VALBITS);
+  if (num & (1L << (INT_VALBITS - 1)))
+    return num | ((-1L) << INT_VALBITS);
   else
-    return num & ((1L << VALBITS) - 1);
+    return num & (EMACS_INT) ((1UL << INT_VALBITS) - 1);
 }
 
 \f
@@ -1769,7 +1769,7 @@ finish_marking_weak_lists (void)
              break;
 
            default:
-             abort ();
+             ABORT ();
            }
 
          if (need_to_mark_elem && ! marked_p (elem))
@@ -1925,7 +1925,7 @@ encode_weak_list_type (enum weak_list_type type)
     case WEAK_LIST_VALUE_ASSOC: return Qvalue_assoc;
     case WEAK_LIST_FULL_ASSOC:  return Qfull_assoc;
     default:
-      abort ();
+      ABORT ();
     }
 
   return Qnil; /* not reached */
index 00c6f48..c767112 100644 (file)
@@ -66,7 +66,7 @@ extern struct debug_classes active_debug_classes;
            stderr_out ("Assertion failed in %s at line %d\n",          \
                        __FILE__, __LINE__);                            \
          else                                                          \
-           abort ();                                                   \
+           ABORT ();                                                   \
        }                                                               \
     }                                                                  \
 } while (0)
index 86d54e1..f6a7d10 100644 (file)
@@ -49,10 +49,10 @@ redisplay-tty.o: $(LISP_H) buffer.h bufslots.h casetab.h chartab.h conslots.h co
 console-gtk.o: $(LISP_H) conslots.h console-gtk.h console.h process.h redisplay.h
 device-gtk.o: $(LISP_H) buffer.h bufslots.h casetab.h chartab.h conslots.h console-gtk.h console.h device.h elhash.h events.h faces.h frame.h frameslots.h gccache-gtk.h glyphs-gtk.h glyphs.h gtk-xemacs.h gui.h mule-charset.h objects-gtk.h objects.h redisplay.h scrollbar.h specifier.h sysdep.h sysfile.h systime.h toolbar.h window.h winslots.h
 dialog-gtk.o: $(LISP_H) buffer.h bufslots.h casetab.h chartab.h commands.h conslots.h console-gtk.h console.h device.h events.h frame.h frameslots.h glyphs.h gui-gtk.h gui.h mule-charset.h opaque.h redisplay.h scrollbar.h specifier.h systime.h toolbar.h window.h winslots.h
-event-gtk.o: $(LISP_H) blocktype.h buffer.h bufslots.h casetab.h chartab.h commands.h conslots.h console-gtk.h console-tty.h console.h device.h dragdrop.h elhash.h events-mod.h events.h file-coding.h frame.h frameslots.h glyphs.h gtk-xemacs.h gui.h lstream.h mule-charset.h objects-gtk.h objects.h offix-types.h offix.h process.h redisplay.h scrollbar.h specifier.h sysproc.h syssignal.h systime.h systty.h toolbar.h window.h winslots.h xintrinsic.h
-frame-gtk.o: $(LISP_H) buffer.h bufslots.h casetab.h chartab.h conslots.h console-gtk.h console.h device.h dragdrop.h events.h extents.h faces.h frame.h frameslots.h glyphs-gtk.h glyphs.h gtk-xemacs.h gui.h mule-charset.h objects-gtk.h objects.h redisplay.h scrollbar-gtk.h scrollbar.h specifier.h sysdll.h systime.h toolbar.h ui-gtk.h window.h winslots.h
+event-gtk.o: $(LISP_H) blocktype.h buffer.h bufslots.h casetab.h chartab.h commands.h conslots.h console-gtk.h console-tty.h console.h device.h dragdrop.h elhash.h events-mod.h events.h file-coding.h frame.h frameslots.h glyphs.h gtk-xemacs.h gui.h lstream.h menubar.h mule-charset.h objects-gtk.h objects.h offix-types.h offix.h process.h redisplay.h scrollbar.h specifier.h sysproc.h syssignal.h systime.h systty.h toolbar.h window.h winslots.h xintrinsic.h
+frame-gtk.o: $(LISP_H) buffer.h bufslots.h casetab.h chartab.h conslots.h console-gtk.h console.h device.h dragdrop.h elhash.h events.h extents.h faces.h frame.h frameslots.h glyphs-gtk.h glyphs.h gtk-xemacs.h gui.h mule-charset.h objects-gtk.h objects.h redisplay.h scrollbar-gtk.h scrollbar.h specifier.h sysdll.h systime.h toolbar.h ui-gtk.h window.h winslots.h
 gccache-gtk.o: $(LISP_H) gccache-gtk.h hash.h
-glyphs-gtk.o: $(LISP_H) bitmaps.h buffer.h bufslots.h casetab.h chartab.h conslots.h console-gtk.h console.h device.h faces.h file-coding.h frame.h frameslots.h glyphs-gtk.h glyphs.h gui-gtk.h gui.h imgproc.h insdel.h lstream.h mule-charset.h objects-gtk.h objects.h opaque.h redisplay.h scrollbar.h specifier.h sysdll.h sysfile.h toolbar.h ui-gtk.h window.h winslots.h
+glyphs-gtk.o: $(LISP_H) bitmaps.h buffer.h bufslots.h casetab.h chartab.h conslots.h console-gtk.h console.h device.h elhash.h events.h faces.h file-coding.h frame.h frameslots.h glyphs-gtk.h glyphs.h gui-gtk.h gui.h imgproc.h insdel.h lstream.h mule-charset.h objects-gtk.h objects.h opaque.h redisplay.h scrollbar.h specifier.h sysdll.h sysfile.h systime.h toolbar.h ui-gtk.h window.h winslots.h
 gui-gtk.o: $(LISP_H) buffer.h bufslots.h casetab.h chartab.h conslots.h console-gtk.h console.h device.h frame.h frameslots.h glyphs.h gui-gtk.h gui.h mule-charset.h opaque.h redisplay.h scrollbar.h specifier.h toolbar.h window.h winslots.h
 menubar-gtk.o: $(LISP_H) buffer.h bufslots.h casetab.h chartab.h commands.h conslots.h console-gtk.h console.h device.h events.h frame.h frameslots.h glyphs.h gui-gtk.h gui.h mule-charset.h opaque.h redisplay.h scrollbar.h specifier.h sysdll.h systime.h toolbar.h ui-gtk.h window.h winslots.h
 objects-gtk.o: $(LISP_H) buffer.h bufslots.h casetab.h chartab.h conslots.h console-gtk.h console.h device.h insdel.h mule-charset.h objects-gtk.h objects.h specifier.h
index c17c597..83c684f 100644 (file)
@@ -198,7 +198,7 @@ gtk_init_device (struct device *d, Lisp_Object props)
   XSETDEVICE (device, d);
 
   /* gtk_init() and even gtk_check_init() are so brain dead that
-     getting an empty argv array causes them to abort. */
+     getting an empty argv array causes them to ABORT. */
   if (NILP (Vgtk_initial_argv_list))
     {
       signal_simple_error ("gtk-initial-argv-list must be set before creating Gtk devices", Vgtk_initial_argv_list);
index d215238..62536b7 100644 (file)
@@ -804,7 +804,7 @@ mswindows_get_default_margin (Lisp_Object prop)
   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;
 }
 
index 4a8c0ca..64dc23c 100644 (file)
@@ -86,7 +86,7 @@ tty_init_device (struct device *d, Lisp_Object props)
     case TTY_INIT_SUCCESS:
       break;
     default:
-      abort ();
+      ABORT ();
     }
 
   init_one_device (d);
index 6fc5ff9..17ef7e2 100644 (file)
@@ -141,7 +141,7 @@ get_device_from_display (Display *dpy)
        (STRINGP (Vinvocation_name) ?
        (char *) XSTRING_DATA (Vinvocation_name) : FALLBACK_RESOURCE_NAME),
        DisplayString (dpy) ? DisplayString (dpy) : "???");
-    abort();
+    ABORT();
   }
 
 #undef FALLBACK_RESOURCE_NAME
@@ -420,7 +420,7 @@ x_get_visual_depth (Display *dpy, Visual *visual)
   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;
index 1d08478..6d91c90 100644 (file)
@@ -740,11 +740,11 @@ void DGifSlurp(GifFileType *GifFile)
            case EXTENSION_RECORD_TYPE:
                DGifGetExtension(GifFile,&sp->Function,&ExtData);
                
-               do {
+               while (ExtData != NULL) {
                    if (AddExtensionBlock(sp, ExtData[0], ExtData+1) == GIF_ERROR)
                        GifInternError(GifFile, D_GIF_ERR_NOT_ENOUGH_MEM);
                    DGifGetExtensionNext(GifFile, &ExtData);
-               } while (ExtData != NULL);
+               }
                break;
 
            case TERMINATE_RECORD_TYPE:
index b9951ae..6b78e77 100644 (file)
@@ -222,7 +222,7 @@ parse_doprnt_spec (const Bufbyte *format, Bytecount format_length)
                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);
            }
@@ -383,7 +383,7 @@ get_doprnt_args (printf_spec_dynarr *specs, va_list vargs)
        arg.d = va_arg (vargs, double);
       else if (strchr (string_converters, ch))
        arg.bp = va_arg (vargs, Bufbyte *);
-      else abort ();
+      else ABORT ();
 
       Dynarr_add (args, arg);
     }
index b60496c..c1a9912 100644 (file)
@@ -440,7 +440,7 @@ pdump_get_indirect_count (EMACS_INT code,
       stderr_out ("Unsupported count type : %d (line = %d, code=%ld)\n",
                  idesc[line].type, line, (long)code);
       pdump_backtrace ();
-      abort ();
+      ABORT ();
     }
   count += delta;
   return count;
@@ -540,7 +540,7 @@ pdump_register_sub (const void *data, const struct lrecord_description *desc, in
        default:
          stderr_out ("Unsupported dump type : %d\n", desc[pos].type);
          pdump_backtrace ();
-         abort ();
+         ABORT ();
        };
     }
 }
@@ -569,7 +569,7 @@ pdump_register_object (Lisp_Object obj)
       if (me>65536)
        {
          stderr_out ("Backtrace overflow, loop ?\n");
-         abort ();
+         ABORT ();
        }
       backtrace[me].obj = objh;
       backtrace[me].position = 0;
@@ -604,7 +604,7 @@ pdump_register_struct (const void *data,
       if (me>65536)
        {
          stderr_out ("Backtrace overflow, loop ?\n");
-         abort ();
+         ABORT ();
        }
       backtrace[me].obj = 0;
       backtrace[me].position = 0;
@@ -717,7 +717,7 @@ pdump_dump_data (pdump_entry_list_elt *elt,
                  }
                default:
                  stderr_out ("Unsupported dump type : %d\n", desc[pos].type);
-                 abort ();
+                 ABORT ();
                }
            }
        }
@@ -795,7 +795,7 @@ pdump_reloc_one (void *data, EMACS_INT delta,
          }
        default:
          stderr_out ("Unsupported dump type : %d\n", desc[pos].type);
-         abort ();
+         ABORT ();
        };
     }
 }
index 0293331..9055e93 100644 (file)
@@ -336,7 +336,7 @@ print_hash_table (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
   else if (ht->test_function == lisp_object_eql_equal)
     DO_NOTHING;
   else
-    abort ();
+    ABORT ();
 
   if (ht->count || !print_readably)
     {
@@ -461,7 +461,7 @@ make_standard_lisp_hash_table (enum hash_table_test test,
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 
   return make_general_lisp_hash_table (hash_function, test_function,
@@ -730,7 +730,7 @@ hash_table_instantiate (Lisp_Object plist)
       else if (EQ (key, Qdata))                    data             = value;
       else if (EQ (key, Qtype))/*obsolete*/ weakness        = value;
       else
-       abort ();
+       ABORT ();
     }
 
   /* Create the hash table.  */
index ea67ffc..8d3485b 100644 (file)
@@ -344,7 +344,7 @@ uintptr_t bss_end = 0;
 #endif
 
 /* Number of bytes of writable memory we can expect to be able to get */
-unsigned int lim_data;
+unsigned long lim_data;
 
 /* WARNING!
 
@@ -560,7 +560,7 @@ DEFUN ("force-debugging-signal", Fforce_debugging_signal, 0, 1, 0, /*
 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)!
 */
@@ -568,7 +568,7 @@ systems)!
 {
   debugging_breakpoint ();
   if (!NILP (abort_))
-    abort ();
+    ABORT ();
   return Qnil;
 }
 
@@ -2656,7 +2656,7 @@ sort_args (int argc, char **argv)
        }
 
       if (best < 0)
-       abort ();
+       ABORT ();
 
       /* Copy the highest priority remaining option, with its args, to NEW_ARGV.  */
       new_argv[to++] = argv[best];
@@ -2821,7 +2821,7 @@ main (int argc, char **argv, char **envp)
     {
 #ifdef DOUG_LEA_MALLOC
       if (mallopt (M_MMAP_MAX, 0) != 1)
-       abort();
+       ABORT();
 #endif
       run_temacs_argc = 0;
       if (! SETJMP (run_temacs_catch))
@@ -2868,7 +2868,7 @@ main (int argc, char **argv, char **envp)
       if (rc != 0)
        {
          stderr_out ("malloc_set_state failed, rc = %d\n", rc);
-         abort ();
+         ABORT ();
        }
 #if 0
       free (malloc_state_ptr);
@@ -2879,7 +2879,7 @@ main (int argc, char **argv, char **envp)
     (defined(__GLIBC__) && __GLIBC_MINOR__ < 1 && !defined(MULE)) || \
     defined(DEBUG_DOUG_LEA_MALLOC)
       if(mallopt (M_MMAP_MAX, 0) != 1)
-       abort();
+       ABORT();
 #endif
 #ifdef REL_ALLOC
       r_alloc_reinit ();
@@ -3356,7 +3356,6 @@ Non-nil return value means XEmacs is running without interactive terminal.
    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. */
 
 static int in_assert_failed;
@@ -3368,8 +3367,6 @@ static const char *assert_failed_expr;
 #undef fprintf
 #endif
 
-#undef abort   /* avoid infinite #define loop... */
-
 #if defined (WIN32_NATIVE) && defined (DEBUG_XEMACS)
 #define enter_debugger() DebugBreak ()
 #else
@@ -3426,12 +3423,11 @@ assert_failed (const char *file, int line, const char *expr)
 
   enter_debugger ();
 #if !defined (ASSERTIONS_DONT_ABORT)
-  abort ();
+  abort (); /* The real abort(), this time */
 #endif
   inhibit_non_essential_printing_operations = 0;
   in_assert_failed = 0;
 }
-#endif /* USE_ASSERTIONS */
 
 #ifdef QUANTIFY
 DEFUN ("quantify-start-recording-data", Fquantify_start_recording_data,
index 0f0b879..4ac9537 100644 (file)
@@ -1408,7 +1408,7 @@ throw_or_bomb_out (Lisp_Object tag, Lisp_Object val, int bomb_out_p,
 #ifdef DEFEND_AGAINST_THROW_RECURSION
   /* die if we recurse more than is reasonable */
   if (++throw_level > 20)
-    abort();
+    ABORT();
 #endif
 
   /* If bomb_out_p is t, this is being called from Fsignal as a
@@ -1877,13 +1877,13 @@ signal_1 (Lisp_Object sig, Lisp_Object data)
       /* let's not use stderr_out() here, because that does a bunch of
         things that might not be safe yet. */
       fprintf (stderr, "Error before initialization is complete!\n");
-      abort ();
+      ABORT ();
     }
 
   if (gc_in_progress || in_display)
     /* This is one of many reasons why you can't run lisp code from redisplay.
        There is no sensible way to handle errors there. */
-    abort ();
+    ABORT ();
 
   conditions = Fget (sig, Qerror_conditions, Qnil);
 
@@ -2048,7 +2048,7 @@ user invokes the "return from signal" option.
        warn_when_safe_lispobj (Vcurrent_warning_class, Qwarning,
                                Fcons (error_symbol, data));
       Fthrow (Qunbound_suspended_errors_tag, Qnil);
-      abort (); /* Better not get here! */
+      ABORT (); /* Better not get here! */
     }
   RETURN_UNGCPRO (signal_1 (error_symbol, data));
 }
index 961e709..31dd6c6 100644 (file)
@@ -868,7 +868,7 @@ emacs_Xt_mapping_action (Widget w, XEvent* event)
     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();
     }
 }
 
@@ -2380,7 +2380,7 @@ Xt_process_to_emacs_event (Lisp_Event *emacs_event)
          return;
        }
     }
-  abort ();
+  ABORT ();
 }
 
 static void
@@ -3173,7 +3173,7 @@ XtConvertArgRec Const colorConvertArgs[] = {
 
 /* JH: We use this because I think there's a possibility this
    is called before the device is properly set up, in which case
-   I don't want to abort. */
+   I don't want to ABORT. */
 extern struct device *get_device_from_display_1 (Display *dpy);
 
 static
index d9360e3..b2c14ba 100644 (file)
@@ -58,6 +58,10 @@ Boston, MA 02111-1307, USA.  */
 #include "dragdrop.h"
 #endif
 
+#ifdef HAVE_MENUBARS
+# include "menubar.h"
+#endif
+
 #if defined (HAVE_OFFIX_DND)
 #include "offix.h"
 #endif
@@ -88,12 +92,25 @@ static int last_quit_check_signal_tick_count;
 Lisp_Object Qkey_mapping;
 Lisp_Object Qsans_modifiers;
 
-static void enqueue_gtk_dispatch_event (Lisp_Object event);
+void enqueue_gtk_dispatch_event (Lisp_Object event);
 
+/*
+ * 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
 
 
 \f
@@ -1090,7 +1107,7 @@ dragndrop_dropped (GtkWidget *widget,
 
 static Lisp_Object dispatch_event_queue, dispatch_event_queue_tail;
 
-static void
+void
 enqueue_gtk_dispatch_event (Lisp_Object event)
 {
   enqueue_event (event, &dispatch_event_queue, &dispatch_event_queue_tail);
@@ -1291,6 +1308,22 @@ gtk_event_to_emacs_event (struct frame *frame, GdkEvent *gdk_event, struct Lisp_
            GdkEventKey *key_event = &gdk_event->key;
            Lisp_Object keysym;
 
+#ifdef HAVE_MENUBARS
+           /* If the user wants see if the event is a menu bar accelerator.
+              The process of checking absorbs the event and starts menu
+              processing so send a null event into XEmacs to make sure it
+              does nothing.
+           */
+           if (!NILP (Vmenu_accelerator_enabled)
+               && gtk_accel_groups_activate(GTK_OBJECT (FRAME_GTK_SHELL_WIDGET(frame)),
+                                            key_event->keyval,
+                                            *state))
+             {
+               zero_event(emacs_event);
+               return 1;
+             }
+#endif
+
            /* This used to compute the frame from the given X window and
               store it here, but we really don't care about the frame. */
            emacs_event->channel = DEVICE_CONSOLE (d);
index 779f049..2b41016 100644 (file)
@@ -1074,7 +1074,7 @@ mswindows_dequeue_dispatch_event (void)
  * Timeout event matches if interval_id is equal to that of the given event.
  * Keypress event matches if logical AND between modifiers bitmask of the
  * event in the queue and that of the given event is non-zero.
- * For all other event types, this function aborts.
+ * For all other event types, this function ABORTs.
  */
 
 Lisp_Object
index adba519..de65d4e 100644 (file)
@@ -423,7 +423,7 @@ check_event_stream_ok (enum event_stream_operation op)
        case EVENT_STREAM_READ:
          error ("Can't read events in -batch mode");
        default:
-         abort ();
+         ABORT ();
        }
     }
   else if (!event_stream)
@@ -1387,7 +1387,7 @@ is a race condition.  That's why the RESIGNAL argument exists.
   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;
 }
 
@@ -1466,7 +1466,7 @@ is a race condition.  That's why the RESIGNAL argument exists.
   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;
 }
 
@@ -2466,7 +2466,7 @@ A user event is a key press, button press, button release, or
     }
 
   if (!NILP (command_event_queue) || !NILP (command_event_queue_tail))
-    abort ();
+    ABORT ();
 
   /* Now tack our chain of events back on to the front of the queue.
      Actually, since the queue is now drained, we can just replace it.
@@ -3041,7 +3041,7 @@ execute_internal_event (Lisp_Object event)
        return;
       }
     default:
-      abort ();
+      ABORT ();
     }
 }
 
@@ -3409,7 +3409,7 @@ modify them.
     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;
@@ -3553,7 +3553,7 @@ extract_this_command_keys_nth_mouse_event (int n)
        {
          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
@@ -3684,7 +3684,7 @@ lookup_command_event (struct command_builder *command_builder,
                 || e->event_type == button_release_event)
          e->event.button.modifiers |= XEMACS_MOD_META;
        else
-         abort ();
+         ABORT ();
 
        {
          int tckn = event_chain_count (Vthis_command_keys);
@@ -4481,7 +4481,7 @@ CONSOLE defaults to the selected console if omitted.
   /* This junk is so that timestamps don't get to be negative, but contain
      as many bits as this particular emacs will allow.
    */
-  return make_int (((1L << (VALBITS - 1)) - 1) & tiempo);
+  return make_int (EMACS_INT_MAX & tiempo);
 }
 
 \f
index 3d7efb7..0dc49ea 100644 (file)
@@ -223,7 +223,7 @@ poll_fds_for_input (SELECT_TYPE mask)
        return retval;
       if (errno != EINTR)
        {
-         /* Something went seriously wrong; don't abort since maybe
+         /* Something went seriously wrong; don't ABORT since maybe
             the TTY just died at the wrong time. */
          stderr_out ("xemacs: select failed: errno = %d\n", errno);
          return 0;
index 4027f13..d445146 100644 (file)
@@ -31,7 +31,7 @@ Boston, MA 02111-1307, USA.  */
 #include "device.h"
 #include "console-x.h" /* for x_event_name prototype */
 #include "console-gtk.h" /* for gtk_event_name prototype */
-#include "extents.h"   /* Just for the EXTENTP abort check... */
+#include "extents.h"   /* Just for the EXTENTP ABORT check... */
 #include "events.h"
 #include "frame.h"
 #include "glyphs.h"
@@ -125,7 +125,7 @@ mark_event (Lisp_Object obj)
     case dead_event:
       break;
     default:
-      abort ();
+      ABORT ();
     }
   mark_object (event->channel);
   return event->next;
@@ -219,7 +219,7 @@ event_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
 /*  if (e1->timestamp != e2->timestamp) return 0; */
   switch (e1->event_type)
     {
-    default: abort ();
+    default: ABORT ();
 
     case process_event:
       return EQ (e1->event.process.process, e2->event.process.process);
@@ -291,7 +291,7 @@ event_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
                          &e2->event.magic.underlying_mswindows_event,
                          sizeof (union magic_data)));
 #endif
-       abort ();
+       ABORT ();
        return 1; /* not reached */
       }
 
@@ -361,7 +361,7 @@ event_hash (Lisp_Object obj, int depth)
        if (CONSOLE_MSWINDOWS_P (con))
          return HASH2 (hash, e->event.magic.underlying_mswindows_event);
 #endif
-       abort ();
+       ABORT ();
        return 0;
       }
 
@@ -370,7 +370,7 @@ event_hash (Lisp_Object obj, int depth)
       return hash;
 
     default:
-      abort ();
+      ABORT ();
     }
 
   return 0; /* unreached */
@@ -686,7 +686,7 @@ WARNING: the event object returned may be a reused one; see the function
          e->event.misc.y = coord_y;
          break;
        default:
-         abort();
+         ABORT();
        }
     }
 
@@ -747,18 +747,18 @@ that it is safe to do so.
     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 */
@@ -825,7 +825,7 @@ deallocate_event_chain (Lisp_Object event_chain)
 
 /* Return the last event in a chain.
    NOTE: You cannot pass nil as a value here!  The routine will
-   abort if you do. */
+   ABORT if you do. */
 
 Lisp_Object
 event_chain_tail (Lisp_Object event_chain)
@@ -912,7 +912,7 @@ event_chain_count (Lisp_Object event_chain)
   return n;
 }
 
-/* Find the event before EVENT in an event chain.  This aborts
+/* Find the event before EVENT in an event chain.  This ABORTs
    if the event is not in the chain. */
 
 Lisp_Object
@@ -928,7 +928,7 @@ event_chain_find_previous (Lisp_Object event_chain, Lisp_Object event)
       event_chain = XEVENT_NEXT (event_chain);
     }
 
-  abort ();
+  ABORT ();
   return Qnil;
 }
 
@@ -1082,7 +1082,7 @@ event_to_character (Lisp_Event *event,
   if (CHAR_OR_CHAR_INTP (event->event.key.keysym))
     c = XCHAR_OR_CHAR_INT (event->event.key.keysym);
   else if (!SYMBOLP (event->event.key.keysym))
-    abort ();
+    ABORT ();
   else if (allow_non_ascii && !NILP (Vcharacter_set_property)
           /* Allow window-system-specific extensibility of
              keysym->code mapping */
@@ -1307,7 +1307,7 @@ format_event_object (char *buf, Lisp_Event *event, int brief)
     case empty_event:          strcpy (buf, "empty");      return;
     case dead_event:           strcpy (buf, "DEAD-EVENT"); return;
     default:
-      abort ();
+      ABORT ();
       return;
     }
 #define modprint1(x)  do { strcpy (buf, (x)); buf += sizeof (x)-1; } while (0)
@@ -1359,7 +1359,7 @@ format_event_object (char *buf, Lisp_Event *event, int brief)
        }
     }
   else
-    abort ();
+    ABORT ();
   if (mouse_p)
     strncpy (buf, "up", 4);
 }
@@ -1465,7 +1465,7 @@ empty             The event has been allocated but not assigned.
       return Qempty;
 
     default:
-      abort ();
+      ABORT ();
       return Qnil;
     }
 }
@@ -1483,11 +1483,10 @@ See also `current-event-timestamp'.
   /* This junk is so that timestamps don't get to be negative, but contain
      as many bits as this particular emacs will allow.
    */
-  return make_int (((1L << (VALBITS - 1)) - 1) &
-                     XEVENT (event)->timestamp);
+  return make_int (EMACS_INT_MAX & XEVENT (event)->timestamp);
 }
 
-#define TIMESTAMP_HALFSPACE (1L << (VALBITS - 2))
+#define TIMESTAMP_HALFSPACE (1L << (INT_VALBITS - 2))
 
 DEFUN ("event-timestamp<", Fevent_timestamp_lessp, 2, 2, 0, /*
 Return true if timestamp TIME1 is earlier than timestamp TIME2.
@@ -1859,9 +1858,9 @@ event_pixel_translation (Lisp_Object event, int *char_x, int *char_y,
                            || 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;
@@ -2212,7 +2211,7 @@ This is in the form of a property list (alternating keyword/value pairs).
 
   switch (e->event_type)
     {
-    default: abort ();
+    default: ABORT ();
 
     case process_event:
       props = cons3 (Qprocess, e->event.process.process, props);
index 5bc0dc4..ced0424 100644 (file)
@@ -1860,7 +1860,7 @@ extent_in_region_p (EXTENT extent, Bytind from, Bytind to,
       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_bytind_to_startind (obj, from,
@@ -1895,7 +1895,7 @@ extent_in_region_p (EXTENT extent, Bytind from, Bytind to,
        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;
 }
@@ -3005,7 +3005,7 @@ print_extent (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
       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));
 
@@ -4577,10 +4577,10 @@ process_extents_for_insertion_mapper (EXTENT extent, void *arg)
 #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
@@ -4738,7 +4738,7 @@ report_extent_modification_mapper (EXTENT extent, void *arg)
      unbind_to (closure.speccount, Qnil).  This is because
      map_extents_bytind() unbinds before, and with a smaller
      speccount.  The additional unbind_to() in
-     report_extent_modification() would cause XEmacs to abort.  */
+     report_extent_modification() would cause XEmacs to ABORT.  */
   if (closure->speccount == -1)
     {
       closure->speccount = specpdl_depth ();
@@ -5064,7 +5064,7 @@ glyph_layout_to_symbol (glyph_layout layout)
     case GL_INSIDE_MARGIN:  return Qinside_margin;
     case GL_WHITESPACE:            return Qwhitespace;
     default:
-      abort ();
+      ABORT ();
       return Qnil; /* unreached */
     }
 }
index 551415e..d33cc20 100644 (file)
@@ -322,7 +322,7 @@ face_validate (Lisp_Object data, Error_behavior errb)
       if (EQ (keyw, Qname))
        name_seen = 1;
       else
-       abort ();
+       ABORT ();
     }
 
   if (!name_seen)
index fe42ebd..930ecf1 100644 (file)
@@ -433,7 +433,7 @@ eol_type_to_symbol (eol_type_t type)
 {
   switch (type)
     {
-    default: abort ();
+    default: ABORT ();
     case EOL_LF:         return Qlf;
     case EOL_CRLF:       return Qcrlf;
     case EOL_CR:         return Qcr;
@@ -1222,7 +1222,7 @@ subsidiary_coding_system (Lisp_Object coding_system, eol_type_t type)
     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;
@@ -1260,7 +1260,7 @@ Return the type of CODING-SYSTEM.
 {
   switch (XCODING_SYSTEM_TYPE (Fget_coding_system (coding_system)))
     {
-    default: abort ();
+    default: ABORT ();
     case CODESYS_AUTODETECT:   return Qundecided;
 #ifdef MULE
     case CODESYS_SHIFT_JIS:    return Qshift_jis;
@@ -1336,7 +1336,7 @@ Return the PROP property of CODING-SYSTEM.
            break;
 #endif /* MULE */
          default:
-           abort ();
+           ABORT ();
          }
       }
 
@@ -1404,7 +1404,7 @@ Return the PROP property of CODING-SYSTEM.
          unparse_charset_conversion_specs
            (XCODING_SYSTEM (coding_system)->iso2022.output_conv);
       else
-       abort ();
+       ABORT ();
     }
   else if (type == CODESYS_CCL)
     {
@@ -1413,11 +1413,11 @@ Return the PROP property of CODING-SYSTEM.
       else if (EQ (prop, Qencode))
        return XCODING_SYSTEM_CCL_ENCODE (coding_system);
       else
-       abort ();
+       ABORT ();
     }
 #endif /* MULE */
   else
-    abort ();
+    ABORT ();
 
   return Qnil; /* not reached */
 }
@@ -2457,7 +2457,7 @@ mule_decode (Lstream *decoding, const Extbyte *src,
       break;
 #endif /* MULE */
     default:
-      abort ();
+      ABORT ();
     }
 }
 
@@ -2872,7 +2872,7 @@ mule_encode (Lstream *encoding, const Bufbyte *src,
       break;
 #endif /* MULE */
     default:
-      abort ();
+      ABORT ();
     }
 }
 
@@ -3768,7 +3768,7 @@ encode_coding_ucs4 (Lstream *encoding, const Bufbyte *src,
                    }
                  break;
                default:
-                 abort ();
+                 ABORT ();
                }
            }
        }
@@ -4061,7 +4061,7 @@ encode_coding_utf8 (Lstream *encoding, const Bufbyte *src,
                    }
                  break;
                default:
-                 abort ();
+                 ABORT ();
                }
            }
        }
@@ -4609,7 +4609,7 @@ parse_iso2022_esc (Lisp_Object codesys, struct iso2022_decoder *iso,
        else
          {
            /* Can this ever be reached? -slb */
-           abort();
+           ABORT();
            return 0;
          }
 
@@ -5400,7 +5400,7 @@ encode_coding_iso2022 (Lstream *encoding, const Bufbyte *src,
                  break;
 
                default:
-                 abort ();
+                 ABORT ();
                }
            }
          char_boundary = 0;
@@ -5483,7 +5483,7 @@ encode_coding_iso2022 (Lstream *encoding, const Bufbyte *src,
                    }
                  break;
                default:
-                 abort ();
+                 ABORT ();
                }
            }
        }
index ff19f3e..f2b20c3 100644 (file)
@@ -3199,6 +3199,11 @@ of the CODESYS argument under XEmacs/Mule. (When Mule support is not
 present, both functions are identical and ignore the CODESYS argument.)
 If support for Mule exists in this Emacs, the file is encoded according
 to the value of CODESYS.  If this is nil, no code conversion occurs.
+
+As a special kludge to support auto-saving, when START is nil START and
+END are set to the beginning and end, respectively, of the buffer,
+regardless of any restrictions.  Don't use this feature.  It is documented
+here because write-region handler writers need to be aware of it.
 */
        (start, end, filename, append, visit, lockname, codesys))
 {
@@ -3923,7 +3928,7 @@ do_auto_save_unwind_2 (Lisp_Object old_auto_saving)
    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!
  */
 
index de0c407..0a1d9ab 100644 (file)
@@ -128,15 +128,16 @@ static const char *float_error_fn_name;
 static Lisp_Object
 float_to_int (double x, const char *name, Lisp_Object num, Lisp_Object num2)
 {
-  if (x >= ((EMACS_INT) 1 << (VALBITS-1))
-      || x <= - ((EMACS_INT) 1 << (VALBITS-1)) - (EMACS_INT) 1)
-  {
-    if (!UNBOUNDP (num2))
-      range_error2 (name, num, num2);
-    else
-      range_error (name, num);
-  }
-  return (make_int ((EMACS_INT) x));
+  REGISTER EMACS_INT result = (EMACS_INT) x;
+
+  if (result > EMACS_INT_MAX || result < EMACS_INT_MIN)
+    {
+      if (!UNBOUNDP (num2))
+       range_error2 (name, num, num2);
+      else
+       range_error (name, num);
+    }
+  return make_int (result);
 }
 
 
@@ -708,7 +709,7 @@ This is the same as the exponent of a float.
   double f = extract_float (number);
 
   if (f == 0.0)
-    return make_int (- (EMACS_INT)(((EMACS_UINT) 1) << (VALBITS - 1))); /* most-negative-fixnum */
+    return make_int (EMACS_INT_MIN);
 #ifdef HAVE_LOGB
   {
     Lisp_Object val;
index 9227b81..6ea4113 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -143,7 +143,7 @@ extern void seed_random (long arg);
 DEFUN ("random", Frandom, 0, 1, 0, /*
 Return a pseudo-random number.
 All integers representable in Lisp are equally likely.
-  On most systems, this is 28 bits' worth.
+  On most systems, this is 31 bits' worth.
 With positive integer argument N, return random number in interval [0,N).
 With argument t, set the random number seed from the current time and pid.
 */
@@ -163,7 +163,7 @@ With argument t, set the random number seed from the current time and pid.
         it's possible to get a quotient larger than limit; discarding
         these values eliminates the bias that would otherwise appear
         when using a large limit.  */
-      denominator = ((unsigned long)1 << VALBITS) / XINT (limit);
+      denominator = ((unsigned long)1 << INT_VALBITS) / XINT (limit);
       do
        val = get_random () / denominator;
       while (val >= XINT (limit));
@@ -712,7 +712,7 @@ concat (int nargs, Lisp_Object *args,
         break;
       default:
        val = Qnil;
-        abort ();
+        ABORT ();
       }
   }
 
@@ -1001,7 +1001,7 @@ are copied to the new string.
     }
   else
     {
-      abort (); /* unreachable, since Flength (sequence) did not get
+      ABORT (); /* unreachable, since Flength (sequence) did not get
                    an error */
       return Qnil;
     }
@@ -3020,7 +3020,7 @@ mapcar1 (size_t leni, Lisp_Object *vals,
        }
     }
   else
-    abort (); /* unreachable, since Flength (sequence) did not get an error */
+    ABORT (); /* unreachable, since Flength (sequence) did not get an error */
 
   if (vals)
     UNGCPRO;
@@ -3637,7 +3637,7 @@ into shorter lines.
   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
@@ -3679,7 +3679,7 @@ into shorter lines.
   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);
   XMALLOC_UNBIND (encoded, allength, speccount);
@@ -3712,7 +3712,7 @@ Characters out of the base64 alphabet are ignored.
   XMALLOC_OR_ALLOCA (decoded, length * MAX_EMCHAR_LEN, Bufbyte);
   decoded_length = base64_decode_1 (XLSTREAM (input), decoded, &cc_decoded_length);
   if (decoded_length > length * MAX_EMCHAR_LEN)
-    abort ();
+    ABORT ();
   Lstream_delete (XLSTREAM (input));
 
   /* Now we have decoded the region, so we insert the new contents
@@ -3753,7 +3753,7 @@ Characters out of the base64 alphabet are ignored.
   decoded_length = base64_decode_1 (XLSTREAM (input), decoded,
                                    &cc_decoded_length);
   if (decoded_length > length * MAX_EMCHAR_LEN)
-    abort ();
+    ABORT ();
   Lstream_delete (XLSTREAM (input));
 
   result = make_string (decoded, decoded_length);
index 1cfd739..bb89224 100644 (file)
@@ -515,7 +515,7 @@ find_context (struct buffer *buf, Bufpos pt)
              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;
 
@@ -607,7 +607,7 @@ find_context (struct buffer *buf, Bufpos pt)
        {
          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) &&
@@ -648,18 +648,18 @@ find_context (struct buffer *buf, Bufpos pt)
           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;
        }
@@ -668,7 +668,7 @@ find_context (struct buffer *buf, Bufpos pt)
          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)
@@ -691,7 +691,7 @@ context_to_symbol (enum syntactic_context context)
     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 */
     }
 }
 
index 3f3d754..91951cf 100644 (file)
@@ -27,6 +27,7 @@ Boston, MA 02111-1307, USA.  */
 #include <config.h>
 #include "lisp.h"
 
+#include "elhash.h"
 #include "console-gtk.h"
 #include "ui-gtk.h"
 #include "glyphs-gtk.h"
@@ -54,7 +55,6 @@ Boston, MA 02111-1307, USA.  */
 #define INTERNAL_BORDER_WIDTH 0
 
 #define TRANSIENT_DATA_IDENTIFIER "xemacs::transient_for"
-#define FRAME_DATA_IDENTIFIER "xemacs::frame"
 #define UNMAPPED_DATA_IDENTIFIER "xemacs::initially_unmapped"
 
 #define STUPID_X_SPECIFIC_GTK_STUFF
@@ -98,6 +98,23 @@ static guint dnd_n_targets = sizeof(dnd_target_table) / sizeof(dnd_target_table[
 /*                          helper functions                            */
 /************************************************************************/
 
+/* Return the Emacs frame-object which contains the given widget. */
+struct frame *
+gtk_widget_to_frame (GtkWidget *w)
+{
+  struct frame *f = NULL;
+
+  for (; w; w = w->parent)
+    {
+      if ((f = (struct frame *) gtk_object_get_data (GTK_OBJECT (w),
+                                                    GTK_DATA_FRAME_IDENTIFIER)))
+       return (f);
+    }
+
+  return (selected_frame());
+}
+
+
 /* Return the Emacs frame-object corresponding to an X window */
 struct frame *
 gtk_window_to_frame (struct device *d, GdkWindow *wdesc)
@@ -811,7 +828,7 @@ gtk_create_widgets (struct frame *f, Lisp_Object lisp_window_id, Lisp_Object par
 
   gtk_container_set_border_width (GTK_CONTAINER (shell), 0);
 
-  gtk_object_set_data (GTK_OBJECT (shell), FRAME_DATA_IDENTIFIER, f);
+  gtk_object_set_data (GTK_OBJECT (shell), GTK_DATA_FRAME_IDENTIFIER, f);
 
   FRAME_GTK_SHELL_WIDGET (f) = shell;
 
@@ -937,6 +954,18 @@ allocate_gtk_frame_struct (struct frame *f)
   /* yeah, except the lisp ones */
   FRAME_GTK_ICON_PIXMAP (f) = Qnil;
   FRAME_GTK_ICON_PIXMAP_MASK (f) = Qnil;
+
+  /*
+    Hashtables of callback data for glyphs on the frame.  Make them EQ because
+    we only use ints as keys.  Otherwise we run into stickiness in redisplay
+    because internal_equal() can QUIT.  See enter_redisplay_critical_section().
+  */
+  FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE (f) =
+    make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
+  FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE (f) =
+    make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
+  FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE (f) =
+    make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
 }
 
 \f
@@ -1022,6 +1051,9 @@ gtk_mark_frame (struct frame *f)
   mark_object (FRAME_GTK_LISP_WIDGETS (f)[0]);
   mark_object (FRAME_GTK_LISP_WIDGETS (f)[1]);
   mark_object (FRAME_GTK_LISP_WIDGETS (f)[2]);
+  mark_object (FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE (f));
+  mark_object (FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE (f));
+  mark_object (FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE (f));
 }
 
 static void
@@ -1057,7 +1089,7 @@ gtk_set_frame_pointer (struct frame *f)
     }
   else
     {
-      /* abort()? */
+      /* ABORT()? */
       stderr_out ("POINTER_IMAGE_INSTANCEP (f->pointer) failed!\n");
     }
 }
@@ -1219,7 +1251,7 @@ gtk_lower_frame (struct frame *f)
 static void
 gtk_make_frame_visible (struct frame *f)
 {
-    gtk_widget_show_all (FRAME_GTK_SHELL_WIDGET (f));
+    gtk_widget_map (FRAME_GTK_SHELL_WIDGET (f));
     gtk_raise_frame_1 (f, 0);
 }
 
@@ -1227,7 +1259,7 @@ gtk_make_frame_visible (struct frame *f)
 static void
 gtk_make_frame_invisible (struct frame *f)
 {
-    gtk_widget_hide (FRAME_GTK_SHELL_WIDGET (f));
+    gtk_widget_unmap(FRAME_GTK_SHELL_WIDGET (f));
 }
 
 static int
@@ -1367,7 +1399,7 @@ gtk_update_frame_external_traits (struct frame* frm, Lisp_Object name)
      }
    }
   else
-   abort ();
+   ABORT ();
 
 #ifdef HAVE_TOOLBARS
   /* Setting the background clears the entire frame area
index f3aaef1..780367d 100644 (file)
@@ -210,14 +210,14 @@ decode_x_frame (Lisp_Object frame)
 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);
 }
 
@@ -226,7 +226,7 @@ x_wm_mark_shell_position_user_specified (Widget wmshell)
 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:
 
@@ -256,9 +256,9 @@ x_wm_set_cell_size (Widget wmshell, int cw, int ch)
   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);
@@ -271,7 +271,7 @@ x_wm_set_variable_size (Widget wmshell, int width, int height)
   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);
@@ -338,7 +338,7 @@ x_wm_store_class_hints (Widget shell, char *frame_name)
   XClassHint classhint;
 
   if (!XtIsWMShell (shell))
-    abort ();
+    ABORT ();
 
   XtGetApplicationNameAndClass (dpy, &app_name, &app_class);
   classhint.res_name = frame_name;
@@ -354,7 +354,7 @@ x_wm_maybe_store_wm_command (struct frame *f)
   struct device *d = XDEVICE (FRAME_DEVICE (f));
 
   if (!XtIsWMShell (w))
-    abort ();
+    ABORT ();
 
   if (NILP (DEVICE_X_WM_COMMAND_FRAME (d)))
     {
@@ -1637,7 +1637,7 @@ x_initialize_frame_size (struct frame *f)
   /* 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.
@@ -2755,7 +2755,7 @@ x_update_frame_external_traits (struct frame* frm, Lisp_Object name)
        }
    }
   else
-   abort ();
+   ABORT ();
 
   XtSetValues (FRAME_X_TEXT_WIDGET (frm), al, ac);
 
index 6c98955..9a0e700 100644 (file)
@@ -779,7 +779,7 @@ selected_frame (void)
 /* 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 *
@@ -1633,7 +1633,7 @@ delete_frame_internal (struct frame *f, int force,
             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;
        }
@@ -1707,7 +1707,7 @@ mouse_pixel_position_1 (struct device *d, Lisp_Object *frame,
       break;
 
     default:
-      abort (); /* method is incorrectly written */
+      ABORT (); /* method is incorrectly written */
     }
 
   return 0;
@@ -2951,7 +2951,7 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth)
      `left' coordinates to be recomputed even though no frame size
      change occurs. --kyle */
   if (in_display)
-    abort ();
+    ABORT ();
 
   XSETFRAME (frame, f);
 
index 4dbd9ba..4d18ca2 100644 (file)
@@ -141,7 +141,7 @@ check_free (void *ptr)
          /* 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 +155,7 @@ check_free (void *ptr)
 #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 +264,7 @@ check_realloc (void * ptr, size_t size)
        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 +445,7 @@ block_input_history blhist[BLHISTLIMIT];
 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 +485,15 @@ log_gcpro (char *file, int line, struct gcpro *value, blocktype type)
   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;
index afc5830..50566c1 100644 (file)
@@ -160,8 +160,8 @@ gc_cache_lookup (struct gc_cache *cache, GdkGCValues *gcv, GdkGCValuesMask mask)
   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 @@ gc_cache_lookup (struct gc_cache *cache, GdkGCValues *gcv, GdkGCValuesMask mask)
       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 @@ gc_cache_lookup (struct gc_cache *cache, GdkGCValues *gcv, GdkGCValuesMask mask)
 #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). */
index c295834..3974bc0 100644 (file)
@@ -2,7 +2,7 @@
    Copyright (C) 1993, 1994, 1998 Free Software Foundation, Inc.
    Copyright (C) 1995 Board of Trustees, University of Illinois.
    Copyright (C) 1995 Tinker Systems
-   Copyright (C) 1995, 1996 Ben Wing
+   Copyright (C) 1995, 1996, 2005 Ben Wing
    Copyright (C) 1995 Sun Microsystems
 
 This file is part of XEmacs.
@@ -105,6 +105,19 @@ Lisp_Object Qpng;
 #ifdef __cplusplus
 extern "C" {
 #endif
+
+#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>
 #ifdef __cplusplus
@@ -1103,7 +1116,7 @@ tiff_memory_read(thandle_t data, tdata_t buf, tsize_t size)
 
 static size_t tiff_memory_write(thandle_t data, tdata_t buf, tsize_t size)
 {
-  abort();
+  ABORT();
   return 0;                    /* Shut up warnings. */
 }
 
index 69e59e1..d33e8d0 100644 (file)
@@ -63,6 +63,8 @@ Boston, MA 02111-1307, USA.  */
 #include "insdel.h"
 #include "opaque.h"
 #include "faces.h"
+#include "elhash.h"
+#include "events.h"
 
 #include "imgproc.h"
 
@@ -70,10 +72,19 @@ Boston, MA 02111-1307, USA.  */
 
 #include <setjmp.h>
 
+#if defined (HAVE_XPM)
+#include <X11/xpm.h>
+#endif
+
 #ifdef FILE_CODING
 #include "file-coding.h"
 #endif
 
+extern void enqueue_gtk_dispatch_event (Lisp_Object event);
+
+/* Widget callback hash table callback slot. */
+#define WIDGET_GLYPH_SLOT 0
+
 #if INTBITS == 32
 # define FOUR_BYTE_TYPE unsigned int
 #elif LONGBITS == 32
@@ -412,7 +423,7 @@ gtk_finalize_image_instance (struct Lisp_Image_Instance *p)
 #endif
       else if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
        {
-         abort();
+         ABORT();
        }
       else
        {
@@ -777,7 +788,7 @@ void init_image_instance_from_gdk_pixmap (struct Lisp_Image_Instance *ii,
   gint width, height, depth;
 
   if (!DEVICE_GTK_P (device))
-    abort ();
+    ABORT ();
 
   IMAGE_INSTANCE_DEVICE (ii) = device;
   IMAGE_INSTANCE_TYPE (ii) = IMAGE_COLOR_PIXMAP;
@@ -1023,7 +1034,7 @@ init_image_instance_from_xbm_inline (struct Lisp_Image_Instance *ii,
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 }
 
@@ -1084,105 +1095,21 @@ gtk_xbm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 /**********************************************************************
  *                             XPM                                    *
  **********************************************************************/
-static void
-write_lisp_string_to_temp_file (Lisp_Object string, char *filename_out)
-{
-  Lisp_Object instream, outstream;
-  Lstream *istr, *ostr;
-  char tempbuf[1024]; /* some random amount */
-  int fubar = 0;
-  FILE *tmpfil;
-  static Extbyte_dynarr *conversion_out_dynarr;
-  Bytecount bstart, bend;
-  struct gcpro gcpro1, gcpro2;
-#ifdef FILE_CODING
-  Lisp_Object conv_out_stream;
-  Lstream *costr;
-  struct gcpro gcpro3;
-#endif
-
-  /* This function can GC */
-  if (!conversion_out_dynarr)
-    conversion_out_dynarr = Dynarr_new (Extbyte);
-  else
-    Dynarr_reset (conversion_out_dynarr);
-
-  /* Create the temporary file ... */
-  sprintf (filename_out, "/tmp/emacs%d.XXXXXX", (int) getpid ());
-  mktemp (filename_out);
-  tmpfil = fopen (filename_out, "w");
-  if (!tmpfil)
-    {
-      if (tmpfil)
-       {
-         int old_errno = errno;
-         fclose (tmpfil);
-         unlink (filename_out);
-         errno = old_errno;
-       }
-      report_file_error ("Creating temp file",
-                        list1 (build_string (filename_out)));
-    }
-
-  CHECK_STRING (string);
-  get_string_range_byte (string, Qnil, Qnil, &bstart, &bend,
-                        GB_HISTORICAL_STRING_BEHAVIOR);
-  instream = make_lisp_string_input_stream (string, bstart, bend);
-  istr = XLSTREAM (instream);
-  /* setup the out stream */
-  outstream = make_dynarr_output_stream((unsigned_char_dynarr *)conversion_out_dynarr);
-  ostr = XLSTREAM (outstream);
-#ifdef FILE_CODING
-  /* setup the conversion stream */
-  conv_out_stream = make_encoding_output_stream (ostr, Fget_coding_system(Qbinary));
-  costr = XLSTREAM (conv_out_stream);
-  GCPRO3 (instream, outstream, conv_out_stream);
-#else
-  GCPRO2 (instream, outstream);
-#endif
 
-  /* Get the data while doing the conversion */
+/* strcasecmp() is not sufficiently portable or standard,
+   and it's easier just to write our own. */
+static int
+ascii_strcasecmp (const char *s1, const char *s2)
+{
   while (1)
     {
-      int size_in_bytes = Lstream_read (istr, tempbuf, sizeof (tempbuf));
-      if (!size_in_bytes)
-       break;
-      /* It does seem the flushes are necessary... */
-#ifdef FILE_CODING
-      Lstream_write (costr, tempbuf, size_in_bytes);
-      Lstream_flush (costr);
-#else
-      Lstream_write (ostr, tempbuf, size_in_bytes);
-#endif
-      Lstream_flush (ostr);
-      if (fwrite ((unsigned char *)Dynarr_atp(conversion_out_dynarr, 0),
-                 Dynarr_length(conversion_out_dynarr), 1, tmpfil) != 1)
-       {
-         fubar = 1;
-         break;
-       }
-      /* reset the dynarr */
-      Lstream_rewind(ostr);
+      char c1 = *s1++;
+      char c2 = *s2++;
+      if (c1 >= 'A' && c1 <= 'Z') c1 += 'a' - 'A';
+      if (c2 >= 'A' && c2 <= 'Z') c2 += 'a' - 'A';
+      if (c1 != c2) return c1 - c2;
+      if (c1 == '\0') return 0;
     }
-  
-  if (fclose (tmpfil) != 0)
-    fubar = 1;
-  Lstream_close (istr);
-#ifdef FILE_CODING
-  Lstream_close (costr);
-#endif
-  Lstream_close (ostr);
-
-  UNGCPRO;
-  Lstream_delete (istr);
-  Lstream_delete (ostr);
-#ifdef FILE_CODING
-  Lstream_delete (costr);
-#endif
-
-  if (fubar)
-    report_file_error ("Writing temp file",
-                      list1 (build_string (filename_out)));
 }
 
 struct color_symbol
@@ -1271,12 +1198,12 @@ gtk_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   GdkWindow *window = 0;
   int nsymbols = 0, i = 0;
   struct color_symbol *color_symbols = NULL;
-  GdkColor *transparent_color = NULL;
   Lisp_Object color_symbol_alist = find_keyword_in_vector (instantiator,
                                                           Q_color_symbols);
   enum image_instance_type type;
   int force_mono;
   unsigned int w, h;
+  const unsigned char * volatile dstring;
 
   if (!DEVICE_GTK_P (XDEVICE (device)))
     signal_simple_error ("Not a Gtk device", device);
@@ -1302,20 +1229,58 @@ gtk_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
 
   assert (!NILP (data));
 
-  /* Need to get the transparent color here */
-  color_symbols = extract_xpm_color_names (device, domain, color_symbol_alist, &nsymbols);
-  for (i = 0; i < nsymbols; i++)
-    {
-      if (!strcasecmp ("BgColor", color_symbols[i].name) ||
-         !strcasecmp ("None", color_symbols[i].name))
-       {
-         transparent_color = &color_symbols[i].color;
-       }
-    }
+  /* Extract all the entries from xpm-color-symbols */
+  color_symbols = extract_xpm_color_names (device, domain, color_symbol_alist,
+                                          &nsymbols);
+
+  assert (!NILP (data));
 
-  write_lisp_string_to_temp_file (data, temp_file_name);
-  pixmap = gdk_pixmap_create_from_xpm (window, &mask, transparent_color, temp_file_name);
-  unlink (temp_file_name);
+
+  LISP_STRING_TO_EXTERNAL(data, dstring, Qbinary);
+
+  /*
+   * GTK only uses the 'c' color entry of an XPM and doesn't use the symbolic
+   * color names at all.  This is unfortunate because the way to change the
+   * colors from lisp is by adding the symbolic names, and the new colors, to
+   * the variable xpm-color-symbols.
+   *
+   * To get around this decode the XPM, add a 'c' entry of the desired color
+   * for each matching symbolic color, recode the XPM and pass it to GTK.  The
+   * decode and recode stages aren't too bad because this also performs the
+   * external to internal format translation, which avoids contortions like
+   * writing the XPM back to disk in order to get it processed.
+   */
+
+  {
+    XpmImage image;
+    XpmInfo info;
+    char** data;
+
+    XpmCreateXpmImageFromBuffer ((char*) dstring, &image, &info);
+
+    for (i = 0; i < nsymbols; i++)
+      {
+       unsigned j;
+
+       for (j = 0; j < image.ncolors; j++)
+         {
+           if (image.colorTable[j].symbolic != NULL &&
+               !ascii_strcasecmp(color_symbols[i].name, image.colorTable[j].symbolic))
+             {
+               image.colorTable[j].c_color = xmalloc(16);
+
+               sprintf(image.colorTable[j].c_color, "#%.4x%.4x%.4x",
+                       color_symbols[i].color.red, color_symbols[i].color.green,
+                       color_symbols[i].color.blue);
+             }
+         }
+      }
+
+    XpmCreateDataFromXpmImage (&data, &image, &info);
+
+    pixmap = gdk_pixmap_create_from_xpm_d (window, &mask, NULL,
+                                          data);
+  }
 
   if (color_symbols) xfree (color_symbols);
 
@@ -1327,7 +1292,7 @@ gtk_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   gdk_window_get_geometry (pixmap, NULL, NULL, &w, &h, &depth);
 
   IMAGE_INSTANCE_GTK_PIXMAP (ii) = pixmap;
-  IMAGE_INSTANCE_GTK_MASK (ii) = mask;
+  IMAGE_INSTANCE_PIXMAP_MASK (ii) = (void*) mask;
   IMAGE_INSTANCE_GTK_COLORMAP (ii) = cmap;
   IMAGE_INSTANCE_GTK_PIXELS (ii) = 0;
   IMAGE_INSTANCE_GTK_NPIXELS (ii) = 0;
@@ -1382,7 +1347,7 @@ gtk_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 }
 #endif /* HAVE_XPM */
@@ -2033,7 +1998,7 @@ gtk_unmap_subwindow (Lisp_Image_Instance *p)
   if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
     {
       /* We don't support subwindows, but we do support widgets... */
-      abort ();
+      ABORT ();
     }
   else                         /* must be a widget */
     {
@@ -2056,13 +2021,14 @@ gtk_map_subwindow (Lisp_Image_Instance *p, int x, int y,
   if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW)
     {
       /* No subwindow support... */
-      abort ();
+      ABORT ();
     }
   else                         /* must be a widget */
     {
       struct frame *f = XFRAME (IMAGE_INSTANCE_FRAME (p));
       GtkWidget *wid = IMAGE_INSTANCE_GTK_CLIPWIDGET (p);
       GtkAllocation a;
+      int moving;
 
       if (!wid) return;
 
@@ -2071,38 +2037,58 @@ gtk_map_subwindow (Lisp_Image_Instance *p, int x, int y,
       a.width = dga->width;
       a.height = dga->height;
 
+      /* Is the widget cganging position? */
+      moving = (a.x != wid->allocation.x) ||
+       (a.y != wid->allocation.y);
+
       if ((a.width  != wid->allocation.width)  ||
-         (a.height != wid->allocation.height))
+         (a.height != wid->allocation.height) ||
+         moving)
        {
          gtk_widget_size_allocate (IMAGE_INSTANCE_GTK_CLIPWIDGET (p), &a);
        }
 
-      /* #### FIXME DAMMIT */
-      if ((wid->allocation.x != -dga->xoffset) ||
-         (wid->allocation.y != -dga->yoffset))
+      if (moving)
        {
          guint32 old_flags = GTK_WIDGET_FLAGS (FRAME_GTK_TEXT_WIDGET (f));
 
-         /* Fucking GtkFixed widget queues a resize when you add a widget.
+         /* GtkFixed widget queues a resize when you add a widget.
          ** But only if it is visible.
          ** losers.
          */
          GTK_WIDGET_FLAGS(FRAME_GTK_TEXT_WIDGET (f)) &= ~GTK_VISIBLE;
+
          if (IMAGE_INSTANCE_GTK_ALREADY_PUT(p))
            {
              gtk_fixed_move (GTK_FIXED (FRAME_GTK_TEXT_WIDGET (f)),
                              wid,
-                             -dga->xoffset, -dga->yoffset);
+                             a.x, a.y);
            }
          else
            {
              IMAGE_INSTANCE_GTK_ALREADY_PUT(p) = TRUE;
              gtk_fixed_put (GTK_FIXED (FRAME_GTK_TEXT_WIDGET (f)),
                             wid,
-                            -dga->xoffset, -dga->yoffset);
+                            a.x, a.y);
            }
+
          GTK_WIDGET_FLAGS(FRAME_GTK_TEXT_WIDGET (f)) = old_flags;
        }
+      else
+       {
+         if (IMAGE_INSTANCE_GTK_ALREADY_PUT(p))
+           {
+             /* Do nothing... */
+           }
+         else
+           {
+             /* Must make sure we have put the image at least once! */
+             IMAGE_INSTANCE_GTK_ALREADY_PUT(p) = TRUE;
+             gtk_fixed_put (GTK_FIXED (FRAME_GTK_TEXT_WIDGET (f)),
+                            wid,
+                            a.x, a.y);
+           }
+       }
 
       if (!IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (p))
        {
@@ -2193,11 +2179,19 @@ gtk_redisplay_widget (Lisp_Image_Instance *p)
       ||
       IMAGE_INSTANCE_TEXT_CHANGED (p))
     {
+      GtkRequisition r;
+      GtkAllocation a = IMAGE_INSTANCE_GTK_CLIPWIDGET (p)->allocation;
+
       assert (IMAGE_INSTANCE_GTK_WIDGET_ID (p) &&
              IMAGE_INSTANCE_GTK_CLIPWIDGET (p)) ;
 
-      /* #### Resize the widget! */
-      /* gtk_widget_size_allocate () */
+      a.width = r.width = IMAGE_INSTANCE_WIDTH (p);
+      a.height = r.height = IMAGE_INSTANCE_HEIGHT (p);
+
+      /* Force the widget's preferred and actual size to what we say it shall
+        be. */
+      gtk_widget_size_request (IMAGE_INSTANCE_GTK_CLIPWIDGET (p), &r);
+      gtk_widget_size_allocate (IMAGE_INSTANCE_GTK_CLIPWIDGET (p), &a);
     }
 
   /* Adjust offsets within the frame. */
@@ -2356,6 +2350,10 @@ gtk_widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator,
   */
   IMAGE_INSTANCE_GTK_CLIPWIDGET (ii) = w;
 
+  /* The current theme may produce a widget of a different size that what we
+     expect so force reconsideration of the widget's size. */
+  IMAGE_INSTANCE_LAYOUT_CHANGED (ii) = 1;
+
   return (Qt);
 }
 
@@ -2404,8 +2402,44 @@ FAKE_GTK_WIDGET_INSTANTIATOR(button);
 FAKE_GTK_WIDGET_INSTANTIATOR(progress_gauge);
 FAKE_GTK_WIDGET_INSTANTIATOR(edit_field);
 FAKE_GTK_WIDGET_INSTANTIATOR(combo_box);
-FAKE_GTK_WIDGET_INSTANTIATOR(tab_control);
 FAKE_GTK_WIDGET_INSTANTIATOR(label);
+/* Note: tab_control has a custom instantiator (see below) */
+
+/*
+  Ask the widget to return it's preferred size.  This device method must
+  defined for all widgets that also have format specific version of
+  query_geometry defined in glyphs-widget.c.  This is because those format
+  specific versions return sizes that are appropriate for the X widgets.  For
+  GTK, the size of a widget can change at runtime due to the user changing
+  their theme.
+
+  This method can be called before the widget is instantiated.  This is
+  because instantiate_image_instantiator() is tying to be helpful to other
+  toolkits and supply sane geometry values to them.  This is not appropriate
+  for GTK and can be ignored.
+
+  This method can be used by all widgets.
+*/
+static void
+gtk_widget_query_geometry (Lisp_Object image_instance,
+                          int* width, int* height,
+                          enum image_instance_geometry disp, Lisp_Object domain)
+{
+  Lisp_Image_Instance *p = XIMAGE_INSTANCE (image_instance);
+
+  if (p->data != NULL)
+    {
+      GtkWidget *w = IMAGE_INSTANCE_GTK_CLIPWIDGET (p);
+      GtkRequisition r;
+
+      gtk_widget_size_request(w, &r);
+      *height= r.height;
+      *width = r.width;
+    }
+}
+
+\f
+/* Button functions. */
 
 /* Update a button's clicked state. */
 static void
@@ -2427,7 +2461,7 @@ gtk_button_redisplay (Lisp_Object image_instance)
   else
     {
       /* Unknown button type... */
-      abort();
+      ABORT();
     }
 }
 
@@ -2448,6 +2482,9 @@ gtk_button_property (Lisp_Object image_instance, Lisp_Object prop)
   return Qunbound;
 }
 
+\f
+/* Progress gauge functions. */
+
 /* set the properties of a progress gauge */
 static void
 gtk_progress_gauge_redisplay (Lisp_Object image_instance)
@@ -2467,6 +2504,198 @@ gtk_progress_gauge_redisplay (Lisp_Object image_instance)
     }
 }
 
+\f
+/* Tab Control functions. */
+
+/*
+  Register a widget's callbacks with the frame's hashtable.  The hashtable is
+  weak so deregistration is handled automatically.  Tab controls have per-tab
+  callback list functions and the GTK callback architecture is not
+  sufficiently flexible to deal with this.  Instead, the functions are
+  registered here and the id is passed through the callback loop.
+ */
+static int
+gtk_register_gui_item (Lisp_Object image_instance, Lisp_Object gui,
+                      Lisp_Object domain)
+{
+  struct frame *f = XFRAME(DOMAIN_FRAME(domain));
+  int id = gui_item_id_hash(FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE(f),
+                           gui, WIDGET_GLYPH_SLOT);
+
+  Fputhash(make_int(id), image_instance,
+          FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE (f));
+  Fputhash(make_int(id), XGUI_ITEM (gui)->callback,
+          FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE (f));
+  Fputhash(make_int(id), XGUI_ITEM (gui)->callback_ex,
+          FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE (f));
+  return id;
+}
+
+/*
+  Append the given item as a tab to the notebook. Callbacks, etc are all
+  setup.
+ */
+static void
+gtk_add_tab_item(Lisp_Object image_instance,
+                GtkNotebook* nb, Lisp_Object item,
+                Lisp_Object domain, int i)
+{
+  Lisp_Object name;
+  int hash_id = 0;
+  char *c_name = NULL;
+  GtkWidget* box;
+
+  if (GUI_ITEMP (item))
+    {
+      Lisp_Gui_Item *pgui = XGUI_ITEM (item);
+
+      if (!STRINGP (pgui->name))
+       pgui->name = Feval (pgui->name);
+
+      CHECK_STRING (pgui->name);
+
+      hash_id = gtk_register_gui_item (image_instance, item, domain);
+      name = pgui->name;
+    }
+  else
+    {
+      CHECK_STRING (item);
+      name = item;
+    }
+
+  TO_EXTERNAL_FORMAT (LISP_STRING, name,
+                     C_STRING_ALLOCA, c_name,
+                     Qctext);
+
+  /* Dummy widget that the notbook wants to display when a tab is selected. */
+  box = gtk_vbox_new (FALSE, 3);
+
+  /*
+    Store the per-tab callback data id in the tab.  The callback functions
+    themselves could have been stored in the widget but this avoids having to
+    worry about the garbage collector running between here and the callback
+    function.
+  */
+  gtk_object_set_data(GTK_OBJECT(box), GTK_DATA_TAB_HASHCODE_IDENTIFIER,
+                     (gpointer) hash_id);
+
+  gtk_notebook_append_page (nb, box, gtk_label_new (c_name));
+}
+
+/* Signal handler for the switch-page signal. */
+static void gtk_tab_control_callback(GtkNotebook *notebook,
+                                    GtkNotebookPage *page,
+                                    gint page_num,
+                                    gpointer user_data)
+{
+  /*
+    This callback is called for every selection, not just user selection.
+    We're only interested in user selection, which occurs outside of
+    redisplay.
+  */
+
+  if (!in_display)
+    {
+      Lisp_Object image_instance, callback, callback_ex;
+      Lisp_Object frame, event;
+      int update_subwindows_p = 0;
+      struct frame *f = gtk_widget_to_frame(GTK_WIDGET(notebook));
+      int id;
+
+      if (!f)
+       return;
+      frame = wrap_frame (f);
+
+      id             = (int) gtk_object_get_data(GTK_OBJECT(page->child),
+                                                GTK_DATA_TAB_HASHCODE_IDENTIFIER);
+      image_instance = Fgethash(make_int(id),
+                               FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE(f), Qnil);
+      callback       = Fgethash(make_int(id),
+                               FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE(f), Qnil);
+      callback_ex    = Fgethash(make_int(id),
+                               FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE(f), Qnil);
+      update_subwindows_p = 1;
+
+      /* It is possible for a widget action to cause it to get out of
+        sync with its instantiator. Thus it is necessary to signal
+        this possibility. */
+      if (IMAGE_INSTANCEP (image_instance))
+       XIMAGE_INSTANCE_WIDGET_ACTION_OCCURRED (image_instance) = 1;
+      
+      if (!NILP (callback_ex) && !UNBOUNDP (callback_ex))
+       {
+         event = Fmake_event (Qnil, Qnil);
+
+         XEVENT (event)->event_type = misc_user_event;
+         XEVENT (event)->channel = frame;
+         XEVENT (event)->event.eval.function = Qeval;
+         XEVENT (event)->event.eval.object =
+           list4 (Qfuncall, callback_ex, image_instance, event);
+       }
+      else if (NILP (callback) || UNBOUNDP (callback))
+       event = Qnil;
+      else
+       {
+         Lisp_Object fn, arg;
+
+         event = Fmake_event (Qnil, Qnil);
+
+         get_gui_callback (callback, &fn, &arg);
+         XEVENT (event)->event_type = misc_user_event;
+         XEVENT (event)->channel = frame;
+         XEVENT (event)->event.eval.function = fn;
+         XEVENT (event)->event.eval.object = arg;
+       }
+
+      if (!NILP (event))
+       enqueue_gtk_dispatch_event (event);
+
+      /* The result of this evaluation could cause other instances to change so
+        enqueue an update callback to check this. */
+      if (update_subwindows_p && !NILP (event))
+       enqueue_magic_eval_event (update_widget_instances, frame);
+    }
+}
+
+/* Create a tab_control widget.  The special handling of the individual tabs
+   means that the normal instantiation code cannot be used. */
+static void
+gtk_tab_control_instantiate (Lisp_Object image_instance,
+                            Lisp_Object instantiator,
+                            Lisp_Object pointer_fg,
+                            Lisp_Object pointer_bg,
+                            int dest_mask, Lisp_Object domain)
+{
+  Lisp_Object rest;
+  Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
+  int i = 0;
+  int selected = 0;
+  GtkNotebook *nb;
+
+  /* The normal instantiation is still needed. */
+  gtk_widget_instantiate (image_instance, instantiator, pointer_fg,
+                         pointer_bg, dest_mask, domain);
+
+  nb = GTK_NOTEBOOK (IMAGE_INSTANCE_GTK_CLIPWIDGET (ii));
+
+  /* Add items to the tab, find the current selection */
+  LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
+    {
+      gtk_add_tab_item (image_instance, nb, XCAR (rest), domain, i);
+
+      if (gui_item_selected_p (XCAR (rest)))
+       selected = i;
+
+      i++;
+    }
+
+  gtk_notebook_set_page(nb, selected);
+
+  /* Call per-tab lisp callback when a tab is pressed. */
+  gtk_signal_connect (GTK_OBJECT (nb), "switch-page",
+                     GTK_SIGNAL_FUNC (gtk_tab_control_callback), NULL);
+}
+
 /* Set the properties of a tab control */
 static void
 gtk_tab_control_redisplay (Lisp_Object image_instance)
@@ -2483,6 +2712,7 @@ gtk_tab_control_redisplay (Lisp_Object image_instance)
         one. */
       if (tab_control_order_only_changed (image_instance))
        {
+         int i = 0;
          Lisp_Object rest, selected =
            gui_item_list_find_selected
            (NILP (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)) ?
@@ -2496,9 +2726,6 @@ gtk_tab_control_redisplay (Lisp_Object image_instance)
                  Lisp_Object old_selected =gui_item_list_find_selected
                    (XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)));
 
-                 /* Need to focus on the widget... */
-                 stderr_out ("Hey, change the tab-focus you boob...\n");
-
                  /* Pick up the new selected item. */
                  XGUI_ITEM (old_selected)->selected =
                    XGUI_ITEM (XCAR (rest))->selected;
@@ -2507,8 +2734,14 @@ gtk_tab_control_redisplay (Lisp_Object image_instance)
                  /* We're not actually changing the items anymore. */
                  IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 0;
                  IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii) = Qnil;
+
+                 gtk_notebook_set_page(GTK_NOTEBOOK (IMAGE_INSTANCE_GTK_CLIPWIDGET (ii)),
+                                       i);
+
                  break;
                }
+
+             i++;
            }
        }
       else
@@ -2517,33 +2750,23 @@ gtk_tab_control_redisplay (Lisp_Object image_instance)
          GtkNotebook *nb = GTK_NOTEBOOK (IMAGE_INSTANCE_GTK_CLIPWIDGET (ii));
          guint num_pages = g_list_length (nb->children);
          Lisp_Object rest;
+         int i;
 
+         /* Why is there no API to remove everything from a notebook? */
          if (num_pages >= 0)
            {
-             int i;
              for (i = num_pages; i >= 0; --i)
                {
                  gtk_notebook_remove_page (nb, i);
                }
            }
 
-         LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
-           {
-             Lisp_Gui_Item *pgui = XGUI_ITEM (XCAR (rest));
-             char *c_name = NULL;
+         i = 0;
 
-             if (!STRINGP (pgui->name))
-               pgui->name = Feval (pgui->name);
-
-             CHECK_STRING (pgui->name);
-
-             TO_EXTERNAL_FORMAT (LISP_STRING, pgui->name,
-                                 C_STRING_ALLOCA, c_name,
-                                 Qctext);
-
-             gtk_notebook_append_page (nb,
-                                       gtk_vbox_new (FALSE, 3),
-                                       gtk_label_new (c_name));
+         LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)))
+           {
+             gtk_add_tab_item(image_instance, nb, XCAR(rest),
+                              IMAGE_INSTANCE_FRAME(ii), i);
            }
 
          /* Show all the new widgets we just added... */
@@ -2640,14 +2863,17 @@ image_instantiator_format_create_glyphs_gtk (void)
   IIFORMAT_HAS_DEVMETHOD (gtk, button, property);
   IIFORMAT_HAS_DEVMETHOD (gtk, button, instantiate);
   IIFORMAT_HAS_DEVMETHOD (gtk, button, redisplay);
+  IIFORMAT_HAS_SHARED_DEVMETHOD (gtk, button, query_geometry, widget);
   /* general widget methods. */
   INITIALIZE_DEVICE_IIFORMAT (gtk, widget);
   IIFORMAT_HAS_DEVMETHOD (gtk, widget, property);
+  IIFORMAT_HAS_DEVMETHOD (gtk, widget, query_geometry);
 
   /* progress gauge */
   INITIALIZE_DEVICE_IIFORMAT (gtk, progress_gauge);
   IIFORMAT_HAS_DEVMETHOD (gtk, progress_gauge, redisplay);
   IIFORMAT_HAS_DEVMETHOD (gtk, progress_gauge, instantiate);
+  IIFORMAT_HAS_SHARED_DEVMETHOD (gtk, progress_gauge, query_geometry, widget);
   /* text field */
   INITIALIZE_DEVICE_IIFORMAT (gtk, edit_field);
   IIFORMAT_HAS_DEVMETHOD (gtk, edit_field, instantiate);
@@ -2658,6 +2884,7 @@ image_instantiator_format_create_glyphs_gtk (void)
   INITIALIZE_DEVICE_IIFORMAT (gtk, tab_control);
   IIFORMAT_HAS_DEVMETHOD (gtk, tab_control, instantiate);
   IIFORMAT_HAS_DEVMETHOD (gtk, tab_control, redisplay);
+  IIFORMAT_HAS_SHARED_DEVMETHOD (gtk, tab_control, query_geometry, widget);
   /* label */
   INITIALIZE_DEVICE_IIFORMAT (gtk, label);
   IIFORMAT_HAS_DEVMETHOD (gtk, label, instantiate);
index 0a99770..e306772 100644 (file)
@@ -40,7 +40,6 @@ Boston, MA 02111-1307, USA.  */
 struct gtk_image_instance_data
 {
   GdkPixmap **pixmaps;
-  GdkPixmap *mask;
   GdkCursor *cursor;
 
   /* If depth>0, then that means that other colors were allocated when
@@ -87,7 +86,7 @@ void init_image_instance_from_gdk_pixmap (struct Lisp_Image_Instance *ii,
      (GTK_IMAGE_INSTANCE_DATA (i)->pixmaps[slice])
 #define IMAGE_INSTANCE_GTK_PIXMAP_SLICES(i) \
      (GTK_IMAGE_INSTANCE_DATA (i)->pixmaps)
-#define IMAGE_INSTANCE_GTK_MASK(i) (GTK_IMAGE_INSTANCE_DATA (i)->mask)
+#define IMAGE_INSTANCE_GTK_MASK(i) (GdkPixmap*)(IMAGE_INSTANCE_PIXMAP_MASK (i))
 #define IMAGE_INSTANCE_GTK_CURSOR(i) (GTK_IMAGE_INSTANCE_DATA (i)->cursor)
 #define IMAGE_INSTANCE_GTK_COLORMAP(i) (GTK_IMAGE_INSTANCE_DATA (i)->colormap)
 #define IMAGE_INSTANCE_GTK_PIXELS(i) (GTK_IMAGE_INSTANCE_DATA (i)->pixels)
index 80ef445..34fc84f 100644 (file)
@@ -1903,7 +1903,7 @@ init_image_instance_from_xbm_inline (Lisp_Image_Instance *ii,
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 }
 
@@ -1977,6 +1977,9 @@ mswindows_xbm_instantiate (Lisp_Object image_instance,
 #ifdef __cplusplus
 extern "C" {
 #endif
+#ifndef __STDC__ /* Needed to avoid prototype warnings */
+#define __STDC__
+#endif
 #include <compface.h>
 #ifdef __cplusplus
 }
index 8c7b312..105bbff 100644 (file)
@@ -1150,7 +1150,7 @@ init_image_instance_from_xbm_inline (Lisp_Image_Instance *ii,
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 }
 
@@ -1277,7 +1277,7 @@ extract_xpm_color_names (XpmAttributes *xpmattrs, Lisp_Object device,
       /* 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 */
 
       symbols [i].name = (char *) XSTRING_DATA (XCAR (cons));
       symbols [i].pixel = color.pixel;
@@ -1632,7 +1632,7 @@ x_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 
   xpm_free (&xpmattrs);        /* after we've read pixels and hotspot */
index 3788f4b..49eff73 100644 (file)
@@ -318,13 +318,13 @@ specifiers will not be affected.
        signal_simple_error ("Invalid mapping form", mapping);
       else
        {
-         Lisp_Object exp = XCAR (mapping);
+         Lisp_Object mapexp = XCAR (mapping);
          Lisp_Object typevec = XCAR (XCDR (mapping));
          Lisp_Object pos = Qnil;
          Lisp_Object newvec;
          struct gcpro gcpro1;
 
-         CHECK_STRING (exp);
+         CHECK_STRING (mapexp);
          CHECK_VECTOR (typevec);
          if (!NILP (XCDR (XCDR (mapping))))
            {
@@ -338,7 +338,7 @@ specifiers will not be affected.
 
          newvec = Fcopy_sequence (typevec);
          if (INTP (pos))
-           XVECTOR_DATA (newvec)[XINT (pos)] = exp;
+           XVECTOR_DATA (newvec)[XINT (pos)] = mapexp;
          GCPRO1 (newvec);
          image_validate (newvec);
          UNGCPRO;
@@ -374,7 +374,7 @@ process_image_string_instantiator (Lisp_Object data,
   LIST_LOOP (tail, *get_image_conversion_list (console_type))
     {
       Lisp_Object mapping = XCAR (tail);
-      Lisp_Object exp = XCAR (mapping);
+      Lisp_Object mapexp = XCAR (mapping);
       Lisp_Object typevec = XCAR (XCDR (mapping));
 
       /* if the result is of a type that can't be instantiated
@@ -385,7 +385,7 @@ process_image_string_instantiator (Lisp_Object data,
                           (INSTANTIATOR_TYPE (typevec), ERROR_ME),
                           possible_dest_types, ())))
        continue;
-      if (fast_string_match (exp, 0, data, 0, -1, 0, ERROR_ME, 0) >= 0)
+      if (fast_string_match (mapexp, 0, data, 0, -1, 0, ERROR_ME, 0) >= 0)
        {
          if (!NILP (XCDR (XCDR (mapping))))
            {
@@ -711,7 +711,7 @@ get_image_instantiator_governing_domain (Lisp_Object instantiator,
   else if (governing_domain == GOVERNING_DOMAIN_DEVICE)
     domain = DOMAIN_DEVICE (domain);
   else
-    abort ();
+    ABORT ();
 
   return domain;
 }
@@ -1032,7 +1032,7 @@ print_image_instance (Lisp_Object obj, Lisp_Object printcharfun,
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 
   MAYBE_DEVMETH (DOMAIN_XDEVICE (ii->domain), print_image_instance,
@@ -1155,7 +1155,7 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 
   return DEVMETH_OR_GIVEN (DOMAIN_XDEVICE (i1->domain),
@@ -1234,7 +1234,7 @@ image_instance_hash (Lisp_Object obj, int depth)
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 
   return HASH2 (hash, DEVMETH_OR_GIVEN
@@ -1322,7 +1322,7 @@ encode_image_instance_type (enum image_instance_type type)
     case IMAGE_SUBWINDOW:    return Qsubwindow;
     case IMAGE_WIDGET:    return Qwidget;
     default:
-      abort ();
+      ABORT ();
     }
 
   return Qnil; /* not reached */
@@ -1460,7 +1460,7 @@ make_image_instance_1 (Lisp_Object data, Lisp_Object domain,
     signal_simple_error ("Image instances not allowed here", data);
   image_validate (data);
   domain = decode_domain (domain);
-  /* instantiate_image_instantiator() will abort if given an
+  /* instantiate_image_instantiator() will ABORT if given an
      image instance ... */
   dest_mask = decode_image_instance_type_list (dest_types);
   data = normalize_image_instantiator (data,
@@ -1989,9 +1989,6 @@ image_instance_layout (Lisp_Object image_instance,
   if (yoffset != IMAGE_UNCHANGED_GEOMETRY)
     XIMAGE_INSTANCE_YOFFSET (image_instance) = yoffset;
 
-  assert (XIMAGE_INSTANCE_YOFFSET (image_instance) >= 0
-         && XIMAGE_INSTANCE_XOFFSET (image_instance) >= 0);
-
   /* If geometry is unspecified then get some reasonable values for it. */
   if (width == IMAGE_UNSPECIFIED_GEOMETRY
       ||
@@ -2215,7 +2212,7 @@ inherit_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
                     int dest_mask, Lisp_Object domain)
 {
   /* handled specially in image_instantiate */
-  abort ();
+  ABORT ();
 }
 
 \f
@@ -3238,7 +3235,7 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
                      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. */
@@ -3316,7 +3313,7 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
       RETURN_UNGCPRO (instance);
     }
 
-  abort ();
+  ABORT ();
   return Qnil; /* not reached */
 }
 
@@ -3713,7 +3710,7 @@ allocate_glyph (enum glyph_type type,
        | IMAGE_COLOR_PIXMAP_MASK;
       break;
     default:
-      abort ();
+      ABORT ();
     }
 
   /* I think Fmake_specifier can GC.  I think set_specifier_fallback can GC. */
@@ -3838,7 +3835,7 @@ The return value will be one of 'buffer, 'pointer, or 'icon.
   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;
@@ -4526,7 +4523,7 @@ redisplay_subwindow (Lisp_Object subwindow)
   /* The update method is allowed to call eval.  Since it is quite
      common for this function to get called from somewhere in
      redisplay we need to make sure that quits are ignored.  Otherwise
-     Fsignal will abort. */
+     Fsignal will ABORT. */
   specbind (Qinhibit_quit, Qt);
 
   ERROR_CHECK_IMAGE_INSTANCE (subwindow);
@@ -4889,7 +4886,7 @@ display_table_entry (Emchar ch, Lisp_Object face_table,
            continue;
        }
       else
-       abort ();
+       ABORT ();
     }
 }
 
index 66cc549..95285f8 100644 (file)
@@ -91,7 +91,7 @@ xemacs_list_to_gtklist (Lisp_Object obj, GtkArg *arg)
     }
   else
     {
-      abort();
+      ABORT();
     }
 }
 
@@ -128,7 +128,7 @@ xemacs_gtklist_to_list (GtkArg *arg)
        }
       else
        {
-         abort();
+         ABORT();
        }
     }
   return (rval);
@@ -179,7 +179,7 @@ xemacs_list_to_array (Lisp_Object obj, GtkArg *arg)
     }
   else
     {
-      abort();
+      ABORT();
     }
 #undef FROB
 }
index 15d15c0..e5c3c42 100644 (file)
@@ -248,14 +248,58 @@ gtk_xemacs_size_request (GtkWidget *widget, GtkRequisition *requisition)
       }
 }
 
+/* Assign a size and position to the child widgets.  This differs from the
+   super class method in that for all widgets except the scrollbars the size
+   and position are not caclulated here.  This is because these widgets have
+   this function performed for them by the redisplay code (see
+   gtk_map_subwindow()). If the superclass method is called then the widgets
+   can change size and position as the two pieces of code move the widgets at
+   random.
+*/
 static void
 gtk_xemacs_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
 {
     GtkXEmacs *x = GTK_XEMACS (widget);
+    GtkFixed *fixed = GTK_FIXED (widget);
     struct frame *f = GTK_XEMACS_FRAME (x);
     int columns, rows;
-
-    parent_class->size_allocate(widget, allocation);
+    GList *children;
+    guint16 border_width;
+
+    widget->allocation = *allocation;
+    if (GTK_WIDGET_REALIZED (widget))
+      gdk_window_move_resize (widget->window,
+                             allocation->x, 
+                             allocation->y,
+                             allocation->width, 
+                             allocation->height);
+
+    border_width = GTK_CONTAINER (fixed)->border_width;
+  
+    children = fixed->children;
+    while (children)
+      {
+       GtkFixedChild* child = children->data;
+       children = children->next;
+      
+       /*
+         Scrollbars are the only widget that is managed by GTK.  See
+         comments in gtk_create_scrollbar_instance().
+       */
+       if (GTK_WIDGET_VISIBLE (child->widget) &&
+           gtk_type_is_a(GTK_OBJECT_TYPE(child->widget), GTK_TYPE_SCROLLBAR))
+         {
+           GtkAllocation child_allocation;
+           GtkRequisition child_requisition;
+
+           gtk_widget_get_child_requisition (child->widget, &child_requisition);
+           child_allocation.x = child->x + border_width;
+           child_allocation.y = child->y + border_width;
+           child_allocation.width = child_requisition.width;
+           child_allocation.height = child_requisition.height;
+           gtk_widget_size_allocate (child->widget, &child_allocation);
+         }
+      }
 
     if (f)
       {
@@ -275,7 +319,9 @@ gtk_xemacs_paint (GtkWidget *widget, GdkRectangle *area)
 {
     GtkXEmacs *x = GTK_XEMACS (widget);
     struct frame *f = GTK_XEMACS_FRAME (x);
-    gtk_redraw_exposed_area (f, area->x, area->y, area->width, area->height);
+
+    if (GTK_WIDGET_DRAWABLE (widget))
+      gtk_redraw_exposed_area (f, area->x, area->y, area->width, area->height);
 }
 
 static void
@@ -291,30 +337,33 @@ gtk_xemacs_draw (GtkWidget *widget, GdkRectangle *area)
        gtk_fixed_paint() directly, which clears the background window,
        which causes A LOT of flashing. */
 
-    gtk_xemacs_paint (widget, area);
+    if (GTK_WIDGET_DRAWABLE (widget))
+      {
+       gtk_xemacs_paint (widget, area);
 
-    children = fixed->children;
+       children = fixed->children;
 
-    while (children)
-      {
-       child = children->data;
-       children = children->next;
-       /* #### This is what causes the scrollbar flickering!
-          Evidently the scrollbars pretty much take care of drawing
-          themselves in most cases.  Then we come along and tell them
-          to redraw again!
-
-          But if we just leave it out, then they do not get drawn
-          correctly the first time!
-
-          Scrollbar flickering has been greatly helped by the
-          optimizations in scrollbar-gtk.c /
-          gtk_update_scrollbar_instance_status (), so this is not that
-          big a deal anymore.
-       */
-       if (gtk_widget_intersect (child->widget, area, &child_area))
+       while (children)
          {
-           gtk_widget_draw (child->widget, &child_area);
+           child = children->data;
+           children = children->next;
+           /* #### This is what causes the scrollbar flickering!
+              Evidently the scrollbars pretty much take care of drawing
+              themselves in most cases.  Then we come along and tell them
+              to redraw again!
+              
+              But if we just leave it out, then they do not get drawn
+              correctly the first time!
+
+              Scrollbar flickering has been greatly helped by the
+              optimizations in scrollbar-gtk.c /
+              gtk_update_scrollbar_instance_status (), so this is not that
+              big a deal anymore.
+           */
+           if (gtk_widget_intersect (child->widget, area, &child_area))
+             {
+               gtk_widget_draw (child->widget, &child_area);
+             }
          }
       }
 }
@@ -326,14 +375,19 @@ gtk_xemacs_expose (GtkWidget *widget, GdkEventExpose *event)
     struct frame *f = GTK_XEMACS_FRAME (x);
     GdkRectangle *a = &event->area;
 
-    /* This takes care of drawing the scrollbars, etc */
-    parent_class->expose_event (widget, event);
+  if (GTK_WIDGET_DRAWABLE (widget))
+    {
+      /* This takes care of drawing the scrollbars, etc */
+      parent_class->expose_event (widget, event);
+
+      /* Now draw the actual frame data */
+      if (!check_for_ignored_expose (f, a->x, a->y, a->width, a->height) &&
+         !find_matching_subwindow (f, a->x, a->y, a->width, a->height))
+       gtk_redraw_exposed_area (f, a->x, a->y, a->width, a->height);
+      return (TRUE);
+    }
 
-    /* Now draw the actual frame data */
-    if (!check_for_ignored_expose (f, a->x, a->y, a->width, a->height) &&
-       !find_matching_subwindow (f, a->x, a->y, a->width, a->height))
-      gtk_redraw_exposed_area (f, a->x, a->y, a->width, a->height);
-    return (TRUE);
+  return FALSE;
 }
 
 Lisp_Object
index d476906..1ebd55a 100644 (file)
@@ -207,7 +207,10 @@ free_popup_widget_value_tree (widget_value *wv)
 }
 
 /* The following is actually called from somewhere within XtDispatchEvent(),
-   called from XtAppProcessEvent() in event-Xt.c */
+   called from XtAppProcessEvent() in event-Xt.c
+
+   Callback function for widgets and menus.
+ */
 
 void
 popup_selection_callback (Widget widget, LWLIB_ID ignored_id,
index 55dc0f8..fe6301a 100644 (file)
@@ -70,7 +70,7 @@ update_gutter_geometry (struct frame *f, enum gutter_pos pos);
        (frame)->right_gutter_was_visible = flag;       \
        break;                                          \
       default:                                         \
-       abort ();                                       \
+       ABORT ();                                       \
       }                                                        \
   } while (0)
 
@@ -87,7 +87,7 @@ static int gutter_was_visible (struct frame* frame, enum gutter_pos pos)
     case RIGHT_GUTTER:
       return frame->right_gutter_was_visible;
     default:
-      abort ();
+      ABORT ();
        return 0;       /* To keep the compiler happy */
     }
 }
@@ -214,7 +214,7 @@ get_gutter_coords (struct frame *f, enum gutter_pos pos, int *x, int *y,
       break;
 
     default:
-      abort ();
+      ABORT ();
     }
 }
 
index 9e0acbd..30b3072 100644 (file)
@@ -556,7 +556,7 @@ retry:
     case XLookupChars:
       break;
     default:
-      abort ();
+      ABORT ();
     }
 
   new_event.type = ClientMessage;
index 937c3eb..e20c22b 100644 (file)
@@ -489,7 +489,7 @@ bufpos_to_bytind_func (struct buffer *buf, Bufpos x)
     }
 #ifdef ERROR_CHECK_BUFPOS
   else if (x >= bufmin)
-    abort ();
+    ABORT ();
 #endif
   else
     {
@@ -766,7 +766,7 @@ bytind_to_bufpos_func (struct buffer *buf, Bytind x)
     }
 #ifdef ERROR_CHECK_BUFPOS
   else if (x >= bytmin)
-    abort ();
+    ABORT ();
 #endif
   else
     {
@@ -1797,7 +1797,7 @@ static void
 move_gap (struct buffer *buf, Bytind pos)
 {
   if (! BUF_BEG_ADDR (buf))
-    abort ();
+    ABORT ();
   if (pos < BI_BUF_GPT (buf))
     gap_left (buf, pos);
   else if (pos > BI_BUF_GPT (buf))
index befca9b..121946c 100644 (file)
@@ -147,7 +147,7 @@ x_get_composed_input (XKeyPressedEvent *x_key_event, XIC context,
     case XLookupChars:
       break;
     default:
-      abort ();
+      ABORT ();
     }
 
   new_event.type = ClientMessage;
index 2c91886..101a4a8 100644 (file)
@@ -472,7 +472,7 @@ keymap_lookup_directly (Lisp_Object keymap,
   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 @@ keymap_delete_inverse_internal (Lisp_Object inverse_table,
   Lisp_Object *prev;
 
   if (UNBOUNDP (keys))
-    abort ();
+    ABORT ();
 
   for (prev = &new_keys, tail = new_keys;
        ;
@@ -1719,7 +1719,7 @@ ensure_meta_prefix_char_keymapp (Lisp_Object keys, int indx,
   else
     {
       new_keys = Qnil;
-      abort ();
+      ABORT ();
     }
 
   if (EQ (keys, new_keys))
@@ -3060,10 +3060,10 @@ accessible_keymaps_mapper_1 (Lisp_Object keysym, Lisp_Object contents,
       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);
@@ -3589,7 +3589,7 @@ where_is_recursive_mapper (Lisp_Object map, void *arg)
          /* 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);
            }
@@ -4352,8 +4352,28 @@ You should *bind* this, not set it.
 
   DEFVAR_LISP ("key-translation-map", &Vkey_translation_map /*
 Keymap of key translations that can override keymaps.
-This keymap works like `function-key-map', but comes after that,
+
+This keymap works like `function-key-map', but is searched before it,
 and applies even for keys that have ordinary bindings.
+
+The `read-key-sequence' function replaces any subsequence bound by
+`key-translation-map' with its binding.  More precisely, when the active
+keymaps have no binding for the current key sequence but
+`key-translation-map' binds a suffix of the sequence to a vector or string,
+`read-key-sequence' replaces the matching suffix with its binding, and
+continues with the new sequence.  See `key-binding' for details.
+
+The events that come from bindings in `key-translation-map' are not
+themselves looked up in `key-translation-map'.
+
+#### FIXME: stolen from `function-key-map'; need better example.
+#### I guess you could implement a Dvorak keyboard with this?
+For example, suppose `key-translation-map' binds `ESC O P' to [f1].
+Typing `ESC O P' to `read-key-sequence' would return
+\[#<keypress-event f1>].  Typing `C-x ESC O P' would return
+\[#<keypress-event control-X> #<keypress-event f1>].  If [f1]
+were a prefix key, typing `ESC O P x' would return
+\[#<keypress-event f1> #<keypress-event x>].
 */ );
   Vkey_translation_map = Qnil;
 
index 2a9cacb..9c9caa6 100644 (file)
@@ -243,15 +243,16 @@ template<typename T> struct alignment_trick { char c; T member; };
    time the assert checks take is measurable so let's not include them
    in production binaries. */
 
-#ifdef USE_ASSERTIONS
 /* Highly dubious kludge */
 /*   (thanks, Jamie, I feel better now -- ben) */
+# define ABORT() (assert_failed (__FILE__, __LINE__, "ABORT()"))
 void assert_failed (const char *, int, const char *);
-# define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
+
+#ifdef USE_ASSERTIONS
 # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
 #else
 # ifdef DEBUG_XEMACS
-#  define assert(x) ((x) ? (void) 0 : (void) abort ())
+#  define assert(x) ((x) ? (void) 0 : (void) ABORT ())
 # else
 #  define assert(x)
 # endif
@@ -879,7 +880,7 @@ do {                                                                        \
 
 /* 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; \
@@ -1410,7 +1411,7 @@ DECLARE_LRECORD (marker, Lisp_Marker);
 #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)
index 807c07b..604ccdf 100644 (file)
@@ -1921,7 +1921,7 @@ read_atom (Lisp_Object readcharfun,
                else if (sizeof (long) == sizeof (EMACS_INT))
                  number = atol (read_buffer);
                else
-                 abort ();
+                 ABORT ();
                return make_int (number);
              }
 #else
index 5002e3b..8151bc7 100644 (file)
@@ -284,7 +284,7 @@ Lstream_delete (Lstream *lstr)
        }
     }
 
-  abort ();
+  ABORT ();
 }
 
 #define Lstream_internal_error(reason, lstr) \
@@ -658,7 +658,7 @@ Lstream_seekable_p (Lstream *lstr)
 static int
 Lstream_pseudo_close (Lstream *lstr)
 {
-  if (!lstr->flags & LSTREAM_FL_IS_OPEN)
+  if (! (lstr->flags & LSTREAM_FL_IS_OPEN))
     Lstream_internal_error ("lstream is not open", lstr);
 
   /* don't check errors here -- best not to risk file descriptor loss */
@@ -1484,7 +1484,7 @@ make_lisp_buffer_stream_1 (struct buffer *buf, Bufpos start, Bufpos end,
 
   /* Make sure the luser didn't pass "w" in. */
   if (!strcmp (mode, "w"))
-    abort ();
+    ABORT ();
 
   if (flags & LSTR_IGNORE_ACCESSIBLE)
     {
index 2995eb4..62fb350 100644 (file)
@@ -179,7 +179,7 @@ store_kbd_macro_event (Lisp_Object event)
 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))
     {
index 0fc31a0..878e340 100644 (file)
@@ -285,7 +285,7 @@ static struct mhead *nextf[30];
 static char busy[30];
 
 /* Number of bytes of writable memory we can expect to be able to get */
-extern unsigned int lim_data;
+extern unsigned long lim_data;
 
 /* Level number of warnings already issued.
   0 -- no warnings issued.
@@ -339,7 +339,7 @@ morecore (nu)                       /* ask system for more memory */
 {
   char *cp;
   int nblks;
-  unsigned int siz;
+  unsigned long siz;
   int oldmask;
 
 #ifdef BSD
@@ -525,7 +525,7 @@ malloc (n)          /* get a block */
 #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 @@ free (mem)
 
 #ifndef rcheck
     if (p -> mh_alloc != ISALLOC)
-      abort ();
+      ABORT ();
 
 #else /* rcheck */
     if (p -> mh_alloc != ISALLOC)
index 9e57b2e..c8b8663 100644 (file)
@@ -339,7 +339,7 @@ bi_marker_position (Lisp_Object marker)
 
 #ifdef ERROR_CHECK_BUFPOS
   if (pos < BI_BUF_BEG (buf) || pos > BI_BUF_Z (buf))
-    abort ();
+    ABORT ();
 #endif
 
   return pos;
@@ -367,7 +367,7 @@ set_bi_marker_position (Lisp_Object marker, Bytind pos)
 
 #ifdef ERROR_CHECK_BUFPOS
   if (pos < BI_BUF_BEG (buf) || pos > BI_BUF_Z (buf))
-    abort ();
+    ABORT ();
 #endif
 
   m->memind = bytind_to_memind (buf, pos);
index fb6f16b..1798f0e 100644 (file)
@@ -58,20 +58,14 @@ extern int etext, __data_start; weak_symbol (__data_start)
 #endif
 
 #if defined(__bsdi__) || defined(__NetBSD__) || defined(__linux__) || defined(__OpenBSD__)
-#if defined(__linux__) && defined (powerpc)    /*Added by Fukui*/
-#else                                  /*Added by Fukui*/
 #define BSD4_2
-#endif                                 /*Added by Fukui*/
 #endif
 
 #ifndef BSD4_2
 #ifndef USG
 #ifndef WIN32_NATIVE
 #ifndef CYGWIN
-#if defined(__linux__) && defined(powerpc)     /*Added Kaoru Fukui*/
-#else                                          /*Added Kaoru Fukui*/
 #include <sys/vlimit.h>
-#endif                         /*Added by Fukui*/
 #endif /* not CYGWIN */
 #endif /* not WIN32_NATIVE */
 #endif /* not USG */
@@ -115,7 +109,7 @@ extern char etext;
 static POINTER data_space_start;
 
 /* Number of bytes of writable memory we can expect to be able to get */
-extern unsigned int lim_data;
+extern unsigned long lim_data;
 
 #if defined (HEAP_IN_DATA) && !defined(PDUMP)
 extern unsigned long static_heap_size;
@@ -125,11 +119,11 @@ get_lim_data (void)
 {
   if (!initialized)
     {
-      lim_data = (unsigned int) -1; /* static_heap_size; */
+      lim_data = (unsigned long) -1; /* static_heap_size; */
     }
   else
     {
-      lim_data = (unsigned int) -1;
+      lim_data = (unsigned long) -1;
     }
 }
 #else
@@ -137,25 +131,25 @@ get_lim_data (void)
 static void
 get_lim_data (void)
 {
-  lim_data = (unsigned int) -1;
+  lim_data = (unsigned long) -1;
 }
 #else /* not NO_LIM_DATA */
 
-#ifdef USG
+#if defined(USG) && !defined(LINUX)
 
 static void
 get_lim_data (void)
 {
-  lim_data = (unsigned int) -1;
+  lim_data = (unsigned long) -1;
 
   /* Use the ulimit call, if we seem to have it.  */
-#if !defined (ULIMIT_BREAK_VALUE) || defined (LINUX)
+#if !defined (ULIMIT_BREAK_VALUE)
   lim_data = ulimit (3, 0);
 #endif
 
   /* If that didn't work, just use the macro's value.  */
 #ifdef ULIMIT_BREAK_VALUE
-  if (lim_data == (unsigned int) -1)
+  if (lim_data == (unsigned long) -1)
     lim_data = ULIMIT_BREAK_VALUE;
 #endif
 
@@ -173,7 +167,7 @@ get_lim_data (void)
 }
 
 #else
-#if !defined (BSD4_2) && !defined (__osf__)
+#if !defined (BSD4_2) && !defined (__osf__) && !defined(LINUX)
 
 static void
 get_lim_data (void)
index 4af6659..387e150 100644 (file)
@@ -1,4 +1,4 @@
-/* Implements an elisp-programmable menubar -- X interface.
+/* Implements an elisp-programmable menubar -- Gtk interface.
    Copyright (C) 1993, 1994 Free Software Foundation, Inc.
    Copyright (C) 1995 Tinker Systems and INS Engineering Corp.
 
@@ -46,7 +46,7 @@ Boston, MA 02111-1307, USA.  */
 #define SUBMENU_TYPE   1
 #define POPUP_TYPE     2
 
-static GtkWidget *menu_descriptor_to_widget_1 (Lisp_Object descr);
+static GtkWidget *menu_descriptor_to_widget_1 (Lisp_Object descr, GtkAccelGroup* accel_group);
 
 #define FRAME_MENUBAR_DATA(frame) ((frame)->menubar_data)
 #define XFRAME_MENUBAR_DATA_LASTBUFF(frame) (XCAR ((frame)->menubar_data))
@@ -110,14 +110,14 @@ gtk_xemacs_menubar_get_type (void)
   return xemacs_menubar_type;
 }
 
-static GtkWidgetClass *parent_class;
+static GtkWidgetClass *menubar_parent_class;
 
 static void gtk_xemacs_menubar_class_init      (GtkXEmacsMenubarClass *klass)
 {
   GtkWidgetClass *widget_class;
 
   widget_class = (GtkWidgetClass*) klass;
-  parent_class = (GtkWidgetClass *) gtk_type_class (gtk_menu_bar_get_type ());
+  menubar_parent_class = (GtkWidgetClass *) gtk_type_class (gtk_menu_bar_get_type ());
 
   widget_class->size_request = gtk_xemacs_menubar_size_request;
 }
@@ -131,7 +131,7 @@ static void gtk_xemacs_menubar_size_request (GtkWidget *widget, GtkRequisition *
   GtkXEmacsMenubar *x = GTK_XEMACS_MENUBAR (widget);
   GtkRequisition frame_size;
 
-  parent_class->size_request (widget, requisition);
+  menubar_parent_class->size_request (widget, requisition);
 
   /* #### BILL!
   ** We should really only do this if the menu has not been detached!
@@ -154,6 +154,117 @@ gtk_xemacs_menubar_new (struct frame *f)
   return (GTK_WIDGET (menubar));
 }
 \f
+/*
+ * Label with XEmacs accelerator character support.
+ *
+ * The default interfaces to GtkAccelLabel does not understand XEmacs
+ * keystroke printing conventions, nor is it convenient in the places where is
+ * it needed.  This subclass provides an alternative interface more suited to
+ * XEmacs needs but does not add new functionality.
+ */
+#define GTK_TYPE_XEMACS_ACCEL_LABEL           (gtk_xemacs_accel_label_get_type ())
+#define GTK_XEMACS_ACCEL_LABEL(obj)           (GTK_CHECK_CAST ((obj), GTK_TYPE_ACCEL_LABEL, GtkXEmacsAccelLabel))
+#define GTK_XEMACS_ACCEL_LABEL_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_ACCEL_LABEL, GtkXEmacsAccelLabelClass))
+#define GTK_IS_XEMACS_ACCEL_LABEL(obj)        (GTK_CHECK_TYPE ((obj), GTK_TYPE_XEMACS_ACCEL_LABEL))
+#define GTK_IS_XEMACS_ACCEL_LABEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_XEMACS_ACCEL_LABEL))
+
+typedef struct _GtkXEmacsAccelLabel        GtkXEmacsAccelLabel;
+typedef struct _GtkXEmacsAccelLabelClass  GtkXEmacsAccelLabelClass;
+
+/* Instance structure. No additional fields required. */
+struct _GtkXEmacsAccelLabel
+{
+  GtkAccelLabel label;
+};
+
+/* Class structure. No additional fields required. */
+struct _GtkXEmacsAccelLabelClass
+{
+  GtkAccelLabelClass    parent_class;
+};
+
+static GtkType   gtk_xemacs_accel_label_get_type(void);
+static GtkWidget* gtk_xemacs_accel_label_new(const gchar *string);
+static void       gtk_xemacs_set_accel_keys(GtkXEmacsAccelLabel* l,
+                                      Lisp_Object keys);
+static void       gtk_xemacs_accel_label_class_init(GtkXEmacsAccelLabelClass *klass);
+static void       gtk_xemacs_accel_label_init(GtkXEmacsAccelLabel *xemacs);
+
+static GtkType
+gtk_xemacs_accel_label_get_type(void)
+{
+  static GtkType xemacs_accel_label_type = 0;
+
+  if (!xemacs_accel_label_type)
+    {
+      static const GtkTypeInfo xemacs_accel_label_info =
+      {
+       "GtkXEmacsAccelLabel",
+       sizeof (GtkXEmacsAccelLabel),
+       sizeof (GtkXEmacsAccelLabelClass),
+       (GtkClassInitFunc) gtk_xemacs_accel_label_class_init,
+       (GtkObjectInitFunc) gtk_xemacs_accel_label_init,
+       /* reserved_1 */ NULL,
+        /* reserved_2 */ NULL,
+        (GtkClassInitFunc) NULL,
+      };
+
+      xemacs_accel_label_type = gtk_type_unique (gtk_accel_label_get_type(), &xemacs_accel_label_info);
+    }
+
+  return xemacs_accel_label_type;
+}
+
+static void
+gtk_xemacs_accel_label_class_init(GtkXEmacsAccelLabelClass *klass)
+{
+  /* Nothing to do. */
+}
+
+static void
+gtk_xemacs_accel_label_init(GtkXEmacsAccelLabel *xemacs)
+{
+  /* Nothing to do. */
+}
+
+static GtkWidget*
+gtk_xemacs_accel_label_new (const gchar *string)
+{
+  GtkXEmacsAccelLabel *xemacs_accel_label;
+  
+  xemacs_accel_label = gtk_type_new (GTK_TYPE_XEMACS_ACCEL_LABEL);
+  
+  if (string && *string)
+    gtk_label_set_text (GTK_LABEL (xemacs_accel_label), string);
+  
+  return GTK_WIDGET (xemacs_accel_label);
+}
+
+/* Make the string <keys> the accelerator string for the label. */
+static void
+gtk_xemacs_set_accel_keys(GtkXEmacsAccelLabel* l, Lisp_Object keys)
+{
+  g_return_if_fail (l != NULL);
+  g_return_if_fail (GTK_IS_XEMACS_ACCEL_LABEL (l));
+
+  /* Disable the standard way of finding the accelerator string for the
+     label. */
+  gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL(l), NULL);
+
+  /* Set the string straight from the object. */
+  if (STRINGP (keys) && XSTRING_LENGTH (keys))
+    {
+      C_STRING_TO_EXTERNAL_MALLOC(XSTRING_DATA (keys),
+                                 l->label.accel_string,
+                                 Qctext);
+    }
+  else
+    {
+      /* l->label.accel_string = NULL;*/
+    }
+}
+\f
+
 /* We now return you to your regularly scheduled menus... */
 
 int dockable_menubar;
@@ -314,7 +425,8 @@ __activate_menu(GtkMenuItem *item, gpointer user_data)
        }
       else
        {
-         next = menu_descriptor_to_widget_1 (child);
+         next = menu_descriptor_to_widget_1 (child,
+                                             gtk_menu_ensure_uline_accel_group (GTK_MENU (item->submenu)));
        }
 
       if (!next)
@@ -349,6 +461,63 @@ __kill_stupid_gtk_timer (GtkObject *obj, gpointer user_data)
     }
 }
 
+/* Convert the XEmacs menu accelerator representation to Gtk mnemonic form. If
+  no accelerator has been provided, put one at the start of the string (this
+  mirrors the behaviour under X).  This algorithm is also found in
+  dialog-gtk.el:gtk-popup-convert-underscores.
+*/
+static char *
+convert_underscores(const char *name)
+{
+  char *rval;
+  int i,j;
+  int found_accel = FALSE;
+  int underscores = 0;
+
+  for (i = 0; name[i]; ++i)
+    if (name[i] == '%' && name[i+1] == '_')
+      {
+       found_accel = TRUE;
+      }
+    else if (name[i] == '_')
+      {
+       underscores++;
+      }
+
+  /* Allocate space for the original string, plus zero byte plus extra space
+     for all quoted underscores plus possible additional leading accelerator. */
+  rval = xmalloc_and_zero (strlen(name) + 1 + underscores
+                          + (found_accel ? 0 : 1));
+
+  if (!found_accel)
+    rval[0] = '_';
+
+  for (i = 0, j = (found_accel ? 0 : 1); name[i]; i++)
+    {
+      if (name[i]=='%')
+       {
+         i++;
+         if (!(name[i]))
+           continue;
+         
+         if ((name[i] != '_') && (name[i] != '%'))
+           i--;
+
+         found_accel = TRUE;
+       }
+      else if (name[i] == '_')
+       {
+         rval[j++] = '_';
+       }
+
+      rval[j++] = name[i];
+    }
+
+  return rval;
+}
+
+
+/* Remove the XEmacs menu accellerator representation from a string. */
 static char *
 remove_underscores(const char *name)
 {
@@ -362,7 +531,9 @@ remove_underscores(const char *name)
        if (!(name[i]))
          continue;
 
-       if ((name[i] == '_'))
+       if ((name[i] != '_') && (name[i] != '%'))
+         i--;
+       else
          continue;
       }
       rval[j++] = name[i];
@@ -375,7 +546,8 @@ remove_underscores(const char *name)
    DESCR is either a list (meaning a submenu), a vector, or nil (if
    you include a :filter keyword) */
 static GtkWidget *
-menu_convert (Lisp_Object desc, GtkWidget *reuse)
+menu_convert (Lisp_Object desc, GtkWidget *reuse,
+             GtkAccelGroup* menubar_accel_group)
 {
   GtkWidget *menu_item = NULL;
   GtkWidget *submenu = NULL;
@@ -392,8 +564,23 @@ menu_convert (Lisp_Object desc, GtkWidget *reuse)
 
       if (!reuse)
        {
-         char *temp_menu_name = remove_underscores (XSTRING_DATA (XCAR (desc)));
-         menu_item = gtk_menu_item_new_with_label (temp_menu_name);
+         char *temp_menu_name = convert_underscores (XSTRING_DATA (XCAR (desc)));
+         GtkWidget* accel_label = gtk_xemacs_accel_label_new(NULL);
+         guint accel_key;
+
+         gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
+         accel_key = gtk_label_parse_uline (GTK_LABEL (accel_label), temp_menu_name);
+
+         menu_item = gtk_menu_item_new ();
+         gtk_container_add (GTK_CONTAINER (menu_item), accel_label);
+         gtk_widget_show (accel_label);
+
+         if (menubar_accel_group)
+           gtk_widget_add_accelerator (menu_item,
+                                       "activate_item",
+                                       menubar_accel_group,
+                                       accel_key, GDK_MOD1_MASK,
+                                       GTK_ACCEL_LOCKED);
          free (temp_menu_name);
        }
       else
@@ -542,28 +729,13 @@ menu_convert (Lisp_Object desc, GtkWidget *reuse)
   return (menu_item);
 }
 
-static struct frame *
-__get_channel (GtkWidget *w)
-{
-  struct frame *f = NULL;
-
-  for (; w; w = w->parent)
-    {
-      if ((f = (struct frame *) gtk_object_get_data (GTK_OBJECT (w), "xemacs::frame")))
-       return (f);
-    }
-
-  return (selected_frame());
-}
-
-
 /* Called whenever a button, radio, or toggle is selected in the menu */
 static void
 __generic_button_callback (GtkMenuItem *item, gpointer user_data)
 {
   Lisp_Object callback, function, data, channel;
 
-  XSETFRAME (channel, __get_channel (GTK_WIDGET (item)));
+  XSETFRAME (channel, gtk_widget_to_frame (GTK_WIDGET (item)));
 
   VOID_TO_LISP (callback, user_data);
 
@@ -576,7 +748,8 @@ __generic_button_callback (GtkMenuItem *item, gpointer user_data)
 /* This function cannot GC.
    It is only called from menu_item_descriptor_to_widget_value, which
    prohibits GC. */
-static GtkWidget *menu_descriptor_to_widget_1 (Lisp_Object descr)
+static GtkWidget *
+menu_descriptor_to_widget_1 (Lisp_Object descr, GtkAccelGroup* accel_group)
 {
   if (STRINGP (descr))
     {
@@ -589,7 +762,7 @@ static GtkWidget *menu_descriptor_to_widget_1 (Lisp_Object descr)
   else if (LISTP (descr))
     {
       /* It is a submenu */
-      return (menu_convert (descr, NULL));
+      return (menu_convert (descr, NULL, accel_group));
     }
   else if (VECTORP (descr))
     {
@@ -610,6 +783,7 @@ static GtkWidget *menu_descriptor_to_widget_1 (Lisp_Object descr)
       int plist_p;
       int selected_spec = 0, included_spec = 0;
       GtkWidget *widget = NULL;
+      guint accel_key;
 
       if (length < 2)
        signal_simple_error ("button descriptors must be at least 2 long", descr);
@@ -705,8 +879,9 @@ static GtkWidget *menu_descriptor_to_widget_1 (Lisp_Object descr)
              sprintf (label_buffer, "%s ", XSTRING_DATA (name));
            }
 
-         temp_label = remove_underscores (label_buffer);
-         main_label = gtk_accel_label_new (temp_label);
+         temp_label = convert_underscores (label_buffer);
+         main_label = gtk_xemacs_accel_label_new (NULL);
+         accel_key = gtk_label_parse_uline (GTK_LABEL (main_label), temp_label);
          free (temp_label);
        }
 
@@ -822,36 +997,23 @@ static GtkWidget *menu_descriptor_to_widget_1 (Lisp_Object descr)
                          GTK_SIGNAL_FUNC (__generic_button_callback),
                          LISP_TO_VOID (callback));
 
-      /* We cheat here... GtkAccelLabel usually builds its
-        `accel_string' from the widget it is attached to, but we do
-        not want to go thru the overhead of converting our nice
-        string back into the modifier + key format that requires,
-        just so that they can convert it back into a (possibly
-        different/wrong) string
-
-        We set the label string manually, and things should 'just
-        work'
-
-        In an ideal world we would just subclass GtkLabel ourselves,
-        but I have known for a very long time that this is not an
-        ideal world.
-
-        #### Should do menu shortcuts `correctly' one of these days.
+      /* Now that all the information about the menu item is know, set the
+        remaining properties.
       */
       
       if (main_label)
        {
-         GtkAccelLabel *l = GTK_ACCEL_LABEL (main_label);
-
          gtk_container_add (GTK_CONTAINER (widget), main_label);
 
-         gtk_accel_label_set_accel_widget (l, NULL);
-         gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5);
+         gtk_misc_set_alignment (GTK_MISC (main_label), 0.0, 0.5);
+         gtk_xemacs_set_accel_keys(GTK_XEMACS_ACCEL_LABEL(main_label), keys);
 
-         if (STRINGP (keys) && XSTRING_LENGTH (keys))
-           {
-             l->accel_string = g_strdup (XSTRING_DATA (keys));
-           }
+         if (accel_group)
+           gtk_widget_add_accelerator (widget,
+                                       "activate_item",
+                                       accel_group,
+                                       accel_key, 0,
+                                       GTK_ACCEL_LOCKED);
        }
 
       return (widget);
@@ -859,11 +1021,12 @@ static GtkWidget *menu_descriptor_to_widget_1 (Lisp_Object descr)
   else
     {
       return (NULL);
-      /* abort (); ???? */
+      /* ABORT (); ???? */
     }
 }
 
-static GtkWidget *menu_descriptor_to_widget (Lisp_Object descr)
+static GtkWidget *
+menu_descriptor_to_widget (Lisp_Object descr, GtkAccelGroup* accel_group)
 {
   int count = specpdl_depth ();
   GtkWidget *rval = NULL;
@@ -873,7 +1036,7 @@ static GtkWidget *menu_descriptor_to_widget (Lisp_Object descr)
   gc_currently_forbidden = 1;
 
   /* Cannot GC from here on out... */
-  rval = menu_descriptor_to_widget_1 (descr);
+  rval = menu_descriptor_to_widget_1 (descr, accel_group);
   unbind_to (count, Qnil);
   return (rval);
   
@@ -883,23 +1046,24 @@ static gboolean
 menu_can_reuse_widget (GtkWidget *child, const char *label)
 {
   /* Everything up at the top level was done using
-  ** gtk_menu_item_new_with_label(), but we still double check to make
+  ** gtk_xemacs_accel_label_new(), but we still double check to make
   ** sure we don't seriously foobar ourselves.
   */
-  char *temp_label = NULL;
-  gpointer possible_child = g_list_nth_data (gtk_container_children (GTK_CONTAINER (child)), 0);
+  gpointer possible_child =
+    g_list_nth_data (gtk_container_children (GTK_CONTAINER (child)), 0);
+  gboolean ret_val = FALSE;
 
   if (possible_child && GTK_IS_LABEL (possible_child))
     {
-      if (!temp_label) temp_label = remove_underscores (label);
+      char *temp_label = remove_underscores (label);
+
       if (!strcmp (GTK_LABEL (possible_child)->label, temp_label))
-       {
-         free (temp_label);
-         return (TRUE);
-       }
+       ret_val = TRUE;
+
+      free (temp_label);
     }
-  if (temp_label) free (temp_label);
-  return (FALSE);
+
+  return ret_val;
 }
 
 /* Converts a menubar description into a GtkMenuBar... a menubar is a
@@ -915,6 +1079,7 @@ menu_create_menubar (struct frame *f, Lisp_Object descr)
   GtkWidget *menubar = FRAME_GTK_MENUBAR_WIDGET (f);
   GUI_ID id = (GUI_ID) gtk_object_get_data (GTK_OBJECT (menubar), XEMACS_MENU_GUIID_TAG);
   guint menu_position = 0;
+  GtkAccelGroup *menubar_accel_group;
 
   /* Remove any existing protection for old menu items */
   ungcpro_popup_callbacks (id);
@@ -922,6 +1087,8 @@ menu_create_menubar (struct frame *f, Lisp_Object descr)
   /* GCPRO the whole damn thing */
   gcpro_popup_callbacks (id, descr);
 
+  menubar_accel_group = gtk_accel_group_new();
+
   EXTERNAL_LIST_LOOP (tail, value)
     {
       gpointer current_child = g_list_nth_data (GTK_MENU_SHELL (menubar)->children, menu_position);
@@ -939,7 +1106,7 @@ menu_create_menubar (struct frame *f, Lisp_Object descr)
          /* It is a button description */
          GtkWidget *item;
 
-         item = menu_descriptor_to_widget (item_descr);
+         item = menu_descriptor_to_widget (item_descr, menubar_accel_group);
          gtk_widget_set_name (item, "XEmacsMenuButton");
 
          if (!item)
@@ -961,12 +1128,13 @@ menu_create_menubar (struct frame *f, Lisp_Object descr)
          if (current_child && menu_can_reuse_widget (GTK_WIDGET (current_child),
                                                      XSTRING_DATA (XCAR (item_descr))))
            {
-             widget = menu_convert (item_descr, GTK_WIDGET (current_child));
+             widget = menu_convert (item_descr, GTK_WIDGET (current_child),
+                                    menubar_accel_group);
              reused_p = TRUE;
            }
          else
            {
-             widget = menu_convert (item_descr, NULL);
+             widget = menu_convert (item_descr, NULL, menubar_accel_group);
              if (current_child) gtk_widget_destroy (GTK_WIDGET (current_child));
              gtk_menu_bar_insert (GTK_MENU_BAR (menubar), widget, menu_position);
            }
@@ -1005,6 +1173,10 @@ menu_create_menubar (struct frame *f, Lisp_Object descr)
          }
       }
   }
+
+  /* Attach the new accelerator group to the frame. */
+  gtk_window_add_accel_group (GTK_WINDOW (FRAME_GTK_SHELL_WIDGET(f)),
+                             menubar_accel_group);
 }
 
 \f
@@ -1227,7 +1399,7 @@ gtk_popup_menu (Lisp_Object menu_desc, Lisp_Object event)
   CHECK_STRING (XCAR (menu_desc));
 
   /* Now lets get down to business... */
-  widget = menu_descriptor_to_widget (menu_desc);
+  widget = menu_descriptor_to_widget (menu_desc, NULL);
   menu = GTK_MENU_ITEM (widget)->submenu;
   gtk_widget_set_name (widget, "XEmacsPopupMenu");
   id = gtk_object_get_data (GTK_OBJECT (widget), XEMACS_MENU_GUIID_TAG);
@@ -1271,7 +1443,7 @@ See the definition of `popup-menu' for more information on the format of MENU.
 */
        (menu))
 {
-  GtkWidget *w = menu_descriptor_to_widget (menu);
+  GtkWidget *w = menu_descriptor_to_widget (menu, NULL);
 
   return (w ? build_gtk_object (GTK_OBJECT (w)) : Qnil);
 }
index 1663101..2cd701d 100644 (file)
@@ -678,12 +678,12 @@ prune_menubar (struct frame *f)
   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 */
index 49c23a5..207a36f 100644 (file)
@@ -572,7 +572,7 @@ set_frame_menubar (struct frame *f, int deep_p, int first_time_p)
 
   data = compute_menubar_data (f, menubar, deep_p);
   if (!data || (!data->next && !data->contents))
-    abort ();
+    ABORT ();
 
   if (NILP (FRAME_MENUBAR_DATA (f)))
     {
index 8c5b697..c541628 100644 (file)
@@ -508,15 +508,22 @@ get_unallocated_leading_byte (int dimension)
 
   if (dimension == 1)
     {
-      if (chlook->next_allocated_1_byte_leading_byte > MAX_LEADING_BYTE_PRIVATE_1)
+      if (chlook->next_allocated_1_byte_leading_byte >
+         MAX_LEADING_BYTE_PRIVATE_1)
        lb = 0;
       else
        lb = chlook->next_allocated_1_byte_leading_byte++;
     }
   else
     {
-      if (chlook->next_allocated_2_byte_leading_byte > MAX_LEADING_BYTE_PRIVATE_2)
-       lb = 0;
+      /* awfully fragile, but correct */
+#if MAX_LEADING_BYTE_PRIVATE_2 == 255
+      if (chlook->next_allocated_2_byte_leading_byte == 0)
+#else
+      if (chlook->next_allocated_2_byte_leading_byte >
+         MAX_LEADING_BYTE_PRIVATE_2)
+#endif
+        lb = 0;
       else
        lb = chlook->next_allocated_2_byte_leading_byte++;
     }
index 46cd3a0..8b567e2 100644 (file)
@@ -697,7 +697,7 @@ CHAR_LEADING_BYTE (Emchar c)
 #ifdef ENABLE_COMPOSITE_CHARS
       return LEADING_BYTE_COMPOSITE;
 #else
-      abort();
+      ABORT();
       return 0;
 #endif /* ENABLE_COMPOSITE_CHARS */
     }
index 8757108..e2af216 100644 (file)
@@ -49,7 +49,7 @@ Boston, MA 02111-1307, USA.  */
        (frame)->right_toolbar_was_visible = flag;                      \
        break;                                                          \
       default:                                                         \
-       abort ();                                                       \
+       ABORT ();                                                       \
       }                                                                        \
   } while (0)
 
index af74f84..566f4f0 100644 (file)
--- a/src/nt.c
+++ b/src/nt.c
@@ -629,16 +629,16 @@ init_environment (void)
      renaming or deleting directories.  (We also don't call chdir when
      running subprocesses for the same reason.)  */
   if (!GetCurrentDirectory (MAXPATHLEN, startup_dir))
-    abort ();
+    ABORT ();
 
   {
     char *p;
     char modname[MAX_PATH];
 
     if (!GetModuleFileName (NULL, modname, MAX_PATH))
-      abort ();
+      ABORT ();
     if ((p = strrchr (modname, '\\')) == NULL)
-      abort ();
+      ABORT ();
     *p = 0;
 
     SetCurrentDirectory (modname);
@@ -1356,7 +1356,7 @@ generate_inode_val (const char * name)
      doesn't resolve aliasing due to subst commands, or recognize hard
      links.  */
   if (!win32_get_long_filename ((char *)name, fullname, MAX_PATH))
-    abort ();
+    ABORT ();
 
   parse_root (fullname, &p);
   /* Normal Win32 filesystems are still case insensitive. */
index d1daca3..790454b 100644 (file)
@@ -170,7 +170,7 @@ delete_child (child_process *cp)
   /* Should not be deleting a child that is still needed. */
   for (i = 0; i < MAXDESC; i++)
     if (fd_info[i].cp == cp)
-      abort ();
+      ABORT ();
 
   if (!CHILD_ACTIVE (cp))
     return;
@@ -252,7 +252,7 @@ _sys_read_ahead (int fd)
       || (fd_info[fd].flags & FILE_READ) == 0)
     {
       /* fd is not a pipe or socket */
-      abort ();
+      ABORT ();
     }
   
   cp->status = STATUS_READ_IN_PROGRESS;
@@ -404,7 +404,7 @@ create_child (const char *exe, char *cmdline, char *env,
   SECURITY_DESCRIPTOR sec_desc;
   char dir[ MAXPATHLEN ];
   
-  if (cp == NULL) abort ();
+  if (cp == NULL) ABORT ();
   
   xzero (start);
   start.cb = sizeof (start);
index d1ab10e..c57270f 100644 (file)
@@ -563,7 +563,7 @@ color_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
                   XVECTOR_DATA (instantiator)[1], domain, ERROR_ME, 0, depth));
 
        default:
-         abort ();
+         ABORT ();
        }
     }
   else if (NILP (instantiator))
@@ -575,7 +575,7 @@ color_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
                             device);
     }
   else
-    abort ();  /* The spec validation routines are screwed up. */
+    ABORT ();  /* The spec validation routines are screwed up. */
 
   return Qunbound;
 }
@@ -787,7 +787,7 @@ font_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
   else if (NILP (instantiator))
     return Qunbound;
   else
-    abort ();  /* Eh? */
+    ABORT ();  /* Eh? */
 
   return Qunbound;
 }
@@ -910,7 +910,7 @@ face_boolean_instantiate (Lisp_Object specifier, Lisp_Object matchspec,
       return retval;
     }
   else
-    abort ();  /* Eh? */
+    ABORT ();  /* Eh? */
 
   return Qunbound;
 }
index eca2352..3adf779 100644 (file)
@@ -977,9 +977,9 @@ long_to_string (char *buffer, long number)
       number = -number;
     }
 
-#define FROB(figure) do {                                              \
-    if (force || number >= figure)                                     \
-      *p++ = number / figure + '0', number %= figure, force = 1;       \
+#define FROB(figure) do {                                                  \
+    if (force || number >= figure)                                         \
+      *p++ = (char) (number / figure + '0'), number %= figure, force = 1;   \
     } while (0)
 #if SIZEOF_LONG == 8
   FROB (1000000000000000000L);
@@ -1002,7 +1002,7 @@ long_to_string (char *buffer, long number)
   FROB (100);
   FROB (10);
 #undef FROB
-  *p++ = number + '0';
+  *p++ = (char) (number + '0');
   *p = '\0';
   return p;
 #endif /* (SIZEOF_LONG == 4) || (SIZEOF_LONG == 8) */
@@ -1246,12 +1246,12 @@ printing_major_badness (Lisp_Object printcharfun,
       break;
     }
 
-  /* Don't abort or signal if called from debug_print() or already
+  /* Don't ABORT or signal if called from debug_print() or already
      crashing */
   if (!inhibit_non_essential_printing_operations)
     {
 #ifdef ERROR_CHECK_TYPES
-      abort ();
+      ABORT ();
 #else  /* not ERROR_CHECK_TYPES */
       if (print_readably)
        type_error (Qinternal_error, "printing %s", buf);
index 0ce9c25..9c0a4ef 100644 (file)
@@ -1054,7 +1054,7 @@ nt_send_process (Lisp_Object proc, struct lstream* lstream)
 
       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
index af75a8e..424246f 100644 (file)
@@ -1299,7 +1299,7 @@ unix_send_process (Lisp_Object proc, struct lstream* lstream)
 
          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. */
          old_sigpipe =
            (SIGTYPE (*) (int)) signal (SIGPIPE, send_process_trap);
index b5f7103..127fc17 100644 (file)
@@ -352,7 +352,7 @@ get_process (Lisp_Object name)
 #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))
index 623d6a4..17b2976 100644 (file)
@@ -254,7 +254,7 @@ obtain (POINTER address, size_t size)
     }
 
   if (! heap)
-    abort ();
+    ABORT ();
 
   /* If we can't fit SIZE bytes in that heap,
      try successive later heaps.  */
@@ -360,7 +360,7 @@ relinquish (void)
          /* 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;
@@ -375,7 +375,7 @@ relinquish (void)
        }
 
       if ((*real_morecore) (- excess) == 0)
-       abort ();
+       ABORT ();
     }
 }
 
@@ -478,7 +478,7 @@ relocate_blocs (bloc_ptr bloc, heap_ptr heap, POINTER address)
 
   /* No need to ever call this if arena is frozen, bug somewhere!  */
   if (r_alloc_freeze_level)
-    abort();
+    ABORT();
 
   while (b)
     {
@@ -633,7 +633,7 @@ resize_bloc (bloc_ptr bloc, size_t size)
 
   /* 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;
@@ -645,7 +645,7 @@ resize_bloc (bloc_ptr bloc, size_t size)
     }
 
   if (heap == NIL_HEAP)
-    abort ();
+    ABORT ();
 
   old_size = bloc->size;
   bloc->size = size;
@@ -972,7 +972,7 @@ r_alloc_free (POINTER *ptr)
 
   dead_bloc = find_bloc (ptr);
   if (dead_bloc == NIL_BLOC)
-    abort ();
+    ABORT ();
 
   free_bloc (dead_bloc);
   *ptr = 0;
@@ -1015,7 +1015,7 @@ r_re_alloc (POINTER *ptr, size_t size)
 
   bloc = find_bloc (ptr);
   if (bloc == NIL_BLOC)
-    abort ();
+    ABORT ();
 
   if (size < bloc->size)
     {
@@ -1085,7 +1085,7 @@ r_alloc_thaw (void)
     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
@@ -1129,7 +1129,7 @@ init_ralloc (void)
   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);
@@ -1805,13 +1805,13 @@ Free_Addr_Block (VM_ADDR addr, size_t sz)
     {
       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();
 }
@@ -1857,7 +1857,7 @@ r_alloc (POINTER *ptr, size_t size)
   switch(r_alloc_initialized)
     {
     case 0:
-      abort();
+      ABORT();
     case 1:
       *ptr = (POINTER) UNDERLYING_MALLOC(size);
       break;
@@ -1898,7 +1898,7 @@ r_alloc_free (POINTER *ptr)
 {
   switch( r_alloc_initialized) {
     case 0:
-      abort();
+      ABORT();
 
     case 1:
       UNDERLYING_FREE( *ptr );         /* Certain this is from the heap. */
@@ -1940,7 +1940,7 @@ r_re_alloc (POINTER *ptr, size_t sz)
 {
   if (r_alloc_initialized == 0)
     {
-      abort ();
+      ABORT ();
       return 0; /* suppress compiler warning */
     }
   else if (r_alloc_initialized == 1)
index 119109e..3e792de 100644 (file)
@@ -460,7 +460,7 @@ gtk_output_display_block (struct window *w, struct display_line *dl, int block,
                    break;
 
                  case IMAGE_POINTER:
-                   abort ();
+                   ABORT ();
 
                  case IMAGE_WIDGET:
                      if (EQ (XIMAGE_INSTANCE_WIDGET_TYPE (instance),
@@ -484,14 +484,14 @@ gtk_output_display_block (struct window *w, struct display_line *dl, int block,
                    break;
 
                  default:
-                   abort ();
+                   ABORT ();
                  }
 
              xpos += rb->width;
              elt++;
            }
          else
-           abort ();
+           ABORT ();
        }
     }
 
index 8098d0e..3a8749b 100644 (file)
@@ -1216,7 +1216,7 @@ mswindows_output_display_block (struct window *w, struct display_line *dl, int b
                    case IMAGE_TEXT:
                    case IMAGE_POINTER:
                    default:
-                     abort ();
+                     ABORT ();
                    }
                  IMAGE_INSTANCE_OPTIMIZE_OUTPUT 
                    (XIMAGE_INSTANCE (instance)) = 0;
@@ -1225,7 +1225,7 @@ mswindows_output_display_block (struct window *w, struct display_line *dl, int b
              elt++;
            }
          else
-           abort ();
+           ABORT ();
        }
     }
 
index b19d74f..0edbf8b 100644 (file)
@@ -334,7 +334,7 @@ get_next_display_block (layout_bounds bounds, display_block_dynarr *dba,
       else if (start_pos <= bounds.right_out)
        *next_start = bounds.right_out;
       else
-       abort ();
+       ABORT ();
     }
 
   for (block = 0; block < Dynarr_length (dba); block++)
@@ -377,7 +377,7 @@ get_cursor_size_and_location (struct window *w, struct display_block *db,
   int defheight, defwidth;
 
   if (Dynarr_length (db->runes) <= cursor_location)
-    abort ();
+    ABORT ();
 
   XSETWINDOW (window, w);
 
@@ -1520,7 +1520,7 @@ redisplay_output_layout (Lisp_Object domain,
 
                case IMAGE_POINTER:
                default:
-                 abort ();
+                 ABORT ();
                }
            }
          IMAGE_INSTANCE_OPTIMIZE_OUTPUT (childii) = 0;
@@ -1632,7 +1632,7 @@ redisplay_clear_region (Lisp_Object locale, face_index findex, int x, int y,
       f = XFRAME (locale);
     }
   else
-    abort ();
+    ABORT ();
 
   d = XDEVICE (f->device);
 
index 187cd47..fe79a12 100644 (file)
@@ -345,7 +345,7 @@ tty_output_display_block (struct window *w, struct display_line *dl, int block,
                    case IMAGE_TEXT:
                    case IMAGE_POINTER:
                    default:
-                     abort ();
+                     ABORT ();
                    }
                  IMAGE_INSTANCE_OPTIMIZE_OUTPUT
                    (XIMAGE_INSTANCE (instance)) = 0;
@@ -355,7 +355,7 @@ tty_output_display_block (struct window *w, struct display_line *dl, int block,
              elt++;
            }
          else
-           abort ();
+           ABORT ();
        }
     }
 
index ff49eb5..edd9109 100644 (file)
@@ -482,7 +482,7 @@ x_output_display_block (struct window *w, struct display_line *dl, int block,
                    case IMAGE_TEXT:
                    case IMAGE_POINTER:
                    default:
-                     abort ();
+                     ABORT ();
                    }
                  IMAGE_INSTANCE_OPTIMIZE_OUTPUT
                    (XIMAGE_INSTANCE (instance)) = 0;
@@ -492,7 +492,7 @@ x_output_display_block (struct window *w, struct display_line *dl, int block,
              elt++;
            }
          else
-           abort ();
+           ABORT ();
        }
     }
 
@@ -972,8 +972,9 @@ x_output_string (struct window *w, struct display_line *dl,
       /* We draw underlines in the same color as the text. */
       if (cachel->underline)
        {
-         unsigned long upos;
-         unsigned long uthick;
+         /* upos is naturally signed, why would anyone think otherwise?
+            uthick is signed to avoid unsigned propagation. */
+         long upos, uthick;
          XFontStruct *xfont;
 
          xfont = FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font));
@@ -1001,7 +1002,9 @@ x_output_string (struct window *w, struct display_line *dl,
        }
 
       if (cachel->strikethru) {
-       unsigned long ascent,descent,upos, uthick;
+       /* ascent, descent, and upos are naturally signed; why would anyone
+          think otherwise?  uthick is signed to avoid unsigned propagation. */
+       long ascent, descent, upos, uthick;
        XFontStruct *xfont;
 
        xfont = FONT_INSTANCE_X_FONT (XFONT_INSTANCE (font));
index e664075..3ca5fe1 100644 (file)
@@ -1635,7 +1635,7 @@ add_propagation_runes (prop_block_dynarr **prop, pos_data *data)
          }
          break;
        default:
-         abort ();
+         ABORT ();
        }
     }
 
@@ -1830,7 +1830,7 @@ add_glyph_rune (pos_data *data, struct glyph_block *gb, int pos_type,
 
          /* Otherwise something is screwed up. */
          else
-           abort ();
+           ABORT ();
        }
 
       face = glyph_face (gb->glyph, data->window);
@@ -1938,7 +1938,7 @@ add_glyph_rune (pos_data *data, struct glyph_block *gb, int pos_type,
          return NULL;
        }
       else
-       abort ();       /* there are no unknown types */
+       ABORT ();       /* there are no unknown types */
     }
 
   return NULL;
@@ -2511,7 +2511,7 @@ create_text_block (struct window *w, struct display_line *dl,
 
              /* This had better be a newline but doing it this way
                  we'll see obvious incorrect results if it isn't.  No
-                 need to abort here. */
+                 need to ABORT here. */
              data.ch = BI_BUF_FETCH_CHAR (b, data.bi_bufpos);
 
              goto done;
@@ -2989,7 +2989,7 @@ add_margin_runes (struct display_line *dl, struct display_block *db, int start,
       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 &&
@@ -3074,7 +3074,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl,
       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)
        {
@@ -3126,7 +3126,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl,
        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)
@@ -3195,7 +3195,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl,
        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)
@@ -3237,7 +3237,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl,
       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)
@@ -3395,7 +3395,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl)
       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)
        {
@@ -3445,7 +3445,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl)
        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)
          {
@@ -3509,7 +3509,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl)
        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)
          {
@@ -3550,7 +3550,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl)
       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)
        {
@@ -4740,7 +4740,7 @@ create_string_text_block (struct window *w, Lisp_Object disp_string,
          else if (data.bi_bufpos == bi_string_zv)
            goto done;
          else if (data.bi_bufpos < 0)
-           /* #### urk urk urk! Aborts are not very fun! Fix this please! */
+           /* #### urk urk urk! ABORTs are not very fun! Fix this please! */
            data.bi_bufpos = 0;
          else
            INC_CHARBYTIND (string_data (s), data.bi_bufpos);
@@ -5291,7 +5291,7 @@ regenerate_window (struct window *w, Bufpos start_pos, Bufpos point, int type)
 
   /* The lines had better exist by this point. */
   if (!(dla = window_display_lines (w, type)))
-    abort ();
+    ABORT ();
   Dynarr_reset (dla);
   w->max_line_len = 0;
 
@@ -5483,7 +5483,7 @@ regenerate_window (struct window *w, Bufpos start_pos, Bufpos point, int type)
            dla_start = 0;                      \
          }                                     \
        else                                    \
-         abort ();     /* structs differ */    \
+         ABORT ();     /* structs differ */    \
                                                \
        dla_end = Dynarr_length (cdla) - 1;     \
       }                                                \
@@ -6505,7 +6505,7 @@ redisplay_frame (struct frame *f, int preemption_check)
   /* The menubar, toolbar, and icon updates must be done before
      hold_frame_size_changes is called and we are officially
      'in_display'.  They may eval lisp code which may call Fsignal.
-     If in_display is set Fsignal will abort. */
+     If in_display is set Fsignal will ABORT. */
 
 #ifdef HAVE_MENUBARS
   /* Update the menubar.  It is done first since it could change
@@ -6565,10 +6565,10 @@ redisplay_frame (struct frame *f, int preemption_check)
      We need to remove them.
 
      If Fsignal() is called during this critical section, we
-     will abort().
+     will ABORT().
 
      If garbage collection is called during this critical section,
-     we simply return. #### We should abort instead.
+     we simply return. #### We should ABORT instead.
 
      #### If a frame-size change does occur we should probably
      actually be preempting redisplay. */
@@ -7493,7 +7493,7 @@ point_in_line_start_cache (struct window *w, Bufpos point, int min_past)
       int win_char_height = window_char_height (w, 1);
 
       /* Occasionally we get here with a 0 height
-         window. find_next_newline_no_quit will abort if we pass it a
+         window. find_next_newline_no_quit will ABORT if we pass it a
          count of 0 so handle that case. */
       if (!win_char_height)
        win_char_height = 1;
@@ -7645,7 +7645,7 @@ find_point_loop:
       else if (point < start)
        top = pos - 1;
       else
-       abort ();
+       ABORT ();
 
       new_pos = (bottom + top + 1) >> 1;
       if (pos == new_pos)
index 06b142b..9dcbc10 100644 (file)
@@ -119,6 +119,8 @@ complex_vars_of_regex (void)
 
 #else  /* not emacs */
 
+#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.  */
@@ -418,7 +420,7 @@ typedef enum
 
         /* Start remembering the text that is matched, for storing in a
            register.  Followed by one byte with the register number, in
-           the range 0 to one less than the pattern buffer's re_nsub
+           the range 1 to the pattern buffer's re_ngroups
            field.  Then followed by one byte with the number of groups
            inner to this one.  (This last has to be part of the
            start_memory only because we need it in the on_failure_jump
@@ -427,7 +429,7 @@ typedef enum
 
         /* Stop remembering the text that is matched and store it in a
            memory register.  Followed by one byte with the register
-           number, in the range 0 to one less than `re_nsub' in the
+           number, in the range 1 to `re_ngroups' in the
            pattern buffer, and one byte with the number of inner groups,
            just like `start_memory'.  (We need the number of inner
            groups here because we don't have any easy way of finding the
@@ -974,6 +976,7 @@ print_compiled_pattern (struct re_pattern_buffer *bufp)
     }
 
   printf ("re_nsub: %ld\t", (long)bufp->re_nsub);
+  printf ("re_ngroups: %ld\t", (long)bufp->re_ngroups);
   printf ("regs_alloc: %d\t", bufp->regs_allocated);
   printf ("can_be_null: %d\t", bufp->can_be_null);
   printf ("newline_anchor: %d\n", bufp->newline_anchor);
@@ -983,6 +986,20 @@ print_compiled_pattern (struct re_pattern_buffer *bufp)
   printf ("syntax: %d\n", bufp->syntax);
   /* Perhaps we should print the translate table?  */
   /* and maybe the category table? */
+
+  if (bufp->external_to_internal_register)
+    {
+      int i;
+
+      printf ("external_to_internal_register:\n");
+      for (i = 0; i <= bufp->re_nsub; i++)
+       {
+         if (i > 0)
+           printf (", ");
+         printf ("%d -> %d", i, bufp->external_to_internal_register[i]);
+       }
+      printf ("\n");
+    }
 }
 
 
@@ -1693,6 +1710,7 @@ static unsigned char reg_unset_dummy;
    ignore the excess.  */
 typedef unsigned regnum_t;
 
+#define INIT_REG_TRANSLATE_SIZE 5
 
 /* Macros for the compile stack.  */
 
@@ -1843,7 +1861,7 @@ static register_info_type *reg_info_dummy;
 /* Make the register vectors big enough for NUM_REGS registers,
    but don't make them smaller.  */
 
-static
+static void
 regex_grow_registers (int num_regs)
 {
   if (num_regs > regs_allocated_size)
@@ -1876,7 +1894,9 @@ regex_grow_registers (int num_regs)
      `syntax' is set to SYNTAX;
      `used' is set to the length of the compiled pattern;
      `fastmap_accurate' is zero;
-     `re_nsub' is the number of subexpressions in PATTERN;
+     `re_ngroups' is the number of groups/subexpressions (including shy
+        groups) in PATTERN;
+     `re_nsub' is the number of non-shy groups in PATTERN;
      `not_bol' and `not_eol' are zero;
 
    The `fastmap' and `newline_anchor' fields are neither
@@ -1974,6 +1994,25 @@ regex_compile (re_char *pattern, int size, reg_syntax_t syntax,
 
   /* Always count groups, whether or not bufp->no_sub is set.  */
   bufp->re_nsub = 0;
+  bufp->re_ngroups = 0;
+
+  /* Allocate index translation array if needed. */
+  if (bufp->external_to_internal_register == 0)
+    {
+      bufp->external_to_internal_register_size = INIT_REG_TRANSLATE_SIZE;
+      RETALLOC (bufp->external_to_internal_register,
+               bufp->external_to_internal_register_size,
+               int);
+    }
+
+  /* Initialize translations to impossible value to aid debugging. */
+  {
+    int i;
+
+    bufp->external_to_internal_register[0] = 0;
+    for (i = 1; i < bufp->external_to_internal_register_size; i++)
+      bufp->external_to_internal_register[i] = (int) 0xDEADBEEF;
+  }
 
 #if !defined (emacs) && !defined (SYNTAX_TABLE)
   /* Initialize the syntax table.  */
@@ -2556,6 +2595,7 @@ regex_compile (re_char *pattern, int size, reg_syntax_t syntax,
             handle_open:
               {
                 regnum_t r;
+               int shy = 0;
 
                 if (!(syntax & RE_NO_SHY_GROUPS)
                     && p != pend
@@ -2566,7 +2606,7 @@ regex_compile (re_char *pattern, int size, reg_syntax_t syntax,
                     switch (c)
                       {
                       case ':': /* shy groups */
-                        r = MAX_REGNUM + 1;
+                        shy = 1;
                         break;
 
                       /* All others are reserved for future constructs. */
@@ -2574,11 +2614,34 @@ regex_compile (re_char *pattern, int size, reg_syntax_t syntax,
                         FREE_STACK_RETURN (REG_BADPAT);
                       }
                   }
-                else
-                  {
-                    bufp->re_nsub++;
-                    r = ++regnum;
-                  }
+
+               r = ++regnum;
+               bufp->re_ngroups++;
+               if (!shy)
+                 /* Record the translation from capturing group index to
+                    register number, reallocating table as needed. */
+                 {
+                   bufp->re_nsub++;
+                   while (bufp->external_to_internal_register_size <=
+                          bufp->re_nsub)
+                     {
+                       int i;
+                       int old_size =
+                         bufp->external_to_internal_register_size;
+                       bufp->external_to_internal_register_size += 5;
+                       RETALLOC (bufp->external_to_internal_register,
+                                 bufp->external_to_internal_register_size,
+                                 int);
+                       /* debugging */
+                       for (i = old_size;
+                            i < bufp->external_to_internal_register_size; i++)
+                         bufp->external_to_internal_register[i] =
+                           (int) 0xDEADBEEF;
+                     }
+
+                   bufp->external_to_internal_register[bufp->re_nsub] =
+                     bufp->re_ngroups;
+                 }
 
                 if (COMPILE_STACK_FULL)
                   {
@@ -2602,7 +2665,10 @@ regex_compile (re_char *pattern, int size, reg_syntax_t syntax,
                 /* We will eventually replace the 0 with the number of
                    groups inner to this one.  But do not push a
                    start_memory for groups beyond the last one we can
-                   represent in the compiled pattern.  */
+                   represent in the compiled pattern.
+                  #### bad bad bad.  this will fail in lots of ways, if we
+                  ever have to backtrack for these groups.
+               */
                 if (r <= MAX_REGNUM)
                   {
                     COMPILE_STACK_TOP.inner_group_offset
@@ -2992,16 +3058,21 @@ regex_compile (re_char *pattern, int size, reg_syntax_t syntax,
             case '1': case '2': case '3': case '4': case '5':
             case '6': case '7': case '8': case '9':
              {
-               regnum_t reg;
+               int reg;
+
                if (syntax & RE_NO_BK_REFS)
                  goto normal_char;
 
+               /* External register indexing. */
                reg = c - '0';
 
-               if (reg > regnum)
+               if (reg > bufp->re_nsub)
                  FREE_STACK_RETURN (REG_ESUBREG);
 
-               /* Can't back reference to a subexpression if inside of it.  */
+               /* Convert external to internal as soon as possible. */
+               reg = bufp->external_to_internal_register[reg];
+
+               /* Can't back reference to a subexpression if inside it. */
                if (group_in_compile_stack (compile_stack, reg))
                  goto normal_char;
 
@@ -3121,7 +3192,7 @@ regex_compile (re_char *pattern, int size, reg_syntax_t syntax,
      isn't necessary unless we're trying to avoid calling alloca in
      the search and match routines.  */
   {
-    int num_regs = bufp->re_nsub + 1;
+    int num_regs = bufp->re_ngroups + 1;
 
     /* Since DOUBLE_FAIL_STACK refuses to double only if the current size
        is strictly greater than re_max_failures, the largest possible stack
@@ -3854,7 +3925,7 @@ re_compile_fastmap (struct re_pattern_buffer *bufp)
 
 
        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
@@ -4384,7 +4455,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
   /* We fill all the registers internally, independent of what we
      return, for use in backreferences.  The number here includes
      an element for register zero.  */
-  int num_regs = bufp->re_nsub + 1;
+  int num_regs = bufp->re_ngroups + 1;
 
   /* The currently active registers.  */
   int lowest_active_reg = NO_LOWEST_ACTIVE_REG;
@@ -4470,7 +4541,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
      there are groups, we include space for register 0 (the whole
      pattern), even though we never use it, since it simplifies the
      array indexing.  We should fix this.  */
-  if (bufp->re_nsub)
+  if (bufp->re_ngroups)
     {
       regstart       = REGEX_TALLOC (num_regs, re_char *);
       regend         = REGEX_TALLOC (num_regs, re_char *);
@@ -4645,104 +4716,112 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
        succeed_label:
           DEBUG_PRINT1 ("Accepting match.\n");
 
-          /* If caller wants register contents data back, do it.  */
-          if (regs && !bufp->no_sub)
-           {
-              /* Have the register data arrays been allocated?  */
-              if (bufp->regs_allocated == REGS_UNALLOCATED)
-                { /* No.  So allocate them with malloc.  We need one
-                     extra element beyond `num_regs' for the `-1' marker
-                     GNU code uses.  */
-                  regs->num_regs = MAX (RE_NREGS, num_regs + 1);
-                  regs->start = TALLOC (regs->num_regs, regoff_t);
-                  regs->end = TALLOC (regs->num_regs, regoff_t);
-                  if (regs->start == NULL || regs->end == NULL)
-                   {
-                     FREE_VARIABLES ();
-                     return -2;
-                   }
-                  bufp->regs_allocated = REGS_REALLOCATE;
-                }
-              else if (bufp->regs_allocated == REGS_REALLOCATE)
-                { /* Yes.  If we need more elements than were already
-                     allocated, reallocate them.  If we need fewer, just
-                     leave it alone.  */
-                  if (regs->num_regs < num_regs + 1)
-                    {
-                      regs->num_regs = num_regs + 1;
-                      RETALLOC (regs->start, regs->num_regs, regoff_t);
-                      RETALLOC (regs->end, regs->num_regs, regoff_t);
-                      if (regs->start == NULL || regs->end == NULL)
-                       {
-                         FREE_VARIABLES ();
-                         return -2;
-                       }
-                    }
-                }
-              else
-               {
-                 /* These braces fend off a "empty body in an else-statement"
-                    warning under GCC when assert expands to nothing.  */
-                 assert (bufp->regs_allocated == REGS_FIXED);
-               }
+         {
+           /* If caller wants register contents data back, fill REGS.  */
+           int num_nonshy_regs = bufp->re_nsub + 1;
+           if (regs && !bufp->no_sub)
+             {
+               /* Have the register data arrays been allocated?  */
+               if (bufp->regs_allocated == REGS_UNALLOCATED)
+                 { /* No.  So allocate them with malloc.  We need one
+                      extra element beyond `num_regs' for the `-1' marker
+                      GNU code uses.  */
+                   regs->num_regs = MAX (RE_NREGS, num_nonshy_regs + 1);
+                   regs->start = TALLOC (regs->num_regs, regoff_t);
+                   regs->end = TALLOC (regs->num_regs, regoff_t);
+                   if (regs->start == NULL || regs->end == NULL)
+                     {
+                       FREE_VARIABLES ();
+                       return -2;
+                     }
+                   bufp->regs_allocated = REGS_REALLOCATE;
+                 }
+               else if (bufp->regs_allocated == REGS_REALLOCATE)
+                 { /* Yes.  If we need more elements than were already
+                      allocated, reallocate them.  If we need fewer, just
+                      leave it alone.  */
+                   if (regs->num_regs < num_nonshy_regs + 1)
+                     {
+                       regs->num_regs = num_nonshy_regs + 1;
+                       RETALLOC (regs->start, regs->num_regs, regoff_t);
+                       RETALLOC (regs->end, regs->num_regs, regoff_t);
+                       if (regs->start == NULL || regs->end == NULL)
+                         {
+                           FREE_VARIABLES ();
+                           return -2;
+                         }
+                     }
+                 }
+               else
+                 {
+                   /* The braces fend off a "empty body in an else-statement"
+                      warning under GCC when assert expands to nothing.  */
+                   assert (bufp->regs_allocated == REGS_FIXED);
+                 }
 
-              /* Convert the pointer data in `regstart' and `regend' to
-                 indices.  Register zero has to be set differently,
-                 since we haven't kept track of any info for it.  */
-              if (regs->num_regs > 0)
-                {
-                  regs->start[0] = pos;
-                  regs->end[0] = (MATCHING_IN_FIRST_STRING
-                                 ? ((regoff_t) (d - string1))
-                                 : ((regoff_t) (d - string2 + size1)));
-                }
+               /* Convert the pointer data in `regstart' and `regend' to
+                  indices.  Register zero has to be set differently,
+                  since we haven't kept track of any info for it.  */
+               if (regs->num_regs > 0)
+                 {
+                   regs->start[0] = pos;
+                   regs->end[0] = (MATCHING_IN_FIRST_STRING
+                                   ? ((regoff_t) (d - string1))
+                                   : ((regoff_t) (d - string2 + size1)));
+                 }
 
-              /* Go through the first `min (num_regs, regs->num_regs)'
-                 registers, since that is all we initialized.  */
-             for (mcnt = 1; mcnt < MIN (num_regs, regs->num_regs); mcnt++)
-               {
-                  if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
-                    regs->start[mcnt] = regs->end[mcnt] = -1;
-                  else
-                    {
-                     regs->start[mcnt]
-                       = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]);
-                      regs->end[mcnt]
-                       = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]);
-                    }
-               }
-           } /* 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.
-
-            We do this even when no_sub is set because some applications
-             (XEmacs) reuse register structures which may contain stale
-            information, and permit attempts to access those registers.
-
-            It would be possible to require the caller to do this, but we'd
-            have to change the API for this function to reflect that, and
-            audit all callers. */
-         if (regs && regs->num_regs > 0)
-           for (mcnt = num_regs; mcnt < regs->num_regs; mcnt++)
-             regs->start[mcnt] = regs->end[mcnt] = -1;
-
-          DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
-                        nfailure_points_pushed, nfailure_points_popped,
-                        nfailure_points_pushed - nfailure_points_popped);
-          DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
-
-          mcnt = d - pos - (MATCHING_IN_FIRST_STRING
+               /* Map over the NUM_NONSHY_REGS non-shy internal registers.
+                  Copy each into the corresponding external register.
+                  N.B. MCNT indexes external registers. */
+               for (mcnt = 1;
+                    mcnt < MIN (num_nonshy_regs, regs->num_regs);
+                    mcnt++)
+                 {
+                   int ireg = bufp->external_to_internal_register[mcnt];
+
+                   if (REG_UNSET (regstart[ireg]) || REG_UNSET (regend[ireg]))
+                     regs->start[mcnt] = regs->end[mcnt] = -1;
+                   else
+                     {
+                       regs->start[mcnt]
+                         = (regoff_t) POINTER_TO_OFFSET (regstart[ireg]);
+                       regs->end[mcnt]
+                         = (regoff_t) POINTER_TO_OFFSET (regend[ireg]);
+                     }
+                 }
+             } /* 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.
+
+              We do this even when no_sub is set because some applications
+              (XEmacs) reuse register structures which may contain stale
+              information, and permit attempts to access those registers.
+
+              It would be possible to require the caller to do this, but we'd
+              have to change the API for this function to reflect that, and
+              audit all callers. */
+           if (regs && regs->num_regs > 0)
+             for (mcnt = num_nonshy_regs; mcnt < regs->num_regs; mcnt++)
+               regs->start[mcnt] = regs->end[mcnt] = -1;
+         }
+
+         DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
+                       nfailure_points_pushed, nfailure_points_popped,
+                       nfailure_points_pushed - nfailure_points_popped);
+         DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
+
+         mcnt = d - pos - (MATCHING_IN_FIRST_STRING
                            ? string1
                            : string2 - size1);
 
-          DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
+         DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
 
-          FREE_VARIABLES ();
-          return mcnt;
-        }
+         FREE_VARIABLES ();
+         return mcnt;
+       }
 
       /* Otherwise match next pattern command.  */
       switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
@@ -5071,11 +5150,15 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
 
 
        /* \<digit> has been turned into a `duplicate' command which is
-           followed by the numeric value of <digit> as the register number.  */
+           followed by the numeric value of <digit> as the register number.
+          (Already passed through external-to-internal-register mapping,
+          so it refers to the actual group number, not the non-shy-only
+          numbering used in the external world.) */
         case duplicate:
          {
            REGISTER re_char *d2, *dend2;
-           int regno = *p++;   /* Get which register to match against.  */
+           /* Get which register to match against.  */
+           int regno = *p++;
            DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
 
            /* Can't back reference a group which we've never matched.  */
@@ -5548,7 +5631,8 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
               emch1, emch2 is the character at d, and syn2 is the
               syntax of emch2. */
            Emchar emch1, emch2;
-           int syn1, syn2;
+           /* GCC isn't smart enough to see these are initialized if used. */
+           int syn1 = 0, syn2 = 0;
            re_char *d_before, *d_after;
            int result,
                at_beg = AT_STRINGS_BEG (d),
@@ -5804,7 +5888,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
 #endif /* emacs */
 
         default:
-          abort ();
+          ABORT ();
        }
       continue;  /* Successfully executed one pattern command; keep going.  */
 
@@ -5881,7 +5965,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, re_char *string1,
 
 static re_bool
 group_match_null_string_p (unsigned char **p, unsigned char *end,
-                          register_info_type *reg_info)
+                          register_info_type *register_info)
 {
   int mcnt;
   /* Point to after the args to the start_memory.  */
@@ -5930,7 +6014,7 @@ group_match_null_string_p (unsigned char **p, unsigned char *end,
                      its number.  */
 
                   if (!alt_match_null_string_p (p1, p1 + mcnt - 3,
-                                                     reg_info))
+                                                     register_info))
                     return false;
 
                   /* Move to right after this alternative, including the
@@ -5959,7 +6043,7 @@ group_match_null_string_p (unsigned char **p, unsigned char *end,
                  the length of the alternative.  */
               EXTRACT_NUMBER (mcnt, p1 - 2);
 
-              if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info))
+              if (!alt_match_null_string_p (p1, p1 + mcnt, register_info))
                 return false;
 
               p1 += mcnt;      /* Get past the n-th alternative.  */
@@ -5974,7 +6058,7 @@ group_match_null_string_p (unsigned char **p, unsigned char *end,
 
 
         default:
-          if (!common_op_match_null_string_p (&p1, end, reg_info))
+          if (!common_op_match_null_string_p (&p1, end, register_info))
             return false;
         }
     } /* while p1 < end */
@@ -5989,7 +6073,7 @@ group_match_null_string_p (unsigned char **p, unsigned char *end,
 
 static re_bool
 alt_match_null_string_p (unsigned char *p, unsigned char *end,
-                        register_info_type *reg_info)
+                        register_info_type *register_info)
 {
   int mcnt;
   unsigned char *p1 = p;
@@ -6009,7 +6093,7 @@ alt_match_null_string_p (unsigned char *p, unsigned char *end,
           break;
 
        default:
-          if (!common_op_match_null_string_p (&p1, end, reg_info))
+          if (!common_op_match_null_string_p (&p1, end, register_info))
             return false;
         }
     }  /* while p1 < end */
@@ -6025,7 +6109,7 @@ alt_match_null_string_p (unsigned char *p, unsigned char *end,
 
 static re_bool
 common_op_match_null_string_p (unsigned char **p, unsigned char *end,
-                              register_info_type *reg_info)
+                              register_info_type *register_info)
 {
   int mcnt;
   re_bool ret;
@@ -6053,13 +6137,14 @@ common_op_match_null_string_p (unsigned char **p, unsigned char *end,
     case start_memory:
       reg_no = *p1;
       assert (reg_no > 0 && reg_no <= MAX_REGNUM);
-      ret = group_match_null_string_p (&p1, end, reg_info);
+      ret = group_match_null_string_p (&p1, end, register_info);
 
       /* Have to set this here in case we're checking a group which
          contains a group and a back reference to it.  */
 
-      if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
-        REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret;
+      if (REG_MATCH_NULL_STRING_P (register_info[reg_no]) ==
+         MATCH_NULL_UNSET_VALUE)
+        REG_MATCH_NULL_STRING_P (register_info[reg_no]) = ret;
 
       if (!ret)
         return false;
@@ -6090,7 +6175,7 @@ common_op_match_null_string_p (unsigned char **p, unsigned char *end,
       break;
 
     case duplicate:
-      if (!REG_MATCH_NULL_STRING_P (reg_info[*p1]))
+      if (!REG_MATCH_NULL_STRING_P (register_info[*p1]))
         return false;
       break;
 
@@ -6252,6 +6337,8 @@ re_exec (const char *s)
      `newline_anchor' to REG_NEWLINE being set in CFLAGS;
      `fastmap' and `fastmap_accurate' to zero;
      `re_nsub' to the number of subexpressions in PATTERN.
+     (non-shy of course.  POSIX probably doesn't know about
+     shy ones, and in any case they should be invisible.)
 
    PATTERN is the address of the pattern string.
 
@@ -6294,7 +6381,7 @@ regcomp (regex_t *preg, const char *pattern, int cflags)
 
   if (cflags & REG_ICASE)
     {
-      unsigned i;
+      int i;
 
       preg->translate = (char *) malloc (CHAR_SET_SIZE);
       if (preg->translate == NULL)
@@ -6421,7 +6508,7 @@ regerror (int errcode, const regex_t *preg, char *errbuf,
        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]);
 
index d4c2e5a..ae2c910 100644 (file)
@@ -358,9 +358,14 @@ struct re_pattern_buffer
            when it is matched.  */
   RE_TRANSLATE_TYPE translate;
 
-       /* Number of subexpressions found by the compiler.  */
+       /* Number of returnable groups found by the compiler. (This does
+           not count shy groups.) */
   Element_count re_nsub;
 
+       /* Total number of groups found by the compiler. (Including
+          shy ones.) */
+  Element_count re_ngroups;
+
         /* Zero if this pattern cannot match the empty string, one else.
            Well, in truth it's used only in `re_search_2', to see
            whether or not we should use the fastmap, so we don't set
@@ -395,6 +400,12 @@ struct re_pattern_buffer
         /* If true, an anchor at a newline matches.  */
   unsigned newline_anchor : 1;
 
+       /* Mapping between back references and groups (may not be
+          equivalent with shy groups). */
+  int *external_to_internal_register;
+
+  int external_to_internal_register_size;
+
 /* [[[end pattern_buffer]]] */
 };
 
index bac8625..2c96d22 100644 (file)
@@ -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"
index e16dfeb..fd33379 100644 (file)
@@ -91,9 +91,9 @@ Boston, MA 02111-1307, USA.  */
  * constant to dimension an array.  So wire in the appropriate value here.
  */
 
-#ifndef NSIG
+#if defined(emacs) && !defined(NSIG)
 #define NSIG   32
-#endif
+#endif /* defined(emacs) && !defined(NSIG) */
 
 /* We need bss_end from emacs.c for undumping */
 
index ba76d43..cf98b64 100644 (file)
@@ -1,4 +1,4 @@
-/* scrollbar implementation -- X interface.
+/* scrollbar implementation -- GTK interface.
    Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
    Copyright (C) 1994 Amdhal Corporation.
    Copyright (C) 1995 Sun Microsystems, Inc.
@@ -98,8 +98,9 @@ gtk_create_scrollbar_instance (struct frame *f, int vertical,
   SCROLLBAR_GTK_VDRAG_ORIG_VALUE (instance) = -1;
   SCROLLBAR_GTK_LAST_VALUE (instance) = adj->value;
 
-  gtk_object_set_data (GTK_OBJECT (adj), "xemacs::gui_id", (void *) SCROLLBAR_GTK_ID (instance));
-  gtk_object_set_data (GTK_OBJECT (adj), "xemacs::frame", f);
+  gtk_object_set_data (GTK_OBJECT (adj), GTK_DATA_GUI_IDENTIFIER,
+                      (void *) SCROLLBAR_GTK_ID (instance));
+  gtk_object_set_data (GTK_OBJECT (adj), GTK_DATA_FRAME_IDENTIFIER, f);
   gtk_object_set_data (GTK_OBJECT (adj), "xemacs::sb_instance", instance);
 
   sb = GTK_SCROLLBAR (vertical ? gtk_vscrollbar_new (adj) : gtk_hscrollbar_new (adj));
@@ -217,6 +218,21 @@ gtk_update_scrollbar_instance_status (struct window *w, int active, int size,
              gtk_widget_set_usize (wid,
                                    pos_data->scrollbar_width,
                                    pos_data->scrollbar_height);
+
+             /*
+               UGLY! UGLY! UGLY!  Changes to wid->allocation are queued and
+               not performed until the GTK event loop.  However, when the
+               fontlock progress bar is run, the vertical scrollbar's height
+               is change and then changed back before events are again
+               processed.  This means that the change back is not seen and
+               the scrollbar is left too short.  Fix this by making the
+               change manually so the test above sees the change.  This does
+               not seem to cause problems in other cases.
+              */
+
+             wid->allocation.width = pos_data->scrollbar_width;
+             wid->allocation.height = pos_data->scrollbar_height;
+
              modified_p = 1;
            }
 
@@ -228,6 +244,21 @@ gtk_update_scrollbar_instance_status (struct window *w, int active, int size,
                              wid,
                              pos_data->scrollbar_x,
                              pos_data->scrollbar_y);
+
+             /*
+               UGLY! UGLY! UGLY!  Changes to wid->allocation are queued and
+               not performed until the GTK event loop.  However, when the
+               fontlock progress bar is run, the horizontal scrollbar's
+               position is change and then changed back before events are
+               again processed.  This means that the change back is not seen
+               and the scrollbar is left in the wrong position.  Fix this by
+               making the change manually so the test above sees the change.
+               This does not seem to cause problems in other cases.
+              */
+
+             wid->allocation.x = pos_data->scrollbar_x;
+             wid->allocation.y = pos_data->scrollbar_y;
+
              modified_p = 1;
            }
 
@@ -333,7 +364,7 @@ gtk_scrollbar_loop (enum gtk_scrollbar_loop type, Lisp_Object window,
                }
              break;
            default:
-             abort ();
+             ABORT ();
            }
        }
 
@@ -359,9 +390,9 @@ scrollbar_cb (GtkAdjustment *adj, gpointer user_data)
 {
   /* This function can GC */
   int vertical = (int) user_data;
-  struct frame *f = gtk_object_get_data (GTK_OBJECT (adj), "xemacs::frame");
+  struct frame *f = gtk_object_get_data (GTK_OBJECT (adj), GTK_DATA_FRAME_IDENTIFIER);
   struct scrollbar_instance *instance = gtk_object_get_data (GTK_OBJECT (adj), "xemacs::sb_instance");
-  GUI_ID id = (GUI_ID) gtk_object_get_data (GTK_OBJECT (adj), "xemacs::gui_id");
+  GUI_ID id = (GUI_ID) gtk_object_get_data (GTK_OBJECT (adj), GTK_DATA_GUI_IDENTIFIER);
   Lisp_Object win, frame;
   struct window_mirror *mirror;
   Lisp_Object event_type = Qnil;
@@ -407,7 +438,7 @@ scrollbar_cb (GtkAdjustment *adj, gpointer user_data)
       event_data = Fcons (win, make_int ((int)adj->value));
       break;
     default:
-      abort();
+      ABORT();
     }
 
   signal_special_gtk_user_event (frame, event_type, event_data);
@@ -431,13 +462,13 @@ gtk_scrollbar_pointer_changed_in_window (struct window *w)
 void
 gtk_update_frame_scrollbars (struct frame *f)
 {
-  /* Consider this code to be "in_display" so that we abort() if Fsignal()
+  /* Consider this code to be "in_display" so that we ABORT() if Fsignal()
      gets called. */
   in_display++;
   gtk_scrollbar_loop (GTK_UPDATE_FRAME_SCROLLBARS, f->root_window, f->root_mirror,
                      0, (GdkWindow *) NULL);
   in_display--;
-  if (in_display < 0) abort ();
+  if (in_display < 0) ABORT ();
 }
 
 #ifdef MEMORY_USAGE_STATS
index d3c7c9f..fac374a 100644 (file)
@@ -210,7 +210,7 @@ mswindows_handle_scrollbar_event (HWND hwnd, int code, int pos)
       /* "0 as the second parameter" refers to the call to real_window
      above.  This comment was taken from Ben's 21.5 code that differs
      somewhat from this, I don't think the 21.4 code ever had a 0
-     there.  #### we're still hitting an abort here with 0 as the
+     there.  #### we're still hitting an ABORT here with 0 as the
      second parameter, although only occasionally.  It seems that
      sometimes we receive events for scrollbars that don't exist
      anymore.  I assume it must happen like this: The user does
index 39967fd..53d4c24 100644 (file)
@@ -280,7 +280,7 @@ x_update_scrollbar_instance_status (struct window *w, int active, int size,
            }
        }
 
-      if (!wv->scrollbar_data) abort ();
+      if (!wv->scrollbar_data) ABORT ();
       free_widget_value_tree (wv);
     }
   else if (managed)
@@ -366,7 +366,7 @@ x_scrollbar_loop (enum x_scrollbar_loop type, Lisp_Object window,
                }
              break;
            default:
-             abort ();
+             ABORT ();
            }
        }
 
@@ -685,13 +685,13 @@ x_scrollbar_pointer_changed_in_window (struct window *w)
 void
 x_update_frame_scrollbars (struct frame *f)
 {
-  /* Consider this code to be "in_display" so that we abort() if Fsignal()
+  /* Consider this code to be "in_display" so that we ABORT() if Fsignal()
      gets called. */
   in_display++;
   x_scrollbar_loop (X_UPDATE_FRAME_SCROLLBARS, f->root_window, f->root_mirror,
                    0, (Window) NULL);
   in_display--;
-  if (in_display < 0) abort ();
+  if (in_display < 0) ABORT ();
 }
 
 #ifdef MEMORY_USAGE_STATS
index 1baa76f..6df936c 100644 (file)
@@ -240,7 +240,8 @@ compute_scrollbar_instance_usage (struct device *d,
 {
   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)
     {
index 7eebe5c..d6945c2 100644 (file)
@@ -109,7 +109,6 @@ Lisp_Object Vskip_chars_range_table;
 
 static void set_search_regs (struct buffer *buf, Bufpos beg, Charcount len);
 static void clear_unused_search_regs (struct re_registers *regp, int no_sub);
-/* #### according to comment in 21.5, unnecessary */
 static void save_search_regs (void);
 static Bufpos simple_search (struct buffer *buf, Bufbyte *base_pat,
                             Bytecount len, Bytind pos, Bytind lim,
@@ -1085,7 +1084,7 @@ search_command (Lisp_Object string, Lisp_Object limit, Lisp_Object noerror,
       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
@@ -1098,7 +1097,7 @@ search_command (Lisp_Object string, Lisp_Object limit, Lisp_Object noerror,
     }
 
   if (np < BUF_BEGV (buf) || np > BUF_ZV (buf))
-    abort ();
+    ABORT ();
 
   BUF_SET_PT (buf, np);
 
@@ -2757,9 +2756,9 @@ match_limit (Lisp_Object num, int beginningp)
 
   CHECK_INT (num);
   n = XINT (num);
-  if (n < 0 || n >= search_regs.num_regs)
+  if (n < 0 || search_regs.num_regs <= 0)
     args_out_of_range (num, make_int (search_regs.num_regs));
-  if (search_regs.num_regs == 0 ||
+  if (n >= search_regs.num_regs ||
       search_regs.start[n] < 0)
     return Qnil;
   return make_int (beginningp ? search_regs.start[n] : search_regs.end[n]);
@@ -2838,7 +2837,7 @@ to hold all the values, and if INTEGERS is non-nil, no consing is done.
            }
          else
            /* last_thing_searched must always be Qt, a buffer, or Qnil.  */
-           abort ();
+           ABORT ();
 
          len = i;
        }
@@ -2880,11 +2879,8 @@ LIST should have been created by calling `match-data' previously.
   int num_regs;
   int length;
 
-#if 0
-  /* #### according to 21.5 comment, unnecessary */
   if (running_asynch_code)
     save_search_regs ();
-#endif
 
   CONCHECK_LIST (list);
 
@@ -2947,7 +2943,6 @@ LIST should have been created by calling `match-data' previously.
   return Qnil;
 }
 
-/* #### according to 21.5 comment, unnecessary */
 /* If non-zero the match data have been saved in saved_search_regs
    during the execution of a sentinel or filter. */
 static int search_regs_saved;
@@ -2971,8 +2966,6 @@ save_search_regs (void)
     }
 }
 
-/* #### according to 21.5 comment, unnecessary
-   prototype in lisp.h, all calls in process.c */
 /* Called upon exit from filters and sentinels. */
 void
 restore_match_data (void)
index 05c71a1..21332fd 100644 (file)
@@ -382,7 +382,7 @@ motif_clipboard_cb (Widget widget, int *data_id, int *private_id, int *reason)
        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 */
index 1d18b8b..8c6b1ca 100644 (file)
@@ -81,17 +81,16 @@ void* more_static_core ( ptrdiff_t increment )
       if (static_heap_ptr + size >= static_heap_base + static_heap_size)
        {
          printf(
-
-"\nRequested %d bytes, static heap exhausted!  base is %p, current ptr
-is %p. You have exhausted the static heap. 
-
-If you are simply trying to compile, remove sheap-adjust.h
-and recompile from the top level. If this doesn't
-work then STATIC_HEAP_SLOP (defined in this file) is too small.
-
-If you want to run temacs, change SHEAP_ADJUSTMENT in sheap-adjust.h
-to 0 or a +ve number. Generally you should *not* try to run temacs
-with a static heap, you should dump first.\n", size,
+"\nRequested %d bytes, static heap exhausted!  base is %p, current ptr\n"
+"is %p. You have exhausted the static heap. \n"
+"\n"
+"If you are simply trying to compile, remove sheap-adjust.h\n"
+"and recompile from the top level. If this doesn't\n"
+"work then STATIC_HEAP_SLOP (defined in this file) is too small.\n"
+"\n"
+"If you want to run temacs, change SHEAP_ADJUSTMENT in sheap-adjust.h\n"
+"to 0 or a +ve number. Generally you should *not* try to run temacs\n"
+"with a static heap, you should dump first.\n", size,
 static_heap_base, static_heap_ptr);
 
          exit(-1);
index f85d83c..4ff3d1a 100644 (file)
@@ -439,7 +439,7 @@ interrupt_signal (int sig)
         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");
index 226deff..017663d 100644 (file)
@@ -1787,7 +1787,7 @@ specifier_add_spec (Lisp_Object specifier, Lisp_Object locale,
     tem = nconc2 (*orig_inst_list, list_to_build_up);
   else
     {
-      abort ();
+      ABORT ();
       tem = Qnil;
     }
 
@@ -2494,7 +2494,7 @@ specifier_instance_from_inst_list (Lisp_Object specifier,
   /* The instantiate method is allowed to call eval.  Since it
      is quite common for this function to get called from somewhere in
      redisplay we need to make sure that quits are ignored.  Otherwise
-     Fsignal will abort. */
+     Fsignal will ABORT. */
     specbind (Qinhibit_quit, Qt);
 
   LIST_LOOP (rest, inst_list)
@@ -2580,7 +2580,7 @@ specifier_instance (Lisp_Object specifier, Lisp_Object matchspec,
 
        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));
@@ -2591,7 +2591,7 @@ specifier_instance (Lisp_Object specifier, Lisp_Object matchspec,
        really went wrong. */
     device = FRAME_DEVICE (XFRAME (frame));
 
-  /* device had better be determined by now; abort if not. */
+  /* device had better be determined by now; ABORT if not. */
   tag = DEVICE_CLASS (XDEVICE (device));
 
   depth = make_int (1 + XINT (depth));
index ac006a3..918d06d 100644 (file)
@@ -154,7 +154,7 @@ struct specifier_methods
 
      This method must presume that both INSTANTIATOR and MATCHSPEC are
      already validated by the corresponding validate_* methods, and
-     may abort if they are invalid.
+     may ABORT if they are invalid.
 
      Return value is an instance, which is returned immediately to the
      caller, or Qunbound to continue instantiation lookup chain.
@@ -417,7 +417,7 @@ struct specifier_caching
 
 /* #### 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 */
 
index 926806d..d35f8eb 100644 (file)
@@ -193,7 +193,7 @@ add_num_time_t (char *string, int max, time_t num)
   int length;
 
   if (sizeof (num) > 16)
-    abort ();
+    ABORT ();
   sprintf (buf, "%lu", (unsigned long) num);
   length = add_str (string, buf, max);
   return length;
index ccb195c..db4574a 100644 (file)
@@ -76,7 +76,7 @@ init_device (int volume, unsigned char *data, int fd,
   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))
     {
index 58cf76f..133164f 100644 (file)
@@ -735,7 +735,7 @@ Set SYMBOL's property list to NEWPLIST, and return NEWPLIST.
 #if 0 /* Inserted for debugging 6/28/1997 -slb */
   /* Somebody is setting a property list of integer 0, who? */
   /* Not this way apparently. */
-  if (EQ(newplist, Qzero)) abort();
+  if (EQ(newplist, Qzero)) ABORT();
 #endif
 
   XSYMBOL (symbol)->plist = newplist;
@@ -1118,7 +1118,7 @@ do_symval_forwarding (Lisp_Object valcontents, struct buffer *buffer,
       return valcontents;
 
     default:
-      abort ();
+      ABORT ();
     }
   return Qnil; /* suppress compiler warning */
 }
@@ -1294,7 +1294,7 @@ store_symval_forwarding (Lisp_Object sym, Lisp_Object ovalue,
          return;
 
        default:
-         abort ();
+         ABORT ();
        }
     }
 }
@@ -1890,7 +1890,7 @@ Set SYMBOL's value to NEWVAL, and return NEWVAL.
        break;
       }
     default:
-      abort ();
+      ABORT ();
     }
   store_symval_forwarding (symbol, valcontents, newval);
 
@@ -2159,7 +2159,7 @@ sets it.
          return variable;
 
        default:
-         abort ();
+         ABORT ();
        }
     }
 
@@ -2269,7 +2269,7 @@ Use `make-local-hook' instead.
          }
 
        default:
-         abort ();
+         ABORT ();
        }
     }
 
@@ -2344,7 +2344,7 @@ Use `make-local-hook' instead.
          break;
 
        default:
-         abort ();
+         ABORT ();
        }
     }
 
@@ -2662,7 +2662,7 @@ The returned info will be a symbol, one of
     case SYMVAL_UNBOUND_MARKER:                        return Qnil;
 
     default:
-      abort (); return Qnil;
+      ABORT (); return Qnil;
     }
 }
 
@@ -2860,7 +2860,7 @@ decode_magic_handler_type (Lisp_Object symbol)
   if (EQ (symbol, Qmake_local))      return MAGIC_HANDLER_MAKE_LOCAL;
 
   signal_simple_error ("Unrecognized symbol value handler type", symbol);
-  abort ();
+  ABORT ();
   return MAGIC_HANDLER_MAX;
 }
 
@@ -2893,7 +2893,7 @@ handler_type_from_function_symbol (Lisp_Object funsym, int abort_if_not_found)
     return MAGIC_HANDLER_MAKE_LOCAL;
 
   if (abort_if_not_found)
-    abort ();
+    ABORT ();
   signal_simple_error ("Unrecognized symbol-value function", funsym);
   return MAGIC_HANDLER_MAX;
 }
index db3faba..fd21bdd 100644 (file)
@@ -413,7 +413,7 @@ update_syntax_cache (int pos, int count)
   else
     {
       tmp_table = Qnil;        /* silence compiler */
-      /* Always aborts.  #### Is there another sensible thing to do here? */
+      /* Always ABORTs.  #### Is there another sensible thing to do here? */
       assert (BUFFERP (syntax_cache.object) || STRINGP (syntax_cache.object));
     }
 
index c307469..5405949 100644 (file)
@@ -30,23 +30,6 @@ Boston, MA 02111-1307, USA.  */
 #define DONT_ENCAPSULATE
 
 #include <config.h>
-
-#ifdef WIN32_NATIVE
-#ifdef MINGW
-#include <../mingw/process.h>
-#else
-/* <process.h> should not conflict with "process.h", as per ANSI definition.
-   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.
-
-   Unfortunately, this must go before lisp.h, since process.h defines abort()
-   which will conflict with the macro defined in lisp.h
-*/
-#include <../include/process.h>
-#endif /* MINGW */
-#endif /* WIN32_NATIVE */
-
 #include "lisp.h"
 
 /* ------------------------------- */
@@ -94,6 +77,19 @@ Boston, MA 02111-1307, USA.  */
 #include "nt.h"
 #endif
 
+#ifdef WIN32_NATIVE
+#ifdef MINGW
+#include <../mingw/process.h>
+#else
+/* <process.h> should not conflict with "process.h", as per ANSI definition.
+   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.
+*/
+#include <../include/process.h>
+#endif /* MINGW */
+#endif /* WIN32_NATIVE */
+
 /* ------------------------------- */
 /*         TTY definitions         */
 /* ------------------------------- */
@@ -975,7 +971,7 @@ init_baud_rate (struct device *d)
 
     sg.sg_ospeed = B9600;
     if (ioctl (input_fd, TIOCGETP, &sg) < 0)
-      abort ();
+      ABORT ();
     DEVICE_TTY_DATA (d)->ospeed = sg.sg_ospeed;
 #endif
   }
@@ -3510,19 +3506,19 @@ long
 get_random (void)
 {
   long val = random ();
-#if VALBITS > RAND_BITS
+#if INT_VALBITS > RAND_BITS
   val = (val << RAND_BITS) ^ random ();
-#if VALBITS > 2*RAND_BITS
+#if INT_VALBITS > 2*RAND_BITS
   val = (val << RAND_BITS) ^ random ();
-#if VALBITS > 3*RAND_BITS
+#if INT_VALBITS > 3*RAND_BITS
   val = (val << RAND_BITS) ^ random ();
-#if VALBITS > 4*RAND_BITS
+#if INT_VALBITS > 4*RAND_BITS
   val = (val << RAND_BITS) ^ random ();
 #endif /* need at least 5 */
 #endif /* need at least 4 */
 #endif /* need at least 3 */
 #endif /* need at least 2 */
-  return val & ((1L << VALBITS) - 1);
+  return val & (EMACS_INT) ((1UL << INT_VALBITS) - 1);
 }
 
 \f
index fc1d877..679e515 100644 (file)
@@ -280,19 +280,164 @@ dll_close (dll_handle h)
   return NSUnLinkModule((NSModule)h, NSUNLINKMODULE_OPTION_NONE);
 }
 
+/* Given an address, return the mach_header for the image containing it
+ * or zero if the given address is not contained in any loaded images.
+ *
+ * Note: image_for_address(), my_find_image() and search_linked_libs() are
+ * based on code from the dlcompat library
+ * (http://www.opendarwin.org/projects/dlcompat).
+ */
+
+static struct mach_header*
+image_for_address(void *address)
+{
+  unsigned long i;
+  unsigned long count = _dyld_image_count();
+  struct mach_header *mh = 0;
+
+  for (i = 0; i < count; i++)
+    {
+      unsigned long addr = (unsigned long)address -
+       _dyld_get_image_vmaddr_slide(i);
+      mh = _dyld_get_image_header(i);
+
+      if (mh)
+       {
+         struct load_command *lc =
+           (struct load_command *)((char *)mh + sizeof(struct mach_header));
+         unsigned long j;
+
+         for (j = 0; j < mh->ncmds;
+              j++, lc = (struct load_command *)((char *)lc + lc->cmdsize))
+           {
+             if (LC_SEGMENT == lc->cmd &&
+                 addr >= ((struct segment_command *)lc)->vmaddr &&
+                 addr <
+                 ((struct segment_command *)lc)->vmaddr +
+                 ((struct segment_command *)lc)->vmsize)
+               {
+                 goto image_found;
+               }
+           }
+       }
+
+      mh = 0;
+    }
+
+ image_found:
+  return mh;
+}
+
+static const struct mach_header*
+my_find_image(const char *name)
+{
+  const struct mach_header *mh = (struct mach_header *)
+    NSAddImage(name, NSADDIMAGE_OPTION_RETURN_ONLY_IF_LOADED |
+              NSADDIMAGE_OPTION_RETURN_ON_ERROR);
+
+  if (!mh)
+    {
+      int count = _dyld_image_count();
+      int j;
+
+      for (j = 0; j < count; j++)
+       {
+         const char *id = _dyld_get_image_name(j);
+
+         if (!strcmp(id, name))
+           {
+             mh = _dyld_get_image_header(j);
+             break;
+           }
+       }
+    }
+
+  return mh;
+}
+
+/*
+ * dyld adds libraries by first adding the directly dependant libraries in
+ * link order, and then adding the dependencies for those libraries, so we
+ * should do the same... but we don't bother adding the extra dependencies, if
+ * the symbols are neither in the loaded image nor any of it's direct
+ * dependencies, then it probably isn't there.
+ */
+static NSSymbol
+search_linked_libs(const struct mach_header * mh, const char *symbol)
+{
+  int n;
+  NSSymbol nssym = 0;
+
+  struct load_command *lc =
+    (struct load_command *)((char *)mh + sizeof(struct mach_header));
+
+  for (n = 0; n < mh->ncmds;
+       n++, lc = (struct load_command *)((char *)lc + lc->cmdsize))
+    {
+      if ((LC_LOAD_DYLIB == lc->cmd) || (LC_LOAD_WEAK_DYLIB == lc->cmd))
+       {
+         struct mach_header *wh;
+
+         if ((wh = (struct mach_header *)
+              my_find_image((char *)(((struct dylib_command *)lc)->dylib.name.offset +
+                                     (char *)lc))))
+           {
+             if (NSIsSymbolNameDefinedInImage(wh, symbol))
+               {
+                 nssym =
+                   NSLookupSymbolInImage(wh,
+                                         symbol,
+                                         NSLOOKUPSYMBOLINIMAGE_OPTION_BIND |
+                                         NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
+                 break;
+               }
+           }
+       }
+    }
+
+  return nssym;
+}
+
 dll_func
 dll_function (dll_handle h, const char *n)
 {
-  NSSymbol sym;
+  NSSymbol sym = 0;
 #ifdef DLSYM_NEEDS_UNDERSCORE
   char *buf = alloca_array (char, strlen (n) + 2);
   *buf = '_';
   strcpy (buf + 1, n);
   n = buf;
 #endif
-  sym = NSLookupSymbolInModule((NSModule)h, n);
-  if (sym == 0) return 0;
-  return (dll_func)NSAddressOfSymbol(sym);
+
+  /* NULL means the program image and shared libraries, not bundles. */
+
+  if (h == NULL)
+    {
+      /* NOTE: This assumes that this function is included in the main program
+        and not in a shared library. */
+      const struct mach_header* my_mh = image_for_address(&dll_function);
+
+      if (NSIsSymbolNameDefinedInImage(my_mh, n))
+       {
+         sym =
+           NSLookupSymbolInImage(my_mh,
+                                 n,
+                                 NSLOOKUPSYMBOLINIMAGE_OPTION_BIND |
+                                 NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
+       }
+
+      if (!sym)
+       {
+         sym = search_linked_libs(my_mh, n);
+       }
+    }
+  else
+    {
+      sym = NSLookupSymbolInModule((NSModule)h, n);
+    }
+
+   if (sym == 0) return 0;
+   return (dll_func)NSAddressOfSymbol(sym);
 }
 
 dll_var
index c0b6132..b9c1184 100644 (file)
@@ -389,7 +389,7 @@ gtk_get_button_size (struct frame *f, Lisp_Object window,
        (frame)->right_toolbar_was_visible = flag;                      \
        break;                                                          \
       default:                                                         \
-       abort ();                                                       \
+       ABORT ();                                                       \
       }                                                                        \
   } while (0)
 
index 4234441..774e34f 100644 (file)
@@ -71,7 +71,7 @@ mswindows_move_toolbar (struct frame *f, enum toolbar_pos pos);
        (frame)->right_toolbar_was_visible = flag;                      \
        break;                                                          \
       default:                                                         \
-       abort ();                                                       \
+       ABORT ();                                                       \
       }                                                                        \
   } while (0)
 
index 0e5a731..213d6cc 100644 (file)
@@ -401,7 +401,7 @@ x_get_button_size (struct frame *f, Lisp_Object window,
        (frame)->right_toolbar_was_visible = flag;                      \
        break;                                                          \
       default:                                                         \
-       abort ();                                                       \
+       ABORT ();                                                       \
       }                                                                        \
   } while (0)
 
index dd742ff..95a455f 100644 (file)
@@ -908,7 +908,7 @@ get_toolbar_coords (struct frame *f, enum toolbar_pos pos, int *x, int *y,
       *vert = 1;
       break;
     default:
-      abort ();
+      ABORT ();
     }
 }
 
index c7ddd3e..f148803 100644 (file)
@@ -36,6 +36,7 @@ static GHashTable *dll_cache;
 
 Lisp_Object gtk_type_to_lisp (GtkArg *arg);
 int lisp_to_gtk_type (Lisp_Object obj, GtkArg *arg);
+int lisp_to_gtk_ret_type (Lisp_Object obj, GtkArg *arg);
 void describe_gtk_arg (GtkArg *arg);
 guint symbol_to_enum (Lisp_Object obj, GtkType t);
 static guint lisp_to_flag (Lisp_Object obj, GtkType t);
@@ -960,7 +961,7 @@ Lisp_Object build_gtk_object (GtkObject *obj)
   emacs_gtk_object_data *data = NULL;
   GUI_ID id = 0;
 
-  id = (GUI_ID) gtk_object_get_data (obj, "xemacs::gui_id");
+  id = (GUI_ID) gtk_object_get_data (obj, GTK_DATA_GUI_IDENTIFIER);
 
   if (id)
     {
@@ -976,7 +977,7 @@ Lisp_Object build_gtk_object (GtkObject *obj)
       XSETGTK_OBJECT (retval, data);
 
       id = new_gui_id ();
-      gtk_object_set_data (obj, "xemacs::gui_id", (gpointer) id);
+      gtk_object_set_data (obj, GTK_DATA_GUI_IDENTIFIER, (gpointer) id);
       gcpro_popup_callbacks (id, retval);
       gtk_object_ref (obj);
       gtk_signal_connect (obj, "destroy", GTK_SIGNAL_FUNC (__notice_object_destruction), (gpointer)id);
@@ -1035,7 +1036,7 @@ __internal_callback_marshal (GtkObject *obj, gpointer data, guint n_args, GtkArg
   signal_fake_event ();
 
   if (args[n_args].type != GTK_TYPE_NONE)
-    lisp_to_gtk_type (rval, &args[n_args]);
+    lisp_to_gtk_ret_type (rval, &args[n_args]);
 
   UNGCPRO;
 }
@@ -1155,7 +1156,7 @@ Lisp_Object build_gtk_boxed (void *obj, GtkType t)
   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;
@@ -1420,13 +1421,13 @@ void describe_gtk_arg (GtkArg *arg)
       /* 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:
@@ -1437,7 +1438,7 @@ void describe_gtk_arg (GtkArg *arg)
       break;
 
     default:
-      abort();
+      ABORT();
     }
 }
 
@@ -1517,7 +1518,7 @@ Lisp_Object gtk_type_to_lisp (GtkArg *arg)
            }
        }
       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);
@@ -1570,7 +1571,7 @@ int lisp_to_gtk_type (Lisp_Object obj, GtkArg *arg)
       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);
@@ -1788,7 +1789,286 @@ int lisp_to_gtk_type (Lisp_Object obj, GtkArg *arg)
       else
        {
          stderr_out ("Do not know how to convert `%s' from lisp!\n", gtk_type_name (arg->type));
-         abort();
+         ABORT();
+       }
+      break;
+    }
+
+  return (0);
+}
+
+/* Convert lisp types to GTK return types.  This is identical to
+   lisp_to_gtk_type() except that the macro used to set the value is
+   different.
+
+   ### There should be some way of combining these two functions.
+*/
+int lisp_to_gtk_ret_type (Lisp_Object obj, GtkArg *arg)
+{
+  switch (GTK_FUNDAMENTAL_TYPE (arg->type))
+    {
+      /* flag types */
+    case GTK_TYPE_NONE:
+      return (0);
+    case GTK_TYPE_CHAR:
+      {
+       Emchar c;
+
+       CHECK_CHAR_COERCE_INT (obj);
+       c = XCHAR (obj);
+       *(GTK_RETLOC_CHAR (*arg)) = c;
+      }
+      break;
+    case GTK_TYPE_UCHAR:
+      {
+       Emchar c;
+
+       CHECK_CHAR_COERCE_INT (obj);
+       c = XCHAR (obj);
+       *(GTK_RETLOC_CHAR (*arg)) = c;
+      }
+      break;
+    case GTK_TYPE_BOOL:
+      *(GTK_RETLOC_BOOL (*arg)) = NILP (obj) ? FALSE : TRUE;
+      break;
+    case GTK_TYPE_INT:
+    case GTK_TYPE_UINT:
+      if (NILP (obj) || EQ (Qt, obj))
+       {
+         /* For we are a kind mistress and allow sending t/nil for
+             1/0 to stupid GTK functions that say they take guint or
+             gint in the header files, but actually treat it like a
+             bool.  *sigh*
+         */
+         *(GTK_RETLOC_INT(*arg)) = NILP (obj) ? 0 : 1;
+       }
+      else
+       {
+         CHECK_INT (obj);
+         *(GTK_RETLOC_INT(*arg)) = XINT (obj);
+       }
+      break;
+    case GTK_TYPE_LONG:
+    case GTK_TYPE_ULONG:
+      ABORT();
+    case GTK_TYPE_FLOAT:
+      CHECK_INT_OR_FLOAT (obj);
+      *(GTK_RETLOC_FLOAT(*arg)) = extract_float (obj);
+      break;
+    case GTK_TYPE_DOUBLE:
+      CHECK_INT_OR_FLOAT (obj);
+      *(GTK_RETLOC_DOUBLE(*arg)) = extract_float (obj);
+      break;
+    case GTK_TYPE_STRING:
+      if (NILP (obj))
+       *(GTK_RETLOC_STRING (*arg)) = NULL;
+      else
+       {
+         CHECK_STRING (obj);
+         *(GTK_RETLOC_STRING (*arg)) = (char *) XSTRING_DATA (obj);
+       }
+      break;
+    case GTK_TYPE_ENUM:
+    case GTK_TYPE_FLAGS:
+      /* Convert a lisp symbol to a GTK enum */
+      *(GTK_RETLOC_ENUM(*arg)) = lisp_to_flag (obj, arg->type);
+      break;
+    case GTK_TYPE_BOXED:
+      if (NILP (obj))
+       {
+         *(GTK_RETLOC_BOXED(*arg)) = NULL;
+       }
+      else if (GTK_BOXEDP (obj))
+       {
+         *(GTK_RETLOC_BOXED(*arg)) = XGTK_BOXED (obj)->object;
+       }
+      else if (arg->type == GTK_TYPE_STYLE)
+       {
+         obj = Ffind_face (obj);
+         CHECK_FACE (obj);
+         *(GTK_RETLOC_BOXED(*arg)) = face_to_style (obj);
+       }
+      else if (arg->type == GTK_TYPE_GDK_GC)
+       {
+         obj = Ffind_face (obj);
+         CHECK_FACE (obj);
+         *(GTK_RETLOC_BOXED(*arg)) = face_to_gc (obj);
+       }
+      else if (arg->type == GTK_TYPE_GDK_WINDOW)
+       {
+         if (GLYPHP (obj))
+           {
+             Lisp_Object window = Fselected_window (Qnil);
+             Lisp_Object instance = glyph_image_instance (obj, window, ERROR_ME_NOT, 1);
+             struct Lisp_Image_Instance *p = XIMAGE_INSTANCE (instance);
+
+             switch (XIMAGE_INSTANCE_TYPE (instance))
+               {
+               case IMAGE_TEXT:
+               case IMAGE_POINTER:
+               case IMAGE_SUBWINDOW:
+               case IMAGE_NOTHING:
+                 *(GTK_RETLOC_BOXED(*arg)) = NULL;
+                 break;
+
+               case IMAGE_MONO_PIXMAP:
+               case IMAGE_COLOR_PIXMAP:
+                 *(GTK_RETLOC_BOXED(*arg)) = IMAGE_INSTANCE_GTK_PIXMAP (p);
+                 break;
+               }
+           }
+         else if (GTK_OBJECTP (obj) && GTK_IS_WIDGET (XGTK_OBJECT (obj)->object))
+           {
+             *(GTK_RETLOC_BOXED(*arg)) = GTK_WIDGET (XGTK_OBJECT (obj))->window;
+           }
+         else
+           {
+             signal_simple_error ("Don't know how to convert object to GDK_WINDOW", obj);
+           }
+         break;
+       }
+      else if (arg->type == GTK_TYPE_GDK_COLOR)
+       {
+         if (COLOR_SPECIFIERP (obj))
+           {
+             /* If it is a specifier, we just convert it to an
+                 instance, and let the ifs below handle it.
+             */
+             obj = Fspecifier_instance (obj, Qnil, Qnil, Qnil);
+           }
+         
+         if (COLOR_INSTANCEP (obj))
+           {
+             /* Easiest one */
+             *(GTK_RETLOC_BOXED(*arg)) = COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (obj));
+           }
+         else if (STRINGP (obj))
+           {
+             signal_simple_error ("Please use a color specifier or instance, not a string", obj);
+           }
+         else
+           {
+             signal_simple_error ("Don't know hot to convert to GdkColor", obj);
+           }
+       }
+      else if (arg->type == GTK_TYPE_GDK_FONT)
+       {
+         if (SYMBOLP (obj))
+           {
+             /* If it is a symbol, we treat that as a face name */
+             obj = Ffind_face (obj);
+           }
+
+         if (FACEP (obj))
+           {
+             /* If it is a face, we just grab the font specifier, and
+                 cascade down until we finally reach a FONT_INSTANCE
+             */
+             obj = Fget (obj, Qfont, Qnil);
+           }
+
+         if (FONT_SPECIFIERP (obj))
+           {
+             /* If it is a specifier, we just convert it to an
+                 instance, and let the ifs below handle it
+             */
+             obj = Fspecifier_instance (obj, Qnil, Qnil, Qnil);
+           }
+
+         if (FONT_INSTANCEP (obj))
+           {
+             /* Easiest one */
+             *(GTK_RETLOC_BOXED(*arg)) = FONT_INSTANCE_GTK_FONT (XFONT_INSTANCE (obj));
+           }
+         else if (STRINGP (obj))
+           {
+             signal_simple_error ("Please use a font specifier or instance, not a string", obj);
+           }
+         else
+           {
+             signal_simple_error ("Don't know hot to convert to GdkColor", obj);
+           }
+       }
+      else
+       {
+         /* Unknown type to convert to boxed */
+         stderr_out ("Don't know how to convert to boxed!\n");
+         *(GTK_RETLOC_BOXED(*arg)) = NULL;
+       }
+      break;
+
+    case GTK_TYPE_POINTER:
+      if (NILP (obj))
+       *(GTK_RETLOC_POINTER(*arg)) = NULL;
+      else
+       *(GTK_RETLOC_POINTER(*arg)) = LISP_TO_VOID (obj);
+      break;
+
+      /* structured types */
+    case GTK_TYPE_SIGNAL:
+    case GTK_TYPE_ARGS: /* This we can do as a list of values */
+    case GTK_TYPE_C_CALLBACK:
+    case GTK_TYPE_FOREIGN:
+      stderr_out ("Do not know how to convert `%s' from lisp!\n", gtk_type_name (arg->type));
+      return (-1);
+
+#if 0
+      /* #### BILL! */
+      /* This is not used, and does not work with union type */
+    case GTK_TYPE_CALLBACK:
+      {
+       GUI_ID id;
+
+       id = new_gui_id ();
+       obj = Fcons (Qnil, obj); /* Empty data */
+       obj = Fcons (make_int (id), obj);
+
+       gcpro_popup_callbacks (id, obj);
+
+       *(GTK_RETLOC_CALLBACK(*arg)).marshal = __internal_callback_marshal;
+       *(GTK_RETLOC_CALLBACK(*arg)).data = (gpointer) obj;
+       *(GTK_RETLOC_CALLBACK(*arg)).notify = __internal_callback_destroy;
+      }
+      break;
+#endif
+
+      /* base type of the object system */
+    case GTK_TYPE_OBJECT:
+      if (NILP (obj))
+       *(GTK_RETLOC_OBJECT (*arg)) = NULL;
+      else
+       {
+         CHECK_GTK_OBJECT (obj);
+         if (XGTK_OBJECT (obj)->alive_p)
+           *(GTK_RETLOC_OBJECT (*arg)) = XGTK_OBJECT (obj)->object;
+         else
+           signal_simple_error ("Attempting to pass dead object to GTK function", obj);
+       }
+      break;
+
+    default:
+      if (GTK_FUNDAMENTAL_TYPE (arg->type) == GTK_TYPE_ARRAY)
+       {
+         if (NILP (obj))
+           *(GTK_RETLOC_POINTER(*arg)) = NULL;
+         else
+           {
+             xemacs_list_to_array (obj, arg);
+           }
+       }
+      else if (GTK_FUNDAMENTAL_TYPE (arg->type) == GTK_TYPE_LISTOF)
+       {
+         if (NILP (obj))
+           *(GTK_RETLOC_POINTER(*arg)) = NULL;
+         else
+           {
+             xemacs_list_to_gtklist (obj, arg);
+           }
+       }
+      else
+       {
+         stderr_out ("Do not know how to convert `%s' from lisp!\n", gtk_type_name (arg->type));
+         ABORT();
        }
       break;
     }
@@ -1863,7 +2143,7 @@ lisp_to_flag (Lisp_Object obj, GtkType t)
     }
   else
     {
-      /* abort ()? */
+      /* ABORT ()? */
     }
   return (val);
 }
index 9a1a7d9..9fdc974 100644 (file)
@@ -475,6 +475,14 @@ typedef struct {
 # include <sys/exec_elf.h>
 #endif
 
+#if defined(__FreeBSD__) && (defined(__alpha__) || defined(__amd64__))
+# ifdef __STDC__
+#  define ElfW(type)   Elf64_##type
+# else
+#  define ElfW(type)   Elf64_/**/type
+# endif
+#endif
+
 #if __GNU_LIBRARY__ - 0 >= 6
 # include <link.h>     /* get ElfW etc */
 #endif
index 3a6b0b1..8260285 100644 (file)
@@ -511,17 +511,17 @@ read_in_bss (char *filename)
   file = CreateFile (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
@@ -539,13 +539,13 @@ map_in_heap (char *filename)
   file = CreateFile (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 = CreateFileMapping (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, 
@@ -563,17 +563,17 @@ map_in_heap (char *filename)
 
   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);
 }
index 680c7b8..94be607 100644 (file)
@@ -50,6 +50,8 @@ Lisp_Object Qscrollbar_instances;
 #endif
 #endif
 
+extern int allow_deletion_of_last_visible_frame;
+
 EXFUN (Fnext_window, 4);
 
 static int window_pixel_width_to_char_width (struct window *w,
@@ -490,7 +492,7 @@ real_window (struct window_mirror *mir, int no_abort)
   Lisp_Object retval = real_window_internal (mir->frame->root_window,
                                             mir->frame->root_mirror, mir);
   if (NILP (retval) && !no_abort)
-    abort ();
+    ABORT ();
 
   return retval;
 }
@@ -552,7 +554,7 @@ window_display_lines (struct window *w, int which)
     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;
@@ -562,7 +564,7 @@ window_display_lines (struct window *w, int which)
     /* The CMOTION_DISP display lines are global. */
     return cmotion_display_lines;
   else
-    abort ();
+    ABORT ();
 
   return 0;    /* shut up compiler */
 }
@@ -576,7 +578,7 @@ window_display_buffer (struct window *w)
     update_frame_window_mirror (XFRAME (w->frame));
   t = find_window_mirror (w);
   if (!t)
-    abort ();
+    ABORT ();
 
   return t->buffer;
 }
@@ -590,7 +592,7 @@ set_window_display_buffer (struct window *w, struct buffer *b)
     update_frame_window_mirror (XFRAME (w->frame));
   t = find_window_mirror (w);
   if (!t)
-    abort ();
+    ABORT ();
 
   t->buffer = b;
 }
@@ -921,7 +923,7 @@ window_modeline_height (struct window *w)
                modeline_height = (Dynarr_atp (dla, 0)->ascent +
                                   Dynarr_atp (dla, 0)->descent);
              else
-               /* This should be an abort except I'm not yet 100%
+               /* This should be an ABORT except I'm not yet 100%
                    confident that it won't ever get hit (though I
                    haven't been able to trigger it).  It is extremely
                    unlikely to cause any noticeable problem and even if
@@ -1807,7 +1809,7 @@ unshow_buffer (struct window *w)
   Lisp_Object buf = w->buffer;
 
   if (XBUFFER (buf) != 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 */
@@ -2637,14 +2639,14 @@ window_loop (enum window_loop type,
             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
+                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!  */
            }
 
@@ -2731,7 +2733,8 @@ window_loop (enum window_loop type,
                         of its own, kill the frame.  */
                      if (EQ (w, FRAME_ROOT_WINDOW (f))
                          && !NILP (p->dedicated)
-                         && other_visible_frames (f))
+                         && (allow_deletion_of_last_visible_frame
+                             || other_visible_frames (f)))
                        {
                          /* Skip the other windows on this frame.
                             There might be one, the minibuffer!  */
@@ -2794,7 +2797,7 @@ window_loop (enum window_loop type,
                }
 
              default:
-               abort ();
+               ABORT ();
              }
 
          if (EQ (w, last_window))
@@ -2892,7 +2895,7 @@ Any other non-nil value means search all devices.
   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;
@@ -3185,7 +3188,8 @@ Any other non-nil value means search all devices.
          if (!NILP (XWINDOW (window)->dedicated)
              && EQ (window,
                     FRAME_ROOT_WINDOW (XFRAME (frame)))
-             && other_visible_frames (XFRAME (frame)))
+             && (allow_deletion_of_last_visible_frame
+                 || other_visible_frames (XFRAME (frame))))
            {
              delete_frame_internal (XFRAME (frame), 0, 0, 0); /* GC */
            }
@@ -3796,7 +3800,7 @@ returned.
   XFRAME (p->frame)->mirror_dirty = 1;
   /* do this last (after the window is completely initialized and
      the mirror-dirty flag is set) so that specifier recomputation
-     caused as a result of this will work properly and not abort. */
+     caused as a result of this will work properly and not ABORT. */
   Fset_window_buffer (new, o->buffer, Qt);
   return new;
 }
@@ -5726,7 +5730,7 @@ by `current-window-configuration' (which see).
   if (FRAME_LIVE_P (f))
     {
       /* Do this before calling recompute_all_cached_specifiers_in_window()
-        so that things like redisplay_redraw_cursor() won't abort due
+        so that things like redisplay_redraw_cursor() won't ABORT due
         to no window mirror present. */
       f->mirror_dirty = 1;
 
@@ -5794,7 +5798,7 @@ saved_window_index (Lisp_Object window, struct window_config *config, int lim)
       if (EQ (SAVED_WINDOW_N (config, j)->window, window))
        return j;
     }
-  abort ();
+  ABORT ();
   return 0;    /* suppress compiler warning */
 }
 
index 5abca29..101e4fc 100644 (file)
@@ -158,8 +158,8 @@ gc_cache_lookup (struct gc_cache *cache, XGCValues *gcv, unsigned long mask)
   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 ();
 
   gcvm.mask = mask;
   gcvm.gcv = *gcv;     /* this copies... */
@@ -206,10 +206,10 @@ gc_cache_lookup (struct gc_cache *cache, XGCValues *gcv, unsigned long mask)
       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;
     }
 
@@ -231,7 +231,7 @@ gc_cache_lookup (struct gc_cache *cache, XGCValues *gcv, unsigned long mask)
 #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). */
index fcf1415..dbaa581 100644 (file)
@@ -1,3 +1,55 @@
+2005-02-06  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.17 is released
+
+2005-02-01  Vin Shelton  <acs@xemacs.org>
+
+       * automated/regexp-tests.el: Added an additional shy groups test
+       authored by Arnaud Giersch <arnaud.giersch@free.fr>
+
+2005-01-14  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * automated/mule-tests.el (file-system character conversion):
+       Improve Mac OS X compatibility.
+
+2005-01-13  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * automated/regexp-tests.el:
+       Test trivial subpatterns and backreferences with shy groups.
+
+2004-12-05  Vin Shelton <acs@xemacs.org>
+
+       * XEmacs 21.4.16 is released
+
+2004-10-28  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * automated/os-tests.el: New file.  Add tests for bug reported by
+       Katsumi Yamaoka 2004-10-26 <b9yvfcyuscf.fsf@jpl.org>.  Test
+       suggested by Katsumi Yamaoka <b9yoeipvwn0.fsf@jpl.org>.
+
+2004-10-07  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * automated/regexp-tests.el: Add tests for bug identified by
+       Steve Youngs 2004-09-30 <microsoft-free.87ekkjhj7t.fsf@youngs.au.com>
+
+2004-09-08  Stephen J. Turnbull  <stephen@xemacs.org>
+
+       * automated/regexp-tests.el: Add tests for bug identified by
+       Katsumi Yamaoka 2004-09-03 <b9ywtzbbpue.fsf_-_@jpl.org>.
+
+2004-05-11  Vin Shelton  <acs@xemacs.org>
+
+       * automated/tag-test.el: Use a temp directory to avoid conflicts
+       with extra TAGS files.
+
+2004-05-08  Vin Shelton  <acs@xemacs.org>
+
+       * automated/tag-test.el: Created.
+
+2004-04-19  Stephen J. Turnbull  <turnbull@sk.tsukuba.ac.jp>
+
+       * automated/mule-tests.el: Inhibit GC to speed up BIG_STRING tests.
+
 2004-02-02  Vin Shelton <acs@xemacs.org>
 
        * XEmacs 21.4.15 is released
index 4d962b3..c3eaffb 100644 (file)
@@ -233,7 +233,7 @@ the Assert macro checks for correctness."
   ;; Test strings waxing and waning across the 8k BIG_STRING limit (see alloc.c)
   ;;---------------------------------------------------------------
   (defun charset-char-string (charset)
-    (let (lo hi string n)
+    (let (lo hi string n (gc-cons-threshold most-positive-fixnum))
       (if (= (charset-chars charset) 94)
          (setq lo 33 hi 126)
        (setq lo 32 hi 127))
@@ -245,6 +245,7 @@ the Assert macro checks for correctness."
              (progn
                (aset string n (make-char charset j))
                (incf n)))
+           (garbage-collect)
            string)
        (progn
          (setq string (make-string (* (1+ (- hi lo)) (1+ (- hi lo))) ??))
@@ -254,6 +255,7 @@ the Assert macro checks for correctness."
              (progn
                (aset string n (make-char charset j k))
                (incf n))))
+         (garbage-collect)
          string))))
 
   ;; The following two used to crash xemacs!
@@ -302,6 +304,12 @@ the Assert macro checks for correctness."
     ;; This is how you suppress output from `message', called by `write-region'
     (flet ((append-message (&rest args) ()))
       (Assert (not (equal name1 name2)))
+      ;; Kludge to handle Mac OS X which groks only UTF-8.
+      (cond ((eq system-type 'darwin)
+            (Check-Error-Message 'file-error "Opening output file"
+             (write-region (point-min) (point-max) name1))
+            (require 'un-define)
+            (setq file-name-coding-system 'utf-8)))
       (Assert (not (file-exists-p name1)))
       (write-region (point-min) (point-max) name1)
       (Assert (file-exists-p name1))
diff --git a/tests/automated/os-tests.el b/tests/automated/os-tests.el
new file mode 100644 (file)
index 0000000..2669bd2
--- /dev/null
@@ -0,0 +1,91 @@
+;;; os-tests.el --- test support for OS interaction
+
+;; Copyright (C) 2004 Free Software Foundation
+
+;; Author: Stephen J. Turnbull <stephen@xemacs.org>
+;; Maintainer: Stephen J. Turnbull <stephen@xemacs.org>
+;; Created: 2004 October 28
+;; Keywords: tests, process support
+
+;; This file is part of XEmacs.
+
+;; XEmacs is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; XEmacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs; see the file COPYING.  If not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+;; 02111-1307, USA.
+
+;;; Synched up with: Not in FSF.
+
+;;; Commentary:
+
+;; Test OS support.  Processes, environment variables, etc.
+;; See test-harness.el for instructions on how to run these tests.
+
+;; call-process-region bug reported by Katsumi Yamaoka on 2004-10-26
+;; in <b9yvfcyuscf.fsf@jpl.org>, who suggested the basic test scheme
+;; in <b9yoeipvwn0.fsf@jpl.org>.
+
+;; tac works by lines, unfortunately
+(let* ((original-string "a\nb\nc\nd\n")
+       (tac-cases (if (executable-find "tac")
+                     '((1 . "c\nb\na\nd\n")
+                       (3 . "a\nc\nb\nd\n")
+                       (5 . "a\nc\nb\nd\n")
+                       (7 . "a\nc\nb\nd\n")
+                       (9 . "a\nd\nc\nb\n"))
+                   nil))
+       (cat-cases (if (executable-find "cat")
+                     '((1 . "b\nc\na\nd\n")
+                       (3 . "a\nb\nc\nd\n")
+                       (5 . "a\nb\nc\nd\n")
+                       (7 . "a\nb\nc\nd\n")
+                       (9 . "a\nd\nb\nc\n"))
+                   nil))
+       cases case)
+  (with-temp-buffer
+    (Skip-Test-Unless tac-cases
+        "tac executable not found"
+        "Tests of call-process-region with region deleted after inserting
+tac process output."
+      (setq cases tac-cases)
+      (while cases
+        (setq case (car cases)
+             cases (cdr cases))
+       (flet ((do-test (pos result)
+                (erase-buffer)
+                (insert original-string)
+                (goto-char pos)
+                (call-process-region 3 7 "tac" t t)
+                (goto-char (point-min))
+                (Assert (looking-at result))))
+         (do-test (car case) (cdr case)))))
+    ;; if you're in that much of a hurry you can blow cat off
+    ;; if you've done tac, but I'm not going to bother
+    (Skip-Test-Unless cat-cases
+        "cat executable not found"
+        "Tests of call-process-region with region deleted after inserting
+cat process output."
+      (setq cases cat-cases)
+      (while cases
+        (setq case (car cases)
+             cases (cdr cases))
+       (flet ((do-test (pos result)
+                (erase-buffer)
+                (insert original-string)
+                (goto-char pos)
+                (call-process-region 3 7 "cat" t t)
+                (goto-char (point-min))
+                (Assert (looking-at result))))
+         (do-test (car case) (cdr case)))))))
+
+;;; end of os-tests.el
index fde7991..816868f 100644 (file)
@@ -385,3 +385,67 @@ baaaa
                          (string-match "b" a)
                          (match-string 1 a))
                   a)))
+
+;; bug identified by Katsumi Yamaoka 2004-09-03 <b9ywtzbbpue.fsf_-_@jpl.org>
+;; fix submitted by sjt 2004-09-08
+;; trailing comments are values from buggy 21.4.15
+(let ((text "abc"))
+  (Assert (eq 0 (string-match "\\(?:ab+\\)*c" text)))  ; 2
+  (Assert (eq 0 (string-match "^\\(?:ab+\\)*c" text))) ; nil
+  (Assert (eq 0 (string-match "^\\(?:ab+\\)*" text)))  ; 0
+  (Assert (eq 0 (string-match "^\\(?:ab+\\)c" text)))  ; 0
+  (Assert (eq 0 (string-match "^\\(?:ab\\)*c" text)))  ; 0
+  (Assert (eq 0 (string-match "^\\(?:a+\\)*b" text)))  ; nil
+  (Assert (eq 0 (string-match "^\\(?:a\\)*b" text)))   ; 0
+)
+
+;; per Steve Youngs 2004-09-30 <microsoft-free.87ekkjhj7t.fsf@youngs.au.com>
+;; fix submitted by sjt 2004-10-07
+;; trailing comments are values from buggy 21.4.pre16
+(let ((text "abc"))
+  (Assert (eq 0 (string-match "\\(?:a\\(b\\)\\)" text)))       ; 0
+  (Assert (string= (match-string 1 text) "b"))                 ; ab
+  (Assert (null (match-string 2 text)))                                ; b
+  (Assert (null (match-string 3 text)))                                ; nil
+  (Assert (eq 0 (string-match "\\(?:a\\(?:b\\(c\\)\\)\\)" text)))      ; 0
+  (Assert (string= (match-string 1 text) "c"))                 ; abc
+  (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)))
+
+  ;; Test Arnaud Giersch's shy group fix
+  (Assert (progn (string-match "\\(a\\)" "a")  
+                (string-match "\\(?:a\\)" "a")  
+                (not (match-beginning 1))))
+)
+
diff --git a/tests/automated/tag-tests.el b/tests/automated/tag-tests.el
new file mode 100644 (file)
index 0000000..89e5ad6
--- /dev/null
@@ -0,0 +1,91 @@
+;; Copyright (C) 2004 Vin Shelton
+
+;; Author: Vin Shelton <acs@xemacs.org>
+;; Maintainer: Vin Shelton <acs@xemacs.org>
+;; Created: 2004
+;; Keywords: tests
+
+;; This file is part of XEmacs.
+
+;; XEmacs is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; XEmacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs; see the file COPYING.  If not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+;; 02111-1307, USA.
+
+;;; Synched up with: Not in FSF.
+
+;;; Commentary:
+
+;; Test tag support.
+;; See test-harness.el for instructions on how to run these tests.
+
+(let ((testfile "tag-test.c")
+      (tagfile "TAGS")
+      (tags-build-completion-table nil))
+
+  (cd (temp-directory))
+
+  ;; Create a TAGS file
+  (with-temp-file tagfile
+    (insert
+"\f
+tag-test.c,99
+struct mystruct \7fmystruct\ 12,1
+struct mystruct *foo\(\7f4,23
+DEFUN \(\"require\", Frequire,\7frequire,\ 17,51
+"))
+
+  ;; Create the test file
+  (with-temp-file testfile
+    (insert
+"
+struct mystruct { };
+
+struct mystruct *foo\(\) {
+}
+
+DEFUN \(\"require\", Frequire, 1, 2, 0, /*
+If feature FEATURE is not loaded, load it from FILENAME.
+If FEATURE is not a member of the list `features', then the feature
+is not loaded; so load the file FILENAME.
+If FILENAME is omitted, the printname of FEATURE is used as the file name.
+*/
+       \(feature, filename\)\)
+{
+}
+"))
+
+  (let ((tags-always-exact t))
+
+    ;; Search for the tag "mystruct"; this should succeed
+    (find-tag "mystruct")
+    (Assert (eq (point) 2))
+
+    ;; Search again.  The search should fail, based on the patch that
+    ;; Sven Grundmann submitted for 21.4.16.
+    (Check-Error-Message error "No more entries matching mystruct"
+                        (tags-loop-continue)))
+
+  (let ((tags-always-exact nil))
+
+    ;; Search for the definition of "require". Until the etags.el upgrade
+    ;; from 21.5 in 21.4.16, this test would fail.
+    (condition-case nil
+       (find-tag "require")
+      (t t))
+    (Assert (eq (point) 52)))
+
+  (kill-buffer testfile)
+  (delete-file testfile)
+  (kill-buffer tagfile)
+  (delete-file tagfile))
index 03a4ee2..6833ad4 100644 (file)
@@ -2,8 +2,8 @@
 emacs_is_beta=
 emacs_major_version=21
 emacs_minor_version=4
-emacs_beta_version=15
-xemacs_codename="Security Through Obscurity"
+emacs_beta_version=17
+xemacs_codename="Jumbo Shrimp"
 emacs_kit_version=
 infodock_major_version=4
 infodock_minor_version=0