Update PUI to use ffi-curl
authorSteve Youngs <steve@sxemacs.org>
Sat, 21 May 2016 03:04:36 +0000 (13:04 +1000)
committerSteve Youngs <steve@sxemacs.org>
Sat, 21 May 2016 03:04:36 +0000 (13:04 +1000)
* pui:
  Update PUI to use #'curl:download when available.

170 files changed:
ChangeLog.d/ChangeLog-22.1.16 [new file with mode: 0644]
INSTALL
Makefile.am
PROBLEMS
autogen.sh
configure.ac
contrib/git-for-steve.sh
etc/NEWS
info/Makefile.am
info/lispref/abbrevs.texi
info/lispref/annotations.texi
info/lispref/backups.texi
info/lispref/buffers.texi
info/lispref/building.texi
info/lispref/commands.texi
info/lispref/compile.texi
info/lispref/consoles-devices.texi
info/lispref/control.texi
info/lispref/databases.texi
info/lispref/debugging.texi
info/lispref/dialog.texi
info/lispref/display.texi
info/lispref/ent.texi
info/lispref/eval.texi
info/lispref/extents.texi
info/lispref/faces.texi
info/lispref/files.texi
info/lispref/frames.texi
info/lispref/functions.texi
info/lispref/glyphs.texi
info/lispref/gutter.texi
info/lispref/hash-tables.texi
info/lispref/help.texi
info/lispref/internationalization.texi
info/lispref/intro.texi
info/lispref/keymaps.texi
info/lispref/ldap.texi
info/lispref/lispref.texi
info/lispref/lists.texi
info/lispref/loading.texi
info/lispref/macros.texi
info/lispref/markers.texi
info/lispref/menus.texi
info/lispref/minibuf.texi
info/lispref/modes.texi
info/lispref/mule.texi
info/lispref/numbers.texi
info/lispref/objects.texi
info/lispref/openssl.texi
info/lispref/os.texi
info/lispref/packaging.texi
info/lispref/positions.texi
info/lispref/postgresql.texi
info/lispref/processes.texi
info/lispref/range-tables.texi
info/lispref/scrollbars.texi
info/lispref/searching.texi
info/lispref/sequences.texi
info/lispref/specifiers.texi
info/lispref/streams.texi
info/lispref/strings.texi
info/lispref/symbols.texi
info/lispref/syntax.texi
info/lispref/text.texi
info/lispref/tips.texi
info/lispref/toolbar.texi
info/lispref/variables.texi
info/lispref/windows.texi
info/lispref/x-windows.texi
info/sppm.texi
info/sxemacs-faq.texi
info/sxemacs/custom.texi
info/sxemacs/menus.texi
info/sxemacs/programs.texi
info/sxemacs/sxemacs.texi
lib-src/movemail.c
lisp/Makefile.am
lisp/about.el
lisp/autoload.el
lisp/build-autoloads.el
lisp/const-aliases.el [new file with mode: 0644]
lisp/ffi/ffi-curl.el
lisp/ffi/ffi-sqlite.el
lisp/files.el
lisp/package-get.el
lisp/packages.el
lisp/startup.el
lisp/subr.el
m4/sxe-bldchain-progs.m4
m4/sxe-compress.m4
m4/sxe-crypto.m4
m4/sxe-emodffi.m4
m4/sxe-fs-funs.m4
m4/sxe-mm.m4
m4/sxe-pkgconfig.m4
m4/sxe-srctree.m4
m4/sxe-summary.m4
modules/Makefile.am
modules/ase/ase-neighbourhood.c
modules/ase/ase-neighbourhood.h
modules/cl/cl-loop-parser.y
modules/cl/cl-loop.c
modules/cl/cl.c
src/alloc.c
src/buffer.c
src/bytecode.c
src/cmdloop.c
src/dired.c
src/dumper.c
src/effi.c
src/emacs.c
src/ent/ent-int.h
src/ent/ent-mpfr.c
src/ent/ent-mpfr.h
src/ent/floatfns.c
src/events/event-stream.c
src/fileio.c
src/lisp.h
src/lstream.c
src/lstream.h
src/media/media-ffmpeg.c
src/media/media-ffmpeg.h
src/media/media-internal.c
src/media/media-mad.c
src/media/media-sndfile.c
src/media/media.c
src/media/media.h
src/media/sound-alsa.c
src/media/sound-ao.c
src/media/sound-jack.c
src/media/sound-oss.c
src/mule/file-coding.c
src/mule/mule-ccl.c
src/opaque.c
src/opaque.h
src/openssl.c
src/openssl.h
src/print.c
src/realpath.c
src/regex.c
src/search.c
src/specifier.h
src/sxe-memory.h [new file with mode: 0644]
src/sxe-utils.h
src/sxemacs.h
src/symbols.c
src/syntax.c
src/sysdep.c
src/sysdep.h
src/ui/TTY/redisplay-tty.c
src/ui/TTY/termcap.c
src/ui/TTY/terminfo.c
src/ui/X11/device-x.c
src/ui/X11/dialog-x.c
src/ui/X11/event-Xt.c
src/ui/X11/glyphs-x.c
src/ui/X11/gui-x.c
src/ui/X11/objects-x.c
src/ui/glyphs-eimage.c
src/ui/lwlib/lwlib-Xlw.c
src/ui/lwlib/lwlib-internal.h
src/ui/lwlib/lwlib.c
src/ui/lwlib/xlwcheckbox.c
src/ui/lwlib/xlwgauge.c
src/ui/lwlib/xlwmenu.c
src/ui/lwlib/xlwtabs.c
src/ui/specifier.c
tests/Makefile.am
tests/automated/lisp-tests.el
tests/automated/openssl-tests.el

diff --git a/ChangeLog.d/ChangeLog-22.1.16 b/ChangeLog.d/ChangeLog-22.1.16
new file mode 100644 (file)
index 0000000..ec21e94
--- /dev/null
@@ -0,0 +1,4992 @@
+commit 8c1f10db4fcec820afc234f1630878f14f4d9d91
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri May 6 18:30:51 2016 +1000
+
+    SXEmacs v22.1.16 is released!
+    
+    What can I say, I got tired of waiting and just, well, released.
+    
+       * info/sxemacs/sxemacs.texi (Top): Update version.
+    
+       * info/sppm.texi: Update versioning macros.
+    
+       * autogen.sh (EXPECTED_TREE_VERSION): 22.1.16
+       (sxemacs_codename): "Hillman Hunter"
+    
+       * etc/NEWS: Add the news for v22.1.16
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ autogen.sh                |  4 +--
+ etc/NEWS                  | 68 +++++++++++++++++++++++++++++++++++++++++++++++
+ info/sppm.texi            |  6 ++---
+ info/sxemacs/sxemacs.texi |  2 +-
+ 4 files changed, 74 insertions(+), 6 deletions(-)
+
+commit cf7aad99bd531e127bedd06cdf11bd43756a2c1a
+Merge: 5a1f1d8 f44c1b5
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Mar 15 10:41:53 2016 +1000
+
+    Fix the fix to really close 181
+    
+    * merges:
+      Fix MPFR Flog implementation
+
+commit f44c1b5697e1bb9a20437099a28c843b90af8d15
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Mon Mar 14 19:05:46 2016 -0400
+
+    Fix MPFR Flog implementation
+    
+       * src/ent/floatfns.c (Flog10): Use RETURN_WHEN_INDEF to check
+       before dividing by log 10.
+       (Flog2): Use RETURN_WHEN_INDEF to check before dividing by log 2.
+       (Flog): Properly add parameters to Flog.  Use
+       the common RETURN_WHEN_INDEF when Flog return indefinite.
+       Plus some whitespace fixes.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ent/floatfns.c | 109 ++++++++++++++++++++++++++---------------------------
+ 1 file changed, 54 insertions(+), 55 deletions(-)
+
+commit 5a1f1d89c541ad0189f0a878f43fe4c2badad0ac
+Merge: 68ee3b0 74a0382
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Mar 14 17:58:53 2016 +1000
+
+    Close 181
+    
+    * merges:
+      Fix bug 181: log does not take base into account without mpfr
+
+commit 74a038200aac89b5c4b2591600da306ed8f749b0
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Mar 12 12:33:46 2016 -0500
+
+    Fix bug 181: log does not take base into account without mpfr
+    
+       * src/ent/floatfns.c (RETURN_WHEN_INDEF): New macro for the common
+       handling of indefinites in logarithmic functions.
+       (Flog10): Always define, but throw invalid operation if no
+       logarithmic primitive is available.
+       (Flog2): Ditto.
+       (Flog): Try to use Flog10 or Flog2 if the bases match.  In case of
+       float operation try to use Flog2 since it is usually more
+       efficient.
+    
+       * configure.ac: Check for availability of all the logarithmic
+       functions.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac       |   2 +-
+ src/ent/floatfns.c | 195 ++++++++++++++++++++++++++++++-----------------------
+ 2 files changed, 111 insertions(+), 86 deletions(-)
+
+commit 68ee3b0ca3ed9c74d0a7455c6c65422458845926
+Merge: ddf559a d6cb8fa
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jan 17 09:16:54 2016 +1000
+
+    Error instead of crashing on OGG/MP3 streams
+    
+    * merges:
+      Debug message fix
+      Fix crash when using ffmpeg to play mp3 and ogg
+
+commit d6cb8fad24fdb64c5c6b7f1b0cfa09853b93c973
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jan 16 17:18:36 2016 -0500
+
+    Debug message fix
+    
+       * src/media/media.c (sxe_msf_DBL_down): Minor fix on debug
+       message, it is DBL not FLT.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 55a8171804431552de01a8e98c585c276e32c054
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jan 16 17:14:03 2016 -0500
+
+    Fix crash when using ffmpeg to play mp3 and ogg
+    
+       * src/media/media-ffmpeg.c (media_ffmpeg_analyse_audio): Refactor
+       detection of sample size using av_get_bytes_per_sample. Error when
+       format is not supported instead of silently go ahead and possibly
+       crash later.
+    
+       * src/media/media.c (sxe_msf_DBL_up): Implement conversion to
+       internal format from double.
+       (sxe_msf_DBL_down): Implement from internal format to double.
+    
+       * src/media/media.h: Declare double encoded samples.
+    
+       * m4/sxe-mm.m4 (SXE_CHECK_FFMPEG_LIBS): Detect
+       av_get_bytes_per_sample and av_get_sample_fmt_string.
+       (SXE_MM_CHECK_FFMPEG): Enforce presenc of av_get_bytes_per_sample
+       and av_get_sample_fmt_string.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-mm.m4             |  4 ++++
+ src/media/media-ffmpeg.c | 40 ++++++++++++++++++++++++----------------
+ src/media/media.c        | 41 +++++++++++++++++++++++++++++++++++++++++
+ src/media/media.h        |  1 +
+ 4 files changed, 70 insertions(+), 16 deletions(-)
+
+commit ddf559af39db00c49ae1adcc85996cf0e78ae2af
+Merge: 910698c 6502bd0
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jan 10 16:57:31 2016 +1000
+
+    Ffile_basename(), Ffile_dirname() updates, POSIX compliance
+    
+    * merges:
+      Properly determine the name of preceeding directory
+      Expand file name before dirname
+      Use xrealpath
+      Make basename and dirname POSIX compliant
+      Add tests for file-name-directory, etc
+      Add file name joiner
+      Improve documentation
+
+commit 6502bd0abcb90289b58fb1b21ad5a912f15acfd9
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jan 9 17:54:36 2016 -0500
+
+    Properly determine the name of preceeding directory
+    
+       * lisp/build-autoloads.el (find-emod-directories): Use basename of
+       dirname to determine name of preceeding directory.  Now that
+       basename and dirname are POSIX compliant this works and is much
+       more bullet proof than the split of dirname by /.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/build-autoloads.el | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8c1dd60e3a0279869dae0b4a79f6347344fc060d
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jan 9 17:52:44 2016 -0500
+
+    Expand file name before dirname
+    
+       * lisp/packages.el (package-suppress): Expand file name before
+       call to file-dirname
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/packages.el | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 6201a9ee8b2970903de1f53c0294c5be504a9961
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jan 9 17:51:27 2016 -0500
+
+    Use xrealpath
+    
+       * src/dired.c (dired_realpath): Use xrealpath for safety
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/dired.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 673e629352845d8aded6fe98cc368ad738b0d53d
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jan 9 17:49:05 2016 -0500
+
+    Make basename and dirname POSIX compliant
+    
+       * src/fileio.c (Ffile_basename): Improve documentation and make
+       POSIX compliant by returning full string when there is no slashes.
+    
+       * src/fileio.c (Ffile_dirname): Improve documentation and make
+       POSIX compliant by using xdirname.
+
+ src/fileio.c | 85 +++++++++++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 56 insertions(+), 29 deletions(-)
+
+commit fd17e50cb86d263fe8aaffffb931726c697731dd
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jan 9 15:18:26 2016 -0500
+
+    Add tests for file-name-directory, etc
+    
+       * tests/automated/lisp-tests.el: Add tests for
+       file-name-directory, file-name-nondirectory, file-dirname,
+       file-basename, file-name-join.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ tests/automated/lisp-tests.el | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
+
+commit 67b63594e02e901e28f0730259297acc629dcbe0
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jan 9 15:16:59 2016 -0500
+
+    Add file name joiner
+    
+       * lisp/files.el (file-name-join): Add file-name-join to safely
+       join directory and filename components.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/files.el | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+commit fbcdf082dfcbcfcf368088b4e5e990488cffc940
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jan 3 17:19:34 2016 -0500
+
+    Improve documentation
+    
+       * src/fileio.c (Ffile_name_directory): Add samples to
+       documentation, so it is clearer what the outcome would be.
+       (Ffile_name_nondirectory): Ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/fileio.c | 34 ++++++++++++++++++++++++++++++++++
+ 1 file changed, 34 insertions(+)
+
+commit 910698ce395ac200b44238477e5278918dcf9782
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jan 3 16:02:01 2016 -0500
+
+    Document text corruption issue with Xorg ATI driver
+    
+       * PROBLEMS: Document text corruption issue with Xorg ATI driver
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ PROBLEMS | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+commit 0e87679e6dc85cdadb5bd3dd0e6e273a2646c150
+Merge: 281b409 32e915e
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Jan 1 10:19:46 2016 +1000
+
+    Ladies and Gentlement, FFmpeg is back!
+    
+    * merges:
+      Final set of changes for a working ffmpeg.
+      More update to newer ffmpeg API
+      Use new virtual IO api
+      Cleanup global video state.
+      Additional usage of the new api
+      Update ffmpeg codec and media constants
+      Fix metadata usage
+      Sync up FFmpeg -- autoconf
+
+commit 32e915e5dc4fea21550f0f97a3d526229182f374
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Thu Dec 31 14:39:54 2015 -0500
+
+    Final set of changes for a working ffmpeg.
+    
+       There are a couple of edges to polish but "works for me" now.
+    
+       * src/media/media-ffmpeg.c (media_ffmpeg_read): Use
+       avcodec_decode_audio3 if available. More work is needed to use
+       avcodec_decod_audio4 because it uses frames which would need to
+       then be copied to the output buffer.
+       (my_get_buffer): Use avcodec_default_get_buffer2.
+       (my_release_buffer): No longer needed.
+       (stream_component_open): Properly set the thread count and use
+       avcodec_open2. Set get_buffer2 to my_get_buffer since we
+       are using the new interface.
+       (media_ffmpeg_available_formats): Use av_iformat_next.
+       (stream_open): Defer setting codec options to a later better
+       understanding of ffmpeg (keep #if 0 the old).
+       (new_media_ffmpeg_open): Use only the most recent AVIOContext access
+       method to set eof_reached. If we get issues reported we'll
+       revisit.
+       (new_media_ffmpeg_read): Use avio_eof and the most error field of
+       AVIOContext instead of furl_feof.  Do not unset the interrupt
+       callback for now.  We may need to revisit the reset of the
+       callback later.
+    
+       * m4/sxe-mm.m4 (SXE_CHECK_FFMPEG_LIBS): Properly check for the
+       avcodec_decode_audio* and define corresponding
+       HAVE_AVCODEC_AUDIO*.  Also check for av_iformat_next.
+       (SXE_MM_CHECK_FFMPEG): Check at least one avcodec_decode_audio is
+       available and av_iformat_next.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-mm.m4             | 25 ++++++++++++++++-
+ src/media/media-ffmpeg.c | 72 +++++++++++++++++++-----------------------------
+ 2 files changed, 53 insertions(+), 44 deletions(-)
+
+commit c30ddaeba57c7cb8d3ae7c470b80733b1f68b448
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Thu Dec 31 14:15:14 2015 -0500
+
+    More update to newer ffmpeg API
+    
+       * src/media/media-ffmpeg.h: Add include of avutil/time.h
+    
+       * src/media/media-ffmpeg.c (AVCODEC_MAX_AUDIO_FRAME_SIZE): Add
+       define if missing to last known legacy value.
+       (media_ffmpeg_open): Properly use avcodec_open2
+       (media_ffmpeg_read): Fix warnings.
+    
+       * m4/sxe-mm.m4 (SXE_CHECK_FFMPEG_HEADERS): Check also avutil/time.h.
+       (SXE_CHECK_FFMPEG_LIBS): Check for avformat_free_context and avio_feof.
+       (SXE_MM_CHECK_FFMPEG): Refactor header check for ease of adding
+       additional ones.  Verify avformat_free_context and avio_feof are
+       available.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-mm.m4             | 52 ++++++++++++++++++++++++++++++++++++------------
+ src/media/media-ffmpeg.c | 11 ++++++++--
+ src/media/media-ffmpeg.h |  6 ++++++
+ 3 files changed, 54 insertions(+), 15 deletions(-)
+
+commit b1c8382d301218200f40e9ed7529ed0da098e398
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Thu Dec 31 11:58:19 2015 -0500
+
+    Use new virtual IO api
+    
+       * src/media/media-ffmpeg.c: Remove the no-longer used
+       media_ffmpeg_vio_open, media_ffmpeg_vio_close,
+       media_ffmpeg_vio_write.
+       (media_ffmpeg_vio_read): Use the new opaque pointer interface of
+       AVIOContext, which points to our media_data struct directly.
+       (media_ffmpeg_vio_seek): Ditto.
+       (media_ffmpeg_open_data): Use the new AVIOContext and allocate one
+       pointing to media_ffmpeg_vio_read, media_ffmpeg_vio_seek and with
+       opaque data as our media_data.  Use the context to open the input.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media-ffmpeg.c | 147 ++++++++++++++++-------------------------------
+ 1 file changed, 49 insertions(+), 98 deletions(-)
+
+commit c3994e1fd3538431675c60a8ce53528062ee0911
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Thu Dec 31 11:39:44 2015 -0500
+
+    Cleanup global video state.
+    
+       * src/media/media-ffmpeg.c: Remove global video state since it is
+       not used, except to set to NULL.
+        (new_media_ffmpeg_read): No need to reset global_video_state, as it is not used.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media-ffmpeg.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit 746ff6507e46a840ccfb2373e81b4a5be3021947
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Thu Dec 31 11:37:06 2015 -0500
+
+    Additional usage of the new api
+    
+       * src/media/media-ffmpeg.c (media_ffmpeg_open_file): Use
+       avformat_open_input and avformat_find_stream_info,
+       avformat_close_input.
+       (stream_open): Use avformat_open_input.
+       (media_ffmpeg_close): Use avformat_close_input.
+       (media_ffmpeg_open): Use avio_size, avformat_find_stream_info,
+       av_dump_format and avoid warning.
+       (new_media_ffmpeg_read): Use avformat_close_input.
+    
+       * src/media/media-ffmpeg.h: Include avcodec.h
+    
+       * m4/sxe-mm.m4 (SXE_MM_CHECK_FFMPEG): Verify availability of all
+       the included ffmpeg headers. And additional functions,
+       avio_alloc_context, avio_size, av_dump_format.
+       (SXE_CHECK_FFMPEG_HEADERS): Check also for avcodec.h
+       (SXE_CHECK_FFMPEG_LIBS): Check for av_dump_format,
+       avio_alloc_context, avio_size.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-mm.m4             | 22 +++++++++++++++++++---
+ src/media/media-ffmpeg.c | 35 +++++++++++++----------------------
+ src/media/media-ffmpeg.h |  8 ++++++++
+ 3 files changed, 40 insertions(+), 25 deletions(-)
+
+commit 168dcabde2e534b7561492b4a3c2f028c76b6005
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 27 17:44:04 2015 -0500
+
+    Update ffmpeg codec and media constants
+    
+       * src/media/media-ffmpeg.c (media_ffmpeg_analyse_audio): Use
+       AV_SAMPLE_* instead of SAMPLE_*.
+       (media_ffmpeg_open): Use AVMEDIA_TYPE_* instead of CODEC_TYPE_*.
+       (stream_component_open): Ditto.
+       (stream_component_close): Ditto.
+       (new_media_ffmpeg_open): Ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media-ffmpeg.c | 46 +++++++++++++++++++++++-----------------------
+ 1 file changed, 23 insertions(+), 23 deletions(-)
+
+commit cd6a53c341ec2a70c48073d53be60396de0a14cf
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 27 17:33:42 2015 -0500
+
+    Fix metadata usage
+    
+       * src/media/media-ffmpeg.h: Add include for dict.h
+    
+       * src/media/media-ffmpeg.c (media_ffmpeg_streaminfo): Use
+       AVDictionary.
+       (dump_stream_info): Ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media-ffmpeg.c | 112 +++++++++++++++++++++++++++++------------------
+ src/media/media-ffmpeg.h |   7 +++
+ 2 files changed, 77 insertions(+), 42 deletions(-)
+
+commit ebc75b9137ffe75cd6b7fa481eaf850593161b3a
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Jul 3 00:05:57 2012 +1000
+
+    Sync up FFmpeg -- autoconf
+    
+    This changeset is the first in a series to sync up our FFmpeg code with a
+    much more modern and up to date FFmpeg.  This one takes care of the
+    autoconf side of things.  It is cherry-picked from an earlier ffmpeg-fix
+    branch, squashing all the configuration related changes.
+    
+    This changeset also introduces new minimum versions of libavformat and
+    libavcodec required by SXEmacs:
+    
+      libavformat -- 55.12.100
+      libavcodec  -- 55.18.102
+    
+       * configure.ac: Need libs for avcodec as well as avformat. Add
+              in libavutil libs.
+    
+       * m4/sxe-mm.m4 (SXE_MM_CHECK_FFMPEG): Rework it for modern
+       ffmpeg. Check for av_dict_get() in libavutil.
+    
+       * m4/sxe-mm.m4 (SXE_CHECK_FFMPEG_HEADERS): Check for avcodec.h
+       and dict.h as well.
+    
+       * m4/sxe-mm.m4 (SXE_CHECK_FFMPEG_LIBS): Check for libavutil.
+    
+       * m4/sxe-mm.m4 (SXE_MM_CHECK_FFMPEG):
+
+ configure.ac |   4 +-
+ m4/sxe-mm.m4 | 164 ++++++++++-------------------------------------------------
+ 2 files changed, 30 insertions(+), 138 deletions(-)
+
+commit 281b40928f88db782e9e67ca3d4dede7de1536b8
+Merge: 528ced5 c263f68
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Dec 26 12:12:26 2015 +1000
+
+    A place to keep aliases to built-in constants when needed
+    
+    * merges:
+      Add logged, but missing change from previous commit.
+      Segregate aliases to DEFVAR_CONST
+      Revert "Fix the fix, make pi a normal lisp var (Closes bug #176)"
+
+commit c263f680269e8f4efe8999785fdf8786b072b788
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Dec 26 12:04:53 2015 +1000
+
+    Add logged, but missing change from previous commit.
+    
+       * lisp/Makefile.am (corelispels): Add const-aliases.el.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/Makefile.am | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+commit 7ffe58c3287caeb19c08ea91c7a2076a1a0f98e5
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Fri Dec 25 16:40:24 2015 -0500
+
+    Segregate aliases to DEFVAR_CONST
+    
+       * lisp/float-sup.el: Remove alias for pi and e when bigfr is
+       available. These should now be defined in const-aliases, loaded
+       by startup.
+    
+       * lisp/const-aliases.el (pi): Define const as bigfr-pi when bigfr
+       is available.
+       (e): Define as euler when bigfr is available.
+    
+       * lisp/Makefile.am (corelispels): Add const-aliases.el to list of
+       files.
+    
+       * lisp/startup.el (load-init-file): Require new const-aliases to
+       load the consts that cannot be dumped.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/const-aliases.el | 40 ++++++++++++++++++++++++++++++++++++++++
+ lisp/float-sup.el     |  5 +----
+ lisp/startup.el       |  3 +++
+ 3 files changed, 44 insertions(+), 4 deletions(-)
+
+commit d7ffc361167a55f4f608f69f4597072c361daf75
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Fri Dec 25 16:34:17 2015 -0500
+
+    Revert "Fix the fix, make pi a normal lisp var (Closes bug #176)"
+    
+    This reverts commit 528ced5b22b7681234d5228d0a2a02d9a2305312.
+
+ lisp/float-sup.el  |  5 ++++-
+ src/ent/ent-mpfr.c | 14 +++++---------
+ src/ent/ent-mpfr.h |  2 +-
+ 3 files changed, 10 insertions(+), 11 deletions(-)
+
+commit 528ced5b22b7681234d5228d0a2a02d9a2305312
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Dec 23 18:20:22 2015 +1000
+
+    Fix the fix, make pi a normal lisp var (Closes bug #176)
+    
+    This change reverts the previous one, and then goes about closing bug 176
+    in a different way.  Namely, by changing Vpi from being a
+    DEFVAR_CONST_LISP to a DEFVAR_LISP. IOW, a plain ordinary variable.
+    
+       * src/ent/ent-mpfr.c (vars_of_ent_mpfr): Set Vpi to be a normal
+       lisp variable instead of a constant so packages like Calc can
+       let-bind them for their own evil and misguided purposes. :-)
+       Vbigfr_pi -> Vpi
+    
+       * src/ent/ent-mpfr.h: Vbigfr_pi -> Vpi
+    
+       * lisp/float-sup.el: Revert previous change.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/float-sup.el  |  5 +----
+ src/ent/ent-mpfr.c | 14 +++++++++-----
+ src/ent/ent-mpfr.h |  2 +-
+ 3 files changed, 11 insertions(+), 10 deletions(-)
+
+commit 73dac82e98e87f568519ac37d591661063db3f54
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Dec 22 09:35:21 2015 +1000
+
+    Define `pi' in elisp, even with bigfr. (Closes bug #176)
+    
+    An elisp constant defined with #'defconst can be let-bound, or otherwise
+    altered.  But one that is defined in C cannot be.  SXEmacs' pi is
+    sometimes defined in elisp, and sometimes in C, depending on whether it
+    has bigfr or not.  The Calc XEmacs package let-binds pi in a couple of
+    places, resulting in errors when (featurep 'bigfr) => t.
+    
+    With this change, pi is defined in elisp regardless of bigfr.  But it will
+    still use bigfr to obtain the value if it is available.
+    
+       * lisp/float-sup.el: Define pi in elisp, even if we have bigfr,
+       and in that case set it to what mpfr gives us.
+       Same for e.
+    
+       * src/ent/ent-mpfr.c (init_ent_mpfr): Vpi -> Vbigfr_pi
+       (vars_of_ent_mpfr): Vpi -> Vbigfr_pi, pi -> bigfr-pi
+    
+       * src/ent/ent-mpfr.h: Vpi -> Vbigfr_pi
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/float-sup.el  |  5 ++++-
+ src/ent/ent-mpfr.c | 10 +++++-----
+ src/ent/ent-mpfr.h |  2 +-
+ 3 files changed, 10 insertions(+), 7 deletions(-)
+
+commit 9c176f58aa755c41e57153bf0ff69a5fbe0e3f8e
+Merge: 28b6c19 61fbf61
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Dec 21 17:04:30 2015 +1000
+
+    More warning fixes from Nelson
+    
+    * merges:
+      Fixing more TTY/term warning/prototype craziness.
+      More term crazyness warnings fixing.
+
+commit 61fbf61544e71021154d47be583f492656dcd430
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 20 16:56:10 2015 -0500
+
+    Fixing more TTY/term warning/prototype craziness.
+    
+       * src/ui/TTY/redisplay-tty.c: Include term.h if available.
+       Define prototypes for tgetent, tgetflag, tgetnum, tgetstr, tputs
+       if not available.
+    
+       * configure.ac (CURSES_H_FILE): No default in variable expansion.
+       (TERMCAP_H_FILE): Ditto.
+       (TERM_H_FILE): Ditto.
+       (HAVE_TPARM_PROTOTYPE): Add 'checking' message.
+       (HAVE_TGETENT_PROTOTYPE): Check if tgetent prototype is available.
+       (HAVE_TGETFLAG_PROTOTYPE): Check if tgetflag prototype is available.
+       (HAVE_TGETNUM_PROTOTYPE): Check if tgetnum prototype is available.
+       (HAVE_TGETSTR_PROTOTYPE): Check if tgetstr prototype is available.
+       (HAVE_TPUTS_PROTOTYPE): Check if tputs prototype is available
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac               | 108 ++++++++++++++++++++++++++++++++++++++++++---
+ src/ui/TTY/redisplay-tty.c |  28 +++++++-----
+ 2 files changed, 119 insertions(+), 17 deletions(-)
+
+commit 1b59d1cfe7ed5c2742559c44ae8a39d4d5d847af
+Merge: 3594867 28b6c19
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 20 15:06:32 2015 -0500
+
+    Merge branch 'master' into for-steve
+
+commit 35948676b7390a6061db87f0c4d4d27a6bc6d951
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 20 15:04:34 2015 -0500
+
+    More term crazyness warnings fixing.
+    
+       * configure.ac (CURSES_H_FILE): Only define if we have one.
+       (TERMCAP_H_FILE): Ditto.
+       (TERM_H_FILE): Ditto.
+       (HAVE_TPARM_PROTOTYPE): Detect we tparm prototype is available.
+    
+       * src/ui/TTY/terminfo.c: Only include TERM_H_FILE is we have it.
+       Properly decide when to define a tparm prototype, based on when
+       configure detected it.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac          | 32 ++++++++++++++++++++++++++------
+ src/ui/TTY/terminfo.c |  9 ++++++++-
+ 2 files changed, 34 insertions(+), 7 deletions(-)
+
+commit 28b6c19b50a1ca8ae2529e76a18d00fc173398c3
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Dec 15 22:08:00 2015 +1000
+
+    Ego Patch -- Tweak my info a little.
+    
+       * lisp/about.el (sxemacs-hackers): Add Aidan from XEmacs'
+       about.el.
+       (about-current-release-maintainers): Sort.
+       (about-url-alist): Add a couple of my URLs
+       (about-personal-info): Update me a little, use updated URLs
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/about.el | 34 ++++++++++++++++++++--------------
+ 1 file changed, 20 insertions(+), 14 deletions(-)
+
+commit fc9b048cf54e7566adf3e7dc73e5f123b3b9ef97
+Merge: 0f6f536 f7e5f0c
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Dec 13 14:58:01 2015 +1000
+
+    Compiler warning fixes from Nelson
+    
+    * merges:
+      Add missing declaration for make_bigz
+      More eliminate silly warnings
+      Eliminate silly warnings
+
+commit f7e5f0c2935452194ac6bceb527cc329f7f230f8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Dec 12 17:29:30 2015 -0500
+
+    Add missing declaration for make_bigz
+    
+       * src/ent/ent-int.h: Add prototype for make_bigz
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ent/ent-int.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 69c63e4c742c7fc7dc742ec65074c02d3eb21e60
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Dec 12 16:45:27 2015 -0500
+
+    More eliminate silly warnings
+    
+       * src/search.c (fast_string_match): Use a temporary to avoid
+       warning about constness.
+    
+       * src/openssl.c (Fossl_digest_file): Mark set unused but unused
+       variable.
+       (Fossl_pem_write_public_key): Ditto.
+       (Fossl_pem_write_key): Ditto.
+       (Fossl_ssl_read): Ditto.
+       (Fossl_ssl_write): Ditto.
+       (ossl_ssl_prepare_cmeth): Ignore drop of const qualifier. The
+       alternative of using const for SSL methods everywhere is not
+       workable if we are to support older OpenSSL versions.
+       (ossl_ssl_prepare_smeth): Ditto.
+    
+       * src/alloc.c (make_string_nocopy): Remove unnecessary cast.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/alloc.c   |  2 +-
+ src/openssl.c | 26 +++++++++++++++++++++++++-
+ src/search.c  |  7 +++++--
+ src/symbols.c |  4 ++--
+ 4 files changed, 33 insertions(+), 6 deletions(-)
+
+commit 62616191297ad80082837079694503ec7d65052d
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Dec 12 15:56:06 2015 -0500
+
+    Eliminate silly warnings
+    
+       * src/ui/TTY/terminfo.c (emacs_tparam): We don't control tparm
+       prototype where some have const qualifiers others don't. Turning
+       the warning off is the sensible choice.
+    
+       * src/ui/glyphs-eimage.c (gif_instantiate): Small cosmetic change.
+    
+       * src/ui/X11/event-Xt.c (init_event_Xt_late): We don't control the
+       prototype for XtAppSetTypeConverter where some have const others don't
+       so turning the warning off is the sensible option...
+    
+       * src/ui/X11/device-x.c (Fx_get_font_path): Const all around keeps
+       compilers happy.
+    
+       * src/events/event-stream.c (asyneq_handle_non_command_event): Use
+       a void* temporary to sidestep warning.
+    
+       * src/regex.c (POP_FAILURE_POINT): Don't cast unnecessarily.
+       (re_match_2_internal): Turn off const cast warning since the code
+       will always need it one macro expansion or another. Can't win here
+       without cheating :)
+    
+       * src/buffer.c (directory_is_current_directory): Cast
+       to target type, when conversion fails.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/buffer.c              |  2 +-
+ src/events/event-stream.c |  3 ++-
+ src/regex.c               | 14 ++++++++++++--
+ src/ui/TTY/terminfo.c     | 12 +++++++++---
+ src/ui/X11/device-x.c     |  4 ++--
+ src/ui/X11/event-Xt.c     |  3 +++
+ src/ui/glyphs-eimage.c    |  2 +-
+ 7 files changed, 30 insertions(+), 10 deletions(-)
+
+commit 0f6f5360b6de6ddbe9cf6febeb132372c2e113c4
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Dec 12 13:32:24 2015 -0500
+
+    Fix openssl support
+    
+       Let's detect needed features in configure instead of relying on
+       defines coming from openssl headers since they have proven not
+       to be reliable
+    
+       * m4/sxe-crypto.m4 (SXE_OPENSSL_VERSION): Update versions of
+       openssl supported.
+       (SXE_TRY_OPENSSL_BIN_PREFIX): Update headers checked.
+       (SXE_CHECK_OPENSSL_LOCS): Ditto.
+       (SXE_CHECK_OPENSSL_FEATURES): Check for types and make openssl not
+       available if missing.
+    
+       * src/openssl.h: Update guards on includes
+       (Lisp_SSL_CONN): Assume types are available as
+       configure should not include openssl for compilation if they
+       are not available.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-crypto.m4 | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ src/openssl.h    | 25 +++++++++++++--
+ 2 files changed, 111 insertions(+), 7 deletions(-)
+
+commit fd2c93018b11b5bcb0aea8fa783f3c58046989bf
+Merge: 6ea51f3 763caa9
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Dec 7 09:26:44 2015 +1000
+
+    Compiler & warning related updates/fixes from Nelson
+    
+    * merges:
+      Typo fix, 'max_align_t' -> 'sxe_max_align_t'
+      Silence warnings about usage of deprecated function when existing alternative is not available.
+      Use proper assert in lwlib
+      Fix typo on include guard for term.h
+      Use proper max in lwlib
+      Add some prototype to silence silly warnings.
+      Turn off warning about deprecated usage of __free_hook.
+      Use min/max from sxe-utils
+      Properly handle return from getcwd.
+      Shut set but unused warnings.
+      Rename our max_align_t to sxe_max_align_t
+      Mark variables set but unused.
+      Fixup assert definitions.
+      Add SXE_SET_UNUSED to shut unused warnings.
+      Cleanup utilities. Introduce sxe-memory.h
+      Address static inline warning in ase.
+      Prevent movemail from proceeding when setuid fails
+
+commit 763caa9fff2c6041ee54193f83a7ad56e94660d3
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Dec 7 09:23:24 2015 +1000
+
+    Typo fix, 'max_align_t' -> 'sxe_max_align_t'
+    
+       * src/ui/specifier.c (aligned_sizeof_specifier): 'max_align_t' ->
+       `sxe_max_align_t'
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/ui/specifier.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5a34287d32d76245d5a28af73386d8c71d67e88f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 6 17:24:36 2015 -0500
+
+    Silence warnings about usage of deprecated function when existing alternative is not available.
+    
+       * src/ui/X11/event-Xt.c (whatever): Add pragma to ignore warning.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/X11/event-Xt.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+commit 8a412ac83eb6b8109fd93dde9a79125f9ffbb313
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 6 16:54:49 2015 -0500
+
+    Use proper assert in lwlib
+    
+       * src/ui/lwlib/lwlib-internal.h: Include sxe-utils instead of
+       defining assert.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/lwlib/lwlib-internal.h | 15 +--------------
+ 1 file changed, 1 insertion(+), 14 deletions(-)
+
+commit c57ebd5cba75489c97cbe14f241e792619b09d5b
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 6 16:53:42 2015 -0500
+
+    Fix typo on include guard for term.h
+    
+       * src/ui/TTY/terminfo.c: Fix typo
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/TTY/terminfo.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f29f6b1e77808b36722014fe3c1754d1f5ac3562
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 6 16:52:42 2015 -0500
+
+    Use proper max in lwlib
+    
+       * src/ui/lwlib/lwlib.c: Undefine max macro to use this type safe
+       alternative.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/lwlib/lwlib.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 182f58aeacc32908883b6b7d8d808c0ca16b5c0a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 6 16:50:21 2015 -0500
+
+    Add some prototype to silence silly warnings.
+    
+       * src/effi.c(ffi_make_callback_x86): Add  prototype.
+       * src/media/sound-jack.c (demux_internal): Ditto.
+       * src/mule/file-coding.c (autodetect_real_coding_system): Ditto.
+       * src/print.c (float_to_string): Ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/effi.c             | 2 ++
+ src/media/sound-jack.c | 3 +++
+ src/mule/file-coding.c | 6 +++++-
+ src/print.c            | 2 ++
+ 4 files changed, 12 insertions(+), 1 deletion(-)
+
+commit d2cfef1bb74e905f85dab23f3b1dfcf474eb6568
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 6 16:46:36 2015 -0500
+
+    Turn off warning about deprecated usage of __free_hook.
+    
+       Since this is to try and avoid crashes on shutdown, it will either
+       be available and work, or linking will fail, which will be detected
+       by configure, and thus we will not use it.
+    
+       * configure.ac: Add HAVE_FREE_HOOK when __free_hook is available.
+       Also fix detection of __after_morecore_hook.
+       * src/emacs.c (voodoo_free_hook): Ignore the warning about
+       deprecated variable.
+       * src/emacs.c (Fkill_emacs): Ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 22 +++++++++++++++++++++-
+ src/emacs.c  | 16 ++++++++++++++++
+ 2 files changed, 37 insertions(+), 1 deletion(-)
+
+commit f8b54ac02452cfa17c403a08beed97efa245538c
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 6 16:10:33 2015 -0500
+
+    Use min/max from sxe-utils
+    
+       * src/ui/lwlib/xlwmenu.c: Include sxe-utils and remove the current
+       max macro.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/lwlib/xlwmenu.c | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+commit dc4582098947e7f4768c9a9841da2c47a0803d2d
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 6 16:05:30 2015 -0500
+
+    Properly handle return from getcwd.
+    
+       * src/realpath.c (xrealpath): Is getcwd returns NULL, also return
+       NULL.  If we can't determine the cwd, then any relative path
+       processing fails.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/realpath.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit f76158def792b30973d21fd95aed52e96039532b
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 6 16:02:46 2015 -0500
+
+    Shut set but unused warnings.
+    
+       These are in the code for debug/inspection purposes.
+    
+       * src/ui/lwlib/xlwgauge.c (GaugeExpose): Use SXE_SET_UNUSED.
+    
+       * src/ui/lwlib/xlwcheckbox.c (DrawCheck):Ditto.
+    
+       * src/sysdep.c (tty_init_sys_modes_on_device)
+       (tty_reset_sys_modes_on_device): Ditto.
+    
+       * src/regex.c (re_match_2_internal): Ditto.
+    
+       * src/mule/file-coding.c (Fdefine_coding_system_alias): Ditto.
+    
+       * src/media/sound-oss.c (sound_oss_handle_aj_events): Ditto.
+    
+       * src/media/sound-jack.c (sound_jack_handle_aj_events)
+       (sound_jack_process): Ditto.
+    
+       * src/media/sound-ao.c (sound_ao_handle_aj_events): Ditto.
+    
+       * src/media/sound-alsa.c (sound_alsa_handle_aj_events): Ditto.
+    
+       * src/media/media-sndfile.c (media_sndfile_open): Ditto.
+    
+       * src/media/media-mad.c (media_mad_read): Ditto.
+    
+       * src/media/media-internal.c (media_internal_analyse_stream): Ditto.
+    
+       * src/emacs.c (Fdump_emacs): Ditto.
+    
+       * src/bytecode.c (execute_optimized_program): Ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/bytecode.c             | 2 ++
+ src/emacs.c                | 1 +
+ src/media/media-internal.c | 2 ++
+ src/media/media-mad.c      | 1 +
+ src/media/media-sndfile.c  | 2 ++
+ src/media/sound-alsa.c     | 2 ++
+ src/media/sound-ao.c       | 2 ++
+ src/media/sound-jack.c     | 5 +++++
+ src/media/sound-oss.c      | 2 ++
+ src/mule/file-coding.c     | 1 +
+ src/regex.c                | 3 +++
+ src/sysdep.c               | 2 ++
+ src/ui/lwlib/xlwcheckbox.c | 3 +++
+ src/ui/lwlib/xlwgauge.c    | 2 ++
+ 14 files changed, 30 insertions(+)
+
+commit 231bc2d28183d7def3772cb9f7410d98be486be8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 6 13:03:28 2015 -0500
+
+    Rename our max_align_t to sxe_max_align_t
+    
+       This is needed because newer compilers now ship with this
+       symbol.
+    
+       * src/sxe-utils.h: Rename max_align_t to sxe_max_align_t
+       * src/dumper.c (pdump_get_entry_list): Use sxe_max_align_t
+       (pdump_scan_by_alignment): Ditto.
+       (pdump): Ditto.
+       * src/opaque.c (aligned_sizeof_opaque): Ditto.
+       * src/opaque.h (Lisp_Opaque): Ditto.
+       * src/specifier.h (Lisp_Specifier): Ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/dumper.c    | 20 ++++++++++----------
+ src/lstream.c   |  2 +-
+ src/lstream.h   |  2 +-
+ src/opaque.c    |  2 +-
+ src/opaque.h    |  2 +-
+ src/specifier.h |  2 +-
+ src/sxe-utils.h |  4 ++--
+ 7 files changed, 17 insertions(+), 17 deletions(-)
+
+commit 0afad4edf7ce3639d67d3535d2f12ce632cd6bd8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 27 17:35:16 2015 -0400
+
+    Mark variables set but unused.
+    
+       * src/lisp.h (PRIVATE_EXTERNAL_LIST_LOOP_6): Mark elt as unused.
+       (PRIVATE_EXTERNAL_ALIST_LOOP_8): Set elt_car and elt_cdr as unused.
+       * src/mule/mule-ccl.c (CCL_WRITE_STRING): Set bytes as unused.
+       * src/ui/X11/dialog-x.c (dbox_descriptor_to_widget_value): Set
+       title as unused.
+       * src/ui/X11/glyphs-x.c (x_widget_instantiate): Set nm as unused.
+       * src/ui/X11/gui-x.c (button_item_to_widget_value): Set intlen as
+       unused.
+       * src/ui/X11/objects-x.c (x_font_instance_properties): Set
+       name_len as unused.
+       * src/ui/lwlib/lwlib-Xlw.c (xlw_update_one_widget): Set mw as
+       unused.
+       * src/ui/lwlib/xlwtabs.c (TabsResize): Set tab as unused.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/lisp.h               | 4 ++--
+ src/mule/mule-ccl.c      | 1 +
+ src/ui/X11/dialog-x.c    | 2 ++
+ src/ui/X11/glyphs-x.c    | 4 +++-
+ src/ui/X11/gui-x.c       | 4 ++++
+ src/ui/X11/objects-x.c   | 2 ++
+ src/ui/lwlib/lwlib-Xlw.c | 3 +++
+ src/ui/lwlib/xlwtabs.c   | 1 +
+ 8 files changed, 18 insertions(+), 3 deletions(-)
+
+commit 29c4caea228ce22a9bfa76ef833d4473a9be8979
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 27 17:28:23 2015 -0400
+
+    Fixup assert definitions.
+    
+       * src/sxe-utils.h: Use assert_failed only when compiling emacs
+       itself.  Also make assert a proper no-op expression, i.e.,
+       (void)0.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/sxe-utils.h | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 301c2aabd99739d5493b83bb71cb28e3dd5e8a48
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 27 17:26:39 2015 -0400
+
+    Add SXE_SET_UNUSED to shut unused warnings.
+    
+       * src/sxe-utils.h (SXE_SET_UNUSED): Define macro to mark variables
+       set but unused, aka, dummy vars.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/sxe-utils.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit b84e8f01881114d77ad01ed16e50e561494a3c91
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 27 17:24:04 2015 -0400
+
+    Cleanup utilities. Introduce sxe-memory.h
+    
+    Move all the memory related utilities to sxe-memory.h so that
+    sxe-utils.h can be included in contexts where the memory utils
+    are not welcome.
+    
+       * src/sxemacs.h: Remove include for sxe-utils.h, lisp.h already
+       does it.
+       * src/lisp.h: Include new sxe-memory.h
+       * src/sxe-utils.h: Remove xnew, xnew_atomic, xnew_array,
+       xnew_atomic_array, xnew_and_zero, xzero, xnew_array_and_zero,
+       xrealloc_array, alloca_array, xstrdup
+       * src/sxe-memory.h: Add definitions removed from sxe-utils.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/lisp.h       |   1 +
+ src/sxe-memory.h | 181 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/sxe-utils.h  | 151 ----------------------------------------------
+ src/sxemacs.h    |   2 +-
+ 4 files changed, 183 insertions(+), 152 deletions(-)
+
+commit aa7b146ed16d513b9f40fb79ca42e91116a70b67
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 27 17:14:52 2015 -0400
+
+    Address static inline warning in ase.
+    
+       * modules/ase/ase-neighbourhood.h: Use extern_inline.
+       (ase_neighbourhood_point): Move definition to header.
+       (ase_neighbourhood_radius): Ditto.
+       (ase_neighbourhood_rational_measure): Ditto.
+       (ase_neighbourhood_lebesgue_measure): Ditto.
+       (_ase_neighbourhood_lebesgue): Inline dependency hoisted.
+       (_ase_neighbourhood_update_lebesgue): Ditto.
+       (_ase_neighbourhood_rational): Ditto.
+       (_ase_neighbourhood_update_rational): Ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/ase/ase-neighbourhood.c |  60 ------------------------
+ modules/ase/ase-neighbourhood.h | 101 ++++++++++++++++++++++++++++++++--------
+ 2 files changed, 81 insertions(+), 80 deletions(-)
+
+commit d870d2df966097d7d65b767eed35889657682c55
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 27 17:10:45 2015 -0400
+
+    Prevent movemail from proceeding when setuid fails
+    
+       * lib-src/movemail.c (main): Exit is setuid fails
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/movemail.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+commit e3d0801a12b2b6ddb4720aaf9d1952b1d823e89e
+Merge: 14fb0b4 6ea51f3
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Sep 26 11:41:17 2015 -0400
+
+    Merge branch 'master' into for-steve
+
+commit 6ea51f307b0121b67ba06111ddedbfb16189ea44
+Merge: 8f74a8d 14fb0b4
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Sep 21 09:21:31 2015 +1000
+
+    Minor package-get cleanup + bldchain tweak
+    
+    * merges:
+      Cleanup invalid mirrors
+      Cleanup mirrors
+      Improve missing header message
+      Improve detection libtool version detection
+
+commit 14fb0b4ba1fdf3d6c6c63f7c22b50aa4f8187921
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 20 12:57:43 2015 -0400
+
+    Cleanup invalid mirrors
+    
+       * lisp/package-get.el (package-get-pre-release-download-sites):
+       Remove commented out entries from previous commit.
+       (package-get-download-sites): Ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/package-get.el | 77 -----------------------------------------------------
+ 1 file changed, 77 deletions(-)
+
+commit a2141c1d00c00cce549afa078d048f0802fad5a1
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 20 12:54:31 2015 -0400
+
+    Cleanup mirrors
+    
+       * lisp/package-get.el (package-get-download-sites): Annotate
+       mirrors with connectivity difficulties or outdated contents.
+       Comment out mirrors which do not resolve or do not carry XEmacs
+       packages anymore.
+       (package-get-pre-release-download-sites): Ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/package-get.el | 149 ++++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 98 insertions(+), 51 deletions(-)
+
+commit d1b630cec9bcf428d8f41ad8294674136b1ab90f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 20 10:52:44 2015 -0400
+
+    Improve missing header message
+    
+       * configure.ac: Note that we also need Xt headers as newer distros
+       tend to package Xt headers separately from core X11.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4e3d7030d24968ceec61d1aca0a21feefef88632
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 20 10:51:00 2015 -0400
+
+    Improve detection libtool version detection
+    
+       * autogen.sh: Use libtoolize for version if libtool is not to be
+       found.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ autogen.sh | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+commit 8f74a8dd656155dc7716bd1ce168bb086b44cb8b
+Merge: 6a46975 c94647f
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Sep 14 13:43:56 2015 +1000
+
+    TTY + General build chain related updates
+    
+    * merges:
+      Conditional automake init
+      Small configure.ac fix
+      Fix info/Makefile.am for old automake
+      Allow m4 and autostuff to be customized
+      Enforce makeinfo version
+      Improve TTY library detection
+      Improve TTY section of summary
+      Add builtin tty support option
+      Forward compatible info in builddir (when CLEANFILES becomes obsolete)
+      Attempt to provide speed_t
+      Improve term initialization output
+      Provide helper defines
+      Allow for ncurses tinfo as TTY option
+
+commit c94647f78cb6bbefe60926513dfb2d3ca3e0dacc
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 13 18:10:27 2015 -0400
+
+    Conditional automake init
+    
+       * configure.ac: Hugly hack to add info-in-buildir for automake >=
+       1.14
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+commit dad5a180f46befe1a1c7af9ca2b0cbbda4de855c
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 13 18:09:30 2015 -0400
+
+    Small configure.ac fix
+    
+       * configure.ac: Fix typo, and determine SED and AWK early.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 5793c931bb2e06b238d1acfa9736bfe0055c00d1
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 13 18:08:24 2015 -0400
+
+    Fix info/Makefile.am for old automake
+    
+       * info/Makefile.am: Turns out automake does not deal well with
+       unknown options. Horrible hack forthcoming in configure.ac.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ info/Makefile.am | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit 3bbdbd725c0eedabcb84be9f9738f6c3610614e0
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 13 18:06:21 2015 -0400
+
+    Allow m4 and autostuff to be customized
+    
+       * autogen.sh: allow for environment variables to control which
+       git/m4/autoconf/automake binaries are used.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ autogen.sh | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 54 insertions(+), 10 deletions(-)
+
+commit 977c0dd86106aaa81d1d49e9ea8051ce92643260
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 13 15:15:37 2015 -0400
+
+    Enforce makeinfo version
+    
+       * m4/sxe-bldchain-progs.m4: Verify that makeinfo version is at
+       least 5.x
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-bldchain-progs.m4 | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+commit 5c14c1d0f287c56ced4276526f61d90ce2420212
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Sep 8 18:12:21 2015 -0400
+
+    Improve TTY library detection
+    
+       * configure.ac: Iterate over all "auto" libraries by order of
+       preference to find out which are linkable.  Add libraries
+       requested on command line by adding --with-<lib>=yes before the
+       auto ones.  Then find which libraries are needed to get all of the
+       required terminal functions.  Check if combination still allows
+       for all functions to build.  When all else fails if
+       --with-builtin-tty=yes is passed, use that.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 321 +++++++++++++++++++++++++++++++++++++----------------------
+ 1 file changed, 202 insertions(+), 119 deletions(-)
+
+commit e0048c32e6de7b45bfacc683b81f0725581d883f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Sep 8 18:09:15 2015 -0400
+
+    Improve TTY section of summary
+    
+       * m4/sxe-summary.m4 (SXE_SUMMARY): Provide additional warning on
+       some of the tty options, and support for --with-tinfo and
+       --with-builtin-tty
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-summary.m4 | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+commit 3d73783dceefcc22ea86080c5dd40b00f887a324
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Sep 8 18:08:12 2015 -0400
+
+    Add builtin tty support option
+    
+       * configure.ac: Add disabled by default --with-builtin-tty as last
+       resort to get a workable build with no other libraries.  A
+       workable terminal spec will be needed at runtime.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 97b46b308a60d7638a8ee0207e5176d8b232e712
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Sep 8 14:05:29 2015 -0400
+
+    Forward compatible info in builddir (when CLEANFILES becomes obsolete)
+    
+       * info/Makefile.am (AUTOMAKE_OPTIONS): Add info-in-builddir
+              automake option for forward compatibility.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ info/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 36622085bb772d206be2417635260ef4edeb7d89
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Sep 8 14:02:47 2015 -0400
+
+    Attempt to provide speed_t
+    
+       * ui/TTY/termcap.c: In our termcap-like implementation make sure
+       we provide speed_t if available.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/TTY/termcap.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit b04c7d2fc80d6b6f8c4f67059af51fa59f368872
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Sep 8 14:01:32 2015 -0400
+
+    Improve term initialization output
+    
+       * src/cmdloop.c (initial_command_loop): Provide better output when
+       terminal initialization fails. Now it does not look like a corrupt
+       message.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/cmdloop.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit d1a4d48f4954770121878971e81ee1c024966454
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Sep 8 13:59:22 2015 -0400
+
+    Provide helper defines
+    
+       * configure.ac: Make sure to define SED and ECHO as some system
+       autoconf macros use them without defining them (tsk tsk
+       libtool...)
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit adf025ccf5989bb271d3d1a843febb67609cd2dc
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Sep 8 13:57:40 2015 -0400
+
+    Allow for ncurses tinfo as TTY option
+    
+       * configure.ac: Add --with-tinfo option
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 6a469751f4562ba7d6104a4db3c05e705801151e
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Aug 24 18:14:59 2015 +1000
+
+    Disable "in-tree" builds.
+    
+       * m4/sxe-srctree.m4 (SXE_CHECK_SRCDIR_HEALTH): Error if $blddir =
+       $srcdir.
+    
+       * INSTALL: Add some blurb about in-tree builds no longer being
+       supported.
+       Minimum texinfo version is now 5.2.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ INSTALL           | 36 +++++++++++++++++++++++++-----------
+ m4/sxe-srctree.m4 |  3 +++
+ 2 files changed, 28 insertions(+), 11 deletions(-)
+
+commit 74807b005e7c737b3f554847897facafd901710f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 23 17:40:02 2015 -0400
+
+    Make .info files be generated in builddir
+    
+       * info/Makefile.am (CLEANFILES): According to automake, info files
+       are generated in builddir only if marked as user cleaned.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ info/Makefile.am | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+commit 2074af4b1b7854bbaa3c4cd3c57d62dc61a35a1d
+Merge: e01219e 74d5801
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Aug 23 11:13:16 2015 +1000
+
+    Misc build tweaks/updates from Nelson
+    
+    * merges:
+      Document why the duplicate traversal is needed
+      Revert "Remove duplicate subdirs"
+      Make info be generated in buildidr
+      Remove duplicate subdirs
+      Improve liblzma pkg-config detection
+      Improve FFI pkg-config detection
+      Add new pkg-config macro SXE_PC_CHECK_EXISTS
+      Fix pkg-config autoconf macros
+      Automatically paths in site prefix to PKG_CONFIG_PATH
+
+commit 74d58019971b4ec0f9c88d9c95ca00066f46d0bb
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Aug 22 11:39:11 2015 -0400
+
+    Document why the duplicate traversal is needed
+
+ Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit b2f68744f35227b3008371facee6e89958af4a8a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Aug 22 11:33:41 2015 -0400
+
+    Revert "Remove duplicate subdirs"
+    
+    This reverts commit 9cdb268091bd33e600448864eda49c3c8b365699.
+
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3883e7dad0f8334b72dcf38c39a19a9895ad1c35
+Merge: ba6346f 49ab5fa
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Aug 15 19:12:24 2015 -0400
+
+    Merge branch 'sxe_pc_check' into for-steve
+
+commit ba6346fd1f7ce61955e246d44cb254aa810529c8
+Merge: 57098f2 0a5fe99
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Aug 15 19:11:37 2015 -0400
+
+    Merge branch 'makeinfo_out_of_tree' into for-steve
+
+commit 0a5fe996bfed398bdf5c5f27c2552c361320fd4e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 9 14:19:35 2015 -0400
+
+    Make info be generated in buildidr
+    
+       * info/Makefile.am (builddir, srcdir, SUBDIRS): Add settings to
+       generate info in buildir and reset SUBDIRS in order not to
+       recurse.
+
+ info/Makefile.am | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 9cdb268091bd33e600448864eda49c3c8b365699
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 9 14:18:20 2015 -0400
+
+    Remove duplicate subdirs
+    
+       * Makefile.am (sxe_subdirs): Remove duplicate dirs
+
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 49ab5fac4cbf7edaa0ea3b9f4d10552c51837736
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 9 13:37:10 2015 -0400
+
+    Improve liblzma pkg-config detection
+    
+       * m4/sxe-compress.m4: Also check for liblzma pkg-config modules
+       which is now commonly used.
+
+ m4/sxe-compress.m4 | 35 +++++++++++++++++++++++++++--------
+ 1 file changed, 27 insertions(+), 8 deletions(-)
+
+commit 3059c55db2238cb89dc4523608d5bcd3cfd634d8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 9 13:35:06 2015 -0400
+
+    Improve FFI pkg-config detection
+    
+       * m4/sxe-emodffi.m4: Use the SXE_PC macros for pkg-config
+       detection of libffi.
+
+ m4/sxe-emodffi.m4 | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+commit 749c560c385d1332305e057a186cd50bfa54d5fe
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 9 13:31:32 2015 -0400
+
+    Add new pkg-config macro SXE_PC_CHECK_EXISTS
+    
+       * m4/sxe-pkgconfig.m4: Add SXE_PC_CHECK_EXISTS which sets
+       sxe_cv_pc_[shmod]_exists to yes if module is configured via
+       pkg-config.
+
+ m4/sxe-pkgconfig.m4 | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+commit 7ea779b838ad6a1d28608bcfcaf3b4f0736425e8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 9 13:28:13 2015 -0400
+
+    Fix pkg-config autoconf macros
+    
+       * m4/sxe-pkgconfig.m4: Correct quoting of shmod and MOD in
+       SXE_PC_CHECK_VERSION_ATLEAST, SXE_PC_CHECK_VERSION_ATMOST,
+       SXE_PC_CHECK_VERSION, SXE_PC_CHECK_LIBS, SXE_PC_CHECK_LDFLAGS,
+       SXE_PC_CHECK_CPPFLAGS
+
+ m4/sxe-pkgconfig.m4 | 48 ++++++++++++++++++++++++------------------------
+ 1 file changed, 24 insertions(+), 24 deletions(-)
+
+commit 57098f22777832b4aa91f1d4486886232a957484
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 9 13:23:05 2015 -0400
+
+    Automatically paths in site prefix to PKG_CONFIG_PATH
+    
+       * ../configure.ac: If there is pkg-config and --with-site-prefixes
+       was passed to configure, also add those prefixes with
+       lib/pkgconfig to PKG_CONFIG_PATH.
+
+ configure.ac | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit e01219e73541a41ecd5c8739e59a07b5ffb89752
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Jul 10 22:21:17 2015 +1000
+
+    Handle immediate autoloads (';;;###autoloadimmediate') better.
+    
+       * lisp/autoload.el (process-one-lisp-autoload): Insert <immediate>
+       into the section header for immediate autoloads, to make sure the
+       upstream doesn't think there aren't any autoloads at all.
+    
+       From: Mike Sperber  <mike@xemacs.org>
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/autoload.el | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 7ce6c3cc03be110d63340d790a9c336125299e9b
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Jul 10 16:21:34 2015 +1000
+
+    Support both "-*-coding:" and "-*- coding:" in magic cookies
+    
+    The code responsible for checking coding sytem magic cookies in files was
+    only searching for "-*-coding:...", however most (most == all in SXEmacs,
+    but in XEmacs and GNU/Emacs most == majority) files that have these
+    cookies seem to use "-*- coding:...".  This changeset means SXEmacs will
+    now honour the coding cookie regardless of it being "-*-coding" or
+    "-*- coding".
+    
+       * src/mule/file-coding.c (autodetect_real_coding_system): Look for
+       " coding:" as well as "coding:"
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/mule/file-coding.c | 40 ++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 38 insertions(+), 2 deletions(-)
+
+commit f4138971962eba6a8dd94d7ddc1028e187aee41b
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jul 6 17:18:18 2015 +1000
+
+    Update the docstrings in the cl emodule.
+    
+    This adds/updates the docstrings for the DEFUNs in the cl emodule.  I've
+    basically just lifted the doctrings from the equivalent functions/macros
+    in cl*.el.
+    
+       * modules/cl/cl-loop.c (Fcl_loop): Add a docstring.
+       (Fcl_doX): Typo in docstring.
+       (Fcl_dotimes): Update docstring.
+       (Fcl_dolist): Ditto.
+       (Fcl_do_symbols): Ditto.
+       (Fcl_loop_sentence): Direct folks to #'cl:loop docstring.
+    
+       * modules/cl/cl.c (Fcl_pop): Add a docstring.
+       (Fcl_push): Ditto.
+       (Fcl_pushnew): Ditto.
+       (Fcl_eql): Ditto.
+       (Fcl_list_): Ditto.
+       (Fcl_tailp): Ditto.
+       (Fcl_ldiff): Ditto.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/cl/cl-loop.c | 301 +++++++++++++++++++++++++++++++++++++++++++++++++--
+ modules/cl/cl.c      |  35 ++++--
+ 2 files changed, 321 insertions(+), 15 deletions(-)
+
+commit 56c8b099ccef8240d76c6f88c3f31d86ae22cfba
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jul 4 12:23:33 2015 +1000
+
+    Partially sync files.el from XEmacs 21.5 for wildcard support.
+    
+    This changeset partially syncs files.el with XEmacs 21.5 (cb65bfaf7110
+    tip) to give #'find-file and friends support for wildcards.
+    
+    With this, you can do things like: `C-x C-f /path/to/*.c' and all .c files
+    in /path/to/ will be opened.  Oh, and it also means that the current
+    ispell XEmacs package will work again.
+    
+       * lisp/files.el (find-directory-functions): New.
+       (switch-to-next-buffer): New.
+       (switch-to-previous-buffer): New.
+       (switch-to-next-buffer-in-group): New and fixed to not use
+       obsolete vars.
+       (switch-to-previous-buffer-in-group): New. and fixed to not use
+       obsolete vars.
+       (find-file-create-switch-thunk): New.
+       (find-file): Synched up with XEmacs 21.5
+       cb65bfaf7110 tip.
+       (find-file-wildcards): New.
+       (find-file-suppress-same-file-warnings): New.
+       (find-file-noselect): Synched up with XEmacs 21.5 cb65bfaf7110
+       tip.
+       (find-file-noselect-1): New.
+       (insert-file-literally): New.
+       (find-file-literally): New.
+       (file-expand-wildcards): New.
+       (shell-quote-wildcard-pattern): New.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/files.el | 751 ++++++++++++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 550 insertions(+), 201 deletions(-)
+
+commit 8735e449d5e2c97356dd317eae27cc075e059f55
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Jul 3 21:35:00 2015 +1000
+
+    Run the testsuite with -vanilla to protect from local pollution.
+    
+    This change just makes the testsuite run in a -vanilla SXEmacs instance
+    to keep local settings and packages out of the equation.
+    
+       * tests/Makefile.am (tests_environment): Use -vanilla.
+       (check-formats, check-map, check-skiplists, check-%): Ditto.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ tests/Makefile.am | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 36ea5e75fe8caa7c5134fbd465af7d6f7697aa84
+Merge: 353afe8 5f6d015
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Thu Jul 2 17:01:03 2015 +1000
+
+    autogen.sh update from Horst
+    
+    * merges:
+      remove GNUisms that break non-GNU stuff
+
+commit 5f6d015a3bc3ba49d5a47218b88efb39913ee3f6
+Author: Horst G. Burkhardt <mc@680x0.com>
+Date:   Wed Jul 1 12:53:48 2015 +1000
+
+    remove GNUisms that break non-GNU stuff
+    
+    Signed-off-by: Horst G. Burkhardt <mc@680x0.com>
+
+ autogen.sh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 353afe80cffff2e5e621aab8f9a7ae0f765ff2c4
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jun 28 15:40:19 2015 +1000
+
+    Fix quoting and indexing bug in git-for-steve.sh
+    
+       * contrib/git-for-steve.sh (set_myremote): Remove quotes from
+       REMOTES value.  And index counts from zero, not one.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 6a537a70e3a5c7623a82a20a3caf306d6a2b253e
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jun 28 15:25:43 2015 +1000
+
+    Fix bugs in git-for-steve.sh script,
+    
+    This changeset fixes one of those "hard to find" errors you get in shell
+    scripts that turn out to be a single character fix.  Sheesh.  So in the 2
+    days I spent tracking down this bloody 1 char fix I also tidied up the
+    rest of the script and improved the UI a tad.  Also fixed a couple of
+    other bugs that hadn't been discovered yet. :)
+    
+       * contrib/git-for-steve.sh: Fix/improve quoting throughout.
+       Some UI improvements.
+       (set_aliases): Add missing ')'.
+       (set_keys): Grep for '^default-key' instead of 'default-key' in
+       gpg.conf in case it is commented out.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 129 ++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 83 insertions(+), 46 deletions(-)
+
+commit e6c44735810e22bc17d6a037cb02e19d45b4d855
+Merge: c5b309c c4243d1
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jun 27 13:28:37 2015 +1000
+
+    Contrib script fix from Horst
+    
+    * merges:
+      fix git-for-steve to work on systems that don't symlink /bin/sh to bash
+
+commit c5b309c7f2640ac5f39ba464688862effffc0b69
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jun 27 13:13:08 2015 +1000
+
+    Fix portability prob in git-for-steve.sh
+    
+       * contrib/git-for-steve.sh: Make it a bash script.
+       (set_myremote): Properly quote $REMOTES
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit c4243d1330e6f80767dc252a0537096890e59d25
+Author: Horst G. Burkhardt <mc@680x0.com>
+Date:   Sat Jun 27 12:45:24 2015 +1000
+
+    fix git-for-steve to work on systems that don't symlink /bin/sh to bash
+    
+    Signed-off-by: Horst G. Burkhardt <mc@680x0.com>
+
+ contrib/git-for-steve.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a25fa462ffd95d5e9113e7303ac968c90f2963f0
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Jun 26 23:18:42 2015 +1000
+
+    Fix a couple of typos in the formats and aliases in git-for-steve.sh
+    
+       * contrib/git-for-steve.sh (set_formats, set_aliases): Typo fixes.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit f99b3c7417506d3aa891d4998841de085672c3a3
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Jun 26 14:10:10 2015 +1000
+
+    Temporarily turn off dbus detection.
+    
+    Lets not build the dbus emodule until it actually does something.
+    
+       * configure.ac: Disable dbus detection.
+    
+       * modules/Makefile.am: Comment out DESCEND_DBUS to keep autogen.sh
+       happy.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ configure.ac        | 28 ++++++++++++++--------------
+ modules/Makefile.am |  6 +++---
+ 2 files changed, 17 insertions(+), 17 deletions(-)
+
+commit 9706bcac59a38104b91bbb106e37bc3a6f2ed8e2
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 15 17:37:10 2015 +1000
+
+    Update & fix texi docs to build clean against makeinfo v5.2
+    
+    This seemingly monster changeset is nothing more than simple compile
+    warning fixes.  But now the docs compile clean, and clean is good. :-)
+    
+       * info/lispref/abbrevs.texi
+       * info/lispref/annotations.texi
+       * info/lispref/backups.texi
+       * info/lispref/buffers.texi
+       * info/lispref/building.texi
+       * info/lispref/commands.texi
+       * info/lispref/compile.texi
+       * info/lispref/consoles-devices.texi
+       * info/lispref/control.texi
+       * info/lispref/databases.texi
+       * info/lispref/debugging.texi
+       * info/lispref/dialog.texi
+       * info/lispref/display.texi
+       * info/lispref/ent.texi
+       * info/lispref/eval.texi
+       * info/lispref/extents.texi
+       * info/lispref/faces.texi
+       * info/lispref/files.texi
+       * info/lispref/frames.texi
+       * info/lispref/functions.texi
+       * info/lispref/glyphs.texi
+       * info/lispref/gutter.texi
+       * info/lispref/hash-tables.texi
+       * info/lispref/help.texi
+       * info/lispref/internationalization.texi
+       * info/lispref/intro.texi
+       * info/lispref/keymaps.texi
+       * info/lispref/ldap.texi
+       * info/lispref/lispref.texi
+       * info/lispref/lists.texi
+       * info/lispref/loading.texi
+       * info/lispref/macros.texi
+       * info/lispref/markers.texi
+       * info/lispref/menus.texi
+       * info/lispref/minibuf.texi
+       * info/lispref/modes.texi
+       * info/lispref/mule.texi
+       * info/lispref/numbers.texi
+       * info/lispref/objects.texi
+       * info/lispref/openssl.texi
+       * info/lispref/os.texi
+       * info/lispref/packaging.texi
+       * info/lispref/positions.texi
+       * info/lispref/postgresql.texi
+       * info/lispref/processes.texi
+       * info/lispref/range-tables.texi
+       * info/lispref/scrollbars.texi
+       * info/lispref/searching.texi
+       * info/lispref/sequences.texi
+       * info/lispref/specifiers.texi
+       * info/lispref/streams.texi
+       * info/lispref/strings.texi
+       * info/lispref/symbols.texi
+       * info/lispref/syntax.texi
+       * info/lispref/text.texi
+       * info/lispref/tips.texi
+       * info/lispref/toolbar.texi
+       * info/lispref/variables.texi
+       * info/lispref/windows.texi
+       * info/lispref/x-windows.texi
+       * info/sxemacs-faq.texi
+       * info/sxemacs/custom.texi
+       * info/sxemacs/menus.texi
+       * info/sxemacs/programs.texi
+       * info/sxemacs/sxemacs.texi
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ info/lispref/abbrevs.texi              |   4 +-
+ info/lispref/annotations.texi          |  14 +-
+ info/lispref/backups.texi              |  14 +-
+ info/lispref/buffers.texi              |   2 +-
+ info/lispref/building.texi             |   2 +-
+ info/lispref/commands.texi             |  68 ++---
+ info/lispref/compile.texi              |   4 +-
+ info/lispref/consoles-devices.texi     |   2 +-
+ info/lispref/control.texi              |  26 +-
+ info/lispref/databases.texi            |   2 +-
+ info/lispref/debugging.texi            |  26 +-
+ info/lispref/dialog.texi               |   4 +-
+ info/lispref/display.texi              |   4 +-
+ info/lispref/ent.texi                  |   2 +-
+ info/lispref/eval.texi                 |  32 +--
+ info/lispref/extents.texi              |   6 +-
+ info/lispref/faces.texi                |  38 +--
+ info/lispref/files.texi                |  58 ++---
+ info/lispref/frames.texi               |   4 +-
+ info/lispref/functions.texi            |  28 +-
+ info/lispref/glyphs.texi               |  54 ++--
+ info/lispref/gutter.texi               |   2 +-
+ info/lispref/hash-tables.texi          |   6 +-
+ info/lispref/help.texi                 |   2 +-
+ info/lispref/internationalization.texi |   6 +-
+ info/lispref/intro.texi                |  28 +-
+ info/lispref/keymaps.texi              |   4 +-
+ info/lispref/ldap.texi                 |   2 +-
+ info/lispref/lispref.texi              |  11 +-
+ info/lispref/lists.texi                |  38 +--
+ info/lispref/loading.texi              |   2 +-
+ info/lispref/macros.texi               |  20 +-
+ info/lispref/markers.texi              |   4 +-
+ info/lispref/menus.texi                |  22 +-
+ info/lispref/minibuf.texi              |  30 +--
+ info/lispref/modes.texi                |  28 +-
+ info/lispref/mule.texi                 |   2 +-
+ info/lispref/numbers.texi              |   4 +-
+ info/lispref/objects.texi              | 110 ++++----
+ info/lispref/openssl.texi              |  20 +-
+ info/lispref/os.texi                   |  86 +++---
+ info/lispref/packaging.texi            |   4 +-
+ info/lispref/positions.texi            |  22 +-
+ info/lispref/postgresql.texi           |   2 +-
+ info/lispref/processes.texi            |  30 +--
+ info/lispref/range-tables.texi         |   6 +-
+ info/lispref/scrollbars.texi           |   2 +-
+ info/lispref/searching.texi            |  28 +-
+ info/lispref/sequences.texi            |   2 +-
+ info/lispref/specifiers.texi           |   6 +-
+ info/lispref/streams.texi              |   2 +-
+ info/lispref/strings.texi              |   4 +-
+ info/lispref/symbols.texi              |   4 +-
+ info/lispref/syntax.texi               |  18 +-
+ info/lispref/text.texi                 |  80 +++---
+ info/lispref/tips.texi                 |   4 +-
+ info/lispref/toolbar.texi              |   6 +-
+ info/lispref/variables.texi            |  34 +--
+ info/lispref/windows.texi              |   2 +-
+ info/lispref/x-windows.texi            |  12 +-
+ info/sxemacs-faq.texi                  | 464 ++++++++++++++++-----------------
+ info/sxemacs/custom.texi               |  78 +++---
+ info/sxemacs/menus.texi                |   4 +-
+ info/sxemacs/programs.texi             |   2 +-
+ info/sxemacs/sxemacs.texi              |   3 +-
+ 65 files changed, 820 insertions(+), 820 deletions(-)
+
+commit 21e3604bb7ab3d5e64cfbbb90a9b04ed8ca7ad07
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 15 14:34:36 2015 +1000
+
+    Update SPPM
+    
+       * info/sppm.texi (IRC): JackaLX -> SteveYoungs
+    
+       * info/sppm.texi (Voting): Votes to be decided by simple majority,
+       which I think is easier and fairer.
+    
+       * info/sppm.texi (Sending a patch from a git repo): Update, use
+       the "for-steve" workflow, encourage GnuPG signing, mention and
+       recommend git-for-steve.sh.
+    
+       * info/sppm.texi (Making Releases): Update to bring it inline with
+       what I actually do on release day.
+    
+       * info/sppm.texi (Compatibility): Clarify a little.
+    
+       * info/sppm.texi (Setting up a publicly accessible repo):
+       Explicitly use `git-for-steve.sh' in the example setup, and
+       mention it in the text.
+    
+       * info/sppm.texi (Other Developers' Repositories): Add everyone's
+       repo that I know of.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ info/sppm.texi | 188 ++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 91 insertions(+), 97 deletions(-)
+
+commit fcfc7afbe817a619561ed91fa591c8ff482a1198
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 14 10:51:47 2015 -0400
+
+    Fix cl-loop-parser.y for bison 2.7
+    
+       * modules/cl/cl-loop-parser.y: Use double quotes for api.prefix
+
+ modules/cl/cl-loop-parser.y | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8169c5886ae90461017c67b917566d519600f285
+Merge: 74a31d3 82008a1
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 14 10:07:33 2015 -0400
+
+    Merge remote-tracking branch 'origin/master' into for-steve
+
+commit 82008a117980636406a20d417ca5197d003557c8
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jun 14 16:01:39 2015 +1000
+
+    Add 'scan-error' error type.
+    
+       * src/syntax.c: Add `Qscan_error'.
+    
+       * src/syntax.c (syms_of_syntax): DEFERROR_STANDARD it.
+    
+       * src/syntax.c (scan_lists): Use it.
+    
+       * lisp/subr.el (error): Add it to the docstring.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/subr.el |  1 +
+ src/syntax.c | 24 +++++++++++++++++++-----
+ 2 files changed, 20 insertions(+), 5 deletions(-)
+
+commit 65b1733aae3061ad18529ff38b00ed3e3bc38ea7
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jun 13 14:10:27 2015 +1000
+
+    Error when callbacks aren't available in curl:download
+    
+       * lisp/ffi/ffi-curl.el (curl:download): Error when attempting to
+       dl to a buffer when that can't be done.
+    
+       * lisp/ffi/ffi-curl.el (curl:download&): Ditto.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/ffi/ffi-curl.el | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+commit 1d6df596fd2a9f316a7b1abaa59a1e390d6db1d1
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jun 13 11:35:00 2015 +1000
+
+    Update cl-loop-parser grammar file for bison 3.x
+    
+    This allows the cl emodule to build with bison version 3.x, and sets
+    the minimum required version to 2.7
+    
+       * m4/sxe-bldchain-progs.m4 (SXE_PROG_BISON): Set minimum bison
+       version needed to v2.7.x,
+    
+       * modules/cl/cl-loop-parser.y: Use api.prefix, api.pure instead of
+       name-prefix, pure_parser which are deprecated.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ m4/sxe-bldchain-progs.m4    | 2 +-
+ modules/cl/cl-loop-parser.y | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 171d5ad3a3a9006d4c03acc2136a0a95047d46e9
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jun 13 00:22:32 2015 +1000
+
+    Try to gracefully handle not having ffi-callbacks.
+    
+    The change in 3ba78988 (effi.c) meant that ffi-curl.el and ffi-sqlite.el
+    could not be loaded if you weren't on a i386 machine.  This changeset
+    takes care of that.
+    
+       * lisp/ffi/ffi-curl.el (curl:cb-write-to-buffer): Wrap in
+       #'ignore-errors because our ffi-callbacks don't work on x86_64.
+    
+       * lisp/ffi/ffi-curl.el (curl:download): Only attempt dl to a
+       buffer if curl:cb-write-to-buffer is bound.
+    
+       * lisp/ffi/ffi-sqlite.el (sqlite-generic-collation): Wrap in
+       #'ignore-errors because our ffi-callbacks don't work on x86_64.
+    
+       * lisp/ffi/ffi-sqlite.el (sqlite-create-collation): Error if
+       sqlite-generic-collation isn't bound.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/ffi/ffi-curl.el   | 22 ++++++++++++----------
+ lisp/ffi/ffi-sqlite.el | 46 ++++++++++++++++++++++++++--------------------
+ 2 files changed, 38 insertions(+), 30 deletions(-)
+
+commit 0d3f550c44818fecad83d7d12f99fbe3457e406f
+Merge: ce7e32b 74a31d3
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Jun 12 10:33:27 2015 +1000
+
+    Rework dirname tests & prevent 2 cores at configure time
+    
+    * merges:
+      Fix configure dirname. Also streamline dirname usage.
+      Fix configure check for realpath and dirname. Also streamline dirname usage.
+
+commit 74a31d33deff58c3b6aa664b3b43ccd53d567426
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Thu Jun 11 15:21:54 2015 -0400
+
+    Fix configure dirname. Also streamline dirname usage.
+    
+       POSIX 1003.1 states: "The dirname() function may modify the string
+       pointed to by path, and may return a pointer to static storage
+       that may then be overwritten by subsequent calls to dirname()."
+    
+       Source: http://www.unix.com/man-page/POSIX/3posix/dirname/
+    
+       Because of this the only sane way of using dirname is to allocate
+       our own copy of the argument, call dirname and then copy to the
+       result.
+    
+       The interesting news is we don't call xdirname anywhere in our
+       code, yes, not even in Ffile_dirname.  In fact the contract as far
+       as the '/' termination and behavior on "non directory" is
+       completely different and actually changing it would break
+       build-autoloads.el and packages.el (easily fixed), and god knows
+       what other user code.
+    
+       * m4/sxe-fs-funs.m4: Remove _SXE_CHECK_DIRNAME_SIDE_EFFECT,
+       _SXE_CHECK_DIRNAME_RETVAL_OWNER and
+       _SXE_CHECK_DIRNAME_RETVAL_OWNER tests since the change in xdirname
+       makes these checks not necessary.
+    
+       * m4/sxe-fs-funs.m4 (SXE_CHECK_BROKEN_DIRNAME): Remove calls to
+       _SXE_CHECK_DIRNAME_SIDE_EFFECT, _SXE_CHECK_DIRNAME_RETVAL_OWNER
+       and _SXE_CHECK_DIRNAME_RETVAL_OWNER.
+    
+       * src/sysdep.h (x__dirname): Provide only a POSIX-aware usage of
+       dirname.  This means copying the argument to the result buffer
+       before calling dirname and the result (if not at start of the
+       result buffer), using xstrncpy if non-overlapping, memmove if
+       overlapping.
+
+ m4/sxe-fs-funs.m4 | 149 ------------------------------------------------------
+ src/sysdep.h      |  41 ++++++---------
+ 2 files changed, 15 insertions(+), 175 deletions(-)
+
+commit 7a9be1a3ab4af6745629a3b1f7dbce581461d9e6
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Thu Jun 11 14:58:52 2015 -0400
+
+    Fix configure check for realpath and dirname. Also streamline dirname usage.
+    
+       * m4/sxe-fs-funs.m4 (_SXE_CHECK_REALPATH_RETVAL_OWNER): Add double
+       call strategy to verify usage of internal memory.
+
+ m4/sxe-fs-funs.m4 | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit ce7e32b3f1157e493ceac23cc56cc9788f55c68e
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Thu Jun 11 23:36:09 2015 +1000
+
+    Typo fix
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ m4/sxe-fs-funs.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 73eaf10ab548bfb1d23914980af54846fe0db29c
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Thu Jun 11 21:47:36 2015 +1000
+
+    git-for-steve tweaks.
+    
+       * contrib/git-for-steve.sh: Take more of a "git approach" to
+       testing if we're in a SXEmacs repo.
+    
+       Save the current branch name in case we move from it and want to
+       return.
+    
+       popd _before_ popping the stash.
+    
+       Give the user a way to bypass the origin check.
+    
+       (set_branch): Only switch to master if it's not the current
+       branch.
+       Ask if the user wants to switch to for-steve, instead of forcing
+       it.
+    
+       (set_aliases): Make alias.alias only show aliases, and not every
+       config containing "alias".
+       Add a couple of new aliases:
+         "cob" -> "checkout -b"
+         "prb" -> "pull --rebase"
+         "wb" -> "rev-parse --abbrev-ref HEAD".
+    
+       * contrib/git-for-steve.sh (LETSPOP):
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 76 ++++++++++++++++++++++++++++++++++++------------
+ 1 file changed, 57 insertions(+), 19 deletions(-)
+
+commit 3ba78988a2a64e1a8e9770cad11e27abaa424890
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Wed Jun 10 10:29:49 2015 -0400
+
+    Signal error when callbacks are not supported in ffi
+
+ src/effi.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit a327fadefa474ec1a26694c7c280bf2fc0c473fb
+Merge: 6ac88d7 5d70e77
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 10 23:10:48 2015 +1000
+
+    Help prevent input method failures in XCreateIC from Nelson
+    
+    * merges:
+      Avoid XCreateIC failures
+      Document LANG and XMODIFIERS in case of XCreateIC failure
+      Document LANG and XMODIFIERS in case of XCreateIC failure
+      Document XCreateIC issue
+
+commit 6ac88d720a08579cae5c5da6e9c222d98b8a32c1
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 10 18:22:08 2015 +1000
+
+    Re-write the git-for-steve.sh script
+    
+    Many thanks and kudos to Nelson for not only writing the original script,
+    but for putting up with my endless questions on IRC.
+    
+    The old script was great, and in fact I referenced it countless times in
+    the past to find out how to do certain git things, but it only went as far
+    as to print suggestions to stdout as to what you should change.  This new
+    improved incarnation goes much further.
+    
+    Here is what it _won't_ do:
+    
+      It won't do anything if you're not in a SXEmacs source tree
+      It won't change anything that is already set without asking
+      It won't mess up a dirty WD, so you could run it right in the middle of
+       hacking if you wanted to
+      It won't do the wrong thing if you run it a 2nd, 3rd, 4th time (all bets
+       are off for the 5th run, no I'm kidding, it is safe to run as
+       often as you like)
+    
+    What it does do is take care of everything SXEmacs-git related that you
+    can think of and probably a few things that you haven't.
+    
+       * contrib/git-for-steve.sh: Complete re-write.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/git-for-steve.sh | 671 ++++++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 575 insertions(+), 96 deletions(-)
+
+commit 5d70e776aa4cb1f0385e3d0e317951853e6d244a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 16:24:47 2015 -0400
+
+    Avoid XCreateIC failures
+    
+          * src/mule/input-method-xlib.c(XIM_init_frame): Do not specify
+            XNStatusAttributes unless there is a XIMStatusArea.  Some XIM
+            implementations are very sensitive to this (ibus is one
+            example).
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/mule/input-method-xlib.c | 43 ++++++++++++++++++++++++++-----------------
+ 1 file changed, 26 insertions(+), 17 deletions(-)
+
+commit f9b289e253a0a24c5e887dd3f72fc11fb5a0a14b
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 16:08:57 2015 -0400
+
+    Document LANG and XMODIFIERS in case of XCreateIC failure
+    
+        * src/mule/input-method-xlib: Add xim_warn2 macro.
+    
+        * src/mule/input-method-xlib(XIM_init_frame): Get and output to
+                stderr the value of LANG and XMODIFIERS to help
+                troubleshooting.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/mule/input-method-xlib.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+commit 2ed3098165fffb3a401b2b439343718466ae4075
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 16:07:35 2015 -0400
+
+    Document LANG and XMODIFIERS in case of XCreateIC failure
+    
+        * src/intl.c(init_input): Get and output to stderr the value of
+        LANG and XMODIFIERS to help troubleshooting.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/intl.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+commit 4b800457dd3b31c12a667583e68c895e49499fe9
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 16:06:38 2015 -0400
+
+    Document XCreateIC issue
+    
+        * PROBLEMS: Add description of XCreateIC failure
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ PROBLEMS | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 84605ad5745c071f0248e2e24d8b683483b47c47
+Merge: 0ba0b03 79aa021
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 8 01:50:31 2015 +1000
+
+    contrib update from Nelson
+    
+    * merges:
+      Provide guidance on the developer and maintainer key tag
+      GPG key mandatory
+      Provide support contact
+
+commit 0ba0b0341b37c4a0ad0059f7819f018aabd94b98
+Merge: 071ccf6 78172dd
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 8 01:07:27 2015 +1000
+
+    Compiler warning fixes from Nelson
+    
+    * merges:
+      Remove unused variable.
+      Remove unused variable and dead code.
+      Silence variable set but not used in macro expansion.
+      Silence some variable set but not used warnings.
+      Remove unused variable (value already inspectable)
+      Silence some variable set but not used warnings.
+      Silence some variable set but not used warnings.
+
+commit 79aa0217a255dd85b17376fa4b0b07107cba8452
+Merge: 78172dd 4e5298e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 11:00:53 2015 -0400
+
+    Merge branch 'signing_for_steve' into for-steve
+
+commit 4e5298ea8bc97687708d003eb4b8d8e8a76eea77
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 10:57:26 2015 -0400
+
+    Provide guidance on the developer and maintainer key tag
+    
+       * contrib/git-for-steve.sh:  Check and provide steps for
+              creating the developer key tag.  Check and provide steps for
+              importing the maintainer key.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ contrib/git-for-steve.sh | 41 +++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 41 insertions(+)
+
+commit 686677a9a9875474d550012c7222d35328288593
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 10:56:01 2015 -0400
+
+    GPG key mandatory
+    
+        * contrib/git-for-steve.sh: Check for gpg installed and make it
+          mandatory.  Also when the signing key is not set provide an
+          educated guess.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ contrib/git-for-steve.sh | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+commit 52ba1ca9eada4c08c9199f529a5974475d0ac9ee
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 10:55:07 2015 -0400
+
+    Provide support contact
+    
+       * contrib/git-for-steve.sh: Add reference to #sxemacs channel
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ contrib/git-for-steve.sh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 78172dd9180e566d6ea09a80039f365be75b4d15
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 09:42:56 2015 -0400
+
+    Remove unused variable.
+    
+           * modules/cl/cl-loop.c(cl_loop_dllist_map_return): Remove 'state'
+             because it is only set to one and never read.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/cl/cl-loop.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 053b107e1d8a11b2233154d528cfeeb47b157712
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 09:41:34 2015 -0400
+
+    Remove unused variable and dead code.
+    
+           * src/ui/redisplay-output.c(compare_display_blocks): Remove
+             'block_end' and the commented code that used it - Commented out
+             since '97 seems like dead and buried...
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/redisplay-output.c | 29 ++---------------------------
+ 1 file changed, 2 insertions(+), 27 deletions(-)
+
+commit cf2701895eb01ec2f5b52ccfe121521f29139fd9
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 09:39:46 2015 -0400
+
+    Silence variable set but not used in macro expansion.
+    
+       * src/lisp.h(GET_EXTERNAL_LIST_LENGTH): Provide usage of
+              'GELL_elt'.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/lisp.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 05a8cbcc0861a78dfae90fa7b213c5363d2fb4c6
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 09:36:16 2015 -0400
+
+    Silence some variable set but not used warnings.
+    
+       * modules/ase/ase-interval.c(ase-interval): Provide usage for
+              'args'.  Not removed in order to provide an additional stack
+              reference for argument lisp objects.
+    
+       * modules/cl/cl-loop.c(cl:loop-sentence): Provide usage for
+              'parse_result'.  Could be useful in debug inspection.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/ase/ase-interval.c | 1 +
+ modules/cl/cl-loop.c       | 1 +
+ 2 files changed, 2 insertions(+)
+
+commit 4f4fea42295b3bb7f98e9ad3a97a31da7064f7e6
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 09:31:23 2015 -0400
+
+    Remove unused variable (value already inspectable)
+    
+           * src/ui/scrollbar(update_scrollbar_instance): Remove
+           'new_window' as its value can be inspected as 'w'.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/scrollbar.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 0e4a0a8dfcf1a4e15c733df913b56f92652c279e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 09:22:18 2015 -0400
+
+    Silence some variable set but not used warnings.
+    
+       * src/ui/redisplay.c(regenerate_window_extents_only_changed,
+                 regenerate_window_incrementally): Provide 'new_start' usage
+    
+       * src/ui/specifier.c(specifier_instance): Provide 'tag' usage
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ui/redisplay.c | 4 ++++
+ src/ui/specifier.c | 1 +
+ 2 files changed, 5 insertions(+)
+
+commit b3b44e277cae41063ccedfef923fda6e6bddb1a8
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 7 09:05:38 2015 -0400
+
+    Silence some variable set but not used warnings.
+    
+    * lib-src/etags.c(just_read_file): provide 'dummy' usage.
+    
+    * lib-src/ootags.c(just_read_file): provide 'dummy' usage.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/etags.c  | 1 +
+ lib-src/ootags.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+commit 071ccf620b24b2ea44a31c33b9c09024e18f06c1
+Merge: f65a669 0fe7a46
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jun 7 10:59:41 2015 +1000
+
+    Path fix for doc-directory from Nelson
+    
+    * merges:
+      Properly handle doc-directory
+
+commit 0fe7a465602563c035aa4c76621d34d71922ca01
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jun 6 11:37:20 2015 -0400
+
+    Properly handle doc-directory
+    
+       * lisp/setup-paths.el (paths-find-doc-directory): use
+       exec-directory if configuration-doc-directory is nil as promised
+       in the documentation for doc-directory.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/setup-paths.el | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit f65a66933fc6a95ea7eae70995545fedc1f26586
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jun 6 16:11:09 2015 +1000
+
+    Fix cross-reference in lispref/packaging.texi
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ info/lispref/packaging.texi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 858233662e9c12ffe5a4ddcff74ea64845034859
+Merge: 4bf599c 1ae91c6
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jun 6 15:34:41 2015 +1000
+
+    XDG-compliant location for early-packages
+    
+    * xdg-pkgs:
+      XDG Compliant user package tree -- doc updates.
+      XDG Compliant user (early) packages tree.
+
+commit 1ae91c6195b2f2f8e645dd0774b4efad0fbb8b79
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jun 6 14:04:44 2015 +1000
+
+    XDG Compliant user package tree -- doc updates.
+    
+    This updates the documentation to reflect the new location for user
+    (early) packages.
+    
+       * PROBLEMS: Add section about early-packages locations.
+    
+       * README.packages: Update the text relating to user packages.
+    
+       * etc/sxemacs.1 (FILES): Ditto.
+    
+       * info/lispref/packaging.texi (The User View): Update.
+    
+       * info/new-users-guide/custom2.texi (Init File): Typo fix.
+    
+       * info/sxemacs-faq.texi (Q5.3.3): Ditto.
+    
+       * info/sxemacs/cmdargs.texi (Command Switches): Add
+       -user-pkgs-directory.
+    
+       * info/sxemacs/startup.texi (Startup Paths): Update for current
+       reality.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ PROBLEMS                          |  13 ++++-
+ README.packages                   |  16 ++++--
+ etc/sxemacs.1                     |  38 ++++++++------
+ info/lispref/packaging.texi       | 104 ++++++++++++++++++++++++--------------
+ info/new-users-guide/custom2.texi |   4 +-
+ info/sxemacs-faq.texi             |   2 +-
+ info/sxemacs/cmdargs.texi         |   6 +++
+ info/sxemacs/startup.texi         |  63 ++++++++++++-----------
+ 8 files changed, 153 insertions(+), 93 deletions(-)
+
+commit 30e80ecbf0baf6d0bed7780ee90cfa1859546f4f
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Thu Jun 4 23:36:25 2015 +1000
+
+    XDG Compliant user (early) packages tree.
+    
+    With this changeset, the location for a user's local packages, the ones
+    that make up `early-packages', is now under ${XDG_DATA_HOME}/sxemacs.
+    That is normally ~/.local/share/sxemacs, which is the directory used when
+    the XDG environment variable isn't set.
+    
+    If the user has forced use of the old legacy ~/.sxemacs for their init
+    directory, then that is where the early-packages will be instead of the
+    XDG location.  A warning is displayed if package subdirectories are
+    detected in any 2 or more of ~/.sxemacs, ${XDG_CONFIG_HOME}/sxemacs, and
+    ${XDG_DATA_HOME}/sxemacs (symlinked directories are ignored).
+    
+    There is also a new command line switch, `-user-pkgs-directory' to set the
+    early-packages directory to any location.
+    
+       * lisp/package-admin.el (package-admin-find-top-directory): Use
+       `user-packages-topdir' instead of `user-init-directory'.
+       (package-admin-get-install-dir): Ditto.
+    
+       * lisp/package-get.el (package-get-package-index-file-location):
+       Default location is now in `user-packages-topdir' instead of
+       `user-init-directory'.
+       (package-get-install-to-user-directory): Renamed from
+       `package-get-install-to-user-init-directory'.  The latter is
+       defvaralias'd back.
+       (package-get-maybe-save-index): Use `user-packages-topdir' instead
+       of `user-init-directory'.
+    
+       * lisp/packages.el (packages-find-user-topdir): New.  Returns
+       `user-packages-topdir'.
+       (packages-compute-package-locations): Rename the arg to
+       `user-packages-topdir', and update the doc string.
+    
+       * lisp/startup.el (command-line-do-help): Add `-user-pkgs-directory'.
+       (command-line-early): For `-user' set an XDG compliant directory
+       for `user-packages-topdir' if possible, fall back to the legacy
+       .sxemacs otherwise.
+       (startup-setup-paths): Use #'packages-find-user-topdir to set
+       `user-packages-topdir'.
+    
+       * src/emacs.c (vars_of_emacs): New var, `Vuser_packages_topdir'.
+       (main_1): Handle new command line arg, `-user-pkgs-directory'. Set
+       `Vuser_packages_topdir'.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/package-admin.el | 39 +++++++++++---------
+ lisp/package-get.el   | 13 ++++---
+ lisp/packages.el      | 99 ++++++++++++++++++++++++++++++++++++++++++++-------
+ lisp/startup.el       | 17 +++++++--
+ src/emacs.c           | 36 +++++++++++++++++--
+ 5 files changed, 166 insertions(+), 38 deletions(-)
+
+commit 4bf599c548264a82eae767411cb613033dd2273b
+Merge: 01ee95f a41eac1
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon May 11 13:31:46 2015 +1000
+
+    autogen.sh fix.  Closes bug 165 from Horst
+    
+    * merges:
+      Fix autogen.sh to work at Horst's site and on FBSD in general
+
+commit a41eac13d38be52266aa130c459f87b790990b19
+Author: Horst G. Burkhardt <mc@680x0.com>
+Date:   Mon May 11 12:52:59 2015 +1000
+
+    Fix autogen.sh to work at Horst's site and on FBSD in general
+    
+    Signed-off-by: Horst G. Burkhardt <mc@680x0.com>
+
+ autogen.sh | 17 +++--------------
+ 1 file changed, 3 insertions(+), 14 deletions(-)
+
+commit 01ee95f714416d9966727aad1f66a01ff2c3f540
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun May 10 10:17:23 2015 +1000
+
+    Bring some consistency to command line switches
+    
+    We have UNIX style single dash cmdline long-opts, and GNU style double
+    dash cmdline long-opts, but not every single dash long-opt has a
+    corresponding double dash long-opt, and vice verse.  This changeset
+    rectifies that.
+    
+       * lisp/startup.el (command-line-early): Add missing GNU style
+       `--long-option' for all `-long-option' that were lacking it.
+       (startup-setup-paths): ditto.
+       (command-switch-alist): Add `-h'.
+    
+       * info/sxemacs/cmdargs.texi: Add missing command switches.
+    
+       * src/emacs.c (main_1): Add `-show-dump-id', `-terminal',
+       `-no-dump-file', `-color-terminal', `-no-windows', `-h' command
+       switches.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ info/sxemacs/cmdargs.texi | 39 ++++++++++++++++++++++++++++++++-------
+ lisp/startup.el           | 29 +++++++++++++++++++----------
+ src/emacs.c               | 27 +++++++++++++++++----------
+ 3 files changed, 68 insertions(+), 27 deletions(-)
+
+commit ccf396e4aaaa572f1a3fe927dc482331dd016ee1
+Merge: 4821f02 b6eed55
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun May 10 07:23:55 2015 +1000
+
+    Merge branch 'xdg-init'
+
+commit b6eed55f4da11386e477920b369b47053ecac8ac
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Thu May 7 23:23:56 2015 +1000
+
+    XDG init -- Git rid of hack in site-start.el
+    
+    It was wrong to use site-start.el to cope with a dynamic user init
+    directory.  This changeset puts it all into startup.el and removes the
+    site-start.el file.  Admins can breath a sigh of relief. :)
+    
+    user-init-directory and lisp-initd-dir will now also be included in the
+    debugging output when using -debug-paths.
+    
+       * lisp/Makefile.am (corelispels): Remove site-start.el
+    
+       * lisp/site-start.el: Removed.
+    
+       * lisp/startup.el (find-user-init-directory): Actually set
+       user-init-directory.
+       Warn if multiple init directories were found.
+       (forced-user-init-directory): New, non-nil when the
+       user-init-directory has been set explicitly via the command
+       line. NOT a user variable, keep ya grubby paws offit.
+       (command-line-early): Ensure that all paths are correct when using
+       "-u", "-user", "-user-init-directory", and inlude
+       user-init-directory and lisp-initd-dir with -debug-paths.
+       (startup-setup-paths): Use #'find-user-init-directory to maybe
+       find the user's init directory.  Include user-init-directory, and
+       lisp-initd-dir in debug output when -debug-paths.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/Makefile.am   |  15 +++----
+ lisp/site-start.el |  58 -------------------------
+ lisp/startup.el    | 122 ++++++++++++++++++++++++++++++++++++++++++-----------
+ 3 files changed, 105 insertions(+), 90 deletions(-)
+
+commit 4821f02fd1a7e818bd11bb68fbc294e087c39892
+Merge: 04168e3 5a2368c
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue May 5 13:55:39 2015 +1000
+
+    Support XDG-based init directory
+    
+    * xdg-init:
+      XDG init -- Doc updates.
+      XDG Compliant init directory.
+
+commit 5a2368c9080b7ebf2a1f414c9d4802698c7f6f53
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue May 5 13:49:42 2015 +1000
+
+    XDG init -- Doc updates.
+    
+    Brings all the docs relating to the init file up to date.
+    
+       * PROBLEMS: Update section on user-init-file
+    
+       * configure.ac (package-prefix): Use "user's home directory"
+       instead of "~/.sxemacs".
+    
+       * etc/sample.init.el: Update comments.
+    
+       * etc/sxemacs.1: Update Files section regarding init.el.
+    
+       * info/lispref/os.texi (Start-up Summary): Update locations for
+       init.el.
+    
+       * info/lispref/os.texi (Init File): Describe user-init-directory.
+    
+       * info/new-users-guide/custom1.texi: s/Emacs/SXEmacs/
+    
+       * info/new-users-guide/custom1.texi (Customization Basics): Cross
+       reference `Init File'.
+    
+       * info/lispref/postgresql.texi
+       (Building SXEmacs with PostgreSQL support): Comment out silly
+       nonsence about "binary kits" and ftp sites. :)
+    
+       * info/sxemacs-faq.texi (Q1.0.2): Update.
+    
+       * info/sxemacs-faq.texi (Q1.0.3): Sources are at
+       http://downloads.sxemacs.org/, not ftp.  And snapshots are on the
+       web too.
+    
+       * info/sxemacs-faq.texi (Q1.4.1): Update and cross-ref `Init
+       File'.  Remove talk of "migrating old .emacs".  We've never done
+       that.
+    
+       * info/sxemacs/cmdargs.texi (Command Switches): Update.
+       s/Emacs/SXEmacs/
+    
+       * info/sxemacs/custom.texi (Init File): Update.  Mention
+       user-init-directory, cross-ref to lispref "Init File".
+    
+       * info/sxemacs/sxemacs.texi (Distrib): Point folks to
+       http://downloads.sxemacs.org
+    
+       * lisp/ffi/ffi-magic.el: doc update example
+    
+       * lisp/files.el (user-init-file): Update doc.
+    
+       * lisp/info.el (Info-annotate): Ditto.
+    
+       * lisp/issue-tracker.el (report-sxemacs-bug-help): Ditto.
+    
+       * lisp/menubar-items.el (default-menubar): Don't hard-code
+       "~/.sxemacs/init.el".
+    
+       * lisp/package-admin.el (package-admin-get-install-dir): comment update.
+    
+       * info/lispref/display.texi (Warnings): update.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ PROBLEMS                          | 21 +++++++++++---
+ configure.ac                      |  2 +-
+ etc/sample.init.el                | 31 ++++++++++++++------
+ etc/sxemacs.1                     | 15 ++++++----
+ info/lispref/display.texi         |  2 +-
+ info/lispref/os.texi              | 60 ++++++++++++++++++++++++++++++---------
+ info/lispref/postgresql.texi      |  4 ++-
+ info/new-users-guide/custom1.texi | 31 ++++++++++----------
+ info/sxemacs-faq.texi             | 35 +++++++++--------------
+ info/sxemacs/cmdargs.texi         | 55 ++++++++++++++++++-----------------
+ info/sxemacs/custom.texi          | 18 ++++++------
+ info/sxemacs/startup.texi         |  1 +
+ info/sxemacs/sxemacs.texi         |  5 +---
+ lisp/ffi/ffi-magic.el             |  4 +--
+ lisp/files.el                     |  6 ++--
+ lisp/info.el                      |  8 +++---
+ lisp/issue-tracker.el             |  2 +-
+ lisp/menubar-items.el             |  3 +-
+ lisp/package-admin.el             |  3 +-
+ modules/configure.ac              |  2 +-
+ 20 files changed, 183 insertions(+), 125 deletions(-)
+
+commit 1637e28a4d2034d934a1c7e7ea5a70b3fd32a577
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun May 3 01:56:21 2015 +1000
+
+    XDG Compliant init directory.
+    
+    This changeset moves the init directory from ~/.sxemacs to
+    $XDG_CONFIG_HOME/sxemacs, falling back to ~/.config/sxemacs when
+    $XDG_CONFIG_HOME isn't set.
+    
+    SXEmacs will continue to use ~/.sxemacs if that directory exists, unless
+    the XDG-based directory also exists.  In that case, the XDG-based directory
+    will take precedence, unless the user has set $SXE_USE_LEGACY in their
+    environment.
+    
+    If no init directories exist, use the XDG-based directory, unless
+    $SXE_USE_LEGACY has been set.
+    
+    If multiple init directories exist a warning is displayed to the user
+    showing the directories found, and which is the one in use.  This warning
+    can be suppressed by adding the symbol `multi-initd' to
+    `display-warning-suppressed-classes'
+    
+       * lisp/startup.el (find-user-init-directory): New.
+       (user-init-directory): Set to empty string.
+       (user-init-directory-base): Removed.
+       (command-line-do-help): Warn that using -user may not be the
+       wisest of choices.
+       (command-line-early): When using -user set user-init-directory to
+       ~user/.config/sxemacs, or ~user/.sxemacs if that doesn't exist.
+       (site-start-file): Doc fix.
+    
+       * lisp/site-start.el: New.  Deals with the consequences of
+       computing a user-init-directory at run-time.
+    
+       * lisp/Makefile.am (corelispels): Add site-start.el.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/Makefile.am   | 15 +++++++-------
+ lisp/site-start.el | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ lisp/startup.el    | 61 ++++++++++++++++++++++++++++++++++++++++--------------
+ 3 files changed, 111 insertions(+), 23 deletions(-)
+
+commit 04168e3fa98cd90961d773c5ffda67a6797f8dd7
+Merge: de79373 3c5bbc5
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Mar 17 09:20:29 2014 +1000
+
+    Support user/group lookups from Nelson
+    
+    * merges:
+      Add support for Unix lookup by name to user-uid and user-gid
+      Add support for Unix groups comparable to user id
+
+commit 3c5bbc52f44e2ad0c3426c275a9ec7d5d4c2bae2
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Mar 16 18:57:18 2014 -0400
+
+    Add support for Unix lookup by name to user-uid and user-gid
+    
+       * src/editfns.c (Fuser_uid): add optional parameter user_name. If
+       specified the system will lookup the user uid, return nil if that
+       user does not exist.
+    
+       * src/editfns.c (Fuser_gid): add optional parameter group_name. If
+       specified the system will lookup the group gid, return nil if that
+       group does not exist.
+    
+       * src/editfns.c (Fuser_real_uid): clarify that the uid returned is
+       that of the process.
+    
+       * src/editfns.c (Fuser_real_gid): clarify that the uid returned is
+       that of the process.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/editfns.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 48 insertions(+), 10 deletions(-)
+
+commit 4b276034ba5da9f3a29d6825fc6f0ccda9f20b7a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Mar 16 17:35:12 2014 -0400
+
+    Add support for Unix groups comparable to user id
+    
+       * src/Makefile.am (libsxecore_a_headers):Add new sysgrp.h header.
+    
+       * src/sysgrp.h: New header
+    
+       * src/editfns.c: Include sysgrp.h
+    
+       * src/editfns.c (Fuser_group_name): New defun similar to
+       Fuser_login_name but for groups.
+    
+       * src/editfns.c (user_group_name): Actual implementation of
+       user_group_name. Can be called by other C functions in SXEmacs.
+    
+       * src/editfns.c (Fuser_gid): Group counterpart to user-uid
+    
+       * src/editfns.c (Fuser_real_gid): Group counterpart to
+       user-real-uid
+    
+       * src/editfns.c (syms_of_editfns): Register new defuns
+       Fiser_group_name, Fuser_gid, Fuser_real_gid
+    
+       * src/lisp.h: Add prototype for internal user_group_name
+    
+       * src/lisp.h: Add declaration of Fuser_group_name
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/Makefile.am |  2 +-
+ src/editfns.c   | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ src/lisp.h      |  2 ++
+ src/sysgrp.h    | 22 +++++++++++++++++++
+ 4 files changed, 87 insertions(+), 4 deletions(-)
+
+commit de793738afb6127055c16c8d8ac6d7042043e914
+Merge: d0e6dd3 c8551e7
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Feb 14 12:09:44 2014 +1000
+
+    Mac OS fixes from Nelson
+    
+    * merges:
+      Fix SEGV while building autoloads for modules in Mac OS X with gcc-4.8.2
+
+commit c8551e77dfdec81a9776d5fdfbd281b8e1eb86c5
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Thu Feb 13 20:32:42 2014 -0500
+
+    Fix SEGV while building autoloads for modules in Mac OS X with gcc-4.8.2
+    
+       This seems to be a bad interaction between the gcc generated
+       switch code and with the Mac OS X pthreads stubs, which clear rax
+       where fun is expected by gcc to reside.
+    
+       This is the minimal set of changes that fixes the issue, but now I
+       believe we should comb the codebase for the usage of UNLIKELY and
+       only keep those that are really useful.
+    
+       * src/map.c: Refactor the check of NILP(fun) to be outside the
+       current switch, so there is an additional switch(arity) with just
+       the NILP(fun) branch of the old one. It was also necessary to
+       remove the UNLIKELY hint, which was causing the error: Invalid
+       regexp: "Unmatched ( or \\("
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/map.c | 190 +++++++++++++++++++++++++++++++-------------------------------
+ 1 file changed, 94 insertions(+), 96 deletions(-)
+
+commit d0e6dd336c8136eaefc8c6d3b44a59199266305b
+Merge: 3eb639f 4c568a0
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Jan 17 00:03:07 2014 +1000
+
+    #'directory-files fix (Closes 163)
+    
+    * bug-163:
+      XEmacs compatibility fix in #'directory-files (Closes Bug 163)
+
+commit 4c568a08815692f48a7f9ff5559ee759d1da2e9e
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Thu Jan 16 23:58:16 2014 +1000
+
+    XEmacs compatibility fix in #'directory-files (Closes Bug 163)
+    
+    For details see:  http://issues.sxemacs.org/show_bug.cgi?id=163
+    
+       * src/dired.c (directory_files_resultify): Return an unsorted list
+       when RESULT-TYPE is `non-nil' or `list'.
+    
+       * src/dired.c (Fdirectory_files): Update doc string.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/dired.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 3eb639f7ab0b546ab41278799b179ebec54e3cf5
+Merge: c29cb39 48ac31d
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Thu Dec 26 09:31:54 2013 +1000
+
+    Autoconf warnfix from Nelson
+    
+    * merges:
+      Remove annoying autoconf warning
+
+commit 48ac31db7c535b263cbfc2e69b553ea2351cc278
+Author: Nelson Ferreira <njsf@sxemacs.org>
+Date:   Wed Dec 25 17:41:38 2013 -0500
+
+    Remove annoying autoconf warning
+    
+    Under autoconf 2.64 and newer the current autoconf macros of SXEmacs emit the following
+    warning multiple times:
+    
+    _LT_SYS_DYNAMIC_LINKER was expanded before it was required
+    
+       * m4/sxe-libtool.m4 (_SXE_CHECK_LT2): Add AC_REQUIRE for
+         _LT_SYS_DYNAMIC_LINKER as recommend by
+         http://www.gnu.org/software/autoconf/manual/autoconf.html#Expanded-Before-Required
+    
+    Signed-off-by: Nelson Ferreira <njsf@sxemacs.org>
+
+ m4/sxe-libtool.m4 | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit c29cb39a57d5ab516dbfbd219706ab4392d1b605
+Merge: 6af6e5f f6c5116
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Dec 9 11:31:22 2013 +1000
+
+    Texinfo 5 fixes + warn fixes from Nelson
+    
+    * merges:
+      Avoid warnings of unused parameter.
+      Avoid warning about dangling else
+      Avoid warning about deprecated XKeycodeToKeysym
+      Do not complain in configure when not in git workspace
+      Make texinfo 5.x not break the build
+
+commit f6c5116b1cb279a24c795916de329c7084d319ab
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 8 19:09:59 2013 -0500
+
+    Avoid warnings of unused parameter.
+    
+       The old way of doing if(parameter); elicits other warnings such as if without a body.
+       While one could "fix" that in clang with placing the ; on the next line, using
+       SXE_UNUSED seems much saner, as it coveys intent.
+    
+       * src/ent/ent-mpc.c: move prototype of mpc_set_ui_fr to ent-mpc.h
+       * src/ent/ent-mpc.h: declare mpc_set_ui_fr for usage by alloc.c
+       * src/ent/ent-float.c (mark_float): Removed if, marked as SXE_UNUSED
+       * src/ent/ent-float.c (float_equal): ditto
+       * src/ent/ent-float.c (ent_rem_FLOAT_T): ditto
+       * src/ent/ent-float.c (ent_rem_FLOAT_T_INT_T): ditto
+       * src/ent/ent-gaussian.c (bigg_equal): ditto.
+       * src/ent/ent-gaussian.c (bigg_hash): ditto.
+       * src/ent/ent-gaussian.c (bigg_mark): ditto.
+       * src/ent/ent-gaussian.c (bigg_finalise): ditto.
+       * src/ent/ent-indef.c (indef_hash): ditto.
+       * src/ent/ent-mpc.c (bigc_finalise): ditto.
+       * src/ent/ent-mpfr.c (bigfr_finalise): ditto.
+       * src/ent/ent.c (default_real_precision_changed): ditto.
+       * src/alloc.c: include ent-mpc.h when it is defined so that bigc uses the
+       proper definitions/prototypes
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/alloc.c            |  1 +
+ src/ent/ent-float.c    | 14 ++++----------
+ src/ent/ent-gaussian.c | 20 ++++----------------
+ src/ent/ent-indef.c    |  5 +----
+ src/ent/ent-mpc.c      |  6 +-----
+ src/ent/ent-mpc.h      |  8 ++++++++
+ src/ent/ent-mpfr.c     |  5 +----
+ src/ent/ent.c          | 11 +++--------
+ 8 files changed, 23 insertions(+), 47 deletions(-)
+
+commit 20e812d1ed069aee8cdb9868b57fafec9197d995
+Merge: a705a97 e045f09
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 8 18:59:15 2013 -0500
+
+    Merge remote-tracking branch 'myremote/for-steve' into for-steve
+
+commit a705a974fb4c585778827d45f19b8c27e0e3bfa9
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 8 18:58:16 2013 -0500
+
+    Avoid warning about dangling else
+    
+       * lib-src/etags.c (get_language_from_filename): Create block scope on
+         outer if
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/etags.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit e045f09be81787fec1dd6a444d6e0ca25d4b83a0
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 8 16:05:21 2013 -0500
+
+    Avoid warning about deprecated XKeycodeToKeysym
+    
+            * m4/sxe-gui.m4 (SXE_CHECK_XTOOLKITS): Check for XKBlib.h and
+         if it exists check for XKbKeycodeToKeysym availability
+       * src/ui/X11/event-Xt.c: Include XKBlib.h if available
+       * src/ui/X11/event-Xt.c (whatever): Use XKbKeycodeToKeysym instead
+         of XKeycodeToKeysym if available
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ m4/sxe-gui.m4         | 9 +++++++++
+ src/ui/X11/event-Xt.c | 8 ++++++++
+ 2 files changed, 17 insertions(+)
+
+commit f33e320fa18a63107726355deb186c15bd70caed
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 8 14:08:31 2013 -0500
+
+    Do not complain in configure when not in git workspace
+    
+        * configure.ac: redirect to /dev/null the git describe so that git
+          error message is not in output.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 28048c31d319fa17172064ad3d46e2345f381a22
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Dec 8 13:59:33 2013 -0500
+
+    Make texinfo 5.x not break the build
+    
+       These changes are mostly promoting sections to chapters and subsections to sections.
+    
+       * info/custom.texi (Declaring Groups): Promote to chapter
+       * info/custom.texi (Declaring Variables): Ditto.
+       * info/custom.texi (Declaring Faces): Ditto.
+       * info/custom.texi (Usage for Package Authors): Ditto.
+       * info/custom.texi (Utilities): Ditto.
+       * info/custom.texi (The Init File): Ditto
+       * info/custom.texi (Wishlist): Ditto
+       * info/widget.texi (Introduction): Ditto
+       * info/widget.texi (User Interface): Ditto
+       * info/widget.texi (Programming Example): Ditto
+       * info/widget.texi (Setting Up the Buffer): Ditto
+       * info/widget.texi (Basic Types): Ditto
+       * info/widget.texi (Sexp Types): Ditto
+       * info/widget.texi (Widget Properties): Ditto
+       * info/widget.texi (Defining New Widgets): Ditto
+       * info/widget.texi (Widget Browser): Ditto
+       * info/widget.texi (Widget Minor Mode): Ditto
+       * info/widget.texi (Utilities): Ditto
+       * info/widget.texi (Widget Wishlist): Ditto
+       * info/widget.texi (Widget Internals): Ditto
+    
+       * info/lispref/edebug-inc.texi (Instrumenting Macro Calls): Use
+       itemize instead of table. Texinfo 5 refuses a table with @bullet.
+    
+       * info/lispref/faces.texi (Face Properties): Add @item for each paragraph.
+    
+       * info/sxemacs-faq.texi: Inline tex for removed @hfill
+       * info/term.texi: remove problematic start @
+       * info/term.texi: Use {} instead of ()
+    
+       * info/lispref/packaging.texi (Makefile Targets): Promote to section
+       * info/sppm.texi (Voting): Ditto
+       * info/sppm.texi (Coding Style): Ditto.
+       * info/sppm.texi (Setting up a publicly accessible repo): Ditto
+       * info/sppm.texi (Setting up a publicly accessible repo): Ditto
+       * info/widget.texi (Editable text fields): Ditto
+       * info/widget.texi (The link widget): Ditto
+       * info/widget.texi (The url-link widget): Ditto
+       * info/widget.texi (The push-button widget): Ditto
+       * info/widget.texi (The editable-field widget): Ditto
+       * info/widget.texi (The menu-choice widget): Ditto
+       * info/widget.texi (The radio-button-choice widget): Ditto
+       * info/widget.texi (The item widget): Ditto
+       * info/widget.texi (The choice-item widget): Ditto
+       * info/widget.texi (The toggle widget): Ditto
+       * info/widget.texi (The checkbox widget): Ditto
+       * info/widget.texi (The checklist widget): Ditto
+       * info/widget.texi (The editable-list widget): Ditto
+       * info/widget.texi (The group widget): Ditto
+       * info/widget.texi (constants): Ditto
+       * info/widget.texi (generic): Ditto
+       * info/widget.texi (atoms): Ditto
+       * info/widget.texi (composite): Ditto
+       * info/widget.texi (The Widget and Type Structures): Ditto
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ info/custom.texi             | 14 ++++-----
+ info/lispref/edebug-inc.texi |  5 ++--
+ info/lispref/faces.texi      |  4 +++
+ info/lispref/packaging.texi  |  2 +-
+ info/sppm.texi               |  8 +++---
+ info/sxemacs-faq.texi        |  2 +-
+ info/term.texi               |  4 +--
+ info/widget.texi             | 68 ++++++++++++++++++++++----------------------
+ 8 files changed, 56 insertions(+), 51 deletions(-)
+
+commit 6af6e5f341e434e442499168cc26e0c97178fdcd
+Merge: cb118b6 3e9fb87
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Dec 1 15:12:03 2013 +1000
+
+    memory fix from Nelson
+    
+    * merges:
+      Fix heap free in __pntw_1dict
+
+commit 3e9fb8750ab759e49f2f50cf3417d83753b180b2
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Nov 30 20:06:24 2013 -0500
+
+    Fix heap free in __pntw_1dict
+    
+        * src/map.c(__pntw_1dict): when array is allocated in the heap, the primary
+          address is kept in keys, but later vals is freed. This is clearly a bug,
+          which can corrupt the heap in weird ways that are untraceable.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/map.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit cb118b68d6c6e77968c4e663c2e06a3b7c17cce6
+Merge: 3542a3a 2c5153f
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Oct 6 20:24:54 2013 +1000
+
+    Revert my tmp workaround for 162
+    
+    * revert-tmp-fix:
+      Revert the temporary workaround for bug #162
+
+commit 2c5153f2ed84a86570d2a45341f5f06cb9c760c5
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Oct 6 20:22:53 2013 +1000
+
+    Revert the temporary workaround for bug #162
+    
+       * lisp/build-autoloads.el (find-emod-directories): Revert the
+       workaround.
+    
+       * lisp/emod-utils.el (emodule-completions): Ditto.
+    
+       * lisp/emod-utils.el (list-modules): Ditto.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/build-autoloads.el | 22 +++++++---------------
+ lisp/emod-utils.el      | 25 ++++++++-----------------
+ 2 files changed, 15 insertions(+), 32 deletions(-)
+
+commit 3542a3a5f02d6ba21333bc38731491015eb8935e
+Merge: 01dca6f f303f85
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Oct 6 20:11:10 2013 +1000
+
+    Closes bug #162 from Sebastian
+    
+    * merges:
+      Summary: pass decoration triple to mapfam worker routines by value (instead of by-ref) Keywords: fix bug 162
+
+commit f303f85925cb02173488ecc9811599d20325dc98
+Author: Sebastian Freundt <hroptatyr@fresse.org>
+Date:   Sun Oct 6 07:56:53 2013 +0000
+
+    Summary: pass decoration triple to mapfam worker routines by value (instead of by-ref)
+    Keywords: fix bug 162
+    
+    This changeset fixes the issues described in bug 162
+    (http://issues.sxemacs.org/show_bug.cgi?id=162).
+    
+    The mapfam worker routine __pntw_1seq() (operate pointwise on just one sequence)
+    gets its decoration values (the initiator, the separator and the terminator) by
+    value now, i.e. on the stack.  Whereas before it got a pointer to a stack-alloc'd
+    struct in the main mapfam routine.
+    
+    Gcc 4.8.1 probably changed the memory layout or scope rules for pointers to stack
+    alloc'd objects slightly, we will never know, as this hasn't been investigated.
+    
+    Anyway, it's probably good to keep an eye out for similar problems that match
+    this pattern.
+
+ src/map.c | 75 +++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 35 insertions(+), 40 deletions(-)
+
+commit 01dca6f2f363538734e654e0bc9ed47618aee468
+Merge: b4fc89e bd84934
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Oct 5 12:44:50 2013 +1000
+
+    Temp work-around for bug #162
+    
+    * bldfix:
+      Temporary work-around for bug 162
+
+commit bd84934806706368e5f6349cebc79c6b372f7cf0
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Oct 5 12:36:57 2013 +1000
+
+    Temporary work-around for bug 162
+    
+    http://issues.sxemacs.org/show_bug.cgi?id=162
+    
+       * lisp/build-autoloads.el (find-emod-directories): Use #'mapconcat
+       instead of #'mapfam to work-around bug 162
+    
+       * lisp/emod-utils.el (emodule-completions): Ditto.
+    
+       * lisp/emod-utils.el (list-modules): Ditto.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/build-autoloads.el | 22 +++++++++++++++-------
+ lisp/emod-utils.el      | 25 +++++++++++++++++--------
+ 2 files changed, 32 insertions(+), 15 deletions(-)
+
+commit b4fc89eb4bfa765772f9287573021fb442a71673
+Merge: 57fefb0 57bfdeb
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Sep 3 09:08:37 2013 +1000
+
+    Add logo XCF
+    
+    * logo:
+      Delete XCF's superseded by SXEmacs.xcf
+      Add the GIMP source xcf for SXEmacs logo/banner
+
+commit 57bfdeb5a974980da409c00777051d039f46d6d3
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Sep 3 08:53:39 2013 +1000
+
+    Delete XCF's superseded by SXEmacs.xcf
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ contrib/banner.sxemacs.xcf | Bin 1280460 -> 0 bytes
+ contrib/sxemacs-grid.xcf   | Bin 1246487 -> 0 bytes
+ contrib/sxemacs-nogrid.xcf | Bin 998732 -> 0 bytes
+ 3 files changed, 0 insertions(+), 0 deletions(-)
+
+commit 789d7570885598dc579b86efbff322e889f7bcb4
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Sep 2 23:20:31 2013 +1000
+
+    Add the GIMP source xcf for SXEmacs logo/banner
+    
+    It is an amalgamation of the 3 xcf files currently in contrib,
+    namely: banner.sxemacs.xcf sxemacs-grid.xcf sxemacs-nogrid.xcf
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ etc/SXEmacs.xcf | Bin 0 -> 1270984 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit 57fefb0d58a1b433931bb71379c7540b03686545
+Merge: c4f7e3b f99df2e
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Sep 2 11:10:11 2013 +1000
+
+    Add original .xcf logo images
+    
+    * merges:
+      Add SXEmacs logo XCF files
+
+commit f99df2e1a260ff213af626e04e422ebf5ffc2c3e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Sep 1 18:22:26 2013 -0400
+
+    Add SXEmacs logo XCF files
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ contrib/banner.sxemacs.xcf | Bin 0 -> 1280460 bytes
+ contrib/sxemacs-grid.xcf   | Bin 0 -> 1246487 bytes
+ contrib/sxemacs-nogrid.xcf | Bin 0 -> 998732 bytes
+ 3 files changed, 0 insertions(+), 0 deletions(-)
+
+commit c4f7e3be6c7b0b51da4938b9a64d87e17ebd1772
+Merge: 438b9a2 f976b3b
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Aug 30 01:32:19 2013 +1000
+
+    Fix the fix for bug 160 from Nelson
+    
+    * merges:
+      Bug fix: Fix for bug 160 broke -nw
+
+commit f976b3bf3f0e298c91a26ec10bbd3d6eb50f785d
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Thu Aug 29 07:54:46 2013 -0400
+
+    Bug fix: Fix for bug 160 broke -nw
+    
+       sxemacs -nw would quit right after startup
+    
+       * src/lread.c (locate_file_in_directory_mapper): Only close
+       closure->fd if non-zero, which would be the result of the attempt
+       to check the file using access.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/lread.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit 438b9a2456b1d5e16a1f136a5f6799662cbdb7ce
+Merge: adc5b24 289b9d8
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Aug 26 08:00:42 2013 +1000
+
+    Closes Bug 161
+    
+    * merges:
+      Bug fix: 161 etags munges relative filenames (any path containing "..") in TAGS files
+
+commit 289b9d856af2c306368a38cb4771d42063a63894
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 25 14:33:44 2013 -0400
+
+    Bug fix: 161 etags munges relative filenames (any path containing "..") in TAGS files
+    
+       Two bugs fixed here. One was Coverity induced, but another one,
+       the strcpy -> memmove change is a real issue regarding copying in
+       overlapping memory.
+    
+       * lib-src/etags.c (relative_filename): Correct off-by-1 error in
+       counting down remaining bytes.
+    
+       * lib-src/etags.c (absoulte_filename): Change strcpy to memmove
+       since this is a guaranteed overlapping memory copy, and strcpy is
+       not guaranteed by POSIX to handle it properly.
+       http://pubs.opengroup.org/onlinepubs/9699919799/functions/stpcpy.html
+    
+       "If copying takes place between objects that overlap, the behavior is undefined."
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/etags.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit adc5b2446a560277cfca12b1fe126473daf78988
+Merge: 9901a2f ffcdeff
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Aug 25 08:34:13 2013 +1000
+
+    Closes Bug 160
+    
+    * merges:
+      Bug-fix: 160 #'package-suppress, `load-suppress-alist' don't suppress anything
+
+commit ffcdefff2cbd1f1ff23bce9264be9131b41b3daf
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Aug 24 17:53:43 2013 -0400
+
+    Bug-fix: 160 #'package-suppress, `load-suppress-alist' don't suppress anything
+    
+    There were 3 different bugs conspiring for this:
+    
+       * lisp/packages.el (package-suppress): the value for filename
+       added to load-suppress-alist contained the load-file-name instead
+       of using it as a basis for the directory of the file to exclude.
+    
+       * src/lread.c (suppressedp_loop): No file was ever being
+       considered for exclusion because the check for CONSP was being
+       made against the acons function pointer instead of the _acons_
+       iteration variable.
+    
+       * src/lread.c (locate_file_in_directory_mapper): When a file was
+       suppressed, the value of fd in the closure was left as is. This
+       not only leaked file descriptors but also made the search end
+       because in the end this is was the value considered to whether
+       there was a valid file to load or not, because closure.fd is the
+       return value of locate_file_in_directory.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/packages.el | 2 +-
+ src/lread.c      | 5 ++++-
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+commit 9901a2f6fcebd9f6b9ec3cac19ec415da94196e9
+Merge: 50c1e17 65e6d9e
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Aug 12 17:27:17 2013 +1000
+
+    contrib upd from Nelson
+    
+    * merges:
+      Remove unneeded git-to-steve.sh. Use git-for-steve.sh instead
+
+commit 65e6d9e7c52f423328558bd0d7fa1ea9a781ff2c
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 11 15:12:27 2013 -0400
+
+    Remove unneeded git-to-steve.sh. Use git-for-steve.sh instead
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ contrib/git-to-steve.sh | 85 -------------------------------------------------
+ 1 file changed, 85 deletions(-)
+
+commit 50c1e1747db3cee091ba27750d479c5cad8b3915
+Merge: adbbab7 c04986f
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Aug 11 09:12:14 2013 +1000
+
+    Small package-get fix from Nelson
+    
+    * merges:
+      Tiny whitespace cleanup
+      Fix package update from local repository mirror.
+
+commit c04986f95b6fe2733bc057a05b70c8faf1496da9
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Aug 11 09:09:17 2013 +1000
+
+    Tiny whitespace cleanup
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/package-get.el | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 8fde3aee8bbec76a09d6882b8390800a76663ee4
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Aug 3 15:56:27 2013 -0400
+
+    Fix package update from local repository mirror.
+    
+       When updating packages from a local repository, package-get would
+       attempt to remove the file.
+       While this is useful behaviour for files downloaded from an update
+       site, for local directories it is not a good thing ;)
+    
+       * lisp/package-get.el (package-get): move host to the uppermost
+       let. Surround all (delete-file full-package-filename) with (unless
+       (null host)
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lisp/package-get.el | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit adbbab7df114cc3e561d0f0f687b8ccbe978da1e
+Merge: 5e62876 67bef31
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Mar 11 14:41:34 2013 +1000
+
+    A few audio fixes/work-arounds from Nelson
+    
+    * njsf-snd:
+      Whitespace cleanup
+      Fix libao usage
+      Cleanup some jack server interactions
+      Fix typo in semaphore.h
+      Fix SXEmacs semaphores so that they deal with spurius pthreads conditional variable wakeups
+      Fix SoX media replay by closing and reopening stream on rewind because sox_seek is broken
+      Fix some synchronization issues. Improve audio job debug output
+
+commit 67bef3149361de10d38e1aeea6a1aca109930d9e
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jan 21 11:52:24 2013 +1000
+
+    Whitespace cleanup
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/media/media-sox.c  | 10 +++++-----
+ src/media/sound-jack.c |  4 ++--
+ src/media/sound.c      |  2 +-
+ 3 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 70a04894a990df17ad6d43132b501609d3774150
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jan 20 18:44:08 2013 -0500
+
+    Fix libao usage
+    
+       * src/media/sound-ao.c (sound_ao_create): Zero out sample format
+       structure. Newer libao add a matrix field, which when non-null
+       could cause a crash. This will make ao support more future proof
+       to pointer dereference in future struct changes
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/sound-ao.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f70c41c0682f65023f3741058ba362b0913d8924
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jan 20 17:21:40 2013 -0500
+
+    Cleanup some jack server interactions
+    
+       * src/media/sound-jack.c (sound_jack_subthread_create): Properly
+       close the client upon failure to complete subthread create.
+    
+       * src/media/sound-jack.c (sound_jack_play): Improve
+       logging. Properly return status code of 0 upon success and 1 on
+       failure. Also cleanup the device data of the job.
+    
+       * src/media/sound-jack.c (sound_jack_change_state): properly set
+       the state of the job upon start. Add code to the log of the
+       unknown event message.
+    
+       * src/media/sound-jack.c (sound_jack_process): Lock the job while
+       processing the jack requests. Debug log the play state when draining
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/sound-jack.c | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+commit 08117313a4d872ab08bdcfe033c46c5cb1feea71
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jan 20 17:17:10 2013 -0500
+
+    Fix typo in semaphore.h
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/semaphore.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 42de8526277141d688c3e1da0efd878a5585973b
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jan 20 17:14:31 2013 -0500
+
+    Fix SXEmacs semaphores so that they deal with spurius pthreads conditional variable wakeups
+    
+       * src/semaphore.h (struct sxe_semaphore_s): add a generation count
+       * src/semaphore.h (struct sxe_msemaphore_s): ditto
+    
+       * src/semaphore.h (sxe_msemaphore_init): initialize generation
+       * src/semaphore.h (sxe_semaphore_init): ditto
+    
+       * src/semaphore.h (sxe_msemaphore_trigger): increment generation before signal
+       * src/semaphore.h (sxe_msemaphore_trigger): ditto
+       * src/semaphore.h (sxe_msemaphore_trigger_all): ditto
+       * src/semaphore.h (sxe_msemaphore_trigger_all): ditto
+    
+       * src/semaphore.h (sxe_msemaphore_synchronise): Wait again if
+       generation is still the same (ie no signal occurred).
+    
+       * src/semaphore.h (sxe_msemaphore_synchronise): ditto.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/semaphore.h | 26 ++++++++++++++++++++++----
+ 1 file changed, 22 insertions(+), 4 deletions(-)
+
+commit 549d757d733682cd019e13c97d2fa1643f6ade2e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jan 20 16:19:07 2013 -0500
+
+    Fix SoX media replay by closing and reopening stream on rewind because sox_seek is broken
+    
+       * src/media/media-sox.c (media_sox_rewind): Close and reopen the
+       media stream if SXE_SOX_CAN_SEEK is not defined or sxe_sox_seek
+       fails. If reopen fails, cleanup the media to improve handling of
+       the rest of the media system.
+    
+       * src/media/media-sox.c (media_sox_read): Improve logging message
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/media-sox.c | 48 ++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 44 insertions(+), 4 deletions(-)
+
+commit 65eaba6f51c7e693c09121ab667b8622323cb0ab
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jan 20 16:15:36 2013 -0500
+
+    Fix some synchronization issues. Improve audio job debug output
+    
+       * src/media/sound.c (make_audio_job): Always initialie the mutex
+       since some sound backends are multi-threaded and will use the
+       mutex. Jack and AO are examples.
+    
+       * src/media/sound.c (make_audio_job): Improve the job log message.
+    
+       * src/media/sound.c (play-media-stream-synchronously): Improve
+       play log message to make clear this is synchronous play.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/media/sound.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+commit 5e62876e5927f8745e5a44376dca8bb82e9c9b32
+Merge: 8729eec 1be84da
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jan 20 16:59:34 2013 +1000
+
+    bld-chain fix from Nelson
+    
+    * merges:
+      Only include ent-mpfr.h if HAVE_MPFR to fix build when mpfr is not available
+
+commit 1be84da32f2cba8b5efa4a3ab4a0a7f4370cd853
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jan 19 17:41:26 2013 -0500
+
+    Only include ent-mpfr.h if HAVE_MPFR to fix build when mpfr is not available
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/ent/ent-gaussian.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 8729eec073cb5652fe84dbc425c350fe4a535d3b
+Merge: bfcc99e 427f4c8
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jan 20 07:40:42 2013 +1000
+
+    autogen.sh update from Nelson
+    
+    * merges:
+      Allow autogen.sh to do the right thing with newer libtool/autoconf
+
+commit 427f4c854808045505589648c94cf1d7c042170e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jan 19 13:43:40 2013 -0500
+
+    Allow autogen.sh to do the right thing with newer libtool/autoconf
+    
+       * autogen.sh (libtool_ver): Force the run of libtoolize --copy
+       --ltdl before autoreconf so that sxe-libtool.m4 does not cause
+       an autoreconf error (and therefore no configure generated)
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ autogen.sh | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit bfcc99e4afa2313976aec89c4d98a6758d25e942
+Merge: db81b6f fc3b9c3
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Thu Jan 10 09:33:41 2013 +1000
+
+    FFI updates from Evgeny
+    
+    * merges:
+      files.el:    - Check file existance when openning file with      `find-file-magic-files-alist'
+      ffi-wand:   "logo" is unsupported format for read
+      [fix] effi: ffi-slot-offset        - calculate offset correctly
+
+commit db81b6f5a1e41dcae3a587936f4d467b98bd2c1b
+Merge: aa30c7a 1b6e263
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jan 6 12:31:58 2013 +1000
+
+    Fix TTY cursor reset problem
+    
+    * tty-cursor:
+      Fix the age old problem of TTY cursor being reset on exit
+
+commit 1b6e2638f91b3a7a1f30f2791b5434dff7931747
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jan 6 12:21:45 2013 +1000
+
+    Fix the age old problem of TTY cursor being reset on exit
+    
+    This changeset stops SXEmacs from resetting the text cursor to block on
+    exit on a Linux console.  It is actually still reset, but it is reset
+    correctly and now you'll end up with a "normal" cursor instead of a "very
+    visible" one.
+    
+    One side-effect of this change is that SXEmacs on a console will now use a
+    block cursor, but that just adds consistency because that is how things
+    are in X11 and Xterm anyway.
+    
+       * src/ui/TTY/console-tty.h (struct tty_console): Add
+       `cursor_invisible_' and `hard_cursor_' for invisible and hard to
+       see cursors.
+    
+       * src/ui/TTY/redisplay-tty.c (init_tty_for_redisplay): Set
+       cursor_visible_ to "vs" and cursor_normal_ to "ve" like they
+       should be according to terminfo(5).
+       Also add cursor_invisible_ ("vi"), and hard_cursor_ ("HC").
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/ui/TTY/console-tty.h   |  2 ++
+ src/ui/TTY/redisplay-tty.c | 14 ++++++++------
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+commit fc3b9c3c87ae7355045dfad122d953e90f0d1011
+Author: lg <lg@lg-XPS-L521X.(none)>
+Date:   Fri Dec 28 11:01:26 2012 +0400
+
+    files.el:
+       - Check file existance when openning file with
+         `find-file-magic-files-alist'
+
+ lisp/files.el | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 0f8df72dfc57273f4dc5f1c6c4e2647059c03b40
+Author: lg <lg@lg-XPS-L521X.(none)>
+Date:   Fri Dec 28 11:00:12 2012 +0400
+
+    ffi-wand:
+      "logo" is unsupported format for read
+
+ lisp/ffi/ffi-wand.el | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7b58fd38c765a7730e9685fb631401171affefa4
+Author: lg <lg@lg-XPS-L521X.(none)>
+Date:   Fri Dec 28 10:06:27 2012 +0400
+
+    [fix] effi: ffi-slot-offset
+           - calculate offset correctly
+    
+    [add] effi:
+           - x86_64 alignment support
+
+ src/effi.c | 51 +++++++++++++++++++++------------------------------
+ 1 file changed, 21 insertions(+), 30 deletions(-)
+
+commit aa30c7afddd4939c202f2e46efe10b0b55509a8d
+Merge: 06b081c 093e8af
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Sep 3 08:09:45 2012 +1000
+
+    Docstring and Makefile tweak from Nelson
+    
+    * merges:
+      Fix docstring for insert-string
+      Small cleanup of the recursive make calls
+
+commit 093e8afb746801a64f5aa1f70eb0046bf630fae3
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Aug 12 18:22:15 2012 -0400
+
+    Fix docstring for insert-string
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/editfns.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ad6834da706febb3978e66dd9626b6ad81f4c13a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Aug 4 22:44:11 2012 -0400
+
+    Small cleanup of the recursive make calls
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ Makefile.am | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit 06b081c5e83d3585eadade9d1ab298dc95c1d8a5
+Merge: e44ed11 2451438
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Jul 31 17:02:50 2012 +1000
+
+    Fixes bug 158 from Nelson
+    
+    * merges:
+      Fix build failure of cl in newer gcc and bison combinations
+      Fix build process so that subdir failures cause actual failure, even when CFLAGS have a k somewhere...
+
+commit 24514386aa4c47fb13ad69eefaf587b1a1e1341a
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Mon Jul 30 22:51:14 2012 -0400
+
+    Fix build failure of cl in newer gcc and bison combinations
+    
+       * modules/cl/cl-loop.h: Include cl-loop-parser.h only after
+       cl_loop_sentence_t is defined.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/cl/cl-loop.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 6cadda014e92b2cb88656d7cfe8e1135a544a7dd
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Mon Jul 30 22:49:52 2012 -0400
+
+    Fix build process so that subdir failures cause actual failure, even when CFLAGS have a k somewhere...
+    
+       * Makefile.am (beta): Use -w MAKEFLAGS instead of RECURSIVE_MAKE_ARGS
+       * Makefile.am (time-beta): Ditto.
+       * Makefile.am (time-all): Ditto.
+       * Makefile.am (time-check): Ditto.
+       * Makefile.am (build-report): Ditto.
+       * Makefile.am (time-build-report): Ditto.
+       * PROBLEMS:  Add explanation for failure.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ Makefile.am | 18 +++++++++---------
+ PROBLEMS    | 14 +++++++++++++-
+ 2 files changed, 22 insertions(+), 10 deletions(-)
+
+commit e44ed11ee1156f2065d0b221372bea4d11640ef4
+Merge: cd8d598 6d20705
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jul 1 14:23:35 2012 +1000
+
+    Fix xstrncpy usage, also fixes etags. From Nelson
+    
+    * merges:
+      Fix usage of xstrncpy
+      Simple comment reflow to 80 cols
+      Fix etags xstrncpy usage, and some other niceties
+
+commit 6d207059b8f05c444001ce838320b761d4843130
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jun 30 23:03:17 2012 -0400
+
+    Fix usage of xstrncpy
+    
+       * lib-src/fakemail.c (make_file_preface): make sure the len
+       argument to xstrcpy is always the available buffer len
+    
+            * lib-src/ootags.c: Only define etags_strchr and etags_strrchr if
+       configure did not detect the right ones.
+    
+            * lib-src/ootags.c (consider_token): Ditto
+    
+            * lib-src/ootags.c (C_entries): Ditto
+    
+            * lib-src/ootags.c (Pascal_functions): Ditto
+    
+            * lib-src/ootags.c (Prolog_functions): Ditto
+    
+            * lib-src/ootags.c (Erlang_functions): Ditto
+    
+       * lib-src/ootags.c (savenstr): Ditto.
+    
+            * lib-src/ootags.c (substitute): Properly account for remaining
+       buffer available.
+    
+       * lib-src/gnuserv.c (handle_ipc_request): use buffer size instead
+       of message length for copy. also no need to \0 terminate with
+       xstrncpy
+    
+       * lib-src/pop.c (pop_stat): Use xstrncpy here.
+    
+       * src/dumper.c (pdump_load): No need for \0 termination here.
+    
+       * src/emacs.c (make_docfile): use remaining size of buffer, not
+       len of source..
+    
+       * src/sysdep.h (x__dirname): Use just len. xstrncpy will stop early.
+    
+       * src/sysdep.h (xdirname): Oops, need +1 for the \0 terminator.
+    
+       * src/ui/redisplay.c (add_bufbyte_string_runes): Account for the \0 terminator.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/fakemail.c |  12 +++---
+ lib-src/gnuserv.c  |   4 +-
+ lib-src/ootags.c   | 116 ++++++++++++++++++++++++++++-------------------------
+ lib-src/pop.c      |   4 +-
+ src/dumper.c       |   1 -
+ src/emacs.c        |   6 +--
+ src/sysdep.h       |   6 +--
+ src/ui/redisplay.c |   4 +-
+ 8 files changed, 79 insertions(+), 74 deletions(-)
+
+commit d9bf699fecd471a15a605e119f8d1cfcef71a0d0
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jun 30 22:50:55 2012 -0400
+
+    Simple comment reflow to 80 cols
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ src/extents.h | 41 +++++++++++++++++++++++------------------
+ 1 file changed, 23 insertions(+), 18 deletions(-)
+
+commit e3f6b3844a11e8425a5be0e2e82b29021bb3f92f
+Merge: b334efb 73ea3f2
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jun 30 22:28:41 2012 -0400
+
+    Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit b334efbeebb3434fffd6bbcf70ae9979b4fb384e
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sat Jun 30 22:28:19 2012 -0400
+
+    Fix etags xstrncpy usage, and some other niceties
+    
+       * lib-src/etags.c: Make etags_strchr, etags_strrchr, etags_strcasecmp,
+              etags_strncasecmp only be defined if they were not detected by configure.
+    
+       * lib-src/etags.c(consider_token): Adjust strncpy and string size.
+    
+       * lib-src/etags.c(C_entries): Ditto.
+    
+       * lib-src/etags.c(Pascal_functions): Ditto.
+    
+       * lib-src/etags.c(HTML_labels): Ditto.
+    
+       * lib-src/etags.c(Prolog_functions): Ditto.
+    
+       * lib-src/etags.c(Erlang_functions): Ditto.
+    
+       * lib-src/etags.c(substitute): Properly account for buffer size to
+       supply to xstrncpy.
+    
+       * lib-src/etags.c(readline_internal): Only reallocate after size
+       is enough. Also correct the buffer available supplied to xstrncpy.
+    
+       * lib-src/etags.c(savenstr): correct the size of buffer parameter
+       supplied to xstrncpy.
+    
+       * lib-src/etags.c(linebuffer_setlen): Only reallocate after size
+       is enough.
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ lib-src/etags.c | 251 +++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 132 insertions(+), 119 deletions(-)
+
+commit cd8d598153e1713aae9608b20e6928cb74be7a96
+Merge: 547d05c b028ccf
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 27 16:36:37 2012 +1000
+
+    Another peanuthorst to horst rename
+    
+    * quickfix:
+      Rename peanuthorst to horst in etc/Makefile.am
+
+commit b028ccf9889224f8938e1c4ed6b5ffb38fb048e8
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 27 16:36:11 2012 +1000
+
+    Rename peanuthorst to horst in etc/Makefile.am
+    
+       * etc/Makefile.am (dist_photos_DATA): peanuthorst -> horst
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ etc/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 547d05cc4791bc84538166171281a562b40ddc9d
+Merge: 81c0d7f c45dcc0
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 27 16:17:28 2012 +1000
+
+    PeanutHorst is now Horst
+    
+    * quickfix:
+      Rename PeanutHorst to Horst in about.el
+
+commit c45dcc0b1a78933940b1ca819559658fd84af297
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 27 16:16:31 2012 +1000
+
+    Rename PeanutHorst to Horst in about.el
+    
+       * lisp/about.el (about-personal-info): PeanutHorst -> Horst.
+    
+       * lisp/about.el (about-hacker-contribution): Ditto.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/about.el | 34 +++++++++++++++++-----------------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
+
+commit 81c0d7fc3fd0434e24baa42039cdd0d0bb46f6f5
+Merge: 296b7e0 533f88c
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 27 16:09:56 2012 +1000
+
+    Photo optimisation from Horst
+    
+    * merges:
+      optimised steve's photo, updated horst's photo
+
+commit 296b7e0f9372a85c3741488c2129a0225f7fdef9
+Merge: c4d5211 22d8092
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 27 16:05:13 2012 +1000
+
+    Minor SoX updates
+    
+    * bug-141:
+      Minor updates and compiler warning fixes in SoX
+      Fix compiler warnings in media-sox.c
+
+commit 22d8092c0a5f515cc226320d6e29123e90f23881
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 27 15:57:57 2012 +1000
+
+    Minor updates and compiler warning fixes in SoX
+    
+       * src/media/media-sox.h (sxe_sox_ssize_t): SoX just uses size_t
+       these days. So set to that if not HAVE_SOX_SSIZE_T.
+    
+       * src/media/media-sox.c (media_sox_rewind): SEEK_SET ->
+       SOX_SEEK_SET.
+    
+       * src/media/media-sox.c (media_sox_close): Fix format spec.
+    
+       * src/media/media-sox.c (media_sox_read): Ditto.
+    
+       * src/media/media-sox.c (media_sox_rewind): Ditto.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/media/media-sox.c | 10 +++++-----
+ src/media/media-sox.h |  2 +-
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+commit 533f88c5dfc75584ca5b7fbe55195e47eb1ef57d
+Author: Horst G. Burkhardt III <horst@sxemacs.org>
+Date:   Wed Jun 27 15:05:20 2012 +1000
+
+    optimised steve's photo, updated horst's photo
+    
+    Signed-off-by: Horst G. Burkhardt III <horst@sxemacs.org>
+
+ etc/photos/horst.png        | Bin 0 -> 36162 bytes
+ etc/photos/horstm.png       | Bin 0 -> 12075 bytes
+ etc/photos/peanuthorst.png  | Bin 32874 -> 0 bytes
+ etc/photos/peanuthorstm.png | Bin 12180 -> 0 bytes
+ etc/photos/steve.png        | Bin 49065 -> 48621 bytes
+ etc/photos/stevem.png       | Bin 24988 -> 16719 bytes
+ lisp/about.el               |   6 +++---
+ 7 files changed, 3 insertions(+), 3 deletions(-)
+
+commit c4d5211d9cd46432ce64e4e92dcc18f3e8a77034
+Merge: d95ba78 9da3276
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 27 00:40:43 2012 +1000
+
+    PROBLEMS update from Horst
+    
+    * merges:
+      Updated PROBLEMS as per last commit
+      Cleaning up PROBLEMS file, now it looks like we've been productive since forking; added PROBLEMS.XEmacs for older issues pertaining to XE
+
+commit bef4a7e11dd057d710809995a1a03332219c735b
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jun 27 00:39:35 2012 +1000
+
+    Fix compiler warnings in media-sox.c
+    
+       * src/media/media-sox.c (media_sox_open): Shush compiler, give
+       `file_len' unused attribute.
+    
+       * src/media/media-sox.c (media_sox_read): Ditto for `framesize'.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/media/media-sox.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 9da3276ce1cc266104079b2e16c6069877b9993e
+Author: Horst G. Burkhardt III <horst@sxemacs.org>
+Date:   Wed Jun 27 00:04:18 2012 +1000
+
+    Updated PROBLEMS as per last commit
+    
+    Signed-off-by: Horst G. Burkhardt III <horst@sxemacs.org>
+
+ PROBLEMS | 2107 +-------------------------------------------------------------
+ 1 file changed, 3 insertions(+), 2104 deletions(-)
+
+commit f8258c0a238e1e6c77e29aaf9ca417e16610e204
+Author: Horst G. Burkhardt III <horst@sxemacs.org>
+Date:   Tue Jun 26 22:49:14 2012 +1000
+
+    Cleaning up PROBLEMS file, now it looks like we've been productive since forking; added PROBLEMS.XEmacs for older issues pertaining to XE
+    
+    Signed-off-by: Horst G. Burkhardt III <horst@sxemacs.org>
+
+ PROBLEMS.XEmacs | 1965 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 1965 insertions(+)
+
+commit d95ba78fecab8fdbc797ecfee3285dd81e0ff451
+Merge: 206a9a4 4145d23
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Jun 26 16:49:20 2012 +1000
+
+    Bring back PulseAudio autodetection
+    
+    * pulse:
+      Bring back auto-detection of PulseAudio
+
+commit 4145d238a3c3724627309c22ab95744b734a8e4c
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Jun 26 16:47:45 2012 +1000
+
+    Bring back auto-detection of PulseAudio
+    
+       * configure.ac (with-sound): Re-enable PulseAudio.
+    
+       * configure.ac (with-pulseaudio): Removed.  It is now back in
+       with-sound.
+    
+       * configure.ac: Nuke the `pulse_*_version' vars.  They weren't
+       being used for anything.
+    
+       * src/media/Makefile.am (libmm_a_CFLAGS): Add MM_CFLAGS.
+    
+       * src/media/sound-pulse.c (stream_write_callback): Set
+       `resolution', `real_frm_sz', and `ctx' as unused. Shush compiler.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ configure.ac            | 23 +++++------------------
+ m4/sxe-mm.m4            | 17 +----------------
+ m4/sxe-summary.m4       |  1 -
+ src/media/sound-pulse.c |  8 +++++---
+ 4 files changed, 11 insertions(+), 38 deletions(-)
+
+commit 206a9a4cc731ee92f14a52c3543643c3f590f0ec
+Merge: 2fd7982 5fc5cf3
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Jun 26 09:55:35 2012 +1000
+
+    Various build related fixes from Rudi
+    
+    * merges:
+      bldchn, fix typo, wrong dbusbind.la variables
+      bldchn, add missing benchmark.el to the dist tarball
+      bldchn, add missing tests to the dist tarball
+
+commit 5fc5cf31ec5c823d4a7358ac32a03353533b8ee9
+Author: Ruediger Meier <ruediger.meier@ga-group.nl>
+Date:   Mon Jun 25 15:57:17 2012 +0200
+
+    bldchn, fix typo, wrong dbusbind.la variables
+    
+    We had such warnings from automake:
+    modules/dbus/Makefile.am:63: variable `dbus_la_SOURCES' is defined but no program or
+    modules/dbus/Makefile.am:63: library has `dbus_la' as canonical name (possible typo)
+    [...]
+
+ modules/dbus/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit c71af2f8f7c04f50bf86cdf41fa38996a6224695
+Author: Ruediger Meier <ruediger.meier@ga-group.nl>
+Date:   Mon Jun 25 15:53:14 2012 +0200
+
+    bldchn, add missing benchmark.el to the dist tarball
+    
+    Note that this benchmark will not be executed by any make target. Should we add
+    one?
+
+ tests/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit cc74c1d1c6c9aa558eadd7bac407619ba29abfd5
+Author: Ruediger Meier <ruediger.meier@ga-group.nl>
+Date:   Mon Jun 18 13:16:52 2012 +0200
+
+    bldchn, add missing tests to the dist tarball
+
+ tests/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 2fd79826efd8f7e09ed733fac37248164f77fae1
+Merge: e1fb520 7fbb85e
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 25 22:42:24 2012 +1000
+
+    Fix non-dbus build
+    
+    * dbus-bldfix:
+      Fix build when dbus is not present.
+
+commit 7fbb85ee5b86bf9c7fa5eb792f959ad53301b8c2
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 25 22:41:52 2012 +1000
+
+    Fix build when dbus is not present.
+    
+       * configure.ac: Put `SXE_EMOD_STATMOD([dbus])' where it can be
+       called if dbus is present or not.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ configure.ac | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit e1fb5209299cf9b85fc5774d514eac100ebf1428
+Merge: 374249e 9114804
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 25 13:43:33 2012 +1000
+
+    PulseAudio roles
+    
+    * pulse-roles:
+      Support "media role" property for PulseAudio devices
+
+commit 9114804da42826c8bfdc8e200786bb0581787324
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 25 13:41:45 2012 +1000
+
+    Support "media role" property for PulseAudio devices
+    
+    With PulseAudio a client can set various properties to tell the server
+    more about the client.  One of these properties is a "media role" which
+    tells the PulseAudio server what type of media the client is supplying.
+    For example a mp3 player might set a role of "music", or a movie player
+    might set a role of "video".
+    
+    You can't do anything in SXEmacs with roles other than set them, but in
+    your PulseAudio config you can then do nifty things based on them.  Like,
+    you can get PulseAudio to mute (cork) your "music" streams when you play a
+    "video" stream.
+    
+    This changeset allows the user to set the media role via the `:role'
+    keyword in #'make-audio-device.
+    
+       * src/media/sound-pulse.c (sound_pulse_data_s): Add new object,
+       `role'.
+    
+       * src/media/sound-pulse.c (sound_pulse_create): Parse :role as
+       well.
+    
+       * src/media/sound-pulse.c (sound_pulse_finish):
+    
+       * src/media/sound-pulse.c (sound_pulse_init_mainloop): Set
+       PULSE_PROP_media.role with the role.
+    
+       * src/media/sound.c (Fmake_audio_device): Document PulseAudio
+       roles.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/media/sound-pulse.c | 15 +++++++++++++++
+ src/media/sound.c       | 10 ++++++++++
+ 2 files changed, 25 insertions(+)
+
+commit 374249e84cebf527df8434478871d019d75d35d5
+Merge: 1491f82 cc3a107
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Jun 19 18:20:27 2012 +1000
+
+    Quick typo fix
+    
+    * typo-fix:
+      Typo fix
+
+commit cc3a10746bcc108f8f43159e197b9af83d55aa5f
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Jun 19 18:18:52 2012 +1000
+
+    Typo fix
+    
+       * lisp/lisp-initd.el (lisp-initd-compile): Typo fix.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ lisp/lisp-initd.el | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1491f827270ed0047a12382cd8957589f3110fe3
+Merge: 220e6ce 842ae4c
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Jun 19 16:51:26 2012 +1000
+
+    Fix SoX
+    
+    * sox-fix:
+      SoX Fix -- Remove deprecated code.
+      SoX Fix -- Configure and build
+
+commit 842ae4c5739873fa89ea1d761716a82d2c6efafb
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Jun 19 16:49:51 2012 +1000
+
+    SoX Fix -- Remove deprecated code.
+    
+    This changeset removes all the old cruft in our SoX code that we no longer
+    need to worry about because we enforce a minimum required version.
+    
+       * src/media/media-sox.h: Remove all the old crusty st_*
+    
+       * src/media/media-sox.c: Ditto.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ src/media/media-sox.c |  8 ++------
+ src/media/media-sox.h | 26 --------------------------
+ 2 files changed, 2 insertions(+), 32 deletions(-)
+
+commit 57986fcd10ef7e524cae9805825deebbab5a2ae9
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Tue Jun 19 16:17:07 2012 +1000
+
+    SoX Fix -- Configure and build
+    
+    Somewhere along the line our SoX code stopped working.  This changeset
+    brings back SoX support in SXEmacs.
+    
+    Please Note:  There is now a minimum version required for SoX... 14.1.0
+    
+       * m4/sxe-mm.m4 (SXE_CHECK_SOX_LOCATOR): Nuke it.
+    
+       * m4/sxe-mm.m4 (SXE_CHECK_SOX_LOCATIONS): Rewrite using pkg-config
+       voodoo.
+    
+       * m4/sxe-mm.m4 (_SXE_CHECK_SOX): Simplify.  No need to check for
+       that st rubbish anymore.
+    
+       * m4/sxe-mm.m4 (SXE_CHECK_SOX_HEADERS): Don't look for st.h.
+    
+       * m4/sxe-mm.m4 (SXE_CHECK_SOX_LIBS): Remove the st rubbish.
+    
+       * m4/sxe-mm.m4 (SXE_CHECK_SOX_STRUCTS): Ditto.
+       Check for struct sox_format_t instead of sox_format.
+    
+       * src/media/media-sox.c (media_sox_open): HAVE_STRUCT_SOX_FORMAT
+       -> HAVE_STRUCT_SOX_FORMAT_T
+    
+       * INSTALL (Packages): Mention that the minimum version of SoX is
+       now 14.1.0.
+    
+       * .gitignore: Ignore anything starting with `=' instead of just
+       `=build'. For us crazy folk who have multiple build directories on
+       the go at once.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ .gitignore            |   2 +-
+ INSTALL               |   2 +-
+ configure.ac          |   1 -
+ m4/sxe-mm.m4          | 135 ++++++++++----------------------------------------
+ src/media/media-sox.c |   2 +-
+ 5 files changed, 30 insertions(+), 112 deletions(-)
+
+commit 220e6ce846f2ca635d9e3c9ab0d9812ddce4f540
+Merge: 8e74e67 dcab3d7
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 18 09:19:22 2012 +1000
+
+    SXEmacs, meet Dbus. Dbus, meet SXEmacs
+    
+    * dbus:
+      Warning fixes -- dbusbind.
+      Whitespace cleanup in modules/dbus
+      Fix more warnings in dbusbind.c
+      Cosmetic changes to file header/licence
+      Port GNU/Emacs dbusbind.c to SXEmacs -- Warning fixes
+      Port GNU/Emacs dbusbind.c to SXEmacs -- Fix most errors.
+      Port GNU/Emacs dbusbind.c to SXEmacs -- Style changes
+      Improve D-Bus detection.
+      Fix dbus build.
+      True to add files to dbus module makefile
+      Add D-Bus module as option for with-modules
+      Add DESCEND clause for dbus module
+      Initial commit of D-Bus support imported from Emacs trunk revno=106693
+
+commit 8e74e675ad653f932a2792de362bcb155648e79b
+Merge: fe3409c 3930f4d
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 18 09:14:39 2012 +1000
+
+    Add 22.1.15 ChangeLog file
+    
+    * misc:
+      Add last version ChangeLog file
+
+commit 3930f4d37174d819739b3ad22fc6df7f4284113b
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jun 18 09:14:08 2012 +1000
+
+    Add last version ChangeLog file
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ ChangeLog.d/ChangeLog-22.1.15 | 12669 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 12669 insertions(+)
+
+commit 73ea3f2ea863e13978b92c72f0ad7ae69146f492
+Merge: 6cafcf8 fe3409c
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jun 17 10:55:22 2012 -0400
+
+    Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit 6cafcf86ec97cd8f3b87ada387919a608e305610
+Merge: 334f219 b9f23b4
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Fri Jun 15 11:16:25 2012 -0400
+
+    Merge remote-tracking branch 'origin/master' into for-steve
+
+commit 334f219946ae8ddcfdd2a6515d0c44175bda6fe4
+Merge: 1b0c6ff 47a97e4
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Fri Jun 15 11:16:19 2012 -0400
+
+    Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit 1b0c6ff3e0d595f9ac1aed21f43019629d4d77b2
+Merge: b1de4b5 b1aa7ca
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Wed May 30 18:35:19 2012 -0400
+
+    Merge branch 'master' of ssh://dio.dreamhost.com/~/repos.nelsonferreira.com/git/sxemacs into for-steve
+
+commit b1de4b5e61489baec4c1d8172e04d9982f929807
+Merge: 9060f3e ccd489f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Fri Apr 13 13:32:20 2012 -0400
+
+    Merge remote-tracking branch 'origin/master' into for-steve
+
+commit 9060f3e69bc2f8062b8fde60bc76366d6111ff8c
+Merge: 0714a82 31e8a7f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Mar 13 20:42:27 2012 -0400
+
+    Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit 0714a826c16084db406d2a7335101ae350a001e3
+Merge: 7d75fa8 42297aa
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Fri Mar 9 19:00:38 2012 -0500
+
+    Merge remote-tracking branch 'origin/master' into for-steve
+
+commit 7d75fa8904eb3b4ed4269423bcd6740a20bb4784
+Merge: dbcba80 e7ee5bd
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Wed Mar 7 11:20:23 2012 -0500
+
+    Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit dbcba80608278b9db3879cf696add1f9dc68523d
+Merge: ddc1be7 67d4837
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Mar 6 08:44:01 2012 -0500
+
+    Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit ddc1be760fa93a9c1e8ab1817f382fcbb95524bb
+Merge: 9a6533b c9752ce
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Mar 6 02:18:37 2012 -0500
+
+    Merge remote-tracking branch 'njsf/for-steve' into for-steve
+
+commit 9a6533bb85fc241ed6ff3040a6404d2fe27c678b
+Merge: 97e22d6 38a15be
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Mar 6 02:18:25 2012 -0500
+
+    Merge branch 'master' of ssh://dio.dreamhost.com/~/repos.nelsonferreira.com/git/sxemacs into for-steve
+
+commit dcab3d791b094b5d7f502d9596937bb427c270e7
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jan 29 17:53:00 2012 +1000
+
+    Warning fixes -- dbusbind.
+    
+    This changeset fixes all but 4 or 5 compiler warnings in dbusbind.  The
+    warnings that are left are some "implicit declaration of function 'foo'"
+    for some GNU/Emacs functions that I don't yet know what to do with.
+    
+       * modules/dbus/dbusbind.c (xd_find_watch_fd): Don't use
+       `dbus_watch_get_fd()', it's deprecated.
+    
+       * modules/dbus/dbusbind.c (Fdbus_init_bus): Initialise busp to
+       NULL.
+    
+       * modules/dbus/dbusbind.c (Fdbus_method_return_internal):
+       Initialise serial to 0.
+    
+       * modules/dbus/dbusbind.c (Fdbus_method_error_internal): Ditto.
+    
+       * modules/dbus/dbusbind.c (Fdbus_register_service): If all else
+       fails, return Qnil.
+    
+       * modules/dbus/dbusbind.h (SBYTES): No need to call XSTRING as
+       XSTRING_LENGTH does that for us.
+    
+       * modules/dbus/dbusbind.h (XD_ERROR): Correctly cast mess to work
+       right for our make_string().
+    
+       * modules/dbus/dbusbind.h (syms_of_dbusbind): Add.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/dbusbind.c | 25 ++++++++++---------------
+ modules/dbus/dbusbind.h | 15 +++++++++------
+ 2 files changed, 19 insertions(+), 21 deletions(-)
+
+commit c4270d307c554c3626740158ae0c5af204d7d5cf
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jan 29 00:11:08 2012 +1000
+
+    Whitespace cleanup in modules/dbus
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/Makefile.am |  1 -
+ modules/dbus/dbus.el     | 50 ++++++++++++++++++++++++------------------------
+ modules/dbus/dbusbind.c  |  4 ++--
+ modules/dbus/dbusbind.h  | 16 ++++++++--------
+ 4 files changed, 35 insertions(+), 36 deletions(-)
+
+commit f922deb15970dbe7a23b7d0a4d313a56a6a7005d
+Merge: 571fb34 a17da6c
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jan 28 23:56:28 2012 +1000
+
+    Merge branch 'master' into dbus
+    
+    Conflicts:
+       modules/dbus/Makefile.am  Trivial, resolved.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+commit 571fb34cc9594d364a3a92c30568f3643cc95f6e
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jan 25 14:27:41 2012 +1000
+
+    Fix more warnings in dbusbind.c
+    
+       * modules/dbus/dbusbind.c (Fdbus_call_method_asynchronously): Use
+       CHECK_FUNCTION instead of GNU's FUNCTIONP
+    
+       * modules/dbus/dbusbind.c (Fdbus_register_signal): Ditto.
+    
+       * modules/dbus/dbusbind.c (Fdbus_register_method): Ditto.
+    
+       * modules/dbus/dbusbind.h (SBYTES): Use XSTRING_LENGTH
+    
+       * modules/dbus/dbusbind.c (syms_of_dbusbind): Use build_string
+       instead of GNU's make_pure_c_string.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/dbusbind.c | 25 ++++++++++++-------------
+ modules/dbus/dbusbind.h |  4 ++--
+ 2 files changed, 14 insertions(+), 15 deletions(-)
+
+commit 72d1562400900a972a6eb36ba97ab921f1d7f63c
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Wed Jan 25 13:33:34 2012 +1000
+
+    Cosmetic changes to file header/licence
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/dbusbind.c | 48 ++++++++++++++++++++++++++++++++++--------------
+ 1 file changed, 34 insertions(+), 14 deletions(-)
+
+commit a1363efe6978f0b8139c5c72f3984a2fd952e02d
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Mon Jan 23 02:37:07 2012 +1000
+
+    Port GNU/Emacs dbusbind.c to SXEmacs -- Warning fixes
+    
+    This changeset fixes a good deal of compiler warnings.  We're not there
+    yet, but at least it does build now.  Working?  Nah, but it builds. :-)
+    
+       * modules/dbus/dbusbind.c Moved all the stuff that belongs in a
+       header to new dbusbind.h.
+       Added a bunch of stuff from GNU/Emacs just to get it to build
+       cleanly.
+       (xd_read_message_1): #if 0'd out just to
+       get this pig to compile.  Need to revisit this to actually make it
+       work.
+    
+       * modules/dbus/dbusbind.h: New.  Aside from the obvious, I'm also
+       putting some GNU/Emacs things in here that we don't have yet and
+       are needed for dbus until we do it our own way.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/Makefile.am |   2 +-
+ modules/dbus/dbusbind.c  | 255 +++++++++----------------------------
+ modules/dbus/dbusbind.h  | 325 +++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 384 insertions(+), 198 deletions(-)
+
+commit 920f94f62143e04975fd50a5548880e61f79d66f
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sun Jan 22 02:06:16 2012 +1000
+
+    Port GNU/Emacs dbusbind.c to SXEmacs -- Fix most errors.
+    
+    This changeset continues the work in porting GNU/Emacs' dbusbind.c.  It is
+    still not finished.  The build is still badly broken.
+    
+       * src/elhash.c: Make Q_test not static.
+    
+       * modules/dbus/dbusbind.c (CHECK_DBUS_SERIAL_GET_SERIAL): We call
+       `MOST_POSITIVE_FIXNUM' a `EMACS_INT_MAX'.
+    
+       * modules/dbus/dbusbind.c (xd_signature_cat): ptrdiff_t's -> int's
+    
+       * modules/dbus/dbusbind.c (Fdbus_call_method): Ditto.
+    
+       * modules/dbus/dbusbind.c (Fdbus_call_method_asynchronously): Ditto.
+    
+       * modules/dbus/dbusbind.c (Fdbus_method_return_internal): Ditto.
+    
+       * modules/dbus/dbusbind.c (Fdbus_method_error_internal): Ditto.
+    
+       * modules/dbus/dbusbind.c (Fdbus_send_signal): Ditto.
+    
+       * modules/dbus/dbusbind.c (Fdbus_register_service): Ditto.
+    
+       * modules/dbus/dbusbind.c (Fdbus_register_signal): Ditto.
+    
+       * modules/dbus/dbusbind.c (xd_read_queued_messages): Add missing
+       arg to internal_catch().
+    
+       * modules/dbus/dbusbind.c (syms_of_dbusbind): Change GNU DEFSYM's
+       and defsubr's to our defsymbol and DEFSUBR respectively.
+    
+       * modules/dbus/dbusbind.c (syms_of_dbusbind): SXEmacs-erise the
+       Fprovide().
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/dbusbind.c | 146 +++++++++++++++++++++++++-----------------------
+ src/elhash.c            |   3 +-
+ 2 files changed, 78 insertions(+), 71 deletions(-)
+
+commit d94bd7a6fd8bff465efc0345624d8c0af43ec64d
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jan 21 23:30:11 2012 +1000
+
+    Port GNU/Emacs dbusbind.c to SXEmacs -- Style changes
+    
+    This changeset begins the process of porting GNU/Emacs' dbusbind.c to
+    SXEmacs.  So far this is mostly just indentation changes and reformating
+    of DEFUN's.
+    
+    Build is currently severely broken with this.
+    
+       * modules/dbus/dbusbind.c: Reformat to SXEmacs style, and begin
+       porting.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ modules/dbus/dbusbind.c | 3499 ++++++++++++++++++++++++-----------------------
+ 1 file changed, 1754 insertions(+), 1745 deletions(-)
+
+commit e05a963faba21e99dcae14f245c13b7d0584fe5a
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Sat Jan 21 22:04:03 2012 +1000
+
+    Improve D-Bus detection.
+    
+       * m4/sxe-emodffi.m4 (SXE_CHECK_DBUS): New to check for D-Bus.
+    
+       * configure.ac: Use it.
+    
+       * modules/dbus/Makefile.am (AM_CFLAGS): Add DBUS_CFLAGS.
+    
+       * modules/dbus/Makefile.am (AM_LDFLAGS): Add DBUS_LIBS.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ configure.ac             | 18 +++++++++++-------
+ m4/sxe-emodffi.m4        | 11 +++++++++++
+ modules/dbus/Makefile.am |  5 +++--
+ 3 files changed, 25 insertions(+), 9 deletions(-)
+
+commit eabfdb7d71968d5aa41c7403c0de7237f0f9a1ae
+Author: Steve Youngs <steve@sxemacs.org>
+Date:   Fri Jan 20 22:04:00 2012 +1000
+
+    Fix dbus build.
+    
+    This changeset does just enough to get the new dbus emodule built.  Please
+    note that this doesn't mean dbus in SXEmacs is now done.  There is more to
+    come.  This JUST puts a bandaid on the build chain so it will build.
+    
+       * modules/dbus/Makefile.am (module_LTLIBRARIES): Set to `dbusbind.la'
+    
+       * modules/dbus/Makefile.am (BUILT_SOURCES): Remove non-generated
+       sources.
+    
+       * modules/dbus/Makefile.am (dbus_la_SOURCES): Renamed from
+       `sxe_dbus_la_SOURCES'.
+    
+       * modules/dbus/Makefile.am (nodist_dbus_la_SOURCES): Renamed from
+       `nodist_sxe_dbus_la_SOURCES'.
+    
+       * modules/dbus/Makefile.am (dbus_la_CFLAGS): Renamed from
+       `sxe_dbus_la_CFLAGS'.
+    
+       * configure.ac: Set have_modules_dbus and have_static_modules_dbus
+       accordingly.
+    
+    Signed-off-by: Steve Youngs <steve@sxemacs.org>
+
+ configure.ac             | 10 ++++++++++
+ modules/dbus/Makefile.am | 16 +++++-----------
+ 2 files changed, 15 insertions(+), 11 deletions(-)
+
+commit 81dd3117efce019fc5956143896f1c5d375f55a0
+Merge: 0a5d16d 910cd5f
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Fri Jan 20 00:05:18 2012 -0500
+
+    Merge branch 'for-steve' into njsf-dbus
+
+commit 0a5d16d2e1625d69fc24f24b843e39fa6a252efc
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Thu Jan 19 21:40:40 2012 -0500
+
+    True to add files to dbus module makefile
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/dbus/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3197b6ea8a0ff24ff7e24e468e6eaad5487c3289
+Merge: 3ae1f7d 280ebe6
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Sun Jan 15 21:31:46 2012 -0500
+
+    Merge remote-tracking branch 'njsf/for-steve' into njsf-dbus
+
+commit 3ae1f7deee97eec9d1473922ec91dcba1d5503cb
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Jan 3 01:38:53 2012 -0500
+
+    Add D-Bus module as option for with-modules
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ configure.ac | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 2fe2b4ddc8aa56863967d40422a3ea46013e0b9b
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Jan 3 01:24:11 2012 -0500
+
+    Add DESCEND clause for dbus module
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 8ee0e2009cf6f05e03f1b57ac72b716c3fe28df3
+Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+Date:   Tue Jan 3 01:19:05 2012 -0500
+
+    Initial commit of D-Bus support imported from Emacs trunk revno=106693
+    
+    Signed-off-by: Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ modules/dbus/Makefile.am |   17 +
+ modules/dbus/dbus.el     | 1055 +++++++++++++++++++++
+ modules/dbus/dbusbind.c  | 2347 ++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 3419 insertions(+)
diff --git a/INSTALL b/INSTALL
index 0f3f5f3..6935456 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,17 @@
 SXEmacs Installation Guide
-Copyright (C) 2005 - 2012 Steve Youngs
+Copyright (C) 2005 - 2015 Steve Youngs
+
+
+,----[ In-Tree Builds Lead To Madness ]
+| Please note that because of the complexity of SXEmacs and its build
+| chain, we do not support building from within the source tree itself.
+|
+| So please, ALWAYS run `configure' and `make' from a separate directory,
+| completely outside of the source tree.
+|
+| In the code examples below, "${SRCTREE}" refers to the path where
+| you wish to build SXEmacs.
+`----
 
 
 Building from tarball release: 
@@ -11,7 +23,7 @@ In a nutshell:
 See ./configure --help for a description of all possible options,
 then
 
-  $ ./configure [options]
+  $ ${SRCTREE}/configure [options]
   $ make
   $ make check
   $ make install
@@ -37,7 +49,7 @@ Please note that SXEmacs _CANNOT_ be built with a C++ compiler.
 
 Also, some configuration options may need external libraries that are
 not shipped with SXEmacs.  SXEmacs will determine which libraries it
-needs at configuration time (when you run `./configure').
+needs at configuration time (when you run `${SRCTREE}/configure').
 
 If configure can't find a particular library and you _do_ have it
 installed, you can usually get configure to find it by adding to the
@@ -132,17 +144,17 @@ install them and incorporate them into SXEmacs.
   If the optional libraries are in a non-standard location, use
   --with-site-prefixes option of configure. Ex:
 
-       ./configure --with-site-prefixes=/opt/local
+       ${SRCTREE}/configure --with-site-prefixes=/opt/local
 
   You can specify a list of paths with --with-site-prefixes:
 
-       ./configure --with-site-prefixes=/opt/local:/sw
+       ${SRCTREE}/configure --with-site-prefixes=/opt/local:/sw
 
   NOTE: Usage of --prefix does NOT imply that it is added to
   site prefixes, so if you may need to add --with-site-prefixes
   even with --prefix:
        
-       ./configure --prefix=/opt/local --with-site-prefixes=/opt/local
+       ${SRCTREE}/configure --prefix=/opt/local --with-site-prefixes=/opt/local
 
 
 
@@ -359,14 +371,16 @@ tell you in much greater detail what they need and how you can get the
 files and information you need.
 
 
-Building from git source:
-------------------------
+Building from git source: 
+------------------------ 
 This is identical to building from the tarball sources, with the
 addition of an extra step, and some extra requirements (that are most
-likely already on your system).
+likely already on your system).  Remember that "in-tree" builds are
+not supported, so configure and make from a directory outside the
+tree.
 
   $ ./autogen.sh
-  $ ./configure [options]
+  $ ${SRCTREE}/configure [options]
   $ make
   $ make check
   $ make install
@@ -381,7 +395,7 @@ You need at least...
 
   automake 1.9.4
   autoconf 2.60
-  texinfo 4.8
+  texinfo 5.2 (preferably 6.0)
 
 Warnings from autogen.sh:
 ------------------------
index d6e7cbf..5651add 100644 (file)
@@ -55,6 +55,8 @@ sxe_subdirs += lib-src
 if DESCEND_MODULES
 sxe_subdirs += modules
 endif
+## Note that src and lisp are traversed twice on purpose
+## for use of the proper dumped emacs for the autoloads and tests
 sxe_subdirs += src lisp src lisp info etc tests
 
 SUBDIRS =
index 6e7bd23..e76f5d0 100644 (file)
--- a/PROBLEMS
+++ b/PROBLEMS
@@ -476,6 +476,20 @@ XMODIFIERS environment variables which influence the behavior of
 XCreateIC.  Failures have been observed with XMODIFIERS=@im=ibus
 
 
+*** Text gets garbled/corrupted with Xorg ATI driver
+
+Some versions of the Xorg ATI driver present display issues where text
+display gets corrupted.  Because of the conservative way SXEmacs
+updates the screen it is more susceptible to these issues than other
+applications.
+
+Some users have reported the problem goes away when using proprietary
+drivers.  CAVEAT EMPTOR: Proprietary drivers have also been reported
+to break other parts of the system, most notabable are bad
+interactions with graphic boot package Plymouth when it asks for
+password for encrypted volumes at boot.
+
+
 * Original XEmacs PROBLEMS File
 ===============================
 
index 0bbc3f9..8ce3ad1 100755 (executable)
 # Check file headers for more information.
 
 # BSD's m4 probably isn't gonna cut it, use gm4 if it is available
-type gm4 >/dev/null 2>&1 && M4=gm4 || M4=m4
+if test -z "$M4"
+then
+   type gm4 >/dev/null 2>&1 && M4=gm4 || M4=m4
+fi
 
 M4_VERSION=$($M4 --version | head -n1 | sed -e 's/^\(m4 \)\?(\?GNU M4)\? *//g' )
 GOOD_M4=$( echo $M4_VERSION | awk -F. '{if( ($1>1) || ( ($1==1) && ($2>4) ) || ( ($1==1) && ($2==4) && ($3>=6) )) print 1 }')
@@ -41,12 +44,16 @@ if test -d "/usr/xpg4/bin"; then
     export PATH
 fi
 
-type git >/dev/null 2>&1 && GIT=git
+if test -z "$GIT"
+then
+    type git >/dev/null 2>&1 && GIT=git
+fi
+
 olddir=$(pwd)
 srcdir=$(dirname $0)
 cd "$srcdir"
 
-EXPECTED_TREE_VERSION="22.1.15"
+EXPECTED_TREE_VERSION="22.1.16"
 
 emacs_is_beta=t
 if test -n "$GIT" -a -n "$($GIT symbolic-ref HEAD 2>/dev/null)"; then
@@ -77,7 +84,7 @@ emacs_major_version="$(echo $TREE_VERSION|cut -d. -f1)"
 emacs_minor_version="$(echo $TREE_VERSION|cut -d. -f2)"
 emacs_beta_version="$(echo $TREE_VERSION|cut -d. -f3)"
 emacs_full_version="$emacs_major_version.$emacs_minor_version.$emacs_beta_version"
-sxemacs_codename="Goggomobil"
+sxemacs_codename="Hillman Hunter"
 sxemacs_git_version="$GIT_VERSION"
 
 if test "$emacs_full_version" != "$EXPECTED_TREE_VERSION"; then
@@ -97,12 +104,59 @@ if test "$emacs_full_version" != "$EXPECTED_TREE_VERSION"; then
     echo "*******************************************"
 fi
 
-autoconf_ver=$(autoconf --version 2>/dev/null | head -n1)
-autoheader_ver=$(autoheader --version 2>/dev/null | head -n1)
-automake_ver=$(automake --version 2>/dev/null | head -n1)
-aclocal_ver=$(aclocal --version 2>/dev/null | head -n1)
-libtool_ver=$(libtool --version 2>/dev/null | head -n1)
+test -z "$AUTOCONF"   && type autoconf   >/dev/null 2>&1 && AUTOCONF=autoconf
+export AUTOCONF
+test -z "$AUTORECONF" && type autoreconf >/dev/null 2>&1 && AUTORECONF=autoreconf
+export AUTORECONF
+test -z "$AUTOHEADER" && type autoheader >/dev/null 2>&1 && AUTOHEADER=autoheader
+export AUTOHEADER
+test -z "$AUTOMAKE"   && type automake   >/dev/null 2>&1 && AUTOMAKE=automake
+export AUTOMAKE
+test -z "$ACLOCAL"    && type aclocal    >/dev/null 2>&1 && ACLOCAL=aclocal
+export ACLOCAL
+test -z "$LIBTOOL"    && type libtool    >/dev/null 2>&1 && LIBTOOL=libtool
+export LIBTOOL
+if test -z "$LIBTOOLIZE"; then
+  if type glibtoolize >/dev/null 2>&1; then
+    LIBTOOLIZE=glibtoolize
+  elif type libtoolize >/dev/null 2>&1; then
+    LIBTOOLIZE=libtoolize
+  fi
+fi
+export LIBTOOLIZE
 
+autoconf_ver=$($AUTOCONF --version 2>/dev/null | head -n1)
+if test -z "$autoconf_ver"; then
+    echo Could not determine autoconf
+    exit 1
+fi
+autoreconf_ver=$($AUTORECONF --version 2>/dev/null | head -n1)
+if test -z "$autoreconf_ver"; then
+    echo Could not determine autoreconf
+    exit 1
+fi
+autoheader_ver=$($AUTOHEADER --version 2>/dev/null | head -n1)
+if test -z "$autoheader_ver"; then
+    echo Could not determine autoheader
+    exit 1
+fi
+automake_ver=$($AUTOMAKE --version 2>/dev/null | head -n1)
+if test -z "$automake_ver"; then
+    echo Could not determine automake
+    exit 1
+fi
+aclocal_ver=$($ACLOCAL --version 2>/dev/null | head -n1)
+if test -z "$aclocal_ver"; then
+    echo Could not determine aclocal
+    exit 1
+fi
+libtool_ver=$($LIBTOOL --version 2>/dev/null | head -n1)
+if test -z "$libtool_ver" -a -n "$LIBTOOLIZE"; then
+    libtool_ver=$($LIBTOOLIZE --version 2>/dev/null | head -n1)
+fi
+if test -z "$libtool_ver"; then
+    echo WARNING: Could not determine libtool
+fi
 
 # When things go wrong... get a bigger hammer!
 if test -n "$PHAMMER"; then
@@ -136,27 +190,22 @@ m4_define([4UTOMAKE_VERSION], [$automake_ver])
 m4_define([4IBTOOL_VERSION], [$libtool_ver])
 EOF
 
-if type glibtoolize 2>/dev/null; then
-    LIBTOOLIZE=glibtoolize
-else
-    LIBTOOLIZE=libtoolize
-fi
 
 # using libtoolize as we did before doesn't work anymore, so just mkdir --Horst
-mkdir -p libltdl/m4
-autoreconf --force --verbose --install -Wall
+test -d libtld/m4 || mkdir -p libltdl/m4 
+$AUTORECONF --force --verbose --install -Wall
 
 # hack-o-matic.  Using gmp's config.{guess,sub} lets us have properer
 # detected machine configurations --SY.
 guess=$(grep GMP config.guess)
 sub=$(grep GMP config.sub)
 if test -z "${guess}"; then
-    mv -vf config.guess configfsf.guess
-    cp -v configgmp.guess config.guess
+    mv -f config.guess configfsf.guess
+    cp configgmp.guess config.guess
 fi
 if test -z "${sub}"; then
-    mv -vf config.sub configfsf.sub
-    cp -v configgmp.sub config.sub
+    mv -f config.sub configfsf.sub
+    cp configgmp.sub config.sub
 fi
 
 cd $olddir
index 766f76f..44bf7bb 100644 (file)
@@ -333,8 +333,8 @@ OG_MULTIARG_WITH([modules], [dnl
        [all], [all], [dnl
        OG_MULTIARG_ITEM([ase], [ase], [algebraic structures])
        OG_MULTIARG_ITEM([cl], [cl], [fast Common Lisp implementation])
-       OG_MULTIARG_ITEM([dbus], [dbus], [D-BUS bindings])
 ])
+       dnl OG_MULTIARG_ITEM([dbus], [dbus], [D-BUS bindings])
 
 OG_MULTIARG_WITH([static-modules], [dnl
        AS_HELP_STRING([--with-static-modules], [
@@ -345,8 +345,8 @@ OG_MULTIARG_WITH([static-modules], [dnl
        [none], [NONE], [dnl
        OG_MULTIARG_ITEM([ase], [ase], [algebraic structures])
        OG_MULTIARG_ITEM([cl], [cl], [fast Common Lisp implementation])
-       OG_MULTIARG_ITEM([dbus], [dbus], [D-BUS bindings])
 ])
+       dnl OG_MULTIARG_ITEM([dbus], [dbus], [D-BUS bindings])
 
 OG_MULTIARG_WITH([ent], [dnl
        AS_HELP_STRING([--with-ent], [
@@ -560,6 +560,11 @@ OG_ARG_WITH([terminfo],
                [Use the terminfo library for tty support.]),
        [auto], [Autodetect])
 
+OG_ARG_WITH([tinfo],
+       AS_HELP_STRING([--with-tinfo],
+               [Use the ncurses tinfo library for tty support.]),
+       [auto], [Autodetect])
+
 OG_ARG_WITH([termlib],
        AS_HELP_STRING([--with-termlib],
                [Use the termlib library for tty support.]),
@@ -570,6 +575,13 @@ OG_ARG_WITH([termcap],
                [Use the termcap library for tty support.]),
        [auto], [Autodetect])
 
+OG_ARG_WITH([builtin-tty],
+       AS_HELP_STRING([--with-builtin-tty],
+               [Use builtin termcap like code. LEGACY CODE. Please consider
+               installing ncurses. Requires /etc/termcap or TERMCAP
+               environment variable to work.]),
+       [no], [No])
+
 
 OG_ARG_WITH([gpm],
        AS_HELP_STRING([--with-gpm],
@@ -759,12 +771,17 @@ AS_IF([test -f "$0.ac" -a "$0.ac" -nt "$0"],
 #
 # Turn off core generation. We are already verifying the program fails, no need
 # poluting the workspace. Of course if you are a SXEmacs developer you may want
-# to comemnt this on occasion :-)
+# to comment this on occasion :-)
 ulimit -c 0
 
 ## initialise our nestable msg funs
 SXE_INIT_MSG_LEVEL
 
+AC_PROG_SED
+AC_PROG_AWK
+
+ECHO=echo
+
 dnl Small snippet to make echo -n work on solaris
 ECHO_N= ECHO_C=
 case `echo -n x` in
@@ -798,7 +815,19 @@ dnl Check for bogus options
 dnl -------------------------------------------------------------------------
 SXE_CHECK_COMMAND_LINE
 
-AM_INIT_AUTOMAKE([foreign -Wall])
+test -z "$AUTOMAKE" || AUTOMAKE=automake
+
+AM_INIT_AUTOMAKE(m4_esyscmd([
+   automake_ver=`$AUTOMAKE --version 2>/dev/null | head -n1`
+   automake_major=`echo "$automake_ver" | sed -e 's/^.* \([0-9]*\).*/\1/'`
+   automake_minor=`echo "$automake_ver" | sed -e 's/^.* [0-9]*\.\([0-9]*\).*/\1/'`
+   if test "$automake_major" = "1" -a "$automake_minor" -lt "14"
+   then
+      echo "foreign -Wall"
+   else
+      echo "info-in-builddir foreign -Wall"
+   fi]))
+
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
 SXE_CHECK_BUILDCHAIN
 AC_SUBST(EGREP)
@@ -1680,7 +1709,7 @@ dnl Check for POSIX functions.
 dnl ----------------------------------------------------------------
 
 SXE_CHECK_BASIC_FUNS
-AC_CHECK_FUNCS([alarm cbrt closedir dup2 eaccess endpwent floor fmod fpathconf frexp fsync ftime ftruncate getaddrinfo getcwd gethostbyname gethostname getnameinfo getpagesize getrlimit gettimeofday getwd isascii isatty link logb lrand48 matherr memchr memmove memset mkdir mktime munmap perror poll pow putenv random re_comp readlink regcomp rename res_init rint rmdir select setitimer setlocale setpgid setsid sigblock sighold sigprocmask snprintf socket sqrt stpcpy strncpy strncat strcasecmp strchr strdup strerror strlwr strrchr strspn strtol strupr symlink ttyname tzset ulimit umask uname usleep utime vlimit vsnprintf waitpid wcscmp wcslen])
+AC_CHECK_FUNCS([alarm cbrt closedir dup2 eaccess endpwent floor fmod fpathconf frexp fsync ftime ftruncate getaddrinfo getcwd gethostbyname gethostname getnameinfo getpagesize getrlimit gettimeofday getwd isascii isatty link logb log2 log2f log2l log10 log10f log10l log logf logl lrand48 matherr memchr memmove memset mkdir mktime munmap perror poll pow putenv random re_comp readlink regcomp rename res_init rint rmdir select setitimer setlocale setpgid setsid sigblock sighold sigprocmask snprintf socket sqrt stpcpy strncpy strncat strcasecmp strchr strdup strerror strlwr strrchr strspn strtol strupr symlink ttyname tzset ulimit umask uname usleep utime vlimit vsnprintf waitpid wcscmp wcslen])
 
 AS_IF([test "$have_isatty" = "yes"],
        AC_DEFINE([HAVE_ISATTY], [1], [isatty is available]))
@@ -1711,10 +1740,30 @@ fi
 after_morecore_hook_exists=yes
 AC_CHECK_FUNC(malloc_set_state, ,doug_lea_malloc=no)
 AC_MSG_CHECKING(whether __after_morecore_hook exists)
-AC_LINK_IFELSE([AC_LANG_SOURCE([[extern void (* __after_morecore_hook)();],[__after_morecore_hook = 0]])],
+AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [extern void (* __after_morecore_hook)();]
+       [main() {__after_morecore_hook = 0;}]
+       ])],
   [AC_MSG_RESULT(yes)],
   [AC_MSG_RESULT(no)
    after_morecore_hook_exists=no])
+if test "$after_morecore_hook_exists" = "yes" ; then
+   AC_DEFINE([HAVE_MORECORE_HOOK], [1], [Define if __after_morecore_hook is available])
+fi
+AC_SUBST(HAVE_MORECORE_HOOK)
+free_hook_exists=yes
+AC_MSG_CHECKING(whether __free_hook exists)
+AC_LINK_IFELSE([AC_LANG_SOURCE([
+       [extern void (* __free_hook)();]
+       [main() {__free_hook = 0;}]
+       ])],
+  [AC_MSG_RESULT(yes)],
+  [AC_MSG_RESULT(no)
+   free_hook_exists=no])
+if test "$free_hook_exists" = "yes" ; then
+   AC_DEFINE([HAVE_FREE_HOOK], [1], [Define if __free_hook is available])
+fi
+AC_SUBST(HAVE_FREE_HOOK)
 if test "$system_malloc" = "yes" ; then
   GNU_MALLOC=no
   GNU_MALLOC_reason="
@@ -1813,19 +1862,19 @@ fi
 SXE_EMOD_STATMOD([cl])
 
 dnl D-Bus
-SXE_CHECK_DBUS
-if test "$have_dbus" = "yes"; then
-       if test "$with_modules_dbus" = "yes"; then
-               have_modules_dbus=yes
-       fi
-       if test "$with_static_modules_dbus" = "yes"; then
-               have_static_modules_dbus=yes
-       fi
-else
-       AC_MSG_WARN([I cannot believe you do not have d-bus.])
-fi
+dnl SXE_CHECK_DBUS
+dnl if test "$have_dbus" = "yes"; then
+dnl    if test "$with_modules_dbus" = "yes"; then
+dnl            have_modules_dbus=yes
+dnl    fi
+dnl    if test "$with_static_modules_dbus" = "yes"; then
+dnl            have_static_modules_dbus=yes
+dnl    fi
+dnl else
+dnl    AC_MSG_WARN([I cannot believe you do not have d-bus.])
+dnl fi
 
-SXE_EMOD_STATMOD([dbus])
+dnl SXE_EMOD_STATMOD([dbus])
 
 AM_CONDITIONAL([AUTARKIC], [test "0" = "1"])
 MODARCHDIR=
@@ -2475,7 +2524,7 @@ dnl   fi
 
        dnl make sure we can find Intrinsic.h
        AC_CHECK_HEADER([X11/Intrinsic.h], [],
-               [AC_MSG_ERROR([Unable to find X11 header files. Try using --x-includes=<path> if you know the path, or --with-x=no to disable X11 support.])])
+               [AC_MSG_ERROR([Unable to find X11 and/or Xt header files. Try using --x-includes=<path> if you know the path, or --with-x=no to disable X11 support.])])
 
        dnl Check some more headers
        AC_CHECK_HEADERS([X11/Intrinsic.h X11/StringDefs.h X11/Shell.h X11/ShellP.h],
@@ -2717,144 +2766,343 @@ AC_CHECK_HEADERS([libintl.h nlist.h sgtty.h termio.h termios.h])
 AS_IF([test "$with_tty" != "no"],[
    AS_MESSAGE(checking for TTY-related features)
    dnl Check if needed calls are available at all...
-   tty_libs="ncurses curses terminfo termlib termcap"
-   tty_funcs="tgetent tgetstr tgetflag tparm tgoto tputs"
-   for func in $tty_funcs; do
-       AC_SEARCH_LIBS($func,$tty_libs)
+   
+   with_tty_libs=""
+   detect_tty_libs=""
+   for lib in ncurses curses tinfo terminfo termlib termcap
+   do
+       eval "with=\$with_${lib}"
+       if test "$with" = no
+       then
+          AC_MSG_WARN(["Ignoring available ${lib} due to --with-${lib}=no"])
+       elif test "$with" = "yes"
+       then
+          with_tty_libs="$with_tty_libs $lib"
+       else
+          detect_tty_libs="$detect_tty_libs $lib"
+       fi
    done
-   AS_IF([test "$ac_cv_search_tgetent"  = "no" -a \
-              "$ac_cv_search_tgetflag" = "no" -a \
-              "$ac_cv_search_tgetstr"  = "no" -a \
-              "$ac_cv_search_tgoto"    = "no" -a \
-              "$ac_cv_search_tparm"    = "no" -a \
-              "$ac_cv_search_tputs"    = "no" ], 
-                  have_tty=no)
-   AS_IF([test "$with_tty" = "yes" -a "$have_tty" = "no" ],[
-      AC_MSG_ERROR([Your system lacks necessary functions for requested TTY support])])
-],[
-  for feature in ncurses curses termcap terminfo termlib gpm; do
-    if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then
-      AC_MSG_WARN([--with-${feature} ignored:  Not valid without TTY support])
-    fi
-    eval "with_${feature}=no"
-  done
-])
 
-AS_IF([test "$with_tty" != "no" -a "$have_tty" != "no" ],[
-   for lib in $tty_libs; do 
-      SXE_CHECK_LINK_LIB($lib, , eval have_${lib}=no)
-      with_lib_eval=`eval echo \\$with_$lib`
-      have_lib_eval=`eval echo \\$have_$lib`
-      AS_IF([test "$have_lib_eval" = "yes" ], [
-        for func in $tty_funcs; do
-            AC_CHECK_LIB($lib, tgetent)
-            AC_CHECK_LIB($lib, tgetstr)
-            AC_CHECK_LIB($lib, tgetflags)
-            AC_CHECK_LIB($lib, tparm)
-            AC_CHECK_LIB($lib, tgoto)
-            AC_CHECK_LIB($lib, tputs)
-        done
-      ])
-      have_lib_eval=`eval echo \\$have_$lib`
-      AS_IF([test "$with_lib_eval" = "yes" -a \
-                 "$have_lib_eval" = "no" ],
-       AC_MSG_WARN([Errors detected trying to use requested $lib. Continuing with autodetection.]))
+   # All terminal info functions needed
+   tty_funcs="tgetent tgetstr tgetflag tgetnum tparm tgoto tputs"
+   tty_libs=""
+   # Filter by existing libs, printf is sure to be available with libc, so failure
+   # would come from lib not find
+   for lib in $with_tty_libs $detect_tty_libs
+   do
+       SXE_CHECK_LINK_LIB($lib)
+       if eval "test \"\$sxe_cv_c_lib_${lib}\" != yes"
+       then
+         if eval "test \"\$with_${lib}\" = yes"
+         then
+            AC_MSG_WARN(["Ignoring --with-${lib}=yes due to library not linkable"])
+            eval "with_${lib}=no"
+         fi
+          continue
+       fi
+
+       AC_CHECK_LIB([$lib], [$tty_funcs])
+
+       # Lets verify we have all functions
+       for func in $tty_func
+       do
+           if eval "test \"\$ac_cv_lib_${lib}_${func}\" = no"
+          then
+              AS_MESSAGE(["Skipping ${lib}, does not support to all TTY functions"])
+              lib=""
+             break
+          fi
+       done
+
+       tty_libs="$tty_libs $lib"
    done
-   AS_IF([test "$sxe_cv_c_lib_ncurses"  = "no" -a \
-               "$sxe_cv_c_lib_curses"   = "no" -a \
-              "$sxe_cv_c_lib_termcap"  = "no" -a \
-              "$sxe_cv_c_lib_terminfo" = "no" -a \
-              "$sxe_cv_c_lib_termlib"  = "no"], 
-                  have_tty=no)
-   AS_IF([test "$with_tty" = "yes" -a "$have_tty" = "no"],
-      AC_MSG_ERROR([Your system lacks necessary libraries for requested TTY support.]))
-])
 
-
-AS_IF([test "$with_tty" != "no" -a "$have_tty" != "no" ],[
-    AC_DEFINE([HAVE_NCURSES], [1], [Description here!])
-    with_ncurses=yes
-    AC_CHECK_HEADER(ncurses/ncurses.h, curses_h_file=ncurses/ncurses.h)
-    if test -z "$curses_h_file"; then
-           AC_CHECK_HEADER(ncurses/curses.h,  curses_h_file=ncurses/curses.h)
-    fi
-    if test -n "$curses_h_file"; then
-           AC_CHECK_HEADER(ncurses/termcap.h, termcap_h_file=ncurses/termcap.h)
-           AC_CHECK_HEADER(ncurses/term.h, term_h_file=ncurses/term.h)
-    else
-           AC_CHECK_HEADER(ncurses.h, curses_h_file=ncurses.h)
-           AC_CHECK_HEADER(termcap.h, termcap_h_file=termcap.h)
-           AC_CHECK_HEADER(term.h,    term_h_file=term.h)
-    fi
-    SXE_ADD_SXEUITTY_OBJS(terminfo.o)
-    SXE_PREPEND(-lncurses, LIBS)
-
-    if test -z "$curses_h_file" ; then
-      dnl Try again, and check for the bogus ncurses/ include bug.
-      dnl (i.e. ncurses/curses.h bogusly includes <unctrl.h> instead of
-      dnl <ncurses/unctrl.h>)
-      save_c_switch_site="$c_switch_site"
-      c_switch_site="$c_switch_site -I/usr/include/ncurses"
+   if test -n "$tty_libs"
+   then
+      AS_MESSAGE(["Considering libraries: $tty_libs"])
+   
+      # Check which preferred lib can be used
+      for func in $tty_funcs
+      do
+         # Make sure no flags are harmed during the search
+         sxe_save_LIBS=$LIBS
+         AC_SEARCH_LIBS($func, $tty_libs)
+         LIBS=$sxe_save_LIBS
+      done
+
+      # Minimize the set of libraries
+      tty_feature=""
+      tty_fun=""
+      for func in $tty_funcs
+      do
+          eval lib=\$ac_cv_search_${func}
+          if test "$lib" != no -a "$lib" != "none required"
+          then
+              for feature in $tty_feature
+              do
+                         if test "$feature" = "$lib"
+                 then
+                    lib=""
+                    func=""
+                    break;
+                  fi
+              done
+             tty_feature="$tty_feature $lib"
+             tty_fun="$tty_fun $func"
+          fi
+       done
+   fi
+
+   if test -n "$tty_feature"
+   then
+      # Check all the expected functions still compile with all the added
+      # libraries
+      sxe_save_LIBS=$LIBS
+      LIBS="$LIBS $tty_feature"
+      AC_CHECK_FUNCS($tty_funcs)
+      for func in $tty_fun
+      do
+       if eval "test \"\$ac_cv_func_${func}\" = no"
+       then
+           tty_feature=""
+           break
+       fi
+      done
+      LIBS=$sxe_save_LIBS
+   fi
+
+   if test -n "$tty_feature"
+   then
+      SXE_PREPEND($tty_feature, LIBS)
+      for lib in $tty_feature
+      do
+         l=`echo $lib | sed -e 's/^-l//g'`
+         eval "with_${l}=yes"
+      done
+      with_builtin_tty=no
+      have_tty=yes
+   else
+      AC_MSG_WARN([Could not link all needed tty functions.]
+                  [Please consider installing ncurses.])
+      if test "$with_builtin_tty" = yes
+      then
+          AC_MSG_WARN([Using builtin tty support.])
+         have_tty=yes
+      else
+          AC_MSG_WARN([Use --with-builtin-tty=yes if you cannot use ncurses.])
+         have_tty=no
+      fi
+   fi
+
+   if test "$with_builtin_tty" = yes
+   then
+      # Add our own wrappers using termcap
+      SXE_ADD_SXEUITTY_OBJS(termcap.o)
+      SXE_ADD_SXEUITTY_OBJS(tparam.o)
+      have_tty=yes
+   elif test "$have_tty" = yes
+   then
+      # Terminfo interface, since tgetent etc are available
+      SXE_ADD_SXEUITTY_OBJS(terminfo.o)
+   fi
+
+   # Check headers, first generally
+   AC_CHECK_HEADER(termcap.h, termcap_h_file=termcap.h)
+   AC_CHECK_HEADER(term.h,    term_h_file=term.h)
+   
+   if test "$have_ncurses" = yes; then
+      # Verify how ncurses overrides them
       AC_CHECK_HEADER(ncurses/ncurses.h, curses_h_file=ncurses/ncurses.h)
       if test -z "$curses_h_file"; then
            AC_CHECK_HEADER(ncurses/curses.h,  curses_h_file=ncurses/curses.h)
       fi
       if test -n "$curses_h_file"; then
            AC_CHECK_HEADER(ncurses/termcap.h, termcap_h_file=ncurses/termcap.h)
-           AC_CHECK_HEADER(ncurses/term.h, term_h_file=ncurses/term.h)
+           AC_CHECK_HEADER(ncurses/term.h,    term_h_file=ncurses/term.h)
       else
-           AC_CHECK_HEADER(ncurses.h, curses_h_file=ncurses.h)
-           AC_CHECK_HEADER(termcap.h, curses_h_file=termcap.h)
-           AC_CHECK_HEADER(term.h,    curses_h_file=term.h)
+           AC_CHECK_HEADER(ncurses.h,         curses_h_file=ncurses.h)
       fi
-      if test -n "$curses_h_file"
-       then AC_MSG_WARN([Your system has the bogus ncurses include bug.])
-       else c_switch_site="$save_c_switch_site"
+      
+      if test -z "$curses_h_file" ; then
+          dnl Try again, and check for the bogus ncurses/ include bug.
+          dnl (i.e. ncurses/curses.h bogusly includes <unctrl.h> instead of
+          dnl <ncurses/unctrl.h>)
+          save_c_switch_site="$c_switch_site"
+          c_switch_site="$c_switch_site -I/usr/include/ncurses"
+          AC_CHECK_HEADER(ncurses/ncurses.h,   curses_h_file=ncurses/ncurses.h)
+          if test -z "$curses_h_file"; then
+           AC_CHECK_HEADER(ncurses/curses.h,  curses_h_file=ncurses/curses.h)
+          fi
+          if test -n "$curses_h_file"; then
+           AC_CHECK_HEADER(ncurses/termcap.h, termcap_h_file=ncurses/termcap.h)
+           AC_CHECK_HEADER(ncurses/term.h,    term_h_file=ncurses/term.h)
+          else
+           AC_CHECK_HEADER(ncurses.h,         curses_h_file=ncurses.h)
+          fi
+          if test -n "$curses_h_file"
+         then
+               AC_MSG_WARN([Your system has the bogus ncurses include bug.])
+               AC_CHECK_HEADER(termcap.h,         curses_h_file=termcap.h)
+               AC_CHECK_HEADER(term.h,            curses_h_file=term.h)
+         else c_switch_site="$save_c_switch_site"
+          fi
       fi
+   fi
+   
+   if test -n "$curses_h_file"; then
+       AC_DEFINE_UNQUOTED([HAVE_CURSES_H], [1],
+                          [There is a curses.h header file available])
+       AC_DEFINE_UNQUOTED([CURSES_H_FILE], ["${curses_h_file}"],
+                          [The curses.h header file])
+   fi
+
+   if test -n "$termcap_h_file"; then
+       AC_DEFINE_UNQUOTED([HAVE_TERMCAP_H], [1],
+                          [There is a termcap.h header available])
+       AC_DEFINE_UNQUOTED([TERMCAP_H_FILE], ["${termcap_h_file}"],
+                          [The termcap.h header file])
+   fi
+
+   if test -n "$term_h_file"; then
+       AC_DEFINE_UNQUOTED([HAVE_TERM_H], [1],
+                          [There is a term.h header available])
+       AC_DEFINE_UNQUOTED([TERM_H_FILE], ["${term_h_file}"],
+                          [The term.h header file])
+   fi
+
+   # Finally let's see if we have prototype for the elusive tparm
+   AC_MSG_CHECKING(for tparm prototype)
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+/* Completely incompatible prototype with all tparm ones
+   if files above define it, compilation should fail
+*/
+extern void tparm(void);
+       ]], [[ tparm(); ]])],
+       [AC_MSG_RESULT(no)],
+       [AC_MSG_RESULT(yes)
+         AC_DEFINE_UNQUOTED([HAVE_TPARM_PROTOTYPE], [1],
+                           [tparm has a prototype defined])])
+
+   # Finally let's see if we have prototype for tgetent
+   AC_MSG_CHECKING(for tgetent prototype)
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+extern void tgetent(void);
+       ]], [[ tgetent(); ]])],
+       [AC_MSG_RESULT(no)],
+       [AC_MSG_RESULT(yes)
+         AC_DEFINE_UNQUOTED([HAVE_TGETENT_PROTOTYPE], [1],
+                           [tgetent has a prototype defined])])
+
+
+   # Finally let's see if we have prototype for tgetflag
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+extern void tgetflag(void);
+       ]], [[ tgetflag(); ]])],
+       [AC_MSG_RESULT(no)],
+       [AC_MSG_RESULT(yes)
+         AC_DEFINE_UNQUOTED([HAVE_TGETFLAG_PROTOTYPE], [1],
+                                [tgetflag has a prototype defined])])
+
+   # Finally let's see if we have prototype for tgetnum
+   AC_MSG_CHECKING(for tgetnum prototype)
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+extern void tgetnum(void);
+       ]], [[ tgetnum(); ]])],
+       [AC_MSG_RESULT(no)],
+       [AC_MSG_RESULT(yes)
+        AC_DEFINE_UNQUOTED([HAVE_TGETNUM_PROTOTYPE], [1],
+                           [tgetnum has a prototype defined])])
+
+   # Finally let's see if we have prototype for tgetnum
+   AC_MSG_CHECKING(for tgetstr prototype)
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+extern void tgetstr(void);
+       ]], [[ tgetstr(); ]])],
+       [AC_MSG_RESULT(no)],
+        [AC_MSG_RESULT(yes)
+        AC_DEFINE_UNQUOTED([HAVE_TGETSTR_PROTOTYPE], [1],
+                           [tgetstr has a prototype defined])])
+
+   # Finally let's see if we have prototype for tgetnum
+   AC_MSG_CHECKING(for tputs prototype)
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#ifdef TERMCAP_H_FILE
+#include TERMCAP_H_FILE
+#endif
+#ifdef CURSES_H_FILE
+#include CURSES_H_FILE
+#endif
+extern void tputs(void);
+       ]], [[ tputs(); ]])],
+       [AC_MSG_RESULT(no)],
+       [AC_MSG_RESULT(yes)
+         AC_DEFINE_UNQUOTED([HAVE_TPUTS_PROTOTYPE], [1],
+                           [tputs has a prototype defined])])
+],[
+  for feature in ncurses curses termcap terminfo termlib gpm; do
+    if eval "test -n \"\$with_${feature}\" -a \"\$with_${feature}\" != no" ; then
+      AC_MSG_WARN([--with-${feature} ignored:  Not valid without TTY support])
     fi
-])
-
-AS_IF([test "$with_tty" != "no" -a "$have_ncurses" != "no" ],[
-  if test "$with_ncurses" = "no" -o -z "$curses_h_file" ; then
-
-    # Check alternate library includes
-    for lib in curses term terminfo termcap; do
-       AC_CHECK_HEADER(${lib}.h, [
-               eval ${lib}_h_file=${lib}.h
-               AC_CHECK_LIB($lib, tgetent, eval have_${lib}=yes, eval have_${lib}=no)
-               AC_CHECK_LIB($lib, tgetstr, , eval have_${lib}=no)])
-    done
-
-    for lib in curses terminfo termlib termcap; do
-         have_lib_eval=`eval echo \\$have_$lib`
-         if test "$have_lib_eval" = "yes"; then
-               AC_CHECK_LIB($lib, tparm,
-                         SXE_ADD_SXEUITTY_OBJS(terminfo.o),
-                         SXE_ADD_SXEUITTY_OBJS(tparam.o))
-               SXE_PREPEND(-l${lib}, LIBS)
-               break
-         fi
-    done
-  fi
-  if test -n "$curses_h_file"; then
-       AC_DEFINE_UNQUOTED([HAVE_CURSES_H], [1], [There is a curses.h header file available])
-  fi
-  if test -n "$termcap_h_file"; then
-       AC_DEFINE_UNQUOTED([HAVE_TERMCAP_H], [1], [There is a termcap.h header available])
-  fi
-  if test -n "$term_h_file"; then
-       AC_DEFINE_UNQUOTED([HAVE_TERM_H], [1], [There is a term.h header available])
-  fi
-  AC_DEFINE_UNQUOTED([CURSES_H_FILE], ["${curses_h_file-curses.h}"], [The curses.h header file])
-  AC_DEFINE_UNQUOTED([TERMCAP_H_FILE], ["${termcap_h_file-termcap.h}"], [The termcap.h header file])
-  AC_DEFINE_UNQUOTED([TERM_H_FILE], ["${term_h_file-term.h}"], [The term.h header file])
+    eval "with_${feature}=\"\""
+  done
 ])
 
 AS_IF([test "$with_tty" != "no" -a "$have_tty" != no], [
-       AC_DEFINE([HAVE_TTY], [1], [Include TTY support for SXEmacs])
-       AC_DEFINE([HAVE_UNIXOID_EVENT_LOOP], [1], [Include Unixoid event loop - TTY provided])
+       AC_DEFINE([HAVE_TTY], [1],
+                 [Include TTY support for SXEmacs])
+       AC_DEFINE([HAVE_UNIXOID_EVENT_LOOP], [1],
+                 [Include Unixoid event loop - TTY provided])
        SXE_ADD_SXEUITTY_OBJS([console-tty.o device-tty.o event-tty.o frame-tty.o objects-tty.o redisplay-tty.o cm.o])
 ])
+
 AS_IF([test "$with_tty" != "no" -a "$have_tty" != no], [
   dnl General Purpose Mouse (libgpm) support
   AS_IF([test "$with_gpm" != "no"], [
@@ -3021,6 +3269,17 @@ fi
 ## Since almost any of the below tests uses pkgconfig we make a
 ## once-for-all-times check now
 SXE_SEARCH_CONFIG_PROG([pkg-config])
+if test "$have_pkg_config" = "yes" -a -n "$with_site_prefixes"; then
+       for dir in $with_site_prefixes; do
+               pkgcfg_dir="${dir}/lib/pkgconfig"
+               if test -n "$PKG_CONFIG_PATH"; then
+                  PKG_CONFIG_PATH="$PKG_CONFIG_PATH":"$pkgcfg_dir"
+               else
+                  PKG_CONFIG_PATH="$pkgcfg_dir"
+               fi
+       done
+       export PKG_CONFIG_PATH
+fi
 
 dnl libsndfile support
 if test "$with_media_sndfile" != "no"; then
@@ -3053,8 +3312,8 @@ if test "$with_media_ffmpeg" != "no"; then
 
        if test "$have_media_ffmpeg" = "yes"; then
                AC_MSG_RESULT([yes])
-               FFMPEG_LIBS=`$PKG_CONFIG --libs libavformat`
-               FFMPEG_CPPFLAGS=`$PKG_CONFIG --cflags libavformat`
+               FFMPEG_LIBS=`$PKG_CONFIG --libs libavformat libavcodec libavutil`
+               FFMPEG_CPPFLAGS=`$PKG_CONFIG --cflags libavformat libavcodec libavutil`
                SXE_PREPEND($FFMPEG_LIBS, MM_LIBS)
                SXE_PREPEND_UNDUP($FFMPEG_CPPFLAGS, MM_CPPFLAGS)
                SXE_ADD_MM_OBJS([media-ffmpeg.o])
index 8a7eac0..e6fd4aa 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env bash
 #
 # A script to setup your git area to contribute back to SXEmacs
 #
@@ -64,7 +64,7 @@
 ##
 LETSPOP=0
 cat<<EOF
-**********************************************************************
+**[Welcome]***********************************************************
 |               Hello, and welcome to the SXEmacs Team               |
 |                                                                    |
 | This script will help guide you through setting up your personal   |
@@ -84,22 +84,26 @@ EOF
 read junk
 
 # Work in the toplevel dir just to be on the safe side
-pushd $(git rev-parse --show-toplevel) 2>/dev/null || 
+pushd $(git rev-parse --show-toplevel) 1>/dev/null || 
     ( echo 1>&2 "Please run this script from _inside_ your SXEmacs repo."
        exit 1 )
 
 # Lets not mess about in anything that isn't a SXEmacs repo
-if [ ! -f "sxemacs.pc.in" ]; then
+if [ "$(git show-ref v22.1.13 2>/dev/null|cut -c-8)" != "5ff9eebe" ]; then
     echo 1>&2 "This is NOT a SXEmacs repo, bailing out!"
     exit 1
 fi
 
+
+# Save the current branch name in case we move about
+CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
+
 ## Clean WD
 clear_wd()
 {
     cat<<EOF
 
-**********************************************************************
+**[Dirty Tree]********************************************************
 Your working directory contains changes that have not been committed
 yet.  Under certain conditions this script may do a couple of branch
 jumps, so we will play it safe and store your changes out of the way
@@ -120,8 +124,8 @@ DIRTY=$(git status -u --ignored --porcelain -z)
 have_noname()
 {
     echo
-    echo "Please enter your name as you would like it to appear in the logs"
-    echo -n "Take care to guard against shell expansion (\"John Doe\"): "
+       echo "Please enter your name as you would like it to appear in the logs"
+    echo -n 'Protected with quotes (e.g. "John Doe"): '
     read NAME
 }
 
@@ -152,7 +156,7 @@ set_email()
 {
     echo
     echo "Git needs to know your email address (for commit logs, etc)."
-    echo -n "Please enter your email address (eg john@doe.com): "
+    echo -n "Please enter your email address (e.g. john@doe.com): "
     read EMAIL
     git config user.email ${EMAIL}
 }
@@ -160,33 +164,57 @@ set_email()
 
 ## Tracking branch "for-steve"
 # Make sure origin points to http://git.sxemacs.org/sxemacs
-ORIGIN_URL=$(git config remote.origin.url)
-if [ "${ORIGIN_URL}" != "http://git.sxemacs.org/sxemacs" ]; then
-    echo
-    echo "Uh-Oh! origin URL is wrong.  Currently set to: ${ORIGIN_URL}"
-    echo -n "Hit [RETURN] to reset to: http://git.sxemacs.org/sxemacs or C-c to abort: "
-    read junk
-    git remote set-url origin http://git.sxemacs.org/sxemacs
+CHECK_ORIGIN=${CHECK_ORIGIN:-true}
+if [ "${CHECK_ORIGIN}" != "false" ]; then
+    ORIGIN_URL=$(git config remote.origin.url)
+    if [ "${ORIGIN_URL}" != "http://git.sxemacs.org/sxemacs" ]; then
+       cat<<EOF
+
+**[Bad origin]********************************************************
+WARNING: origin URL is WRONG.
+
+ It is currently set to: ${ORIGIN_URL}
+But it SHOULD be set to: http://git.sxemacs.org/sxemacs
+
+It you are absolutely 110% sure that your origin is correct, abort now
+with C-c, and re-run this script with the environment variable, 
+"CHECK_ORIGIN" set explicitly to the string: "false".  Otherwise we
+are going to reset it for you.
+**********************************************************************
+                            Hit [RETURN] to continue, or C-c to abort.
+EOF
+       read junk
+       git remote set-url origin http://git.sxemacs.org/sxemacs
+    fi
 fi
 
 set_branch()
 {
     echo
-    echo "**********************************************************************"
-    echo "Setting up a \"for-steve\" branch to track origin/master."
+    echo "**[Tracking branch]***************************************************"
+    echo 'Setting up a "for-steve" branch to track origin/master.'
     echo
     echo "This is the branch that you will merge your work into once it is"
     echo "ready for Steve to pull into his repo."
     echo "**********************************************************************"
     echo -n "                            Hit [RETURN] to continue, or C-c to abort."
     read junk
-    # Does it make a difference from where we do this from?  Lets
-    # jump into master just to be on the safe side.
-    git checkout --quiet master
+    # Does it make a difference from where we do this from?  Lets jump
+    # into master if we're not there already, just to be on the safe
+    # side.
+    [ "${CURRENT_BRANCH}" != "master" ] && git checkout --quiet master
     git branch --track for-steve origin/master
+    # Offer to leave them in for-steve, but only if we didn't stash
+    if [ ${LETSPOP} -eq 0 ]; then
+       echo
+       echo -n 'Switch to the "for-steve" branch when this script exits? [Y/n]: '
+       read RESP
+       if [ "${RESP}" = "Y" -o "${RESP}" = "y" -o "${RESP}" = "" ]; then
+           git checkout --quiet for-steve
+       fi
+    fi
 }
 git branch | grep -q for-steve || set_branch
-git checkout --quiet for-steve
 
 ## Remotes
 # myremote
@@ -194,11 +222,11 @@ set_myremote()
 {
     cat<<EOF
 
-**********************************************************************
+**[Remote]************************************************************
 You need to have a remote repository set up for you to push your
 changes to.  Steve will need read-only access so he can fetch your
 changes into his repo.  You can name this repo anything you like,
-just as long as it is a single word, and that word is not \"origin\".
+just as long as it is a single word, and that word is not "origin".
 
 A remote repo can have a "Fetch URL", and a "Push URL".  The
 former (Fetch URL) is the URL from which people would clone, pull,
@@ -209,8 +237,15 @@ The Push URL to your remote needs to be writable for you, here are a
 couple of examples...
 
     ssh://user@example.com/~/path/to/repo       (using ssh)
-    https://user:pass@example.com/path/to/repo  (using \"smart http\")
+    https://user:pass@example.com/path/to/repo  (using "smart http")
+**********************************************************************
+-- more --                  Hit [RETURN] to continue, or C-c to abort.
+EOF
+read junk
 
+    cat<<EOF
+
+**[Remote (cont)]*****************************************************
 You _could_ use a git protocol URL (git://), but because the git
 protocol has no authentication if you allow write access you are
 allowing write access for anyone who has an internet connection.  So
@@ -224,26 +259,26 @@ EOF
     read junk
     REMOTES=($(git remote | grep -v origin))
     echo
-    echo "**********************************************************************"
+    echo "**[Remotes]***********************************************************"
     echo "          Currently configured remotes (possibly empty list)"
     echo
-    for (( i = 1; i <= ${#REMOTES}; i++ )); do
-       echo -n "\t"${i} -- ${REMOTES[${i}]}" at: "
+    for (( i = 0; i <= ${#REMOTES}; i++ )); do
+       echo -en "\t"${i} -- ${REMOTES[${i}]}" at: "
        echo $(git config remote.${REMOTES[${i}]}.url)
     done
     echo
     echo "**********************************************************************"
-    echo -n " Enter the number that corresponds to your remote, or \"x\" for none: "
+    echo -n ' Enter the number that corresponds to your remote, or "x" for none: '
     read index
 
     if [ "${index}" = "x" -o "${index}" = "" ]; then
        echo
-       echo -n "Enter the \"Fetch URL\" (read-only access) to your remote: "
+       echo -n 'Enter the "Fetch URL" (read-only access) to your remote: '
        read MYREMOTE_FETCH
-       echo -n "Enter the \"Push URL\" (write-access for you) to your remote: "
+       echo -n 'Enter the "Push URL" (write-access for you) to your remote: '
        read MYREMOTE_PUSH
-       echo "And what would you like to call this remote?  It MUST be a single "
-       echo -n "word, and CANNOT be \"origin\": "
+       echo "And what would you like to call this remote?  It MUST be a single"
+       echo -n 'word, and CANNOT be "origin": '
        read MYREMOTE_NAME
        git remote add ${MYREMOTE_NAME} ${MYREMOTE_FETCH}
        git remote set-url --push ${MYREMOTE_NAME} ${MYREMOTE_PUSH}
@@ -252,19 +287,19 @@ EOF
        TYPE="X"
        URL=$(git config remote.${REMOTES[${index}]}.url)
        while [ "${TYPE}" != "F" -a "${TYPE}" != "P" -a "${TYPE}" != "B" ]; do
-           echo  "Is \"${URL}\""
+           echo 'Is "'${URL}'"'
            echo -n "  used for Fetch, Push, or Both? [F/P/B]: "
            read TYPE
            TYPE=$(echo ${TYPE}|tr 'fpb' 'FPB')
        done
        case ${TYPE} in
            F)
-               echo -n "${REMOTES[${index}]} \"Push URL\" (write-access for you): "
+               echo -n ${REMOTES[${index}]} '"Push URL" (write-access for you): '
                read TYPEURL
                git remote set-url --push ${REMOTES[${index}]} ${TYPEURL}
                ;;
            P)
-               echo -n "${REMOTES[${index}]} \"Fetch URL\" (read-only access): "
+               echo -n ${REMOTES[${index}]} '"Fetch URL" (read-only access): '
                read TYPEURL
                git remote set-url ${REMOTES[${index}]} ${TYPEURL}
                git remote set-url --push ${REMOTES[${index}]} ${URL}
@@ -277,7 +312,7 @@ EOF
 if [ -z "$(git config sxemacs.remote)" ]; then
     cat<<EOF
 
-**********************************************************************
+**[Public repo]*******************************************************
 The easiest, and quickest way to get your work and changes into the
 main SXEmacs repository is if you have a publicly accessible remote
 repo.  Well, technically, it does not need to be publicly accessible,
@@ -285,7 +320,7 @@ it just needs to allow Steve read-only access.  Nobody, except you,
 will ever need to write to this repo.
 **********************************************************************
 EOF
-    echo -n "                    Do you have a remote repo like this set up? [Y/n]:"
+    echo -n "                   Do you have a remote repo like this set up? [Y/n]: "
     read RESP
     if [ "${RESP}" = "Y" -o "${RESP}" = "y" -o "${RESP}" = "" ]; then
        set_myremote
@@ -305,11 +340,14 @@ set_tagblob()
 
     git tag|grep -q ${TAGNAME} && TAGEXISTS=yes
     if [ "${TAGEXISTS}" = "yes" ]; then
+       echo
+       echo "**[Existing devkey]***************************************************"
        echo "There is already a developer key tag using your initials..."
        echo
        git show ${TAGNAME}|sed -n 2,5p
        echo
-       echo -n "Is it yours? [Y/n]: "
+       echo "**********************************************************************"
+       echo -n "                                                  Is it yours? [Y/n]: "
        read RESP
        if [ "${RESP}" = "Y" -o "${RESP}" = "y" -o "${RESP}" = "" ]; then
            git config sxemacs.devkey $(git show-ref ${TAGNAME}|awk '{print $1;}')
@@ -334,6 +372,8 @@ You may import this key into your GnuPG keyring with...
 To verify signed objects in the repo, use the '--show-signature'
 option with the git-log and git-show commands.
 
+To verify this tag, use 'git tag -v ${TAGNAME}'
+
 EOF
 )
        git tag -s ${TAGNAME} -m "${TAGMSG}" \
@@ -342,15 +382,26 @@ EOF
        git config sxemacs.devkey $(git show-ref ${TAGNAME} | 
            awk '{print $1;}')
 
-       echo
-       echo "Your devkey tag has been created successfully."
+       # If something went wrong here we should probably bail out
+       if [ $? -gt 0 ]; then
+           echo 1>&2 'Something has gone horribly wrong while trying to add your devkey.'
+           echo 1>&2 'Please check that your local GnuPG settings are correct, and then'
+           echo 1>&2 'attempt to re-run this script.'
+           echo
+           echo 1>&2 'If the problem persists, get in contact with us and we will do our'
+           echo 1>&2 'best to help you resolve it.'
+           exit 1
+       else
+           echo
+           echo "Your devkey tag has been created successfully."
+       fi
        echo -n "Can we now push ${TAGNAME} to $(git config sxemacs.remote)? [Y/n]: "
        read RESP
        if [ "${RESP}" = "Y" -o "${RESP}" = "y" -o "${RESP}" = "" ]; then
            git push $(git config sxemacs.remote) ${TAGNAME}
            cat<<EOF
 
-**********************************************************************
+**[Devkey]************************************************************
 Please let Steve know that your devkey is ready to be fetched into the
 main SXEmacs repo.
 
@@ -372,7 +423,7 @@ set_keys()
     git tag|grep -q maintainer-pgp &&
         git show maintainer-pgp|gpg --import --quiet
 
-    DEFKEY=$(grep default-key ~/.gnupg/gpg.conf 2>/dev/null |
+    DEFKEY=$(grep '^default-key' ~/.gnupg/gpg.conf 2>/dev/null |
        awk '{print $2;}')
     if [ -z "${DEFKEY}" ]; then
        GUESS=$(gpg --list-keys $(git config user.email) |
@@ -398,7 +449,7 @@ set_keys()
 if ! type gpg 1>/dev/null ; then
     cat<<EOF
 
-**********************************************************************
+**[No GnuPG]**********************************************************
 WARNING:  We could not find a gpg executable!
           The GnuPG related setup in this script will be skipped.
 
@@ -427,9 +478,9 @@ set_formats()
         git config format.numbered auto
     [ -n "$(git config format.to)" ] || git config format.to \
        "SXEmacs Patches <sxemacs-patches@sxemacs.org>"
-    [ -n "$(git config format.subjecprefix)" ] ||
+    [ -n "$(git config format.subjectprefix)" ] ||
         git config format.subjectprefix Patch
-    git config format.headers || git config format.headers \
+    [ -n "$(git config format.headers)" ] || git config format.headers \
        "X-Git-Repo: $(git config remote.$(git config sxemacs.remote).url)
 X-Git-Branch: for-steve"
     [ -n "$(git config sendemail.to)" ] || git config sendemail.to \
@@ -438,7 +489,7 @@ X-Git-Branch: for-steve"
        "$(git config user.name) <$(git config user.email)>"
 
     echo
-    echo "**********************************************************************"
+    echo "**[Format Summary]****************************************************"
     echo "        Here are the format and sendemail configs we just set."
     echo
     echo "      format.numbered --" $(git config format.numbered)
@@ -455,9 +506,15 @@ X-Git-Branch: for-steve"
 }
 BOOL=$(git config sxemacs.formats)
 if [ "${BOOL}" != "true" ]; then
-    echo
-    echo "We're going to set some format config values, but only if they aren't"
-    echo "already set, so your existing ones are safe."
+    cat<<EOF
+
+**[Formats]***********************************************************
+We are going to set some format config values, but only if they are
+not already set, so your existing ones are safe.
+**********************************************************************
+                            Hit [RETURN] to continue, or C-c to abort.
+EOF
+    read junk
     set_formats
 fi
 
@@ -466,23 +523,25 @@ set_hook()
 {
     # post-commit hook
     if [ -f ".git/hooks/post-commit" ]; then
-       cat>>.git/hooks/post-commit<<EOF
+       if ! grep -q 'lines added by git-for-steve' .git/hooks/post-commit; then
+           cat>>.git/hooks/post-commit<<EOF
 
 ### Begin - lines added by git-for-steve.sh
 LOG=\$(git rev-parse --show-toplevel)/++log
 [ -f \${LOG} ] && rm -f \${LOG}
 ### End -- lines added by git-for-steve.sh
 EOF
+       fi
     elif [ -f ".git/hooks/post-commit.sample" ]; then
-       cat>>.git/hooks/post-commit.sample<<EOF
+       cp .git/hooks/post-commit{.sample,}
+       sed -i /Nothing/d .git/hooks/post-commit
+       cat>>.git/hooks/post-commit<<EOF
 
 ### Begin - lines added by git-for-steve.sh
 LOG=\$(git rev-parse --show-toplevel)/++log
 [ -f \${LOG} ] && rm -f \${LOG}
 ### End -- lines added by git-for-steve.sh
 EOF
-        sed -i /Nothing/d .git/hooks/post-commit.sample
-       mv .git/hooks/post-commit{.sample,}
     else
        cat>.git/hooks/post-commit<<EOF
 #!/bin/sh
@@ -499,9 +558,9 @@ HAVEHOOK=$(git config sxemacs.commithook)
 if [ "${HAVEHOOK}" != "true" ]; then
     cat<<EOF
 
-**********************************************************************
+**[Commit Hook]*******************************************************
 Some of the SXEmacs developers use a variation of the
-#'add-change-log-entry defun (C-x 4 a) for logging their changes
+'add-change-log-entry' defun (C-x 4 a) for logging their changes
 It creates a log file in the toplevel directory (called '++log') which
 you can use with the '-F' switch of 'git commit'.
 
@@ -528,11 +587,13 @@ set_aliases()
     GITTMP=${GITTMP:-${TMP:-/tmp}}
 
     [ -n "$(git config alias.alias)" ] ||
-        git config alias.alias "config --get-regexp alias"
+        git config alias.alias "config --get-regexp ^alias"
     [ -n "$(git config alias.bi)" ] || git config alias.bi bisect
     [ -n "$(git config alias.co)" ] || git config alias.co checkout
+    [ -n "$(git config alias.cob)" ] || git config alias.cob "checkout -b"
     [ -n "$(git config alias.ci)" ] || git config alias.ci commit
     [ -n "$(git config alias.cam)" ] || git config alias.cam "commit -sam"
+    [ -n "$(git config alias.sam)" ] || git config alias.sam "commit -sam"
 
     BOOL=$(git config sxemacs.commithook)
     if [ "${BOOL}" = "true" ]; then
@@ -545,8 +606,14 @@ set_aliases()
     fi
 
     [ -n "$(git config alias.rbi)" ] || git config alias.rbi "rebase -i"
-    [ -n "$(git config alias.pfs)" ] ||
-        git config alias.pfs "push $(git config sxemacs.remote) for-steve"
+    [ -n "$(git config alias.prb)" ] || git config alias.prb "pull --rebase"
+
+    REMOTE=$(git config sxemacs.remote)
+    if [ -n "${REMOTE}" ]; then
+       [ -n "$(git config alias.pfs)" ] ||
+            git config alias.pfs "push ${REMOTE} for-steve"
+    fi
+
     [ -n "$(git config alias.fp)" ] || git config alias.fp \
        "format-patch --minimal -o ${GITTMP} origin/master"
     [ -n "$(git config alias.fpc)" ] || git config alias.fpc \
@@ -555,9 +622,11 @@ set_aliases()
        "send-email ${GITTMP}"
     [ -n "$(git config alias.spc)" ] || git config alias.spc \
        "send-email --compose ${GITTMP}"
+    [ -n "$(git config alias.wb)" ] || git config alias.wb \
+       "rev-parse --abbrev-ref HEAD"
 
     echo
-    echo "**********************************************************************"
+    echo "**[Your Aliases]******************************************************"
     echo "         The following aliases are now available for use..."
     echo
     git alias
@@ -572,7 +641,7 @@ BOOL=$(git config sxemacs.aliases)
 if [ "${BOOL}" != "true" ]; then
     cat<<EOF
 
-**********************************************************************
+**[Aliases]***********************************************************
 And finally, lets set a few aliases.  We will only set them if they
 have not already been set so all of your pre-existing aliases are
 safe.
@@ -583,9 +652,20 @@ EOF
     set_aliases
 fi
 
+popd 1>/dev/null
+
+if [ ${LETSPOP} -eq 1 ]; then
+    # If we changed branches on them, go back.
+    if [ "${CURRENT_BRANCH}" != "$(git rev-parse --abbrev-ref HEAD)" ]; then
+       git checkout --quiet ${CURRENT_BRANCH}
+    fi
+    git stash pop --quiet
+fi
+
+## All done, bar the shouting...
 cat<<EOF
 
-**********************************************************************
+**[Thanks]************************************************************
 | Thank you for taking the time to setup your repo so that you can   |
 | contribute back to the SXEmacs Project.  We really appreciate all  |
 | that you do, no matter how small or insignificant you may think it |
@@ -605,10 +685,5 @@ cat<<EOF
 **********************************************************************
 EOF
 
-# If we stashed at the start, pop them back
-[ ${LETSPOP} -eq 1 ] && git stash pop --quiet
-
-popd
-
 exit 0
 ### git-for-steve.sh ends here.
index 6e166d9..0a9461e 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -20,6 +20,74 @@ in each release should look at the appropriate section of this file.
 
 
 \f
+* Changes in SXEmacs 22.1.16 (Hillman Hunter)
+=============================================
+
+** Developer Stats
+
+           Nelson Ferreira -- 124 commits
+
+              Steve Youngs --  62 commits
+    Horst G. Burkhardt III --   6 commits
+             Evgeny Zajcev --   3 commits
+            Ruediger Meier --   3 commits
+         Sebastian Freundt --   1 commit
+
+** Bugs closed in this release:
+
+132, 141, 152, 155, 156, 158, 160, 161, 162, 163, 165, 169, 170, 171,
+172, 173, 174, 176, 181
+
+** Multimedia fixes/updates -- Ferreira, Youngs.
+
+SoX and FFmpeg support was brought back and mostly fixed.  PulseAudio
+has been brought back, and support for "media roles" was added.
+
+** Build chain fixes/updates -- Meier, Ferreira, Burkhardt, Youngs
+
+A lot of work went into stamping out compiler warnings and errors to
+give us a much cleaner/safer build.
+
+** FFI updates -- Zajcev, Youngs.
+
+** Don't reset the cursor upon exit on a TTY -- Youngs.
+
+** Contrib updates/fixes/additions -- Ferreira, Youngs.
+
+** Make docs compatible with Texinfo 5.x -- Youngs.
+
+** Support Unix user/group lookups -- Ferreira.
+
+** XDG compliance -- Youngs.
+
+SXEmacs now looks for user files in locations that are much more
+inline with modern standards and conventions.
+
+`user-init-directory' is now ${XDG_CONFIG_HOME}/sxemacs or
+~/.config/sxemacs if $XDG_CONFIG_HOME is not set.
+
+User packages will now be searched for in ${XDG_DATA_HOME}/sxemacs
+(~/.local/share/sxemacs).
+
+The old legacy directory `~/.sxemacs' is still supported, and in fact
+will still be used if the XDG directories don't exist and it (the
+legacy dir) does.  A user can also force use of the legacy directory
+if they so choose.
+
+** Add wildcard support to #'find-file et al. -- Youngs.
+
+** Fix coding cookies -- Youngs.
+
+** "In-tree builds" are no longer supported. -- Youngs.
+
+If you want to build SXEmacs, do the right thing and build OUTSIDE of
+the source tree.
+
+** TTY related fixes/updates -- Ferreira.
+
+** Various minor updates/tweaks/fixes -- Burkhardt, Ferreira, Youngs.
+
+
 * Changes in SXEmacs 22.1.15 (Goggomobil)
 =========================================
 
index 7449556..34f8a57 100644 (file)
 LANG=C
 LC_ALL=C
 
+# Since automake does not ignore unknown options, this has to be set in
+# a horrible hack in configure.ac until we choose to mandate automake 1.14
+# Since many distros still carry automake 1.13, this is up for debate...
+#
+# AUTOMAKE_OPTIONS = info-in-builddir
+
+builddir = @builddir@
+srcdir = @srcdir@
+
+SUBDIRS=
+
+CLEANFILES =
+CLEANFILES += cl.info
+CLEANFILES += custom.info
+CLEANFILES += emodules.info
+CLEANFILES += external-widget.info
+CLEANFILES += internals/internals.info
+CLEANFILES += lispref/lispref.info
+CLEANFILES += new-users-guide/new-users-guide.info
+CLEANFILES += sppm.info
+CLEANFILES += sxemacs-faq.info
+CLEANFILES += sxemacs/sxemacs.info
+CLEANFILES += term.info
+CLEANFILES += widget.info
+
 info_TEXINFOS =
 info_TEXINFOS += cl.texi
 info_TEXINFOS += custom.texi
index 39f62c0..d4b0aa1 100644 (file)
@@ -43,7 +43,7 @@ Mode, sxemacs, The SXEmacs User's Manual}.
 * Standard Abbrev Tables::      Abbrev tables used by various major modes.
 @end menu
 
-@node Abbrev Mode
+@node Abbrev Mode, Abbrev Tables, Abbrevs, Abbrevs
 @section Setting Up Abbrev Mode
 
   Abbrev mode is a minor mode controlled by the value of the variable
@@ -306,7 +306,7 @@ aborts expansion if it is not confirmed.
           (error "Not expanding this abbrev"))))
 @end smallexample
 
-@node Standard Abbrev Tables
+@node Standard Abbrev Tables,  , Abbrev Expansion, Abbrevs
 @section Standard Abbrev Tables
 
   Here we list the variables that hold the abbrev tables for the
index 7246c81..e7bee22 100644 (file)
@@ -6,7 +6,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/annotations.info
 
-@node Annotations, Display, Glyphs, top
+@node Annotations, Display, Glyphs, Top
 @chapter Annotations
 @cindex annotation
 
@@ -30,7 +30,7 @@ extents work.
                                  annotation's lifetime.
 @end menu
 
-@node Annotation Basics
+@node Annotation Basics, Annotation Primitives, Annotations, Annotations
 @section Annotation Basics
 
 @cindex margin
@@ -121,7 +121,7 @@ displayed using any remaining space.  Finally as many
 space to display in.
 
 
-@node Annotation Primitives
+@node Annotation Primitives, Annotation Properties, Annotation Basics, Annotations
 @section Annotation Primitives
 
 @defun make-annotation glyph &optional position layout buffer with-event d-glyph rightp
@@ -152,7 +152,7 @@ This function returns @code{t} if @var{annotation} is an annotation,
 @code{nil} otherwise.
 @end defun
 
-@node Annotation Properties
+@node Annotation Properties, Locating Annotations, Annotation Primitives, Annotations
 @section Annotation Properties
 
 @defun annotation-glyph annotation
@@ -249,7 +249,7 @@ This function restores @var{annotation}'s glyph, making it visible.
 @end defun
 
 
-@node Locating Annotations
+@node Locating Annotations, Margin Primitives, Annotation Properties, Annotations
 @section Locating Annotations
 
 @defun annotations-in-region start end buffer
@@ -274,7 +274,7 @@ existence.
 @end defun
 
 
-@node Margin Primitives
+@node Margin Primitives, Annotation Hooks, Locating Annotations, Annotations
 @section Margin Primitives
 @cindex margin width
 
@@ -324,7 +324,7 @@ The margin colors are controlled by the faces @code{left-margin} and
 @code{Emacs.left-margin.foreground}; likewise for the right margin.
 
 
-@node Annotation Hooks
+@node Annotation Hooks,  , Margin Primitives, Annotations
 @section Annotation Hooks
 @cindex annotation hooks
 
index 37bc889..d7635d6 100644 (file)
@@ -20,7 +20,7 @@ current session.
 @end menu
 
 
-@node Backup Files
+@node Backup Files, Auto-Saving, Backups and Auto-Saving, Backups and Auto-Saving
 @section Backup Files
 @cindex backup file
 
@@ -50,7 +50,7 @@ don't want them any more, or SXEmacs can delete them automatically.
 @end menu
 
 
-@node Making Backups
+@node Making Backups, Rename or Copy, Backup Files, Backup Files
 @subsection Making Backup Files
 
 @defun backup-buffer
@@ -121,7 +121,7 @@ its value.  Major modes should not set this variable---they should set
 @end defvar
 
 
-@node Rename or Copy
+@node Rename or Copy, Numbered Backups, Making Backups, Backup Files
 @subsection Backup by Renaming or by Copying?
 @cindex backup files, how to make them
 
@@ -186,7 +186,7 @@ non-@code{nil}.
 @end defvar
 
 
-@node Numbered Backups
+@node Numbered Backups, Backup Names, Rename or Copy, Backup Files
 @subsection Making and Deleting Numbered Backup Files
 
   If a file's name is @file{foo}, the names of its numbered backup
@@ -246,7 +246,7 @@ same thing @code{kept-new-versions} specifies when you make a new backup
 file.  The default value is 2.
 @end defopt
 
-@node Backup Names
+@node Backup Names,  , Numbered Backups, Backup Files
 @subsection Naming Backup Files
 
   The functions in this section are documented mainly because you can
@@ -357,7 +357,7 @@ automatically compare a file with its most recent backup.
 @end defun
 
 
-@node Auto-Saving
+@node Auto-Saving, Reverting, Backup Files, Backups and Auto-Saving
 @section Auto-Saving
 @cindex auto-saving
 
@@ -583,7 +583,7 @@ host name.
 @end defvar
 
 
-@node Reverting
+@node Reverting,  , Auto-Saving, Backups and Auto-Saving
 @section Reverting
 
   If you have made extensive changes to a file and then change your mind
index 5006495..6977f0f 100644 (file)
@@ -34,7 +34,7 @@ not be displayed in any window.
 @end menu
 
 
-@node Buffer Basics
+@node Buffer Basics, Current Buffer, Buffers, Buffers
 @section Buffer Basics
 
 @ifinfo
index fdcf5eb..f2eccab 100644 (file)
@@ -23,7 +23,7 @@ aspects related to the internals of SXEmacs.
 @end menu
 
 
-@node Building SXEmacs
+@node Building SXEmacs, Garbage Collection, Building SXEmacs and Object Allocation, Building SXEmacs and Object Allocation
 @appendixsec Building SXEmacs
 @cindex building SXEmacs
 @pindex temacs
index a12918e..13604c0 100644 (file)
@@ -33,7 +33,7 @@ are done, and the subroutines that allow Lisp programs to do them.
 @end menu
 
 
-@node Command Overview
+@node Command Overview, Defining Commands, Command Loop, Command Loop
 @section Command Loop Overview
 
   The command loop in SXEmacs is a standard event loop, reading events
@@ -99,7 +99,7 @@ these hooks, it terminates execution of the hook, but that is all it
 does.
 
 
-@node Defining Commands
+@node Defining Commands, Interactive Call, Command Overview, Command Loop
 @section Defining Commands
 @cindex defining commands
 @cindex commands, defining
@@ -120,7 +120,7 @@ controls the reading of arguments for an interactive call.
 @end menu
 
 
-@node Using Interactive
+@node Using Interactive, Interactive Codes, Defining Commands, Defining Commands
 @subsection Using @code{interactive}
 
   This section describes how to write the @code{interactive} form that
@@ -252,7 +252,7 @@ as the list of the symbol @code{interactive} and the specs.  If
 @var{function} is not interactive, @code{nil} will be returned.
 @end defun
 
-@node Interactive Codes
+@node Interactive Codes, Interactive Examples, Using Interactive, Defining Commands
 @subsection Code Characters for @code{interactive}
 @cindex interactive code description
 @cindex description for interactive codes
@@ -432,7 +432,7 @@ A Lisp form is read as with @kbd{x}, but then evaluated so that its
 value becomes the argument for the command.  Prompt.
 @end table
 
-@node Interactive Examples
+@node Interactive Examples,  , Interactive Codes, Defining Commands
 @subsection Examples of Using @code{interactive}
 @cindex examples of using @code{interactive}
 @cindex @code{interactive}, examples of using
@@ -483,7 +483,7 @@ Put them into three windows, selecting the last one."
 @end example
 
 
-@node Interactive Call
+@node Interactive Call, Command Loop Info, Defining Commands, Command Loop
 @section Interactive Call
 @cindex interactive call
 
@@ -637,7 +637,7 @@ foobar
 @end defun
 
 
-@node Command Loop Info
+@node Command Loop Info, Events, Interactive Call, Command Loop
 @section Information from the Command Loop
 
 The editor command loop sets several Lisp variables to keep status
@@ -785,7 +785,7 @@ If the value is zero, then command input is not echoed.
 @end defvar
 
 
-@node Events
+@node Events, Reading Input, Command Loop Info, Command Loop
 @section Events
 @cindex events
 @cindex input events
@@ -826,7 +826,7 @@ This function returns non-@code{nil} if @var{object} is an input event.
 @end menu
 
 
-@node Event Types
+@node Event Types, Event Contents, Events, Events
 @subsection Event Types
 
 Events represent keyboard or mouse activity or status changes of various
@@ -877,7 +877,7 @@ This kind of event should generally just be passed off to
 @end table
 
 
-@node Event Contents
+@node Event Contents, Event Predicates, Event Types, Events
 @subsection Contents of the Different Types of Events
 
   Every event, no matter what type it is, contains a timestamp (which is
@@ -1024,7 +1024,7 @@ Some window-system-specific event has occurred.
 @end table
 @end defun
 
-@node Event Predicates
+@node Event Predicates, Accessing Mouse Event Positions, Event Contents, Events
 @subsection Event Predicates
 
 The following predicates return whether an object is an event of a
@@ -1077,7 +1077,7 @@ This is true if @var{object} is any event that has not been deallocated.
 @end defun
 
 
-@node Accessing Mouse Event Positions
+@node Accessing Mouse Event Positions, Accessing Other Event Info, Event Predicates, Events
 @subsection Accessing the Position of a Mouse Event
 
 Unlike other events, mouse events (i.e. motion, button-press,
@@ -1096,7 +1096,7 @@ location.
 @end menu
 
 
-@node Frame-Level Event Position Info
+@node Frame-Level Event Position Info, Window-Level Event Position Info, Accessing Mouse Event Positions, Accessing Mouse Event Positions
 @subsubsection Frame-Level Event Position Info
 
 The following functions return frame-level information about where
@@ -1120,7 +1120,7 @@ The value returned is relative to the frame the event occurred in.
 This will signal an error if the event is not a mouse event.
 @end defun
 
-@node Window-Level Event Position Info
+@node Window-Level Event Position Info, Event Text Position Info, Frame-Level Event Position Info, Accessing Mouse Event Positions
 @subsubsection Window-Level Event Position Info
 
 The following functions return window-level information about where
@@ -1156,7 +1156,7 @@ This will signal an error if the event is not a mouse-motion,
 button-press, button-release, or misc-user event.
 @end defun
 
-@node Event Text Position Info
+@node Event Text Position Info, Event Glyph Position Info, Window-Level Event Position Info, Accessing Mouse Event Positions
 @subsubsection Event Text Position Info
 
 The following functions return information about the text (including the
@@ -1209,7 +1209,7 @@ it is below a window, the value of @code{(window-end)} is returned.
 @end defun
 
 
-@node Event Glyph Position Info
+@node Event Glyph Position Info, Event Toolbar Position Info, Event Text Position Info, Accessing Mouse Event Positions
 @subsubsection Event Glyph Position Info
 
 The following functions return information about the glyph (if any) that
@@ -1242,7 +1242,7 @@ glyph, it returns @code{nil}.
 @end defun
 
 
-@node Event Toolbar Position Info
+@node Event Toolbar Position Info, Other Event Position Info, Event Glyph Position Info, Accessing Mouse Event Positions
 @subsubsection Event Toolbar Position Info
 
 @defun event-over-toolbar-p event
@@ -1258,7 +1258,7 @@ button.  Otherwise, @code{nil} is returned.
 @end defun
 
 
-@node Other Event Position Info
+@node Other Event Position Info,  , Event Toolbar Position Info, Accessing Mouse Event Positions
 @subsubsection Other Event Position Info
 
 @defun event-over-border-p event
@@ -1267,7 +1267,7 @@ this function returns @code{t} if the event is over an internal toolbar.
 Otherwise, @code{nil} is returned.
 @end defun
 
-@node Accessing Other Event Info
+@node Accessing Other Event Info, Working With Events, Accessing Mouse Event Positions, Events
 @subsection Accessing the Other Contents of Events
 
 The following functions allow access to the contents of events other
@@ -1316,7 +1316,7 @@ This function returns the process of the given process event.
 @end defun
 
 
-@node Working With Events
+@node Working With Events, Converting Events, Accessing Other Event Info, Events
 @subsection Working With Events
 
   SXEmacs provides primitives for creating, copying, and destroying
@@ -1482,7 +1482,7 @@ safe to do so.
 @end defun
 
 
-@node Converting Events
+@node Converting Events,  , Working With Events, Events
 @subsection Converting Events
 
 SXEmacs provides some auxiliary functions for converting between events
@@ -1555,7 +1555,7 @@ Optional arg @var{no-mice} means that button events are not allowed.
 @end defun
 
 
-@node Reading Input
+@node Reading Input, Waiting, Events, Command Loop
 @section Reading Input
 
   The editor command loop reads keyboard input using the function
@@ -1580,7 +1580,7 @@ debugging terminal input.
 @end menu
 
 
-@node Key Sequence Input
+@node Key Sequence Input, Reading One Event, Reading Input, Reading Input
 @subsection Key Sequence Input
 @cindex key sequence input
 
@@ -1656,7 +1656,7 @@ but its lower-case equivalent has one, then @code{read-key-sequence}
 converts the character to lower case.  Note that @code{lookup-key} does
 not perform case conversion in this way.
 
-@node Reading One Event
+@node Reading One Event, Dispatching an Event, Key Sequence Input, Reading Input
 @subsection Reading One Event
 
   The lowest level functions for command input are those which read a
@@ -1729,7 +1729,7 @@ This function adds an eval event to the back of the queue.  The
 eval event will be the next event read after all pending events.
 @end defun
 
-@node Dispatching an Event
+@node Dispatching an Event, Quoted Character Input, Reading One Event, Reading Input
 @subsection Dispatching an Event
 @cindex dispatching an event
 
@@ -1741,7 +1741,7 @@ user input; it also deals with notifications from the window system
 @end defun
 
 
-@node Quoted Character Input
+@node Quoted Character Input, Peeking and Discarding, Dispatching an Event, Reading Input
 @subsection Quoted Character Input
 @cindex quoted character input
 
@@ -1784,7 +1784,7 @@ What character-@kbd{177}
 
 
 @need 2000
-@node Peeking and Discarding
+@node Peeking and Discarding,  , Quoted Character Input, Reading Input
 @subsection Miscellaneous Event Input Features
 
 This section describes how to ``peek ahead'' at events without using
@@ -1900,7 +1900,7 @@ during the sleep.
 @end defun
 
 
-@node Waiting
+@node Waiting, Quitting, Reading Input, Command Loop
 @section Waiting for Elapsed Time or Input
 @cindex pausing
 @cindex waiting
@@ -1970,7 +1970,7 @@ Use @code{sleep-for} when you wish to guarantee a delay.
   @xref{Time of Day}, for functions to get the current time.
 
 
-@node Quitting
+@node Quitting, Prefix Command Arguments, Waiting, Command Loop
 @section Quitting
 @cindex @kbd{C-g}
 @cindex quitting
@@ -2071,7 +2071,7 @@ in @ref{Errors}.)
 See the function @code{set-input-mode} in @ref{Terminal Input}.
 
 
-@node Prefix Command Arguments
+@node Prefix Command Arguments, Recursive Editing, Quitting, Command Loop
 @section Prefix Command Arguments
 @cindex prefix argument
 @cindex raw prefix argument
@@ -2217,7 +2217,7 @@ call this command yourself unless you know what you are doing.
 @end deffn
 
 
-@node Recursive Editing
+@node Recursive Editing, Disabling Commands, Prefix Command Arguments, Command Loop
 @section Recursive Editing
 @cindex recursive command loop
 @cindex recursive editing level
@@ -2331,7 +2331,7 @@ This function returns the current depth of recursive edits.  When no
 recursive edit is active, it returns 0.
 @end defun
 
-@node Disabling Commands
+@node Disabling Commands, Command History, Recursive Editing, Command Loop
 @section Disabling Commands
 @cindex disabled command
 
@@ -2390,7 +2390,7 @@ the user whether to proceed.
 @end defvar
 
 
-@node Command History
+@node Command History, Keyboard Macros, Disabling Commands, Command Loop
 @section Command History
 @cindex command history
 @cindex complex command
@@ -2435,7 +2435,7 @@ minibuffer, the history commands used are the same ones available in any
 minibuffer.
 
 
-@node Keyboard Macros
+@node Keyboard Macros,  , Command History, Command Loop
 @section Keyboard Macros
 @cindex keyboard macros
 
index 7ad84c8..a237b6c 100644 (file)
@@ -56,7 +56,7 @@ byte compilation.
 @end menu
 
 
-@node Speed of Byte-Code
+@node Speed of Byte-Code, Compilation Functions, Byte Compilation, Byte Compilation
 @section Performance of Byte-Compiled Code
 
   A byte-compiled function is not as efficient as a primitive function
@@ -1116,7 +1116,7 @@ The @code{silly-loop} function is somewhat more complex:
 @end example
 
 
-@node Different Behaviour
+@node Different Behaviour,  , Disassembly, Byte Compilation
 @section Different Behaviour
 
 The intent is that compiled byte-code and the corresponding code
index 27fe54e..da11442 100644 (file)
@@ -5,7 +5,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/consoles-devices.info
 
-@node Consoles and Devices, Positions, Frames, top
+@node Consoles and Devices, Positions, Frames, Top
 @chapter Consoles and Devices
 @cindex devices
 @cindex consoles
index f87bf85..2a70125 100644 (file)
@@ -44,7 +44,7 @@ structure constructs (@pxref{Macros}).
 @end menu
 
 
-@node Sequencing
+@node Sequencing, Conditionals, Control Structures, Control Structures
 @section Sequencing
 
   Evaluating forms in the order they appear is the most common way
@@ -142,7 +142,7 @@ following @var{forms}, in textual order, returning the result of
 @end defspec
 
 
-@node Conditionals
+@node Conditionals, Combining Conditions, Sequencing, Control Structures
 @section Conditionals
 @cindex conditional evaluation
 
@@ -259,7 +259,7 @@ For example:
 @end example
 
 
-@node Combining Conditions
+@node Combining Conditions, Iteration, Conditionals, Control Structures
 @section Constructs for Combining Conditions
 
   This section describes three constructs that are often used together
@@ -378,7 +378,7 @@ This is not completely equivalent because it can evaluate @var{arg1} or
 @end defspec
 
 
-@node Iteration
+@node Iteration, Nonlocal Exits, Combining Conditions, Control Structures
 @section Iteration
 @cindex iteration
 @cindex recursion
@@ -442,7 +442,7 @@ loaded.
 @c description here anyway?
 
 
-@node Nonlocal Exits
+@node Nonlocal Exits,  , Iteration, Control Structures
 @section Nonlocal Exits
 @cindex nonlocal exits
 
@@ -460,7 +460,7 @@ constructs being exited.
 @end menu
 
 
-@node Catch and Throw
+@node Catch and Throw, Examples of Catch, Nonlocal Exits, Nonlocal Exits
 @subsection Explicit Nonlocal Exits: @code{catch} and @code{throw}
 
   Most control constructs affect only the flow of control within the
@@ -554,7 +554,7 @@ error is signaled with data @code{(@var{tag} @var{value})}.
 @end defun
 
 
-@node Examples of Catch
+@node Examples of Catch, Errors, Catch and Throw, Nonlocal Exits
 @subsection Examples of @code{catch} and @code{throw}
 
   One way to use @code{catch} and @code{throw} is to exit from a doubly
@@ -637,7 +637,7 @@ Therefore, @code{throw} makes the outer @code{catch} return the value
 body-form @code{'no} is never evaluated.
 
 
-@node Errors
+@node Errors, Cleanups, Examples of Catch, Nonlocal Exits
 @subsection Errors
 @cindex errors
 
@@ -673,7 +673,7 @@ instead.  @xref{Catch and Throw}.
 @end menu
 
 
-@node Signaling Errors
+@node Signaling Errors, Processing of Errors, Errors, Errors
 @subsubsection How to Signal an Error
 @cindex signaling errors
 
@@ -917,7 +917,7 @@ proceeding.
 @end defmac
 
 
-@node Processing of Errors
+@node Processing of Errors, Handling Errors, Signaling Errors, Errors
 @subsubsection How SXEmacs Processes Errors
 
 When an error is signaled, @code{signal} searches for an active
@@ -966,7 +966,7 @@ in the environment of the error, so that you can examine values of
 variables precisely as they were at the time of the error.
 
 
-@node Handling Errors
+@node Handling Errors, Error Symbols, Processing of Errors, Errors
 @subsubsection Writing Code to Handle Errors
 @cindex error handler
 @cindex handling errors
@@ -1158,7 +1158,7 @@ including those signaled with @code{error}:
 @end smallexample
 
 
-@node Error Symbols
+@node Error Symbols,  , Handling Errors, Errors
 @subsubsection Error Symbols and Condition Names
 @cindex error symbol
 @cindex error name
@@ -1264,7 +1264,7 @@ eliminate all but the narrowest level of classification.
 and their conditions.
 
 
-@node Cleanups
+@node Cleanups,  , Errors, Nonlocal Exits
 @subsection Cleaning Up from Nonlocal Exits
 
   The @code{unwind-protect} construct is essential whenever you
index 2bc05dc..d328788 100644 (file)
@@ -6,7 +6,7 @@
 @comment needs heavy extension! -hroptatyr
 @setfilename ../../info/databases.info
 
-@node Databases, Processes, Range Tables, top
+@node Databases, Processes, Range Tables, Top
 @chapter Databases
 @cindex database
 
index 8f9f17c..f9cf4fe 100644 (file)
@@ -42,7 +42,7 @@ Afterward, you can examine the file to find out what input was used.
 @code{open-termscript} function can be useful.  @xref{Terminal Output}.
 
 
-@node Debugger
+@node Debugger, Syntax Errors, Debugging, Debugging
 @section The Lisp Debugger
 @cindex debugger
 @cindex Lisp debugger
@@ -69,7 +69,7 @@ debugger recursively.  @xref{Recursive Editing}.
 @end menu
 
 
-@node Error Debugging
+@node Error Debugging, Infinite Loops, Debugger, Debugger
 @subsection Entering the Debugger on an Error
 @cindex error debugging
 @cindex debugging errors
@@ -136,7 +136,7 @@ this:
 @end example
 
 
-@node Infinite Loops
+@node Infinite Loops, Function Debugging, Error Debugging, Debugger
 @subsection Debugging Infinite Loops
 @cindex infinite loops
 @cindex loops, infinite
@@ -168,7 +168,7 @@ when you quit.  @xref{Quitting}.
 @end defopt
 
 
-@node Function Debugging
+@node Function Debugging, Explicit Debug, Infinite Loops, Debugger
 @subsection Entering the Debugger on a Function Call
 @cindex function call debugging
 @cindex debugging specific functions
@@ -251,7 +251,7 @@ returns @var{function-name}.
 @end deffn
 
 
-@node Explicit Debug
+@node Explicit Debug, Using Debugger, Function Debugging, Debugger
 @subsection Explicit Entry to the Debugger
 
   You can cause the debugger to be called at a certain point in your
@@ -267,7 +267,7 @@ program!)  The most common suitable places are inside a @code{progn} or
 an implicit @code{progn} (@pxref{Sequencing}).
 
 
-@node Using Debugger
+@node Using Debugger, Debugger Commands, Explicit Debug, Debugger
 @subsection Using the Debugger
 
   When the debugger is entered, it displays the previously selected
@@ -306,7 +306,7 @@ interpreted.
 
 @need 3000
 
-@node Debugger Commands
+@node Debugger Commands, Invoking the Debugger, Using Debugger, Debugger
 @subsection Debugger Commands
 @cindex debugger command list
 
@@ -402,7 +402,7 @@ until the problem is corrected.
 @end table
 
 
-@node Invoking the Debugger
+@node Invoking the Debugger, Internals of Debugger, Debugger Commands, Debugger
 @subsection Invoking the Debugger
 
   Here we describe fully the function used to invoke the debugger.
@@ -502,7 +502,7 @@ under which @code{debug} is called.
 @need 5000
 
 
-@node Internals of Debugger
+@node Internals of Debugger,  , Invoking the Debugger, Debugger
 @subsection Internals of the Debugger
 
   This section describes functions and variables used internally by the
@@ -650,7 +650,7 @@ If @var{frame-number} is out of range, @code{backtrace-frame} returns
 @end defun
 
 
-@node Syntax Errors
+@node Syntax Errors, Compilation Errors, Debugger, Debugging
 @section Debugging Invalid Lisp Syntax
 
   The Lisp reader reports invalid syntax, but cannot say where the real
@@ -676,7 +676,7 @@ Lisp, and we can give further advice for those cases.
 @end menu
 
 
-@node Excess Open
+@node Excess Open, Excess Close, Syntax Errors, Syntax Errors
 @subsection Excess Open Parentheses
 
   The first step is to find the defun that is unbalanced.  If there is
@@ -713,7 +713,7 @@ and you have put back those parentheses, @kbd{C-M-q} should not change
 anything.
 
 
-@node Excess Close
+@node Excess Close,  , Excess Open, Syntax Errors
 @subsection Excess Close Parentheses
 
   To deal with an excess close parenthesis, first insert an open
@@ -743,7 +743,7 @@ and you have put back those parentheses, @kbd{C-M-q} should not change
 anything.
 
 
-@node Compilation Errors, Edebug, Syntax Errors, Debugging
+@node Compilation Errors,  , Syntax Errors, Debugging
 @section Debugging Problems in Compilation
 
   When an error happens during byte compilation, it is normally due to
index df09da2..6d5b39a 100644 (file)
@@ -14,7 +14,7 @@
 * Dialog Box Functions::
 @end menu
 
-@node Dialog Box Format
+@node Dialog Box Format, Dialog Box Functions, Dialog Boxes, Dialog Boxes
 @section Dialog Box Format
 
 A dialog box description is a list.
@@ -58,7 +58,7 @@ The syntax, more precisely:
 @end example
 
 
-@node Dialog Box Functions
+@node Dialog Box Functions,  , Dialog Box Format, Dialog Boxes
 @section Dialog Box Functions
 
 @defun popup-dialog-box dbox-desc
index bf50402..49ce867 100644 (file)
@@ -27,7 +27,7 @@ that SXEmacs presents to the user.
 @end menu
 
 
-@node Refresh Screen
+@node Refresh Screen, Truncation, Display, Display
 @section Refreshing the Screen
 
 The function @code{redraw-frame} redisplays the entire contents of a
@@ -1147,7 +1147,7 @@ type.
 @end ignore
 
 
-@node Beeping
+@node Beeping,  , Display Tables, Display
 @section Beeping
 @cindex beeping
 @cindex bell
index b242649..3cf4103 100644 (file)
@@ -56,7 +56,7 @@ with the current implementation.
 @end menu
 
 
-@node ENT Basics
+@node ENT Basics, Types of Numbers, Enhanced Number Types, Enhanced Number Types
 @section ENT Basics
 
   SXEmacs supports several of the available arithmetical and
index 8c8d76d..a037ced 100644 (file)
@@ -29,7 +29,7 @@ function @code{eval}.
 @end menu
 
 
-@node Intro Eval
+@node Intro Eval, Eval, Evaluation, Evaluation
 @section Introduction to Evaluation
 
   The Lisp interpreter, or evaluator, is the program that computes
@@ -102,7 +102,7 @@ effects is @code{(setq foo 1)}.
   The details of what evaluation means for each kind of form are
 described below (@pxref{Forms}).
 
-@node Eval
+@node Eval, Forms, Intro Eval, Evaluation
 @section Eval
 @c ??? Perhaps this should be the last section in the chapter.
 
@@ -238,7 +238,7 @@ particular elements, like this:
 @end example
 @end defvar
 
-@node Forms
+@node Forms, Quoting, Eval, Evaluation
 @section Kinds of Forms
 
   A Lisp object that is intended to be evaluated is called a @dfn{form}.
@@ -262,7 +262,7 @@ starting with ``all other types'' which are self-evaluating forms.
 @end menu
 
 
-@node Self-Evaluating Forms
+@node Self-Evaluating Forms, Symbol Forms, Forms, Forms
 @subsection Self-Evaluating Forms
 @cindex vector evaluation
 @cindex literal evaluation
@@ -317,7 +317,7 @@ program.  Here is an example:
 @end example
 
 
-@node Symbol Forms
+@node Symbol Forms, Classifying Lists, Self-Evaluating Forms, Forms
 @subsection Symbol Forms
 @cindex symbol evaluation
 
@@ -352,7 +352,7 @@ these two symbols act like self-evaluating forms, even though
 @code{eval} treats them like any other symbol.
 
 
-@node Classifying Lists
+@node Classifying Lists, Function Indirection, Symbol Forms, Forms
 @subsection Classification of List Forms
 @cindex list form evaluation
 
@@ -369,7 +369,7 @@ and how the rest of the list is to be processed.  The first element is
 Scheme.
 
 
-@node Function Indirection
+@node Function Indirection, Function Forms, Classifying Lists, Forms
 @subsection Symbol Function Indirection
 @cindex symbol function indirection
 @cindex indirection
@@ -469,7 +469,7 @@ Here is how you could define @code{indirect-function} in Lisp:
 @end defun
 
 
-@node Function Forms
+@node Function Forms, Macro Forms, Function Indirection, Forms
 @subsection Evaluation of Function Forms
 @cindex function form evaluation
 @cindex function call
@@ -495,7 +495,7 @@ the forms in the function body are evaluated in order, and the value of
 the last body form becomes the value of the function call.
 
 
-@node Macro Forms
+@node Macro Forms, Special Forms, Function Forms, Forms
 @subsection Lisp Macro Evaluation
 @cindex macro call evaluation
 
@@ -542,7 +542,7 @@ expansion.
 @xref{Macros}, for a complete description of SXEmacs Lisp macros.
 
 
-@node Special Forms
+@node Special Forms, Autoloading, Macro Forms, Forms
 @subsection Special Forms
 @cindex special form evaluation
 
@@ -652,7 +652,7 @@ values).@refill
 @end quotation
 
 
-@node Autoloading
+@node Autoloading,  , Special Forms, Forms
 @subsection Autoloading
 
   The @dfn{autoload} feature allows you to call a function or macro
@@ -663,7 +663,7 @@ function automatically loads the specified file; then it calls the real
 definition loaded from that file.  @xref{Autoload}.
 
 
-@node Quoting
+@node Quoting,  , Forms, Evaluation
 @section Quoting
 @cindex quoting
 
@@ -687,7 +687,7 @@ sources.  You can test yourself in the example section below. @c :)
 @end menu
 
 
-@node Quoting with quote
+@node Quoting with quote, Quoting with function, Quoting, Quoting
 @subsection Quoting with @code{quote}
 @findex quote
 @findex @samp{'}
@@ -807,7 +807,7 @@ quoting.  @xref{Self-Evaluating Forms}.
 @end example
 
 
-@node Quoting with function
+@node Quoting with function, Quoting with backquote, Quoting with quote, Quoting
 @subsection Quoting with @code{function}
 @findex function
 @findex @samp{#'}
@@ -947,7 +947,7 @@ likely wrong anyway so we will not give examples here.
 The true expansion of @code{(lambda @dots{})} is @code{(function (lambda @dots{}))}.
 
 
-@node Quoting with backquote
+@node Quoting with backquote, Nested quoting, Quoting with function, Quoting
 @subsection Quoting with @code{`} (backquote)
 @findex backquote
 @findex @samp{`}
@@ -1150,7 +1150,7 @@ test-list
 @end example
 
 
-@node Nested quoting
+@node Nested quoting,  , Quoting with backquote, Quoting
 @subsection Nested quoting
 
   Simple nested quotations have already been used throughout this
index 03e823c..4a1ae96 100644 (file)
@@ -6,7 +6,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/extents.info
 
-@node Extents, Specifiers, Abbrevs, top
+@node Extents, Specifiers, Abbrevs, Top
 @chapter Extents
 @cindex extent
 
@@ -39,7 +39,7 @@ This returns @code{t} if @var{object} is an extent.
 @end menu
 
 
-@node Intro to Extents
+@node Intro to Extents, Creating and Modifying Extents, Extents, Extents
 @section Introduction to Extents
 @cindex extent priority
 @cindex priority of an extent
@@ -951,7 +951,7 @@ consulted for mouse clicks on the extent and keypresses made while
 keystrokes not defined in the keymap is as normal for the buffer.
 
 
-@node Atomic Extents
+@node Atomic Extents,  , Extents and Events, Extents
 @section Atomic Extents
 @cindex atomic extent
 
index 9fdec7a..946c332 100644 (file)
@@ -5,7 +5,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/faces.info
 
-@node Faces and Window-System Objects, Glyphs, Specifiers, top
+@node Faces and Window-System Objects, Glyphs, Specifiers, Top
 @chapter Faces and Window-System Objects
 @cindex faces
 @cindex window-system objects
@@ -17,7 +17,7 @@
 @end menu
 
 
-@node Faces
+@node Faces, Fonts, Faces and Window-System Objects, Faces and Window-System Objects
 @section Faces
 
 A @dfn{face} is a named collection of graphical properties: font,
@@ -54,7 +54,7 @@ between point and mark.
 @end menu
 
 
-@node Merging Faces
+@node Merging Faces, Basic Face Functions, Faces, Faces
 @subsection Merging Faces for Display
 
   Here are all the ways to specify which face to use for display of text:
@@ -101,7 +101,7 @@ used; if it is a bitmap, the face's foreground and background colors are
 used to color it.
 
 
-@node Basic Face Functions
+@node Basic Face Functions, Face Properties, Merging Faces, Faces
 @subsection Basic Functions for Working with Faces
 
   The properties a face can specify include the font, the foreground
@@ -147,7 +147,7 @@ in @code{copy-specifier} (@pxref{Specifiers}).
 @end defun
 
 
-@node Face Properties
+@node Face Properties, Face Convenience Functions, Basic Face Functions, Faces
 @subsection Face Properties
 
   You can examine and modify the properties of an existing face with the
@@ -364,7 +364,7 @@ in @code{specifier-instance}.  @xref{Specifiers}.
 @end defun
 
 
-@node Face Convenience Functions
+@node Face Convenience Functions, Other Face Display Functions, Face Properties, Faces
 @subsection Face Convenience Functions
 
 @deffn Command set-face-foreground face color &optional locale tag-set how-to-add
@@ -455,7 +455,7 @@ This function returns the font specifier of face @var{face}.
 @end defun
 
 
-@node Other Face Display Functions
+@node Other Face Display Functions,  , Face Convenience Functions, Faces
 @subsection Other Face Display Functions
 
 @deffn Command invert-face face &optional locale
@@ -476,7 +476,7 @@ the default face.  @var{domain} is as in @code{face-property-instance}.
 @end defun
 
 
-@node Fonts
+@node Fonts, Colors, Faces, Faces and Window-System Objects
 @section Fonts
 @cindex fonts
 
@@ -495,7 +495,7 @@ font instance objects, which encapsulate fonts in the window system.
 @end menu
 
 
-@node Font Specifiers
+@node Font Specifiers, Font Instances, Fonts, Fonts
 @subsection Font Specifiers
 
 @defun font-specifier-p object
@@ -531,7 +531,7 @@ A vector of one element (a face to inherit from).
 @end defun
 
 
-@node Font Instances
+@node Font Instances, Font Instance Names, Font Specifiers, Fonts
 @subsection Font Instances
 
 @defun font-instance-p object
@@ -553,7 +553,7 @@ these objects are GCed, the underlying X data is deallocated as well.
 @end defun
 
 
-@node Font Instance Names
+@node Font Instance Names, Font Instance Size, Font Instances, Fonts
 @subsection Font Instance Names
 @cindex font instance name
 @cindex available fonts
@@ -577,7 +577,7 @@ the first found is used.  This returns an unambiguous name for that font
 @end defun
 
 
-@node Font Instance Size
+@node Font Instance Size, Font Instance Characteristics, Font Instance Names, Fonts
 @subsection Font Instance Size
 @cindex font instance size
 
@@ -606,7 +606,7 @@ that is defined.
 @end defun
 
 
-@node Font Instance Characteristics
+@node Font Instance Characteristics, Font Convenience Functions, Font Instance Size, Fonts
 @subsection Font Instance Characteristics
 @cindex font instance characteristics
 @cindex characteristics of font instances
@@ -646,7 +646,7 @@ font.  If it fails, it returns @code{nil}.
 @end defun
 
 
-@node Font Convenience Functions
+@node Font Convenience Functions,  , Font Instance Characteristics, Fonts
 @subsection Font Convenience Functions
 
 @defun font-name font &optional domain
@@ -674,7 +674,7 @@ applying @code{font-instance-properties} to the result.
 @end defun
 
 
-@node Colors
+@node Colors,  , Fonts, Faces and Window-System Objects
 @section Colors
 @cindex colors
 
@@ -688,7 +688,7 @@ applying @code{font-instance-properties} to the result.
 @end menu
 
 
-@node Color Specifiers
+@node Color Specifiers, Color Instances, Colors, Colors
 @subsection Color Specifiers
 
 @defun color-specifier-p object
@@ -752,7 +752,7 @@ sense of the inherited property.
 @end defun
 
 
-@node Color Instances
+@node Color Instances, Color Instance Properties, Color Specifiers, Colors
 @subsection Color Instances
 @cindex color instances
 
@@ -775,7 +775,7 @@ This function returns non-@code{nil} if @var{object} is a color-instance.
 @end defun
 
 
-@node Color Instance Properties
+@node Color Instance Properties, Color Convenience Functions, Color Instances, Colors
 @subsection Color Instance Properties
 
 @defun color-instance-name color-instance
@@ -793,7 +793,7 @@ and blue color components of @var{color-instance}.
 @end example
 @end defun
 
-@node Color Convenience Functions
+@node Color Convenience Functions,  , Color Instance Properties, Colors
 @subsection Color Convenience Functions
 
 @defun color-name color &optional domain
index 279c62d..7a2141c 100644 (file)
@@ -40,7 +40,7 @@ substitutions such as @samp{$HOME}.  @xref{File Name Expansion}.
 @end menu
 
 
-@node Visiting Files
+@node Visiting Files, Saving Buffers, Files, Files
 @section Visiting Files
 @cindex finding files
 @cindex visiting files
@@ -73,7 +73,7 @@ however, it is good to keep the distinction in mind.
 @end menu
 
 
-@node Visiting Functions
+@node Visiting Functions, Subroutines of Visiting, Visiting Files, Visiting Files
 @subsection Functions for Visiting Files
 
   This section describes the functions normally used to visit files.
@@ -201,7 +201,7 @@ used and they may not all be called.
 @end defvar
 
 
-@node Subroutines of Visiting
+@node Subroutines of Visiting,  , Visiting Functions, Visiting Files
 @subsection Subroutines of Visiting
 
   The @code{find-file-noselect} function uses the
@@ -262,7 +262,7 @@ in @code{find-file-hooks}.
 @end defun
 
 
-@node Saving Buffers
+@node Saving Buffers, Reading from Files, Visiting Files, Files
 @section Saving Buffers
 
   When you edit a file in SXEmacs, you are actually working on a buffer
@@ -405,7 +405,7 @@ major modes set it to @code{t} in particular buffers.
 @end defopt
 
 
-@node Reading from Files
+@node Reading from Files, Writing to Files, Saving Buffers, Files
 @section Reading from Files
 
   You can copy a file from the disk and insert it into a buffer
@@ -453,7 +453,7 @@ program can read the file, use the function @code{file-local-copy}; see
 @ref{Magic File Names}.
 
 
-@node Writing to Files
+@node Writing to Files, File Locks, Reading from Files, Files
 @section Writing to Files
 
   You can write the contents of a buffer, or part of a buffer, directly
@@ -512,7 +512,7 @@ files that the user does not need to know about.
 @end deffn
 
 
-@node File Locks
+@node File Locks, Information about Files, Writing to Files, Files
 @section File Locks
 @cindex file locks
 
@@ -596,7 +596,7 @@ for its usual definition is in @file{userlock.el}.
 @end defun
 
 
-@node Information about Files
+@node Information about Files, Changing File Attributes, File Locks, Files
 @section Information about Files
 
   The functions described in this section all operate on strings that
@@ -613,7 +613,7 @@ or directories unless otherwise noted.
 @end menu
 
 
-@node Testing Accessibility
+@node Testing Accessibility, Kinds of Files, Information about Files, Information about Files
 @subsection Testing Accessibility
 @cindex accessibility of a file
 @cindex file accessibility
@@ -749,7 +749,7 @@ time as a list of two numbers.  @xref{File Attributes}.
 @end defun
 
 
-@node Kinds of Files
+@node Kinds of Files, Truenames, Testing Accessibility, Information about Files
 @subsection Distinguishing Kinds of Files
 
   This section describes how to distinguish various kinds of files, such
@@ -823,7 +823,7 @@ other I/O device).
 @end defun
 
 
-@node Truenames
+@node Truenames, File Attributes, Kinds of Files, Information about Files
 @subsection Truenames
 @cindex truename (of file)
 
@@ -849,7 +849,7 @@ value of @code{default-directory} is used.
   @xref{Buffer File Name}, for related information.
 
 
-@node File Attributes
+@node File Attributes,  , Truenames, Information about Files
 @subsection Other Information about Files
 
   This section describes the functions for getting detailed information
@@ -1043,7 +1043,7 @@ is on file system number -32252.
 @end defun
 
 
-@node Changing File Attributes
+@node Changing File Attributes, File Names, Information about Files, Files
 @section Changing File Names and Attributes
 @cindex renaming files
 @cindex copying files
@@ -1217,7 +1217,7 @@ This function returns the current default protection value.
 @end defun
 
 
-@node File Names
+@node File Names, Contents of Directories, Changing File Attributes, Files
 @section File Names
 @cindex file names
 
@@ -1246,7 +1246,7 @@ directory.
 @end menu
 
 
-@node File Name Components
+@node File Name Components, Directory Names, File Names, File Names
 @subsection File Name Components
 @cindex directory part (of file name)
 @cindex nondirectory part (of file name)
@@ -1336,7 +1336,7 @@ The extension, in a file name, is the part that starts with the last
 @end defun
 
 
-@node Directory Names
+@node Directory Names, Relative File Names, File Name Components, File Names
 @subsection Directory Names
 @cindex directory name
 @cindex file name of directory
@@ -1438,7 +1438,7 @@ directory.
 @end defun
 
 
-@node Relative File Names
+@node Relative File Names, File Name Expansion, Directory Names, File Names
 @subsection Absolute and Relative File Names
 @cindex absolute file name
 @cindex relative file name
@@ -1472,7 +1472,7 @@ file name, @code{nil} otherwise.
 @end defun
 
 
-@node File Name Expansion
+@node File Name Expansion, Unique File Names, Relative File Names, File Names
 @subsection Functions that Expand Filenames
 @cindex expansion of file names
 
@@ -1605,7 +1605,7 @@ example:
 @end defun
 
 
-@node Unique File Names
+@node Unique File Names, File Name Completion, File Name Expansion, File Names
 @subsection Generating Unique File Names
 
   Some programs need to write temporary files.  Here is the usual way to
@@ -1651,7 +1651,7 @@ To avoid confusion, each Lisp application should preferably use a unique
 @end defun
 
 
-@node File Name Completion
+@node File Name Completion, User Name Completion, Unique File Names, File Names
 @subsection File Name Completion
 @cindex file name completion subroutines
 @cindex completion, file name
@@ -1753,7 +1753,7 @@ completion-ignored-extensions
 @end defopt
 
 
-@node User Name Completion
+@node User Name Completion,  , File Name Completion, File Names
 @subsection User Name Completion
 @cindex user name completion subroutines
 @cindex completion, user name
@@ -1789,7 +1789,7 @@ completion was unique.
 @end defun
 
 
-@node Contents of Directories
+@node Contents of Directories, Create/Delete Dirs, File Names, Files
 @section Contents of Directories
 @cindex directory-oriented functions
 @cindex file names in directory
@@ -1912,7 +1912,7 @@ for the function @code{insert-directory}.
 @end defvar
 
 
-@node Create/Delete Dirs
+@node Create/Delete Dirs, Magic File Names, Contents of Directories, Files
 @section Creating and Deleting Directories
 @c Emacs 19 features
 
@@ -1940,7 +1940,7 @@ must use @code{delete-directory} in that case.
 @end deffn
 
 
-@node Magic File Names
+@node Magic File Names, Partial Files, Create/Delete Dirs, Files
 @section Making Certain File Names ``Magic''
 @cindex magic file names
 
@@ -2086,7 +2086,7 @@ is a good way to come up with one.
 @end defun
 
 
-@node Partial Files
+@node Partial Files, Format Conversion, Magic File Names, Files
 @section Partial Files
 @cindex partial files
 
@@ -2096,7 +2096,7 @@ is a good way to come up with one.
 * Detached Partial Files::
 @end menu
 
-@node Intro to Partial Files
+@node Intro to Partial Files, Creating a Partial File, Partial Files, Partial Files
 @subsection Intro to Partial Files
 
 A @dfn{partial file} is a section of a buffer (called the @dfn{master
@@ -2121,7 +2121,7 @@ automatically marked as modified so that saving the master buffer will
 work correctly.
 
 
-@node Creating a Partial File
+@node Creating a Partial File, Detached Partial Files, Intro to Partial Files, Partial Files
 @subsection Creating a Partial File
 
 @deffn Command make-file-part &optional start end name buffer
@@ -2140,7 +2140,7 @@ respectively.
 @end deffn
 
 
-@node Detached Partial Files
+@node Detached Partial Files,  , Creating a Partial File, Partial Files
 @subsection Detached Partial Files
 
 Every partial file has an extent in the master buffer associated with it
@@ -2161,7 +2161,7 @@ part's filename is cleared and thus must be explicitly specified if the
 detached file part is to be saved.
 
 
-@node Format Conversion
+@node Format Conversion,  , Partial Files, Files
 @section File Format Conversion
 
 @cindex file format conversion
index 0ec6226..88aceb4 100644 (file)
@@ -60,7 +60,7 @@ This predicate returns @code{t} if @var{object} is a frame, and
   @xref{Display}, for related information.
 
 
-@node Creating Frames
+@node Creating Frames, Frame Properties, Frames, Frames
 @section Creating Frames
 
 To create a new frame, call the function @code{make-frame}.
@@ -1028,7 +1028,7 @@ non-@code{nil}, the unwanted frames are iconified instead.
 @end defun
 
 
-@node Frame Hooks
+@node Frame Hooks,  , Frame Configurations, Frames
 @section Hooks for Customizing Frame Behavior
 @cindex frame hooks
 
index be1dd46..7241e73 100644 (file)
@@ -28,7 +28,7 @@ define them.
 @end menu
 
 
-@node What Is a Function
+@node What Is a Function, Lambda Expressions, Functions and Commands, Functions and Commands
 @section What Is a Function?
 
   In a general sense, a function is a rule for carrying on a computation
@@ -154,7 +154,7 @@ function.  For example:
 @end defun
 
 
-@node Lambda Expressions
+@node Lambda Expressions, Function Names, What Is a Function, Functions and Commands
 @section Lambda Expressions
 @cindex lambda expression
 
@@ -182,7 +182,7 @@ expression, but to be called as a function.
 @end menu
 
 
-@node Lambda Components
+@node Lambda Components, Simple Lambda, Lambda Expressions, Lambda Expressions
 @subsection Components of a Lambda Expression
 
 @ifinfo
@@ -230,7 +230,7 @@ code to do the work of the function (or, as a Lisp programmer would say,
 function is the value returned by the last element of the body.
 
 
-@node Simple Lambda
+@node Simple Lambda, Argument List, Lambda Components, Lambda Expressions
 @subsection A Simple Lambda-Expression Example
 
   Consider for example the following function:
@@ -285,7 +285,7 @@ that time, they were the only way to bind and initialize local
 variables.
 
 
-@node Argument List
+@node Argument List, Function Documentation, Simple Lambda, Lambda Expressions
 @subsection Advanced Features of Argument Lists
 @kindex wrong-number-of-arguments
 @cindex argument binding
@@ -387,7 +387,7 @@ arguments (either required or optional) after a @code{&rest} argument.
 @end smallexample
 
 
-@node Function Documentation
+@node Function Documentation,  , Argument List, Lambda Expressions
 @subsection Documentation Strings of Functions
 @cindex documentation of function
 
@@ -424,7 +424,7 @@ documentation string; if the only body form is a string then it serves both
 as the return value and as the documentation.
 
 
-@node Function Names
+@node Function Names, Defining Functions, Lambda Expressions, Functions and Commands
 @section Naming a Function
 @cindex function definition
 @cindex named function
@@ -476,7 +476,7 @@ equally well a name for the same function.
 these two uses of a symbol are independent and do not conflict.
 
 
-@node Defining Functions
+@node Defining Functions, Calling Functions, Function Names, Functions and Commands
 @section Defining Functions
 @cindex defining a function
 
@@ -577,7 +577,7 @@ records.
 and tells the Lisp compiler to open-code it.  @xref{Inline Functions}.
 
 
-@node Calling Functions
+@node Calling Functions, Mapping Functions, Defining Functions, Functions and Commands
 @section Calling Functions
 @cindex function invocation
 @cindex calling a function
@@ -698,7 +698,7 @@ This function ignores any arguments and returns @code{nil}.
 @end deffn
 
 
-@node Mapping Functions
+@node Mapping Functions, Anonymous Functions, Calling Functions, Functions and Commands
 @section Mapping Functions
 @cindex mapping functions
 
@@ -869,7 +869,7 @@ sets the currently processed character to @code{^@@} (octal value:
 
 
 
-@node Anonymous Functions
+@node Anonymous Functions, Function Cells, Mapping Functions, Functions and Commands
 @section Anonymous Functions
 @cindex anonymous function
 
@@ -976,7 +976,7 @@ comment.
 realistic example using @code{function} and an anonymous function.
 
 
-@node Function Cells
+@node Function Cells, Inline Functions, Anonymous Functions, Functions and Commands
 @section Accessing Function Cell Contents
 
   The @dfn{function definition} of a symbol is the object stored in the
@@ -1154,7 +1154,7 @@ file is loaded before moving aside the old definition of @code{foo}.
 redefine a function defined elsewhere.
 
 
-@node Inline Functions
+@node Inline Functions, Related Topics, Function Cells, Functions and Commands
 @section Inline Functions
 @cindex inline functions
 
@@ -1193,7 +1193,7 @@ following the definition, just like macros.
 @c Emacs versions prior to 19 did not have inline functions.
 
 
-@node Related Topics
+@node Related Topics,  , Inline Functions, Functions and Commands
 @section Other Topics Related to Functions
 
   Here is a table of several functions that do things related to
index 172e292..30a6a75 100644 (file)
@@ -6,7 +6,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/glyphs.info
 
-@node Glyphs, Annotations, Faces and Window-System Objects, top
+@node Glyphs, Annotations, Faces and Window-System Objects, Top
 @chapter Glyphs
 @cindex glyphs
 
@@ -33,7 +33,7 @@ This function returns @code{t} if @var{object} is a glyph.
 @end menu
 
 
-@node Glyph Intro
+@node Glyph Intro, Images, Glyphs, Glyphs
 @section Glyph Introduction
 
   In SXEmacs, ``glyph'' does @strong{not} refer to a single unit of textual
@@ -87,7 +87,7 @@ Similarly, the global locale cannot be a domain.)  @ref{Specifiers}, for
 more information about specifier locales and domains.
 
 
-@node Images
+@node Images, Using Glyphs, Glyph Intro, Glyphs
 @section Images
 
 @menu
@@ -98,7 +98,7 @@ more information about specifier locales and domains.
 @end menu
 
 
-@node Image Specifiers
+@node Image Specifiers, Image Instantiator Conversion, Images, Images
 @subsection Image Specifiers
 @cindex image specifiers
 
@@ -309,7 +309,7 @@ instantiated as @code{widget}.  For their semantics, @ref{Menu Format}.
 @end table
 
 
-@node Image Instantiator Conversion
+@node Image Instantiator Conversion, Image Instantiator Formats, Image Specifiers, Images
 @subsection Image Instantiator Conversion
 @cindex image instantiator conversion
 @cindex conversion of image instantiators
@@ -342,7 +342,7 @@ This function returns the image-conversion-list for consoles of the given
 @end defun
 
 
-@node Image Instantiator Formats
+@node Image Instantiator Formats, Image Instances, Image Instantiator Conversion, Images
 @subsection Image Instantiator Formats
 @cindex image instantiator formats
 
@@ -647,7 +647,7 @@ first).
 @end defvar
 
 
-@node Image Instances
+@node Image Instances,  , Image Instantiator Formats, Images
 @subsection Image Instances
 @cindex image instances
 
@@ -669,7 +669,7 @@ This function returns non-@code{nil} if @var{object} is an image instance.
 @end menu
 
 
-@node Image Instance Types
+@node Image Instance Types, Image Instance Functions, Image Instances, Image Instances
 @subsubsection Image Instance Types
 @cindex image instance types
 
@@ -772,7 +772,7 @@ Return non-@code{nil} if @var{object} is an image instance of type
 @end defun
 
 
-@node Image Instance Functions
+@node Image Instance Functions,  , Image Instance Types, Image Instances
 @subsubsection Image Instance Functions
 
 @defun make-image-instance data &optional domain dest-types noerror
@@ -951,7 +951,7 @@ be non-@code{nil} for colorized mono pixmaps and for pointers.)
 @end defun
 
 
-@node Using Glyphs
+@node Using Glyphs, Manipulating Glyphs, Images, Glyphs
 @section Using Glyphs
 
 Glyph usage is unfortunately somewhat arcane.  (For discussion of
@@ -1034,7 +1034,7 @@ code creating them, but by the glyph itself (a ``widget'' in X11 or
 @end menu
 
 
-@node Creating Glyphs
+@node Creating Glyphs, Buffer Glyphs, Using Glyphs, Using Glyphs
 @subsection Creating Glyphs
 
 @defun make-glyph &optional spec-list type
@@ -1144,7 +1144,7 @@ glyph.  Instead, you probably want to be calling @code{set-glyph-image}
 on the existing glyph, @code{frame-icon-glyph}.
 
 
-@node Buffer Glyphs
+@node Buffer Glyphs, Redisplay Glyphs, Creating Glyphs, Using Glyphs
 @subsection Buffer Glyphs
 
 Creating a glyph using @code{make-glyph} does not specify @emph{where}
@@ -1175,7 +1175,7 @@ API for glyphs in a buffer, by setting a layout policy of @code{text}.)
 @end table
 
 
-@node Redisplay Glyphs
+@node Redisplay Glyphs, Frame Glyphs, Buffer Glyphs, Using Glyphs
 @subsection Redisplay Glyphs
 
 To use a glyph to control the shape of miscellaneous redisplay effects
@@ -1237,7 +1237,7 @@ This variable specifies what to use as an arrow for control characters.
 @end defvr
 
 
-@node Frame Glyphs
+@node Frame Glyphs, External Glyphs, Redisplay Glyphs, Using Glyphs
 @subsection Frame Glyphs
 
 There are also a number of special objects whose appearance is specified
@@ -1281,7 +1281,7 @@ bar} glyphs.
 @end table
 
 
-@node External Glyphs
+@node External Glyphs, Native GUI Widgets, Frame Glyphs, Using Glyphs
 @subsection External Glyphs
 @cindex frame icon
 @cindex icon, frame
@@ -1395,7 +1395,7 @@ image instance.  You should not call this function directly.
 @end defun
 
 
-@node Native GUI Widgets
+@node Native GUI Widgets, Subwindows, External Glyphs, Using Glyphs
 @subsection Native GUI Widgets
 @cindex native widget
 
@@ -1411,7 +1411,7 @@ GUI platform or an external toolkit, and accessed from Lisp as a
 * Primitive Widgets::           Catalogue of available native widgets.
 @end menu
 
-@node Introduction to Widgets
+@node Introduction to Widgets, Lisp API to Native Widgets, Native GUI Widgets, Native GUI Widgets
 @subsubsection Introduction to Native Widgets and Subwindow Glyphs
 
 Traditionally Emacsen have hidden the GUI apparatus from the Lisp
@@ -1429,7 +1429,7 @@ which are horizontal or vertical arrays of subwidgets.  For example, the
 search dialog is formatted using layouts.
 
 
-@node Lisp API to Native Widgets
+@node Lisp API to Native Widgets, Layouts, Introduction to Widgets, Native GUI Widgets
 @subsubsection Lisp API to Native Widgets
 
 Native widgets are manipulated as @emph{glyphs} (@pxref{Glyphs}).  Thus
@@ -1459,7 +1459,7 @@ other instances of the widget respond simultaneously might be more
 disconcerting than the actual case.
 
 
-@node Layouts
+@node Layouts, Primitive Widgets, Lisp API to Native Widgets, Native GUI Widgets
 @subsubsection Layouts
 
 A SXEmacs @dfn{layout} is a one-dimensional array of glyphs.  It is a
@@ -1560,7 +1560,7 @@ makes use of recursive layouts.
 @end example
 
 
-@node Primitive Widgets
+@node Primitive Widgets,  , Layouts, Native GUI Widgets
 @subsubsection Primitive Widgets
 
 @c #### the following table should be replaced with a menu of nodes
@@ -1593,7 +1593,7 @@ controlling an SXEmacs window.)
 @end table
 
 
-@node Subwindows
+@node Subwindows,  , Native GUI Widgets, Using Glyphs
 @subsection Subwindows
 
 Subwindows are not currently implemented.
@@ -1604,7 +1604,7 @@ This function returns non-@code{nil} if @var{object} is a subwindow.
 @end defun
 
 
-@node Manipulating Glyphs
+@node Manipulating Glyphs, Glyph Examples, Using Glyphs, Glyphs
 @section Manipulating Glyphs
 
   Each glyphs has properties that may be accessed.  Most of these can
@@ -1620,7 +1620,7 @@ useful to create glyphs of types other than @code{buffer}.
 @end menu
 
 
-@node Glyph Properties
+@node Glyph Properties, Glyph Convenience Functions, Manipulating Glyphs, Manipulating Glyphs
 @subsection Glyph Properties
 
 Each glyph has a list of properties, which control all of the aspects of
@@ -1802,7 +1802,7 @@ and @var{exact-p} arguments.
 @end defun
 
 
-@node Glyph Convenience Functions
+@node Glyph Convenience Functions, Glyph Dimensions, Glyph Properties, Manipulating Glyphs
 @subsection Glyph Convenience Functions
 
   The following functions are provided for working with specific
@@ -1894,7 +1894,7 @@ This function changes the face of @var{glyph} to @var{face}.
 @end defun
 
 
-@node Glyph Dimensions
+@node Glyph Dimensions, Glyph Types, Glyph Convenience Functions, Manipulating Glyphs
 @subsection Glyph Dimensions
 
 @defun glyph-width glyph &optional window
@@ -1923,7 +1923,7 @@ redisplay will.
 @end defun
 
 
-@node Glyph Types
+@node Glyph Types,  , Glyph Dimensions, Manipulating Glyphs
 @subsection Glyph Types
 
   Each glyph has a particular type, which controls how the glyph's image
@@ -1982,7 +1982,7 @@ This function returns non-@code{nil} if @var{object} is a glyph of type
 @end defun
 
 
-@node Glyph Examples
+@node Glyph Examples,  , Manipulating Glyphs, Glyphs
 @section Glyph Examples
 
 For many applications, displaying graphics is a simple process: you
index 327e326..7e9e5bf 100644 (file)
@@ -7,7 +7,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/gutter.info
 
-@node Gutter, Scrollbars, Toolbar, top
+@node Gutter, Scrollbars, Toolbar, Top
 @chapter Gutter
 @cindex gutter
 
index 6bbde4a..199b309 100644 (file)
@@ -5,7 +5,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/hash-tables.info
 
-@node Hash Tables, Range Tables, Media, top
+@node Hash Tables, Range Tables, Media, Top
 @chapter Hash Tables
 @cindex hash table
 
@@ -23,7 +23,7 @@ This function returns @code{t} if @var{object} is a hash table, else @code{nil}.
 @end menu
 
 
-@node Introduction to Hash Tables
+@node Introduction to Hash Tables, Working With Hash Tables, Hash Tables, Hash Tables
 @section Introduction to Hash Tables
 
 A @dfn{hash table} is a data structure that provides mappings from
@@ -193,7 +193,7 @@ processed by @var{function}.
 @end defun
 
 
-@node Weak Hash Tables
+@node Weak Hash Tables,  , Working With Hash Tables, Hash Tables
 @section Weak Hash Tables
 @cindex hash table, weak
 @cindex weak hash table
index eedcdb9..77482aa 100644 (file)
@@ -35,7 +35,7 @@ topics of discussion.
 @end menu
 
 
-@node Documentation Basics
+@node Documentation Basics, Accessing Documentation, Documentation, Documentation
 @section Documentation Basics
 @cindex documentation conventions
 @cindex writing a documentation string
index 87eb765..5952525 100644 (file)
@@ -5,7 +5,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/internationalization.info
 
-@node Internationalization, Foreign Functions, Enhanced Number Types, top
+@node Internationalization, Foreign Functions, Enhanced Number Types, Top
 @chapter Internationalization
 
 @menu
@@ -15,7 +15,7 @@
 @end menu
 
 
-@node I18N Levels 1 and 2
+@node I18N Levels 1 and 2, I18N Level 3, Internationalization, Internationalization
 @section I18N Levels 1 and 2
 
 SXEmacs is now compliant with I18N levels 1 and 2.  Specifically, this means
@@ -192,7 +192,7 @@ between pre-loaded documentation and add-on documentation:  For add-on
 packages, the final carriage returns in the strings produced by
 @code{make-docfile} must be ignored.)
 
-@node I18N Level 4
+@node I18N Level 4,  , I18N Level 3, Internationalization
 @section I18N Level 4
 
 The Asian-language support in XEmacs is called ``MULE''.  @xref{MULE}.
index 1719d85..14cff8d 100644 (file)
@@ -397,7 +397,7 @@ library.  If this is what you want to do, use the GNU Library General
 Public License instead of this License.
 
 
-@node Introduction, Packaging, Copying, Top
+@node Introduction,  , Copying
 @chapter Introduction
 
   Most of the SXEmacs text editor is written in the programming
@@ -431,7 +431,7 @@ peculiar to SXEmacs Lisp or relate specifically to editing.
 @end menu
 
 
-@node Caveats
+@node Caveats, Lisp History, Introduction, Introduction
 @section Caveats
 
   This manual has gone through numerous drafts.  It is nearly complete
@@ -489,7 +489,7 @@ sxemacs-devel@@sxemacs.org
   -- Sebastian Freundt
 @end ifinfo
 
-@node Lisp History
+@node Lisp History, Conventions, Caveats, Introduction
 @section Lisp History
 @cindex Lisp history
 
@@ -516,7 +516,7 @@ Lisp differs from Common Lisp.  If you don't know Common Lisp, don't
 worry about it; this manual is self-contained.
 
 
-@node Conventions
+@node Conventions, Acknowledgements, Lisp History, Introduction
 @section Conventions
 
 This section explains the notational conventions that are used in this
@@ -533,7 +533,7 @@ manual.  You may want to skip this section and refer back to it later.
 @end menu
 
 
-@node Some Terms
+@node Some Terms, nil and t, Conventions, Conventions
 @subsection Some Terms
 
   Throughout this manual, the phrases ``the Lisp reader'' and ``the Lisp
@@ -550,7 +550,7 @@ including those you write.
 in this font or form: @var{first-number}.
 
 
-@node nil and t
+@node nil and t, Evaluation Notation, Some Terms, Conventions
 @subsection @code{nil} and @code{t}
 @cindex @code{nil}, uses of
 @cindex truth value
@@ -594,7 +594,7 @@ values results in a @code{setting-constant} error.  @xref{Accessing
 Variables}.
 
 
-@node Evaluation Notation
+@node Evaluation Notation, Printing Notation, nil and t, Conventions
 @subsection Evaluation Notation
 @cindex evaluation notation
 @cindex documentation notation
@@ -631,7 +631,7 @@ indicated with @samp{@equiv{}}.
 @end example
 
 
-@node Printing Notation
+@node Printing Notation, Error Messages, Evaluation Notation, Conventions
 @subsection Printing Notation
 @cindex printing notation
 
@@ -657,7 +657,7 @@ the form (here @code{bar}) follows on a separate line.
 @end example
 
 
-@node Error Messages
+@node Error Messages, Buffer Text Notation, Printing Notation, Conventions
 @subsection Error Messages
 @cindex error message notation
 
@@ -672,7 +672,7 @@ the echo area.
 @end example
 
 
-@node Buffer Text Notation
+@node Buffer Text Notation, Format of Descriptions, Error Messages, Conventions
 @subsection Buffer Text Notation
 @cindex buffer text notation
 
@@ -697,7 +697,7 @@ This is the changed @point{}contents of foo.
 @end example
 
 
-@node Format of Descriptions
+@node Format of Descriptions,  , Buffer Text Notation, Conventions
 @subsection Format of Descriptions
 @cindex description format
 
@@ -724,7 +724,7 @@ The description follows on succeeding lines, sometimes with examples.
 @end menu
 
 
-@node A Sample Function Description
+@node A Sample Function Description, A Sample Variable Description, Format of Descriptions, Format of Descriptions
 @subsubsection A Sample Function Description
 @cindex function descriptions
 @cindex command descriptions
@@ -829,7 +829,7 @@ from @var{body}, which includes all remaining elements of the form.
 @end defspec
 
 
-@node A Sample Variable Description
+@node A Sample Variable Description,  , A Sample Function Description, Format of Descriptions
 @subsubsection A Sample Variable Description
 @cindex variable descriptions
 @cindex option descriptions
@@ -853,7 +853,7 @@ have not yet thought about executing.
 replaced by `User Option'.
 
 
-@node Acknowledgements
+@node Acknowledgements,  , Conventions, Introduction
 @section Acknowledgements
 
   This manual was based on the GNU Emacs Lisp Reference Manual, version
index bec01aa..dd1b2fe 100644 (file)
@@ -39,7 +39,7 @@ is found.  The whole process is called @dfn{key lookup}.
 @end menu
 
 
-@node Keymap Terminology
+@node Keymap Terminology, Format of Keymaps, Keymaps, Keymaps
 @section Keymap Terminology
 @cindex key
 @cindex keystroke
@@ -1586,7 +1586,7 @@ displayed.
 @end deffn
 
 
-@node Other Keymap Functions
+@node Other Keymap Functions,  , Scanning Keymaps, Keymaps
 @section Other Keymap Functions
 
 @defun set-keymap-prompt keymap new-prompt
index 137310f..77d1323 100644 (file)
@@ -5,7 +5,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/ldap.info
 
-@node LDAP Support, PostgreSQL Support, X-Windows, top
+@node LDAP Support, PostgreSQL Support, X-Windows, Top
 @chapter LDAP Support
 @cindex LDAP
 
index 3cee18d..c534292 100644 (file)
@@ -87,13 +87,12 @@ instead of in the original English.
 @c and also in the file intro.texi.
 @c This manual documents SXEmacs 22.1 and was based on the
 @c documentation for XEmacs 21.0 (v3.3).
-@subtitle Version @version{} (for SXEmacs 22.1), May 2005
+@subtitle Version @version{} (for SXEmacs 22.1), Jun 2015
+
+@author Steve Youngs <steve@@sxemacs.org>
+@author Sebastian Freundt <hroptatyr@@sxemacs.org>
+@author Ben Wing <wing@@xemacs.org>
 
-@author by Steve Youngs, Sebastian Freundt
-@author SXEmacs developers
-@author
-@author Based on the XEmacs Lisp Reference Manual
-@author by Ben Wing
 @page
 @vskip 0pt plus 1filll
 Copyright @copyright{} 1990, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
index 2c3fc51..953e448 100644 (file)
@@ -33,7 +33,7 @@ the whole list.
 @end menu
 
 
-@node Cons Cells
+@node Cons Cells, Lists as Boxes, Lists, Lists
 @section Lists and Cons Cells
 @cindex lists and cons cells
 @cindex @code{nil} and lists
@@ -67,7 +67,7 @@ considered to have @code{nil} as its @sc{cdr} (and also as its
 elements of @var{l} except the first.
 
 
-@node Lists as Boxes
+@node Lists as Boxes, List-related Predicates, Cons Cells, Lists
 @section Lists as Linked Pairs of Boxes
 @cindex box representation for lists
 @cindex lists represented as boxes
@@ -151,7 +151,7 @@ two-element list:
 lists, and for more ``box and arrow'' illustrations of lists.
 
 
-@node List-related Predicates
+@node List-related Predicates, List Elements, Lists as Boxes, Lists
 @section Predicates on Lists
 
   The following predicates test whether a Lisp object is an atom, is a
@@ -223,7 +223,7 @@ considered a list and @code{not} when it is considered a truth value
 @need 2000
 
 
-@node List Elements
+@node List Elements, Building Lists, List-related Predicates, Lists
 @section Accessing Elements of Lists
 @cindex list elements
 
@@ -445,7 +445,7 @@ elements of @var{list}.
 @end defun
 
 
-@node Building Lists
+@node Building Lists, Modifying Lists, List Elements, Lists
 @section Building Cons Cells and Lists
 @cindex cons cells
 @cindex building lists
@@ -678,7 +678,7 @@ x
 @end defun
 
 
-@node Modifying Lists
+@node Modifying Lists, Sets And Lists, Building Lists, Lists
 @section Modifying Existing List Structure
 
   You can modify the @sc{car} and @sc{cdr} contents of a cons cell with the
@@ -703,7 +703,7 @@ new @sc{car} or @sc{cdr}.
 @end menu
 
 
-@node Setcar
+@node Setcar, Setcdr, Modifying Lists, Modifying Lists
 @subsection Altering List Elements with @code{setcar}
 
   Changing the @sc{car} of a cons cell is done with @code{setcar}.  When
@@ -806,7 +806,7 @@ x2:              |
 @end example
 
 
-@node Setcdr
+@node Setcdr, Rearrangement, Setcar, Modifying Lists
 @subsection Altering the CDR of a List
 
   The lowest-level primitive for modifying a @sc{cdr} is @code{setcdr}:
@@ -907,7 +907,7 @@ x1
 @end smallexample
 
 
-@node Rearrangement
+@node Rearrangement,  , Setcdr, Modifying Lists
 @subsection Functions that Rearrange Lists
 @cindex rearrangement of lists
 @cindex modification of lists
@@ -1117,7 +1117,7 @@ useful example of @code{sort}.
 @end defun
 
 
-@node Sets And Lists
+@node Sets And Lists, Association Lists, Modifying Lists, Lists
 @section Using Lists as Sets
 @cindex lists as sets
 @cindex sets
@@ -1277,7 +1277,7 @@ Lisp versions do not use @code{equal} to compare elements.
 for another way to add an element to a list stored in a variable.
 
 
-@node Association Lists
+@node Association Lists, Property Lists, Sets And Lists, Lists
 @section Association Lists
 @cindex association list
 @cindex alist
@@ -1565,7 +1565,7 @@ the associations of one copy without affecting the other:
 @end defun
 
 
-@node Property Lists
+@node Property Lists, Skip Lists, Association Lists, Lists
 @section Property Lists
 @cindex property list
 @cindex plist
@@ -1613,7 +1613,7 @@ with it.  This means that it's a malformed or circular plist.
 @end menu
 
 
-@node Working With Normal Plists
+@node Working With Normal Plists, Working With Lax Plists, Property Lists, Property Lists
 @subsection Working With Normal Plists
 
 @defun plist-get plist property &optional default
@@ -1670,7 +1670,7 @@ to @code{setq} the value back into where it came from.
 @end defun
 
 
-@node Working With Lax Plists
+@node Working With Lax Plists, Converting Plists To/From Alists, Working With Normal Plists, Property Lists
 @subsection Working With Lax Plists
 
 Recall that a @dfn{lax plist} is a property list whose keys are compared
@@ -1725,7 +1725,7 @@ to @code{setq} the value back into where it came from.
 @end defun
 
 
-@node Converting Plists To/From Alists
+@node Converting Plists To/From Alists,  , Working With Lax Plists, Property Lists
 @subsection Converting Plists To/From Alists
 
 @defun alist-to-plist alist
@@ -1778,7 +1778,7 @@ equivalent association-list form.  The alist is returned.
 @end defun
 
 
-@node Skip Lists
+@node Skip Lists, Weak Lists, Property Lists, Lists
 @section Skip Lists
 @cindex skip list
 
@@ -1899,7 +1899,7 @@ processed by @var{function}.
 
 
 
-@node Weak Lists
+@node Weak Lists, DL-Lists, Skip Lists, Lists
 @section Weak Lists
 @cindex weak list
 
@@ -1961,7 +1961,7 @@ This function changes the list contained in a weak-list object.
 @end defun
 
 
-@node DL-Lists
+@node DL-Lists, Bloom Filters, Weak Lists, Lists
 @section Doubly-Linked Lists
 @cindex dl-list
 @cindex doubly-linked list
@@ -2102,7 +2102,7 @@ through the front.
 @end example
 
 
-@node Bloom Filters
+@node Bloom Filters,  , DL-Lists, Lists
 @section Bloom Filters
 @cindex Bloom filters
 
index 86935a8..ed52e11 100644 (file)
@@ -46,7 +46,7 @@ containing Lisp code.
 @end menu
 
 
-@node How Programs Do Loading
+@node How Programs Do Loading, Autoload, Loading, Loading
 @section How Programs Do Loading
 
   SXEmacs Lisp has several interfaces for loading.  For example,
index 1df631b..5a4e940 100644 (file)
@@ -35,7 +35,7 @@ instead.  @xref{Inline Functions}.
 @end menu
 
 
-@node Simple Macro
+@node Simple Macro, Expansion, Macros, Macros
 @section A Simple Example of a Macro
 
   Suppose we would like to define a Lisp construct to increment a
@@ -58,7 +58,7 @@ x (1+ x))}.  Once the macro definition returns this expansion, Lisp
 proceeds to evaluate it, thus incrementing @code{x}.
 
 
-@node Expansion
+@node Expansion, Compiling Macros, Simple Macro, Macros
 @section Expansion of a Macro Call
 @cindex expansion of macros
 @cindex macro call
@@ -140,7 +140,7 @@ uses this feature.
 @end defun
 
 
-@node Compiling Macros
+@node Compiling Macros, Defining Macros, Expansion, Macros
 @section Macros and Byte Compilation
 @cindex byte-compiling macros
 
@@ -175,7 +175,7 @@ when someone @emph{runs} the compiled program, write
 During Compile}).
 
 
-@node Defining Macros
+@node Defining Macros, Backquote, Compiling Macros, Macros
 @section Defining Macros
 
   A Lisp macro is a list whose @sc{car} is @code{macro}.  Its @sc{cdr} should
@@ -209,7 +209,7 @@ called interactively.
 @end defspec
 
 
-@node Backquote
+@node Backquote, Problems with Macros, Defining Macros, Macros
 @section Backquote
 @cindex backquote (list substitution)
 @cindex ` (list substitution)
@@ -291,7 +291,7 @@ Here are some examples:
 
 
 
-@node Problems with Macros
+@node Problems with Macros,  , Backquote, Macros
 @section Common Problems Using Macros
 
   The basic facts of macro expansion have counterintuitive consequences.
@@ -307,7 +307,7 @@ trouble, and rules to follow to avoid trouble.
 @end menu
 
 
-@node Argument Evaluation
+@node Argument Evaluation, Surprising Local Vars, Problems with Macros, Problems with Macros
 @subsection Evaluating Macro Arguments Repeatedly
 
   When defining a macro you must pay attention to the number of times
@@ -414,7 +414,7 @@ Proceed to the following node.
 @end ifinfo
 
 
-@node Surprising Local Vars
+@node Surprising Local Vars, Eval During Expansion, Argument Evaluation, Problems with Macros
 @subsection Local Variables in Macro Expansions
 
 @ifinfo
@@ -484,7 +484,7 @@ expansion instead of the usual interned symbol @code{max} that appears
 in expressions ordinarily.
 
 
-@node Eval During Expansion
+@node Eval During Expansion, Repeated Expansion, Surprising Local Vars, Problems with Macros
 @subsection Evaluating Macro Arguments in Expansion
 
   Another problem can happen if you evaluate any of the macro argument
@@ -530,7 +530,7 @@ put the expression into the macro expansion, so that its value is
 computed as part of executing the expansion.
 
 
-@node Repeated Expansion
+@node Repeated Expansion,  , Eval During Expansion, Problems with Macros
 @subsection How Many Times is the Macro Expanded?
 
   Occasionally problems result from the fact that a macro call is
index 920ea39..e5201f5 100644 (file)
@@ -25,7 +25,7 @@ deleted, so that it stays with the two characters on either side of it.
 @end menu
 
 
-@node Overview of Markers
+@node Overview of Markers, Predicates on Markers, Markers, Markers
 @section Overview of Markers
 
   A marker specifies a buffer and a position in that buffer.  The marker
@@ -670,7 +670,7 @@ location.
 @end deffn
 
 
-@node The Region
+@node The Region,  , The Mark, Markers
 @section The Region
 @cindex region, the
 
index 752a439..e398dcd 100644 (file)
@@ -22,7 +22,7 @@
 @end menu
 
 
-@node Menu Format
+@node Menu Format, Menubar Format, Menus, Menus
 @section Format of Menus
 @cindex menu format
 @cindex format of menus
@@ -254,7 +254,7 @@ For example:
 @end example
 
 
-@node Menubar Format
+@node Menubar Format, Menubar, Menu Format, Menus
 @section Format of the Menubar
 @cindex menubar format
 @cindex format of the menubar
@@ -277,7 +277,7 @@ yet.)
 @end itemize
 
 
-@node Menubar
+@node Menubar, Modifying Menus, Menubar Format, Menus
 @section Menubar
 @cindex menubar
 
@@ -354,7 +354,7 @@ without a selection having been made.
 @end defvar
 
 
-@node Modifying Menus
+@node Modifying Menus, Menu Filters, Menubar, Menus
 @section Modifying Menus
 
 The following functions are provided to modify the menubar of one of its
@@ -484,7 +484,7 @@ item is already present, it will not be moved.
 @end defun
 
 
-@node Menu Filters
+@node Menu Filters, Pop-Up Menus, Modifying Menus, Menus
 @section Menu Filters
 @cindex menu filters
 
@@ -539,7 +539,7 @@ more information.
 @end defun
 
 
-@node Pop-Up Menus
+@node Pop-Up Menus, Menu Accelerators, Menu Filters, Menus
 @section Pop-Up Menus
 @cindex pop-up menu
 
@@ -607,7 +607,7 @@ It should be bound to a mouse button event.
 @end deffn
 
 
-@node Menu Accelerators
+@node Menu Accelerators, Buffers Menu, Pop-Up Menus, Menus
 @section Menu Accelerators
 @cindex menu accelerators
 @cindex keyboard menu accelerators
@@ -626,7 +626,7 @@ activate that item.
 @end menu
 
 
-@node Creating Menu Accelerators
+@node Creating Menu Accelerators, Keyboard Menu Traversal, Menu Accelerators, Menu Accelerators
 @subsection Creating Menu Accelerators
 
 Menu accelerators are specified as part of the menubar format using the
@@ -656,7 +656,7 @@ It is possible to activate the top level menubar itself using accelerator keys.
 @xref{Menu Accelerator Functions}.
 
 
-@node Keyboard Menu Traversal
+@node Keyboard Menu Traversal, Menu Accelerator Functions, Creating Menu Accelerators, Menu Accelerators
 @subsection Keyboard Menu Traversal
 
 In addition to immediately activating a menu or menu item, the keyboard can
@@ -670,7 +670,7 @@ menu-accelerator-map.  At this point, the online help is your best bet
 for more information about how to modify the menu traversal keys.
 
 
-@node Menu Accelerator Functions
+@node Menu Accelerator Functions,  , Keyboard Menu Traversal, Menu Accelerators
 @subsection Menu Accelerator Functions
 
 @deffn Command accelerate-menu
@@ -741,7 +741,7 @@ C-M-T by itself will not activate the menubar.  Neither will pressing C-x
 followed by anything else.
 
 
-@node Buffers Menu
+@node Buffers Menu,  , Menu Accelerators, Menus
 @section Buffers Menu
 @cindex buffers menu
 
index 267545a..d495ab0 100644 (file)
@@ -32,7 +32,7 @@ use for reading an argument.
 @end menu
 
 
-@node Intro to Minibuffers
+@node Intro to Minibuffers, Text from Minibuffer, Minibuffers, Minibuffers
 @section Introduction to Minibuffers
 
   In most ways, a minibuffer is a normal SXEmacs buffer.  Most operations
@@ -79,7 +79,7 @@ for cautious completion.
 @end itemize
 
 
-@node Text from Minibuffer
+@node Text from Minibuffer, Object from Minibuffer, Intro to Minibuffers, Minibuffers
 @section Reading Text Strings with the Minibuffer
 
   Most often, the minibuffer is used to read text as a string.  It can
@@ -207,7 +207,7 @@ default, it makes the following bindings:
 @end defvar
 
 
-@node Object from Minibuffer
+@node Object from Minibuffer, Minibuffer History, Text from Minibuffer, Minibuffers
 @section Reading Lisp Objects with the Minibuffer
 
   This section describes functions for reading Lisp objects with the
@@ -327,7 +327,7 @@ expression, thus moving point forward one word.
 @end defun
 
 
-@node Minibuffer History
+@node Minibuffer History, Completion, Object from Minibuffer, Minibuffers
 @section Minibuffer History
 @cindex minibuffer history
 @cindex history list
@@ -415,7 +415,7 @@ libraries.  An @kbd{M-x apropos} search for @samp{history} should prove
 fruitful in discovering them.
 
 
-@node Completion
+@node Completion, Yes-or-No Queries, Minibuffer History, Minibuffers
 @section Completion
 @cindex completion
 
@@ -455,7 +455,7 @@ for reading certain kinds of names with completion.
 @end menu
 
 
-@node Basic Completion
+@node Basic Completion, Minibuffer Completion, Completion, Completion
 @subsection Basic Completion Functions
 
   The two functions @code{try-completion} and @code{all-completions}
@@ -592,7 +592,7 @@ non-@code{nil}, SXEmacs does not consider case significant in completion.
 @end defvar
 
 
-@node Minibuffer Completion
+@node Minibuffer Completion, Completion Commands, Basic Completion, Completion
 @subsection Completion and the Minibuffer
 
   This section describes the basic interface for reading from the
@@ -676,7 +676,7 @@ see @ref{Completion Commands}.
 @end defun
 
 
-@node Completion Commands
+@node Completion Commands, High-Level Completion, Minibuffer Completion, Completion
 @subsection Minibuffer Commands That Do Completion
 
   This section describes the keymaps, commands and user options used in
@@ -808,7 +808,7 @@ can be completed because the next character is not uniquely determined.
 @end defopt
 
 
-@node High-Level Completion
+@node High-Level Completion, Reading File Names, Completion Commands, Completion
 @subsection High-Level Completion  Functions
 
   This section describes the higher-level convenient functions for
@@ -953,7 +953,7 @@ predicate @code{user-variable-p} instead of @code{commandp}:
 @end defun
 
 
-@node Reading File Names
+@node Reading File Names, Programmed Completion, High-Level Completion, Completion
 @subsection Reading File Names
 
   Here is another high-level completion function, designed for reading a
@@ -1063,7 +1063,7 @@ The file is @point{}
 @end defopt
 
 
-@node Programmed Completion
+@node Programmed Completion,  , Reading File Names, Completion
 @subsection Programmed Completion
 @cindex programmed completion
 
@@ -1129,7 +1129,7 @@ to use for completion to be encapsulated in a symbol.
 @xref{File Name Completion}.
 
 
-@node Yes-or-No Queries
+@node Yes-or-No Queries, Multiple Queries, Completion, Minibuffers
 @section Yes-or-No Queries
 @cindex asking the user questions
 @cindex querying the user
@@ -1287,7 +1287,7 @@ box or the minibuffer, as appropriate.
 @end defun
 
 
-@node Multiple Queries
+@node Multiple Queries, Reading a Password, Yes-or-No Queries, Minibuffers
 @section Asking Multiple Y-or-N Questions
 
   When you have a series of similar questions to ask, such as ``Do you
@@ -1378,7 +1378,7 @@ The return value of @code{map-y-or-n-p} is the number of objects acted on.
 @end defun
 
 
-@node Reading a Password
+@node Reading a Password, Minibuffer Misc, Multiple Queries, Minibuffers
 @section Reading a Password
 @cindex passwords, reading
 
@@ -1413,7 +1413,7 @@ nothing is echoed.
 @end defopt
 
 
-@node Minibuffer Misc
+@node Minibuffer Misc,  , Reading a Password, Minibuffers
 @section Minibuffer Miscellany
 
   This section describes some basic functions and variables related to
index 76b0986..d589011 100644 (file)
@@ -28,7 +28,7 @@ user.  For related topics such as keymaps and syntax tables, see
 @end menu
 
 
-@node Major Modes
+@node Major Modes, Minor Modes, Modes, Modes
 @section Major Modes
 @cindex major mode
 @cindex Fundamental mode
@@ -100,7 +100,7 @@ Fundamental mode.  Rmail mode is a complicated and specialized mode.
 @end menu
 
 
-@node Major Mode Conventions
+@node Major Mode Conventions, Example Major Modes, Major Modes, Major Modes
 @subsection Major Mode Conventions
 
   The code for existing major modes follows various coding conventions,
@@ -267,7 +267,7 @@ subsequent major mode.  @xref{Hooks}.
 @end defvar
 
 
-@node Example Major Modes
+@node Example Major Modes, Auto Major Mode, Major Mode Conventions, Major Modes
 @subsection Major Mode Examples
 
   Text mode is perhaps the simplest mode besides Fundamental mode.
@@ -499,7 +499,7 @@ Entry to this mode runs the hook `emacs-lisp-mode-hook'."
 @end smallexample
 
 
-@node Auto Major Mode
+@node Auto Major Mode, Mode Help, Example Major Modes, Major Modes
 @subsection How SXEmacs Chooses a Major Mode
 
   Based on information in the file name or in the file itself, SXEmacs
@@ -686,7 +686,7 @@ usually comes from the argument @var{find-file} given to
 @end defun
 
 
-@node Mode Help
+@node Mode Help, Derived Modes, Auto Major Mode, Major Modes
 @subsection Getting Help about a Major Mode
 @cindex mode help
 @cindex help for major mode
@@ -716,7 +716,7 @@ mode.
 @end defvar
 
 
-@node Derived Modes
+@node Derived Modes,  , Mode Help, Major Modes
 @subsection Defining Derived Modes
 
   It's often useful to define a new major mode in terms of an existing
@@ -781,7 +781,7 @@ Do not write an @code{interactive} spec in the definition;
 @end defmac
 
 
-@node Minor Modes
+@node Minor Modes, Modeline Format, Major Modes, Modes
 @section Minor Modes
 @cindex minor mode
 
@@ -812,7 +812,7 @@ keymaps make this easier than it used to be.
 @end menu
 
 
-@node Minor Mode Conventions
+@node Minor Mode Conventions, Keymaps and Minor Modes, Minor Modes, Minor Modes
 @subsection Conventions for Writing Minor Modes
 @cindex minor mode conventions
 @cindex conventions for writing minor modes
@@ -893,7 +893,7 @@ check for an existing element, to avoid duplication.  For example:
 @end itemize
 
 
-@node Keymaps and Minor Modes
+@node Keymaps and Minor Modes,  , Minor Mode Conventions, Minor Modes
 @subsection Keymaps and Minor Modes
 
   Each minor mode can have its own keymap, which is active when the mode
@@ -910,7 +910,7 @@ substituting your own definition of @code{self-insert-command} for the
 standard one.  The editor command loop handles this function specially.)
 
 
-@node Modeline Format
+@node Modeline Format, Hooks, Minor Modes, Modes
 @section Modeline Format
 @cindex modeline
 
@@ -954,7 +954,7 @@ is controlled using the @code{modeline} face.  @xref{Faces}.
 @end menu
 
 
-@node Modeline Data
+@node Modeline Data, Modeline Variables, Modeline Format, Modeline Format
 @subsection The Data Structure of the Modeline
 @cindex modeline construct
 
@@ -1089,7 +1089,7 @@ directory.
 @end example
 
 
-@node Modeline Variables
+@node Modeline Variables, %-Constructs, Modeline Data, Modeline Format
 @subsection Variables Used in the Modeline
 
   This section describes variables incorporated by the
@@ -1224,7 +1224,7 @@ that appears in the mode line.
 @end defvar
 
 
-@node %-Constructs
+@node %-Constructs,  , Modeline Variables, Modeline Format
 @subsection @code{%}-Constructs in the ModeLine
 
   The following table lists the recognized @code{%}-constructs and what
@@ -1327,7 +1327,7 @@ The value of @code{global-mode-string}.  Currently, only
 @end table
 
 
-@node Hooks
+@node Hooks,  , Modeline Format, Modes
 @section Hooks
 @cindex hooks
 
index a6f2127..8b3952d 100644 (file)
@@ -5,7 +5,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/internationalization.info
 
-@node MULE, Tips, Foreign Functions, top
+@node MULE, Tips, Foreign Functions, Top
 @chapter MULE
 
   @dfn{MULE} is the name originally given to the version of GNU Emacs
index 7617548..3a7ebe8 100644 (file)
@@ -40,7 +40,7 @@ this case, @xref{Enhanced Number Types}.
 @end menu
 
 
-@node Integer Basics
+@node Integer Basics, Float Basics, Numbers, Numbers
 @section Integer Basics
 
   The range of values for an integer depends on the machine.  The
@@ -1080,7 +1080,7 @@ This returns the cube root of @var{number}.
 @end defun
 
 
-@node Random Numbers
+@node Random Numbers,  , Math Functions, Numbers
 @section Random Numbers
 @cindex random numbers
 
index 23e8db5..1d6441f 100644 (file)
@@ -63,7 +63,7 @@ to use these types can be found in later chapters.
 @end menu
 
 
-@node Printed Representation
+@node Printed Representation, Comments, Lisp Data Types, Lisp Data Types
 @section Printed Representation and Read Syntax
 @cindex printed representation
 @cindex read syntax
@@ -108,7 +108,7 @@ not be evaluated later.  @xref{Input Functions}, for a description of
 @code{read}, the basic function for reading objects.
 
 
-@node Comments
+@node Comments, Primitive Types, Printed Representation, Lisp Data Types
 @section Comments
 @cindex comments
 @cindex @samp{;} in comment
@@ -129,7 +129,7 @@ data.  The SXEmacs Lisp byte compiler uses this in its output files
   @xref{Comment Tips}, for conventions for formatting comments.
 
 
-@node Primitive Types
+@node Primitive Types, Programming Types, Comments, Lisp Data Types
 @section Primitive Types
 @cindex primitive types
 
@@ -254,7 +254,7 @@ toolbar-data
 @end itemize
 
 
-@node Programming Types
+@node Programming Types, Editing Types, Primitive Types, Lisp Data Types
 @section Programming Types
 @cindex programming types
 
@@ -290,7 +290,7 @@ latter are unique to SXEmacs Lisp.
 @end menu
 
 
-@node Integer Type
+@node Integer Type, Floating Point Type, Programming Types, Programming Types
 @subsection Integer Type
 
   The range of values for integers in SXEmacs Lisp is @minus{}134217728 to
@@ -331,7 +331,7 @@ by the Lisp interpreter never has a leading @samp{+}.)
   @xref{Numbers}, for more information.
 
 
-@node Floating Point Type
+@node Floating Point Type, Character Type, Integer Type, Programming Types
 @subsection Floating Point Type
 
   SXEmacs supports floating point numbers.  The precise range of floating
@@ -346,7 +346,7 @@ number whose value is 1500.  They are all equivalent.
   @xref{Numbers}, for more information.
 
 
-@node Character Type
+@node Character Type, Symbol Type, Floating Point Type, Programming Types
 @subsection Character Type
 @cindex @sc{ascii} character codes
 @cindex char-int confoundance disease
@@ -654,7 +654,7 @@ the easily readable escape sequences, such as @samp{\t}, instead of an
 actual whitespace character such as a tab.
 
 
-@node Symbol Type
+@node Symbol Type, Sequence Type, Character Type, Programming Types
 @subsection Symbol Type
 
   A @dfn{symbol} in SXEmacs Lisp is an object with a name.  The symbol
@@ -722,7 +722,7 @@ char-to-string      ; @r{A symbol named @samp{char-to-string}.}
 @end example
 
 
-@node Sequence Type
+@node Sequence Type, Cons Cell Type, Symbol Type, Programming Types
 @subsection Sequence Types
 
   A @dfn{sequence} is a Lisp object that represents an ordered set of
@@ -753,7 +753,7 @@ exception: the empty list @code{()} always stands for the same object,
 @code{nil}.
 
 
-@node Cons Cell Type
+@node Cons Cell Type, Array Type, Sequence Type, Programming Types
 @subsection Cons Cell and List Types
 @cindex address field of register
 @cindex decrement field of register
@@ -874,7 +874,7 @@ depicted with boxes and arrows:
 @end menu
 
 
-@node Dotted Pair Notation
+@node Dotted Pair Notation, Association List Type, Cons Cell Type, Cons Cell Type
 @subsubsection Dotted Pair Notation
 @cindex dotted pair notation
 @cindex @samp{.} in lists
@@ -952,7 +952,7 @@ It looks like this:
 @end ifinfo
 
 
-@node Association List Type
+@node Association List Type,  , Dotted Pair Notation, Cons Cell Type
 @subsubsection Association List Type
 
   An @dfn{association list} or @dfn{alist} is a specially-constructed
@@ -978,7 +978,7 @@ first element, @code{rose} is the key and @code{red} is the value.
 functions that work on alists.
 
 
-@node Array Type
+@node Array Type, String Type, Cons Cell Type, Programming Types
 @subsection Array Type
 
   An @dfn{array} is composed of an arbitrary number of slots for
@@ -1008,7 +1008,7 @@ indices 0, 1, 2, @w{and 3}.
 string type, the vector type, and the bit vector type.
 
 
-@node String Type
+@node String Type, Vector Type, Array Type, Programming Types
 @subsection String Type
 
   A @dfn{string} is an array of characters.  Strings are used for many
@@ -1117,7 +1117,7 @@ that range.
   @xref{Strings and Characters}, for functions that work on strings.
 
 
-@node Vector Type
+@node Vector Type, Bit Vector Type, String Type, Programming Types
 @subsection Vector Type
 
   A @dfn{vector} is a one-dimensional array of elements of any type.  It
@@ -1138,7 +1138,7 @@ for evaluation.
   @xref{Vectors}, for functions that work with vectors.
 
 
-@node Bit Vector Type
+@node Bit Vector Type, Function Type, Vector Type, Programming Types
 @subsection Bit Vector Type
 
   A @dfn{bit vector} is a one-dimensional array of 1's and 0's.  It
@@ -1161,7 +1161,7 @@ evaluation.
   @xref{Bit Vectors}, for functions that work with bit vectors.
 
 
-@node Function Type
+@node Function Type, Macro Type, Bit Vector Type, Programming Types
 @subsection Function Type
 
   Just as functions in other programming languages are executable,
@@ -1183,7 +1183,7 @@ a function object at run time and then call it with the primitive
 functions @code{funcall} and @code{apply}.  @xref{Calling Functions}.
 
 
-@node Macro Type
+@node Macro Type, Primitive Function Type, Function Type, Programming Types
 @subsection Macro Type
 
   A @dfn{Lisp macro} is a user-defined construct that extends the Lisp
@@ -1198,7 +1198,7 @@ a macro as far as SXEmacs is concerned.  @xref{Macros}, for an explanation
 of how to write a macro.
 
 
-@node Primitive Function Type
+@node Primitive Function Type, Compiled-Function Type, Macro Type, Programming Types
 @subsection Primitive Function Type
 @cindex special forms
 
@@ -1235,7 +1235,7 @@ with the name of the subroutine.
 @end example
 
 
-@node Compiled-Function Type
+@node Compiled-Function Type, Autoload Type, Primitive Function Type, Programming Types
 @subsection Compiled-Function Type
 
   The byte compiler produces @dfn{compiled-function objects}.  The
@@ -1248,7 +1248,7 @@ compiler.
 however, it is @samp{#[...]}.
 
 
-@node Autoload Type
+@node Autoload Type, Char Table Type, Compiled-Function Type, Programming Types
 @subsection Autoload Type
 
   An @dfn{autoload object} is a list whose first element is the symbol
@@ -1269,14 +1269,14 @@ in the loaded file.
 symbol.  @xref{Autoload}, for more details.
 
 
-@node Char Table Type
+@node Char Table Type, Hash Table Type, Autoload Type, Programming Types
 @subsection Char Table Type
 @cindex char table type
 
 (not yet documented)
 
 
-@node Hash Table Type
+@node Hash Table Type, Range Table Type, Char Table Type, Programming Types
 @subsection Hash Table Type
 @cindex hash table type
 
@@ -1309,7 +1309,7 @@ of space for elements.)
 tables.
 
 
-@node Range Table Type
+@node Range Table Type, Weak List Type, Hash Table Type, Programming Types
 @subsection Range Table Type
 @cindex range table type
 
 tables.
 
 
-@node Weak List Type
+@node Weak List Type,  , Range Table Type, Programming Types
 @subsection Weak List Type
 @cindex weak list type
 
 (not yet documented)
 
 
-@node Editing Types
+@node Editing Types, Window-System Types, Programming Types, Lisp Data Types
 @section Editing Types
 @cindex editing types
 
@@ -1374,7 +1374,7 @@ with editing.
 @end menu
 
 
-@node Buffer Type
+@node Buffer Type, Marker Type, Editing Types, Editing Types
 @subsection Buffer Type
 
   A @dfn{buffer} is an object that holds text that can be edited
@@ -1438,7 +1438,7 @@ buffer name.
 @end example
 
 
-@node Marker Type
+@node Marker Type, Extent Type, Buffer Type, Editing Types
 @subsection Marker Type
 
   A @dfn{marker} denotes a position in a specific buffer.  Markers
@@ -1461,7 +1461,7 @@ current character position and the name of the buffer.
 markers.
 
 
-@node Extent Type
+@node Extent Type, Window Type, Marker Type, Editing Types
 @subsection Extent Type
 
   An @dfn{extent} specifies temporary alteration of the display
@@ -1494,7 +1494,7 @@ the extent.
   Extents are used to implement text properties.  @xref{Text Properties}.
 
 
-@node Window Type
+@node Window Type, Frame Type, Extent Type, Editing Types
 @subsection Window Type
 
   A @dfn{window} describes the portion of the frame that SXEmacs uses to
@@ -1529,7 +1529,7 @@ buffer displayed in any given window can change frequently.)
   @xref{Windows}, for a description of the functions that work on windows.
 
 
-@node Frame Type
+@node Frame Type, Device Type, Window Type, Editing Types
 @subsection Frame Type
 
   A @var{frame} is a rectangle on the screen (a @dfn{window} in standard
@@ -1553,7 +1553,7 @@ at the time the frame was created.
   @xref{Frames}, for a description of the functions that work on frames.
 
 
-@node Device Type
+@node Device Type, Console Type, Frame Type, Editing Types
 @subsection Device Type
 
   A @dfn{device} represents a single display on which frames exist.
@@ -1578,7 +1578,7 @@ at the time the device was created.
 related to devices.
 
 
-@node Console Type
+@node Console Type, Window Configuration Type, Device Type, Editing Types
 @subsection Console Type
 
   A @dfn{console} represents a single keyboard to which devices
@@ -1609,7 +1609,7 @@ at the time the console was created.
 related to consoles.
 
 
-@node Window Configuration Type
+@node Window Configuration Type, Event Type, Console Type, Editing Types
 @subsection Window Configuration Type
 @cindex screen layout
 
@@ -1632,13 +1632,13 @@ configuration was created.
 related to window configurations.
 
 
-@node Event Type
+@node Event Type, Process Type, Window Configuration Type, Editing Types
 @subsection Event Type
 
 (not yet documented)
 
 
-@node Process Type
+@node Process Type, Stream Type, Event Type, Editing Types
 @subsection Process Type
 
   The word @dfn{process} usually means a running program.  SXEmacs itself
@@ -1667,7 +1667,7 @@ return information about, send input or signals to, and receive output
 from processes.
 
 
-@node Stream Type
+@node Stream Type, Keymap Type, Process Type, Editing Types
 @subsection Stream Type
 
   A @dfn{stream} is an object that can be used as a source or sink for
@@ -1692,7 +1692,7 @@ print as whatever primitive type they are.
 related to streams, including parsing and printing functions.
 
 
-@node Keymap Type
+@node Keymap Type, Syntax Table Type, Stream Type, Editing Types
 @subsection Keymap Type
 
   A @dfn{keymap} maps keys typed by the user to commands.  This mapping
@@ -1706,7 +1706,7 @@ Emacs, a keymap is actually a list whose @sc{car} is the symbol
 keys, local as well as global keymaps, and changing key bindings.
 
 
-@node Syntax Table Type
+@node Syntax Table Type, Display Table Type, Keymap Type, Editing Types
 @subsection Syntax Table Type
 
   Under SXEmacs and XEmacs 20+, a @dfn{syntax table} is a particular
@@ -1728,7 +1728,7 @@ instead of @samp{(} and @samp{)} would be impossible.
 and modify syntax tables.
 
 
-@node Display Table Type
+@node Display Table Type, Database Type, Syntax Table Type, Editing Types
 @subsection Display Table Type
 
   A @dfn{display table} specifies how to display each character code.
@@ -1738,28 +1738,28 @@ table is actually a vector of length 256, although in SXEmacs and XEmacs
 @xref{Display Tables}.
 
 
-@node Database Type
+@node Database Type, Charset Type, Display Table Type, Editing Types
 @subsection Database Type
 @cindex database type
 
 (not yet documented)
 
 
-@node Charset Type
+@node Charset Type, Coding System Type, Database Type, Editing Types
 @subsection Charset Type
 @cindex charset type
 
 (not yet documented)
 
 
-@node Coding System Type
+@node Coding System Type,  , Charset Type, Editing Types
 @subsection Coding System Type
 @cindex coding system type
 
 (not yet documented)
 
 
-@node Window-System Types
+@node Window-System Types, Type Predicates, Editing Types, Lisp Data Types
 @section Window-System Types
 @cindex window system types
 
@@ -1783,70 +1783,70 @@ commonly found in windowing systems.
 @end menu
 
 
-@node Face Type
+@node Face Type, Glyph Type, Window-System Types, Window-System Types
 @subsection Face Type
 @cindex face type
 
 (not yet documented)
 
 
-@node Glyph Type
+@node Glyph Type, Specifier Type, Face Type, Window-System Types
 @subsection Glyph Type
 @cindex glyph type
 
 (not yet documented)
 
 
-@node Specifier Type
+@node Specifier Type, Font Instance Type, Glyph Type, Window-System Types
 @subsection Specifier Type
 @cindex specifier type
 
 (not yet documented)
 
 
-@node Font Instance Type
+@node Font Instance Type, Color Instance Type, Specifier Type, Window-System Types
 @subsection Font Instance Type
 @cindex font instance type
 
 (not yet documented)
 
 
-@node Color Instance Type
+@node Color Instance Type, Image Instance Type, Font Instance Type, Window-System Types
 @subsection Color Instance Type
 @cindex color instance type
 
 (not yet documented)
 
 
-@node Image Instance Type
+@node Image Instance Type, Toolbar Button Type, Color Instance Type, Window-System Types
 @subsection Image Instance Type
 @cindex image instance type
 
 (not yet documented)
 
 
-@node Toolbar Button Type
+@node Toolbar Button Type, Subwindow Type, Image Instance Type, Window-System Types
 @subsection Toolbar Button Type
 @cindex toolbar button type
 
 (not yet documented)
 
 
-@node Subwindow Type
+@node Subwindow Type, X Resource Type, Toolbar Button Type, Window-System Types
 @subsection Subwindow Type
 @cindex subwindow type
 
 (not yet documented)
 
 
-@node X Resource Type
+@node X Resource Type,  , Subwindow Type, Window-System Types
 @subsection X Resource Type
 @cindex X resource type
 
 (not yet documented)
 
 
-@node Type Predicates
+@node Type Predicates, Equality Predicates, Window-System Types, Lisp Data Types
 @section Type Predicates
 @cindex predicates
 @cindex type checking
@@ -2234,7 +2234,7 @@ This function returns a symbol naming the primitive type of
 @end defun
 
 
-@node Equality Predicates
+@node Equality Predicates,  , Type Predicates, Lisp Data Types
 @section Equality Predicates
 @cindex equality
 
index 6ea885d..e560981 100644 (file)
@@ -4,7 +4,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/openssl.info
 
-@node OpenSSL Support, Enhanced Number Types, PostgreSQL Support, top
+@node OpenSSL Support, Enhanced Number Types, PostgreSQL Support, Top
 @comment  node-name,  next,  previous,  up
 @chapter OpenSSL Support
 @cindex OpenSSL
@@ -25,7 +25,7 @@ functions are highly likely.
 @end menu
 
 
-@node Building SXEmacs with OpenSSL support
+@node Building SXEmacs with OpenSSL support, SXEmacs OpenSSL API, OpenSSL Support, OpenSSL Support
 @section Building SXEmacs with OpenSSL support
 
 SXEmacs OpenSSL support requires linking to the OpenSSL libcrypto and libssl
@@ -62,7 +62,7 @@ location of your OpenSSL installation via the @samp{--site-prefixes}
 flag when you run the SXEmacs configure script.
 
 
-@node SXEmacs OpenSSL API
+@node SXEmacs OpenSSL API,  , Building SXEmacs with OpenSSL support, OpenSSL Support
 @section SXEmacs OpenSSL API
 
 @c Explaining cryptographical details behind OpenSSL API functions is
@@ -101,7 +101,7 @@ is denoted OpenSSL.
 @end menu
 
 
-@node openssl General
+@node openssl General, openssl RAND, SXEmacs OpenSSL API, SXEmacs OpenSSL API
 @subsection General information
 
 In this section we deal with informative functions which kind of
@@ -268,7 +268,7 @@ available
 @end itemize
 
 
-@node openssl RAND
+@node openssl RAND, openssl MD, openssl General, SXEmacs OpenSSL API
 @subsection (Pseudo) Random Numbers
 
 Random numbers are necessary for cryptographically secure
@@ -326,7 +326,7 @@ obtain random numbers.  The built-in @code{random} function of SXEmacs
 is @emph{not} cryptographically secure.
 
 
-@node openssl MD
+@node openssl MD, openssl HMAC, openssl RAND, SXEmacs OpenSSL API
 @subsection Message Digests (aka hashes)
 
   Message digests are widely used in modern information
@@ -543,7 +543,7 @@ sha1 (taken from `No Gnus v0.4') to the one from the OpenSSL API
 other implementations.
 
 
-@node openssl HMAC
+@node openssl HMAC, openssl CIPHER, openssl MD, SXEmacs OpenSSL API
 @subsection Message Authentication Codes (aka keyed hashes)
 
   Ordinary message digests only offer data integrity verification,
@@ -588,7 +588,7 @@ digest.
 @end example
 
 
-@node openssl CIPHER
+@node openssl CIPHER, openssl PKEY, openssl HMAC, SXEmacs OpenSSL API
 @subsection Symmetric Cryptography
 
   Symmetric-key algorithms can be divided into stream ciphers and
@@ -794,7 +794,7 @@ decrypted data redirected.
 
 
 
-@node openssl PKEY
+@node openssl PKEY, openssl SSL/TLS, openssl CIPHER, SXEmacs OpenSSL API
 @subsection public key crypto systems
 
 While keys for symmetric ciphers can be easily stored as strings, keys
@@ -1312,7 +1312,7 @@ ocNNE7QyxF/GOgW9iTQr/yOp9A==
 @end example
 
 
-@node openssl SSL/TLS
+@node openssl SSL/TLS,  , openssl PKEY, SXEmacs OpenSSL API
 @subsection Secure Network Layers
 
 The SSL/TLS support in this API is definitely not a copy of the
index 27f596b..bd08be7 100644 (file)
@@ -30,12 +30,12 @@ pertaining to the terminal and the screen.
 * Flow Control::        How to turn output flow control on or off.
 * Batch Mode::          Running SXEmacs without terminal interaction.
 @end menu
-@ignore
-* Special Keysyms::     Defining system-specific key symbols for X windows.
-@end ignore
+@c @ignore
+@c * Special Keysyms::     Defining system-specific key symbols for X windows.
+@c @end ignore
 
 
-@node Starting Up
+@node Starting Up, Getting Out, System Interface, System Interface
 @section Starting Up SXEmacs
 
   This section describes what SXEmacs does when it is started, and how you
@@ -50,7 +50,7 @@ can customize these actions.
 @end menu
 
 
-@node Start-up Summary
+@node Start-up Summary, Init File, Starting Up, Starting Up
 @subsection Summary: Sequence of Actions at Start Up
 @cindex initialization
 @cindex start up of SXEmacs
@@ -171,7 +171,7 @@ message for someone else.
 @end defopt
 
 
-@node Init File
+@node Init File, Terminal-Specific, Start-up Summary, Starting Up
 @subsection The Init File: @file{init.el}
 @cindex init file
 @cindex @file{init.el}
@@ -261,7 +261,7 @@ the user's init file, @file{default.el}, and/or @file{site-start.el}.
 @end defvar
 
 
-@node Terminal-Specific
+@node Terminal-Specific, Command Line Arguments, Init File, Starting Up
 @subsection Terminal-Specific Initialization
 @cindex terminal-specific initialization
 
@@ -338,7 +338,7 @@ loading terminal-specific Lisp code, and after running the hook
 @end defvar
 
 
-@node Command Line Arguments
+@node Command Line Arguments,  , Terminal-Specific, Starting Up
 @subsection Command Line Arguments
 @cindex command line arguments
 
@@ -444,7 +444,7 @@ as a file name to visit.
 @end defvar
 
 
-@node Getting Out
+@node Getting Out, System Environment, Starting Up, System Interface
 @section Getting out of SXEmacs
 @cindex exiting SXEmacs
 
@@ -460,7 +460,7 @@ common.
 @end menu
 
 
-@node Killing SXEmacs
+@node Killing SXEmacs, Suspending SXEmacs, Getting Out, Getting Out
 @subsection Killing SXEmacs
 @cindex killing SXEmacs
 
@@ -502,7 +502,7 @@ this hook.
 @end defvar
 
 
-@node Suspending SXEmacs
+@node Suspending SXEmacs,  , Killing SXEmacs, Getting Out
 @subsection Suspending SXEmacs
 @cindex suspending SXEmacs
 
@@ -606,7 +606,7 @@ This variable is a normal hook run after suspending.
 @end defvar
 
 
-@node System Environment
+@node System Environment, User Identification, Getting Out, System Interface
 @section Operating System Environment
 @cindex operating system environment
 
@@ -814,7 +814,7 @@ This function returns the process @sc{id} of the SXEmacs process.
 @end defun
 
 
-@node User Identification
+@node User Identification, Time of Day, System Environment, System Interface
 @section User Identification
 
 @defvar user-mail-address
@@ -918,7 +918,7 @@ SXEmacs will also attempt to lookup the @code{HOME} directory via
 @end defun
 
 
-@node Time of Day
+@node Time of Day, Time Conversion, User Identification, System Interface
 @section Time of Day
 
   This section explains how to determine the current time and the time
@@ -992,7 +992,7 @@ integers.  Thus, you can use times obtained from @code{current-time}
 @end defun
 
 
-@node Time Conversion
+@node Time Conversion, Timers, Time of Day, System Interface
 @section Time Conversion
 
   These functions convert time values (lists of two or three integers)
@@ -1140,7 +1140,7 @@ any further alteration for daylight savings time.
 @end defun
 
 
-@node Timers
+@node Timers, Terminal Input, Time Conversion, System Interface
 @section Timers for Delayed Execution
 
 You can set up a timer to call a function at a specified future time.
@@ -1187,7 +1187,7 @@ NOTE: In FSF Emacs, this function is called @code{cancel-timer}.
 @end defun
 
 
-@node Terminal Input
+@node Terminal Input, Terminal Output, Timers, System Interface
 @section Terminal Input
 @cindex terminal input
 
@@ -1203,7 +1203,7 @@ functions.
 @end menu
 
 
-@node Input Modes
+@node Input Modes, Translating Input, Terminal Input, Terminal Input
 @subsection Input Modes
 @cindex input modes
 @cindex terminal input modes
@@ -1265,7 +1265,7 @@ is the character SXEmacs currently uses for quitting, usually @kbd{C-g}.
 @end defun
 
 
-@node Translating Input
+@node Translating Input, Recording Input, Input Modes, Terminal Input
 @subsection Translating Input Events
 @cindex translating input events
 
@@ -1455,7 +1455,7 @@ The @file{iso-transl} library uses this feature to provide a way of
 inputting non-ASCII Latin-1 characters.
 
 
-@node Recording Input
+@node Recording Input,  , Translating Input, Terminal Input
 @subsection Recording Input
 
 @defun recent-keys &optional number
@@ -1514,7 +1514,7 @@ trigger an SXEmacs bug, for the sake of a bug report.
   See also the @code{open-termscript} function (@pxref{Terminal Output}).
 
 
-@node Terminal Output
+@node Terminal Output, Flow Control, Terminal Input, System Interface
 @section Terminal Output
 @cindex terminal output
 
@@ -1609,34 +1609,34 @@ See also @code{open-dribble-file} in @ref{Terminal Input}.
 @end example
 @end deffn
 
-@ignore Not in SXEmacs
-@node Special Keysyms
-@section System-Specific X11 Keysyms
+@c @ignore Not in SXEmacs
+@c @node Special Keysyms, Flow Control, Terminal Output, System Interface
+@c @section System-Specific X11 Keysyms
 
-To define system-specific X11 keysyms, set the variable
-@code{system-key-alist}.
+@c To define system-specific X11 keysyms, set the variable
+@c @code{system-key-alist}.
 
-@defvar system-key-alist
-This variable's value should be an alist with one element for each
-system-specific keysym.  An element has this form: @code{(@var{code}
-. @var{symbol})}, where @var{code} is the numeric keysym code (not
-including the ``vendor specific'' bit, 1 << 28), and @var{symbol} is the
-name for the function key.
+@c @defvar system-key-alist
+@c This variable's value should be an alist with one element for each
+@c system-specific keysym.  An element has this form: @code{(@var{code}
+@c . @var{symbol})}, where @var{code} is the numeric keysym code (not
+@c including the ``vendor specific'' bit, 1 << 28), and @var{symbol} is the
+@c name for the function key.
 
-For example @code{(168 . mute-acute)} defines a system-specific key used
-by HP X servers whose numeric code is (1 << 28) + 168.
+@c For example @code{(168 . mute-acute)} defines a system-specific key used
+@c by HP X servers whose numeric code is (1 << 28) + 168.
 
-It is not a problem if the alist defines keysyms for other X servers, as
-long as they don't conflict with the ones used by the X server actually
-in use.
+@c It is not a problem if the alist defines keysyms for other X servers, as
+@c long as they don't conflict with the ones used by the X server actually
+@c in use.
 
-The variable is always local to the current X terminal and cannot be
-buffer-local.  @xref{Multiple Displays}.
-@end defvar
-@end ignore
+@c The variable is always local to the current X terminal and cannot be
+@c buffer-local.  @xref{Multiple Displays}.
+@c @end defvar
+@c @end ignore
 
 
-@node Flow Control
+@node Flow Control, Batch Mode, Terminal Output, System Interface
 @section Flow Control
 @cindex flow control characters
 
@@ -1732,7 +1732,7 @@ smaller speed when calculating the padding needed.
 @xref{Terminal Output}.
 
 
-@node Batch Mode
+@node Batch Mode,  , Flow Control, System Interface
 @section Batch Mode
 @cindex batch mode
 @cindex noninteractive use
index 8984517..31f3fc3 100644 (file)
@@ -175,8 +175,8 @@ results in a very ``clean'' @code{load-path}.
 
 The order of search can be changed at build time by specifying the
 @samp{--with-package-path} option to @file{configure}, or at run-time by
-specifying the @code{EMACSPACKAGEPATH} environment variable.
-@xref{Packages,,,sxemacs}
+specifying the @code{EMACSPACKAGEPATH} environment variable
+@xref{Packages,,,sxemacs}.
 Also, the location for @code{early-packages} may be set via the
 @code{-user-pkgs-directory} command line argument (@pxref{Command Switches,,,sxemacs}).
 
index fd65ef2..c8fbaf3 100644 (file)
@@ -29,7 +29,7 @@ surrounding characters.  @xref{Markers}.
 @end menu
 
 
-@node Point
+@node Point, Motion, Positions, Positions
 @section Point
 @cindex point
 
@@ -120,7 +120,7 @@ current buffer, as of the last time it was read in, saved or auto-saved.
 @end defvar
 
 
-@node Motion
+@node Motion, Excursions, Point, Positions
 @section Motion
 
   Motion functions change the value of point, either relative to the
@@ -138,7 +138,7 @@ or relative to the edges of the selected window.  @xref{Point}.
 @end menu
 
 
-@node Character Motion
+@node Character Motion, Word Motion, Motion, Motion
 @subsection Motion by Characters
 
   These functions move point based on a count of characters.
@@ -193,7 +193,7 @@ In an interactive call, @var{count} is the numeric prefix argument.
 @end deffn
 
 
-@node Word Motion
+@node Word Motion, Buffer End Motion, Character Motion, Motion
 @subsection Motion by Words
 
   These functions for parsing words use the syntax table to decide
@@ -231,7 +231,7 @@ words.  Otherwise, they do not.
 @end defvar
 
 
-@node Buffer End Motion
+@node Buffer End Motion, Text Lines, Word Motion, Motion
 @subsection Motion to an End of the Buffer
 
   To move point to the beginning of the buffer, write:
@@ -280,7 +280,7 @@ Don't use this function in Lisp programs!
 @end deffn
 
 
-@node Text Lines
+@node Text Lines, Screen Lines, Buffer End Motion, Motion
 @subsection Motion by Text Lines
 @cindex lines
 
@@ -461,7 +461,7 @@ These functions do not move point, but test whether it is already at the
 beginning or end of a line.
 
 
-@node Screen Lines
+@node Screen Lines, List Motion, Text Lines, Motion
 @subsection Motion by Screen Lines
 
   The line functions in the previous section count text lines, delimited
@@ -610,7 +610,7 @@ beginning of the first screen line.  @xref{Minibuffer Misc}.
 @end ignore
 
 
-@node List Motion
+@node List Motion, Skipping Characters, Screen Lines, Motion
 @subsection Moving over Balanced Expressions
 @cindex sexp motion
 @cindex Lisp expression motion
@@ -704,7 +704,7 @@ open-parenthesis syntax.
 @end defopt
 
 
-@node Skipping Characters
+@node Skipping Characters,  , List Motion, Motion
 @subsection Skipping Characters
 @cindex skipping characters
 
@@ -763,7 +763,7 @@ This function moves point backward, skipping characters that match
 @end defun
 
 
-@node Excursions
+@node Excursions, Narrowing, Motion, Positions
 @section Excursions
 @cindex excursion
 
@@ -847,7 +847,7 @@ restores the selected window and nothing else.
 @end defspec
 
 
-@node Narrowing
+@node Narrowing,  , Excursions, Positions
 @section Narrowing
 @cindex narrowing
 @cindex restriction (in a buffer)
index e94a44e..07c350a 100644 (file)
@@ -7,7 +7,7 @@
 @c  ldap.texi.
 @setfilename ../../info/postgresql.info
 
-@node PostgreSQL Support, OpenSSL Support, LDAP Support, top
+@node PostgreSQL Support, OpenSSL Support, LDAP Support, Top
 @chapter PostgreSQL Support
 @cindex PostgreSQL
 
index a1b6d0e..6511d8e 100644 (file)
@@ -51,7 +51,7 @@ This function returns @code{t} if @var{object} is a process,
 @end menu
 
 
-@node Subprocess Creation
+@node Subprocess Creation, Synchronous Processes, Processes, Processes
 @section Functions that Create Subprocesses
 
   There are three functions that create a new subprocess in which to run
@@ -133,7 +133,7 @@ file name.
 @end defopt
 
 
-@node Synchronous Processes
+@node Synchronous Processes, Asynchronous Processes, Subprocess Creation, Processes
 @section Creating a Synchronous Process
 @cindex synchronous subprocess
 
@@ -314,7 +314,7 @@ inputinput@point{}
 @end defun
 
 
-@node Asynchronous Processes
+@node Asynchronous Processes, Deleting Processes, Synchronous Processes, Processes
 @section Creating an Asynchronous Process
 @cindex asynchronous subprocess
 
@@ -419,7 +419,7 @@ process associated with the current buffer.
 @xref{Process Buffers}.
 
 
-@node Deleting Processes
+@node Deleting Processes, Process Information, Asynchronous Processes, Processes
 @section Deleting Processes
 @cindex deleting processes
 
@@ -472,7 +472,7 @@ return value is @code{t} if a query was formerly required, and
 @end defun
 
 
-@node Process Information
+@node Process Information, Input to Processes, Deleting Processes, Processes
 @section Process Information
 
   Several functions return information about processes.
@@ -608,7 +608,7 @@ instead of a terminal (see @code{process-connection-type} in
 @end defun
 
 
-@node Input to Processes
+@node Input to Processes, Signals to Processes, Process Information, Processes
 @section Sending Input to Processes
 @cindex process input
 
@@ -687,7 +687,7 @@ The function returns the process object identified by @var{process}.
 @end defun
 
 
-@node Signals to Processes
+@node Signals to Processes, Output from Processes, Input to Processes, Processes
 @section Sending Signals to Processes
 @cindex process signals
 @cindex sending signals
@@ -794,7 +794,7 @@ specifies which signal to send.
 @end deffn
 
 
-@node Output from Processes
+@node Output from Processes, Sentinels, Signals to Processes, Processes
 @section Receiving Output from Processes
 @cindex process output
 @cindex output from processes
@@ -814,7 +814,7 @@ discarded.
 @end menu
 
 
-@node Process Buffers
+@node Process Buffers, Filter Functions, Output from Processes, Output from Processes
 @subsection Process Buffers
 
   A process can (and usually does) have an @dfn{associated buffer},
@@ -889,7 +889,7 @@ subprocess with a @code{SIGHUP} signal (@pxref{Signals to Processes}).
 @end defun
 
 
-@node Filter Functions
+@node Filter Functions, Accepting Output, Process Buffers, Output from Processes
 @subsection Process Filter Functions
 @cindex filter function
 @cindex process filter
@@ -1058,7 +1058,7 @@ there is no filter function:
 @end ignore
 
 
-@node Accepting Output
+@node Accepting Output,  , Filter Functions, Output from Processes
 @subsection Accepting Output from Processes
 
   Output from asynchronous subprocesses normally arrives only while
@@ -1102,7 +1102,7 @@ arrived.
 @end defun
 
 
-@node Sentinels
+@node Sentinels, Process Window Size, Output from Processes, Processes
 @section Sentinels: Detecting Process Status Changes
 @cindex process sentinel
 @cindex sentinel
@@ -1197,7 +1197,7 @@ was not.
 
 
 @c SXEmacs+XEmacs feature
-@node Process Window Size
+@node Process Window Size, Transaction Queues, Sentinels, Processes
 @section Process Window Size
 @cindex process window size
 
@@ -1208,7 +1208,7 @@ with pty's.
 @end defun
 
 
-@node Transaction Queues
+@node Transaction Queues, Network, Process Window Size, Processes
 @section Transaction Queues
 @cindex transaction queue
 
@@ -1250,7 +1250,7 @@ Transaction queues are implemented by means of a filter function.
 @xref{Filter Functions}.
 
 
-@node Network
+@node Network,  , Transaction Queues, Processes
 @section Network Connections
 @cindex network connection
 @cindex TCP
index 9341a10..64a6301 100644 (file)
@@ -5,7 +5,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/range-tables.info
 
-@node Range Tables, Databases, Hash Tables, top
+@node Range Tables, Databases, Hash Tables, Top
 @chapter Range Tables
 @cindex Range Tables
 
@@ -32,7 +32,7 @@ Return non-@code{nil} if @var{object} is a range table.
 @end menu
 
 
-@node Introduction to Range Tables
+@node Introduction to Range Tables, Working With Range Tables, Range Tables, Range Tables
 @section Introduction to Range Tables
 
 @defun make-range-table
@@ -46,7 +46,7 @@ themselves be copied.
 @end defun
 
 
-@node Working With Range Tables
+@node Working With Range Tables,  , Introduction to Range Tables, Range Tables
 @section Working With Range Tables
 
 @defun get-range-table pos range-table &optional default
index ff866ae..494aef1 100644 (file)
@@ -4,7 +4,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/glyphs.info
 
-@node Scrollbars, Drag and Drop, Gutter, top
+@node Scrollbars, Drag and Drop, Gutter, Top
 @chapter Scrollbars
 @cindex scrollbars
 
index 8f5ced7..5dcaec0 100644 (file)
@@ -31,7 +31,7 @@ portions of it.
 @xref{Skipping Characters}.
 
 
-@node String Search
+@node String Search, Regular Expressions, Searching and Matching, Searching and Matching
 @section Searching for Strings
 @cindex string search
 
@@ -157,7 +157,7 @@ beginning of the match.
 @end deffn
 
 
-@node Regular Expressions
+@node Regular Expressions, Regexp Search, String Search, Searching and Matching
 @section Regular Expressions
 @cindex regular expression
 @cindex regexp
@@ -188,7 +188,7 @@ section.
 @end menu
 
 
-@node Syntax of Regexps
+@node Syntax of Regexps, Regexp Example, Regular Expressions, Regular Expressions
 @subsection Syntax of Regular Expressions
 
   Regular expressions have a syntax in which a few characters are
@@ -610,7 +610,7 @@ whitespace:
 @end defun
 
 
-@node Regexp Example
+@node Regexp Example,  , Syntax of Regexps, Regular Expressions
 @subsection Complex Regexp Example
 
   Here is a complicated regexp, used by SXEmacs to recognize the end of a
@@ -673,7 +673,7 @@ beyond the minimum needed to end a sentence.
 @end table
 
 
-@node Regexp Search
+@node Regexp Search, POSIX Regexps, Regular Expressions, Searching and Matching
 @section Regular Expression Searching
 @cindex regular expression searching
 @cindex regexp searching
@@ -865,7 +865,7 @@ comes back" twice.
 @end defun
 
 
-@node POSIX Regexps
+@node POSIX Regexps, Search and Replace, Regexp Search, Searching and Matching
 @section POSIX Regular Expression Searching
 
   The usual regular expression functions do backtracking when necessary
@@ -985,7 +985,7 @@ A positive number means to include that many lines both before and after.
 @end ignore
 
 
-@node Search and Replace
+@node Search and Replace, Match Data, POSIX Regexps, Searching and Matching
 @section Search and Replace
 @cindex replacement
 
@@ -1080,7 +1080,7 @@ Display some help, then ask again.
 @end table
 
 
-@node Match Data
+@node Match Data, Searching and Case, Search and Replace, Searching and Matching
 @section The Match Data
 @cindex match data
 
@@ -1105,7 +1105,7 @@ match data around it, to prevent it from being overwritten.
 @end menu
 
 
-@node Simple Match Data
+@node Simple Match Data, Replacing Match, Match Data, Match Data
 @subsection Simple Match Data Access
 
   This section explains how to use the match data to find out what was
@@ -1229,7 +1229,7 @@ I read "The cat @point{}in the hat comes back" twice.
 character of the buffer counts as 1.)
 
 
-@node Replacing Match
+@node Replacing Match, Entire Match Data, Simple Match Data, Match Data
 @subsection Replacing the Text That Matched
 
   This function replaces the text matched by the last search with
@@ -1293,7 +1293,7 @@ Subexpressions are those expressions grouped inside @samp{\(@dots{}\)}.
 @end defun
 
 
-@node Entire Match Data
+@node Entire Match Data, Saving Match Data, Replacing Match, Match Data
 @subsection Accessing the Entire Match Data
 
   The functions @code{match-data} and @code{set-match-data} read or
@@ -1360,7 +1360,7 @@ an error; that sets the match data in a meaningless but harmless way.
 @end defun
 
 
-@node Saving Match Data
+@node Saving Match Data,  , Entire Match Data, Match Data
 @subsection Saving and Restoring the Match Data
 
   When you call a function that may do a search, you may need to save
@@ -1429,7 +1429,7 @@ associated with it still exists.
 @end ignore
 
 
-@node Searching and Case
+@node Searching and Case, Standard Regexps, Match Data, Searching and Matching
 @section Searching and Case
 @cindex searching and case
 
@@ -1476,7 +1476,7 @@ same as @code{(default-value 'case-fold-search)}.
 @end defvar
 
 
-@node Standard Regexps
+@node Standard Regexps,  , Searching and Case, Searching and Matching
 @section Standard Regular Expressions Used in Editing
 @cindex regexps used standardly in editing
 @cindex standard regexps used in editing
index b2ec2fe..fce2c96 100644 (file)
@@ -67,7 +67,7 @@ are the numbers 0 and 1.
 @end menu
 
 
-@node Sequence Functions
+@node Sequence Functions, Arrays, Sequences Arrays Vectors, Sequences Arrays Vectors
 @section Sequences
 
   In SXEmacs Lisp, a @dfn{sequence} is either a list, a double-linked
index 44efee7..b18e446 100644 (file)
@@ -6,7 +6,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/specifiers.info
 
-@node Specifiers, Faces and Window-System Objects, Extents, top
+@node Specifiers, Faces and Window-System Objects, Extents, Top
 @chapter Specifiers
 @cindex specifier
 
@@ -49,7 +49,7 @@ This function returns non-@code{nil} if @var{object} is a specifier.
 @end menu
 
 
-@node Introduction to Specifiers
+@node Introduction to Specifiers, Simple Specifier Usage, Specifiers, Specifiers
 @section Introduction to Specifiers
 
 Perhaps the most useful way to explain specifiers is via an analogy.
@@ -1529,7 +1529,7 @@ specifier type @var{type}.
 @end defun
 
 
-@node Other Specification Functions
+@node Other Specification Functions,  , Specifier Validation Functions, Specifiers
 @section Other Functions for Working with Specifications in a Specifier
 
 @defun copy-specifier specifier &optional dest locale tag-set exact-p how-to-add
index c6098fe..b902a40 100644 (file)
@@ -26,7 +26,7 @@ reading) or where to put it (if printing).
 @end menu
 
 
-@node Streams Intro
+@node Streams Intro, Input Streams, Read and Print, Read and Print
 @section Introduction to Reading and Printing
 @cindex Lisp reader
 @cindex printing
index e13f769..d2cf772 100644 (file)
@@ -36,7 +36,7 @@ Lisp programs use strings more often than individual characters.
 @end menu
 
 
-@node String Basics
+@node String Basics, Predicates for Strings, Strings and Characters, Strings and Characters
 @section String and Character Basics
 
   Strings in SXEmacs Lisp are arrays that contain an ordered sequence of
@@ -1141,7 +1141,7 @@ You can load the library @file{iso-syntax} to set up the standard syntax
 table and define a case table for the 8-bit ISO Latin 1 character set.
 
 
-@node Char Tables
+@node Char Tables,  , Case Tables, Strings and Characters
 @section The Char Table
 
 A char table is a table that maps characters (or ranges of characters)
index 9442551..a4927c9 100644 (file)
@@ -34,7 +34,7 @@ otherwise.
 @end menu
 
 
-@node Symbol Components
+@node Symbol Components, Definitions, Symbols, Symbols
 @section Symbol Components
 @cindex symbol components
 
@@ -379,7 +379,7 @@ it returns @code{nil}.
 @end defun
 
 
-@node Symbol Properties
+@node Symbol Properties,  , Creating Symbols, Symbols
 @section Symbol Properties
 @cindex property list, symbol
 @cindex plist, symbol
index 6b62fa1..a513de1 100644 (file)
@@ -31,7 +31,7 @@ functions in this chapter.
 @end menu
 
 
-@node Syntax Basics
+@node Syntax Basics, Syntax Descriptors, Syntax Tables, Syntax Tables
 @section Syntax Table Concepts
 
 @ifinfo
@@ -91,7 +91,7 @@ syntax table, no matter what its contents.
 @end defun
 
 
-@node Syntax Descriptors
+@node Syntax Descriptors, Syntax Table Functions, Syntax Basics, Syntax Tables
 @section Syntax Descriptors
 @cindex syntax classes
 
@@ -132,7 +132,7 @@ comment-starter, second character of a comment-ender).
 @end menu
 
 
-@node Syntax Class Table
+@node Syntax Class Table, Syntax Flags, Syntax Descriptors, Syntax Descriptors
 @subsection Table of Syntax Classes
 
   Here is a table of syntax classes, the characters that stand for them,
@@ -273,7 +273,7 @@ designator for this syntax code is @samp{@@}.
 @end deffn
 
 
-@node Syntax Flags
+@node Syntax Flags,  , Syntax Class Table, Syntax Descriptors
 @subsection Syntax Flags
 @cindex syntax flags
 
@@ -423,7 +423,7 @@ character has the @samp{b} flag.
 @end table
 
 
-@node Syntax Table Functions
+@node Syntax Table Functions, Motion and Syntax, Syntax Descriptors, Syntax Tables
 @section Syntax Table Functions
 
   In this section we describe functions for creating, accessing and
@@ -545,7 +545,7 @@ to the current buffer if omitted.
 @end defun
 
 
-@node Motion and Syntax
+@node Motion and Syntax, Parsing Expressions, Syntax Table Functions, Syntax Tables
 @section Motion and Syntax
 
   This section describes functions for moving across characters in
@@ -586,7 +586,7 @@ omitted.
 @end defun
 
 
-@node Parsing Expressions
+@node Parsing Expressions, Standard Syntax Tables, Motion and Syntax, Syntax Tables
 @section Parsing Balanced Expressions
 
   Here are several functions for parsing and scanning balanced
@@ -744,7 +744,7 @@ argument to use, because the number of comments in the buffer cannot
 exceed that many.
 
 
-@node Standard Syntax Tables
+@node Standard Syntax Tables, Syntax Table Internals, Parsing Expressions, Syntax Tables
 @section Some Standard Syntax Tables
 
   Most of the major modes in SXEmacs have their own syntax tables.  Here
@@ -770,7 +770,7 @@ function.)
 @end defvar
 
 
-@node Syntax Table Internals
+@node Syntax Table Internals,  , Standard Syntax Tables, Syntax Tables
 @section Syntax Table Internals
 @cindex syntax table internals
 
index 1632540..788d979 100644 (file)
@@ -59,7 +59,7 @@ buffer, together with their properties (when relevant).
 @end menu
 
 
-@node Near Point
+@node Near Point, Buffer Contents, Text, Text
 @section Examining Text Near Point
 
   Many functions are provided to look at the characters around point.
@@ -171,7 +171,7 @@ the end of a line.
 @end defun
 
 
-@node Buffer Contents
+@node Buffer Contents, Comparing Text, Near Point, Text
 @section Examining Buffer Contents
 
   This section describes two functions that allow a Lisp program to
@@ -237,7 +237,7 @@ copied from the buffer would make the comparisons fail.
 @end ignore
 
 
-@node Comparing Text
+@node Comparing Text, Insertion, Buffer Contents, Text
 @section Comparing Text
 @cindex comparing buffer text
 
@@ -273,7 +273,7 @@ at the second character.
 @end defun
 
 
-@node Insertion
+@node Insertion, Commands for Insertion, Comparing Text, Text
 @section Inserting Text
 @cindex insertion of text
 @cindex text insertion
@@ -376,7 +376,7 @@ We hold these truth@point{}
 @end defun
 
 
-@node Commands for Insertion
+@node Commands for Insertion, Deletion, Insertion, Text
 @section User-Level Insertion Commands
 
   This section describes higher-level commands for inserting text,
@@ -451,7 +451,7 @@ buffer-local when set in any fashion.
 @end defvar
 
 
-@node Deletion
+@node Deletion, User-Level Deletion, Commands for Insertion, Text
 @section Deleting Text
 
 @cindex deletion vs killing
@@ -538,7 +538,7 @@ The value returned is always @code{nil}.
 @end deffn
 
 
-@node User-Level Deletion
+@node User-Level Deletion, The Kill Ring, Deletion, Text
 @section User-Level Deletion Commands
 
   This section describes higher-level commands for deleting text,
@@ -672,7 +672,7 @@ A blank line is defined as a line containing only tabs and spaces.
 @end deffn
 
 
-@node The Kill Ring
+@node The Kill Ring, Undo, User-Level Deletion, Text
 @section The Kill Ring
 @cindex kill ring
 
@@ -717,7 +717,7 @@ would be difficult to change the terminology now.
 @end menu
 
 
-@node Kill Ring Concepts
+@node Kill Ring Concepts, Kill Functions, The Kill Ring, The Kill Ring
 @subsection Kill Ring Concepts
 
   The kill ring records killed text as strings in a list, most recent
@@ -744,7 +744,7 @@ change the list itself---the most recent entry always comes first in the
 list.
 
 
-@node Kill Functions
+@node Kill Functions, Yank Commands, Kill Ring Concepts, The Kill Ring
 @subsection Functions for Killing
 
   @code{kill-region} is the usual subroutine for killing text.  Any
@@ -786,7 +786,7 @@ support Emacs 18.  For Emacs 19, it is better to use @code{kill-new} or
 @end deffn
 
 
-@node Yank Commands
+@node Yank Commands, Low-Level Kill Ring, Kill Functions, The Kill Ring
 @subsection Functions for Yanking
 
   @dfn{Yanking} means reinserting an entry of previously killed text
@@ -833,7 +833,7 @@ The value is always @code{nil}.
 @end deffn
 
 
-@node Low-Level Kill Ring
+@node Low-Level Kill Ring, Internals of Kill Ring, Yank Commands, The Kill Ring
 @subsection Low-Level Kill Ring
 
   These functions and variables provide access to the kill ring at a lower
@@ -905,7 +905,7 @@ to the newly killed text.
 @end defvar
 
 
-@node Internals of Kill Ring
+@node Internals of Kill Ring,  , Low-Level Kill Ring, The Kill Ring
 @subsection Internals of the Kill Ring
 
   The variable @code{kill-ring} holds the kill ring contents, in the
@@ -976,7 +976,7 @@ value for @code{kill-ring-max} is 30.
 @end defopt
 
 
-@node Undo
+@node Undo, Maintaining Undo, The Kill Ring, Text
 @section Undo
 @cindex redo
 
@@ -1076,7 +1076,7 @@ continuing to undo.
 @end defun
 
 
-@node Maintaining Undo
+@node Maintaining Undo, Filling, Undo, Text
 @section Maintaining Undo Lists
 
   This section describes how to enable and disable undo information for
@@ -1136,7 +1136,7 @@ change group is never discarded no matter how big it is.
 @end defvar
 
 
-@node Filling
+@node Filling, Margins, Maintaining Undo, Text
 @section Filling
 @cindex filling, explicit
 
@@ -1280,7 +1280,7 @@ newlines'' act as paragraph separators.
 @end defvar
 
 
-@node Margins
+@node Margins, Auto Filling, Filling, Text
 @section Margins for Filling
 
 @defopt fill-prefix
@@ -1376,7 +1376,7 @@ becomes buffer-local when set in any fashion.
 @end defvar
 
 
-@node Auto Filling
+@node Auto Filling, Sorting, Margins, Text
 @section Auto Filling
 @cindex filling, automatic
 @cindex Auto Fill mode
@@ -1406,7 +1406,7 @@ was renamed to @code{auto-fill-function} in version 19.
 @end defvar
 
 
-@node Sorting
+@node Sorting, Columns, Auto Filling, Text
 @section Sorting Text
 @cindex sorting text
 
@@ -1635,7 +1635,7 @@ and so cannot work properly on text containing tab characters.  Use
 @end deffn
 
 
-@node Columns
+@node Columns, Indentation, Sorting, Text
 @comment  node-name,  next,  previous,  up
 @section Counting Columns
 @cindex columns
@@ -1707,7 +1707,7 @@ The return value is the column number actually moved to.
 @end defun
 
 
-@node Indentation
+@node Indentation, Case Changes, Columns, Text
 @section Indentation
 @cindex indentation
 
@@ -1726,7 +1726,7 @@ count from zero at the left margin.
 @end menu
 
 
-@node Primitive Indent
+@node Primitive Indent, Mode-Specific Indent, Indentation, Indentation
 @subsection Indentation Primitives
 
   This section describes the primitive functions used to count and
@@ -1761,7 +1761,7 @@ this variable automatically makes it local to the current buffer.
 @end defopt
 
 
-@node Mode-Specific Indent
+@node Mode-Specific Indent, Region Indent, Primitive Indent, Indentation
 @subsection Indentation Controlled by Major Mode
 
   An important function of each major mode is to customize the @key{TAB}
@@ -1820,7 +1820,7 @@ by @code{left-margin}.
 @end deffn
 
 
-@node Region Indent
+@node Region Indent, Relative Indent, Mode-Specific Indent, Indentation
 @subsection Indenting an Entire Region
 
   This section describes commands that indent all the lines in the
@@ -1888,7 +1888,7 @@ the beginning of the line (if @var{nochange-regexp} is non-@code{nil}).
 @end deffn
 
 
-@node Relative Indent
+@node Relative Indent, Indent Tabs, Region Indent, Indentation
 @subsection Indentation Relative to Previous Lines
 
   This section describes two commands that indent the current line
@@ -1966,7 +1966,7 @@ column, this command does nothing.
 @end deffn
 
 
-@node Indent Tabs
+@node Indent Tabs, Motion by Indent, Relative Indent, Indentation
 @subsection Adjustable ``Tab Stops''
 @cindex tabs stops for indentation
 
@@ -1996,7 +1996,7 @@ interactively.
 @end defopt
 
 
-@node Motion by Indent
+@node Motion by Indent,  , Indent Tabs, Indentation
 @subsection Indentation-Based Motion Commands
 
   These commands, primarily for interactive use, act based on the
@@ -2022,7 +2022,7 @@ nonblank character on that line.  It returns @code{nil}.
 @end deffn
 
 
-@node Case Changes
+@node Case Changes, Text Properties, Indentation, Text
 @section Case Changes
 @cindex case changes
 
@@ -2115,7 +2115,7 @@ the numeric prefix argument.
 @end deffn
 
 
-@node Text Properties
+@node Text Properties, Substitution, Case Changes, Text
 @section Text Properties
 @cindex text properties
 @cindex attributes of text
@@ -2162,7 +2162,7 @@ along with the characters; this includes such diverse functions as
 @end menu
 
 
-@node Examining Properties
+@node Examining Properties, Changing Properties, Text Properties, Text Properties
 @subsection Examining Text Properties
 
   The simplest way to examine text properties is to ask for the value of
@@ -2225,7 +2225,7 @@ an example:
 @end defvar
 
 
-@node Changing Properties
+@node Changing Properties, Property Search, Examining Properties, Text Properties
 @subsection Changing Text Properties
 
   The primitives for changing properties apply to a specified range of
@@ -2312,7 +2312,7 @@ See also the function @code{buffer-substring-without-properties}
 but does not copy its properties.
 
 
-@node Property Search
+@node Property Search, Special Properties, Changing Properties, Text Properties
 @subsection Property Search Functions
 
 In typical use of text properties, most of the time several or many
@@ -2419,7 +2419,7 @@ for @var{object} is the current buffer.
 @end defun
 
 
-@node Special Properties
+@node Special Properties, Saving Properties, Property Search, Text Properties
 @subsection Properties with Special Meanings
 
 The predefined properties are the same as those for extents.
@@ -2430,7 +2430,7 @@ The predefined properties are the same as those for extents.
 @end ignore
 
 
-@node Saving Properties
+@node Saving Properties, Fields, Special Properties, Text Properties
 @subsection Saving Text Properties in Files
 @cindex text properties in files
 @cindex saving text properties
@@ -2497,7 +2497,7 @@ types that are reasonably flexible, and not too hard to encode.
 @xref{Format Conversion}, for a related feature.
 
 
-@node Fields
+@node Fields,  , Saving Properties, Text Properties
 @subsection Fields
 @cindex text fields
 @cindex fields
@@ -2621,7 +2621,7 @@ boundaries are ignored and this function always returns @var{new-pos}.
 @end defun
 
 
-@node Substitution
+@node Substitution, Registers, Text Properties, Text
 @section Substituting for a Character Code
 
   The following functions replace characters within a specified region
@@ -2719,7 +2719,7 @@ e in the uffer.
 @end defun
 
 
-@node Registers
+@node Registers, Transposition, Substitution, Text
 @section Registers
 @cindex registers
 
@@ -2840,7 +2840,7 @@ This function stores the current frame configuration in register
 @end ignore
 
 
-@node Transposition
+@node Transposition, Change Hooks, Registers, Text
 @section Transposition of Text
 
   This subroutine is used by the transposition commands.
@@ -2860,7 +2860,7 @@ all markers unrelocated.
 @end defun
 
 
-@node Change Hooks
+@node Change Hooks, Transformations, Transposition, Text
 @section Change Hooks
 @cindex change hooks
 @cindex hooks for text changes
@@ -2914,7 +2914,7 @@ that was previously in the unmodified state.
 @end defvar
 
 
-@node Transformations
+@node Transformations,  , Change Hooks, Text
 @section Textual transformations---MD5 and base64 support
 @cindex MD5 digests
 @cindex base64
index b5a222c..064396c 100644 (file)
@@ -25,7 +25,7 @@ in the previous chapters.
 @end menu
 
 
-@node Style Tips
+@node Style Tips, Performance Tips, Tips, Tips
 @section Writing Clean Lisp Programs
 
   Here are some tips for avoiding common errors in writing Lisp code
@@ -992,7 +992,7 @@ depending on the number of semicolons.  @xref{Comments,,
 Manipulating Comments, sxemacs, The SXEmacs User's Manual}.
 
 
-@node Library Headers
+@node Library Headers,  , Comment Tips, Tips
 @section Conventional Headers for XEmacs Libraries
 @cindex header comments
 @cindex library header comments
index 1df5251..b4fb05c 100644 (file)
@@ -5,7 +5,7 @@
 @c See the file lispref.texi for copying conditions.
 @setfilename ../../info/toolbar.info
 
-@node Toolbar, Gutter, Dialog Boxes, top
+@node Toolbar, Gutter, Dialog Boxes, Top
 @chapter Toolbar
 @cindex toolbar
 
@@ -19,7 +19,7 @@
 @end menu
 
 
-@node Toolbar Intro
+@node Toolbar Intro, Creating Toolbar, Toolbar, Toolbar
 @section Toolbar Intro
 
 A @dfn{toolbar} is a bar of icons displayed along one edge of a frame.
@@ -283,7 +283,7 @@ toolbar descriptors (@pxref{Toolbar Descriptor Format}).
 @end defun
 
 
-@node Other Toolbar Variables
+@node Other Toolbar Variables,  , Specifying the Toolbar, Toolbar
 @section Other Toolbar Variables
 
 The variables to control the toolbar thickness, visibility status, and
index 372d59a..5f937ba 100644 (file)
@@ -42,7 +42,7 @@ variable.
 @end menu
 
 
-@node Global Variables
+@node Global Variables, Constant Variables, Variables, Variables
 @section Global Variables
 @cindex global variable
 
@@ -93,7 +93,7 @@ x
 @end example
 
 
-@node Constant Variables
+@node Constant Variables, Local Variables, Global Variables, Variables
 @section Variables That Never Change
 @vindex nil
 @vindex t
@@ -118,7 +118,7 @@ nil @equiv{} 'nil
 @end example
 
 
-@node Local Variables
+@node Local Variables, Void Variables, Constant Variables, Variables
 @section Local Variables
 @cindex binding local variables
 @cindex local variables
@@ -263,7 +263,7 @@ that Lisp avoids infinite recursion on an ill-defined function.
 @end defvar
 
 
-@node Void Variables
+@node Void Variables, Defining Variables, Local Variables, Variables
 @section When a Variable is ``Void''
 @kindex void-variable
 @cindex void variable
@@ -378,7 +378,7 @@ more precisely, if its current binding is not void.  It returns
 @end defun
 
 
-@node Defining Variables
+@node Defining Variables, Accessing Variables, Void Variables, Variables
 @section Defining Global Variables
 @cindex variable definition
 
@@ -565,7 +565,7 @@ level in a file, where normally no local binding is in effect, and make
 sure to load the file before making a local binding for the variable.
 
 
-@node Accessing Variables
+@node Accessing Variables, Setting Variables, Defining Variables, Variables
 @section Accessing Variable Values
 
   The usual way to reference a variable is to write the symbol which
@@ -617,7 +617,7 @@ local binding nor a global value.
 @end defun
 
 
-@node Setting Variables
+@node Setting Variables, Variable Scoping, Accessing Variables, Variables
 @section How to Alter a Variable Value
 
   The usual way to change the value of a variable is with the special
@@ -770,7 +770,7 @@ foo                       ;; @r{@code{foo} was changed.}
 @end example
 
 
-@node Variable Scoping
+@node Variable Scoping, Buffer-Local Variables, Setting Variables, Variables
 @section Scoping Rules for Variable Bindings
 
   A given symbol @code{foo} may have several local variable bindings,
@@ -809,7 +809,7 @@ are dynamically scoped, like variables in SXEmacs Lisp.
 @end menu
 
 
-@node Scope
+@node Scope, Extent, Variable Scoping, Variable Scoping
 @subsection Scope
 
   SXEmacs Lisp uses @dfn{indefinite scope} for local variable bindings.
@@ -870,7 +870,7 @@ by @code{foo} instead of the one bound by @code{binder}.
 @end itemize
 
 
-@node Extent
+@node Extent, Impl of Scope, Scope, Variable Scoping
 @subsection Extent
 
   @dfn{Extent} refers to the time during program execution that a
@@ -907,7 +907,7 @@ but record additional variable bindings.  SXEmacs Lisp does not have
 closures.
 
 
-@node Impl of Scope
+@node Impl of Scope, Using Scoping, Extent, Variable Scoping
 @subsection Implementation of Dynamic Scoping
 @cindex deep binding
 
@@ -948,7 +948,7 @@ binding, but runs faster, since there is never a need to search for a
 binding.
 
 
-@node Using Scoping
+@node Using Scoping,  , Impl of Scope, Variable Scoping
 @subsection Proper Use of Dynamic Scoping
 
   Binding a variable in one function and using it in another is a
@@ -984,7 +984,7 @@ compiler.  Choose the variable's name to avoid name conflicts---don't
 use short names like @code{x}.
 
 
-@node Buffer-Local Variables
+@node Buffer-Local Variables, Variable Aliases, Variable Scoping, Variables
 @section Buffer-Local Variables
 @cindex variables, buffer-local
 @cindex buffer-local variables
@@ -1004,7 +1004,7 @@ important customization method.
 @end menu
 
 
-@node Intro to Buffer-Local
+@node Intro to Buffer-Local, Creating Buffer-Local, Buffer-Local Variables, Buffer-Local Variables
 @subsection Introduction to Buffer-Local Variables
 
   A buffer-local variable has a buffer-local binding associated with a
@@ -1056,7 +1056,7 @@ buffer-local bindings for the buffer that holds the file within SXEmacs.
 @xref{Auto Major Mode}.
 
 
-@node Creating Buffer-Local
+@node Creating Buffer-Local, Default Value, Intro to Buffer-Local, Buffer-Local Variables
 @subsection Creating and Deleting Buffer-Local Bindings
 
 @deffn Command make-local-variable variable
@@ -1220,7 +1220,7 @@ locals are appropriate for data pertaining to where the file came from
 or how to save it, rather than with how to edit the contents.
 
 
-@node Default Value
+@node Default Value,  , Creating Buffer-Local, Buffer-Local Variables
 @subsection The Default Value of a Buffer-Local Variable
 @cindex default value
 
@@ -1338,7 +1338,7 @@ evaluated.
 @end defun
 
 
-@node Variable Aliases
+@node Variable Aliases,  , Buffer-Local Variables, Variables
 @section Variable Aliases
 @cindex variables, indirect
 @cindex indirect variables
index 5b27fea..b8e9cfd 100644 (file)
@@ -38,7 +38,7 @@ displayed in windows.
 @end menu
 
 
-@node Basic Windows
+@node Basic Windows, Splitting Windows, Windows, Windows
 @section Basic Concepts of Emacs Windows
 @cindex window
 @cindex selected window
index 06d3690..962264d 100644 (file)
@@ -27,7 +27,7 @@ generalize well, and they are covered specially here.
 @end menu
 
 
-@node X Selections
+@node X Selections, X Server, X-Windows, X-Windows
 @section X Selections
 @cindex selection (for X windows)
 
@@ -95,7 +95,7 @@ This function is called @code{x-set-cut-buffer} in FSF Emacs.
 @end defun
 
 
-@node X Server
+@node X Server, X Miscellaneous, X Selections, X-Windows
 @section X Server
 
 This section describes how to access and change the overall status of
@@ -108,7 +108,7 @@ the X server SXEmacs is using.
 @end menu
 
 
-@node Resources
+@node Resources, Server Data, X Server, X Server
 @subsection Resources
 
 @defun default-x-device
@@ -262,7 +262,7 @@ resources are found for the application class ``SXEmacs''.
 @end defvar
 
 
-@node Server Data
+@node Server Data, Grabs, Resources, X Server
 @subsection Data about the X Server
 
   This section describes functions and a variable that you can use to
@@ -292,7 +292,7 @@ from previous versions of SXEmacs, which returned @code{StaticGray},
 @end defun
 
 
-@node Grabs
+@node Grabs,  , Server Data, X Server
 @subsection Restricting Access to the Server by Other Apps
 
 @defun x-grab-keyboard &optional device
@@ -326,7 +326,7 @@ used.  If it is @code{t} the pointer will be released on all X devices.
 @end defun
 
 
-@node X Miscellaneous
+@node X Miscellaneous,  , X Server, X-Windows
 @section Miscellaneous X Functions and Variables
 
 @defvar x-bitmap-file-path
index a5af92f..9d2f81c 100644 (file)
@@ -16,7 +16,7 @@ Steve
 @end macro
 
 @macro syc
-Copyright @copyright{} 2004 - 2012 @sy{}
+Copyright @copyright{} 2004 - 2016 @sy{}
 @end macro
 
 @macro sye
@@ -24,16 +24,16 @@ Copyright @copyright{} 2004 - 2012 @sy{}
 @end macro
 
 @macro cver
-22.1.15
+22.1.16
 @end macro
 
 @macro nver
-22.1.16
+22.1.17
 @end macro
 
 
 @set EDITION First
-@set UPDATED March 14, 2011
+@set UPDATED June 13, 2015
 
 @c Things would be a lot easier if everything supported the `@copying'
 @c command, I wouldn't have to put in these conditionals.  --SY.
@@ -296,7 +296,7 @@ side.  It is merely up to the project lead who has control over it.
 @item
 Host cloaks
 
-The only way to get one is to ask the project lead (JackaLX).
+The only way to get one is to ask the project lead (SteveYoungs).
 @item
 No IRC client
 
@@ -368,6 +368,9 @@ postponement.  The idea here is to give everyone a chance to cool down
 so that reasonable discussion can continue.
 @end itemize
 
+To date, we've not ever had to resort to these.  We tend to sort
+things out pretty quickly and amicably most of the time.
+
 @menu
 * Voting::                      Deciding things via ballot
 @end menu
@@ -425,25 +428,9 @@ the results to the SXEmacs Developers' mailing list,
 @email{sxemacs-devel@@sxemacs.org}.  This post will have the email
 subject @dfn{[Vote Results] Subject of vote}.
 
-For an issue to be decided via vote it must receive the majority of the
-total number of votes with a minimum of four votes.
-
-@smallexample
-Issue decided:
-
-  A - 5 votes
-  B - 2 votes
-
-A - wins
-@end smallexample
-
-@smallexample
-Issue undecided:
-
-  A - 3 votes
-  B - 2 votes
-@end smallexample
-
+The issue will be decided by simple majority.  For a hung vote (no
+side has a majority) the Project Lead will either decide the outcome,
+call a postponement, or even call another vote.
 
 @node Coding Style, Patches, Dispute Resolution, Top
 @comment  node-name,  next,  previous,  up
@@ -597,7 +584,7 @@ opening brace at the beginning of the next line, thus:
 @end smallexample
 
 Heretic people all over the world have claimed that this inconsistency
-is ...  well ...  inconsistent, but all right-thinking people know that
+is@dots{}  well@dots{}  inconsistent, but all right-thinking people know that
 (a) K&R are @emph{right} and (b) K&R are right.  Besides, functions are
 special anyway (you can't nest them in C).
 
@@ -947,6 +934,10 @@ accessible repo}.  It will make things so much easier for everyone.
 We do understand that there may be some valid reasons why you can't,
 and that is okay, this section still provides a valid workflow.
 
+Before you do anything, we recommend that you run the
+@code{git-for-steve.sh} script which you'll find in the @code{contrib}
+directory.  It will ensure that some basic git config settings are
+correct, and set up your ``for-steve'' tracking branch.
 
 @subheading Preparing a patch from a git repo
 
@@ -959,7 +950,7 @@ Your workflow should run something along these lines@dots{}
 
 @enumerate
 @item
-@code{git pull} from your master branch to sync up with the main
+@code{git pull} from your ``for-steve'' branch to sync up with the main
 SXEmacs repo.
 @item
 @code{git checkout -b mybugfix} to create and checkout a new branch.
@@ -971,6 +962,13 @@ hack hack edit edit fix fix hack
 @item
 Test!  If all is good, proceed.  If not, return to the previous step.
 @item
+The next step is to commit your changes, and at this point I'd like to
+note that, although not mandatory, we encourage and prefer it if
+you sign all of your commits with GnuPG.  This can be easily set up
+via @code{git config commit.gpgSign true}@footnote{Already done for
+you if you ran the @code{git-for-steve.sh} script and it found your
+key}. 
+
 Depending on how you like to deal with change logs, and if the changes
 were small and trivial or detailed and large:
 
@@ -1004,20 +1002,18 @@ sub-developers working for you), the @dfn{Signed-off-by} entry also
 indicates that you have reviewed, tested, and approved the patch.  And
 also, the original author has permission to submit it.
 @item
-@code{git checkout master}  To flip back to your master branch.
+@code{git checkout for-steve}  To flip back to your for-steve branch.
 @item
-@code{git merge --no-ff mybugfix}  To merge the changes from the
-@dfn{mybugfix} branch into master.  The @code{--no-ff} forces git to
-create a new commit object even if a fast-forward could have been used
-to carry out the merge.
+@code{git merge mybugfix}  To merge the changes from the
+@dfn{mybugfix} branch into your for-steve branch.
 
 At this point everything that was in the @dfn{mybugfix} branch is now
-in your master branch, so you no longer need it. You can safely delete
+in your for-steve branch, so you no longer need it. You can safely delete
 it with @code{git branch -d mybugfix}.
 
 Now if you have a publicly accessible repo, you should do:
 @item
-@code{git push myremote master}  To push the changes to your publicly
+@code{git push myremote for-steve}  To push the changes to your publicly
 accessible repo, @dfn{myremote}.
 @end enumerate
 
@@ -1027,15 +1023,18 @@ to the next step.
 @subheading Patch Submission
 
 @anchor{Patch Submission}
-At this point, your changes are ready for @s{} to be incorporated into
+At this point, your changes are ready for @s{} to incorporate into
 the main SXEmacs code base.  All you need to do is let him know, and
-you can easily do that with the following 2 git commands:
+you can easily do that with the following 2 git commands@footnote{The
+@code{git-for-steve.sh} contrib script will set a lot of these for you.}:
 
 @enumerate
 @item
 @code{git format-patch --add-header="X-Git-Repo: REPO-URL" \@*
 @indent
---subject-prefix="P-Req" --numbered -o DIR origin}
+--add-header="X-Git-Branch: for-steve" \@*
+@indent
+--subject-prefix="P-Req" --minimal --numbered -o DIR origin/master}
 @item
 @code{git send-email \@*
 @indent
@@ -1046,8 +1045,8 @@ you can easily do that with the following 2 git commands:
 
 If you not have have a publicly accessible repository, the SXEmacs
 developers can't pull in your changesets directly from you.  Instead,
-once your patch hits the mailing list and is approved, it will be
-applied manually to the SXEmacs code base.
+once your patch hits the mailing list and is approved, it will have to
+be applied manually to the SXEmacs code base.
 
 You could, in theory, use a post-commit hook, but I'd not recommend
 it.  Think about the situation where you are working on something
@@ -1232,7 +1231,7 @@ Update @file{etc/NEWS}
 To get the numbers for the "Developer Stats" section, first get a list
 of unique committers for this release with@dots{}
 
-@code{git log --format=full v@cver{}..|grep Author|sort|uniq}
+@code{git log --format=full v@cver{}..|grep Author|sort -u}
 
 And then for the number of actual commits for each developer do@dots{}
 
@@ -1301,37 +1300,47 @@ git log --stat v@cver{}..v@nver{} > ~/upload/sxemacs-@nver{}/ChangeLog
 Create a diff against the previous version.
 
 @smallexample
-git diff v@cver{}..v@nver{} | \
-    gzip > ~/upload/sxemacs-@cver{}-@nver{}.diff.gz
+    git diff v@cver{}..v@nver{} > ~/upload/sxemacs-@cver{}-@nver{}.diff
 @end smallexample
 
 @item
-Create the tarball:
+Create the tarballs, md5sums, and sigs:
 
 @smallexample
 cd ~/upload
+for compressor in bzip2 gzip lzma xz; do
+    $@{compressor@} --keep sxemacs-@cver{}-@nver{}.diff
+done &&
 for type in bz2 gz lzma xz; do
     tar --create --owner=0 --group=0 --auto-compress --file \
-        sxemacs-@nver{}.tar.$@{type@} sxemacs-@nver{}
-    md5sum sxemacs-@nver{}.tar.$@{type@} > sxemacs-@nver{}.tar.$@{type@}.md5
-    gpg --detach-sign --armor \
-      --output sxemacs-@nver{}.tar.$@{type@}.asc sxemacs-@nver{}.tar.$@{type@}
+      sxemacs-@nver{}.tar.$@{type@} sxemacs-@nver{}
+    md5sum sxemacs-@nver{}.tar.$@{type@} > \
+      sxemacs-@nver{}.tar.$@{type@}.md5
+    md5sum sxemacs-@cver{}-@nver{}.diff.$@{type@} > \
+      sxemacs-@cver{}-@nver{}.diff.$@{type@}.md5
+    gpg --detach-sign --armor --output \
+      sxemacs-@nver{}.tar.$@{type@}.asc sxemacs-@nver{}.tar.$@{type@}
+    gpg --detach-sign --armor --output \
+      sxemacs-@cver{}-@nver{}.diff.$@{type@}.asc \
+      sxemacs-@cver{}-@nver{}.diff.$@{type@}
 done
 @end smallexample
 @item
-Create md5 and gpg sig for diff file.
-
-See items describing this for the release tarball.
-
-@item
-Move the tarball, diff, GnuPG sigs, and md5sums to
+Move the tarballs, diffs, GnuPG sigs, and md5sums to
 @uref{http://downloads.sxemacs.org/releases/, SXEmacs Download Site}.
 
+@smallexample
+for file in *.@{bz2,gz,lzma,xz,md5,asc@}; do
+    scp $@{file@} downloads.sxemacs.org:downloads.sxemacs.org/releases
+done
+@end smallexample
+
 @item
 Rename the @file{LATEST-IS-VER} file.
-@example
-mv LATEST-IS-@cver{} LATEST-IS-@nver{}
-@end example
+@smallexample
+ssh downloads.sxemacs.org \
+  mv downloads.sxemacs.org/releases/LATEST-IS-@{@cver{},@nver{}@}
+@end smallexample
 
 @item
 Update www.sxemacs.org:
@@ -1349,9 +1358,6 @@ Update @file{index.html}
 Send a release announcement to @email{sxemacs-devel@@sxemacs.org,
 SXEmacs Devel} and comp.emacs.xemacs.
 
-@item
-Make a new release and  announcement on Freshmeat (our FM id: 52281)
-
 @item
 Commit the first patch to the next version, which would be adding a
 @file{ChangeLog.d/ChangeLog-@nver}
@@ -1380,7 +1386,7 @@ code.
 @item
 An idea with a willingness to help test any code resulting from it.
 @item
-@dfn{Hey, wouldn't it be cool if...}
+``Hey, wouldn't it be cool if...''
 @end enumerate
 
 Don't be disheartened if you aren't a master programmer, quite often
@@ -1408,7 +1414,9 @@ If you find a place where this isn't true, you should report it as a
 bug, @xref{Bug Reports}.
 
 If you find areas where SXEmacs is incompatible with GNU/Emacs at the
-emacs lisp level, that is an issue between GNU/Emacs and XEmacs.
+emacs lisp level, that is an issue between GNU/Emacs and XEmacs.  That
+doesn't mean that we won't ever port GNU/Emacs things to SXEmacs,
+we'll just do it in a way that doesn't break compatibility with XEmacs.
 
 @node Copyright and Licencing, Developer Recruitment, Compatibility, Top
 @comment  node-name,  next,  previous,  up
@@ -1515,7 +1523,8 @@ Checking out a copy of SXEmacs is as easy as:
   git clone http://git.sxemacs.org/sxemacs
 @end smallexample
 
-See how to patches in chapter @xref{Patches}.
+The chapter on patches @pxref{Patches} will show you how to prepare
+and send in your contributions. 
 
 @menu
 * Setting up a publicly accessible repo::
@@ -1552,15 +1561,14 @@ user@@host ~/sxemacs $ echo @dfn{Your Name's SXEmacs Repo} > description
 user@@host ~/sxemacs $ exit
 user@@localhost ~ $ git clone http://git.sxemacs.org/sxemacs
 user@@localhost ~ $ cd sxemacs
-user@@localhost ~/sxemacs $ git remote add myremote \
-    ssh://user@@your.host/~/sxemacs
+user@@localhost ~/sxemacs $ contrib/git-for-steve.sh
 @end smallexample
 
 And that's it!  Told you it was easy, didn't I?  All you have to do
 now is push your local copy to your remote@dots{}
 
 @smallexample
-git push myremote master
+git push @var{myremote} master
 @end smallexample
 
 
@@ -1622,7 +1630,8 @@ Also be aware that using this @dfn{post-receive} hook will mean that
 every time you push to your publicly accessible repo, a message will be
 sent to sxemacs-patches; this includes instances where you merely
 are pulling the latest from mainline and mirroring. Hence, the use of
-aliases as discussed below may be preferable.
+aliases as discussed below may be preferable.  We are looking into
+ways of avoiding this sort of annoyance.
 
 @subsection Automating with Aliases
 
@@ -1669,6 +1678,10 @@ Be careful when setting up aliases and config settings that you only
 make them global if you absolutely have to.  All the ones I've shown
 here have been repo-specific.
 
+The @file{git-for-steve.sh} script in our @file{contrib} directory is
+an easy (and recommended) way to set up your git repo.  It'll make
+sure that you have everything set up correctly and in an optimal way.
+
 @node  Setting up a private repos, Other Developers' Repositories, Setting up a publicly accessible repo, Version Control
 @comment  node-name,  next,  previous,  up
 @chapter Setting up a private repos
@@ -1677,16 +1690,15 @@ here have been repo-specific.
 @cindex git
 @cindex contributions
 
-Git makes it as easy to create a private repos as getting a checkout
-of the source code. In fact, all you need to do is to actually
-checkout and you have a repos:
+Git makes it as easy to create a private repo as getting a checkout
+of the source code. In fact, that is all you have to do.
 
 @smallexample
   git clone http://git.sxemacs.org/sxemacs
 @end smallexample
 
 You may want to follow some of the steps in @xref{Automating with
-Aliases}, to easy your life when sending patches if you plan to
+Aliases}, to ease your life when sending patches if you plan to
 contribute frequently from this repo. Please note that in this case
 you should not reference any REPO-URL.
 
@@ -1715,41 +1727,23 @@ accessible 24/7.
 Nelson
 @item
 http://git.nelsonferreira.com/sxemacs
+Horst
+@item
+http://midcom.steveyoungs.com/oss-vc/sxemacs.git
+lg
+@item
+git://github.com/zevlg/SXEmacs.git
+Rudi
+@item
+git://github.com/rudimeier/sxemacs.git
+Aidan
+@item
+http://bitbucket.org/kehoea/sxemacs/
 Sebastian
 @item
 git://github.com/hroptatyr/sxemacs.git
 @end itemize
 
-And that is it for now.  We've only just moved to git and the
-main SXEmacs developers haven't set up their repos.
-
-@c @itemize @bullet
-@c Sebastian
-@c @item
-@c http://www.math.tu-berlin.de/~freundt/archives/sxemacs/
-@c Evgeny
-@c @item
-@c http://arch.xwem.org/2006/
-@c Norbert
-@c @item
-@c http://arafel.viteno.net:33080/arch/sxemacs/
-@c Martin K@"uhl
-@c @item
-@c http://www.informatik.uni-bremen.de/~mkhl/sxemacs-mirror/
-@c Alexey Mikhailov (karma)
-@c @item
-@c http://karma.ezunix.org/arch/2005/
-@c Hynek
-@c @item
-@c http://hynek.in-berlin.de/archive/
-@c Horst Burkhardt (PeanutHorst)
-@c @item
-@c http://midcom.steveyoungs.com/oss-vc/sxemacs/
-@c Nick Granado
-@c @item
-@c http://www.heatxsink.com/2005/
-@c @end itemize
-
 And of course the main repo (Steve's) is at:
 
 http://git.sxemacs.org/sxemacs
index ffd872f..8f016c4 100644 (file)
@@ -492,7 +492,7 @@ Getting Started:
 
 @unnumberedsec 1.0: Introduction
 
-@node Q1.0.1
+@node Q1.0.1, Q1.0.2, Introduction, Introduction
 @unnumberedsec Q1.0.1: What is SXEmacs?
 
 SXEmacs is a powerful, highly customisable open source text editor and
@@ -506,14 +506,14 @@ SXEmacs is a recent fork of the popular XEmacs and runs on nearly all
 versions of Unix in existence.
 
 
-@node Q1.0.2
+@node Q1.0.2, Q1.0.3, Q1.0.1, Introduction
 @unnumberedsec Q1.0.2: What is the current version of SXEmacs?
 
 SXEmacs 22.1.15 is the latest released version.
 The current development line will become 22.1.16.
 
 
-@node Q1.0.3
+@node Q1.0.3, Q1.0.4, Q1.0.2, Introduction
 @unnumberedsec Q1.0.3: Where can I find it?
 
 The canonical source can be found on the web at:
@@ -530,7 +530,7 @@ available.  These can be found at:
 @end example
 
 
-@node Q1.0.4
+@node Q1.0.4, Q1.0.5, Q1.0.3, Introduction
 @unnumberedsec Q1.0.4: Why another version of Emacs?
 
 First of all, the situation got a little complicated.  With SXEmacs
@@ -670,7 +670,7 @@ network server stream.
 
 
 
-@node Q1.0.5
+@node Q1.0.5, Q1.0.6, Q1.0.4, Introduction
 @unnumberedsec Q1.0.5: Why haven't XEmacs/SXEmacs and GNU Emacs Merged?
 
 There are currently irreconcilable differences in the views about
@@ -679,7 +679,7 @@ and the SXEmacs/XEmacs development team which provide little hope for a
 merge to take place in the short-term future.
 
 
-@node Q1.0.6
+@node Q1.0.6, Q1.0.7, Q1.0.5, Introduction
 @unnumberedsec Q1.0.6: Where can I get help?
 
 Probably the easiest way, if everything is installed, is to use Info, by
@@ -701,7 +701,7 @@ there is a mailing at @email{sxemacs-devel@@sxemacs.org} for general
 and developing issues.
 
 
-@node Q1.0.7
+@node Q1.0.7, Q1.0.8, Q1.0.6, Introduction
 @unnumberedsec Q1.0.7: Where are the mailing lists archived?
 
 The archives can be found at
@@ -711,32 +711,32 @@ Subscription can be done via
 @uref{http://www.sxemacs.org/mailman/listinfo}
 
 
-@node Q1.0.8
+@node Q1.0.8, Q1.0.9, Q1.0.7, Introduction
 @unnumberedsec Q1.0.8: How do you pronounce SXEmacs?
 
 The most common pronounciation is @samp{sexy macs}.
 
 
-@node Q1.0.9
+@node Q1.0.9, Q1.0.10, Q1.0.8, Introduction
 @unnumberedsec Q1.0.9: What does SXEmacs look like?
 
 Look at the screenshot section at @uref{http://www.sxemacs.org}.
 
 
-@node Q1.0.10
+@node Q1.0.10, Q1.0.11, Q1.0.9, Introduction
 @unnumberedsec Q1.0.10: Is there a port of SXEmacs to Microsoft ('95 or NT)?
 
 Of course not!  The SXEmacs developers have so much fun stripping all of
 the erroneous code and workaround-hacks related to Microsoft Windows.
 
 
-@node Q1.0.11
+@node Q1.0.11, Q1.0.12, Q1.0.10, Introduction
 @unnumberedsec Q1.0.11: Is there a port of SXEmacs to the Macintosh?
 
 Good question. Is there?
 
 
-@node Q1.0.12
+@node Q1.0.12, Q1.0.13, Q1.0.11, Introduction
 @unnumberedsec Q1.0.12: Is there a port of SXEmacs to NextStep?
 
 @c Carl Edman, apparently no longer at @email{cedman@@princeton.edu}, did
@@ -746,7 +746,7 @@ Good question. Is there?
 A what?
 
 
-@node Q1.0.13
+@node Q1.0.13, Q1.0.14, Q1.0.12, Introduction
 @unnumberedsec Q1.0.13: Is there a port of SXEmacs to OS/2?
 
 @c No, but Alexander Nikolaev <avn_1251@@mail.ru> is working on it.
@@ -755,7 +755,7 @@ Aaaaargh. You could have also asked: Is there a port of SXEmacs to my
 hamster.
 
 
-@node Q1.0.14
+@node Q1.0.14, Q1.1.1, Q1.0.13, Introduction
 @unnumberedsec Q1.0.14: Where can I obtain a printed copy of the SXEmacs User's Manual?
 
 Pre-printed manuals are not available.  If you are familiar with
@@ -766,7 +766,7 @@ SXEmacs web site at @uref{http://www.sxemacs.org}.
 @c are they?
 @c HTML are, but they may be a little out of date. --SY
 
-@node Q1.1.1
+@node Q1.1.1, Q1.1.2, Q1.0.14, Introduction
 @unnumberedsec 1.1: Policies
 @unnumberedsec Q1.1.1: What is the FAQ editorial policy?
 
@@ -786,7 +786,7 @@ Questions and answers included into the FAQ will be edited for
 spelling and grammar and will be attributed.
 
 
-@node Q1.1.2
+@node Q1.1.2, Q1.1.3, Q1.1.1, Introduction
 @unnumberedsec Q1.1.2: How do I become a beta tester?
 
 We have no formal way.  Also there are no presumptions.  Just
@@ -797,7 +797,7 @@ Be prepared to get your hands dirty, as beta testers are expected to
 identify problems as best they can.
 
 
-@node Q1.1.3
+@node Q1.1.3, Q1.2.1, Q1.1.2, Introduction
 @unnumberedsec Q1.1.3: How do I contribute to SXEmacs itself?
 
 Quoting a famous developer:
@@ -806,7 +806,7 @@ I know the answer exactly.
 Gotta run.
 
 
-@node Q1.2.1
+@node Q1.2.1, Q1.2.2, Q1.1.3, Introduction
 @unnumberedsec 1.2: Credits
 @unnumberedsec Q1.2.1: Who wrote SXEmacs?
 
@@ -875,7 +875,7 @@ menu.
 @c @samp{About XEmacs} option in the Help menu.
 
 
-@node Q1.2.2
+@node Q1.2.2, Q1.2.3, Q1.2.1, Introduction
 @unnumberedsec Q1.2.2: Who contributed to this version of the FAQ?
 
 The following people contributed valuable suggestions to building this
@@ -893,7 +893,7 @@ version of the FAQ (listed in alphabetical order):
 @end itemize
 
 
-@node Q1.2.3
+@node Q1.2.3, Q1.3.1, Q1.2.2, Introduction
 @unnumberedsec Q1.2.3: Who contributed to the FAQ in the past?
 
 This is only a partial list, as many names were lost in a hard disk
@@ -940,7 +940,7 @@ crash some time ago.
 @end itemize
 
 
-@node Q1.3.1
+@node Q1.3.1, Q1.3.2, Q1.2.3, Introduction
 @unnumberedsec 1.3: Internationalisation
 @unnumberedsec Q1.3.1: What is the status of internationalisation support aka MULE (including Asian language support?
 
@@ -950,7 +950,7 @@ Unix and Linux systems.  Binaries compiled without MULE support run
 faster than MULE capable SXEmacsen.
 
 
-@node Q1.3.2
+@node Q1.3.2, Q1.3.3, Q1.3.1, Introduction
 @unnumberedsec Q1.3.2: How can I help with internationalisation?
 
 If you would like to help, you can use the usual ways to get into
@@ -968,7 +968,7 @@ does support multilingual menus, but we have few current translations.
 @xref{Q1.1.2}.
 
 
-@node Q1.3.3
+@node Q1.3.3, Q1.3.4, Q1.3.2, Introduction
 @unnumberedsec Q1.3.3: How do I type non-ASCII characters?
 
 See question 3.5.7 (@pxref{Q3.5.7}) in part 3 of this FAQ for some
@@ -979,7 +979,7 @@ MULE has more general capabilities.  @xref{Q1.3.5}.
 
 @xref{Q3.2.7}, which covers display of non-ASCII characters.
 
-@node Q1.3.4
+@node Q1.3.4, Q1.3.5, Q1.3.3, Introduction
 @unnumberedsec Q1.3.4: Can SXEmacs messages come out in a different language?
 
 The message-catalog support was written but is badly bit-rotted.
@@ -999,7 +999,7 @@ The name of the resource is derived from the non-localised entry by
 removing punctuation and capitalizing as above.
 
 
-@node Q1.3.5
+@node Q1.3.5, Q1.3.6, Q1.3.4, Introduction
 @unnumberedsec Q1.3.5: Please explain the various input methods in MULE/SXEmacs
 
 Mule supports a wide variety of input methods.  There are three basic
@@ -1091,7 +1091,7 @@ boiled-egg-like utilities.
 Much of this information was provided by @email{morioka@@jaist.ac.jp,
 MORIOKA Tomohiko}.
 
-@node Q1.3.6
+@node Q1.3.6, Q1.3.7, Q1.3.5, Introduction
 @unnumberedsec Q1.3.6: How do I portably code for MULE/SXEmacs?
 
 MULE has evolved rapidly over the last few years, and the original third
@@ -1157,7 +1157,7 @@ Following is a sample to distinguish mule variants:
 @end quotation
 
 
-@node Q1.3.7
+@node Q1.3.7, Q1.3.8, Q1.3.6, Introduction
 @unnumberedsec Q1.3.7: How about Cyrillic Modes?
 
 @email{ilya@@math.ohio-state.edu, Ilya Zakharevich} writes:
@@ -1196,7 +1196,7 @@ SXEmacs) is @uref{http://www.ibiblio.org/sergei/Software/Software.html}
 @end quotation
 
 
-@node Q1.3.8
+@node Q1.3.8, Q1.3.9, Q1.3.7, Introduction
 @unnumberedsec Q1.3.8: Does SXEmacs support Unicode?
 
 Partially, as an external encoding for files, processes, and terminals.
@@ -1223,7 +1223,7 @@ Mule-UCS also supports 16-bit forms of Unicode (UTF-16).  It does not
 support 31-bit forms of Unicode (UTF-32 or UCS-4).
 
 
-@node Q1.3.9
+@node Q1.3.9, Q1.4.1, Q1.3.8, Introduction
 @unnumberedsec Q1.3.9: How does SXEmacs display Unicode?
 
 Mule doesn't have a Unicode charset internally, so there's nothing to
@@ -1247,7 +1247,7 @@ Real Unicode support will be introduced in SXEmacs 22.2.
 @c will it?
 
 
-@node Q1.4.1
+@node Q1.4.1, Q1.4.2, Q1.3.9, Introduction
 @unnumberedsec 1.4: Getting Started, Backing up & Recovery
 @unnumberedsec Q1.4.1: What is an @file{init.el} or @file{.emacs} and is there a sample one?
 
@@ -1269,7 +1269,7 @@ submenu in the @samp{Help} menu.  To determine the location of the
 @key{RET}}.
 
 
-@node Q1.4.2
+@node Q1.4.2, Q1.4.3, Q1.4.1, Introduction
 @unnumberedsec Q1.4.2: Can I use the same @file{init.el}/@file{.emacs} with XEmacs or GNU Emacs?
 
 Yes.  The sample @file{init.el} included in the SXEmacs
@@ -1277,7 +1277,7 @@ distribution will show you how to handle different versions and flavours
 of Emacs.
 
 
-@node Q1.4.3
+@node Q1.4.3, Q1.4.4, Q1.4.2, Introduction
 @unnumberedsec Q1.4.3: Any good tutorials around?
 
 There's the SXEmacs tutorial available from the Help Menu under
@@ -1286,7 +1286,7 @@ it's available in a non-english language, type @kbd{C-u C-h t TAB}, type
 the first letters of your preferred language, then type @key{RET}.
 
 
-@node Q1.4.4
+@node Q1.4.4, Q1.4.5, Q1.4.3, Introduction
 @unnumberedsec Q1.4.4: May I see an example of a useful SXEmacs Lisp function?
 
 The following function does a little bit of everything useful.  It does
@@ -1322,7 +1322,7 @@ this will tell you that the @code{*} requires a writable buffer, and
 @code{interactive} allows you to execute the command with @kbd{M-x}.
 
 
-@node Q1.4.5
+@node Q1.4.5, Q1.4.6, Q1.4.4, Introduction
 @unnumberedsec Q1.4.5: And how do I bind it to a key?
 
 To bind to a key do:
@@ -1334,7 +1334,7 @@ To bind to a key do:
 Or interactively, @kbd{M-x global-set-key} and follow the prompts.
 
 
-@node Q1.4.6
+@node Q1.4.6,  , Q1.4.5, Introduction
 @unnumberedsec Q1.4.6: What's the difference between a macro and a function?
 
 Quoting from the Lisp Reference (a.k.a @dfn{Lispref}) Manual:
@@ -1409,7 +1409,7 @@ Trouble Shooting:
 @end menu
 
 
-@node Q2.0.1
+@node Q2.0.1, Q2.0.2, Installation, Installation
 @unnumberedsec 2.0: Installation
 @unnumberedsec Q2.0.1: Running SXEmacs without installing
 
@@ -1421,7 +1421,7 @@ flag.  It's the copying of the Lisp directories that requires so much
 space.  SXEmacs is largely written in Lisp.
 
 
-@node Q2.0.2
+@node Q2.0.2, Q2.0.3, Q2.0.1, Installation
 @unnumberedsec Q2.0.2: SXEmacs is too big
 
 The space required by the installation directories can be
@@ -1451,7 +1451,7 @@ to delete, and then @kbd{x} to delete them.
 
 Another method is to do @kbd{M-x package-get-delete-package}.
 
-@node Q2.0.3
+@node Q2.0.3, Q2.0.4, Q2.0.2, Installation
 @unnumberedsec Q2.0.3: Compiling SXEmacs with Netaudio.
 
 What is the best way to compile SXEmacs with the netaudio system,
@@ -1481,7 +1481,7 @@ same thing.  It also might be found at
 @uref{ftp://ftp.x.org/contrib/audio/nas/}.
 
 
-@node Q2.0.4
+@node Q2.0.4, Q2.0.5, Q2.0.3, Installation
 @unnumberedsec Q2.0.4: Problems with Linux and ncurses.
 
 @c On Linux 1.3.98 with termcap 2.0.8 and the ncurses that came with libc
@@ -1507,13 +1507,13 @@ same thing.  It also might be found at
 There are none!
 
 
-@node Q2.0.5
+@node Q2.0.5, Q2.0.6, Q2.0.4, Installation
 @unnumberedsec Q2.0.5: Do I need X11 to run SXEmacs?
 
 No.
 
 
-@node Q2.0.6
+@node Q2.0.6, Q2.0.7, Q2.0.5, Installation
 @unnumberedsec Q2.0.6: I'm having strange crashes.  What do I do?
 
 There have been a variety of reports of crashes due to compilers with
@@ -1521,7 +1521,7 @@ buggy optimisers.  Please see the @file{PROBLEMS} file that comes with
 SXEmacs to read what it says about your platform.
 
 
-@node Q2.0.7
+@node Q2.0.7, Q2.0.8, Q2.0.6, Installation
 @unnumberedsec Q2.0.7: Libraries in non-standard locations
 
 I have x-faces, jpeg, xpm etc. all in different places.  I've tried
@@ -1533,13 +1533,13 @@ avail.
 @end example
 
 
-@node Q2.0.8
+@node Q2.0.8, Q2.0.9, Q2.0.7, Installation
 @unnumberedsec Q2.0.8: can't resolve symbol _h_errno
 
 Does not apply anymore.
 
 
-@node Q2.0.9
+@node Q2.0.9, Q2.0.10, Q2.0.8, Installation
 @unnumberedsec Q2.0.9: Where do I find external libraries?
 
 Oh well ... we support far too many external libraries to list them
@@ -1547,7 +1547,7 @@ here.  Have a glance at INSTALL to check if there are special
 instructions for some of the libraries you intend to use.
 
 
-@node Q2.0.10
+@node Q2.0.10, Q2.0.11, Q2.0.9, Installation
 @unnumberedsec Q2.0.10: After I run configure I find a core dump, is something wrong?
 
 @c @c WHOOOOOOOAT?!?!
@@ -1570,7 +1570,7 @@ instructions for some of the libraries you intend to use.
 Send a build report.
 
 
-@node Q2.0.11
+@node Q2.0.11, Q2.0.12, Q2.0.10, Installation
 @unnumberedsec Q2.0.11: SXEmacs doesn't resolve hostnames.
 
 This is the result of a long-standing problem with SunOS and the fact
@@ -1592,7 +1592,7 @@ to link against the DNS resolver library code.
 @end quotation
 
 
-@node Q2.0.12
+@node Q2.0.12, Q2.0.13, Q2.0.11, Installation
 @unnumberedsec Q2.0.12: Why can't I strip SXEmacs?
 
 @email{cognot@@fronsac.ensg.u-nancy.fr, Richard Cognot} writes:
@@ -1642,7 +1642,7 @@ cp src/sxemacs /usr/local/bin/sxemacs
 @end quotation
 
 
-@node Q2.0.13
+@node Q2.0.13, Q2.0.14, Q2.0.12, Installation
 @unnumberedsec Q2.0.13: I don't need no steenkin' packages.  Do I?
 
 Strictly speaking, no.  SXEmacs will build and install just fine
@@ -1652,7 +1652,7 @@ packages is an essential part of making your installed SXEmacs
 _useful_.
 
 
-@node Q2.0.14
+@node Q2.0.14, Q2.0.15, Q2.0.13, Installation
 @unnumberedsec Q2.0.14: How do I figure out which packages to install?
 
 Many people really liked the old way that packages were bundled and do
@@ -1681,7 +1681,7 @@ packages, it is recommended that you use the automatic package tools
 afterwards to pick up any recent updates.
 
 
-@node Q2.0.15
+@node Q2.0.15, Q2.1.1, Q2.0.14, Installation
 @unnumberedsec Q2.0.15: EFS fails with "500 AUTH not understood"
 
 A typical error: FTP Error: USER request failed; 500 AUTH not understood.
@@ -1698,7 +1698,7 @@ verify the needed flag with @code{man ftp} or other local
 documentation.
 
 
-@node Q2.1.1
+@node Q2.1.1, Q2.1.2, Q2.0.15, Installation
 @unnumberedsec 2.1: Trouble Shooting
 @unnumberedsec Q2.1.1: Help!  SXEmacs just crashed on me!
 
@@ -1788,7 +1788,7 @@ default used by @code{build-report}), and executing @kbd{M-x
 build-rpt}.
 
 
-@node Q2.1.2
+@node Q2.1.2, Q2.1.3, Q2.1.1, Installation
 @unnumberedsec Q2.1.2: Cryptic Minibuffer messages.
 
 When I try to use some particular option of some particular package, I
@@ -1819,7 +1819,7 @@ Message Log (recent versions)from the menubar to see the most recent
 messages.  This command is bound to @kbd{C-h l} by default.
 
 
-@node Q2.1.3
+@node Q2.1.3, Q2.1.4, Q2.1.2, Installation
 @unnumberedsec Q2.1.3: Translation Table Syntax messages at Startup
 
 I get tons of translation table syntax error messages during startup.
@@ -1853,7 +1853,7 @@ described above.
 @end itemize
 
 
-@node Q2.1.4
+@node Q2.1.4, Q2.1.5, Q2.1.3, Installation
 @unnumberedsec Q2.1.4: Startup warnings about deducing proper fonts?
 
 How can I avoid the startup warnings about deducing proper fonts?
@@ -1882,7 +1882,7 @@ time, you can set this:
 The buffer still exists; it just isn't in your face.
 
 
-@node Q2.1.5
+@node Q2.1.5, Q2.1.6, Q2.1.4, Installation
 @unnumberedsec Q2.1.5: SXEmacs cannot connect to my X Terminal!
 
 Help!  I can not get SXEmacs to display on my Envizex X-terminal!
@@ -1891,7 +1891,7 @@ Try setting the @code{DISPLAY} variable using the numeric IP address of
 the host you are running SXEmacs from.
 
 
-@node Q2.1.6
+@node Q2.1.6, Q2.1.7, Q2.1.5, Installation
 @unnumberedsec Q2.1.6: SXEmacs just locked up my Linux X server!
 
 There have been several reports of the X server locking up under
@@ -1902,7 +1902,7 @@ command @code{xset}.
 It is possible that using a font server may also solve the problem.
 
 
-@node Q2.1.7
+@node Q2.1.7, Q2.1.8, Q2.1.6, Installation
 @unnumberedsec Q2.1.7: HP Alt key as Meta.
 
 How can I make SXEmacs recognize the Alt key of my HP workstation as a
@@ -1916,7 +1916,7 @@ remove Mod1 = Mode_switch
 @end example
 
 
-@node Q2.1.8
+@node Q2.1.8, Q2.1.9, Q2.1.7, Installation
 @unnumberedsec Q2.1.8: got (wrong-type-argument color-instance-p nil)
 
 @email{nataliek@@rd.scitec.com.au, Natalie Kershaw} writes:
@@ -1968,7 +1968,7 @@ SXEmacs startup, which says @samp{Color Red3} not defined.
 @end quotation
 
 
-@node Q2.1.9
+@node Q2.1.9, Q2.1.10, Q2.1.8, Installation
 @unnumberedsec Q2.1.9: SXEmacs causes my OpenWindows 3.0 server to crash.
 
 The OpenWindows 3.0 server is incredibly buggy.  Your best bet is to
@@ -1977,7 +1977,7 @@ try disabling parts of your @file{init.el}, like those that enable
 background pixmaps.
 
 
-@node Q2.1.10
+@node Q2.1.10, Q2.1.11, Q2.1.9, Installation
 @unnumberedsec Q2.1.10: Warnings from incorrect key modifiers.
 
 The following information comes from the @file{PROBLEMS} file that comes
@@ -2004,7 +2004,7 @@ EOF
 @end example
 
 
-@node Q2.1.11
+@node Q2.1.11, Q2.1.12, Q2.1.10, Installation
 @unnumberedsec Q2.1.11: @samp{Can't instantiate image error...} in toolbar
 @c New
 
@@ -2031,7 +2031,7 @@ in @file{XF86Config} gets rid of the problem.
 @end quotation
 
 
-@node Q2.1.12
+@node Q2.1.12, Q2.1.13, Q2.1.11, Installation
 @unnumberedsec Q2.1.12: Problems with Regular Expressions on DEC OSF1.
 
 @c I have xemacs 19.13 running on an alpha running OSF1 V3.2 148 and ispell
@@ -2067,7 +2067,7 @@ in @file{XF86Config} gets rid of the problem.
 Does not apply anymore.
 
 
-@node Q2.1.13
+@node Q2.1.13, Q2.1.14, Q2.1.12, Installation
 @unnumberedsec Q2.1.13: HP/UX 10.10 and @code{create_process} failure.
 
 @c @email{Dave.Carrigan@@ipl.ca, Dave Carrigan} writes:
@@ -2100,7 +2100,7 @@ Does not apply anymore.
 Does not apply anymore.
 
 
-@node Q2.1.14
+@node Q2.1.14, Q2.1.15, Q2.1.13, Installation
 @unnumberedsec Q2.1.14: @kbd{C-g} doesn't work for me.  Is it broken?
 
 @email{ben@@xemacs.org, Ben Wing} writes:
@@ -2134,7 +2134,7 @@ error} then it does.
 @end quotation
 
 
-@node Q2.1.15
+@node Q2.1.15, Q2.1.16, Q2.1.14, Installation
 @unnumberedsec Q2.1.15: How to debug a SXEmacs problem with a debugger
 
 If SXEmacs does crash on you, one of the most productive things you
@@ -2314,7 +2314,7 @@ something useful.
 @end itemize
 
 
-@node Q2.1.16
+@node Q2.1.16, Q2.1.17, Q2.1.15, Installation
 @unnumberedsec Q2.1.16: SXEmacs crashes in @code{strcat} on HP/UX 10
 
 From the problems database (through
@@ -2338,14 +2338,14 @@ causing a segmentation violation.
 @end example
 
 
-@node Q2.1.17
+@node Q2.1.17, Q2.1.18, Q2.1.16, Installation
 @unnumberedsec Q2.1.17: @samp{Marker does not point anywhere}
 
 As with other errors, set @code{debug-on-error} to @code{t} to get the
 backtrace when the error occurs.
 
 
-@node Q2.1.18
+@node Q2.1.18, Q2.1.19, Q2.1.17, Installation
 @unnumberedsec Q2.1.18: SXEmacs is outputting lots of X errors.
 
 If this is happening, we would very much like to know what's causing
@@ -2353,7 +2353,7 @@ them.  To find this out, see @ref{Q2.1.15}.  Try to get both a C and Lisp
 backtrace, and send them to @email{sxemacs-devel@@sxemacs.org}.
 
 
-@node Q2.1.19
+@node Q2.1.19, Q2.1.20, Q2.1.18, Installation
 @unnumberedsec Q2.1.19: SXEmacs does not follow the local timezone.
 
 When using one of the prebuilt binaries many users have observed that
@@ -2368,7 +2368,7 @@ to your @file{init.el} or the @file{site-start.el} file if you can.
 Replace @code{MET} with your local timezone.
 
 
-@node Q2.1.20
+@node Q2.1.20, Q2.1.21, Q2.1.19, Installation
 @unnumberedsec Q2.1.20: @samp{Symbol's function definition is void: hkey-help-show.}
 
 This is a problem with a partially loaded hyperbole.  Try adding:
@@ -2380,11 +2380,11 @@ This is a problem with a partially loaded hyperbole.  Try adding:
 where you load hyperbole and the problem should go away.
 
 
-@node Q2.1.21
+@node Q2.1.21, Q2.1.22, Q2.1.20, Installation
 @unnumberedsec Q2.1.21: [This question intentionally left blank]
 
 
-@node Q2.1.22
+@node Q2.1.22, Q2.1.23, Q2.1.21, Installation
 @unnumberedsec Q2.1.22: SXEmacs seems to take a really long time to do some things
 
 @email{dmoore@@ucsd.edu, David Moore} writes:
@@ -2420,7 +2420,7 @@ some other strange cases.
 @end quotation
 
 
-@node Q2.1.23
+@node Q2.1.23, Q2.1.24, Q2.1.22, Installation
 @unnumberedsec Q2.1.23:  Movemail on Linux does not work for SXEmacs
 
 @email{steve@@xemacs.org, SL Baur} writes:
@@ -2437,7 +2437,7 @@ that reads:
 @end quotation
 
 
-@node Q2.1.24
+@node Q2.1.24, Q2.1.25, Q2.1.23, Installation
 @unnumberedsec Q2.1.24:  SXEmacs won't start without network.
 
 If SXEmacs starts when you're on the network, but fails when you're not
@@ -2451,7 +2451,7 @@ on the network, you may be missing a "localhost" entry in your
 Add that line, and SXEmacs will be happy.
 
 
-@node Q2.1.25
+@node Q2.1.25,  , Q2.1.24, Installation
 @unnumberedsec Q2.1.25::  After upgrading, SXEmacs won't do `foo' any more!
 
 You have been used to doing `foo', but now when you invoke it (or click
@@ -2562,7 +2562,7 @@ Text Selections:
 * Q3.10.6::     Why is killing so slow?
 @end menu
 
-@node Q3.0.1
+@node Q3.0.1, Q3.0.2, Customisation, Customisation
 @unnumberedsec 3.0: Customisation -- Emacs Lisp and @file{init.el}
 @unnumberedsec Q3.0.1: What version of Emacs am I running?
 
@@ -2592,7 +2592,7 @@ to use xemacs-exclusive features.  Both, the variable
 to @code{t} within SXEmacs.  This is due to compatibility reasons.
 
 
-@node Q3.0.2
+@node Q3.0.2, Q3.0.3, Q3.0.1, Customisation
 @unnumberedsec Q3.0.2: How can I evaluate Emacs-Lisp expressions?
 
 I know I can evaluate Elisp expressions from @code{*scratch*} buffer
@@ -2603,7 +2603,7 @@ Press @kbd{M-:} (the default binding of @code{eval-expression}), and
 enter the expression to the minibuffer.
 
 
-@node Q3.0.3
+@node Q3.0.3, Q3.0.4, Q3.0.2, Customisation
 @unnumberedsec Q3.0.3: @code{(setq tab-width 6)} behaves oddly.
 
 If you put @code{(setq tab-width 6)} in your @file{init.el} file it
@@ -2614,7 +2614,7 @@ Use @code{setq-default} instead, since @code{tab-width} is
 all-buffer-local.
 
 
-@node Q3.0.4
+@node Q3.0.4, Q3.0.5, Q3.0.3, Customisation
 @unnumberedsec Q3.0.4: How can I add directories to the @code{load-path}?
 
 Here are two ways to do that, one that puts your directories at the
@@ -2643,7 +2643,7 @@ To add directories using Unix shell metacharacters use
 @end quotation
 
 
-@node Q3.0.5
+@node Q3.0.5, Q3.0.6, Q3.0.4, Customisation
 @unnumberedsec Q3.0.5: How to check if a lisp function is defined?
 
 Use the following elisp:
@@ -2669,7 +2669,7 @@ much better more often in more places if it did the above instead of
 trying to divine its environment from the value of one variable.
 
 
-@node Q3.0.6
+@node Q3.0.6, Q3.0.7, Q3.0.5, Customisation
 @unnumberedsec Q3.0.6: Can I force the output of @code{(face-list)} to a buffer?
 
 It would be good having it in a buffer, as the output of
@@ -2683,7 +2683,7 @@ simply press @kbd{C-h l} to get the former minibuffer contents in a
 buffer.
 
 
-@node Q3.0.7
+@node Q3.0.7, Q3.0.8, Q3.0.6, Customisation
 @unnumberedsec Q3.0.7: Font selections in don't get saved after @code{Save Options}.
 
 @email{mannj@@ll.mit.edu, John Mann} writes:
@@ -2702,7 +2702,7 @@ Also, set the following in your @file{init.el}:
 @end lisp
 
 
-@node Q3.0.8
+@node Q3.0.8, Q3.0.9, Q3.0.7, Customisation
 @unnumberedsec Q3.0.8: How do I get a single minibuffer frame?
 
 @email{acs@@acm.org, Vin Shelton} writes:
@@ -2729,7 +2729,7 @@ taste, and there any number of other SXEmacs options settings that may
 make it difficult or inconvenient to use.
 
 
-@node Q3.0.9
+@node Q3.0.9, Q3.1.1, Q3.0.8, Customisation
 @unnumberedsec Q3.0.9: What is @code{Customize}?
 
 Starting with XEmacs 20.2 there is new system 'Customize' for customising
@@ -2743,7 +2743,7 @@ or invoking one of customize commands by typing eg.
 Also try out with @kbd{M-x customize-browse}
 
 
-@node Q3.1.1
+@node Q3.1.1, Q3.1.2, Q3.0.9, Customisation
 @unnumberedsec 3.1: X Window System & Resources
 @unnumberedsec Q3.1.1: Where is a list of X resources?
 
@@ -2759,7 +2759,7 @@ installing the contents of this file into your @file{.Xresources} (or
 legacy @file{.Xdefaults}) file if you use GNU Emacs under X11 as well.
 
 
-@node Q3.1.2
+@node Q3.1.2, Q3.1.3, Q3.1.1, Customisation
 @unnumberedsec Q3.1.2: How can I detect a color display?
 
 You can test the return value of the function @code{(device-class)}, as
@@ -2774,14 +2774,14 @@ in:
 @end lisp
 
 
-@node Q3.1.3
+@node Q3.1.3, Q3.1.4, Q3.1.2, Customisation
 @unnumberedsec Q3.1.3: [This question intentionally left blank]
 
-@node Q3.1.4
+@node Q3.1.4, Q3.1.5, Q3.1.3, Customisation
 @unnumberedsec Q3.1.4: [This question intentionally left blank]
 
 
-@node Q3.1.5
+@node Q3.1.5, Q3.1.6, Q3.1.4, Customisation
 @unnumberedsec Q3.1.5: How can I get the icon to just say @samp{SXEmacs}?
 
 I'd like the icon to just say @samp{SXEmacs}, and not include the name of
@@ -2794,7 +2794,7 @@ Add the following line to your @file{init.el}:
 @end lisp
 
 
-@node Q3.1.6
+@node Q3.1.6, Q3.1.7, Q3.1.5, Customisation
 @unnumberedsec Q3.1.6: How can I have the window title area display the full path?
 
 I'd like to have the window title area display the full directory/name
@@ -2817,7 +2817,7 @@ A more sophisticated title might be:
 That is, use the file name, or the dired-directory, or the buffer name.
 
 
-@node Q3.1.7
+@node Q3.1.7, Q3.1.8, Q3.1.6, Customisation
 @unnumberedsec Q3.1.7: @samp{sxemacs -name junk} doesn't work?
 
 When I run @samp{xterm -name junk}, I get an xterm whose class name
@@ -2869,7 +2869,7 @@ To make a frame with a particular name use:
 @end lisp
 
 
-@node Q3.1.8
+@node Q3.1.8, Q3.2.1, Q3.1.7, Customisation
 @unnumberedsec Q3.1.8: @samp{-iconic} doesn't work.
 
 When I start up SXEmacs using @samp{-iconic} it doesn't work right.
@@ -2885,7 +2885,7 @@ bugs...
 @end quotation
 
 
-@node Q3.2.1
+@node Q3.2.1, Q3.2.2, Q3.1.8, Customisation
 @unnumberedsec 3.2: Textual Fonts & Colors
 @unnumberedsec Q3.2.1: How can I set color options from @file{init.el}?
 
@@ -2919,7 +2919,7 @@ Like this:
 @end lisp
 
 
-@node Q3.2.2
+@node Q3.2.2, Q3.2.3, Q3.2.1, Customisation
 @unnumberedsec Q3.2.2: How do I set the text, menu and modeline fonts?
 
 Note that you should use @samp{Emacs.} and not @samp{Emacs*} when
@@ -2945,7 +2945,7 @@ configurations with Mule it @emph{is} necessary to use @samp{fontSet}
 instead of @samp{font}.  (Sorry, there just is no simple recipe here.)
 
 
-@node Q3.2.3
+@node Q3.2.3, Q3.2.4, Q3.2.2, Customisation
 @unnumberedsec Q3.2.3: How can I set the colors when highlighting a region?
 
 How can I set the background/foreground colors when highlighting a
@@ -2967,7 +2967,7 @@ or in your @file{init.el}:
 @end lisp
 
 
-@node Q3.2.4
+@node Q3.2.4, Q3.2.5, Q3.2.3, Customisation
 @unnumberedsec Q3.2.4: How can I limit color map usage?
 
 I'm using Netscape (or another color grabber like SXEmacs);
@@ -2983,7 +2983,7 @@ If you have the money, another solution would be to use a truecolor or
 direct color video.
 
 
-@node Q3.2.5
+@node Q3.2.5, Q3.2.6, Q3.2.4, Customisation
 @unnumberedsec Q3.2.5: My tty supports color, but SXEmacs doesn't use them.
 
 SXEmacs tries to automatically determine whether your tty supports color,
@@ -2996,7 +2996,7 @@ Right Thing using this Lisp code:
 @end lisp
 
 
-@node Q3.2.6
+@node Q3.2.6, Q3.2.7, Q3.2.5, Customisation
 @unnumberedsec Q3.2.6: Can I have pixmap backgrounds in SXEmacs?
 @c New
 @email{jvillaci@@wahnsinnig.extreme.indiana.edu, Juan Villacis} writes:
@@ -3025,7 +3025,7 @@ and so on.  You can also do this interactively via @kbd{M-x edit-faces}.
 @end quotation
 
 
-@node Q3.2.7
+@node Q3.2.7, Q3.3.1, Q3.2.6, Customisation
 @unnumberedsec Q3.2.7: How do I display non-ASCII characters?
 @c New
 
@@ -3053,7 +3053,7 @@ For the related problem of @emph{inputting} non-ASCII characters in a
 non-Mule SXEmacs, @xref{Q3.5.7}.
 
 
-@node Q3.3.1
+@node Q3.3.1, Q3.3.2, Q3.2.7, Customisation
 @unnumberedsec 3.3: The Modeline
 @unnumberedsec Q3.3.1: How can I make the modeline go away?
 
@@ -3062,7 +3062,7 @@ non-Mule SXEmacs, @xref{Q3.5.7}.
 @end lisp
 
 
-@node Q3.3.2
+@node Q3.3.2, Q3.3.3, Q3.3.1, Customisation
 @unnumberedsec Q3.3.2: How do you have SXEmacs display the line number in the modeline?
 
 Add the following line to your @file{init.el} file to
@@ -3092,7 +3092,7 @@ and/or
 Or type @kbd{M-x customize @key{RET} editing-basics @key{RET}}.
 
 
-@node Q3.3.3
+@node Q3.3.3, Q3.3.4, Q3.3.2, Customisation
 @unnumberedsec Q3.3.3: How do I get SXEmacs to put the time of day on the modeline?
 
 Add the following line to your @file{init.el}/@file{.emacs} file to
@@ -3105,7 +3105,7 @@ display the time:
 See @code{Customize} from the @code{Options} menu for customisation.
 
 
-@node Q3.3.4
+@node Q3.3.4, Q3.3.5, Q3.3.3, Customisation
 @unnumberedsec Q3.3.4: How do I turn off current chapter from AUC TeX modeline?
 
 With AUC TeX, fast typing is hard because the current chapter, section
@@ -3141,7 +3141,7 @@ Buffer} option in the function-menu.
 @end quotation
 
 
-@node Q3.3.5
+@node Q3.3.5, Q3.4.1, Q3.3.4, Customisation
 @unnumberedsec Q3.3.5: How can one change the modeline color based on the mode used?
 
 You can use something like the following:
@@ -3185,7 +3185,7 @@ There are additional modeline faces, @code{modeline-buffer-id},
 you may want to customize.
 
 
-@node Q3.4.1
+@node Q3.4.1, Q3.4.2, Q3.3.5, Customisation
 @unnumberedsec 3.4: Multiple Device Support
 @unnumberedsec Q3.4.1: How do I open a frame on another screen of my multi-headed display?
 
@@ -3197,7 +3197,7 @@ connection to any tty-like device.  Opening the TTY devices should be
 left to @code{gnuclient}, though.
 
 
-@node Q3.4.2
+@node Q3.4.2, Q3.5.1, Q3.4.1, Customisation
 @unnumberedsec Q3.4.2: Can I really connect to a running SXEmacs after calling up over a modem?  How?
 
 Yes.  Use @code{gnuclient -nw}.
@@ -3205,7 +3205,7 @@ Yes.  Use @code{gnuclient -nw}.
 Also see @ref{Q5.0.12}.
 
 
-@node Q3.5.1
+@node Q3.5.1, Q3.5.2, Q3.4.2, Customisation
 @unnumberedsec 3.5: The Keyboard
 @unnumberedsec Q3.5.1: How can I bind complex functions (or macros) to keys?
 
@@ -3247,7 +3247,7 @@ If you're doing more it's cleaner to define a separate function as in
 question 3.5.3 (@pxref{Q3.5.3}).
 
 
-@node Q3.5.2
+@node Q3.5.2, Q3.5.3, Q3.5.1, Customisation
 @unnumberedsec Q3.5.2: How can I stop down-arrow from adding empty lines to the bottom of my buffers?
 
 Add the following line to your @file{init.el} file:
@@ -3259,7 +3259,7 @@ Add the following line to your @file{init.el} file:
 This has been the default setting in SXEmacs for some time.
 
 
-@node Q3.5.3
+@node Q3.5.3, Q3.5.4, Q3.5.2, Customisation
 @unnumberedsec Q3.5.3: How do I bind C-. and C-; to scroll one line up and down?
 
 Add the following (Thanks to @email{mly@@adoc.xerox.com, Richard Mlynarik} and
@@ -3283,7 +3283,7 @@ can not bind a key to a function that you're also passing arguments to.
 (@pxref{Q3.5.1} for a better answer).
 
 
-@node Q3.5.4
+@node Q3.5.4, Q3.5.5, Q3.5.3, Customisation
 @unnumberedsec Q3.5.4: Globally binding @kbd{Delete}?
 
 I cannot manage to globally bind my @kbd{Delete} key to something other
@@ -3304,7 +3304,7 @@ get around this, try the following:
 Also see @ref{Q3.5.10}.
 
 
-@node Q3.5.5
+@node Q3.5.5, Q3.5.6, Q3.5.4, Customisation
 @unnumberedsec Q3.5.5: Scrolling one line at a time.
 
 Can the cursor keys scroll the screen a line at a time, rather than the
@@ -3340,7 +3340,7 @@ Select from the @code{Options} menu
 @kbd{M-x customize @key{RET} windows @key{RET}}.
 
 
-@node Q3.5.6
+@node Q3.5.6, Q3.5.7, Q3.5.5, Customisation
 @unnumberedsec Q3.5.6: How to map @kbd{Help} key alone on Sun type4 keyboard?
 
 The following works in GNU Emacs 19:
@@ -3371,7 +3371,7 @@ can also cause fix this by telling OLWM to not grab the help key, with
 the null binding @code{OpenWindows.KeyboardCommand.Help:}.
 
 
-@node Q3.5.7
+@node Q3.5.7, Q3.5.8, Q3.5.6, Customisation
 @unnumberedsec Q3.5.7: How can you type in special characters in SXEmacs?
 @c Changed
 One way is to use the package @code{x-compose}.  Then you can use
@@ -3424,13 +3424,13 @@ For the related problem of @emph{displaying} non-ASCII characters in a
 non-Mule SXEmacs, @xref{Q3.2.7}.
 
 
-@node Q3.5.8
+@node Q3.5.8, Q3.5.9, Q3.5.7, Customisation
 @unnumberedsec Q3.5.8: [This question intentionally left blank]
 
 Obsolete question, left blank to avoid renumbering.
 
 
-@node Q3.5.9
+@node Q3.5.9, Q3.5.10, Q3.5.8, Customisation
 @unnumberedsec Q3.5.9: How do I make the Delete key delete forward?
 
 A solution is to set variable @code{delete-key-deletes-forward} to t.
@@ -3442,7 +3442,7 @@ type @kbd{M-x customize @key{RET} editing-basics @key{RET}}.
 Also see @ref{Q3.5.4}.
 
 
-@node Q3.5.10
+@node Q3.5.10, Q3.5.11, Q3.5.9, Customisation
 @unnumberedsec Q3.5.10: Can I turn on @dfn{sticky} modifier keys?
 
 Yes, with @code{(setq modifier-keys-are-sticky t)}.  This will give the
@@ -3457,7 +3457,7 @@ One thing about the sticky modifiers is that if you move the mouse out
 of the frame and back in, it cancels all currently ``stuck'' modifiers.
 @end quotation
 
-@node Q3.5.11
+@node Q3.5.11, Q3.6.1, Q3.5.10, Customisation
 @unnumberedsec Q3.5.11: How do I map the arrow keys?
 @c New
 Say you want to map @kbd{C-@key{right}} to forward-word:
@@ -3483,7 +3483,7 @@ or
 
 
 
-@node Q3.6.1
+@node Q3.6.1, Q3.6.2, Q3.5.11, Customisation
 @unnumberedsec 3.6: The Cursor
 @unnumberedsec Q3.6.1: Is there a way to make the bar cursor thicker?
 
@@ -3514,7 +3514,7 @@ Emacs*cursorColor:      Red
 @end example
 
 
-@node Q3.6.2
+@node Q3.6.2, Q3.6.3, Q3.6.1, Customisation
 @unnumberedsec Q3.6.2: Is there a way to get back the block cursor?
 
 @lisp
@@ -3527,7 +3527,7 @@ You can also change this with Customize.  Select from the
 @kbd{M-x customize @key{RET} display @key{RET}}.
 
 
-@node Q3.6.3
+@node Q3.6.3, Q3.7.1, Q3.6.2, Customisation
 @unnumberedsec Q3.6.3: Can I make the cursor blink?
 
 Yes, like this:
@@ -3541,7 +3541,7 @@ You may also set this mode from the menu bar by selecting @samp{Options
 => Frame Appearance => Blinking Cursor}.  Remember to save options.
 
 
-@node Q3.7.1
+@node Q3.7.1, Q3.7.2, Q3.6.3, Customisation
 @unnumberedsec 3.7: The Mouse and Highlighting
 @unnumberedsec Q3.7.1: How can I turn off Mouse pasting?
 
@@ -3563,7 +3563,7 @@ use @code{define-key} or @code{global-set-key}.
 @end lisp
 
 
-@node Q3.7.2
+@node Q3.7.2, Q3.7.3, Q3.7.1, Customisation
 @unnumberedsec Q3.7.2: How do I set control/meta/etc modifiers on mouse buttons?
 
 Use, for instance, @code{[(meta button1)]}. For example, here is a common
@@ -3580,7 +3580,7 @@ ilisp-mode-hook]
 @end lisp
 
 
-@node Q3.7.3
+@node Q3.7.3, Q3.7.4, Q3.7.2, Customisation
 @unnumberedsec Q3.7.3: Clicking the left button does not do anything in buffer list.
 
 I do @kbd{C-x C-b} to get a list of buffers and the entries get
@@ -3590,7 +3590,7 @@ does not do anything.
 Use the middle mouse button.
 
 
-@node Q3.7.4
+@node Q3.7.4, Q3.7.5, Q3.7.3, Customisation
 @unnumberedsec Q3.7.4: How can I get a list of buffers when I hit mouse button 3?
 
 The following code will replace the default popup on button3:
@@ -3600,7 +3600,7 @@ The following code will replace the default popup on button3:
 @end lisp
 
 
-@node Q3.7.5
+@node Q3.7.5, Q3.7.6, Q3.7.4, Customisation
 @unnumberedsec Q3.7.5: Why does cut-and-paste not work between SXEmacs and a cmdtool?
 
 We don't know.  It's a bug.  There does seem to be a work-around,
@@ -3608,7 +3608,7 @@ however.  Try running xclipboard first.  It appears to fix the problem
 even if you exit it..
 
 
-@node Q3.7.6
+@node Q3.7.6, Q3.7.7, Q3.7.5, Customisation
 @unnumberedsec Q3.7.6: How I can set SXEmacs up so that it pastes where the text cursor is?
 
 By default SXEmacs pastes X selections where the mouse pointer is.  How
@@ -3629,7 +3629,7 @@ You can also change this with Customize.  Select from the
 customize @key{RET} mouse @key{RET}}.
 
 
-@node Q3.7.7
+@node Q3.7.7, Q3.7.8, Q3.7.6, Customisation
 @unnumberedsec Q3.7.7: How do I select a rectangular region?
 
 Just select the region normally, then use the rectangle commands (e.g.
@@ -3660,7 +3660,7 @@ You can also change this with Customize.  Select from the
 @end example
 
 
-@node Q3.7.8
+@node Q3.7.8, Q3.8.1, Q3.7.7, Customisation
 @unnumberedsec Q3.7.8: Why does @kbd{M-w} take so long?
 
 It actually doesn't.  It leaves the region visible for a second so that
@@ -3669,7 +3669,7 @@ will immediately complete its operation.  In other words, it will only
 delay for a second if you let it.
 
 
-@node Q3.8.1
+@node Q3.8.1, Q3.8.2, Q3.7.8, Customisation
 @unnumberedsec 3.8: The Menubar and Toolbar
 @unnumberedsec Q3.8.1: How do I get rid of the menu (or menubar)?
 
@@ -3687,7 +3687,7 @@ delay for a second if you let it.
 @end lisp
 
 
-@node Q3.8.2
+@node Q3.8.2, Q3.8.3, Q3.8.1, Customisation
 @unnumberedsec Q3.8.2: Can I customise the basic menubar?
 
 For an extensive menubar, add this line to your @file{init.el}:
@@ -3701,7 +3701,7 @@ examples as any to start from.  The file is located in edit-utils
 package.
 
 
-@node Q3.8.3
+@node Q3.8.3, Q3.8.4, Q3.8.2, Customisation
 @unnumberedsec Q3.8.3: How do I control how many buffers are listed in the menu @code{Buffers List}?
 
 Add the following to your @file{init.el} (suit to fit):
@@ -3718,7 +3718,7 @@ You can also change this with Customize.  Select from the
 type @kbd{M-x customize @key{RET} buffers-menu @key{RET}}.
 
 
-@node Q3.8.4
+@node Q3.8.4, Q3.8.5, Q3.8.3, Customisation
 @unnumberedsec Q3.8.4: Resources like @code{Emacs*menubar*font} are not working?
 
 I am trying to use a resource like @code{Emacs*menubar*font} to set the
@@ -3761,7 +3761,7 @@ Example:
 @end example
 
 
-@node Q3.8.5
+@node Q3.8.5, Q3.9.1, Q3.8.4, Customisation
 @unnumberedsec Q3.8.5: How can I bind a key to a function to toggle the toolbar?
 
 Try something like:
@@ -3775,7 +3775,7 @@ Try something like:
 @end lisp
 
 
-@node Q3.9.1
+@node Q3.9.1, Q3.9.2, Q3.8.5, Customisation
 @unnumberedsec 3.9: Scrollbars
 @unnumberedsec Q3.9.1: How can I disable the scrollbar?
 
@@ -3805,7 +3805,7 @@ turn the scrollbars off only in a single buffer:
 @end lisp
 
 
-@node Q3.9.2
+@node Q3.9.2, Q3.9.3, Q3.9.1, Customisation
 @unnumberedsec Q3.9.2: How can one use resources to change scrollbar colors?
 
 Here's a recap of how to use resources to change your scrollbar colors:
@@ -3825,7 +3825,7 @@ Emacs*Scrollbar.Background: lightgray
 Note the capitalisation of @code{Scrollbar} for the Athena widget.
 
 
-@node Q3.9.3
+@node Q3.9.3, Q3.9.4, Q3.9.2, Customisation
 @unnumberedsec Q3.9.3: Moving the scrollbar can move the point; can I disable this?
 
 When I move the scrollbar in a SXEmacs window, it moves the point as
@@ -3840,7 +3840,7 @@ hand corner.
 This cannot be changed.
 
 
-@node Q3.9.4
+@node Q3.9.4, Q3.10.1, Q3.9.3, Customisation
 @unnumberedsec Q3.9.4: How can I turn off automatic horizontal scrolling in specific modes?
 
 Do @code{(setq truncate-lines t)} in the mode-hooks for any modes
@@ -3859,7 +3859,7 @@ then horizontal scrollbars will not appear in truncated buffers unless
 the package specifically asked for them.
 
 
-@node Q3.10.1
+@node Q3.10.1, Q3.10.2, Q3.9.4, Customisation
 @unnumberedsec 3.10: Text Selections
 @unnumberedsec Q3.10.1: How can I turn off or change highlighted selections?
 
@@ -3881,7 +3881,7 @@ To change the face for selection, look at @code{Options->Customize} on
 the menubar.
 
 
-@node Q3.10.2
+@node Q3.10.2, Q3.10.3, Q3.10.1, Customisation
 @unnumberedsec Q3.10.2: How do I get that typing on an active region removes it?
 
 I want to change things so that if I select some text and start typing,
@@ -3909,7 +3909,7 @@ tad more complicated than it has to be for SXEmacs in order to make it
 more portable.
 
 
-@node Q3.10.3
+@node Q3.10.3, Q3.10.4, Q3.10.2, Customisation
 @unnumberedsec Q3.10.3: Can I turn off the highlight during isearch?
 
 I do not like my text highlighted while I am doing isearch as I am not
@@ -3929,7 +3929,7 @@ Instead of disabling isearch-highlight you may find that a better
 solution consists of customizing the @code{isearch} face.
 
 
-@node Q3.10.4
+@node Q3.10.4, Q3.10.5, Q3.10.3, Customisation
 @unnumberedsec Q3.10.4: How do I turn off highlighting after @kbd{C-x C-p} (mark-page)?
 
 Put this in your @file{init.el}:
@@ -3943,13 +3943,13 @@ Put this in your @file{init.el}:
 Also see @ref{Q3.10.1}.
 
 
-@node Q3.10.5
+@node Q3.10.5, Q3.10.6, Q3.10.4, Customisation
 @unnumberedsec Q3.10.5: The region disappears when I hit the end of buffer while scrolling.
 
 Does not apply anymore.
 
 
-@node Q3.10.6
+@node Q3.10.6,  , Q3.10.5, Customisation
 @unnumberedsec Q3.10.6: Why is killing so slow?
 
 This actually is an X Windows question, although you'll notice it with
@@ -4076,7 +4076,7 @@ Other Unbundled Packages:
 * Q4.7.7::      Can I edit files on other hosts?
 @end menu
 
-@node Q4.0.1
+@node Q4.0.1, Q4.0.2, Subsystems, Subsystems
 @unnumberedsec 4.0: Reading Mail with VM
 @unnumberedsec Q4.0.1: How do I set up VM to retrieve mail from a remote site using POP?
 
@@ -4090,7 +4090,7 @@ Use @code{vm-spool-files}, like this for example:
 Of course substitute your actual password for MYPASS.
 
 
-@node Q4.0.2
+@node Q4.0.2, Q4.0.3, Q4.0.1, Subsystems
 @unnumberedsec Q4.0.2: How do I get VM to filter mail for me?
 
 One possibility is to use procmail to split your mail before it gets to
@@ -4108,7 +4108,7 @@ Also see the Mail Filtering FAQ at:
 @c was dead.
 
 
-@node Q4.0.3
+@node Q4.0.3, Q4.0.4, Q4.0.2, Subsystems
 @unnumberedsec Q4.0.3: How can I get VM to automatically check for new mail?
 
 @email{turner@@lanl.gov, John Turner} writes:
@@ -4122,13 +4122,13 @@ Use the following:
 @end quotation
 
 
-@node Q4.0.4
+@node Q4.0.4, Q4.0.5, Q4.0.3, Subsystems
 @unnumberedsec Q4.0.4: [This question intentionally left blank]
 
 Obsolete question, left blank to avoid renumbering.
 
 
-@node Q4.0.5
+@node Q4.0.5, Q4.0.6, Q4.0.4, Subsystems
 @unnumberedsec Q4.0.5: How do I get my outgoing mail archived?
 
 @lisp
@@ -4136,7 +4136,7 @@ Obsolete question, left blank to avoid renumbering.
 @end lisp
 
 
-@node Q4.0.6
+@node Q4.0.6, Q4.0.7, Q4.0.5, Subsystems
 @unnumberedsec Q4.0.6: I have various addresses at which I receive mail.  How can I tell VM to ignore them when doing a "reply-all"?
 
 Set @code{vm-reply-ignored-addresses} to a list, like
@@ -4150,7 +4150,7 @@ Set @code{vm-reply-ignored-addresses} to a list, like
 Note that each string is a regular expression.
 
 
-@node Q4.0.7
+@node Q4.0.7, Q4.0.8, Q4.0.6, Subsystems
 @unnumberedsec Q4.0.7: Is there a mailing list or FAQ for VM?
 
 A FAQ for VM exists at @uref{http://www.wonderworks.com/vm/FAQ.html}.
@@ -4158,7 +4158,7 @@ A FAQ for VM exists at @uref{http://www.wonderworks.com/vm/FAQ.html}.
 VM has its own newsgroups gnu.emacs.vm.info and gnu.emacs.vm.bug.
 
 
-@node Q4.0.8
+@node Q4.0.8, Q4.0.9, Q4.0.7, Subsystems
 @unnumberedsec Q4.0.8: Remote mail reading with VM.
 
 My mailbox lives at the office on a big honkin server.  My regular INBOX
@@ -4197,7 +4197,7 @@ the time back at IU.
 @end quotation
 
 
-@node Q4.0.9
+@node Q4.0.9, Q4.0.10, Q4.0.8, Subsystems
 @unnumberedsec Q4.0.9: rmail or VM gets an error incorporating new mail.
 
 Quoting the SXEmacs PROBLEMS file:
@@ -4237,7 +4237,7 @@ directory copy is ineffective.
 @end quotation
 
 
-@node Q4.0.10
+@node Q4.0.10, Q4.0.11, Q4.0.9, Subsystems
 @unnumberedsec Q4.0.10: How do I make VM stay in a single frame?
 
 John.@email{Cooper@@Eng.Sun.COM, John S Cooper} writes:
@@ -4253,7 +4253,7 @@ John.@email{Cooper@@Eng.Sun.COM, John S Cooper} writes:
 @end quotation
 
 
-@node Q4.0.11
+@node Q4.0.11, Q4.0.12, Q4.0.10, Subsystems
 @unnumberedsec Q4.0.11: How do I make VM or mh-e display graphical smilies?
 @c Changed June
 For mh-e use the following:
@@ -4281,7 +4281,7 @@ For tm use the following:
 @end lisp
 
 
-@node Q4.0.12
+@node Q4.0.12, Q4.1.1, Q4.0.11, Subsystems
 @unnumberedsec Q4.0.12: Customisation of VM not covered in the manual, or here.
 
 @email{boffi@@hp735.stru.polimi.it, giacomo boffi} writes:
@@ -4305,7 +4305,7 @@ appropriate variables, copy and experiment.
 @end quotation
 
 
-@node Q4.1.1
+@node Q4.1.1, Q4.1.2, Q4.0.12, Subsystems
 @unnumberedsec 4.1: Web browsing with W3
 @unnumberedsec Q4.1.1: What is W3?
 
@@ -4316,21 +4316,21 @@ It has a home web page at
 @uref{http://www.cs.indiana.edu/elisp/w3/docs.html}.
 
 
-@node Q4.1.2
+@node Q4.1.2, Q4.1.3, Q4.1.1, Subsystems
 @unnumberedsec Q4.1.2: How do I run W3 from behind a firewall?
 
 There is a long, well-written, detailed section in the W3 manual that
 describes how to do this.  Look in the section entitled "Firewalls".
 
 
-@node Q4.1.3
+@node Q4.1.3, Q4.2.1, Q4.1.2, Subsystems
 @unnumberedsec Q4.1.3: Is it true that W3 supports style sheets and tables?
 
 Yes, and much more.  W3, as distributed with the latest SXEmacs is a
 full-featured web browser.
 
 
-@node Q4.2.1
+@node Q4.2.1, Q4.2.2, Q4.1.3, Subsystems
 @unnumberedsec 4.2: Reading Netnews and Mail with Gnus
 @unnumberedsec Q4.2.1: GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus, Quassia Gnus, Pterodactyl Gnus, Oort Gnus, argh!
 
@@ -4348,13 +4348,13 @@ See the Gnus home page
 @end example
 
 
-@node Q4.2.2
+@node Q4.2.2, Q4.2.3, Q4.2.1, Subsystems
 @unnumberedsec Q4.2.2: This question intentionally left blank.
 
 Obsolete question, left blank to avoid renumbering.
 
 
-@node Q4.2.3
+@node Q4.2.3, Q4.2.4, Q4.2.2, Subsystems
 @unnumberedsec Q4.2.3: How do I make Gnus stay within a single frame?
 
 The toolbar code to start Gnus opens the new frame---and it's a feature
@@ -4370,7 +4370,7 @@ It will redefine the callback function of the icon to just call
 @code{gnus}, without all the fancy frame stuff.
 
 
-@node Q4.2.4
+@node Q4.2.4, Q4.3.1, Q4.2.3, Subsystems
 @unnumberedsec Q4.2.4: How do I customize the From: line?
 
 How do I change the @code{From:} line?  I have set gnus-user-from-line
@@ -4395,7 +4395,7 @@ Set @code{user-mail-address} to @samp{gail.gurman@@sybase.com} or
 @end quotation
 
 
-@node Q4.3.1
+@node Q4.3.1, Q4.3.2, Q4.2.4, Subsystems
 @unnumberedsec 4.3: Other Mail & News
 @unnumberedsec Q4.3.1: How can I read and/or compose MIME messages?
 @c Changed June
@@ -4419,7 +4419,7 @@ Another possibility is RMIME.  You may find RMIME at
 @uref{http://www.cinti.net/~rmoody/rmime/index.html}.
 
 
-@node Q4.3.2
+@node Q4.3.2, Q4.3.3, Q4.3.1, Subsystems
 @unnumberedsec Q4.3.2: What is TM and where do I get it?
 
 TM stands for @dfn{Tools for MIME} and not Tiny MIME.  TM integrates
@@ -4471,7 +4471,7 @@ in these packages.
 @end quotation
 
 
-@node Q4.3.3
+@node Q4.3.3, Q4.3.4, Q4.3.2, Subsystems
 @unnumberedsec Q4.3.3: Why isn't this @code{movemail} program working?
 
 Ben Wing @email{ben@@xemacs.org} writes:
@@ -4481,7 +4481,7 @@ It wasn't chown'ed/chmod'd correctly.
 @end quotation
 
 
-@node Q4.3.4
+@node Q4.3.4, Q4.3.5, Q4.3.3, Subsystems
 @unnumberedsec Q4.3.4: Movemail is also distributed by Netscape?  Can that cause problems?
 
 @email{steve@@xemacs.org, Steve Baur} writes:
@@ -4501,7 +4501,7 @@ version of movemail configured for your system by the person who built
 SXEmacs.
 
 
-@node Q4.3.5
+@node Q4.3.5, Q4.4.1, Q4.3.4, Subsystems
 @unnumberedsec Q4.3.5: Where do I find pstogif (required by tm)?
 
 pstogif is part of the latex2html package.
@@ -4529,7 +4529,7 @@ There is a good mirror at ftp.cdrom.com;
 @uref{ftp://ftp.cdrom.com/pub/tex/ctan/support/latex2html/}.
 
 
-@node Q4.4.1
+@node Q4.4.1, Q4.5.1, Q4.3.5, Subsystems
 @unnumberedsec 4.4: Sparcworks, EOS, and WorkShop
 @unnumberedsec Q4.4.1: What is SPARCworks, EOS, and WorkShop?
 
@@ -4573,7 +4573,7 @@ called Sun WorkShop.  For more details, check out
 @end quotation
 
 
-@node Q4.5.1
+@node Q4.5.1, Q4.6.1, Q4.4.1, Subsystems
 @unnumberedsec 4.5: Energize
 @unnumberedsec Q4.5.1: What is/was Energize?
 
@@ -4590,7 +4590,7 @@ did so.)
 @end quotation
 
 
-@node Q4.6.1
+@node Q4.6.1, Q4.7.1, Q4.5.1, Subsystems
 @unnumberedsec 4.6: Infodock
 @unnumberedsec Q4.6.1: What is Infodock?
 
@@ -4749,7 +4749,7 @@ Read the @file{ID-INSTALL} file which you just retrieved for
 step-by-step installation instructions.
 
 
-@node Q4.7.1
+@node Q4.7.1, Q4.7.2, Q4.6.1, Subsystems
 @unnumberedsec 4.7: Other Unbundled Packages
 @unnumberedsec Q4.7.1: What is AUC TeX?  Where do you get it?
 
@@ -4774,7 +4774,7 @@ WWW users may want to check out the AUC TeX page at
 @uref{http://sunsite.dk/auctex/}.
 
 
-@node Q4.7.2
+@node Q4.7.2, Q4.7.3, Q4.7.1, Subsystems
 @unnumberedsec Q4.7.2: Are there any Emacs Lisp Spreadsheets?
 
 Yes.  Check out @dfn{dismal} (which stands for Dis' Mode Ain't Lotus) at
@@ -4784,11 +4784,11 @@ Yes.  Check out @dfn{dismal} (which stands for Dis' Mode Ain't Lotus) at
 @uref{ftp://cs.nyu.edu/pub/local/fox/dismal/}.
 
 
-@node Q4.7.3
+@node Q4.7.3, Q4.7.4, Q4.7.2, Subsystems
 @unnumberedsec Q4.7.3: [This question intentionally left blank]
 
 
-@node Q4.7.4
+@node Q4.7.4, Q4.7.5, Q4.7.3, Subsystems
 @unnumberedsec Q4.7.4: Problems installing AUC TeX.
 
 @email{vroonhof@@math.ethz.ch, Jan Vroonhof} writes:
@@ -4818,7 +4818,7 @@ Fix: use @code{locate-library} and remove old versions to make sure it
 @end itemize
 
 
-@node Q4.7.5
+@node Q4.7.5, Q4.7.6, Q4.7.4, Subsystems
 @unnumberedsec Q4.7.5: Is there a reason for an Emacs package not to be included in SXEmacs?
 
 The reason for an Emacs package not to be included in SXEmacs is
@@ -4858,7 +4858,7 @@ appreciated.
 @end enumerate
 
 
-@node Q4.7.6
+@node Q4.7.6, Q4.7.7, Q4.7.5, Subsystems
 @unnumberedsec Q4.7.5: Is there a MatLab mode?
 
 Yes, a matlab mode and other items are available at the
@@ -4866,7 +4866,7 @@ Yes, a matlab mode and other items are available at the
 MathWorks' emacs_add_ons ftp directory}.
 
 
-@node Q4.7.7
+@node Q4.7.7,  , Q4.7.6, Subsystems
 @unnumberedsec Q4.7.7: Can I edit files on other hosts?
 
 Yes.  Of course SXEmacs can use any network file system (such as NFS)
@@ -4950,7 +4950,7 @@ Miscellaneous:
 @end menu
 
 
-@node Q5.0.1
+@node Q5.0.1, Q5.0.2, Miscellaneous, Miscellaneous
 @unnumberedsec 5.0: Major & Minor Modes
 @unnumberedsec Q5.0.1: How can I do source code highlighting using font-lock?
 
@@ -4973,7 +4973,7 @@ See also @code{Syntax Highlighting} from the @code{Options} menu.
 Remember to save options.
 
 
-@node Q5.0.2
+@node Q5.0.2, Q5.0.3, Q5.0.1, Miscellaneous
 @unnumberedsec Q5.0.2: I do not like cc-mode.  How do I use the old c-mode?
 
 Well, first off, consider if you really want to do this.  cc-mode is
@@ -4997,7 +4997,7 @@ This must be done before any other reference is made to either c-mode or
 c++-mode.
 
 
-@node Q5.0.3
+@node Q5.0.3, Q5.0.4, Q5.0.2, Miscellaneous
 @unnumberedsec Q5.0.3: How do I get @samp{More} Syntax Highlighting on by default?
 
 Use the following code in your @file{init.el}:
@@ -5010,7 +5010,7 @@ See also @code{Syntax Highlighting} from the @code{Options} menu.
 Remember to save options.
 
 
-@node Q5.0.4
+@node Q5.0.4, Q5.0.5, Q5.0.3, Miscellaneous
 @unnumberedsec Q5.0.4: How can I enable auto-indent and/or Filladapt?
 
 Put the following line in your @file{init.el}:
@@ -5049,7 +5049,7 @@ the nasty ones, you'll have to provide the @code{add-hook}s yourself.
 Please note that the @code{fa-extras} package is no longer useful.
 
 
-@node Q5.0.5
+@node Q5.0.5, Q5.0.6, Q5.0.4, Miscellaneous
 @unnumberedsec Q5.0.5: How can I get SXEmacs to come up in text/auto-fill mode by default?
 
 Try the following lisp in your @file{init.el}:
@@ -5095,7 +5095,7 @@ message might get fontified in a strange foreign manner, e.g. as code in
 some programming language).
 
 
-@node Q5.0.6
+@node Q5.0.6, Q5.0.7, Q5.0.5, Miscellaneous
 @unnumberedsec Q5.0.6: How do I start up a second shell buffer?
 
 In the @code{*shell*} buffer:
@@ -5115,7 +5115,7 @@ If the value of this variable is non-nil, each time shell mode is invoked,
 a new shell is made
 
 
-@node Q5.0.7
+@node Q5.0.7, Q5.0.8, Q5.0.6, Miscellaneous
 @unnumberedsec Q5.0.7: Telnet from shell filters too much
 
 I'm using the Emacs @kbd{M-x shell} function, and I would like to invoke
@@ -5128,7 +5128,7 @@ use @kbd{M-x ssh} to open secure remote session if you have @code{ssh}
 installed.
 
 
-@node Q5.0.8
+@node Q5.0.8, Q5.0.9, Q5.0.7, Miscellaneous
 @unnumberedsec Q5.0.8: Why does edt emulation not work?
 
 We don't know, but you can use tpu-edt emulation instead, which works
@@ -5147,7 +5147,7 @@ add this as well:
 @end lisp
 
 
-@node Q5.0.9
+@node Q5.0.9, Q5.0.10, Q5.0.8, Miscellaneous
 @unnumberedsec Q5.0.9: How can I emulate VI and use it as my default mode?
 
 Our recommended VI emulator is viper. To make viper-mode the default,
@@ -5165,19 +5165,19 @@ it, otherwise some minor modes may not get viper-ized.
 @end quotation
 
 
-@node Q5.0.10
+@node Q5.0.10, Q5.0.11, Q5.0.9, Miscellaneous
 @unnumberedsec Q5.0.10: [This question intentionally left blank]
 
 Obsolete question, left blank to avoid renumbering
 
 
-@node Q5.0.11
+@node Q5.0.11, Q5.0.12, Q5.0.10, Miscellaneous
 @unnumberedsec Q5.0.11: [This question intentionally left blank]
 
 Obsolete question, left blank to avoid renumbering
 
 
-@node Q5.0.12
+@node Q5.0.12, Q5.0.13, Q5.0.11, Miscellaneous
 @unnumberedsec Q5.0.12: How do I disable gnuserv from opening a new frame?
 
 If you set the @code{gnuserv-frame} variable to the frame that should be
@@ -5200,7 +5200,7 @@ You can also change this with Customize.  Select from the
 @kbd{M-x customize @key{RET} gnuserv @key{RET}}.
 
 
-@node Q5.0.13
+@node Q5.0.13, Q5.0.14, Q5.0.12, Miscellaneous
 @unnumberedsec Q5.0.13: How do I start gnuserv so that each subsequent SXEmacs is a client?
 
 Put the following in your @file{init.el} file to start the server:
@@ -5223,7 +5223,7 @@ of the frame.
 See also man page of gnuclient.
 
 
-@node Q5.0.14
+@node Q5.0.14, Q5.0.15, Q5.0.13, Miscellaneous
 @unnumberedsec Q5.0.14: Strange things are happening in Shell Mode.
 
 Sometimes (i.e. it's not repeatable, and I can't work out why it
@@ -5245,13 +5245,13 @@ if ( "$TERM" == emacs || "$TERM" == unknown ) unset filec
 @end quotation
 
 
-@node Q5.0.15
+@node Q5.0.15, Q5.0.16, Q5.0.14, Miscellaneous
 @unnumberedsec Q5.0.15: Where do I get the latest CC Mode?
 
 See @uref{http://cc-mode.sourceforge.net/}.
 
 
-@node Q5.0.16
+@node Q5.0.16, Q5.0.17, Q5.0.15, Miscellaneous
 @unnumberedsec Q5.0.16: I find auto-show-mode disconcerting.  How do I turn it off?
 
 @code{auto-show-mode} controls whether or not a horizontal scrollbar
@@ -5265,17 +5265,17 @@ enabled by default.  To turn it off, put the following in your
 @end lisp
 
 
-@node Q5.0.17
+@node Q5.0.17, Q5.0.18, Q5.0.16, Miscellaneous
 @unnumberedsec Q5.0.17: How can I get two instances of info?
 
 Good question.
 
 
-@node Q5.0.18
+@node Q5.0.18, Q5.0.19, Q5.0.17, Miscellaneous
 @unnumberedsec Q5.0.18: [This question intentionally left blank]
 
 
-@node Q5.0.19
+@node Q5.0.19, Q5.0.20, Q5.0.18, Miscellaneous
 @unnumberedsec Q5.0.19: Is there something better than LaTeX mode?
 
 @email{dak@@fsnif.neuroinformatik.ruhr-uni-bochum.de, David Kastrup} writes:
@@ -5286,7 +5286,7 @@ leniently maintained.  Serious TeX users use AUC TeX (@pxref{Q4.7.1}).
 @end quotation
 
 
-@node Q5.0.20
+@node Q5.0.20, Q5.1.1, Q5.0.19, Miscellaneous
 @unnumberedsec Q5.0.20: Is there a way to start a new SXEmacs if there's no gnuserv running, and otherwise use gnuclient?
 
 @email{vroonhof@@math.ethz.ch, Jan Vroonhof} writes:
@@ -5313,7 +5313,7 @@ Note that there is a known problem when running SXEmacs and
 @end quotation
 
 
-@node Q5.1.1
+@node Q5.1.1, Q5.1.2, Q5.0.20, Miscellaneous
 @unnumberedsec 5.1: Emacs Lisp Programming Techniques
 @unnumberedsec Q5.1.1: What is the difference in key sequences between XEmacs/SXEmacs and GNU Emacs?
 
@@ -5348,7 +5348,7 @@ Another (even safer) way to be sure of the key-sequences is to use the
 you use.  The function is available under all Emacsen.
 
 
-@node Q5.1.2
+@node Q5.1.2, Q5.1.3, Q5.1.1, Miscellaneous
 @unnumberedsec Q5.1.2: Can I generate "fake" keyboard events?
 
 I wonder if there is an interactive function that can generate
@@ -5370,7 +5370,7 @@ This seems to work:
 @end lisp
 
 
-@node Q5.1.3
+@node Q5.1.3, Q5.1.4, Q5.1.2, Miscellaneous
 @unnumberedsec Q5.1.3: Could you explain @code{read-kbd-macro} in more detail?
 
 The @code{read-kbd-macro} function returns the internal Emacs
@@ -5462,7 +5462,7 @@ use whitespace.
 @end quotation
 
 
-@node Q5.1.4
+@node Q5.1.4, Q5.1.5, Q5.1.3, Miscellaneous
 @unnumberedsec Q5.1.4: What is the performance hit of @code{let}?
 
 In most cases, not noticeable.  Besides, there's no avoiding
@@ -5473,7 +5473,7 @@ future implementation), @code{let}-s should be used (nested) in a way to
 provide the clearest code.
 
 
-@node Q5.1.5
+@node Q5.1.5, Q5.1.6, Q5.1.4, Miscellaneous
 @unnumberedsec Q5.1.5: What is the recommended use of @code{setq}?
 
 @itemize @bullet
@@ -5537,7 +5537,7 @@ returns the value of @code{inbox}, which can be reused, for instance:
 @end itemize
 
 
-@node Q5.1.6
+@node Q5.1.6, Q5.1.7, Q5.1.5, Miscellaneous
 @unnumberedsec Q5.1.6: What is the typical misuse of @code{setq} ?
 
 A typical misuse is probably @code{setq}ing a variable that was meant to
@@ -5580,7 +5580,7 @@ While compiling toplevel forms:
 @end lisp
 
 
-@node Q5.1.7
+@node Q5.1.7, Q5.1.8, Q5.1.6, Miscellaneous
 @unnumberedsec Q5.1.7: I like the @code{do} form of cl, does it slow things down?
 
 It shouldn't.  Here is what Dave Gillespie has to say about cl.el
@@ -5623,7 +5623,7 @@ function.
 @end quotation
 
 
-@node Q5.1.8
+@node Q5.1.8, Q5.1.9, Q5.1.7, Miscellaneous
 @unnumberedsec Q5.1.8: I like recursion, does it slow things down?
 
 Yes.  Emacs byte-compiler cannot do much to optimize recursion.  But
@@ -5635,7 +5635,7 @@ Please try not to make your code much uglier to gain a very small speed
 gain.  It's not usually worth it.
 
 
-@node Q5.1.9
+@node Q5.1.9, Q5.1.10, Q5.1.8, Miscellaneous
 @unnumberedsec Q5.1.9: How do I put a glyph as annotation in a buffer?
 
 Here is a solution that will insert the glyph annotation at the
@@ -5663,7 +5663,7 @@ name), and inserts the glyph at @code{(point)} instead of
 @code{(point-min)}.
 
 
-@node Q5.1.10
+@node Q5.1.10, Q5.1.11, Q5.1.9, Miscellaneous
 @unnumberedsec Q5.1.10: @code{map-extents} won't traverse all of my extents!
 
 I tried to use @code{map-extents} to do an operation on all the extents
@@ -5695,7 +5695,7 @@ is:
 @end lisp
 
 
-@node Q5.1.11
+@node Q5.1.11, Q5.2.1, Q5.1.10, Miscellaneous
 @unnumberedsec Q5.1.11: My elisp program is horribly slow.  Is there
 an easy way to find out where it spends time?
 @c New
@@ -5709,7 +5709,7 @@ where the time is being spent.
 @end quotation
 
 
-@node Q5.2.1
+@node Q5.2.1, Q5.2.2, Q5.1.11, Miscellaneous
 @unnumberedsec Q5.2.1: How do I turn off the sound?
 @c hehe, this is neat
 @c should i mention that if nothing's done, sound is off entirely?
@@ -5730,7 +5730,7 @@ You can also change these with Customize.  Select from the
 customize @key{RET} sound @key{RET}}.
 
 
-@node Q5.2.2
+@node Q5.2.2, Q5.2.3, Q5.2.1, Miscellaneous
 @unnumberedsec Q5.2.2: How do I get funky sounds instead of a boring beep?
 
 Make sure your SXEmacs was compiled with audio and media support, and
@@ -5741,13 +5741,13 @@ then put this in your @file{init.el}:
 @end lisp
 
 
-@node Q5.2.3
+@node Q5.2.3, Q5.2.4, Q5.2.2, Miscellaneous
 @unnumberedsec Q5.2.3: What's NAS, how do I get it?
 
 @xref{Q2.0.3}, for an explanation of the @dfn{Network Audio System}.
 
 
-@node Q5.2.4
+@node Q5.2.4, Q5.3.1, Q5.2.3, Miscellaneous
 @unnumberedsec Q5.2.4: Sunsite sounds don't play.
 
 I'm having some trouble with sounds I've downloaded from sunsite.  They
@@ -5767,7 +5767,7 @@ need to perform a 'null' conversion from SunAudio to SunAudio.
 @end quotation
 
 
-@node Q5.3.1
+@node Q5.3.1, Q5.3.2, Q5.2.4, Miscellaneous
 @unnumberedsec 5.3: Miscellaneous
 @unnumberedsec Q5.3.1: How do you make SXEmacs indent CL if-clauses correctly?
 
@@ -5800,13 +5800,13 @@ Here's how:
 @end lisp
 
 
-@node Q5.3.2
+@node Q5.3.2, Q5.3.3, Q5.3.1, Miscellaneous
 @unnumberedsec Q5.3.2: [This question intentionally left blank]
 
 Obsolete question, left blank to avoid renumbering.
 
 
-@node Q5.3.3
+@node Q5.3.3, Q5.3.4, Q5.3.2, Miscellaneous
 @unnumberedsec Q5.3.3: How can I print WYSIWYG a font-locked buffer?
 
 Font-lock looks nice.  How can I print (WYSIWYG) the highlighted
@@ -5819,7 +5819,7 @@ on its use, in
 being the default location of an installed ps-print package.
 
 
-@node Q5.3.4
+@node Q5.3.4, Q5.3.5, Q5.3.3, Miscellaneous
 @unnumberedsec Q5.3.4: Getting @kbd{M-x lpr} to work with postscript printer.
 
 My printer is a Postscript printer and @code{lpr} only works for
@@ -5838,7 +5838,7 @@ free?), replace with the command you do use.  Note also that some
 versions of a2ps require a @samp{-Pprinter} to ensure spooling.
 
 
-@node Q5.3.5
+@node Q5.3.5, Q5.3.6, Q5.3.4, Miscellaneous
 @unnumberedsec Q5.3.5: How do I specify the paths that SXEmacs uses for finding files?
 
 You can specify what paths to use by using a number of different flags
@@ -5854,13 +5854,13 @@ description of the SXEmacs install tree, please consult the @file{NEWS}
 file.
 
 
-@node Q5.3.6
+@node Q5.3.6, Q5.3.7, Q5.3.5, Miscellaneous
 @unnumberedsec Q5.3.6: [This question intentionally left blank]
 
 Obsolete question, left blank to avoid renumbering.
 
 
-@node Q5.3.7
+@node Q5.3.7, Q5.3.8, Q5.3.6, Miscellaneous
 @unnumberedsec Q5.3.7: Can I have the end of the buffer delimited in some way?
 
 Say, with: @samp{[END]}?
@@ -5923,7 +5923,7 @@ Note that you might want to make this a function, and put it to a hook.
 We leave that as an exercise for the reader.
 
 
-@node Q5.3.8
+@node Q5.3.8, Q5.3.9, Q5.3.7, Miscellaneous
 @unnumberedsec Q5.3.8: How do I insert today's date into a buffer?
 
 Like this:
@@ -5933,7 +5933,7 @@ Like this:
 @end lisp
 
 
-@node Q5.3.9
+@node Q5.3.9, Q5.3.10, Q5.3.8, Miscellaneous
 @unnumberedsec Q5.3.9: Are only certain syntactic character classes available for abbrevs?
 
 @c @email{gutschk@@uni-muenster.de, Markus Gutschke} writes:
@@ -5956,7 +5956,7 @@ Like this:
 Does not apply anymore.
 
 
-@node Q5.3.10
+@node Q5.3.10, Q5.3.11, Q5.3.9, Miscellaneous
 @unnumberedsec Q5.3.10: How can I get those oh-so-neat X-Face lines?
 
 Firstly there is an ftp site which describes X-faces and has the
@@ -6044,7 +6044,7 @@ Paul Harrison, and
 Vegard Vesterheim
 
 
-@node Q5.3.11
+@node Q5.3.11, Q5.3.12, Q5.3.10, Miscellaneous
 @unnumberedsec Q5.3.11: How do I add new Info directories?
 
 You use something like:
@@ -6090,7 +6090,7 @@ texi2html and read it from a web browser like Lynx or W3.
 @end quotation
 
 
-@node Q5.3.12
+@node Q5.3.12,  , Q5.3.11, Miscellaneous
 @unnumberedsec Q5.3.12: What do I need to change to make printing work?
 
 For regular printing there are two variables that can be customized.
@@ -6145,7 +6145,7 @@ by Sebastian Freundt and others.
 * Q6.0.1::      Why did SXEmacs cut all support for Windows?
 @end menu
 
-@node Q6.0.1
+@node Q6.0.1,  , MS Windows, MS Windows
 @unnumberedsec Q6.0.1: Why did SXEmacs cut all support for Windows?
 
 Short answer:
@@ -6164,7 +6164,7 @@ been optimised (or sometimes even de-optimised) merely to take some
 windows concept into account.
 
 
-@node Current Events, , MS Windows, Top
+@node Current Events,  , MS Windows, Top
 @unnumbered 7 What the Future Holds
 
 This is part 7 of the SXEmacs Frequently Asked Questions list.  This
@@ -6191,13 +6191,13 @@ in the same directory, or @file{OONEWS} for really old versions.
 * Q7.0.6::      What's new in SXEmacs 22.1.4?
 @end menu
 
-@node Q7.0.1
+@node Q7.0.1, Q7.0.2, Current Events, Current Events
 @unnumberedsec Q7.0.1: What new features will be in SXEmacs soon?
 
 @strong{YOU} tell @strong{ME}!
 
 
-@node Q7.0.2
+@node Q7.0.2, Q7.0.3, Q7.0.1, Current Events
 @unnumberedsec Q7.0.2: What's new in SXEmacs 22.1.0?
 
 This is the first release of SXEmacs.  It is a fork of XEmacs
@@ -6205,7 +6205,7 @@ This is the first release of SXEmacs.  It is a fork of XEmacs
 the code it descended from, XEmacs 21.4.16, are purely renaming
 "XEmacs" to "SXEmacs".
 
-@node Q7.0.3
+@node Q7.0.3, Q7.0.4, Q7.0.2, Current Events
 @unnumberedsec Q7.0.3: What's new in SXEmacs 22.1.1?
 
 @itemize @bullet
@@ -6262,7 +6262,7 @@ Sync up with XEmacs 21.4 -- Various Developers.
 @end itemize
 
 
-@node Q7.0.4
+@node Q7.0.4, Q7.0.5, Q7.0.3, Current Events
 @unnumberedsec Q7.0.4: What's new in SXEmacs 22.1.2?
 
 @itemize @bullet
@@ -6385,7 +6385,7 @@ PostgreSQL updates (mainly doc updates) -- Frenudt.
 @end itemize
 
 
-@node Q7.0.5
+@node Q7.0.5, Q7.0.6, Q7.0.4, Current Events
 @unnumberedsec Q7.0.5: What's new in SXEmacs 22.1.3?
 
 @itemize @bullet
@@ -6533,7 +6533,7 @@ GTK (version 1.2) build fixes -- Youngs.
 @end itemize
 
 
-@node Q7.0.6
+@node Q7.0.6,  , Q7.0.5, Current Events
 @unnumberedsec Q7.0.6: What's new in SXEmacs 22.1.4?
 
 @itemize @bullet
index 6373a72..73135ad 100644 (file)
@@ -34,7 +34,7 @@ file to do the customization in each session.  @xref{Init File}.
                      behavior of SXEmacs.
 @end menu
 
-@node Minor Modes
+@node Minor Modes, Variables, Customization, Customization
 @section Minor Modes
 @cindex minor modes
 
@@ -74,7 +74,7 @@ mode, it changes to @samp{FOOGAR}, instead of @samp{FOOGBAR}.@refill
 as you type them.  For example, @samp{amd} might expand to @samp{abbrev
 mode}.  @xref{Abbrevs}, for full information.
 
-@node Variables
+@node Variables, Keyboard Macros, Minor Modes, Customization
 @section Variables
 @cindex variable
 @cindex option
@@ -114,7 +114,7 @@ the left margin) to be used by the fill commands (@pxref{Filling}).
 * File Variables::      How files can specify variable values.
 @end menu
 
-@node Examining
+@node Examining, Easy Customization, Variables, Variables
 @subsection Examining and Setting Variables
 @cindex setting variables
 
@@ -172,7 +172,7 @@ sets @code{fill-column} to 75, as if you had executed the Lisp expression
   Setting variables in this way, like all means of customizing Emacs
 except where explicitly stated, affects only the current Emacs session.
 
-@node Easy Customization
+@node Easy Customization, Edit Options, Examining, Variables
 @subsection Easy Customization Interface
 
 @findex customize
@@ -195,7 +195,7 @@ structure as of yet, but we are adding the rest.)
                                 options, faces, or groups.
 @end menu
 
-@node Customization Groups
+@node Customization Groups, Changing an Option, Easy Customization, Easy Customization
 @subsubsection Customization Groups
 @cindex customization groups
 
@@ -267,7 +267,7 @@ that active field creates an ordinary customization buffer showing just
 that group and its contents, just that option, or just that face.
 This is the way to set values in it.
 
-@node Changing an Option
+@node Changing an Option, Face Customization, Customization Groups, Easy Customization
 @subsubsection Changing an Option
 
   Here is an example of what a user option looks like in the
@@ -429,7 +429,7 @@ Invoking @samp{[Done]} buries this customization buffer.  Each of the
 other fields performs an operation---set, save or reset---on each of the
 items in the buffer that could meaningfully be set, saved or reset.
 
-@node Face Customization
+@node Face Customization, Specific Customization, Changing an Option, Easy Customization
 @subsubsection Customizing Faces
 @cindex customizing faces
 @cindex bold font
@@ -491,7 +491,7 @@ get from invoking @samp{[State]}.
 @c you don't want to change that attribute.  Type @samp{none} if you want
 @c to clear out the attribute.
 
-@node Specific Customization
+@node Specific Customization,  , Face Customization, Easy Customization
 @subsubsection Customizing Specific Items
 
   Instead of finding the options you want to change by moving down
@@ -551,7 +551,7 @@ you can use two special commands to revisit your previous changes.  Use
 saved.  Use @kbd{M-x customize-customized} to look at the options and
 faces that you have set but not saved.
 
-@node Edit Options
+@node Edit Options, Locals, Easy Customization, Variables
 @subsection Editing Variable Values
 
 @table @kbd
@@ -603,7 +603,7 @@ Set the variable point is in or near to @code{nil}.
 Move to the next or previous variable.
 @end table
 
-@node Locals
+@node Locals, File Variables, Edit Options, Variables
 @subsection Local Variables
 
 @table @kbd
@@ -688,7 +688,7 @@ the case of:
 (default-value 'fill-column)
 @end example
 
-@node File Variables
+@node File Variables,  , Locals, Variables
 @subsection Local Variables in Files
 @cindex local variables in files
 
@@ -787,7 +787,7 @@ query.
 The command @code{M-x normal-mode} always obeys local variables lists
 and ignores this variable.
 
-@node Keyboard Macros
+@node Keyboard Macros, Key Bindings, Variables, Customization
 @section Keyboard Macros
 
 @cindex keyboard macros
@@ -837,7 +837,7 @@ set of commands again by invoking the macro.
 * Kbd Macro Query::     Keyboard macros that do different things each use.
 @end menu
 
-@node Basic Kbd Macro
+@node Basic Kbd Macro, Save Kbd Macro, Keyboard Macros, Keyboard Macros
 @subsection Basic Use
 
 @kindex C-x (
@@ -886,7 +886,7 @@ to the end of its definition by typing @kbd{C-u C-x (}.  This is equivalent
 to plain @kbd{C-x (} followed by retyping the whole definition so far.  As
 a consequence it re-executes the macro as previously defined.
 
-@node Save Kbd Macro
+@node Save Kbd Macro, Kbd Macro Query, Basic Kbd Macro, Keyboard Macros
 @subsection Naming and Saving Keyboard Macros
 
 @findex name-last-kbd-macro
@@ -922,7 +922,7 @@ additional Lisp code to record the keys (if any) that you have bound to the
 keyboard macro, so that the macro is reassigned the same keys when you
 load the file.
 
-@node Kbd Macro Query
+@node Kbd Macro Query,  , Save Kbd Macro, Keyboard Macros
 @subsection Executing Macros With Variations
 
 @kindex C-x q
@@ -958,7 +958,7 @@ inside the recursive edit does not become part of the macro.  During macro
 execution, the recursive edit gives you a chance to do some particularized
 editing.  @xref{Recursive Edit}.
 
-@node Key Bindings
+@node Key Bindings, Syntax, Keyboard Macros, Customization
 @section Customizing Key Bindings
 
   This section deals with the @dfn{keymaps} that define the bindings
@@ -981,7 +981,7 @@ hyphens.
                 beginners from surprises.
 @end menu
 
-@node Keymaps
+@node Keymaps, Rebinding, Key Bindings, Key Bindings
 @subsection Keymaps
 @cindex keymap
 
@@ -1085,7 +1085,7 @@ definition overriding the global one.  The character after the
 for @kbd{C-x} commands contains @code{nil}, the definition from the global
 keymap for @kbd{C-x} commands is used.@refill
 
-@node Rebinding
+@node Rebinding, Disabling, Keymaps, Key Bindings
 @subsection Changing Key Bindings
 @cindex key rebinding, this session
 @cindex rebinding keys, this session
@@ -1102,7 +1102,7 @@ local map, which affects all buffers using the same major mode.
 * Key Bindings Using Strings:: Using Strings for Changing Key Bindings
 @end menu
 
-@node Interactive Rebinding
+@node Interactive Rebinding, Programmatic Rebinding, Rebinding, Rebinding
 @subsubsection Changing Key Bindings Interactively
 @findex global-set-key
 @findex local-set-key
@@ -1165,7 +1165,7 @@ arguments, an old definition, a new definition, and a keymap, and
 redefines in that keymap all keys that were previously defined with the
 old definition to have the new definition instead.
 
-@node Programmatic Rebinding
+@node Programmatic Rebinding, Key Bindings Using Strings, Interactive Rebinding, Rebinding
 @subsubsection Changing Key Bindings Programmatically
 
   You can use the functions @code{global-set-key} and @code{define-key}
@@ -1264,7 +1264,7 @@ Here are some examples of programmatically binding keys:
 @comment ;;
 @comment (global-set-key "\^J" 'my-command)
 
-@node Key Bindings Using Strings
+@node Key Bindings Using Strings,  , Programmatic Rebinding, Rebinding
 @subsubsection Using Strings for Changing Key Bindings
 
   For backward compatibility, you can still use strings to represent
@@ -1319,7 +1319,7 @@ similar fashion:
         control @@      control space
 @end example
 
-@node Disabling
+@node Disabling,  , Rebinding, Key Bindings
 @subsection Disabling Commands
 @cindex disabled command
 
@@ -1367,7 +1367,7 @@ invoke it; it also applies if the command is invoked using @kbd{M-x}.
 Disabling a command has no effect on calling it as a function from Lisp
 programs.
 
-@node Syntax
+@node Syntax, Init File, Key Bindings, Customization
 @section The Syntax Table
 @cindex syntax table
 
@@ -1386,7 +1386,7 @@ length 256 whose elements are numbers.
 * Change: Syntax Change.  How to change the information.
 @end menu
 
-@node Syntax Entry
+@node Syntax Entry, Syntax Change, Syntax, Syntax
 @subsection Information About Each Character
 
   The syntax table entry for a character is a number that encodes six
@@ -1484,7 +1484,7 @@ to @code{nil} in modes where comment-terminator sequences are liable to
 appear where there is no comment, for example, in Lisp mode where the
 comment terminator is a newline but not every newline ends a comment.
 
-@node Syntax Change
+@node Syntax Change,  , Syntax Entry, Syntax
 @subsection Altering Syntax Information
 
   It is possible to alter a character's syntax table entry by storing a new
@@ -1536,7 +1536,7 @@ character includes both the string you have to pass to
 @code{modify-syntax-entry} to set up that character's current syntax,
 and some English to explain that string if necessary.
 
-@node Init File
+@node Init File, Audible Bell, Syntax, Customization
 @section The Init File
 @cindex init file
 @cindex init directory
@@ -1573,7 +1573,7 @@ byte-compile it to @file{init.elc}.
 * Terminal Init::   Each terminal type can have an init file.
 @end menu
 
-@node Init Syntax
+@node Init Syntax, Init Examples, Init File, Init File
 @subsection Init File Syntax
 
   The init file contains one or more Lisp function call
@@ -1631,7 +1631,7 @@ require one and some contexts require the other.
 Write a single-quote (') followed by the Lisp object you want.
 @end table
 
-@node Init Examples
+@node Init Examples, Terminal Init, Init Syntax, Init File
 @subsection Init File Examples
 
   Here are some examples of doing certain commonly desired things with
@@ -1794,7 +1794,7 @@ Enable the use of the command @code{eval-expression} without confirmation.
 @end example
 @end itemize
 
-@node Terminal Init
+@node Terminal Init,  , Init Examples, Init File
 @subsection Terminal-Specific Initialization
 
   Each terminal type can have a Lisp library to be loaded into Emacs when
@@ -1830,7 +1830,7 @@ read.  @xref{Init File}.  You can set the value in the init file to
 override part of any of the terminal-specific libraries and to define
 initializations for terminals that do not have a library.@refill
 
-@node Audible Bell
+@node Audible Bell, Faces, Init File, Customization
 @section Changing the Bell Sound
 @cindex audible bell, changing
 @cindex bell, changing
@@ -1939,7 +1939,7 @@ You type something other than @code{yes} or @code{no}
 @end table
 
 @comment  node-name,  next,  previous,  up
-@node Faces
+@node Faces, Frame Components, Audible Bell, Customization
 @section Faces
 
 SXEmacs has objects called extents and faces.  An @dfn{extent}
@@ -2082,7 +2082,7 @@ to make underlining an attribute of the face or not. If the optional
 @var{frame} argument is provided, the face is changed only in that
 frame; otherwise, it is changed in all frames.
 
-@node Frame Components
+@node Frame Components, X Resources, Faces, Customization
 @section Frame Components
 
 You can control the presence and position of most frame components, such
@@ -2092,7 +2092,7 @@ This section is not written yet.  Try the Lisp Reference Manual:
 @ref{Menubar,,,lispref,}, @ref{Toolbar Intro,,,lispref,}, and
 @ref{Gutter Intro,,,lispref,}.
 
-@node X Resources
+@node X Resources,  , Frame Components, Customization
 @section X Resources
 @cindex X resources
 @findex x-create-frame
@@ -2145,7 +2145,7 @@ Emacs*FRAME-NAME.parameter: value
 * Menubar Resources::      Specifying resources for the menubar.
 @end menu
 
-@node Geometry Resources
+@node Geometry Resources, Iconic Resources, X Resources, X Resources
 @subsection Geometry Resources
 
 To make the default size of all Emacs frames be 80 columns by 55 lines,
@@ -2225,7 +2225,7 @@ This is rather complicated, but it does seem to provide the most
 intuitive behavior with respect to the default sizes and positions of
 frames created in various ways.
 
-@node Iconic Resources
+@node Iconic Resources, Resource List, Geometry Resources, X Resources
 @subsection Iconic Resources
 
 Analogous to @code{-geometry}, the @code{-iconic} command-line option
@@ -2234,7 +2234,7 @@ always applies to the first frame created regardless of its name.
 However, it is possible to set the iconic flag on particular frames (by
 name) by using the @code{Emacs*FRAME-NAME.iconic} resource.
 
-@node Resource List
+@node Resource List, Face Resources, Iconic Resources, X Resources
 @subsection Resource List
 
 Emacs frames accept the following resources:
@@ -2371,7 +2371,7 @@ resources are used to initialize the variables
 @code{x-pointer-foreground-color} and @code{x-pointer-background-color}.
 @end table
 
-@node Face Resources
+@node Face Resources, Widgets, Resource List, X Resources
 @subsection Face Resources
 
 The attributes of faces are also per-frame. They can be specified as:
@@ -2492,7 +2492,7 @@ versions.  All X fonts can be referred to via XLFD-style names, so you
 should use those forms.  See the man pages for @samp{X(1)},
 @samp{xlsfonts(1)}, and @samp{xfontsel(1)}.
 
-@node Widgets
+@node Widgets, Menubar Resources, Face Resources, X Resources
 @subsection Widgets
 
 There are several structural widgets between the terminal EmacsFrame
@@ -2513,7 +2513,7 @@ where INVOCATION-NAME is the terminal component of the name of the
 SXEmacs executable (usually @samp{sxemacs}), and
 @samp{x-emacs-application-class} is generally @samp{Emacs}.
 
-@node Menubar Resources
+@node Menubar Resources,  , Widgets, X Resources
 @subsection Menubar Resources
 
 As the menubar is implemented as a widget which is not a part of SXEmacs
index c77b542..fd8aab2 100644 (file)
@@ -99,7 +99,7 @@ window, usually together with some documentation.
                         operations.
 @end menu
 
-@node File Menu
+@node File Menu, Edit Menu, Pull-down Menus, Pull-down Menus
 @subsection The File Menu
 
 @cindex File menu
@@ -424,7 +424,7 @@ equivalent for each of the choices you have when using @kbd{C-h}.
 The Help menu also gives access to UNIX online manual pages via the
 @b{UNIX Manual Page} option.
 
-@node Menu Customization
+@node Menu Customization,  , Help Menu, Pull-down Menus
 @subsection Customizing SXEmacs Menus
 
 You can customize any of the pull-down menus by adding or removing menu
index e04c018..824aeee 100644 (file)
@@ -870,7 +870,7 @@ class browser.  @xref{Top,,, ebrowse, Ebrowse User's Manual}.
 * List Tags::          Listing and finding tags defined in a file.
 @end menu
 
-@node Tag Syntax
+@node Tag Syntax, Create Tags Table, Tags, Tags
 @subsection Source File Tag Syntax
 
   Here is how tag syntax is defined for the most popular languages:
index 4973427..238924e 100644 (file)
@@ -27,7 +27,8 @@ results, provided the printed document carries copying permission
 notice identical to this one except for the removal of this paragraph
 (this paragraph not being relevant to the printed manual).
 
-@end ignore Permission is granted to copy and distribute modified
+@end ignore
+Permission is granted to copy and distribute modified
 versions of this manual under the conditions for verbatim copying,
 provided also that the sections entitled ``Distribution'' and ``GNU
 General Public License'' are included exactly as in the original, and
@@ -96,7 +97,7 @@ the author instead of in the original English.
 SXEmacs is the extensible, customizable, self-documenting real-time
 display editor.  This Info file describes how to edit with Emacs
 and some of how to customize it, but not how to extend it.  It
-corresponds to: v22.1.15
+corresponds to: v22.1.16
 
 Although, it hasn't had a complete rewrite for quite some time.
 
index 9d75782..f6aa06d 100644 (file)
@@ -344,14 +344,18 @@ int main(int argc, char *argv[])
                int retcode = popmail(inname + 3, outname, poppass);
                exit(retcode);
        }
-       setuid(getuid());
+       if (0 != setuid(getuid())) {
+               exit(1);
+       }
 #endif                         /* MAIL_USE_POP */
 
 #ifndef DISABLE_DIRECT_ACCESS
 
 
        if (fork() == 0) {
-               setuid(getuid());
+               if (0 != setuid(getuid())) {
+                       exit(1);
+               }
 
                VERBOSE(("opening input file\n"));
 
index faa1730..9806abd 100644 (file)
@@ -76,16 +76,16 @@ corelispels =                                                               \
        build-rpt.el byte-optimize.el bytecomp-runtime.el bytecomp.el   \
        callers-of-rpt.el cl-compat.el cl-extra.el cl-macs.el cl-seq.el \
        cl.el cmdloop.el code-cmds.el code-files.el code-process.el     \
-       coding.el compat.el config.el console.el cus-dep.el             \
-       cus-edit.el cus-face.el cus-file.el cus-load.el cus-start.el    \
-       custom.el derived.el device.el dialog-items.el dialog.el        \
-       disass.el disp-table.el dragdrop.el easy-mmode.el easymenu.el   \
-       emod-utils.el etags.el events.el extents.el faces.el ffi.el     \
-       files-nomule.el files.el fill.el float-sup.el font-lock.el      \
-       font-menu.el font.el fontl-hooks.el format.el frame.el          \
-       glyphs.el gnuserv.el gpm.el gui.el gutter-items.el gutter.el    \
-       help-macro.el help-nomule.el help.el hyper-apropos.el indent.el \
-       info.el isearch-mode.el iso8859-1.el issue-tracker.el           \
+       coding.el compat.el config.el console.el const-aliases.el       \
+       cus-dep.el cus-edit.el cus-face.el cus-file.el cus-load.el      \
+       cus-start.el custom.el derived.el device.el dialog-items.el     \
+       dialog.el disass.el disp-table.el dragdrop.el easy-mmode.el     \
+       easymenu.el emod-utils.el etags.el events.el extents.el         \
+       faces.el ffi.el files-nomule.el files.el fill.el float-sup.el   \
+       font-lock.el font-menu.el font.el fontl-hooks.el format.el      \
+       frame.el glyphs.el gnuserv.el gpm.el gui.el gutter-items.el     \
+       gutter.el help-macro.el help-nomule.el help.el hyper-apropos.el \
+       indent.el info.el isearch-mode.el iso8859-1.el issue-tracker.el \
        itimer-autosave.el itimer.el keydefs.el keymap.el ldap.el       \
        lib-complete.el lisp-initd.el lisp-mnt.el lisp-mode.el lisp.el  \
        list-mode.el loaddefs.el loadhist.el map-ynp.el                 \
index 157c956..74098d1 100644 (file)
@@ -90,6 +90,7 @@
     ;; to sort the stuff below, use M-x sort-regexp-fields RET
     ;; ^.*$ RET (\([a-z]*\) RET
     (adrian    "Adrian Aichner"    "adrian@xemacs.org")
+    (aidan     "Aidan Kehoe"       "aidan@xemacs.org")
     (aj        "Andreas Jaeger"    "aj@xemacs.org")
     (ajc       "Andrew Cosgriff"   "ajc@xemacs.org")
     (alastair  "Alastair Houghton" "alastair@xemacs.org")
 
 (defvar about-current-release-maintainers
   ;; this list should not necessarily be in sorted order.
-  '(steve hroptatyr njsf lg horst))
+  '(steve njsf horst hroptatyr lg))
 
 (defvar about-other-current-hackers '(erik hynek))
 
     (rossini    . "http://faculty.washington.edu/rossini/")
     (steve      . "http://www.steveyoungs.com/")
     (steve-emchat . "http://www.emchat.org/")
-    (steve-g+   . "http://plus.steveyoungs.com/about/")
+    (steve-g+   . "https://plus.google.com/u/0/+SteveYoungs")
+    (steve-fb   . "https://facebook.com/steve.r.youngs/")
+    (steve-li   . "http://www.linkedin.com/in/steveyoungs")
     (steve-inits . "http://bastard.steveyoungs.com/~steve/SXEmacs/htmlinits/")
-    (steve-twit . "https://twitter.com/#!/SteveYoungs")
+    (steve-twit . "https://twitter.com/SteveYoungs")
     (stigb      . "http://www.tihlde.hist.no/~stigb/")
     (sxemacs    . "http://www.sxemacs.org/")
     (sxemacs-shop . "http://store.sxemacs.org/")
@@ -1282,16 +1285,13 @@ programming languages and their implementation, and hopes that one day
 XEmacs will speak Scheme.\n"))
     (steve
      (widget-insert "
-I live in Brisbane, Australia with my wife, Michelle, our daughter,
-Kaitlyn, and our son, Blake.
+I live in Brisbane, Australia with my wife, Michelle, and our children,
+Kaitlyn and Blake.
 
-In past lives, I've been a bank officer, car salesman, insurance
-agent, managed a computer firm and owned and operated my own
-business.  I now divide my time between my family, planning my
-next business, and maintaining a few open source projects.
-
-I am also having delusions of grandeur over becoming an honest to
-goodness author of fiction.  You know... books 'n' stories 'n' shit.
+In past lives, I've been a bank officer, car salesman, insurance agent,
+managed a computer firm and owned and operated my own business.  I now
+divide my time between my family, planning my next business, writing,
+and maintaining a few open source projects.
 
 "
                    (about-with-face "My current open source obsessions are:"
@@ -1318,12 +1318,18 @@ goodness author of fiction.  You know... books 'n' stories 'n' shit.
                    (about-with-face
                     "More of me on the Interwebz:\n\n"
                     'font-lock-warning-face))
-     (widget-insert (about-with-face "   My Blog:\t\t"
+     ; (widget-insert (about-with-face "   My Blog:\t\t"
+     ;                              'font-lock-string-face))
+     ; (about-url-link 'steve nil "Visit my infrequently updated blog")
+     (widget-insert (about-with-face "   Facebook:\t\t"
                                     'font-lock-string-face))
-     (about-url-link 'steve nil "Visit my infrequently updated blog")
+     (about-url-link 'steve-fb nil "My Facebook Profile")
      (widget-insert (about-with-face "\n   Google+:\t\t"
                                     'font-lock-string-face))
      (about-url-link 'steve-g+ nil "My Google+ Profile")
+     (widget-insert (about-with-face "\n   LinkedIn:\t\t"
+                                    'font-lock-string-face))
+     (about-url-link 'steve-li nil "My LinkedIn Profile")
      (widget-insert (about-with-face "\n   Twitter:\t\t"
                                     'font-lock-string-face))
      (about-url-link 'steve-twit nil "Follow me on Twitter")
index 52bbd4b..e2f38ea 100644 (file)
@@ -550,7 +550,8 @@ Updates AUTOLOADS-DONE and returns the new value."
           (let ((begin (point)))
             (forward-sexp)
             (forward-line 1)
-            (princ (buffer-substring begin (point)) outbuf)))
+            (princ (buffer-substring begin (point)) outbuf))
+          (setq autoloads-done (cons '<immediate> autoloads-done)))
          (t
           (princ (buffer-substring
                   (progn
index 35f531a..81b0482 100644 (file)
@@ -77,7 +77,7 @@
         directories)
     (mapfam
      #'(lambda (f)
-        (let ((d (car (last (split-string-by-char (file-dirname f) ?/) 2))))
+        (let ((d (file-basename (file-dirname f))))
           (unless (bloom-owns-p dir-bloom d)
             (bloom-add dir-bloom d)
             (setq directories (cons d directories)))))
diff --git a/lisp/const-aliases.el b/lisp/const-aliases.el
new file mode 100644 (file)
index 0000000..379d5ca
--- /dev/null
@@ -0,0 +1,40 @@
+;;; const-aliases --- define alias for C defconsts to allow let-bind
+
+;; Copyright (C) 2015 Nelson Ferreira
+
+;; Author: Nelson Ferreira <nelson.ferreira@ieee.org>
+;; Maintainer: SXEmacs Development Team
+;; Keywords: internal
+
+;; This file is part of SXEmacs.
+
+;; SXEmacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; SXEmacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Synched up with: Not synched with FSF.
+
+;;; Commentary:
+
+;; The following code is required at startup to define all the
+;; necessary defconst alias for C DEFVAR_CONST that we wish to
+;; allow let-bind to succeed.
+
+\f
+;;; Code:
+
+(when (featurep 'bigfr)
+  (defconst pi bigfr-pi "The value of Pi (3.1415926...)")
+  (defconst e euler "The value of e (2.7182818...)"))
+
+(provide 'const-aliases)
+
index dbb0202..fb40c8d 100644 (file)
@@ -235,15 +235,16 @@ object with key 'ctx to keep it accessible."
 (defvar curl:download-history nil
   "History for `curl:download' and `curl:download&'.")
 
-(define-ffi-callback curl:cb-write-to-buffer int
-  ((ptr pointer) (size int) (nmemb int) (stream pointer))
-  "Writer to STREAM buffer."
-  (let ((buf (ffi-pointer-to-lisp-object stream))
-       (rsz (* size nmemb)))
-    (when (and (positivep rsz) (buffer-live-p buf))
-      (with-current-buffer buf
-       (insert (ffi-get ptr :type (cons 'c-data rsz)))))
-    rsz))
+(ignore-errors
+  (define-ffi-callback curl:cb-write-to-buffer int
+    ((ptr pointer) (size int) (nmemb int) (stream pointer))
+    "Writer to STREAM buffer."
+    (let ((buf (ffi-pointer-to-lisp-object stream))
+         (rsz (* size nmemb)))
+      (when (and (positivep rsz) (buffer-live-p buf))
+       (with-current-buffer buf
+         (insert (ffi-get ptr :type (cons 'c-data rsz)))))
+      rsz)))
 
 ;;;###autoload
 (defun curl:download (url file-or-buffer &rest options)
@@ -269,7 +270,10 @@ works with HTTP URLs."
         (setq options (list :header t :nobody t))))
 
   (let* ((ctx (curl:easy-init))
-        (bufferp (bufferp file-or-buffer))
+        (bufferp (when (bufferp file-or-buffer)
+                   (or (boundp 'curl:cb-write-to-buffer)
+                       (error 'unimplemented 'ffi-make-callback
+                              "for this architecture"))))
         (fs (if bufferp
                 (ffi-lisp-object-to-pointer file-or-buffer)
               (c:fopen (expand-file-name file-or-buffer) "w"))))
@@ -313,7 +317,10 @@ is run.  Functions in there will be called with an argument JOB."
 
   (if (featurep 'workers)
       (let* ((ctx (curl:easy-init))
-            (bufferp (bufferp file-or-buffer))
+            (bufferp (when (bufferp file-or-buffer)
+                       (or (boundp 'curl:cb-write-to-buffer)
+                           (error 'unimplemented 'ffi-make-callback
+                                  "for this architecture"))))
             (fs (if bufferp
                     (ffi-lisp-object-to-pointer file-or-buffer)
                   (c:fopen (expand-file-name file-or-buffer) "w"))))
index bcc7b52..aaebf12 100644 (file)
@@ -476,32 +476,38 @@ BIND specifies bindings for SQL query."
 ;;}}}
 ;;{{{ Custom collations
 
-(define-ffi-callback sqlite-generic-collation 'int
-  ((user-data 'pointer) (len1 'int) (str1 'pointer)
-   (len2 'int) (str2 'pointer))
-  (let ((fun (ffi-pointer-to-lisp-object user-data))
-       (s1 (ffi-get str1 :type (cons 'c-data len1)))
-       (s2 (ffi-get str2 :type (cons 'c-data len2))))
-    (funcall fun s1 s2)))
+(ignore-errors
+  (define-ffi-callback sqlite-generic-collation 'int
+    ((user-data 'pointer) (len1 'int) (str1 'pointer)
+     (len2 'int) (str2 'pointer))
+    (let ((fun (ffi-pointer-to-lisp-object user-data))
+         (s1 (ffi-get str1 :type (cons 'c-data len1)))
+         (s2 (ffi-get str2 :type (cons 'c-data len2))))
+      (funcall fun s1 s2))))
 
 (defun sqlite-create-collation (db name compare-function)
   "For DB register new collation named NAME.
 COMPARE-FUNCTION must get exactly two string arguments and return:
   -1  if first string is less then second
    0  if strings are equal
-   1  if first string is greater then second"
-  (let* ((ccolls (get db 'custom-collations))
-        (colla (assoc name ccolls)))
-    (if colla
-       (setcdr colla compare-function)
-      (put db 'custom-collations
-          (cons (cons name compare-function) ccolls))))
-  (sqlite-check-result
-   (sqlite:create-collation
-    db name sqlite-UTF-8
-    (ffi-lisp-object-to-pointer compare-function)
-    (ffi-callback-fo 'sqlite-generic-collation))
-   (sqlite:errmsg db)))
+   1  if first string is greater then second.
+
+Currently, this is only available on i386."
+  (if (not (boundp 'sqlite-generic-collation))
+      (error 'unimplemented 'ffi-make-callback
+            "for this architecture")
+    (let* ((ccolls (get db 'custom-collations))
+          (colla (assoc name ccolls)))
+      (if colla
+         (setcdr colla compare-function)
+       (put db 'custom-collations
+            (cons (cons name compare-function) ccolls))))
+    (sqlite-check-result
+     (sqlite:create-collation
+      db name sqlite-UTF-8
+      (ffi-lisp-object-to-pointer compare-function)
+      (ffi-callback-fo 'sqlite-generic-collation))
+     (sqlite:errmsg db))))
 
 (defun sqlite-remove-collation (db name)
   "For DB remove collation by NAME."
index ea5ac23..3a3028e 100644 (file)
@@ -249,6 +249,15 @@ Loading an abbrev file sets this to t."
   :type 'boolean
   :group 'find-file)
 
+;;; Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+(defcustom find-directory-functions '(cvs-dired-noselect dired-noselect)
+  "*List of functions to try in sequence to visit a directory.
+Each function is called with the directory name as the sole argument
+and should return either a buffer or nil."
+  :type '(hook :options (cvs-dired-noselect dired-noselect))
+  :group 'find-file)
+;;; End Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+
 ;;;It is not useful to make this a local variable.
 ;;;(put 'find-file-not-found-hooks 'permanent-local t)
 (defvar find-file-not-found-hooks nil
@@ -447,6 +456,30 @@ of the same functionality is available as `split-path', which see."
        (t
         (setq default-directory dir))))
 
+(defun file-name-join (dirname basename)
+  "Return the filename defined by the concatenation of DIRNAME and BASENAME.
+Only one path component separator will ever be used in the result formation.
+
+Can be use to reassemble a file name separated by `file-name-directory'
+`file-name-nondirectory' and `file-dirname' `file-basename'."
+  (when (and (or (null dirname)  (equal 0 (length dirname)))
+            (or (null basename) (equal 0 (length basename))))
+    (error "Both dirname (%S) and basename (%S) empty." dirname basename))
+  (let* ((dir  (if (and dirname (> (length dirname) 0))
+                  (if (equal "/" (substring dirname -1))
+                      (substring dirname 0 -1)
+                    dirname)
+                "."))
+        (base (if (and basename (> (length basename) 0))
+                  (if (equal "/" (substring basename 0 1))
+                      (substring basename 1)
+                    basename)
+                (if (equal dir ".") "." ""))))
+    (if (and (equal 0 (length base))
+            (> (length dir) 0))
+       (concat dir)
+      (concat dir "/" base))))
+
 (defun cd (dir)
   "Make DIR become the current buffer's default directory.
 If your environment includes a `CDPATH' variable, try each one of that
@@ -607,93 +640,231 @@ bottom of the buffer stack."
     (make-frame-visible frame)
     buffer))
 
-(defun find-file (filename &optional codesys)
+;;; Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+(defun switch-to-next-buffer (&optional n)
+  "Switch to the next-most-recent buffer.
+This essentially rotates the buffer list forward.
+N (interactively, the prefix arg) specifies how many times to rotate
+forward, and defaults to 1.  Buffers whose name begins with a space
+\(i.e. \"invisible\" buffers) are ignored."
+  ;; Here is a different interactive spec.  Look up the function
+  ;; `interactive' (i.e. `C-h f interactive') to understand how this
+  ;; all works.
+  (interactive "p")
+  (dotimes (n (or n 1))
+    (loop
+      do (bury-buffer (car (buffer-list)))
+      while (funcall buffers-tab-omit-function (car (buffer-list))))
+    (switch-to-buffer (car (buffer-list)))))
+
+(defun switch-to-previous-buffer (&optional n)
+  "Switch to the previously most-recent buffer.
+This essentially rotates the buffer list backward.
+N (interactively, the prefix arg) specifies how many times to rotate
+backward, and defaults to 1.  Buffers whose name begins with a space
+\(i.e. \"invisible\" buffers) are ignored."
+  (interactive "p")
+  (dotimes (n (or n 1))
+    (loop
+      do (switch-to-buffer (car (last (buffer-list))))
+      while (funcall buffers-tab-omit-function (car (buffer-list))))))
+
+;;; FIXME: Could this looping be done with #'mapfam in a nicer way.
+(defun switch-to-next-buffer-in-group (&optional n)
+  "Switch to the next-most-recent buffer in the current group.
+This essentially rotates the buffer list forward.
+N (interactively, the prefix arg) specifies how many times to rotate
+forward, and defaults to 1.  Buffers whose name begins with a space
+\(i.e. \"invisible\" buffers) are ignored."
+  (interactive "p")
+  (dotimes (n (or n 1))
+    (let ((curbuf (car (buffer-list))))
+      (loop
+       do (bury-buffer (car (buffer-list)))
+       while (or (funcall buffers-tab-omit-function (car (buffer-list)))
+                 (not (mapcar
+                       #'(lambda (f)
+                           (funcall f curbuf (car (buffer-list))))
+                       buffers-tab-filter-functions)))))
+    (switch-to-buffer (car (buffer-list)))))
+
+;;; FIXME: Could this looping be done with #'mapfam in a nicer way.
+(defun switch-to-previous-buffer-in-group (&optional n)
+  "Switch to the previously most-recent buffer in the current group.
+This essentially rotates the buffer list backward.
+N (interactively, the prefix arg) specifies how many times to rotate
+backward, and defaults to 1.  Buffers whose name begins with a space
+\(i.e. \"invisible\" buffers) are ignored."
+  (interactive "p")
+  (dotimes (n (or n 1))
+    (let ((curbuf (car (buffer-list))))
+      (loop
+       do (switch-to-buffer (car (last (buffer-list))))
+       while (or (funcall buffers-tab-omit-function (car (buffer-list)))
+                 (not (mapcar
+                       #'(lambda (f)
+                           (funcall f curbuf (car (buffer-list))))
+                       buffers-tab-filter-functions)))))))
+
+(defmacro find-file-create-switch-thunk (switch-function)
+  "Mark buffer modified if needed, then call SWITCH-FUNCTION.
+
+The buffer will be marked modified if the file associated with the buffer
+does not exist.  This means that \\[find-file] on a non-existent file will
+create a modified buffer, making \\[save-buffer] sufficient to create the
+file.
+
+SWITCH-FUNCTION should be `switch-to-buffer' or a related function.  This
+function (that is, `find-file-create-switch-thunk') is implemented as a macro
+because we don't have built-in lexical scope, a closure created with
+`lexical-let' will always run as interpreted code.  Though functions created
+by this macro are unlikely to be called in performance-critical contexts.
+
+This function may be called from functions related to `find-file', as well
+as `find-file' itself."
+  `(function
+    (lambda (buffer)
+      (unless (and (buffer-file-name buffer)
+                  (file-exists-p (buffer-file-name buffer)))
+       ;; XEmacs: nonexistent file--qualifies as a modification to the
+       ;; buffer.
+       (set-buffer-modified-p t buffer))
+      (,switch-function buffer))))
+
+(defun find-file (filename &optional codesys wildcards)
   "Edit file FILENAME.
-Switch to a buffer visiting file FILENAME,
-creating one if none already exists.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file.  Interactively,
-with a prefix argument, you will be prompted for the coding system."
-  (interactive "FFind file: \nZCoding system: ")
-  (if codesys
-      (let ((coding-system-for-read
-            (get-coding-system codesys)))
-       (switch-to-buffer (find-file-noselect filename)))
-    (switch-to-buffer (find-file-noselect filename))))
-
-(defun find-file-other-window (filename &optional codesys)
+Switch to a buffer visiting file FILENAME, creating one if none already
+exists.  Optional second argument specifies the coding system to use when
+decoding the file.  Interactively, with a prefix argument, you will be
+prompted for the coding system.
+
+If you do not explicitly specify a coding system, the coding system
+is determined as follows:
+
+1. `coding-system-for-read', if non-nil. (This is used by Lisp programs to
+      temporarily set an overriding coding system and should almost never
+      apply here in `find-file'.)
+2. The result of `insert-file-contents-pre-hook', if non-nil. (This is a
+      complex interface for handling special cases.)
+3. The matching value for this filename from `file-coding-system-alist',
+      if any. (This lets you specify the coding system to be used for
+      files with particular extensions, names, etc.)
+4. `buffer-file-coding-system-for-read', if non-nil. (This is the global
+      default -- normally `undecided', so the built-in auto-detection
+      mechanism can do its thing.)
+5. The coding system 'raw-text.
+
+See `insert-file-contents' for more details about how the process of
+determining the coding system works.
+
+Interactively, or if WILDCARDS is non-nil in a call from Lisp,
+expand wildcards (if any) and visit multiple files.  Wildcard expansion
+can be suppressed by setting `find-file-wildcards' to `nil'."
+  (interactive (list (read-file-name "Find file: ")
+                    (and current-prefix-arg
+                         (read-coding-system "Coding system: "))
+                    t))
+  (and codesys (setq codesys (check-coding-system codesys)))
+  (let* ((coding-system-for-read (or codesys coding-system-for-read))
+        (value (find-file-noselect filename nil nil wildcards))
+        (thunk (find-file-create-switch-thunk switch-to-buffer)))
+    (if (listp value)
+       (mapcar thunk (nreverse value))
+      (funcall thunk value))))
+
+(defun find-file-other-window (filename &optional codesys wildcards)
   "Edit file FILENAME, in another window.
-May create a new window, or reuse an existing one.
-See the function `display-buffer'.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file.  Interactively,
-with a prefix argument, you will be prompted for the coding system."
-  (interactive "FFind file in other window: \nZCoding system: ")
-  (if codesys
-      (let ((coding-system-for-read
-            (get-coding-system codesys)))
-       (switch-to-buffer-other-window (find-file-noselect filename)))
-    (switch-to-buffer-other-window (find-file-noselect filename))))
-
-(defun find-file-other-frame (filename &optional codesys)
+May create a new window, or reuse an existing one.  See the function
+`display-buffer'.  Optional second argument specifies the coding system to
+use when decoding the file.  Interactively, with a prefix argument, you
+will be prompted for the coding system."
+  (interactive (list (read-file-name "Find file in other window: ")
+                    (and current-prefix-arg
+                         (read-coding-system "Coding system: "))
+                    t))
+  (and codesys (setq codesys (check-coding-system codesys)))
+  (let* ((coding-system-for-read (or codesys coding-system-for-read))
+        (value (find-file-noselect filename nil nil wildcards))
+        (list (and (listp value) (nreverse value)))
+        (other-window-thunk (find-file-create-switch-thunk
+                             switch-to-buffer-other-window)))
+    (if list
+       (cons
+        (funcall other-window-thunk (car list))
+        (mapcar (find-file-create-switch-thunk switch-to-buffer) (cdr list)))
+      (funcall other-window-thunk value))))
+
+(defun find-file-other-frame (filename &optional codesys wildcards)
   "Edit file FILENAME, in a newly-created frame.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file.  Interactively,
-with a prefix argument, you will be prompted for the coding system."
-  (interactive "FFind file in other frame: \nZCoding system: ")
-  (if codesys
-      (let ((coding-system-for-read
-            (get-coding-system codesys)))
-       (switch-to-buffer-other-frame (find-file-noselect filename)))
-    (switch-to-buffer-other-frame (find-file-noselect filename))))
-
-(defun find-file-read-only (filename &optional codesys)
+Optional second argument specifies the coding system to use when decoding
+the file.  Interactively, with a prefix argument, you will be prompted for
+the coding system."
+  (interactive (list (read-file-name "Find file in other frame: ")
+                    (and current-prefix-arg
+                         (read-coding-system "Coding system: "))
+                    t))
+  (and codesys (setq codesys (check-coding-system codesys)))
+  (let* ((coding-system-for-read (or codesys coding-system-for-read))
+        (value (find-file-noselect filename nil nil wildcards))
+        (list (and (listp value) (nreverse value)))
+        (other-frame-thunk (find-file-create-switch-thunk
+                            switch-to-buffer-other-frame)))
+    (if list
+       (cons
+        (funcall other-frame-thunk (car list))
+        (mapcar (find-file-create-switch-thunk switch-to-buffer) (cdr list)))
+      (funcall other-frame-thunk value))))
+
+;; No need to keep this macro around in the dumped executable.
+(unintern 'find-file-create-switch-thunk)
+
+(defun find-file-read-only (filename &optional codesys wildcards)
   "Edit file FILENAME but don't allow changes.
 Like \\[find-file] but marks buffer as read-only.
 Use \\[toggle-read-only] to permit editing.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file.  Interactively,
-with a prefix argument, you will be prompted for the coding system."
-  (interactive "fFind file read-only: \nZCoding system: ")
-  (if codesys
-      (let ((coding-system-for-read
-            (get-coding-system codesys)))
-       (find-file filename))
-    (find-file filename))
-  (setq buffer-read-only t)
-  (current-buffer))
-
-(defun find-file-read-only-other-window (filename &optional codesys)
+Optional second argument specifies the coding system to use when decoding
+the file.  Interactively, with a prefix argument, you will be prompted for
+the coding system."
+  (interactive (list (read-file-name "Find file read-only: ")
+                    (and current-prefix-arg
+                         (read-coding-system "Coding system: "))
+                    t))
+  (let ((value (find-file filename codesys wildcards)))
+    (mapc #'(lambda (buffer)
+             (set-symbol-value-in-buffer 'buffer-read-only t buffer))
+         (if (listp value) value (list value)))
+    value))
+
+(defun find-file-read-only-other-window (filename &optional codesys wildcards)
   "Edit file FILENAME in another window but don't allow changes.
 Like \\[find-file-other-window] but marks buffer as read-only.
 Use \\[toggle-read-only] to permit editing.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file.  Interactively,
-with a prefix argument, you will be prompted for the coding system."
-  (interactive "fFind file read-only other window: \nZCoding system: ")
-  (if codesys
-      (let ((coding-system-for-read
-            (get-coding-system codesys)))
-       (find-file-other-window filename))
-    (find-file-other-window filename))
+Optional second argument specifies the coding system to use when decoding
+the file.  Interactively, with a prefix argument, you will be prompted for
+the coding system."
+  (interactive (list (read-file-name "Find file read-only other window: ")
+                    (and current-prefix-arg
+                         (read-coding-system "Coding system: "))
+                    t))
+  (find-file-other-window filename codesys wildcards)
   (setq buffer-read-only t)
   (current-buffer))
 
-(defun find-file-read-only-other-frame (filename &optional codesys)
+(defun find-file-read-only-other-frame (filename &optional codesys wildcards)
   "Edit file FILENAME in another frame but don't allow changes.
 Like \\[find-file-other-frame] but marks buffer as read-only.
 Use \\[toggle-read-only] to permit editing.
-Under XEmacs/Mule, optional second argument specifies the
-coding system to use when decoding the file.  Interactively,
-with a prefix argument, you will be prompted for the coding system."
-  (interactive "fFind file read-only other frame: \nZCoding system: ")
-  (if codesys
-      (let ((coding-system-for-read
-            (get-coding-system codesys)))
-       (find-file-other-frame filename))
-    (find-file-other-frame filename))
+Optional second argument specifies the coding system to use when decoding
+the file.  Interactively, with a prefix argument, you will be prompted for
+the coding system."
+  (interactive (list (read-file-name "Find file read-only other frame: ")
+                    (and current-prefix-arg
+                         (read-coding-system "Coding system: "))
+                    t))
+  (find-file-other-frame filename codesys wildcards)
   (setq buffer-read-only t)
   (current-buffer))
+;;; End Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
 
 (defun find-alternate-file-other-window (filename &optional codesys)
   "Find file FILENAME as a replacement for the file in the next window.
@@ -932,10 +1103,31 @@ conversion, find-file-hooks, automatic uncompression, etc.
   "Find entry in `find-file-magic-files-alist' that matches FILENAME."
   (find filename find-file-magic-files-alist :key #'car
        :test #'(lambda (fn predicate)
-                  (and (file-exists-p fn)
-                       (funcall predicate fn)))))
-
-(defun find-file-noselect (filename &optional nowarn rawfile)
+                 (and (file-exists-p fn)
+                      (funcall predicate fn)))))
+
+;;; Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+(defcustom find-file-wildcards t
+  "*Non-nil means file-visiting commands should handle wildcards.
+For example, if you specify `*.c', that would visit all the files
+whose names match the pattern."
+  :group 'files
+;  :version "20.4"
+  :type 'boolean)
+
+(defcustom find-file-suppress-same-file-warnings nil
+  "*Non-nil means suppress warning messages for symlinked files.
+When nil, Emacs prints a warning when visiting a file that is already
+visited, but with a different name.  Setting this option to t
+suppresses this warning."
+  :group 'files
+;  :version "21.1"
+  :type 'boolean)
+
+;;; FIXME: the #'loop here is generating one of those 'variable G26164
+;;; bound but not referenced' warnings you get from cl loops.  Might
+;;; be able to fix this by using #'mapfam instead. --SY.
+(defun find-file-noselect (filename &optional nowarn rawfile wildcards)
   "Read file FILENAME into a buffer and return the buffer.
 If a buffer exists visiting FILENAME, return that one, but
 verify that the file has not changed since visited or saved.
@@ -943,140 +1135,233 @@ The buffer is not selected, just returned to the caller.
 If NOWARN is non-nil, warning messages will be suppressed.
 If RAWFILE is non-nil, the file is read literally."
   (setq filename (abbreviate-file-name (expand-file-name filename)))
-  ;; Try magic files first
+  ;; SXEmacs addition:: Try magic files first
   (let ((mfa-item (find-file-find-magic filename)))
     (if mfa-item
        (funcall (cdr mfa-item) filename)
-
-      (let* ((buf (get-file-buffer filename))
-            (truename (abbreviate-file-name (file-truename filename)))
-            (number (nthcdr 10 (file-attributes truename)))
+      ;; End SXEmacs magic
+      (if (file-directory-p filename)
+         (or (and find-file-run-dired
+                  (loop for fn in find-directory-functions
+                    for x = (and (fboundp fn)
+                                 (funcall fn
+                                          (if find-file-use-truenames
+                                              (abbreviate-file-name
+                                               (file-truename filename))
+                                            filename)))
+                    if x
+                    return x))
+             (error "%s is a directory" filename))
+       (if (and wildcards
+                find-file-wildcards
+                (not (string-match "\\`/:" filename))
+                (string-match "[[*?]" filename))
+           (let ((files (condition-case nil
+                            (file-expand-wildcards filename t)
+                          (error (list filename))))
+                 (find-file-wildcards nil))
+             (if (null files)
+                 (find-file-noselect filename)
+               (mapcar #'find-file-noselect files)))
+         (let* ((buf (get-file-buffer filename))
+                (truename (abbreviate-file-name (file-truename filename)))
+                (number (nthcdr 10 (file-attributes truename)))
 ;         ;; Find any buffer for a file which has same truename.
 ;         (other (and (not buf) (find-buffer-visiting filename)))
-            (error nil))
-
-;     ;; Let user know if there is a buffer with the same truename.
-;      (if (and (not buf) same-truename (not nowarn))
-;        (message "%s and %s are the same file (%s)"
-;                 filename (buffer-file-name same-truename)
-;                 truename)
-;      (if (and (not buf) same-number (not nowarn))
-;        (message "%s and %s are the same file"
-;                 filename (buffer-file-name same-number))))
-;      ;; Optionally also find that buffer.
-;      (if (or find-file-existing-other-name find-file-visit-truename)
-;        (setq buf (or same-truename same-number)))
-
-       (when (and buf
-                  (or find-file-compare-truenames find-file-use-truenames)
-                  (not nowarn))
-         (save-excursion
-           (set-buffer buf)
-           (if (not (string-equal buffer-file-name filename))
-               (message "%s and %s are the same file (%s)"
-                        filename buffer-file-name
-                        buffer-file-truename))))
-
-       (if buf
-           (or nowarn
-               (verify-visited-file-modtime buf)
-               (cond ((not (file-exists-p filename))
-                      (error "File %s no longer exists!" filename))
-                     ;; Certain files should be reverted automatically
-                     ;; if they have changed on disk and not in the buffer.
-                     ((and (not (buffer-modified-p buf))
-                           (dolist (rx revert-without-query nil)
-                             (when (string-match rx filename)
-                               (return t))))
-                      (with-current-buffer buf
-                        (message "Reverting file %s..." filename)
-                        (revert-buffer t t)
-                        (message "Reverting file %s... done" filename)))
-                     ((yes-or-no-p
-                       (if (string= (file-name-nondirectory filename)
-                                    (buffer-name buf))
-                           (format
-                            (if (buffer-modified-p buf)
-                                (gettext "File %s changed on disk.  Discard your edits? ")
-                              (gettext "File %s changed on disk.  Reread from disk? "))
-                            (file-name-nondirectory filename))
-                         (format
-                          (if (buffer-modified-p buf)
-                              (gettext "File %s changed on disk.  Discard your edits in %s? ")
-                            (gettext "File %s changed on disk.  Reread from disk into %s? "))
-                          (file-name-nondirectory filename)
-                          (buffer-name buf))))
-                      (with-current-buffer buf
-                        (revert-buffer t t)))))
-         ;; Else: we must create a new buffer for filename
-         (save-excursion
-;;; The truename stuff makes this obsolete.
-;;;      (let* ((link-name (car (file-attributes filename)))
-;;;             (linked-buf (and (stringp link-name)
-;;;                              (get-file-buffer link-name))))
-;;;        (if (bufferp linked-buf)
-;;;            (message "Symbolic link to file in buffer %s"
-;;;                     (buffer-name linked-buf))))
-           (setq buf (create-file-buffer filename))
-           ;; Catch various signals, such as QUIT, and kill the buffer
-           ;; in that case.
-           (condition-case data
+                )
+
+;      ;; Let user know if there is a buffer with the same truename.
+;      (if other
+;          (progn
+;            (or nowarn
+;                find-file-suppress-same-file-warnings
+;                (string-equal filename (buffer-file-name other))
+;                (message "%s and %s are the same file"
+;                         filename (buffer-file-name other)))
+;            ;; Optionally also find that buffer.
+;            (if (or find-file-existing-other-name find-file-visit-truename)
+;                (setq buf other))))
+
+           (when (and buf
+                      (or find-file-compare-truenames find-file-use-truenames)
+                      (not find-file-suppress-same-file-warnings)
+                      (not nowarn))
+             (save-excursion
+               (set-buffer buf)
+               (if (not (string-equal buffer-file-name filename))
+                   (message "%s and %s are the same file (%s)"
+                            filename buffer-file-name
+                            buffer-file-truename))))
+
+           (if buf
                (progn
-                 (set-buffer-major-mode buf)
-                 (set-buffer buf)
-                 (erase-buffer)
-                 (condition-case ()
-                     (if rawfile
-                         (insert-file-contents-literally filename t)
-                       (insert-file-contents filename t))
-                   (file-error
-                    (when (and (file-exists-p filename)
-                               (not (file-readable-p filename)))
-                      (signal 'file-error (list "File is not readable" filename)))
-                    (if rawfile
-                        ;; Unconditionally set error
-                        (setq error t)
-                      (or
-                       ;; Run find-file-not-found-hooks until one returns non-nil.
-                       (run-hook-with-args-until-success 'find-file-not-found-hooks)
-                       ;; If they fail too, set error.
-                       (setq error t)))))
-                 ;; Find the file's truename, and maybe use that as visited name.
-                 ;; automatically computed in XEmacs, unless jka-compr was used!
-                 (unless buffer-file-truename
-                   (setq buffer-file-truename truename))
-                 (setq buffer-file-number number)
-                 (and find-file-use-truenames
-                      ;; This should be in C.  Put pathname
-                      ;; abbreviations that have been explicitly
-                      ;; requested back into the pathname.  Most
-                      ;; importantly, strip out automounter /tmp_mnt
-                      ;; directories so that auto-save will work
-                      (setq buffer-file-name (abbreviate-file-name buffer-file-name)))
-                 ;; Set buffer's default directory to that of the file.
-                 (setq default-directory (file-name-directory buffer-file-name))
-                 ;; Turn off backup files for certain file names.  Since
-                 ;; this is a permanent local, the major mode won't eliminate it.
-                 (and (not (funcall backup-enable-predicate buffer-file-name))
-                      (progn
-                        (make-local-variable 'backup-inhibited)
-                        (setq backup-inhibited t)))
-                 (if rawfile
-                     ;; #### FSF 20.3 sets buffer-file-coding-system to
-                     ;; `no-conversion' here.  Should we copy?  It also
-                     ;; makes `find-file-literally' a local variable
-                     ;; and sets it to t.
-                     nil
-                   (after-find-file error (not nowarn))
-                   (setq buf (current-buffer))))
-             (t
-              (kill-buffer buf)
-              (signal (car data) (cdr data))))
-           ))
-       buf))))
-\f
-;; FSF has `insert-file-literally' and `find-file-literally' here.
+                 (or nowarn
+                     (verify-visited-file-modtime buf)
+                     (cond ((not (file-exists-p filename))
+                            (error "File %s no longer exists!" filename))
+                           ;; Certain files should be reverted automatically
+                           ;; if they have changed on disk and not in the buffer.
+                           ((and (not (buffer-modified-p buf))
+                                 (dolist (rx revert-without-query nil)
+                                   (when (string-match rx filename)
+                                     (return t))))
+                            (with-current-buffer buf
+                              (message "Reverting file %s..." filename)
+                              (revert-buffer t t)
+                              (message "Reverting file %s... done" filename)))
+                           ((yes-or-no-p
+                             (if (string= (file-name-nondirectory filename)
+                                          (buffer-name buf))
+                                 (format
+                                  (if (buffer-modified-p buf)
+                                      (gettext "File %s changed on disk.  Discard your edits? ")
+                                    (gettext "File %s changed on disk.  Reread from disk? "))
+                                  (file-name-nondirectory filename))
+                               (format
+                                (if (buffer-modified-p buf)
+                                    (gettext "File %s changed on disk.  Discard your edits in %s? ")
+                                  (gettext "File %s changed on disk.  Reread from disk into %s? "))
+                                (file-name-nondirectory filename)
+                                (buffer-name buf))))
+                            (with-current-buffer buf
+                              (revert-buffer t t)))))
+                 (when (not (eq rawfile (not (null find-file-literally))))
+                   (with-current-buffer buf
+                     (if (buffer-modified-p)
+                         (if (y-or-n-p (if rawfile
+                                           "Save file and revisit literally? "
+                                         "Save file and revisit non-literally? "))
+                             (progn
+                               (save-buffer)
+                               (find-file-noselect-1 buf filename nowarn
+                                                     rawfile truename number))
+                           (if (y-or-n-p (if rawfile
+                                             "Discard your edits and revisit file literally? "
+                                           "Discard your edits and revisit file non-literally? "))
+                               (find-file-noselect-1 buf filename nowarn
+                                                     rawfile truename number)
+                             (error (if rawfile "File already visited non-literally"
+                                      "File already visited literally"))))
+                       (if (y-or-n-p (if rawfile
+                                         "Revisit file literally? "
+                                       "Revisit file non-literally? "))
+                           (find-file-noselect-1 buf filename nowarn
+                                                 rawfile truename number)
+                         (error (if rawfile "File already visited non-literally"
+                                  "File already visited literally"))))))
+                 ;; Return the buffer we are using.
+                 buf)
+             ;; Create a new buffer.
+             (setq buf (create-file-buffer filename))
+             ;; Catch various signals, such as QUIT, and kill the buffer
+             ;; in that case.
+             (condition-case data
+                 (progn
+                   (set-buffer-major-mode buf)
+                   ;; find-file-noselect-1 may use a different buffer.
+                   (find-file-noselect-1 buf filename nowarn
+                                         rawfile truename number))
+               (t
+                (kill-buffer buf)
+                (signal (car data) (cdr data)))))))))))
+
+(defun find-file-noselect-1 (buf filename nowarn rawfile truename number)
+  (let ((inhibit-read-only t)
+       error)
+    (with-current-buffer buf
+      (kill-local-variable 'find-file-literally)
+      ;; Needed in case we are re-visiting the file with a different
+      ;; text representation.
+      (kill-local-variable 'buffer-file-coding-system)
+      (erase-buffer)
+;       (and (default-value 'enable-multibyte-characters)
+;         (not rawfile)
+;         (set-buffer-multibyte t))
+      (condition-case ()
+         (if rawfile
+             (insert-file-contents-literally filename t)
+           (insert-file-contents filename t))
+       (file-error
+        (when (and (file-exists-p filename)
+                   (not (file-readable-p filename)))
+          (signal 'file-error (list "File is not readable" filename)))
+        (if rawfile
+            ;; Unconditionally set error
+            (setq error t)
+          (or
+           ;; Run find-file-not-found-hooks until one returns non-nil.
+           (run-hook-with-args-until-success 'find-file-not-found-hooks)
+           ;; If they fail too, set error.
+           (setq error t)))))
+      ;; Find the file's truename, and maybe use that as visited name.
+      ;; automatically computed in XEmacs, unless jka-compr was used!
+      (unless buffer-file-truename
+       (setq buffer-file-truename truename))
+      (setq buffer-file-number number)
+      (and find-file-use-truenames
+          ;; This should be in C.  Put pathname
+          ;; abbreviations that have been explicitly
+          ;; requested back into the pathname.  Most
+          ;; importantly, strip out automounter /tmp_mnt
+          ;; directories so that auto-save will work
+          (setq buffer-file-name (abbreviate-file-name buffer-file-name)))
+  ;; Set buffer's default directory to that of the file.
+  (setq default-directory (file-name-directory buffer-file-name))
+  ;; Turn off backup files for certain file names.  Since
+  ;; this is a permanent local, the major mode won't eliminate it.
+  (and (not (funcall backup-enable-predicate buffer-file-name))
+       (progn
+        (make-local-variable 'backup-inhibited)
+        (setq backup-inhibited t)))
+  (if rawfile
+      (progn
+       (setq buffer-file-coding-system 'no-conversion)
+       (make-local-variable 'find-file-literally)
+       (setq find-file-literally t))
+    (after-find-file error (not nowarn))
+    (setq buf (current-buffer)))
+  (current-buffer))))
+
+(defun insert-file-literally (filename)
+  "Insert contents of file FILENAME into buffer after point with no conversion.
+
+This function is meant for the user to run interactively.
+Don't call it from programs!  Use `insert-file-contents-literally' instead.
+\(Its calling sequence is different; see its documentation)."
+  (interactive "*fInsert file literally: ")
+  (if (file-directory-p filename)
+      (signal 'file-error (list "Opening input file" "file is a directory"
+                               filename)))
+  (let ((tem (insert-file-contents-literally filename)))
+    (push-mark (+ (point) (car (cdr tem))))))
+
+(defvar find-file-literally nil
+  "Non-nil if this buffer was made by `find-file-literally' or equivalent.
+This is a permanent local.")
+(put 'find-file-literally 'permanent-local t)
+
+(defun find-file-literally (filename)
+  "Visit file FILENAME with no conversion of any kind.
+Format conversion and character code conversion are both disabled,
+and multibyte characters are disabled in the resulting buffer.
+The major mode used is Fundamental mode regardless of the file name,
+and local variable specifications in the file are ignored.
+Automatic uncompression and adding a newline at the end of the
+file due to `require-final-newline' is also disabled.
+
+You cannot absolutely rely on this function to result in
+visiting the file literally.  If Emacs already has a buffer
+which is visiting the file, you get the existing buffer,
+regardless of whether it was created literally or not.
+
+In a Lisp program, if you want to be sure of accessing a file's
+contents literally, you should create a temporary buffer and then read
+the file contents into it using `insert-file-contents-literally'."
+  (interactive "FFind file literally: ")
+  (switch-to-buffer (find-file-noselect filename nil t)))
+;;; End Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
 
+\f
 (defvar after-find-file-from-revert-buffer nil)
 
 (defun after-find-file (&optional error warn noauto
@@ -3082,6 +3367,47 @@ by `sh' are supported."
   :type 'string
   :group 'dired)
 
+;;; Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+(defun file-expand-wildcards (pattern &optional full)
+  "Expand wildcard pattern PATTERN.
+This returns a list of file names which match the pattern.
+
+If PATTERN is written as an absolute relative file name,
+the values are absolute also.
+
+If PATTERN is written as a relative file name, it is interpreted
+relative to the current default directory, `default-directory'.
+The file names returned are normally also relative to the current
+default directory.  However, if FULL is non-nil, they are absolute."
+  (let* ((nondir (file-name-nondirectory pattern))
+        (dirpart (file-name-directory pattern))
+        ;; A list of all dirs that DIRPART specifies.
+        ;; This can be more than one dir
+        ;; if DIRPART contains wildcards.
+        (dirs (if (and dirpart (string-match "[[*?]" dirpart))
+                  (mapcar 'file-name-as-directory
+                          (file-expand-wildcards (directory-file-name dirpart)))
+                (list dirpart)))
+        contents)
+    (while dirs
+      (when (or (null (car dirs))      ; Possible if DIRPART is not wild.
+               (file-directory-p (directory-file-name (car dirs))))
+       (let ((this-dir-contents
+              ;; Filter out "." and ".."
+              (nset-difference (directory-files (or (car dirs) ".") full
+                                                (wildcard-to-regexp nondir))
+                               '("." "..") :test #'equal)))
+         (setq contents
+               (nconc
+                (if (and (car dirs) (not full))
+                    (mapcar (function (lambda (name) (concat (car dirs) name)))
+                            this-dir-contents)
+                  this-dir-contents)
+                contents))))
+      (setq dirs (cdr dirs)))
+    contents))
+;;; End Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+
 (defun list-directory (dirname &optional verbose)
   "Display a list of files in or matching DIRNAME, a la `ls'.
 DIRNAME is globbed by the shell if necessary.
@@ -3108,6 +3434,53 @@ and `list-directory-verbose-switches'."
        (let ((wildcard (not (file-directory-p dirname))))
          (insert-directory dirname switches wildcard (not wildcard)))))))
 
+;;; Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+(defun shell-quote-wildcard-pattern (pattern)
+  "Quote characters special to the shell in PATTERN, leave wildcards alone.
+
+PATTERN is assumed to represent a file-name wildcard suitable for the
+underlying filesystem.  For Unix and GNU/Linux, the characters from the
+set [ \\t\\n;<>&|()#$] are quoted with a backslash; for DOS/Windows, all
+the parts of the pattern which don't include wildcard characters are
+quoted with double quotes.
+Existing quote characters in PATTERN are left alone, so you can pass
+PATTERN that already quotes some of the special characters."
+  (save-match-data
+    (cond
+     ((memq system-type '(ms-dos windows-nt))
+      ;; DOS/Windows don't allow `"' in file names.  So if the
+      ;; argument has quotes, we can safely assume it is already
+      ;; quoted by the caller.
+      (if (or (string-match "[\"]" pattern)
+             ;; We quote [&()#$'] in case their shell is a port of a
+             ;; Unixy shell.  We quote [,=+] because stock DOS and
+             ;; Windows shells require that in some cases, such as
+             ;; passing arguments to batch files that use positional
+             ;; arguments like %1.
+             (not (string-match "[ \t;&()#$',=+]" pattern)))
+         pattern
+       (let ((result "\"")
+             (beg 0)
+             end)
+         (while (string-match "[*?]+" pattern beg)
+           (setq end (match-beginning 0)
+                 result (concat result (substring pattern beg end)
+                                "\""
+                                (substring pattern end (match-end 0))
+                                "\"")
+                 beg (match-end 0)))
+         (concat result (substring pattern beg) "\""))))
+     (t
+      (let ((beg 0))
+       (while (string-match "[ \t\n;<>&|()#$]" pattern beg)
+         (setq pattern
+               (concat (substring pattern 0 (match-beginning 0))
+                       "\\"
+                       (substring pattern (match-beginning 0)))
+               beg (1+ (match-end 0)))))
+      pattern))))
+;;; End Sync: XEmacs 21.5 (cb65bfaf7110 tip) 2015-07-03 --SY
+
 (defvar insert-directory-program "ls"
   "Absolute or relative name of the `ls' program used by `insert-directory'.")
 
index f12d309..f680618 100644 (file)
@@ -214,6 +214,7 @@ as a local directory."
     ("US (Main XEmacs Site)"
      "ftp.xemacs.org" "pub/xemacs/packages" "ftp")
     ;; In alphabetical order of Country, our mirrors...
+    ;; Timing out
     ("Belgium (be.xemacs.org)"
      "ftp.be.xemacs.org" "xemacs/packages" "ftp")
     ("Canada (ca.xemacs.org)"
@@ -222,24 +223,32 @@ as a local directory."
      "ftp.dk.xemacs.org" "xemacs/packages" "ftp")
     ("France (fr.xemacs.org)"
      "ftp.fr.xemacs.org" "pub/xemacs/packages" "ftp")
+    ;; Temporary errors?
     ("France (mirror.cict.fr)"
      "mirror.cict.fr" "xemacs/packages" "ftp")
     ("France (pasteur.fr)"
      "ftp.pasteur.fr" "pub/computing/xemacs/packages" "ftp")
+    ;; Very outdated, experimental not updated since 2013
     ("Germany (de.xemacs.org)"
      "ftp.de.xemacs.org" "pub/ftp.xemacs.org/tux/xemacs/packages" "ftp")
+    ;; Timing out
     ("Greece (gr.xemacs.org)"
      "ftp.gr.xemacs.org" "mirrors/XEmacs/ftp/packages" "ftp")
     ("Ireland (heanet.ie)"
      "ftp.heanet.ie" "mirrors/ftp.xemacs.org/packages" "ftp")
+    ;; Timing out
     ("Italy (it.xemacs.org)"
      "ftp.it.xemacs.org" "unix/packages/XEMACS/packages" "ftp")
+    ;; Timing out
     ("Japan (dti.ad.jp)"
      "ftp.dti.ad.jp" "pub/unix/editor/xemacs/packages" "ftp")
     ("Norway (no.xemacs.org)"
      "ftp.no.xemacs.org" "pub/xemacs/packages" "ftp")
     ("Portugal (pt.xemacs.org)"
      "ftp.pt.xemacs.org" "pub/MIRRORS/ftp.xemacs.org/packages" "ftp")
+    ;; Timing out
+    ("Russia (ru.xemacs.org)"
+     "ftp.ru.xemacs.org" "pub/emacs/xemacs/packages" "ftp")
     ("Saudi Arabia (sa.xemacs.org)"
      "ftp.sa.xemacs.org" "pub/xemacs.org/packages" "ftp")
     ("Sweden (se.xemacs.org)"
@@ -267,50 +276,6 @@ package download sites."
                       host-name directory url-scheme))
   :group 'package-get)
 
-;;; Dead Sites (normal release)
-    ; Unknown host
-    ;("Argentina (xmundo.net)" "xemacs.xmundo.net" "pub/mirrors/xemacs/packages")
-    ; No longer carries XEmacs releases or packages
-    ;("Australia (aarnet.edu.au)" "mirror.aarnet.edu.au" "pub/xemacs/packages")
-    ; Unknown host
-    ;("Australia (au.xemacs.org)" "ftp.au.xemacs.org" "pub/xemacs/packages")
-    ; No longer carries XEmacs releases or packages
-    ;("Austria (at.xemacs.org)" "ftp.at.xemacs.org" "editors/xemacs/packages")
-    ; No longer carries XEmacs releases or packages
-    ;("Brazil (br.xemacs.org)" "ftp.br.xemacs.org" "pub/xemacs/packages")
-    ; Connection problems, can't list in either passive or not
-    ;("Canada (nrc.ca)" "ftp.nrc.ca" "pub/packages/editors/xemacs/packages")
-    ;; no anonymous ftp available, uncomment when updating website
-    ;; with
-    ;; xemacs-builds/adrian/website/package-get-2-download-sites.el
-;     ("Chile (cl.xemacs.org)" "ftp.cl.xemacs.org" "packages")
-    ; Unknown host
-    ;("China (ftp.cn.xemacs.org)" "ftp.cn.xemacs.org" "pub/xemacs/packages")
-    ; XEmacs directory exists, but is empty
-    ;("Czech Republic (cz.xemacs.org)" "ftp.cz.xemacs.org" "MIRRORS/ftp.xemacs.org/pub/xemacs/packages")
-    ; Exists, but is 3 years out of date
-    ;("Finland (fi.xemacs.org)" "ftp.fi.xemacs.org" "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/packages")
-    ; Site exists, but has no content
-    ;("Hong Kong (hk.xemacs.org)" "ftp.hk.xemacs.org" "pub/xemacsftp/packages")
-    ; Can't connect, times out.
-    ;("Ireland (ie.xemacs.org)" "ftp.ie.xemacs.org" "mirrors/ftp.xemacs.org/pub/xemacs/packages")
-;   ("Japan (jaist.ac.jp)" "ftp.jaist.ac.jp" "pub/GNU/xemacs/packages")
-    ; Unknown host
-    ;("Japan (jp.xemacs.org)" "ftp.jp.xemacs.org" "pub/text/xemacs/packages")
-;   ("Japan (nucba.ac.jp)" "mirror.nucba.ac.jp" "mirror/xemacs/packages")
-    ; Can't connect, times out.
-    ;("Korea (kr.xemacs.org)" "ftp.kr.xemacs.org" "pub/tools/emacs/xemacs/packages")
-    ; No anonymous ftp available
-    ;("Netherlands (nl.xemacs.org)" "ftp.nl.xemacs.org" "pub/xemacs/ftp/packages")
-    ;; no anonymous ftp available, uncomment when updating website
-    ;; with
-    ;; xemacs-builds/adrian/website/package-get-2-download-sites.el
-;     ("Netherlands (xemacsftp.digimirror.nl)" "xemacsftp.digimirror.nl" "packages")
-    ; Times out
-    ;("Russia (ru.xemacs.org)" "ftp.ru.xemacs.org" "pub/emacs/xemacs/packages")
-    ; Unknown host
-    ;("US (us.xemacs.org)" "ftp.us.xemacs.org" "pub/mirrors/xemacs/packages")
-
 ;;;###autoload
 (defcustom package-get-pre-release-download-sites
   `(,@(when package-get-have-curl 
@@ -319,6 +284,7 @@ package download sites."
     ("US Pre-Releases (Main XEmacs Site)" "ftp.xemacs.org"
      "pub/xemacs/beta/experimental/packages" "ftp")
     ;; In alphabetical order of Country, our mirrors...
+    ;; Timing out
     ("Belgium Pre-Releases (be.xemacs.org)" "ftp.be.xemacs.org"
      "xemacs/beta/experimental/packages" "ftp")
     ("Canada Pre-Releases (ca.xemacs.org)" "ftp.ca.xemacs.org"
@@ -333,16 +299,20 @@ package download sites."
      "xemacs/beta/experimental/packages" "ftp")
     ("France Pre-Releases (pasteur.fr)" "ftp.pasteur.fr"
      "pub/computing/xemacs/beta/experimental/packages" "ftp")
+    ;; Very outdated, experimental not updated since 2013
     ("Germany Pre-Releases (de.xemacs.org)" "ftp.de.xemacs.org"
      "pub/ftp.xemacs.org/tux/xemacs/beta/experimental/packages" "ftp")
+    ;; Timing out
     ("Greece Pre-Releases (gr.xemacs.org)" "ftp.gr.xemacs.org"
      "mirrors/XEmacs/ftp/beta/experimental/packages" "ftp")
     ("Ireland Pre-Releases (heanet.ie)" "ftp.heanet.ie"
      "mirrors/ftp.xemacs.org/beta/experimental/packages" "ftp")
+    ;; Timing out
     ("Italy Pre-Releases (it.xemacs.org)" "ftp.it.xemacs.org"
      "unix/packages/XEMACS/beta/experimental/packages" "ftp")
     ; Was out of date as at 2013-04-12.  Hopefully not a sign they are
     ; no longer updating.
+    ;; Timing out
     ("Japan Pre-Releases (dti.ad.jp)" "ftp.dti.ad.jp"
      "pub/unix/editor/xemacs/beta/experimental/packages" "ftp")
     ("Norway Pre-Releases (no.xemacs.org)" "ftp.no.xemacs.org"
@@ -376,69 +346,6 @@ package download sites."
                       host-name directory url-scheme))
   :group 'package-get)
 
-;;; Dead sites (pre-release)
-    ; Unknown host
-    ;("Argentina Pre-Releases (xmundo.net)" "xemacs.xmundo.net"
-    ; "pub/mirrors/xemacs/beta/experimental/packages")
-    ; No longer carries XEmacs releases or packages
-    ;("Australia Pre-Releases (aarnet.edu.au)" "mirror.aarnet.edu.au"
-    ; "pub/xemacs/beta/experimental/packages")
-    ; Unknown host
-    ;("Australia Pre-Releases (au.xemacs.org)" "ftp.au.xemacs.org"
-    ; "pub/xemacs/beta/experimental/packages")
-    ; No longer carries XEmacs releases or packages
-    ;("Austria Pre-Releases (at.xemacs.org)" "ftp.at.xemacs.org"
-    ; "editors/xemacs/beta/experimental/packages")
-    ; No longer carries XEmacs releases or packages
-    ;("Brazil Pre-Releases (br.xemacs.org)" "ftp.br.xemacs.org"
-    ; "pub/xemacs/xemacs-21.5/experimental/packages")
-    ; Connection problems, can't list in either passive or not
-    ;("Canada Pre-Releases (nrc.ca)" "ftp.nrc.ca"
-    ; "pub/packages/editors/xemacs/beta/experimental/packages")
-    ;; no anonymous ftp available, uncomment when updating website
-    ;; with
-    ;; xemacs-builds/adrian/website/package-get-2-download-sites.el
-;     ("Chile Pre-Releases (cl.xemacs.org)" "ftp.cl.xemacs.org"
-;      "beta/experimental/packages")
-    ; Unknown host
-    ;("China Pre-Releases (ftp.cn.xemacs.org)" "ftp.cn.xemacs.org"
-    ; "pub/xemacs/beta/experimental/packages")
-    ; XEmacs directory exists, but is empty
-    ;("Czech Republic Pre-Releases (cz.xemacs.org)" "ftp.cz.xemacs.org"
-    ; "MIRRORS/ftp.xemacs.org/pub/xemacs/xemacs-21.5/experimental/packages")
-    ; Exists, but is 3 years out of date
-    ;("Finland Pre-Releases (fi.xemacs.org)" "ftp.fi.xemacs.org"
-    ; "pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/beta/experimental/packages")
-    ; Site exists, but has no content
-    ;("Hong Kong Pre-Releases (hk.xemacs.org)" "ftp.hk.xemacs.org"
-    ; "pub/xemacsftp/beta/experimental/packages")
-    ; Can't connect, times out.
-    ;("Ireland Pre-Releases (ie.xemacs.org)" "ftp.ie.xemacs.org"
-    ; "mirrors/ftp.xemacs.org/pub/xemacs/beta/experimental/packages")
-;   ("Japan Pre-Releases (jaist.ac.jp)" "ftp.jaist.ac.jp"
-;    "pub/GNU/xemacs/beta/experimental/packages")
-    ; Unknown host
-    ;("Japan Pre-Releases (jp.xemacs.org)" "ftp.jp.xemacs.org"
-    ; "pub/text/xemacs/beta/experimental/packages")
-    ; Can't connect, times out.
-    ;("Korea Pre-Releases (kr.xemacs.org)" "ftp.kr.xemacs.org"
-    ; "pub/tools/emacs/xemacs/beta/experimental/packages")
-    ; No anonymous ftp available
-    ;("Netherlands Pre-Releases (nl.xemacs.org)" "ftp.nl.xemacs.org"
-    ; "pub/xemacs/ftp/beta/experimental/packages")
-    ;; no anonymous ftp available, uncomment when updating website
-    ;; with
-    ;; xemacs-builds/adrian/website/package-get-2-download-sites.el
-;     ("Netherlands Pre-Releases (xemacsftp.digimirror.nl)" "xemacsftp.digimirror.nl"
-;      "beta/experimental/packages")
-    ; Times out
-    ;("Russia Pre-Releases (ru.xemacs.org)" "ftp.ru.xemacs.org"
-    ; "pub/emacs/xemacs/beta/experimental/packages")
-    ; Unknown host
-    ;("US Pre-Releases (us.xemacs.org)" "ftp.us.xemacs.org"
-    ; "pub/mirrors/xemacs/beta/experimental/packages")
-
-
 ;;;###autoload
 (defcustom package-get-site-release-download-sites nil
   "*List of remote sites available for downloading \"Site Release\" packages.
@@ -1340,109 +1247,6 @@ lead to Emacs accessing remote sites."
        (intern (substring (symbol-name pkg) 0 (match-beginning 0))))
        t)))
 
-;; This is obsolete now that #'package-get can use #'curl:download
-;;(defun pui-bootstrap ()
-;;  "Bootstrap the SXEmacs Package Tools.
-
-;;The Package Tools, under normal circumstances, cannot work until a
-;;couple of packages are pre-installed by hand.  This function eliminates
-;;the need to do that.  It uses FFI and libcurl to download and install
-;;the lastest package index file, the EFS and xemacs-base packages.
-
-;;Obviously you can't use this if you didn't enable FFI support in your
-;;SXEmacs or if you don't have libffi on your system.
-
-;;This isn't designed to replace the existing Package Tools so after
-;;you have run `pui-bootstrap' once you should then use the normal PUI
-;;tools, `pui-list-packages' etc."
-;;  (interactive)
-;;  ;; A little sanity checking never hurt anybody
-;;  (when (featurep '(and efs-autoloads xemacs-base-autoloads))
-;;    (error 'invalid-operation "PUI doesn't need bootstrapping"))
-;;  (when (and (fboundp 'ffi-defun)
-;;          (not (featurep '(and ffi ffi-curl))))
-;;    (require 'ffi-curl))
-;;  (unless (featurep 'ffi)
-;;    (error 'unimplemented "FFI"))
-;;  ;; One last check... has `package-get-remote' been set?
-;;  (if (not (cdr package-get-remote))
-;;      (when (y-or-n-p "You haven't set a download site, do you need help ")
-;;     (declare-fboundp (Info-goto-node "(sxemacs)Bootstrapping PUI")))
-;;    ;; We should be good to go
-;;    (let* ((site (car package-get-remote))
-;;        (dir (cadr package-get-remote))
-;;        (scheme (third package-get-remote))
-;;        (url (concat scheme "://" site "/" dir "/"))
-;;        (dldir (temp-directory))
-;;        (index (expand-file-name package-get-base-filename
-;;                                 package-get-package-index-file-location))
-;;        xemacs-base-pkg
-;;        efs-pkg
-;;                                     ;status)
-;;        )
-;;      ;; Grab the index
-;;      (message "Retrieving index, please be patient")
-;;      (declare-fboundp (curl:download (concat url package-get-base-filename) index))
-;;      (message "Retrieving index, done!")
-;;      ;; Update the db
-;;      (set-buffer (find-file-noselect index))
-;;      (package-get-update-base-from-buffer)
-;;      (kill-buffer (current-buffer))
-;;      ;; Get xemacs-base, EFS
-;;      (setq xemacs-base-pkg (package-get-info 'xemacs-base 'filename))
-;;      (setq efs-pkg (package-get-info 'efs 'filename))
-;;      (message "Retrieving %s, please be patient" xemacs-base-pkg)
-;;      (declare-fboundp (curl:download (concat url xemacs-base-pkg)
-;;                                   (expand-file-name xemacs-base-pkg dldir)))
-;;      (message "Retrieving %s, please be patient" efs-pkg)
-;;      (declare-fboundp (curl:download (concat url efs-pkg)
-;;                                   (expand-file-name efs-pkg dldir)))
-;;      (message "Download complete.")
-;;      ;; Install xemacs-base
-;;      (if (equal (package-get-info 'xemacs-base 'md5sum)
-;;              (with-temp-buffer
-;;                (insert-file-contents-literally
-;;                 (expand-file-name xemacs-base-pkg dldir))
-;;                (md5 (current-buffer))))
-;;       (progn
-;;         (package-admin-add-binary-package
-;;          (expand-file-name xemacs-base-pkg dldir)
-;;          (package-admin-get-install-dir 'xemacs-base))
-;;         (push (file-name-as-directory
-;;                (expand-file-name "lisp/xemacs-base"
-;;                                  (package-admin-get-install-dir 'xemacs-base)))
-;;               load-path)
-;;         (load-file (expand-file-name "lisp/xemacs-base/_pkg.el"
-;;                                      (package-admin-get-install-dir 'xemacs-base)))
-;;         (load-file (expand-file-name "lisp/xemacs-base/auto-autoloads.el"
-;;                                      (package-admin-get-install-dir 'xemacs-base)))
-;;         (message "xemacs-base package installed"))
-;;     (delete-file (expand-file-name xemacs-base-pkg dldir))
-;;     (error "MD5 mismatch, %s deleted" (expand-file-name xemacs-base-pkg dldir)))
-;;      ;; Install EFS
-;;      (if (equal (package-get-info 'efs 'md5sum)
-;;              (with-temp-buffer
-;;                (insert-file-contents-literally
-;;                 (expand-file-name efs-pkg dldir))
-;;                (md5 (current-buffer))))
-;;       (progn
-;;         (package-admin-add-binary-package
-;;          (expand-file-name efs-pkg dldir)
-;;          (package-admin-get-install-dir 'efs))
-;;         (push (file-name-as-directory
-;;                (expand-file-name "lisp/efs"
-;;                                  (package-admin-get-install-dir 'efs)))
-;;               load-path)
-;;         (load-file (expand-file-name "lisp/efs/_pkg.el"
-;;                                      (package-admin-get-install-dir 'efs)))
-;;         (load-file (expand-file-name "lisp/efs/auto-autoloads.el"
-;;                                      (package-admin-get-install-dir 'efs)))
-;;         (message "efs package installed"))
-;;     (delete-file (expand-file-name efs-pkg dldir))
-;;     (error "MD5 mismatch, %s deleted" (expand-file-name efs-pkg dldir)))
-;;      (when (y-or-n-p "Install more packages? ")
-;;     (declare-fboundp (pui-list-packages))))))
-
 (provide 'package-get)
 
 ;; On-load forms
index 881ad12..0dba0ca 100644 (file)
@@ -212,7 +212,9 @@ directory to be ignored."
 When SXEmacs searches for a file in the load path, it will ignore FILE
 if FORM evaluates to non-nil."
   (setq load-suppress-alist
-       (acons (expand-file-name file (file-dirname load-file-name)) form
+       (acons (expand-file-name file
+                                (file-dirname (expand-file-name load-file-name)))
+              form
               load-suppress-alist)))
 
 (defun package-require (name version)
index a58eca7..f2ffff6 100644 (file)
@@ -763,6 +763,9 @@ If this is nil, no message will be displayed.")
 
 ;;; Load user's init file and default ones.
 (defun load-init-file ()
+
+  (require 'const-aliases)
+
   (run-hooks 'before-init-hook)
 
   ;; Run the site-start library if it exists.  The point of this file is
index a1b4959..d9a37a3 100644 (file)
@@ -1266,6 +1266,7 @@ error
     syntax-error
       invalid-read-syntax
       invalid-regexp
+      scan-error
       structure-formation-error
        list-formation-error
          malformed-list
index 6d71535..3bb5f35 100644 (file)
@@ -17,7 +17,20 @@ For more details see the INSTALL and PROBLEMS files.
 SXEmacs generates the documentation during the build process.])
                exit 1
        fi
+       SXE_MSG_CHECKING([makeinfo version])
+        makeinfo_ver=`eval "$MAKEINFO" --version 2> /dev/null | head -n 1`
+       SXE_MSG_RESULT([${makeinfo_ver}])
+       AC_DEFINE_UNQUOTED(MAKEINFO_VERSION, "${makeinfo_ver}",
+                         [the makeinfo command version])
+        case `echo "$makeinfo_ver" | $SED -e 's/^.* \([[0-9.]]*\).*/\1/'`  in
+           [[1234]].*)
+               AC_MSG_ERROR([
+Your makeinfo program is too old. Please install 5.x or later.])
+               exit 1
+           ;;
+        esac
        AC_SUBST(MAKEINFO)
+       AC_SUBST(MAKEINFO_VERSION)
 ])dnl SXE_PROG_MAKEINFO
 
 
@@ -57,7 +70,7 @@ AC_DEFUN([SXE_PROG_BISON], [
                SXE_MSG_CHECKING([if bison is recent enough])
                sxe_cv_feat_bison_version="$(${BISON} --version | head -n1)"
                case "$sxe_cv_feat_bison_version" in
-               *\ 1.875 | *\ 2.*)
+               *\ 2.7* | *\ 3.*)
                        ;;
                *)
                        have_bison="no"
index d25446b..0c592da 100644 (file)
@@ -96,10 +96,32 @@ AC_DEFUN([SXE_CHECK_LZMA], [dnl
 
        AC_CHECK_HEADERS([lzma.h])
 
-       SXE_PC_CHECK_VERSION_ATLEAST([lzma], [4.999])
-       SXE_PC_CHECK_CPPFLAGS([lzma])
-       SXE_PC_CHECK_LDFLAGS([lzma])
-       SXE_PC_CHECK_LIBS([lzma])
+       SXE_PC_CHECK_EXISTS([lzma])
+       if test "$sxe_cv_pc_lzma_exists" = "yes"; then
+           SXE_PC_CHECK_VERSION_ATLEAST([lzma], [4.999])
+           SXE_PC_CHECK_CPPFLAGS([lzma])
+           SXE_PC_CHECK_LDFLAGS([lzma])
+           SXE_PC_CHECK_LIBS([lzma])
+       else
+           SXE_PC_CHECK_EXISTS([liblzma])
+           sxe_cv_pc_lzma_exists="$sxe_cv_pc_liblzma_exists"
+
+           if test "$sxe_cv_pc_liblzma_exists" = "yes"; then
+               SXE_PC_CHECK_VERSION_ATLEAST([liblzma], [4.999])
+               sxe_cv_pc_lzma_recent_enough_p="$sxe_cv_pc_liblzma_recent_enough_p"
+               SXE_PC_CHECK_CPPFLAGS([liblzma])
+               SXE_PC_CHECK_LDFLAGS([liblzma])
+               SXE_PC_CHECK_LIBS([liblzma])
+
+               LZMA_CPPFLAGS=$LIBLZMA_CPPFLAGS
+               LZMA_LDFLAGS=$LIBLZMA_LDFLAGS
+               LZMA_LIBS=$LIBLZMA_LIBS
+
+               AC_SUBST([LZMA_CPPFLAGS])
+               AC_SUBST([LZMA_LDFLAGS])
+               AC_SUBST([LZMA_LIBS])
+            fi
+        fi
 
        SXE_MSG_CHECKING([for lzma support])
        if test "$ac_cv_header_lzma_h" = "yes" -a \
@@ -110,11 +132,8 @@ AC_DEFUN([SXE_CHECK_LZMA], [dnl
        else
                sxe_cv_feat_lzma="no"
        fi
-       SXE_MSG_RESULT([$sxe_cv_feat_lzma])
 
-       AC_SUBST([LZMA_CPPFLAGS])
-       AC_SUBST([LZMA_LDFLAGS])
-       AC_SUBST([LZMA_LIBS])
+       SXE_MSG_RESULT([$sxe_cv_feat_lzma])
 
        AM_CONDITIONAL([HAVE_LZMA], [test "$sxe_cv_feat_lzma" = "yes"])
 
index 4af3e69..bae9e1b 100644 (file)
@@ -19,8 +19,9 @@ AC_DEFUN([SXE_OPENSSL_VERSION], [dnl
        AC_MSG_RESULT([$OPENSSL_VERSION])
 
        AC_MSG_CHECKING([whether OpenSSL version is recent enough])
-       ## we allow 0.9.7e-?, 0.9.8* and 0.9.9*
-       allowed_versions="0.9.7[e-z] 0.9.8* 0.9.9* 1.0.0*"
+       ## we allow 0.9.8z*, 1.0.0[n-z]* 1.0.1[mz]* 1.0.2*
+       ## As vulnerabilities are uncovered we should update this
+       allowed_versions="0.9.8z 1.0.0[[n-z]] 1.0.1[[m-z]] 1.0.2[[d-z]]"
        OPENSSL_SANE_P=no
        for ver in $allowed_versions; do
               if echo "$OPENSSL_VERSION" | ${GREP-grep} -q "$ver"; then
@@ -72,6 +73,12 @@ AC_DEFUN([SXE_TRY_OPENSSL_BIN_PREFIX], [dnl
        SXE_APPEND_UNDUP([$OPENSSL_LDFLAGS], [LDFLAGS])
 
        ## check again
+       SXE_CHECK_HEADERS([openssl/opensslconf.h])
+       SXE_CHECK_HEADERS([openssl/evp.h])
+       SXE_CHECK_HEADERS([openssl/rand.h openssl/hmac.h])
+       SXE_CHECK_HEADERS([openssl/rsa.h openssl/dsa.h])
+       SXE_CHECK_HEADERS([openssl/ec.h openssl/ecdh.h])
+       SXE_CHECK_HEADERS([openssl/ecdsa.h openssl/dh.h])
        SXE_CHECK_HEADERS([openssl/crypto.h])
        SXE_CHECK_HEADERS([openssl/x509.h openssl/pem.h])
        SXE_CHECK_HEADERS([openssl/ssl.h openssl/bio.h])
@@ -96,6 +103,12 @@ AC_DEFUN([SXE_CHECK_OPENSSL_LOCS], [dnl
 
        dnl Look for these standard header file locations
        OPENSSL_LIBS="-lssl -lcrypto"
+       SXE_CHECK_HEADERS([openssl/opensslconf.h])
+       SXE_CHECK_HEADERS([openssl/evp.h])
+       SXE_CHECK_HEADERS([openssl/rand.h openssl/hmac.h])
+       SXE_CHECK_HEADERS([openssl/rsa.h openssl/dsa.h])
+       SXE_CHECK_HEADERS([openssl/ec.h openssl/ecdh.h])
+       SXE_CHECK_HEADERS([openssl/ecdsa.h openssl/dh.h])
        SXE_CHECK_HEADERS([openssl/crypto.h])
        SXE_CHECK_HEADERS([openssl/x509.h openssl/pem.h])
        SXE_CHECK_HEADERS([openssl/ssl.h openssl/bio.h])
@@ -149,10 +162,82 @@ AC_DEFUN([SXE_CHECK_OPENSSL_FEATURES], [dnl
                AC_DEFINE([OPENSSL_NO_DH], [1], [Description here!])
        fi
 
+       AC_CHECK_TYPES([SSL], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+               ])
+       AC_CHECK_TYPES([SSL_METHOD], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+               ])
+       AC_CHECK_TYPES([SSL_CTX], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+               ])
+       AC_CHECK_TYPES([BIO], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+#if defined HAVE_OPENSSL_BIO_H
+# include <openssl/bio.h>
+#endif
+               ])
+       AC_CHECK_TYPES([X509], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+#if defined HAVE_OPENSSL_X509_H
+# include <openssl/x509.h>
+#endif
+               ])
+       AC_CHECK_TYPES([EVP_PKEY], [:], [:], [
+#if defined HAVE_OPENSSL_OPENSSLCONF_H
+# include <openssl/opensslconf.h>
+#endif
+#if defined HAVE_OPENSSL_EVP_H
+# include <openssl/evp.h>
+#endif
+#if defined HAVE_OPENSSL_SSL_H
+# include <openssl/ssl.h>
+#endif
+#if defined HAVE_OPENSSL_X509_H
+# include <openssl/x509.h>
+#endif
+               ])
        dnl check for libssl support
        AC_CHECK_LIB([ssl], [SSL_new], [openssl_ssl=yes], [openssl_ssl=no])
-       if test "$openssl_ssl" = "yes"; then
-               AC_DEFINE([OPENSSL_SSL], [1], [Description here!])
+       AC_MSG_CHECKING([for openssl types sufficent])
+       if test "x$ac_cv_type_EVP_PKEY"   = xyes -a \
+                "x$ac_cv_type_X509"       = xyes -a \
+                "x$ac_cv_type_BIO"        = xyes -a \
+                "x$ac_cv_type_SSL"        = xyes -a \
+                "x$ac_cv_type_SSL_METHOD" = xyes -a \
+                "x$ac_cv_type_SSL_CTX"    = xyes; then
+               AC_MSG_RESULT([yes])
+               if test "$openssl_ssl" = "yes"; then
+                       AC_DEFINE([OPENSSL_SSL], [1], [Description here!])
+               fi
+       else
+               have_openssl=no
+               AC_MSG_RESULT([no])
        fi
 ])dnl SXE_CHECK_OPENSSL_FEATURES
 
index 7d3490c..070afc7 100644 (file)
@@ -118,11 +118,14 @@ AC_DEFUN([SXE_FFI_TRY_PKGCONFIG], [dnl
                sxe_cv_feat_ffi="no"
                MM_FAIL
        else
-               FFI_CPPFLAGS=$($PKG_CONFIG --cflags libffi)
-               FFI_LIBS=$($PKG_CONFIG --libs libffi)
+               SXE_CHECK_HEADERS([ffi.h])
+               SXE_PC_CHECK_EXISTS([libffi])
+               SXE_PC_CHECK_VERSION([libffi])
+               SXE_PC_CHECK_CPPFLAGS([libffi])
+               SXE_PC_CHECK_LDFLAGS([libffi])
+               SXE_PC_CHECK_LIBS([libffi])
                SXE_DUMP_LIBS
                CPPFLAGS="$CPPFLAGS $FFI_CPPFLAGS"
-               SXE_CHECK_HEADERS([ffi.h])
                if test "$ac_cv_header_ffi_h" = "yes"; then
                        AC_CHECK_LIB([ffi], [ffi_call], [dnl
                                sxe_cv_feat_ffi="yes"
index ca7cb65..846cea7 100644 (file)
@@ -112,6 +112,7 @@ AC_DEFUN([_SXE_CHECK_REALPATH_RETVAL_OWNER], [dnl
 
 #define FOLLOW_FREE_STRATEGY           1
 #define FOLLOW_REALLOC_STRATEGY                1
+#define FOLLOW_DOUBLE_CALL_STRATEGY    1
 
 int owner_of_object_returned_by_realpath()
 {
@@ -119,6 +120,16 @@ int owner_of_object_returned_by_realpath()
        char p[8] = "/bin/sh\000";
 
        r = (void*)realpath(p, NULL);
+#if FOLLOW_DOUBLE_CALL_STRATEGY
+        {
+               char p[8] = "/bin/cp\000";
+
+               if (r == (void*)realpath(p, NULL)) {
+                       /* System owns when 2 calls yield same pointer */
+                       return 1;
+               }
+       }
+#endif
 #if FOLLOW_REALLOC_STRATEGY
        /* reallocation would help already */
        r = realloc(r, 4096);
@@ -295,42 +306,6 @@ AC_DEFUN([SXE_CHECK_DIRNAME], [dnl
        fi
 ])dnl SXE_CHECK_DIRNAME
 
-AC_DEFUN([_SXE_CHECK_DIRNAME_SIDE_EFFECT], [dnl
-       ## defines sxe_func_dirname_side_effect
-       ## and DIRNAME_SIDE_EFFECT
-       pushdef([resvar], [sxe_func_dirname_side_effect])
-
-       AC_MSG_CHECKING([whether dirname modifies its argument by side-effect])
-       AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#ifdef HAVE_LIBGEN_H
-#  include <libgen.h>
-#endif
-
-int dirname_modifies_argument()
-{
-       char p[11] = "somefile\000";
-       dirname(p);
-       return ((p[0] == '.' && p[1] == '\0') == 0);
-}
-
-int main()
-{
-       return dirname_modifies_argument();
-}
-               ]])],
-               resvar[=yes],
-               resvar[=no],
-               resvar[=no])
-       AC_MSG_RESULT([$]resvar)
-
-       if test "$[]resvar[]" = "yes"; then
-               AC_DEFINE([DIRNAME_SIDE_EFFECT], [1],
-                       [Whether dirname() operates by side effect])
-       fi
-
-       popdef([resvar])
-])dnl _SXE_CHECK_DIRNAME_SIDE_EFFECT
-
 AC_DEFUN([_SXE_CHECK_DIRNAME_RETVAL], [dnl
        ## arg #1 is the return type, char* by default
        ## arg #2 is the final test,
@@ -377,116 +352,6 @@ int main()
        popdef([rettest])
 ])dnl _SXE_CHECK_DIRNAME_RETVAL
 
-AC_DEFUN([_SXE_CHECK_DIRNAME_RETVAL_OWNER], [dnl
-       ## defines sxe_func_dirname_retval_owner,
-       ## values are either "sys" or "user"
-       pushdef([resvar], [sxe_func_dirname_retval_owner])
-
-       malloc_check=${MALLOC_CHECK_}
-       ## Turn off the stupid glibc 2.5 stack trace check. We *know* we may
-       ## do something bad here :-)
-       MALLOC_CHECK_=0
-       export MALLOC_CHECK_
-       ## this test is especially critical, because some systems do not
-       ## allocate memory for the user when the return value is "."
-       ## instead they point to a static const char somewhere in their
-       ## guts which, of course, must not be furtherly modified, free'd or
-       ## anything ... took me fucking ages to find out what's going on
-       ## so let's drink to the morons responsible for THAT!
-       AC_MSG_CHECKING([to whom belongs the object returned by dirname])
-       if test "$opsys" = "darwin" ; then
-          resvar=sys
-       else
-       AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#ifdef HAVE_LIBGEN_H
-#  include <libgen.h>
-#endif
-
-#define FOLLOW_FREE_STRATEGY           1
-#define FOLLOW_REALLOC_STRATEGY                1
-
-int owner_of_object_returned_by_dirname()
-{
-       void *r;  /* any pointer is just fine */
-       char p[11] = "./somefile\000";
-
-       r = (void*)dirname(p);
-#if FOLLOW_REALLOC_STRATEGY
-       /* reallocation would help already */
-       r = realloc(r, 4096);
-#endif
-#if FOLLOW_FREE_STRATEGY
-       /* if r was ours we should be able to free it */
-       free(r);
-#endif
-#if FOLLOW_FREE_STRATEGY || FOLLOW_REALLOC_STRATEGY
-       return 0;
-#else
-       return 1;
-#endif
-}
-
-int main()
-{
-       return owner_of_object_returned_by_dirname();
-}
-               ]])],
-               resvar[=user],
-               resvar[=sys],
-               resvar[=sys])
-       fi
-       if test "${malloc_check}" = "" ; then
-               unset MALLOC_CHECK_
-       else
-               MALLOC_CHECK_=${malloc_check}
-       fi
-       AC_MSG_RESULT([$]resvar)
-
-       if test "$[]resvar[]" = "user"; then
-               AC_DEFINE([DIRNAME_USER_OWNS_RETVAL], [1],
-                       [Whether the user space owns the retval of dirname()])
-       elif test "$[]resvar[]" = "sys"; then
-               AC_DEFINE([DIRNAME_SYS_OWNS_RETVAL], [1],
-                       [Whether the system owns the retval of dirname()])
-       fi
-
-       popdef([resvar])
-])dnl _SXE_CHECK_DIRNAME_RETVAL_OWNER
-
-AC_DEFUN([_SXE_CHECK_DIRNAME_ON_PROTECTED_MEMORY], [dnl
-       ## defines sxe_func_dirname_accepts_protmem
-       pushdef([resvar], [sxe_func_dirname_accepts_protmem])
-
-       AC_MSG_CHECKING([whether dirname can operate on protected mem blocks])
-       AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#ifdef HAVE_LIBGEN_H
-#  include <libgen.h>
-#endif
-
-int dirname_can_operate_on_protected_mem_blocks()
-{
-       dirname("./somefile");
-       return 0;
-}
-
-int main()
-{
-       return dirname_can_operate_on_protected_mem_blocks();
-}
-               ]])],
-               resvar[=yes],
-               resvar[=no],
-               resvar[=no])
-       AC_MSG_RESULT([$]resvar)
-
-       if test "$[]resvar[]" = "yes"; then
-               AC_DEFINE([DIRNAME_ACCEPTS_PROTMEM], [1],
-                       [Whether dirname() accepts protected memory blocks])
-       fi
-
-       popdef([resvar])
-])dnl _SXE_CHECK_DIRNAME_ON_PROTECTED_MEMORY
-
 AC_DEFUN([_SXE_CHECK_DIRNAME_ON_C99_RESTRICT_MEMORY], [dnl
        ## defines sxe_func_dirname_accepts_restrmem
        pushdef([resvar], [sxe_func_dirname_accepts_restrmem])
@@ -494,7 +359,7 @@ AC_DEFUN([_SXE_CHECK_DIRNAME_ON_C99_RESTRICT_MEMORY], [dnl
        AC_MSG_CHECKING([whether dirname can operate on C99 restrict mem blocks])
        AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #ifdef HAVE_STDIO_H
-#  inlcude <stdio.h>
+#  include <stdio.h>
 #endif
 #ifdef HAVE_LIBGEN_H
 #  include <libgen.h>
@@ -529,11 +394,8 @@ int main()
 
 AC_DEFUN([SXE_CHECK_BROKEN_DIRNAME], [dnl
        ## defines 3 vars, look in the sub macros to see which ones
-       _SXE_CHECK_DIRNAME_SIDE_EFFECT
-       _SXE_CHECK_DIRNAME_ON_PROTECTED_MEMORY
        _SXE_CHECK_DIRNAME_ON_C99_RESTRICT_MEMORY
        _SXE_CHECK_DIRNAME_RETVAL
-       _SXE_CHECK_DIRNAME_RETVAL_OWNER
 ])dnl SXE_CHECK_BROKEN_DIRNAME
 
 
index ef3ca3d..878c4da 100644 (file)
@@ -318,18 +318,12 @@ AC_DEFUN([SXE_MM_CHECK_FFMPEG], [
        pushdef([ACTION_IF_NOT_FOUND], [$2])
 
        sxe_cv_feat_ffmpeg=
-       ## we can't use that one since we have to check multiple headers
-dnl    _SXE_MM_CHECK_pkgconfig_based([ffmpeg], [libavformat], [49.0.0], [dnl
-dnl            av_open_input_file av_close_input_file av_find_stream_info dnl
-dnl            url_fopen av_probe_input_format avcodec_find_decoder dnl
-dnl            avcodec_open av_read_frame av_seek_frame av_register_all dnl
-dnl            avcodec_decode_audio avcodec_decode_audio2], [avformat.h],
-dnl            [sxe_cv_feat_ffmpeg=yes], [sxe_cv_feat_ffmpeg=no])
 
-dnl    Dropped in favour of sxe-pkgconfig.m4 macros
-dnl    _SXE_CHECK_pkgconfig_based([ffmpeg], [libavformat], [49.0.0])
-
-       SXE_PC_CHECK_VERSION_ATLEAST([libavformat], [51.0.0])
+       ## Minimum versions required matches FFmpeg stable v2.0.1
+       ## released 2013-08-13
+       SXE_PC_CHECK_VERSION_ATLEAST([libavformat], [55.12.100])
+       SXE_PC_CHECK_VERSION_ATLEAST([libavcodec], [55.18.102])
+       SXE_PC_CHECK_VERSION_ATLEAST([libavutil], [52.38.100])
 
        SXE_CHECK_FFMPEG_HEADERS
        SXE_CHECK_FFMPEG_LIBS
@@ -339,111 +333,71 @@ dnl      _SXE_CHECK_pkgconfig_based([ffmpeg], [libavformat], [49.0.0])
                "$ac_cv_header_ffmpeg_avformat_h" = "yes" -o \
                "$ac_cv_header_libavformat_avformat_h" = "yes"; then
                sxe_cv_feat_ffmpeg_headers="yes"
+       else
+               sxe_cv_feat_ffmpeg_headers="no"
        fi
-       ## make sure either decode_audio or decode_audio2 is there
-       if test "$ac_cv_lib_avformat_avcodec_decode_audio2" = "yes" -o \
-               "$ac_cv_lib_avformat_avcodec_decode_audio" = "yes"; then
-               sxe_cv_feat_ffmpeg_decoders="yes"
+
+       if test "$sxe_cv_feat_ffmpeg_headers" = "yes"; then
+               if test "$ac_cv_header_avcodec_h" = "yes" -o \
+                        "$ac_cv_header_ffmpeg_avcodec_h" = "yes" -o \
+                       "$ac_cv_header_libavcodec_avcodec_h" = "yes"; then
+                       sxe_cv_feat_ffmpeg_headers="yes"
+               else
+                       sxe_cv_feat_ffmpeg_headers="no"
+               fi
+       fi
+
+       if test "$sxe_cv_feat_ffmpeg_headers" = "yes"; then
+               if test "$ac_cv_header_ffmpeg_dict_h" = "yes" -o \
+                       "$ac_cv_header_libavutil_dict_h" = "yes"; then
+                       sxe_cv_feat_ffmpeg_headers="yes"
+               else
+                       sxe_cv_feat_ffmpeg_headers="no"
+               fi
        fi
-       ## make sure we can either use av_register_protocol()
-       ## or register_protocol()
-       if test "$ac_cv_lib_avformat_av_register_protocol" = "yes" -o \
-               "$ac_cv_lib_avformat_register_protocol" = "yes"; then
-               sxe_cv_feat_ffmpeg_proto_reg="yes"
+
+       if test "$sxe_cv_feat_ffmpeg_headers" = "yes"; then
+               if test "$ac_cv_header_ffmpeg_time_h" = "yes" -o \
+                       "$ac_cv_header_libavutil_time_h" = "yes"; then
+                       sxe_cv_feat_ffmpeg_headers="yes"
+               else
+                       sxe_cv_feat_ffmpeg_headers="no"
+               fi
        fi
-       ## make sure this bloody av context allocator is there
-       if test "$ac_cv_lib_avformat_avformat_alloc_context" = "yes" -o \
-               "$ac_cv_lib_avformat_av_alloc_format_context" = "yes"; then
-               sxe_cv_feat_ffmpeg_avformat_alloc="yes"
+
+        ## make sure either decode_audio is there
+       if test "$ac_cv_lib_avcodec_avcodec_decode_audio" = "yes" -o \
+               "$ac_cv_lib_avcodec_avcodec_decode_audio2" = "yes" -o \
+               "$ac_cv_lib_avcodec_avcodec_decode_audio3" = "yes"; then
+               sxe_cv_feat_ffmpeg_decoders="yes"
        fi
+
        if test "$sxe_cv_feat_ffmpeg_headers" = "yes" -a \
                "$sxe_cv_feat_ffmpeg_decoders" = "yes" -a \
-               "$sxe_cv_feat_ffmpeg_proto_reg" = "yes" -a \
-               "$sxe_cv_feat_ffmpeg_avformat_alloc" = "yes" -a \
-               "$ac_cv_lib_avformat_av_close_input_file" = "yes" -a \
-               "$ac_cv_lib_avformat_av_find_stream_info" = "yes" -a \
-               "$ac_cv_lib_avformat_av_open_input_file" = "yes" -a \
+               "$ac_cv_lib_avformat_avformat_alloc_context" = "yes" -a \
+               "$ac_cv_lib_avformat_avformat_free_context" = "yes" -a \
+               "$ac_cv_lib_avformat_avio_alloc_context" = "yes" -a \
+               "$ac_cv_lib_avformat_avio_size" = "yes" -a \
+               "$ac_cv_lib_avformat_avio_feof" = "yes" -a \
+               "$ac_cv_lib_avformat_avformat_open_input" = "yes" -a \
+               "$ac_cv_lib_avformat_avformat_close_input" = "yes" -a \
+               "$ac_cv_lib_avformat_avformat_find_stream_info" = "yes" -a \
                "$ac_cv_lib_avformat_av_probe_input_format" = "yes" -a \
+               "$ac_cv_lib_avformat_av_iformat_next" = "yes" -a \
                "$ac_cv_lib_avformat_av_read_frame" = "yes" -a \
-               "$ac_cv_lib_avformat_av_register_all" = "yes" -a \
                "$ac_cv_lib_avformat_av_seek_frame" = "yes" -a \
-               "$ac_cv_lib_avformat_avcodec_find_decoder" = "yes" -a \
-               "$ac_cv_lib_avformat_avcodec_open" = "yes" -a \
-               "$ac_cv_lib_avformat_url_fopen" = "yes"; then
+               "$ac_cv_lib_avformat_av_register_all" = "yes" -a \
+               "$ac_cv_lib_avformat_av_dump_format" = "yes" -a \
+               "$ac_cv_lib_avformat_av_get_sample_fmt_string" = "yes" -a \
+               "$ac_cv_lib_avformat_av_get_bytes_per_sample" = "yes" -a \
+               "$ac_cv_lib_avcodec_avcodec_find_decoder" = "yes" -a \
+               "$ac_cv_lib_avcodec_avcodec_open2" = "yes" -a \
+               "$ac_cv_lib_avutil_av_dict_get" = "yes"; then
                sxe_cv_feat_ffmpeg="yes"
        else
                sxe_cv_feat_ffmpeg="no"
        fi
 
-       ## newer ffmpegs want a bioctx** in url_fopen, check that
-       AC_MSG_CHECKING([what url_fopen() needs])
-       sxe_cv_tmp_ffmpeg_url_fopen="uncertain"
-
-       SXE_DUMP_LIBS
-       CPPFLAGS="$CPPFLAGS ${FFMPEG_CPPFLAGS}"
-       SXE_LANG_WERROR([off])
-       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#if defined HAVE_ERRNO_H
-# include <errno.h>
-#endif
-#if defined HAVE_LIBAVFORMAT_AVFORMAT_H
-# include <libavformat/avformat.h>
-#elif defined HAVE_FFMPEG_AVFORMAT_H
-# include <ffmpeg/avformat.h>
-#elif defined HAVE_AVFORMAT_H
-# include <avformat.h>
-#endif
-
-extern int foobar(void);
-int foobar(void)
-{
-       ByteIOContext *bioctx = 0;
-
-       url_fopen(&bioctx, "/foobar", URL_RDONLY);
-       return 0;
-}
-               ]])], [sxe_cv_tmp_ffmpeg_url_fopen="ByteIOContext**"], [:])
-       SXE_RESTORE_LIBS
-
-       SXE_DUMP_LIBS
-       CPPFLAGS="$CPPFLAGS ${FFMPEG_CPPFLAGS}"
-       SXE_LANG_WERROR([on])
-       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#if defined HAVE_ERRNO_H
-# include <errno.h>
-#endif
-#if defined HAVE_LIBAVFORMAT_AVFORMAT_H
-# include <libavformat/avformat.h>
-#elif defined HAVE_FFMPEG_AVFORMAT_H
-# include <ffmpeg/avformat.h>
-#elif defined HAVE_AVFORMAT_H
-# include <avformat.h>
-#endif
-
-extern int foobar(void);
-int foobar(void)
-{
-       ByteIOContext *bioctx = 0;
-
-       url_fopen(bioctx, "/foobar", URL_RDONLY);
-       return 0;
-}
-               ]])], [sxe_cv_tmp_ffmpeg_url_fopen="ByteIOContext*"], [:])
-       SXE_RESTORE_LIBS
-
-       ## post the result
-       AC_MSG_RESULT([$sxe_cv_tmp_ffmpeg_url_fopen])
-
-       if test "$sxe_cv_tmp_ffmpeg_url_fopen" = "ByteIOContext**"; then
-               AC_DEFINE([FFMPEG_URL_FOPEN_BIOCTX_STAR_STAR], [1],
-                       [Whether url_fopen want a ByteIOContext**])
-       elif test "$sxe_cv_tmp_ffmpeg_url_fopen" = "ByteIOContext*"; then
-               AC_DEFINE([FFMPEG_URL_FOPEN_BIOCTX_STAR], [1],
-                       [Whether url_fopen want a ByteIOContext*])
-       else
-               sxe_cv_feat_ffmpeg="no"
-       fi
-
        if test "$sxe_cv_feat_ffmpeg" = "yes"; then
                :
                ACTION_IF_FOUND
@@ -457,64 +411,71 @@ int foobar(void)
 ])dnl SXE_MM_CHECK_FFMPEG
 
 AC_DEFUN([SXE_CHECK_FFMPEG_HEADERS], [dnl
-       FFMPEG_CPPFLAGS="$(${PKG_CONFIG} --cflags libavformat)"
+       FFMPEG_CPPFLAGS="$(${PKG_CONFIG} --cflags libavformat libavcodec libavutil)"
 
        ## backup current configuration
        SXE_DUMP_LIBS
        CPPFLAGS="${CPPFLAGS} ${FFMPEG_CPPFLAGS}"
-       AC_CHECK_HEADERS([avformat.h ffmpeg/avformat.h libavformat/avformat.h])
+       AC_CHECK_HEADERS([avformat.h avcodec.h])
+       AC_CHECK_HEADERS([ffmpeg/avformat.h ffmpeg/avcodec.h])
+       AC_CHECK_HEADERS([ffmpeg/dict.h ffmpeg/time.h])
+       AC_CHECK_HEADERS([libavformat/avformat.h libavcodec/avcodec.h])
+       AC_CHECK_HEADERS([libavutil/dict.h libavutil/time.h])
+
        ## restore configuration
        SXE_RESTORE_LIBS
 ])dnl SXE_CHECK_FFMPEG_HEADERS
 
 AC_DEFUN([SXE_CHECK_FFMPEG_LIBS], [dnl
-       FFMPEG_LDFLAGS="$(${PKG_CONFIG} --libs-only-other libavformat) \
-               $(${PKG_CONFIG} --libs-only-L libavformat)"
-       FFMPEG_LIBS="$(${PKG_CONFIG} --libs-only-l libavformat)"
+       FFMPEG_LDFLAGS="$(${PKG_CONFIG} --libs-only-other libavformat libavcodec libavutil) \
+               $(${PKG_CONFIG} --libs-only-L libavformat libavcodec libavutil)"
+       FFMPEG_LIBS="$(${PKG_CONFIG} --libs-only-l libavformat libavcodec libavutil)"
 
        ## backup current configuration
        SXE_DUMP_LIBS
        LDFLAGS="${LDFLAGS} ${FFMPEG_LDFLAGS}"
 
-       AC_CHECK_LIB([avformat], [av_open_input_file], [:], [:], [${FFMPEG_LIBS}])
-       AC_CHECK_LIB([avformat], [av_close_input_file], [:], [:], [${FFMPEG_LIBS}])
-       AC_CHECK_LIB([avformat], [av_find_stream_info], [:], [:], [${FFMPEG_LIBS}])
-       AC_CHECK_LIB([avformat], [url_fopen], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avcodec], [avcodec_find_decoder], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avcodec], [avcodec_open2], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avcodec], [avcodec_decode_audio], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avcodec], [avcodec_decode_audio2], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avcodec], [avcodec_decode_audio3], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avcodec], [avcodec_decode_audio4], [:], [:], [${FFMPEG_LIBS}])
+
+       AC_CHECK_LIB([avformat], [avformat_open_input], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avformat], [avformat_close_input], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avformat], [avformat_find_stream_info], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avformat], [av_iformat_next], [:], [:], [${FFMPEG_LIBS}])
        AC_CHECK_LIB([avformat], [av_probe_input_format], [:], [:], [${FFMPEG_LIBS}])
-       AC_CHECK_LIB([avformat], [avcodec_find_decoder], [:], [:], [${FFMPEG_LIBS}])
-       AC_CHECK_LIB([avformat], [avcodec_open], [:], [:], [${FFMPEG_LIBS}])
        AC_CHECK_LIB([avformat], [av_read_frame], [:], [:], [${FFMPEG_LIBS}])
        AC_CHECK_LIB([avformat], [av_seek_frame], [:], [:], [${FFMPEG_LIBS}])
        AC_CHECK_LIB([avformat], [av_register_all], [:], [:], [${FFMPEG_LIBS}])
-       AC_CHECK_LIB([avformat], [avcodec_decode_audio], [:], [:], [${FFMPEG_LIBS}])
-       AC_CHECK_LIB([avformat], [avcodec_decode_audio2], [:], [:], [${FFMPEG_LIBS}])
-
-       AC_CHECK_LIB([avformat], [av_alloc_format_context], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avformat], [av_dump_format], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avformat], [av_get_bytes_per_sample], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avformat], [av_get_sample_fmt_string], [:], [:], [${FFMPEG_LIBS}])
        AC_CHECK_LIB([avformat], [avformat_alloc_context], [:], [:], [${FFMPEG_LIBS}])
-       AC_CHECK_LIB([avformat], [register_protocol], [:], [:], [${FFMPEG_LIBS}])
-       AC_CHECK_LIB([avformat], [av_register_protocol], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avformat], [avformat_free_context], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avformat], [avio_alloc_context], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avformat], [avio_size], [:], [:], [${FFMPEG_LIBS}])
+       AC_CHECK_LIB([avformat], [avio_feof], [:], [:], [${FFMPEG_LIBS}])
 
-       if test "$ac_cv_lib_avformat_av_alloc_format_context" = "yes"; then
-               AC_DEFINE([HAVE_AV_ALLOC_FORMAT_CONTEXT], [1], [Description here!])
-       fi
-       if test "$ac_cv_lib_avformat_avformat_alloc_context" = "yes"; then
-               AC_DEFINE([HAVE_AVFORMAT_ALLOC_CONTEXT], [1], [Description here!])
-       fi
+       AC_CHECK_LIB([avutil], [av_dict_get], [:], [:], [${FFMPEG_LIBS}])
 
-       if test "$ac_cv_lib_avformat___avcodec_decode_audio2" = "yes" -o \
-               "$ac_cv_lib_avformat_avcodec_decode_audio2" = "yes"; then
-               AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO2], [1], [Description here!])
+       if test "$ac_cv_lib_avcodec_avcodec_decode_audio" = "yes"; then
+               AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO], [1],
+                         [Define to 1 if avcodec_decode_audio is usable.])
        fi
-       if test "$ac_cv_lib_avformat___avcodec_decode_audio" = "yes" -o \
-               "$ac_cv_lib_avformat_avcodec_decode_audio" = "yes"; then
-               AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO], [1], [Description here!])
+       if test "$ac_cv_lib_avcodec_avcodec_decode_audio2" = "yes"; then
+               AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO2], [1],
+                         [Define to 1 if avcodec_decode_audio2 is usable.])
        fi
-
-       if test "$ac_cv_lib_avformat_av_register_protocol" = "yes"; then
-               AC_DEFINE([HAVE_AV_REGISTER_PROTOCOL], [1], [Description here!])
+       if test "$ac_cv_lib_avcodec_avcodec_decode_audio3" = "yes"; then
+               AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO3], [1],
+                         [Define to 1 if avcodec_decode_audio is usable.])
        fi
-       if test "$ac_cv_lib_avformat_register_protocol" = "yes"; then
-               AC_DEFINE([HAVE_REGISTER_PROTOCOL], [1], [Description here!])
+       if test "$ac_cv_lib_avcodec_avcodec_decode_audio4" = "yes"; then
+               AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO4], [1],
+                         [Define to 1 if avcodec_decode_audio is usable.])
        fi
 
        ## restore configuration
index 4b00c5d..0e554c7 100644 (file)
@@ -59,6 +59,29 @@ AC_DEFUN([SXE_CHECK_PKGCONFIG], [dnl
                ])
 ])dnl SXE_CHECK_PKGCONFIG
 
+AC_DEFUN([SXE_PC_CHECK_EXISTS], [dnl
+       ## arg1 is the module
+       ## defines sxe_cv_pc_<$1>_exists
+       pushdef([mod], [$1])
+       pushdef([shmod], translit([]mod[], [+-.], [___]))
+       pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
+       pushdef([existsvar], [sxe_cv_pc_]shmod[_exists])
+
+       AC_REQUIRE([SXE_CHECK_PKGCONFIG])
+       SXE_MSG_CHECKING([whether pkg-config for ]mod[ exists ])
+       if $PKG_CONFIG --exists []mod[]; then
+               existsvar[]="yes"
+       else
+               existsvar[]="no"
+       fi
+       SXE_MSG_RESULT([$]existsvar[])
+
+       popdef([existsvar])
+       popdef([shmod])
+       popdef([MOD])
+       popdef([mod])
+])dnl SXE_PC_CHECK_EXISTS
+
 AC_DEFUN([SXE_PC_CHECK_VERSION_ATLEAST], [dnl
        ## arg1 is the module
        ## arg2 is the version we want to see
@@ -66,8 +89,8 @@ AC_DEFUN([SXE_PC_CHECK_VERSION_ATLEAST], [dnl
        ## sxe_cv_pc_<$1>_recent_enough_p
        pushdef([mod], [$1])
        pushdef([ver], [$2])
-       pushdef([shmod], translit([mod], [+-.], [___]))
-       pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+       pushdef([shmod], translit([]mod[], [+-.], [___]))
+       pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
        pushdef([vervar], [sxe_cv_pc_]shmod[_version])
        pushdef([verrecp], [sxe_cv_pc_]shmod[_recent_enough_p])
 
@@ -82,10 +105,10 @@ AC_DEFUN([SXE_PC_CHECK_VERSION_ATLEAST], [dnl
 
        SXE_MSG_CHECKING([for ]mod['s actual version])
        vervar[]=$($PKG_CONFIG --modversion []mod[])
-       MOD[_VERSION]=[$]vervar[]
+       []MOD[]_VERSION=[$]vervar[]
        SXE_MSG_RESULT([$]vervar[])
 
-       AC_SUBST(MOD[_VERSION])
+       AC_SUBST([]MOD[]_VERSION)
 
        popdef([verrecp])
        popdef([vervar])
@@ -102,8 +125,8 @@ AC_DEFUN([SXE_PC_CHECK_VERSION_ATMOST], [dnl
        ## sxe_cv_pc_<$1>_recent_enough_p
        pushdef([mod], [$1])
        pushdef([ver], [$2])
-       pushdef([shmod], translit([mod], [+-.], [___]))
-       pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+       pushdef([shmod], translit([]mod[], [+-.], [___]))
+       pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
        pushdef([vervar], [sxe_cv_pc_]shmod[_version])
        pushdef([veroldp], [sxe_cv_pc_]shmod[_old_enough_p])
 
@@ -118,10 +141,10 @@ AC_DEFUN([SXE_PC_CHECK_VERSION_ATMOST], [dnl
 
        SXE_MSG_CHECKING([for ]mod['s actual version])
        vervar[]=$($PKG_CONFIG --modversion []mod[])
-       MOD[_VERSION]=[$]vervar[]
+       []MOD[]_VERSION=[$]vervar[]
        SXE_MSG_RESULT([$]vervar[])
 
-       AC_SUBST(MOD[_VERSION])
+       AC_SUBST([]MOD[]_VERSION)
 
        popdef([verrecp])
        popdef([vervar])
@@ -135,17 +158,17 @@ AC_DEFUN([SXE_PC_CHECK_VERSION], [dnl
        ## arg1 is the module
        ## defines sxe_cv_pc_<$1>_version
        pushdef([mod], [$1])
-       pushdef([shmod], translit([mod], [+-.], [___]))
-       pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+       pushdef([shmod], translit([]mod[], [+-.], [___]))
+       pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
        pushdef([vervar], [sxe_cv_pc_]shmod[_version])
 
        AC_REQUIRE([SXE_CHECK_PKGCONFIG])
        SXE_MSG_CHECKING([for ]mod[ version])
        vervar[]=$($PKG_CONFIG --modversion []mod[])
-       MOD[_VERSION]=[$]vervar[]
+       []MOD[]_VERSION=[$]vervar[]
        SXE_MSG_RESULT([$]vervar[])
 
-       AC_SUBST(MOD[_VERSION])
+       AC_SUBST([]MOD[]_VERSION)
 
        popdef([vervar])
        popdef([shmod])
@@ -157,17 +180,17 @@ AC_DEFUN([SXE_PC_CHECK_LIBS], [dnl
        ## arg1 is the module
        ## defines sxe_cv_pc_<$1>_libs
        pushdef([mod], [$1])
-       pushdef([shmod], translit([mod], [+-.], [___]))
-       pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+       pushdef([shmod], translit([]mod[], [+-.], [___]))
+       pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
        pushdef([libvar], [sxe_cv_pc_]shmod[_libs])
 
        AC_REQUIRE([SXE_CHECK_PKGCONFIG])
        SXE_MSG_CHECKING([for ]mod[ libraries])
        libvar[]=$($PKG_CONFIG --libs-only-l []mod[])
-       MOD[_LIBS]=[$]libvar[]
+       []MOD[]_LIBS=[$]libvar[]
        SXE_MSG_RESULT([$]libvar[])
 
-       AC_SUBST(MOD[_LIBS])
+       AC_SUBST([]MOD[]_LIBS)
 
        popdef([libvar])
        popdef([shmod])
@@ -179,17 +202,17 @@ AC_DEFUN([SXE_PC_CHECK_LDFLAGS], [dnl
        ## arg1 is the module
        ## defines sxe_cv_pc_<$1>_ldflags
        pushdef([mod], [$1])
-       pushdef([shmod], translit([mod], [+-.], [___]))
-       pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+       pushdef([shmod], translit([]mod[], [+-.], [___]))
+       pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
        pushdef([ldfvar], [sxe_cv_pc_]shmod[_ldflags])
 
        AC_REQUIRE([SXE_CHECK_PKGCONFIG])
        SXE_MSG_CHECKING([for ]mod[ ldflags])
        ldfvar[]=$($PKG_CONFIG --libs-only-L []mod[])
-       MOD[_LDFLAGS]=[$]ldfvar[]
+       []MOD[]_LDFLAGS=[$]ldfvar[]
        SXE_MSG_RESULT([$]ldfvar[])
 
-       AC_SUBST(MOD[_LDFLAGS])
+       AC_SUBST([]MOD[]_LDFLAGS)
 
        popdef([ldfvar])
        popdef([shmod])
@@ -201,17 +224,17 @@ AC_DEFUN([SXE_PC_CHECK_CPPFLAGS], [dnl
        ## arg1 is the module
        ## defines sxe_cv_pc_<$1>_cppflags
        pushdef([mod], [$1])
-       pushdef([shmod], translit([mod], [+-.], [___]))
-       pushdef([MOD], translit([shmod], [a-z], [A-Z]))
+       pushdef([shmod], translit([]mod[], [+-.], [___]))
+       pushdef([MOD], translit([]shmod[], [a-z], [A-Z]))
        pushdef([cfvar], [sxe_cv_pc_]shmod[_cppflags])
 
        AC_REQUIRE([SXE_CHECK_PKGCONFIG])
        SXE_MSG_CHECKING([for ]mod[ cppflags])
        cfvar[]=$($PKG_CONFIG --cflags []mod[])
-       MOD[_CPPFLAGS]=[$]cfvar[]
+       []MOD[]_CPPFLAGS=[$]cfvar[]
        SXE_MSG_RESULT([$]cfvar[])
 
-       AC_SUBST(MOD[_CPPFLAGS])
+       AC_SUBST([]MOD[]_CPPFLAGS)
 
        popdef([cfvar])
        popdef([shmod])
index 019eeed..d8befbd 100644 (file)
@@ -51,6 +51,9 @@ AC_DEFUN([SXE_CHECK_SRCDIR_HEALTH], [dnl
                -f "$sxe_blddir/sxemacs_version.m4"; then
                AC_MSG_RESULT([yes])
                srcdir_equals_blddir_p=yes
+               AC_MSG_ERROR([Building "in-tree" is not supported]
+                   [Please create a new directory completely outside of the]
+                   [source tree, and run $progbasename from there.])
        else
                AC_MSG_RESULT([no. Good Boy!])
                srcdir_equals_blddir_p=no
index 8aa5f49..2cfe1ba 100644 (file)
@@ -206,11 +206,18 @@ esac
 
 echo "
 TTY:"
-test "$with_ncurses" = yes && echo "  Compiling in support for ncurses."
-test "$with_curses" = yes && echo "  Compiling in support for curses."
-test "$with_terminfo" = yes && echo "  Compiling in support for terminfo ."
-test "$with_termlib" = yes && echo "  Compiling in support for termlib."
-test "$with_termcap" = yes && echo "  Compiling in support for termcap."
+test "$with_ncurses" = yes     && echo "  Compiling in support for ncurses."
+test "$with_curses" = yes      && echo "  Compiling in support for curses."
+test "$with_tinfo" = yes       && echo "  Compiling in support for tinfo."
+test "$with_terminfo" = yes    && echo "  Compiling in support for terminfo."
+test "$with_termlib" = yes     && echo "  WARNING! Compiling in support for termlib."  \
+                               && echo "  Consider installing ncurses."
+test "$with_termcap" = yes     && echo "  WARNING! Compiling in support for termcap."  \
+                               && echo "  Consider installing ncurses."                \
+                               && echo "  You may need to set TERMCAP or have the file /etc/termcap."
+test "$with_builtin_tty" = yes && echo "  WARNING! Using (brittle) builtin TTY." \
+                               && echo "  Consider installing ncurses."          \
+                               && echo "  You WILL need to set TERMCAP or have the file /etc/termcap."
 test "$with_gpm" = yes && echo "  Compiling in support for GPM (General Purpose Mouse)."
 
 echo "
index aba0e65..33c5d5e 100644 (file)
@@ -54,9 +54,9 @@ endif
 if DESCEND_CL
 SUBDIRS += cl
 endif
-if DESCEND_DBUS
-SUBDIRS += dbus
-endif
+if DESCEND_DBUS
+SUBDIRS += dbus
+endif
 ## ldap is fucking broken, we dont add it
 
 ### handled in master Makefile.am
index 638b2f3..0e9b590 100644 (file)
@@ -238,66 +238,6 @@ ase_make_neighbourhood(Lisp_Object pt, Lisp_Object rad, Lisp_Object metric)
        return result;
 }
 
-/* accessors */
-inline Lisp_Object
-ase_neighbourhood_point(ase_neighbourhood_t n)
-{
-       return n->point;
-}
-
-inline Lisp_Object
-ase_neighbourhood_radius(ase_neighbourhood_t n)
-{
-       return n->radius;
-}
-
-/* Measures */
-static inline void
-_ase_neighbourhood_update_lebesgue(ase_neighbourhood_t n)
-{
-       if (n && NILP(n->lebesgue_measure)) {
-               Lisp_Object i = n->ldata;
-               n->lebesgue_measure = Fase_interval_lebesgue_measure(i);
-       }
-       return;
-}
-
-static inline Lisp_Object
-_ase_neighbourhood_lebesgue(ase_neighbourhood_t n)
-{
-       return n->lebesgue_measure;
-}
-
-inline Lisp_Object
-ase_neighbourhood_lebesgue_measure(ase_neighbourhood_t n)
-{
-       _ase_neighbourhood_update_lebesgue(n);
-       return _ase_neighbourhood_lebesgue(n);
-}
-
-static inline void
-_ase_neighbourhood_update_rational(ase_neighbourhood_t n)
-{
-       if (n && NILP(n->rational_measure)) {
-               Lisp_Object i = n->ldata;
-               n->rational_measure = Fase_interval_rational_measure(i);
-       }
-       return;
-}
-
-static inline Lisp_Object
-_ase_neighbourhood_rational(ase_neighbourhood_t n)
-{
-       return n->rational_measure;
-}
-
-inline Lisp_Object
-ase_neighbourhood_rational_measure(ase_neighbourhood_t n)
-{
-       _ase_neighbourhood_update_rational(n);
-       return _ase_neighbourhood_rational(n);
-}
-
 \f
 /* lisp level */
 DEFUN("ase-neighbourhoodp", Fase_neighbourhoodp, 1, 1, 0, /*
index 52b26c9..e4f365a 100644 (file)
@@ -131,34 +131,95 @@ extern Lisp_Object ase_neighbourhood_closure(Lisp_Object nbh);
 extern Lisp_Object ase_neighbourhood_interior(Lisp_Object nbh);
 
 /* predicates */
-static inline bool
+extern_inline bool
 ase_neighbourhood_contains_obj_p(ase_neighbourhood_t, Lisp_Object);
-static inline bool
+extern_inline bool
 ase_neighbourhood_contains_nbh_p(ase_neighbourhood_t, ase_neighbourhood_t);
-static inline bool ase_neighbourhood_open_p(ase_neighbourhood_t);
-static inline bool ase_neighbourhood_closed_p(ase_neighbourhood_t);
-static inline bool
+extern_inline bool ase_neighbourhood_open_p(ase_neighbourhood_t);
+extern_inline bool ase_neighbourhood_closed_p(ase_neighbourhood_t);
+extern_inline bool
 ase_neighbourhood_less_obj_p(ase_neighbourhood_t, Lisp_Object);
-static inline bool
+extern_inline bool
 ase_neighbourhood_less_nbh_p(ase_neighbourhood_t, ase_neighbourhood_t);
-static inline bool
+extern_inline bool
 ase_neighbourhood_greater_obj_p(ase_neighbourhood_t, Lisp_Object);
-static inline bool
+extern_inline bool
 ase_neighbourhood_greater_nbh_p(ase_neighbourhood_t, ase_neighbourhood_t);
 
-static inline Lisp_Object
+extern_inline Lisp_Object
 ase_neighbourhood_point(ase_neighbourhood_t);
-static inline Lisp_Object
+extern_inline Lisp_Object
 ase_neighbourhood_radius(ase_neighbourhood_t);
 
 /* measures */
-static inline Lisp_Object
+extern_inline Lisp_Object
 ase_neighbourhood_lebesgue_measure(ase_neighbourhood_t);
-static inline Lisp_Object
+extern_inline Lisp_Object
 ase_neighbourhood_rational_measure(ase_neighbourhood_t);
 
 /* inlines */
-static inline bool
+extern_inline Lisp_Object
+ase_neighbourhood_point(ase_neighbourhood_t n)
+{
+       return n->point;
+}
+
+extern_inline Lisp_Object
+ase_neighbourhood_radius(ase_neighbourhood_t n)
+{
+       return n->radius;
+}
+
+/* Measures */
+extern_inline void
+_ase_neighbourhood_update_rational(ase_neighbourhood_t n)
+{
+       if (n && NILP(n->rational_measure)) {
+               Lisp_Object i = n->ldata;
+               n->rational_measure = Fase_interval_rational_measure(i);
+       }
+       return;
+}
+
+extern_inline Lisp_Object
+_ase_neighbourhood_rational(ase_neighbourhood_t n)
+{
+       return n->rational_measure;
+}
+
+extern_inline Lisp_Object
+ase_neighbourhood_rational_measure(ase_neighbourhood_t n)
+{
+       _ase_neighbourhood_update_rational(n);
+       return _ase_neighbourhood_rational(n);
+}
+
+extern_inline void
+_ase_neighbourhood_update_lebesgue(ase_neighbourhood_t n)
+{
+       if (n && NILP(n->lebesgue_measure)) {
+               Lisp_Object i = n->ldata;
+               n->lebesgue_measure = Fase_interval_lebesgue_measure(i);
+       }
+       return;
+}
+
+extern_inline Lisp_Object
+_ase_neighbourhood_lebesgue(ase_neighbourhood_t n)
+{
+       return n->lebesgue_measure;
+}
+
+extern_inline Lisp_Object
+ase_neighbourhood_lebesgue_measure(ase_neighbourhood_t n)
+{
+       _ase_neighbourhood_update_lebesgue(n);
+       return _ase_neighbourhood_lebesgue(n);
+}
+
+
+
+extern_inline bool
 ase_neighbourhood_contains_obj_p(ase_neighbourhood_t n, Lisp_Object obj)
 {
        /* we _know_ atm that n->ldata points to an ase_interval_t */
@@ -166,7 +227,7 @@ ase_neighbourhood_contains_obj_p(ase_neighbourhood_t n, Lisp_Object obj)
        return !NILP(Fase_interval_contains_p(intv, obj));
 }
 
-static inline bool
+extern_inline bool
 ase_neighbourhood_contains_nbh_p(ase_neighbourhood_t n1, ase_neighbourhood_t n2)
 {
        /* we _know_ atm that {n1,n2}->data points to an ase_interval_t */
@@ -175,19 +236,19 @@ ase_neighbourhood_contains_nbh_p(ase_neighbourhood_t n1, ase_neighbourhood_t n2)
        return !NILP(Fase_interval_contains_p(i1, i2));
 }
 
-static inline bool
+extern_inline bool
 ase_neighbourhood_open_p(ase_neighbourhood_t n)
 {
        return n->open_p;
 }
 
-static inline bool
+extern_inline bool
 ase_neighbourhood_closed_p(ase_neighbourhood_t n)
 {
        return !n->open_p;
 }
 
-static inline bool
+extern_inline bool
 ase_neighbourhood_less_obj_p(ase_neighbourhood_t n, Lisp_Object obj)
 {
        /* we _know_ atm that {n1,n2}->data points to an ase_interval_t */
@@ -196,7 +257,7 @@ ase_neighbourhood_less_obj_p(ase_neighbourhood_t n, Lisp_Object obj)
        return (_ase_less_p(a->upper, obj) || _ase_equal_p(a->upper, obj));
 }
 
-static inline bool
+extern_inline bool
 ase_neighbourhood_less_nbh_p(ase_neighbourhood_t n1, ase_neighbourhood_t n2)
 {
        /* we _know_ atm that {n1,n2}->data points to an ase_interval_t */
@@ -206,7 +267,7 @@ ase_neighbourhood_less_nbh_p(ase_neighbourhood_t n1, ase_neighbourhood_t n2)
                _ase_equal_p(a1->upper, a2->lower));
 }
 
-static inline bool
+extern_inline bool
 ase_neighbourhood_greater_obj_p(ase_neighbourhood_t n, Lisp_Object obj)
 {
        /* we _know_ atm that {n1,n2}->data points to an ase_interval_t */
@@ -214,7 +275,7 @@ ase_neighbourhood_greater_obj_p(ase_neighbourhood_t n, Lisp_Object obj)
        return (_ase_less_p(obj, a->lower) || _ase_equal_p(obj, a->lower));
 }
 
-static inline bool
+extern_inline bool
 ase_neighbourhood_greater_nbh_p(ase_neighbourhood_t n1, ase_neighbourhood_t n2)
 {
        /* we _know_ atm that {n1,n2}->data points to an ase_interval_t */
index b7a72eb..405111a 100644 (file)
@@ -55,8 +55,8 @@ cl_loop_step_scanner(Lisp_Object *scanner)
 
 %}
 
-%name-prefix="cl_loop_yy"
-%pure_parser
+%define api.prefix "cl_loop_yy"
+%define api.pure full
 %defines
 
 %parse-param {Lisp_Object *yyscanner}
index a59d7d8..a423972 100644 (file)
@@ -1572,8 +1572,9 @@ cl_loop_perform(cl_loop_sentence_t *lsen)
 \f
 /* ###autoload */
 DEFUN("cl:loop-sentence", Fcl_loop_sentence, 0, UNEVALLED, 0, /*
-The Common Lisp loop macro.
-*/
+Part of The Common Lisp loop macro.
+See: `cl:loop'
+                                                             */
       (args))
 {
        Lisp_Object loop_sentence = cl_loop_make_sentence();
@@ -1611,8 +1612,281 @@ Execute LOOP-SENTENCE.
 }
 
 DEFUN("cl:loop", Fcl_loop, 0, UNEVALLED, 0, /*
-The Common Lisp loop macro.
-*/
+(loop CLAUSE...): The Common Lisp loop macro.
+
+Overview of valid clauses:
+  for VAR from/upfrom/downfrom NUM to/upto/downto/above/below NUM by NUM,
+  for VAR in LIST by FUNC, for VAR on LIST by FUNC, for VAR = INIT then EXPR,
+  for VAR across ARRAY, repeat NUM, with VAR = INIT, while COND, until COND,
+  always COND, never COND, thereis COND, collect EXPR into VAR,
+  append EXPR into VAR, nconc EXPR into VAR, sum EXPR into VAR,
+  count EXPR into VAR, maximize EXPR into VAR, minimize EXPR into VAR,
+  if COND CLAUSE [and CLAUSE]... else CLAUSE [and CLAUSE...],
+  unless COND CLAUSE [and CLAUSE]... else CLAUSE [and CLAUSE...],
+  do EXPRS..., initially EXPRS..., finally EXPRS..., return EXPR,
+  finally return EXPR, named NAME.
+
+The loop macro consists of a series of clauses, which do things like
+iterate variables, set conditions for exiting the loop, accumulating values
+to be returned as the return value of the loop, and executing arbitrary
+blocks of code.  Each clause is proceed in turn, and the loop executes its
+body repeatedly until an exit condition is hit.
+
+It's important to understand that loop clauses such as `for' and `while',
+which look like loop-establishing constructs, don't actually *establish* a
+loop; the looping is established by the `loop' clause itself, which will
+repeatedly process its body until told to stop.  `while' merely establishes
+a condition which, when true, causes the loop to finish, and `for' sets a
+variable to different values on each iteration (e.g. successive elements of
+a list) and sets an exit condition when there are no more values.  This
+means, for example, that if two `for' clauses appear, you don't get two
+nested loops, but instead two variables that are stepped in parallel, and
+two exit conditions, either of which, if triggered, will cause the loop to
+end.  Similarly for a loop with a `for' and a `while' clause.  For example:
+
+(loop
+  for x in list
+  while x
+  do ...)
+
+In each successive iteration, X is set to the next element of the list.  If
+there are no more elements, or if any element is nil (the `while' clause),
+the loop exits.  Otherwise, the block of code following `do' is executed.)
+
+This example also shows that some clauses establish variable bindings --
+essentially like a `let' binding -- and that following clauses can
+reference these variables.  Furthermore, the entire loop is surrounded by a
+block named nil (unless the `named' clause is given), so you can return
+from the loop using the macro `return'. (The other way to exit the loop is
+through the macro `loop-finish'.  The difference is that some loop clauses
+establish or accumulate a value to be returned, and `loop-finish' returns
+this. `return', however, can only return an explicitly-specified value.
+NOTE CAREFULLY: There is a loop clause called `return' as well as a
+standard Lisp macro called `return'.  Normally they work similarly; but if
+you give the loop a name with `named', you will need to use the macro
+`return-from'.)
+
+Another extremely useful feature of loops is called "destructuring".  If,
+in place of VAR, a list (possibly dotted, possibly a tree of arbitary
+complexity) is given, the value to be assigned is assumed to have a similar
+structure to the list given, and variables in the list will be matched up
+with corresponding elements in the structure.  For example:
+
+(loop
+  for (x y) in '((foo 1) (bar 2) (baz 3))
+  do (puthash x y some-hash-table))
+
+will add three elements to a hash table, mapping foo -> 1, bar -> 2, and
+baz -> 3.  As other examples, you can conveniently process alists using
+
+(loop for (x . y) in alist do ...)
+
+and plists using
+
+(loop for (x y) on plist by #'cddr do ...)
+
+Destructuring is forgiving in that mismatches in the number of elements on
+either size will be handled gracefully, either by ignoring or initializing
+to nil.
+
+If you don't understand how a particular loop clause works, create an
+example and use `macroexpand-sexp' to expand the macro.
+
+In greater detail, valid clauses are:
+
+(NOTE: Keywords in lowercase; slashes separate different possibilities
+for keywords, some of which are synonymous; brackets indicate optional
+parts of the clause.  In all of the clauses with `being', the word `being',
+the words `each' or `the', and the difference between singular and plural
+keywords are all just syntactic sugar.  Stylistically, you should write
+either `being each foo' or `being the foos'.)
+
+  for VAR from/upfrom/downfrom NUM1 to/upto/downto/above/below NUM2 [by NUMSTEP]
+    Step VAR across numbers.  `upfrom', `upto', and `below' explicitly
+    indicate upward stepping; `downfrom', `downto', and `above' explicitly
+    indicate downward stepping. (If none of these is given, the default is
+    upward.) `to', `upto', and `downto' cause stepping to include NUM2 as
+    the last iteration, while `above' and `below' stop just before reaching
+    NUM2.  `by' can be given to indicate a stepping increment other than 1.
+
+  for VAR in LIST [by FUNC]
+    Step VAR over elements of a LIST.  FUNC specifies how to get successive
+    sublists and defaults to `cdr'.
+
+  for VAR on LIST [by FUNC]
+    Step VAR over tails of a LIST.  FUNC specifies how to get successive
+    sublists and defaults to `cdr'.
+
+  for VAR in-ref LIST [by FUNC]
+    Step VAR over elements of a LIST, like `for ... in', except the VAR is
+    bound using `symbol-macrolet' instead of `let'.  In essence, VAR is set
+    to a "reference" to the list element instead of the element itself;
+    this us, you can destructively modify the list using `setf' on VAR, and
+    any changes to the list will "magically" reflect themselves in
+    subsequent uses of VAR.
+
+  for VAR = INIT [then EXPR]
+    Set VAR on each iteration of the loop.  If only INIT is given, use it
+    on each iteration.  Otherwise, use INIT on the first iteration and EXPR
+    on subsequent ones.
+
+  for VAR across/across-ref ARRAY
+    Step VAR across a sequence other than a list (string, vector, bit
+    vector).  If `across-ref' is given, VAR is bound using
+    `symbol-macrolet' instead of `let' -- see above.
+
+  for VAR being each/the element/elements in/of/in-ref/of-ref SEQUENCE [using (index INDEX-VAR)]
+    Step VAR across any sequence.  A variable can be specified with a
+    `using' phrase to receive the index, starting at 0.  If `in-ref' or
+    `of-ref' is given, VAR is bound using `symbol-macrolet' instead of
+    `let' -- see above.
+
+  for VAR being each/the hash-key/hash-keys/hash-value/hash-values in/of HASH-TABLE [using (hash-value/hash-key OTHER-VAR)]
+
+  for VAR being each/the hash-key/hash-keys/hash-value/hash-values in/of HASH-TABLE [using (hash-value/hash-key OTHER-VAR)]
+    Map VAR over a hash table.  The various keywords are synonymous except
+    those that distinguish between keys and values.  The `using' phrase is
+    optional and allows both key and value to be bound.
+
+  for VAR being each/the symbol/present-symbol/external-symbol/symbols/present-symbols/external-symbols in/of OBARRAY
+    Map VAR over the symbols in an obarray.  All symbol keywords are
+    currently synonymous.
+
+  for VAR being each/the extent/extents [in/of BUFFER-OR-STRING] [from POS] [to POS]
+    Map VAR over the extents in a buffer or string, defaulting to the
+    current buffer, the beginning and the end, respectively.
+
+  for VAR being each/the interval/intervals [in/of BUFFER-OR-STRING] [property PROPERTY] [from POS] [to POS]
+    Map VAR over the intervals without property change in a buffer or
+    string, defaulting to the current buffer, the beginning and the end,
+    respectively.  If PROPERTY is given, iteration occurs using
+    `next-single-property-change'; otherwise, using
+    `next-property-change'.
+
+  for VAR being each/the window/windows [in/of FRAME]
+    Step VAR over the windows in FRAME, defaulting to the selected frame.
+
+  for VAR being each/the frame/frames
+    Step VAR over all frames.
+
+  for VAR being each/the buffer/buffers [by FUNC]
+    Step VAR over all buffers.  This is actually equivalent to
+    `for VAR in (buffer-list) [by FUNC]'.
+
+  for VAR being each/the key-code/key-codes/key-seq/key-seqs/key-binding/key-bindings in KEYMAP [using (key-code/key-codes/key-seq/key-seqs/key-binding/key-bindings OTHER-VAR)]
+    Map VAR over the entries in a keymap.  Keyword `key-seq' causes
+    recursive mapping over prefix keymaps occurring in the keymap, with VAR
+    getting the built-up sequence (a vector).  Otherwise, mapping does not
+    occur recursively.  `key-code' and `key-seq' refer to what is bound
+    (second argument of `define-key'), and `key-binding' what it's bound to
+    (third argument of `define-key').
+
+  as VAR ...
+    `as' is a synonym for `for'.
+
+  and VAR ...
+    `and' clauses have the same syntax as `for' clauses except that the
+    variables in the clause are bound in parallel with a preceding
+    `and'/`for' clause instead of in series.
+
+  with VAR = INIT
+    Set VAR to INIT once, before doing any iterations.
+
+  repeat NUM
+    Exit the loop if more than NUM iterations have occurred.
+
+  while COND
+    Exit the loop if COND isn't true.
+
+  until COND
+    Exit the loop if COND is true.
+
+  collect EXPR [into VAR]
+    Push EXPR onto the end of a list of values -- stored either in VAR or a
+    temporary variable that will be returned as the return value of the
+    loop if it terminates through an exit condition or a call to
+    `loop-finish'.
+
+  append EXPR [into VAR]
+    Append EXPR (a list) onto the end of a list of values, like `collect'.
+
+  nconc EXPR [into VAR]
+    Nconc EXPR (a list) onto the end of a list of values, like `collect'.
+
+  concat EXPR [into VAR]
+    Concatenate EXPR (a string) onto the end of a string of values, like
+    `collect'.
+
+  vconcat EXPR [into VAR]
+    Concatenate EXPR (a vector) onto the end of a vector of values, like
+    `collect'.
+
+  bvconcat EXPR [into VAR]
+    Concatenate EXPR (a bit vector) onto the end of a bit vector of values,
+    like `collect'.
+
+  sum EXPR [into VAR]
+    Add EXPR to a value, like `collect'.
+
+  count EXPR [into VAR]
+    If EXPR is true, increment a value by 1, like `collect'.
+
+  maximize EXPR [into VAR]
+    IF EXPR is greater than a value, replace the value with EXPR, like
+    `collect'.
+
+  minimize EXPR [into VAR]
+    IF EXPR is less than a value, replace the value with EXPR, like
+    `collect'.
+
+  always COND
+    If COND is true, continue the loop and set the loop return value (the
+    same value that's manipulated by `collect' and friends and is returned
+    by a normal loop exit or an exit using `loop-finish') to t; otherwise,
+    exit the loop and return nil.  The effect is to determine and return
+    whether a condition is true "always" (all iterations of the loop).
+
+  never COND
+    If COND is false, continue the loop and set the loop return value (like
+    `always') to t; otherwise, exit the loop and return nil.  The effect
+    is to determine and return whether a condition is "never" true (all
+    iterations of the loop).
+
+  thereis COND
+    If COND is true, exit the loop and return COND.
+
+  if/when COND CLAUSE [and CLAUSE]... else CLAUSE [and CLAUSE...]
+    If COND is true, execute the directly following clause(s); otherwise,
+    execute the clauses following `else'.
+
+  unless COND CLAUSE [and CLAUSE]... else CLAUSE [and CLAUSE...]
+    If COND is false, execute the directly following clause(s); otherwise, execute the clauses following `else'.
+
+  do EXPRS...
+    Execute the expressions (any Lisp forms).
+
+  initially EXPRS...
+    Execute EXPR once, before doing any iterations, and after values have
+    been set using `with'.
+
+  finally EXPRS...
+    Execute EXPR once, directly before the loop terminates.  This will not
+    be executed if the loop terminates prematurely as a result of `always',
+    `never', `thereis', or `return'.
+
+  return EXPR
+    Exit from the loop and return EXPR.
+
+  finally return EXPR
+    Specify the value to be returned when the loop exits. (Unlike `return',
+    this doesn't cause the loop to immediately exit; it will exit whenever
+    it normally would have.) This takes precedence over a return value
+    specified with `collect' and friends or `always' and friends.
+
+  named NAME
+    Specify the name for block surrounding the loop, in place of nil.
+    (See `block'.)
+                                           */
       (args))
 {
        Lisp_Object loop_sentence = Qnil;
@@ -1673,7 +1947,7 @@ Format is: (do ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)
 
 /* ###autoload */
 DEFUN("cl:do*", Fcl_doX, 2, UNEVALLED, 0, /*
-The Common Lisp `do' loop.
+The Common Lisp `do*' loop.
 Format is: (do* ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)
 */
       (args))
@@ -1706,10 +1980,15 @@ Format is: (do* ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)
 
 
 /* ###autoload */
+
 DEFUN("cl:dotimes", Fcl_dotimes, 1, UNEVALLED, 0, /*
 The Common Lisp `dotimes' loop.
 Format is: (dotimes (VAR COUNT [RESULT]) BODY...)
-*/
+
+Loop a certain number of times. Evaluate BODY with VAR bound to
+successive integers from 0, inclusive,to COUNT, exclusive.  Then
+evaluate RESULT to get return value, default nil.
+                                                 */
       (args))
 {
        /* This function can GC */
@@ -1751,7 +2030,10 @@ Format is: (dotimes (VAR COUNT [RESULT]) BODY...)
 DEFUN("cl:dolist", Fcl_dolist, 1, UNEVALLED, 0, /*
 The Common Lisp `dolist' loop.
 Format is: (dolist (VAR LIST [RESULT]) BODY...)
-*/
+loop over a list.
+Evaluate BODY with VAR bound to each `car' from LIST, in turn.
+Then evaluate RESULT to get return value, default nil.
+                                               */
       (args))
 {
        /* This function can GC */
@@ -1801,7 +2083,10 @@ extern Lisp_Object check_obarray(Lisp_Object obarray);
 DEFUN("cl:do-symbols", Fcl_do_symbols, 1, UNEVALLED, 0, /*
 The Common Lisp `dolist' loop.
 Format is: (do-symbols (VAR [OBARRAY [RESULT]]) BODY...)
-*/
+loop over all symbols.
+Evaluate BODY with VAR bound to each interned symbol, or to each symbol
+from OBARRAY.
+                                                       */
       (args))
 {
        /* This function can GC */
index e881780..3750696 100644 (file)
@@ -59,7 +59,11 @@ PROVIDE(cl);
 \f
 /* ###autoload */
 DEFUN("cl:pop", Fcl_pop, 1, UNEVALLED, 0, /*
-*/
+(pop PLACE): remove and return the head of the list stored in PLACE.
+Analogous to (prog1 (car PLACE) (setf PLACE (cdr PLACE))), though more
+careful about evaluating each argument only once and in the right order.
+PLACE may be a symbol, or any generalized variable allowed by `setf'.
+                                         */
       (args))
 {
        /* This function can GC */
@@ -84,7 +88,13 @@ DEFUN("cl:pop", Fcl_pop, 1, UNEVALLED, 0, /*
 
 /* ###autoload */
 DEFUN("cl:push", Fcl_push, 2, UNEVALLED, 0, /*
-*/
+(push X PLACE): insert X at the head of the list stored in PLACE.
+Analogous to (setf PLACE (cons X PLACE)), though more careful about
+evaluating each argument only once and in the right order.  PLACE may
+be a symbol, or any generalized variable allowed by `setf'; that is,
+it does not necessarily have to be a list, though `push' is most often
+used on lists.
+                                           */
       (args))
 {
        /* This function can GC */
@@ -108,7 +118,11 @@ DEFUN("cl:push", Fcl_push, 2, UNEVALLED, 0, /*
 
 /* ###autoload */
 DEFUN("cl:pushnew", Fcl_pushnew, 2, UNEVALLED, 0, /*
-*/
+(pushnew X PLACE): insert X at the head of the list stored in PLACE.
+Like (push X PLACE), except that the list is unmodified if X is `eql'
+to an element already on the list.
+Keywords supported: :test :test-not :key
+                                                 */
       (args))
 {
        /* This function can GC */
@@ -142,7 +156,9 @@ int emodcl_eql(Lisp_Object a, Lisp_Object b)
 
 /* ###autoload */
 DEFUN("cl:eql", Fcl_eql, 2, 2, 0, /*
-*/
+Return t if the two args are the same Lisp object.
+Floating-point numbers of equal value are `eql', but they may not be `eq'.
+                                 */
       (a, b))
 {
        if (EMOD_CL_EQL(a, b))
@@ -153,7 +169,10 @@ DEFUN("cl:eql", Fcl_eql, 2, 2, 0, /*
 
 /* ###autoload */
 DEFUN("cl:list*", Fcl_list_, 1, MANY, 0, /*
-*/
+Return a new list with specified args as elements, cons'd to last arg.
+Thus, `(list* A B C D)' is equivalent to `(nconc (list A B C) D)', or to
+`(cons A (cons B (cons C D)))'.
+                                        */
       (int nargs, Lisp_Object *args))
 {
        if (nargs == 1)
@@ -169,7 +188,8 @@ DEFUN("cl:list*", Fcl_list_, 1, MANY, 0, /*
 
 /* ###autoload */
 DEFUN("cl:tailp", Fcl_tailp, 2, 2, 0, /*
-*/
+Return true if SUBLIST is a tail of LIST.
+                                     */
       (list, object))
 {
        Lisp_Object trav1 = Qnil, trav2 = Qnil;
@@ -209,7 +229,8 @@ DEFUN("cl:tailp", Fcl_tailp, 2, 2, 0, /*
 
 /* ###autoload */
 DEFUN("cl:ldiff", Fcl_ldiff, 2, 2, 0, /*
-*/
+Return a copy of LIST with the tail SUBLIST removed.
+                                     */
       (list, object))
 {
        Lisp_Object result = Qnil, tmp1 = Qnil, tmp2 = Qnil;
index 5fc372e..9c07f16 100644 (file)
@@ -3306,7 +3306,7 @@ Lisp_Object make_string_nocopy(Bufbyte *contents, Bytecount length)
 #ifdef EF_USE_COMPRE
        s->compre = Qnil;
 #endif
-       set_string_data(s, (Bufbyte*)contents);
+       set_string_data(s, contents);
        set_string_length(s, length);
 
        XSETSTRING(val, s);
index 922fa9c..429bb24 100644 (file)
@@ -3046,7 +3046,7 @@ static int directory_is_current_directory(Extbyte * pwd)
                /* Failure for failure, lets try using the external
                   format anyway..
                */
-               pwd_internal=pwd;
+               pwd_internal=(Bufbyte*)pwd;
 
        }
        if( pwd_internal == NULL ) {
index 8157c82..8eb8186 100644 (file)
@@ -1049,6 +1049,8 @@ execute_optimized_program(const Opbyte *program,
                        Lisp_Object args;
 
                        orig_fun = fun = XCAR(op);
+                       SXE_SET_UNUSED(orig_fun);
+
                        args = XCDR(op);
                        if (SYMBOLP (fun) && !EQ(fun, Qunbound) &&
                            (fun = XSYMBOL(fun)->function, SYMBOLP(fun)))
index a7118d0..b77e2ca 100644 (file)
@@ -276,7 +276,10 @@ DOESNT_RETURN initial_command_loop(Lisp_Object load_me)
        if (!noninteractive &&
            (!CONSOLEP(Vselected_console) ||
             CONSOLE_STREAM_P(XCONSOLE(Vselected_console)))) {
-               fprintf(stderr, "ni:%d CONSP(Vsel):%d  CONSSTRP(XCONS(...)):%d\n",
+               fprintf(stderr,
+                        "\nFATAL error starting up initial console\n  "
+                        "noninteractive:%d CONSP(Vselected_console):%d "
+                        "CONSOLE_STREAM_P(XCONSOLE(...)):%d",
                        noninteractive,
                        CONSOLEP(Vselected_console),
                        CONSOLE_STREAM_P(XCONSOLE(Vselected_console)));
index 8cec22b..c0cd01e 100644 (file)
@@ -130,7 +130,7 @@ dired_realpath(const char *file)
 {
        char *result = xmalloc_atomic(4096);
 
-       if ( realpath(file, result) == NULL ) {
+       if ( xrealpath(file, result) == NULL ) {
                xfree(result);
                result = NULL;
        }
index 8e72ea4..e894834 100644 (file)
@@ -336,7 +336,7 @@ pdump_get_entry_list(const struct struct_description *sdesc)
        }
        pdump_struct_table.list[pdump_struct_table.count].list.first = 0;
        pdump_struct_table.list[pdump_struct_table.count].list.align =
-           ALIGNOF(max_align_t);
+           ALIGNOF(sxe_max_align_t);
        pdump_struct_table.list[pdump_struct_table.count].list.count = 0;
        pdump_struct_table.list[pdump_struct_table.count].sdesc = sdesc;
 
@@ -831,7 +831,7 @@ pdump_scan_by_alignment(void (*f) (pdump_entry_list_elt *,
 {
        int align;
 
-       for (align = ALIGNOF(max_align_t); align; align >>= 1) {
+       for (align = ALIGNOF(sxe_max_align_t); align; align >>= 1) {
                size_t i;
                pdump_entry_list_elt *elt;
 
@@ -994,11 +994,11 @@ pdump(const char *dumpfile)
        pdump_object_table = xnew_array(pdump_entry_list, lrecord_type_count);
        pdump_alert_undump_object = xnew_array(int, lrecord_type_count);
 
-       assert(ALIGNOF(max_align_t) <= pdump_align_table[0]);
+       assert(ALIGNOF(sxe_max_align_t) <= pdump_align_table[0]);
 
        for (i = 0; i < countof(pdump_align_table); i++)
-               if (pdump_align_table[i] > ALIGNOF(max_align_t))
-                       pdump_align_table[i] = ALIGNOF(max_align_t);
+               if (pdump_align_table[i] > ALIGNOF(sxe_max_align_t))
+                       pdump_align_table[i] = ALIGNOF(sxe_max_align_t);
 
        flush_all_buffer_local_cache();
 
@@ -1020,7 +1020,7 @@ pdump(const char *dumpfile)
 
        for (i = 0; i < lrecord_type_count; i++) {
                pdump_object_table[i].first = 0;
-               pdump_object_table[i].align = ALIGNOF(max_align_t);
+               pdump_object_table[i].align = ALIGNOF(sxe_max_align_t);
                pdump_object_table[i].count = 0;
                pdump_alert_undump_object[i] = 0;
        }
@@ -1028,7 +1028,7 @@ pdump(const char *dumpfile)
        pdump_struct_table.size = -1;
 
        pdump_opaque_data_list.first = 0;
-       pdump_opaque_data_list.align = ALIGNOF(max_align_t);
+       pdump_opaque_data_list.align = ALIGNOF(sxe_max_align_t);
        pdump_opaque_data_list.count = 0;
        depth = 0;
 
@@ -1062,11 +1062,11 @@ pdump(const char *dumpfile)
        header.nb_root_struct_ptrs = Dynarr_length(pdump_root_struct_ptrs);
        header.nb_opaques = Dynarr_length(pdump_opaques);
 
-       cur_offset = ALIGN_SIZE(sizeof(header), ALIGNOF(max_align_t));
+       cur_offset = ALIGN_SIZE(sizeof(header), ALIGNOF(sxe_max_align_t));
        max_size = 0;
 
        pdump_scan_by_alignment(pdump_allocate_offset);
-       cur_offset = ALIGN_SIZE(cur_offset, ALIGNOF(max_align_t));
+       cur_offset = ALIGN_SIZE(cur_offset, ALIGNOF(sxe_max_align_t));
        header.stab_offset = cur_offset;
 
        pdump_buf = xmalloc_atomic(max_size);
@@ -1086,7 +1086,7 @@ pdump(const char *dumpfile)
                } else {
 
                        fwrite(&header, sizeof(header), 1, pdump_out);
-                       PDUMP_ALIGN_OUTPUT(max_align_t);
+                       PDUMP_ALIGN_OUTPUT(sxe_max_align_t);
 
                        pdump_scan_by_alignment(pdump_dump_data);
 
index 930d380..06bf61b 100644 (file)
@@ -1666,6 +1666,8 @@ Return DEVICE display as FFI object.
 /* Callbacks */
 #define FFI_CC_CDECL 0
 
+void* ffi_make_callback_x86(Lisp_Object data, int cc_type);
+
 #if defined __i386__
 static void
 ffi_callback_call_x86(Lisp_Object cbk_info, char *arg_buffer)
@@ -1817,6 +1819,13 @@ Create dynamic callback and return pointer to it.
        ptr = Fmake_ffi_object(Qpointer, Qnil);
 #ifdef __i386__
        XEFFIO(ptr)->fop.ptr = ffi_make_callback_x86(data, XINT(cctype));
+#else
+#ifdef SXEMACS
+        error("FFI Callbacks not supported on this configuration");
+#else
+        signal_ferror(Qinternal_error,
+                      "FFI Callbacks not supported on this configuration");
+#endif /* SXEMACS */
 #endif /* __i386__ */
        return ptr;
 }
index 8feec5d..49fa20d 100644 (file)
@@ -2778,8 +2778,15 @@ main(int argc, char **argv, char **envp)
 /* various system shared libraries have been built and linked with */
 /* GCC >= 2.8.  -slb */
 #if defined(GNU_MALLOC)
+#if defined(HAVE_MORECORE_HOOK)
 static void voodoo_free_hook(void *mem)
 {
+  /* If it no longer works, we'll know about it. For now there is really no
+     good alternatic. Shut the warning off
+  */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+
        /* Disable all calls to free() when SXEmacs is exiting and it doesn't */
        /* matter. */
        __free_hook =
@@ -2788,7 +2795,9 @@ static void voodoo_free_hook(void *mem)
            (__typeof__(__free_hook))
 #endif
            voodoo_free_hook;
+#pragma GCC diagnostic pop
 }
+#endif
 #endif                         /* GNU_MALLOC */
 
 DEFUN("kill-emacs", Fkill_emacs, 0, 1, "P", /*
@@ -2843,12 +2852,17 @@ all of which are called before SXEmacs is actually killed.
        shut_down_emacs(0, STRINGP(arg) ? arg : Qnil, 0);
 
 #if defined(GNU_MALLOC)
+#if defined(HAVE_MORECORE_HOOK)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
        __free_hook =
 #if defined __GNUC__ || defined __INTEL_COMPILER
 /* prototype of __free_hook varies with glibc version */
            (__typeof__(__free_hook))
 #endif
            voodoo_free_hook;
+#pragma GCC diagnostic pop
+#endif
 #endif
 
        exit(INTP(arg) ? XINT(arg) : 0);
@@ -3064,6 +3078,7 @@ and announce itself normally when it is run.
                garbage_collect_1();
 
 #ifdef PDUMP
+               SXE_SET_UNUSED(symfile_ext);
                pdump(filename_ext);
 #else
 
@@ -3213,6 +3228,8 @@ static int assertions_dont_abort = 0;
 
 #define enter_debugger()
 
+void debug_backtrace();
+
 void
 assert_failed(const char *file, int line, const char *expr)
 {
index 2e53fbf..0ff4ba8 100644 (file)
@@ -33,6 +33,7 @@ extern EMACS_INT Vmost_negative_int, Vmost_positive_int;
 extern Lisp_Object Qzero, Qone;
 
 #if defined HAVE_MPZ && (defined WITH_GMP || defined WITH_MP)
+extern Lisp_Object make_bigz(long);
 #define make_integer(x)                                                        \
        (NUMBER_FITS_IN_AN_EMACS_INT(x) ? make_int(x) : make_bigz(x))
 #else
index 7214800..dbca26a 100644 (file)
@@ -35,7 +35,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 \f
 Lisp_Object Veuler;
 Lisp_Object Veuler_mascheroni;
-Lisp_Object Vpi;
+Lisp_Object Vbigfr_pi;
 
 bigfr ent_scratch_bigfr;
 static ase_nullary_operation_f Qent_mpfr_zero, Qent_mpfr_one;
@@ -1599,8 +1599,8 @@ void init_ent_mpfr(void)
        Veuler_mascheroni = make_bigfr(0.0, 2048UL);
        mpfr_const_euler(XBIGFR_DATA(Veuler_mascheroni), GMP_RNDN);
 
-       Vpi = make_bigfr(0.0, 2048UL);
-       mpfr_const_pi(XBIGFR_DATA(Vpi), GMP_RNDN);
+       Vbigfr_pi = make_bigfr(0.0, 2048UL);
+       mpfr_const_pi(XBIGFR_DATA(Vbigfr_pi), GMP_RNDN);
 }
 
 void syms_of_ent_mpfr(void)
@@ -1620,7 +1620,7 @@ void vars_of_ent_mpfr(void)
        /* just some dummy values atm, to make the dumper smile */
        Veuler = make_int(1L);
        Veuler_mascheroni = make_int(1L);
-       Vpi = make_int(1L);
+       Vbigfr_pi = make_int(1L);
 
        DEFVAR_CONST_LISP("euler", &Veuler /*
 The value of Euler's constant e (2.7182818...).
@@ -1628,7 +1628,7 @@ The value of Euler's constant e (2.7182818...).
        DEFVAR_CONST_LISP("euler-mascheroni", &Veuler_mascheroni /*
 The value of the Euler-Mascheroni constant (0.5772156...).
                                                                 */);
-       DEFVAR_CONST_LISP("pi", &Vpi /*
+       DEFVAR_CONST_LISP("bigfr-pi", &Vbigfr_pi /*
 The value of pi (3.1415926...).
                                     */);
 
index 30e7b5f..143bd08 100644 (file)
@@ -41,7 +41,7 @@ extern Lisp_Object Qbigfrp;
 
 extern Lisp_Object Veuler;
 extern Lisp_Object Veuler_mascheroni;
-extern Lisp_Object Vpi;
+extern Lisp_Object Vbigfr_pi;
 
 \f
 typedef struct Lisp_Bigfr Lisp_Bigfr;
index 863a075..3bfb502 100644 (file)
@@ -783,65 +783,60 @@ If optional argument PRECISION is non-nil, its value
 }
 
 #if defined(HAVE_FPFLOAT) || defined(HAVE_MPFR) && defined WITH_MPFR
-DEFUN("log", Flog, 1, 3, 0,    /*
-Return the natural logarithm of NUMBER.
-If second optional argument BASE is given, return the logarithm of
-NUMBER using that base.
-If third optional argument PRECISION is given, use its value
+
+#define RETURN_WHEN_INDEF(number)                                   \
+        if (INDEFP(number)) {                                       \
+                if (XINDEF_DATA(number) == POS_INFINITY) {          \
+                        return number;                              \
+                } else if (XINDEF_DATA(number) == NEG_INFINITY) {      \
+                        return make_indef(NOT_A_NUMBER);            \
+                } else {                                            \
+                        return number;                              \
+                }                                                   \
+        }
+
+DEFUN("log10", Flog10, 1, 2, 0,        /*
+Return the logarithm base 10 of NUMBER.
+If second optional argument PRECISION is given, use its value
 (an integer) as precision.
 */
-      (number, base, precision))
+      (number, precision))
 {
+       RETURN_WHEN_INDEF(number);
+
 #if defined HAVE_MPFR && defined WITH_MPFR
        Lisp_Object bfrnumber;
 
-       if (!NILP(base)) {
-               Lisp_Object _logn, _logb;
-               _logn = Flog(number, Qnil, precision);
-               if (UNLIKELY(INDEFP(_logn))) {
-                       return _logn;
-               }
-               _logb = Flog(base, Qnil, precision);
-               return ent_binop(ASE_BINARY_OP_QUO, _logn, _logb);
-       }
-
-       if (INDEFP(number)) {
-               if (XINDEF_DATA(number) == POS_INFINITY) {
-                       return number;
-               } else if (XINDEF_DATA(number) == NEG_INFINITY) {
-                       return make_indef(NOT_A_NUMBER);
-               } else {
-                       return number;
-               }
-       }
-
        bigfr_set_prec(ent_scratch_bigfr,
                       internal_get_precision(precision));
 
        bfrnumber = Fcoerce_number(number, Qbigfr, Qnil);
-       bigfr_log(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
+       bigfr_log10(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
        return make_bigfr_bfr(ent_scratch_bigfr);
 
 #else  /* !HAVE_MPFR */
-       if (INDEFP(number)) {
-               goto indefcase;
-       }
-
        number = ent_lift(number, FLOAT_T, NULL);
 
+       RETURN_WHEN_INDEF(number);
+
        if (FLOATP(number)) {
                fpfloat d;
-               d = log(XFLOAT_DATA(number));
+#if HAVE_LOG10
+               d = log10(XFLOAT_DATA(number));
                return make_float(d);
-       } else if (INDEFP(number)) {
-       indefcase:
-               if (XINDEF_DATA(number) == POS_INFINITY) {
-                       return number;
-               } else if (XINDEF_DATA(number) == NEG_INFINITY) {
-                       return make_indef(NOT_A_NUMBER);
-               } else {
-                       return number;
-               }
+#elif HAVE_LOG2
+                static const fpflot log2_10 = log2(10);
+                d = log2(XFLOAT_DATA(number));
+                RETURN_WHEN_INDEF(d);
+                return make_float(d/log2_10);
+#elif HAVE_LOG
+                static const fpflot log_10 - log(10);
+                d = log(XFLOAT_DATA(number));
+                RETURN_WHEN_INDEF(d);
+                return make_float(d/log_10);
+#else
+                return ase_unary_operation_undefined(number);
+#endif
        }
 
        Fsignal(Qarith_error, list1(number));
@@ -851,51 +846,109 @@ If third optional argument PRECISION is given, use its value
 #endif /* HAVE_MPFR */
 }
 
-DEFUN("log10", Flog10, 1, 2, 0,        /*
-Return the logarithm base 10 of NUMBER.
+DEFUN("log2", Flog2, 1, 2, 0,  /*
+Return the logarithm base 2 of NUMBER.
 If second optional argument PRECISION is given, use its value
 (an integer) as precision.
 */
       (number, precision))
 {
+        RETURN_WHEN_INDEF(number);
+
 #if defined HAVE_MPFR && defined WITH_MPFR
-       Lisp_Object bfrnumber;
+        Lisp_Object bfrnumber;
 
-       if (INDEFP(number)) {
-               if (XINDEF_DATA(number) == POS_INFINITY)
-                       return number;
-               else if (XINDEF_DATA(number) == NEG_INFINITY)
-                       return make_indef(NOT_A_NUMBER);
-               else
-                       return number;
+        bigfr_set_prec(ent_scratch_bigfr,
+                       internal_get_precision(precision));
+
+        bfrnumber = Fcoerce_number(number, Qbigfr, Qnil);
+        bigfr_log2(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
+        return make_bigfr_bfr(ent_scratch_bigfr);
+#else
+        number = ent_lift(number, FLOAT_T, NULL);
+
+        RETURN_WHEN_INDEF(number);
+
+        if (FLOATP(number)) {
+                fpfloat d;
+#if HAVE_LOG2
+                d = log2(XFLOAT_DATA(number));
+                return make_float(d);
+#elif HAVE_LOG
+                static const fpflot log_2 - log(2);
+                d = log(XFLOAT_DATA(number));
+                RETURN_WHEN_INDEF(d);
+                return make_float(d/log_2);
+#else
+                return ase_unary_operation_undefined(number);
+#endif
+        }
+
+        Fsignal(Qarith_error, list1(number));
+        return Qnil;
+
+        if (NILP(precision));
+#endif /* HAVE_MPFR */
+}
+
+DEFUN("log", Flog, 1, 3, 0,    /*
+Return the natural logarithm of NUMBER.
+If second optional argument BASE is given, return the logarithm of
+NUMBER using that base.
+If third optional argument PRECISION is given, use its value
+(an integer) as precision.
+*/
+      (number, base, precision))
+{
+       RETURN_WHEN_INDEF(number);
+
+       if (INTEGERP(base)) {
+                switch(XINT(base)) {
+                case 2 : return Flog2 (number, precision);
+                case 10: return Flog10(number, precision);
+                default: break; /* Intentional Fall through */
+                }
+       }
+
+
+#if defined HAVE_MPFR && defined WITH_MPFR
+       if (!NILP(base)) {
+                /* Not all bignumber libs optimize log2, for instance MPFR
+                   implements log2 in function of log. */
+                Lisp_Object _logn, _logb;
+                _logn = Flog(number, Qnil, precision);
+                RETURN_WHEN_INDEF(_logn);
+                _logb = Flog(base, Qnil, precision);
+                return ent_binop(ASE_BINARY_OP_QUO, _logn, _logb);
        }
 
+       Lisp_Object bfrnumber;
+
        bigfr_set_prec(ent_scratch_bigfr,
-                      internal_get_precision(precision));
+                       internal_get_precision(precision));
 
        bfrnumber = Fcoerce_number(number, Qbigfr, Qnil);
-       bigfr_log10(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
+       bigfr_log(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
        return make_bigfr_bfr(ent_scratch_bigfr);
 
 #else  /* !HAVE_MPFR */
-       if (INDEFP(number)) {
-               goto indefcase;
+        if (!NILP(base)) {
+                /* Processor implementations tend to give an edge to log2 */
+                Lisp_Object _logn, _logb;
+                _logn = Flog2(number, precision);
+                RETURN_WHEN_INDEF(_logn);
+                _logb = Flog2(base, precision);
+                return ent_binop(ASE_BINARY_OP_QUO, _logn, _logb);
        }
 
        number = ent_lift(number, FLOAT_T, NULL);
 
+       RETURN_WHEN_INDEF(number);
+
        if (FLOATP(number)) {
-               fpfloat d;
-               d = log10(XFLOAT_DATA(number));
-               return make_float(d);
-       } else if (INDEFP(number)) {
-       indefcase:
-               if (XINDEF_DATA(number) == POS_INFINITY)
-                       return number;
-               else if (XINDEF_DATA(number) == NEG_INFINITY)
-                       return make_indef(NOT_A_NUMBER);
-               else
-                       return number;
+                fpfloat d;
+                d = log(XFLOAT_DATA(number));
+                return make_float(d);
        }
 
        Fsignal(Qarith_error, list1(number));
@@ -905,34 +958,7 @@ If second optional argument PRECISION is given, use its value
 #endif /* HAVE_MPFR */
 }
 
-#if defined HAVE_MPFR && defined WITH_MPFR
-DEFUN("log2", Flog2, 1, 2, 0,  /*
-Return the logarithm base 2 of NUMBER.
-If second optional argument PRECISION is given, use its value
-(an integer) as precision.
-*/
-      (number, precision))
-{
-       Lisp_Object bfrnumber;
-
-       if (INDEFP(number)) {
-               if (XINDEF_DATA(number) == POS_INFINITY)
-                       return number;
-               else if (XINDEF_DATA(number) == NEG_INFINITY)
-                       return make_indef(NOT_A_NUMBER);
-               else
-                       return number;
-       }
-
-       bigfr_set_prec(ent_scratch_bigfr,
-                      internal_get_precision(precision));
-
-       bfrnumber = Fcoerce_number(number, Qbigfr, Qnil);
-       bigfr_log2(ent_scratch_bigfr, XBIGFR_DATA(bfrnumber));
-       return make_bigfr_bfr(ent_scratch_bigfr);
-}
-#endif /* HAVE_MPFR */
-
+#undef RETURN_WHEN_INDEF
 
 DEFUN("sqrt", Fsqrt, 1, 2, 0,  /*
 Return the square root of NUMBER.
@@ -2324,9 +2350,7 @@ void syms_of_floatfns(void)
 #endif
 #if defined(HAVE_FPFLOAT) || defined(HAVE_MPFR) && defined WITH_MPFR
        DEFSUBR(Flog);
-#if defined HAVE_MPFR && defined WITH_MPFR
        DEFSUBR(Flog2);
-#endif /* HAVE_MPFR */
        DEFSUBR(Flog10);
        DEFSUBR(Fsqrt);
        DEFSUBR(Fcube_root);
index 126d4f3..dc0a68b 100644 (file)
@@ -4878,7 +4878,8 @@ asyneq_handle_non_command_event(event_queue_t eq)
        WITH_DLLIST_TRAVERSE(
                eq_queue(eq),
                if (!command_event_p((Lisp_Object)dllist_item)) {
-                       eqev = (Lisp_Object)dllist_pop_inner(eq_queue(eq), _el);
+                       void *eqev_p=dllist_pop_inner(eq_queue(eq), _el);
+                       eqev = (Lisp_Object)eqev_p;
                        break;
                });
 
index 4a15934..2320548 100644 (file)
@@ -378,6 +378,22 @@ Return the directory component in file name FILENAME.
 Return nil if FILENAME does not include a directory.
 Otherwise return a directory spec.
 Given a Unix syntax file name, returns a string ending in slash.
+
+Concatenating the return of file-name-directory and the string
+returned by file-name-nondirectory yields a complete pathname.
+
+Samples:
+filename       file-name-directory   file-name-nondirectory
+"/usr/lib"     "/usr/"               "lib"
+"/usr/lib/"    "/usr/lib/"           ""
+"/usr/"        "/usr/"               ""
+"/usr"         "/"                   "usr"
+"usr"          nil                   "usr"
+"/"            "/"                   ""
+"."            nil                   "."
+"./"           "./"                  ""
+".."           nil                   ".."
+
 */
       (filename))
 {
@@ -415,6 +431,24 @@ Return file name FILENAME sans its directory.
 For example, in a Unix-syntax file name,
 this is everything after the last slash,
 or the entire name if it contains no slash.
+
+Concatenating the return of file-name-directory and the string
+returned by file-name-nondirectory yields a complete pathname.
+
+It is equivalent to the GNU version of basename.
+
+Samples:
+filename       file-name-directory   file-name-nondirectory
+"/usr/lib"     "/usr/"               "lib"
+"/usr/lib/"    "/usr/lib/"           ""
+"/usr/"        "/usr/"               ""
+"/usr"         "/"                   "usr"
+"usr"          nil                   "usr"
+"/"            "/"                   ""
+"."            nil                   "."
+"./"           "./"                  ""
+".."           nil                   ".."
+
 */
       (filename))
 {
@@ -477,12 +511,30 @@ Bytecount file_basename_match_extension(Lisp_Object filename,
 
 DEFUN("file-basename", Ffile_basename, 1, 2, 0,        /*
 Return the basename of FILENAME sans its base directory.
-If EXTENSION is non-nil the extension is also removed if it matches the regexp.
-EXTENSION can be a list of regexps.
-For example, in a Unix-syntax file name,
-this is everything after the last slash,
-or the entire name if it contains no slash.
-It ignores trailing slash.
+
+If EXTENSION is non-nil the extension is also removed if it matches
+the regexp.  EXTENSION can be a list of regexps.
+
+For example, in a Unix-syntax file name, this is everything after the
+last slash, or the entire name if it contains no slash.
+It ignores trailing slash unless filename is '/' in which case it
+returns '/'.
+
+Concatenating the string returned by file-dirname, a "/", and the
+string returned by file-basename yields a complete pathname.
+
+Sample returns (POSIX 1003.1 compliant):
+
+filename       file-dirname   file-basename
+/usr/lib       /usr           lib
+/usr/lib/      /usr           lib
+/usr/          /              usr
+usr            .              usr
+/              /              /
+.              .              .
+./             .              .
+..             .              ..
+
 */
       (filename, extension))
 {
@@ -511,8 +563,11 @@ It ignores trailing slash.
        beg = XSTRING_DATA(filename);
        end = p = beg + XSTRING_LENGTH(filename);
        if ( IS_ANY_SEP(p[-1]) ) {
-         p--;
-         end--;
+               p--;
+               end--;
+               if (p == beg) {
+                       return filename;
+               }
        }
        while (p != beg && !IS_ANY_SEP(p[-1]))
                p--;
@@ -541,18 +596,33 @@ It ignores trailing slash.
 
 
 DEFUN("file-dirname", Ffile_dirname, 1, 1, 0,  /*
-Return the directory component in file name FILENAME.
-Return nil if FILENAME does not include a directory.
-Otherwise return a directory spec.
-Given a Unix syntax file name, returns a string ending in slash.
-It ignores the trailing slash in FILENAME.
+Return the directory component in file name FILENAME as a directory
+spec.
+
+Given a Unix syntax file name, returns a string ending in slash.  It
+ignores the trailing slash in FILENAME.
+
+Concatenating the string returned by file-dirname, a "/", and the
+string returned by file-basename yields a complete pathname.
+
+Sample returns (POSIX 1003.1 compliant):
+
+filename       file-dirname   file-basename
+/usr/lib       /usr           lib
+/usr/lib/      /usr           lib
+/usr/          /              usr
+usr            .              usr
+/              /              /
+.              .              .
+./             .              .
+..             .              ..
+
 */
       (filename))
 {
        /* This function can GC.  GC checked 2000-07-28 ben */
-       Bufbyte *beg, *p, *end;
-       Lisp_Object handler;
-
+       Lisp_Object  handler, result;
+       const char  *res;
        CHECK_STRING(filename);
 
        /* If the file name has special constructs in it,
@@ -562,19 +632,10 @@ It ignores the trailing slash in FILENAME.
                return call2_check_string_or_nil(handler, Qfile_dirname,
                                                 filename);
 
-       beg = XSTRING_DATA(filename);
-       end = p = beg + XSTRING_LENGTH(filename);
-       if ( IS_ANY_SEP(p[-1]) ) {
-         p--;
-         end--;
-       }
-       while (p != beg && !IS_ANY_SEP(p[-1])
-              )
-               p--;
-
-       if ( beg == p )
-         return Qnil;
-       return make_string(beg, p-beg);
+       res = xdirname((char*)XSTRING_DATA(filename));
+       result = make_string((const Bufbyte*)res, xstrlen(res));
+       xfree(res);
+       return result;
 }
 
 
index 43f7536..ed698a8 100644 (file)
@@ -31,6 +31,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /* the old SXEmacs general includes and utility macros moved here: */
 #include "sxe-utils.h"
+#include "sxe-memory.h"
 
 /* ------------------------ dynamic arrays ------------------- */
 
@@ -644,8 +645,7 @@ PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail,                 \
             (CONSP (hare) ? ((elt = XCAR (hare)), 1) :                 \
              (NILP (hare) ? 0 :                                        \
               (signal_malformed_list_error (list), 0)));               \
-                                                                       \
-            (hare = XCDR (hare)),                                      \
+            (hare = XCDR (hare)), SXE_SET_UNUSED(elt),                 \
                     (void)((++len > suspicion_length) &&               \
                            ((void)(((len & 1) != 0)&&                  \
                                    ((tortoise = XCDR (tortoise)), 0)), \
@@ -785,6 +785,7 @@ PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list,         \
 
 #define PRIVATE_EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, len, \
                                      hare, tortoise, suspicion_length) \
+SXE_SET_UNUSED(elt_car),SXE_SET_UNUSED(elt_cdr);                       \
 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, hare, tortoise,          \
                              suspicion_length)                         \
   if (CONSP (elt) ? (elt_car = XCAR (elt), elt_cdr = XCDR (elt), 0) :1)        \
index 21214e0..fb1e00c 100644 (file)
@@ -186,7 +186,7 @@ aligned_sizeof_lstream(size_t lstream_type_specific_size)
 {
        return ALIGN_SIZE(offsetof(struct lstream_s, data) +
                          lstream_type_specific_size,
-                         ALIGNOF(max_align_t));
+                         ALIGNOF(sxe_max_align_t));
 }
 
 static inline size_t
index a34e12b..3a9ed80 100644 (file)
@@ -203,7 +203,7 @@ struct lstream_s {
 
        Lstream_data_count byte_count;
        int flags;
-       max_align_t data[1];
+       sxe_max_align_t data[1];
 };
 
 #define LSTREAM_TYPE_P(lstr, type)             \
index 797641b..e9e6710 100644 (file)
@@ -87,6 +87,10 @@ DEFINE_MEDIA_DRIVER_CUSTOM(new_media_ffmpeg,
                           new_media_ffmpeg_rewind, NULL);
 
 \f
+#ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE
+#define AVCODEC_MAX_AUDIO_FRAME_SIZE 19200
+#endif
+
 static int
 media_ffmpeg_bitrate(AVCodecContext *enc)
 {
@@ -128,40 +132,64 @@ media_ffmpeg_bitrate(AVCodecContext *enc)
 
 char *media_ffmpeg_streaminfo(Lisp_Media_Stream *ms)
 {
-       AVFormatContext *avfc = NULL;
-       char *out;
-       int chars_left = 4095;
+       AVFormatContext   *avfc   = NULL;
+       AVDictionaryEntry *curr   = NULL;
+       char              *out    = NULL;
+       int chars_left            = 4095;
 
        avfc = media_stream_data(ms);
        out = xmalloc_atomic(chars_left+1);
-       out[0] = '\0';
+       if (! out)
+               return out;
+
+       out[0]          = '\0';
        out[chars_left] = '\0';
 
        /* cannot use ffmpeg on corrupt streams */
        if (media_stream_driver(ms) != MYSELF || avfc == NULL)
                return out;
-
-       if (avfc->author && *avfc->author) {
-               strncat(out, " :author \"", chars_left);
-               chars_left -= 10;
-               strncat(out, avfc->author, chars_left);
-               chars_left -= strlen(avfc->author);
-               strncat(out, "\"", chars_left--);
-       }
-       if (avfc->title && *avfc->title) {
-               strncat(out, " :title: \"", chars_left);
-               chars_left -= 10;
-               strncat(out, avfc->title, chars_left);
-               chars_left -= strlen(avfc->title);
-               strncat(out, "\"", chars_left--);
-       }
-       if (avfc->year) {
-               char year[12];
-               int sz = snprintf(year, sizeof(year), "%d", avfc->year);
-               assert(sz>=0 && sz<sizeof(year));
-               strncat(out, " :year ", chars_left);
-               chars_left -= 7;
-               strncat(out, year, chars_left);
+       
+       if (! avfc->metadata)
+               return out;
+
+       {
+               static const char   *keys[] = { "author", "title", "date" };
+               static const size_t  nkeys  = sizeof(keys)/sizeof(keys[0]);
+               int           i      = 0;
+
+               for (i = 0; i < nkeys; ++i ) {
+                       curr = av_dict_get(avfc->metadata,
+                                          keys[i],
+                                          curr,
+                                          AV_DICT_IGNORE_SUFFIX);
+                       if (! curr)
+                               continue;
+
+                       strncat(out, " :", chars_left);
+                       chars_left -= 2;
+                       if (chars_left < 0)
+                               break;
+
+                       strncat(out, curr->key, chars_left);
+                       chars_left -= strlen(curr->key);
+                       if (chars_left < 0)
+                               break;
+
+                       strncat(out, " \"", chars_left);
+                       chars_left -= 2;
+                       if (chars_left < 0)
+                               break;
+
+                       strncat(out, curr->value, chars_left);
+                       chars_left -= strlen(curr->value);
+                       if (chars_left < 0)
+                               break;
+
+                       strncat(out, "\"", chars_left);
+                       chars_left -= 1;
+                       if (chars_left < 0)
+                               break;
+               }
        }
 
        return out;
@@ -176,29 +204,18 @@ media_ffmpeg_print(Lisp_Object ms, Lisp_Object pcfun, int ef)
 static AVFormatContext*
 media_ffmpeg_open_file(const char *file)
 {
-#if defined HAVE_AVFORMAT_ALLOC_CONTEXT
-       AVFormatContext *avfc = avformat_alloc_context();
-#elif defined HAVE_AV_ALLOC_FORMAT_CONTEXT
-       /* deprecated already, but `people' like Horst still use this */
-       AVFormatContext *avfc = av_alloc_format_context();
-#else
-# error "Your ffmpeg library is too old.  Adopt a new one."
-#endif /* HAVE_AVFORMAT_ALLOC_CONTEXT */
+       AVFormatContext *avfc = NULL;
 
        /* open the file */
-       if (av_open_input_file(&avfc, file, NULL, 0, NULL) < 0) {
+       if (avformat_open_input(&avfc, file, NULL, NULL) < 0) {
                FFMPEG_DEBUG_AVF("opening file failed.\n");
-               if (avfc)
-                       xfree(avfc);
                return NULL;
        }
 
        /* Retrieve stream information */
-       if (av_find_stream_info(avfc) < 0) {
+       if (avformat_find_stream_info(avfc, NULL) < 0) {
                FFMPEG_DEBUG_AVS("opening stream inside file failed.\n");
-               av_close_input_file(avfc);
-               if (avfc)
-                       xfree(avfc);
+               avformat_close_input(&avfc);
                return NULL;
        }
 
@@ -207,15 +224,9 @@ media_ffmpeg_open_file(const char *file)
 
 \f
 static int
-media_ffmpeg_vio_open(URLContext *h, const char *filename, int flags)
-{
-       return 0;
-}
-
-static int
-media_ffmpeg_vio_read(URLContext *h, unsigned char *buf, int size)
+media_ffmpeg_vio_read(void *h, unsigned char *buf, int size)
 {
-       media_data *sd = (media_data*)h->priv_data;
+       media_data *sd = (media_data*)h;
 
        FFMPEG_DEBUG_AVS("reading %d bytes to 0x%x, respecting seek %ld\n",
                         size, (unsigned int)buf, sd->seek);
@@ -231,16 +242,10 @@ media_ffmpeg_vio_read(URLContext *h, unsigned char *buf, int size)
        return size;
 }
 
-static int
-media_ffmpeg_vio_write(URLContext *h, unsigned char *buf, int size)
-{
-       return -1;
-}
-
 static int64_t
-media_ffmpeg_vio_seek(URLContext *h, int64_t pos, int whence)
+media_ffmpeg_vio_seek(void *h, int64_t pos, int whence)
 {
-       media_data *sd = (media_data*)h->priv_data;
+       media_data *sd = (media_data*)h;
 
        FFMPEG_DEBUG_AVS("seeking to %ld via %d\n", (long int)pos, whence);
 
@@ -261,25 +266,6 @@ media_ffmpeg_vio_seek(URLContext *h, int64_t pos, int whence)
        return sd->seek;
 }
 
-static int
-media_ffmpeg_vio_close(URLContext *h)
-{
-       if (h->priv_data)
-               xfree(h->priv_data);
-       h->priv_data = NULL;
-       return 0;
-}
-
-/* this is a memory-i/o protocol in case we have to deal with string data */
-static URLProtocol media_ffmpeg_protocol = {
-       "SXEmff",
-       media_ffmpeg_vio_open,
-       media_ffmpeg_vio_read,
-       media_ffmpeg_vio_write,
-       media_ffmpeg_vio_seek,
-       media_ffmpeg_vio_close,
-};
-
 /** Size of probe buffer, for guessing file type from file contents. */
 #define PROBE_BUF_MIN 2048
 #define PROBE_BUF_MAX 131072
@@ -287,79 +273,61 @@ static URLProtocol media_ffmpeg_protocol = {
 AVFormatContext*
 media_ffmpeg_open_data(char *data, size_t size)
 {
-#if defined HAVE_AVFORMAT_ALLOC_CONTEXT
-       AVFormatContext *avfc = avformat_alloc_context();
-#elif defined HAVE_AV_ALLOC_FORMAT_CONTEXT
-       /* deprecated already, but `people' like Horst still use this */
-       AVFormatContext *avfc = av_alloc_format_context();
-#else
-# error "Your ffmpeg library is too old.  Adopt a new one."
-#endif /* HAVE_AVFORMAT_ALLOC_CONTEXT */
-       AVProbeData *pd = NULL;
-       ByteIOContext *bioctx = NULL;
-       AVInputFormat *fmt = NULL;
-       char file[] = "SXEmff:SXEmacs.mp3\000";
-       media_data *sd = NULL;
-
-       /* register our virtual i/o */
-#if defined HAVE_AV_REGISTER_PROTOCOL
-       av_register_protocol(&media_ffmpeg_protocol);
-#elif defined HAVE_REGISTER_PROTOCOL
-       register_protocol(&media_ffmpeg_protocol);
-#else
-# error "Get a recent ffmpeg or get a life."
-#endif
+        AVFormatContext *avfc    = NULL;
+       AVIOContext     *avio    = NULL;
+       media_data      *sd      = NULL;
+       unsigned char   *buffer  = NULL;
+       static const int bufsize = 65536;
+       
+       /* initialise our media_data. Note that we need to use
+        * ffmpeg's malloc because it will free it on cleaning of the
+        * context and we don't want allocators corrupting each other.
+        */
+       sd = av_malloc(sizeof(media_data));
+       if (!sd)
+             return NULL;
 
-       /* initialise our media_data */
-       sd = xnew_and_zero(media_data);
        sd->length = size;
        sd->seek = 0;
        sd->data = data;
 
-       /* register ffmpeg byteio */
-       bioctx = xnew_and_zero(ByteIOContext);
-#if defined FFMPEG_URL_FOPEN_BIOCTX_STAR_STAR
-       url_fopen(&bioctx, file, URL_RDONLY);
-#elif defined FFMPEG_URL_FOPEN_BIOCTX_STAR
-       url_fopen(bioctx, file, URL_RDONLY);
-#endif
-       /* erm, register us at the byteio context */
-       ((URLContext*)(bioctx->opaque))->priv_data = sd;
-
-       /* take a probe */
-       pd = xnew_and_zero(AVProbeData);
-       pd->filename = file;
-       pd->buf = NULL;
-       pd->buf_size = 0;
-
-       pd->buf = (void*)sd->data;
-       pd->buf_size = PROBE_BUF_MIN;
-       fmt = av_probe_input_format(pd, 1);
-
-       /* if still no format found, error */
-       if (!fmt) {
-               xfree(pd);
-               xfree(bioctx);
-               xfree(sd);
-               xfree(avfc);
+       /* allocate the buffer  */
+       buffer = av_malloc(bufsize);
+       if (!buffer)
                return NULL;
-       }
 
-       /* open the file */
-       if (av_open_input_stream(&avfc, bioctx, file, fmt, NULL) < 0) {
-               xfree(pd);
-               xfree(bioctx);
-               xfree(sd);
-               xfree(avfc);
+       /* create ffmpeg avio context. Note that at this point thea
+        * AVIOContext has lifetime control of the previously
+        * allocated sd and buffer.
+        */
+       avio = avio_alloc_context(buffer,
+                                 bufsize,
+                                 0, /* No writes */
+                                 sd,
+                                 media_ffmpeg_vio_read,
+                                 NULL,
+                                 media_ffmpeg_vio_seek);
+
+       /* create format context, and make it use the avio above.
+          Note that at this point avfc has lifetime control of avio,
+          through avformat_free_context */
+       avfc = avformat_alloc_context();
+       avfc->pb = avio;
+       avfc->flags = AVFMT_FLAG_CUSTOM_IO;
+
+       /* open the input */
+       if (avformat_open_input(&avfc, NULL, NULL, NULL) < 0) {
+               FFMPEG_DEBUG_AVF("opening file failed.\n");
+               /* Abundance of caution, as on failure open input
+                  should clear the context, but when it does it also
+                  sets avfc to NULL so this is safe. */
+               avformat_free_context(avfc);
                return NULL;
        }
-
+       
        /* Retrieve stream information */
-       if (av_find_stream_info(avfc) < 0) {
-               xfree(pd);
-               xfree(bioctx);
-               xfree(sd);
-               xfree(avfc);
+       if (avformat_find_stream_info(avfc,NULL) < 0) {
+               avformat_close_input(&avfc);
                return NULL;
        }
 
@@ -373,7 +341,7 @@ media_ffmpeg_close(ms_driver_data_t data)
        FFMPEG_DEBUG_AVF("closing AVFormatContext: 0x%lx\n",
                         (long unsigned int)avfc);
        if (avfc && avfc->iformat)
-               av_close_input_file(avfc);
+               avformat_close_input(&avfc);
 }
 
 static void
@@ -408,39 +376,47 @@ media_ffmpeg_analyse_audio(media_substream *mss, AVFormatContext *avfc, int st)
                mtap->samplerate = avcc->sample_rate;
                mtap->bitrate = media_ffmpeg_bitrate(avcc);
 
+               int sample_bytes =
+                       av_get_bytes_per_sample(avcc->sample_fmt);
+               mtap->samplewidth = 8 * sample_bytes;
+               mtap->framesize = mtap->channels * sample_bytes;
                /* samplewidth and framesize */
                switch (avcc->sample_fmt) {
-               case SAMPLE_FMT_U8:
-                       mtap->samplewidth = 8;
-                       mtap->framesize = mtap->channels * 1;
+               case AV_SAMPLE_FMT_U8:
+                       assert(sample_bytes == 1);
                        mtap->msf = sxe_msf_U8;
                        break;
-               case SAMPLE_FMT_S16:
-                       mtap->samplewidth = 16;
-                       mtap->framesize = mtap->channels * 2;
+               case AV_SAMPLE_FMT_S16:
+                       assert(sample_bytes == 2);
                        mtap->msf = sxe_msf_S16;
                        break;
-#if defined SAMPLE_FMT_S24
-               case SAMPLE_FMT_S24:
-                       mtap->samplewidth = 32;
-                       mtap->framesize = mtap->channels * 4;
-                       mtap->msf = sxe_msf_S24;
-                       break;
-#endif /* SAMPLE_FMT_S24 */
-               case SAMPLE_FMT_S32:
-                       mtap->samplewidth = 32;
-                       mtap->framesize = mtap->channels * 4;
+               case AV_SAMPLE_FMT_S32:
+                       assert(sample_bytes == 4);
                        mtap->msf = sxe_msf_S32;
                        break;
-               case SAMPLE_FMT_FLT:
-                       mtap->samplewidth = 8*sizeof(float);
-                       mtap->framesize = mtap->channels * sizeof(float);
+               case AV_SAMPLE_FMT_FLT:
+                       assert(sample_bytes == sizeof(float));
                        mtap->msf = sxe_msf_FLT;
                        break;
-               case SAMPLE_FMT_NONE:
-               default:
+               case AV_SAMPLE_FMT_DBL:
+                       assert(sample_bytes == sizeof(double));
+                       mtap->msf = sxe_msf_DBL;
+                       break;
+               case AV_SAMPLE_FMT_NONE:
                        mtap->samplewidth = 0;
                        break;
+               default:
+                       {
+                               char fmt_name[128];
+                               error(("Unsupported sample format: "
+                                      "%s (%d), %d bytes/sample"),
+                                     av_get_sample_fmt_string(
+                                                              fmt_name,
+                                                              sizeof(fmt_name),
+                                                              avcc->sample_fmt),
+                                     avcc->sample_fmt,
+                                     sample_bytes);
+                       }
                }
        }
        mtap->endianness = 0;
@@ -517,6 +493,8 @@ media_ffmpeg_open(Lisp_Media_Stream *ms)
                mkfp = media_stream_kind_properties(ms).fprops;
                TO_EXTERNAL_FORMAT(LISP_STRING, mkfp->filename,
                                   ALLOCA, (file, file_len), Qnil);
+               SXE_SET_UNUSED(file_len);
+
                avfc = media_ffmpeg_open_file(file);
                if (!avfc) {
                        media_stream_set_meths(ms, NULL);
@@ -525,7 +503,7 @@ media_ffmpeg_open(Lisp_Media_Stream *ms)
                }
 
                /* store the filesize */
-               mkfp->filesize = avfc->file_size;
+               mkfp->filesize = avio_size(avfc->pb);
                break;
        }
        case MKIND_STRING: {
@@ -561,27 +539,27 @@ media_ffmpeg_open(Lisp_Media_Stream *ms)
                        avcc = avst->codec;
                        if (avcc &&
                            avcc->codec_id != CODEC_ID_NONE &&
-                           avcc->codec_type != CODEC_TYPE_DATA &&
+                           avcc->codec_type != AVMEDIA_TYPE_DATA &&
                            (avc = avcodec_find_decoder(avcc->codec_id)) &&
-                           (avc && (avcodec_open(avcc, avc) >= 0))) {
+                           (avc && (avcodec_open2(avcc, avc, NULL) >= 0))) {
 
                                /* create a substream */
                                mss = make_media_substream_append(ms);
 
                                switch ((unsigned int)avcc->codec_type) {
-                               case CODEC_TYPE_VIDEO:
+                               case AVMEDIA_TYPE_VIDEO:
                                        /* assign substream props */
                                        media_substream_type(mss) = MTYPE_VIDEO;
                                        media_ffmpeg_analyse_video(mss, avfc, st);
                                        break;
-                               case CODEC_TYPE_AUDIO:
+                               case AVMEDIA_TYPE_AUDIO:
                                        /* assign substream props */
                                        media_substream_type(mss) = MTYPE_AUDIO;
                                        media_ffmpeg_analyse_audio(mss, avfc, st);
                                        /* set some stream handlers */
                                        media_stream_set_meths(ms, media_ffmpeg);
                                        break;
-                               case CODEC_TYPE_DATA:
+                               case AVMEDIA_TYPE_DATA:
                                        media_substream_type(mss) = MTYPE_IMAGE;
                                        break;
                                default:
@@ -645,7 +623,7 @@ media_ffmpeg_read(media_substream *mss, void *outbuf, size_t length)
        AVFormatContext *avfc;
        AVStream *avst;
        AVCodecContext *avcc;
-       AVCodec *avc;
+       const AVCodec *avc;
        AVPacket pkt;
        /* buffering */
        /* the size we present here, is _not_ the size we want, however
@@ -671,6 +649,7 @@ media_ffmpeg_read(media_substream *mss, void *outbuf, size_t length)
        avst = avfc->streams[si];
        avcc = avst->codec;
        avc = avcc->codec;
+       SXE_SET_UNUSED(avc);
 
        /* unpack the substream */
        if ((mtap = media_substream_type_properties(mss).aprops) == NULL) {
@@ -710,7 +689,13 @@ media_ffmpeg_read(media_substream *mss, void *outbuf, size_t length)
 
                dec = pkt.size;
                /* decode the demuxed packet */
-#ifdef HAVE_AVCODEC_DECODE_AUDIO2
+#ifdef HAVE_AVCODEC_DECODE_AUDIO3
+/* prefer decode_audio3() if available */
+               size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
+               declen = avcodec_decode_audio3(
+                       avcc, (void*)((char*)outbuf+bufseek),
+                       &size, &pkt);
+#elif HAVE_AVCODEC_DECODE_AUDIO2
 /* prefer decode_audio2() if available */
                size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
                declen = avcodec_decode_audio2(
@@ -729,6 +714,8 @@ media_ffmpeg_read(media_substream *mss, void *outbuf, size_t length)
                                         (long long int)pkt.pts,
                                         (long long int)pkt.dts,
                                         pkt.size, size, declen);
+                       /* Because FFMPEG_DEBUG_AVF may expand to nothing ... */
+                       SXE_SET_UNUSED(declen);
 
                        /* memcpy(outbuf+bufseek, (char*)buffer, size); */
                        bufseek += size;
@@ -917,7 +904,6 @@ typedef struct VideoState {
 
 /* since we have only one decoding thread, we can use a global
    variable instead of a thread local variable */
-static VideoState *global_video_state;
 AVPacket flush_pkt;
 
 /* packet queue handling */
@@ -1040,23 +1026,15 @@ packet_queue_get(PacketQueue *q, AVPacket *pkt, int block)
 static uint64_t global_video_pkt_pts = AV_NOPTS_VALUE;
 
 static int
-my_get_buffer(struct AVCodecContext *c, AVFrame *pic)
+my_get_buffer(struct AVCodecContext *c, AVFrame *pic, int flags)
 {
-       int ret= avcodec_default_get_buffer(c, pic);
+        int ret= avcodec_default_get_buffer2(c, pic, flags);
        uint64_t *pts= av_malloc(sizeof(uint64_t));
        *pts= global_video_pkt_pts;
        pic->opaque= pts;
        return ret;
 }
 
-static void
-my_release_buffer(struct AVCodecContext *c, AVFrame *pic)
-{
-       if(pic) av_freep(&pic->opaque);
-       avcodec_default_release_buffer(c, pic);
-}
-
-
 static int
 stream_component_open(VideoState *is, int stream_index, Lisp_Media_Stream *ms)
 {
@@ -1072,7 +1050,7 @@ stream_component_open(VideoState *is, int stream_index, Lisp_Media_Stream *ms)
        enc = ic->streams[stream_index]->codec;
 
        /* prepare audio output */
-       if (enc->codec_type == CODEC_TYPE_AUDIO) {
+       if (enc->codec_type == AVMEDIA_TYPE_AUDIO) {
 #if 0
                wanted_spec.freq = enc->sample_rate;
                wanted_spec.format = AUDIO_S16SYS;
@@ -1107,18 +1085,18 @@ stream_component_open(VideoState *is, int stream_index, Lisp_Media_Stream *ms)
        enc->error_resilience = FF_ER_CAREFUL; /* error_resilience; */
 #endif
        enc->error_concealment = 3; /* error_concealment; */
+       if (1 /* thread_count */ > 1)
+               enc->thread_count = 1 /* thread_count */;
+
        if (!codec ||
-           avcodec_open(enc, codec) < 0)
+           avcodec_open2(enc, codec, NULL) < 0)
                return -1;
-       if (1 /* thread_count */ > 1)
-               avcodec_thread_init(enc, 1 /*thread_count*/);
-       enc->thread_count= 1 /* thread_count */;
 
        /* create a substream */
        mss = make_media_substream_append(ms);
 
        switch ((unsigned int)enc->codec_type) {
-       case CODEC_TYPE_AUDIO:
+       case AVMEDIA_TYPE_AUDIO:
                is->audio_stream = stream_index;
                is->audio_st = ic->streams[stream_index];
                is->audio_buf_size = 0;
@@ -1138,7 +1116,7 @@ stream_component_open(VideoState *is, int stream_index, Lisp_Media_Stream *ms)
                media_substream_type(mss) = MTYPE_AUDIO;
                media_ffmpeg_analyse_audio(mss, is->ic, stream_index);
                break;
-       case CODEC_TYPE_VIDEO:
+       case AVMEDIA_TYPE_VIDEO:
                is->video_stream = stream_index;
                is->video_st = ic->streams[stream_index];
 
@@ -1152,13 +1130,12 @@ stream_component_open(VideoState *is, int stream_index, Lisp_Media_Stream *ms)
                packet_queue_init(&is->videoq);
                is->video_tid = 0 /* SDL_CreateThread(video_thread, is) */;
 
-               enc->    get_buffer=     my_get_buffer;
-               enc->release_buffer= my_release_buffer;
-
+               enc->get_buffer2          = my_get_buffer;
                media_substream_type(mss) = MTYPE_VIDEO;
+
                media_ffmpeg_analyse_video(mss, is->ic, stream_index);
                break;
-       case CODEC_TYPE_SUBTITLE:
+       case AVMEDIA_TYPE_SUBTITLE:
                is->subtitle_stream = stream_index;
                is->subtitle_st = ic->streams[stream_index];
                packet_queue_init(&is->subtitleq);
@@ -1183,14 +1160,14 @@ stream_component_close(VideoState *is, int stream_index)
        enc = ic->streams[stream_index]->codec;
 
        switch ((unsigned int)enc->codec_type) {
-       case CODEC_TYPE_AUDIO:
+       case AVMEDIA_TYPE_AUDIO:
                packet_queue_abort(&is->audioq);
 #if 0
                SDL_CloseAudio();
 #endif
                packet_queue_end(&is->audioq);
                break;
-       case CODEC_TYPE_VIDEO:
+       case AVMEDIA_TYPE_VIDEO:
                packet_queue_abort(&is->videoq);
 
                /* note: we also signal this mutex to make sure we deblock the
@@ -1203,7 +1180,7 @@ stream_component_close(VideoState *is, int stream_index)
 #endif
                packet_queue_end(&is->videoq);
                break;
-       case CODEC_TYPE_SUBTITLE:
+       case AVMEDIA_TYPE_SUBTITLE:
                packet_queue_abort(&is->subtitleq);
 
                /* note: we also signal this mutex to make sure we deblock the
@@ -1224,15 +1201,15 @@ stream_component_close(VideoState *is, int stream_index)
 
        avcodec_close(enc);
        switch ((unsigned int)enc->codec_type) {
-       case CODEC_TYPE_AUDIO:
+       case AVMEDIA_TYPE_AUDIO:
                is->audio_st = NULL;
                is->audio_stream = -1;
                break;
-       case CODEC_TYPE_VIDEO:
+       case AVMEDIA_TYPE_VIDEO:
                is->video_st = NULL;
                is->video_stream = -1;
                break;
-       case CODEC_TYPE_SUBTITLE:
+       case AVMEDIA_TYPE_SUBTITLE:
                is->subtitle_st = NULL;
                is->subtitle_stream = -1;
                break;
@@ -1244,22 +1221,26 @@ stream_component_close(VideoState *is, int stream_index)
 static void
 dump_stream_info(const AVFormatContext *s)
 {
-       if (s->track != 0)
-               fprintf(stderr, "Track: %d\n", s->track);
-       if (s->title[0] != '\0')
-               fprintf(stderr, "Title: %s\n", s->title);
-       if (s->author[0] != '\0')
-               fprintf(stderr, "Author: %s\n", s->author);
-       if (s->copyright[0] != '\0')
-               fprintf(stderr, "Copyright: %s\n", s->copyright);
-       if (s->comment[0] != '\0')
-               fprintf(stderr, "Comment: %s\n", s->comment);
-       if (s->album[0] != '\0')
-               fprintf(stderr, "Album: %s\n", s->album);
-       if (s->year != 0)
-               fprintf(stderr, "Year: %d\n", s->year);
-       if (s->genre[0] != '\0')
-               fprintf(stderr, "Genre: %s\n", s->genre);
+        static const char   *keys[] = {
+               "track", "title", "author", "copyright", "comment",
+               "album", "date",  "genre"
+       };
+        static const size_t  nkeys  = sizeof(keys)/sizeof(keys[0]);
+        int           i      = 0;
+       AVDictionaryEntry *curr = NULL;
+       if (! s->metadata) {
+               fprintf(stderr, "No metadata\n");
+               return;
+       }
+
+       for (i = 0; i < nkeys; ++i ) {
+               curr = av_dict_get(s->metadata,
+                                  keys[i],
+                                  curr,
+                                  AV_DICT_IGNORE_SUFFIX);
+               if (curr)
+                   fprintf(stderr, "%s: %s\n", curr->key, curr->value);
+       }
 }
 
 enum {
@@ -1271,9 +1252,9 @@ enum {
 static VideoState *
 stream_open(char *filename, size_t filelen)
 {
-       VideoState *is = xnew(VideoState);
-       AVFormatParameters params, *ap = &params;
-       int err = 0;
+       VideoState   *is      = xnew(VideoState);
+       AVDictionary *options = NULL;
+       int err               = 0;
 
        is->filename = filename;
        is->filelen = filelen;
@@ -1288,7 +1269,7 @@ stream_open(char *filename, size_t filelen)
        is->av_sync_type = AV_SYNC_AUDIO_MASTER;
        is->parse_tid = 0; /* SDL_CreateThread(decode_thread, is); */
 
-       memset(ap, 0, sizeof(*ap));
+#if 0
        /* we force a pause when starting an RTSP stream */
        ap->initial_pause = 1;
 
@@ -1296,8 +1277,9 @@ stream_open(char *filename, size_t filelen)
        ap->height= 0; /* frame_height; */
        ap->time_base= (AVRational){1, 25};
        ap->pix_fmt = PIX_FMT_NONE; /* frame_pix_fmt; */
+#endif
 
-       err = av_open_input_file(&is->ic, is->filename, is->iformat, 0, ap);
+       err = avformat_open_input(&is->ic, is->filename, is->iformat, &options);
        if (UNLIKELY(err < 0)) {
                FFMPEG_DEBUG_AVF("Could not open \"%s\" (errno %d)\n",
                                 is->filename, err);
@@ -1353,7 +1335,7 @@ new_media_ffmpeg_open(Lisp_Media_Stream *ms)
        }
 
        if (!use_play) {
-               err = av_find_stream_info(vs->ic);
+               err = avformat_find_stream_info(vs->ic, NULL);
                if (err < 0) {
                        FFMPEG_DEBUG_AVF("\"%s\": "
                                         "could not find codec parameters\n",
@@ -1362,18 +1344,14 @@ new_media_ffmpeg_open(Lisp_Media_Stream *ms)
                }
                /* FIXME hack,
                 * ffplay maybe should not use url_feof() to test for the end */
-#if defined FFMPEG_URL_FOPEN_BIOCTX_STAR_STAR
                vs->ic->pb->eof_reached = 0;
-#elif defined FFMPEG_URL_FOPEN_BIOCTX_STAR
-               vs->ic->pb.eof_reached = 0;
-#endif
        }
 
        /* now we can begin to play (RTSP stream only) */
        av_read_play(vs->ic);
 
        if (use_play) {
-               err = av_find_stream_info(vs->ic);
+               err = avformat_find_stream_info(vs->ic, NULL);
                if (err < 0) {
                        FFMPEG_DEBUG_AVF("\"%s\": "
                                         "could not find codec parameters\n",
@@ -1385,12 +1363,12 @@ new_media_ffmpeg_open(Lisp_Media_Stream *ms)
        for (size_t i = 0; i < vs->ic->nb_streams; i++) {
                AVCodecContext *enc = vs->ic->streams[i]->codec;
                switch ((unsigned int)enc->codec_type) {
-               case CODEC_TYPE_AUDIO:
+               case AVMEDIA_TYPE_AUDIO:
                        if ((audio_index < 0 || wanted_audio_stream-- > 0)) {
                                audio_index = i;
                        }
                        break;
-               case CODEC_TYPE_VIDEO:
+               case AVMEDIA_TYPE_VIDEO:
                        if ((video_index < 0 || wanted_video_stream-- > 0)) {
                                video_index = i;
                        }
@@ -1400,7 +1378,7 @@ new_media_ffmpeg_open(Lisp_Media_Stream *ms)
                }
        }
        if (1 /* show_status */) {
-               dump_format(vs->ic, 0, vs->filename, 0);
+               av_dump_format(vs->ic, 0, vs->filename, 0);
                dump_stream_info(vs->ic);
        }
 
@@ -1528,25 +1506,14 @@ new_media_ffmpeg_read(media_substream *mss, void *outbuf, size_t length)
                if (is->audioq.size > MAX_AUDIOQ_SIZE ||
                    is->videoq.size > MAX_VIDEOQ_SIZE ||
                    is->subtitleq.size > MAX_SUBTITLEQ_SIZE ||
-#if defined FFMPEG_URL_FOPEN_BIOCTX_STAR_STAR
-                   url_feof(is->ic->pb)
-#elif defined FFMPEG_URL_FOPEN_BIOCTX_STAR
-                   url_feof(&is->ic->pb)
-#endif
-                       ) {
+                   avio_feof(is->ic->pb)) {
                        /* wait 10 ms */
                        usleep(10);
                        continue;
                }
                ret = av_read_frame(is->ic, pkt);
                if (ret < 0) {
-                       if (url_ferror(
-#if defined FFMPEG_URL_FOPEN_BIOCTX_STAR_STAR
-                                   is->ic->pb
-#elif defined FFMPEG_URL_FOPEN_BIOCTX_STAR
-                                   &is->ic->pb
-#endif
-                                   ) == 0) {
+                       if (is->ic->pb->error == 0) {
                                usleep(100); /* wait for user event */
                                continue;
                        } else
@@ -1568,8 +1535,6 @@ new_media_ffmpeg_read(media_substream *mss, void *outbuf, size_t length)
        }
 
        ret = 0;
-       /* disable interrupting */
-       global_video_state = NULL;
 
        /* close each stream */
        if (is->audio_stream >= 0)
@@ -1579,10 +1544,13 @@ new_media_ffmpeg_read(media_substream *mss, void *outbuf, size_t length)
        if (is->subtitle_stream >= 0)
                stream_component_close(is, is->subtitle_stream);
        if (is->ic) {
-               av_close_input_file(is->ic);
+               avformat_close_input(&is->ic);
                is->ic = NULL; /* safety */
        }
+
+#if 0
        url_set_interrupt_cb(NULL);
+#endif
 
        if (ret != 0) {
 #if 0
@@ -1645,12 +1613,12 @@ Lisp_Object
 media_ffmpeg_available_formats(void)
 {
        Lisp_Object formats;
-       AVInputFormat *avif;
+       AVInputFormat *avif = NULL;
 
        formats = Qnil;
 
        av_register_all();
-       avif = first_iformat;
+       avif = av_iformat_next(avif);
 
        while (avif) {
                if (avif->name) {
@@ -1658,7 +1626,7 @@ media_ffmpeg_available_formats(void)
                                Fintern(build_string(avif->name), Qnil);
                        formats = Fcons(fmtname, formats);
                }
-               avif = avif->next;
+               avif = av_iformat_next(avif);
        }
 
        return formats;
index 6fc46c2..6393772 100644 (file)
@@ -24,6 +24,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #define INCLUDED_media_ffmpeg_h_
 
 #include "media.h"
+
 #if defined HAVE_LIBAVFORMAT_AVFORMAT_H
 # include <libavformat/avformat.h>
 #elif defined HAVE_FFMPEG_AVFORMAT_H
@@ -32,6 +33,26 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 # include <avformat.h>
 #endif
 
+#if defined HAVE_LIBAVCODEC_AVCODEC_H
+# include <libavcodec/avcodec.h>
+#elif defined HAVE_FFMPEG_AVCODEC_H
+# include <ffmpeg/avcodec.h>
+#elif defined HAVE_AVCODEC_H
+# include <avcodec.h>
+#endif
+
+#if defined HAVE_LIBAVUTIL_DICT_H
+# include <libavutil/dict.h>
+#elif defined HAVE_FFMPEG_DICT_H
+# include <ffmpeg/dict.h>
+#endif
+
+#if defined HAVE_LIBAVUTIL_TIME_H
+# include <libavutil/time.h>
+#elif defined HAVE_FFMPEG_TIME_H
+# include <ffmpeg/time.h>
+#endif
+
 /* Newer ffmpeg do not declare this macro... */
 #ifndef DECLARE_ALIGNED
 #ifdef __ICC
index e59193c..7ee8deb 100644 (file)
@@ -947,6 +947,8 @@ void media_internal_analyse_stream(Lisp_Media_Stream *ms)
                mkfp = media_stream_kind_properties(ms).fprops;
                TO_EXTERNAL_FORMAT(LISP_STRING, mkfp->filename,
                                   ALLOCA, (file, file_len), Qnil);
+               SXE_SET_UNUSED(file_len);
+
                if (file == NULL || (fd = open(file, O_RDONLY, 0)) < 0) {
                        xfree(data);
                        return;
index ba2101c..58ff625 100644 (file)
@@ -299,6 +299,7 @@ media_mad_read(media_substream *mss, void *outbuf, size_t length)
 
        /* fetch framesize */
        framesize = mtap->framesize;
+       SXE_SET_UNUSED(framesize);
 
        /* prepare mad */
        mads = madd->stream;
index e819126..05dc2e0 100644 (file)
@@ -105,6 +105,8 @@ media_sndfile_open(Lisp_Media_Stream *ms)
                mkfp = media_stream_kind_properties(ms).fprops;
                TO_EXTERNAL_FORMAT(LISP_STRING, mkfp->filename,
                                   ALLOCA, (file, file_len), Qnil);
+               SXE_SET_UNUSED(file_len);
+
                if ( file != NULL ) {
                        sf = sf_open(file, SFM_READ, sfinfo);
                }
index cc1707a..1359791 100644 (file)
@@ -1300,6 +1300,47 @@ sxe_msf_FLT_down(void *d, void *s, size_t len)
        return;
 }
 
+DEFINE_MEDIA_SAMPLE_FORMAT_SIMPLE(sxe_msf_DBL);
+
+static void
+sxe_msf_DBL_up(void *d, void *s, size_t len)
+{
+       /* convert double samples to internal format (S24in32) */
+       size_t i;
+       int32_t *dst = d;
+       double *src = s;
+
+       /* len is the number of samples (== #frame * #channels) */
+       MEDIA_DEBUG_FMT("upsampling DBL->internal: %u samples\n", len);
+
+       for (i = 0; i < len; i++) {
+               dst[i] = (int32_t)(src[i] * SXE_MAX_S24);
+       }
+       MEDIA_DEBUG_FMT("s00:%f d00:%d  s01:%f d01:%d\n",
+                       src[0], dst[0], src[1], dst[1]);
+
+       return;
+}
+
+static void
+sxe_msf_DBL_down(void *d, void *s, size_t len)
+{
+       /* convert samples from internal format (S24in32) to double */
+       int i;
+       float *dst = d;
+       int32_t *src = s;
+
+       /* len is the number of samples (== #frame * #channels) */
+       MEDIA_DEBUG_FMT("downsampling internal->DBL: %u samples\n", len);
+
+       for (i = len-1; i >= 0; i--) {
+               dst[i] = (double)(src[i]) / SXE_MAX_S24;
+       }
+       MEDIA_DEBUG_FMT("d00:%f  d01:%f\n", dst[0], dst[1]);
+
+       return;
+}
+
 /* `effects' */
 DEFINE_MEDIA_SAMPLE_EFFECT(sxe_mse_1ch_to_2ch, _sxe_mse_1ch_to_2ch);
 
index 97e3d1a..39f999f 100644 (file)
@@ -414,6 +414,7 @@ struct audio_coerce_chain_s {
 DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_U8);
 DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_S16);
 DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_FLT);
+DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_DBL);
 DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_S32);
 DECLARE_MEDIA_SAMPLE_FORMAT(sxe_msf_S24); /* format internally used */
 
index c887ef0..1428f1e 100644 (file)
@@ -275,6 +275,8 @@ sound_alsa_handle_aj_events(audio_job_t aj)
 
        SXE_MUTEX_LOCK(&aj->mtx);
        sasd = audio_job_device_data(aj);
+       SXE_SET_UNUSED(sasd);
+
        if ((ev = eq_noseeum_dequeue(audio_job_queue(aj))) == NULL) {
                SXE_MUTEX_UNLOCK(&aj->mtx);
                return;
index eb6ad12..1a4e2cd 100644 (file)
@@ -253,6 +253,8 @@ sound_ao_handle_aj_events(audio_job_t aj)
 
        SXE_MUTEX_LOCK(&aj->mtx);
        sasd = audio_job_device_data(aj);
+       SXE_SET_UNUSED(sasd);
+
        if ((ev = eq_noseeum_dequeue(audio_job_queue(aj))) == NULL) {
                SXE_MUTEX_UNLOCK(&aj->mtx);
                return;
index 9fd116a..353b077 100644 (file)
@@ -335,6 +335,9 @@ finish:
 \f
 /* pull one channel out of a multi-channel stream */
 static size_t
+demux_internal(float *dst, char *src,
+              size_t n, int chan, sound_jack_aj_data_t *f);
+static size_t
 demux_internal(float *dst, char *src,
               size_t n, int chan, sound_jack_aj_data_t *f)
 {
@@ -446,6 +449,8 @@ sound_jack_handle_aj_events(audio_job_t aj)
 
        SXE_MUTEX_LOCK(&aj->mtx);
        sasd = audio_job_device_data(aj);
+       SXE_SET_UNUSED(sasd);
+
        if ((ev = eq_noseeum_dequeue(audio_job_queue(aj))) == NULL) {
                SXE_MUTEX_UNLOCK(&aj->mtx);
                return;
@@ -495,8 +500,11 @@ sound_jack_process(jack_nframes_t nframes, void *userdata)
        aj = userdata;
        SXE_MUTEX_LOCK(&aj->mtx);
        mss = aj->substream;
+       SXE_SET_UNUSED(mss);
+
        sjsd = audio_job_device_data(aj);
        buffer = aj->buffer;
+       SXE_SET_UNUSED(buffer);
 
 #ifdef EF_USE_ASYNEQ
        /* stuff on the event queue? */
index 253a391..42014ba 100644 (file)
@@ -363,6 +363,8 @@ sound_oss_handle_aj_events(audio_job_t aj)
 
        SXE_MUTEX_LOCK(&aj->mtx);
        sasd = audio_job_device_data(aj);
+       SXE_SET_UNUSED(sasd);
+
        if ((ev = eq_noseeum_dequeue(audio_job_queue(aj))) == NULL) {
                SXE_MUTEX_UNLOCK(&aj->mtx);
                return;
index a64a0a9..b2dcd9a 100644 (file)
@@ -1228,6 +1228,7 @@ and `coding-system-canonical-name-p'.
 
        /* Checks that aliasee names a coding-system */
        real_coding_system = Fget_coding_system(aliasee);
+       SXE_SET_UNUSED(real_coding_system);
 
        /* Check for coding system alias loops */
        if (EQ(alias, aliasee))
@@ -1851,9 +1852,13 @@ static Lisp_Object coding_system_from_mask(int mask)
 
 void
 autodetect_real_coding_system(lstream_t stream, Lisp_Object * codesys_in_out,
-                            eol_type_t * eol_type_in_out)
+                             eol_type_t * eol_type_in_out);
+
+void
+autodetect_real_coding_system(lstream_t stream, Lisp_Object * codesys_in_out,
+                             eol_type_t * eol_type_in_out)
 {
-       static const char mime_name_valid_chars[] = 
+       static const char mime_name_valid_chars[] =
                "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                "abcdefghijklmnopqrstuvwxyz"
                "0123456789"
@@ -1932,7 +1937,7 @@ autodetect_real_coding_system(lstream_t stream, Lisp_Object * codesys_in_out,
                                while (*p == ' ' || *p == '\t') {
                                        p++;
                                }
-                                       
+
                                /* Get coding system name */
                                save = *suffix;
                                *suffix = '\0';
@@ -1950,6 +1955,42 @@ autodetect_real_coding_system(lstream_t stream, Lisp_Object * codesys_in_out,
                                }
                                break;
                        }
+                       /* Try " coding:" */
+                       if (NILP(coding_system)) {
+                               for (p = local_vars_beg, scan_end = suffix - LENGTH(" coding:?");
+                                    p <= scan_end; p++) {
+                                       Extbyte save;
+                                       int n;
+
+                                       if (memcmp(" coding:", p, LENGTH(" coding:")) != 0) {
+                                               continue;
+                                       }
+                                       if (p != local_vars_beg && strchr(" \t;", *p) == NULL ) {
+                                               continue;
+                                       }
+                                       p += LENGTH(" coding:");
+                                       while (*p == ' ' || *p == '\t') {
+                                               p++;
+                                       }
+
+                                       /* Get coding system name */
+                                       save = *suffix;
+                                       *suffix = '\0';
+                                       /* Characters valid in a MIME charset
+                                          name (rfc 1521), and in a Lisp
+                                          symbol name. */
+                                       n = strspn((char *)p, mime_name_valid_chars);
+                                       *suffix = save;
+                                       if (n > 0) {
+                                               save = p[n];
+                                               p[n] = '\0';
+                                               coding_system = Ffind_coding_system(
+                                                       intern((char *)p));
+                                               p[n] = save;
+                                       }
+                                       break;
+                               }
+                       }
                        break;
                }
                break;
index a158776..068883e 100644 (file)
@@ -809,6 +809,7 @@ static int stack_idx_of_map_multiple;
              }                                                 \
          }                                                     \
       }                                                                \
+      SXE_SET_UNUSED(bytes);                                    \
   } while (0)
 
 /* Read one byte from the current input buffer into Rth register.  */
index 70459a5..cfe5132 100644 (file)
@@ -59,7 +59,7 @@ static inline size_t
 aligned_sizeof_opaque(size_t opaque_size)
 {
        return ALIGN_SIZE(offsetof(Lisp_Opaque, data) + opaque_size,
-                         ALIGNOF(max_align_t));
+                         ALIGNOF(sxe_max_align_t));
 }
 
 static size_t sizeof_opaque(const void *header)
index 4f4aa91..a3edcf9 100644 (file)
@@ -28,7 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 typedef struct Lisp_Opaque {
        struct lcrecord_header header;
        size_t size;
-       max_align_t data[1];
+       sxe_max_align_t data[1];
 } Lisp_Opaque;
 
 DECLARE_LRECORD(opaque, Lisp_Opaque);
index f87f7aa..f34ce8e 100644 (file)
@@ -422,6 +422,19 @@ int ossl_ssl_inject_cert_file(Lisp_Object, Lisp_Object, Lisp_Object);
 
 Lisp_Object Qssl2, Qssl23, Qssl3, Qtls1;
 
+/* Problem Ciphers */
+Lisp_Object QAES_256_XTS, QAES_128_XTS, Qid_aes256_CCM, Qid_aes256_GCM;
+Lisp_Object Qid_aes192_CCM, Qid_aes192_GCM, Qid_aes128_CCM;
+Lisp_Object Qid_aes128_GCM, Qid_aes256_wrap, Qid_aes192_wrap;
+Lisp_Object Qid_aes128_wrap, QCAMELLIA_256_CFB8, QCAMELLIA_192_CFB8;
+Lisp_Object QCAMELLIA_128_CFB8, QCAMELLIA_256_CFB1, QCAMELLIA_192_CFB1;
+Lisp_Object QCAMELLIA_128_CFB1, QDES_EDE3_CFB8, QDES_EDE3_CFB1, QDES_CFB8;
+Lisp_Object QDES_CFB1, QAES_256_CFB8, QAES_192_CFB8, QAES_128_CFB8;
+Lisp_Object QAES_256_CFB1, QAES_192_CFB1, QAES_128_CFB1;
+Lisp_Object Qid_smime_alg_CMS3DESwrap;
+Lisp_Object Vossl_cipher_blacklist;
+int ossl_check_cipher(Lisp_Object);
+
 extern Lisp_Object Qfile_readable_p;
 extern Lisp_Object Qfile_writable_p;
 
@@ -465,6 +478,15 @@ This yields a plain list of symbols.
        return digests;
 }
 
+int
+ossl_check_cipher(Lisp_Object cipher)
+{
+       if (!NILP(Fmember(cipher, Vossl_cipher_blacklist))) {
+               return 1;
+       } else {
+               return 0;
+       }
+}
 
 DEFUN("ossl-available-ciphers", Fossl_available_ciphers, 0, 0, 0, /*
 Return a list of cipher algorithms in the underlying crypto library.
@@ -482,7 +504,8 @@ This yields a plain list of symbols.
        /* is there a better way to get the size of the nid list? */
        for (nid = 10000; nid >= 0; --nid) {
                const EVP_CIPHER *cipher = EVP_get_cipherbynid(nid);
-               if (cipher) {
+               if (cipher &&
+                   (ossl_check_cipher(intern(OBJ_nid2sn(nid))) == 0)) {
                        ciphers = Fcons(intern(OBJ_nid2sn(nid)), ciphers);
                }
        }
@@ -535,7 +558,7 @@ Return the hash length of DIGEST in bytes.
        int size = ossl_digest_size(digest);
 
        if (size < 0)
-               error ("no such cipher");
+               error ("no such digest");
 
        return make_int(size);
 }
@@ -572,7 +595,10 @@ Return the block size of DIGEST in bytes.
 do {                                                                   \
        int __kl;                                                       \
        const EVP_CIPHER *__ciph;                                       \
-                                                                       \
+                                                                       \
+       if (ossl_check_cipher(var) != 0)                                \
+               error("use of blacklisted cipher prohibited");          \
+                                                                        \
        OpenSSL_add_all_ciphers();                                      \
                                                                        \
        __ciph = EVP_get_cipherbyname(                                  \
@@ -895,6 +921,7 @@ binary string data.
        mdctx = xnew(EVP_MD_CTX);
        EVP_MD_CTX_init(mdctx);
        md_blocksize = (unsigned int)(EVP_MD_block_size(md) / 8);
+       SXE_SET_UNUSED(md_blocksize);
 
        EVP_DigestInit_ex(mdctx, md, NULL);
 
@@ -1113,6 +1140,8 @@ binary string data.
        CHECK_SYMBOL(digest);
        CHECK_NATNUM(count);
 
+       if (ossl_check_cipher(cipher) != 0)
+               error("use of blacklisted cipher prohibited");
 
        if (!XINT(count))
                error ("count has to be a non-zero positive integer");
@@ -1213,6 +1242,9 @@ binary string data.
        CHECK_STRING(key);
        CHECK_STRING(iv);
 
+       if (ossl_check_cipher(cipher) != 0)
+               error("use of blacklisted cipher prohibited");
+
        TO_EXTERNAL_FORMAT(LISP_STRING, string,
                           C_STRING_ALLOCA, string_ext, OSSL_CODING);
        string_len = OSSL_STRING_LENGTH(string);
@@ -1343,6 +1375,9 @@ binary string data.
        CHECK_STRING(key);
        CHECK_STRING(iv);
 
+       if (ossl_check_cipher(cipher) != 0)
+               error("use of blacklisted cipher prohibited");
+
        if (!NILP(outfile)) {
                CHECK_STRING(outfile);
                outfile = Fexpand_file_name(outfile, Qnil);
@@ -1534,6 +1569,9 @@ non-nil, use this IV instead.
        CHECK_STRING(key);
        CHECK_STRING(iv);
 
+       if (ossl_check_cipher(cipher) != 0)
+               error("use of blacklisted cipher prohibited");
+
        TO_EXTERNAL_FORMAT(LISP_STRING, string,
                           C_STRING_ALLOCA, string_ext, OSSL_CODING);
        string_len = OSSL_STRING_LENGTH(string);
@@ -1657,6 +1695,9 @@ encrypted data redirected.
        CHECK_STRING(key);
        CHECK_STRING(iv);
 
+       if (ossl_check_cipher(cipher) != 0)
+               error("use of blacklisted cipher prohibited");
+
        if (!NILP(outfile)) {
                CHECK_STRING(outfile);
                outfile = Fexpand_file_name(outfile, Qnil);
@@ -2546,6 +2587,9 @@ returns binary string data.
        CHECK_EVPPKEY(pkey);
 
 
+       if (ossl_check_cipher(cipher) != 0)
+               error("use of blacklisted cipher prohibited");
+
        pk[0] = (XEVPPKEY(pkey))->evp_pkey;
        if (!ossl_pkey_has_public_data(pk[0])) {
                error ("cannot seal, key has no public key data");
@@ -2655,6 +2699,9 @@ EIV is the encrypted iv
        CHECK_STRING(ekey);
 
 
+       if (ossl_check_cipher(cipher) != 0)
+               error("use of blacklisted cipher prohibited");
+
        pk = (XEVPPKEY(pkey))->evp_pkey;
        if (!ossl_pkey_has_private_data(pk))
                error ("cannot open, key has no private key data");
@@ -2980,6 +3027,7 @@ Write PKEY (the public part) in a PEM structure to FILE.
 
        pk = XEVPPKEY(pkey)->evp_pkey;
        pk509 = XEVPPKEY(pkey)->x509;
+       SXE_SET_UNUSED(pk509);
 
        if ((fp = fopen((char *)XSTRING_DATA(file), "w")) == NULL)
                error ("error opening file.");
@@ -3019,12 +3067,16 @@ PASSWORD is ignored in this case.
 
        pk = XEVPPKEY(pkey)->evp_pkey;
        pk509 = XEVPPKEY(pkey)->x509;
+       SXE_SET_UNUSED(pk509);
 
        if (!ossl_pkey_has_private_data(pk))
                return Fossl_pem_write_public_key(file, pkey);
 
        CHECK_SYMBOL(cipher);
 
+       if (ossl_check_cipher(cipher) != 0)
+               error("use of blacklisted cipher prohibited");
+
        OpenSSL_add_all_algorithms();
 
        if (NILP(cipher)) {
@@ -3173,6 +3225,9 @@ PASSWORD is ignored in this case.
 
        CHECK_SYMBOL(cipher);
 
+       if (ossl_check_cipher(cipher) != 0)
+               error("use of blacklisted cipher prohibited");
+
        OpenSSL_add_all_algorithms();
 
        if (NILP(cipher)) {
@@ -3471,13 +3526,21 @@ ossl_bio_dump_callback(BIO *bio, int cmd, const char *argp,
 static Lisp_Object
 ossl_ssl_prepare_cmeth(Lisp_Object method)
 {
-       SSL_METHOD *meth = NULL;
+        SSL_METHOD *meth = NULL;
        Lisp_SSL_CONN *lisp_ssl_conn;
 
        /* start preparing the conn object */
        SSL_library_init();
        SSL_load_error_strings();
 
+       /* I would love to make 'meth' const SSL_METHOD* as well as the
+          'ssl_meth' member of 'Lisp_SSL_CONN' unfortunately not all
+          supported versions of OpenSSL then take const SSL_METHOD*
+          as arguments, so turning off the cast qualifier warning and
+          store non-const is a more reasonable solution.
+       */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
        if (0) {
        } else if (EQ(method, Qssl2)) {
 #if HAVE_SSLV2_CLIENT_METHOD
@@ -3510,6 +3573,7 @@ ossl_ssl_prepare_cmeth(Lisp_Object method)
                error("default tlsv1 client method not supported");
 #endif
        }
+#pragma GCC diagnostic pop
        if (!RAND_status())
                error("OSSL: not enough random data");
 
@@ -3533,6 +3597,14 @@ ossl_ssl_prepare_smeth(Lisp_Object method)
        SSL_library_init();
        SSL_load_error_strings();
 
+       /* I would love to make 'meth' const SSL_METHOD* as well as the
+          'ssl_meth' member of 'Lisp_SSL_CONN' unfortunately not all
+          supported versions of OpenSSL then take const SSL_METHOD*
+          as arguments, so turning off the cast qualifier warning and
+          store non-const is a more reasonable solution. 
+       */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
        if (0) {
        } else if (EQ(method, Qssl2)) {
 #if HAVE_SSLV2_SERVER_METHOD
@@ -3565,6 +3637,7 @@ ossl_ssl_prepare_smeth(Lisp_Object method)
                error("default sslv23 client method not supported");
 #endif
        }
+#pragma GCC diagnostic pop
        if (!RAND_status())
                error("OSSL: not enough random data");
 
@@ -4259,6 +4332,8 @@ block of data sent through SSL-CONN.
                error("SSL connection dead");
 
        conn = XSSLCONN(ssl_conn)->ssl_conn;
+       SXE_SET_UNUSED(conn);
+
        process = XSSLCONN(ssl_conn)->parent;
 
        /* Make sure the process is really alive.  */
@@ -4307,6 +4382,7 @@ Send STRING to the tunnel SSL-CONN.
 
        /* store the original process filter */
        proc_filter = XPROCESS(process)->filter;
+       SXE_SET_UNUSED(proc_filter);
 
        ret = Lstream_write(out, XSTRING_DATA(string), XSTRING_LENGTH(string));
        Lstream_flush(out);
@@ -4871,10 +4947,62 @@ void syms_of_openssl(void)
        DEFSUBR(Fossl_x509_not_before);
        DEFSUBR(Fossl_x509_not_after);
        DEFSUBR(Fossl_x509_signature_type);
+
+/* Problem ciphers */
+       defsymbol(&QAES_256_XTS, "AES-256-XTS");
+       defsymbol(&QAES_128_XTS, "AES-128-XTS");
+       defsymbol(&Qid_aes256_CCM, "id-aes256-CCM");
+       defsymbol(&Qid_aes256_GCM, "id-aes256-GCM");
+       defsymbol(&Qid_aes192_CCM, "id-aes192-CCM");
+       defsymbol(&Qid_aes192_GCM, "id-aes192-GCM");
+       defsymbol(&Qid_aes128_CCM, "id-aes128-CCM");
+       defsymbol(&Qid_aes128_GCM, "id-aes128-GCM");
+       defsymbol(&Qid_aes256_wrap, "id-aes256-wrap");
+       defsymbol(&Qid_aes192_wrap, "id-aes192-wrap");
+       defsymbol(&Qid_aes128_wrap, "id-aes128-wrap");
+       defsymbol(&QCAMELLIA_256_CFB8, "CAMELLIA-256-CFB8");
+       defsymbol(&QCAMELLIA_192_CFB8, "CAMELLIA-192-CFB8");
+       defsymbol(&QCAMELLIA_128_CFB8, "CAMELLIA-128-CFB8");
+       defsymbol(&QCAMELLIA_256_CFB1, "CAMELLIA-256-CFB1");
+       defsymbol(&QCAMELLIA_192_CFB1, "CAMELLIA-192-CFB1");
+       defsymbol(&QCAMELLIA_128_CFB1, "CAMELLIA-128-CFB1");
+       defsymbol(&QDES_EDE3_CFB8, "DES-EDE3-CFB8");
+       defsymbol(&QDES_EDE3_CFB1, "DES-EDE3-CFB1");
+       defsymbol(&QDES_CFB8, "DES-CFB8");
+       defsymbol(&QDES_CFB1, "DES-CFB1");
+       defsymbol(&QAES_256_CFB8, "AES-256-CFB8");
+       defsymbol(&QAES_192_CFB8, "AES-192-CFB8");
+       defsymbol(&QAES_128_CFB8, "AES-128-CFB8");
+       defsymbol(&QAES_256_CFB1, "AES-256-CFB1");
+       defsymbol(&QAES_192_CFB1, "AES-192-CFB1");
+       defsymbol(&QAES_128_CFB1, "AES-128-CFB1");
+       defsymbol(&Qid_smime_alg_CMS3DESwrap, "id-smime-alg-CMS3DESwrap");
 }
 
 void vars_of_openssl(void)
 {
+       DEFVAR_LISP("ossl-cipher-blacklist", &Vossl_cipher_blacklist /*
+A list of ciphers that are blacklisted against use.
+
+These are ciphers that are known to cause problems with the SXEmacs
+OpenSSL code that can result in data corruption.  If you find that you
+need to use one or more of the ciphers on this list, you can do so by
+removing it from this list first.  Do we need to mention that this is 
+probably not a good idea and that you are well and truly on your own
+here?  But hey, it's your data...
+                                                                    */);
+
+       Lisp_Object badCiphers[28] = {
+               QAES_256_XTS, QAES_128_XTS, Qid_aes256_CCM, Qid_aes256_GCM,
+               Qid_aes192_CCM, Qid_aes192_GCM, Qid_aes128_CCM, Qid_aes128_GCM,
+               Qid_aes256_wrap, Qid_aes192_wrap, Qid_aes128_wrap,
+               QCAMELLIA_256_CFB8, QCAMELLIA_192_CFB8, QCAMELLIA_128_CFB8,
+               QCAMELLIA_256_CFB1, QCAMELLIA_192_CFB1, QCAMELLIA_128_CFB1,
+               QDES_EDE3_CFB8, QDES_EDE3_CFB1, QDES_CFB8, QDES_CFB1,
+               QAES_256_CFB8, QAES_192_CFB8, QAES_128_CFB8, QAES_256_CFB1,
+               QAES_192_CFB1, QAES_128_CFB1, Qid_smime_alg_CMS3DESwrap };
+       Vossl_cipher_blacklist = Flist(28, badCiphers);
+
        Fprovide(Qopenssl);
 
 #ifndef OPENSSL_NO_RSA
index acc1c69..053ac72 100644 (file)
@@ -24,36 +24,58 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #define INCLUDED_openssl_h_ 1
 
 /* this is to determine what has been configured */
+#ifdef HAVE_OPENSSL_OPENSSLCONF_H
 #include <openssl/opensslconf.h>
+#endif
 
+#ifdef HAVE_OPENSSL_EVP_H
 #include <openssl/evp.h>
+#endif
+
+#ifdef HAVE_OPENSSL_RAND_H
 #include <openssl/rand.h>
+#endif
+
+#ifdef HAVE_OPENSSL_HMAC_H
 #include <openssl/hmac.h>
+#endif
 
 /* special asymmetric crypto systems */
+#ifdef HAVE_OPENSSL_RSA_H
 #ifndef OPENSSL_NO_RSA
 #include <openssl/rsa.h>
 #endif
+#endif
 
+#ifdef HAVE_OPENSSL_DSA_H
 #ifndef OPENSSL_NO_DSA
 #include <openssl/dsa.h>
 #endif
+#endif
 
+#ifdef HAVE_OPENSSL_EC_H
 #ifndef OPENSSL_NO_EC
 #include <openssl/ec.h>
 #endif
+#endif
 
+#ifdef HAVE_OPENSSL_ECDH_H
 #ifndef OPENSSL_NO_ECDH
 #include <openssl/ecdh.h>
 #endif
+#endif
 
+#ifdef HAVE_OPENSSL_ECDSA_H
 #ifndef OPENSSL_NO_ECDSA
 #include <openssl/ecdsa.h>
 #endif
+#endif
 
+#ifdef HAVE_OPENSSL_DH
 #ifndef OPENSSL_NO_DH
 #include <openssl/dh.h>
 #endif
+#endif
 
 #if defined HAVE_OPENSSL_X509_H
 # include <openssl/x509.h>
@@ -84,8 +106,6 @@ DECLARE_LRECORD(evp_pkey, Lisp_EVP_PKEY);
 #define CHECK_EVPPKEY(x)       CHECK_RECORD (x, evp_pkey)
 #define wrap_evppkey(p)                wrap_object(p)
 
-
-#if !defined(OPENSSL_NO_SSL2) || !defined(OPENSSL_NO_SSL3)
 /* opaque SSL_CONN object structure
  * this is just an ssl-ish wrap around the process object
  */
@@ -135,5 +155,4 @@ DECLARE_LRECORD(ssl_conn, Lisp_SSL_CONN);
 #define OSSL_DEBUG_FLAG
 #endif
 
-#endif /* !OPENSSL_NO_SSL2 || !OPENSSL_NO_SSL3 */
 #endif /* INCLUDED_openssl_h_ */
index 47c5f48..d1d3c2a 100644 (file)
@@ -912,6 +912,8 @@ Display ERROR-OBJECT on STREAM in a user-friendly way.
 
 Lisp_Object Vfloat_output_format;
 
+void float_to_string(char *buf, fpfloat data, int maxlen);
+
 /*
  * This buffer should be at least as large as the max string size of the
  * largest float, printed in the biggest notation.  This is undoubtedly
index 1ccfd70..a8c7a3c 100644 (file)
@@ -80,10 +80,14 @@ char *xrealpath(const char *path, char *restrict resolved_path)
 
        /* If it's a relative pathname use getcwd for starters. */
        if (abslen == 0) {
-               getcwd(new_path, PATH_MAX - 1);
-               new_path += strlen(new_path);
-               if (!IS_DIRECTORY_SEP(new_path[-1]))
-                       *new_path++ = DIRECTORY_SEP;
+               void *ok = getcwd(new_path, PATH_MAX - 1);
+               if (ok) {
+                       new_path += strlen(new_path);
+                       if (!IS_DIRECTORY_SEP(new_path[-1]))
+                               *new_path++ = DIRECTORY_SEP;
+               } else {
+                       return NULL;
+               }
        } else {
                /* Copy first directory sep. */
                strncpy(new_path, path, abslen);
index 6f9fb9c..61d324c 100644 (file)
@@ -83,6 +83,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 # undef REL_ALLOC
 #endif
 
+#include "sxe-utils.h"
+
 /* The `emacs' switch turns on certain matching commands
    that make sense only in Emacs. */
 #ifdef emacs
@@ -1493,7 +1495,7 @@ typedef struct {
                                          string2, size2);              \
                DEBUG_PRINT1("'\n");                                    \
                                                                        \
-               pat = (unsigned char *) POP_FAILURE_POINTER();          \
+               pat = (const unsigned char*)POP_FAILURE_POINTER();      \
                DEBUG_PRINT2 ("  Popping pattern %p: ", pat);           \
                DEBUG_PRINT_COMPILED_PATTERN(bufp, pat, pend);          \
                                                                        \
@@ -3809,8 +3811,11 @@ int re_compile_fastmap(struct re_pattern_buffer *bufp)
                                /* fuck, p isnt const thanks to that
                                 * unified range table function below */
 #ifdef MULE
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
                                p = (unsigned char*)fail_stack.
                                    stack[--fail_stack.avail].pointer;
+#pragma GCC diagnostic pop
 #else
                                p = fail_stack.stack[--fail_stack.avail]
                                        .pointer;
@@ -5855,6 +5860,7 @@ re_match_2_internal(struct re_pattern_buffer *bufp, re_char * string1,
                                          dummy_low_reg, dummy_high_reg,
                                          reg_dummy, reg_dummy,
                                          reg_info_dummy);
+                        SXE_SET_UNUSED(pdummy), SXE_SET_UNUSED(sdummy);
                }
                        /* Note fall through.  */
 
@@ -6264,9 +6270,16 @@ re_match_2_internal(struct re_pattern_buffer *bufp, re_char * string1,
                if (!FAIL_STACK_EMPTY()) {
                        /* A restart point is known.  Restore to that state.  */
                        DEBUG_PRINT1("\nFAIL:\n");
-                       POP_FAILURE_POINT(d, p, lowest_active_reg,
+                       
+                       const unsigned char* cpat = p;
+                       
+                       POP_FAILURE_POINT(d, cpat, lowest_active_reg,
                                          highest_active_reg, regstart, regend,
                                          reg_info);
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
+                       p = (unsigned char*)cpat;
+#pragma GCC diagnostic pop
 
                        /* If this failure point is a dummy, try the next one.  */
                        if (!p)
index 1a5f0a1..ff9f338 100644 (file)
@@ -766,8 +766,11 @@ fast_string_match(Lisp_Object regexp, const Bufbyte * nonreloc,
                                   return with failure...
                                */
                                return -1;
-                       newnonreloc = alloca(length);
-                       memcpy((void*)newnonreloc, (void*)XSTRING_DATA(reloc), length);
+                       Bufbyte *copy = alloca(length);
+                       memcpy((void*)copy,
+                               (const void*)XSTRING_DATA(reloc),
+                               length);
+                       newnonreloc = copy;
                }
        }
 
index 3969a72..a299a2c 100644 (file)
@@ -230,7 +230,7 @@ struct Lisp_Specifier {
        Lisp_Object fallback;
 
        /* type-specific extra data attached to a specifier */
-       max_align_t data[1];
+       sxe_max_align_t data[1];
 };
 typedef struct Lisp_Specifier Lisp_Specifier;
 
diff --git a/src/sxe-memory.h b/src/sxe-memory.h
new file mode 100644 (file)
index 0000000..41840e4
--- /dev/null
@@ -0,0 +1,181 @@
+/* Utility definitions for C code of SXEmacs for handling memory
+
+   Copyright (C) 1985-1987, 1992-1995 Free Software Foundation, Inc.
+   Copyright (C) 1993-1996 Richard Mlynarik.
+   Copyright (C) 1995, 1996, 2000 Ben Wing.
+   Copyright (C) 2004 Steve Youngs.
+   Copyright (C) 2011 Nelson Ferreira.
+
+This file is part of SXEmacs
+
+SXEmacs 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 3 of the License, or
+(at your option) any later version.
+
+SXEmacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+/* NOT synched with FSF */
+#ifndef INCLUDED_sxe_memory_h_
+#define INCLUDED_sxe_memory_h_
+
+\f
+/* generally useful */
+#define xnew(type) ((type *) xmalloc (sizeof (type)))
+#define xnew_atomic(type) ((type *) xmalloc_atomic (sizeof (type)))
+#define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type)))
+#define xnew_atomic_array(type, len)                   \
+       ((type*)xmalloc_atomic((len) * sizeof(type)))
+#define xnew_and_zero(type) ((type *) xmalloc_and_zero (sizeof (type)))
+#define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
+#define xnew_array_and_zero(type, len)                         \
+       ((type*)xmalloc_and_zero ((len) * sizeof (type)))
+#define xrealloc_array(ptr, type, len)                         \
+       ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type))))
+#define XREALLOC_ARRAY         xrealloc_array
+#define alloca_array(type, len) ((type *) alloca ((len) * sizeof (type)))
+
+/************************************************************************/
+/*                               Memory                                */
+/************************************************************************/
+
+#ifdef ALL_DEBUG_FLAGS
+#undef GC_DEBUG_FLAG
+#define GC_DEBUG_FLAG
+#endif
+
+#if !defined GC_DEBUG_FLAG
+# define SXE_DEBUG_GC(args...)
+#else
+# define SXE_DEBUG_GC(args...)         __SXE_DEBUG__("[gc] " args)
+#endif
+#define SXE_DEBUG_GC_PT(args...)       SXE_DEBUG_GC("[pthread]: " args)
+#define SXE_CRITICAL_GC(args...)       __SXE_DEBUG__("[gc] CRITICAL: " args)
+
+void malloc_warning(const char *);
+
+#if defined HAVE_BDWGC && defined EF_USE_BDWGC
+# if defined HAVE_THREADS
+#  if !defined GC_PTHREADS
+#   define GC_PTHREADS 1
+#  endif  /* !GC_PTHREADS */
+#  if !defined GC_THREADS
+#   define GC_THREADS  1
+#  endif  /* !GC_THREADS */
+# endif         /* HAVE_THREADS */
+
+# undef GC_DEBUG
+# if defined GC_DEBUG_FLAG
+#  define GC_DEBUG     1
+# endif         /* GC_DEBUG_FLAG */
+# if defined HAVE_GC_GC_H
+#  include <gc/gc.h>
+# elif defined HAVE_GC_H
+#  include <gc.h>
+# else
+#  error "Take less of those pills!"
+# endif
+
+# if defined GC_DEBUG_FLAG
+#  define zmalloc              GC_MALLOC_IGNORE_OFF_PAGE
+#  define zcalloc(n, m)        GC_MALLOC((n)*(m))
+#  define zmalloc_atomic       GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE
+#  define zmalloc_and_zero     GC_MALLOC
+#  define zrealloc             GC_REALLOC
+#  define zstrdup              GC_STRDUP
+#  undef zfree
+#  define zfree(x)             GC_FREE(x)
+# else /* !GC_DEBUG_FLAG */
+#  define zmalloc              GC_malloc_ignore_off_page
+#  define zcalloc(n, m)                GC_malloc((n)*(m))
+#  define zmalloc_atomic       GC_malloc_atomic_ignore_off_page
+#  define zmalloc_and_zero     GC_malloc
+#  define zrealloc             GC_realloc
+#  define zstrdup              GC_strdup
+#  undef zfree
+#  define zfree(x)
+# endif        /* GC_DEBUG_FLAG */
+
+#else  /* !BDWGC */
+#define zmalloc                F&^!
+#define zcalloc                F&^!
+#define zmalloc_atomic F&^!
+#define zmalloc_and_zero       F&^!
+#define zrealloc       F&^!
+#define zstrdrup       F&^!
+#endif /* BDWGC */
+
+/* also define libc mem funs */
+#define ymalloc                malloc
+#define ycalloc(n, m)  calloc(n, m)
+#define ymalloc_atomic(n)      ycalloc(1, n)
+#define ymalloc_and_zero(x)    ycalloc(1, x)
+#define yrealloc       realloc
+#define ystrdup                strdup
+#define yfree(x)       free(x)
+/* and their convenience companions */
+#define ynew(type)             ((type*)ymalloc(sizeof(type)))
+#define ynew_array(type, len)  ((type*)ymalloc((len) * sizeof(type)))
+#define ynew_and_zero(type)    ((type*)ymalloc_and_zero(sizeof(type)))
+#define ynew_array_and_zero(type, len)                 \
+       ((type*)ymalloc_and_zero((len) * sizeof(type)))
+#define YREALLOC_ARRAY(ptr, type, len)                                 \
+       ((void)(ptr = (type *)yrealloc(ptr, (len) * sizeof (type))))
+
+#if defined HAVE_BDWGC && defined EF_USE_BDWGC
+/* and now the x* series */
+# define xmalloc               zmalloc
+# define xcalloc               zcalloc
+# define xmalloc_atomic                zmalloc_atomic
+# define xmalloc_and_zero      zmalloc_and_zero
+# define xrealloc              zrealloc
+# define xstrdup               zstrdup
+# if defined ERROR_CHECK_MALLOC
+#  define xfree(args...)       zfree(args)
+# else /* !ERROR_CHECK_MALLOC */
+#  define xfree(args...)
+# endif         /* ERROR_CHECK_MALLOC */
+
+#else  /* !BDWGC */
+void *xmalloc(size_t size);
+void *xmalloc_atomic(size_t size);
+void *xmalloc_and_zero(size_t size);
+void *xrealloc(void *, size_t size);
+char *xstrdup(const char *);
+# if defined ERROR_CHECK_MALLOC
+#  if SIZEOF_VOID_P == 4
+#   define xfree(lvalue)                                       \
+       do {                                                    \
+               void *volatile *xfree_ptr =                     \
+                       (void *volatile*)                       \
+                       ((volatile void*)&(lvalue));            \
+               assert(*xfree_ptr != (void*)0xB00BB4BE);        \
+               yfree(*xfree_ptr);                              \
+               *xfree_ptr = (void*)0xB00BB4BE;                 \
+       } while (0)
+#  elif SIZEOF_VOID_P == 8
+#   define xfree(lvalue)                                                       \
+       do {                                                            \
+               void *volatile *xfree_ptr =                             \
+                       (void *volatile*)                               \
+                       ((volatile void*)&(lvalue));                    \
+               assert(*xfree_ptr != (void*)0xCAFEBABEDEADBEEF);        \
+               yfree(*xfree_ptr);                                      \
+               *xfree_ptr = (void*)0xCAFEBABEDEADBEEF;                 \
+       } while (0)
+#  else  /* huh? */
+#   error "Strange-arse system detected.  Watch a movie, it\'s more fun!"
+#  endif
+# else /* !ERROR_CHECK_MALLOC */
+#  define xfree(args...)       yfree(args)
+# endif         /* ERROR_CHECK_MALLOC */
+#endif /* BDWGC */
+
+
+#endif
index 8bc985f..cdc2fd8 100644 (file)
@@ -54,11 +54,17 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #else
 # define SXE_UNUSED(x) x
 #endif
+
 #ifdef UNUSED
 #undef UNUSED
 #define UNUSED(x) SXE_UNUSED(x)
 #endif
 
+#ifdef SXE_SET_UNUSED
+#else
+#  define SXE_SET_UNUSED(x) ((void)(x))
+#endif
+
 #ifdef WEAK_EXTERN
 #elif defined(__GNUC__)
 # define WEAK_EXTERN   extern __attribute__((weak))
@@ -78,6 +84,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #else
 #define LIKELY(_x)     __builtin_expect(!!(_x), 1)
 #endif
+
 #ifdef UNLIKELY
 #else
 #define UNLIKELY(_x)   __builtin_expect(!!(_x), 0)
@@ -101,13 +108,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #define SXE_CRITICAL(args...)          __SXE_DEBUG__("CRITICAL: " args)
 
 
-
 /* We define assert iff USE_ASSERTIONS or DEBUG_SXEMACS is defined.
    Otherwise we define it to be empty.  Quantify has shown that the
    time the assert checks take is measurable so let's not include them
    in production binaries. */
 
-#ifdef USE_ASSERTIONS
+#if defined(USE_ASSERTIONS) && defined(emacs)
 /* Highly dubious kludge */
 /*   (thanks, Jamie, I feel better now -- ben) */
 void assert_failed(const char *, int, const char *);
@@ -117,7 +123,7 @@ void assert_failed(const char *, int, const char *);
 # ifdef DEBUG_SXEMACS
 #  define assert(x) ((x) ? (void) 0 : (void) abort ())
 # else
-#  define assert(x)
+#  define assert(x) ((void)0)
 # endif
 #endif
 
@@ -143,21 +149,7 @@ void assert_failed(const char *, int, const char *);
 #endif
 
 \f
-/* generally useful */
 #define countof(x) ((int) (sizeof(x)/sizeof((x)[0])))
-#define xnew(type) ((type *) xmalloc (sizeof (type)))
-#define xnew_atomic(type) ((type *) xmalloc_atomic (sizeof (type)))
-#define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type)))
-#define xnew_atomic_array(type, len)                   \
-       ((type*)xmalloc_atomic((len) * sizeof(type)))
-#define xnew_and_zero(type) ((type *) xmalloc_and_zero (sizeof (type)))
-#define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
-#define xnew_array_and_zero(type, len)                         \
-       ((type*)xmalloc_and_zero ((len) * sizeof (type)))
-#define xrealloc_array(ptr, type, len)                         \
-       ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type))))
-#define XREALLOC_ARRAY         xrealloc_array
-#define alloca_array(type, len) ((type *) alloca ((len) * sizeof (type)))
 
 #if !defined HAVE_DECL_STRDUP
 extern char *strdup(const char *s);
@@ -199,7 +191,7 @@ extern char *strdup(const char *s);
 #endif
 
 \f
-/* No type has a greater alignment requirement than max_align_t.
+/* No type has a greater alignment requirement than sxe_max_align_t.
    (except perhaps for types we don't use, like long double) */
 typedef union {
        struct {
@@ -214,7 +206,7 @@ typedef union {
        struct {
                double d;
        } d;
-} max_align_t;
+} sxe_max_align_t;
 
 #ifndef ALIGNOF
 # if defined (__GNUC__) && (__GNUC__ >= 2)
@@ -254,143 +246,6 @@ template < typename T > struct alignment_trick {
 #define DECLARE_NOTHING struct nosuchstruct
 #endif
 
-\f
-/************************************************************************/
-/*                               Memory                                */
-/************************************************************************/
-
-#ifdef ALL_DEBUG_FLAGS
-#undef GC_DEBUG_FLAG
-#define GC_DEBUG_FLAG
-#endif
-
-#if !defined GC_DEBUG_FLAG
-# define SXE_DEBUG_GC(args...)
-#else
-# define SXE_DEBUG_GC(args...)         __SXE_DEBUG__("[gc] " args)
-#endif
-#define SXE_DEBUG_GC_PT(args...)       SXE_DEBUG_GC("[pthread]: " args)
-#define SXE_CRITICAL_GC(args...)       __SXE_DEBUG__("[gc] CRITICAL: " args)
-
-void malloc_warning(const char *);
-
-#if defined HAVE_BDWGC && defined EF_USE_BDWGC
-# if defined HAVE_THREADS
-#  if !defined GC_PTHREADS
-#   define GC_PTHREADS 1
-#  endif  /* !GC_PTHREADS */
-#  if !defined GC_THREADS
-#   define GC_THREADS  1
-#  endif  /* !GC_THREADS */
-# endif         /* HAVE_THREADS */
-
-# undef GC_DEBUG
-# if defined GC_DEBUG_FLAG
-#  define GC_DEBUG     1
-# endif         /* GC_DEBUG_FLAG */
-# if defined HAVE_GC_GC_H
-#  include <gc/gc.h>
-# elif defined HAVE_GC_H
-#  include <gc.h>
-# else
-#  error "Take less of those pills!"
-# endif
-
-# if defined GC_DEBUG_FLAG
-#  define zmalloc              GC_MALLOC_IGNORE_OFF_PAGE
-#  define zcalloc(n, m)        GC_MALLOC((n)*(m))
-#  define zmalloc_atomic       GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE
-#  define zmalloc_and_zero     GC_MALLOC
-#  define zrealloc             GC_REALLOC
-#  define zstrdup              GC_STRDUP
-#  undef zfree
-#  define zfree(x)             GC_FREE(x)
-# else /* !GC_DEBUG_FLAG */
-#  define zmalloc              GC_malloc_ignore_off_page
-#  define zcalloc(n, m)                GC_malloc((n)*(m))
-#  define zmalloc_atomic       GC_malloc_atomic_ignore_off_page
-#  define zmalloc_and_zero     GC_malloc
-#  define zrealloc             GC_realloc
-#  define zstrdup              GC_strdup
-#  undef zfree
-#  define zfree(x)
-# endif        /* GC_DEBUG_FLAG */
-
-#else  /* !BDWGC */
-#define zmalloc                F&^!
-#define zcalloc                F&^!
-#define zmalloc_atomic F&^!
-#define zmalloc_and_zero       F&^!
-#define zrealloc       F&^!
-#define zstrdrup       F&^!
-#endif /* BDWGC */
-
-/* also define libc mem funs */
-#define ymalloc                malloc
-#define ycalloc(n, m)  calloc(n, m)
-#define ymalloc_atomic(n)      ycalloc(1, n)
-#define ymalloc_and_zero(x)    ycalloc(1, x)
-#define yrealloc       realloc
-#define ystrdup                strdup
-#define yfree(x)       free(x)
-/* and their convenience companions */
-#define ynew(type)             ((type*)ymalloc(sizeof(type)))
-#define ynew_array(type, len)  ((type*)ymalloc((len) * sizeof(type)))
-#define ynew_and_zero(type)    ((type*)ymalloc_and_zero(sizeof(type)))
-#define ynew_array_and_zero(type, len)                 \
-       ((type*)ymalloc_and_zero((len) * sizeof(type)))
-#define YREALLOC_ARRAY(ptr, type, len)                                 \
-       ((void)(ptr = (type *)yrealloc(ptr, (len) * sizeof (type))))
-
-#if defined HAVE_BDWGC && defined EF_USE_BDWGC
-/* and now the x* series */
-# define xmalloc               zmalloc
-# define xcalloc               zcalloc
-# define xmalloc_atomic                zmalloc_atomic
-# define xmalloc_and_zero      zmalloc_and_zero
-# define xrealloc              zrealloc
-# define xstrdup               zstrdup
-# if defined ERROR_CHECK_MALLOC
-#  define xfree(args...)       zfree(args)
-# else /* !ERROR_CHECK_MALLOC */
-#  define xfree(args...)
-# endif         /* ERROR_CHECK_MALLOC */
-
-#else  /* !BDWGC */
-void *xmalloc(size_t size);
-void *xmalloc_atomic(size_t size);
-void *xmalloc_and_zero(size_t size);
-void *xrealloc(void *, size_t size);
-char *xstrdup(const char *);
-# if defined ERROR_CHECK_MALLOC
-#  if SIZEOF_VOID_P == 4
-#   define xfree(lvalue)                                       \
-       do {                                                    \
-               void *volatile *xfree_ptr =                     \
-                       (void *volatile*)                       \
-                       ((volatile void*)&(lvalue));            \
-               assert(*xfree_ptr != (void*)0xB00BB4BE);        \
-               yfree(*xfree_ptr);                              \
-               *xfree_ptr = (void*)0xB00BB4BE;                 \
-       } while (0)
-#  elif SIZEOF_VOID_P == 8
-#   define xfree(lvalue)                                                       \
-       do {                                                            \
-               void *volatile *xfree_ptr =                             \
-                       (void *volatile*)                               \
-                       ((volatile void*)&(lvalue));                    \
-               assert(*xfree_ptr != (void*)0xCAFEBABEDEADBEEF);        \
-               yfree(*xfree_ptr);                                      \
-               *xfree_ptr = (void*)0xCAFEBABEDEADBEEF;                 \
-       } while (0)
-#  else  /* huh? */
-#   error "Strange-arse system detected.  Watch a movie, it\'s more fun!"
-#  endif
-# else /* !ERROR_CHECK_MALLOC */
-#  define xfree(args...)       yfree(args)
-# endif         /* ERROR_CHECK_MALLOC */
-#endif /* BDWGC */
-
 \f
 /* str funs */
 #define xstrlen                strlen
index 9cec2e3..f551f27 100644 (file)
@@ -81,7 +81,7 @@
 #if defined USE_SXEMACS_CONFIG_H
 # include "config.h"
 #endif
-#include "sxe-utils.h"
+
 #include "lisp.h"
 
 #include "sysfile.h"
index a7d9f5e..f02591b 100644 (file)
@@ -612,11 +612,11 @@ SUBR must be a built-in function.
 */
        (subr))
 {
-       const char *name;
+        const char *name;
        if (!SUBRP (subr))
                wrong_type_argument (Qsubrp, subr);
        name = XSUBR (subr)->name;
-       return make_string ((Bufbyte *)name, strlen (name));
+       return make_string ((const Bufbyte *)name, strlen (name));
 }
 
 
index 4fbe814..13381b1 100644 (file)
@@ -88,6 +88,8 @@ Lisp_Object Vstandard_syntax_table;
 
 Lisp_Object Vsyntax_designator_chars_string;
 
+Lisp_Object Qscan_error;
+
 /* This is the internal form of the parse state used in parse-partial-sexp.  */
 
 struct lisp_parse_state {
@@ -1205,6 +1207,7 @@ scan_lists(struct buffer * buf, Bufpos from, int count, int depth,
        enum syntaxcode code;
        int syncode;
        int min_depth = depth;  /* Err out if depth gets less than this. */
+       Bufpos last_good = from;
 
        if (depth > 0)
                min_depth = 0;
@@ -1223,6 +1226,8 @@ scan_lists(struct buffer * buf, Bufpos from, int count, int depth,
                        c = BUF_FETCH_CHAR(buf, from);
                        syncode = SYNTAX_CODE_FROM_CACHE(mirrortab, c);
                        code = SYNTAX_FROM_CODE(syncode);
+                       if (depth == min_depth)
+                               last_good = from;
                        from++;
 
                        /* a 1-char comment start sequence */
@@ -1348,8 +1353,11 @@ scan_lists(struct buffer * buf, Bufpos from, int count, int depth,
                                if (depth < min_depth) {
                                        if (noerror)
                                                return Qnil;
-                                       error("Containing expression "
-                                             "ends prematurely");
+                                       signal_type_error_2(Qscan_error,
+                                                           "Containing expression "
+                                                           "ends prematurely",
+                                                           make_int(last_good),
+                                                           make_int(from));
                                }
                                break;
 
@@ -1536,8 +1544,11 @@ scan_lists(struct buffer * buf, Bufpos from, int count, int depth,
                                        if (noerror) {
                                                return Qnil;
                                        }
-                                       error("Containing expression "
-                                             "ends prematurely");
+                                       signal_type_error_2(Qscan_error,
+                                                           "Containing expression "
+                                                           "ends premeturely",
+                                                           make_int(last_good),
+                                                           make_int(from));
                                }
                                break;
 
@@ -1611,7 +1622,8 @@ scan_lists(struct buffer * buf, Bufpos from, int count, int depth,
 
       lose:
        if (!noerror)
-               error("Unbalanced parentheses");
+               signal_type_error_2(Qscan_error, "Unbalanced parentheses",
+                                   make_int(last_good), make_int(from));
        return Qnil;
 }
 
@@ -2260,6 +2272,8 @@ void syms_of_syntax(void)
        DEFSUBR(Fscan_sexps);
        DEFSUBR(Fbackward_prefix_chars);
        DEFSUBR(Fparse_partial_sexp);
+
+       DEFERROR_STANDARD(Qscan_error, Qsyntax_error);
 }
 
 void vars_of_syntax(void)
index 7ffad2f..0828973 100644 (file)
@@ -1371,6 +1371,7 @@ static void tty_init_sys_modes_on_device(struct device *d)
 
        input_fd = CONSOLE_TTY_DATA(con)->infd;
        output_fd = CONSOLE_TTY_DATA(con)->outfd;
+       SXE_SET_UNUSED(output_fd);
 
        emacs_get_tty(input_fd, &CONSOLE_TTY_DATA(con)->old_tty);
        tty = CONSOLE_TTY_DATA(con)->old_tty;
@@ -1725,6 +1726,7 @@ static void tty_reset_sys_modes_on_device(struct device *d)
 
        input_fd = CONSOLE_TTY_DATA(con)->infd;
        output_fd = CONSOLE_TTY_DATA(con)->outfd;
+       SXE_SET_UNUSED(output_fd);
 
 #if defined (IBMR2AIX) && defined (AIXHFT)
        {
index 62e2b6b..f34b944 100644 (file)
@@ -223,35 +223,24 @@ x__dirlen(const char *file, size_t len)
 extern_inline void
 x__dirname(char *restrict res, const char *file, size_t len)
        __attribute__((always_inline));
-#if defined(HAVE_DIRNAME) && defined(DIRNAME_SIDE_EFFECT)
+#if defined(HAVE_DIRNAME)
 extern_inline void
 x__dirname(char *restrict res, const char *file, size_t len)
 {
-       /* assumes res is malloc'd of size LEN */
-       xstrncpy(res, file, len);
-       dirname(res);
-       return;
-}
-#elif defined(HAVE_DIRNAME) && !defined(DIRNAME_ACCEPTS_PROTMEM)
-extern_inline void
-x__dirname(char *restrict res, const char *file, size_t len)
-{
-       /* assumes res is malloc'd of size LEN */
-       char *result;
-       xstrncpy(res, file, len);
-       /* if we were using side effects we woulda matched the above cond */
-       result = dirname(res);
-       xstrncpy(res, result, len);
-       return;
-}
-#elif defined(HAVE_DIRNAME)
-extern_inline void
-x__dirname(char *restrict res, const char *file, size_t len)
-{
-       /* assumes res is malloc'd of size LEN */
-       char *result = dirname(res);
-       xstrncpy(res, result, len);
-       return;
+        /* assumes res is malloc'd of size LEN */
+        char *result;
+        xstrncpy(res, file, len);
+        result = dirname(res);
+        if (res == result) {
+                return;
+        }
+        if (result < res || result >= (res+len)) {
+                xstrncpy(res, result, len);
+        } else {
+                /* Use memmove if result overlaps res */
+                memmove(res, result, strlen(result)+1);
+        }
+        return;
 }
 #endif
 
index 65ecc1d..3f51967 100644 (file)
@@ -56,23 +56,29 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #endif
 #endif
 
-/* These headers #define all kinds of common words like "columns"...
-   What a bunch of losers.  If we were to include them, we'd have to
-   include them last to prevent them from messing up our own header
-   files (struct slot names, etc.).  But it turns out that there are
-   other conflicts as well on some systems, so screw it: we'll just
-   re-declare the routines we use and assume the code in this file is
-   invoking them correctly. */
-/* # include <curses.h> */
-/* # include <term.h> */
-#ifndef CURSES_H_FILE
+#ifdef HAVE_TERM_H
+#ifdef TERM_H_FILE
+#include TERM_H_FILE
+#endif
+#endif
+
+#ifndef HAVE_TGETENT_PROTOTYPE
 EXTERN_C int tgetent(const char *, const char *);
+#endif
+
+#ifndef HAVE_TGETFLAG_PROTOTYPE
 EXTERN_C int tgetflag(const char *);
+#endif
+
+#ifndef HAVE_TGETNUM_PROTOTYPE
 EXTERN_C int tgetnum(const char *);
+#endif
+
+#ifndef HAVE_TGETSTR_PROTOTYPE
 EXTERN_C char *tgetstr(const char *, char **);
 #endif
 
-#ifndef TERMCAP_H_FILE
+#ifndef HAVE_TPUTS_PROTOTYPE
 EXTERN_C void tputs(const char *, int, int (*)(int));
 #endif
 
index ea8a31e..179f5fd 100644 (file)
@@ -38,6 +38,14 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #endif                         /* not emacs */
 
+#ifdef HAVE_TERMIO_H
+#include <termio.h>
+#endif
+
+#ifdef HAVE_TERMIOS_H
+#include <termios.h>
+#endif
+
 /* BUFSIZE is the initial size allocated for the buffer
    for reading the termcap file.
    It is not a limit.
index 111f5d7..c3ea71e 100644 (file)
@@ -64,15 +64,22 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
    is equally lame in that it supplies "fixed" headers for curses.h
    but not term.h.) However, it seems to work to just not include
    term.h under Solaris, so we try that.  KLUDGE! */
-#ifdef TERN_H_FILE
+#ifdef HAVE_TERM_H
+#ifdef TERM_H_FILE
 #if !(defined (__GNUC__) && defined (SOLARIS2))
 #include TERM_H_FILE
 #endif
 #endif
+#endif
 
 extern void *xmalloc_atomic(int size);
 
-#if 0                          /* If this isn't declared somewhere, too bad */
+#ifndef HAVE_TPARM_PROTOTYPE
+/* Canonical for one, in their infinite wisdom ships the tinfo library without
+   any headers of which we'd need for proper tparm prototype.
+   If it is not defined, let's define it here, since if we are linking this
+   configure has determined we have a linkable tparm
+*/
 extern char *tparm(const char *string, int arg1, int arg2, int arg3,
                   int arg4, int arg5, int arg6, int arg7, int arg8, int arg9);
 #endif
@@ -86,11 +93,17 @@ char *emacs_tparam(const char *string, char *outstring, int len, int arg1,
                   int arg2, int arg3, int arg4, int arg5, int arg6, int arg7,
                   int arg8, int arg9)
 {
-       char *temp;
        size_t slen = len;
 
-       temp = (char *)tparm((char *)string, arg1, arg2, arg3, arg4, arg5, arg6, arg7,
-                            arg8, arg9);
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
+       char *paramstring = (char *)string;
+       char *temp = (char *)
+               tparm(paramstring, arg1, arg2, arg3, arg4, arg5, arg6, arg7,
+                     arg8, arg9);
+#pragma GCC diagnostic pop
+
+
        if (outstring == 0) {
                slen = strlen(temp)+1;
                outstring = (char *)xmalloc_atomic( slen );
index 47c4211..07a07de 100644 (file)
@@ -1952,8 +1952,8 @@ See also `x-set-font-path'.
 {
        Display *dpy = get_x_display(device);
        int ndirs_return;
-       const char **directories =
-           (const char **)XGetFontPath(dpy, &ndirs_return);
+       const char * const *directories =
+           (const char * const *)XGetFontPath(dpy, &ndirs_return);
        Lisp_Object font_path = Qnil;
 
        if (!directories)
index dfcfa84..74267d0 100644 (file)
@@ -146,6 +146,8 @@ static widget_value *dbox_descriptor_to_widget_value(Lisp_Object keys)
                }
        }
 
+       SXE_SET_UNUSED(title);
+
        if (NILP(question))
                syntax_error("Dialog descriptor provides no question", keys);
 
index ae10350..8b41d94 100644 (file)
@@ -600,13 +600,18 @@ whatever(Display *dspl, struct x_device *xd, struct mod_clo_s *clo)
                [modifier_index * mkpm + modifier_key];
 
        for (int column = 0; column < 4; column += 2) {
-               KeySym sym = code
 #ifdef HAVE_XKBKEYCODETOKEYSYM
-                       ? XkbKeycodeToKeysym(dspl, code, 0, column)
+                KeySym sym = code
+                        ? XkbKeycodeToKeysym(dspl, code, 0, column)
+                        : 0;
 #else
-                       ? XKeycodeToKeysym(dspl, code, column)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+                KeySym sym = code
+                        ? XKeycodeToKeysym(dspl, code, column)
+                        : 0;
+#pragma GCC diagnostic pop
 #endif
-                       : 0;
 
                if (LIKELY(sym == last_sym)) {
                        continue;
@@ -3772,10 +3777,13 @@ void init_event_Xt_late(void)
                      (XtPointer) (XtInputReadMask /* | XtInputExceptMask */ ),
                      Xt_what_callback, 0);
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
        XtAppSetTypeConverter(Xt_app_con, XtRString, XtRPixel,
                              EmacsXtCvtStringToPixel,
                              (XtConvertArgList)colorConvertArgs,
                              2, XtCacheByDisplay, EmacsFreePixel);
+#pragma GCC diagnostic pop
 
 #ifdef XIM_XLIB
        XtAppSetTypeConverter(Xt_app_con, XtRString, XtRXimStyles,
index 1b30874..0bcf79e 100644 (file)
@@ -2364,7 +2364,7 @@ x_widget_instantiate(Lisp_Object image_instance, Lisp_Object instantiator,
        struct device *d = XDEVICE(device);
        Lisp_Object frame = DOMAIN_FRAME(domain);
        struct frame *f = XFRAME(frame);
-       char *nm = 0;
+       char *nm = 0;  // unused
        Widget wid;
        Arg al[32];
        int ac = 0;
@@ -2384,6 +2384,8 @@ x_widget_instantiate(Lisp_Object image_instance, Lisp_Object instantiator,
                LISP_STRING_TO_EXTERNAL(IMAGE_INSTANCE_WIDGET_TEXT(ii), nm,
                                        Qnative);
 
+       SXE_SET_UNUSED(nm);
+
        ii->data = xnew_and_zero(struct x_subwindow_data);
 
        /* Create a clip window to contain the subwidget. Incredibly the
index 33d1217..4e6db7f 100644 (file)
@@ -499,12 +499,16 @@ button_item_to_widget_value(Lisp_Object gui_object_instance,
        if (NILP(pgui->style)) {
                Bufbyte *intname = NULL;
                Bytecount intlen;
+
                /* If the callback is nil, treat this item like unselectable text.
                   This way, dashes will show up as a separator. */
                if (!wv->enabled)
                        wv->type = BUTTON_TYPE;
                TO_INTERNAL_FORMAT(C_STRING, wv->name,
                                   ALLOCA, (intname, intlen), Qlwlib_encoding);
+
+               SXE_SET_UNUSED(intlen);
+
                if (intname != NULL && separator_string_p(intname)) {
                        wv->type = SEPARATOR_TYPE;
                        wv->value =
index 2f17329..8348f19 100644 (file)
@@ -804,6 +804,8 @@ static Lisp_Object x_font_instance_properties(Lisp_Font_Instance * f)
                                           ALLOCA, (name_str, name_len),
                                           Qx_atom_name_encoding);
 
+               SXE_SET_UNUSED(name_len);
+
                name = (name_str ? intern((char *)name_str) : Qnil);
                if (name_str &&
                    (atom == XA_FONT ||
index e60c589..ff671fa 100644 (file)
@@ -739,7 +739,7 @@ gif_instantiate(Lisp_Object image_instance, Lisp_Object instantiator,
                                                while (row >= height)
                                                        row =
                                                            InterlacedOffset
-                                                           [++pass];
+                                                                     [++pass];
                                        }
                                eip =
                                    unwind.eimage +
index 9b98877..3174d55 100644 (file)
@@ -568,6 +568,9 @@ xlw_update_one_widget(widget_instance * instance, Widget widget,
                            composite.children[0];
                else
                        mw = (XlwMenuWidget) widget;
+
+               SXE_SET_UNUSED(mw);
+
                XtSetArg(al[0], XtNmenu, val);
                XtSetValues(widget, al, 1);     /* #### mw unused! */
        }
index 2817026..49cb179 100644 (file)
@@ -2,20 +2,7 @@
 #define INCLUDED_lwlib_internal_h_
 
 #include "lwlib.h"
-
-#ifdef USE_ASSERTIONS
-/* Highly dubious kludge */
-/*   (thanks, Jamie, I feel better now -- ben) */
-void assert_failed(const char *, int, const char *);
-# define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
-# define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
-#else
-# ifdef DEBUG_XEMACS
-#  define assert(x) ((x) ? (void) 0 : (void) abort ())
-# else
-#  define assert(x)
-# endif
-#endif
+#include "sxe-utils.h"
 
 /* This represents a single widget within a widget tree.  All the
    widgets in a widget tree are chained through the `next' field.
index 7748709..b23e76d 100644 (file)
@@ -500,6 +500,12 @@ static Boolean safe_strcmp(const char *s1, const char *s2)
        return (s1 && s2) ? strcmp(s1, s2) : s1 ? False : !!s2;
 }
 
+
+/* We only expect to use the following max function */
+#ifdef max
+#undef max
+#endif
+
 static change_type max(change_type i1, change_type i2)
 {
        return (int)i1 > (int)i2 ? i1 : i2;
index 758799a..56b5b75 100644 (file)
@@ -39,6 +39,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include "ui/X11/xmu.h"
 #include "xlwcheckboxP.h"
 
+#include "sxe-utils.h"
+
 /* by using the same size for the checkbox as for the diamond box,
  * we can let the Radio widget do the vast majority of the work.
  */
@@ -392,6 +394,7 @@ static void DrawCheck(Widget w)
        pts[5].y = -s;
        XFillPolygon(dpy, win, bot, pts, 6, Nonconvex, CoordModePrevious);
 #else
+       SXE_SET_UNUSED(bw);
        XDrawRectangle(dpy, win, gc, bx + s, by + s, bsz, bsz);
 #endif
 
index 07dbebc..4e1e5ec 100644 (file)
@@ -380,6 +380,8 @@ static void GaugeExpose(Widget w, XEvent * event, Region region)
                hgt = gw->core.width;
        }
 
+       SXE_SET_UNUSED(hgt);
+
        /* if the gauge is selected, signify by drawing the background
         * in a contrasting color.
         */
index dae3ca5..8e61905 100644 (file)
@@ -47,17 +47,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 #include "lwlib-internal.h"
 
 #include <sxe-utils.h>
+#include <sxe-memory.h>
 
 #ifdef USE_DEBUG_MALLOC
 #include <dmalloc.h>
 #endif
 
-
-/* simple, naive integer maximum */
-#ifndef max
-#define max(a,b) ((a)>(b)?(a):(b))
-#endif
-
 static char
  xlwMenuTranslations[] = "<BtnDown>:   start()\n\
 <BtnMotion>:   drag()\n\
index bcafe58..ce5d2b1 100644 (file)
@@ -572,6 +572,7 @@ static void TabsResize(Widget w)
                                tab =
                                    (TabsConstraints) (*childP)->core.
                                    constraints;
+                               SXE_SET_UNUSED(tab);
                                bw = (*childP)->core.border_width;
                                /* Don't do anything if we can't see any of the child. */
                                if (ch >= bw * 2 && ch > 0 && cw >= bw * 2
index 1d0205f..a9770c4 100644 (file)
@@ -336,7 +336,7 @@ inline static size_t
 aligned_sizeof_specifier(size_t specifier_type_specific_size)
 {
        return ALIGN_SIZE(offsetof(Lisp_Specifier, data)
-                         + specifier_type_specific_size, ALIGNOF(max_align_t));
+                         + specifier_type_specific_size, ALIGNOF(sxe_max_align_t));
 }
 
 static size_t sizeof_specifier(const void *header)
index 18c7dd9..b9499a5 100644 (file)
@@ -84,7 +84,7 @@ SXEDMP = $(SXEMACS).dmp
 testdir = $(srcdir)
 testautomdir = $(testdir)/automated
 tests_environment = $(BATCHENV) \
-       $(SXEMACS) -batch -l ${testautomdir}/test-harness.el \
+       $(SXEMACS) -batch -vanilla -l ${testautomdir}/test-harness.el \
                -f batch-test-emacs $(testautomdir)
 
 ## Use our former check target
@@ -92,19 +92,19 @@ check-am: $(SXEMACS) $(SXEDMP)
        $(tests_environment)
 
 check-formats: $(SXEMACS) $(SXEDMP)
-       $(BATCHENV) $(SXEMACS) -l ${testautomdir}/test-harness.el \
+       $(BATCHENV) $(SXEMACS) -vanilla -l ${testautomdir}/test-harness.el \
        -f batch-test-emacs $(testautomdir)/format-tests.el
 
 check-map: $(SXEMACS) $(SXEDMP)
-       $(BATCHENV) $(SXEMACS) -l ${testautomdir}/test-harness.el \
+       $(BATCHENV) $(SXEMACS) -vanilla -l ${testautomdir}/test-harness.el \
        -f batch-test-emacs $(testautomdir)/map-tests.el
 
 check-skiplists: $(SXEMACS) $(SXEDMP)
-       $(BATCHENV) $(SXEMACS) -l ${testautomdir}/test-harness.el \
+       $(BATCHENV) $(SXEMACS) -vanilla -l ${testautomdir}/test-harness.el \
        -f batch-test-emacs $(testautomdir)/skiplist-tests.el
 
 check-%: $(SXEMACS) $(SXEDMP)
-       $(BATCHENV) $(SXEMACS) -l ${testautomdir}/test-harness.el \
+       $(BATCHENV) $(SXEMACS) -vanilla -l ${testautomdir}/test-harness.el \
        -f batch-test-emacs $(testautomdir)/$*-tests.el
 
 
index 92a02f6..5570fc8 100644 (file)
 ;; Check all-completions ignore element start with space.
 (Assert (not (all-completions "" '((" hidden" . "object")))))
 (Assert (all-completions " " '((" hidden" . "object"))))
+
+
+;; Check filename/path manipulations
+(let ((cases '(("/usr/lib"  "/usr/"     "lib" "/usr" "lib"  "/usr/lib")
+              ("/usr/lib/" "/usr/lib/" ""    "/usr" "lib"  "/usr/lib")
+              ("/usr/"     "/usr/"     ""    "/"    "usr"  "/usr")
+              ("/usr"      "/"         "usr" "/"    "usr"  "/usr")
+              ("usr"       nil         "usr" "."    "usr"  "./usr")
+              ("/"         "/"         ""    "/"    "/"    "/")
+              ("."         nil         "."   "."    "."    "./.")
+              ("./"        "./"        ""    "."    "."    "./.")
+              (".."        nil         ".."  "."    ".."   "./.."))))
+  (mapcar #'(lambda (case)
+             (let* ((path          (car case))
+                    (directory     (file-name-directory path))
+                    (nondirectory (file-name-nondirectory path))
+                    (dirname       (file-dirname path))
+                    (basename      (file-basename path)))
+               (Assert (equal directory (nth 1 case)))
+               (Assert (equal nondirectory (nth 2 case)))
+               (Assert (equal dirname (nth 3 case)))
+               (Assert (equal basename (nth 4 case)))
+               (Assert (equal path (concat directory nondirectory)))
+               (Assert (equal (file-name-join directory nondirectory)
+                              (file-name-join dirname basename)))
+               (Assert (equal (file-name-join directory nondirectory) (nth 5 case)))
+               (Assert (equal (file-name-join dirname basename) (nth 5 case)))))
+         cases))
index bdbc1b4..c8e0265 100644 (file)
   (Assert (member 'AES-192-CFB (ossl-available-ciphers)))
   (Assert (member 'AES-192-OFB (ossl-available-ciphers)))
 
+  ;; blacklisted ciphers should give us an error
+  (mapc-internal
+   #'(lambda (cipher)
+       (Check-Error-Message error "use of blacklisted cipher prohibited"
+                           (ossl-cipher-mode cipher)))
+   ossl-cipher-blacklist)
+
   ;; first we check the key generator
   (let ((encstrs
         (list "foo string test bar"
               "\n"))
        (salts
         (list nil "salt" "" "toomuchsalt"))
-       (ciphers
-        (let (ciphers)
-          (mapc-internal
-           #'(lambda (cipher)
-               (let ((ciphmode (substring (symbol-name cipher) -2)))
-                 ;; Never use CFB1 and CFB8 modes.
-                 ;; Both modes tend to mangle the result strings which
-                 ;; yields an assertion error.
-                 ;; Bug in openssl?
-                 ;; -hroptatyr
-                 (unless (or (< (ossl-cipher-bits cipher) 128)
-                             (string= "B1" ciphmode)
-                             (string= "B8" ciphmode))
-                   (setq ciphers
-                         (cons cipher ciphers)))))
-           (ossl-available-ciphers))
-          ciphers))
-       (digests
-        (let (digests)
-          (mapc-internal
-           #'(lambda (digest)
-               (let ((digestname (symbol-name digest)))
-                 ;; only use digests without a dash in their names
-                 (unless (string-match "-" digestname)
-                   (setq digests
-                         (cons digest digests)))))
-           (ossl-available-digests))
-          digests))
+       (ciphers (ossl-available-ciphers))
+       (digests (ossl-available-digests))
        key iv
        enc dec)
 
                              iv (get key 'iv))
                        (setq dec ;; the encrypted text
                              (ossl-decrypt cipher enc key iv))
-
                        (eval `(Assert (string-equal ,dec ,str)))
 
                        ;; let's doubly-encrypt something